diff --git a/Binary/AppleIISd.bin b/Binary/AppleIISd.bin index 5f95df8..024408d 100644 Binary files a/Binary/AppleIISd.bin and b/Binary/AppleIISd.bin differ diff --git a/Binary/Flasher.dsk b/Binary/Flasher.dsk index 0cd6399..b1ffbb5 100644 Binary files a/Binary/Flasher.dsk and b/Binary/Flasher.dsk differ diff --git a/Firmware/src/AppleIISd.inc b/Firmware/src/AppleIISd.inc index e1838b9..2edf35a 100644 --- a/Firmware/src/AppleIISd.inc +++ b/Firmware/src/AppleIISd.inc @@ -1,10 +1,10 @@ ;******************************* ; ; Apple][Sd Firmware -; Version 1.2 +; Version 1.2.2 ; Defines ; -; (c) Florian Reitz, 2017 - 2018 +; (c) Florian Reitz, 2017 - 2020 ; ; X register usually contains SLOT16 ; Y register is used for counting or SLOT @@ -44,7 +44,6 @@ DRVNUM := $0678 CURSLOT := $07F8 ; $Cs ; Rom equates -KNOWNRTS := $FF58 OAPPLE := $C061 ; open apple key DATA := $C080 CTRL := DATA+1 @@ -58,7 +57,7 @@ SS0 = $01 ; SS register SDHC = $10 WP = $20 CD = $40 -INITED = $80 +CARD_INIT = $80 SMDRIVERVER = $120B ; Version 1.2 Beta diff --git a/Firmware/src/AppleIISd.s b/Firmware/src/AppleIISd.s index c895db1..09b7324 100644 --- a/Firmware/src/AppleIISd.s +++ b/Firmware/src/AppleIISd.s @@ -11,12 +11,15 @@ ; ;******************************* +.export INIT + .import PRODOS .import SMARTPORT .import GETR1 .import GETR3 .import SDCMD .import CARDDET +.import INITED .import READ .include "AppleIISd.inc" @@ -54,25 +57,23 @@ LDX #$00 LDX #$03 LDX #$00 ; is Smartport controller + ;LDX #$3C ; is a disk controller SEI ; find slot - LDA #$60 ; opcode for RTS - STA SLOT - JSR SLOT + BIT $CFFF + JSR KNOWNRTS TSX LDA $0100,X CLI STA CURSLOT ; $Cs AND #$0F STA SLOT ; $0s - TAY ; Y holds now SLOT ASL A ASL A ASL A ASL A STA SLOT16 ; $s0 TAX ; X holds now SLOT16 - BIT $CFFF LDY #0 ; display copyright message @DRAW: LDA TEXT,Y @@ -95,7 +96,6 @@ JMP (CMDLO) @INIT: JSR INIT - CMP #NO_ERR BNE @NEXTSLOT ; init not successful ;******************************* @@ -145,9 +145,8 @@ DRIVER: CLC ; ProDOS entry ; Has this to be done every time this gets called or only on boot??? SEI - LDA #$60 ; opcode for RTS - STA SLOT - JSR SLOT + BIT $CFFF + JSR KNOWNRTS TSX LDA $0100,X CLI @@ -161,16 +160,9 @@ DRIVER: CLC ; ProDOS entry ASL A STA SLOT16 ; $s0 TAX ; X holds now SLOT16 - BIT $CFFF - JSR CARDDET - BCC @INITED - LDA #ERR_OFFLINE; no card inserted - BRA @END - -@INITED: LDA #INITED ; check for init - BIT SS,X - BNE @DISP + JSR INITED ; check for init + BCC @DISP JSR INIT BCS @END ; Init failed @@ -344,7 +336,7 @@ INIT: STZ CTRL,X ; reset SPI controller BNE @IOERROR ; error! @END: LDA SS,X - ORA #INITED ; initialized + ORA #CARD_INIT ; initialized STA SS,X LDA CTRL,X ORA #ECE ; enable 7MHz @@ -359,7 +351,7 @@ INIT: STZ CTRL,X ; reset SPI controller ORA #SS0 STA SS,X TYA ; retval in A - RTS +KNOWNRTS: RTS TEXT: .asciiz " Apple][Sd v1.2.2 (c)2020 Florian Reitz" diff --git a/Firmware/src/Helper.s b/Firmware/src/Helper.s index 0f659e2..3204d37 100644 --- a/Firmware/src/Helper.s +++ b/Firmware/src/Helper.s @@ -1,23 +1,25 @@ ;******************************* ; ; Apple][Sd Firmware -; Version 1.2 +; Version 1.2.2 ; Helper functions ; -; (c) Florian Reitz, 2017 - 2018 +; (c) Florian Reitz, 2017 - 2020 ; ; X register usually contains SLOT16 ; Y register is used for counting or SLOT ; ;******************************* -.export COMMAND .export SDCMD -.export GETBLOCK -.export CARDDET -.export WRPROT .export GETR1 .export GETR3 +.export GETBLOCK +.export COMMAND +.export CARDDET +.export WRPROT +.export INITED + .include "AppleIISd.inc" .segment "EXTROM" @@ -212,3 +214,23 @@ WRPROT: PHA SEC @DONE: PLA RTS + + +;******************************* +; +; Check if card is initialized +; X must contain SLOT16 +; +; C Clear - card initialized +; Set - card not initialized +; +;******************************* + +INITED: PHA + LDA #CARD_INIT ; 0: card not initialized + BIT SS,X ; 1: card initialized + CLC + BNE @DONE + SEC +@DONE: PLA + RTS diff --git a/Firmware/src/ProDOS.s b/Firmware/src/ProDOS.s index 0cd0493..603a9d0 100644 --- a/Firmware/src/ProDOS.s +++ b/Firmware/src/ProDOS.s @@ -1,10 +1,10 @@ ;******************************* ; ; Apple][Sd Firmware -; Version 1.2 +; Version 1.2.2 ; ProDOS functions ; -; (c) Florian Reitz, 2017 - 2018 +; (c) Florian Reitz, 2017 - 2020 ; ; X register usually contains SLOT16 ; Y register is used for counting or SLOT @@ -19,6 +19,9 @@ .import COMMAND .import SDCMD .import GETBLOCK +.import CARDDET +.import INITED +.import INIT .import WRPROT .import GETR1 .import GETR3 @@ -67,6 +70,7 @@ PRODOS: LDA DCMD ; get command ; C Clear - No error ; Set - Error ; A $00 - No error +; $28 - No card inserted ; $2B - Card write protected ; X - Blocks avail (low byte) ; Y - Blocks avail (high byte) @@ -74,7 +78,12 @@ PRODOS: LDA DCMD ; get command ;******************************* STATUS: LDA #NO_ERR ; Thanks for this one, Antoine! - JSR WRPROT + JSR CARDDET + BCC @WRPROT + LDA #ERR_NODRIVE; no card inserted + BNE @DONE + +@WRPROT: JSR WRPROT BCC @DONE LDA #ERR_NOWRITE; card write protected @@ -94,10 +103,20 @@ STATUS: LDA #NO_ERR ; Thanks for this one, Antoine! ; Set - Error ; A $00 - No error ; $27 - Bad block number +; $28 - No card inserted ; ;******************************* -READ: JSR GETBLOCK ; calc block address +READ: JSR CARDDET ; check for card + BCS @NDERROR ; no card + + JSR INITED ; check for initialization + BCC @GETBLOCK + + JSR INIT ; initialize card + BCS @NDERROR ; init failed + +@GETBLOCK: JSR GETBLOCK ; calc block address LDA SS,X ; enable /CS AND #<~SS0 @@ -105,7 +124,7 @@ READ: JSR GETBLOCK ; calc block address LDA #$51 ; send CMD17 JSR COMMAND ; send command CMP #0 - BNE @ERROR ; check for error + BNE @IOERROR ; check for error @GETTOK: LDA #DUMMY ; get data token STA DATA,X @@ -150,10 +169,14 @@ READ: JSR GETBLOCK ; calc block address PLP RTS -@ERROR: SEC ; an error occured +@IOERROR: SEC ; an error occured LDA #ERR_IOERR BRA @DONE +@NDERROR: SEC ; an error occured + LDA #ERR_NODRIVE + BRA @DONE + ;******************************* ; diff --git a/Firmware/src/Smartport.s b/Firmware/src/Smartport.s index da41235..ce781c3 100644 --- a/Firmware/src/Smartport.s +++ b/Firmware/src/Smartport.s @@ -95,8 +95,10 @@ SMARTPORT: LDY #SMZPSIZE-1 ; save zeropage area for Smarport BCC @RESTZP TXA +;warum feste anzahl an bytes für return wert? LDY #2 ; highbyte of # bytes transferred LDX #0 ; low byte of # bytes transferred +;warum wird mit #1 verglichen? CMP #1 ; C=1 if A != NO_ERR RTS