mirror of
https://github.com/freitz85/AppleIISd.git
synced 2024-09-28 13:54:40 +00:00
Smartport dispatcher added
This commit is contained in:
parent
457e8bff9c
commit
0910ca3db0
@ -28,17 +28,16 @@ BLOCKNUM := $46 ; block number
|
|||||||
|
|
||||||
|
|
||||||
; Smartport
|
; Smartport
|
||||||
SMPARAM := $48 ; parameter count
|
SMPARAMLIST := $48 ; parameter list
|
||||||
SMUNIT := $49 ; unit number
|
SMCMDLIST := $4A ; command list
|
||||||
SMBUFF := $4A ; buffer pointer
|
SMCSCODE := $AC
|
||||||
SMSTAT := $4B ; status / control code
|
|
||||||
SMBLOCK := $4C ; block number
|
SMZPAREA = SMPARAMLIST
|
||||||
SMCOUNT := $4D ; byte count
|
SMZPSIZE = SMCSCODE-SMZPAREA+1
|
||||||
SMADDR := $4E ; address for read
|
SMCMD = DCMD
|
||||||
|
|
||||||
|
|
||||||
|
; Ram equates, access with SLOT offset
|
||||||
; Ram equates
|
|
||||||
R30 := $0478
|
R30 := $0478
|
||||||
R31 := $04F8
|
R31 := $04F8
|
||||||
R32 := $0578
|
R32 := $0578
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
.segment "SLOTID"
|
.segment "SLOTID"
|
||||||
.byt $0 ; not extended, no SCSI, no RAM
|
.byt $0 ; not extended, no SCSI, no RAM
|
||||||
.dbyt $0 ; use status call
|
.word $0000 ; use status call
|
||||||
.byt $97 ; Status bits
|
.byt $97 ; Status bits
|
||||||
.byt <DRIVER ; LSB of driver
|
.byt <DRIVER ; LSB of driver
|
||||||
|
|
||||||
@ -53,8 +53,8 @@
|
|||||||
LDX #$20
|
LDX #$20
|
||||||
LDX #$00
|
LDX #$00
|
||||||
LDX #$03
|
LDX #$03
|
||||||
; LDX #$00 ; is Smartport controller
|
LDX #$00 ; is Smartport controller
|
||||||
LDX #$3C
|
; LDX #$3C
|
||||||
|
|
||||||
SEI ; find slot
|
SEI ; find slot
|
||||||
JSR KNOWNRTS
|
JSR KNOWNRTS
|
||||||
@ -82,6 +82,9 @@
|
|||||||
; INY
|
; INY
|
||||||
; BPL @DRAW
|
; BPL @DRAW
|
||||||
|
|
||||||
|
; LDA #197
|
||||||
|
; JSR $FCA8 ; wait for 100 ms
|
||||||
|
|
||||||
@OAPPLE: BIT OAPPLE ; check for OA key
|
@OAPPLE: BIT OAPPLE ; check for OA key
|
||||||
BPL @INIT ; and skip boot if pressed
|
BPL @INIT ; and skip boot if pressed
|
||||||
|
|
||||||
|
127
src/Smartport.s
127
src/Smartport.s
@ -20,21 +20,126 @@
|
|||||||
|
|
||||||
;*******************************
|
;*******************************
|
||||||
;
|
;
|
||||||
; Status request
|
; Smartport command dispatcher
|
||||||
; $43 Unit number DSSS000
|
;
|
||||||
; $44-45 Unused
|
; $42-$47 MLI input locations
|
||||||
; $46-47 Unused
|
; X Slot*16
|
||||||
|
; Y Slot
|
||||||
;
|
;
|
||||||
; C Clear - No error
|
; C Clear - No error
|
||||||
; Set - Error
|
; Set - Error
|
||||||
; A $00 - No error
|
; A $00 - No error
|
||||||
; $2B - Card write protected
|
; $01 - Unknown command
|
||||||
; $2F - No card inserted
|
|
||||||
; X - Blocks avail (low byte)
|
|
||||||
; Y - Blocks avail (high byte)
|
|
||||||
;
|
;
|
||||||
;*******************************
|
;*******************************
|
||||||
|
|
||||||
SMARTPORT: PLA ; pull return address
|
SMARTPORT: LDY #SMZPSIZE-1 ; save zeropage area for Smarport
|
||||||
TAY
|
@SAVEZP: LDA SMZPAREA,Y
|
||||||
|
PHA
|
||||||
|
DEY
|
||||||
|
BPL @SAVEZP
|
||||||
|
|
||||||
|
TSX ; get parameter list pointer
|
||||||
|
LDA $101+SMZPSIZE,X
|
||||||
|
STA SMPARAMLIST
|
||||||
|
CLC
|
||||||
|
ADC #3 ; adjust return address
|
||||||
|
STA $101+SMZPSIZE,X
|
||||||
|
LDA $102+SMZPSIZE,X
|
||||||
|
STA SMPARAMLIST+1
|
||||||
|
ADC #0
|
||||||
|
STA $102+SMZPSIZE,X
|
||||||
|
|
||||||
|
LDY #1 ; get command code
|
||||||
|
LDA (SMPARAMLIST),Y
|
||||||
|
STA SMCMD
|
||||||
|
INY
|
||||||
|
LDA (SMPARAMLIST),Y
|
||||||
|
TAX
|
||||||
|
INY
|
||||||
|
LDA (SMPARAMLIST),Y
|
||||||
|
STA SMPARAMLIST+1 ; TODO: why overwrite, again?
|
||||||
|
STX SMPARAMLIST
|
||||||
|
|
||||||
|
LDA #ERR_BADCMD ; suspect bad command
|
||||||
|
LDX SMCMD
|
||||||
|
CPX #$09+1 ; command too large
|
||||||
|
BCS @END
|
||||||
|
|
||||||
|
LDA (SMPARAMLIST) ; parameter count
|
||||||
|
CMP REQPARAMCOUNT,X
|
||||||
|
BNE @COUNTMISMATCH
|
||||||
|
|
||||||
|
LDY #1 ; get drive number
|
||||||
|
LDA (SMPARAMLIST),Y
|
||||||
|
LDY SLOT
|
||||||
|
STA DRVNUM,Y
|
||||||
|
|
||||||
|
TXA
|
||||||
|
ASL A ; shift for use or word addresses
|
||||||
|
TAX
|
||||||
|
JSR @JMPSPCOMMAND
|
||||||
|
BCS @END ; jump on error
|
||||||
|
LDA #NO_ERR
|
||||||
|
|
||||||
|
@END: TAX ; save retval
|
||||||
|
LDY #0 ; restore zeropage
|
||||||
|
@RESTZP: PLA
|
||||||
|
STA SMZPAREA,Y
|
||||||
|
INY
|
||||||
|
CPY #SMZPSIZE
|
||||||
|
BCC @RESTZP
|
||||||
|
|
||||||
|
TXA
|
||||||
|
LDY #2 ; highbyte of # bytes transferred
|
||||||
|
LDY #0 ; low byte of # bytes transferred
|
||||||
|
CMP #1 ; C=1 if A != NO_ERR
|
||||||
|
RTS
|
||||||
|
|
||||||
|
@COUNTMISMATCH:
|
||||||
|
LDA #ERR_BADPCNT
|
||||||
|
BRA @END
|
||||||
|
|
||||||
|
@JMPSPCOMMAND: ; use offset from cmd*2
|
||||||
|
JMP (SPDISPATCH,X)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; 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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SMSTATUS:
|
||||||
|
SMREADBLOCK:
|
||||||
|
SMWRITEBLOCK:
|
||||||
|
SMFORMAT:
|
||||||
|
SMCONTROL:
|
||||||
|
SMINIT:
|
||||||
|
SMOPEN:
|
||||||
|
SMCLOSE:
|
||||||
|
SMREADCHAR:
|
||||||
|
SMWRITECHAR:
|
Loading…
Reference in New Issue
Block a user