mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-25 05:32:20 +00:00
382 lines
9.2 KiB
Plaintext
382 lines
9.2 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
DASH
|
||
LDA GET.SET.PARMS+4 GET FILE TYPE
|
||
CMP #$06 BINARY?
|
||
BEQ .3 ...YES, BRUN
|
||
CMP #$04 TEXT?
|
||
BNE .1 ...NO, TRY SYS
|
||
JMP EXEC ...YES, EXEC
|
||
*--------------------------------
|
||
.1 CMP #$FF SYS FILE?
|
||
BEQ .2 ...YES, BRUN IT
|
||
LDA #$0D "FILE TYPE MISMATCH"
|
||
SEC
|
||
RTS
|
||
*---RUN SYS FILE-----------------
|
||
.2 JSR CLOSE.ALL.FILES
|
||
JSR CLOSE.EXEC.FILE
|
||
LDA #0
|
||
STA VAL.A
|
||
LDX #6 RELEASE $8000-$B7FF
|
||
.4 STA BITMAP+16,X
|
||
DEX
|
||
BPL .4
|
||
LDA #$01 RELEASE $B800-$BEFF
|
||
STA BITMAP+23 B800.BFFF
|
||
LDA /$2000 A$2000
|
||
STA VAL.A+1
|
||
LDA #$FF T=SYS
|
||
STA VAL.T
|
||
LDA #$80 SIGNAL FOUND T,A, AND PATHNAME
|
||
STA FBITS+1
|
||
LDA #$05
|
||
STA FBITS
|
||
.3 JMP BRUN
|
||
*--------------------------------
|
||
WARM.DOS
|
||
JSR CLOSE.ALL.FILES
|
||
JSR CROUT
|
||
JMP SC.SOFT
|
||
*--------------------------------
|
||
* LOAD A SOURCE PROGRAM
|
||
*--------------------------------
|
||
LOAD
|
||
JSR ALLOCATE.UPPER.BUFFER
|
||
BCS .5
|
||
LDA #$01 READ
|
||
LDX #$FA FILE TYPE
|
||
JSR OPEN.A.FILE
|
||
BCS .5 ...ERROR
|
||
*---GET LENGTH OF FILE-----------
|
||
LDA SC.INFLAG
|
||
ASL
|
||
BPL .1 ...NOT .INBx
|
||
AND #$7F
|
||
STA MISC.PARMS+3
|
||
LDA #0
|
||
STA MISC.PARMS+2
|
||
BEQ .2 ...ALWAYS
|
||
.1 JSR MLI.D1 GET LENGTH OF FILE
|
||
BCS .5 ...ERROR
|
||
*---FIGURE LOAD ADDRESS----------
|
||
.2 SEC
|
||
LDA SC.HIMEM
|
||
SBC MISC.PARMS+2
|
||
STA READ.WRITE.PARMS+2
|
||
STA VAL.A
|
||
TAX
|
||
LDA SC.HIMEM+1
|
||
SBC MISC.PARMS+3
|
||
STA READ.WRITE.PARMS+3
|
||
STA VAL.A+1
|
||
TAY
|
||
*---CHECK FOR ROOM IN RAM--------
|
||
BMI .6 ADDRESS>$7FFF MEANS NO ROOM
|
||
TXA
|
||
CMP SC.LOMEM
|
||
TYA
|
||
SBC SC.LOMEM+1
|
||
BCC .6 ...BELOW LOMEM
|
||
*---READ FILE--------------------
|
||
LDA MISC.PARMS+2
|
||
STA READ.WRITE.PARMS+4
|
||
LDA MISC.PARMS+3
|
||
STA READ.WRITE.PARMS+5
|
||
JSR MLI.CA READ THE FILE
|
||
BCS .5
|
||
*---CLOSE UNLESS .INBx-----------
|
||
BIT SC.INFLAG
|
||
BVS .4 ...IT IS .INBx
|
||
.3 JSR MLI.CC CLOSE THE FILE
|
||
BCS .5
|
||
*--------------------------------
|
||
.4 LDX VAL.A+1
|
||
LDY VAL.A
|
||
STX SC.PP+1
|
||
STY SC.PP
|
||
.5 RTS
|
||
.6 LDA #$0E "PROGRAM TOO LARGE"
|
||
SEC
|
||
RTS
|
||
*--------------------------------
|
||
* SAVE SOURCE PROGRAM ON DISK
|
||
*--------------------------------
|
||
SAVE
|
||
BCC .1 ...FILE ALREADY HERE
|
||
LDA #$FA FILE TYPE "INT"
|
||
STA VAL.T
|
||
STA GET.SET.PARMS+4
|
||
LDA #$C3
|
||
STA GET.SET.PARMS+3
|
||
LDA SC.PP START OF PROGRAM
|
||
STA CREATE.PARMS+5
|
||
STA GET.SET.PARMS+5
|
||
LDA SC.PP+1
|
||
STA CREATE.PARMS+6
|
||
STA GET.SET.PARMS+6
|
||
JSR MAKE.A.FILE CREATE A NEW FILE
|
||
BCS .2 ...ERROR
|
||
.1 JSR ALLOCATE.UPPER.BUFFER
|
||
BCS .2
|
||
LDA #$02
|
||
LDX #$FA
|
||
JSR OPEN.A.FILE
|
||
BCS .2 ...ERROR
|
||
*---GET LENGTH-------------------
|
||
SEC GET LENGTH
|
||
LDA SC.HIMEM
|
||
SBC SC.PP
|
||
TAX
|
||
STA MISC.PARMS+2
|
||
LDA SC.HIMEM+1
|
||
SBC SC.PP+1
|
||
TAY
|
||
STA MISC.PARMS+3
|
||
LDA #0
|
||
STA MISC.PARMS+4
|
||
*---WRITE THE FILE---------------
|
||
LDA SC.PP
|
||
STA READ.WRITE.PARMS+2
|
||
LDA SC.PP+1
|
||
STA READ.WRITE.PARMS+3
|
||
STX READ.WRITE.PARMS+4
|
||
STY READ.WRITE.PARMS+5
|
||
JSR MLI.CB WRITE DATA ON FILE
|
||
BCS .2 ...ERROR
|
||
JSR MLI.D0 SET EOF (TRUNCATE OLD LONGER FILE)
|
||
BCS .2 ...ERROR
|
||
JSR MLI.CC CLOSE THE FILE
|
||
BCS .2 ...ERROR
|
||
*---UPDATE FILE INFO-------------
|
||
LDA SC.PP+1
|
||
LDX SC.PP
|
||
CMP GET.SET.PARMS+6
|
||
BNE .3
|
||
CPX GET.SET.PARMS+5
|
||
CLC
|
||
BNE .3
|
||
.2 RTS
|
||
.3 STX GET.SET.PARMS+5
|
||
STA GET.SET.PARMS+6
|
||
LDA #0
|
||
STA GET.SET.PARMS+10
|
||
STA GET.SET.PARMS+11
|
||
STA GET.SET.PARMS+12
|
||
STA GET.SET.PARMS+13
|
||
JMP SET.FILE.INFO
|
||
*--------------------------------
|
||
CREATE
|
||
LDX #0
|
||
LDY #0 AuxType = 0000 unless specified
|
||
LDA FBITS+1
|
||
BPL .1 ...no A-value specified
|
||
LDX VAL.A use A-value for AuxType
|
||
LDY VAL.A+1
|
||
.1 STX CREATE.PARMS+5
|
||
STY CREATE.PARMS+6
|
||
LDA FBITS
|
||
AND #$04
|
||
BNE MAKE.A.FILE
|
||
LDA #$0F
|
||
STA VAL.T
|
||
|
||
MAKE.A.FILE
|
||
LDA VAL.T
|
||
STA CREATE.PARMS+4
|
||
LDX #$C3
|
||
LDY #$01 SEEDLING
|
||
CMP #$0F
|
||
BNE .1
|
||
LDY #$0D DIRECTORY
|
||
.1 STX CREATE.PARMS+3
|
||
STY CREATE.PARMS+7
|
||
JMP MLI.C0 CREATE
|
||
*--------------------------------
|
||
RENAME LDA FBITS
|
||
AND #$02 PATH 2?
|
||
BEQ .1 ...NO, ERROR
|
||
JMP MLI.C2 RENAME
|
||
.1 JMP ERR.SYNTAX
|
||
*--------------------------------
|
||
LOCK JSR GET.FILE.INFO
|
||
BCS RTS3
|
||
LDA GET.SET.PARMS+3
|
||
AND #$3C
|
||
ORA #$01
|
||
BNE LKUNLK ...ALWAYS
|
||
UNLOCK JSR GET.FILE.INFO
|
||
BCS RTS3
|
||
LDA #$C3
|
||
ORA GET.SET.PARMS+3
|
||
LKUNLK STA GET.SET.PARMS+3
|
||
JMP SET.FILE.INFO
|
||
*--------------------------------
|
||
PREFIX
|
||
LDX #0
|
||
LDA FBITS+1
|
||
AND #$04
|
||
BNE .1 ...SPECIFIED S/D
|
||
LDA FBITS SEE IF SPECIFIED PATHNAME
|
||
LSR
|
||
BCC .3 ...NO, SO PRINT CURRENT PREFIX
|
||
.1 JMP MLI.C6 SET PREFIX
|
||
*---PRINT CURRENT PREFIX---------
|
||
.2 LDA PATHNAME.ONE.BUFFER+1,X
|
||
ORA #$80
|
||
JSR COUT
|
||
INX
|
||
.3 CPX PATHNAME.ONE.BUFFER
|
||
BCC .2
|
||
JSR CROUT
|
||
CLC
|
||
RTS3 RTS
|
||
*--------------------------------
|
||
NOPREFIX
|
||
LDA #0
|
||
STA PATHNAME.ONE.BUFFER
|
||
JMP MLI.C6 SET PREFIX
|
||
*--------------------------------
|
||
BSAVE
|
||
BCC .2 ...EXISTING FILE
|
||
LDA FBITS+1
|
||
AND #$B0 A-EL
|
||
CMP #$90 Require A and either E or L
|
||
BCC .3 ...Neither E nor L
|
||
LDA VAL.A
|
||
STA CREATE.PARMS+5
|
||
STA GET.SET.PARMS+5
|
||
LDA VAL.A+1
|
||
STA CREATE.PARMS+6
|
||
STA GET.SET.PARMS+6
|
||
*---T=BIN unless specified-------
|
||
LDA FBITS
|
||
AND #$04
|
||
BNE .1 ...TYPE SPECIFIED
|
||
LDA #$06 ...NO TYPE, ASSUME BINARY
|
||
STA VAL.T
|
||
.1 LDA VAL.T
|
||
STA GET.SET.PARMS+4
|
||
*--------------------------------
|
||
JSR MAKE.A.FILE
|
||
BCS .4
|
||
JSR GET.FILE.INFO
|
||
BCS .4
|
||
.2 LDA #$02
|
||
BNE B.COMMON ...ALWAYS
|
||
|
||
.3 LDA #$06 "PATH NOT FOUND"
|
||
SEC
|
||
.4 RTS
|
||
*--------------------------------
|
||
BRUN
|
||
JSR BLOAD
|
||
BCS .1
|
||
JSR .2
|
||
CLC
|
||
.1 RTS
|
||
.2 JMP (READ.WRITE.PARMS+2)
|
||
*--------------------------------
|
||
BLOAD
|
||
LDA #$01
|
||
B.COMMON
|
||
PHA
|
||
JSR ALLOCATE.UPPER.BUFFER
|
||
PLA
|
||
BCS .3
|
||
LDX #$06
|
||
JSR OPEN.A.FILE
|
||
BCS .3
|
||
LDX VAL.A
|
||
LDY VAL.A+1
|
||
LDA FBITS+1
|
||
BMI .1 ...ADDRESS SPECIFIED
|
||
LDX GET.SET.PARMS+5
|
||
LDY GET.SET.PARMS+6
|
||
LDA FBITS DON'T ALLOW DEFAULT ADDRESS
|
||
AND #$04 ON NON-BINARY FILES
|
||
BEQ .0 ...T not specified, so it is BIN
|
||
LDA VAL.T T specified, better be BIN or SYS
|
||
CMP #$06 is it BIN?
|
||
BEQ .0 ...yes, use AuxType value
|
||
CMP #$FF is it SYS?
|
||
BNE .4 ...no, error
|
||
LDX #$2000 ...type SYS, assume A$2000
|
||
LDY /$2000
|
||
.0 LDA FBITS+1
|
||
.1 STX READ.WRITE.PARMS+2
|
||
STY READ.WRITE.PARMS+3
|
||
LDX VAL.L
|
||
LDY VAL.L+1
|
||
AND #$30
|
||
BEQ .5
|
||
EOR #$30
|
||
BEQ .4
|
||
AND #$10
|
||
BEQ .7
|
||
LDA VAL.E
|
||
SEC
|
||
SBC VAL.A
|
||
TAX
|
||
LDA VAL.E+1
|
||
SBC VAL.A+1
|
||
TAY
|
||
INX
|
||
BNE .2
|
||
INY
|
||
.2 BCS .7
|
||
LDA #$02 "RANGE ERROR"
|
||
SEC
|
||
.3 RTS
|
||
*--------------------------------
|
||
.4 LDA #$0B "INVALID PARAMETER"
|
||
SEC
|
||
RTS
|
||
*--------------------------------
|
||
.5 JSR MLI.D1 GET EOF
|
||
BCS .6
|
||
LDX MISC.PARMS+2
|
||
LDY MISC.PARMS+3
|
||
LDA MISC.PARMS+4
|
||
BEQ .7
|
||
LDA #$0E "PROGRAM TOO LARGE"
|
||
.6 SEC
|
||
RTS
|
||
*--------------------------------
|
||
.7 STX READ.WRITE.PARMS+4
|
||
STY READ.WRITE.PARMS+5
|
||
LDA FBITS+1
|
||
AND #$40
|
||
BEQ .10
|
||
LDX #$02
|
||
.8 LDA VAL.B,X
|
||
STA MISC.PARMS+2,X
|
||
DEX
|
||
BPL .8
|
||
.9 JSR MLI.CE SET MARK
|
||
LDX COMMAND.NUMBER
|
||
BCC .10
|
||
CMP #$02
|
||
BNE .6
|
||
CPX #CN.BSAVE
|
||
BNE .6
|
||
JSR MLI.D0 SET EOF
|
||
BCC .9
|
||
RTS
|
||
*--------------------------------
|
||
.10 LDX COMMAND.NUMBER
|
||
CPX #CN.BSAVE
|
||
BNE .12 ...NOT BSAVE
|
||
JSR MLI.CB ...BSAVE
|
||
BCS .13 ...ERROR
|
||
.11 JMP MLI.CC
|
||
.12 JSR MLI.CA READ
|
||
BCC .11 ...GOOD, CLOSE
|
||
.13 RTS
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/scmasm.30/sci.s.loadsave
|
||
LOAD usr/src/scmasm.30/scmasm.s
|
||
ASM
|