A2osX/SCMASM.31/SCMASM.S.DISK.txt

263 lines
6.9 KiB
Plaintext
Raw Normal View History

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