A2osX/BIN/FORMAT.S.txt
2017-08-22 08:37:03 +02:00

321 lines
5.9 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.

PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.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 Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBBLKDEV .DA LIBBLKDEV
L.BlkParams.Ptr .DA BlkParams.Ptr
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 >SYSCALL GetArgC
sta ArgCount
cmp #1
beq .99
stz ArgIndex
.1 dec ArgCount
beq .7
inc ArgIndex
lda ArgIndex
>SYSCALL GetArgA
>STYA ZPPtr1
lda (ZPPtr1)
cmp #2
bne .4
ldy #1
lda (ZPPtr1),y
cmp #'-'
bne .4
iny
lda (ZPPtr1),y
ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
.99 >LDYA L.MSG.USAGE
>SYSCALL PrintFYA
lda #SYSMGR.ERRSYN
sec
rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 ldy #hDev
lda (pData),y
bne .5 Already have a dev name...go get VolName
lda (ZPPtr1)
cmp #4
bne .99 DevName must be DxDy
>LDYA ZPPtr1
>SYSCALL GetDevByNameYA
bcs .99
txa
ldy #hDev
sta (pData),y
bra .1
.5 lda (ZPPtr1)
cmp #16
bcs .99 VolName too long
tay
.6 lda (ZPPtr1),y
sta (pData),y
dey
bpl .6
bra .1 success, scan for any other args
.7 lda (pData)
bne .8 Volume name ok
lda A2osX.TIMER16
jsr A2CharAX
sta DefaultVolName+6
stx DefaultVolName+7
lda A2osX.TIMER16+1
jsr A2CharAX
sta DefaultVolName+8
stx DefaultVolName+9
lda A2osX.RANDOM16
jsr A2CharAX
sta DefaultVolName+10
stx DefaultVolName+11
lda A2osX.RANDOM16+1
jsr A2CharAX
sta DefaultVolName+12
stx DefaultVolName+13
ldy DefaultVolName
.71 lda DefaultVolName,y
sta (pData),y
dey
bpl .71
.8 >LDYA L.LIBBLKDEV
>SYSCALL LoadLibYA
sta hLIBBLKDEV
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
rts
*--------------------------------------
CS.RUN jsr CS.RUN.BuildCat
bcs .9
jsr CS.RUN.WriteCat
bcs .9
>LDYA L.MSG.OK
>SYSCALL PrintFYA
lda #0
sec
rts
.9 pha
>PUSHA
>LDYA L.MSG.ERR
>SYSCALL PrintFYA
pla
sec
rts
*--------------------------------------
CS.RUN.BuildCat ldy #hDev
lda (pData),y
>SYSCALL GetDevStatusA
bcs .99
>STYA ZPPtr1
ldy #S.DEVSTAT.SIZE
lda (ZPPtr1),y
sta SizeInBlocks
iny
lda (ZPPtr1),y
sta SizeInBlocks+1
ldy #hDev
lda (pData),y
>SYSCALL GetDevByIDA
bcs .99
pha
tya
adc #S.DEV.NAME
sta ZPPtr2
pla
adc /S.DEV.NAME
sta ZPPtr2+1
>PUSHW pData
>PUSHW SizeInBlocks
>PUSHW ZPPtr2
>LDYA L.MSG.INIT
>SYSCALL PrintFYA
bcs .9
>PUSHW SizeInBlocks
>LIBCALL hLIBBLKDEV,LIBBLKDEV.GetProDOSCatSize
.99 bcs .9
stx BlkCnt
>SYSCALL GetMem0YA BufferSize
bcs .9
>STYA BlkParams.Ptr
txa
ldy #hBuf
sta (pData),y
>PUSHW SizeInBlocks
>PUSHW pData
>PUSHW BlkParams.Ptr
>LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat
.9 rts
*--------------------------------------
CS.RUN.WriteCat stz BlkParams.Num
stz BlkParams.Num+1
ldy #hDev
lda (pData),y
>SYSCALL GetDevByIDA
bcs .9
>STYA pDev
.1 >LDYA L.BlkParams.Ptr
ldx #DEVMGR.WRITEBLOCK
jsr pDevJmp
bcs .9
inc BlkParams.Ptr+1
inc BlkParams.Ptr+1
inc BlkParams.Num
dec BlkCnt
bne .1
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT ldy #hBuf
lda (pData),y
beq .1
>SYSCALL FreeMemA
.1 lda hLIBBLKDEV
beq .8
>SYSCALL UnloadLibA
.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 >CSTR "Usage : FORMAT <BLOCKDEV> [VOLUME.NAME]\r\n -L : Low-Level Format\r\n"
MSG.OK >CSTR "[OK]\r\n"
MSG.ERR >CSTR "[%h]\r\n"
MSG.INIT >CSTR "Formatting %S (%D Blks),Volname:%S..."
*--------------------------------------
LIBBLKDEV >PSTR "libblkdev.o"
DefaultVolName >PSTR "BLANKXXXXXXXX"
ArgCount .BS 1
ArgIndex .BS 1
hLIBBLKDEV .BS 1
SizeInBlocks .BS 2
BlkCnt .BS 1
BlkParams.Ptr .BS 2
BlkParams.Num .BS 2
*--------------------------------------
.DUMMY
.OR 0
DS.START
VolName .BS 16
hDev .BS 5
hBuf .BS 1
bLL .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/BIN/FORMAT.S
ASM