Studies - Driver screen printing 64 characters per line.

ZX Review #7-8-9-10
(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.


           *