Adventurer #02
16 марта 1996

Exchange of experience - assembler programming: command emulation Clear, Cls, Pause, Plot, Draw ...

<b>Exchange of experience</b> - assembler programming: command emulation Clear, Cls, Pause, Plot, Draw ...
             EXCHANGE OF EXPERIENCE

those who know much, read the forbidden



   (C), Konstantin Breeders

   (C) NEVER Music


      Today we highlight some issues of programming in 
assembler, frequently encountered by novice programmers. 
Perhaps this article will repeat some of their contents printed 
or electronic publications, and someone may accuse our magazine 
in it. Although it's worth remembering that not everyone has 
home binder ZX-REVIEW though, would be for some

year. So who is strong in the codes and knows
many techniques, can safely leave
this article. And those who remained, we postaraemsya something 
to figure out for the common good. 

      To start touch on a few procedures that are in ROM:

      CLEAR xxxxx - Cleanup of variables BASICa, display, 
install the stack and variable RAMTOP in new values. To emulate 
this team in the codes of register pair BC must contain address 
setting the stack. In this assembly would look like:



         LD BC, xxxxx

         CALL 7855 (# 1EAF).

If the BC contains 0 then there will
only treatment variables and the display area.


      CLS - a program clearing the screen. Attributes are set, 
respectively value of the variable ATTR-P (23693). When

accessing this program, enter data into the registers is not 
necessary. It is called: 

         CALL 3435 (# 0D6B).


      CLEAR-LINES - routine cleaning
the lower N rows of the screen. In case B recorded the number 
of cleared lines: 


         LD B, N

         CALL 3652 (# 0E44).


      PAUSE - complete analog command
BASICa. The register contains a number of delays in BC, if it 
is zero then return from the procedure will be accomplished 
only while pressing:



         LD BC, pause

         CALL 7997 (# 1F3D).

Causing the program, do not forget to enable interrupts and 
enable the first mode Interrupt (IM1), otherwise from this 
procedure, you will be able to return only on the button RESET. 

      BREAK_KEY - a procedure that checks
Pressing BREAK (not to be confused
with a key SPACE). Called it:


         CALL 8020 (# 1F54).

After returning from the procedure, thrown
carry flag indicates that there was
pressed BREAK.


      PLOT - This procedures provided lights (or
quench, depending on system variables), on-screen point. In the 
registration C - the X, Register B - Y: 


         LD B, Y

         LD C, X

         CALL 8933 (# 22E5).


      DRAW - Program of the screen image a straight line. Here, 
as well as in the procedure PLOT, in registers B and C are the 
Y and X, but not fixed - the coordinates of the displacement. 
In case D sign of the shift on the X, the sign in E

offset Y. That is, if the sign of the displacement of some 
coordinates are: 255 (# FF), then the corresponding shift

will be treated with a minus-1 - a
offset will be with a plus sign; 0 - offset by a given 
coordinate is simply ignored. 


         LD B, Y

         LD C, X

         LD D, the sign of Y

         LD E, the sign for X

         CALL 9402 (# 24BA).


      CHAN-OPEN - routine used to
discovery channel. Novice programmers often forget to open a 
channel "S" for using the routine from the ROM,

then with a puzzled look on the home it will be their message, 
but still not where necessary, or, more interestingly,

pops "OUT OF SCREEN". To correct this procedure call, the 
register A must find the number in the range from 253

(# FD) to 3. These numbers are the flows
leading to the channels: key "K", the screen "S", printer "P" 
and the work area "R". Before you fluxes, leading

to the standard channels:


       253 (# FD) - opens a channel "K"

       254 (# FE) - opens a channel "S"

       255 (# FF) - opens a channel "R"

         0 (# 00) - opens a channel "K"

         1 (# 01) - opens a channel "K"

         2 (# 02) - opens a channel "S"

         3 (# 03) - opens a channel of "P".

So, again, the procedure call
battery must contain the number of flow
(See table). Moreover, the procedure should
called in the thresholds and reduced
following lines:


         LD A, the thread number

         CALL 5633 (# 1601).
And in order to print properly in
the entire screen, it is necessary to register A Record
number 2 and call the procedure CHAN-OPEN.


      SET_ADDR - calculation program addresses
familiarity on the screen. When referring to
This procedure must register B containing the coordinates X, 
and the register C coordinate Y required familiarity. Instead 
of a point entrance to the ROM, I present to you this listing

program.


         LD B, Y coordinate

         LD C, X coordinate

         CALL SET_ADDR

         ............

SET_ADDR


         LD A, B

         RRCA

         RRCA

         RRCA

         AND # E0

         LD L, A

         LD A, B

         AND # 18

         OR # 40

         LD H, A

         LD B, # 00

         ADD HL, BC

         RET.
After calling the procedure SET_ADDR address
familiarity in register HL.


      SET_ATTR - This procedure calculates the address 
attribute for the corresponding addresses from the field 
points. At the entrance to the procedure of HL register must 
contain the desired address from the field points. Also give

listing of this procedure.


         LD HL, address

         CALL SET_ATTR

         ............

SET_ATTR


         LD A, H

         RRCA

         RRCA

         RRCA

         AND # 0B

         OR # 50

         LD H, A

         RET.

Here in HL returned address attribute.

      And now, here are a few simple
techniques required for writing programs in assembler.

      Division registrovoy pairs at 2, 4, 8
etc. :


         AND A

         RR B

         RR C.

If you repeat this example, N times you divide the number by 2 
to the power N. This method can be divided and separate 
registers. 

      Multiply the register-pair can be
analogy with the previous example, replacing
RR command on the RL:


         AND A

         RL C

         RL B.

And if you need to multiply the register HL, then
it is better to make the team composition ADD:


         ADD HL, HL multiplied by two

         ADD HL, HL for four

         ADD HL, HL for eight

         ........... etc.


      Now, specific examples:
Multiplication HL six:


         ADD HL, HL

         LD B, H

         LD C, L

         ADD HL, HL

         ADD HL, BC,

multiplication of the forty-HL:


         ADD HL, HL

         ADD HL, HL

         ADD HL, HL

         LD B, H

         LD C, L

         ADD HL, HL

         ADD HL, HL

         ADD HL, BC,

A division into six:


         LD A, dividend

         LD B, # 00
LABEL SUB # 06 (divider)

         RET C

         INC B

         JR LABEL

the output of this procedure will be private
in register B (do not forget that
this method can only perform integer division ").

      If you use to add
or subtraction of register pairs team:
ADC and SBC, remember - in the calculations they
use carry flag (CARRY FLAG).
Therefore, before the ADC or SBC for
correct results, this flag should
fold. Very convenient to do this by running AND A. The content 
does not change the battery. 


      Incidentally, the ROM is SPECTRUMa
special powerful tool for a variety of mathematical 
calculations. But she has several disadvantages, because of 
which it It might be hard to use:

1.Vychisleniya made slowly enough. Therefore inappropriate to 
use a calculator, for example, to calculate the coordinates of 
the programs with dynamic vector graphics. 2.Rabota done with a 
calculator somewhat unusual way, however,

familiar to those who ever worked at PMC (programmable 
calculator. The essence of the paper is as follows: first STACK 
Calculator (not a car!) Recorded values, and then operations 
are performed with them. After which, again, with calculator 
stack is lifted result. Without going deeply into details, we 
give some entry points required for:



    A value from the stack # 2D28

    value from the stack in the A # 2DD5

    value from BC on stack # 2D2B (*)

    zanachenie from the stack in BC # 2DA2

*) When you return from this subroutine in
IY register is set to
23,610 (# 5C3A).

     Now a small example of the practical application of the 
calculator. 


     Necessary to calculate (21-Y) * 8 +3:


         LD A, 21, puts on the stack

         CALL # 2D28

         LD A, (Y); values ​​in order
         CALL # 2D28

         LD A, 8; Re computing

         CALL # 2D28

         LD A, 3, ie Y 21 March 8

         CALL # 2D28

         And now we will assume

         RST # 28; incl. calculator

         DEFB # 03; subtract

         DEFB # 04; multiply

         DEFB # 0F; we add

         DEFB # 38; off. calculator

         ; Remove the result from the stack

         CALL # 2DD5; result in A


     Try to write your own
routine computations using this formula
without using a calculator and compare
and these two procedures.

     Table of operation codes calculator
you can find in three volumes on programming in native firm 
Inforkom. And if you can not find this literature, we will 
share information in future editions of the magazine. 


     To enable this to take leave, and
if someone something is not clear or there
Questions - contact the Editor,
We will do our best and try to
help!


                 *





Other articles:

Guests - Interviews. Away Surdakar Group.

Up Work - Up Work for "PENTAGON 128": correcting spontaneous obrabatyvaniya some keys, updating Sinclair-joystick.

Interface - The answer to readers' questions on games: 48 irons, Octopus, Star Raiders 128, Rapid Response Squad, UFO.

Interface - Hacker ... Who are they? Why do they need?

Novella - "The Last Stand" (by playing "Last Battle").

Review - On updates p / o in the city of Rybinsk: Sky Hight Stuntman, Italian Supercar, Paris to Dakar, Grell and Falla, Amazing Adventurer of Robin Hood, Murray Mouse Super Cop, Gauntlet - 3 , Last Battle. Top Ten games.

Exchange of experience - assembler programming: command emulation Clear, Cls, Pause, Plot, Draw ...

Announcement - Advertising and announcements.

Presentation - On the game genre Adventure - Robin of Sherlock.

Presentation - The presentation of the game - Minesweeper.

System - On the System Software: Free Format v8.0, Next Copy v1.0, X-Copy v1.1, Srite Tools v2.0, Digital Studio v1.12, Font Maker v2.4, Universal Files Catalog v3.0. Compressors - what is it and why do I need? RAM-Packer, Screen Compressor v3.2, ASC Screen Crasher, ASC LZPack v4.5, ZXZIP Extrack Utility v1.01.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:

В этот день...   29 April