NEW
  AUTO 3,1
*---------------------------------------
OUT.Init		lda #PAGE.LEN
				>STA.G OUT.LineCnt
				clc
				rts
*---------------------------------------
OUT.EmitByte	phy
				phx
				tax

				>LDA.G ASM.PASS
				beq .1

				>LDA.G ASM.DU.ON
				bmi .1

				>PUSHB.G DST.hREFNUM
				txa
				>PUSHA
				phx
				>SYSCALL FPutC
				plx
				bcs .9

.1				>INC.G ASM.PC
				bne .2
				>INC.G ASM.PC+1
				bne .2
				>INC.G ASM.PC+2
				bne .2
				>INC.G ASM.PC+3

.2				>LDA.G ASM.PH.ON
				beq .3

				>INC.G ASM.PC.PH
				bne .3
				>INC.G ASM.PC.PH+1
				bne .3
				>INC.G ASM.PC.PH+2
				bne .3
				>INC.G ASM.PC.PH+3

.3				>LDA.G OUT.Buf
				cmp #3
				bne .4

				phx
				jsr OUT.PrintBuf
				plx
				bcs .9

				ldy #OUT.Buf
				lda #0

.4				inc
				sta (pData),y
				clc
				adc #OUT.Buf
				tay
				txa
				sta (pData),y

.8				clc

.9				plx
				ply
				rts
*---------------------------------------
OUT.PrintBuf	jsr OUT.PrintLineOn
				bcs OUT.PrintBufReset

				>LDA.G ASM.LI.XON
				bpl OUT.PrintBufReset

				jsr OUT.PrintLineOutBuf
				bcs OUT.PrintBuf.RTS
				jsr OUT.PrintCR
				bcs OUT.PrintBuf.RTS

OUT.PrintBufReset
				>STZ.G OUT.Buf

				ldx #4
				ldy #ASM.PC

.2				lda (pData),y
				pha
				iny
				dex
				bne .2

				ldx #4
				ldy #OUT.PC+3

.3				pla
				sta (pData),y
				dey
				dex
				bne .3

.8				clc

OUT.PrintBuf.RTS
				rts
*---------------------------------------
OUT.PrintLine	jsr OUT.PrintLineOn
				bcc OUT.PrintLine.1
				
				clc
				rts

OUT.PrintLine.1	jsr OUT.PrintLineOutBuf
				bcs OUT.PrintBuf.RTS

				>LDA.G SRC.Depth

.1				dec
				beq .2

				pha
				lda #'>'
				>SYSCALL PutChar
				pla
				bra .1

.2				>PUSHW L.MSG.LINENUM
				>PUSHW.G SRC.LINENUM
				>PUSHBI 2
				>SYSCALL PrintF

				>LDA.G MAC.CtxStackPtr

.3				dec
				bmi .4

				pha
				lda #'>'
				>SYSCALL PutChar
				pla
				bra .3

.4				>LDYA ZPLineBuf
				>SYSCALL PutS

				jmp OUT.PrintCR1
*---------------------------------------
OUT.PrintLineOutBuf
				>LDA.G OUT.bEquate
				bne OUT.PrintLineEQU

				>LDA.G OUT.Buf
				pha
				asl
				tax
				>PUSHB L.MSG.OUT0+1,x
				>PUSHB L.MSG.OUT0,x

				ldy #OUT.PC+1
				>PUSHB (pData),y
				dey
				>PUSHB (pData),y

				pla
				beq .2

				tax

				ldy #OUT.Buf

				pha

.1				iny
				>PUSHB (pData),y
				dex
				bne .1

				pla

.2				inc
				inc
				>PUSHA					Byte Count+2 for PC
				>SYSCALL PrintF

				rts
*---------------------------------------
OUT.PrintLineEQU
				lda SRC.ACC.SIZE
				asl
				tax

				>PUSHB L.MSG.EQU0+1,x
				>PUSHB L.MSG.EQU0,x

				lda SRC.ACC.SIZE
				beq .2

				tay

.1				dey
				>PUSHB SRC.ACC,y
				tya
				bne .1

				lda SRC.ACC.SIZE

.2				>PUSHA					Byte Count
				>SYSCALL PrintF
				rts
*---------------------------------------
OUT.PrintLineOn
				>LDA.G bListAll
				bmi .8

				>LDA.G ASM.LI.ON
				bpl .9

				>LDA.G ASM.MA.ON		MACRO Mode ?
				bmi .1
				
				>LDA.G MAC.CtxID		within MACRO ?
				beq .11

.1				>LDA.G ASM.LI.MON
				bpl .9
				clc
				rts

.11				>LDA.G ASM.DO.StackPtr	within a DO/ELSE ?
				beq .2

				clc
				adc #ASM.DO.Stack-1
				tay
				lda (pData),y			TRUE ?
				bne .8					yes, print always

				>LDA.G ASM.LI.CON		FALSE, check CON flag...
				bpl .9
				clc
				rts

.2

.8				clc
				rts

.9				sec
OUT.PrintLineOnRTS
				rts
*---------------------------------------
OUT.PrintLineErr
				sta DIR.Byte			Save Error code

				jsr OUT.PrintLine.1
				bcs OUT.PrintLineOnRTS

				>PUSHW L.MSG.ERROR
				>PUSHB DIR.Byte
				>PUSHBI 1
				>SYSCALL PrintF

				lda ZPLinePtr
				sec
				sbc ZPLineBuf
				jsr OUT.PrintLineErrDashA

				>LDA.G SRC.Depth
				dec
				jsr OUT.PrintLineErrDashA

				>LDA.G MAC.CtxStackPtr
				jsr OUT.PrintLineErrDashA

				lda #'^'
				>SYSCALL PutChar
				bcs OUT.PrintLineOnRTS

				jsr OUT.PrintCR

				>PUSHW L.MSG.PASS
				>LDA.G ASM.PASS
				inc
				>PUSHA
				>PUSHBI 1
				jsr OUT.Print

				jmp OUT.PrintCR
*---------------------------------------
OUT.PrintLineErrDashA
				tax
				beq .8

.1				phx
				lda #'-'
				>SYSCALL PutChar
				plx
				bcs .9

				dex
				bne .1

.8				clc
.9				rts
*---------------------------------------
OUT.PrintWarn1	jsr OUT.PrintLine.1

				>LDYA L.MSG.WARN1
				>SYSCALL PutS
				rts
*---------------------------------------
OUT.Print		>SYSCALL PrintF
				bcs OUT.Print.RTS
*---------------------------------------
OUT.PrintCR		>PUSHW L.MSG.CRLF
				>PUSHBI 0
				>SYSCALL PrintF

OUT.PrintCR1	>DEC.G OUT.LineCnt
				bne .8

				lda #PAGE.LEN
				sta (pData),y

.8
*				clc
OUT.Print.RTS	rts
*---------------------------------------
MAN
SAVE usr/src/bin/asm.s.out
LOAD usr/src/bin/asm.s
ASM
