mirror of
https://github.com/ksherlock/minix.fst.git
synced 2024-12-28 13:30:31 +00:00
265 lines
3.3 KiB
Plaintext
265 lines
3.3 KiB
Plaintext
include 'gsos.equ'
|
|
include 'minix.equ'
|
|
include 'fst.equ'
|
|
|
|
include 'fst.macros'
|
|
|
|
include 'M16.Debug'
|
|
|
|
include 'records.equ'
|
|
|
|
;
|
|
; VolumeGS / Volume call.
|
|
;
|
|
; check if the disk is ours. create a VCR or mark it active.
|
|
;
|
|
|
|
import id_disk
|
|
|
|
|
|
|
|
import do_file_sys_id
|
|
import do_ignore
|
|
|
|
entry do_block_size
|
|
entry do_free_blocks
|
|
entry do_total_blocks
|
|
entry do_vol_name_0
|
|
entry do_vol_name_1
|
|
|
|
volume procname export
|
|
|
|
with dp
|
|
with dev_parms
|
|
with fst_parms
|
|
|
|
stz tool_error
|
|
|
|
lda fst_parms.dev1_num
|
|
; if no device, find a volume by name...
|
|
beq by_name
|
|
|
|
jsr id_disk
|
|
bcc got_it
|
|
cmp #dup_volume
|
|
beq dup
|
|
sec
|
|
rtl
|
|
|
|
dup
|
|
; this is a duplicate volume.
|
|
; return the name (and only the name), but also return the error.
|
|
|
|
lda <call_class
|
|
beq dup_0
|
|
|
|
dup_1
|
|
ldy #VolumeRecGS.volName
|
|
jsr do_vol_name_1
|
|
bcs exit
|
|
lda #dup_volume
|
|
bra exit
|
|
|
|
dup_0
|
|
ldy #VolumeRec.volName
|
|
jsr do_vol_name_0
|
|
bcs exit
|
|
lda #dup_volume
|
|
bra exit
|
|
|
|
|
|
got_it
|
|
|
|
lda <call_class
|
|
beq class0
|
|
|
|
|
|
class1
|
|
lda [param_blk_ptr] ; pcount
|
|
dec a
|
|
asl a ; x 2
|
|
asl a ; x 4
|
|
tax
|
|
dispatch volume_dcb_1
|
|
lda tool_error
|
|
cmp #1
|
|
rtl
|
|
|
|
class0
|
|
ldx #volume_dcb_0_size-4
|
|
dispatch volume_dcb_0
|
|
lda tool_error
|
|
|
|
exit
|
|
cmp #1
|
|
rtl
|
|
|
|
|
|
by_name
|
|
lda #unknown_vol
|
|
sec
|
|
rtl
|
|
|
|
volume_dcb_0
|
|
dc.w VolumeRec.deviceName, do_ignore
|
|
dc.w VolumeRec.volName, do_vol_name_0
|
|
dc.w VolumeRec.totalBlocks, do_total_blocks
|
|
dc.w VolumeRec.freeBlocks, do_free_blocks
|
|
dc.w VolumeRec.fileSysID, do_file_sys_id
|
|
volume_dcb_0_size equ *-volume_dcb_0
|
|
|
|
volume_dcb_1
|
|
dc.w VolumeRecGS.devName, do_ignore
|
|
dc.w VolumeRecGS.volName, do_vol_name_1
|
|
dc.w VolumeRecGS.totalBlocks, do_total_blocks
|
|
dc.w VolumeRecGS.freeBlocks, do_free_blocks
|
|
dc.w VolumeRecGS.fileSysID, do_file_sys_id
|
|
dc.w VolumeRecGS.blockSize, do_block_size
|
|
dc.w VolumeRecGS.characteristics, do_ignore
|
|
dc.w VolumeRecGS.deviceID, do_ignore
|
|
endp
|
|
|
|
|
|
|
|
do_block_size proc
|
|
|
|
with dp
|
|
with fst_parms
|
|
|
|
lda #1024
|
|
sta [param_blk_ptr],y
|
|
rts
|
|
endp
|
|
|
|
do_total_blocks proc
|
|
; total blocks = 2 + imap_blocks + zmap_blocks + nzones. I think.
|
|
|
|
with dp
|
|
with fst_parms
|
|
|
|
phy ; save
|
|
|
|
lda #2 ; boot block, super block.
|
|
clc
|
|
|
|
; pull from vcr?
|
|
ldy #vcr.super.nzones
|
|
adc [my_vcr],y
|
|
ldy #vcr.super.imap_blocks
|
|
adc [my_vcr],y
|
|
ldy #vcr.super.zmap_blocks
|
|
adc [my_vcr],y
|
|
|
|
ply
|
|
sta [param_blk_ptr],y
|
|
rts
|
|
|
|
endp
|
|
|
|
|
|
do_free_blocks proc
|
|
; load the zmaps and count them up...
|
|
; someday.
|
|
with fst_parms
|
|
|
|
lda #0
|
|
sta [param_blk_ptr],y
|
|
rts
|
|
endp
|
|
|
|
do_vol_name_0 proc
|
|
; store the volume name (class 0)
|
|
|
|
with fst_parms
|
|
with dp
|
|
|
|
;ldy #VolumeRec.volName
|
|
lda [param_blk_ptr],y
|
|
sta ptr
|
|
iny
|
|
iny
|
|
lda [param_blk_ptr],y
|
|
sta ptr+2
|
|
|
|
lda #0
|
|
short m
|
|
lda defaultName ; count.
|
|
tax
|
|
tay
|
|
@loop
|
|
lda defaultName,x
|
|
sta [ptr],y
|
|
dex
|
|
dey
|
|
bpl @loop
|
|
done
|
|
long m
|
|
clc
|
|
rts
|
|
|
|
|
|
defaultName str.b ':minix'
|
|
endp
|
|
|
|
do_vol_name_1 proc
|
|
|
|
with fst_parms
|
|
with dp
|
|
|
|
;ldy #VolumeRecGS.volName
|
|
lda [param_blk_ptr],y
|
|
sta ptr
|
|
iny
|
|
iny
|
|
lda [param_blk_ptr],y
|
|
sta ptr+2
|
|
|
|
; check the length.
|
|
lda [ptr]
|
|
sec
|
|
sbc #4
|
|
bmi error
|
|
|
|
cmp defaultName
|
|
bcc error_store_size
|
|
|
|
;ldy #2
|
|
lda defaultName
|
|
;sta [ptr],y
|
|
|
|
inc a ; +1 for length word.
|
|
tax
|
|
|
|
inc a ; skip buffer size.
|
|
inc a
|
|
tay
|
|
short m
|
|
@loop
|
|
lda defaultName,x
|
|
sta [ptr],y
|
|
dey
|
|
dex
|
|
bpl @loop
|
|
|
|
done
|
|
long m
|
|
clc
|
|
rts
|
|
|
|
error_store_size
|
|
lda defaultName
|
|
ldy #2
|
|
sta [ptr],y
|
|
error
|
|
lda #buff_too_small
|
|
sta tool_error
|
|
sec
|
|
rts
|
|
|
|
defaultName str.w ':minix'
|
|
|
|
endp
|
|
|
|
end
|
|
|