;IDE_NKH.ASM 12/09/00 ;Based on IDE38.ASM by Bob Woolley ; *=$C95B POINT SIO TO IDE JSR $D600 ; *=$FC98 COLDSTART JMP $E477 ; *=$FC34 SELECT IDE SEG ^F1 JSR SELNXTHD JMP $FC6D ; *=$FCB5 TOGGLE D2 ^F2 JSR PROCD2 .BYTE $EA,$EA,$EA,$EA .BYTE $EA,$EA,$EA,$EA LDA #$00 ; *=$C31D KILL ROM CHKSUM NOP NOP ; *=$C400 INIT IDE JSR INITCODE ; *=$D600 IDE CODE LDA $D01F CHK FOR SELECT KEY AND #$02 BEQ JMPTOSIO IF DOWN, DO SIO LDA $0300 CMP #$31 BNE JMPTOSIO LDX #$3C ; SRCH LDA HDTABL+3,X AND #$0F CMP $0301 BEQ IDECODE DEX DEX DEX DEX BPL SRCH ; JMPTOSIO JMP $E971 ; IDECODE LPBZY LDA $D157 AND #$80 BNE LPBZY ; LDA $0302 CMP #$53 BEQ STATUSCMD CMP #$21 BEQ FORMATCMD CMP #$22 BEQ FORMATCMD CMP #$52 BEQ READCMD CMP #$57 BEQ WRTCMD CMP #$50 BEQ WRTCMD CMP #$4E BNE CMDREJ JMP GETCFGCMD ; CMDREJ LDA #$01 STA $02EA LDA #$8B ; RETURN STA $0303 TAY SEC RTS ; STATUSCMD LDA HDTABL+3,X AND #$F0 STA $02EA STA $0308 STA $0309 ; CLRSTATUS LDA #$01 BNE RETURN ; FORMATCMD LDA $0304 STA $0032 LDA $0305 STA $0033 LDA #$FF LDY #$00 STA ($32),Y INY STA ($32),Y BNE STATUSCMD ; READCMD JSR SETREGS BCS CMDREJ LDA #$20 STA $D157 LDY #$00 LP1 LDA $D157 AND #$80 BNE LP1 RDLP LDA $D157 AND #$08 BEQ RDLP LDA $D150 STA ($32),Y INY CPY $308 BNE RDLP ENDRD LDA $D150 LDA $D157 AND #$08 BNE ENDRD BEQ CLRSTATUS ; WRTCMD JSR SETREGS BCS CMDREJ LDA #$30 STA $D157 LDY #$00 LP2 LDA $D157 AND #$80 BNE LP2 WRTLP LDA $D157 AND #$08 BEQ WRTLP LDA ($32),Y STA $D150 INY BNE WRTLP BEQ CLRSTATUS ; GETCFGCMD JSR SETREGS BCC GCOK JMP CMDREJ GCOK LDA #$A0 STA $D180 LDA HDTABL+2,X STA DRVCFG+2 LDY #$00 GCLP LDA DRVCFG,Y STA ($32),Y INY CPY #$0C BNE GCLP LDA #$80 STA $D180 JMP CLRSTATUS ; SETREGS LDA $0304 STA $0032 LDA $0305 STA $0033 LDA $030A AND #$0F CLC ADC #$01 STA $D153 LDA $030A AND #$F0 LSR A LSR A LSR A LSR A ORA #$A0 STA $D156 LDA $030B CMP HDTABL+2,X BCS SECTERR ADC HDTABL+1,X STA $D154 LDA HDTABL,X ADC #$00 STA $D155 LDA #$01 STA $D152 CLC SECTERR RTS ; INITCODE WAITHD LDA #$50 CMP $D157 BNE WAITHD ; LDA #$10 STA $D152 LDA #$AF STA $D156 LDA #$91 STA $D157 LDX #$40 WLP DEY BNE WLP DEX BNE WLP JSR FINDX NOP ; NOP ; give indication of D1: pointer (SIO or IDE partition) NOP ; JMP $C66E ;OS @ $C400 ; SELNXTHD JSR FINDX JSR INCRX NOP ; NOP ; give indication of D1: pointer (SIO or IDE partition) NOP ; TAY RTS ; FINDX LDX #$0C NXTPARM LDA HDT1+3,X AND #$0F BNE FOUNDX DEX DEX DEX DEX BNE NXTPARM FOUNDX RTS ; INCRX LDA #$A0 STA $D180 LDA HDT1+3,X AND #$F0 STA HDT1+3,X TXA CLC ADC #$04 AND #$0C TAX LDA HDT1+3,X ORA #$01 STA HDT1+3,X LDA #$80 STA $D180 RTS ; PROCD2 LDA #$A0 STA $D180 LDA HDP4+3 EOR #$02 STA HDP4+3 LDA #$80 STA $D180 LDY $D301 RTS ; *=$CBB0 Drive Configuration Table (located in unused region of XL/XE OS ROM) DRVCFG .BYTE $01 ;Tracks per side .BYTE $01 ;Step rate .WORD $0000 ;Sectors per track .BYTE $00 ;Side code - 0: single, 1: double .BYTE $04 ;Type code - b0=1: 8" disks, b2=1: DD .BYTE $01 ;Sector size (high byte) .BYTE $00 ;Sector size (low byte) .BYTE $43 ;Translation control ; b7=1: 40 track disk I/O on an 80 track drive ; b6=1: drive present (always 1) ; b1=1: handle sectors 1,2,3 as full size ; b0=1: sector #'s start with 0, not 1 .BYTE $00,$00,$00 ;Spare HDT1 *=$CBBC Relocated to unused region in XL/XE Rev2 OS ROM .BYTE $00,$00,$00,$00 ; ; Partition table ; HDTABL .BYTE $00,$00,$00,$60 ; 1 .BYTE $00,$00,$00,$60 ; 2 .BYTE $00,$00,$00,$60 ; 3 HDP4 .BYTE $00,$00,$00,$60 ; 4 .BYTE $00,$00,$00,$60 ; 5 .BYTE $00,$00,$00,$60 ; 6 .BYTE $00,$00,$00,$60 ; 7 .BYTE $00,$00,$00,$60 ; 8 .BYTE $00,$00,$00,$60 ; 9 .BYTE $00,$00,$00,$60 ; 10 .BYTE $00,$00,$00,$60 ; 11 .BYTE $00,$00,$00,$60 ; 12 .BYTE $00,$00,$00,$60 ; 13 .BYTE $00,$00,$00,$60 ; 14 .BYTE $00,$00,$00,$60 ; 15 .BYTE $00,$00,$00,$60 ; 16 END