mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-22 00:32:44 +00:00
251 lines
6.7 KiB
Plaintext
251 lines
6.7 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
* ERROR PRINTER
|
||
*---------------------------------
|
||
FIRM.ERROR
|
||
SEC SIGNAL FIRM ERROR
|
||
.HS 24 SKIP NEXT BYTE
|
||
SOFT.ERROR
|
||
CLC SIGNAL SOFT ERROR
|
||
LDA PASS SEE IF IN ASSEMBLY
|
||
BMI HARD.ERROR ...NO
|
||
PHP SAVE CLC/SEC STATUS
|
||
LDA RDROM
|
||
JSR PRINT.ERROR.MESSAGE
|
||
>INCD ERROR.COUNT
|
||
JSR SPC
|
||
JSR LIST.SOURCE.AT.MARGIN
|
||
JSR CRLF
|
||
PLP GET SOFT/FIRM STATUS
|
||
BCS JMP.SOFT ...FIRM, ABORT ASSEMBLY
|
||
JMP ASM2 ...SOFT, CONTINUE ASSEMBLY
|
||
HARD.ERROR
|
||
JSR PRINT.ERROR.MESSAGE
|
||
JMP.SOFT
|
||
JSR RESTORE.IF.IN.INBX
|
||
JMP SOFT
|
||
*--------------------------------
|
||
RESTORE.IF.IN.INBX
|
||
BIT INFLAG
|
||
BVC .1
|
||
JSR RESTORE
|
||
.1 RTS
|
||
*--------------------------------
|
||
P.EXP.VALUE.DASH
|
||
JSR CHECK.IF.LISTING
|
||
JSR P.EXP.VALUE
|
||
P.DASH LDA #'-'
|
||
.HS 2C
|
||
P.RETURN
|
||
LDA #$0D
|
||
.HS 2C
|
||
SPC LDA #' ' ONE SPACE
|
||
CHO PHA
|
||
ORA #$80 CHAR OUT
|
||
JSR MY.COUT SEND THE CHARACTER
|
||
PLA
|
||
RTS
|
||
*---------------------------------
|
||
* PRINT A <RETURN>
|
||
* IF IN "SLOW" MODE, DELAY FIRST
|
||
* CHECK KEYBOARD FOR PAUSE OR ABORT
|
||
*--------------------------------
|
||
CRLF BIT FLAG.SPEED CHECK SLOW/FAST SPEED
|
||
BPL .1 FAST
|
||
LDA #0 SLOW
|
||
JSR MON.DELAY
|
||
.1 JSR CHECK.KEYBOARD.FOR.ABORT
|
||
BCC P.RETURN ...NO KEYPRESS
|
||
BEQ JMP.SOFT ...ABORT
|
||
.2 JSR CHECK.KEYBOARD.FOR.ABORT
|
||
BCC .2 WAIT FOR KEYPRESS
|
||
BNE P.RETURN ...CONTINUE
|
||
BEQ JMP.SOFT ...ABORT
|
||
*--------------------------------
|
||
* RETURN .CC. AND .NE. IF NO KEYPRESS
|
||
* RETURN .CS. AND .EQ. IF <RETURN> TYPED
|
||
* RETURN .CS. AND .NE. IF ANY OTHER KEY
|
||
*--------------------------------
|
||
CHECK.KEYBOARD.FOR.ABORT
|
||
CLC
|
||
LDA $C000
|
||
BPL .1
|
||
STA $C010
|
||
CMP #$8D
|
||
SEC
|
||
.1 RTS
|
||
*--------------------------------
|
||
* PRINT ERROR MESSAGE
|
||
*--------------------------------
|
||
PRINT.ERROR.MESSAGE
|
||
TYA SAVE ERROR #
|
||
TAX IN X-REG
|
||
LDY #QSTARS "*** "
|
||
JSR QT.OUT
|
||
TXA
|
||
TAY
|
||
JSR QT.OUT
|
||
LDY #QERROR
|
||
JMP QT.OUT
|
||
*--------------------------------
|
||
* PRINT LOCATION COUNTER AND DASH
|
||
*--------------------------------
|
||
P.ORIGIN
|
||
JSR CHECK.IF.LISTING
|
||
P.ORIGIN.REGARDLESS
|
||
LDX #7 assume col. 7 after 6-digit origin
|
||
LDY #2
|
||
LDA ORGN+2 If > $FFFF, print 3 bytes
|
||
BNE .1 ...orgn > $FFFF, print 3 bytes
|
||
DEY ...orgn <$10000, print 2 bytes
|
||
LDX #5 will end up in col. 5
|
||
.1 STX EMIT.COLUMN
|
||
.2 LDA ORGN,Y HIGH BYTE FIRST
|
||
JSR MON.PHEX
|
||
DEY
|
||
BPL .2
|
||
JMP P.DASH PRINT "-"
|
||
*--------------------------------
|
||
P.EMITTED.BYTE
|
||
JSR CHECK.IF.LISTING
|
||
LDY EMIT.COLUMN
|
||
BEQ .2 ...AT BEGINNING OF LINE
|
||
LDY EMIT.MARGIN
|
||
LDA ORGN+2
|
||
BNE .1
|
||
DEY
|
||
DEY
|
||
.1 CPY EMIT.COLUMN
|
||
BCS .3 ...STILL ROOM ON THIS LINE
|
||
BIT LF.XTRA.BYTES
|
||
BMI .4
|
||
JSR CRLF.WITH.PAGING
|
||
.2 JSR P.ORIGIN
|
||
.3 LDY EMIT.COLUMN
|
||
INY MAKE ROOM FOR NEXT BYTE
|
||
INY
|
||
INY
|
||
STY EMIT.COLUMN
|
||
JSR SPC
|
||
LDA OBJ.BYTE
|
||
JMP MON.PHEX
|
||
.4 RTS
|
||
*--------------------------------
|
||
P.MARGIN
|
||
SEC
|
||
LDA EMIT.MARGIN
|
||
SBC EMIT.COLUMN
|
||
TAX
|
||
LDA ORGN+2
|
||
BEQ .1
|
||
INX
|
||
INX
|
||
.1 JMP MON.PRBL2
|
||
*--------------------------------
|
||
P.EXP.VALUE
|
||
LDY #3 EXP.VALUE IS 4 BYTES
|
||
.1 LDA EXP.VALUE,Y TRIM LEADING ZERO BYTES
|
||
BNE .2 ...FIRST NON-ZERO BYTE
|
||
DEY
|
||
BNE .1 ...STILL NOT LAST BYTE
|
||
.2 TYA
|
||
ASL
|
||
ADC #3
|
||
STA EMIT.COLUMN
|
||
.3 LDA EXP.VALUE,Y PRINT REST OF EXP.VALUE
|
||
JSR MON.PHEX
|
||
DEY
|
||
BPL .3
|
||
RTS
|
||
*--------------------------------
|
||
CHECK.IF.LISTING
|
||
LDA PASS
|
||
BEQ .1 ...NO LISTING IN PASS 1
|
||
LDA LF.ALL
|
||
BPL .2 ...YES, LIST
|
||
.1 PLA POP RETURN
|
||
PLA
|
||
.2 RTS
|
||
*--------------------------------
|
||
LIST.LINE.BOTH.PASSES
|
||
LDA PASS
|
||
BEQ .1 DEFINITE IN PASS 1
|
||
LDA LF.ALL
|
||
BPL .2 ...ALREADY DID CRLF
|
||
.1 JSR CRLF.WITH.PAGING
|
||
.2 JSR P.ORIGIN.REGARDLESS
|
||
JMP LIST.SOURCE.REGARDLESS
|
||
*---------------------------------
|
||
* CONVERT LINE NUMBER
|
||
* (CURRENT.LINE.NUMBER) = NUMBER TO USE
|
||
*---------------------------------
|
||
CONVERT.LINE.NUMBER.BOTH
|
||
LDA #$C0 PRINT FLAG ON, STORE FLAG ON
|
||
.HS 2C SKIP NEXT 2 BYTES
|
||
CONVERT.LINE.NUMBER.STORE
|
||
LDA #$80 PRINT FLAG OFF, STORE FLAG ON
|
||
.HS 2C SKIP NEXT 2 BYTES
|
||
CONVERT.LINE.NUMBER.PRINT
|
||
LDA #$40 PRINT FLAG ON, STORE FLAG OFF
|
||
PHA
|
||
LDX #3 CONVERT 4 DIGITS
|
||
LDA CURRENT.LINE.NUMBER
|
||
CMP #10000
|
||
LDA CURRENT.LINE.NUMBER+1
|
||
SBC /10000
|
||
BCC .1 4 DIGITS WILL DO IT
|
||
INX 5 DIGITS
|
||
.1 PLA
|
||
*--------------------------------
|
||
* CONVERT (CURRENT.LINE.NUMBER)
|
||
* (X) = ONE LESS THAN NUMBER OF DIGITS
|
||
* (A) = FLAGS: BIT 7 = 1 MEANS TO STORE AT WBUF,Y
|
||
* BIT 6 = 1 MEANS TO PRINT
|
||
*--------------------------------
|
||
CONVERT.LINE.NUMBER
|
||
STA CONV.CTRL
|
||
.5 LDA #$B0 SET DIGIT TO ASCII ZERO
|
||
.1 PHA PUSH DIGIT ON STACK
|
||
SEC SUBTRACT CURRENT DIVISOR
|
||
LDA CURRENT.LINE.NUMBER
|
||
SBC PLNTBL,X
|
||
PHA SAVE BYTE ON STACK
|
||
LDA CURRENT.LINE.NUMBER+1
|
||
SBC PLNTBH,X
|
||
BCC .2 LESS THAN DIVISOR
|
||
STA CURRENT.LINE.NUMBER+1
|
||
PLA GET LOW BYTE OFF STACK
|
||
STA CURRENT.LINE.NUMBER
|
||
PLA GET DIGIT FROM STACK
|
||
ADC #0 INCREMENT DIGIT
|
||
BNE .1 ...ALWAYS
|
||
.2 PLA DISCARD BYTE FROM STACK
|
||
PLA GET DIGIT FROM STACK
|
||
BIT CONV.CTRL
|
||
BVC .3 NO PRINT
|
||
JSR MON.COUT PRINT CHARACTER
|
||
.3 BIT CONV.CTRL TEST BUFFER STORAGE FLAG
|
||
BPL .4 OFF, DO NOT STORE IN BUFFER
|
||
STA WBUF,Y
|
||
INY
|
||
.4 DEX NEXT DIGIT
|
||
BPL .5
|
||
RTS RETURN
|
||
*---------------------------------
|
||
PLNTBL .DA #1
|
||
.DA #10
|
||
.DA #100
|
||
.DA #1000
|
||
.DA #10000
|
||
PLNTBH .DA /1
|
||
.DA /10
|
||
.DA /100
|
||
.DA /1000
|
||
.DA /10000
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/scmasm.30/scmasm.s.output
|
||
LOAD usr/src/scmasm.30/scmasm.s
|
||
ASM
|