forked from Apple-2-HW/AppleIISd
Status command added
This commit is contained in:
parent
ad4c2939b8
commit
0c64c93efb
124
src/Smartport.s
124
src/Smartport.s
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
.import READ
|
.import READ
|
||||||
.import WRITE
|
.import WRITE
|
||||||
|
.import WRPROT
|
||||||
|
|
||||||
.include "AppleIISd.inc"
|
.include "AppleIISd.inc"
|
||||||
.segment "EXTROM"
|
.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
|
; Smartport Status command
|
||||||
;
|
;
|
||||||
SMSTATUS: JSR GETCSLIST
|
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
|
; Smartport Control command
|
||||||
@ -322,3 +357,38 @@ SMWRITECHAR:
|
|||||||
LDA #ERR_IOERR
|
LDA #ERR_IOERR
|
||||||
SEC
|
SEC
|
||||||
RTS
|
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"
|
||||||
|
Loading…
Reference in New Issue
Block a user