AppleIISd/AppleIISd.s

1 line
18 KiB
ArmAsm
Raw Normal View History

2017-08-12 17:56:49 +02:00
******************************** * * Apple][Sd Firmware * Version 0.5 * * (c) Florian Reitz, 2017 * * X register usually contains SLOT16 * Y register is used for counting or SLOT * ******************************** 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 SD card driver * ******************************** * signature bytes LDX #$20 LDY #$00 LDX #$03 ===== Page 2 ===== STX WORK * find slot nr 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 for init error * * see if slot has a driver already 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 the devnum to the list LDX $BF31 ; get devcnt again CPX #$0D ; device table full? BNE INSLP2 JSR $FF3A ; bell JMP INSOUT ; do something! INSLP2 LDA $BF32-1,X ; move all entries down STA $BF32,X ; to make room at front DEX ; for a new entry BNE INSLP2 ===== Page 3 ===== LDA #$04 ; ProFile type device ORA SLOT16 STA $BF32 ; slot, drive 1 at top of list INC $BF31 ; update devcnt * now insert the device driver vector 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