home *** CD-ROM | disk | FTP | other *** search
Text File | 1985-02-18 | 97.7 KB | 2,113 lines |
- ZXMAIN SD SYSTEMS Z80 ASSEMBLER PAGE 0001
- ADDR CODE STMT SOURCE STATEMENT
-
- 0001 NAME ZXMAIN
- 0003 ;
- 0004 ; V 2.1 OF ZX65 IS MODIFIED TO BE LINKED AT ASSEMBLY
- 0005 ; TIME WITH ZXLD V 2.1. THIS COMBINATION IS TOTALLY
- 0006 ; RELOCATABLE, AND WILL FUNCTION UNDER ANY CPM 1.4
- 0007 ; SYSTEM SIZE. FORMAT IS FOR SD SYSTEMS ASSEMBLER
- 0008 ; V 3.3 AND LINKER V 3.0
- 0009 ;
- 0010 ; V 2.1 INCLUDES ALL PREVIOUS MODS PLUS CORRECTED
- 0011 ; JSR/JMP/RTS FUNCTIONS.
- 0012 ;
- 0013 GLOBAL RELBAS
- 0014 ;
- '>0000 0015 BASE EQU $
- '>0F00 0016 HOST EQU BASE+0F00H ; HOST SYSTEM CBIOS
- '>0F00 0017 SYSTK EQU HOST ; SYSTEM STACK
- '>0F03 0018 CPWRM EQU HOST+3 ; CP/M COLD ST
- '>0F06 0019 CONST EQU HOST+6 ; HOST SYSTEM INPUT TEST
- '>0F09 0020 CONIN EQU HOST+9 ; HOST SYSTEM CONS IN
- '>0F0C 0021 CONOUT EQU HOST+0CH ; HOST SYSTEM CONS OUT
- '>0F18 0022 HOME EQU HOST+18H ; DRIV HOME
- '>0F1B 0023 SETDRV EQU HOST+1BH ; SELECT DRVE
- '>0F1E 0024 SETTRK EQU HOST+1EH ; SELECT TRACK
- '>0F21 0025 SETSEC EQU HOST+21H ; SELECT SECTOR
- '>0F24 0026 SETBUF EQU HOST+24H ; SET XFER ADDRESS
- '>0F27 0027 READ EQU HOST+27H ; READ A SECTOR
- '>0F2A 0028 WRITE EQU HOST+2AH ; WRITE A SECTOR
- 0029 ;
- '0000 31000F' 0030 RELBAS LD SP,SYSTK
- '0003 0E01 0031 LD C,1
- '0005 CD3A0B' 0032 CALL DRVS ; ACTIVATE DRV B
- '0008 CD370B' 0033 CALL HOMB ; AND INIT IT
- '000B FD216C0B' 0034 LD IY,INTRO
- '000F CDD90A' 0035 CALL PRTXT ; PRINT HEADER
- '0012 CD4F0A' 0036 CALL CRLF
- 0037 ;
- 0038 ; COMMAND LEVEL...RETURN HERE FROM ANY POINT IN PGM
- 0039 ;
- '0015 211500' 0040 CMND LD HL,CMND
- '0018 E5 0041 PUSH HL ; RET ADDR ON STACK
- '0019 CD4F0A' 0042 CALL CRLF
- '001C CD590A' 0043 CALL PROM
- '001F CD160B' 0044 CALL GETCHR ; GET COMMAND
- '0022 FE45 0045 CP 'E'
- '0024 CAE906' 0046 JP Z,EXAM ; EXAM MEMORY
- '0027 FE4D 0047 CP 'M'
- '0029 CA4B07' 0048 JP Z,SUBM ; SUB MEMORY
- '002C DD21630B' 0049 LD IX,VREG ; FOR SIMX
- '0030 FE42 0050 CP 'B'
- '0032 2864 0051 JR Z,BRKP-$ ; RUN TO BREAKPOINT
- '0034 FE43 0052 CP 'C'
- '0036 CACE00' 0053 JP Z,RGSTR ; DSPLY/MODIFY CPU REGS
- '0039 FE47 0054 CP 'G'
- '003B CAC100' 0055 JP Z,RUN ; RUN FROM NPC
- '003E FE54 0056 CP 'T'
- '0040 282D 0057 JR Z,MULTX-$ ; TRACE/DISPLAY N STEPS
- '0042 FE20 0058 CP ' '
- '0044 2836 0059 JR Z,EXONE-$ ; EX ONE INSTR & STOP
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0002
- ADDR CODE STMT SOURCE STATEMENT
-
- '0046 DD21700C' 0060 LD IX,BUFFR ; FOR DOS
- '004A FE44 0061 CP 'D'
- '004C CAA807' 0062 JP Z,PDIR ; DOS DIR
- '004F FE49 0063 CP 'I'
- '0051 CACB08' 0064 JP Z,INIT ; DOS INITIALIZE
- '0054 FE4B 0065 CP 'K'
- '0056 CAB608' 0066 JP Z,KILL ; DOS ERASE
- '0059 FE4C 0067 CP 'L'
- '005B CAF507' 0068 JP Z,LOAD ; DOS LOADER
- '005E FE52 0069 CP 'R'
- '0060 CAEB07' 0070 JP Z,LDGO ; LOAD AND RUN PGM
- '0063 FE53 0071 CP 'S'
- '0065 CA1308' 0072 JP Z,SAVE ; DOS SAVER
- '0068 0E3F 0073 LD C,'?'
- '006A CD340B' 0074 CALL PRNC ; INVALID COMMAND
- '006D 18A6 0075 JR CMND-$
- 0076 ;
- 0077 ; EXECUTE N STEPS
- 0078 ;
- '006F FD21250C' 0079 MULTX LD IY,MLTMSG
- '0073 CDD90A' 0080 CALL PRTXT
- '0076 CD630A' 0081 CALL GETWRD ; GET N
- '0079 7B 0082 LD A,E
- '007A 2002 0083 JR NZ,DOMULT-$
- '007C 3E01 0084 EXONE LD A,1 ; EXECUTE 1 STEP
- 0085 ;
- 0086 ; EXECUTE # STEPS IN A
- 0087 ;
- '007E 325D0B' 0088 DOMULT LD (NSTEPS),A ; STORE N IN TEMP
- '0081 CD9601' 0089 CALL STEP ; EXEC & DSPLY INSTR
- '0084 CD1101' 0090 CALL DSPLY
- '0087 3A5D0B' 0091 LD A,(NSTEPS)
- '008A 3D 0092 DEC A
- '008B C8 0093 RET Z
- '008C F5 0094 PUSH AF
- '008D 015F0B' 0095 LD BC,DLYCON ; DELAY FOR VIEWING
- '0090 0B 0096 DOLP DEC BC
- '0091 78 0097 LD A,B
- '0092 B1 0098 OR C
- '0093 20FB 0099 JR NZ,DOLP-$
- '0095 F1 0100 POP AF
- '0096 18E6 0101 JR DOMULT-$
- 0102 ;
- 0103 ; RUN WITHOUT DISPLAY TO BREAKPOINT
- 0104 ;
- '0098 FD21370C' 0105 BRKP LD IY,BKPMSG
- '009C CDD90A' 0106 CALL PRTXT
- '009F CD630A' 0107 CALL GETWRD ; GET IT
- '00A2 ED53610B' 0108 LD (BREAK),DE ; STORE IT IN TEMP
- '00A6 CD9601' 0109 BKLP CALL STEP ; EXEC ONE INSTR
- '00A9 ED5B610B' 0110 LD DE,(BREAK)
- '00AD 7C 0111 LD A,H ; CHECK IF AT BKPT
- '00AE BA 0112 CP D
- '00AF 2009 0113 JR NZ,INTST-$
- '00B1 7D 0114 LD A,L
- '00B2 BB 0115 CP E
- '00B3 2005 0116 JR NZ,INTST-$
- '00B5 CD9601' 0117 CALL STEP ; DO ONE MORE
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0003
- ADDR CODE STMT SOURCE STATEMENT
-
- '00B8 1857 0118 JR DSPLY-$
- '00BA CD310B' 0119 INTST CALL KBST ; TEST FOR KBD INP
- '00BD 28E7 0120 JR Z,BKLP-$ ; CONTINUE IF NONE
- '00BF 1808 0121 JR QDSP-$
- 0122 ;
- 0123 ; RUN ONLY..NO DISPLAY OR BREAKPOINT
- 0124 ;
- '00C1 CD9601' 0125 RUN CALL STEP ; DO A STEP
- '00C4 CD310B' 0126 CALL KBST ; CHECK FOR KB INPUT
- '00C7 28F8 0127 JR Z,RUN-$ ; IF NONE JUST REPEAT
- 0128 ;
- 0129 ; STOP, DISPLAY, & RET TO CMND
- 0130 ;
- '00C9 CD2E0B' 0131 QDSP CALL KBIN ; CLEAR UART
- '00CC 1843 0132 JR DSPLY-$ ; DISP CPU & RET
- 0133 ;
- 0134 ; DISPLAY & UPDATE CPU REGISTERS
- 0135 ;
- '00CE DDE5 0136 RGSTR PUSH IX
- '00D0 CD4F0A' 0137 CALL CRLF
- '00D3 FD21B00B' 0138 LD IY,HEADR+42
- '00D7 CD8C01' 0139 CALL PRN6 ; PRINT RG NAME
- '00DA ED5B6A0B' 0140 LD DE,(NPC) ; NEXT PC TO DE
- '00DE CDB20A' 0141 CALL PRTWRD ; PRINT IT
- '00E1 CD590A' 0142 CALL PROM ; PROMPT FOR CHANGE
- '00E4 CD630A' 0143 CALL GETWRD
- '00E7 2804 0144 JR Z,AREG-$ ; SPACE = NO CHANGE
- '00E9 ED536A0B' 0145 LD (NPC),DE ; PUT IN NEW VALUE
- '00ED FD21920B' 0146 AREG LD IY,HEADR+12
- '00F1 0605 0147 LD B,5
- '00F3 CD4F0A' 0148 NREG CALL CRLF ; DO REST OF REGS
- '00F6 CD8C01' 0149 CALL PRN6 ; PRINT NAME
- '00F9 DD5E00 0150 LD E,(IX+0)
- '00FC CDB60A' 0151 CALL PRTBYT ; PRINT CONTENTS
- '00FF CD590A' 0152 CALL PROM ; PROMPT FOR CHANGE
- '0102 CD630A' 0153 CALL GETWRD
- '0105 2803 0154 JR Z,NXTREG-$ ; SPACE = NO CHANGE
- '0107 DD7300 0155 LD (IX+0),E
- '010A DD23 0156 NXTREG INC IX ; POINT TO NEXT REG
- '010C 10E5 0157 DJNZ NREG-$ ; DO AGAIN IF MORE
- '010E DDE1 0158 POP IX
- '0110 C9 0159 RET
- 0160 ;
- 0161 ; DISPLAY PC, INSTRUCTION, AND ALL REGISTERS
- 0162 ;
- '0111 DDE5 0163 DSPLY PUSH IX ; SAVE POINTER
- '0113 C5 0164 PUSH BC ; SAVE MNEMONIC CODE
- '0114 CD4F0A' 0165 CALL CRLF
- '0117 FD21860B' 0166 LD IY,HEADR
- '011B CD8C01' 0167 CALL PRN6 ; 'CPC'
- '011E ED5B680B' 0168 LD DE,(CPC)
- '0122 CDB20A' 0169 CALL PRTWRD ; VALUE
- '0125 CD8C01' 0170 CALL PRN6 ; 'INS'
- '0128 C1 0171 POP BC
- '0129 FDE5 0172 PUSH IY
- '012B C5 0173 PUSH BC
- '012C FD21AE0D' 0174 LD IY,MNMTBL ; DET MNEM FROM BC
- '0130 3EFC 0175 LD A,0FCH
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0004
- ADDR CODE STMT SOURCE STATEMENT
-
- '0132 A1 0176 AND C
- '0133 CB3F 0177 SRL A
- '0135 5F 0178 LD E,A
- '0136 1600 0179 LD D,0
- '0138 FD19 0180 ADD IY,DE
- '013A FD5E00 0181 LD E,(IY+0) ; GET PACKED MNEM
- '013D FD5601 0182 LD D,(IY+1)
- '0140 CB23 0183 SLA E ; UNPACK IT
- '0142 CB12 0184 RL D
- '0144 0E03 0185 LD C,3 ; & PRINT THREE CHRS
- '0146 AF 0186 MNM2 XOR A
- '0147 0605 0187 LD B,5
- '0149 CB23 0188 MNM1 SLA E
- '014B CB12 0189 RL D
- '014D 17 0190 RLA
- '014E 10F9 0191 DJNZ MNM1-$
- '0150 CBF7 0192 SET 6,A
- '0152 C5 0193 PUSH BC
- '0153 CD270B' 0194 CALL PRNA
- '0156 C1 0195 POP BC
- '0157 0D 0196 DEC C
- '0158 20EC 0197 JR NZ,MNM2-$
- '015A C1 0198 POP BC ; DECODE ADDR MODE
- '015B 78 0199 LD A,B
- '015C CB27 0200 SLA A
- '015E CB27 0201 SLA A
- '0160 CB27 0202 SLA A
- '0162 5F 0203 LD E,A
- '0163 1600 0204 LD D,0
- '0165 FD211E0E' 0205 LD IY,AMDTBL
- '0169 FD19 0206 ADD IY,DE
- '016B CD9101' 0207 CALL PRN8 ; PRINT ADDR MODE
- '016E FDE1 0208 POP IY
- '0170 0605 0209 LD B,5
- '0172 CD8C01' 0210 DSP1 CALL PRN6 ; PRINT ALL REGS
- '0175 DD5E00 0211 LD E,(IX+0)
- '0178 CDB60A' 0212 CALL PRTBYT
- '017B DD23 0213 INC IX
- '017D 10F3 0214 DJNZ DSP1-$
- '017F CD8C01' 0215 CALL PRN6 ; PRINT NEXT PC
- '0182 ED5B6A0B' 0216 LD DE,(NPC)
- '0186 CDB20A' 0217 CALL PRTWRD
- '0189 DDE1 0218 POP IX
- '018B C9 0219 RET
- 0220 ;
- '018C 1E06 0221 PRN6 LD E,6 ; PRINT 6 CHARS PER IY
- '018E C3DB0A' 0222 JP PRNLP
- '0191 1E08 0223 PRN8 LD E,8 ; PRINT 8 CHRS PER IY
- '0193 C3DB0A' 0224 JP PRNLP
- 0225 ;
- 0226 ; CODE FOR DECODING AND EXECUTING ONE INSTRUCTION
- 0227 ; ENTER WITH HL POINTING TO INSTR TO BE DECODED. EXITS
- 0228 ; WITH HL POINTING TO NEXT INSTR, B HOLDING ADDRESSING
- 0229 ; MODE CODE, C HOLDING MNEMONIC CODE
- 0230 ;
- '0196 2A6A0B' 0231 STEP LD HL,(NPC) ; NEXT PC TO HL
- '0199 22680B' 0232 LD (CPC),HL ; BECOMES CURRENT PC
- '019C 7E 0233 LD A,(HL) ; OP CODE
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0005
- ADDR CODE STMT SOURCE STATEMENT
-
- '019D B7 0234 OR A ; ZERO?
- '019E CAF601' 0235 JP Z,PBRK ; IF SO, 'BRK'
- '01A1 CB47 0236 BIT 0,A ; TEST LSD FOR ODD/EVEN
- '01A3 C21804' 0237 JP NZ,MLTMOD ; ODD INSTRS MULTI MODE
- '01A6 E60F 0238 AND 0FH
- '01A8 2018 0239 JR NZ,FLGTST-$
- '01AA 7E 0240 LD A,(HL) ; RESTORE OP CODE
- '01AB CB67 0241 BIT 4,A ; MSD ODD/EVEN
- '01AD C22A02' 0242 JP NZ,PBRNCH ; IF ODD, BRANCH
- '01B0 FE20 0243 CP 20H
- '01B2 CA6202' 0244 JP Z,PJSR ; PROCESS JSR
- '01B5 FE40 0245 CP 40H
- '01B7 CAAC02' 0246 JP Z,PRTI ; PROCESS RTI
- '01BA FE60 0247 CP 60H
- '01BC CAA302' 0248 JP Z,PRTS ; PROCESS RTS
- '01BF C31804' 0249 JP MLTMOD ; ELSE MULTI MODE
- '01C2 FE08 0250 FLGTST CP 8
- '01C4 200E 0251 JR NZ,IMP2-$
- '01C6 7E 0252 LD A,(HL) ; RESTORE
- '01C7 CB67 0253 BIT 4,A ; MSD ODD/EVEN
- '01C9 CA2103' 0254 JP Z,PIMPL ; IF EVEN, MST BE IMPLD
- '01CC FE98 0255 CP 98H ; MSD = 9?
- '01CE CADB03' 0256 JP Z,PTYA ; YES, PROC TYA SPECIAL
- '01D1 C3E803' 0257 JP PFLGS ; ELSE PROCESS FLAG OPS
- '01D4 FE0A 0258 IMP2 CP 0AH
- '01D6 2010 0259 JR NZ,JMPTST-$ ; MUST BE JUMP
- '01D8 7E 0260 LD A,(HL) ; RESTORE
- '01D9 E6F0 0261 AND 0F0H ; TESTS ON MSD
- '01DB CB67 0262 BIT 4,A ; ODD/EVEN
- '01DD C20603' 0263 JP NZ,PTSS ; PROSESS SP OPS SPECIAL
- '01E0 FE70 0264 CP 70H
- '01E2 DA1804' 0265 JP C,MLTMOD ; PROCESS ACCUM MODES
- '01E5 C32103' 0266 JP PIMPL ; ELSE MORE IMPLIEDS
- '01E8 7E 0267 JMPTST LD A,(HL) ; RESTORE OP CODE
- '01E9 FE4C 0268 CP 4CH
- '01EB CA8302' 0269 JP Z,PJABS ; PROCESS ABS JMP
- '01EE FE6C 0270 CP 6CH
- '01F0 CA8802' 0271 JP Z,PJIND ; PROCESS INDIRECT JMP
- '01F3 C31804' 0272 JP MLTMOD
- 0273 ;
- 0274 ; INSTURCTION PROCESSORS BEGIN HERE.. ENTER WITH
- 0275 ; HL = PC, IX POINTING TO SIM CPU
- 0276 ;
- 0277 ; IF BRK VECTOR (IPOINT) = 0, RETURN TO CMND
- 0278 ;
- '01F6 DDCB01E6 0279 PBRK SET 4,(IX+1) ; SET BRK STATUS BIT
- '01FA 2A5B0B' 0280 LD HL,(IPOINT) ; SEE IF RET TO CMND
- '01FD 7C 0281 LD A,H
- '01FE B5 0282 OR L
- '01FF 2007 0283 JR NZ,BRK1-$
- '0201 C1 0284 POP BC ; ADJUST SP
- '0202 012904 0285 LD BC,429H ; RET TO CMND
- '0205 C31101' 0286 JP DSPLY
- '0208 23 0287 BRK1 INC HL ; NORMAL BREAK
- '0209 CD0406' 0288 CALL TSPY ; SP TO IY
- '020C FD7400 0289 LD (IY+0),H ; 'PUSH' PC
- '020F FD2B 0290 DEC IY
- '0211 FD7500 0291 LD (IY+0),L
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0006
- ADDR CODE STMT SOURCE STATEMENT
-
- '0214 FD2B 0292 DEC IY
- '0216 DD7E01 0293 LD A,(IX+1) ; 'PUSH' P
- '0219 FD7700 0294 LD (IY+0),A
- '021C FD2B 0295 DEC IY
- '021E CD0D06' 0296 CALL TYSP ; IY TO SP
- '0221 2A5B0B' 0297 LD HL,(IPOINT) ; GET INTERRUPT VECTOR
- '0224 012904 0298 LD BC,429H ; CODE FOR # BYTES & MNEM
- '0227 C3D705' 0299 JP END1 ; AND FINISH
- 0300 ;
- 0301 ; PROCESS BRANCHES
- 0302 ;
- '022A 0600 0303 PBRNCH LD B,0 ; FORM INDEX INTO MSKTBL
- '022C 4E 0304 LD C,(HL) ; INSTR TO C
- '022D FD21420D' 0305 LD IY,MSKTBL
- '0231 CB39 0306 SRL C ; GET MSD
- '0233 CB39 0307 SRL C
- '0235 CB39 0308 SRL C
- '0237 CB39 0309 SRL C
- '0239 0D 0310 DEC C
- '023A FD09 0311 ADD IY,BC
- '023C 23 0312 INC HL ; POINT TO OFFSET
- '023D CB49 0313 BIT 1,C ; MSD ODD/EVEN
- '023F DD7E01 0314 LD A,(IX+1) ; P REG TO ACC
- '0242 FD4E00 0315 LD C,(IY+0) ; # CODE
- '0245 FD4601 0316 LD B,(IY+1) ; FLAG MASK
- '0248 2005 0317 JR NZ,BRSET-$ ; ODD/EVEN DET SET/CLR
- '024A A0 0318 AND B ; ISOLATE BIT FOR TEST
- '024B 2807 0319 JR Z,TRUE-$
- '024D 180E 0320 JR FALSE-$
- '024F A0 0321 BRSET AND B
- '0250 2002 0322 JR NZ,TRUE-$
- '0252 1809 0323 JR FALSE-$
- '0254 1600 0324 TRUE LD D,0 ; CONDITION MET; BRANCH
- '0256 5E 0325 LD E,(HL) ; OFFSET TO E
- '0257 CB7B 0326 BIT 7,E ; CHECK SIGN OF OFFSET
- '0259 2801 0327 JR Z,TRU1-$
- '025B 15 0328 DEC D ; IF B7 IS SET, DO NEG
- '025C 19 0329 TRU1 ADD HL,DE ; ADD OFFSET FOR NEW PC
- '025D 0600 0330 FALSE LD B,0 ; COND NOT MET; GO ON
- '025F C3D605' 0331 JP END
- 0332 ;
- 0333 ; PROCESS JUMPS AND JSR...JMP 0-4 AND JSR 0-4 GO INTO Z80
- 0334 ; ROUTINES PER JUMP TABLE AT USR0. CONTROL THEN RETURNS
- 0335 ; TO SIMULATOR UPON Z80 'RET' (C9).. ALL OTHERS PROCESSED
- 0336 ; NORMALLY.
- 0337 ;
- '0262 017302 0338 PJSR LD BC,273H ; JSR
- '0265 C5 0339 PUSH BC
- '0266 CDD002' 0340 CALL SPCTST ; TEST FOR USER
- '0269 2006 0341 JR NZ,PJS2-$
- '026B CDDE02' 0342 CALL INUSR ; GO TO USER SR
- '026E C1 0343 POP BC
- '026F 1838 0344 JR EE0-$
- '0271 CD0406' 0345 PJS2 CALL TSPY ; NORMAL JSR
- '0274 FD7400 0346 LD (IY+0),H ; PUSH CURRENT PC
- '0277 FD2B 0347 DEC IY
- '0279 FD7500 0348 LD (IY+0),L
- '027C FD2B 0349 DEC IY
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0007
- ADDR CODE STMT SOURCE STATEMENT
-
- '027E CD0D06' 0350 CALL TYSP
- '0281 181C 0351 JR DOJ1-$
- '0283 016F02 0352 PJABS LD BC,26FH ; ABS JMP
- '0286 1808 0353 JR DOJP-$
- '0288 016F0C 0354 PJIND LD BC,0C6FH ; INDIRECT JMP
- '028B CDD002' 0355 CALL SPCTST
- '028E EB 0356 EX DE,HL
- '028F 2B 0357 DEC HL
- '0290 C5 0358 DOJP PUSH BC
- '0291 CDD002' 0359 CALL SPCTST ; TEST FOR SPECIALS
- '0294 2009 0360 JR NZ,DOJ1-$
- '0296 CDDE02' 0361 CALL INUSR ; FOR SPECIALS
- '0299 CDC002' 0362 CALL PRET ; DO SR RETURN
- '029C C1 0363 POP BC
- '029D 180A 0364 JR EE0-$ ; GO TO PC+1
- '029F EB 0365 DOJ1 EX DE,HL ; NEW PC
- '02A0 C1 0366 POP BC
- '02A1 181A 0367 JR EE1-$
- 0368 ;
- 0369 ; PROCESS SR AND INTERRUPT RETURNS
- 0370 ;
- '02A3 CDC002' 0371 PRTS CALL PRET ; RTS...RESTORE PC
- '02A6 01A904 0372 LD BC,4A9H
- '02A9 C3D605' 0373 EE0 JP END ; GO TO PC+1
- '02AC CD0406' 0374 PRTI CALL TSPY ; RTI
- '02AF FD23 0375 INC IY
- '02B1 FD7E00 0376 LD A,(IY+0) ; RESTORE FLAGS
- '02B4 DD7701 0377 LD (IX+1),A
- '02B7 CDC302' 0378 CALL PRET1 ; RESTORE PC
- '02BA 01A504 0379 LD BC,4A5H
- '02BD C3D705' 0380 EE1 JP END1
- '02C0 CD0406' 0381 PRET CALL TSPY ; SP TO IY
- '02C3 FD23 0382 PRET1 INC IY ; POINT TO LAST ENTRY
- '02C5 FD6E00 0383 LD L,(IY+0) ; RESTORE PCL
- '02C8 FD23 0384 INC IY
- '02CA FD6600 0385 LD H,(IY+0) ; RESTORE PCH
- '02CD C30D06' 0386 JP TYSP ; RESTORE NEW SP
- 0387 ;
- 0388 ; TEST FOR USER SUBROUTINE CALLS/JUMPS. IF TARGET
- 0389 ; ADDRESS < 0005 THEN RET WITH Z FLG SET, ELSE CLR
- 0390 ;
- '02D0 23 0391 SPCTST INC HL ; TEST FOR USR SR
- '02D1 5E 0392 LD E,(HL) ; LO BYTE
- '02D2 23 0393 INC HL ; TARGET TO DE
- '02D3 56 0394 LD D,(HL) ; HI BYTE
- '02D4 3E00 0395 LD A,0 ; TARGET < 0005?
- '02D6 B2 0396 OR D
- '02D7 C0 0397 RET NZ
- '02D8 3E04 0398 LD A,4
- '02DA BB 0399 CP E
- '02DB D8 0400 RET C
- '02DC AF 0401 XOR A ; SET Z FLAG
- '02DD C9 0402 RET
- 0403 ;
- 0404 ; INDEX INTO USER SUBROUTINE TABLE
- 0405 ; PASS A, X, & Y TO/FROM USER ROUTINE AS A, B, & C.
- 0406 ;
- '02DE 1600 0407 INUSR LD D,0
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0008
- ADDR CODE STMT SOURCE STATEMENT
-
- '02E0 7B 0408 LD A,E
- '02E1 83 0409 ADD A,E
- '02E2 83 0410 ADD A,E
- '02E3 5F 0411 LD E,A
- '02E4 FD214C0B' 0412 LD IY,USR0
- '02E8 01F902' 0413 LD BC,USRET ; RETURN ON STACK
- '02EB C5 0414 PUSH BC
- '02EC FD19 0415 ADD IY,DE
- '02EE DD7E00 0416 LD A,(IX+0) ; PASS A,X, & Y
- '02F1 DD4602 0417 LD B,(IX+2)
- '02F4 DD4E03 0418 LD C,(IX+3)
- '02F7 FDE9 0419 JP (IY) ; AND GO
- '02F9 DD7700 0420 USRET LD (IX+0),A ; RETURN HERE
- '02FC DD7002 0421 LD (IX+2),B ; RETURN PARAMETERS
- '02FF DD7103 0422 LD (IX+3),C
- '0302 C9 0423 RET
- '0303 00 0424 NOP ; PAD FOR PATCH
- '0304 00 0425 NOP
- '0305 00 0426 NOP
- 0427 ;
- 0428 ; PROCESS SP EXCHANGES
- 0429 ;
- '0306 FE90 0430 PTSS CP 90H ; WHICH ONE IS IT?
- '0308 200C 0431 JR NZ,PTSX-$
- '030A DD7E02 0432 PTXS LD A,(IX+2) ; MOVE DATA FROM X...
- '030D DD7704 0433 LD (IX+4),A ; TO SP
- '0310 01D904 0434 LD BC,4D9H
- '0313 C3D605' 0435 JP END
- '0316 DD7E04 0436 PTSX LD A,(IX+4) ; MOVE SP
- '0319 DD7702 0437 LD (IX+2),A ; TO X REG
- '031C 0ED1 0438 LD C,0D1H
- '031E C3E303' 0439 JP COMPL ; AND MODIFY FLAGS
- 0440 ;
- 0441 ; PROCESS ALL REMAINING IMPLIED INSTRUCTIONS
- 0442 ;
- '0321 4F 0443 PIMPL LD C,A ; OP CODE
- '0322 CB39 0444 SRL C ; GET MSD
- '0324 CB39 0445 SRL C
- '0326 CB39 0446 SRL C
- '0328 CB39 0447 SRL C
- '032A E60F 0448 AND 0FH ; CHECK LSD
- '032C FE08 0449 CP 8
- '032E FD21620D' 0450 LD IY,IMPTBL ; INDEX INTO TABLE
- '0332 CADA06' 0451 JP Z,JPIB
- '0335 FD216A0D' 0452 LD IY,IMPTBL+8
- '0339 C3DA06' 0453 JP JPIB
- 0454 ;
- 0455 ; IMPLIED INSTR PROCESSORS
- 0456 ;
- '033C DD3402 0457 PINX INC (IX+2) ; INX
- '033F 0E65 0458 LD C,65H
- '0341 1813 0459 JR IDEFLG-$
- '0343 DD3403 0460 PINY INC (IX+3) ; INY
- '0346 0E69 0461 LD C,69H
- '0348 180C 0462 JR IDEFLG-$
- '034A DD3502 0463 PDEX DEC (IX+2) ; DEX
- '034D 0E55 0464 LD C,55H
- '034F 1805 0465 JR IDEFLG-$
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0009
- ADDR CODE STMT SOURCE STATEMENT
-
- '0351 DD3503 0466 PDEY DEC (IX+3) ; DEY
- '0354 0E59 0467 LD C,59H
- '0356 DDCB018E 0468 IDEFLG RES 1,(IX+1) ; SET/RES Z FLG
- '035A 2004 0469 JR NZ,SINTST-$ ; PER Z80 FLAGS
- '035C DDCB01CE 0470 SET 1,(IX+1)
- '0360 DDCB01BE 0471 SINTST RES 7,(IX+1) ; ALSO SIGN FLG
- '0364 F21304' 0472 JP P,ENDIT
- '0367 DDCB01FE 0473 SET 7,(IX+1)
- '036B C31304' 0474 JP ENDIT
- '036E 018504 0475 PNOP LD BC,485H ; NOP
- '0371 C3D605' 0476 JP END
- '0374 CD0406' 0477 PPHA CALL TSPY ; PHA
- '0377 DD7E00 0478 LD A,(IX+0) ; ACCUM
- '037A 0E8D 0479 LD C,8DH
- '037C 1808 0480 JR DOPUSH-$ ; PUSH IT
- '037E CD0406' 0481 PPHP CALL TSPY ; PHP
- '0381 DD7E01 0482 LD A,(IX+1) ; P REG
- '0384 0E91 0483 LD C,91H
- '0386 C5 0484 DOPUSH PUSH BC
- '0387 FD7700 0485 LD (IY+0),A ; PLACE ON STACK
- '038A FD2B 0486 DEC IY ; BUMP SP DOWN
- '038C CD0D06' 0487 CALL TYSP ; & REPLACE IT
- '038F C1 0488 POP BC
- '0390 C31304' 0489 JP ENDIT
- '0393 CDB403' 0490 PPLA CALL DOPULL ; PLA
- '0396 DD7700 0491 LD (IX+0),A ; DATA TO ACC
- '0399 CDED05' 0492 CALL SINS1 ; SET/RES S,Z FLGS
- '039C CD0D06' 0493 CALL TYSP ; RESTORE SP
- '039F 019504 0494 LD BC,495H
- '03A2 C3D605' 0495 JP END
- '03A5 CDB403' 0496 PPLP CALL DOPULL ; PLP
- '03A8 DD7701 0497 LD (IX+1),A ; DATA TO P REG
- '03AB CD0D06' 0498 CALL TYSP ; RESTORE SP
- '03AE 019904 0499 LD BC,499H
- '03B1 C3D605' 0500 JP END
- '03B4 CD0406' 0501 DOPULL CALL TSPY ; GET SP
- '03B7 FD23 0502 INC IY ; BUMP SP
- '03B9 FD7E00 0503 LD A,(IY+0) ; GET DATA
- '03BC C9 0504 RET
- 0505 ;
- 0506 ; PROCESS ACC/INDEX TRANSFERS
- 0507 ;
- '03BD DD7E00 0508 PTAX LD A,(IX+0) ; TAX
- '03C0 DD7702 0509 LD (IX+2),A
- '03C3 0EC9 0510 LD C,0C9H
- '03C5 181C 0511 JR COMPL-$
- '03C7 DD7E00 0512 PTAY LD A,(IX+0) ; TAY
- '03CA DD7703 0513 LD (IX+3),A
- '03CD 0ECD 0514 LD C,0CDH
- '03CF 1812 0515 JR COMPL-$
- '03D1 DD7E02 0516 PTXA LD A,(IX+2) ; TXA
- '03D4 DD7700 0517 LD (IX+0),A
- '03D7 0ED5 0518 LD C,0D5H
- '03D9 1808 0519 JR COMPL-$
- '03DB DD7E03 0520 PTYA LD A,(IX+3) ; TYA
- '03DE DD7700 0521 LD (IX+0),A
- '03E1 0EDD 0522 LD C,0DDH
- '03E3 CDED05' 0523 COMPL CALL SINS1 ; SET/RES S,Z FLGS
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0010
- ADDR CODE STMT SOURCE STATEMENT
-
- '03E6 182B 0524 JR ENDIT-$
- 0525 ;
- 0526 ; PROCESS FLAG SET/RES INSTRUCTIONS
- 0527 ;
- '03E8 FD21520D' 0528 PFLGS LD IY,FLGTBL ; TABLE START
- '03EC 0600 0529 LD B,0
- '03EE FEB8 0530 CP 0B8H ; CLV SPECIAL
- '03F0 2002 0531 JR NZ,PFL1-$
- '03F2 CBAF 0532 RES 5,A
- '03F4 1F 0533 PFL1 RRA ; CHECK MSD
- '03F5 1F 0534 RRA
- '03F6 1F 0535 RRA
- '03F7 1F 0536 RRA
- '03F8 E60E 0537 AND 0EH ; MASK MSD + 1
- '03FA CB4F 0538 BIT 1,A ; TEST FOR SET/RES
- '03FC 4F 0539 LD C,A ; FORM TABLE INDEX
- '03FD FD09 0540 ADD IY,BC
- '03FF FD4E00 0541 LD C,(IY+0) ; GET MNEM CODE
- '0402 FD7E01 0542 LD A,(IY+1) ; GET MASK
- '0405 2006 0543 JR NZ,PFL2-$
- '0407 2F 0544 CPL ; DO CLEARS
- '0408 DDA601 0545 AND (IX+1)
- '040B 1803 0546 JR PFL3-$
- '040D DDB601 0547 PFL2 OR (IX+1) ; DO SETS
- '0410 DD7701 0548 PFL3 LD (IX+1),A ; AND STUFF IT
- '0413 0604 0549 ENDIT LD B,4
- '0415 C3D605' 0550 JP END
- 0551 ;
- 0552 ; PROCESS ALL INSTRUCTIONS HAVING MULTIPLE ADDRESSING
- 0553 ;
- '0418 01D405' 0554 MLTMOD LD BC,MLTEND ; PUT RETURN ON STACK
- '041B C5 0555 PUSH BC
- '041C 7E 0556 LD A,(HL) ; GET INSTR TO A
- '041D 4F 0557 LD C,A ; AND TO C
- '041E CB39 0558 SRL C ; TEST EVEN/ODD
- '0420 F5 0559 PUSH AF
- '0421 CB39 0560 SRL C ; ROTATE MSD INTO LSD
- '0423 CB39 0561 SRL C
- '0425 CB39 0562 SRL C
- '0427 CB81 0563 RES 0,C ; MASK LSB
- '0429 F1 0564 POP AF
- '042A FD218E0D' 0565 LD IY,EVNTBL ; JUMP PER TABLES
- '042E D2DA06' 0566 JP NC,JPIB
- '0431 FD219E0D' 0567 LD IY,ODDTBL
- '0435 C3DA06' 0568 JP JPIB
- 0569 ;
- 0570 ; MULTI-MODE INSTRUCTION PROCESSORS
- 0571 ;
- '0438 CD1A06' 0572 PASL CALL MODBBB ; GET MODE,ADDR,&DATA
- '043B CB27 0573 SLA A ; ASL
- '043D CDE305' 0574 CALL SINSET ; SET/RES S,Z,C FLGS
- '0440 CDD806' 0575 CALL PUTDAT ; RESTORE DATA
- '0443 3E08 0576 LD A,8
- '0445 C9 0577 RET
- '0446 CB4F 0578 PBTRL BIT 1,A ; BIT OR ROL?
- '0448 2810 0579 JR Z,PBIT-$
- '044A CD1A06' 0580 CALL MODBBB ; ROL
- '044D CDDB05' 0581 CALL CARSET ; SET UP C FLAG
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0011
- ADDR CODE STMT SOURCE STATEMENT
-
- '0450 17 0582 PROL1 RLA ; DO ROTATE
- '0451 CDE305' 0583 CALL SINSET
- '0454 CDD806' 0584 CALL PUTDAT
- '0457 3E9C 0585 LD A,9CH
- '0459 C9 0586 RET
- '045A DDCB01B6 0587 PBIT RES 6,(IX+1) ; BIT
- '045E CD3206' 0588 CALL MODBBX
- '0461 C5 0589 PUSH BC
- '0462 47 0590 LD B,A ; SAVE IT IN B
- '0463 DD7E00 0591 LD A,(IX+0) ; GET SIM ACC
- '0466 A0 0592 AND B ; AND IT
- '0467 CB77 0593 BIT 6,A ; CHECK V BIT
- '0469 2804 0594 JR Z,PBIT1-$
- '046B DDCB01F6 0595 SET 6,(IX+1) ; SET V BIT IF REQD
- '046F CDED05' 0596 PBIT1 CALL SINS1 ; SET/RES S,Z FLGS
- '0472 C1 0597 POP BC
- '0473 3E18 0598 LD A,18H
- '0475 C9 0599 RET
- '0476 CD1A06' 0600 PLSR CALL MODBBB ; LSR
- '0479 CB3F 0601 SRL A
- '047B CDE305' 0602 CALL SINSET
- '047E CDD806' 0603 CALL PUTDAT
- '0481 3E80 0604 LD A,80H
- '0483 C9 0605 RET
- '0484 CD1A06' 0606 PROR CALL MODBBB ; ROR
- '0487 CDDB05' 0607 CALL CARSET ; SET UP C FLG
- '048A 1F 0608 PROR1 RRA ; DO ROTATE
- '048B CDE305' 0609 CALL SINSET
- '048E CDD806' 0610 CALL PUTDAT
- '0491 3EA0 0611 LD A,0A0H
- '0493 C9 0612 RET
- '0494 CB4F 0613 PSTXY BIT 1,A ; WHICH ONE?
- '0496 280C 0614 JR Z,PSY-$
- '0498 CD3206' 0615 CALL MODBBX ; STX
- '049B DD7E02 0616 LD A,(IX+2)
- '049E CDD806' 0617 CALL PUTDAT
- '04A1 3EC0 0618 LD A,0C0H
- '04A3 C9 0619 RET
- '04A4 CD3206' 0620 PSY CALL MODBBX ; STY
- '04A7 DD7E03 0621 LD A,(IX+3)
- '04AA CDD806' 0622 CALL PUTDAT
- '04AD 3EC4 0623 LD A,0C4H
- '04AF C9 0624 RET
- '04B0 CB4F 0625 PLDXY BIT 1,A ; WHICH ONE?
- '04B2 280C 0626 JR Z,PLY-$
- '04B4 CD2006' 0627 CALL MODDDD ; LDX
- '04B7 DD7702 0628 LD (IX+2),A
- '04BA CDED05' 0629 CALL SINS1
- '04BD 3E78 0630 LD A,78H
- '04BF C9 0631 RET
- '04C0 CD2006' 0632 PLY CALL MODDDD ; LDY
- '04C3 DD7703 0633 LD (IX+3),A
- '04C6 CDED05' 0634 CALL SINS1
- '04C9 3E7C 0635 LD A,7CH
- '04CB C9 0636 RET
- '04CC CB4F 0637 PDCY BIT 1,A ; WHICH ONE?
- '04CE 2827 0638 JR Z,PCPY-$
- '04D0 CD3206' 0639 CALL MODBBX ; DEC
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0012
- ADDR CODE STMT SOURCE STATEMENT
-
- '04D3 3D 0640 DEC A
- '04D4 CDED05' 0641 CALL SINS1
- '04D7 CDD806' 0642 CALL PUTDAT
- '04DA 3E50 0643 LD A,50H
- '04DC C9 0644 RET
- '04DD CB4F 0645 PICX BIT 1,A ; WHICH ONE?
- '04DF 280D 0646 JR Z,PCPX-$
- '04E1 CD3206' 0647 CALL MODBBX ; INC
- '04E4 3C 0648 INC A
- '04E5 CDED05' 0649 CALL SINS1
- '04E8 CDD806' 0650 CALL PUTDAT
- '04EB 3E60 0651 LD A,60H
- '04ED C9 0652 RET
- '04EE CD0405' 0653 PCPX CALL CXY ; CPX
- '04F1 CDE305' 0654 CALL SINSET
- '04F4 3E48 0655 LD A,48H
- '04F6 C9 0656 RET
- '04F7 DD23 0657 PCPY INC IX
- '04F9 CD0405' 0658 CALL CXY ; CPY
- '04FC DD2B 0659 DEC IX
- '04FE CDE305' 0660 CALL SINSET
- '0501 3E4C 0661 LD A,4CH
- '0503 C9 0662 RET
- '0504 CD4306' 0663 CXY CALL MODCC
- '0507 C5 0664 PUSH BC
- '0508 47 0665 LD B,A ; MEM DAT INTO B
- '0509 DD7E02 0666 LD A,(IX+2) ; X (Y) INTO A
- '050C 90 0667 SUB B
- '050D 3F 0668 CCF ; BORROW = 6502 /C
- '050E C1 0669 POP BC
- '050F C9 0670 RET
- '0510 DDCB01B6 0671 PSBC RES 6,(IX+1) ; SBC...CLR V FLG
- '0514 CD1406' 0672 CALL MODAAA
- '0517 C5 0673 PUSH BC
- '0518 47 0674 LD B,A ; DATA TO B
- '0519 DD7E00 0675 LD A,(IX+0) ; ACC TO A
- '051C CDDB05' 0676 CALL CARSET ; SET UP C FLAG
- '051F 3F 0677 CCF ; AND COMPLEMENT IT
- '0520 DDCB015E 0678 PSBC1 BIT 3,(IX+1) ; CHECK FOR DEC MODE
- '0524 2003 0679 JR NZ,PSDEC-$
- '0526 98 0680 SBC A,B
- '0527 1802 0681 JR PSBC2-$
- '0529 98 0682 PSDEC SBC A,B ; DECIMAL MODE
- '052A 27 0683 DAA
- '052B DD7700 0684 PSBC2 LD (IX+0),A ; RESULT TO ACCUM
- '052E 3F 0685 CCF ; BORROW = 6502 /C
- '052F CDE305' 0686 CALL SINSET
- '0532 E6C0 0687 AND 0C0H ; TEST XOR OF B6 & B7
- '0534 2808 0688 JR Z,SBC3-$
- '0536 FEC0 0689 CP 0C0H
- '0538 2804 0690 JR Z,SBC3-$
- '053A DDCB01F6 0691 SET 6,(IX+1) ; SET V FLAG IF XOR = 1
- '053E C1 0692 SBC3 POP BC
- '053F 3EAC 0693 LD A,0ACH
- '0541 C9 0694 RET
- '0542 CD1406' 0695 PORA CALL MODAAA ; ORA
- '0545 C5 0696 PUSH BC
- '0546 47 0697 LD B,A ; DATA TO B
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0013
- ADDR CODE STMT SOURCE STATEMENT
-
- '0547 DD7E00 0698 LD A,(IX+0) ; ACC TO A
- '054A B0 0699 OR B
- '054B DD7700 0700 LD (IX+0),A ; RESULT TO ACC
- '054E CDED05' 0701 CALL SINS1
- '0551 C1 0702 POP BC
- '0552 3E88 0703 LD A,88H
- '0554 C9 0704 RET
- '0555 CD1406' 0705 PAND CALL MODAAA ; AND
- '0558 C5 0706 PUSH BC
- '0559 47 0707 LD B,A ; DATA TO B
- '055A DD7E00 0708 LD A,(IX+0) ; ACC TO A
- '055D A0 0709 AND B
- '055E DD7700 0710 LD (IX+0),A ; RESULT TO ACC
- '0561 CDED05' 0711 CALL SINS1
- '0564 C1 0712 POP BC
- '0565 3E04 0713 LD A,4
- '0567 C9 0714 RET
- '0568 CD1406' 0715 PEOR CALL MODAAA ; EOR
- '056B C5 0716 PUSH BC
- '056C 47 0717 LD B,A ; DATA TO B
- '056D DD7E00 0718 LD A,(IX+0) ; ACC TO A
- '0570 A8 0719 XOR B
- '0571 DD7700 0720 LD (IX+0),A ; RESULT TO ACC
- '0574 CDED05' 0721 CALL SINS1
- '0577 C1 0722 POP BC
- '0578 3E5C 0723 LD A,5CH
- '057A C9 0724 RET
- '057B DDCB01B6 0725 PADC RES 6,(IX+1) ; ADC: CLEAR V FLAG
- '057F CD1406' 0726 CALL MODAAA
- '0582 C5 0727 PUSH BC
- '0583 47 0728 LD B,A ; DATA TO B
- '0584 DD7E00 0729 LD A,(IX+0) ; ACC TO A
- '0587 CDDB05' 0730 CALL CARSET ; SET UP C FLG
- '058A DDCB015E 0731 PADC1 BIT 3,(IX+1) ; CHECK FOR DEC MODE
- '058E 2003 0732 JR NZ,PADEC-$
- '0590 88 0733 ADC A,B ; BINARY MODE
- '0591 1802 0734 JR PADC2-$
- '0593 88 0735 PADEC ADC A,B ; DECIMAL MODE
- '0594 27 0736 DAA
- '0595 DD7700 0737 PADC2 LD (IX+0),A ; RESULT TO ACC
- '0598 CDE305' 0738 CALL SINSET
- '059B E6C0 0739 AND 0C0H ; CHECK XOR OF B6 & B7
- '059D 2808 0740 JR Z,PADC3-$
- '059F FEC0 0741 CP 0C0H
- '05A1 2804 0742 JR Z,PADC3-$
- '05A3 DDCB01F6 0743 SET 6,(IX+1) ; SET V FLG IF XOR = 1
- '05A7 C1 0744 PADC3 POP BC
- '05A8 3E00 0745 LD A,0
- '05AA C9 0746 RET
- '05AB CD1406' 0747 PSTA CALL MODAAA ; STA
- '05AE DD7E00 0748 LD A,(IX+0) ; ACC TO MEM
- '05B1 CDD806' 0749 CALL PUTDAT
- '05B4 3EBC 0750 LD A,0BCH
- '05B6 C9 0751 RET
- '05B7 CD1406' 0752 PLDA CALL MODAAA ; LDA
- '05BA DD7700 0753 LD (IX+0),A ; MEM TO ACC
- '05BD CDED05' 0754 CALL SINS1
- '05C0 3E74 0755 LD A,74H
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0014
- ADDR CODE STMT SOURCE STATEMENT
-
- '05C2 C9 0756 RET
- '05C3 CD1406' 0757 PCMP CALL MODAAA ; CMP
- '05C6 C5 0758 PUSH BC
- '05C7 47 0759 LD B,A ; DATA TO B
- '05C8 DD7E00 0760 LD A,(IX+0) ; ACC TO A
- '05CB 90 0761 SUB B
- '05CC 3F 0762 CCF ; BORROW = 6502 /C
- '05CD CDE305' 0763 CALL SINSET
- '05D0 C1 0764 POP BC
- '05D1 3E44 0765 LD A,44H
- '05D3 C9 0766 RET
- 0767 ;
- 0768 ; END OF ALL MULTI MODE PROCESSORS
- 0769 ;
- '05D4 81 0770 MLTEND ADD A,C ; FORM MNEM CODE IN C
- '05D5 4F 0771 LD C,A
- '05D6 23 0772 END INC HL ; POINT TO NXT INSTR
- '05D7 226A0B' 0773 END1 LD (NPC),HL
- '05DA C9 0774 RET ; BACK TO CMND
- 0775 ;
- 0776 ; VARIOUS SUBROUTINES FOR TRANSLATOR
- 0777 ;
- 0778 ; SET Z80 C FLAG TO MATCH 6502 C FLG
- 0779 ;
- '05DB 37 0780 CARSET SCF
- '05DC DDCB0146 0781 BIT 0,(IX+1)
- '05E0 C0 0782 RET NZ
- '05E1 3F 0783 CCF
- '05E2 C9 0784 RET
- 0785 ;
- 0786 ; SET SIMULATOR S,Z,C FLAGS PER Z80 RESULTS
- 0787 ;
- '05E3 DDCB0186 0788 SINSET RES 0,(IX+1) ; RESET C FLAG
- '05E7 3004 0789 JR NC,SINS1-$
- '05E9 DDCB01C6 0790 SET 0,(IX+1) ; SET C PER Z80 C
- '05ED DDCB018E 0791 SINS1 RES 1,(IX+1) ; CLEAR Z FLAG
- '05F1 0 0474 JP ENDIT
- '036E 018504 0475 PNOP LD BC,485H ; NOP
- '0371 C3D605' 0476 JP 1CE 0794 SET 1,(IX+1) ; SET Z FLG
- '05F8 DDCB01BE 0795 SINS2 RES 7,(IX+1) ; CLEAR SIGN FLAG
- '05FC CB7F 0796 BIT 7,A ; CHECK SIGN OF ACC
- '05FE C8 0797 RET Z
- '05FF DDCB01FE 0798 SET 7,(IX+1) ; SET S IF NECESSARY
- '0603 C9 0799 RET
- 0800 ;
- 0801 ; TRANSFER SIMULATOR SP TO/FROM IY
- 0802 ;
- '0604 0601 0803 TSPY LD B,1 ; XFER SP TO IY
- '0606 DD4E04 0804 LD C,(IX+4)
- '0609 C5 0805 PUSH BC
- '060A FDE1 0806 POP IY
- '060C C9 0807 RET
- '060D FDE5 0808 TYSP PUSH IY ; XFER IY TO SP
- '060F C1 0809 POP BC
- '0610 DD7104 0810 LD (IX+4),C
- '0613 C9 0811 RET
- 0812 ;
- 0813 ; ADDRESS MODE DECODERS...RETURN WITH DATA TO BE MODIFIED
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0015
- ADDR CODE STMT SOURCE STATEMENT
-
- 0814 ; IN A, ADDRESS MODE CODE IN B, # BYTES IN C, ADDRESS OF
- 0815 ; DATA IN DE
- 0816 ;
- '0614 FD21000D' 0817 MODAAA LD IY,AAATBL ; GROUP 1
- '0618 182D 0818 JR MOD1-$
- '061A FD21100D' 0819 MODBBB LD IY,BBBTBL ; GROUP 2
- '061E 1827 0820 JR MOD1-$
- '0620 FD21200D' 0821 MODDDD LD IY,DDDTBL ; GROUP 3
- '0624 FEB6 0822 CP 0B6H ; LDX ZPG,Y SPECIAL
- '0626 2002 0823 JR NZ,DDD1-$
- '0628 3E10 0824 LD A,10H
- '062A FEBE 0825 DDD1 CP 0BEH ; LDX ABS,Y SPECIAL
- '062C 2019 0826 JR NZ,MOD1-$
- '062E 3E18 0827 LD A,18H
- '0630 1815 0828 JR MOD1-$
- '0632 FD21300D' 0829 MODBBX LD IY,BBXTBL ; GROUP 4 & 6
- '0636 FE96 0830 CP 96H ; STX ZPG,Y SPECIAL
- '0638 2805 0831 JR Z,BBX-$
- '063A 1F 0832 RRA ; EXTRA SHIFT
- '063B E60C 0833 AND 0CH ; EXTRA MASK
- '063D 1808 0834 JR MOD1-$
- '063F 3E10 0835 BBX LD A,10H ; SPECIAL
- '0641 1804 0836 JR MOD1-$
- '0643 FD213A0D' 0837 MODCC LD IY,CCTBL ; GROUP 5
- '0647 1F 0838 MOD1 RRA ; ROTATE MODE INTO LSD
- '0648 E60E 0839 AND 0EH ; MASK THE REST
- '064A 0600 0840 LD B,0 ; FORM OFFSET IN BC
- '064C 4F 0841 LD C,A
- '064D FD09 0842 ADD IY,BC ; ADD TO TABLE START
- '064F FD4E00 0843 LD C,(IY+0) ; MODE OFFSET
- '0652 FD4601 0844 LD B,(IY+1) ; # CODE
- '0655 C5 0845 PUSH BC ; SAVE FOR LATER
- '0656 FD217A0D' 0846 GETDAT LD IY,GETTBL ; JUMP TABLE
- '065A C3DA06' 0847 JP JPIB
- '065D 23 0848 PABY INC HL ; ABS,Y
- '065E 7E 0849 LD A,(HL) ; 2ND BYTE INSTR
- '065F DD8603 0850 ADD A,(IX+3) ; PLUS Y INDEX
- '0662 5F 0851 LD E,A ; TO E
- '0663 23 0852 INC HL
- '0664 7E 0853 LD A,(HL) ; 3RD BYTE INSTR
- '0665 CE00 0854 ADC A,0 ; PLUS CARRY
- '0667 57 0855 LD D,A ; TO D
- '0668 1861 0856 JR EXIT-$
- '066A 23 0857 PIMM INC HL ; IMMEDIATE
- '066B 7E 0858 LD A,(HL) ; DATA TO ACC
- '066C 185E 0859 JR EX1-$
- '066E DD7E00 0860 PACX LD A,(IX+0) ; ACCUM
- '0671 DDE5 0861 PUSH IX
- '0673 D1 0862 POP DE
- '0674 1856 0863 JR EX1-$
- '0676 23 0864 PZPG INC HL ; ZPG
- '0677 5E 0865 LD E,(HL) ; ADDRESS TO DE
- '0678 1600 0866 LD D,0
- '067A 184F 0867 JR EXIT-$
- '067C 23 0868 PAB INC HL ; ABSOLUTE
- '067D 5E 0869 LD E,(HL) ; ADDRESS TO DE
- '067E 23 0870 INC HL
- '067F 56 0871 LD D,(HL)
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0016
- ADDR CODE STMT SOURCE STATEMENT
-
- '0680 1849 0872 JR EXIT-$
- '0682 DD7E02 0873 PZX LD A,(IX+2) ; ZPG,X...GET X INDEX
- '0685 1803 0874 JR PZ1-$
- '0687 DD7E03 0875 PZY LD A,(IX+3) ; ZPG,Y...GET Y INDEX
- '068A 23 0876 PZ1 INC HL
- '068B 86 0877 ADD A,(HL) ; ADD BASE ADDRESS
- '068C 5F 0878 LD E,A ; PUT IN E
- '068D 1600 0879 LD D,0 ; ZERO PAGE, NO WRAP
- '068F 183A 0880 JR EXIT-$
- '0691 23 0881 PZIX INC HL ; (ZPG,X)
- '0692 7E 0882 LD A,(HL) ; 2ND BYTE INSTR
- '0693 DD8602 0883 ADD A,(IX+2) ; ADD X INDEX
- '0696 5F 0884 LD E,A ; TO FORM BASE ADDRESS...
- '0697 1600 0885 LD D,0 ; IN ZERO PG, NO WRAP
- '0699 FD210000 0886 LD IY,0
- '069D FD19 0887 ADD IY,DE ; TRANSFER TO IY
- '069F FD5E00 0888 LD E,(IY+0) ; EFF ADDR TO DE
- '06A2 FD5601 0889 LD D,(IY+1)
- '06A5 1824 0890 JR EXIT-$
- '06A7 23 0891 PZIY INC HL ; (ZPG),Y
- '06A8 5E 0892 LD E,(HL) ; BASE ADDRESS
- '06A9 1600 0893 LD D,0 ; IN ZERO PAGE
- '06AB FD210000 0894 LD IY,0
- '06AF FD19 0895 ADD IY,DE ; TRANSFER TO IY
- '06B1 FD7E00 0896 LD A,(IY+0) ; EFF ADDRESS...
- '06B4 DD8603 0897 ADD A,(IX+3) ; PLUS Y INDEX...
- '06B7 5F 0898 LD E,A ; TO DE
- '06B8 FD7E01 0899 LD A,(IY+1)
- '06BB CE00 0900 ADC A,0
- '06BD 57 0901 LD D,A
- '06BE 180B 0902 JR EXIT-$
- '06C0 23 0903 PABX INC HL ; ABS,X
- '06C1 7E 0904 LD A,(HL) ; 2ND BYTE INSTR
- '06C2 DD8602 0905 ADD A,(IX+2) ; PLUS X INDEX
- '06C5 5F 0906 LD E,A ; TO E
- '06C6 23 0907 INC HL ; 3RD BYTE INSTR
- '06C7 7E 0908 LD A,(HL)
- '06C8 CE00 0909 ADC A,0 ; PLUS CARRY
- '06CA 57 0910 LD D,A ; TO E
- '06CB 1A 0911 EXIT LD A,(DE) ; DATA TO ACC
- '06CC C1 0912 EX1 POP BC ; RESTORE # CODE
- '06CD F5 0913 PUSH AF ; SAVE DATA
- '06CE 3E03 0914 LD A,3
- '06D0 A0 0915 AND B ; # BYTES...
- '06D1 4F 0916 LD C,A ; TO C
- '06D2 CB38 0917 SRL B
- '06D4 CB38 0918 SRL B ; B=ADDR MODE
- '06D6 F1 0919 POP AF ; RESTORE DATA
- '06D7 C9 0920 RET
- 0921 ;
- 0922 ; STORE DATA TO ADDRESS FROM GETDAT
- 0923 ;
- '06D8 12 0924 PUTDAT LD (DE),A
- '06D9 C9 0925 RET
- 0926 ;
- 0927 ; INDEX INTO JUMP TABLES...ENTER WITH TABLE START
- 0928 ; ADDRESS IN IY AND OFFSET IN C. CALCULATES TABLE
- 0929 ; POSITION AND JUMPS TO RESULT
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0017
- ADDR CODE STMT SOURCE STATEMENT
-
- 0930 ;
- '06DA 0600 0931 JPIB LD B,0 ; INDIRECT JUMP PER TABLE
- '06DC FD09 0932 ADD IY,BC ; TABLE ADDRESS TO IY
- '06DE FD4E00 0933 LD C,(IY+0) ; TABLE ENTRY TO BC
- '06E1 FD4601 0934 LD B,(IY+1)
- '06E4 C5 0935 PUSH BC
- '06E5 FDE1 0936 POP IY ; ENTRY TO IY
- '06E7 FDE9 0937 JP (IY) ; AND GO TO IT
- 0938 ;
- 0939 ; ELEMENTARY MONITOR FUNCTIONS TO EXAMINE A BLOCK OF
- 0940 ; MEMORY LOCATIONS (E) AND TO CHECK AND UPDATE
- 0941 ; INDIVIDUAL LOCATIONS (M)
- 0942 ;
- '06E9 11E40B' 0943 EXAM LD DE,GETADR ; EXAM BLOCK OF MEM
- '06EC CDCE0A' 0944 CALL PRTDE
- '06EF CD630A' 0945 CALL GETWRD ; GET START ADDR
- '06F2 D5 0946 PUSH DE
- '06F3 CD540A' 0947 CALL LINF
- '06F6 11FC0B' 0948 LD DE,GETN
- '06F9 CDCE0A' 0949 CALL PRTDE
- '06FC CD630A' 0950 CALL GETWRD ; GET # BYTES
- '06FF D5 0951 PUSH DE
- '0700 C1 0952 POP BC
- '0701 1E04 0953 LD E,4 ; CHANGE TO # LINES (/16)
- '0703 AF 0954 XOR A
- '0704 CB38 0955 BYTLN SRL B
- '0706 CB19 0956 RR C
- '0708 3001 0957 JR NC,XXX-$
- '070A 3C 0958 INC A
- '070B 1D 0959 XXX DEC E
- '070C 20F6 0960 JR NZ,BYTLN-$
- '070E B7 0961 OR A ; SEE IF PARTIAL LINE
- '070F 2801 0962 JR Z,YYY-$
- '0711 03 0963 INC BC
- '0712 E1 0964 YYY POP HL ; HL = START, BC = COUNT
- '0713 0B 0965 DEC BC ; ONE LESS LINE
- '0714 C5 0966 EXLP PUSH BC ; LOOP FOR ONE LINE
- '0715 CD4F0A' 0967 CALL CRLF
- '0718 CD9007' 0968 CALL LADR ; PRINT ADDRESS AT START
- '071B CD9D07' 0969 CALL TWO ; INSERT TWO SPACES
- '071E E5 0970 PUSH HL ; SAVE ADDRESS FOR ALPHA
- '071F 1E10 0971 LD E,16 ; 16 ENTRIES PER LINE
- '0721 7E 0972 LNLP LD A,(HL) ; GET BYTE FROM MEMORY
- '0722 CD9607' 0973 CALL PACC ; PRINT IT HEX
- '0725 CDA007' 0974 CALL ONE ; SPACE
- '0728 23 0975 INC HL ; POINT TO NEXT BYTE
- '0729 1D 0976 DEC E ; DONE WITH HEX?
- '072A 20F5 0977 JR NZ,LNLP-$ ; NO, DO NEXT BYTE
- '072C CD9D07' 0978 CALL TWO ; YES, SET UP FOR ALPHA
- '072F E1 0979 POP HL ; SAME STARTING ADDRESS
- '0730 1E10 0980 LD E,16
- '0732 7E 0981 ASCII LD A,(HL) ; GET BYTE
- '0733 FE20 0982 CP 20H ; IS IT PRINTABLE?
- '0735 3804 0983 JR C,DOT-$
- '0737 FE80 0984 CP 80H
- '0739 3802 0985 JR C,ASOK-$
- '073B 3E2E 0986 DOT LD A,'.' ; NO, PRINT A DOT
- '073D CD270B' 0987 ASOK CALL PRNA
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0018
- ADDR CODE STMT SOURCE STATEMENT
-
- '0740 23 0988 INC HL ; BUMP POINTER
- '0741 1D 0989 DEC E ; DONE WITH LINE?
- '0742 20EE 0990 JR NZ,ASCII-$
- '0744 C1 0991 POP BC
- '0745 78 0992 LD A,B ; SEE IF ALL DONE
- '0746 B1 0993 OR C
- '0747 C8 0994 RET Z ; YES, RET TO CMND
- '0748 0B 0995 DEC BC
- '0749 18C9 0996 JR EXLP-$ ; ELSE DO ANOTHER LINE
- 0997 ;
- 0998 ; SUBSTITUTE MEMORY...ENTER BY 'M'
- 0999 ;
- '074B 11E40B' 1000 SUBM LD DE,GETADR ; ASK FOR ADDRESS
- '074E CDCE0A' 1001 CALL PRTDE
- '0751 CD630A' 1002 CALL GETWRD ; GET IT
- '0754 EB 1003 EX DE,HL ; MOVE IT TO HL
- '0755 CD4F0A' 1004 SULP CALL CRLF
- '0758 CD9007' 1005 CALL LADR ; PRINT THE ADDRESS
- '075B CD9D07' 1006 CALL TWO
- '075E 7E 1007 LD A,(HL)
- '075F CD9607' 1008 CALL PACC ; PRINT THE CONTENTS
- '0762 CD9D07' 1009 CALL TWO
- '0765 CD160B' 1010 JLP CALL GETCHR ; GET INPUT
- '0768 FE2E 1011 CP 2EH ; EXIT ON "."
- '076A C8 1012 RET Z
- '076B FE20 1013 CP 20H
- '076D 281E 1014 JR Z,FWD-$ ; SKIP AHEAD ON "SPACE"
- '076F CD890A' 1015 CALL CONV ; CONV HEX IF POSSIBLE
- '0772 28F1 1016 JR Z,JLP-$ ; NOT A HEX NUMBER
- '0774 E5 1017 PUSH HL ; SAVE ADDRESS AGAIN
- '0775 210000 1018 LD HL,0 ; CLEAR FOR ROTATE
- '0778 CDAB0A' 1019 LLP CALL ROBYT ; ROTATE NYBBLE INTO HL
- '077B CD160B' 1020 KLP CALL GETCHR ; GET ANOTHER CHARACTER
- '077E FE0D 1021 CP 0DH
- '0780 2807 1022 JR Z,PUTIN-$ ; IF "CR" STUFF IT
- '0782 CD890A' 1023 CALL CONV ; CONV BINARY
- '0785 28F4 1024 JR Z,KLP-$ ; NOT A HEX NUMBER
- '0787 18EF 1025 JR LLP-$ ; CONTINUE
- '0789 E5 1026 PUTIN PUSH HL ; DATA TO BC
- '078A C1 1027 POP BC
- '078B E1 1028 POP HL ; RETRIEVE ADDRESS
- '078C 71 1029 LD (HL),C ; STUFF THE DATA
- '078D 23 1030 FWD INC HL ; BUMP POINTER
- '078E 18C5 1031 JR SULP-$ ; ...AND CONTINUE
- '0790 EB 1032 LADR EX DE,HL ; PRINT WORD IN HL
- '0791 CDB20A' 1033 CALL PRTWRD
- '0794 EB 1034 EX DE,HL
- '0795 C9 1035 RET
- '0796 D5 1036 PACC PUSH DE ; PRINT BYTE IN A
- '0797 5F 1037 LD E,A
- '0798 CDB60A' 1038 CALL PRTBYT
- '079B D1 1039 POP DE
- '079C C9 1040 RET
- '079D CDA007' 1041 TWO CALL ONE ; PRINT 2 SPACES
- '07A0 C5 1042 ONE PUSH BC ; PRINT SPACE
- '07A1 0E20 1043 LD C,' '
- '07A3 CD340B' 1044 CALL PRNC
- '07A6 C1 1045 POP BC
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0019
- ADDR CODE STMT SOURCE STATEMENT
-
- '07A7 C9 1046 RET
- 1047 ;
- 1048 ; ELEMENTARY DOS BEGINS HERE. FILES ARE MAINTAINED ON
- 1049 ; DRIVE B ONLY AND ARE NOT CP/M COMPATIBLE. FUNCTIONS
- 1050 ; ARE DIRECTORY LIST (D), SAVE (S), LOAD (L), KILL (K)
- 1051 ; AND INITIALIZE (I).
- 1052 ; FILE NAMES CONSIST OF A PRIMARY FILE NAME OF UP TO
- 1053 ; SIX CHARS AND AN OPTIONAL FILE TYPE OF UP TO THREE.
- 1054 ;
- 1055 ; LIST DIRECTORY
- 1056 ;
- '07A8 CD3A0A' 1057 PDIR CALL DIR1 ; SET UP FOR DIR SCH
- '07AB CD8A09' 1058 PAGLP CALL NEWPG ; NEXT DIR PG TO BUFF
- '07AE 0608 1059 LD B,8 ; 8 ENTRIES/PAGE
- '07B0 DD7E00 1060 PRPAG LD A,(IX+0) ; STATUS BYTE
- '07B3 3D 1061 DEC A
- '07B4 C8 1062 RET Z ; QUIT IF DONE
- '07B5 3D 1063 DEC A
- '07B6 202A 1064 JR NZ,NEXT-$
- '07B8 CD4F0A' 1065 CALL CRLF
- '07BB C5 1066 PRLIN PUSH BC ; PRINT NAME FROM DIR
- '07BC DDE5 1067 PUSH IX
- '07BE 060A 1068 LD B,10
- '07C0 DD4E01 1069 PLNLP LD C,(IX+1)
- '07C3 CD340B' 1070 CALL PRNC
- '07C6 DD23 1071 INC IX
- '07C8 10F6 1072 DJNZ PLNLP-$
- '07CA DDE1 1073 POP IX
- '07CC CD0A0B' 1074 CALL SPAC
- '07CF DD5E0B 1075 LD E,(IX+11) ; PRINT ADDRESS
- '07D2 DD560C 1076 LD D,(IX+12)
- '07D5 CDB20A' 1077 CALL PRTWRD
- '07D8 CD0A0B' 1078 CALL SPAC
- '07DB DD5E0F 1079 LD E,(IX+15) ; PRINT # RECORDS
- '07DE CDB60A' 1080 CALL PRTBYT
- '07E1 C1 1081 POP BC
- '07E2 111000 1082 NEXT LD DE,10H
- '07E5 DD19 1083 ADD IX,DE ; POINT TO NXT ENTRY
- '07E7 10C7 1084 DJNZ PRPAG-$ ; AND REPEAT
- '07E9 18C0 1085 JR PAGLP-$
- 1086 ;
- 1087 ; LOAD PGM FROM DRIVE B AND RUN FROM START ADDRESS
- 1088 ;
- '07EB CDF507' 1089 LDGO CALL LOAD ; GET PGM
- '07EE DD21630B' 1090 LD IX,VREG ; FOR SIMULATOR
- '07F2 C3C100' 1091 JP RUN
- 1092 ;
- 1093 ; SEARCH FOR AND LOAD A FILE AT ADDR PER DIRECTORY
- 1094 ;
- '07F5 CDF309' 1095 LOAD CALL ANAME ; LOAD A FILE
- '07F8 CD3A09' 1096 CALL NAMSCH ; TRY TO MATCH NAME
- '07FB CA9D09' 1097 JP Z,NTFND
- '07FE FD6EFB 1098 LD L,(IY-5) ; SAVE START ADDR
- '0801 FD66FC 1099 LD H,(IY-4)
- '0804 226A0B' 1100 LD (NPC),HL
- '0807 CDAA09' 1101 LOADLP CALL SETDAT ; SET UP FOR LOAD
- '080A CD460B' 1102 CALL RDONE ; AND READ N SECTORS
- '080D CDC309' 1103 CALL INCDAT
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0020
- ADDR CODE STMT SOURCE STATEMENT
-
- '0810 20F5 1104 JR NZ,LOADLP-$
- '0812 C9 1105 RET
- 1106 ;
- 1107 ; SAVE A FILE AND ADD IT TO DIRECTORY
- 1108 ;
- '0813 CDF309' 1109 SAVE CALL ANAME ; SAVE # SECTORS
- '0816 CD3A09' 1110 CALL NAMSCH ; SEE IF HAVE ALREADY
- '0819 280A 1111 JR Z,SAV1-$
- '081B CD540A' 1112 CALL LINF
- '081E 11C50B' 1113 LD DE,HAVMSG ; IF SO, INFORM & QUIT
- '0821 CDCE0A' 1114 CALL PRTDE
- '0824 C9 1115 RET
- '0825 FD21600C' 1116 SAV1 LD IY,TEMPS
- '0829 3E02 1117 LD A,2 ; NEW ACTIVE FILE
- '082B FD7700 1118 LD (IY+0),A
- '082E CD540A' 1119 CALL LINF
- '0831 11E40B' 1120 LD DE,GETADR ; GET RUN ADDR
- '0834 CDCE0A' 1121 CALL PRTDE
- '0837 CD630A' 1122 CALL GETWRD
- '083A FD730B 1123 LD (IY+11),E
- '083D FD720C 1124 LD (IY+12),D
- '0840 CD540A' 1125 CALL LINF
- '0843 11FC0B' 1126 LD DE,GETN ; GET # BYTES
- '0846 CDCE0A' 1127 CALL PRTDE
- '0849 CD630A' 1128 CALL GETWRD
- '084C AF 1129 XOR A ; CONVERT TO SECTORS
- '084D 0607 1130 LD B,7 ; DIV BY 128
- '084F CB3A 1131 SAVX SRL D
- '0851 CB1B 1132 RR E
- '0853 3001 1133 JR NC,SAVY-$
- '0855 3C 1134 INC A
- '0856 10F7 1135 SAVY DJNZ SAVX-$
- '0858 B7 1136 OR A ; FRACTIONAL SCTR?
- '0859 2801 1137 JR Z,SAVZ-$
- '085B 1C 1138 INC E ; THEN ADD ONE
- '085C FD730F 1139 SAVZ LD (IY+15),E ; SAVE IT
- '085F CD3A0A' 1140 CALL DIR1 ; SET UP FOR DIR SCH
- '0862 CD8A09' 1141 SAV2 CALL NEWPG ; SEARCH FOR NAME
- '0865 0608 1142 LD B,8
- '0867 DD7E00 1143 SAV3 LD A,(IX+0) ; STAT BYTE
- '086A 3D 1144 DEC A
- '086B 281F 1145 JR Z,SAVNEW-$ ; NEW FILE
- '086D D602 1146 SUB 2 ; DEAD FILE?
- '086F 2009 1147 JR NZ,SAV4-$
- '0871 FD7E0F 1148 LD A,(IY+15) ; WILL IT FIT?
- '0874 3D 1149 DEC A
- '0875 DDBE0F 1150 CP (IX+15)
- '0878 3821 1151 JR C,SAVOLD-$
- '087A 111000 1152 SAV4 LD DE,10H ; CHECK NXT ONE
- '087D DD19 1153 ADD IX,DE
- '087F DD56FD 1154 LD D,(IX-3) ; OLD TRACK
- '0882 DD5EFE 1155 LD E,(IX-2) ; OLD SECTOR
- '0885 DD4EFF 1156 LD C,(IX-1) ; OLD #
- '0888 10DD 1157 DJNZ SAV3-$
- '088A 18D6 1158 JR SAV2-$
- '088C 3E1A 1159 SAVNEW LD A,26 ; NEW ENTRY
- '088E 0C 1160 INC C
- '088F 1C 1161 NEWLP INC E
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0021
- ADDR CODE STMT SOURCE STATEMENT
-
- '0890 BB 1162 CP E ; >26?
- '0891 3003 1163 JR NC,NEW1-$
- '0893 14 1164 INC D ; IF SO, NXT TRK
- '0894 1E01 1165 LD E,1
- '0896 0D 1166 NEW1 DEC C
- '0897 20F6 1167 JR NZ,NEWLP-$
- '0899 1806 1168 JR UPDIR-$
- '089B DD560D 1169 SAVOLD LD D,(IX+13)
- '089E DD5E0E 1170 LD E,(IX+14)
- '08A1 FD720D 1171 UPDIR LD (IY+13),D ; PUT NEW TRK & SCTR
- '08A4 FD730E 1172 LD (IY+14),E
- '08A7 CD2809' 1173 CALL PUTDIR ; UPDATE DIR
- '08AA CDAA09' 1174 SAVER CALL SETDAT ; SET UP FOR SAVE
- '08AD CD490B' 1175 CALL WRONE ; & WRITE # SECTORS
- '08B0 CDC309' 1176 CALL INCDAT
- '08B3 20F5 1177 JR NZ,SAVER-$
- '08B5 C9 1178 RET
- 1179 ;
- 1180 ; KILL A FILE (SET INACTIVE STATUS IN DIRECTORY)
- 1181 ;
- '08B6 CDF309' 1182 KILL CALL ANAME ; GET NAME
- '08B9 CD3A09' 1183 CALL NAMSCH ; FIND IT
- '08BC CA9D09' 1184 JP Z,NTFND
- '08BF FD21600C' 1185 LD IY,TEMPS
- '08C3 3E03 1186 LD A,3 ; MAKE STAT = 03
- '08C5 FD360003 1187 LD (IY+0),3
- '08C9 185D 1188 JR PUTDIR-$ ; AND UPDATE DIRECTORY
- 1189 ;
- 1190 ; INITIALIZE DISK (WRITES BLANK DIRECTORY)
- 1191 ;
- '08CB 114B0C' 1192 INIT LD DE,INIMSG ; INITIALIZE DISK
- '08CE CDCE0A' 1193 CALL PRTDE
- '08D1 CD160B' 1194 CALL GETCHR ; ASK YES OR NO
- '08D4 FE59 1195 CP 'Y'
- '08D6 C0 1196 RET NZ
- '08D7 CD370B' 1197 CALL HOMB
- '08DA DD21700C' 1198 LD IX,BUFFR ; FILL BUFF W/PATTERN
- '08DE FD21F00C' 1199 LD IY,INIMSK ; STORED AT INIMSK
- '08E2 DDE5 1200 PUSH IX
- '08E4 0E08 1201 LD C,8
- '08E6 FDE5 1202 INLP1 PUSH IY
- '08E8 0610 1203 LD B,10H
- '08EA FD7E00 1204 INLP2 LD A,(IY+0)
- '08ED DD7700 1205 LD (IX+0),A
- '08F0 DD23 1206 INC IX
- '08F2 FD23 1207 INC IY
- '08F4 10F4 1208 DJNZ INLP2-$
- '08F6 FDE1 1209 POP IY
- '08F8 0D 1210 DEC C
- '08F9 20EB 1211 JR NZ,INLP1-$
- '08FB DDE1 1212 POP IX
- '08FD 3E03 1213 LD A,3 ; MAKE 1ST ONE DEAD
- '08FF DD7700 1214 LD (IX+0),A
- '0902 01700C' 1215 LD BC,BUFFR
- '0905 CD430B' 1216 CALL BUFS
- '0908 0E00 1217 LD C,0
- '090A CD400B' 1218 CALL TRKS
- '090D 0C 1219 INC C
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0022
- ADDR CODE STMT SOURCE STATEMENT
-
- '090E CD3D0B' 1220 CALL SECS
- '0911 CD490B' 1221 CALL WRONE ; 1ST DIR PAGE
- '0914 3E01 1222 LD A,1 ; RESTORE PATTERN
- '0916 DD7700 1223 LD (IX+0),A
- '0919 010219 1224 LD BC,1902H
- '091C C5 1225 WRLP PUSH BC ; WRITE REST OF TRK 0
- '091D CD3D0B' 1226 CALL SECS
- '0920 CD490B' 1227 CALL WRONE
- '0923 C1 1228 POP BC
- '0924 0C 1229 INC C
- '0925 10F5 1230 DJNZ WRLP-$
- '0927 C9 1231 RET
- 1232 ;
- 1233 ; OVERWRITE CURRENT DIRECTORY PAGE
- 1234 ;
- '0928 0610 1235 PUTDIR LD B,10H ; UPDATE DIR
- '092A FD7E00 1236 UPLP LD A,(IY+0)
- '092D DD7700 1237 LD (IX+0),A
- '0930 DD23 1238 INC IX
- '0932 FD23 1239 INC IY
- '0934 10F4 1240 DJNZ UPLP-$
- '0936 CD490B' 1241 CALL WRONE ; REWRITE DIR PAGE
- '0939 C9 1242 RET
- 1243 ;
- 1244 ; SEARCH FOR FILE NAME IN DIRECTORY.. RETURN WITH Z FLG
- 1245 ; SET IF NOT FOUND, Z CLEAR AND BUFFER FILLED IF FOUND
- 1246 ;
- '093A CD3A0A' 1247 NAMSCH CALL DIR1 ; SET UP FOR DIR SCH
- '093D CD8A09' 1248 LDLP CALL NEWPG ; READ PAGE OF NDX
- '0940 0608 1249 LD B,8
- '0942 DD7E00 1250 LDLP1 LD A,(IX+0) ; CHECK STAT
- '0945 3D 1251 DEC A
- '0946 2001 1252 JR NZ,LDLP2-$
- '0948 C9 1253 RET
- '0949 3D 1254 LDLP2 DEC A
- '094A DDE5 1255 PUSH IX
- '094C FDE5 1256 PUSH IY
- '094E 2013 1257 JR NZ,LDNXT-$ ; INACTIVE?
- '0950 0E0A 1258 LD C,10 ; ELSE COMP NAME
- '0952 FD7E01 1259 CMPLP LD A,(IY+1)
- '0955 DDBE01 1260 CP (IX+1)
- '0958 2009 1261 JR NZ,LDNXT-$
- '095A DD23 1262 INC IX
- '095C FD23 1263 INC IY
- '095E 0D 1264 DEC C
- '095F 20F1 1265 JR NZ,CMPLP-$
- '0961 180D 1266 JR CMPOK-$ ; SAME NAME
- '0963 FDE1 1267 LDNXT POP IY ; TRY NEXT ONE
- '0965 DDE1 1268 POP IX
- '0967 111000 1269 LD DE,10H
- '096A DD19 1270 ADD IX,DE
- '096C 10D4 1271 DJNZ LDLP1-$
- '096E 18CD 1272 JR LDLP-$ ; NEXT PAGE
- '0970 FDE1 1273 CMPOK POP IY ; NAME MATCHES
- '0972 DDE1 1274 POP IX
- '0974 0610 1275 LD B,10H ; XFER DIR NTRY TO BUFF
- '0976 DD7E00 1276 FILLP LD A,(IX+0)
- '0979 FD7700 1277 LD (IY+0),A
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0023
- ADDR CODE STMT SOURCE STATEMENT
-
- '097C DD23 1278 INC IX
- '097E FD23 1279 INC IY
- '0980 10F4 1280 DJNZ FILLP-$
- '0982 11F0FF 1281 LD DE,-10H
- '0985 DD19 1282 ADD IX,DE
- '0987 AF 1283 XOR A
- '0988 3C 1284 INC A ; EXIT A = 1
- '0989 C9 1285 RET
- '098A D9 1286 NEWPG EXX ; GET NXT DIR PAGE
- '098B DD21700C' 1287 LD IX,BUFFR
- '098F FD340E 1288 INC (IY+14) ; NXT SCTR
- '0992 FD4E0E 1289 LD C,(IY+14)
- '0995 CD3D0B' 1290 CALL SECS
- '0998 CD460B' 1291 CALL RDONE ; READ IT IN
- '099B D9 1292 EXX
- '099C C9 1293 RET
- '099D CD540A' 1294 NTFND CALL LINF ; NOT FOUND
- '09A0 11B60B' 1295 LD DE,NFMSG
- '09A3 CDCE0A' 1296 CALL PRTDE
- '09A6 31FE0E' 1297 LD SP,SYSTK-2 ; RET TO CMND
- '09A9 C9 1298 RET
- 1299 ;
- 1300 ; FILL IN DISK DATA. USES SR CALLS IN CBIOS
- 1301 ;
- '09AA FD21600C' 1302 SETDAT LD IY,TEMPS ; SET UP FOR DSK DATA
- '09AE FD4E0B 1303 LD C,(IY+11)
- '09B1 FD460C 1304 LD B,(IY+12)
- '09B4 CD430B' 1305 CALL BUFS ; XFER ADDR
- '09B7 FD4E0D 1306 LD C,(IY+13)
- '09BA CD400B' 1307 CALL TRKS ; TRACK
- '09BD FD4E0E 1308 LD C,(IY+14)
- '09C0 C33D0B' 1309 JP SECS ; SECTOR
- 1310 ;
- 1311 ; BUMP SECTOR/TRACK AND XFER ADDRESS FOR MULTI
- 1312 ; SECTOR READ OR WRITE
- 1313 ;
- '09C3 FD7E0B 1314 INCDAT LD A,(IY+11) ; BUMP DSK DATA
- '09C6 C680 1315 ADD A,80H ; BUMP XFER ADDR
- '09C8 FD770B 1316 LD (IY+11),A
- '09CB 3003 1317 JR NC,INC1-$
- '09CD FD340C 1318 INC (IY+12)
- '09D0 FD7E0E 1319 INC1 LD A,(IY+14)
- '09D3 3C 1320 INC A ; BUMP SECTOR
- '09D4 FE1B 1321 CP 27
- '09D6 3805 1322 JR C,INC2-$
- '09D8 3E01 1323 LD A,1
- '09DA FD340D 1324 INC (IY+13) ; AND TRK IF NEEDED
- '09DD FD770E 1325 INC2 LD (IY+14),A
- '09E0 FD7E0D 1326 LD A,(IY+13) ; CHECK FOR VALID TRACK
- '09E3 FE4D 1327 CP 77
- '09E5 3808 1328 JR C,INC3-$
- '09E7 11D10B' 1329 LD DE,DERMSG ; ERROR
- '09EA CDD90A' 1330 CALL PRTXT
- '09ED C1 1331 POP BC ; RET TO CMND
- '09EE C9 1332 RET
- '09EF FD350F 1333 INC3 DEC (IY+15)
- '09F2 C9 1334 RET
- 1335 ;
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0024
- ADDR CODE STMT SOURCE STATEMENT
-
- 1336 ; GET FILE NAME TO BUFFER
- 1337 ;
- '09F3 FD21600C' 1338 ANAME LD IY,TEMPS
- '09F7 FDE5 1339 PUSH IY
- '09F9 060A 1340 LD B,10
- '09FB 3E20 1341 LD A,' '
- '09FD FD7701 1342 MPTY LD (IY+1),A ; CLEAR INPUT BUFFER
- '0A00 FD23 1343 INC IY
- '0A02 10F9 1344 DJNZ MPTY-$
- '0A04 11100C' 1345 LD DE,NAMSG ; PROMPT FOR NAME
- '0A07 CDCE0A' 1346 CALL PRTDE
- '0A0A FDE1 1347 POP IY
- '0A0C FDE5 1348 PUSH IY
- '0A0E CD160B' 1349 NAMLP CALL GETCHR
- '0A11 FE0D 1350 CP 0DH ; END?
- '0A13 2822 1351 JR Z,NAMIN-$
- '0A15 FE2E 1352 CP '.' ; DELIMITER?
- '0A17 2807 1353 JR Z,FTYP-$
- '0A19 FD7701 1354 LD (IY+1),A ; PUT IT IN BUFFER
- '0A1C FD23 1355 INC IY
- '0A1E 18EE 1356 JR NAMLP-$
- '0A20 FDE1 1357 FTYP POP IY
- '0A22 FDE5 1358 PUSH IY
- '0A24 FD7707 1359 LD (IY+7),A
- '0A27 FD23 1360 INC IY
- '0A29 CD160B' 1361 TYPLP CALL GETCHR
- '0A2C FE0D 1362 CP 0DH
- '0A2E 2807 1363 JR Z,NAMIN-$
- '0A30 FD7707 1364 LD (IY+7),A
- '0A33 FD23 1365 INC IY
- '0A35 18F2 1366 JR TYPLP-$
- '0A37 FDE1 1367 NAMIN POP IY
- '0A39 C9 1368 RET
- 1369 ;
- 1370 ; SET UP FOR DIRECTORY SEARCH
- 1371 ;
- '0A3A FD21600C' 1372 DIR1 LD IY,TEMPS ; SET UP FOR DIR SCH
- '0A3E 01700C' 1373 LD BC,BUFFR
- '0A41 CD430B' 1374 CALL BUFS
- '0A44 0E00 1375 LD C,0 ; TRACK 0
- '0A46 FD710D 1376 LD (IY+13),C
- '0A49 FD710E 1377 LD (IY+14),C
- '0A4C C3400B' 1378 JP TRKS
- 1379 ;
- 1380 ; VARIOUS ROUTINES USED BY TRANSLATOR, MONITOR, AND DOS
- 1381 ;
- '0A4F 0E0D 1382 CRLF LD C,0DH ; PRINT CRLF
- '0A51 CD340B' 1383 CALL PRNC
- '0A54 0E0A 1384 LINF LD C,0AH
- '0A56 C3340B' 1385 JP PRNC
- '0A59 0E20 1386 PROM LD C,' ' ; PRINT ' >'
- '0A5B CD340B' 1387 CALL PRNC
- '0A5E 0E3E 1388 LD C,'>'
- '0A60 C3340B' 1389 JP PRNC
- 1390 ;
- 1391 ; GET HEX DATA IN DE. ROTATE CONTINUOUSLY UNTIL A
- 1392 ; 'CR' IS INPUT. LSB IN E. SET Z FLG AND RET ON 'SPACE'
- 1393 ;
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0025
- ADDR CODE STMT SOURCE STATEMENT
-
- '0A63 CD160B' 1394 GETWRD CALL GETCHR ; GET BINARY DATA
- '0A66 FE20 1395 CP ' ' ; RET Z IF S.ACE
- '0A68 C8 1396 RET Z
- '0A69 EB 1397 EX DE,HL
- '0A6A 210000 1398 LD HL,0 ; CLEAR HODING REG
- '0A6D CD890A' 1399 CALL CONV ; CHANGE TO HEX
- '0A70 28F1 1400 JR Z,GETWRD-$ ; INVALID CHAR
- '0A72 CDAB0A' 1401 CALL ROBYT ; ROTATE INTO HL
- '0A75 CD160B' 1402 WRDLP CALL GETCHR ; GET NEXT CHAR
- '0A78 FE0D 1403 CP 0DH ; TERMINATOR
- '0A7A 280A 1404 JR Z,WRDON-$
- '0A7C CD890A' 1405 CALL CONV
- '0A7F 28F4 1406 JR Z,WRDLP-$
- '0A81 CDAB0A' 1407 CALL ROBYT
- '0A84 18EF 1408 JR WRDLP-$
- '0A86 B7 1409 WRDON OR A ; CLEAR Z FLAG
- '0A87 EB 1410 EX DE,HL ; DATA INTO DE
- '0A88 C9 1411 RET
- 1412 ;
- 1413 ; CONVERT ASCII DATA IN A TO HEX. SET Z FLG IF INVALID
- 1414 ;
- '0A89 FE30 1415 CONV CP '0' ; CONVERT TO BINARY
- '0A8B 380C 1416 JR C,BAD-$
- '0A8D FE3A 1417 CP 3AH
- '0A8F 380F 1418 JR C,GOOD-$
- '0A91 FE41 1419 CP 41H
- '0A93 3804 1420 JR C,BAD-$
- '0A95 FE47 1421 CP 47H
- '0A97 3807 1422 JR C,GOOD-$
- '0A99 0E3F 1423 BAD LD C,'?'
- '0A9B CD340B' 1424 CALL PRNC ; NOTIFY BAD INPUT
- '0A9E AF 1425 XOR A ; SET Z FLAG
- '0A9F C9 1426 RET
- '0AA0 D630 1427 GOOD SUB 30H
- '0AA2 FE0A 1428 CP 10
- '0AA4 3802 1429 JR C,GOOD1-$
- '0AA6 D607 1430 SUB 7
- '0AA8 FEFF 1431 GOOD1 CP 0FFH ; CLEAR Z FLAG
- '0AAA C9 1432 RET
- 1433 ;
- 1434 ; ROTATE BYTE IN A INTO HL VIA L
- 1435 ;
- '0AAB 29 1436 ROBYT ADD HL,HL ; ROTATE A INTO HL
- '0AAC 29 1437 ADD HL,HL ; ROTATE HL 4 BITS LEFT
- '0AAD 29 1438 ADD HL,HL
- '0AAE 29 1439 ADD HL,HL
- '0AAF B5 1440 OR L ; PUT NEW DIGIT INTO L
- '0AB0 6F 1441 LD L,A
- '0AB1 C9 1442 RET
- 1443 ;
- 1444 ; PRINT FOUR DIGIT VALUE IN DE
- 1445 ;
- '0AB2 7A 1446 PRTWRD LD A,D
- '0AB3 CDB70A' 1447 CALL PRBIN
- '0AB6 7B 1448 PRTBYT LD A,E ; PRINT VALUE IN E
- '0AB7 F5 1449 PRBIN PUSH AF
- '0AB8 CB0F 1450 RRC A
- '0ABA CB0F 1451 RRC A
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0026
- ADDR CODE STMT SOURCE STATEMENT
-
- '0ABC CB0F 1452 RRC A
- '0ABE CB0F 1453 RRC A
- '0AC0 CDC40A' 1454 CALL PRB1
- '0AC3 F1 1455 POP AF
- '0AC4 E60F 1456 PRB1 AND 0FH
- '0AC6 C690 1457 ADD A,90H
- '0AC8 27 1458 DAA
- '0AC9 CE40 1459 ADC A,40H
- '0ACB 27 1460 DAA
- '0ACC 1859 1461 JR PRNA-$
- 1462 ;
- 1463 ; PRINT STRING POINTED TO BY DE. USES PRTXT
- 1464 ;
- '0ACE FDE5 1465 PRTDE PUSH IY ; PRNT PER DE
- '0AD0 D5 1466 PUSH DE
- '0AD1 FDE1 1467 POP IY
- '0AD3 CDD90A' 1468 CALL PRTXT
- '0AD6 FDE1 1469 POP IY
- '0AD8 C9 1470 RET
- 1471 ;
- 1472 ; PRINT ASCII STRING POINTED TO BY IY. CHECK FOR
- 1473 ; SPECIALS: '1' PRINTS AS BYTE POINTED TO BY HL, '2'
- 1474 ; PRINTS (HL+1), '!' DOES NOT PRINT, '^' TERMINATES.
- 1475 ;
- '0AD9 1E00 1476 PRTXT LD E,0 ; PRNT UP TO 255 CHRSY
- '0ADB FD7E00 1477 PRNLP LD A,(IY+0)
- '0ADE FE5E 1478 CP '^' ; TERMINATOR?
- '0AE0 C8 1479 RET Z
- '0AE1 FE21 1480 CP '!' ; NO PRINT?
- '0AE3 281F 1481 JR Z,DONXT+1-$
- '0AE5 D5 1482 PUSH DE
- '0AE6 2A680B' 1483 LD HL,(CPC)
- '0AE9 23 1484 INC HL
- '0AEA FE32 1485 CP '2' ; PRINT (HL+1)?
- '0AEC 2007 1486 JR NZ,PRN1-$
- '0AEE 23 1487 INC HL
- '0AEF 5E 1488 LD E,(HL)
- '0AF0 CDB60A' 1489 CALL PRTBYT
- '0AF3 180E 1490 JR DONXT-$
- '0AF5 FE31 1491 PRN1 CP '1' ; PRINT (HL)?
- '0AF7 2006 1492 JR NZ,DOALPH-$
- '0AF9 5E 1493 LD E,(HL)
- '0AFA CDB60A' 1494 CALL PRTBYT
- '0AFD 1804 1495 JR DONXT-$
- '0AFF 4F 1496 DOALPH LD C,A ; ALL OTHER CHARACTERS
- '0B00 CD340B' 1497 CALL PRNC
- '0B03 D1 1498 DONXT POP DE
- '0B04 FD23 1499 INC IY
- '0B06 1D 1500 DEC E
- '0B07 20D2 1501 JR NZ,PRNLP-$
- '0B09 C9 1502 RET
- 1503 ;
- '0B0A C5 1504 SPAC PUSH BC ; PRINT 6 SPACES
- '0B0B 0606 1505 LD B,6
- '0B0D 0E20 1506 LD C,' '
- '0B0F CD340B' 1507 SPLP CALL PRNC
- '0B12 10FB 1508 DJNZ SPLP-$
- '0B14 C1 1509 POP BC
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0027
- ADDR CODE STMT SOURCE STATEMENT
-
- '0B15 C9 1510 RET
- 1511 ;
- 1512 ; CONSOLE I/O
- 1513 ;
- '0B16 CD2E0B' 1514 GETCHR CALL KBIN ; GET CHAR & TEST
- '0B19 FE03 1515 CP 3 ; ^C....
- '0B1B CA030F' 1516 JP Z,CPWRM ; CPM WARM START
- '0B1E FE18 1517 CP 18H ; ^X (CAN)...
- '0B20 2005 1518 JR NZ,PRNA-$
- '0B22 31FE0E' 1519 LD SP,SYSTK-2 ; FOR RET TO CMND
- '0B25 3E23 1520 LD A,'#'
- '0B27 4F 1521 PRNA LD C,A ; PRINT CHAR IN A
- '0B28 F5 1522 PUSH AF
- '0B29 CD340B' 1523 CALL PRNC
- '0B2C F1 1524 POP AF
- '0B2D C9 1525 RET
- 1526 ;
- 1527 ; JUMPS TO EXTERNAL I/O...MODIFY AS NEEDED
- 1528 ;
- '0B2E C3090F' 1529 KBIN JP CONIN ; GET SINGLE CHAR IN A
- '0B31 C3060F' 1530 KBST JP CONST ; TEST INPUT STATUS
- '0B34 C30C0F' 1531 PRNC JP CONOUT ; PRINT CHAR IN C
- '0B37 C3180F' 1532 HOMB JP HOME ; DRIVE HOME
- '0B3A C31B0F' 1533 DRVS JP SETDRV ; SET DRIVE #
- '0B3D C3210F' 1534 SECS JP SETSEC ; SET SECTOR #
- '0B40 C31E0F' 1535 TRKS JP SETTRK ; SET TRK #
- '0B43 C3240F' 1536 BUFS JP SETBUF ; SET XFER ADDRESS
- '0B46 C3270F' 1537 RDONE JP READ ; READ A SECTOR
- '0B49 C32A0F' 1538 WRONE JP WRITE ; WRITE A SECTOR
- 1539 ;
- 1540 ; JUMP TABLE FOR LINKS TO Z80 ROUTINES...FILL IN AS REQD
- 1541 ; FIRST TWO INITIALIZED TO CONSOLE I/O VIA ACC
- 1542 ;
- '0B4C C32E0B' 1543 USR0 JP KBIN ; 6502 USER ROUTINES
- '0B4F C3270B' 1544 USR1 JP PRNA
- '0B52 C90000 1545 USR2 DEFB 0C9H,0,0
- '0B55 C90000 1546 USR3 DEFB 0C9H,0,0
- '0B58 C90000 1547 USR4 DEFB 0C9H,0,0
- 1548 ;
- 1549 ; 6502 BREAK VECTOR...INIT TO GO TO COMMAND LEVEL
- 1550 ;
- '0B5B 0000 1551 IPOINT DEFW 0
- 1552 ;
- 1553 ; TEMPORARIES FOR TRANSLATOR
- 1554 ;
- '0B5D 01 1555 NSTEPS DEFB 1 ; # STEPS TO EXECUTE
- '0B5E 00 1556 NBYTES DEFB 0 ; # BYTES IN INSTR
- '0B5F 000A 1557 DLYCON DEFW 0A00H ; TIME DELAY FOR # STEP
- '0B61 0000 1558 BREAK DEFW 0 ; BREAKPOINT ADDRESS
- 1559 ;
- 1560 ; SIMULATED 6502 CPU REGISTERS...INIT TO THESE VALUES
- 1561 ;
- '0B63 00 1562 VREG DEFB 0 ; ACCUMULATOR
- '0B64 00 1563 DEFB 0 ; STATUS (P) REG
- '0B65 00 1564 DEFB 0 ; X INDEX REG
- '0B66 00 1565 DEFB 0 ; Y INDEX REG
- '0B67 FF 1566 DEFB 0FFH ; STACK POINTER
- '0B68 0002 1567 CPC DEFW 200H ; PROGRAM COUNTER
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0028
- ADDR CODE STMT SOURCE STATEMENT
-
- '0B6A 0002 1568 NPC DEFW 200H ; LOCATION OF NXT INSTR
- 1569 ;
- 1570 ; VARIOUS MESSAGES FOR SYSTEM
- 1571 ;
- '0B6C 2A2A2A2A 1572 INTRO DEFM '***** XENTRIX ZX/65 *****^'
- 2A205845
- 4E545249
- 58205A58
- 2F363520
- 2A2A2A2A
- 2A5E
- '0B86 20435043 1573 HEADR DEFM ' CPC.. INS.. A.... P....'
- 2E2E2049
- 4E532E2E
- 20412E2E
- 2E2E2050
- 2E2E2E2E
- '0B9E 20582E2E 1574 DEFM ' X.... Y.... SP... NPC..'
- 2E2E2059
- 2E2E2E2E
- 2053502E
- 2E2E204E
- 50432E2E
- '0BB6 46494C45 1575 NFMSG DEFM 'FILE NOT FOUND^'
- 204E4F54
- 20464F55
- 4E445E
- '0BC5 46494C45 1576 HAVMSG DEFM 'FILE EXISTS^'
- 20455849
- 5354535E
- '0BD1 42414420 1577 DERMSG DEFM 'BAD TRACK/SECTOR #^'
- 54524143
- 4B2F5345
- 43544F52
- 20235E
- '0BE4 2020454E 1578 GETADR DEFM ' ENTER START ADDRESS: ^'
- 54455220
- 53544152
- 54204144
- 44524553
- 533A205E
- '0BFC 2020454E 1579 GETN DEFM ' ENTER NO. BYTES: ^'
- 54455220
- 4E4F2E20
- 42595445
- 533A205E
- '0C10 2020454E 1580 NAMSG DEFM ' ENTER FILNAM.TYP: ^'
- 54455220
- 46494C4E
- 414D2E54
- 59503A20
- 5E
- '0C25 2020454E 1581 MLTMSG DEFM ' ENTER # STEPS: ^'
- 54455220
- 23205354
- 4550533A
- 205E
- '0C37 2020454E 1582 BKPMSG DEFM ' ENTER BRKP ADDR: ^'
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0029
- ADDR CODE STMT SOURCE STATEMENT
-
- 54455220
- 42524B50
- 20414444
- 523A205E
- '0C4B 2020494E 1583 INIMSG DEFM ' INITIALIZE? (Y/N) ^'
- 49544941
- 4C495A45
- 3F202859
- 2F4E2920
- 5E
- 1584 ;
- 1585 ; DOS BUFFERS AND DATA
- 1586 ;
- >0C60 1587 TEMPS DEFS 10H ; DISK ENTRY BUFFER
- >0C70 1588 BUFFR DEFS 80H ; DIRECTORY PAGE BUFFER
- '0CF0 01202020 1589 INIMSK DEFB 1,20H,20H,20H,20H,20H,20H,20H
- 20202020
- '0CF8 20202020 1590 DEFB 20H,20H,20H,20H,20H,1,0,0
- 20010000
- 1591 ;
- 1592 ; DATA TABLES FOR TRANSLATOR BEGIN HERE
- 1593 ;
- 1594 ; ADDRESSING MODE TABLES
- 1595 ;
- '0D00 0C1A 1596 AAATBL DEFW 1A0CH ; (ZPG,X)
- '0D02 040E 1597 DEFW 0E04H ; ZPG
- '0D04 0006 1598 DEFW 0600H ; IMM
- '0D06 060B 1599 DEFW 0B06H ; ABS
- '0D08 0E1E 1600 DEFW 1E0EH ; (ZPG),Y
- '0D0A 0822 1601 DEFW 2208H ; ZPG,X
- '0D0C 122F 1602 DEFW 2F12H ; ABS,Y
- '0D0E 102B 1603 DEFW 2B10H ; ABS,X
- '0D10 0000 1604 BBBTBL DEFW 0 ; INVALID
- '0D12 040E 1605 DEFW 0E04H ; ZPG
- '0D14 0215 1606 DEFW 1502H ; ACC
- '0D16 060B 1607 DEFW 0B06H ; ABS
- '0D18 0A26 1608 DEFW 260AH ; ZPG,Y
- '0D1A 0822 1609 DEFW 2208H ; ZPG,X
- '0D1C 122F 1610 DEFW 2F12H ; ABS,Y
- '0D1E 102B 1611 DEFW 2B10H ; ABS,X
- '0D20 0006 1612 DDDTBL DEFW 0600H ; IMM
- '0D22 040E 1613 DEFW 0E04H ; ZPG
- '0D24 0000 1614 DEFW 0 ; INVALID
- '0D26 060B 1615 DEFW 0B06H ; ABS
- '0D28 0A26 1616 DEFW 260AH ; ZPG,Y
- '0D2A 0822 1617 DEFW 2208H ; ZPG,X
- '0D2C 122F 1618 DEFW 2F12H ; ABS,Y
- '0D2E 102B 1619 DEFW 2B10H ; ABS,X
- '0D30 040E 1620 BBXTBL DEFW 0E04H ; ZPG
- '0D32 060B 1621 DEFW 0B06H ; ABS
- '0D34 0822 1622 DEFW 2208H ; ZPG,X
- '0D36 102B 1623 DEFW 2B10H ; ABS,X
- '0D38 0A26 1624 DEFW 260AH ; ZPG,Y
- '0D3A 0006 1625 CCTBL DEFW 0600H ; IMM
- '0D3C 040E 1626 DEFW 0E04H ; ZPG
- '0D3E 0000 1627 DEFW 0 ; INVALID
- '0D40 060B 1628 DEFW 0B06H ; ABS
- 1629 ;
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0030
- ADDR CODE STMT SOURCE STATEMENT
-
- 1630 ; BRANCH MASK TABLE
- 1631 ;
- '0D42 2680 1632 MSKTBL DEFW 8026H ; BPL
- '0D44 1E80 1633 DEFW 801EH ; BMI
- '0D46 2E40 1634 DEFW 402EH ; BVC
- '0D48 3240 1635 DEFW 4032H ; BVS
- '0D4A 0E01 1636 DEFW 010EH ; BCC
- '0D4C 1201 1637 DEFW 0112H ; BCS
- '0D4E 2202 1638 DEFW 0222H ; BNE
- '0D50 1602 1639 DEFW 0216H ; BEQ
- 1640 ;
- 1641 ; FLAG SET/RESET CODES
- 1642 ;
- '0D52 3501 1643 FLGTBL DEFW 0135H ; CLC
- '0D54 B101 1644 DEFW 01B1H ; SEC
- '0D56 3D04 1645 DEFW 043DH ; CLI
- '0D58 B904 1646 DEFW 04B9H ; SEI
- '0D5A 4140 1647 DEFW 4041H ; CLV
- '0D5C 0000 1648 DEFW 0000 ; INVALID
- '0D5E 3908 1649 DEFW 0839H ; CLD
- '0D60 B508 1650 DEFW 08B5H ; SED
- 1651 ;
- 1652 ; JUMP TABLES TO IMPLIED INSTRUCTIONS
- 1653 ;
- '0D62 7E03' 1654 IMPTBL DEFW PPHP ; IMPLIED INSTR TABLE
- '0D64 A503' 1655 DEFW PPLP
- '0D66 7403' 1656 DEFW PPHA
- '0D68 9303' 1657 DEFW PPLA
- '0D6A 5103' 1658 DEFW PDEY
- '0D6C C703' 1659 DEFW PTAY
- '0D6E 4303' 1660 DEFW PINY
- '0D70 3C03' 1661 DEFW PINX
- '0D72 D103' 1662 DEFW PTXA
- '0D74 BD03' 1663 DEFW PTAX
- '0D76 4A03' 1664 DEFW PDEX
- '0D78 6E03' 1665 DEFW PNOP
- 1666 ;
- 1667 ; JUMP TABLE TO ADDR MODE PROCESSORS
- 1668 ;
- '0D7A 6A06' 1669 GETTBL DEFW PIMM ; INSTR MODE TABLE
- '0D7C 6E06' 1670 DEFW PACX
- '0D7E 7606' 1671 DEFW PZPG
- '0D80 7C06' 1672 DEFW PAB
- '0D82 8206' 1673 DEFW PZX
- '0D84 8706' 1674 DEFW PZY
- '0D86 9106' 1675 DEFW PZIX
- '0D88 A706' 1676 DEFW PZIY
- '0D8A C006' 1677 DEFW PABX
- '0D8C 5D06' 1678 DEFW PABY
- 1679 ;
- 1680 ; JUMP TABLES TO MULTI-MODE PROCESSORS
- 1681 ;
- '0D8E 3804' 1682 EVNTBL DEFW PASL ; JUMPS TO PROCESSORS
- '0D90 4604' 1683 DEFW PBTRL
- '0D92 7604' 1684 DEFW PLSR
- '0D94 8404' 1685 DEFW PROR
- '0D96 9404' 1686 DEFW PSTXY
- '0D98 B004' 1687 DEFW PLDXY
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0031
- ADDR CODE STMT SOURCE STATEMENT
-
- '0D9A CC04' 1688 DEFW PDCY
- '0D9C DD04' 1689 DEFW PICX
- '0D9E 4205' 1690 ODDTBL DEFW PORA
- '0DA0 5505' 1691 DEFW PAND
- '0DA2 6805' 1692 DEFW PEOR
- '0DA4 7B05' 1693 DEFW PADC
- '0DA6 AB05' 1694 DEFW PSTA
- '0DA8 B705' 1695 DEFW PLDA
- '0DAA C305' 1696 DEFW PCMP
- '0DAC 1005' 1697 DEFW PSBC
- 1698 ;
- 1699 ; MNEMONIC ASCII CODES (PACKED INTO 2 BYTES)
- 1700 ;
- '0DAE 8304 1701 MNMTBL DEFW 0483H ; MNEMONIC TABLE
- '0DB0 C405 1702 DEFW 05C4H
- '0DB2 6C06 1703 DEFW 066CH
- '0DB4 6308 1704 DEFW 0863H ; BCC
- '0DB6 7308 1705 DEFW 0873H
- '0DB8 B108 1706 DEFW 08B1H
- '0DBA 3409 1707 DEFW 0934H
- '0DBC A909 1708 DEFW 09A9H
- '0DBE C509 1709 DEFW 09C5H
- '0DC0 0C0A 1710 DEFW 0A0CH
- '0DC2 4B0A 1711 DEFW 0A4BH
- '0DC4 C30A 1712 DEFW 0AC3H
- '0DC6 D30A 1713 DEFW 0AD3H
- '0DC8 830D 1714 DEFW 0D83H ; CLC
- '0DCA 840D 1715 DEFW 0D84H
- '0DCC 890D 1716 DEFW 0D89H
- '0DCE 960D 1717 DEFW 0D96H
- '0DD0 B00D 1718 DEFW 0DB0H
- '0DD2 180E 1719 DEFW 0E18H
- '0DD4 190E 1720 DEFW 0E19H
- '0DD6 A310 1721 DEFW 10A3H ; DEC
- '0DD8 B810 1722 DEFW 10B8H
- '0DDA B910 1723 DEFW 10B9H
- '0DDC F215 1724 DEFW 15F2H ; EOR
- '0DDE C325 1725 DEFW 25C3H ; INC
- '0DE0 D825 1726 DEFW 25D8H
- '0DE2 D925 1727 DEFW 25D9H
- '0DE4 B029 1728 DEFW 29B0H ; JMP
- '0DE6 722A 1729 DEFW 2A72H
- '0DE8 8130 1730 DEFW 3081H ; LDA
- '0DEA 9830 1731 DEFW 3098H
- '0DEC 9930 1732 DEFW 3099H
- '0DEE 7232 1733 DEFW 3272H
- '0DF0 F039 1734 DEFW 39F0H ; NOP
- '0DF2 413E 1735 DEFW 3E41H ; ORA
- '0DF4 0141 1736 DEFW 4101H ; PHA
- '0DF6 1041 1737 DEFW 4110H
- '0DF8 8141 1738 DEFW 4181H
- '0DFA 9041 1739 DEFW 4190H
- '0DFC EC49 1740 DEFW 49ECH ; ROL
- '0DFE F249 1741 DEFW 49F2H
- '0E00 894A 1742 DEFW 4A89H
- '0E02 934A 1743 DEFW 4A93H
- '0E04 434C 1744 DEFW 4C43H ; SBC
- '0E06 A34C 1745 DEFW 4CA3H
-
-
-
-
-
- ZXMAIN ZX65 VER 2.1 8/80 RMK SD SYSTEMS Z80 ASSEMBLER PAGE 0032
- ADDR CODE STMT SOURCE STATEMENT
-
- '0E08 A44C 1746 DEFW 4CA4H
- '0E0A A94C 1747 DEFW 4CA9H
- '0E0C 814E 1748 DEFW 4E81H
- '0E0E 984E 1749 DEFW 4E98H
- '0E10 994E 1750 DEFW 4E99H
- '0E12 3850 1751 DEFW 5038H ; TAX
- '0E14 3950 1752 DEFW 5039H
- '0E16 7852 1753 DEFW 5278H
- '0E18 0153 1754 DEFW 5301H
- '0E1A 1353 1755 DEFW 5313H
- '0E1C 2153 1756 DEFW 5321H
- 1757 ;
- 1758 ; ADDRESS MODE PRINT TABLE
- 1759 ;
- '0E1E 20243120 1760 AMDTBL DEFM ' $1 !' ; ADDR MODE TABLE...REL
- 20202021
- '0E26 20232431 1761 DEFM ' #$1 !' ; IMMEDIATE
- 20202021
- '0E2E 20243231 1762 DEFM ' $21 !!' ; ABS
- 20202121
- '0E36 20243120 1763 DEFM ' $1 !' ; ZPG
- 20202021
- '0E3E 20202020 1764 DEFM ' ' ; IMPLIED
- 20202020
- '0E46 20412020 1765 DEFM ' A ' ; ACCUM
- 20202020
- '0E4E 20282431 1766 DEFM ' ($1,X)!' ; (ZPG,X)
- 2C582921
- '0E56 20282431 1767 DEFM ' ($1),Y!' ; (ZPG),Y
- 292C5921
- '0E5E 2024312C 1768 DEFM ' $1,X !' ; ZPG,X
- 58202021
- '0E66 2024312C 1769 DEFM ' $1,Y !' ; ZPG,Y
- 59202021
- '0E6E 20243231 1770 DEFM ' $21,X!!' ; ABS,X
- 2C582121
- '0E76 20243231 1771 DEFM ' $21,Y!!' ; ABS,Y
- 2C592121
- '0E7E 20282432 1772 DEFM ' ($21)!!' ; INDIRECT
- 31292121
- 1773 ;
- 1774 ; THAT'S ALL!
- 1775 ;
- 1776 END
-
- ERRORS=0000
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-