antoine-source/applesqueezer/sdcard/debug.s
2023-06-28 11:09:28 +02:00

475 lines
8.3 KiB
ArmAsm

*
* Debug
* Play with the SD card
*
* (c) 2023, Brutal Deluxe Software
* Visit brutaldeluxe.fr
*
xc
xc
mx %00
rel
dsk debug.l
lst off
*----------
use 4/Int.Macs
use 4/Locator.Macs
use 4/Mem.Macs
use 4/Misc.Macs
use 4/Text.Macs
use 4/Util.Macs
Debut = $00
GSOS = $e100a8
*----------
dcREMOVE = $0004
dcONLINE = $0010
dcBLOCKDEVICE = $0080
maxDEVICES = 128
*----------
phk
plb
tdc
sta myDP
_TLStartUp
pha
_MMStartUp
pla
sta appID
ora #$0100
sta myID
_MTStartUp
_TextStartUp
_IMStartUp
pha
pha
PushLong #$010000
PushWord myID
PushWord #%11000000_00011100
PushLong #0
_NewHandle
phd
tsc
tcd
lda [3]
sta ptrBUFFER
ldy #2
lda [3],y
sta ptrBUFFER+2
pld
ply
sty haBUFFER
plx
stx haBUFFER+2
*----------
PushWord #$00FF
PushWord #$0080
_SetInGlobals
PushWord #$00FF
PushWord #$0080
_SetOutGlobals
PushWord #$00FF
PushWord #$0080
_SetErrGlobals
PushWord #0
PushLong #3
_SetInputDevice
PushWord #0
PushLong #3
_SetOutputDevice
PushWord #0
PushLong #3
_SetErrorDevice
PushWord #0
_InitTextDev
PushWord #1
_InitTextDev
PushWord #2
_InitTextDev
PushWord #$0c ; home
_WriteChar
*----------------------------
* MAIN MENU
*----------------------------
mainMENU PushLong #strMAINMENU
_WriteCString
jsr pollDEVICES ; show CD-ROM devices
jsr waitFORKEY ; is it 0-9
jmp doQUIT
*--- Data
strMAINMENU asc 0d'Debug ASSD'0d
asc '(c) 2023, Brutal Deluxe Software'0d0d00
*----------------------------
* QUIT PROGRAM
*----------------------------
doQUIT _IMShutDown
_TextShutDown
_MTShutDown
PushWord myID
_DisposeAll
PushWord appID
_MMShutDown
_TLShutDown
jsl GSOS
dw $2029
adrl proQUIT
brk $bd
*----------------------------
* POLL DEVICES
*----------------------------
pollDEVICES lda #1 ; start with device 1
sta proDINFO+2
]lp jsl GSOS ; do a DInfo
dw $202c
adrl proDINFO
bcc found
cmp #$0011 ; no more devices
bne loop
rts
loop inc proDINFO+2
bra ]lp
*---------- Show device
found lda proDINFO+8 ; block device?
and #dcBLOCKDEVICE
beq loop
lda devINFO1 ; from a STRL to a STR
xba
sta devINFO1
ldx #10 ; compare name
]lp lda devINFO2,x
cmp strDEVICE,x
bne loop
dex
dex
bpl ]lp
*--- Show device ID
lda proDINFO+2
sta proDREAD+2
sta proDWRITE+2
sta proDSTATUS+2
jsr showHEX
PushWord #$20
_WriteChar
*--- Show Characteristics
lda proDINFO+8
jsr showHEX
PushWord #$20
_WriteChar
*--- Show Name
PushLong #devINFO2
_WriteString
*--- Perform a DStatus
PushLong #strDSTATUS ; show the string
_WriteCString
jsl GSOS
dw $202d
adrl proDSTATUS
jsr showERRCODE
*--- Show device status characteristics
PushLong #strCHARS ; show device characteristics
_WriteCString
lda myLIST
jsr showHEX
*--- Show device status number of blocks
PushLong #strBLOCKS ; show number of blocks
_WriteCString
lda myLIST+4
jsr showHEX
lda myLIST+2
jsr showWORD
*--- Perform a DRead
PushLong #strDREAD ; show the string
_WriteCString
jsr debugBORDER
jsl GSOS
dw $202f
adrl proDREAD
jsr showERRCODE
jsr printBUFFER ; output two lines of buffer
lda errCODE ; only write if read is OK
beq okWRITE
rts
*--- Perform a DWrite
okWRITE PushLong #strDWRITE ; show the string
_WriteCString
jsl GSOS
dw $2030
adrl proDWRITE
jmp showERRCODE
*--- Code end
showERRCODE
sta errCODE ; save it
PushLong #strERR ; show the string
_WriteCString
lda errCODE ; show the error code
jsr showHEX
PushWord #$0d
_WriteChar
rts
*--- Print a line of buffer
printBUFFER PushWord #$20
_WriteChar
lda myBUFFER
jsr printME
lda myBUFFER+2
jsr printME
lda myBUFFER+4
jsr printME
lda myBUFFER+6
jsr printME
lda myBUFFER+8
jsr printME
lda myBUFFER+10
jsr printME
lda myBUFFER+12
jsr printME
lda myBUFFER+14
jsr printME
PushWord #$0d
_WriteChar
PushWord #$20
_WriteChar
lda myBUFFER+16
jsr printME
lda myBUFFER+18
jsr printME
lda myBUFFER+20
jsr printME
lda myBUFFER+22
jsr printME
lda myBUFFER+24
jsr printME
lda myBUFFER+26
jsr printME
lda myBUFFER+28
jsr printME
lda myBUFFER+30 ; ends into the code below...
printME pha ; from a word to a string
pha
pha ; <= here, really
_HexIt
PullLong strBUFFER
PushLong #strBUFFER ; show the string
_WriteCString
rts
*---------- Data
strDREAD asc 0d0d'DRead '00
strDWRITE asc 0d0d'DWrite '00
strDSTATUS asc 0d0d'DStatus '00
strCHARS asc ' Characteristics: '00
strBLOCKS asc 0d' Number of blocks: '00
strERR asc '- Error code '00
*----------------------------
* DEBUG
*----------------------------
debugBORDER
sep #$20
ldal $c034
inc
stal $c034
rep #$20
rts
*----------------------------
* TEXT ROUTINES
*----------------------------
*---------- Wait for a key
waitFORKEY PushWord #0 ; wait for key
PushWord #1 ; echo char
_ReadChar
waitKEY1 lda 1,s ; check CR
and #$ff ; of typed
sta 1,s ; in char
cmp #$8d
beq waitKEY9
waitKEY8 PushWord #$0d ; return
_WriteChar
waitKEY9 pla ; restore entered char
rts
*---------- Display a word
showWORD pha ; from a word to a string
pha
pha ; <= here, really
_HexIt
PullLong strHEX
PushLong #strHEX ; show the string
_WriteCString
rts
*---------- Display a hex word with a $
showHEX pha ; from a word to a string
pha
pha ; <= here, really
_HexIt
PullLong strHEX
PushLong #strHEX1 ; show the string
_WriteCString
rts
*--- Data
strHEX1 asc '$'
strHEX asc '0000'00
strBUFFER asc '0000 '00
*----------------------------
* DATA
*----------------------------
errCODE ds 2
proQUIT dw 2 ; pCount
ds 4 ; 02 pathname
ds 2 ; 06 flags
proDINFO dw 8 ; Parms for DInfo
ds 2 ; 02 device num
adrl devINFO ; 04 device name
ds 2 ; 08 characteristics
ds 4 ; 0A total blocks
ds 2 ; 0E slot number
ds 2 ; 10 unit number
ds 2 ; 12 version
ds 2 ; 14 device id
proDREAD dw 6 ; pCount
ds 2 ; 02 devNum
adrl myBUFFER ; 04 buffer
adrl 512 ; 08 requestCount
adrl 117 ; 0C startingBlock
dw 512 ; 10 blockSize
ds 4 ; 14 transferCount
proDWRITE dw 6 ; pCount
ds 2 ; 02 devNum
adrl myBUFFER ; 04 buffer
adrl 512 ; 08 requestCount
adrl 117 ; 0C startingBlock
dw 512 ; 10 blockSize
ds 4 ; 14 transferCount
proDSTATUS dw 5 ; pCount
ds 2 ; 02 devNum
ds 2 ; 04 code ($0000 = Device Status)
adrl myLIST ; 06 list
adrl 512 ; 0A requestCount (a big buffer)
ds 4 ; 0E transferCount
*----------
strDEVICE str '.ASSDDevice' ; length is 12 chars (including length byte)
devINFO dw $0032 ; buffer size
devINFO1 db $00 ; length
devINFO2 db $00
devINFO3 ds $30 ; data
*----------
appID ds 2
myID ds 2
myDP ds 2
ptrBUFFER ds 4
haBUFFER ds 4
*----------
myBUFFER ds 512,$bd
myLIST ds 512