Section "IS-DOS - for programmers". No 2
Eliseev V. A. "Window system IS-DOS" (journal version)
(C) PENCRAFT 1995 (C) IskraSoft 1995
Continuation, beginning in No 1.
_________________________________________
Print restarts. The next crucial operation - printing text messages - is represented in the IS-DOS system by a whole group of restarts, differing mainly in the method of setting initial parameters and some additional capabilities. In total, there are 7 restarts related to the process of printing texts in the WIND.SYS level. The first three of them differ in using the information contained in the window vector as print coordinates (Print pos, Print size, Y-coord). Practically, these three restarts represent one program that has three entry points for setting different parameters.
lwt (#65) - allows printing a specified number of lines from the text buffer in the window with a specified Y offset from the top edge of the window. Input parameters: C - restart code (#65) IX - window vector address HL - text buffer address A - Y offset from the top edge of the window B - number of printed lines. The format of the text buffer for lwt is standard for most printing restarts in IS-DOS: characters are arranged sequentially, starting from the starting address towards increasing addresses, lines are separated by a character with code #0D, the end of text marker is a character with code #03. When working with lwt, the #03 marker is not mandatory, as the printed text is limited to the specified number of lines. However, if the #03 marker appears in the text before the required number of lines is printed, the printing stops. Line break characters are also not mandatory, as when reaching the right edge of the window, printing continues from the beginning of the next line, and the line counter takes this into account, so regardless of the presence of #0D characters, the specified number of lines will be printed in the window. The remaining part of the text is truncated. If the specified number of lines exceeds the window size, the text continues to be output beyond its limits. When working with the lwt restart, the contents of the IX register and the HL register pair remain unchanged. Let's consider an example:;****************************************;Listing 4 Example of using lwt(#65)
ORG #5D64;opening windows CALL CLS LD IX,WIND1 LD C,#61 LD A,2 RST #10 LD IX,WIND2 LD C,#61 LD A,0 RST #10 CALL WAIT;printing lines of text from the buffer in window 1 LD IX,WIND1 ;window vector address LD HL,TEXT1 ;text address LD C,#65 ;restart code LD A,1 ;Y offset LD B,4 ;number of lines RST #10 CALL WAIT;printing lines of text from the buffer in window 2 LD IX,WIND2 LD HL,TEXT2 LD C,#65 LD A,1 LD B,4 RST #10 CALL WAIT JP EXIT;window vectors WIND1 DEFB 5 DEFB 2 DEFB 8 DEFB 20 DEFB %00001111 DEFB %00000001 DEFB 8 DEFB 20 WIND2 DEFB 5 DEFB 12 DEFB 8 DEFB 20 DEFB %00001111 DEFB %00000001 DEFB 8 DEFB 20;text buffers TEXT1 DEFM "Restart lwt(65)" DEFB 13 DEFM "allows printing" DEFB 13 DEFM "in the window text from" DEFB 13 DEFM "the text buffer." DEFB 13 TEXT2 DEFM "In register B is set" DEFB 13 DEFM "the number of lines," DEFB 13 DEFM "that needs to be" DEFB 13 DEFM "printed" DEFB 13;additional procedures CLS LD C,#73 ;restart cls RST #10 ;to clear the screen RET WAIT LD C,#07 ;restart ttyin RST #10 ;to wait for a key press RET EXIT XOR A ;standard exit LD A,#F4 ;in IS-DOS RET;****************************************
The result of the program Listing 1 is shown in Fig. 4.
┌───────────────────────────────────────┐
│ │
│ ╔═══════════════════════╗ │
│ ║ Restart lwt(#65) ║ │
│ ║ allows printing ║ │
│ ║ in the window text ║ │
│ ║ from the text buffer. ║ │
│ ║ ║ │
│ ║ ║ │
│ ╚═══════════════════════╝ │
│ │
│ ┌───────────────────────┐ │
│ │ In register B is set │ │
│ │ the number of lines, │ │
│ │ that needs to be │ │
│ │ printed │ │
│ │ │ │
│ │ │ │
│ └───────────────────────┘ │
│ │
│ │
├───────────────────────────────────────┤
│ Fig. 4: Printing text in the window lwt(#65) │
└───────────────────────────────────────┘
adrwt (#66) - is intended for printing text in the window located immediately after the window vector. Input parameters: C - restart code (#66) IX - window vector address. The adrwt restart is very convenient for printing windows with text tightly bound to a specific window. Its main advantage is only one input parameter (not counting the restart code itself in register C). To output text on the screen, adrwt uses the same procedures as lwt, so everything that has been said regarding the text format for lwt applies to adrwt as well. When reaching the bottom edge of the window, printing stops, and the remaining part of the text is ignored. When working with the adrwt restart, the contents of the IX register are preserved.
Example:;****************************************;Listing 5 Printing using adrwt(#66)
ORG #5D64;opening windows CALL CLS LD IX,WIND1 LD C,#61 LD A,2 RST #10 LD IX,WIND2 LD C,#61 LD A,0 RST #10 CALL WAIT;printing lines of text in window 1 LD IX,WIND1 ;window vector address LD C,#66 ;restart code RST #10 CALL WAIT;printing lines of text in window 2 LD IX,WIND2 LD C,#66 RST #10 CALL WAIT JP EXIT;window vectors WIND1 DEFB 5 DEFB 3 DEFB 7 DEFB 20 DEFB %00001111 DEFB %00000001 DEFB 8 DEFB 20;window 1 text DEFM "Restart adrwt(66)" DEFB #0D DEFM "allows printing" DEFB #0D DEFM "text following" DEFB #0D DEFM "the window vector." DEFB #03 WIND2 DEFB 5 DEFB 12 DEFB 7 DEFB 20 DEFB %00001111 DEFB %00000001 DEFB 8 DEFB 20;window 2 text DEFM "Lines are separated" DEFB #0D DEFM "by a character with code #0D" DEFB #0D DEFM "end of text - " DEFB #0D DEFM "character with code #03" DEFB #03;additional procedures CLS LD C,#73 ;restart cls RST #10 ;to clear the screen RET WAIT LD C,#07 ;restart ttyin RST #10 ;to wait for a key press RET EXIT XOR A ;standard exit LD A,#F4 ;in IS-DOS RET;****************************************
lenwt (#67) - is also intended for printing text in the window, however, the text is not tied to the vector of a specific window, but can be located anywhere in the program. The main advantage of the lenwt restart is the ability to print one text in several windows and vice versa - the ability to print different texts in one window. Input parameters: C - restart code IX - window vector address HL - text address. When working with the lenwt restart, the contents of the IX register and the HL register pair are preserved.
Example:;****************************************;Listing 6 Printing using lenwt(#67)
ORG #5D64;opening windows CALL CLS LD IX,WIND1 LD C,#61 LD A,2 RST #10 LD IX,WIND2 LD C,#61 LD A,0 RST #10 CALL WAIT;printing lines of text from the buffer in window 1 LD IX,WIND1 ;window vector address LD HL,TEXT ;text address LD C,#67 ;restart code RST #10 CALL WAIT;printing lines of text from the buffer in window 2 LD IX,WIND2 LD HL,TEXT LD C,#67 RST #10 CALL WAIT JP EXIT;window vectors WIND1 DEFB 5 DEFB 3 DEFB 7 DEFB 20 DEFB %00001111 DEFB %00000001 DEFB 8 DEFB 20 WIND2 DEFB 5 DEFB 12 DEFB 7 DEFB 20 DEFB %00001111 DEFB %00000001 DEFB 8 DEFB 20;text buffer TEXT DEFM "Restart lenwt(67)" DEFB #0D DEFM "allows printing" DEFB #0D DEFM "text located" DEFB #0D DEFM "anywhere in" DEFB #0D DEFM "the program" DEFB #0D DEFB #03;additional procedures CLS LD C,#73 ;restart cls RST #10 ;to clear the screen RET WAIT LD C,#07 ;restart ttyin RST #10 ;to wait for a key press RET EXIT XOR A ;standard exit LD A,#F4 ;in IS-DOS RET;****************************************
The result of the program Listing 6 is presented in Fig. 5:
┌───────────────────────────────────────┐
│ │
│ ╔═══════════════════════╗ │
│ ║ Restart lenwt(67) ║ │
│ ║ allows printing ║ │
│ ║ text located ║ │
│ ║ anywhere in ║ │
│ ║ the program ║ │
│ ║ ║ │
│ ╚═══════════════════════╝ │
│ │
│ ┌───────────────────────┐ │
│ │ Restart lenwt(67) │ │
│ │ allows printing │ │
│ │ text located │ │
│ │ anywhere in │ │
│ │ the program │ │
│ │ │ │
│ └───────────────────────┘ │
│ │
│ │
├───────────────────────────────────────┤
│ Fig. 5: Printing text lenwt(#67) │
└───────────────────────────────────────┘
prstr (#68) Restart prstr(#68) - the most powerful and versatile of all the restarts designed for printing lines of text in a window. Its main advantage is the ability to automatically align the line to the left and right edges, as well as center the line. The restart has 4 sub-functions that allow setting the printed line in various ways. The code of the sub-function is placed in register E:
E=0 - print the line by logical name defined in a special array-analyzer E=1 - print a line of specified length located at the specified address E=2 - service sub-function that does not print anything but allows calculating parameters for the previous sub-function, knowing the address of the start of the text buffer and the line number E=3 - print the line by its number in the text - actually represents a combination of sub-functions 2 and 1.
The sub-function dispatcher has "fool protection" - if you set a number greater than 3 in register E, it will automatically be set to zero.
Now let's take a closer look at working with the sub-functions of the prstr(#68) restart.
First - general provisions. When calling the restart, register A must contain a number defining two main printing parameters - alignment mode (the two most significant bits) and Y offset from the top edge of the window (the six least significant bits). The alignment mode is encoded as follows:
00 - left alignment 01 - left alignment 10 - right alignment 11 - center alignment.
When working with the restart, the contents of register A are not preserved.
The format of the text buffer for prstr is standard - characters are arranged sequentially, starting from the starting address, lines are separated by a character #0D, the end of text marker - #03.
To output characters on the screen, prstr uses the restart ttyout(#0A) from the DOS.SYS level. When forming the text buffer, setting the offset and the number of printed characters, it is necessary to independently ensure that the text does not exceed the limits of the window. When the line width exceeds the width of the window's print field, alignment is automatically performed to the left edge, regardless of the state of the two most significant bits of register A.
Sub-function 0, as already mentioned above, allows printing lines from the text buffer by their logical names. What is this?
Suppose you need to print in the window text containing frequently repeated lines. Instead of repeatedly calling prstr, setting all parameters each time and strictly monitoring which line to print next, or worse, filling the text buffer with identical lines, you can simply create an array that establishes the sequence of printing lines by referencing their ordinal numbers in the buffer. By quickly switching different arrays, you can easily recompose your texts, swap lines, insert others, etc. Using sub-function 0, it is also easy to organize the printing of text messages by code from a table (like error messages in Spectrum BASIC).
Input parameters:
C - restart code (#68) E - sub-function code (0) IX - window vector address HL - address of the array-analyzer A - alignment mode and Y offset (see above) B - logical name of the line - any code except #FF.
Upon normal completion of work, register HL contains a number that is one less than the address of the first character of the line following the printed one. The contents of register IX remain unchanged, the contents of registers A, B, C, E are lost. The prstr restart also modifies the system variable xypos (see character output device vector).
Possible errors:
1. If the logical name of the line is not found in the array-analyzer, the restart returns to the calling program with the C flag set and error code 140 (no name in the array) in register A.
2. If the text does not contain a line with the ordinal number specified in the array, the restart returns with the C flag set and error code 141 (no line in the text) in register A.
The array-analyzer has the following structure: the first two bytes - the address of the text buffer, then - two-byte records, where the first byte is the logical name of the line, and the second is its ordinal number in the buffer. The array must end with code #FF.
Let's consider an example. We will display a frame of asterisks on the screen in two different variants for two windows (see Fig. 6):
┌───────────────────────────────────────┐
│ │
│ ************************* │
│ * * * │
│ * * * │
│ ************************* │
│ * * │
│ * * │
│ * * │
│ * * │
│ ************************* │
│ │
│ ************************* │
│ * * * * │
│ * * * * │
│ * * * * │
│ ************************* │
│ * * * │
│ * * * │
│ * * * │
│ ************************* │
│ │
├───────────────────────────────────────┤
│ Fig. 6: Frames of asterisks for │
│ demonstrating the work of prstr │
└───────────────────────────────────────┘
To draw these two frames using sub-function 0 of the prstr restart, only 4 types of lines are needed:
1. "*************************" 2. "* *" 3. "* * *" 4. "* * * *".
Let's create a program that performs this task:
;*****************************************
; Listing 7 Printing using sub-function 0 of the prstr restart
ORG #5D60
;opening windows
CALL CLS ;clear the screen LD IX,WIND1 ;open window 1 LD C,#61 LD A,2 RST #10 LD IX,WIND2 ;open window 2 LD C,#61 LD A,0 RST #10
;printing the first frame
LD IX,WIND1 ;window vector address LD HL,TABL1 ;address of the array CALL PRINT ;call the text printing procedure
;printing the second frame
LD IX,WIND2 LD HL,TABL2 CALL PRINT
CALL WAIT ;wait for a key JP EXIT ;exit to IS-DOS
;printing procedure
PRINT LD B,#09 ;number of lines to be printed, simultaneously - logical name of the first line
;alignment mode - center, offset - 1 line
LD A,%11000001
M1 PUSH HL ;save the address of the array on the stack PUSH AF ;save the alignment mode and current Y offset
LD C,#68 ;restart code LD E,#00 ;sub-function code RST #10 ;call restart
POP AF ;pop the current Y offset from the stack INC A ;increase it by 1 for printing the next line POP HL ;restore the address of the array DJNZ M1 ;repeat until B value decreases to 0
;value B serves simultaneously as a counter in the printing loop and as the logical name of the next line to be printed
RET ;return to the main program
;window vectors
WIND1 DEFB 0
DEFB 0
DEFB 11
DEFB 30
DEFB %00001111
DEFB #FF
DEFB 3
DEFB 38
WIND2 DEFB 0
DEFB 12
DEFB 11
DEFB 30
DEFB %00001111
DEFB #FF
DEFB 3
DEFB 38
;text buffer
TEXT DEFM "*************************"
DEFB #0D
DEFM "* *"
DEFB #0D
DEFM "* * *"
DEFB #0D
DEFM "* * * *"
DEFB #0D
DEFB #03
;analyzer arrays
TABL1 DEFW TEXT
DEFB #09
DEDB 1
DEFB #08
DEFB 3
DEFB #07
DEFB 3
DEFB #06
DEFB 1
DEFB #05
DEFB 2
DEFB #04
DEFB 2
DEFB #03
DEFB 2
DEFB #02
DEFB 2
DEFB 1
DEFB #FF
TABL2 DEFW TEXT
DEFB #09
DEFB 1
DEFB #08
DEFB 4
DEFB #07
DEFB 4
DEFB #06
DEFB 4
DEFB 5
DEFB 1
DEFB #04
DEFB 3
DEFB #03
DEFB 3
DEFB #02
DEFB 3
DEFB #01
DEFB 1
DEFB #FF
;additional procedures
CLS LD C,#73 ;clear the screen RST #10 ;to clear the screen RET
WAIT LD C,#07 ;wait for a key RST #10 ;to wait for a key press RET
EXIT XOR A ;standard exit LD A,#F4 ;in IS-DOS RET
;****************************************
Sub-function 1 allows printing a line of specified length stored in memory at the specified address. This sub-function calculates the printing coordinates of the line, taking into account the number of characters, offset, alignment mode, and print field width. It uses the same procedure as sub-function 0, so one has to independently monitor the match of window sizes to text sizes.
After calculating the coordinates, sub-function 1 calls the same restart ttyout(#0A) in a loop until the required number of characters is printed.
Input parameters:
C - restart code (#68) E - sub-function code (#01) IX - window vector address HL - start address of the line B - length of the line A - alignment mode and Y offset.
The length of the printed line is determined solely by the value of register B. The line break character #0D is replaced with a space in this case; other characters with codes less than #20 are not recommended to avoid "garbage" on the screen.
Example of using sub-function 1:
;****************************************
;Listing 8 Example of printing using prstr(#68) sub-function 1
ORG #5D64
;opening window
CALL CLS LD IX,WIND LD C,#61 LD A,2 RST #10 CALL WAIT
;printing a line of text from the buffer in the window through sub-function 1
LD IX,WIND ;window vector LD C,#68 ;restart code LD E,1 ;sub-function code LD HL,TEXT1 ;line address
LD A,%11000010
;the two most significant bits - alignment mode (in this case - center); the six least significant - offset from the top (2 lines).
LD B,30 ;number of characters in the line RST #10 ;call restart
CALL WAIT
;printing the next line
LD IX,WIND ;window vector LD C,#68 ;restart code LD E,1 ;sub-function code LD HL,TEXT2 ;start address of the line
LD A,%11000100
;printing without alignment and offset from the top - 4 lines.
LD B,36 ;number of characters in the line RST #10 ;call restart
CALL WAIT JP EXIT
;window vector
WIND DEFB 1 DEFB 1 DEFB 8 DEFB 30 DEFB %00001111 DEFB %00000001 DEFB 3 DEFB 38
;text buffer
TEXT1 DEFM "Restart prstr(68) " DEFM "sub-function 1" TEXT2 DEFM "printing a line in the window " DEFM "with alignment"
;additional procedures
CLS LD C,#73 ;clear the screen RST #10 ;to clear the screen RET
WAIT LD C,#07 ;wait for a key RST #10 ;to wait for a key press RET
EXIT XOR A ;standard exit LD A,#F4 ;in IS-DOS RET
;****************************************
Sub-function 2 allows calculating input parameters for sub-function 1 (address and length of the line) by its ordinal number in the text buffer.
Input parameters:
C - restart code (#68) E - sub-function code (#02) HL - start address of the text B - ordinal number of the line.
Output parameters:
HL - address of the line B - length of the line.
The contents of registers C and E are not preserved. The text format is standard. If the value of the ordinal number of the line exceeds the number of lines in the text, the restart returns with the C flag set and error code 141 (no line in the text). Example of using sub-function 2:
;****************************************
;Listing 9 Example of using
; prstr(#68) sub-function 2
ORG #5D64
;opening window
CALL CLS
LD IX,WIND
LD C,#61
LD A,2
RST #10
CALL WAIT
;example of using sub-function 2 for
;determining parameters for sub-function 1
;by known line number in the text
LD C,#68 ;restart code
LD E,2 ;sub-function code 2
LD HL,TEXT ;start address
;of the text
LD B,1 ;line number
RST #10
;on exit in HL' - address of the line,
;and in B - length
EXX
LD C,#68
LD E,1 ;sub-function code 1
LD A,%11000001
RST #10
LD C,#68
LD E,2 ;determining
LD HL,TEXT ;parameters for the next.
LD B,2 ;line
RST #10
EXX
LD C,#68
LD E,1 ;printing
LD A,%11000011
RST #10
LD C,#68
LD E,2
LD HL,TEXT
LD B,3
RST #10
EXX
LD C,#68
LD E,1
LD A,%11000101
RST #10
CALL WAIT
JP EXIT
;window vector
WIND DEFB 1
DEFB 1
DEFB 8
DEFB 30
DEFB %00001111
DEFB %00000001
DEFB 3
DEFB 38
;text buffer
TEXT DEFM "Restart prstr(68) "
DEFM "sub-function 2"
DEFB #0D
DEFM "determines parameters for "
DEFB #0D
DEFM "sub-function 1"
DEFB #0D
DEFB #03
;additional procedures
CLS LD C,#73 ;clear the screen
RST #10
RET
WAIT LD C,#07 ;wait for a key
RST #10
RET
EXIT XOR A ;standard exit
LD A,#F4 ;in IS-DOS
RET
;****************************************
Sub-function 3 - a combination of sub-functions 2 and 1. The input parameters used are the start address of the text and the ordinal number of the line in it.
First, sub-function 3 uses sub-function 2 to calculate the values of the address and length of the line, after which control is passed to sub-function 1.
Input parameters:
C - restart code (#68)
E - sub-function code (#03)
IX - window vector address
HL - start address of the text
B - line number
A - alignment mode and Y offset
As in sub-function 2, the absence of a line with the specified ordinal number in the text leads to a return to the calling program with the C flag set and error code 141 (no line in the text) in register A.
Example of using subfunction 3:
;****************************************
;Listing 10 Example of using
; prstr(#68) subfunction 3
ORG #5D64
;opening the window
CALL CLS
LD IX,WIND
LD C,#61
LD A,2
RST #10
CALL WAIT
;printing text lines from the buffer in the window
;through subfunction 3
LD IX,WIND ;window vector
LD C,#68 ;restart code
LD E,3 ;subfunction code
LD HL,TEXT ;address of the start
;of the text
LD A,%11000010
;printing with centering and margin
;from the top - 2 lines
LD B,1 ;line number
;in the text
RST #10 ;calling restart
CALL WAIT
LD IX,WIND ;window vector
LD C,#68 ;restart code
LD E,3 ;subfunction code
LD A,%11000101
LD B,2 ;printing the next
RST #10 ;line in the window
CALL WAIT
JP EXIT
;window vector
WIND DEFB 1
DEFB 1
DEFB 8
DEFB 30
DEFB %00001111
DEFB %00000001
DEFB 3
DEFB 38
;text buffer
TEXT DEFM "Restart prstr(68) "
DEFM "subfunction 3"
DEFB #0D
DEFM "print line by number"
DEFB #0D
DEFB #03
;additional procedures
CLS LD C,#73 ;clear screen
RST #10
RET
WAIT LD C,#07 ;wait for key
RST #10
RET
EXIT XOR A ;standard exit
LD A,#F4 ;in IS-DOS
RET
;****************************************
The next two restarts are intended for printing on the screen at absolute coordinates, not tied to a specific window.
str (#6C)
Restart str(#6C) - prints the line at the current screen position, limited by code #0D. The address of the line is specified in the HL register pair. This restart is convenient for printing lines on the screen outside of windows, does not require specifying coordinates, and uses the current print position stored in the system variable XYPOS.
Restart str is just a cyclic call to the previously mentioned restart ttyout(#0A) from the DOS.SYS level, made until code #0D is encountered. To determine the print coordinates, the system variable XYPOS is used, located in the character device output vector. Access to this variable can be obtained using the restarts wtpos(#6B) and prapd(#0C), which will be discussed later.
When working with the str restart, the line feed character is considered only as a text delimiter, and an actual line feed is not performed during printing. It should be noted that the print field when calling str is limited to one of the thirds of the screen - the top, middle, or bottom, specifically the one within which the current print position was located before the call. When reaching the right edge of the screen, printing moves to the next line, and the last character may be "broken" during the move, and when reaching the lower boundary of the corresponding third of the screen, printing moves to the first of the eight lines of that third.
Input parameters:
C - restart code (#6C)
HL - address of the line
XYPOS - system variable - current print position.
Example:
;****************************************
;Listing 11 Example of using str(#6C)
ORG #5D64
CALL CLS ;clear screen
LD HL,TEXT1 ;address of text
LD C,#6C ;restart code
RST #10 ;print line
CALL WAIT
LD HL,TEXT2 ;print second
LD C,#6C ;line
RST #10
CALL WAIT
LD HL,TEXT3 ;print third
LD C,#6C ;line
RST #10
CALL WAIT
JP EXIT
;text buffer
TEXT1 DEFM "Restart str (#6C) "
DEFB #0D
TEXT2 DEFM " allows printing "
DEFB #0D
TEXT3 DEFM " in absolute "
DEFM " coordinates"
DEFB #0D
;additional procedures
CLS LD C,#73 ;restart cls
RST #10 ;to clear the screen
RET
WAIT LD C,#07 ;restart ttyin
RST #10 ;to wait for key press
EXIT XOR A ;standard exit
LD A,#F4 ;in IS-DOS
RET
;****************************************
lnstr (#6D)
Restart lnstr(#6D) - like the previous one, it makes a cyclic call to ttyout(#0A), but prints only a specified number of characters. The print coordinates are also stored in the system variable XYPOS.
Input parameters:
C - restart code (#6D)
HL - address of the text line
B - number of characters
XYPOS - system variable - current print position.
When printing, line feed characters #0D are replaced with spaces, while other characters with codes less than #20 are not recommended for use. As with str, the print field is limited to one of the thirds of the screen.
To set coordinates via the system variable XYPOS, use the restarts prapd(#0C) from the DOS.SYS level and wtpos(#6B).
Example:
;****************************************
;Listing 12 Example of using lnstr(#6D)
ORG #5D64
CALL CLS ;clear screen
LD HL,TEXT ;address of text
LD C,#6D ;restart code
LD B,81
RST #10 ;print line
CALL WAIT
JP EXIT
;text buffer
TEXT DEFM "Restart str (#6C) "
DEFM "allows printing "
DEFM " in absolute"
DEFM " coordinates"
;additional procedures
CLS LD C,#73 ;restart cls
RST #10 ;to clear the screen
RET
WAIT LD C,#07 ;restart ttyin
RST #10 ;to wait for key press
EXIT XOR A ;standard exit
LD A,#F4 ;in IS-DOS
RET
;****************************************
Another print restart tylin(#71) is directly related to the operation of the string editor edstr(#7F), so it will be discussed in one of the next articles in our series.
To be continued ...
In the next issue of our magazine, you will get acquainted with quite a large group of auxiliary restarts, also included in the WIND.SYS level.
Contents of the publication: ZX Format #02
- IS-DOS
Announcement of a school-ready hardware-software complex by Iskra Soft and Peters, featuring a networked computer class setup on ZX Spectrum with IS-DOS.
- IS-DOS - Владимир Елисеев
Explanation of command line monitor and text editor restart in IS-DOS using mon.com utility as an example.
- IS-DOS
Introduction to IS-DOS system utilities, covering functions like help, user menu, file viewing, editing, and file operations.
- IS-DOS
Detailed description of the eliminat.com program for freeing memory from resident tasks and drivers, featuring interactive mode and command-line keys. Specific channel numbers allocated for task and driver types. Includes usage options and color customization.
- IS-DOS Window System - Владимир Елисеев
Exploration of IS-DOS window system restarts for printing text in windows and absolute screen coordinates. Examples of restart implementations such as lwt, adrwt, lenwt, prstr, str, and lnstr. Continuation to cover auxiliary restarts in next issue.
- Assembler
Introduction to assembly language basics, focusing on flags, arithmetic operations, and register manipulation. Discusses addition, subtraction, and complex operations like multiplication and division through examples. Highlights specific assembly commands and their functions for ZX Spectrum.
- Hardware
Discussion of hardware modifications for Scorpion ZS-256-Turbo, including the implementation of a Turbo/Normal switch. Pros and cons of software-based switching methods. Advice on soldering and circuit adjustments.
- Hardware
Discussion of a new music add-on for ZX Spectrum by X-TRADE and HACKER STINGER, called 'ZX GENERAL SOUND', offering high-quality audio and minimal processor usage.
- Hardware
Discussion on hardware innovations and marketing strategies, focusing on mouse and keyboard interfaces for ZX Spectrum. Critique of competitor's misleading advertising and analysis of serial versus passive mouse technology. Author questions necessity and cost of advanced features.
- Hardware
Discussion of hardware acceleration methods for ZX Spectrum, focusing on turbo-modes and their effects on performance and compatibility.
- Toys
Fantasy tale about magical creatures battling human intrusion. Main character recruits allies for a quest to restore the land's former glory. Challenges include finding tools, overcoming obstacles, and reviving companions.
- Toys
Review of 'Carrier Command' game, focusing on its strategic and simulation aspects. Includes detailed gameplay mechanics, controls, and objectives. Highlights strategies for success and unique features like managing resources and autonomous systems.
- Interview
Interview with Sergey Zonov and Andrey Larchenko discussing their experience with microprocessors and ZX Spectrum development, including the creation of the Scorpion ZS 256 computer.
- Information
Contact information and staff list of ZX-Format No. 2 (1995) including editor, coders, and designers.
- Information
Editor's address to readers of ZX Format, discussing the positive feedback, past errors, and the quest for a cartoonist, with future plans for the magazine.
- Information
Discussion on the new interpretation of the 'PULLDOWN' window menu system for ZX Spectrum, focusing on interface updates and user interaction enhancements.
- Information
Discussion about companies illegally distributing ZX Format, emphasizing the benefits of purchasing official copies.
- Competition
The article discusses the lack of participation in ZX Format's competition, detailing the rules and prizes, and encourages readers to engage with new ideas.
- Let's Relax
A humorous account of a software vendor's challenges dealing with clueless customers, illustrating the nerve-wracking nature of his job.
- Mailbox
Overview of hardware components and prices for ZX Spectrum enthusiasts with ordering details.
- Mailbox
Reader letters section in ZX Format #02 discusses reader feedback, addresses issues with ZX Format features, and offers future improvements.
- Premiere
Guide to Digital Studio v1.12, a music editor for ZX Spectrum, including features, menu navigation, and the use of Digital Studio Compiler.
- For Programmers
Exploration of tools that extend the standard Basic 48, including Renumber for Basic 128, Trace & Speed, Blast Toolkit, and ZXeditor, highlighting their functionalities and utilities.
- Various
History of Amiga computer models and their evolution from A1000 to A4000/60T with specifications and unique features. Explanation of technical terms and differences between chip and fast memory. Mention of new developments like AGA chipset and models for different needs.
- Miscellaneous
The article presents upcoming ZX Spectrum software releases and reviews game innovations like 'Adventures of Winnie the Pooh' and 'UFO 2: Devils of the Abyss'. It highlights features, creators, and technical requirements. It also includes announcements from SOFTLAND and Cracked Masters Group.
- Systems
Discussion of creating music with Instrument 3.01, focusing on digitized sound. Analysis of program's capabilities and conversion from ASC Sound Master. Instructions for composition and conversion.
- What's New
Review of new ZX Spectrum games entering the St. Petersburg market in late 1995. Detailed game descriptions, memory requirements, controls, and music/graphics evaluations. Highlights include Night Hunter, Extreme, Grell & Falla, and more.