mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-25 05:32:20 +00:00
322 lines
8.6 KiB
Plaintext
322 lines
8.6 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
* FOLLOWING USE "BIT" TO SKIP OVER TWO BYTES,
|
||
* SO CANNOT HAVE THE SECOND OF THE TWO =$CX.
|
||
*--------------------------------
|
||
MLI.C0 LDA #$00 CREATE
|
||
.HS 2C
|
||
MLI.C1 LDA #$01 DESTROY
|
||
.HS 2C
|
||
MLI.C2 LDA #$02 RENAME
|
||
.HS 2C
|
||
MLI.C3 LDA #$03 SET FILE INFO
|
||
.HS 2C
|
||
MLI.C4 LDA #$04 GET FILE INFO
|
||
.HS 2C
|
||
MLI.C5 LDA #$05 ONLINE
|
||
.HS 2C
|
||
MLI.C6 LDA #$06 SET PREFIX
|
||
.HS 2C
|
||
MLI.C7 LDA #$07 GET PREFIX
|
||
.HS 2C
|
||
MLI.C8 LDA #$08 OPEN
|
||
.HS 2C
|
||
MLI.C9 LDA #$09 NEWLINE
|
||
.HS 2C
|
||
MLI.CA LDA #$0A READ
|
||
.HS 2C
|
||
MLI.CB LDA #$0B WRITE
|
||
.HS 2C
|
||
MLI.CC LDA #$0C CLOSE
|
||
.HS 2C
|
||
MLI.CD LDA #$0D FLUSH
|
||
.HS 2C
|
||
MLI.CE LDA #$0E SET MARK
|
||
.HS 2C
|
||
MLI.CF LDA #$0F GET MARK
|
||
.HS 2C
|
||
MLI.D0 LDA #$D0 SET EOF
|
||
.HS 2C
|
||
MLI.D1 LDA #$D1 GET EOF
|
||
ORA #$C0 MAKE INTO MLI CALL CODE
|
||
JMP MLI.CALLER
|
||
*--------------------------------
|
||
GET.FILE.INFO
|
||
LDA #10
|
||
STA GET.SET.PARMS
|
||
BNE MLI.C4 GET FILE INFO
|
||
*--------------------------------
|
||
SET.FILE.INFO
|
||
LDA #7
|
||
STA GET.SET.PARMS
|
||
BNE MLI.C3 SET FILE INFO
|
||
*--------------------------------
|
||
BYE
|
||
JSR CLOSE.ALL.FILES
|
||
JSR CLOSE.EXEC.FILE
|
||
JSR GP.MLI
|
||
.DA #$65,READ.WRITE.PARMS
|
||
*--------------------------------
|
||
OPEN.A.FILE
|
||
PHA
|
||
LDA FBITS
|
||
AND #$04
|
||
BEQ .1
|
||
LDX VAL.T
|
||
.1 PLA
|
||
|
||
OPEN.DIRECTORY
|
||
CPX GET.SET.PARMS+4
|
||
BNE TYPERR
|
||
AND GET.SET.PARMS+3
|
||
BEQ .3
|
||
LDA ALLOCATED.BUFFER.PAGE
|
||
STA OPEN.PARMS+4
|
||
LDA #$0F
|
||
STA LEVEL
|
||
JSR MLI.C8 OPEN
|
||
BCS .1
|
||
LDA OPEN.PARMS+5
|
||
STA READ.WRITE.PARMS+1
|
||
STA CLOSE.FLUSH.PARMS+1
|
||
STA MISC.PARMS+1
|
||
.1 RTS
|
||
*--------------------------------
|
||
.3 LDA #$0A "FILE LOCKED"
|
||
SEC
|
||
RTS
|
||
*--------------------------------
|
||
VERIFY
|
||
LDA #$06 "PATH NOT FOUND"
|
||
RTS ALREADY .CS. IF ERROR
|
||
*--------------------------------
|
||
TYPERR LDA #$0D
|
||
SEC
|
||
RTS
|
||
*--------------------------------
|
||
* OPEN -- ONLY USED BY SCASM FOR OPENING
|
||
* .TF AND "TEXT" FILES
|
||
* THE FILES MAY BE TXT OR BIN FILE TYPE
|
||
*--------------------------------
|
||
OPEN
|
||
PHP
|
||
JSR GET.REFNUM.OF.OPEN.FILE
|
||
BCC .9 ...ALREADY OPEN, ERROR
|
||
PLP ...GET SAVED STATUS
|
||
BCC .3 ...FILE ALREADY EXISTS
|
||
*---MAKE A NEW FILE--------------
|
||
LDA FBITS WAS T SPECIFIED?
|
||
AND #$04
|
||
BEQ .1 ...NO
|
||
LDA VAL.T WHAT WAS SPEC?
|
||
BCS .2 ...always, use spec'd type
|
||
.1 LDA #$06 ...new file, type not spec'd, T=BIN
|
||
BIT PASS $FF if command level, 0 or 1 if assembling
|
||
BPL .4 ...assembling, make BIN file
|
||
LDA #$04 ...command, make TXT file
|
||
.4 STA VAL.T
|
||
.2 STA GET.SET.PARMS+4
|
||
LDA #$C3 FULL ACCESS PRIVILEGES
|
||
STA GET.SET.PARMS+3
|
||
LDA #0 RECORD LENGTH = 0000
|
||
STA CREATE.PARMS+5
|
||
STA CREATE.PARMS+6
|
||
STA GET.SET.PARMS+5
|
||
STA GET.SET.PARMS+6
|
||
JSR MAKE.A.FILE CREATE THE FILE
|
||
BCS .8 ...ERROR
|
||
*---NOW THE FILE EXISTS----------
|
||
*---OPEN THE FILE----------------
|
||
.3 JSR ALLOCATE.LOWER.BUFFER
|
||
STA OPEN.PARMS+4 STARTING PAGE OF BUFFER
|
||
LDA #$07 LEVEL #
|
||
STA LEVEL
|
||
JSR MLI.C8 OPEN
|
||
BCS .8 ...ERROR
|
||
*---SAVE NAME, ETC OF OPEN FILE--
|
||
LDA OPEN.PARMS+4 MARK THE BUFFER IN USE
|
||
STA FILE.BUFFER.PNTRS,X
|
||
LDA OPEN.PARMS+5 REFNUM
|
||
STA FILE.REFNUMS,X
|
||
JSR SAVE.FILENAME.IN.TABLE
|
||
CLC
|
||
.8 RTS
|
||
*--------------------------------
|
||
.9 PLP
|
||
JMP ERR.FILE.BUSY
|
||
*--------------------------------
|
||
SAVE.FILENAME.IN.TABLE
|
||
TXA
|
||
ASL INDEX TIMES 32
|
||
ASL
|
||
ASL
|
||
ASL
|
||
ASL
|
||
TAX
|
||
*---FORM NAME LENGTH BYTE--------
|
||
LDA PATHNAME.TWO.BUFFER
|
||
STA OPEN.FILE.NAME.BUFFERS,X
|
||
TAY SAVE ACTUAL LENGTH
|
||
CMP #30 ONLY ROOM FOR 29 CHARS
|
||
BCC .1 ...'TWILL FIT
|
||
LDA #29 USE LAST 29 CHARS
|
||
.1 STA FNLEN
|
||
LDA VAL.L
|
||
STA OPEN.FILE.NAME.BUFFERS+1,X
|
||
LDA VAL.L+1
|
||
STA OPEN.FILE.NAME.BUFFERS+2,X
|
||
.2 INX
|
||
LDA PATHNAME.TWO.BUFFER,Y
|
||
STA OPEN.FILE.NAME.BUFFERS+2,X
|
||
DEY
|
||
DEC FNLEN
|
||
BNE .2
|
||
CLC
|
||
RTS
|
||
*--------------------------------
|
||
* SEARCH OPEN FILE NAME TABLE
|
||
* RETURN .CS., A=ERRCOD IF NO PATHNAME
|
||
* OR IF NOT IN TABLE
|
||
* RETURN .CC., A=REFNUM IF FOUND IN TABLE
|
||
*--------------------------------
|
||
GET.REFNUM.OF.OPEN.FILE
|
||
LDA FBITS WAS PATHNAME GIVEN?
|
||
LSR
|
||
BCS .1 ...YES
|
||
JMP ERR.SYNTAX ...NO, "SYNTAX ERROR"
|
||
*---CHECK AMONG NON-EXEC FILES---
|
||
.1 LDX #1 MAX # OF FILES IS 2
|
||
STX EXEC.FILE.CLOSING.FLAG
|
||
.2 LDA FILE.BUFFER.PNTRS,X SEE IF IN USE
|
||
BEQ .3 NO
|
||
JSR COMPARE.TO.FILE.NAME.BUFFER
|
||
BCC .5 ...FOUND IT
|
||
.3 DEX
|
||
BPL .2
|
||
*---CHECK EXEC FILE--------------
|
||
BIT F.EXEC IS EXEC ON?
|
||
BPL .4 ...NO, FILE NOT OPEN
|
||
LDX #2 ...YES
|
||
JSR COMPARE.TO.FILE.NAME.BUFFER
|
||
BCS .4 ...NOT THIS ONE EITHER
|
||
LDA #$FF
|
||
STA EXEC.FILE.CLOSING.FLAG
|
||
LDA EXEC.REFNUM
|
||
RTS RETURN .CC.
|
||
.4 LDA #$12 "FILE NOT OPEN"
|
||
SEC
|
||
RTS RETURN .CS.
|
||
.5 LDA FILE.REFNUMS,X
|
||
RTS RETURN .CC.
|
||
*--------------------------------
|
||
* COMPARE NAMES
|
||
* RETURN .CC. IF SAME, ELSE .CS.
|
||
*--------------------------------
|
||
COMPARE.TO.FILE.NAME.BUFFER
|
||
TXA
|
||
PHA SAVE X-REGISTER
|
||
ASL INDEX TIMES 32
|
||
ASL
|
||
ASL
|
||
ASL
|
||
ASL
|
||
TAX
|
||
LDA OPEN.FILE.NAME.BUFFERS,X
|
||
CMP PATHNAME.TWO.BUFFER
|
||
BNE .3 ...DIFFERENT LENGTHS
|
||
TAY POINT TO END OF PATHNAME
|
||
CMP #30 CHOP AT 29
|
||
BCC .1
|
||
LDA #29
|
||
.1 STA FNLEN
|
||
LDA OPEN.FILE.NAME.BUFFERS+1,X
|
||
STA RECORD.LENGTH
|
||
LDA OPEN.FILE.NAME.BUFFERS+2,X
|
||
STA RECORD.LENGTH+1
|
||
.2 INX
|
||
LDA PATHNAME.TWO.BUFFER,Y
|
||
CMP OPEN.FILE.NAME.BUFFERS+2,X
|
||
BNE .3 NOT THE SAME NAME
|
||
DEY
|
||
DEC FNLEN
|
||
BNE .2 MORE TO THE NAME
|
||
CLC SIGNAL SAME NAMES
|
||
.HS B0 "BCS" OPCODE, SKIPS OVER "SEC"
|
||
.3 SEC SIGNAL DIFFERENT NAMES
|
||
PLA RESTORE X-REG
|
||
TAX
|
||
RTS
|
||
*--------------------------------
|
||
CLOSE
|
||
LDA FBITS
|
||
LSR ANY PATHNAME GIVEN?
|
||
BCC CLOSE.ALL.FILES ...NO
|
||
JSR GET.REFNUM.OF.OPEN.FILE
|
||
BCC CLOSE.ONE.FILE ...OPEN, SO CLOSE IT
|
||
CLC ...NOT OPEN, SO FINISHED
|
||
RTS
|
||
*--------------------------------
|
||
* CLOSE A FILE ... REFNUM IN A-REG
|
||
* INDEX IN X-REG
|
||
*--------------------------------
|
||
CLOSE.ONE.FILE
|
||
STA CLOSE.FLUSH.PARMS+1 REFNUM
|
||
LDA #0
|
||
STA LEVEL LEVEL 0
|
||
JSR MLI.CC CLOSE
|
||
BCS RTS2 ...ERROR
|
||
LDA #0
|
||
BIT EXEC.FILE.CLOSING.FLAG
|
||
BPL .1
|
||
STA F.EXEC
|
||
STA EXEC.FILE.CLOSING.FLAG
|
||
RTS
|
||
.1 STA FILE.BUFFER.PNTRS,X
|
||
LDA CLOSE.FLUSH.PARMS+1
|
||
EOR WRITE.REFNUM TEST .EQ., LEAVE CARRY CLEAR
|
||
BNE RTS2 ...NOT SAME AS "WRITE" FILE
|
||
*--------------------------------
|
||
UNHOOK.WRITE
|
||
BIT F.WRITE
|
||
BPL RTS2
|
||
LDA VDOSIO
|
||
STA CSWL
|
||
LDA VDOSIO+1
|
||
STA CSWH
|
||
LDA #0
|
||
STA F.WRITE
|
||
RTS2 RTS
|
||
*--------------------------------
|
||
CLOSE.ALL.FILES
|
||
LDX #1 MAX FILES IS 2
|
||
.1 LDA FILE.BUFFER.PNTRS,X
|
||
BEQ .2 NOT IN USE
|
||
LDA FILE.REFNUMS,X
|
||
JSR CLOSE.ONE.FILE
|
||
BCS RTS2
|
||
.2 DEX
|
||
BPL .1
|
||
INX X=0
|
||
STX CLOSE.FLUSH.PARMS+1
|
||
LDA #$07
|
||
STA LEVEL
|
||
JMP MLI.CC CLOSE
|
||
*--------------------------------
|
||
* ALLOCATE UPPER/LOWER BUFFER
|
||
*--------------------------------
|
||
ALLOCATE.UPPER.BUFFER
|
||
LDX #1
|
||
.HS 2C
|
||
ALLOCATE.LOWER.BUFFER
|
||
LDX #0
|
||
.2 LDA BUFFER.BASES,X
|
||
STA ALLOCATED.BUFFER.PAGE
|
||
CLC
|
||
RTS
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/scmasm.30/sci.s.openclose
|
||
LOAD usr/src/scmasm.30/scmasm.s
|
||
ASM
|