NEW
  PREFIX
AUTO 4,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				>PUSHB.G DIR.Byte
				>PUSHBI 1
				>LDYA L.MSG.ERROR
				>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

.5				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
				bmi .2
				pha
				>LDA.G '>'
				>SYSCALL putchar
				pla
				bra .1
				
.2				>PUSHW.G SRC.LINENUM
				>PUSHBI 2
				>LDYA L.MSG.LINENUM
				>SYSCALL printf
	
				>LDA.G MAC.Depth
				
.3				dec
				bmi .4
				pha
				>LDA.G '>'
				>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.PrintLineAcc
				
				>LDA.G OUT.Buf
				beq .2
				
				tax
				clc
				adc #OUT.Buf
				tay
									
.1				>PUSHB (pData),y
				dey
				dex
				bne .1
				
.2				ldy #OUT.PC+1
				>PUSHB (pData),y
				dey
				>PUSHB (pData),y
				
				>LDA.G OUT.Buf
				pha
				inc
				inc
				>PUSHA					Byte Count+2 for PC
				pla
				asl
				tax
				ldy L.MSG.OUT0,x
				lda L.MSG.OUT0+1,x
				>SYSCALL printf
				rts
*---------------------------------------
OUT.PrintLineAcc
				lda SRC.ACC.SIZE
				beq .2
				
				tax
				ldy #0
				
.1				>PUSHB SRC.ACC,y
				iny
				dex
				bne .1
				
				lda SRC.ACC.SIZE

.2				>PUSHA					Byte Count
				asl
				tax
				
				cpx #9
				bcs *

				ldy L.MSG.EQU0,x
				lda L.MSG.EQU0+1,x
				>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		>PUSHBI 0
				>LDYA L.MSG.CRLF
				>SYSCALL printf
				>DEBUG
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
