mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-25 20:33:13 +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
|