mirror of
https://github.com/callapple/LLUCE.git
synced 2024-09-28 07:55:16 +00:00
201 lines
6.0 KiB
ArmAsm
201 lines
6.0 KiB
ArmAsm
|
********************************
|
||
|
* *
|
||
|
* File Copier *
|
||
|
* *
|
||
|
********************************
|
||
|
DATE
|
||
|
*-------------------------------
|
||
|
|
||
|
Id = 5
|
||
|
Aux = 2
|
||
|
|
||
|
LST OFF
|
||
|
LSTDO OFF
|
||
|
XC
|
||
|
TR
|
||
|
TR ADR
|
||
|
EXP ONLY
|
||
|
Y = 1
|
||
|
y = 1
|
||
|
N = 0
|
||
|
n = 0
|
||
|
NOLIST = Y
|
||
|
GSBUG = N
|
||
|
DO NOLIST
|
||
|
LISTOBJ = N
|
||
|
LISTSYM = N
|
||
|
ELSE
|
||
|
LISTOBJ KBD 'List This Source? (Y/N)'
|
||
|
LISTSYM KBD 'List Symbol Table? (Y/N)'
|
||
|
FIN
|
||
|
|
||
|
DO LISTOBJ
|
||
|
LST
|
||
|
FIN
|
||
|
LST OFF
|
||
|
PUT EQUATES/EQUATES
|
||
|
PUT EQUATES/OS.EQUATES
|
||
|
PUT EQUATES/ENTRY
|
||
|
PUT EQUATES/DRIVEREQU
|
||
|
PUT EQUATES/RAMAREA
|
||
|
PUT EQUATES/ERRORS
|
||
|
LST RTN
|
||
|
|
||
|
]TYPE = ^overlays ; set file type
|
||
|
]AUX = overlays ; and aux type
|
||
|
ORG ]AUX ; must be this way
|
||
|
TYP ]TYPE
|
||
|
|
||
|
DSK /RAM5/COPY
|
||
|
|
||
|
TTL 'LLUCE - File Copier'
|
||
|
DO LISTOBJ
|
||
|
LST
|
||
|
FIN
|
||
|
*===============================
|
||
|
* File Copy Overlay
|
||
|
*===============================
|
||
|
|
||
|
DB Id
|
||
|
DA Aux
|
||
|
DB Aux/256!Aux!Id!$A5
|
||
|
|
||
|
*-------------------------------
|
||
|
* Size Of Code To Check For CRC
|
||
|
*-------------------------------
|
||
|
|
||
|
DA CODEEND-COPY
|
||
|
DA 0 ; CRC Goes Here
|
||
|
|
||
|
ORG $D000
|
||
|
|
||
|
COPY JSR GOBCOM ; Eat The Comma
|
||
|
JSR MOVNAME ; Get Source File Name
|
||
|
LDA #10 ; Get Original Info
|
||
|
STA ENDMOD
|
||
|
LDA #<FLNAME
|
||
|
STA ENDMOD+1
|
||
|
LDA #>FLNAME
|
||
|
STA ENDMOD+2
|
||
|
JSR MLI
|
||
|
DB Getinfo
|
||
|
DA ENDMOD
|
||
|
BCS ERROR ; Doesn't Exist
|
||
|
|
||
|
LDA #%00100001 ; Request Read, Deny Write
|
||
|
JSR PD_OPEN ; Open It If It Can
|
||
|
BCS ERROR ; If Not, Error
|
||
|
|
||
|
LDA REFNUM ; Save Source Ref Number
|
||
|
STA SRCREF
|
||
|
STZ ERRFLG
|
||
|
JSR GOBCOM ; Eat Next Comma
|
||
|
JSR MOVNAME ; Get Dest File Name
|
||
|
TRYOPEN LDX #5
|
||
|
MV_OLST LDA OPENLST,X
|
||
|
STA ENDMOD+$40,X
|
||
|
DEX
|
||
|
BPL MV_OLST
|
||
|
|
||
|
JSR MLI ; Try To Open It
|
||
|
DB Open
|
||
|
DA ENDMOD+$40
|
||
|
BCC EXISTS ; It Exists, Use It
|
||
|
|
||
|
LDA ERRFLG ; First Try?
|
||
|
BNE ERROR ; No, Can't Do It
|
||
|
|
||
|
LDA #7
|
||
|
STA ENDMOD
|
||
|
LDX #$D ; Save Original File Stats
|
||
|
MV_FINFO LDA ENDMOD,X
|
||
|
STA FINFO,X
|
||
|
DEX
|
||
|
BPL MV_FINFO
|
||
|
|
||
|
LDX #3 ; Move Creation Date
|
||
|
MV_DATE LDA ENDMOD+$E,X
|
||
|
STA ENDMOD+8,X
|
||
|
DEX
|
||
|
BPL MV_DATE
|
||
|
|
||
|
LDA #%11000011 ; Set Full Access
|
||
|
STA ENDMOD+3
|
||
|
JSR MLI ; Create The New File
|
||
|
DB Create
|
||
|
DA ENDMOD
|
||
|
BCS ERROR
|
||
|
|
||
|
INC ERRFLG ; Flag File Created
|
||
|
BRA TRYOPEN
|
||
|
|
||
|
ERROR LDA #Usrerr+1 ; Do Error
|
||
|
JMP BADERR
|
||
|
|
||
|
EXISTS LDA ENDMOD+$45 ; Save Dest Ref Number
|
||
|
STA DSTREF
|
||
|
CPY_LOOP LDA SRCREF ; Get Source Reference
|
||
|
STA REFNUM
|
||
|
LDX #<ENDMOD ; Read A Chunk Of Source
|
||
|
LDA #>ENDMOD
|
||
|
LDY #32 ; Read 32-128 Byte Pages, 4K
|
||
|
JSR PD_RDBLK
|
||
|
BCS CPY_DONE ; Error Means Done (Usually)
|
||
|
|
||
|
LDA DSTREF ; Get Destination Reference
|
||
|
STA REFNUM
|
||
|
LDX #<ENDMOD ; Write Chunk To Destination
|
||
|
LDA #>ENDMOD
|
||
|
LDY #32 ; Write 32-128 Byte Pages
|
||
|
JSR PD_WRBLK
|
||
|
BCC CPY_LOOP ; Error Is No Good
|
||
|
|
||
|
LDA #Usrerr+2
|
||
|
JMP BADERR
|
||
|
|
||
|
CPY_DONE LDA #2 ; Set Up For Eof Calls
|
||
|
STA ENDMOD
|
||
|
LDA SRCREF ; Get Eof Of Original
|
||
|
STA ENDMOD+1
|
||
|
STA REFNUM
|
||
|
JSR MLI
|
||
|
DB Geteof
|
||
|
DA ENDMOD
|
||
|
JSR PD_CLOSE ; And Close Original
|
||
|
LDA DSTREF ; Set Eof Of New File
|
||
|
STA ENDMOD+1
|
||
|
STA REFNUM
|
||
|
JSR MLI
|
||
|
DB Seteof
|
||
|
DA ENDMOD
|
||
|
JSR PD_CLOSE ; Close It Too
|
||
|
LDX #$D ; Set File Stats To Original
|
||
|
CPY_ACS LDA FINFO,X ; Mainly Sets Access Byte At
|
||
|
STA ENDMOD,X ; This Time
|
||
|
DEX
|
||
|
BPL CPY_ACS
|
||
|
|
||
|
JSR MLI
|
||
|
DB Setinfo
|
||
|
DA ENDMOD
|
||
|
RTS
|
||
|
|
||
|
OPENLST DB 3
|
||
|
DA FLNAME
|
||
|
DA MSGBUF
|
||
|
DB 0
|
||
|
|
||
|
ERRFLG DS 1
|
||
|
|
||
|
SRCREF DS 1
|
||
|
DSTREF DS 1
|
||
|
|
||
|
FINFO DS $E
|
||
|
CODEEND = *
|
||
|
LST OFF
|
||
|
DO LISTSYM
|
||
|
LST
|
||
|
FIN
|
||
|
TTL 'COPY - Symbol Table'
|
||
|
|