A2osX/BIN/X.CPMVRM.S.txt

517 lines
9.6 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
COPY.BUF.SIZE .EQ 4096
*--------------------------------------
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.MSG.USAGE .DA MSG.USAGE
L.MSG.DIR .DA MSG.DIR
L.MSG.FILE .DA MSG.FILE
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR
L.STAT .DA STAT
.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 CPrintFYA
lda #SYSMGR.ERRSYN
sec
rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 ldy #index
lda (pData),y
*--------------------------------------
.DO X.COPY.TO.DEST=1
bne .5 Already have a Src dir...
.ELSE
bne .99
.FIN
*--------------------------------------
>LDYA ZPPtr1
jsr InitSrcDirPatYA
bcc .1 success, scan for any other args
rts
*--------------------------------------
.DO X.COPY.TO.DEST=1
.5 ldy #hDstBasePath
lda (pData),y
bne .99 we already have a second arg....error!
>LDYA ZPPtr1
jsr InitDstDirYA
bcc .1 success, scan for any other args
rts
.FIN
*--------------------------------------
.7 ldy #index processed all args
lda (pData),y
beq .99 , no src ? ERROR
*--------------------------------------
.DO X.COPY.TO.DEST=1
ldy #hDstBasePath
lda (pData),y
bne .8 we also have a Dst folder
ldy #S.PS.hPREFIX no dst folder, use actual prefix
lda (pPs),y
>SYSCALL GetMemPtrA
jsr InitDstDirYA
bcs .99
.FIN
*--------------------------------------
.8 lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
rts
*--------------------------------------
CS.RUN >SYSCALL GetC
bcs .11 no char
cmp #$03 Ctrl-C
bne .10
sec
rts Abort....
.10 cmp #$13 Ctrl-S
bne .11
ldy #bPause
lda (pData),y
eor #$ff
sta (pData),y
.11 ldy #bPause
lda (pData),y
bmi .8
*--------------------------------------
.1 .DO X.COPY.TO.DEST=1
ldy #bCopy
lda (pData),y
bpl .2
jmp CS.RUN.Copy
.FIN
*--------------------------------------
.2 .DO X.DELETE.SOURCE=1
ldy #hToDelete
lda (pData),y
beq .3
jmp CS.RUN.Delete
.FIN
*--------------------------------------
.3 jsr GetNextEntry Ptr1=NAME, Ptr2=STAT
bcs .9
ldy #hFilter
lda (pData),y
beq .4 No filter....
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHW ZPPtr1
>SYSCALL PStrMatch
bcs .8 no match, skip....
.4 ldy #S.STAT.P.DRIVE
lda (ZPPtr2),y ProDOS Device ?
bne .5
ldy #S.STAT.P.TYPE
lda (ZPPtr2),y
cmp #$0F Directory ?
beq .6
jmp CS.RUN.FILE
.5 jmp CS.RUN.DEV
.6 jmp CS.RUN.DIR
.9 jsr LeaveSubDir
bcs .99
*--------------------------------------
.DO X.DELETE.SOURCE=1
ldy #hSrcBasePath
jsr CS.RUN.GetBasePath
>SYSCALL RemoveYA
jsr CS.RUN.CheckErr
bcs .99
.FIN
*--------------------------------------
ldy #bRecurse
lda (pData),y
bpl .8
jsr BasePath..
.8 clc
rts
.99 lda #0
sec
rts
*--------------------------------------
CS.RUN.DEV
.8 clc
.9 rts
*--------------------------------------
CS.RUN.DIR ldy #1
lda (ZPPtr1),y
cmp #'.'
beq .8
.DO X.COPY.TO.DEST=1
ldy #hDstBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
.FIN
>PUSHW ZPPtr1 Filename
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>LDYA L.MSG.DIR
>SYSCALL CPrintFYA
bcs .9
*--------------------------------------
.DO X.COPY.TO.DEST=1
ldy #hDstBasePath
jsr CS.RUN.GetFilePath
>LDYAI UsrBuf256
>SYSCALL MKDirYA
jsr CS.RUN.CheckErr
bcs .9
.FIN
*--------------------------------------
ldy #bRecurse
lda (pData),y
bpl .1
>LDYA ZPPtr1
jmp EnterSubDirYA
*--------------------------------------
.1 .DO X.DELETE.SOURCE=1
ldy #hSrcBasePath
jsr CS.RUN.GetFilePath
>LDYAI UsrBuf256
>SYSCALL RemoveYA
jsr CS.RUN.CheckErr
bcs .9
.FIN
*--------------------------------------
.8 clc
.9 rts
*--------------------------------------
CS.RUN.FILE .DO X.COPY.TO.DEST=1
ldy #hDstBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
.FIN
>PUSHW ZPPtr1
ldy #hSrcBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>LDYA L.MSG.FILE
>SYSCALL CPrintFYA
bcs .9
*--------------------------------------
.DO X.COPY.TO.DEST=1
jsr CS.RUN.CopyStart
bcs .9
.FIN
*--------------------------------------
.DO X.DELETE.SOURCE=1
ldy #hSrcBasePath
jsr CS.RUN.GetFilePath
>LDYAI UsrBuf256
>SYSCALL NewPStrYA
bcs .9
txa
ldy #hToDelete
sta (pData),y
.FIN
*--------------------------------------
.9 rts
*--------------------------------------
.DO X.COPY.TO.DEST=1
CS.RUN.CopyStart
2017-02-22 07:31:16 +00:00
ldy #S.STAT.P.AUXTYPE+1
>PUSHB (ZPPtr2),y
2017-02-22 07:31:16 +00:00
dey
>PUSHB (ZPPtr2),y
ldy #S.STAT.P.TYPE
>PUSHB (ZPPtr2),y
>PUSHBI SYS.FOpen.R
ldy #hSrcBasePath
jsr CS.RUN.GetFilePath
>PUSHWI UsrBuf256
>SYSCALL FOpen
bcs .9
ldy #hSrcFile
sta (pData),y
2017-02-22 07:31:16 +00:00
ldy #S.STAT.P.AUXTYPE+1
>PUSHB (ZPPtr2),y
2017-02-22 07:31:16 +00:00
dey
>PUSHB (ZPPtr2),y
ldy #S.STAT.P.TYPE
>PUSHB (ZPPtr2),y
>PUSHBI SYS.FOpen.W+SYS.FOpen.X
ldy #hDstBasePath
jsr CS.RUN.GetFilePath
>PUSHWI UsrBuf256
>SYSCALL FOpen
bcc .1
pha
ldy #hSrcFile
lda (pData),y
>SYSCALL FCloseA
pla
sec
rts
.1 ldy #hDstFile
sta (pData),y
ldy #bCopy
lda #$ff
sta (pData),y
clc
.9 rts
*--------------------------------------
CS.RUN.Copy stz .90+1
>PUSHWI COPY.BUF.SIZE
>PUSHBI 0
>SYSCALL GetMem
bcs .9
>STYA ZPPtr1
stx .90+1
>PUSHW ZPPtr1 Dst Ptr
>PUSHWI COPY.BUF.SIZE Bytes To Read
ldy #hSrcFile
>PUSHB (pData),y
>SYSCALL FRead
bcc .1
2017-02-22 07:31:16 +00:00
cmp #MLI.ERR.EOF
bne .9
lda #0
bra .9
.1 >STYA ZPPtr2
>PUSHW ZPPtr1 Src Ptr
>PUSHW ZPPtr2 Bytes To Write
ldy #hDstFile
>PUSHB (pData),y
>SYSCALL FWrite
bcs .9
2017-02-22 07:31:16 +00:00
lda .90+1
>SYSCALL FreeMemA
lda #'.'
>SYSCALL PutCA
rts
.9 ldy #CopyRC
sta (pData),y
.90 lda #$00
beq CS.RUN.CopyEnd
2017-02-22 07:31:16 +00:00
>SYSCALL FreeMemA
*--------------------------------------
CS.RUN.CopyEnd ldy #hSrcFile
lda (pData),y
>SYSCALL FCloseA
bcc .1
jsr CS.RUN.CheckErr
.1 ldy #hDstFile
lda (pData),y
>SYSCALL FCloseA
bcc .2
jsr CS.RUN.CheckErr
.2 ldy #bCopy
lda #$0
sta (pData),y
clc
ldy #CopyRC
lda (pData),y
beq CS.RUN.CheckErr
sec
bra CS.RUN.CheckErr
.FIN
*--------------------------------------
.DO X.DELETE.SOURCE=1
CS.RUN.Delete pha
lda #0
sta (pData),y
pla
>SYSCALL GetMemPtrA
>SYSCALL RemoveYA
bra CS.RUN.CheckErr
.FIN
*--------------------------------------
CS.RUN.CheckErr bcs .1
>LDYA L.MSG.OK
>SYSCALL CPrintFYA
rts
.1 pha
ldy #bContinue
lda (pData),y
bpl .2
pla
>PUSHA
>LDYA L.MSG.ERR
>SYSCALL CPrintFYA
bcs .9
rts
.2 lda #13
>SYSCALL PutCA
pla
sec
rts
.9 rts
*--------------------------------------
CS.RUN.GetFilePath
jsr CS.RUN.GetBasePath
>PUSHW ZPPtr1
>PUSHWI UsrBuf256
>SYSCALL PStrCat
rts
*--------------------------------------
CS.RUN.GetBasePath
lda (pData),y
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHWI UsrBuf256
>SYSCALL PStrCpy
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr LeaveSubDir
bcc CS.QUIT
ldy #hToDelete
lda (pData),y
beq .1
>SYSCALL FreeMemA
.1 ldy #bCopy
lda (pData),y
bpl .2
ldy #hSrcFile
lda (pData),y
>SYSCALL FCloseA
ldy #hDstFile
lda (pData),y
>SYSCALL FCloseA
.2 ldy #hFilter
lda (pData),y
beq .8
>SYSCALL FreeMemA
.8 clc
rts
*--------------------------------------
MAN
SAVE BIN/X.CPMVRM.S
LOAD BIN/CP.S
ASM