NEW
  AUTO 3,1
				.LIST OFF
*--------------------------------------
PrintFYA		sty PrintFYA.Next+1
				sta PrintFYA.Next+2

				pla 
				sta PrintFYA.99+1
				pla 
				sta PrintFYA.98+1

				lda $C011				RDLCBNK2
				sta PrintFYA.91+1

				lda $C012				RDLCRAM
				sta PrintFYA.90+1

				lda $C08A				RROMBNK1, make sure $D000-$FFFF ROM selected 
				lda $CFFF				get access to $C800-$CFFF internal ROM

PrintFYA.1		stz X.b0Flag
				stz X.DigitCount
				jsr PrintFYA.Next
				beq PrintFYA.90
				cmp #'%'
				bne .7

.2				jsr PrintFYA.Next
				beq PrintFYA.90
				cmp #'0'
				bne .3

				ror	X.b0Flag			beq -> CS
				bra .2

.3				bcc .4

				cmp #'9'+1
				bcs .4

				and #$0f
				sta X.DigitCount
				bra .2

.4				ldx #PrintFYA.Tbl-PrintFYA.Esc-1

.5				cmp PrintFYA.Esc,x
				beq .6

				dex
				bpl .5

				bra PrintFYA.1

.6				txa
				asl
				tax
				jmp (PrintFYA.Tbl,x)

.7				ora #$80
				jsr $FDED				COUT
				bra PrintFYA.1

PrintFYA.90		lda #$ff
				bpl PrintFYA.98			ROM was selected, nothing to do
PrintFYA.91		lda #$ff
				bmi PrintFYA.92			RAM bank 2 was selected
				ldx #$8B				RRAMWRAMBNK1
				.HS 2C					bit abs
PrintFYA.92		ldx #$83				RRAMWRAMBNK2

				lda $C000,x
				lda $C000,x
PrintFYA.98		lda #$ff				Self modified RTS HI
				pha 
PrintFYA.99		lda #$ff				Self modified RTS LO
				pha
	
				rts
*--------------------------------------
PrintFYA.Next	lda $ffff
				beq .8

				inc PrintFYA.Next+1
				bne .8

				inc PrintFYA.Next+2	Always !=0	

.8				rts
*--------------------------------------			
PrintFYA.Esc	.AS "dDhHS"
PrintFYA.Tbl	.DA PrintFYA.D
				.DA PrintFYA.DD
				.DA PrintFYA.H
				.DA PrintFYA.HH
				.DA PrintFYA.S
*--------------------------------------
PrintFYA.D		ldx #0
				.HS	D0					bne
PrintFYA.DD		plx
				pla
				sta X.HexBuffer
				stx X.HexBuffer+1
				stz X.BCDBuffer
				stz X.BCDBuffer+1
				stz X.BCDBuffer+2
				ldx #16			let's roll 16 bits
				sed

.2				asl X.HexBuffer
				rol	X.HexBuffer+1
				php				cpy will disturb carry while BCD adc
				ldy #0

.3				plp

				lda X.BCDBuffer,y
				adc X.BCDBuffer,y
				sta X.BCDBuffer,y
				php
				iny
				cpy #3			Last byte of X.BCDBufferBUF?
				bne .3

				plp
				dex
				bne .2

				cld
				ldx #0
				ldy #5

.4				lda X.BCDBuffer,x
				pha
				and #$0F
				ora #$B0
				sta X.DigitBuffer,y
				dey

				pla
				lsr
				lsr
				lsr
				lsr
				ora #$B0
				sta X.DigitBuffer,y
				inx
				dey
				bpl .4

				lda X.DigitCount
				beq .5

				lda #6
				sec
				sbc X.DigitCount

.5				tay

.6				lda X.DigitBuffer,y
				cmp #"0"
				beq .7

				sec
				ror X.b0Flag
				bra .8

.7				cpy #5
				beq .8

				lda #" "
				bit X.b0Flag
				bpl .81

				lda #"0"

.8				phy
				jsr $FDED				COUT
				ply

.81				iny
				cpy #6
				bne .6

.9				jmp PrintFYA.1
*--------------------------------------
PrintFYA.HH		pla
				jsr $FDDA				PRBYTE
PrintFYA.H		pla
				jsr $FDDA				PRBYTE
				jmp PrintFYA.1
*--------------------------------------
PrintFYA.S		pla
				sta .1+2
				sta .2+2
				pla
				sta .1+1
				sta .2+1

.1				lda $ffff
				beq .9

				tax
				ldy #1

.2				lda $ffff,y		
				ora #$80
				jsr $FDED				COUT
				iny
				dex
				bne .2

.9				jmp PrintFYA.1
*--------------------------------------
X.HexBuffer		.BS 2
X.BCDBuffer		.BS 3
X.b0Flag		.BS 1
X.DigitCount	.BS 1
X.DigitBuffer	.BS 6
*--------------------------------------
MAN
SAVE usr/src/shared/x.printf.s
