(C) Baytullin Timur, Ryazan
I suggest your readers
display driver for printing from 64
character in the string. Briefly about it.
To display the character or control code that calls the
subroutine PR64 with the character code in register A. Control
codes:
13 - ENTER
3 - HOME (AT 0,0)
22, row, column - setting
print position (line =
0 .. 23, column = 0 .. 63)
4 - INVERSE 1
5 - INVERSE 0
8 - to save the cursor position
9 - restore cursor position
Codes 8 and 9, use an internal stack driver (32 saving).
Symbols for the driver are stored in memory in the usual
format, in the left half of familiarity. The driver uses the
registers AF, BC, DE and HL. Variables marked
an asterisk should be placed
in memory as they are defined in
program, because used their
indirect addressing. Address of the font defined in the usual
way in cell 23606.
Dear Editors, Print, please, my address. I will
glad to correspond about the software programs MULTICOLOR'a and
also on the theory and practice of data compression (especially
interested in using LZSS / PACK).
My address: 390029 Ryazan,
ul.Vesennyaya, 9 / 1, kv.29.
140.
3; 64x24 DRIVER
3; (C) 1996 TIM BYTE
PR64 LD HL, STATE
LD C, (HL)
BIT 0, C
JR NZ, DOAT
CP 1932
JP NC, PRSYM
CP 1922
JR NZ, PR0
LD (HL), 3
RET
DOAT BIT 1, C
JR Z, DO2
CP 1924
JR NC, FAIL
LD (DCOR), A
LD (HL), a
RET
DO2 CP 1964
JR NC, FAIL
LD (STLB), A
LD A, (DCOR)
LD (STRK), A
LD (HL), 0
JP GETADR
FAIL LD (HL), 0
RET
PR0 CP 1913
LD HL, STLB
JR Z, CR
CP 3
JR Z, HOME
CP 4
JR Z, ION
CP 5
JP Z, IOFF
CP 8
JP Z, SAVCO
CP 9
JP Z, RESCO
RET
CR LD (HL), 0
DEC HL
INC (HL)
LD A, (HL)
CP 1924
JR NZ, GETADR
LD (HL), 0
, Or LD (HL), 23
CALL SCROLL
; SCROLL - scrolling procedure
; Screen up
GETADR LD DE, (STRK)
LD A, E
SRL D
AND # 18
OR # 40
LD H, A
LD A, E
AND 7
OR A
DEFW # 1F1F, # 1F1F
ADD A, D
LD L, A
LD (SCADR), HL
RET
HOME LD HL, 0
LD (STRK), HL
LD H, # 1940
LD (SCADR), HL
RET
IOFF XOR A
LD (INV1 +1), A
LD (INV2 +1), A
RET
ION LD A, # F0
LD (INV1 +1), A
CPL
LD (INV2 +1), A
RET
PRSYM LD H, 0
LD L, A
LD BC, (23,606)
DEFB 41,41,41,9
EX DE, HL
LD HL, (SCADR)
LD A, (STLB)
AND 1
JR NZ, PR1
LD B, 8
L1 LD A, (HL)
AND # 0F
LD C, A
LD A, (DE)
OR C
INV1 XOR 0
LD (HL), A
INC H
INC DE
DJNZ L1
LD HL, STLB
INC (HL)
RET
PR1 LD B, 8
L2 LD A, (HL)
AND # F0
LD C, A
LD A, (DE)
RLCA
RLCA
RLCA
RLCA
OR C
INV2 XOR 0
LD (HL), A
INC H
INC DE
DJNZ L2
LD HL, SCADR
INC (HL)
DEC HL
INC (HL)
LD A, (HL)
CP 1964
RET NZ
JP CR
SAVCO LD (ASP), SP
DI
LD SP, (PBU)
LD HL, (STRK)
PUSH HL
LD (PBU), SP
LD SP, (ASP)
EI
RET
RESCO LD (ASP), SP
DI
LD SP, (PBU)
POP HL
LD (PBU), SP
LD SP, (ASP)
EI
LD (STRK), HL
JP GETADR
STRK NOP; *
STLB NOP; *
SCADR DEFW # 4000 *
DEFS 64
BUF EQU $
PBU DEFW BUF
ASP DEFW 0
STATE NOP
DCOR NOP
2
Ca. Ed.: Quite an interesting procedure. Just want to note
one fact. Note that in sub-
SAVCO and RESCO during rearrangement of the stack
disable interruptions. In the original program this was not
done, which could lead to an error at the time when the stack
repositioned, there will be an interruption. After stack is
designed only to 32 words, and if it will be filled at least
half then unloaded there processing program
Interrupt registers zatrut the program itself.
To do this, we inserted a ban on team
interrupts.
*