********************************** Apple][SdFirmware* Version 0.5**(c)FlorianReitz, 2017** X registerusuallycontainsSLOT16* Y registerisusedforcountingorSLOT*********************************
DAT
XC ; enable 65C02 code
DEBUG =0
DO DEBUG
ORG $8000
ELSE
ORG $C800; Expansion ROM
FIN
* Memory defines
SLOT16=$2B; $s0 -> slot * 16
WORK =$3C
SLOT =$3D; $0s
CMDLO =$40
CMDHI =$41
CURSLOT =$07F8; $Cs
DATA =$C080
CTRL =DATA+1
DIV =DATA+2
SS =DATA+3
R30=$0478
R31=$04F8
R32=$0578
R33=$05F8
INITED =$0678* Constants
SSNONE =$0F
SS0=$0E
DUMMY =$FF********************************** Install SDcarddriver********************************** signature bytes
LDX #$20
LDY #$00
LDX #$03=====Page2=====
STX WORK* find slotnr
DO DEBUG
LDA #$04
STA SLOT
LDA #$C4
STA CURSLOT
LDA #$40
STA SLOT16
ELSE
JSR $FF58
TSX
LDA $0100,X
STA CURSLOT; $Cs
AND #$0F
STA SLOT; $0s
ASL A
ASL A
ASL A
ASL A
STA SLOT16; $s0
FIN
TAX ; X holds now SLOT16
BIT $CFFF
JSR INIT
DO 0**TODO: check foriniterror** see ifslothasadriveralready
LDX $BF31; get devcnt
INSLP LDA$BF32,X; get a devnum
AND #$70; isolate slot
CMP SLOT16; slot?
BEQ INSOUT; yes, skip it
DEX
BPL INSLP; keep up the search
* restore thedevnumtothelist
LDX $BF31; get devcnt again
CPX #$0D; device table full?
BNE INSLP2
JSR $FF3A; bell
JMP INSOUT; do something!
INSLP2LDA$BF32-1,X; move all entries down
STA $BF32,X; to make room at front
DEX ; for a new entry
BNE INSLP2=====Page3=====
LDA #$04; ProFile type device
ORA SLOT16
STA $BF32; slot, drive 1 at top of list
INC $BF31; update devcnt
* now insertthedevicedrivervector
LDA SLOT
ASL
TAX
LDA #<DRIVER
STA $BF10,X; write to driver table
DO DEBUG
LDA #>DRIVER
ELSE
LDA CURSLOT
FIN
STA $BF11,X
INSOUT RTS
FIN
BOOT LDA #$01
STA $42; load command
LDA SLOT16
TAX
STA $43; slot number
STZ $44; buffer lo
LDA #$08
STA $45; buffer hi
STZ $46; block lo
STZ $47; block hi
BIT $CFFF
JSR READ; call driver
JMP $801; goto bootloader
********************************** Jump table*********************************
DRIVER CLD
DO DEBUG
LDA #$04
STA SLOT