mirror of
https://github.com/mgcaret/davex-mg-utils.git
synced 2024-12-22 00:29:15 +00:00
diskinfo: updates
This commit is contained in:
parent
75fb9020ba
commit
1aab6c6ea0
382
diskinfo.s
382
diskinfo.s
@ -7,10 +7,12 @@
|
|||||||
.p02
|
.p02
|
||||||
.include "davex-mg.inc"
|
.include "davex-mg.inc"
|
||||||
|
|
||||||
tptr = xczpage ; generic pointer
|
tptr = xczpage ; generic pointer
|
||||||
tmp = tptr+1
|
tmp = tptr+2
|
||||||
atflag = tmp+2 ; but 7 = off if AT present
|
bdflag = tmp+1 ; block device flag, if slot has block dev
|
||||||
spflag = atflag+1 ; zero if smartport
|
atpres = bdflag+2 ; bit 7 = off if AT present
|
||||||
|
atflag = atpres+1 ; bit 7 set if current device is appletalk
|
||||||
|
spflag = atflag+1 ; zero if current device is smartport
|
||||||
slot = spflag+1 ; slot address of device being processed
|
slot = spflag+1 ; slot address of device being processed
|
||||||
unit = slot+2 ; unit number being analyzed
|
unit = slot+2 ; unit number being analyzed
|
||||||
devno = unit+1 ; device number being analyzed
|
devno = unit+1 ; device number being analyzed
|
||||||
@ -18,6 +20,7 @@ drvr = devno+1 ; drvr = driver address
|
|||||||
|
|
||||||
sessbuf = filebuff3
|
sessbuf = filebuff3
|
||||||
sessbufsz = $200
|
sessbufsz = $200
|
||||||
|
onlinebuf = filebuff2
|
||||||
|
|
||||||
DEVCNT = $bf31 ; # of devices-1 (there must always be 1+)
|
DEVCNT = $bf31 ; # of devices-1 (there must always be 1+)
|
||||||
DEVLST = $bf32
|
DEVLST = $bf32
|
||||||
@ -27,106 +30,325 @@ DEVADR = $bf10
|
|||||||
DX_info $01,$12,dx_cc_any,$00
|
DX_info $01,$12,dx_cc_any,$00
|
||||||
DX_ptab
|
DX_ptab
|
||||||
DX_end_ptab
|
DX_end_ptab
|
||||||
DX_desc "Display disk/volunme info."
|
DX_desc "Display disk/volume info."
|
||||||
DX_main main
|
DX_main main
|
||||||
|
|
||||||
.proc main
|
.proc main
|
||||||
lda #$00
|
lda #$00
|
||||||
sta slot ; init low byte
|
sta slot ; init low byte
|
||||||
|
lda DEVCNT
|
||||||
sta devno ; init dev number
|
sta devno ; init dev number
|
||||||
|
jsr atcheck ; look for appletalk & get sessions if present
|
||||||
jsr atcheck
|
: ldx devno
|
||||||
loop: ldx devno
|
jsr doid ; identify/get info for it
|
||||||
cpx DEVCNT
|
|
||||||
bcc :+ ; not done yet
|
|
||||||
beq :+ ; nor if equal to
|
|
||||||
rts ; exit if greater than
|
|
||||||
: jsr doid ; identify/get info for it
|
|
||||||
jsr printinfo ; print the device info
|
jsr printinfo ; print the device info
|
||||||
inc devno ; next device
|
dec devno ; next device
|
||||||
jmp loop
|
bpl :-
|
||||||
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
; See TN.PDOS.20 and 21
|
; See TN.PDOS.20 and 21
|
||||||
; expects device number (relative to DEVADR) in x
|
; expects device number (relative to DEVADR) in x
|
||||||
.proc doid
|
.proc doid
|
||||||
lda DEVLST,x
|
lda DEVLST,x ; retrieve unit number
|
||||||
and #$f0
|
and #$f0 ; mask of worthless bit
|
||||||
sta unit
|
sta unit ; and put in current device unit number
|
||||||
sta spflag ; flag no smartport (spflag = nonzero)
|
sta spflag ; initially flag no smartport (spflag = nonzero)
|
||||||
|
lsr ; convert unit number to driver table offset
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
tax
|
||||||
lda DEVADR,x
|
lda DEVADR,x ; get the driver address
|
||||||
sta drvr
|
sta drvr ; and save it for later
|
||||||
lda DEVADR+1,x
|
lda DEVADR+1,x
|
||||||
sta drvr+1
|
sta drvr+1
|
||||||
jsr isslot
|
jsr isslot ; see if that driver is in a slot
|
||||||
sta slot+1 ; zeroed if not slot device
|
sta slot+1 ; zeroed if not slot device
|
||||||
beq :+ ; and done
|
beq :+ ; and done
|
||||||
ldy #$07
|
jsr maybeat ; is appletalk device?
|
||||||
|
ror ; move carry into high bit of A
|
||||||
|
sta atflag ; and make it flag
|
||||||
|
rol ; restore carry
|
||||||
|
bcs :+ ; and done if appletalk
|
||||||
|
ldy #$07 ; offset of smartport ID
|
||||||
lda (slot),y
|
lda (slot),y
|
||||||
sta spflag ; otherwise set smartport flag as needed
|
sta spflag ; otherwise set smartport flag as needed
|
||||||
: rts
|
: rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
; at entry, expect unit, flags, drvr, and (slot) to be filled
|
||||||
|
; and tptr pointed to the AFP session entry if it's an AppleTalk volume
|
||||||
.proc printinfo
|
.proc printinfo
|
||||||
jsr prheader
|
|
||||||
jsr my_crout ; header does not print it
|
|
||||||
jsr prslot
|
|
||||||
jsr my_crout ; extra space between devices
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
|
|
||||||
.proc prheader
|
|
||||||
lda unit
|
lda unit
|
||||||
jsr xprint_sd ; print .sd
|
jsr xprint_sd ; print .sd
|
||||||
jsr prcolon
|
jsr prcolon
|
||||||
jsr maybeat
|
jsr prvolinfo ; volume information
|
||||||
bcc :+
|
jsr prdevice ; device info & slot if applicable
|
||||||
|
jsr prdrvaddr ; print driver location
|
||||||
|
jsr prinfo ; slot smartport/intelligent controller info
|
||||||
|
jsr my_crout ; extra space between devices
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
; at entry, expect unit, flags, drvr, and (slot) to be filled
|
||||||
|
; and tptr pointed to the AFP session entry if it's an AppleTalk volume
|
||||||
|
.proc prdevice
|
||||||
|
jsr tab5
|
||||||
|
bit atflag
|
||||||
|
bpl :+
|
||||||
jmp printat
|
jmp printat
|
||||||
: jsr ismirr
|
: jsr ismirr
|
||||||
bcc :+
|
bcc :+
|
||||||
jsr xmess
|
jsr xmess
|
||||||
asc_hi "mirrored"
|
asc_hi "mirrored "
|
||||||
.byte $00
|
.byte $00
|
||||||
: jsr isslot
|
: lda slot+1
|
||||||
bcc :+
|
beq rambased ; ain't a slot device
|
||||||
ldy #$ff
|
jsr isdiskii
|
||||||
lda (slot),y
|
beq diskii ; disk II
|
||||||
beq diskii
|
|
||||||
clc
|
|
||||||
adc #$01
|
|
||||||
beq diskii ; 13-sector, should not happen
|
|
||||||
lda spflag
|
lda spflag
|
||||||
bne :+
|
bne p8dev
|
||||||
jsr xmess
|
jsr xmess
|
||||||
asc_hi "SmartPort "
|
asc_hi "SmartPort "
|
||||||
.byte $00
|
.byte $00
|
||||||
: jsr xmess
|
jmp :+
|
||||||
asc_hi "device "
|
p8dev: jsr xmess
|
||||||
|
asc_hi "ProDOS "
|
||||||
.byte $00
|
.byte $00
|
||||||
rts
|
: jsr xmess
|
||||||
|
asc_hi "device"
|
||||||
|
.byte $00
|
||||||
|
crdone: jmp prslot
|
||||||
diskii: jsr xmess
|
diskii: jsr xmess
|
||||||
asc_hi "Disk II"
|
asc_hi "Disk II"
|
||||||
.byte $00
|
.byte $00
|
||||||
rts
|
jmp crdone
|
||||||
|
rambased: lda drvr+1
|
||||||
|
cmp #$ff
|
||||||
|
bne :+
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "ProDOS RAMdisk"
|
||||||
|
.byte $00
|
||||||
|
jmp crdone
|
||||||
|
: jsr xmess
|
||||||
|
asc_hi "RAM-based "
|
||||||
|
.byte $00
|
||||||
|
jmp :-- ; "device"
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc prslot
|
.proc prslot
|
||||||
jsr tab2
|
|
||||||
lda slot+1
|
lda slot+1
|
||||||
beq :+
|
beq :+ ; can't do for non-slot devs
|
||||||
jsr xmess
|
jsr xmess
|
||||||
asc_hi "Installed in slot "
|
asc_hi ", installed in slot "
|
||||||
|
.byte $00
|
||||||
lda slot+1
|
lda slot+1
|
||||||
clc
|
sec
|
||||||
sbc #$10
|
sbc #$10 ; $Cn->$Bn
|
||||||
jsr cout
|
jsr cout
|
||||||
jsr my_crout
|
: jsr my_crout
|
||||||
: rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
.proc prinfo
|
||||||
|
lda slot+1
|
||||||
|
bne :+
|
||||||
|
done: rts ; can't do for non-slot devs
|
||||||
|
: bit atflag
|
||||||
|
bpl done
|
||||||
|
lda spflag
|
||||||
|
bne :+
|
||||||
|
jmp prspinfo ; go do smartport info
|
||||||
|
: jsr isdiskii
|
||||||
|
beq done
|
||||||
|
jsr tab5
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "Intelligent disk controller"
|
||||||
|
.byte $00
|
||||||
|
jsr my_crtab5
|
||||||
|
ldy #$fe
|
||||||
|
lda (slot),y
|
||||||
|
pha
|
||||||
|
and #%11001100 ; flags we are checking
|
||||||
|
beq :++++ ; if none set, skip to # volumes
|
||||||
|
and #%10000000 ; removable flag
|
||||||
|
beq :+
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "Removable "
|
||||||
|
.byte $00
|
||||||
|
: pla
|
||||||
|
pha
|
||||||
|
and #%01000000 ; interruptible flag
|
||||||
|
beq :+
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "Interruptible "
|
||||||
|
.byte $00
|
||||||
|
: pla
|
||||||
|
pha
|
||||||
|
and #%00001000 ; formattable flag
|
||||||
|
beq :+
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "Formattable "
|
||||||
|
.byte $00
|
||||||
|
: pla
|
||||||
|
pha
|
||||||
|
and #%00000100 ; writable flag
|
||||||
|
bne :+ ; reverse logic
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "Read-only "
|
||||||
|
.byte $00
|
||||||
|
jsr my_crtab5
|
||||||
|
: pla ; now print # volumes
|
||||||
|
and #%00110000 ; volumes-1
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
clc
|
||||||
|
adc #$01
|
||||||
|
pha
|
||||||
|
tay
|
||||||
|
lda #$01
|
||||||
|
jsr xprdec_2
|
||||||
|
jsr xmess
|
||||||
|
asc_hi " volume"
|
||||||
|
.byte $00
|
||||||
|
pla
|
||||||
|
tay
|
||||||
|
lda #$00
|
||||||
|
jsr xplural ;pluralize
|
||||||
|
jsr my_crout ; done
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.proc prspinfo
|
||||||
|
ldy #$fb
|
||||||
|
lda (slot),y
|
||||||
|
pha
|
||||||
|
and #%10000011 ; flags we care about
|
||||||
|
bne :+
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
: jsr tab5
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "SP Flags: "
|
||||||
|
pla
|
||||||
|
pha
|
||||||
|
and #%10000000 ; extended flag
|
||||||
|
beq :+
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "Extended "
|
||||||
|
.byte $00
|
||||||
|
: pla
|
||||||
|
pha
|
||||||
|
and #%00000010 ; SCSI flag
|
||||||
|
beq :+
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "SCSI "
|
||||||
|
.byte $00
|
||||||
|
: pla
|
||||||
|
and #%00000001 ; RAM card flag
|
||||||
|
beq :+
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "RAMdisk "
|
||||||
|
.byte $00
|
||||||
|
: jmp my_crout
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.proc prdrvaddr
|
||||||
|
jsr tab5
|
||||||
|
jsr xmess
|
||||||
|
asc_hi "Driver"
|
||||||
|
.byte $00
|
||||||
|
lda drvr+1
|
||||||
|
and #$f0
|
||||||
|
cmp #$c0
|
||||||
|
bne :+
|
||||||
|
jsr xmess
|
||||||
|
asc_hi " in ROM"
|
||||||
|
.byte $00
|
||||||
|
: jsr xmess
|
||||||
|
asc_hi " at $"
|
||||||
|
.byte $00
|
||||||
|
lda drvr+1
|
||||||
|
jsr prbyte
|
||||||
|
lda drvr
|
||||||
|
jsr prbyte
|
||||||
|
jmp my_crout
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
.proc prvolinfo
|
||||||
|
;jsr tab5 ; not needed since it's the first item
|
||||||
|
lda unit
|
||||||
|
beq novol ; make sure it is not zero
|
||||||
|
sta parm_on_line+1
|
||||||
|
P8call $c5, parm_on_line
|
||||||
|
bcs novol ; don't proceed if error
|
||||||
|
lda onlinebuf+1
|
||||||
|
and #$f0
|
||||||
|
cmp unit
|
||||||
|
bne novol ; don't proceed if unit unmatched
|
||||||
|
lda onlinebuf+1
|
||||||
|
and #$0f
|
||||||
|
beq novol ; don't proceed if volume name is 0-length
|
||||||
|
sta onlinebuf ; store at preceding location
|
||||||
|
inc onlinebuf ; account for '/' we are adding
|
||||||
|
lda #'/'
|
||||||
|
sta onlinebuf+1 ; and add it
|
||||||
|
ldy #<onlinebuf
|
||||||
|
lda #>onlinebuf
|
||||||
|
jsr xprint_path
|
||||||
|
P8call $c4, parm_file_info
|
||||||
|
bcs donecr
|
||||||
|
jsr xmess
|
||||||
|
asc_hi ", "
|
||||||
|
.byte $00
|
||||||
|
ldy fi_blks
|
||||||
|
lda fi_blks+1
|
||||||
|
jsr xprdec_2
|
||||||
|
jsr xmess
|
||||||
|
asc_hi " of "
|
||||||
|
.byte $00
|
||||||
|
ldy fi_atype
|
||||||
|
lda fi_atype+1
|
||||||
|
jsr xprdec_2
|
||||||
|
jsr xmess
|
||||||
|
asc_hi " blocks used "
|
||||||
|
.byte $00
|
||||||
|
donecr: jsr my_crout
|
||||||
|
done: rts
|
||||||
|
novol: jsr xmess
|
||||||
|
asc_hi "No volume found"
|
||||||
|
.byte $00
|
||||||
|
jmp donecr
|
||||||
|
parm_on_line:
|
||||||
|
.byte $02
|
||||||
|
.byte $F0
|
||||||
|
.addr onlinebuf+1 ; offset by 1 to convert to path
|
||||||
|
parm_file_info:
|
||||||
|
.byte $0a
|
||||||
|
.addr onlinebuf
|
||||||
|
fi_acc: .byte $00
|
||||||
|
fi_type: .byte $00
|
||||||
|
fi_atype: .word $0000
|
||||||
|
fi_stype: .byte $00
|
||||||
|
fi_blks: .word $0000
|
||||||
|
fi_mdate: .word $0000
|
||||||
|
fi_mtime: .word $0000
|
||||||
|
fi_cdate: .word $0000
|
||||||
|
fi_ctime: .word $0000
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
; check to see if current device is a disk II (assuming it is a slot-based dev)
|
||||||
|
; return zero and Z set if so, otherwise nonzero and Z clear
|
||||||
|
.proc isdiskii
|
||||||
|
ldy #$ff
|
||||||
|
lda (slot),y
|
||||||
|
beq :+
|
||||||
|
clc
|
||||||
|
adc #$01 ; A=$00 if 13-sector Disk II, shouldn't happen
|
||||||
|
: rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
; check to see if current device's driver is in a slot
|
; check to see if current device's driver is in a slot
|
||||||
; return $Cn if so, $00 if otherwise, and Z flag set if so
|
; return $Cn if so, $00 if otherwise, and Z flag set if so
|
||||||
@ -134,11 +356,33 @@ diskii: jsr xmess
|
|||||||
lda drvr+1
|
lda drvr+1
|
||||||
and #$f0
|
and #$f0
|
||||||
cmp #$c0
|
cmp #$c0
|
||||||
bne :+
|
bne :+ ; no, see if slot has block device
|
||||||
lda drvr+1
|
lda drvr+1
|
||||||
rts
|
rts
|
||||||
: lda #$00
|
: lda #$00
|
||||||
|
sta tptr
|
||||||
|
lda unit
|
||||||
|
and #$70
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
ora #$c0
|
||||||
|
sta tptr+1
|
||||||
|
ldx #$02
|
||||||
|
ldy #$05
|
||||||
|
: lda (tptr),y ; get slot firmware byte
|
||||||
|
cmp sltbytes,x
|
||||||
|
bne :+
|
||||||
|
dey
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl :-
|
||||||
|
lda tptr+1 ; it *is* a block dev after all
|
||||||
rts
|
rts
|
||||||
|
: lda #$00 ; flag not slot device
|
||||||
|
rts
|
||||||
|
sltbytes: .byte $20,$00,$03
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
; check to see if current device is a mirrored device
|
; check to see if current device is a mirrored device
|
||||||
@ -147,10 +391,14 @@ diskii: jsr xmess
|
|||||||
.proc ismirr
|
.proc ismirr
|
||||||
lda slot+1 ; high byte of slot pointer
|
lda slot+1 ; high byte of slot pointer
|
||||||
clc ; anticipate no slot
|
clc ; anticipate no slot
|
||||||
beq :+ ; and bail if not
|
beq :++ ; and bail if not
|
||||||
lda drvr+1 ; get driver address high byte
|
lda drvr+1 ; get driver address high byte
|
||||||
and #$0f ; mask off slot number
|
and #$0f ; mask off slot number
|
||||||
sta tmp
|
cmp #$c0 ; is it in slot space?
|
||||||
|
beq :+ ; yes, keep going
|
||||||
|
clc ; flag not mirror
|
||||||
|
bcc :++ ; and go forth
|
||||||
|
: sta tmp
|
||||||
lda unit ; %DSSSXXXX unit number
|
lda unit ; %DSSSXXXX unit number
|
||||||
lsr ; %0DSSSXXX
|
lsr ; %0DSSSXXX
|
||||||
lsr ; %00DSSSXX
|
lsr ; %00DSSSXX
|
||||||
@ -186,7 +434,7 @@ diskii: jsr xmess
|
|||||||
txa
|
txa
|
||||||
jsr xprdec_2
|
jsr xprdec_2
|
||||||
jsr my_crout
|
jsr my_crout
|
||||||
jsr tab2
|
jsr tab5
|
||||||
jsr prafp
|
jsr prafp
|
||||||
ldy #$01 ; slot+drive and user flag
|
ldy #$01 ; slot+drive and user flag
|
||||||
lda (tptr),y
|
lda (tptr),y
|
||||||
@ -227,8 +475,11 @@ diskii: jsr xmess
|
|||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
; see if current device is appletalk device
|
||||||
|
; return carry clear if it's not, carry set if it is and tptr
|
||||||
|
; is now pointed at the session entry for the device
|
||||||
.proc maybeat
|
.proc maybeat
|
||||||
bit atflag
|
bit atpres
|
||||||
bmi :+
|
bmi :+
|
||||||
notat: clc
|
notat: clc
|
||||||
rts
|
rts
|
||||||
@ -261,13 +512,18 @@ loop: lda #<sessbuf
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
.proc tab2
|
.proc tab5
|
||||||
jsr xmess
|
jsr xmess
|
||||||
asc_hi " "
|
asc_hi " "
|
||||||
.byte $00
|
.byte $00
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
.proc my_crtab5
|
||||||
|
jsr my_crout
|
||||||
|
jmp tab5
|
||||||
|
.endproc
|
||||||
|
|
||||||
.proc my_crout
|
.proc my_crout
|
||||||
jsr xcheck_wait
|
jsr xcheck_wait
|
||||||
jmp crout
|
jmp crout
|
||||||
@ -278,7 +534,7 @@ loop: lda #<sessbuf
|
|||||||
cli ; allow interrupts for AT calls
|
cli ; allow interrupts for AT calls
|
||||||
ATcall inforeq
|
ATcall inforeq
|
||||||
ror ; move carry into high bit
|
ror ; move carry into high bit
|
||||||
sta atflag ; and use as flag
|
sta atpres ; and use as flag
|
||||||
rol ; put carry back
|
rol ; put carry back
|
||||||
bcs :+ ; and exit if none
|
bcs :+ ; and exit if none
|
||||||
ATcall filsess ; get sessions
|
ATcall filsess ; get sessions
|
||||||
|
Loading…
Reference in New Issue
Block a user