mirror of
https://github.com/A2osX/A2osX.git
synced 2024-12-01 14:50:10 +00:00
263 lines
6.9 KiB
Plaintext
263 lines
6.9 KiB
Plaintext
|
NEW
|
|||
|
AUTO 3,1
|
|||
|
*--------------------------------------
|
|||
|
SCI.TBLADR .EQ $AA00 Address of Command Table
|
|||
|
SCI.LINBUF .EQ $BC80
|
|||
|
SCI.STARTUP .EQ $BE00
|
|||
|
SCI.COMMAND .EQ $BE03
|
|||
|
SCI.ERROR .EQ $BE09
|
|||
|
SCI.SLOT .EQ $BE3C
|
|||
|
SCI.DRIVE .EQ $BE3D
|
|||
|
SCI.STATE .EQ $BE42 0=immediate, else deferred
|
|||
|
SCI.MLI .EQ $BE70 Call MLI, (A)=operation
|
|||
|
SCI.RTS .EQ $BE9E
|
|||
|
SCI.IOB.GETSET .EQ $BEB4 Get/Set File Info IOB
|
|||
|
SCI.IOB.MISC .EQ $BEC6 Misc functions IOB
|
|||
|
SCI.IOB.OPEN .EQ $BECB Open IOB
|
|||
|
SCI.IOB.RW .EQ $BED5 Read/Write IOB
|
|||
|
SCI.IOB.CLOSE .EQ $BEDD Close IOB
|
|||
|
SCI.BUFFER.PAGES .EQ $BEF2,3,4 Buf1, Buf2, Exec
|
|||
|
SCI.HIMEM.PAGE .EQ $BEFB
|
|||
|
*--------------------------------
|
|||
|
* LIST SOURCE CODE ON TEXT FILE
|
|||
|
*--------------------------------
|
|||
|
* TEXT.OPTIONS:
|
|||
|
* TEXT <FILENAME> NO LINE NUMBERS
|
|||
|
* TEXT#<FILENAME> WITH LINE NUMBERS
|
|||
|
* TEXT%<FILENAME> WITH TAB.CHAR
|
|||
|
*--------------------------------
|
|||
|
TEXT LDX #0 00=NO LINE NUMBERS
|
|||
|
STX TEXT.OPTIONS
|
|||
|
JSR GNNB GET NEXT NON-BLANK CHAR
|
|||
|
CMP #'# TEXT # MEANS WRITE LINE NUMBERS
|
|||
|
BEQ .5 USE LINE NUMBERS
|
|||
|
CMP #'% TEXT % MEANS WRITE CONTROL-I
|
|||
|
BNE .6 NEITHER, WRITE TEXT ONLY
|
|||
|
LDA TAB.CHAR
|
|||
|
STA TEXT.OPTIONS
|
|||
|
BNE .7 ...ALWAYS
|
|||
|
.5 INC TEXT.OPTIONS
|
|||
|
BNE .7 ...ALWAYS
|
|||
|
.6 JSR BACKUP.CHAR.PNTR
|
|||
|
.7 LDA #1 INTO "DEFERRED" STATE
|
|||
|
STA SCI.STATE
|
|||
|
JSR SAVE.PATHNAME
|
|||
|
LDY #PQ.OPN
|
|||
|
JSR ISSUE.DOS.COMMAND
|
|||
|
LDY #PQ.WRT
|
|||
|
JSR ISSUE.DOS.COMMAND
|
|||
|
JSR SETUP.TEXT.POINTERS (PP --> SRCP, HIMEM --> ENDP)
|
|||
|
.1 JSR CMP.SRCP.ENDP END OF RANGE YET?
|
|||
|
BCS .4 ...YES
|
|||
|
JSR GET.LINE.NUMBER
|
|||
|
LDA TEXT.OPTIONS
|
|||
|
BEQ .3 NO LINE #
|
|||
|
BMI .2 TAB.CHAR
|
|||
|
JSR CONVERT.LINE.NUMBER.PRINT
|
|||
|
LDA #$20 SPACE AFTER LINE #
|
|||
|
.2 JSR CHO
|
|||
|
.3 JSR NTKN
|
|||
|
BNE .2
|
|||
|
JSR CRLF
|
|||
|
JMP .1
|
|||
|
.4 LDA #0 TRUNCATE REST OF FILE
|
|||
|
JSR CHO
|
|||
|
JMP SOFT
|
|||
|
*--------------------------------
|
|||
|
* .TF DIRECTIVE
|
|||
|
*--------------------------------
|
|||
|
* END EXISTING .TF IF ANY
|
|||
|
* SET .TF FLAG ON
|
|||
|
*
|
|||
|
* PASS 1: THAT'S ALL
|
|||
|
*
|
|||
|
* PASS 2: OPEN THE FILE, WITH T=BIN
|
|||
|
* SET MARK=EOF=0
|
|||
|
* SET STARTING ADDRESS IN FILE-INFO
|
|||
|
* WRITE START ADDRESS AND LENGTH
|
|||
|
*--------------------------------
|
|||
|
PSTF JSR TFEND CLOSE EXISTING TF IF ANY
|
|||
|
SEC
|
|||
|
ROR TF.FLAG SET FLAG ON
|
|||
|
JSR LIST.LINE.BOTH.PASSES
|
|||
|
LDA PASS WHICH PASS?
|
|||
|
BEQ .9 ...PASS 1, EXIT NOW
|
|||
|
JSR SAVE.PATHNAME
|
|||
|
LDY #PQ.OPN
|
|||
|
JSR ISSUE.DOS.COMMAND
|
|||
|
*---Empty the file now-----------
|
|||
|
LDA #0
|
|||
|
STA SCI.IOB.MISC+2
|
|||
|
STA SCI.IOB.MISC+3
|
|||
|
STA SCI.IOB.MISC+4
|
|||
|
LDA SCI.IOB.OPEN+5 REFNUM FOR TARGET FILE
|
|||
|
STA TF.PRM TARGET FILE REF. NUM.
|
|||
|
STA SCI.IOB.MISC+1
|
|||
|
LDA #$CE SET MARK
|
|||
|
JSR SCI.MLI
|
|||
|
BCS JMP.PRODOS.ERR ...ERROR
|
|||
|
LDA #$D0 SET EOF
|
|||
|
JSR SCI.MLI
|
|||
|
BCS JMP.PRODOS.ERR ...ERROR
|
|||
|
*---Get current file info--------
|
|||
|
LDA #10
|
|||
|
STA SCI.IOB.GETSET
|
|||
|
LDA #$C4 GET FILE INFO
|
|||
|
JSR SCI.MLI
|
|||
|
BCS JMP.PRODOS.ERR ...ERROR
|
|||
|
*---Set proper file info---------
|
|||
|
LDA #7 change IOB for set.file.info
|
|||
|
STA SCI.IOB.GETSET
|
|||
|
LDA SCI.IOB.GETSET+4 current file type
|
|||
|
CMP #$04 is it type TXT?
|
|||
|
BEQ .9 ...yes, make no changes
|
|||
|
LDX #$2000 if type is SYS ($FF), force A=$2000
|
|||
|
LDY /$2000
|
|||
|
CMP #$FF is it type SYS?
|
|||
|
BEQ .3 ...yes
|
|||
|
LDX ORGN all other types, A=origin
|
|||
|
LDY ORGN+1
|
|||
|
.3 STX SCI.IOB.GETSET+5 new AuxType
|
|||
|
STY SCI.IOB.GETSET+6
|
|||
|
LDA #$C3 SET FILE INFO
|
|||
|
JSR SCI.MLI
|
|||
|
BCS JMP.PRODOS.ERR ...ERROR
|
|||
|
.9 JMP ASM2 ...CONTINUE ASSEMBLY
|
|||
|
*--------------------------------
|
|||
|
JMP.PRODOS.ERR JMP PRODOS.ERROR
|
|||
|
*--------------------------------
|
|||
|
* OUTPUT (A) TO ALREADY OPENED DISK FILE
|
|||
|
*--------------------------------
|
|||
|
DOUT BIT DUMMY.FLAG
|
|||
|
BMI .3 No output inside DUMMY section
|
|||
|
STA TF.BUF Save in buffer outside zero-page
|
|||
|
STX TF.SVX
|
|||
|
LDX #4 copy parms to SCI parmblock
|
|||
|
.1 LDA TF.PRM,X
|
|||
|
STA SCI.IOB.RW+1,X
|
|||
|
DEX
|
|||
|
BPL .1 ...until all copied
|
|||
|
LDA #$CB Write command code
|
|||
|
JSR SCI.MLI
|
|||
|
BCS JMP.PRODOS.ERR
|
|||
|
LDX TF.SVX
|
|||
|
LDA OBJ.BYTE
|
|||
|
.3 RTS
|
|||
|
*
|
|||
|
TF.SVX .BS 1
|
|||
|
TF.BUF .BS 1
|
|||
|
TF.PRM .DA #*-*,TF.BUF,1
|
|||
|
*--------------------------------
|
|||
|
* TFEND - FINISH OFF A .TF SECTION
|
|||
|
* CALLED FROM: .TF, .TA, .OR, .EN PROCESSORS
|
|||
|
*
|
|||
|
* IF NOT IN .TF NOW, RETURN IMMEDIATELY
|
|||
|
* CLEAR .TF FLAG
|
|||
|
* PASS 1 - THAT'S ALL TO DO
|
|||
|
* PASS 2 - CLOSE FILE
|
|||
|
*--------------------------------
|
|||
|
TFEND ASL TF.FLAG TEST AND CLEAR FLAG SIMULTANEOUSLY
|
|||
|
BCC .1 ...TF NOT ACTIVE, DO NOTHING
|
|||
|
LDA PASS
|
|||
|
BNE CLOSE.FILES ...PASS 2
|
|||
|
.1 RTS
|
|||
|
*--------------------------------
|
|||
|
CLOSE.FILES
|
|||
|
LDY #PQ.CLS
|
|||
|
.HS 2C
|
|||
|
FP LDY #PQ.FP
|
|||
|
LDA #0
|
|||
|
STA PATHNAME
|
|||
|
*--------------------------------
|
|||
|
* ISSUE DOS COMMAND WITH FILE NAME
|
|||
|
* (Y)=QUOTE OFFSET FOR COMMAND
|
|||
|
*
|
|||
|
* SAVES AND RESTORES CHARACTER POINTER
|
|||
|
* SO THAT FILE NAME CAN BE USED AGAIN.
|
|||
|
*--------------------------------
|
|||
|
ISSUE.DOS.COMMAND
|
|||
|
LDX #$7F SAVE WBUF (0-127)
|
|||
|
.1 LDA WBUF,X
|
|||
|
STA SCI.LINBUF,X
|
|||
|
DEX
|
|||
|
BPL .1
|
|||
|
.2 INX COPY PATHNAME INTO WBUF (5...)
|
|||
|
LDA PATHNAME,X
|
|||
|
STA WBUF+5,X
|
|||
|
BNE .2
|
|||
|
TAX X=0
|
|||
|
.3 INX COPY COMMAND INTO WBUF (0...)
|
|||
|
INY
|
|||
|
LDA PQTS-1,Y
|
|||
|
STA WBUF-1,X
|
|||
|
BPL .3
|
|||
|
STX SCI.STATE ALLOW DEFERRED COMMANDS
|
|||
|
JSR PASS.CMD.TO.PRODOS
|
|||
|
LDX #$7F RESTORE WBUF (0-127)
|
|||
|
.4 LDA SCI.LINBUF,X
|
|||
|
STA WBUF,X
|
|||
|
DEX
|
|||
|
BPL .4
|
|||
|
RTS
|
|||
|
*--------------------------------
|
|||
|
SAVE.PATHNAME .DO LOWERCASE=1
|
|||
|
ldx #0
|
|||
|
|
|||
|
.1 cpx #49
|
|||
|
bcs .2
|
|||
|
|
|||
|
jsr .8
|
|||
|
bcc .3
|
|||
|
|
|||
|
.2 lda #0
|
|||
|
|
|||
|
.3 sta PATHNAME,x
|
|||
|
inx
|
|||
|
bcc .1
|
|||
|
|
|||
|
rts
|
|||
|
|
|||
|
.8 jsr GNC GET NEXT CHAR ANY CASE
|
|||
|
beq .9 SPACE OR <EOL>
|
|||
|
|
|||
|
sta CURRENT.CHAR
|
|||
|
cmp #$FF CLEAR CARRY, SET .NE.
|
|||
|
|
|||
|
.9 rts
|
|||
|
|
|||
|
.ELSE
|
|||
|
LDX #0
|
|||
|
|
|||
|
.1 CPX #49
|
|||
|
BCS .2
|
|||
|
|
|||
|
JSR GNNB
|
|||
|
BCC .3
|
|||
|
|
|||
|
.2 LDA #0
|
|||
|
|
|||
|
.3 STA PATHNAME,X
|
|||
|
INX
|
|||
|
BCC .1
|
|||
|
|
|||
|
RTS
|
|||
|
.FIN
|
|||
|
*--------------------------------
|
|||
|
PQTS .EQ *
|
|||
|
PQ.CLS .EQ *-PQTS
|
|||
|
.AT /CLOSE/
|
|||
|
PQ.OPN .EQ *-PQTS
|
|||
|
.AT /OPEN /
|
|||
|
PQ.WRT .EQ *-PQTS
|
|||
|
.AT /WRITE/
|
|||
|
PQ.LOD .EQ *-PQTS
|
|||
|
.AT /LOAD /
|
|||
|
PQ.FP .EQ *-PQTS
|
|||
|
.AS /-BASIC.SYSTEM/
|
|||
|
.HS 00FF
|
|||
|
*--------------------------------------
|
|||
|
MAN
|
|||
|
SAVE usr/src/scmasm.31/scmasm.s.disk
|
|||
|
LOAD usr/src/scmasm.31/scmasm.s
|
|||
|
ASM
|