ZX Forum #04
19 ноября 1997

New top 40 procedures - scrolling display, a fusion of two images, inverting screen, rotate characters, replacement of attributes, fill a closed loop, the calculation of addresses in the screen, copy of the screen, etc.

<b>New top 40 procedures</b> - scrolling display, a fusion of two images, inverting
screen, rotate characters, replacement of attributes, fill a closed loop, the calculation of addresses in the screen, copy of the screen, etc.
(C) Kolotov Sergei g.Shadrinsk,
SerzhSoft, July, 1997.


   NEW "40 BEST PROCEDURES"


   In 1992, on pages
ZX-REVIEW published an abridged translation of the book 
Dzh.Hardmana and E. Hyuzon "top 40 procedures." The publication 
has caused the most enthusiastic responses of readers

because many budding sinkleristy just use it to finally able to 
overcome the difficulties "of the barrier machine code." But 
here is exactly five years, and old-timers were surprised ZX 
REVIEW notice in the first issue for 1997

year before the pain familiar name.

   All the numerous arguments
so convincingly set forth INFORKOMOM, of course, largely
correct. But in my (and not
only my) opinion, they have
not entitle the national magazine publishers to spend precious
Page ZX-REVIEW print already
published at the time of the material.

   Instead of heading a "retro" is much more useful and 
relevant it would be enter the section "remake." And it

print is not just the old materials, and consider them more 
deeply, to give examples more effective implementation

programs and other procedures.

   Get at least the same "40 procedures." Yes, this work is very
useful for beginners. But
slightly more experienced experts assembler will notice that the
more on obemu reducible authors procedure to consistently
it has more disadvantages
more effectively implemented,
has more "extra" commands ... Yes, some
"Better procedures" are reduced
more than twice! And: Comments are
for by the listings, which is very
difficult to understand "what
it occurs when the procedure is executed at a certain
stage. "Of course, a description
Type "C register is copied into the register B", but here is 
the semantic burden, which stands behind it,

understood is not always ...

   It will be presented libraries, which integrates
graphic procedures, re-
copied on a "forty-best." The memory footprint was reduced from 
1444 bytes to 861 bytes! Each procedure commented in detail in 
the Listing her, so to speak - "is not

on the spot. "


   Listing and hex dump.


   Many of the procedures in their work requires some pre-
certain values ​​- constants. Under these values ​​are 
allocated a special area of ​​memory addressable Tagged CONSTS. 
In this case CONSTS indicates address 23296, but, of course,

This address can be changed to any other. The length of the 
constants of 8 bytes. If any of the procedures, none of the 
constants does not change. Otherwise, would have to call them 
variables ... 

   The procedures that manipulate
coordinates of points on the screen,
ostchet is in contrast to BASIC is not a bottom-up, and vice 
versa - top-down. Such a reading of coordinates is much more 
convenient and is used in many other computers. Now you can 
specify Y coordinate from 0 to 191 (instead of

175), ie it is possible to specify the coordinates of the
dots on the screen that are in the bottom two rows to be 
allocated under the error message. When counting the same 
bottom-up maximum Y-coordinate is Y = 175, and to the lower of 
the two lines do not reach.



   BRIEF DESCRIPTION OF PROCEDURES


   1. ASRL_LF - a procedure shifts the entire screen attributes 
(color) to the left. The right column is filled with an 
attribute of the cell to at CONSTS (23,296). Length

procedure, 22 bytes (was - 23
bytes). -Translated by the address 62000 (HEX: # F230).

   2. ASRL_RG - translation of the whole
screen attributes to the right. Left
column filled with an attribute of
CONSTS. The length of the procedure, 21 bytes
(19 bytes). Located at 62022 (# F246).

   3. ASRL_UP - translation of the whole
Screen attributes up. Bottom
string attribute is populated from
CONSTS. The length of the procedure, 19 bytes
(21 bytes). Address: 62043 (# F25B).

   4. ASRL_DN - translation of the whole
Screen attributes down. Upper
attribute is to be filled out
CONSTS. Length: 20 bytes (21
bytes). Address: 62062 (# F26E).

   5. SSRL_LF - translation of the whole
display left one character
(Graphics). The right column familiarity cleared. Length of 20 
bytes (21 bytes). Address: 62082 (# F282).


   6. SSRL_RG - translation of the whole
screen to the right by one character.
The left column familiarity cleared. Length of 19 bytes (22 
bytes). Address: 62102 (# F296).


   7. SSRL_UP - translation of the whole
the screen up one character.
The bottom line of familiarity is cleared. Length 55 bytes (68 
bytes). Address: 62121 (# F2A9).


   8. SSRL_DN - translation of the whole
screen down by one character.
The top line of familiarity is cleared. Length 55 bytes (73 
bytes). Address: 62176 (# F2E0). 

   9. PSRL_LF - translation of the whole
to the left by one pixel
(Graphics). The right column of pixels is cleared. Length of 16 
bytes (17 bytes). Address: 62231 (# F317).


   10. PSRL_RG - translation of the whole
screen to the right by one pixel.
The left column of pixels is cleared. Length 17 bytes (17 
bytes). Address: 62247 (# F327).


   11. PSRL_UP - translation of the whole
the screen up one line of pixels. The bottom line of pixels
cleared. Length of 38 bytes (91
bytes). Address: 62264 (# F338).

   12. PSRL_DN - translation of the whole
screen down one line of pixels. The top row of pixels
cleared. Length of 38 bytes (90
bytes). Address: 62302 (# F35E).

   13. SCR_MRG - the merging of two
images (graphics, on the principle of
OR). Double-byte constant for
CONSTS address must contain
location, where the second picture in memory (overlay). The 
result is put on the screen. The length of the procedure, 17 
bytes (before - 21 bytes). Address of accommodation:

62,340 (# F384).

   14. SCR_INV - invert
screen (graphics, on the principle of
NOT). All the pixels change their
meaning the opposite.
The length of the procedure, 12 bytes (was -
18 bytes). Address: 62357 (# F395).

   15. SINV_UD - inverting the symbol vertically. Arrow 
pointing upwards, is directed downward, and vice versa. In the 
double-byte variable at CONSTS must contain the address of a 
variable character. The length of the procedure, 20 bytes (so 
was). Address allocation: 62,369 (# F3A1).


   16. SINV_LR - inverting the symbol horizontally. Arrow 
pointing left, is directed to the right, and vice versa. In the 
double-byte variable at CONSTS must contain the address of a 
variable character. The length of the procedure, 17 bytes (was 
- 19 bytes). Address of accommodation: 62,389 (# F3B5).


   17. SROTATE - rotate the character in a clockwise direction 
at 90 degrees. In the double-byte variable at CONSTS must 
contain the address of a variable character. Length of 26 bytes 
(previously - 42 bytes). Address: 62406 (# F3C6).


   18. ACHANGE - change the attributes of all symbols
screen. Bit operation. In
cell at CONSTS should
contain the mask bits: Bits that are set in a mask
remain in the attributes of the same, and
Bits that are masked are zero - would have zero value and the 
attributes (operation AND (not "Y "!)). The cell at CONSTS +1 
bytes must be included bits of which will be introduced in all 
the attributes of the screen, ie, if this byte is a bit turned 
on, it will be installed in all

attributes (OR operation). Length
procedure, 16 bytes (21 bytes). Address: 62432 (# F3E0).

   19. AREPLC - search the attributes of a specific value and
replacing each found a new attribute value. In
cell at CONSTS should
contain a byte value to be replaced (that look). In
cell at CONSTS +1 must be the value of the substitute bytes 
(the change). The length of the procedure, 18 bytes (22 bytes). 
Address: 62448 (# F3F0). 

   20. PAINT - fill a specific area of ​​the screen, bounded by 
a line of pixels (fill). The starting point is given by putting 
her on the X at CONSTS, and the coordinates of Y -

at CONSTS +1. If the Y coordinate greater than 191 or the point 
at these coordinates is already installed, the program urgently

interrupted. This procedure does not
moveable due to procedure calls POINT. When shading is actively
uses the stack - it remembers the coordinates of the fill 
lines. When painted over a large region of complex shape, it is 
necessary and more space in RAM - between the end BASIC-program 
and the address set by the operator CLEAR (The contents of the 
system variable RAMTOP). If memory space is not

enough, it may crash.
The procedure takes 88 bytes, and
together with the procedure POINT - 123
bytes, which is more than twice
less than the length of procedure 1992
(263 bytes!) Address PAINT: 62,466
(# F402).

   21. POINT - address calculation
point in the screen given the coordinates and status
this point (ON / OFF). Attention!
This procedure can only be used from native code
(Start of BASIC nothing
will). Before the call to
set in the register E coordinate X (0 .. 255), and in the case
D - coordinate Y (0 .. 191) tested the point. The output of the 
procedure set in the register pair HL byte address on the 
screen, which is the point, and in case C - the point in this 
mask byte (one bit set in unit). Depending on whether

including the points or not, a flag is set zero: Z - a point not
included, NZ - point is included.
If the point is established (visible)
then register A (accumulator) is identical in meaning with the 
register C, and if the point is not set, then A is reset. 
Register B is always at the exit from the procedure is zero. 
The length of the procedure, 35 bytes (the original took would 
be about 70 bytes). Address allocation: 62554 (# F45A). 

   22. PFIGURE - construction of any pre-defined shapes
(Pattern) on the screen. Coordinates of the initial (starting) 
points are given the same procedure PAINT. Template is given in 
a string variable BASIC A $ (can change to any other, slightly

adjusting assembly listing or dump). A string of characters
has the following format (a little
differs from the original):

 "5" - to reduce the X-coordinate
 "6" - to increase the Y-coordinate

       (The count goes from top to bottom)
 "7" - to reduce the Y-coordinate
 "8" - to increase the X-coordinate
 "0" - put the point.


   Any other characters are ignored. If the string variable 
does not exist or does not contain any information, then the 
program stops its work. Control the output of the initial 
Ykoordinaty not, because part of the figure can still be seen. 

   Therefore, checking the output for
off-screen to put in myself
cycle of forming a pattern. Ability to 'wrap-round' is 
preserved, ie still, when the output

X-coordinates for the left side of the screen, the pattern 
appears to the right, and vice versa.


   The procedure is not moveable.
Length PFIGURE: 98 bytes, and is used together with routine
POINT - 133 bytes, which is still much smaller than the 
original (196 bytes). Address: 62589 (# F47D).

If the "open" procedure call
POINT, you PFIGURE be moved and will occupy about 125 bytes!

   23. PSCALER - copy of the screen to another area of ​​the 
same screen with a possible increase up to X and / or Y. 
Constants are used: 

Address Name Comment

CONSTS X1_OLD one of the two initial X-coordinate pryamoug-ka
CONSTS +1 Y1_OLD one of the two initial Y-coordinate pryamoug-ka
CONSTS +2 X2_OLD one of the two initial X-coordinate pryamoug-ka
CONSTS +3 Y2_OLD one of the two initial Y-coordinate pryamoug-ka
CONSTS +4 XSCALE magnitude increase in X
CONSTS +5 YSCALE magnitude of increase in Y
CONSTS +6 X_NEW coordinates of the upper-left corner of the 
screen, CONSTS +7 Y_NEW which is made up.



   Coordinates of the initial rectangle for copy set in the 
constants X1_OLD, Y1_OLD, X2_OLD, Y2_OLD, moreover, may

arranged in any order. The procedure itself will determine the 
smallest and largest coordinates.


   Emergency exit procedures
occurs in the following cases:

1. XSCALE = 0 - zoom scale

   on X is zero
2. YSCALE = 0 - zoom scale

   the Y equals zero
3. Y_NEW> 191 - the new coordinate

   Y beyond the screen
4. Y1_OLD> 191 - the old coordinates
   that Y1 beyond eq
   wound
5. Y2_OLD> 191 - the old coordinates
   Y2 that goes beyond the equivalence
   wound.


   Like the original, the program does not control that would 
check the possibility of placing new picture on the screen. If

this does not work, you may
crash.

   When performing the procedure at first throws a stack bit
image of the copied rectangle
screen and then draws it to the new location, increasing
if necessary. Therefore, if
on the stack is not enough space, then
As in the procedure PAINT, can occur hangs, reset,
Error ...

   If you want to copy a piece of the screen had the
same size as a given, then
necessary to establish the scale of
1:1 - add a constant XSCALE
and YSCALE on yedinichku. When you double the amount there 
should be dvoechki, and so on ... 

   The procedure is not moveable
from the use of sub POINT. PSCALER occupies 174
bytes, and with POINT - 209
bytes. In any case, it is much smaller than the original - 335
B! Address allocation: 62,687
(# F4DF).


   So, here you are familiar with and
new implementation of the "better procedures". But I advise not 
to have illusions - some of the procedures it should be 
possible to reduce more ... True, this will inevitably have to 
sacrifice something: the speed performance, transferability 
and, finally, just the time spent. I hope that presented in 
this paper the program will be useful, in extreme cases - may 
be, they just touch up your thoughts on kakienibud ... 
Beginners can try to compare the procedure in 1992 with new 
study principles for creating more effective programs, tools 
for the integration of many different procedures into one big 
library ... Experienced programmers are the same, may get a lot 
of fun, laughing mischievously over this work. But it is also

Plus: amuse people - very
the right thing! So I wish you all
readers to enjoy working with LOVED SPECCY!
140.
;------------------------------------------------- 
-------------; , March 1940 New Best Routines (graphic);

3 (c) SerzhSoft, Shadrinsk, may-june, 1997;
; Old length: 1444 bytes new length: 861 bytes;
;------------------------------------------------- 
-------------; 

        ORG 62000; address assembly
;------------------------------------------------- 
-------------; CONSTS EQU 23296; buffer address constant (8 
bytes) ;------------------------------------------------- 
-------------; ; Shift attributes to the left (22 <= 23)

;------------------------------------------------- 
-------------; ASRL_LF


        LD DE, # 5800; DE = address of first byte of the 
attribute LP_ASLF LD H, D; DE copied in HL


        LD L, E; and HL increased by one:

        INC HL; HL = address of the second byte of attributes

        LD BC, # 001F; <line length attribute> - 1

        LDIR; shift of the attributes of the left

        LD A, (CONSTS); fill color after the shift

        LD (DE), A; set a new attribute

        INC DE; the transition to the next line below

        LD A, D; if the attributes have already run out,

        CP # 5B; and we came upon a printer buffer,

        JR C, LP_ASLF; then STOP, otherwise continue to shift

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Shift attributes to the right (21 <= 23)

;------------------------------------------------- 
-------------; ASRL_RG


        LD DE, # 5AFF; address of the last byte of attributes
LP_ASRG LD H, D; DE copied in HL -

        LD L, E; the last byte of the line attributes

        DEC HL; the penultimate line of bytes of attributes

        LD BC, # 001F; <line length attribute> - 1

        LDDR; shift of the attributes of the right

        LD A, (CONSTS); fill color after the shift
        LD (DE), A; set a new attribute

        DEC DE; the transition to the next line from the top

        BIT 3, D; if we are still in the attributes,

        JR NZ, LP_ASRG; then repeat the cycle for the lyrics. 
line 

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Shift attributes up (19 <= 21)

;------------------------------------------------- 
-------------; ASRL_UP


        LD HL, # 5820, and the address of second-line attributes

        LD DE, # 5800; address of the first line of the 
attributes 

        LD BC, # 02E0 3; move: 23 lines of 32 bytes

        LDIR 3, shifting the bottom line up 23

        LD A, (CONSTS); color to fill the bottom line
LP_ASUP LD (DE), A; set a new attribute

        INC E; if you have filled the whole last line

        JR NZ, LP_ASUP; (E = 0), interrupts the cycle

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Shift attributes down (20 <= 21)

;------------------------------------------------- 
-------------; ASRL_DN


        LD HL, # 5ADF; address of the end of the second line 
below 

        LD DE, # 5AFF; address of the end of the bottom line

        LD BC, # 02E0 3; move: 23 lines of 32 bytes

        LDDR 3, shifting the line down the top 23

        LD A, (CONSTS); color to fill the top line
LP_ASDN LD (DE), A; set a new attribute

        DEC E; if you come down to the very first byte

        JR NZ, LP_ASDN; field attributes (E = 0) then STOP

        LD (DE), A; and set the byte

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Shift left one character (20 <= 21)

;------------------------------------------------- 
-------------; SSRL_LF


        LD DE, # 4000; top of graphics
LP_SSLF LD H, D; address of the first

        LD L, E; byte line

        INC HL; address of the second byte of the line

        LD BC, # 001F; how many bytes to shift

        LDIR; line shift to the left by 1 byte

        XOR A; resets the battery and have brought

        LD (DE), A; the last (right) bytes line

        INC DE; the transition to the next line (below)

        LD A, D; if the attributes

        CP # 58; "not yet seen"

        JR C, LP_SSLF; then repeat the cycle for the lyrics. 
line 

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Right shift by one character (19 <= 22)

;------------------------------------------------- 
-------------; SSRL_RG


        LD DE, # 57FF; the last byte in the field of graphics
LP_SSRG LD H, D; address of the last byte

        LD L, E; current line

        DEC HL; address penultimate bytes

        LD BC, # 001F 3; shift: 31 bytes

        LDDR; shift of the line graphs to the right

        XOR A; clear the battery and then

        LD (DE), A; first (left) bytes of the current line

        DEC DE; the transition to the next line above

        BIT 6, D; if we did not "come across" on the ROM

        JR NZ, LP_SSRG; then continue to twist the loop

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Shift up one character (55 <= 68)

;------------------------------------------------- 
-------------; SSRL_UP


        LD DE, # 4000; top display area
LP_SSU1 PUSH DE; stores the address line on the stack

        LD BC, # 0020 3 line - 32 bytes

        LD A, E; The register address is DE

        ADD A, C; top line. The Register

        LD L, A; HL to get the address

        LD A, D; line lying below with step 8.

        JR NC, GO_SSUP; For this sensitive E pribav
        ADD A, # 3 August, trolled 32 and fills in L. If 
proGO_SSUP LD H, A; emanated overflow, then H = D +8 

        LDIR 3; transfer line (32 bytes)

        POP DE; restore the address of the start line

        LD A, H; check: Is not it time we closed
        CP # 58 3; glyatsya? (Transferred all 23 series)

        JR NC, LP_SSU2; if so, the transition to clean

        INC D ;---------------------------------;

        LD A, D; DOWN_DE

        AND # 07; standard sequence

        JR NZ, LP_SSU1; teams to go on line

        LD A, E; down in the display area

        ADD A, # 20, (to register DE)

        LD E, A;

        JR C, LP_SSU1; input: DE - address line

        LD A, D; output: DE - address line below

        SUB # 08; battery is used

        LD D, A;

        JR LP_SSU1 ;---------------------------------;
LP_SSU2 XOR A; cleaning battery
LP_SSU3 LD (DE), A; and with his help -

        INC E; cleaning of one line image

        JR NZ, LP_SSU3 3 total: 32 bytes

        LD E, # E0; move to the next

        INC D; (lower) line image

        BIT 3, D; filled the entire last series?

        JR Z, LP_SSU2; if not, continue to fill

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Shift down by one character (55 <= 73)

;------------------------------------------------- 
-------------; SSRL_DN


        LD DE, # 57FF; address of the last byte of graphics
LP_SSD1 PUSH DE; store the address of the end of the line

        LD BC, # 0020, the length of one line image

        LD A, E; in register HL

        SUB C; we address

        LD L, A; end of the line

        LD A, D; overlying

        JR NC, GO_SSDN; initial steps

        SUB # 08; of 8 pixels (lines):
GO_SSDN LD H, A; HL = from copy; DE = where

        LDDR; transfer line graphs

        POP DE; restore address the end of the line

        BIT 6, H; if we are no longer in the screen,

        JR Z, LP_SSD2; then go to clean up

        LD A, D ;---------------------------------;

        DEC D; UP_DE

        AND # 07; standard sequence

        JR NZ, LP_SSD1; teams to go on line

        LD A, E; up in the display area

        SUB # 20; (to register DE)

        LD E, A;

        JR C, LP_SSD1; input: DE - address line

        LD A, D; output: DE - address line above

        ADD A, # 08; battery is used

        LD D, A;

        JR LP_SSD1 ;---------------------------------;
LP_SSD2 XOR A; cleaning battery
LP_SSD3 LD (DE), A; cleaning of one

        DEC E; image line:

        JR NZ, LP_SSD3 3 (31 bytes)

        LD (DE), A; clear the very first byte of the line

        LD E, # 1F; move to the next (upper)

        DEC D; through a number of the eight lines

        BIT 6, D; we have not got the ROM?

        JR NZ, LP_SSD2; if not, then clear the next

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Left shift by one pixel (16 <= 17)

;------------------------------------------------- 
-------------; PSRL_LF


        LD HL, # 57FF; address of the last byte of graphics
LP_PSL1 OR A; reset the carry flag CF

        LD B, # 20 March, in the same line - 32 bytes
LP_PSL2 RL (HL); CF <- [Sliding bytes] <-CF (left)

        DEC HL; go to the previous byte line

        DJNZ LP_PSL2; shift cycle for one line

        BIT 6, H; we are still in the screen?

        JR NZ, LP_PSL1; if so, shift the trail. line

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Right shift by one pixel (17)

;------------------------------------------------- 
-------------; PSRL_RG


        LD HL, # 4000; address the first byte of graphics

        LD C, # C0 3; shift - 192 lines
LP_PSR1 OR A; CF = 0 for an empty column on the left

        LD B, # 20, the number of bytes in one line
LP_PSR2 RR (HL); shift one byte to the right

        INC HL; next byte of image line

        DJNZ LP_PSR2 3, we shift the whole line - 32 bytes

        DEC C; decrease the counter lines

        JR NZ, LP_PSR1; if you have moved all the lines, then 
STOP 

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Upward shift by one pixel (38 <= 91)

;------------------------------------------------- 
-------------; PSRL_UP


        LD DE, # 4000; address of the beginning of graphics 
(verh. line) LP_PSU1 LD H, D; copied the address of the 
beginning 

        LD L, E; line graphs in HL

        LD BC, # 0020, the size of a single line

        INC H ;---------------------------------;

        LD A, H; DOWN_HL

        AND # 07; standard sequence

        JR NZ, GO_PSUP; teams to go on line

        LD A, L; down in the display area

        ADD A, C; (for the register HL)

        LD L, A; (here ADD A, C instead of ADD A, # 08)

        JR C, GO_PSUP; Input: HL - address line

        LD A, H; Output: HL - address line below

        SUB # 08; battery is used

        LD H, A ;---------------------------------;
GO_PSUP PUSH HL; store address the bottom line

        LDIR; transfer images from the bottom-up

140. POP DE; DE - address the bottom line

        LD A, H; we are still in the field of graphics

        CP # 58; or have stumbled upon the attributes?

        JR C, LP_PSU1; if still graphics, then repeat

        XOR A; zero out the battery and its
LP_PSU2 LD (DE), A; help clear the most

        INC E; bottom line of the image

        JR NZ, LP_PSU2; after the shift the screen up

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Shift down by one pixel (38 <= 90)

;------------------------------------------------- 
-------------; PSRL_DN


        LD DE, # 57FF; address of the last byte of graphics
LP_PSD1 LD H, D; copied the address of the last

        LD L, E; byte line HL

        LD BC, # 0020; width of one image line

        LD A, H ;---------------------------------;

        DEC H; UP_HL

        AND # 07; standard sequence

        JR NZ, GO_PSDN; teams to go on line

        LD A, L; up in the display area

        SUB C; (for the register HL)

        LD L, A; (SUB C here instead SUB # 08)

        JR C, GO_PSDN; Input: HL - address line

        LD A, H; Output: HL - address line above

        ADD A, # 08; battery is used

        LD H, A ;---------------------------------;
GO_PSDN PUSH HL; store address the top line

        LDDR; tolerated a line from the top - down

        POP DE; address the top line has become the current

        BIT 6, H; not yet got into the ROM -

        JR NZ, LP_PSD1; continue the cycle of transmission lines

        XOR A; clear the battery and its
LP_PSD2 LD (DE), A; help - the top-line

        DEC E; image after the shift

        JR NZ, LP_PSD2; the entire screen down

        LD (DE), A; cleaning of the first byte

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Merging the images (17 <= 21)

;------------------------------------------------- 
-------------; SCR_MRG


        LD HL, (CONSTS); URL for an image taken from a cell

        LD DE, # 4000; address display area
LP_SCRM LD A, (DE); bytes screenshots

        OR (HL); "leaked" to the byte image in memory

        LD (DE), A; and placed back into the screen

        INC HL; next byte images in the memory

        INC DE; next byte of display area

        LD A, D; checking for completion

        CP # 58; display area

        JR C, LP_SCRM; if not ended, then repeat

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Inverting Screen (12 <= 18)

;------------------------------------------------- 
-------------; SCR_INV


        LD HL, # 57FF; last byte of the display area
LP_SCRI LD A, (HL); took bytes screenshots

        CPL; proinvertirovali it

        LD (HL), A; and put back

        DEC HL; move to the top of

        BIT 6, H; if "handled" through the origin,

        JR NZ, LP_SCRI; then STOP, otherwise twist cycle

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Inverting a vertical (20)

;------------------------------------------------- 
-------------; SINV_UD


        LD HL, (CONSTS); taken from the cell address of the 
symbol 

        LD D, H; save this

        LD E, L; address in DE

        LD B, # 08; in the symbol - 8 bytes
LP_SIU1 LD A, (HL); take a one-byte characters

        PUSH AF; and pushed on the stack

        INC HL; the transition to the next byte characters

        DJNZ LP_SIU1; repeat the cycle for the eight bytes

        LD B, # 08; how many bytes will be read
LP_SIU2 POP AF; extract the bytes from the stack in reverse
        LD (DE), A; Mr. procedure written in a symbol

        INC DE; next byte characters

        DJNZ LP_SIU2; twist cycle eight times

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Inverting symbol horizontally (17 <= 19)

;------------------------------------------------- 
-------------; SINV_LR


        LD HL, (CONSTS); take out the cell address of the symbol

        LD B, # 08; modify: 8 bytes
LP_SIL1 LD A, # 01; A set bit zero to 1
LP_SIL2 RR (HL); rotate byte characters left

        RLA; and battery - to the left (via CF)

        JR NC, LP_SIL2; until a zero bit will not appear in CF

        LD (HL), A; write the modified byte

        INC HL; next byte characters

        DJNZ LP_SIL1; repeat cycle 8 times

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Rotation of the symbol in a clockwise 
direction (26 <= 42) 
;------------------------------------------------- 
-------------; SROTATE


        LD HL, (CONSTS); address the rotating character of the 
cell 

        LD B, # 08; 8 vertical columns in the symbol
LP_SRO1 PUSH HL; saved address on the stack

        LD A, # 80, included the seventh bit in the accumulator
LP_SRO2 RR (HL); rotate the bytes of the symbol to the right

        RRA; and one bit of each byte

        INC HL; gradually fill the battery

        JR NC, LP_SRO2; until 7 incl. bits do not fall into the 
CF 

        POP HL; restore the address of the symbol

        PUSH AF; satellite. column - character on the stack

        DJNZ LP_SRO1; twist cycle by the number of columns

        LD B, # 08; steel column lines - bytes
LP_SRO3 POP AF; pulls off bytes from the stack

        LD (HL), A; and it is - has a new line character

        INC HL; next byte characters

        DJNZ LP_SRO3; repeat the number of lines (8 bytes)

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Change the attribute (16 <= 21)

;------------------------------------------------- 
-------------; ACHANGE


        LD HL, (CONSTS); L - mask (AND), H - additive (OR)

        LD DE, # 5AFF; the last byte of attributes
LP_ACHN LD A, (DE); take the current value of the attribute

        AND L; threw extra bits

        OR H; added the necessary

        LD (DE), A; and recorded in the old place

        DEC DE; move to the top attributes

        BIT 3, D; and not a schedule already?

        JR NZ, LP_ACHN; if not, then twist cycle

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Change attribute (18 <= 22)

;------------------------------------------------- 
-------------; AREPLC


        LD DE, (CONSTS); E - what to look for, D - than to 
replace 

        LD HL, # 5AFF; the last byte of attributes
LP_ARPL LD A, (HL); take a byte from the field attributes

        CP E; Is not that looking for?

        JR NZ, GO_ARPL; not jump change

        LD (HL), D; yes, change to a new value
GO_ARPL DEC HL; move to the top region Tee attributes

        BIT 3, H; attributes have not yet come to an end?

        JR NZ, LP_ARPL; if not, then check the next

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Paint circuit (123 <= 263)

, 123 = 88 +35 - together with the procedure POINT
;------------------------------------------------- 
-------------; PAINT


        LD HL, (CONSTS); coordinates of the starting point

        LD A, H; check the Y coordinate for output

        CP # C0; beyond the screen:

        RET NC; if Y> = 192, then the extra output

        SBC A, A; because CF = 1, then SBC A, A gives A = # FF -

        PUSH AF; this will be the end of the stack pointer

        PUSH HL; remember the coordinates of first point
LP_PNT1 POP DE; take from the stack X, Y et seq. point

        INC D; if Y = # FF, then the stack is exhausted,

        RET Z; and then exit the procedure

        DEC D; restores. Y value

        CALL POINT; check point with coord-mi (E, D)

        JR NZ, LP_PNT1; if enabled, the transition to the next.

        EX AF, AF '; A' = 0, CF = 0 - aux. signs
LP_PNT2 LD A, E; took the X coordinate

        OR A; if it is zero,

        JR Z, GO_PNT1; then jump through the backward movement

        DEC E; differently - reduce the X coordinate

        CALL POINT; and check the previous point

        JR Z, LP_PNT2; if "no obstacle", repeat
LP_PNT3 INC E; the transition to point to the right (X = X +1)

        JR Z, LP_PNT1; if X> 255, ff. point from the stack
GO_PNT1 CALL POINT; check the following right point

        JR NZ, LP_PNT1; if enabled, the trace. from the stack

        LD A, (HL); if the point is not established,

        OR C; then take a byte from the screen, turn on

        LD (HL), A; the right bits and put back

        LD A, D; check coordinate Y:

        OR A; if it is zero,

        JR Z, GO_PNT4; do not check the lying. above the line

        DEC D; the transition to the line above (Y = Y-1)

        CALL POINT; test points overlying

        JR Z, GO_PNT2; if not included, the transition

        EX AF, AF '; have auxiliary flags

        LD A, B; allowed to memorize a point in the stack

        JR GO_PNT3; the transition to the continuation of
GO_PNT2 EX AF, AF '; have auxiliary flags

        INC A; if A> 0, it means a ban

        DEC A; to save the new coordinates

        JR NZ, GO_PNT3; point in the stack -> jump

        LD A, C; otherwise - do not store the coordinates
        PUSH DE; coordinates, but one shoves a stack
GO_PNT3 EX AF, AF '; retained support flags

        INC D; return to the bottom line
GO_PNT4 LD A, D; check coordinate Y:

        CP # BF; if - the latter (below do not happen)

        JR NC, LP_PNT3; the transition to the next. point to 
the right 

        INC D; otherwise - get down on the line below

        CALL POINT; check the underlying point

        JR Z, GO_PNT5; if not included, the transition

        EX AF, AF '; have auxiliary flags

        AND A; allowed to memorize a point in the stack

        JR GO_PNT6; the transition to the continuation of
GO_PNT5 EX AF, AF '; have auxiliary flags

        JR C, GO_PNT6; if you can not save, then go

        SCF; forbid save point on the stack

        PUSH DE; but one point on the stack pushes
GO_PNT6 EX AF, AF '; retained support flags

        DEC D; return to the top of the line

        JR LP_PNT3; the transition to the next point on the 
right ;------------------------------------------------- 
-------------; ; Check the status of the point and the 
calculation of addresses in the screen (35 <= 70) 
;------------------------------------------------- 
-------------; POINT; if the point is disabled, ZF = 1 (Z), 
otherwise, ZF = 0 (NZ) 

        LD B, # 07; commonly used mask (# 07)

        LD A, D; took the Y-coordinate

        RRA; divided it into 8

        SCF; and began to form

        RRA; byte

        RRA; address of the pixel

        AND # 5F; in the screen (register H):

        LD H, A;% 010yyyyy

        XOR E; then form the

        AND B; low byte

        XOR E; address

        RRCA; pixel

        RRCA; in the screen

        RRCA; (case L):

        LD L, A;% yyyxxxxx

        LD A, D; finish

        XOR H; formation

        AND B; High Byte

        XOR H; address of the pixel

        LD H, A; in the screen (register H)

140. LD A, E; begin forming

        AND B; mask pixel in a byte

        LD B, A; image (corresponding

        LD A, # 80; bit included). Turn on the seventh bit

        JR Z, GO_PNT; if this is just what is necessary,
LP_PNT RRCA; then jump through a shift

        DJNZ LP_PNT; included bits to the right
GO_PNT LD C, A; save mask inc. bit in the reg. C

        AND (HL); check the pixel in the screen

        RET; exit procedures
;------------------------------------------------- 
-------------; ; Building templates (98 <= 196)

; 98 35 = 133 - together with the procedure POINT
;------------------------------------------------- 
-------------; PFIGURE


        LD DE, (CONSTS); coordinates of the starting point

        LD HL, (23627), the start address of the variables BASIC
LP_PFG1 LD A, (HL); the first byte of a variable

        INC HL; the transition to the next byte

        LD BC, # 0012, the size of the loop variable FOR ... 
NEXT 

        CP # E0; found a loop variable FOR ... NEXT?

        JR NC, GO_PFG2; if yes, go to the next. Vac.

        CP # 80; BASIC variables over?

        RET Z; if so, exit procedures

        LD C, # 05; long numbers. Vac. single characters.

        JR NC, GO_PFG3; array or a number. per. with several. 
Sim. 

        CP # 60, the number of changes. single characters. in a 
name? 

        JR NC, GO_PFG2; yes, go to the next variable

        CP "A"; the name of a character variable (A $)

        JR Z, GO_PFG4; cheers, still found and and and and!
GO_PFG1 LD C, (HL); obtain

        INC HL; the size of the study

        LD B, (HL); variable

        INC HL; in bytes, and
GO_PFG2 ADD HL, BC; adding to the address

        JR LP_PFG1; proceed to the next variable
GO_PFG3 BIT 5, A; array variable?

        JR Z, GO_PFG1; yes, jump over it
LP_PFG2 BIT 7, (HL); check at the end it is the number. per.

        INC HL; next byte name

        JR NZ, GO_PFG1; name has ended, the transition

        JR LP_PFG2; continue to see the name
GO_PFG4 LD C, (HL); have long found

        INC HL; string variable

        LD B, (HL); with data on the pattern
LP_PFG3 INC HL; next character template data

        LD A, B; check: Do not run out

        OR C; we all data on the pattern?

        RET Z; if so (length = 0) then exit

        DEC BC; reduced the length of

        LD A, (HL); took the character template data

        CP "0" and not "put a point?

        JR NZ, GO_PFG6; if not, go to the continuation of

        LD A, D; y-coordinate of current point

        CP # C0; if the outside bottom edge of the

        JR NC, LP_PFG3; screen, the point does not represent

        PUSH HL; otherwise - keep some

        PUSH BC; registers, not to spoil

        CALL POINT; call validation points

        LD A, (HL); on the calculated values

        OR C; image point on the screen

        LD (HL), A; using the fact that HL = address

        POP BC; and C register contains a mask point

        POP HL; restore the preserved-nye registers

        JR LP_PFG3; processing trace. wildcard
GO_PFG6 SUB "5" to shift the pen to the left?

        JR NZ, GO_PFG7; if not, leave it as is

        DEC E; otherwise - to reduce the x-coordinate
GO_PFG7 DEC A; move down?

        JR NZ, GO_PFG8; no transition

        INC D; yes, we increase the y-coordinate
GO_PFG8 DEC A; direction "up"?

        JR NZ, GO_PFG9; not jump

        DEC D; yes, reduce the y-coordinate
GO_PFG9 DEC A; may need to move to the right?

        JR NZ, LP_PFG3; not, go to the next. character of 
Chablis. 

        INC E; yes, we increase the x-coordinate

        JR LP_PFG3; and proceed to the next. character of 
Chablis. ;------------------------------------------------- 
-------------; ; Increase the screen and up (174 <= 335)

; 174 35 = 209 - together with the procedure POINT
;------------------------------------------------- 
-------------; PSCALER


        LD HL, (CONSTS +4); magnitude of increase in x and y

        INC L; checking x-coordinate

        DEC L; to zero

        RET Z; if equal to 0, the error (output)

        INC H; checking the y-coordinate

        DEC H; to zero

        RET Z; if equal to 0, the error (output)

        LD HL, (CONSTS +6); new x-, y-coordinate ("where")

        LD A, # BF; maximum possible y-coordinate

        CP H; check the new y-coordinate

        RET C; if not at the screen - Output

        LD HL, (CONSTS); x1-, y1-coordinate ("source")

        CP H; check y1 by entering the screen

        RET C; if behind a screen, then exit

        LD DE, (CONSTS +2); x2-, y2-coordinate ("source")

        CP D; y2 is the screen?

        RET C; if not, exit procedures

        LD A, E; coordinate x2

        CP L; compared with the coordinate x1

        JR NC, GO_PSC1; if L <E, then everything is fine

        EX DE, HL; otherwise - have changed their places
GO_PSC1 LD A, D; coordinate y2

        CP H; compared with the coordinate y1

        JR NC, GO_PSC2; if H  0, the CF flag turned on

        RR B; "twist" this bit in the register B

        DEC C; decrements the number of bits

        JR NZ, GO_PSC3; if not zero, then jump

        PUSH BC; else - throws a stack

        INC SP; register B (only 1 byte)

        LD C, # 08; and set the counter bits
GO_PSC3 LD A, E; current x-coordinate

        DEC E; moving through the left

        CP L; check on end line

        JR NZ, LP_PSC2; twist cycle through

        EX AF, AF '; recover the value of

        LD E, A; x-coordinate of the alternative A

        LD A, D; current y-coordinate
        DEC D;'re going to line up

        CP H; it was the last line?

        JR NZ, LP_PSC1; if not, then we turn loop on lines

        LD A, # 08; the number of bits in a byte

        SUB C; A = number of occupied bits in reg. B

        JR NZ, GO_PSC4; if not zero, then jump

        LD A, C; A = C = 8 - number of bits in a byte

        DEC SP; remove from the stack the last

        POP BC; abandoned there Bytes
GO_PSC4 LD C, A; how many bits of data seq. byte

        LD DE, (CONSTS +6); new x-, y-coordinate ("where")
LP_PSC3 LD A, E; store x-coordinate of the start

        EX AF, AF '; line image A'

        EXX; transition to alternative registries

        LD E, C; it will count for points x
LP_PSC4 EXX; back to Main. register set

        EX AF, AF '; transition to Alt. flag. Register

        RLC B; flag CF - print / ne_vyv. point

        EX AF, AF '; returned to normal flags

        PUSH BC; store bytes of data and Acc. bits

        LD HL, (CONSTS +4); magnitude of increase in x and y

        LD B, H; kept the magnitude of increases

        LD C, L; in registers C and B (x and y)

        PUSH DE; keep you coordinates (the loop on lines)
LP_PSC5 PUSH DE; store coordinates you (the cycle on points)
LP_PSC6 PUSH HL; save registers HL and BC

        PUSH BC; before calling the procedure POINT

        CALL POINT; calculation of addresses in the screen and 
mask 

        LD A, C; mask points (bit included)

        POP BC; BC restored from the stack

        EX AF, AF '; check alternate CF flag

        JR C, GO_PSC5; if it is enabled, then jump

        EX AF, AF '; keep this flag CF

        CPL; invert the mask bits point

        AND (HL); and use it to reset the pixel

        JR GO_PSC6; the transition to the continuation of
GO_PSC5 EX AF, AF '; CF flag again make alternative nym

        OR (HL); include pixel
GO_PSC6 LD (HL), A; write bytes changed in the screen

        POP HL; restore HL (sch. scale)

        INC E; the transition to the lyrics. point in the line 
of the screen 

        DEC L; decrements the scale of x

        JR NZ, LP_PSC6; is not zero, continue to cycle

        LD L, C; recover the value of x-scale.

        POP DE; Restore, it coordinates the start line

        INC D; the transition to the next line in the screen

        DEC H; decrements the scale of y

        JR NZ, LP_PSC5; and steep until it reaches 0

        LD H, B; recover the value of y-scale.

        POP DE; Restore, it coordinates the start point

        LD A, E; the transition to the beginning of the next

        ADD A, L; rectangle depicting

        LD E, A; one point of the image (right)

        POP BC; restore the byte to Dr. X and the counter

        DEC C; decrements of bits in a byte B

        JR NZ, GO_PSC7; if there are bits, then the transition

        DEC SP; otherwise - are read from the stack

        POP BC; next byte of data in the register B

        LD C, # 08; set the counter bits
GO_PSC7 EXX; transition to alternative registries

        DEC E; decrements points in a row

        JR NZ, LP_PSC4; if you still have a point, then run 
around 

        EXX; back to Main. register set

        EX AF, AF '; restore from an alternate

        LD E, A; battery x-coordinate lines

        LD A, D; the transition to the beginning of the next 
straight         ADD A, H; gon, depicts one


        LD D, A; point of the image (down)

        EXX; transition to alternative registries

        DEC B; reduce the row count sprite

        EXX; back to Main. register set

        JR NZ, LP_PSC3; cycle if the line did not end

        RET; exit procedures
;------------------------------------------------- 
-------------; 3; end of 1940 New Best Routines (graphic);

;------------------------------------------------- 
-------------; 2


    Hex dump of the library


    F270: 5A 11 FF 5A 01 02 E0 ED: F6

    F278: B8 3A 00 5B 12 1D 20 FC: 02

    F280: C9 12 November 2000 40 62 6B 23: 8E

    F288: 01 1F 00 ED B0 AF 13 December: 0B

    F290: 7A FE 58 38 F0 C9 11 FF: 53

    F298: 57 62 6B 2B 01 1F 00 ED: E6

    F2A0: B8 AF 12 1B CB 72 20 F1: 74

    F2A8: C9 D5 40 November 2000 20 January 2000: AA

    F2B0: 7B 81 6F 7A C6 30 February 2008: 87

    F2B8: 67 ED B0 D1 7C FE 58 30: 81

    F2C0: December 14 7A E6 July 20 E5 7B: BF

    F2C8: C6 20 5F 38 DF 7A D6 08: 6E

    F2D0: 57 18 D9 AF 12 1C 20 FC: 03

    F2D8: 1E E0 14 CB 5A 28 F4 C9: E6

    F2E0: 11 FF 57 D5 20 January 2000 7B: AA

    F2E8: 91 6F 7A 30 February D6 August 1967: CB


    F2F0: ED B8 D1 CB 74 December 28 7A: 4B

    F2F8: 15 July 1920 E6 E6 7B D6 20: 63

    F300: 5F 38 E0 7A C6 18 August 1957: 21

    F308: DA AF 12 1D 20 12 FC 1E: FF

    F310: 1F CB 15 72 20 F3 C9 21: 71

    F318: FF 57 B7 CB 20 June 1916 2B: 4A

    F320: 10 FB CB 74 20 21 F4 C9: 5B

    F328: 00 40 0E C0 B7 20 June CB: D1

    F330: 1E 23 October FB 0D 20 F5 C9: 5A

    F338: November 2000 40 62 6B 20 January 2000: 6A

    F340: 24 7C E6 20 July 2009 7D 81: E7

    F348: 6F 38 04 7C D6 August 1967 E5: 8C

    F350: ED B0 D1 7C FE 58 38 E3: 9E

    F358: AF 12 1C 20 FC C9 11 FF: 1D

    F360: 57 62 6B 20 January 2000 7C 25: 39

    F368: E6 20 July 2009 7D 91 6F 38: 26

    F370: 04 7C C6 August 1967 E5 ED B8: A2

    F378: D1 CB 74 20 E4 AF 12 1D: 5D

    F380: 20 FC 12 C9 2A 00 5B 11: 00

    F388: 00 40 1A B6 23 December 1913 7A: 4D

    F390: FE 58 38 F6 C9 21 FF 57: 47

    F398: 7E 2F 77 2B CB 74 20 F8: 31

    F3A0: C9 2A 00 5B 5D 54 June 2008: A0

    F3A8: 7E F5 Oct. 23 FB June 2008 F1: 3B

    F3B0: 13 December 1910 FB C9 2A 00 5B: 21

    F3B8: June 2008 3E 01 CB 1E 17 30: 28

    F3C0: FB 1977 October 23 F5 C9 2A 00: 40

    F3C8: 5B June 2008 E5 3E 80 CB 1E: B0

    F3D0: 1F 23 30 FA E1 F5 10 F3: 08

    F3D8: June 2008 F1 1977 Oct. 23 FB C9: 38

    F3E0: 2A 00 5B 11 FF 5A 1A A5: 81

    F3E8: B4 12 1B CB 5A 20 F7 C9: C1

    F3F0: ED 5B 00 5B 21 FF 5A 7E: 7E

    F3F8: BB 20 January 1972 2B CB 5C 20: AB

    F400: F6 C9 2A 00 5B 7C FE C0: 72

    F408: D0 9F F5 E5 D1 14 15 C8: 07

    F410: CD 5A F4 20 F7 08 7B B7: 70

    F418: 28 September 1D CD 5A F4 28 F6: 1993

    F420: 1C 28 E9 CD 5A F4 20 E4: 60

    F428: 7E B1 77 7A B7 28 13 15: 43

    F430: CD 5A F4 28 April 2008 78 18: 03

    F438: July 2008 3C 3D 20 February 1979 D5: 24

    F440: August 14 7A FE BF 30 D9 14: A4

    F448: CD 5A F4 28 April 2008 A7 1918: 4A

    F450: Aug. 5, 1938 February 1937 August 1915 D5: B4

    F458: 18 June 2007 C6 7A 1F 37 1F: 26

    F460: 1F E6 5F 67 AB A0 AB 0F: 24

    F468: 0F 0F 6F 7A AC A0 AC 67: C2

    F470: 7B A0 47 3E 80 28 03 0F: BE

    F478: 10 FD 4F A6 C9 ED 5B 00: 7F

    F480: 5B 2A 4B 5C 7E 23 January 1912: 54

    F488: 00 FE E0 30 13 FE 80 C8: E3

    F490: 0E May 30 0F FE 60 August 30: 6C

    F498: FE 41 28 12 4E 23 46 23: DF

    F4A0: September 18 E1 CB 6F 1928 F5 CB: B8

    F4A8: 7E 23 20 F0 18 23 F9 4E: CF

    F4B0: 46 23 78 B1 C8 0B 7E FE: 85

    F4B8: 1930 November 20 7A FE C0 30 F1: 66

    F4C0: E5 C5 CD 5A F4 7E B1 77: 1F

    F4C8: C1 E1 18 E5 D6 35 20 01: 87

    F4D0: 1D 3D 3D 20 January 1914 20 January: B1

    F4D8: 15 3D 20 D5 1C 18 D2 2A: 43

    F4E0: 04 5B 2C 2D C8 24 25 C8: 65

    F4E8: 2A 06 5B 3E BF BC D8 2A: 22

    F4F0: 00 5B BC D8 ED 5B 02 5B: 78

    F4F8: BA D8 7B BD January 30 EB 7A: 4C

    F500: BC February 30, 1954 1967 7A 94 3C: E8

    F508: D9 47 D9 7B 95 3C D9 4F: 6A

    F510: D9 F5 33 0E 08 7B 08 E5: 84

    F518: C5 CD 5A F4 C1 E1 C6 FF: 54

    F520: CB 18 0D April 20 C5 33 0E: 2F

    F528: 08 7B 1D BD 20 E9 08 5F: EA

    F530: 7A 15 BC 20 E0 3E August 1991: 47

    F538: 20 March 1979 3B C1 4F ED 5B: 5C

    F540: 06 5B 7B 08 D9 59 D9 08: 2C

    F548: CB 00 08 C5 2A 04 5B 44: A2

    F550: 4D D5 D5 E5 C5 CD 5A F4: 01

    F558: C1 1979 August 1938 May 2008 2F A6: A9

    F560: 18 February 2008 B6 77 E1 1C 2D: CE

    F568: 20 E9 69 D1 14 25 20 E2: DB

    F570: 60 D1 7B 85 5F C1 0D 20: E3

    F578: 04 3B C1 0E 08 D9 1D 20: 99

    F580: C5 D9 08 5F 7A 84 57 D9: A8

    F588: 05 D9 20 B6 C9 00 00 00: FA

Saving: SAVE "nbestg.c" CODE 62000,861


           *







Other articles:

Help - Description of the shell of an electronic book "ZX-FORUM 4.

Secrets of Successful Design - Head for the book "Design your Programs

screen effects - Running a string of R-Type.

screen effects - clearing the screen of Zynaps.

screen effects - "minimize" the screen from Comando Tracer.

screen effects - smooth "decay" of the screen Sommando Tracer.

screen effects - changed the character set for the original stylized font from the game Rockstar.

screen effects - "running out the string" out of the game Rockstar.

screen effects - "pouring" the screen of the game Rockstar.

screen effects - a complex multi-effects from the game Bubbler.

New top 40 procedures - scrolling display, a fusion of two images, inverting screen, rotate characters, replacement of attributes, fill a closed loop, the calculation of addresses in the screen, copy of the screen, etc.

Technology sprites - Part 1: Introduction.

Technology sprites - Part 2: The hunt for sprites (search and pulling).

Technology sprites - Part 3: Format of sprites.

Technology sprites - Part 4: Format of sprites with a mask.

Technology sprites - Part 5: Structure sprite blocks (both co-exist in memory sprite and mask, what data to help us quickly find the address of the sprite in memory, and much more.)

Technology sprites - Part 6: preparation of data for publication.

Technology sprites - Part 8: Printing sprites (coordinates are given in familiarity).

Technology sprites - Part 9: Printing sprites (coordinates given in pixels).

Technology sprites - Part 10: a review of programs to work with sprites and graphics.

world of sound Spectrum - Chapter 1: The Physics of Sound.

world of sound Spectrum - Chapter 2: Operator BEEP, Creating effects on BEEPe, Making Music on BEEPe.

world of sound Spectrum - Chapter 3: How is the sound device (BEEP'ra and methods of sound production).

world of sound Spectrum - Chapter 4: Programming sound in assembler.

world of sound Spectrum - Chapter 4.1: Programming sound effects - Tone, Noise, Complexes effects.

world of sound Spectrum - Chapter 4.2: Programming Sound Effects - Volume Control.

world of sound Spectrum - chapter 4.3: Sound Effects - Management timbre.

world of sound Spectrum - Chapter 4.4: Programming sound effects - music programming.

world of sound Spectrum - Chapter 4.5: Programming sound effects - Polyphonic ringtones (polyphonic).

world of sound Spectrum - chapter 4.6: Treatment of external signals - digitization.

world of sound Spectrum - Chapter 4.7: Handling of external signals - Reverberation.

world of sound Spectrum - chapter 4.8: Synthesis of speech.

world of sound Spectrum - Chapter 4.9: audio playback interrupt.

world of sound Spectrum - Chapter 5: The operator PLAY for music coprocessor AY- 3-8910 (AY-3-8912).

world of sound Spectrum - Chapter 5.1: Creating effects operator PLAY.

world of sound Spectrum - Chapter 5.2: Making Music on PLAYe.

world of sound Spectrum - Chapter 6.1: Description of the coprocessor registers of the musical AY- 3-8910 (AY-3-8912).

world of sound Spectrum - Chapter 6.2: Programming effects and music under the musical coprocessor AY- 3-8910 (AY-3-8912).

world of sound Spectrum - Chapter 7: Software Review ZX-Spectrum to create sounds and music.

world of sound Spectrum - chapter 7.1: Editor, Sound Effects SUPER SOUND.

world of sound Spectrum - Chapter 7.2: Music Editor Wham the Music Box.

world of sound Spectrum - Annex 1, 2: Listings sound effects SUPER SOUND'a, tips assembler.


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

Similar articles:
B.B.S. News - The work B.B.S. 'ca.

В этот день...   21 November