ASM80 :F1:IMGUSB.TXT ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 1 LOC OBJ SEQ SOURCE STATEMENT 000D 1 CR EQU 0DH 000A 2 LF EQU 0AH 00F7 3 CRTS EQU 0F7H 00F6 4 CRTD EQU 0F6H 00F5 5 TTYS EQU 0F5H 00F4 6 TTYD EQU 0F4H 7 ; 0004 8 OPCPL EQU 4 0078 9 DSTS EQU 78H 0079 10 DTYPE EQU 79H 007B 11 RSTS EQU 7BH 0079 12 LOWW EQU 79H 007A 13 HI EQU 7AH 007F 14 DSKRST EQU 7FH 15 ; 0000 16 OPEN EQU 0 0001 17 CLOSE EQU 1 0003 18 READ EQU 3 0004 19 WRITE EQU 4 0009 20 EXIT EQU 9 000C 21 ERROR EQU 12 22 ; 0001 23 TRDY EQU 00000001B 0002 24 RRDY EQU 00000010B 25 ; 26 EXTRN ISIS 27 EXTRN CO 28 EXTRN CI 29 ; 30 CSEG 31 ; 0000 31381C D 32 BEGIN: LXI SP,STCKA+4 0003 3E35 33 MVI A,35H 0005 D3F7 34 OUT CRTS 35 ; 0007 0E03 36 GETFN: MVI C,READ 0009 110E00 D 37 LXI D,RBLK 000C CD0000 E 38 CALL ISIS 000F 3A2400 D 39 LDA STATUS 0012 B7 40 ORA A 0013 C28002 C 41 JNZ ERR 42 ; 0016 212800 D 43 LXI H,BUFFER 0019 11A800 D 44 LXI D,FILENM 001C 0E80 45 MVI C,128 46 MOVEIT: 001E 7E 47 MOV A,M 001F 23 48 INX H 0020 12 49 STAX D 0021 13 50 INX D 0022 7E 51 MOV A,M 0023 FE20 52 CPI 20H ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 2 LOC OBJ SEQ SOURCE STATEMENT 0025 CA3400 C 53 JZ ZERO 0028 FE0D 54 CPI CR 002A CA3400 C 55 JZ ZERO 002D 0D 56 DCR C 002E CA3400 C 57 JZ ZERO 0031 C31E00 C 58 JMP MOVEIT 59 ; 0034 3E00 60 ZERO: MVI A,0 0036 12 61 STAX D 62 ; 0037 21C101 C 63 LXI H,TRKMSG 003A CD5302 C 64 CALL PRNTMSG 003D 21A800 D 65 LXI H,FILENM 0040 CD5302 C 66 CALL PRNTMSG 0043 210D02 C 67 LXI H,OKMSG 0046 CD5302 C 68 CALL PRNTMSG 69 ; 0049 CD0000 E 70 CALL CI 004C FE59 71 CPI 'Y' 004E C28002 C 72 JNZ ERR 0051 211902 C 73 LXI H,PROCMSG 0054 CD5302 C 74 CALL PRNTMSG 0057 D37F 75 OUT DSKRST ; ANYTHING OUTPUT TO 7FH RESETS DD FDC 76 ; 0059 3E35 77 DTRHI: MVI A,35H ; SETS DTR HIGH 005B D3F7 78 OUT CRTS 005D C37B00 C 79 JMP WRTCMD 80 ; 0060 DBF7 81 DTRLO: IN CRTS 0062 E604 82 ANI 4 0064 CA6000 C 83 JZ DTRLO ; WAIT FOR TX EMPTY 0067 110010 84 LXI D,1000H 85 DTRLO0: ; GIVE THE USB A LITTLE TIME 006A 1D 86 DCR E 006B C26A00 C 87 JNZ DTRLO0 006E 15 88 DCR D 006F C26A00 C 89 JNZ DTRLO0 90 ; 0072 3E37 91 MVI A,37H ; TOGGLE DTR AND USB SD0 LOW 0074 D3F7 92 OUT CRTS 0076 3E35 93 MVI A,35H ; RETURN THEM TO HIGH 0078 D3F7 94 OUT CRTS 007A C9 95 RET ; TIME TO WRAP IT UP 96 ; 007B 219500 C 97 WRTCMD: LXI H,WRTWRD ; SEND COMMAND TO USB 007E CDA000 C 98 CALL CRTOUT 0081 21A900 D 99 LXI H,FILENM+1 ; GIVE IT FILENAME 0084 CDA000 C 100 CALL CRTOUT 0087 219D00 C 101 LXI H,BINMSG ; USE THE B SWITCH FOR BINARY 008A CDA000 C 102 CALL CRTOUT 008D 0E0D 103 MVI C,CR ; CR LAUNCH COMMAND 008F CDC200 C 104 CALL CRTO 0092 C3CD00 C 105 JMP TRKBYTRK ; NOW USB WANTS THE DATA 106 ; 0095 24575249 107 WRTWRD: DB '$WRITE ',0 ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 3 LOC OBJ SEQ SOURCE STATEMENT 0099 544520 009C 00 009D 2042 108 BINMSG: DB ' B',0 009F 00 109 ; 00A0 7E 110 CRTOUT: MOV A,M 00A1 B7 111 ORA A 00A2 C8 112 RZ 00A3 4F 113 MOV C,A 00A4 CDC200 C 114 CALL CRTO 00A7 23 115 INX H 00A8 C3A000 C 116 JMP CRTOUT 117 ; 00AB CDB600 C 118 CRTIN: CALL CRTI 00AE 77 119 MOV M,A 00AF FE0D 120 CPI CR 00B1 C8 121 RZ 00B2 23 122 INX H 00B3 C3AB00 C 123 JMP CRTIN 124 ; 00B6 DBF7 125 CRTI: IN CRTS 00B8 E602 126 ANI RRDY 00BA CAB600 C 127 JZ CRTI 00BD DBF6 128 IN CRTD 00BF E67F 129 ANI 7FH 00C1 C9 130 RET 131 ; 00C2 DBF7 132 CRTO: IN CRTS 00C4 E601 133 ANI TRDY 00C6 CAC200 C 134 JZ CRTO 00C9 79 135 MOV A,C 00CA D3F6 136 OUT CRTD 00CC C9 137 RET 138 ; 139 TRKBYTRK: 00CD 3E00 140 MVI A,0 ; BEGIN WITH TRACK 0 00CF 32B001 D 141 STA TRACK 142 ; 143 ; BEGIN LOOP TO READ A TRACK FROM DISK, WRITE THE TRACK TO USB 144 ; 00D2 CD2F02 C 145 TBT0: CALL SAYTRKN ; PRINTS THE TRACK#, BUT ESCAPES 146 ; TO DONE0 IF WE ARE ALREADY DONE 147 ; 00D5 213402 D 148 LXI H,TRKBUFF 00D8 22B201 D 149 SHLD IOPB5 ; MAKE SURE IOPB HAS RIGHT BUFF ADDR 00DB 21AD01 D 150 LXI H,IOPB ; LAUNCH THE FDC TO READ THE TRACK 00DE 7D 151 MOV A,L 00DF D379 152 OUT LOWW 00E1 7C 153 MOV A,H 00E2 D37A 154 OUT HI 155 ; 156 TBT1: ; WAIT FOR DISK TO COMPLETE 00E4 DB78 157 IN 078H ; READ STATUS FOR INTERRUPT PENDING 00E6 E604 158 ANI 4 00E8 CAE400 C 159 JZ TBT1 ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 4 LOC OBJ SEQ SOURCE STATEMENT 00EB DB79 160 IN DTYPE ; RESULT TYPE MUST ONLY BE READ AFTER BIT2 161 ; IN STATUS GOES TRUE, THEN MUST READ RSLT BYTE TOO 00ED E602 162 ANI 2 00EF CAFC00 C 163 JZ TYPE00 00F2 DB79 164 IN DTYPE ; IT WAS TYPE 10 00F4 E680 165 ANI 80H ; DRV 1 MUST BE RDY 00F6 CA8002 C 166 JZ ERR 00F9 C30201 C 167 JMP OK 168 TYPE00: ; RESULT TYPE WAS 00 00FC DB7B 169 IN 07BH ; RESULT BYTE 00FE B7 170 ORA A ; NOT 00000000B MEAN ERROR 00FF C28002 C 171 JNZ ERR 172 OK: 0102 213402 D 173 LXI H,TRKBUFF 174 ; 175 TBT2: ; EXPORT THE 6656 BYTES IN TRKBUFF 0105 4E 176 MOV C,M ; TO THE USB 0106 CDC200 C 177 CALL CRTO 0109 23 178 INX H ; BUMP BUFF PTR 010A 11341C D 179 LXI D,BUFFTOP 010D 7B 180 MOV A,E 010E BD 181 CMP L 010F C20501 C 182 JNZ TBT2 0112 7A 183 MOV A,D 0113 BC 184 CMP H 0114 C20501 C 185 JNZ TBT2 ; DONE WITH THIS TRACK? 0117 3AB001 D 186 LDA TRACK ; IF SO BUMP THE TRACK NUMBER 011A 3C 187 INR A 011B 32B001 D 188 STA TRACK 011E C3D200 C 189 JMP TBT0 ; LOOP FOR NEXT TRACK 190 ; 0121 30303031 191 TRKNUM: DB '00010203040506070809' 0125 30323033 0129 30343035 012D 30363037 0131 30383039 0135 31303131 192 DB '10111213141516171819' 0139 31323133 013D 31343135 0141 31363137 0145 31383139 0149 32303231 193 DB '20212223242526272829' 014D 32323233 0151 32343235 0155 32363237 0159 32383239 015D 33303331 194 DB '30313233343536373839' 0161 33323333 0165 33343335 0169 33363337 016D 33383339 0171 34303431 195 DB '40414243444546474849' 0175 34323433 0179 34343435 ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 5 LOC OBJ SEQ SOURCE STATEMENT 017D 34363437 0181 34383439 0185 35303531 196 DB '50515253545556575859' 0189 35323533 018D 35343535 0191 35363537 0195 35383539 0199 36303631 197 DB '60616263646566676869' 019D 36323633 01A1 36343635 01A5 36363637 01A9 36383639 01AD 37303731 198 DB '70717273747576??????' 01B1 37323733 01B5 37343735 01B9 37363F3F 01BD 3F3F3F3F 199 ; 01C1 434F5059 200 TRKMSG: DB 'COPYING DISK-1 TRACK-BY-TRACK TO USB',0 01C5 494E4720 01C9 4449534B 01CD 2D312054 01D1 5241434B 01D5 2D42592D 01D9 54524143 01DD 4B20544F 01E1 20555342 01E5 00 201 ; 01E6 434F5059 202 CPYMSG: DB 'COPYING ALL OF DISK-1 IMAGE TO USB AS ',0 01EA 494E4720 01EE 414C4C20 01F2 4F462044 01F6 49534B2D 01FA 3120494D 01FE 41474520 0202 544F2055 0206 53422041 020A 5320 020C 00 020D 2C204F4B 203 OKMSG: DB ', OK? Y/N',CR,LF,0 0211 3F20592F 0215 4E 0216 0D 0217 0A 0218 00 0219 50524F43 204 PROCMSG: DB 'PROCEEDING NOW...',CR,LF,0 021D 45454449 0221 4E47204E 0225 4F572E2E 0229 2E 022A 0D 022B 0A 022C 00 205 ; ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 6 LOC OBJ SEQ SOURCE STATEMENT 022D 2101 C 206 TRKPTR: DW TRKNUM 207 ; 022F 0E0D 208 SAYTRKN: MVI C,CR ; WRITE OVER THE LAST UPDATE 0231 CD0000 E 209 CALL CO 0234 3AB001 D 210 LDA TRACK 0237 87 211 ADD A ; DOUBLE IT 0238 212101 C 212 LXI H,TRKNUM ; INDEX INTO ASCII TABLE 023B 5F 213 MOV E,A 023C 1600 214 MVI D,0 023E 19 215 DAD D 023F 4E 216 MOV C,M 0240 3E3F 217 MVI A,'?' ; REACHED THE END? 0242 B9 218 CMP C 0243 CA6F02 C 219 JZ DONE0 ; ABORT IF ? SEEN 0246 CD0000 E 220 CALL CO 0249 23 221 INX H 024A 4E 222 MOV C,M 024B CD0000 E 223 CALL CO 024E 23 224 INX H 024F 222D02 C 225 SHLD TRKPTR ; POINT TO NEXT ASCII PAIR 0252 C9 226 RET 227 ; 0253 4E 228 PRNTMSG: MOV C,M 0254 CD0000 E 229 CALL CO 0257 23 230 INX H 0258 7E 231 MOV A,M 0259 B7 232 ORA A 025A C25302 C 233 JNZ PRNTMSG 025D C9 234 RET 235 ; 025E 0D 236 DONEMSG: DB CR,LF,'DONE',CR,LF,0 025F 0A 0260 444F4E45 0264 0D 0265 0A 0266 00 237 ; 0267 0E01 238 DONE: MVI C,CLOSE 0269 110A00 D 239 LXI D,CBLK 026C CD0000 E 240 CALL ISIS 241 DONE0: 026F CD6000 C 242 CALL DTRLO 0272 215E02 C 243 LXI H,DONEMSG 0275 CD5302 C 244 CALL PRNTMSG 245 ; 0278 0E09 246 MVI C,EXIT 027A 112200 D 247 LXI D,XBLK 027D CD0000 E 248 CALL ISIS 249 ERR: 0280 0E0C 250 MVI C,ERROR 0282 112400 D 251 LXI D,EBLK 0285 CD0000 E 252 CALL ISIS 0288 C36F02 C 253 JMP DONE0 254 ; 255 DSEG ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 7 LOC OBJ SEQ SOURCE STATEMENT 256 OBLK: 0000 1A00 D 257 DW WAFT 0002 2800 D 258 DW BUFFER 0004 0200 259 DW 2 0006 0000 260 DW 0 0008 2400 D 261 DW STATUS 262 ; 263 CBLK: 0002 264 CAFT: DS 2 000C 2400 D 265 DW STATUS 266 ; 267 RBLK: 268 OAFT: 000E 0100 269 RAFT: DW 1 0010 2800 D 270 DW BUFFER 0012 8000 271 DW 128 0014 1800 D 272 DW ACTUAL 0016 2400 D 273 DW STATUS 274 ; 0002 275 ACTUAL: DS 2 276 ; 277 WBLK: 0002 278 WAFT: DS 2 001C 2800 D 279 DW BUFFER 0002 280 WCNT: DS 2 0020 2400 D 281 DW STATUS 282 ; 0022 2400 D 283 XBLK: DW STATUS 284 EBLK: 0002 285 STATUS: DS 2 0026 2400 D 286 DW STATUS 287 ; 0028 4E45572E 288 BUFFER: DB 'NEW.IMG',0 002C 494D47 002F 00 0078 289 DS 120 290 ; 0080 291 FILENM: DS 128 292 ; 0002 293 FIRSTNM: DS 2 0001 294 DIGITS: DS 1 0002 295 BYTECNT: DS 2 296 ; 0080 297 RESPONSE: DS 128 298 ; 01AD 00 299 IOPB: DB 0 ; INTERRUPTS ON 01AE 14 300 DB 14H 01AF 34 301 DB 52 01B0 00 302 TRACK: DB 0 01B1 01 303 DB 1 304 IOPB5: 01B2 3402 D 305 DW TRKBUFF 306 ; 0080 307 DS 128 308 ; ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 8 LOC OBJ SEQ SOURCE STATEMENT 1A00 309 TRKBUFF: DS 6656 310 ; 311 BUFFTOP: 312 ; 0004 313 STCKA: DS 4 314 ; 0000 C 315 END BEGIN PUBLIC SYMBOLS EXTERNAL SYMBOLS CI E 0000 CO E 0000 ISIS E 0000 USER SYMBOLS ACTUAL D 0018 BEGIN C 0000 BINMSG C 009D BUFFER D 0028 BUFFTO D 1C34 BYTECN D 012B CAFT D 000A CBLK D 000A CI E 0000 CLOSE A 0001 CO E 0000 CPYMSG C 01E6 CR A 000D CRTD A 00F6 CRTI C 00B6 CRTIN C 00AB CRTO C 00C2 CRTOUT C 00A0 CRTS A 00F7 DIGITS D 012A DONE C 0267 DONE0 C 026F DONEMS C 025E DSKRST A 007F DSTS A 0078 DTRHI C 0059 DTRLO C 0060 DTRLO0 C 006A DTYPE A 0079 EBLK D 0024 ERR C 0280 ERROR A 000C EXIT A 0009 FILENM D 00A8 FIRSTN D 0128 GETFN C 0007 HI A 007A IOPB D 01AD IOPB5 D 01B2 ISIS E 0000 LF A 000A LOWW A 0079 MOVEIT C 001E OAFT D 000E OBLK D 0000 OK C 0102 OKMSG C 020D OPCPL A 0004 OPEN A 0000 PRNTMS C 0253 PROCMS C 0219 RAFT D 000E RBLK D 000E READ A 0003 RESPON D 012D RRDY A 0002 RSTS A 007B SAYTRK C 022F STATUS D 0024 STCKA D 1C34 TBT0 C 00D2 TBT1 C 00E4 TBT2 C 0105 TRACK D 01B0 TRDY A 0001 TRKBUF D 0234 TRKBYT C 00CD TRKMSG C 01C1 TRKNUM C 0121 TRKPTR C 022D TTYD A 00F4 TTYS A 00F5 TYPE00 C 00FC WAFT D 001A WBLK D 001A WCNT D 001E WRITE A 0004 WRTCMD C 007B WRTWRD C 0095 XBLK D 0022 ZERO C 0034 ASSEMBLY COMPLETE, NO ERRORS