NEW
  AUTO 3,1
*---------------------------------------
OUT.Init		lda #PAGE.LEN
				>STA.G OUT.LineCnt
				rts
*---------------------------------------
OUT.Reset		ldx #4
				ldy #ASM.PC
.1				lda (pData),y
				pha
				iny
				dex
				bne .1
				ldx #4
				ldy #OUT.PC+3
.2				pla
				sta (pData),y
				dey
				dex
				bne .2

				>STZ.G OUT.Buf
				>STA.G OUT.bEquate
				rts
*---------------------------------------
OUT.PrintLineOn
			clc
			rts
				>LDA.G ASM.LI.ON
				bpl .9
				>LDA.G ASM.MA.ON		MACRO Mode ?
				bpl .1
				>LDA.G ASM.LI.MON
				bpl .9
				bmi .8
.1				>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
				bmi .8
.2
.8				clc
				rts
.9				sec
				rts
*---------------------------------------
OUT.PrintLineErr
				>STA.G DIR.Byte			Save Error code

				jsr OUT.PrintLine.1
				bcs .9
				
.1				>PUSHW L.MSG.ERROR
				>PUSHB.G DIR.Byte
				>PUSHBI 1
				>SYSCALL printf

				ldx ZPLinePtr
				cpx ZPLineBuf
				beq .4
				
.3				phx
				lda #'-'
				>SYSCALL PutChar
				plx
				bcs .9
				
				dex
				cpx ZPLineBuf
				bne .3
				
.4				lda #'^'
				phy
				>SYSCALL PutChar
				ply
				bcs .9

				jmp OUT.PrintCR
.9				rts
*---------------------------------------
OUT.PrintLine	jsr OUT.PrintLineOn	
				bcs OUT.Print.RTS
				
OUT.PrintLine.1	jsr OUT.PrintLineOutBuf
				bcs OUT.Print.RTS
				
				>LDA.G SRC.COUNT

.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.Depth
				
.3				dec
				bmi .4
				
				pha
				lda #'>'
				>SYSCALL putchar
				pla
				bra .3

.4				>LDYA ZPLineBuf
				>SYSCALL puts
				jmp OUT.PrintCR1
*---------------------------------------
OUT.Print		>SYSCALL printf
				bcs OUT.Print.RTS
				jmp OUT.PrintCR

OUT.Print.RTS	rts
*---------------------------------------
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.EmitByte	phy
				phx
				pha

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

				jsr OUT.PrintLineOn
				bcs .1
				>LDA.G ASM.LI.XON
				bpl .1
				jsr OUT.PrintLineOutBuf
				jsr OUT.PrintCR
.1				jsr OUT.Reset
				lda #0
				ldy #OUT.Buf
.2				inc
				sta (pData),y
				clc
				adc #OUT.Buf
				tay
				pla
				sta (pData),y
.8				>INC.G ASM.PC
				bne .80
				>INC.G ASM.PC+1
				bne .80
				>INC.G ASM.PC+2
				bne .80
				>INC.G ASM.PC+3
.80				plx
				ply
				clc
				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
*				lda #$80
*				>STA.G bPause
.8				rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.OUT
LOAD USR/SRC/BIN/ASM.S
ASM
