For the AAA Chicago Computer Center controller, substitute the following code for the disk drivers: * DISK AND CONSOLE DRIVERS FOR THE * AAA CHICAGO COMPUTER CENTER * SUPER FLOPPY CONTROLLER CARD ORG $DE00 FCB $7E,$DE,$7A,$7E,$DE,$AA,$7E,$DF FCB $73,$7E,$DF,$8E,$7E,$D3,$AE,$7E FCB $D3,$B5,$7E,$D3,$C8,$7E,$DE,$4A FCB $7E,$DE,$69,$7E,$DE,$DE,$00,$00 FCB $00,$03,$DE,$25,$FF,$03,$00,$8A FCB $92,$50,$03,$00,$8A,$92,$50,$03 FCB $00,$8A,$92,$50,$03,$00,$8A,$92 FCB $50,$CC,$53,$8F,$A7,$81,$E7,$80 FCB $CC,$9A,$4D,$ED,$81,$8C,$DE,$39 FCB $26,$EF,$8E,$DE,$25,$6D,$1F,$2A FCB $0A,$CC,$08,$03,$E7,$1F,$B5,$E0 FCB $14,$26,$DE,$6D,$84,$10,$2B,$06 FCB $B4,$30,$05,$8C,$DE,$39,$26,$F3 FCB $39,$8E,$DE,$25,$6D,$84,$10,$2B FCB $06,$A6,$30,$05,$8C,$DE,$39,$26 FCB $F3,$39,$7D,$DE,$21,$10,$2B,$06 FCB $7F,$8D,$5B,$26,$24,$86,$84,$8D FCB $4D,$20,$05,$B6,$E0,$1B,$A7,$80 FCB $F5,$E0,$14,$2B,$F6,$27,$F9,$F6 FCB $E0,$18,$C5,$10,$27,$09,$BE,$DE FCB $22,$86,$20,$A8,$84,$A7,$84,$C5 FCB $DC,$39,$7D,$DE,$21,$10,$2B,$06 FCB $52,$8D,$2B,$26,$F4,$CC,$A4,$08 FCB $FA,$DE,$20,$F7,$E0,$14,$8D,$16 FCB $20,$03,$B7,$E0,$1B,$A6,$80,$F5 FCB $E0,$14,$2B,$F6,$27,$F9,$B6,$DE FCB $20,$B7,$E0,$14,$20,$C1,$1A,$50 FCB $C6,$84,$B7,$E0,$18,$39,$7D,$DE FCB $21,$10,$2B,$06,$36,$F7,$E0,$1A FCB $34,$12,$BE,$DE,$22,$A1,$04,$25 FCB $04,$C6,$10,$35,$92,$F6,$DE,$20 FCB $C4,$9F,$34,$04,$E6,$84,$C5,$08 FCB $27,$04,$78,$E0,$19,$48,$B7,$E0 FCB $1B,$26,$05,$C5,$04,$26,$01,$5F FCB $A6,$02,$C4,$20,$27,$02,$A6,$03 FCB $84,$7F,$B1,$E0,$1A,$24,$02,$CA FCB $40,$EA,$E0,$F7,$E0,$14,$F7,$DE FCB $20,$A6,$84,$84,$03,$8A,$18,$8D FCB $4B,$35,$12,$B7,$E0,$19,$20,$53 FCB $E6,$03,$34,$14,$BE,$DE,$22,$B6 FCB $E0,$19,$A7,$01,$58,$58,$EB,$E4 FCB $8E,$DE,$25,$3A,$BC,$DE,$22,$27 FCB $0A,$BF,$DE,$22,$B7,$E0,$1B,$86 FCB $10,$8D,$21,$EC,$84,$F7,$E0,$19 FCB $B7,$DE,$21,$48,$47,$84,$B0,$AA FCB $E4,$B7,$DE,$20,$B7,$E0,$14,$A6 FCB $84,$35,$94,$7D,$DE,$21,$10,$2B FCB $05,$8C,$86,$84,$B7,$E0,$18,$C6 FCB $04,$8D,$1A,$F5,$E0,$14,$27,$F9 FCB $F6,$E0,$18,$C5,$98,$39,$8D,$A8 FCB $10,$2B,$05,$75,$17,$F4,$1E,$84 FCB $03,$8A,$08,$20,$DF,$7D,$CC,$34 FCB $27,$03,$11,$3F,$12,$39 ORG $D3AE FCB $17,$0B,$87,$10,$2B,$11,$57,$7D FCB $DE,$21,$10,$2B,$11,$53,$8D,$11 FCB $17,$0B,$DC,$C6,$10,$F5,$E0,$14 FCB $26,$F6,$7D,$DE,$21,$10,$2B,$11 FCB $43,$E6,$03,$F1,$DE,$24,$22,$0B FCB $F6,$E0,$18,$2B,$02,$5F,$39,$C6 FCB $C0,$58,$39,$C6,$1F,$54,$39,$D3 FCB $70,$D3,$A5,$DF,$C2,$DF,$C8,$D3 FCB $91,$D3,$8A,$D3,$9C,$D3,$86,$D3 FCB $76,$D3,$82,$D3,$7E,$D3,$77 ORG $D370 FCB $AD,$9F,$F8,$04,$84,$7F,$39,$8D FCB $F7,$81,$1B,$12,$27,$F8,$6E,$9F FCB $F8,$0A,$6E,$9F,$F8,$08,$6E,$9F FCB $F8,$00,$86,$42,$20,$05,$12,$12 FCB $12,$86,$02,$C6,$01,$F7,$E2,$11 FCB $B7,$E2,$10,$39,$8D,$F3,$CC,$13 FCB $87,$FD,$E2,$12,$39,$B6,$E2,$11 FCB $FC,$E2,$12,$7E,$C7,$00 For the Gimix 44 controller, substitute the following code for the disk drivers: * STANDARD PRE-NAMED LABEL EQUATES MONLRA EQU $F812 * EXTERNAL LABEL EQUATES DSELRG EQU $00B0 DLATCH EQU $00B1 DMA CONTROL REG DMBEGA EQU $00B2 STAREG EQU $00B4 TRKREG EQU $00B5 SECREG EQU $00B6 DATREG EQU $00B7 L1388 EQU $1388 DMAREG EQU $E3B0 LE500 EQU $E410 LE503 EQU $E413 LE509 EQU $E419 LE50C EQU $E41C ORG $D3A8 GINIT LDA DMAREG CHECK 5/8" SENSE SWITCH LSRA BCC INIRTS EXIT IF 5" LDA #4 FOR FOUR DRIVES LDX #GRTABL INLOOP LDB 1,X ORB #$C0 STB 1,X LDB ,X ORB #$10 STB ,X LDB #$0F STB 3,X LDB #$1A STB 4,X LEAX 5,X DECA BNE INLOOP INIRTS RTS GRTABL FCB $4B,$11,$FF,$0A,$12 5 BYTES FOR 4 DRIVES FCB $4B,$12,$FF,$0A,$12 FCB $4B,$14,$FF,$0A,$12 FCB $4B,$18,$FF,$0A,$12 DRIVE FCB $FF LD3E2 FCB $00 LD3E3 FCB $00 ORG $DE00 JMP GREAD JMP GWRITE JMP GVERIF JMP GREST JMP GXDRIV JMP GXDRIV JMP GXDRIV JMP GINIT JMP GWARM JMP GSEEK LDE1E LBSR LDEFD BITB #$10 BEQ GWARM LDD ,U EORA #8 STA ,U COM LD3E3 BNE GWARM EORB #$20 STB 1,U LDB #$10 COM LD3E2 GWARM RTS LDE3A LDB 3,S STB 3 LSRB ERROR 15 PLUS SET CARRY RTS DRVOK PSHS X BSR GTOLDT POINT TO OLD TRACK ENTRY LDB TRKREG GET CURRENT TRACK STB ,X SAVE IN TABLE STA DRIVNO BSR GTOLDT POINT TO TRACK ENTRY OF NEW DRIVE LDB ,X GET ITS TRACK STB TRKREG GIVE TO FDC LDX #DRVTBL LDB A,X GET DRIVE BIT FOR CURRENT DRIVE CMPB MLATCH SAME AS CURRENT? BEQ LCB61 YES, CONTINUE STB MLATCH NO, SELECT NEW DRIVE STB DLATCH BRA LCB61 AND THEN CONTINUE * POINT TO DRIVE'S ENTRY IN TRACK TABLE GTOLDT LDX #TRTABL POINT TO DRIVE DATA TABLE LDB DRIVNO OLD DRIVE NUMBER ABX POINT TO DRIVE'S ENTRY RTS * CHECK DRIVE READY CHKRDY LDA 3,X GET DRIVE NUMBER PSHS X LDX #DRVTBL LDB A,X GET CURRENT DRIVE MASK LCB61 ANDB #$7F STB DLATCH LDX #L8234 LCB71 LBSR WAIT LDB STAREG BPL LCB9D IF READY LEAX -1,X IF NOT READY, DECR COUNTER BEQ LCBA0 BRA LCB71 * QUICK DRIVE CHECK QUICK LDA 3,X GET DRIVE NUMBER PSHS X LDX #DRVTBL LDB A,X DRIVE BIT FOR DRIVE ANDB #$7F STB DLATCH LBSR WAIT LDB STAREG BMI LCBA0 IF NOT READY LCB9D CLRB IF READY, B=0 PULS X,PC LCBA0 LDB #$C0 IF NOT READY, B=$80 AMD SET C ASLB PULS X,PC DRVTBL FCB $FE,$FD,$FB,$F7 ORG $D370 * HMBUG'S NEXT COMMAND RE-ENTRY HUMNEX LDA #$1E BSR OUTEEE LDA #$0D BSR OUTEEE SWI JMP WARMS * INITIALIZE SERIAL PORT SERINI PSHS A LDA #$11 STA [ACIAAD] PULS A,PC * HUMBUG'S INEEE WITH ECHO INEEE TST LD3DE BEQ LD397 JSR [LD3DE] * HUMBUG'S CHARACTER OUTPUT OUTEEE JMP [MOUTCH] * CHECK KB STATUS KBSTAT JMP [MINCHK] * HUMBUG'S INCH WITH ECHO LD397 JMP [MINCHE] KINPUT JMP [MINCH] * IRQ INTERRUPT HANDLER IRQHAN LEAU X READ LBSR SEEKOK SEEK TO TR-SEC A-B READ1 LDB #0 BSR LDE92 CONVERT LOG TO PHYS ADDRESS LDA #$88 READ COMMAND ORA SDELAY DO 15 MS DELAY AFTER A SEEK CLR SDELAY AND NOT AFTER THAT ORA LDE21 LBSR DORDWR GO DO THE READ BITB #$9C CHECK NR,RNF,CRC,LD ERROR BPL LDE4B IF READY, RETURN BSR SETAGN GET READY TO REPEAT BEQ READ1 TRY IT AGAIN LDE4B RTS * WRITE SECTOR FROM BUFFER ->X WRITE LBSR SEEKOK SEEK TO TR-SEC A-B WRITE1 LDB #1 BSR LDE92 LDA #$A8 WRITE COMMAND ORA SDELAY DO 15 MS DELAY AFTER A SEEK CLR SDELAY AND NOT AFTER THAT ORA LDE21 BSR DORDWR GO DO THE WRITE BITB #$FC CHECK NR,WP,WF,RNF,CRC,LD ERRORS BPL LDE68 IF READY, RETURN BSR SETAGN GET READY TO REPEAT BEQ WRITE1 TRY IT AGAIN LDE68 RTS * VERIFY SECTOR JUST WRITTEN VERIFY LDA #$88 READ SECTOR COMMAND ORA LDE21 STA CMDREG LBSR WAIT LBSR LDF8A BITB #$98 CHECK FOR NR,RNF,CRC RTS * ON ANY READ OR WRITE ERROR OTHER THAN NOT READY, DO THIS * AND TRY TO DO IT AGAIN SETAGN LDA LDE24 BEQ LDE90 TST LDE25 BPL LDE89 ORA #$80 STA DLATCH LDE89 TST LF050 CLR LDE24 RTS LDE90 TSTB RTS * ENTER WITH B=0 WHEN READING, B=1 WHEN WRITING * AND X-> BUFFER ADDRESS (LOGICAL) LDE92 PSHS X EORB LDE25 STB DMASTA JSR [MONLRA] CHECK LRA TABLE TST LDE25 RETURN FIELD IN A, PHYS ADDR IN X BMI LDEA8 STA PFIELD SAVE PHYSICAL FIELD ADDRESS BRA LDEAD LDEA8 ORA #$10 STA LF040 LDEAD TFR X,D SAVE PHYSICAL ADDRESS EORA LDE25 EORB LDE25 STD STRTAD STARTING PHYSICAL ADDRESS LDD #$0100 EORA LDE25 EORB LDE25 STD ENDADD ENDING ADDRESS + 1 LDB #1 EORB LDE25 PULS X,PC * DO THE ACTUAL READ OR WRITE DORDWR PSHS X STB DMACMD GIVE COMMAND TO DMA CONTROLLER STA CMDREG GIVE RD OR WR COMMAND TO FDC LDEE0 LDA DMASTA CHECK DMA STATUS REGISTER EORA LDE25 BPL LDEE0 WAIT UNTIL DONE LDEF8 LDA LDE25 LDB LDE25 STD DMACMD GIVE COMMAND TO DMA BOARD LBSR LDF8A PULS X,PC * SEEK TO TRACK (A), SECTOR (B) SEEK CMPD #$0000 TR-SEC 00-00? BNE SEEKOK NO LDA DRIVNO YES! INCB B=1 LDX #DENTAB STB A,X STORE 01 INTO DRIVE'S ENTRY LDA TRKREG GET CURRENT TRACK LDB MLATCH CURRENT MLATCH STATUS LDX #STRTAD RTS AND RETURN * ALSO SEEK TO TR-SEC A-B SEEKOK STB SECREG DESIRED SECTOR NUMBER CLR LDE21 LBSR SEESUB COMPUTE A NEW LDE1F CMPB LDE1F IS IT SMALLER? -- WILL NEVER HAPPEN -- LDB #$80 BCS LDF40 YES, WAS SMALLER -- NEVER HAPPEN!! -- TST LDE25 BMI LDF3E TST LDE1E BNE LDF3E LDB #2 STB LDE21 LDF3E LDB #$90 LDF40 ORB LDE1E ORB MLATCH TST LDE25 BMI LDF4D ANDB #$7F LDF4D EORB LDE25 STB LDE24 STB DLATCH TST CMDREG BPL LDF6F PSHS X LDX #$8234 LDF60 BSR WAIT TST CMDREG READY? BPL LDF6D YES LEAX -1,X WAIT FOR TIMEOUT BNE LDF60 NOT YET PULS X,PC TIMED OUT LDF6D PULS X LDF6F CMPA TRKREG CHECK IF ON CORRECT TRACK BEQ LDF89 YES, NO NEED TO DO IT STA DATREG NO, PUT INTO DATA REG CLRA LDF78 DECA WAIT BNE LDF78 LDA #4 STA SDELAY GETS AN 04 WHEN SEEK IS DONE LDA #$18 LOAD HEAD AND SEEK COMMAND STA CMDREG BSR WAIT BSR WNBUSY LDF89 RTS LDF8A BSR WNBUSY PSHS B,X BITB #$10 RECORD NOT FOUND? BEQ LDF9A LDX #DENTAB LDB DRIVNO INC B,X LDF9A PULS B,X,PC * SUBROUTINE USED BY SEEK SEESUB PSHS A,B,X LDX #DENTAB POINT TO DENSITY TABLE LDB DRIVNO LDA B,X GET DENSITY ENTRY LDB #$60 BITA #1 BNE LCB16 TST ,S BEQ LCB16 LDB #0 LCB16 STB LDE1E BNE LCB28 LDB #$1E BITA #2 BEQ LCB23 LDB #$1B LCB23 STB LDE1F PULS A,B,X,PC LCB28 LDB #$10 STB LDE1F PULS A,B,X,PC * WAIT FOR NOT BUSY OUT OF FDC WNBUSY LDB CMDREG BITB #1 BUSY? BNE WNBUSY YES, WAIT RTS * WAIT SUBROUTINE WAIT BSR WAIT1 WAIT1 BSR WAIT2 WAIT2 BSR WAIT3 WAIT3 RTS END $CD00 For the F&D disk controller, substitute the following code for the disk drivers: * STAR-DOS DISK DRIVERS FOR F&D MDC-1 - TYPE CONTROLLERS * (C) 1984, 1985 BY PETER A. STARK FOR STAR-K SOFTWARE SYSTEMS CORP * EQUATES SLATCH EQU $E014 * EXPLANATION OF SLATCH OPERATION: * BITS 0 AND 1 SELECT DRIVE 0-3 * BIT 7 SELECTS SIDE (0=SIDE A) DLATCH EQU $E015 * EXPLANATION OF DLATCH OPERATION: * BIT 6 SELECTS DENSITY (1=DD) COMREG EQU $E018 STAREG EQU COMREG TRKREG EQU $E019 SECREG EQU $E01A DATREG EQU $E01B ORG $DE00 * DISK DRIVER VECTORS DREAD JMP READ DWRITE JMP WRITE DVERIF JMP VERIFY DREST JMP RESTOR DDRIVE JMP DRIVE DCHK JMP CHKRDY DQUICK JMP QUICK DINIT JMP RTS DWARM JMP RTS DSEEK JMP SEEK LASTDR FCB 3 LAST DRIVE ON SYSTEM STPRAT FCB 3 STEPRATE (DEFAULT TO 30 MS) * DRIVE - SELECT DRIVE SPECIFIED BY FCB+3 DRIVE PSHS A,X,Y LDA 3,X GET DRIVE NUMBER FROM FCB CMPA LASTDR CHECK IT BHI DRIVNG IF DRIVE NUMBER NG LDX #TRTABL POINT TO DRIVE DATA TABLE LDB DRIVNO GET OLD DRIVE NUMBER ABX POINT TO DRIVE'S ENTRY LDB TRKREG LAST TRACK USED STB 0,X SAVE IN TABLE STA SLATCH SWITCH TO NEW DRIVE CMPA DRIVNO SAME AS BEFORE? BEQ SAMDRV YES BIGWAI LEAX -1,X COUNT DOWN FROM ABOUT $DFXX TO... BNE BIGWAI WAIT FOR CONTROLLER TO SWITCH STA DRIVNO SAVE NEWDRIVE NUMBER LDX #TRTABL POINT TO TABLE LDA A,X GET LAST TRACK ON NEW DRIVE STA TRKREG GIVE TO FDC SAMDRV CLRB MEANS THERE WAS NO ERROR ASRB CLEAR CARRY WITH 1-BYTE INSTRUCTION PULS A,X,Y,PC AND RETURN DRIVNG LDB #15 ERROR 15 SEC SET CARRY PULS A,X,Y,PC AND RETURN ON ERROR * CHKRDY - CHECK IF DRIVE SPEC BY FCB IS READY CHKRDY LDB 3,X GET DRIVE NUMBER CMPB LASTDR CHECK FOR LAST DRIVE BHI CHKNG CLRB NO ERROR ASRB CLEAR CARRY WITH 1-BYTE INSTRUCTION RTS CHKNG LDB #$80 NOT READY BIT SEC RTS * QUICK - QUICK CHECK QUICK EQU CHKRDY SAME AS CHECK READY * RESTORE - SELECT DRIVE SPEC BY FCB AND RESTORE IT TO 0 RESTOR BSR DRIVE SELECT DRIVE BNE RTS ON ERROR RESTR1 LDB #$08 ADDB STPRAT PLUS STEP RATE BITS STB COMREG RESTORE, LOAD HEAD, SLOW STEP BSR WNBUSY WAIT UNTIL NOT BUSY ANDB #$98 CHECK NR, SK, CRC ERRORS ANDCC #$FE CLEAR CARRY RTS RTS AND RETURN * WAIT - WAIT ROUTINE TO WAIT A WHILE WAIT LBSR WAIT4 WAIT4 LBSR WAIT2 WAIT2 LBSR WAIT1 WAIT1 RTS * WNBUSY - WAIT FOR NOT BUSY WNBUSY BSR WAIT FOR COMMAND TO SETTLE LDB STAREG CHECK STATUS BITB #1 CHECK BUSY FLAG BNE WNBUSY WAIT IF STILL BUSY RTS ELSE RETURN WITH B=STATUS * SEEK - SEEK TO TR-SEC C(D) AND RETURN Z FLAG SEEK PSHS A,X STB SECREG GIVE SECTOR NUMBER TO FDC LDB DRIVNO CURRENT DRIVE NUMBER LDX #DENSTE DRIVE DATA TABLE ABX POINT TO DRIVE'S ENTRY IN IT STX DDATA SAVE POINTER FOR LATER CLRB TEMP ASSUME SINGLE DENSITY TST A CHECK TRACK NUMBER BEQ USESD USE SD ON TRACK 0 LDB 0,X ELSE GET CURRENT ENTRY ASLB MOVE DENSITY BIT TO BIT 1 ANDB #2 KEEP ONLY DENSITY USESD STB DENSTY ASLB ASLB B=0 ON SD, 8 ON DD ADDB #10 B=10 ON SD, 18 ON DD CMPB SECREG COMPARE WITH DESIRED SECTOR BLO SWSIDB USE SIDE B IF >10 (SD) OR 18(DD) CLRB SIDE A BRA SIDEOK SWSIDB LDB #$80 SIDE B SIDEOK ADDB DRIVNO ADD IN DRIVE NUMBER STB SLATCH SELECT DRIVE AND SIDE CMPA TRKREG ALREADY ON DESIRED TRACK? BEQ TRKOK YES, WAIT AND EXIT NODUB1 STA DATREG AND GIVE NEW TRACK TO FDC BSR WAIT LDA #$18 ADDA STPRAT ADD STEP RATE STA COMREG SEEK, LOAD, SLOW COMMAND BSR WNBUSY WAIT FOR COMPLETION NODUB2 ANDB #$98 CHECK NR,SK,CRC ERRORS PULS A,X,PC AND RETURN TRKOK BSR WAIT WAIT FOR COMPLETION CLRB IF NO ERROR PULS A,X,PC AND RETURN * READ - READ SECTOR ROUTINE - READ TR-SEC C(D) * INTO C(X) AND RETURN Z ERROR FLAG READ PSHS CC BSR RWCOMN GO PREPARE FOR READING LDA #$8C READ COMMAND STA COMREG READ COMMAND LBSR WAIT WAIT FOR FDC TO SETTLE TST DENSTY SINGLE OR DOUBLE DENSITY? BNE DDREAD DOUBLE * SINGLE-DENSITY READ RDLOOP LDA STAREG CHECK STATUS BITA #2 DRQ? BNE RDBYTE YES BITA #1 BUSY? BNE RDLOOP YES, SO WAIT TFR A,B MOVE STATUS TO B BRA SDFINR THEN EXIT RDBYTE LDA DATREG GET DATA BYTE STA 0,X+ SAVE IT IN MEM DECB DECREMENT COUNTER BNE RDLOOP REPEAT UNTIL DONE SDFINR LBSR WNBUSY WAIT FOR NOT BUSY BITB #$10 RNF ERROR? BEQ READEX NO, SOMETHING ELSE? INC [DDATA] YES, TRY NEXT SETTING PSHS B SAVE ERROR CODE JSR RESTR1 FORCE A RESTORE (AND THEN RE-SEEK) PULS B RESTORE ERROR CODE READEX PULS CC RESTORE INTERRUPTS ANDB #$9C NR, RNF, CRC, OR LOST DATA? RTS AND RETURN * DOUBLE-DENSITY READ DDREAD PSHS DP SAVE DP REGISTER LDA #$E0 TFR A,DP POINT TO I/O PAGE DRLOOP LDA