* DISK BOOT FOR SK*DOS * DISK CONTROLLER EQUATES DLATCH EQU $E014 DRIVE SELECT LATCH CMDREG EQU $E018 FDC COMMAND REGISTER STAREG EQU CMDREG FDC STATUS REGISTER TRKREG EQU CMDREG+1 FDC TRACK REGISTER SECREG EQU CMDREG+2 FDC SECTOR REGISTER DATREG EQU CMDREG+3 FDC DATA REGISTER * ACTUAL BOOT PROGRAM FOLLOWS FLBOOT LDS #$DFBF RESET STACK LDA #$D0 FORCE INTERRUPT/RESET COMMAND STA CMDREG CLR DLATCH DRIVE = 0 AND MOTOR ON LDB #3 FLWAIT LEAX -1,X WAIT A BIT FOR MOTORS BNE FLWAIT FLWAI1 LEAX -1,X BNE FLWAI1 FLWAI2 LEAX -1,X BNE FLWAI2 LDA #$0F RESTORE, LOAD, VERIFY, SLOW STA CMDREG BSR SHORTD FL1 LDB STAREG LOOK AT FDC STATUS ANDB #$01 BUSY BIT BNE FL1 WAIT IF STILL BUSY LDB #1 STB SECREG READY FOR TRACK 0 SECTOR 1 BSR SHORTD LDA #$8C READ SECTOR COMMAND STA CMDREG BSR SHORTD LDX #$C100 POINT TO MEMORY BRA CHEKST GO WAIT FOR DATA GTDATA ANDB #$02 CHECK DRQ BIT BEQ CHEKST NO DRQ, GET STATUS AGAIN LDA DATREG DRQ, SO GET DATA STA 0,X+ AND STORE INTO MEMORY CHEKST LDB STAREG CHECK STATUS BITB #$01 BUSY BIT BNE GTDATA IF STILL BUSY LOOK FOR DATA BITB #$2C IF NOT BUSY CHECK CRC OR LD BEQ FLDONE DONE WHEN NO ERROR BRA FLBOOT REPEAT ON ERROR FLDONE JMP $C100 GO TO EXECUTE SUPER-BOOT * SHORT DELAY FOR FDC TO SETTLE SHORTD LDB #20 SHORT1 DECB BNE SHORT1 RTS END FLBOOT