CP/M MACRO ASSEM 2.0 #001 *** Disk Jockey Model B Firmware *** 1 ***************************************************************** 2 * * 3 * FIRMWARE FOR DISK JOCKEY MODEL B. * 4 * * 5 ***************************************************************** 6 7 TITLE '*** Disk Jockey Model B Firmware ***' 8 9 E000 = ORIGIN EQU 0E000H 10 11 E000 ORG ORIGIN ;EQU 0E000H 12 13 E3DE = BEGINS EQU ORIGIN+3DEH 14 E400 = RAM EQU ORIGIN+400H 15 E3F8 = IO EQU ORIGIN+3F8H 16 E3F8 = UDATA EQU IO 17 E3F9 = DREG EQU IO+1 18 E3F9 = USTAT EQU IO+1 19 E3FA = DCMD EQU IO+2 20 E3FA = DSTAT EQU IO+2 21 E3FB = CSTALL EQU IO+3 22 E3FC = CMDREG EQU IO+4 23 E3FC = CSTAT EQU IO+4 24 E3FD = TRKREG EQU IO+5 25 E3FE = SECREG EQU IO+6 26 E3FF = DATREG EQU IO+7 27 28 0001 = LIGHT EQU 1 29 0001 = HEAD EQU 1 30 0001 = DENSITY EQU 1 31 0004 = ISTAT EQU 4 32 0004 = TZERO EQU 4 33 0004 = LOAD EQU 4 34 0006 = ULOAD EQU 6 35 0008 = OSTAT EQU 10Q 36 0008 = DSIDE EQU 10Q 37 0009 = NOLITE EQU 11Q 38 0009 = DCRINT EQU 11Q 39 0009 = HCMD EQU 11Q 40 0010 = INDEX EQU 20Q 41 0012 = WINDXD EQU 22Q 42 0018 = SKCMD EQU 30Q 43 001A = RINDXD EQU 32Q 44 001D = SVCMD EQU 35Q 45 0040 = WPROT EQU 100Q 46 0040 = ACCESS EQU 100Q 47 0080 = RSTBIT EQU 200Q 48 0080 = READY EQU 200Q 49 0080 = RDCMD EQU 200Q 50 00A0 = WRCMD EQU 240Q 51 00C0 = STBITS EQU 300Q 52 00C4 = RACMD EQU 304Q 53 00D0 = CLRCMD EQU 320Q 54 55 E000 C37AE0 DBOOT JMP BOOT 56 E003 C3FAE0 TERMIN JMP CIN CP/M MACRO ASSEM 2.0 #002 *** Disk Jockey Model B Firmware *** 57 E006 C3EBE0 TRMOUT JMP COUT 58 E009 C36BE1 TKZERO JMP HOME 59 E00C C39CE1 TRKSET JMP SEEK 60 E00F C392E1 SETSEC JMP SECSET 61 E012 C354E1 SETDMA JMP DMA 62 E015 C3DBE1 DREAD JMP READ 63 E018 C3A5E1 DWRITE JMP WRITE 64 E01B C34DE1 SELDRV JMP DRIVE 65 E01E C309E1 TPANIC JMP CPAN 66 E021 C314E1 TSTAT JMP TMSTAT 67 E024 C345E1 DMAST JMP DMSTAT 68 E027 C31AE1 STATUS JMP DISKST 69 E02A C3D6E0 DSKERR JMP LERROR 70 E02D C3A2E3 SETDEN JMP DENFIX 71 E030 C3E5E3 SETSID JMP SIDEFX 72 73 74 E033 DS 107Q 75 76 E07A 31FAE7 BOOT LXI SP,TRACK+1 ;INITIALIZE SP 77 E07D CDC1E3 CALL TIMOUT ;POC/RESET TIMEOUT 78 E080 210100 LXI H,1 79 E083 E5 PUSH H ;TRACK 0, SECTOR 1 80 E084 2E09 MVI L,DCRINT ;SET UP THE 81 E086 E5 PUSH H ; SIDE SELECT 82 E087 26FF MVI H,377Q ; AND INITIAL 83 E089 E5 PUSH H ; DRIVE 84 E08A E5 PUSH H ; PARAMETERS 85 E08B E5 PUSH H 86 E08C E5 PUSH H 87 E08D 210800 LXI H,10Q ;INITIALIZE 88 E090 E5 PUSH H ; TZFLAG & CDISK 89 E091 2E7E MVI L,176Q ;INITIALIZE 90 E093 E5 PUSH H ; DISK & DRVSEL 91 E094 2E08 MVI L,10Q ;INITIALIZE 92 E096 E5 PUSH H ; HDFLAG & DSFLAG 93 E097 2618 MVI H,30Q ;INITIALIZE 94 E099 E5 PUSH H ; TIMER CONSTANT 95 E09A 3E7F MVI A,177Q ;START 1791 96 E09C 32F9E3 STA DREG 97 E09F 3ED0 MVI A,CLRCMD ;1791 RESET 98 E0A1 32FCE3 STA CMDREG 99 LDHEAD 100 E0A4 AF XRA A ;LOAD THE HEAD 101 E0A5 CD09E3 CALL HDCHK ; AND TEST FOR 102 E0A8 D2B6E0 JNC DOOROK ; DRIVE READY 103 E0AB 3E01 MVI A,LIGHT ;TURN ON THE 104 E0AD 32F6E7 STA DCREG ; ERROR LED 105 E0B0 CDC1E3 CALL TIMOUT ;TIMEOUT TO 106 E0B3 C3A4E0 JMP LDHEAD ; CLOSE DRIVE DOOR 107 DOOROK 108 E0B6 3E09 MVI A,NOLITE ;TURN OFF THE 109 E0B8 32F6E7 STA DCREG ; ERROR LED 110 E0BB CD85E3 CALL MEASUR ;HEAD LOAD TIME 111 E0BE C1 POP B ;ADJUST THE STACK 112 E0BF 0100E7 LXI B,RAM+300H ;DMA ADDR CP/M MACRO ASSEM 2.0 #003 *** Disk Jockey Model B Firmware *** 113 E0C2 C5 PUSH B ;INITIALIZE 114 E0C3 D5 PUSH D ; DMAADR & TIMER 115 E0C4 210000 LXI H,0 ;INITIALIZE 116 E0C7 E5 PUSH H ; INTRFG & RAMINS 117 E0C8 00 NOP ;DEBUG INSTRUCTION 118 E0C9 C5 PUSH B ;BOOT ADDRESS 119 E0CA 060C MVI B,12 ;NUMBER OF RETRYS 120 LDLOOP 121 E0CC C5 PUSH B ;SAVE THE RETRY NO. 122 E0CD CDDBE1 CALL READ ;READ BOOT SECTOR 123 E0D0 C1 POP B ;RESTOR RETRY NO. 124 E0D1 D0 RNC ;SUCCESSFUL READ? 125 E0D2 05 DCR B ;NO - COUNT DOWN 126 E0D3 C2CCE0 JNZ LDLOOP ; AND TRY AGAIN 127 LERROR 128 E0D6 0E09 MVI C,11Q 129 E0D8 11C3A2 LXI D,0A2C3H 130 LELOOP 131 E0DB 1B DCX D 132 E0DC 7A MOV A,D 133 E0DD B3 ORA E 134 E0DE C2DBE0 JNZ LELOOP 135 E0E1 3E08 MVI A,10Q ;BLINK 136 E0E3 A9 XRA C ; THE LED AT 137 E0E4 4F MOV C,A ; TOP OF THE 138 E0E5 32FAE3 STA DCMD ; CIRCUIT BOARD 139 E0E8 C3D8E0 JMP LERROR+2 140 141 COUT 142 E0EB 3AF9E3 LDA USTAT ;GET UART STATUS 143 E0EE E608 ANI OSTAT ;OUTPUT READY MASK 144 E0F0 C2EBE0 JNZ COUT ;TEST BUFFER EMPTY 145 E0F3 79 MOV A,C ;CHARACTER DATA 146 E0F4 2F CMA ;NEGATIVE LOGIC BUS 147 E0F5 32F8E3 STA UDATA ;SEND DATA TO UART 148 E0F8 2F CMA ;MAKE POSITIVE 149 E0F9 C9 RET 150 151 CIN 152 E0FA 3AF9E3 LDA USTAT ;GET UART STATUS 153 E0FD E604 ANI ISTAT ;INPUT READY MASK 154 E0FF C2FAE0 JNZ CIN ;WAIT FOR INPUT 155 E102 3AF8E3 LDA UDATA ;GET THE CHARACTER 156 E105 2F CMA ;ADJUST FOR NEGATIVE BUS 157 E106 E67F ANI 177Q ;TRIM TO 7 BITS 158 E108 C9 RET 159 160 CPAN 161 E109 3AF9E3 LDA USTAT ;GET UART STATUS 162 E10C E604 ANI ISTAT ;INPUT READY MASK 163 E10E C0 RNZ ;TEST FOR DATA 164 E10F CDFAE0 CALL CIN ;GET CHARACTER 165 E112 B9 CMP C ;TEST FOR PANIC CHTR 166 E113 C9 RET 167 TMSTAT 168 E114 3AF9E3 LDA USTAT ;GET UART STATUS CP/M MACRO ASSEM 2.0 #004 *** Disk Jockey Model B Firmware *** 169 E117 E604 ANI ISTAT ;INPUT READY MASK 170 E119 C9 RET 171 172 DISKST 173 E11A 21FDE3 LXI H,TRKREG ;MOST RECENT 174 E11D 4E MOV C,M ; TRACK TO C 175 E11E 23 INX H ;MOST RECENT 176 E11F 46 MOV B,M ; SECTOR TO B 177 E120 3AF6E7 LDA DCREG ;GET CURRENT 178 E123 2F CMA ; DENSITY IN 179 E124 E601 ANI 1 ; THE MSB 180 E126 0F RRC ; POSITION 181 E127 57 MOV D,A ;SAVE IN D 182 E128 3AF7E7 LDA SIDE ;PUT THE 183 E12B 07 RLC ; MOST RECENT 184 E12C 07 RLC ; SIDE SELECT 185 E12D 07 RLC ; IN BIT POSITIN 186 E12E B2 ORA D ; 6 AND MERGE 187 E12F 57 MOV D,A ;SAVE IN D 188 E130 3AE8E7 LDA DSFLAG ;GET THE 189 E133 EE08 XRI DSIDE ; MOST RECENT 190 E135 17 RAL ; DOUBLE SIDED 191 E136 17 RAL ; STATUS AND PLACE 192 E137 82 ADD D ; IN BIT POSITION 193 E138 57 MOV D,A ; 5 AND MERGE 194 E139 3AFDE7 LDA SECLEN ;GET THE 195 E13C 17 RAL ; SECTOR LENGTH 196 E13D 17 RAL ; CODE BITS IN 197 E13E B2 ORA D ; POSITIONS 2 & 3 198 E13F 57 MOV D,A ; AND MERGE 199 E140 3AECE7 LDA CDISK ;GET THE CURRENT 200 E143 82 ADD D ; DISK NO. IN BIT 201 E144 C9 RET ; POSITIONS 0 & 1 202 203 DMSTAT 204 E145 E5 PUSH H ;SAVE THE HL PAIR 205 E146 2AE6E7 LHLD DMAADR ;MOVE THE 206 E149 44 MOV B,H ; DMA ADDRESS TO 207 E14A 4D MOV C,L ; THE BC PAIR 208 E14B E1 POP H ;RECOVER HL 209 E14C C9 RET 210 211 DRIVE 212 E14D 79 MOV A,C ;DRIVE SELECT 213 E14E E603 ANI 3 ; VALUES MUST BE 214 E150 32EBE7 STA DISK ; BETWEEN ZERO 215 E153 C9 RET ; AND THREE 216 217 DMA 218 E154 21001C LXI H,-RAM ;TEST THE 219 E157 09 DAD B ; DMA ADDRESS 220 E158 DA65E1 JC DMASET ; FOR CONFLICT 221 E15B 210820 LXI H,8-ORIGIN 222 E15E 09 DAD B ; WITH THE I/O 223 E15F D265E1 JNC DMASET ; ON THE DJ/2D 224 E162 3E10 MVI A,20Q ; CONTROLLER CP/M MACRO ASSEM 2.0 #005 *** Disk Jockey Model B Firmware *** 225 E164 C9 RET 226 DMASET 227 E165 60 MOV H,B ;STORE THE 228 E166 69 MOV L,C ; BC PAIR 229 E167 22E6E7 SHLD DMAADR 230 E16A C9 RET 231 232 HOME 233 E16B CDD1E2 CALL HDLOAD ;LOAD THE HEAD 234 E16E D8 RC ;NOT READY ERROR 235 E16F CD81E1 CALL HENTRY ;MOVE THE HEAD 236 E172 F5 PUSH PSW ;SAVE STATUS 237 E173 9F SBB A ;UPDATE THE 238 E174 32F9E7 STA TRACK ; TRACK 239 E177 32FDE3 STA TRKREG ; REGISTERS 240 E17A AF XRA A ;SET THE NOT 241 E17B 32EDE7 STA TZFLAG ; VERIFIED FLAG 242 E17E C30FE2 JMP LEAVE+1 ;UNLOAD THE HEAD 243 HENTRY 244 E181 AF XRA A ;SET THE FORCE 245 E182 32E9E7 STA HDFLAG ; VERIFY FLAG 246 E185 210000 LXI H,0 ;TIMEOUT CONSTANT 247 E188 3E09 MVI A,HCMD ;MOVE THE HEAD 248 E18A CD50E3 CALL CENTRY ;TO TRACK 0 249 E18D E604 ANI TZERO ;TRACK ZERO BIT 250 E18F C0 RNZ 251 E190 37 STC ;ERROR FLAG 252 E191 C9 RET 253 254 SECSET 255 E192 AF XRA A ;TEST FOR 256 E193 B1 ORA C ; ZERO VALUE 257 E194 37 STC ;ERROR FLAG 258 E195 C8 RZ ;ERROR RETURN 259 E196 E61F ANI 37Q ;TRIM & CLEAR CRY 260 E198 32F8E7 STA SECTOR 261 E19B C9 RET 262 263 SEEK 264 E19C 79 MOV A,C ;TEST FOR 265 E19D FE4D CPI 77 ; TRACK 266 E19F 3F CMC ; TOO LARGE 267 E1A0 D8 RC 268 E1A1 32F9E7 STA TRACK 269 E1A4 C9 RET 270 271 WRITE 272 E1A5 CD1FE2 CALL PREP ;PREPARE FOR WRITE 273 E1A8 DA0EE2 JC LEAVE ;ABORT OPERATION 274 E1AB 21FCE3 LXI H,CMDREG ;ISSUE A FORCE 275 E1AE 36D0 MVI M,CLRCMD ; INTERRUUPT CMD 276 E1B0 E3 XTHL ;TIME DELAY 277 E1B1 E3 XTHL ; PADDING 278 E1B2 E3 XTHL ; INSTRUCTIONS 279 E1B3 E3 XTHL 280 E1B4 3E40 MVI A,WPROT ;WRITE PROT MASK CP/M MACRO ASSEM 2.0 #006 *** Disk Jockey Model B Firmware *** 281 E1B6 A6 ANA M ;TEST FOR WRITE OK 282 E1B7 C20DE2 JNZ PLEAVE ;ABORT OPERATION 283 E1BA 3E12 MVI A,WINDXD ;STAX D INSTRUCTION 284 E1BC 0EA0 MVI C,WRCMD ;WRITE SECTOR CMD 285 E1BE CDCDE3 CALL SPREP ;PREPARE FOR STALL 286 E1C1 7E MOV A,M ;1ST DATA BYTE 287 E1C2 CDDEE3 CALL BEGINS ;DYNAMIC STALL 288 E1C5 C3CAE1 JMP WRENTRY ;ENTER WRITE LOOP 289 WRLOOP 290 E1C8 7E MOV A,M ;LOAD 1ST BYTE OF DATA 291 E1C9 12 STAX D ;WRITE 1ST BYTE OF DATA 292 WRENTRY 293 E1CA 23 INX H ;ADVANCE POINTER 294 E1CB 7E MOV A,M ;LOAD 2ND BYTE OF DATA 295 E1CC 12 STAX D ;WRITE 2ND BYTE OF DATA 296 E1CD 23 INX H ;ADVANCE POINTER 297 E1CE 7E MOV A,M ;LOAD 3RD BYTE OF DATA 298 E1CF 12 STAX D ;WRITE 3RD BYTE OF DATA 299 E1D0 23 INX H ;ADVANCE POINTER 300 E1D1 05 DCR B ;REDUCE BLOCK COUNT 301 E1D2 7E MOV A,M ;LOAD 4TH BYTE OF DATA 302 E1D3 12 STAX D ;WRITE 4TH BYTE OF DATA 303 E1D4 23 INX H ;ADVANCE POINTER 304 E1D5 C2C8E1 JNZ WRLOOP ;WRITE NEXT 4 BYTES 305 E1D8 C300E2 JMP CBUSY 306 307 READ 308 E1DB CD1FE2 CALL PREP ;PREPARE FOR READ 309 E1DE DA0EE2 JC LEAVE ;ABORT OPERATION 310 E1E1 3E1A MVI A,RINDXD ;LDAX D INSTRUCTION 311 E1E3 0E80 MVI C,RDCMD ;READ SECTOR CMD 312 E1E5 CDCDE3 CALL SPREP ;PREPARE FOR STALL 313 E1E8 CDDEE3 CALL BEGINS ;DYNAMIC STALL 314 E1EB 77 MOV M,A ;STORE DATA 315 E1EC 1A LDAX D ;READ NEXT BYTE 316 E1ED C3F4E1 JMP RDENTRY ;ENTER READ LOOP 317 RDLOOP 318 E1F0 1A LDAX D ;READ 1ST BYTE 319 E1F1 23 INX H ;ADVANCE POINTER 320 E1F2 77 MOV M,A ;STORE 1ST BYTE 321 E1F3 1A LDAX D ;READ 2ND BYTE 322 RDENTRY 323 E1F4 23 INX H ;ADVANCE POINTER 324 E1F5 77 MOV M,A ;STORE 2ND BYTE 325 E1F6 1A LDAX D ;READ 3RD BYTE 326 E1F7 23 INX H ;ADVANCE POINTER 327 E1F8 77 MOV M,A ;STORE 3RD BYTE 328 E1F9 05 DCR B ;REDUCE BLOCK COUNT 329 E1FA 1A LDAX D ;READ 4TH BYTE 330 E1FB 23 INX H ;ADVANCE POINTER 331 E1FC 77 MOV M,A ;STORE 4TH BYTE 332 E1FD C2F0E1 JNZ RDLOOP ;READ NEXT 4 BYTES 333 CBUSY 334 E200 3AFCE3 LDA CSTAT ;GET 1791 STATUS 335 E203 1F RAR ;BUSY BIT TO CARRY 336 E204 DA00E2 JC CBUSY CP/M MACRO ASSEM 2.0 #007 *** Disk Jockey Model B Firmware *** 337 E207 17 RAL ;RESTORE THE ACC 338 E208 E6DF ANI 337Q ;ERROR BIT MASK 339 E20A CA0EE2 JZ LEAVE ;NO ERROR 340 PLEAVE 341 E20D 37 STC ;ERROR FLAG 342 LEAVE 343 E20E F5 PUSH PSW ;SAVE THE STATUS 344 E20F 3AF6E7 LDA DCREG ;CONTROL BITS 345 E212 EE04 XRI LOAD ;TOGGLE THE 346 E214 32FAE3 STA DCMD ; HEAD LOAD BIT 347 E217 3AEAE7 LDA DRVSEL ;ENABLE ACCESS TO 348 E21A 32F9E3 STA DREG ; THE DATA REGISTER 349 E21D F1 POP PSW ;RECOVER THE STATUS 350 E21E C9 RET 351 352 PREP 353 E21F CDD1E2 CALL HDLOAD ;LOAD THE HEAD 354 E222 D8 RC ;TEST FOR DRIVE READY 355 E223 3AFDE3 LDA TRKREG ;GET OLD TRACK 356 E226 3C INR A ;TEST FOR HEAD 357 E227 CC81E1 CZ HENTRY ; NOT CALIBRATED 358 E22A D8 RC ;SEEK ERROR? 359 E22B 21FDE3 LXI H,TRKREG ;OLD TRACK 360 E22E 3AF9E7 LDA TRACK ;NEW TRACK 361 E231 BE CMP M ;TEST FOR HEAD MOTION 362 E232 23 INX H ;ADVANCE TO THE 363 E233 23 INX H ; DATA REGISTER 364 E234 77 MOV M,A ;SAVE NEW TRACK 365 E235 79 MOV A,C ;TURN OFF DATA REG 366 E236 32F9E3 STA DREG ; ACCESS CONTROL BIT 367 E239 CA56E2 JZ TVERFY ;TEST FOR SEEK 368 E23C AF XRA A ;FORCE A READ 369 E23D 32E9E7 STA HDFLAG ; HEADER OPERATION 370 E240 3AFAE3 LDA DSTAT ;GET THE DOUBLE 371 E243 E608 ANI DSIDE ; SIDED FLAG 372 E245 32E8E7 STA DSFLAG ;SAVE FOR STATUS 373 E248 1F RAR ;SHIFT FOR 374 E249 1F RAR ; 3/6 MS STEP 375 E24A 1F RAR ; RATE CONSTANT 376 E24B C618 ADI SKCMD ;DO A 377 E24D 210000 LXI H,0 ; SEEK 378 E250 CD50E3 CALL CENTRY ; OPERATION 379 E253 DA7AE2 JC SERROR ;SEEK ERROR? 380 TVERFY 381 E256 3AE9E7 LDA HDFLAG ;GET THE FORCE 382 E259 B7 ORA A ; VERIFY HDR FLAG 383 E25A C2ADE2 JNZ CHKSEC ;NO SEEK & HEAD OK 384 E25D 0602 MVI B,2 ;VERIFY RETRY COUNT 385 SLOOP 386 E25F 3E1D MVI A,SVCMD ;DO A VERIFY 387 E261 CD4BE3 CALL COMAND ; COMMAND 388 E264 E699 ANI 231Q ;ERROR BIT MASK 389 E266 57 MOV D,A ;SAVE 390 E267 CA81E2 JZ RDHDR ;NO ERROR 391 E26A 3AF6E7 LDA DCREG ;DENISTY CONTROL 392 E26D EE01 XRI DENSITY ;FLIP THE DENSITY CP/M MACRO ASSEM 2.0 #008 *** Disk Jockey Model B Firmware *** 393 E26F 32F6E7 STA DCREG ;UPDATE AND 394 E272 32FAE3 STA DCMD ; CHANGE DENSITY 395 E275 05 DCR B ;DECREMENT RETRY 396 E276 C25FE2 JNZ SLOOP ; COUNT & TEST 397 E279 7A MOV A,D 398 SERROR 399 E27A 37 STC 400 E27B F5 PUSH PSW 401 E27C CD81E1 CALL HENTRY 402 E27F F1 POP PSW 403 E280 C9 RET 404 RDHDR 405 E281 060A MVI B,12Q ;NUMBER OF RETRYS 406 RHLOOP 407 E283 3E1A MVI A,32Q ;READ INSTRUCTION 408 E285 0EC4 MVI C,RACMD ;READ HEADER CMD 409 E287 CDCDE3 CALL SPREP ;PREPARE FOR READ 410 E28A CDDEE3 CALL BEGINS ;DYNAMIC STALL 411 E28D 32FAE7 STA TRACK+1 ;SAVE THE TRACK 412 E290 1A LDAX D ;GET THE SIDE NO. 413 E291 21FBE7 LXI H,TRACK+2 ;DATA POINTER 414 E294 77 MOV M,A ;STORE SIDE NO. 415 E295 23 INX H ;ADVANCE POINTER 416 RHL1 417 E296 1A LDAX D ;GET DISK DATA 0 418 E297 77 MOV M,A ;STORE IN MEM 419 E298 2C INR L ;ADVANCE POINTER 420 E299 C296E2 JNZ RHL1 ;TEST END OF PAGE 421 E29C 21FCE3 LXI H,CSTAT ;WAIT FOR 1791 422 E29F CD5AE3 CALL BUSY ; TO FINISH CMD 423 E2A2 B7 ORA A ;TEST FOR ERRORS 424 E2A3 CAADE2 JZ CHKSEC ;TRANSFER OK? 425 E2A6 05 DCR B ;NO - TEST FOR 426 E2A7 C283E2 JNZ RHLOOP ; HARD ERROR 427 E2AA C37AE2 JMP SERROR ;RECALIBRATE 428 CHKSEC 429 E2AD 3AFDE7 LDA SECLEN ;GET THE SECTOR 430 E2B0 4F MOV C,A ; SIZE AND SETUP 431 E2B1 0600 MVI B,0 ; THE TABLE OFFSET 432 E2B3 21CDE2 LXI H,STABLE ;SECTOR TABLE 433 E2B6 09 DAD B ;SECTOR SIZE PNTR 434 E2B7 3AF8E7 LDA SECTOR ;GET THE SECTOR 435 E2BA 47 MOV B,A ; AND SAVE IN B 436 E2BB 86 ADD M ;COMPARE W/TABLE 437 E2BC 3E10 MVI A,20Q ;ERROR FLAG 438 E2BE D8 RC ;ERROR RETURN 439 E2BF 78 MOV A,B ;INITIALIZE 1791 440 E2C0 32FEE3 STA SECREG ; SECTOR REGISTER 441 E2C3 3E20 MVI A,40Q ;128 BYTE SECTOR 442 SZLOOP 443 E2C5 0D DCR C ;REDUCE SIZE COUNT 444 E2C6 47 MOV B,A ;SECTOR SIZE TO B 445 E2C7 F8 RM ;RETURN ON MINUS 446 E2C8 17 RAL ;DOUBLE THE COUNT 447 E2C9 B7 ORA A ;CLEAR THE CARRY 448 E2CA C3C5E2 JMP SZLOOP CP/M MACRO ASSEM 2.0 #009 *** Disk Jockey Model B Firmware *** 449 450 STABLE 451 E2CD E5 DB 345Q ;26 SECTOR DISKETTES 452 E2CE E5 DB 345Q ;26 SECTOR DISKETTES 453 E2CF F0 DB 360Q ;15 SECTOR DISKETTES 454 E2D0 F7 DB 367Q ;8 SECTOR DISKETTES 455 HDLOAD 456 E2D1 21EBE7 LXI H,DISK ;NEW DRV PTR 457 E2D4 4E MOV C,M ;SAVE NEW DRV IN C 458 E2D5 23 INX H ;CURRENT DRV PTR 459 E2D6 5E MOV E,M ;SAVE OLD DRV IN E 460 E2D7 71 MOV M,C ;UPDATE CURRENT DRV 461 E2D8 23 INX H ;HOME CMD FLAG 462 E2D9 7B MOV A,E ;TEST FOR 463 E2DA B9 CMP C ; DRIVE CHANGE 464 E2DB 7E MOV A,M ;HEAD LOAD MASK 465 E2DC 3601 MVI M,HEAD ;UPDATE THE MASK 466 E2DE CA09E3 JZ HDCHK ;NO DRIVE CHANGE? 467 E2E1 23 INX H ;ADDR OF DRIVE TABLE 468 E2E2 E5 PUSH H ;SAVE TABLE ADDR 469 E2E3 1600 MVI D,0 ;SET UP THE 470 E2E5 42 MOV B,D ; OFFSET ADDRESS 471 E2E6 19 DAD D ;CALCULATE THE 472 E2E7 19 DAD D ; PARAMETER ADDR 473 E2E8 3AF6E7 LDA DCREG ;SAVE THE 474 E2EB 77 MOV M,A ;DENSITY STATUS 475 E2EC 23 INX H ;TRACK POINTER 476 E2ED 11FDE3 LXI D,TRKREG ;1791 TRK REG 477 E2F0 1A LDAX D ;GET CURRENT TRACK 478 E2F1 77 MOV M,A ;SAVE IN THE TABLE 479 E2F2 E1 POP H ;BEGINNING OF TABLE 480 E2F3 09 DAD B ;NEW DRIVE 481 E2F4 09 DAD B ; TABLE POINTER 482 E2F5 7E MOV A,M ;GET DENSITY STATUS 483 E2F6 32F6E7 STA DCREG ;UPDATE DCREG 484 E2F9 23 INX H ;GET THE OLD 485 E2FA 7E MOV A,M ; TRACK NUMBER 486 E2FB 12 STAX D ; AND UPDATE 1791 487 E2FC 3E7F MVI A,177Q ;DRIVE SELECT BITS 488 DSROT 489 E2FE 07 RLC ;ROTATE TO 490 E2FF 0D DCR C ; SELECT THE 491 E300 F2FEE2 JP DSROT ; PROPER DRIVE 492 E303 E67F ANI 177Q ;SET THE RUN BIT 493 E305 32EAE7 STA DRVSEL ;SAVE IN DRV REG 494 E308 AF XRA A ;FORCE A HEAD LOAD 495 HDCHK 496 E309 21FAE3 LXI H,DSTAT ;TEST FOR 497 E30C A6 ANA M ; HEAD LOADED 498 E30D 32E9E7 STA HDFLAG ;SAVE THE HEAD 499 E310 F5 PUSH PSW ; LOADED STATUS 500 E311 3AEAE7 LDA DRVSEL ;GET CURRENT DRIVE 501 E314 4F MOV C,A ;SAVE 502 E315 3AF7E7 LDA SIDE ;GET CURRENT SIDE 503 E318 2F CMA ; AND MERGE 504 E319 A1 ANA C ; WITH DRIVE SELECT CP/M MACRO ASSEM 2.0 #010 *** Disk Jockey Model B Firmware *** 505 E31A 32F9E3 STA DREG ;SELECT DRIVE & SIDE 506 E31D EE40 XRI ACCESS ;TOGGLE ACCESS BIT 507 E31F 4F MOV C,A ;SAVE FOR PREP ROUTINE 508 E320 3AF6E7 LDA DCREG ;DEN & HEAD CNTL BITS 509 E323 47 MOV B,A ;SAVE 510 E324 3AF9E7 LDA TRACK ;GET THE NEW TRACK 511 E327 D601 SUI 1 ;FORCE SINGLE 512 E329 9F SBB A ; DENSITY 513 E32A 3D DCR A ; IF TRACK = 0 514 E32B 2F CMA ;COMPLIMENT 515 E32C B0 ORA B ;MERGE W/CONTROL BITS 516 E32D 77 MOV M,A ;LOAD HEAD & SET DENSITY 517 E32E F1 POP PSW ;HEAD LOAD STATUS 518 E32F C23DE3 JNZ RDYCHK ;CONDITIONALLY 519 E332 E5 PUSH H ; WAIT FOR HEAD 520 E333 2AE4E7 LHLD TIMER ; LOAD TIME OUT 521 TLOOP 522 E336 2B DCX H ;COUNT DOWN 523 E337 7C MOV A,H ; 40 MS FOR 524 E338 B5 ORA L ; HEAD LOAD 525 E339 C236E3 JNZ TLOOP ; TIME OUT 526 E33C E1 POP H 527 RDYCHK 528 E33D 7E MOV A,M ;TEST FOR 529 E33E E680 ANI READY ; DRIVE READY 530 E340 C0 RNZ 531 UNLOAD 532 E341 3AF6E7 LDA DCREG ;FORCE A 533 E344 F606 ORI ULOAD ; HEAD 534 E346 77 MOV M,A ; UNLOAD 535 E347 3E80 MVI A,READY ;SET DRIVE 536 E349 37 STC ; NOT READY 537 E34A C9 RET ; ERROR FLAG 538 539 COMAND 540 E34B 2AE4E7 LHLD TIMER ;GET INDEX COUNT 541 E34E 29 DAD H ; AND MULTIPLY 542 E34F 29 DAD H ; BY FOUR 543 CENTRY 544 E350 EB XCHG ;SAVE IN D-E PAIR 545 E351 21FCE3 LXI H,CSTAT ;ISSUE COMMAND 546 E354 77 MOV M,A ; TO THE 1791 547 NBUSY 548 E355 7E MOV A,M ;WAIT 549 E356 1F RAR ; FOR THE 550 E357 D255E3 JNC NBUSY ; BUSY FLAG 551 BUSY 552 E35A 7E MOV A,M ;TEST FOR 553 E35B 1F RAR ; DEVICE BUSY 554 E35C 7E MOV A,M ;RESTORE STATUS 555 E35D D0 RNC ;RETURN IF NOT BUSY 556 E35E 1B DCX D ;TEST FOR 557 E35F 7A MOV A,D ; TWO DISK 558 E360 B3 ORA E ; REVOLUTIONS 559 E361 C25AE3 JNZ BUSY ;47 MACHINE CYCLES 560 E364 5E MOV E,M ;GET ERROR CODE CP/M MACRO ASSEM 2.0 #011 *** Disk Jockey Model B Firmware *** 561 E365 E5 PUSH H ;SAVE CMD ADDRESS 562 E366 23 INX H ;TRACK REGISTER 563 E367 56 MOV D,M ;SAVE PRESENT TRACK 564 E368 3AEAE7 LDA DRVSEL ;CONTROL BITS 565 E36B EE80 XRI RSTBIT ;RESET THE 1791 566 E36D 32F9E3 STA DREG ; CONTROLLER TO 567 E370 C376E3 JMP PATCH+3 ;JUMP AROUND PATCH 568 PATCH 569 E373 C3D1E2 JMP HDLOAD ;PATCH FOR OLD ATE 570 E376 00 NOP ;FILL INSTRUCTION 571 E377 EEC0 XRI STBITS ; CLEAR THE 572 E379 E3 XTHL ; COMMAND BUSY 573 E37A 32F9E3 STA DREG ; FAULT CONDITION 574 E37D 36D0 MVI M,CLRCMD ;FORCE INTERRUPT 575 E37F E3 XTHL ;RESTORE THE 576 E380 72 MOV M,D ; THE TRACK REG 577 E381 E1 POP H ;RESTORE THE STACK 578 E382 7B MOV A,E ;ERROR CODE TO A 579 E383 37 STC ; ERROR FLAG 580 E384 C9 RET 581 582 MEASUR 583 E385 110000 LXI D,0 ;INITIALIZE COUNT 584 E388 21FAE3 LXI H,DSTAT ;STATUS PORT 585 E38B 0E10 MVI C,INDEX ;INDEX BIT FLAG 586 INDXLO 587 E38D 7E MOV A,M ;WAIT FOR 588 E38E A1 ANA C ; INDEX 589 E38F CA8DE3 JZ INDXLO ; PULSE HIGH 590 INDXHI 591 E392 7E MOV A,M ;WAIT FOR 592 E393 A1 ANA C ; INDEX 593 E394 C292E3 JNZ INDXHI ; PULSE LOW 594 INDXCT 595 E397 13 INX D ;ADVANCE COUNT 596 E398 E3 XTHL ;FOUR DUMMY 597 E399 E3 XTHL ; INSTRUCTIONS 598 E39A E3 XTHL ; TO LENGTHEN 599 E39B E3 XTHL ; THE DELAY 600 E39C 7E MOV A,M ;WAIT FOR 601 E39D A1 ANA C ; THE INDEX 602 E39E CA97E3 JZ INDXCT ; TO GO HIGH 603 E3A1 C9 RET ;98 MACHINE CYCLES 604 DENFIX 605 E3A2 79 MOV A,C ;TRIM THE 606 E3A3 E601 ANI 1 ; EXCESS BITS 607 E3A5 2F CMA ;COMPLIMENT AND 608 E3A6 47 MOV B,A ; SAVE IN B 609 E3A7 21EBE7 LXI H,DISK ;NEW DISK PTR 610 E3AA 5E MOV E,M ;GET DISK NO. 611 E3AB 1600 MVI D,0 ;OFFSET ADDR 612 E3AD 23 INX H ;CURRENT DISK PTR 613 E3AE 7E MOV A,M ;MOVE TO ACC 614 E3AF AB XRA E ;CMPR OLD W/NEW 615 E3B0 F5 PUSH PSW ;SAVE STATUS 616 E3B1 23 INX H ;DISK TABLE CP/M MACRO ASSEM 2.0 #012 *** Disk Jockey Model B Firmware *** 617 E3B2 23 INX H ; ADDRESS 618 E3B3 19 DAD D ;ADD THE 619 E3B4 19 DAD D ; OFFSET 620 E3B5 7E MOV A,M ;GET PARAMETERS 621 E3B6 F601 ORI 1 ;MASK OFF DENSITY 622 E3B8 A0 ANA B ;SET NEW DENSITY 623 E3B9 77 MOV M,A ;UPDATE PARAMETERS 624 E3BA F1 POP PSW ;TEST NEW=OLD? 625 E3BB C0 RNZ 626 E3BC 7E MOV A,M ;UPDATA CDISK 627 E3BD 32F6E7 STA DCREG ; ALSO 628 E3C0 C9 RET 629 630 TIMOUT 631 E3C1 210000 LXI H,0 ;TIME-OUT DELAY 632 TILOOP 633 E3C4 2B DCX H ;DECREMENT COUNT 634 E3C5 7C MOV A,H ;TEST FOR DELAY 635 E3C6 B5 ORA L ; COUNT EQUAL ZERO 636 E3C7 E3 XTHL ;LONG NOP 637 E3C8 E3 XTHL ; INSTRUCTION 638 E3C9 C2C4E3 JNZ TILOOP 639 E3CC C9 RET 640 641 SPREP 642 E3CD 32E2E7 STA RAMINS ;STORE INSTRUCTION 643 E3D0 32FBE3 STA CSTALL ;READY STALL LOGIC 644 E3D3 2AE6E7 LHLD DMAADR ;DMA ADDRESS 645 E3D6 11FFE3 LXI D,DATREG ;DATA REGISTER 646 E3D9 79 MOV A,C ;EXECUTE THE 647 E3DA 32FCE3 STA CMDREG ; OPERATION 648 E3DD C9 RET 649 650 SBEGIN 651 E3DE E5 PUSH H ;SAVE THE POINTER 652 E3DF 21E2E3 LXI H,DSTALL ;SETUP JUMP 653 DSTALL 654 E3E2 E9 PCHL ;DYNAMIC STALL 655 E3E3 E1 POP H ;RESTORE POINTER 656 E3E4 C9 RET ;RETURN 657 SIDEFX 658 E3E5 79 MOV A,C ;GET THE SIDE BIT 659 E3E6 E601 ANI 1 ;TRIM THE EXCESS 660 E3E8 17 RAL ;MOVE THE BIT 661 E3E9 17 RAL ; TO THE SIDE 662 E3EA 17 RAL ; SELECT BIT 663 E3EB 17 RAL ; POSITION 664 E3EC 32F7E7 STA SIDE ;SAVE SIDE BIT 665 E3EF C9 RET 666 667 PWRJMP 668 E3F0 00 NOP ;POWER-ON 669 E3F1 00 NOP ; JUMP 670 E3F2 00 NOP ; SEQUENCE 671 E3F3 00 NOP ; WITH NOP 672 E3F4 00 NOP ; PADDING CP/M MACRO ASSEM 2.0 #013 *** Disk Jockey Model B Firmware *** 673 E3F5 C300E0 JMP DBOOT 674 675 E3F8 DS 10Q ;I/O LOCATIONS 676 677 E7C9 ORG RAM+3C9H 678 679 E7C9 STACK DS 31Q 680 681 RAMINS 682 E7E2 00 NOP ;DYNAMIC STALL ESCAPE 683 E7E3 00 INTRFG DB 0 ;INTERRUPT ENABLE FLAG 684 E7E4 0018 TIMER DW 1800H ;HEAD LOAD TIME OUT 685 E7E6 00E7 DMAADR DW RAM+300H ;DMA ADDRESS 686 E7E8 08 DSFLAG DB 10Q 687 E7E9 00 HDFLAG DB 0 ;READ HEADER FLAG 688 E7EA 7E DRVSEL DB 176Q ;DRIVE SELECT CONSTANT 689 E7EB 00 DISK DB 0 ;NEW DRIVE 690 E7EC 08 CDISK DB 10Q ;CURRENT DISK 691 E7ED 00 TZFLAG DB 0 ;HOME CMD INDICATOR 692 E7EE 09 DOPRAM DB 11Q ;DRIVE 0 PARAMETERS 693 E7EF FF DOTRK DB 377Q ;DRIVE 0 TRACK NO 694 E7F0 09 D1PRAM DB 11Q ;DRIVE 1 PARAMETERS 695 E7F1 FF D1TRK DB 377Q ;DRIVE 1 TRACK NO 696 E7F2 09 D2PRAM DB 11Q ;DRIVE 2 PARAMETERS 697 E7F3 FF D2TRK DB 377Q ;DRIVE 2 TRACK NO 698 E7F4 09 D3PRAM DB 11Q ;DRIVE 3 PARAMETERS 699 E7F5 FF D3TRK DB 377Q ;DRIVE 3 TRACK NO 700 E7F6 09 DCREG DB 11Q ;CURRENT PARAMETERS 701 E7F7 00 SIDE DB 0 ;NEW SIDE 702 E7F8 01 SECTOR DB 1 ;NEW SECTOR 703 E7F9 00 TRACK DB 0 ;NEW TRACK 704 E7FA 00 TRKNO DB 0 ;DISK 705 E7FB 00 SIDENO DB 0 ; SECTOR 706 E7FC 00 SECTNO DB 0 ; HEADER 707 E7FD 00 SECLEN DB 0 ; DATA 708 E7FE 00 CRCLO DB 0 ; BUFFER 709 E7FF 00 CRCHI DB 0 CP/M MACRO ASSEM 2.0 #014 *** Disk Jockey Model B Firmware *** ACCESS 0040 46# 506 BEGINS E3DE 13# 287 313 410 BOOT E07A 55 76# BUSY E35A 422 551# 559 CBUSY E200 305 333# 336 CDISK E7EC 199 690# CENTRY E350 248 378 543# CHKSEC E2AD 383 424 428# CIN E0FA 56 151# 154 164 CLRCMD 00D0 53# 97 275 574 CMDREG E3FC 22# 98 274 647 COMAND E34B 387 539# COUT E0EB 57 141# 144 CPAN E109 65 160# CRCHI E7FF 709# CRCLO E7FE 708# CSTALL E3FB 21# 643 CSTAT E3FC 23# 334 421 545 D1PRAM E7F0 694# D1TRK E7F1 695# D2PRAM E7F2 696# D2TRK E7F3 697# D3PRAM E7F4 698# D3TRK E7F5 699# DATREG E3FF 26# 645 DBOOT E000 55# 673 DCMD E3FA 19# 138 346 394 DCREG E7F6 104 109 177 344 391 393 473 483 508 532 627 700# DCRINT 0009 38# 80 DENFIX E3A2 70 604# DENSITY 0001 30# 392 DISK E7EB 3 214 456 609 689# DISKST E11A 68 172# DMA E154 61 217# DMAADR E7E6 205 229 644 685# DMASET E165 220 223 226# DMAST E024 67# DMSTAT E145 67 203# DOOROK E0B6 102 107# DOPRAM E7EE 692# DOTRK E7EF 693# DREAD E015 62# DREG E3F9 17# 96 348 366 505 566 573 DRIVE E14D 64 211# DRVSEL E7EA 347 493 500 564 688# DSFLAG E7E8 188 372 686# DSIDE 0008 36# 189 371 DSKERR E02A 69# DSROT E2FE 488# 491 DSTALL E3E2 652 653# DSTAT E3FA 20# 370 496 584 DWRITE E018 63# HCMD 0009 39# 247 HDCHK E309 101 466 495# HDFLAG E7E9 245 369 381 498 687# CP/M MACRO ASSEM 2.0 #015 *** Disk Jockey Model B Firmware *** HDLOAD E2D1 233 353 455# 569 HEAD 0001 29# 465 HENTRY E181 235 243# 357 401 HOME E16B 58 232# INDEX 0010 40# 585 INDXCT E397 594# 602 INDXHI E392 590# 593 INDXLO E38D 586# 589 INTRFG E7E3 683# IO E3F8 15# 16 17 18 19 20 21 22 23 24 25 26 ISTAT 0004 31# 153 162 169 LDHEAD E0A4 99# 106 LDLOOP E0CC 120# 126 LEAVE E20E 242 273 309 339 342# LELOOP E0DB 130# 134 LERROR E0D6 69 127# 139 LIGHT 0001 28# 103 LOAD 0004 33# 345 MEASUR E385 110 582# NBUSY E355 547# 550 NOLITE 0009 37# 108 ORIGIN E000 9# 11 13 14 15 221 OSTAT 0008 35# 143 PATCH E373 567 568# PLEAVE E20D 282 340# PREP E21F 272 308 352# PWRJMP E3F0 667# RACMD 00C4 52# 408 RAM E400 14# 112 218 677 685 RAMINS E7E2 642 681# RDCMD 0080 49# 311 RDENTRY E1F4 316 322# RDHDR E281 390 404# RDLOOP E1F0 317# 332 RDYCHK E33D 518 527# READ E1DB 62 122 307# READY 0080 48# 529 535 RHL1 E296 416# 420 RHLOOP E283 406# 426 RINDXD 001A 43# 310 RSTBIT 0080 47# 565 SBEGIN E3DE 650# SECLEN E7FD 194 429 707# SECREG E3FE 25# 440 SECSET E192 60 254# SECTNO E7FC 706# SECTOR E7F8 260 434 702# SEEK E19C 59 263# SELDRV E01B 64# SERROR E27A 379 398# 427 SETDEN E02D 70# SETDMA E012 61# SETSEC E00F 60# SETSID E030 71# SIDE E7F7 182 502 664 701# CP/M MACRO ASSEM 2.0 #016 *** Disk Jockey Model B Firmware *** SIDEFX E3E5 71 657# SIDENO E7FB 705# SKCMD 0018 42# 376 SLOOP E25F 385# 396 SPREP E3CD 285 312 409 641# STABLE E2CD 432 450# STACK E7C9 679# STATUS E027 68# STBITS 00C0 51# 571 SVCMD 001D 44# 386 SZLOOP E2C5 442# 448 TERMIN E003 56# TILOOP E3C4 632# 638 TIMER E7E4 520 540 684# TIMOUT E3C1 77 105 630# TKZERO E009 58# TLOOP E336 521# 525 TMSTAT E114 66 167# TPANIC E01E 65# TRACK E7F9 76 238 268 360 411 413 510 703# TRKNO E7FA 704# TRKREG E3FD 24# 173 239 355 359 476 TRKSET E00C 59# TRMOUT E006 57# TSTAT E021 66# TVERFY E256 367 380# TZERO 0004 32# 249 TZFLAG E7ED 241 691# UDATA E3F8 16# 147 155 ULOAD 0006 34# 533 UNLOAD E341 531# USTAT E3F9 18# 142 152 161 168 WINDXD 0012 41# 283 WPROT 0040 45# 280 WRCMD 00A0 50# 284 WRENTRY E1CA 288 292# WRITE E1A5 63 271# WRLOOP E1C8 289# 304