A2osX/SCMASM.31/SCMASM.S.ASMNL.txt

115 lines
3.0 KiB
Plaintext
Raw Normal View History

NEW
AUTO 3,1
*--------------------------------------
* SET UP NEXT LINE TO ASSEMBLE
*--------------------------------
SETUP.NEXT.LINE
.1 BIT INFLAG
BVS .5 ...INSIDE .INBx
LDA SRCP CHECK IF AT END
CMP HI.MEM TOP OF SOURCE CODE
LDA SRCP+1
SBC HI.MEM+1
BCS .7 RETURN WITH CARRY SET
.5 LDA MACRO.LEVEL IN SKELETON OR BODY?
BEQ .2 BODY
LDY #0 SEE IF END OF SKELETON
>SYM LDA,SRCP
BNE .3 NO, STILL IN SKELETON
LDA (MACSTK),Y POP SKELETON OFF MACRO STACK
STA CALL.NUM+1
INY
LDA (MACSTK),Y
STA CALL.NUM
INY
LDA (MACSTK),Y
STA LF.ALL Real value of listing option
INY
LDA (MACSTK),Y
STA SRCP+1
INY
LDA (MACSTK),Y
STA SRCP
INY
LDA (MACSTK),Y (HIGH BYTE)
PHA
INY
LDA (MACSTK),Y (LOW BYTE)
STA MACSTK
PLA
STA MACSTK+1
DEC MACRO.LEVEL
JMP .1
*--------------------------------
.2 JSR GET.LINE.NUMBER BODY
.3 LDX #0
.4 JSR GET.NEXT.SOURCE.CHAR
BEQ .6 END OF LINE
STA WBUF,X PUT INTO WORKING BUFFER
INX
BNE .4 ...ALWAYS
.6 STA WBUF,X PUT ZERO ON END
CLC RETURN WITH CARRY CLEAR
.7 RTS
*--------------------------------
* GET NEXT CHARACTER FROM SOURCE LINE
* (IF INSIDE A MACRO SKELETON, EXPAND PARAMETERS)
*--------------------------------
GET.NEXT.SOURCE.CHAR
STX MACRO.SAVEX MUST PRESERVE X-REGISTER
LDY PARAM.PNTR
BNE .1 PRESENTLY EXPANDING A PARAMETER
LDA MACRO.LEVEL IN A SKELETON?
BNE .2 YES
JMP NTKN NO
*--------------------------------
.1 INC PARAM.PNTR
LDA (MACSTK),Y
BNE .8 ...NORMAL CHAR
STA PARAM.PNTR ...END OF PARAMETER
.2 JSR NTKN
BEQ .8 END OF LINE
CMP #$7F PARAMETER?
BNE .8 NO, NORMAL CHAR
*---MACRO PARAMETER--------------
JSR NTKN YES, GET PARAM #
LDY #6
CMP #'# ]# RETURNS NUMBER OF PARAMETERS (0-9)
BEQ .5 ...FOUND ]#
SEC
SBC #'1' CHANGE "1"..."9" TO 0...8
BEQ .4 ...]1
TAX ...]2 THRU ]9
.3 INY
LDA (MACSTK),Y SKIP OVER A PARAMETER
BNE .3
DEX
BNE .3
.4 INY
STY PARAM.PNTR
BNE .1 ...ALWAYS
*---NUMBER OF PARAMETERS---------
.5 CLC
LDA (MACSTK),Y
SBC MACSTK
TAY
LDX #10
.6 LDA (MACSTK),Y
BNE .7
DEX
DEY
CPY #7
BCS .6
LDX #0
.7 TXA
ORA #$30
*--------------------------------
.8 LDX MACRO.SAVEX RESTORE X-REG
CMP #0 SET "EQ" STATUS IF END OF LINE
RTS
*--------------------------------------
MAN
SAVE usr/src/scmasm.31/scmasm.s.asmnl
LOAD usr/src/scmasm.31/scmasm.s
ASM