Status command added

This commit is contained in:
Florian Reitz 2018-05-24 10:56:46 +02:00
parent ad4c2939b8
commit 0c64c93efb
1 changed files with 98 additions and 28 deletions

View File

@ -15,6 +15,7 @@
.import READ
.import WRITE
.import WRPROT
.include "AppleIISd.inc"
.segment "EXTROM"
@ -107,37 +108,71 @@ SMARTPORT: LDY #SMZPSIZE-1 ; save zeropage area for Smarport
; Required parameter counts for the commands
REQPARAMCOUNT:
.byt 3 ; 0 = status
.byt 3 ; 1 = read block
.byt 3 ; 2 = write block
.byt 1 ; 3 = format
.byt 3 ; 4 = control
.byt 1 ; 5 = init
.byt 1 ; 6 = open
.byt 1 ; 7 = close
.byt 4 ; 8 = read char
.byt 4 ; 9 = write char
; Command jump table
SPDISPATCH:
.word SMSTATUS
.word SMREADBLOCK
.word SMWRITEBLOCK
.word SMFORMAT
.word SMCONTROL
.word SMINIT
.word SMOPEN
.word SMCLOSE
.word SMREADCHAR
.word SMWRITECHAR
; Smartport Status command
;
SMSTATUS: JSR GETCSLIST
LDY SLOT
LDA DRVNUM,Y
BNE @PARTITION ; status call for a partition
LDA SMCSCODE
BEQ @STATUS00 ; status call 0 for the bus
LDA #ERR_BADCTL ; calls other than 0 are not allowed
SEC
RTS
@STATUS00: LDA #4 ; support 4 partitions
STA (SMCMDLIST)
CLC
RTS
@PARTITION: LDX SMCSCODE
BEQ @STATUS03 ; 0: device status
DEX
BEQ @GETDCB ; 1: get DCB
DEX
DEX
BEQ @STATUS03 ; 3: get DIB
LDA #ERR_BADCTL
SEC
RTS
@GETDCB: LDA #1 ; return 'empty' DCB, one byte
STA (SMCMDLIST)
TAY
LDA #NO_ERR
STA (SMCMDLIST),Y
CLC
RTS
@STATUS03: LDA #$F8 ; block device, read, write, format,
; online, no write-protect
JSR WRPROT
BCC @STATUSBYTE
ORA #$04 ; SD card write-protected
@STATUSBYTE:STA (SMCMDLIST)
LDY #1 ; block count, always $00FFFF
LDA #$FF
STA (SMCMDLIST),Y
INY
STA (SMCMDLIST),Y
INY
LDA #0
STA (SMCMDLIST),Y
LDA SMCSCODE
BEQ @DONE ; done if code 0, else get DIB, 21 bytes
LDY #4
@LOOP: LDA STATUS3DATA-4,Y
STA (SMCMDLIST),Y
INY
CPY #21+4
BCC @LOOP
@DONE: CLC
RTS
; Smartport Control command
@ -322,3 +357,38 @@ SMWRITECHAR:
LDA #ERR_IOERR
SEC
RTS
; Required parameter counts for the commands
REQPARAMCOUNT:
.byt 3 ; 0 = status
.byt 3 ; 1 = read block
.byt 3 ; 2 = write block
.byt 1 ; 3 = format
.byt 3 ; 4 = control
.byt 1 ; 5 = init
.byt 1 ; 6 = open
.byt 1 ; 7 = close
.byt 4 ; 8 = read char
.byt 4 ; 9 = write char
; Command jump table
SPDISPATCH:
.word SMSTATUS
.word SMREADBLOCK
.word SMWRITEBLOCK
.word SMFORMAT
.word SMCONTROL
.word SMINIT
.word SMOPEN
.word SMCLOSE
.word SMREADCHAR
.word SMWRITECHAR
; Status 3 command data
STATUS3DATA:
.byt 16, "APPLE][SD " ; ID length and string, padded
.byt $02 ; hard disk
.byt $00 ; removable hard disk
.word $0012 ; driver version
.assert (*-STATUS3DATA)=21, error, "STATUS3DATA must be 21 bytes long"