NEW PREFIX AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 .TF BIN/FORMAT *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/LIBBLKDEV.I *-------------------------------------- ZPPtr1 .EQ ZPBIN ZPPtr2 .EQ ZPBIN+2 ZPPtrFD .EQ ZPBIN+4 *-------------------------------------- * 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 #6 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 cmp #2 bcc .90 .1 >INC.G ArgIndex >SYSCALL ArgV 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 hDevFD bne .5 Already have a dev...go get VolName >LDYA ZPPtr1 >SYSCALL GetDevByName bcs .99 >STYA ZPPtrFD txa >SYSCALL GetDevByID txa >STA.G hDevFD bra .1 .5 ldy #$ff .6 iny lda (ZPPtr1),y beq .61 cpy #15 beq .99 VolName too long .61 >PUSHW ZPPtr1 >LEA.G VolName >SYSCALL StrCpy jmp .1 success, scan for any other args .8 >LDYA L.LIBBLKDEV >SYSCALL LoadLib bcs .9 sta hLIBBLKDEV clc .9 rts .99 >PUSHBI 0 >LDYA L.MSG.USAGE >SYSCALL printf lda #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 puts lda #0 sec rts .9 pha >PUSHA >PUSHBI 1 >LDYA L.MSG.ERR >SYSCALL printf 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 >PUSHEA.G DIB >LDA.G hDevFD >SYSCALL GetDevStatus bcs .99 lda ZPPtrFD * clc adc #S.FD.DEV.NAME sta ZPPtr2 lda ZPPtrFD+1 adc /S.FD.DEV.NAME sta ZPPtr2+1 >PUSHEA.G VolName >PUSHW.G DIB+S.DIB.SIZE >PUSHW ZPPtr2 >PUSHBI 6 >LDYA L.MSG.INIT >SYSCALL printf .99 bcs .9 jsr .7 >LIBCALL hLIBBLKDEV,LIBBLKDEV.GetProDOSCatSize bcs .9 phy pha txa >STA.G BlkCnt pla ply >SYSCALL GetMem0 BufferSize bcs .9 phx >STYA.G IOCTL+S.IOCTL.BUFPTR pla >STA.G hBuf jsr .7 >PUSHEA.G VolName >PUSHW.G IOCTL+S.IOCTL.BUFPTR >LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat .9 rts .7 >PUSHW.G DIB+S.DIB.SIZE >PUSHB.G CatSize >PUSHB.G CatOptions rts *-------------------------------------- CS.RUN.WriteCat >PUSHEA.G IOCTL >PUSHBI IOCTL.WRITEBLOCK >LDA.G hDevFD >SYSCALL IOCTL bcs .9 lda #'.' >SYSCALL PutChar >LDA.G IOCTL+S.IOCTL.BUFPTR+1 inc inc sta (pData),y >INC.G IOCTL+S.IOCTL.BLKNUM >SLEEP >DEC.G BlkCnt bne CS.RUN.WriteCat .9 rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT >LDA.G hBuf beq .1 >SYSCALL FreeMem .1 lda hLIBBLKDEV beq .8 >SYSCALL UnloadLib .8 clc rts *-------------------------------------- A2CharAX pha lsr lsr lsr lsr 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 [VOLUME.NAME]\r\n" .AS " -L : Low-Level Format\r\n" .AZ " -1-9 : Catalog Size (Blocks)\r\n" MSG.OK .AZ "[OK]" MSG.ERR .AZ "[%h]\r\n" MSG.INIT .AZ "Formatting %s (%D Blks),Volname:%s..." *-------------------------------------- LIBBLKDEV .AZ "libblkdev" BLANK .AZ "BLANK" hLIBBLKDEV .BS 1 *-------------------------------------- .DUMMY .OR 0 DS.START ArgIndex .BS 1 bLL .BS 1 VolName .BS 16 hDevFD .BS 5 CatSize .BS 1 CatOptions .BS 1 BlkCnt .BS 1 IOCTL .BS S.IOCTL hBuf .BS 1 DIB .BS S.DIB DS.END .ED *-------------------------------------- MAN SAVE USR/SRC/BIN/BIN/FORMAT.S ASM