ASM80 :F1:YANK.TXT ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 1 LOC OBJ SEQ SOURCE STATEMENT 1 ; 2 ; YANK COMMAND IN ISIS-II TO TRANSFER IMAGE OF WHOLE 3 ; DISK-1 TO USB. IT IGNORES ALL DISK ERRORS. 4 ; TAKES ABOUT TEN MINUTES TO COMPLETE AND A 0-76 COUNTER 5 ; ON SCREEN SHOWS TRACK-BY-TRACK PROGRESS. 6 ; 7 000D 8 CR EQU 0DH 000A 9 LF EQU 0AH 00F7 10 CRTS EQU 0F7H 00F6 11 CRTD EQU 0F6H 00F5 12 TTYS EQU 0F5H 00F4 13 TTYD EQU 0F4H 14 ; 0004 15 OPCPL EQU 4 0078 16 DSTS EQU 78H 0079 17 DTYPE EQU 79H 007B 18 RSTS EQU 7BH 0079 19 LOWW EQU 79H 007A 20 HI EQU 7AH 007F 21 DSKRST EQU 7FH 22 ; 0000 23 OPEN EQU 0 0001 24 CLOSE EQU 1 0003 25 READ EQU 3 0004 26 WRITE EQU 4 0009 27 EXIT EQU 9 000C 28 ERROR EQU 12 29 ; 0001 30 TRDY EQU 00000001B 0002 31 RRDY EQU 00000010B 32 ; 33 EXTRN ISIS 34 EXTRN CO 35 EXTRN CI 36 ; 37 CSEG 38 ; 0000 31381C D 39 BEGIN: LXI SP,STCKA+4 0003 3E35 40 MVI A,35H 0005 D3F7 41 OUT CRTS 42 ; 0007 0E03 43 GETFN: MVI C,READ 0009 110E00 D 44 LXI D,RBLK 000C CD0000 E 45 CALL ISIS 000F 3A2400 D 46 LDA STATUS 0012 B7 47 ORA A 0013 C29602 C 48 JNZ ERR 49 ; 0016 212800 D 50 LXI H,BUFFER 0019 11A800 D 51 LXI D,FILENM 001C 0E80 52 MVI C,128 ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 2 LOC OBJ SEQ SOURCE STATEMENT 53 MOVEIT: 001E 7E 54 MOV A,M 001F 23 55 INX H 0020 12 56 STAX D 0021 13 57 INX D 0022 7E 58 MOV A,M 0023 FE20 59 CPI 20H 0025 CA3400 C 60 JZ ZERO 0028 FE0D 61 CPI CR 002A CA3400 C 62 JZ ZERO 002D 0D 63 DCR C 002E CA3400 C 64 JZ ZERO 0031 C31E00 C 65 JMP MOVEIT 66 ; 0034 3E00 67 ZERO: MVI A,0 0036 12 68 STAX D 69 ; 0037 21CC01 C 70 LXI H,TRKMSG 003A CD6902 C 71 CALL PRNTMSG 003D 21A800 D 72 LXI H,FILENM 0040 CD6902 C 73 CALL PRNTMSG 0043 212302 C 74 LXI H,OKMSG 0046 CD6902 C 75 CALL PRNTMSG 76 ; 0049 CD0000 E 77 CALL CI 004C FE59 78 CPI 'Y' 004E C29602 C 79 JNZ ERR 0051 212F02 C 80 LXI H,PROCMSG 0054 CD6902 C 81 CALL PRNTMSG 0057 D37F 82 OUT DSKRST ; ANYTHING OUTPUT TO 7FH RESETS DD FDC 83 ; 0059 3E35 84 DTRHI: MVI A,35H ; SETS DTR HIGH 005B D3F7 85 OUT CRTS 005D C37B00 C 86 JMP WRTCMD 87 ; 0060 DBF7 88 DTRLO: IN CRTS 0062 E604 89 ANI 4 0064 CA6000 C 90 JZ DTRLO ; WAIT FOR TX EMPTY 0067 110010 91 LXI D,1000H 92 DTRLO0: ; GIVE THE USB A LITTLE TIME 006A 1D 93 DCR E 006B C26A00 C 94 JNZ DTRLO0 006E 15 95 DCR D 006F C26A00 C 96 JNZ DTRLO0 97 ; 0072 3E37 98 MVI A,37H ; TOGGLE DTR AND USB SD0 LOW 0074 D3F7 99 OUT CRTS 0076 3E35 100 MVI A,35H ; RETURN THEM TO HIGH 0078 D3F7 101 OUT CRTS 007A C9 102 RET ; TIME TO WRAP IT UP 103 ; 007B 219500 C 104 WRTCMD: LXI H,WRTWRD ; SEND COMMAND TO USB 007E CDA000 C 105 CALL CRTOUT 0081 21A900 D 106 LXI H,FILENM+1 ; GIVE IT FILENAME 0084 CDA000 C 107 CALL CRTOUT ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 3 LOC OBJ SEQ SOURCE STATEMENT 0087 219D00 C 108 LXI H,BINMSG ; USE THE B SWITCH FOR BINARY 008A CDA000 C 109 CALL CRTOUT 008D 0E0D 110 MVI C,CR ; CR LAUNCH COMMAND 008F CDC200 C 111 CALL CRTO 0092 C3CD00 C 112 JMP TRKBYTRK ; NOW USB WANTS THE DATA 113 ; 0095 24575249 114 WRTWRD: DB '$WRITE ',0 0099 544520 009C 00 009D 2042 115 BINMSG: DB ' B',0 009F 00 116 ; 00A0 7E 117 CRTOUT: MOV A,M 00A1 B7 118 ORA A 00A2 C8 119 RZ 00A3 4F 120 MOV C,A 00A4 CDC200 C 121 CALL CRTO 00A7 23 122 INX H 00A8 C3A000 C 123 JMP CRTOUT 124 ; 00AB CDB600 C 125 CRTIN: CALL CRTI 00AE 77 126 MOV M,A 00AF FE0D 127 CPI CR 00B1 C8 128 RZ 00B2 23 129 INX H 00B3 C3AB00 C 130 JMP CRTIN 131 ; 00B6 DBF7 132 CRTI: IN CRTS 00B8 E602 133 ANI RRDY 00BA CAB600 C 134 JZ CRTI 00BD DBF6 135 IN CRTD 00BF E67F 136 ANI 7FH 00C1 C9 137 RET 138 ; 00C2 DBF7 139 CRTO: IN CRTS 00C4 E601 140 ANI TRDY 00C6 CAC200 C 141 JZ CRTO 00C9 79 142 MOV A,C 00CA D3F6 143 OUT CRTD 00CC C9 144 RET 145 ; 146 TRKBYTRK: 00CD 3E00 147 MVI A,0 ; BEGIN WITH TRACK 0 00CF 32B001 D 148 STA TRACK 149 ; 150 ; BEGIN LOOP TO READ A TRACK FROM DISK, WRITE THE TRACK TO USB 151 ; 00D2 CD4502 C 152 TBT0: CALL SAYTRKN ; PRINTS THE TRACK#, BUT ESCAPES 153 ; TO DONE0 IF WE ARE ALREADY DONE 154 ; 00D5 213402 D 155 LXI H,TRKBUFF 00D8 22B201 D 156 SHLD IOPB5 ; MAKE SURE IOPB HAS RIGHT BUFF ADDR 00DB 21AD01 D 157 LXI H,IOPB ; LAUNCH THE FDC TO READ THE TRACK 00DE 7D 158 MOV A,L 00DF D379 159 OUT LOWW ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 4 LOC OBJ SEQ SOURCE STATEMENT 00E1 7C 160 MOV A,H 00E2 D37A 161 OUT HI 162 ; 163 TBT1: ; WAIT FOR DISK TO COMPLETE 00E4 DB78 164 IN 078H ; READ STATUS FOR INTERRUPT PENDING 00E6 E604 165 ANI 4 00E8 CAE400 C 166 JZ TBT1 00EB DB79 167 IN DTYPE ; RESULT TYPE MUST ONLY BE READ AFTER BIT2 168 ; IN STATUS GOES TRUE, THEN MUST READ RSLT BYTE TOO 00ED E602 169 ANI 2 00EF CAFC00 C 170 JZ TYPE00 00F2 DB79 171 IN DTYPE ; IT WAS TYPE 10 00F4 E680 172 ANI 80H ; DRV 1 MUST BE RDY 00F6 CC2101 C 173 CZ STAR ; TYPE A "*" TO CO IF ERROR, BUT CONTINUE 00F9 C30201 C 174 JMP OK 175 TYPE00: ; RESULT TYPE WAS 00 00FC DB7B 176 IN 07BH ; RESULT BYTE 00FE B7 177 ORA A ; NOT 00000000B MEAN ERROR 00FF C42101 C 178 CNZ STAR 179 OK: 0102 213402 D 180 LXI H,TRKBUFF 181 ; 182 TBT2: ; EXPORT THE 6656 BYTES IN TRKBUFF 0105 4E 183 MOV C,M ; TO THE USB 0106 CDC200 C 184 CALL CRTO 0109 23 185 INX H ; BUMP BUFF PTR 010A 11341C D 186 LXI D,BUFFTOP 010D 7B 187 MOV A,E 010E BD 188 CMP L 010F C20501 C 189 JNZ TBT2 0112 7A 190 MOV A,D 0113 BC 191 CMP H 0114 C20501 C 192 JNZ TBT2 ; DONE WITH THIS TRACK? 0117 3AB001 D 193 LDA TRACK ; IF SO BUMP THE TRACK NUMBER 011A 3C 194 INR A 011B 32B001 D 195 STA TRACK 011E C3D200 C 196 JMP TBT0 ; LOOP FOR NEXT TRACK 197 ; 0121 0E20 198 STAR: MVI C,' ' 0123 CD0000 E 199 CALL CO 0126 0E2A 200 MVI C,'*' 0128 CD0000 E 201 CALL CO 012B C9 202 RET 203 ; 204 ; THIS LOOUP TABLE IS A QUICK WAY NOT TO HAVE TO COMPUTE THE ASCII 205 ; DECIMAL NUMBER FROM THE HEXADECIMAL TRACK VALUE BEING UPCOUNTED 206 ; IN THE IOPB. 207 ; 012C 30303031 208 TRKNUM: DB '00010203040506070809' 0130 30323033 0134 30343035 0138 30363037 013C 30383039 0140 31303131 209 DB '10111213141516171819' ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 5 LOC OBJ SEQ SOURCE STATEMENT 0144 31323133 0148 31343135 014C 31363137 0150 31383139 0154 32303231 210 DB '20212223242526272829' 0158 32323233 015C 32343235 0160 32363237 0164 32383239 0168 33303331 211 DB '30313233343536373839' 016C 33323333 0170 33343335 0174 33363337 0178 33383339 017C 34303431 212 DB '40414243444546474849' 0180 34323433 0184 34343435 0188 34363437 018C 34383439 0190 35303531 213 DB '50515253545556575859' 0194 35323533 0198 35343535 019C 35363537 01A0 35383539 01A4 36303631 214 DB '60616263646566676869' 01A8 36323633 01AC 36343635 01B0 36363637 01B4 36383639 01B8 37303731 215 DB '70717273747576??????' 01BC 37323733 01C0 37343735 01C4 37363F3F 01C8 3F3F3F3F 216 ; 01CC 59414E4B 217 TRKMSG: DB 'YANKING DISK-1 TRACK-BY-TRACK TO USB',0 01D0 494E4720 01D4 4449534B 01D8 2D312054 01DC 5241434B 01E0 2D42592D 01E4 54524143 01E8 4B20544F 01EC 20555342 01F0 00 218 ; 01F1 49474E4F 219 CPYMSG: DB 'IGNORE ALL ERRORS IN DISK-1 IMAGE COPY TO USB AS ',0 01F5 52452041 01F9 4C4C2045 01FD 52524F52 0201 5320494E 0205 20444953 0209 4B2D3120 020D 494D4147 0211 4520434F ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 6 LOC OBJ SEQ SOURCE STATEMENT 0215 50592054 0219 4F205553 021D 42204153 0221 20 0222 00 0223 2C204F4B 220 OKMSG: DB ', OK? Y/N',CR,LF,0 0227 3F20592F 022B 4E 022C 0D 022D 0A 022E 00 022F 50524F43 221 PROCMSG: DB 'PROCEEDING NOW...',CR,LF,0 0233 45454449 0237 4E47204E 023B 4F572E2E 023F 2E 0240 0D 0241 0A 0242 00 222 ; 0243 2C01 C 223 TRKPTR: DW TRKNUM 224 ; 0245 0E0D 225 SAYTRKN: MVI C,CR ; WRITE OVER THE LAST UPDATE 0247 CD0000 E 226 CALL CO 024A 3AB001 D 227 LDA TRACK 024D 87 228 ADD A ; DOUBLE IT 024E 212C01 C 229 LXI H,TRKNUM ; INDEX INTO ASCII TABLE 0251 5F 230 MOV E,A 0252 1600 231 MVI D,0 0254 19 232 DAD D 0255 4E 233 MOV C,M 0256 3E3F 234 MVI A,'?' ; REACHED THE END? 0258 B9 235 CMP C 0259 CA8502 C 236 JZ DONE0 ; ABORT IF ? SEEN 025C CD0000 E 237 CALL CO 025F 23 238 INX H 0260 4E 239 MOV C,M 0261 CD0000 E 240 CALL CO 0264 23 241 INX H 0265 224302 C 242 SHLD TRKPTR ; POINT TO NEXT ASCII PAIR 0268 C9 243 RET 244 ; 0269 4E 245 PRNTMSG: MOV C,M 026A CD0000 E 246 CALL CO 026D 23 247 INX H 026E 7E 248 MOV A,M 026F B7 249 ORA A 0270 C26902 C 250 JNZ PRNTMSG 0273 C9 251 RET 252 ; 0274 0D 253 DONEMSG: DB CR,LF,'DONE',CR,LF,0 0275 0A 0276 444F4E45 027A 0D 027B 0A ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 7 LOC OBJ SEQ SOURCE STATEMENT 027C 00 254 ; 027D 0E01 255 DONE: MVI C,CLOSE 027F 110A00 D 256 LXI D,CBLK 0282 CD0000 E 257 CALL ISIS 258 DONE0: 0285 CD6000 C 259 CALL DTRLO 0288 217402 C 260 LXI H,DONEMSG 028B CD6902 C 261 CALL PRNTMSG 262 ; 028E 0E09 263 MVI C,EXIT 0290 112200 D 264 LXI D,XBLK 0293 CD0000 E 265 CALL ISIS 266 ERR: 0296 0E0C 267 MVI C,ERROR 0298 112400 D 268 LXI D,EBLK 029B CD0000 E 269 CALL ISIS 029E C38502 C 270 JMP DONE0 271 ; 272 DSEG 273 OBLK: 0000 1A00 D 274 DW WAFT 0002 2800 D 275 DW BUFFER 0004 0200 276 DW 2 0006 0000 277 DW 0 0008 2400 D 278 DW STATUS 279 ; 280 CBLK: 0002 281 CAFT: DS 2 000C 2400 D 282 DW STATUS 283 ; 284 RBLK: 285 OAFT: 000E 0100 286 RAFT: DW 1 0010 2800 D 287 DW BUFFER 0012 8000 288 DW 128 0014 1800 D 289 DW ACTUAL 0016 2400 D 290 DW STATUS 291 ; 0002 292 ACTUAL: DS 2 293 ; 294 WBLK: 0002 295 WAFT: DS 2 001C 2800 D 296 DW BUFFER 0002 297 WCNT: DS 2 0020 2400 D 298 DW STATUS 299 ; 0022 2400 D 300 XBLK: DW STATUS 301 EBLK: 0002 302 STATUS: DS 2 0026 2400 D 303 DW STATUS 304 ; 0028 4E45572E 305 BUFFER: DB 'NEW.IMG',0 002C 494D47 002F 00 ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 8 LOC OBJ SEQ SOURCE STATEMENT 0078 306 DS 120 307 ; 0080 308 FILENM: DS 128 309 ; 0002 310 FIRSTNM: DS 2 0001 311 DIGITS: DS 1 0002 312 BYTECNT: DS 2 313 ; 0080 314 RESPONSE: DS 128 315 ; 01AD 00 316 IOPB: DB 0 ; INTERRUPTS ON 01AE 14 317 DB 14H 01AF 34 318 DB 52 01B0 00 319 TRACK: DB 0 01B1 01 320 DB 1 321 IOPB5: 01B2 3402 D 322 DW TRKBUFF 323 ; 0080 324 DS 128 325 ; 1A00 326 TRKBUFF: DS 6656 327 ; 328 BUFFTOP: 329 ; 0004 330 STCKA: DS 4 331 ; 0000 C 332 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 01F1 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 027D DONE0 C 0285 DONEMS C 0274 DSKRST A 007F DSTS A 0078 DTRHI C 0059 DTRLO C 0060 DTRLO0 C 006A DTYPE A 0079 EBLK D 0024 ERR C 0296 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 0223 OPCPL A 0004 OPEN A 0000 PRNTMS C 0269 PROCMS C 022F RAFT D 000E RBLK D 000E READ A 0003 RESPON D 012D RRDY A 0002 RSTS A 007B SAYTRK C 0245 STAR C 0121 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 01CC TRKNUM C 012C TRKPTR C 0243 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