; ; 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.