A2osX/BIN/FORMAT.S.txt
Rémy GIBERT 34d6dbf42a Kernel 0.9.1 : FORMAT, Added cmd line switch to specify catalog size in block.
allow saving 3 blocks (1,5k) on 5.25 floppies.
2018-04-19 13:06:21 +01:00

359 lines
6.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/BIN/FORMAT
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/LIBBLKDEV.I
*--------------------------------------
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #16 SS
.DA #4 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBBLKDEV .DA LIBBLKDEV
L.MSG.USAGE .DA MSG.USAGE
L.MSG.INIT .DA MSG.INIT
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR
.DA 0
*--------------------------------------
CS.INIT ldy #S.PS.ARGC
lda (pPs),y
beq .90
.1 >INC.G ArgIndex
>SYSCALL GetArg.A
bcc .11
jmp .8
.11 >STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
ldy #1
lda (ZPPtr1),y
beq .90
cmp #'0'
bcc .20
cmp #'9'+1
bcs .20
and #$0F
>STA.G CatSize
bra .1
.20 ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
.90 bra .99
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 >LDA.G hDev
bne .5 Already have a dev name...go get VolName
>LDYA ZPPtr1
>SYSCALL GetDevByName.YA
bcs .99
txa
>STA.G hDev
bra .1
.5 ldy #$ff
.6 iny
lda (ZPPtr1),y
beq .61
cpy #15
beq .99 VolName too long
.61 >PUSHW ZPPtr1
>PUSHEA.G VolName
>SYSCALL StrCpy
jmp .1 success, scan for any other args
.8 >LDYA L.LIBBLKDEV
>SYSCALL LoadLib.YA
sta hLIBBLKDEV
* lda (pPs)
* ora #S.PS.F.EVENT Now accept events
* sta (pPs)
clc
rts
.99 >LDYA L.MSG.USAGE
>SYSCALL PrintF.YA
lda #K.E.SYN
sec
rts
*--------------------------------------
CS.RUN jsr CS.RUN.InitCat
bcs .9
jsr CS.RUN.BuildCat
bcs .9
jsr CS.RUN.WriteCat
bcs .9
>LDYA L.MSG.OK
>SYSCALL PrintF.YA
lda #0
sec
rts
.9 pha
>PUSHA
>LDYA L.MSG.ERR
>SYSCALL PrintF.YA
pla
sec
rts
*--------------------------------------
CS.RUN.InitCat >LDA.G CatSize
bne .1
lda #4
sta (pData),y
.1 >LDA.G VolName
bne .8 Volume name ok
ldx #$ff
ldy #VolName-1
.2 inx
iny
lda BLANK,x
sta (pData),y
bne .2
lda A2osX.TIMER16
jsr A2CharAX
sta (pData),y
iny
txa
sta (pData),y
iny
lda A2osX.TIMER16+1
jsr A2CharAX
sta (pData),y
iny
txa
sta (pData),y
iny
lda A2osX.RANDOM16
jsr A2CharAX
sta (pData),y
iny
txa
sta (pData),y
iny
lda A2osX.RANDOM16+1
jsr A2CharAX
sta (pData),y
iny
txa
sta (pData),y
iny
lda #0
sta (pData),y
.8 clc
rts
*--------------------------------------
CS.RUN.BuildCat >LDA.G hDev
>SYSCALL GetDevStatus.A
bcs .99
>STYA ZPPtr1
ldy #S.DSTAT.SIZE
lda (ZPPtr1),y
>STA.G SizeInBlocks
ldy #S.DSTAT.SIZE+1
lda (ZPPtr1),y
>STA.G SizeInBlocks+1
>LDA.G hDev
>SYSCALL GetDevByID.A
bcs .99
pha
tya
adc #S.DEV.NAME
sta ZPPtr2
pla
adc /S.DEV.NAME
sta ZPPtr2+1
>PUSHEA.G VolName
>PUSHW.G SizeInBlocks
>PUSHW ZPPtr2
>LDYA L.MSG.INIT
>SYSCALL PrintF.YA
.99 bcs .9
jsr .7
>LIBCALL hLIBBLKDEV,LIBBLKDEV.GetProDOSCatSize
bcs .9
phy
pha
txa
>STA.G BlkCnt
pla
ply
>SYSCALL GetMem0.YA BufferSize
bcs .9
phx
>STYA.G BlkParams.Ptr
pla
>STA.G hBuf
jsr .7
>PUSHEA.G VolName
>PUSHW.G BlkParams.Ptr
>LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat
.9 rts
.7 >PUSHW.G SizeInBlocks
>PUSHB.G CatSize
>PUSHB.G CatOptions
rts
*--------------------------------------
CS.RUN.WriteCat >PUSHB.G hDev
>PUSHBI DEVMGR.WRITEBLOCK
>PUSHEA.G BlkParams.Ptr
>SYSCALL IOCTL
bcs .9
lda #'.'
>SYSCALL PutChar.A
>LDA.G BlkParams.Ptr+1
clc
adc #2
sta (pData),y
>INC.G BlkParams.Num
>SLEEP
>DEC.G BlkCnt
bne CS.RUN.WriteCat
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT >LDA.G hBuf
beq .1
>SYSCALL FreeMem.A
.1 lda hLIBBLKDEV
beq .8
>SYSCALL UnloadLib.A
.8 clc
rts
*--------------------------------------
A2CharAX pha
lsr
lsr
lsr
lsr
and #$0F
ora #$30
cmp #'9'+1
bcc .1
adc #6
.1 tax
pla
and #$0F
ora #$30
cmp #'9'+1
bcc .8
adc #6
.8 rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList >PSTR "Ll"
OptionVars .DA #bLL,#bLL
*--------------------------------------
MSG.USAGE .AS "Usage : FORMAT <BLOCKDEV> [VOLUME.NAME]\r\n"
.AS " -L : Low-Level Format\r\n"
.AZ " -1-9 : Catalog Size (Blocks)\r\n"
MSG.OK .AZ "[OK]\r\n"
MSG.ERR .AZ "[%h]\r\n"
MSG.INIT .AZ "Formatting %s (%D Blks),Volname:%s..."
*--------------------------------------
LIBBLKDEV .AZ "libblkdev.o"
BLANK .AZ "BLANK"
hLIBBLKDEV .BS 1
*--------------------------------------
.DUMMY
.OR 0
DS.START
ArgIndex .BS 1
bLL .BS 1
VolName .BS 16
hDev .BS 5
SizeInBlocks .BS 2
CatSize .BS 1
CatOptions .BS 1
BlkCnt .BS 1
BlkParams.Ptr .BS 2
BlkParams.Num .BS 2
hBuf .BS 1
DS.END .ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/BIN/FORMAT.S
ASM