;

; ZX-ALFA (ORIGINAL VERSION) - ASSEMBLY ROUTINES

; Einar Saukas & Eduardo Ito - (c)*ZX-SOFT* 1989

;



; PRINTER BUFFER

23298  00                                  ; MUST COMPARE FILENAME?

23300  0000000000000000000000000000000000  ; HEADER LOADED FROM TAPE

23320  00000000000000000000                ; FILENAME TO COMPARE

23400  000000                              ; INPUT KEYS



; REM STATEMENT

23762  0000                                ; CURRENT CHAR ADDRESS



; "COPIA CARACTER" (COPY CURRENT CHAR FROM EDITING AREA TO MEMORY)

23764  ED5BD25C  LD      DE,(23762)        ; CURRENT CHAR ADDRESS

       219758    LD      HL,22679          ; EDITING AREA ATTR

23771  0608      LD      B,8               ; 8 COLUMNS/BITS

23773  7E        LD      A,(HL)            ; SET EACH MEMORY BIT ACCORDING TO ATTR

       1F        RRA

       1A        LD      A,(DE)

       17        RLA

       12        LD      (DE),A

       23        INC     HL                ; NEXT COLUMN

       10F8      DJNZ    23773             ; REPEAT FOR EACH COLUMN/BIT

       011800    LD      BC,24

       09        ADD     HL,BC             ; NEXT ROW

       13        INC     DE

       7D        LD      A,L

       FE97      CP      151

       20EC      JR      NZ,23771          ; REPEAT FOR EACH ROW/BYTE

       C9        RET



; "IMPRIME CARACTER" (COPY CURRENT CHAR FROM MEMORY TO EDITING AREA)

23792  ED5BD25C  LD      DE,(23762)        ; CURRENT CHAR ADDRESS

       219758    LD      HL,22679          ; EDITING AREA ATTR

23799  0608      LD      B,8               ; 8 COLUMNS/BITS

       1A        LD      A,(DE)

23802  0E38      LD      C,56              ; SET ATTR ACCORDING TO EACH MEMORY BIT

       07        RLCA

       3002      JR      NC,23809

       0E07      LD      C,7

23809  71        LD      (HL),C

       23        INC     HL

       10F5      DJNZ    23802             ; REPEAT FOR EACH COLUMN/BIT

       011800    LD      BC,24

       09        ADD     HL,BC             ; NEXT ROW

       13        INC     DE

       7D        LD      A,L

       FE97      CP      151

       20E8      JR      NZ,23799          ; REPEAT FOR EACH ROW/BYTE

       C9        RET



; "INVERTE" (INVERT CURRENT CHAR)

23824  2AD25C    LD      HL,(23762)        ; CURRENT CHAR ADDRESS

       0608      LD      B,8               ; 8 BYTES

23829  7E        LD      A,(HL)

       2F        CPL                       ; INVERT BYTE

       77        LD      (HL),A

       23        INC     HL

       10FA      DJNZ    23829             ; REPEAT FOR EACH BYTE

       C9        RET



; "ESPELHA HORIZ" (HORIZONTAL MIRROR OF CURRENT CHAR)

23836  2AD25C    LD      HL,(23762)        ; CURRENT CHAR ADDRESS

       0E08      LD      C,8               ; 8 BYTES

23841  7E        LD      A,(HL)

       0608      LD      B,8               ; 8 BITS

23844  07        RLCA                      ; MIRROR BITS

       CB1A      RR      D

       10FB      DJNZ    23844             ; REPEAT FOR EACH BIT

       72        LD      (HL),D

       23        INC     HL

       0D        DEC     C

       20F3      JR      NZ,23841          ; REPEAT FOR EACH BYTE

       C9        RET



; "ESPELHA VERT" (VERTICAL MIRROR OF CURRENT CHAR)

23855  2AD25C    LD      HL,(23762)        ; CURRENT CHAR ADDRESS

       54        LD      D,H

       5D        LD      E,L

       010700    LD      BC,7

       09        ADD     HL,BC             ; LAST BYTE ADDRESS

       0604      LD      B,4               ; 4 TIMES

23866  4E        LD      C,(HL)            ; SWITCH BYTES

       1A        LD      A,(DE)

       77        LD      (HL),A

       79        LD      A,C

       12        LD      (DE),A

       2B        DEC     HL

       13        INC     DE

       10F7      DJNZ    23866             ; REPEAT 4 TIMES

       C9        RET



; "SCROLL ESQ/DIR" (SCROLL LEFT/RIGHT OF CURRENT CHAR)

23876  2AD25C    LD      HL,(23762)        ; CURRENT CHAR ADDRESS

       0608      LD      B,8               ; 8 BYTES

23881  CB0E      RRC     (HL)              ; POKED 'RRC' OR 'RLC' DEPENDING ON DIRECTION 

       23        INC     HL

       10FB      DJNZ    23881             ; REPEAT FOR EACH BYTE

       C9        RET



; "SCROLL CIMA" (SCROLL UP OF CURRENT CHAR)

23887  2AD25C    LD      HL,(23762)        ; CURRENT CHAR ADDRESS

       7E        LD      A,(HL)            ; PRESERVE FIRST BYTE

       54        LD      D,H               ; SHIFT 7 BYTES UP

       5D        LD      E,L

       23        INC     HL

       010700    LD      BC,7

       EDB0      LDIR

       2B        DEC     HL

       77        LD      (HL),A            ; STORE PRESERVED BYTE AT BOTTOM

       C9        RET



; "SCROLL BAIXO" (SCROLL DOWN OF CURRENT CHAR)

23902  2AD25C    LD      HL,(23762)        ; CURRENT CHAR ADDRESS

       010700    LD      BC,7

       09        ADD     HL,BC

       7E        LD      A,(HL)            ; PRESERVE LAST BYTE

       54        LD      D,H               ; SHIFT 7 BYTES DOWN

       5D        LD      E,L

       2B        DEC     HL

       EDB8      LDDR

       23        INC     HL

       77        LD      (HL),A            ; STORE PRESERVED BYTE AT TOP

       C9        RET



; "IMPRIME ALFA" (PRINT ENTIRE FONT)

23918  3E02      LD      A,2               ; PRINT #2

       CD0116    CALL    1601h

       112011    LD      DE,1120h          ; ASSIGN D=17; E=32

       0E04      LD      C,4               ; 4 ROWS

23928  0618      LD      B,24              ; 24 COLUMNS

       3E16      LD      A,22              ; PRINT AT D,4;

       D7        RST     10h

       7A        LD      A,D

       D7        RST     10h

       3E04      LD      A,4

       D7        RST     10h

       14        INC     D

23939  7B        LD      A,E               ; PRINT CHR$ E;

       D7        RST     10h

       1C        INC     E

       10FB      DJNZ    23939             ; REPEAT FOR EACH COLUMN

       0D        DEC     C

       20ED      JR      NZ,23928          ; REPEAT FOR EACH ROW

       C9        RET



; "TRANSFERE" (MEMORY TRANSFER)

23948  210000    LD      HL,0              ; POKED SOURCE ADDRESS

23951  110000    LD      DE,0              ; POKED DESTINATION ADDRESS

23954  010000    LD      BC,0              ; POKED SIZE

23957  EDB0      LDIR                      ; POKED 'LDIR' OR 'LDDR' DEPENDING ON DIRECTION

       C9        RET



; "TECLADO" (READ FROM KEYBOARD: Q,A,O,P,Z-M)

23960  21685B    LD      HL,23400          ; PRINTER BUFFER

       010000    LD      BC,0

       3EFE      LD      A,254

       DBFE      IN      A,(254)           ; READ V-C-X-Z-CAPS

       1E1E      LD      E,30

       A3        AND     E

       BB        CP      E                 ; CHECK V-C-X-Z

       200A      JR      NZ,23986

       3E7F      LD      A,127

       DBFE      IN      A,(254)           ; READ B-N-M-SYMB-SPACE

       1E1C      LD      E,28

       A3        AND     E

       BB        CP      E                 ; CHECK B-N-M

       2801      JR      Z,23987

23986  0C        INC     C

23987  71        LD      (HL),C            ; POKE 23400,(INKEY$="Z" OR ... OR INKEY$="M")

       23        INC     HL

       0E01      LD      C,1

       3EFB      LD      A,251

       DBFE      IN      A,(254)           ; READ T-R-E-W-Q

       1F        RRA

       3801      JR      C,23999           ; CHECK Q

       0D        DEC     C

23999  3EFD      LD      A,253

       DBFE      IN      A,(254)           ; READ G-F-D-S-A

       1F        RRA

       3801      JR      C,24007           ; CHECK A

       0C        INC     C

24007  71        LD      (HL),C            ; POKE 23401,1+(INKEY$="A")-(INKEY$="Q")

       23        INC     HL

       0E01      LD      C,1

       3EDF      LD      A,223

       DBFE      IN      A,(254)           ; READ Y-U-I-O-P

       1F        RRA

       3801      JR      C,24019

       0C        INC     C

24019  1F        RRA

       3801      JR      C,24023

       0D        DEC     C

24023  71        LD      (HL),C            ; POKE 23402,1+(INKEY$="P")-(INKEY$="O")

       C9        RET



; "JOYSTICK" (READ FROM SINCLAIR JOYSTICK: 6,7,8,9,0)

24025  21685B    LD      HL,23400          ; PRINTER BUFFER

       010000    LD      BC,0

       3EEF      LD      A,239

       DBFE      IN      A,(254)           ; READ 6-7-8-9-0

       1F        RRA

       3801      JR      C,24039           ; CHECK 0

       0C        INC     C

24039  71        LD      (HL),C            ; POKE 23400,(INKEY$="0")

       23        INC     HL

       0E01      LD      C,1

       1F        RRA

       3801      JR      C,24047           ; CHECK 9

       0D        DEC     C

24047  1F        RRA

       3801      JR      C,24051           ; CHECK 8

       0C        INC     C

24051  71        LD      (HL),C            ; POKE 23401,1+(INKEY$="8")-(INKEY$="9")

       23        INC     HL

       0E01      LD      C,1

       1F        RRA

       3801      JR      C,24059           ; CHECK 7

       0C        INC     C

24059  1F        RRA

       3801      JR      C,24063           ; CHECK 6

       0D        DEC     C

24063  71        LD      (HL),C            ; POKE 23402,1+(INKEY$="7")-(INKEY$="6")

       C9        RET



; "SAVE ALFA"

24065  AF        XOR     A

       37        SCF

       DD21EB5E  LD      IX,24299          ; HEADER ADDRESS

       111100    LD      DE,17

       CDC204    CALL    04C2h             ; SAVE-BYTES

       21FFFF    LD      HL,0FFFFh

       54        LD      D,H

       5D        LD      E,L

24082  19        ADD     HL,DE

       38FD      JR      C,24082

       3EFF      LD      A,255

       37        SCF

24088  DD2100EA  LD      IX,0EA00h         ; POKED FONT ADDRESS

       110003    LD      DE,768

       C3C204    JP      04C2h             ; SAVE-BYTES



; "LOAD/VERIFY ALFA"

24098  AF        XOR     A

       37        SCF

       DD21045B  LD      IX,23300          ; PRINTER BUFFER

       111100    LD      DE,17             ; HEADER SIZE

       CD5605    CALL    0556h             ; LOAD-BYTES

       30F2      JR      NC,24098

       3E02      LD      A,2               ; PRINT #2

       CD0116    CALL    1601h

       11AC5E    LD      DE,24236          ; PRINT TAPE MESSAGE

       010C00    LD      BC,12

       CD3C20    CALL    203Ch

       11055B    LD      DE,23301          ; PRINT FILENAME

       D5        PUSH    DE

       060A      LD      B,10

24132  1A        LD      A,(DE)

       FE20      CP      32

       3804      JR      C,24141

       FE80      CP      128

       3803      JR      C,24144

24141  3E20      LD      A,32

       12        LD      (DE),A

24144  D7        RST     10h

       13        INC     DE

       10F0      DJNZ    24132

       D1        POP     DE

       3A045B    LD      A,(23300)         ; IS HEADER?

       FE03      CP      +3

       20C6      JR      NZ,24098

       3A025B    LD      A,(23298)         ; MUST CHECK FILENAME?

       A7        AND     A

       280D      JR      Z,24175

       060A      LD      B,10              ; COMPARE FILENAME

       21185B    LD      HL,23320

24167  1A        LD      A,(DE)

       BE        CP      (HL)

       20B7      JR      NZ,24098

       23        INC     HL

       13        INC     DE

       10F8      DJNZ    24167

24175  11BF5E    LD      DE,24255          ; LOADING MESSAGE

       3A815E    LD      A,(24193)         ; LOAD OR VERIFY?

       A7        AND     A

       2803      JR      Z,24187

       11CA5E    LD      DE,24266          ; VERIFYING MESSAGE

24187  CD965E    CALL    24214             ; PRINT MESSAGE

       3EFF      LD      A,255             ; LOAD OR VERIFY

       37        SCF

24193  00        NOP                       ; POKED 'NOP' OR 'CCF' DEPENDING ON LOAD/VERIFY

24194  DD2100EA  LD      IX,0EA00h         ; POKED FONT ADDRESS

       110003    LD      DE,768

       CD5605    CALL    0556h             ; LOAD-BYTES

       3005      JR      NC,24211

       11D55E    LD      DE,24277          ; OK MESSAGE

       1803      JR      24214

24211  11E05E    LD      DE,24288          ; ERROR MESSAGE



; "IMPRIME MENSAGEM" (PRINT MESSAGE)

24214  D5        PUSH    DE

       3E02      LD      A,2               ; PRINT #2

       CD0116    CALL    1601h

       11B85E    LD      DE,24248          ; PRINT AT 14,19;PAPER 0;INK 7;

       010700    LD      BC,7

       CD3C20    CALL    203Ch

       D1        POP     DE                ; PRINT-STRING

       010B00    LD      BC,11

       C33C20    JP      203Ch



; "MENSAGENS" (MESSAGES)

24236  160E0211001007464954413A            ; AT 14,2;PAPER 0;INK 7;"FITA:"

24248  160E1311001007                      ; AT 14,19;PAPER 0;INK 7;

24255  434152524547414E444F20              ; "CARREGANDO " (LOADING MESSAGE)

24266  56455249464943414E444F              ; "VERIFICANDO" (VERIFYING MESSAGE)

24277  20204F4B20202020202020              ; "  OK       " (OK MESSAGE)

24288  204552524F202020202020              ; " ERRO      " (ERROR MESSAGE)

24299  0320202020202020202020000300FA0080  ; HEADER (17 BYTES)



; END.

