forked from Apple-2-HW/AppleIISd
Error codes added
This commit is contained in:
parent
2daaa107a0
commit
048d1df99a
@ -1,10 +1,10 @@
|
|||||||
;*******************************
|
;*******************************
|
||||||
;
|
;
|
||||||
; Apple][Sd Firmware
|
; Apple][Sd Firmware
|
||||||
; Version 1.1
|
; Version 1.2
|
||||||
; Defines
|
; Defines
|
||||||
;
|
;
|
||||||
; (c) Florian Reitz, 2017
|
; (c) Florian Reitz, 2017 - 2018
|
||||||
;
|
;
|
||||||
; X register usually contains SLOT16
|
; X register usually contains SLOT16
|
||||||
; Y register is used for counting or SLOT
|
; Y register is used for counting or SLOT
|
||||||
@ -19,7 +19,7 @@ CMDHI := $41
|
|||||||
|
|
||||||
; ProDOS equates
|
; ProDOS equates
|
||||||
DCMD := $42 ; Command code
|
DCMD := $42 ; Command code
|
||||||
DNUMBER := $43 ; drive number
|
DSNUMBER := $43 ; drive / slot number
|
||||||
BUFFER := $44 ; buffer pointer
|
BUFFER := $44 ; buffer pointer
|
||||||
BLOCK := $46 ; block number
|
BLOCK := $46 ; block number
|
||||||
|
|
||||||
@ -55,3 +55,17 @@ SDHC = $10
|
|||||||
WP = $20
|
WP = $20
|
||||||
CD = $40
|
CD = $40
|
||||||
INITED = $80
|
INITED = $80
|
||||||
|
|
||||||
|
; Error codes
|
||||||
|
NO_ERR = $00
|
||||||
|
ERR_BAD_CMD = $01
|
||||||
|
ERR_BAD_PCNT = $04
|
||||||
|
ERR_BUS_ERR = $06
|
||||||
|
ERR_BAD_UNIT = $11
|
||||||
|
ERR_BAD_CTL = $21
|
||||||
|
ERR_BAD_CTL_PARM = $22
|
||||||
|
ERR_IO_ERR = $27
|
||||||
|
ERR_NO_DRIVE = $28
|
||||||
|
ERR_NO_WRITE = $2B
|
||||||
|
ERR_BAD_BLOCK = $2D
|
||||||
|
ERR_OFF_LINE = $2F
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
; Version 1.2
|
; Version 1.2
|
||||||
; Main source
|
; Main source
|
||||||
;
|
;
|
||||||
; (c) Florian Reitz, 2017
|
; (c) Florian Reitz, 2017 - 2018
|
||||||
;
|
;
|
||||||
; X register usually contains SLOT16
|
; X register usually contains SLOT16
|
||||||
; Y register is used for counting or SLOT
|
; Y register is used for counting or SLOT
|
||||||
@ -96,7 +96,7 @@ PRODOS:
|
|||||||
|
|
||||||
LDA #$01 ; READ
|
LDA #$01 ; READ
|
||||||
STA DCMD ; load command
|
STA DCMD ; load command
|
||||||
STX $43 ; slot number
|
STX DSNUMBER ; slot number
|
||||||
LDA #$0A
|
LDA #$0A
|
||||||
STA BUFFER+1 ; buffer hi
|
STA BUFFER+1 ; buffer hi
|
||||||
STZ BUFFER ; buffer lo
|
STZ BUFFER ; buffer lo
|
||||||
@ -149,20 +149,21 @@ DRIVER: BRA @SAVEZP ; jump to ProDOS entry
|
|||||||
BIT $CFFF
|
BIT $CFFF
|
||||||
JSR CARDDET
|
JSR CARDDET
|
||||||
BCC @INITED
|
BCC @INITED
|
||||||
LDA #$2F ; no card inserted
|
LDA ERR_OFF_LINE; no card inserted
|
||||||
BRA @RESTZP
|
BRA @RESTZP
|
||||||
|
|
||||||
@INITED: LDA #INITED ; check for init
|
@INITED: LDA #INITED ; check for init
|
||||||
BIT SS,X
|
BIT SS,X
|
||||||
BEQ @INIT
|
BEQ @INIT
|
||||||
|
|
||||||
|
; TODO use jump table
|
||||||
@CMD: LDA DCMD ; get command
|
@CMD: LDA DCMD ; get command
|
||||||
BEQ @STATUS ; branch if cmd is 0
|
BEQ @STATUS ; branch if cmd is 0
|
||||||
CMP #1
|
CMP #1
|
||||||
BEQ @READ
|
BEQ @READ
|
||||||
CMP #2
|
CMP #2
|
||||||
BEQ @WRITE
|
BEQ @WRITE
|
||||||
LDA #1 ; unknown command
|
LDA ERR_BAD_CMD ; unknown command
|
||||||
SEC
|
SEC
|
||||||
BRA @RESTZP
|
BRA @RESTZP
|
||||||
|
|
||||||
@ -210,7 +211,7 @@ INIT: LDA #$03 ; set SPI mode 3
|
|||||||
LDA SS,X
|
LDA SS,X
|
||||||
ORA #SS0 ; set CS high
|
ORA #SS0 ; set CS high
|
||||||
STA SS,X
|
STA SS,X
|
||||||
LDA #7
|
LDA #7 ; set 400 kHz
|
||||||
STA DIV,X
|
STA DIV,X
|
||||||
LDY #10
|
LDY #10
|
||||||
LDA #DUMMY
|
LDA #DUMMY
|
||||||
@ -331,11 +332,11 @@ INIT: LDA #$03 ; set SPI mode 3
|
|||||||
ORA #ECE ; enable 7MHz
|
ORA #ECE ; enable 7MHz
|
||||||
STA CTRL,X
|
STA CTRL,X
|
||||||
CLC ; all ok
|
CLC ; all ok
|
||||||
LDY #0
|
LDY NO_ERR
|
||||||
BCC @END1
|
BCC @END1
|
||||||
|
|
||||||
@IOERROR: SEC
|
@IOERROR: SEC
|
||||||
LDY #$27 ; init error
|
LDY ERR_IO_ERR ; init error
|
||||||
@END1: LDA SS,X ; set CS high
|
@END1: LDA SS,X ; set CS high
|
||||||
ORA #SS0
|
ORA #SS0
|
||||||
STA SS,X
|
STA SS,X
|
||||||
@ -345,7 +346,7 @@ INIT: LDA #$03 ; set SPI mode 3
|
|||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
||||||
TEXT: .asciiz " Apple][Sd v1.2 (c)2017 Florian Reitz"
|
TEXT: .asciiz " Apple][Sd v1.2 (c)2018 Florian Reitz"
|
||||||
|
|
||||||
CMD0: .byt $40, $00, $00
|
CMD0: .byt $40, $00, $00
|
||||||
.byt $00, $00, $95
|
.byt $00, $00, $95
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
; Version 1.2
|
; Version 1.2
|
||||||
; Helper functions
|
; Helper functions
|
||||||
;
|
;
|
||||||
; (c) Florian Reitz, 2017
|
; (c) Florian Reitz, 2017 - 2018
|
||||||
;
|
;
|
||||||
; X register usually contains SLOT16
|
; X register usually contains SLOT16
|
||||||
; Y register is used for counting or SLOT
|
; Y register is used for counting or SLOT
|
||||||
@ -122,7 +122,7 @@ GETBLOCK: PHX ; save X
|
|||||||
STZ R30,X
|
STZ R30,X
|
||||||
|
|
||||||
LDA #$80 ; drive number
|
LDA #$80 ; drive number
|
||||||
AND DNUMBER
|
AND DSNUMBER
|
||||||
BEQ @SLOT ; D1
|
BEQ @SLOT ; D1
|
||||||
LDA #1 ; D2
|
LDA #1 ; D2
|
||||||
STA R31,X
|
STA R31,X
|
||||||
@ -130,7 +130,7 @@ GETBLOCK: PHX ; save X
|
|||||||
@SLOT: LDA SLOT
|
@SLOT: LDA SLOT
|
||||||
PHA ; save SLOT
|
PHA ; save SLOT
|
||||||
LDA #$70 ; slot number * 16
|
LDA #$70 ; slot number * 16
|
||||||
AND DNUMBER
|
AND DSNUMBER
|
||||||
STA SLOT
|
STA SLOT
|
||||||
CPY SLOT
|
CPY SLOT
|
||||||
BEQ @RESTORE ; slot number = real slot?
|
BEQ @RESTORE ; slot number = real slot?
|
||||||
|
17
src/ProDOS.s
17
src/ProDOS.s
@ -4,7 +4,7 @@
|
|||||||
; Version 1.2
|
; Version 1.2
|
||||||
; ProDOS functions
|
; ProDOS functions
|
||||||
;
|
;
|
||||||
; (c) Florian Reitz, 2017
|
; (c) Florian Reitz, 2017 - 2018
|
||||||
;
|
;
|
||||||
; X register usually contains SLOT16
|
; X register usually contains SLOT16
|
||||||
; Y register is used for counting or SLOT
|
; Y register is used for counting or SLOT
|
||||||
@ -37,16 +37,15 @@
|
|||||||
; Set - Error
|
; Set - Error
|
||||||
; A $00 - No error
|
; A $00 - No error
|
||||||
; $2B - Card write protected
|
; $2B - Card write protected
|
||||||
; $2F - No card inserted
|
|
||||||
; X - Blocks avail (low byte)
|
; X - Blocks avail (low byte)
|
||||||
; Y - Blocks avail (high byte)
|
; Y - Blocks avail (high byte)
|
||||||
;
|
;
|
||||||
;*******************************
|
;*******************************
|
||||||
|
|
||||||
STATUS: LDA #0 ; no error
|
STATUS: LDA NO_ERR ; no error
|
||||||
JSR WRPROT
|
JSR WRPROT
|
||||||
BCC @DONE
|
BCC @DONE
|
||||||
LDA #$2B ; card write protected
|
LDA ERR_NO_WRITE; card write protected
|
||||||
|
|
||||||
@DONE: LDX #$FF ; 32 MB partition
|
@DONE: LDX #$FF ; 32 MB partition
|
||||||
LDY #$FF
|
LDY #$FF
|
||||||
@ -109,7 +108,7 @@ READ: JSR GETBLOCK ; calc block address
|
|||||||
AND #<~FRX
|
AND #<~FRX
|
||||||
STA CTRL,X
|
STA CTRL,X
|
||||||
CLC ; no error
|
CLC ; no error
|
||||||
LDA #0
|
LDA NO_ERR
|
||||||
|
|
||||||
@DONE: PHP
|
@DONE: PHP
|
||||||
PHA
|
PHA
|
||||||
@ -121,7 +120,7 @@ READ: JSR GETBLOCK ; calc block address
|
|||||||
RTS
|
RTS
|
||||||
|
|
||||||
@ERROR: SEC ; an error occured
|
@ERROR: SEC ; an error occured
|
||||||
LDA #$27
|
LDA ERR_IO_ERR
|
||||||
BRA @DONE
|
BRA @DONE
|
||||||
|
|
||||||
|
|
||||||
@ -180,7 +179,7 @@ WRITE: JSR WRPROT
|
|||||||
CMP #$05
|
CMP #$05
|
||||||
BNE @IOERROR ; check for write error
|
BNE @IOERROR ; check for write error
|
||||||
CLC ; no error
|
CLC ; no error
|
||||||
LDA #0
|
LDA NO_ERR
|
||||||
|
|
||||||
@DONE: PHP
|
@DONE: PHP
|
||||||
PHA
|
PHA
|
||||||
@ -197,9 +196,9 @@ WRITE: JSR WRPROT
|
|||||||
RTS
|
RTS
|
||||||
|
|
||||||
@IOERROR: SEC ; an error occured
|
@IOERROR: SEC ; an error occured
|
||||||
LDA #$27
|
LDA ERR_IO_ERR
|
||||||
BRA @DONE
|
BRA @DONE
|
||||||
|
|
||||||
@WPERROR: SEC
|
@WPERROR: SEC
|
||||||
LDA #$2B
|
LDA ERR_NO_WRITE
|
||||||
BRA @DONE
|
BRA @DONE
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
; Version 1.2
|
; Version 1.2
|
||||||
; Smartport functions
|
; Smartport functions
|
||||||
;
|
;
|
||||||
; (c) Florian Reitz, 2017
|
; (c) Florian Reitz, 2017 - 2018
|
||||||
;
|
;
|
||||||
; X register usually contains SLOT16
|
; X register usually contains SLOT16
|
||||||
; Y register is used for counting or SLOT
|
; Y register is used for counting or SLOT
|
||||||
|
Loading…
Reference in New Issue
Block a user