antoine-source/applesqueezer/sdcard/devices.s
Antoine Vignau 8701131e17 AS WIP
All my Applesqueezer code...
2023-06-19 15:45:09 +02:00

289 lines
7.6 KiB
ArmAsm

*
* Devices
* Show all connected devices
*
* (c) 2023, Brutal Deluxe Software
* Visit brutaldeluxe.fr
*
xc
xc
mx %00
rel
dsk devices.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
dcINQUIRY = $8012
doMODESELECT = $8015
dcMODESENSE6 = $801a
dcSTARTSTOP = $801b ; also eject/insert
dcREADCAPACITY = $8025
dcSUBCHANNEL = $8042
dcREADTOC = $8043
dcPATI = $8048
dcPAUSERESUME = $804b
dcMODESENSE10 = $805a
*----------
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'Show devices'0d
asc '(c) 2023, Brutal Deluxe Software'0d00
*----------------------------
* 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 ; not removable
and #dcBLOCKDEVICE
beq loop
jsr showDEVICEINFO
bra loop
*--- Sub routines
*
* x - $xxxx - .NAMEOFDEVICE
showDEVICEINFO
lda proDINFO+2
pha ; from a word to a string
pha
pha
_HexIt
PullLong strDEVID
PushLong #strDEV ; show the string
_WriteCString
*--- characteristics
lda proDINFO+8
pha ; from a word to a string
pha
pha
_HexIt
PullLong strDEVID
PushLong #strDEV ; show the string
_WriteCString
*--- name
lda devINFO1 ; from a STRL to a STR
xba
sta devINFO1
PushLong #devINFO2
_WriteString
PushWord #$0d
_WriteChar
rts
*---------- Data
strDEV asc '$'
strDEVID asc '0000 - '00
*----------------------------
* 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
*----------------------------
* DATA
*----------------------------
proQUIT dw 2 ; pcount
ds 4 ; pathname
ds 2 ; 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
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