mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-24 14:31:05 +00:00
280 lines
8.0 KiB
Plaintext
280 lines
8.0 KiB
Plaintext
|
NEW
|
|||
|
AUTO 3,1
|
|||
|
*--------------------------------------
|
|||
|
* .IN -- INCLUDE A SOURCE FILE
|
|||
|
*--------------------------------
|
|||
|
PSIN LDA INFLAG SEE IF NESTED .IN
|
|||
|
BNE .4 ...YES, ERROR
|
|||
|
SEC
|
|||
|
ROR INFLAG TURN ON FLAG (=$80)
|
|||
|
LDA #'I PUT "I" IN PROMPT MESSAGE
|
|||
|
STA PROMPT.FLAG
|
|||
|
JSR LIST.LINE.BOTH.PASSES
|
|||
|
*---SAVE CURRENT, SET UP NEW-----
|
|||
|
LDX #1
|
|||
|
.1 LDA HI.MEM,X SAVE CURRENT SOURCE POINTERS
|
|||
|
STA INSAVE,X
|
|||
|
LDA SRCP,X
|
|||
|
STA INSAVE+2,X
|
|||
|
LDA PP,X
|
|||
|
STA HI.MEM,X
|
|||
|
.DO AUXMEM
|
|||
|
.ELSE
|
|||
|
LDA LO.MEM,X MAKE DOS PROTECT THE SYMBOL TABLE
|
|||
|
STA INSAVE+6,X DURING THE LOAD
|
|||
|
LDA EOT,X
|
|||
|
STA LO.MEM,X
|
|||
|
.FIN
|
|||
|
DEX
|
|||
|
BPL .1
|
|||
|
*---CHECK FOR .INBx--------------
|
|||
|
JSR GNC.UC
|
|||
|
CMP #'B'
|
|||
|
BNE .2 ...NOT .INBx
|
|||
|
JSR GNC.UC GET # OF BLOCKS
|
|||
|
EOR #'0'
|
|||
|
BEQ .12 ...NOT 1-9, USE 1
|
|||
|
CMP #10
|
|||
|
BCC .14 ...1-9
|
|||
|
.12 LDA #1 USE 1 BLOCK
|
|||
|
.14 ORA #$C0
|
|||
|
STA INFLAG
|
|||
|
*---LOAD THE FILE----------------
|
|||
|
.2 JSR SAVE.PATHNAME
|
|||
|
LDY #PQ.LOD LOAD COMMAND
|
|||
|
JSR ISSUE.DOS.COMMAND
|
|||
|
*---ASSEMBLE INCLUDED STUFF------
|
|||
|
LDX #1
|
|||
|
.3 LDA PP,X MOVE SRCP TO BEGINNING OF INCLUDED FILE
|
|||
|
STA SRCP,X
|
|||
|
STA MACSTK,X
|
|||
|
.DO AUXMEM
|
|||
|
.ELSE
|
|||
|
LDA INSAVE+6,X RESTORE LO.MEM
|
|||
|
STA LO.MEM,X
|
|||
|
.FIN
|
|||
|
LDA SCI.IOB.RW+6,X # BYTES ACTUALLY RECEIVED
|
|||
|
STA INSAVE+4,X
|
|||
|
DEX
|
|||
|
BPL .3
|
|||
|
LDA SCI.IOB.RW+1 REFNUM OF INB FILE
|
|||
|
STA INSAVE+6
|
|||
|
JMP ASM2 CONTINUE ASSEMBLY
|
|||
|
*---NO NESTING ALLOWED-----------
|
|||
|
.4 LDY #QNIN "NEST .IN"
|
|||
|
JMP FIRM.ERROR
|
|||
|
*--------------------------------
|
|||
|
* .EN -- END OF SOURCE PROGRAM
|
|||
|
*--------------------------------
|
|||
|
PSEN JSR LIST.SOURCE.IF.LISTING
|
|||
|
ENDM
|
|||
|
BIT INFLAG IN A ".IN"?
|
|||
|
BPL .1 NO
|
|||
|
BVC .3 ...NOT IN .INBx
|
|||
|
LDA INSAVE+6 .INBx REFNUM
|
|||
|
STA SCI.IOB.CLOSE+1
|
|||
|
LDA #$CC Close the .INclude file
|
|||
|
JSR SCI.MLI
|
|||
|
.3 JSR RESTORE YES, BACK TO ROOT
|
|||
|
JMP ASM2 CONTINUE ASSEMBLY
|
|||
|
*---END OF ROOT FILE-------------
|
|||
|
.1 JSR TFEND END .TF IF DOING ONE
|
|||
|
LDA PASS WHICH PASS?
|
|||
|
BNE .2 ...END OF PASS 2
|
|||
|
INC PASS END OF PASS 1
|
|||
|
JMP ASM1
|
|||
|
.2 BIT LF.ALL Are we listing?
|
|||
|
BMI ASM.END ...no, we are finished
|
|||
|
JSR CRLF.WITH.PAGING
|
|||
|
JSR CRLF.WITH.PAGING
|
|||
|
JSR CRLF.WITH.PAGING
|
|||
|
LDY #QST "SYMBOL TABLE"
|
|||
|
JSR QT.OUT
|
|||
|
JSR CRLF.WITH.PAGING
|
|||
|
JSR CRLF.WITH.PAGING
|
|||
|
JSR STPRNT PRINT THE SYMBOLS
|
|||
|
*--------------------------------
|
|||
|
ASM.END
|
|||
|
JSR CRLF.WITH.PAGING
|
|||
|
LDA ERROR.COUNT
|
|||
|
STA CURRENT.LINE.NUMBER
|
|||
|
LDA ERROR.COUNT+1
|
|||
|
STA CURRENT.LINE.NUMBER+1
|
|||
|
JSR CONVERT.LINE.NUMBER.PRINT
|
|||
|
LDY #QERRCNT
|
|||
|
JSR QT.OUT
|
|||
|
JMP SOFT END OF ASSEMBLY
|
|||
|
*--------------------------------
|
|||
|
* RESTORE IF INSIDE AN INCLUDE
|
|||
|
*--------------------------------
|
|||
|
RESTORE
|
|||
|
LDA INFLAG
|
|||
|
BEQ .1 RETURN
|
|||
|
LDX #0 CLEAR PROMPT.FLAG
|
|||
|
STX PROMPT.FLAG
|
|||
|
STX INFLAG CLEAR INFLAG
|
|||
|
INX X=1
|
|||
|
.2 LDA HI.MEM,X
|
|||
|
STA PP,X
|
|||
|
STA MACSTK,X
|
|||
|
LDA INSAVE,X
|
|||
|
STA HI.MEM,X
|
|||
|
LDA INSAVE+2,X
|
|||
|
STA SRCP,X
|
|||
|
DEX
|
|||
|
BPL .2
|
|||
|
.1 RTS
|
|||
|
*--------------------------------
|
|||
|
* SET UP TITLE LINE
|
|||
|
*--------------------------------
|
|||
|
PSTI LDA PASS
|
|||
|
BEQ PGXIT DO NOTHING IN PASS ONE
|
|||
|
JSR EXPR.DEFINED GET PAGE LENGTH
|
|||
|
LDA EXP.VALUE USE MOD 256
|
|||
|
STA PAGE.LENGTH NON-ZERO PAGE LENGTH MEANS TITLING IS ON
|
|||
|
LDX #0 POINT AT TITLE BUFFER
|
|||
|
JSR GNC
|
|||
|
CMP #',
|
|||
|
BNE .2 NO TITLE
|
|||
|
.1 JSR GNC
|
|||
|
BCS .2 END OF TITLE
|
|||
|
STA KBUF,X
|
|||
|
INX
|
|||
|
CPX #70 MAX TITLE SIZE
|
|||
|
BCC .1
|
|||
|
.2 LDA #0 TERMINATE TITLE
|
|||
|
STA KBUF,X
|
|||
|
*---FALL INTO PSPG CODE----------
|
|||
|
*--------------------------------
|
|||
|
* PAGE EJECT
|
|||
|
*--------------------------------
|
|||
|
PSPG JSR FORM.FEED
|
|||
|
PGXIT JMP ASM2
|
|||
|
*--------------------------------
|
|||
|
FORM.FEED
|
|||
|
JSR CHECK.IF.LISTING
|
|||
|
LDA #$0C FORM FEED CHAR
|
|||
|
JSR CHO
|
|||
|
>INCD PAGE.NUMBER
|
|||
|
LDA PAGE.LENGTH
|
|||
|
CMP #3 PAGE LENGTHS LESS THAN 3 CANNOT BE TITLED
|
|||
|
BCC .1 EXIT, NOT TITLING NOW
|
|||
|
LDX #0
|
|||
|
STX LINE.COUNT
|
|||
|
.3 LDA KBUF,X PRINT TITLE
|
|||
|
BEQ .4 END OF TITLE
|
|||
|
JSR CHO
|
|||
|
INX
|
|||
|
BNE .3 ...ALWAYS
|
|||
|
.4 LDY #PAGEQT " PAGE "
|
|||
|
JSR QT.OUT
|
|||
|
LDA CURRENT.LINE.NUMBER SAVE LINE #
|
|||
|
PHA
|
|||
|
LDA CURRENT.LINE.NUMBER+1
|
|||
|
PHA
|
|||
|
LDA PAGE.NUMBER PRINT PAGE #
|
|||
|
STA CURRENT.LINE.NUMBER
|
|||
|
LDA PAGE.NUMBER+1
|
|||
|
STA CURRENT.LINE.NUMBER+1
|
|||
|
JSR CONVERT.LINE.NUMBER.PRINT
|
|||
|
JSR CRLF.WITH.PAGING
|
|||
|
PLA RESTORE LINE #
|
|||
|
STA CURRENT.LINE.NUMBER+1
|
|||
|
PLA
|
|||
|
STA CURRENT.LINE.NUMBER
|
|||
|
.1 RTS RETURN
|
|||
|
*--------------------------------
|
|||
|
* .BS -- BLOCK STORAGE
|
|||
|
*--------------------------------
|
|||
|
PSBS JSR EXPR.DEFINED GET # OF BYTES
|
|||
|
LDA EXP.VALUE+3
|
|||
|
ORA EXP.VALUE+2
|
|||
|
BNE RAER VALUE >32767
|
|||
|
LDA EXP.VALUE+1
|
|||
|
BMI RAER VALUE >32767
|
|||
|
STA BS.COUNT+1
|
|||
|
LDA EXP.VALUE
|
|||
|
STA BS.COUNT SAVE COUNT
|
|||
|
JSR P.ORIGIN PRINT ADDRESS
|
|||
|
JSR GNC GET NEXT CHAR
|
|||
|
CMP #', COMMA?
|
|||
|
BNE .1 NO, NO VALUE PRESENT
|
|||
|
JSR EXPR GET FILL VALUE
|
|||
|
BPL .2 BRANCH IF GOOD EXPRESSION
|
|||
|
.1 JSR ZERO.EXP.VALUE USE ZERO FOR FILL VALUE
|
|||
|
.2 SEC
|
|||
|
ROR LF.ALL TURN OFF LISTING
|
|||
|
.3 LDA BS.COUNT GET COUNT
|
|||
|
BNE .4 STILL MORE BYTES
|
|||
|
DEC BS.COUNT+1
|
|||
|
BMI .5 ...ALL THRU
|
|||
|
.4 DEC BS.COUNT COUNT DOWN
|
|||
|
LDA EXP.VALUE GET FILL VALUE
|
|||
|
JSR EMIT AND EMIT IT
|
|||
|
JMP .3
|
|||
|
|
|||
|
.5 ASL LF.ALL RESTORE LISTING
|
|||
|
RTS
|
|||
|
|
|||
|
*--------------------------------
|
|||
|
RAER LDY #QER3 ERROR -- OUT OF RANGE
|
|||
|
JMP SOFT.ERROR
|
|||
|
|
|||
|
*--------------------------------
|
|||
|
* LISTING CONTROL
|
|||
|
* .LIST ON/OFF/MON/MOFF/CON/COFF,...
|
|||
|
*--------------------------------
|
|||
|
PSLI LDY #LI.INDEX-2
|
|||
|
JSR SET.FLAGS
|
|||
|
JMP ASM2 DON'T LIST LINE
|
|||
|
*--------------------------------
|
|||
|
* SWITCH FLAGS ON OR OFF
|
|||
|
*--------------------------------
|
|||
|
SET.FLAGS
|
|||
|
STY YSAVE
|
|||
|
.1 LDY YSAVE
|
|||
|
.2 INY Find letter in table
|
|||
|
INY
|
|||
|
LDA FLAG.TABLE,Y
|
|||
|
BEQ .7 ...end of table, get next letter
|
|||
|
CMP CURRENT.CHAR
|
|||
|
BNE .2 ...try next entry in table
|
|||
|
*---Found letter in table--------
|
|||
|
LDX FLAG.TABLE+1,Y
|
|||
|
.3 EOR #'N 'N' means ON
|
|||
|
BEQ .5 ...set flag to $00
|
|||
|
EOR #'F^'N 'F' means OFF
|
|||
|
BEQ .4 ...set flag to $FF
|
|||
|
EOR #',^'F comma here is an error
|
|||
|
BEQ .9 ...oops!
|
|||
|
JSR GNC.UC get next char from user
|
|||
|
BNE .3 ...might be N, F, or comma
|
|||
|
RTS ...blank or end of line
|
|||
|
*---Turn flag ON or OFF----------
|
|||
|
.4 LDA #$FF signal OFF with $FF
|
|||
|
.5 STA 0,X store $00 or $FF in flag
|
|||
|
*---Scan to a comma or eol-------
|
|||
|
.6 JSR GNC GET NEXT CHAR
|
|||
|
BEQ .8 ...blank or end of line
|
|||
|
CMP #','
|
|||
|
BNE .6 ...not comma yet
|
|||
|
*---Get next char from user------
|
|||
|
.7 JSR GNC.UC
|
|||
|
BCC .1 ...not end of line yet
|
|||
|
.8 RTS RETURN TO CALLER
|
|||
|
.9 JMP ERBA
|
|||
|
*--------------------------------
|
|||
|
FLAG.TABLE
|
|||
|
LI.INDEX .EQ *-FLAG.TABLE
|
|||
|
.DA #'N',#LF.ALL
|
|||
|
.DA #'F',#LF.ALL
|
|||
|
.DA #'M',#LF.MACRO
|
|||
|
.DA #'C',#LF.CONDITIONAL
|
|||
|
.DA #'X',#LF.XTRA.BYTES
|
|||
|
.HS 00
|
|||
|
*--------------------------------------
|
|||
|
MAN
|
|||
|
SAVE usr/src/scmasm.30/scmasm.s.dir2
|
|||
|
LOAD usr/src/scmasm.30/scmasm.s
|
|||
|
ASM
|