From 71428384ccca0bf91df26a5cc9e3f80aa21ee896 Mon Sep 17 00:00:00 2001 From: Florian Reitz Date: Thu, 4 Jun 2020 18:06:07 +0200 Subject: [PATCH] Check card status in ProDOS commands --- Binary/AppleIISd.bin | Bin 2048 -> 2048 bytes Binary/Flasher.dsk | Bin 143360 -> 143360 bytes Firmware/src/AppleIISd.inc | 2 +- Firmware/src/AppleIISd.s | 15 ++++++--------- Firmware/src/Helper.s | 34 ++++++++++++++++++++++++++++------ Firmware/src/ProDOS.s | 35 +++++++++++++++++++++++++++++------ 6 files changed, 64 insertions(+), 22 deletions(-) diff --git a/Binary/AppleIISd.bin b/Binary/AppleIISd.bin index d0ea52268a246cf00d6d09f2cd69f255f6616b60..311a4eee8ded642084f1dbae20f21b8a404c2281 100644 GIT binary patch delta 712 zcmZ8fO=uHA7@gVO{8}}Y91`^~qP7W@v<(#lNt#BqS;{JCL29J9Vu}rfT8&64{zO7V z0)>rxXmY45u@$DLh^Gj}&{HPa;DX13KZsC0?ZsLv7^kh6;LPd0$NT2Jk4f25wyq*7 zf+AZC%$#VxMMm;^1;DYnO_O_nCS;{2Gq|jPvMJYdG^pv=oH-ji6N|)#QMy+8gsr;} z!^{q$3DE42pwGOeaOEK2pV)pr4*s2+v)K=zNKG;zP%T-Og1oCVfJSqx1Kh28ipc%O zgO>TJXOAivE~Mp7=zQ3l8NwtJMpp?+5(2de>~AsIZRXNqsJv+)%i0Kzw4@}#qwR=5 z{UZTd7e3cwsU2u`YM5A~BDr{AEhlO{Z#+O^B?G*ZFYGj3XRebV4 zVS@_YINZj{-{5g~UPR&P>BPkNmC+cw+wbvuyvTLk?d|jSq2a{M+wp5t=;B2D&a6Dh zjGL2$k1Cu{ke@Son3MzTp(u}2fpo>8LEogfbXxDA8TJrHw_@lMg+xtA*91_<0QJ@+ z4!blH^4BB=_Y|8-Q>0`m`ETiQ^oG!;?%%X2zJN^f92<4|uq*YIdP+Ci)iJ96V)KHj zp>-?pCBGOd%owxQWwcf=F&NMvF_&v1CJtC1V2R-Dp?LqrMrl)>YiS0yOE7+eg|TBrp; fU4CGgwZE_5SF`H6dS3mmHtA&>Y~xjjaSi?fFI+HY delta 708 zcmaiyUuaTM9LMkRUY%Mn8Gky&Ps3UD?G~F&Fjuk-CjHE{65Qbxip2U&OlMc+Z9z7HtRUmA>>XJ$<7SqZM^|Ob z&$a3|!d$;vj1|vfMI47q3KSFtRHJyR?QFE1i+Q%x&?|+iAJ4Xtpx}j0rGR=*jm)4A zhuZcAx(#gH*D}W_9kn>t-qGq=|3vC&?n4<*`~&t0aN?N`7uA4c2vg)inJ^rW#}}ia z`9K8T^00%*JGEi!VA&Zjb(`3x{y&&d~*`RVT5!UAfQ3|I1125 z9C4LPs@$%MDLAF3ba)`wl$v2!QT`5S2HMagdd^CC@p2~!5@2OAJ$qW!DS;=xJo_+V zxMwcFm*@p^f@x?lfNG2l96}Ao>0#BP&SW`gVqzZnC4if0f0-;yrTv>+{V@3w-LHw3 z?Wz6VFsYr^yX{FW1;Sfnd6wJ~w#BZB*7eKQS342ynpV-yXz#VpB)^b+>M*Jed_^RP+LREH ziV!Qh_Cs0I2Ts3M`XLpHi(lDIf-CwbNJWGSe(aALi&!UBOqKbWb1wJHIrmO%ii=Hg zD$f9tU)=-ucqP;A05pD+Z-8|hn)mJ%ceS>LcGm1@ZAS=&kR2fomHMi9gg&6T%lPL7 z<#*SCUm_mA#4rpn0Kl^EGFP+x+39S1_Dgn_9wx`+lcBul)egW65nNL6Z9 znUxCJBe=y#+A&J2J@Z5C!w&gY5IQ#di8uDi2{hP!2{)fR7w$TKEYyiFZK|oOsl(n= zzPj4FTD&`a_Cn9eGkAYj&&A7fU=JMUBD&C_u;QRRMA351EK{7T^Y%d09>}wS=)*pZ zP*J%|go@sciS0yBG~*LGj_5j=U8KIq^cR>zbR>DZK4u0m~Kqs69z3+n@IWW?8Lvh}~hS6c9p=6_gZ zE-gsMsPtr?=42oAX>J828NcG8dfG7c(zzSQ4fQ?Ye?tO^Il>fyb0@*i%_!_dBNA@7zF%+rBQ3ky zpnS>SojOMv1+TgVhvXM+u!TLJiRpL1w!$W#83G%y2M!)OO!1G@n0?4)hk-}c@oM#H JwF+-~e*rA{dZ_>a delta 828 zcma)(&ubG=5XW~-v}2MrqV=Lk;;bzO6QPn#ixq1(5RrOVFprIgG??IBrODU!9!YC@tO6S|Ohz!eS%Zl@`1Kza}^pVazd zY8qrjjaJ^CraKdHlw%^EUE0~!@IOxG6Lu`2gH{l+Luo^-NWwraj%2=@vxBP@+VP)2)h6P diff --git a/Firmware/src/AppleIISd.inc b/Firmware/src/AppleIISd.inc index 8ff13b3..2edf35a 100644 --- a/Firmware/src/AppleIISd.inc +++ b/Firmware/src/AppleIISd.inc @@ -57,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 d3c439c..00854c1 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" @@ -158,14 +161,8 @@ DRIVER: CLC ; ProDOS entry STA SLOT16 ; $s0 TAX ; X holds now SLOT16 - 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 @@ -339,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 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 + ;******************************* ;