NEW
  PREFIX
AUTO 4,1
*---------------------------------------
DIR.Reset		lda #$80
				ldy #ASM.LI.ON
				sta (pData),y

				lda #0
				ldy #ASM.LI.CON
				sta (pData),y
				ldy #ASM.LI.MON
				sta (pData),y
				ldy #ASM.LI.XON
				sta (pData),y
				rts
*---------------------------------------
DIR.AC			clc
				rts
*---------------------------------------
DIR.AT			sec
				.HS 90				BCC
*---------------------------------------
DIR.AS			clc
				lda #0
				ror 
				sta DIR.Byte		Save b7 of last char in string
				
				jsr	SRC.GetNextChar
				bcs .9
				cmp #'-'
				bne .1
				
				lda #$40			save b7 status of ALL chars
				tsb DIR.Byte
				
				jsr	SRC.GetNextChar
				bcs .9
				
.1				sta DIR.Word		Save delimiter....
				sta DIR.Word+1		Save also in prev char..
				
.2				jsr	SRC.GetNextChar
				bcs .8
				
				cmp DIR.Word		delimiter ?
				beq .8
				
				ldx DIR.Word+1		Get prev char
				sta DIR.Word+1		replace it with new
				txa
				cmp DIR.Word		is it the starting delimiter
				beq .2				yes, skip
				
				bit DIR.Byte
				bvc .3
				
				ora #$80
				
.3				jsr OUT.EmitByte	no, emit prev char
				bcc .2
				
.9				lda #E.SYNTAX.ERROR
				sec
				rts

.8				lda DIR.Word+1		Get prev char
				cmp DIR.Word		someone typed .AS "" ?
				beq .88
				
				bit DIR.Byte
				bpl .81
				eor #$80

.81				jmp OUT.EmitByte

.88				clc
				rts					
*---------------------------------------
DIR.AZ			jsr DIR.AS
				bcs .9
				
				lda #0
				jmp OUT.EmitByte
.9				rts
*---------------------------------------
DIR.BS			jsr SRC.GetNextCharNB
				bcs .98

				jsr EXP.Eval
				bcs .9
				
				lda SRC.ACC+3
				ora SRC.ACC+2
				bne .99
				lda SRC.ACC
				eor #$ff
				sta DIR.Word
				lda SRC.ACC+1
				eor #$ff
				sta DIR.Word+1
				
				stz DIR.Byte
				
				jsr SRC.GetNextChar
				bcs .1
				cmp #' '
				beq .1
				
				cmp #','
				bne .98
				jsr EXP.Eval
				bcs .9
				
				lda SRC.ACC+3
				ora SRC.ACC+2
				ora SRC.ACC+1
				bne .99
				lda SRC.ACC
				sta DIR.Byte
				
.1				inc DIR.Word
				bne .2
				inc DIR.Word+1
				beq .8
				
.2				lda DIR.Byte
				jsr OUT.EmitByte
				bcc .1
				rts
				
.8				clc
.9				rts
				
.99				lda #E.RANGE
				sec
				rts
				
.98				lda #E.SYNTAX.ERROR
				sec
				rts
*---------------------------------------
DIR.DA			jsr SRC.GetNextCharNB
				bcs .98
				
.1				jsr EXP.Eval
				bcs .9
				
				ldx SRC.ACC.SIZE
				bne .10

				ldx #2
				
.10				ldy #0

.2				lda SRC.ACC,y
				jsr OUT.EmitByte
				bcs .9
				
				iny
				dex
				bne .2
				
.3				jsr	SRC.GetNextChar
				bcs .8
				cmp #' '
				beq .8
				
				cmp #','
				bne .98
				jsr	SRC.GetNextChar
				bcc .1
				
.98				lda #E.SYNTAX.ERROR
				clc
.9				rts
				
.8				clc
				rts
*---------------------------------------
DIR.DO			>LDA.G ASM.DO.StackPtr
				inc
				cmp #DO.MAXDEPTH
				bcs .98
				
				jsr	SRC.GetNextCharNB
				bcs .99
				
				jsr EXP.Eval
				bcs .99
				
				>INC.G ASM.DO.StackPtr
*				clc					ok from bcs .99
				adc #ASM.DO.Stack-1
				tay
				
				lda SRC.ACC
				ora SRC.ACC+1
				ora SRC.ACC+2
				ora SRC.ACC+3
				beq .1
				
				lda #$ff
									
.1				sta (pData),y
				lda #$FF
				>STA.G ASM.DO.ON
				clc
				rts
				
.98				lda #E.TOO.MANY.DO
				sec
.99				rts
*---------------------------------------
DIR.DU			>LDA.G ASM.DU.ON
				bmi DIR.DU.ERR

				lda #$80
				sta (pData),y
				
				ldy #ASM.PC.DU
				jsr DIR.SavePC
				
				clc
				rts
				
DIR.DU.ERR		lda #E.INV.DIR
				sec
				rts
*---------------------------------------
DIR.ED			>LDA.G ASM.DU.ON
				bpl DIR.DU.ERR
				
				lda #0
				sta (pData),y
				
				ldy #ASM.PC.DU
				jsr DIR.RestorePC

				clc
				rts
				
.9				lda #E.INV.DIR
				sec
				rts
*---------------------------------------
DIR.EL			>LDA.G ASM.DO.StackPtr
				beq .9
				
				clc
				adc #ASM.DO.Stack-1
				tay
				lda (pData),y
				eor #$ff
				sta (pData),y
				
				clc
				rts
				
.9				lda #E.ELSE.WITHOUT.DO
				sec
				rts
*---------------------------------------
DIR.EM			lda #E.MACRO.INV.DEF
				sec
				rts
*---------------------------------------					
DIR.EN			clc
				rts
*---------------------------------------
DIR.EP			>LDA.G ASM.PH.ON
				bpl .9
				
				lda #0
				sta (pData),y
				
				ldy #ASM.PC.PH

				jsr DIR.RestorePC
				clc
				rts
				
.9				lda #E.INV.DIR
				sec
				rts
*---------------------------------------
DIR.SE			sec
				.HS 90					BCC
*---------------------------------------
DIR.EQ			clc

				>LDA.G SYM.bInGlobal
				bpl .99
				
				jsr	SRC.GetNextCharNB
				bcs .99

				lda #$ff
				>STA.G OUT.bEquate
				
				>LDA.G ASM.PASS
				bne .2

				jsr EXP.Eval			PASS#1
				bcs .9
				
				jsr SYM.Acc2Global
				jmp SYM.StoreGlobal
								
.2				lda (ZPSymbolBuf)		PASS#2
				and #SYMG.F.FWREF
				beq .3

				jsr EXP.Eval
				bcs .9
				
				jmp SYM.UpdateGlobal
				
.3				ldy #SYMG-1				copy back value for OUT.Print

.4				lda (ZPSymbolBuf),y
				sta SRC.ACC.F,y
				dey
				bpl .4

				clc
				rts

.99				lda #E.SYNTAX.ERROR
				sec
.9				rts
*---------------------------------------
DIR.FI			ldy #ASM.DO.StackPtr
				lda (pData),y
				beq .99
				dec
				sta (pData),y
				bne .1
				
				lda #$0
				ldy #ASM.DO.ON
				sta (pData),y
				
.1				clc
				rts
				
.99				lda #E.INV.DIR
				sec
				rts
*---------------------------------------
DIR.HS			jsr SRC.GetNextCharNB
				bcs .99
				
				jsr SRC.IsDigit16
				bcs .99
				
.1				>STA.G DIR.Byte
				
				jsr	SRC.GetNextChar
				bcc .2
						
				jmp OUT.EmitByte
				
.2				jsr SRC.IsDigit16
				bcc .3
				
				cmp #','
				beq .22

				cmp #'.'
				bne .99

.22				>LDA.G DIR.Byte
				jsr OUT.EmitByte
				bcc .5
				rts
				
.3				pha
				>LDA.G DIR.Byte
				asl
				asl
				asl
				asl
				>STA.G DIR.Byte
				
				pla
				>ORA.G DIR.Byte
				
				
.4				jsr OUT.EmitByte
				bcs .9
				
				jsr	SRC.GetNextChar
				bcs .8
				cmp #' '
				beq .8
				
				jsr SRC.IsDigit16
				bcc .1
				
				cmp #','
				beq .5

				cmp #'.'
				bne .99
				
.5				jsr	SRC.GetNextChar
				bcs .99
				jsr SRC.IsDigit16
				bcc .1
				
.99				lda #E.SYNTAX.ERROR
				sec
.9				rts					

.8				clc
				rts
*---------------------------------------
DIR.IN			jsr SRC.GetNextCharNB
				bcs .9
				
				>LDYA ZPLinePtr
				jmp FIO.OpenFile
				
.9				lda #E.SYNTAX.ERROR
				sec
				rts
*---------------------------------------
DIR.LI			jsr SRC.GetNextChar
				bcs .9

				>LDYA L.T.LI
				jsr SRC.GetKeyword
				bcs .9
					
				jsr .7

				jsr	SRC.GetChar
				bcs .8
				
				cmp #','
				beq DIR.LI
				cmp #' '
				beq .8
				
.9				lda #E.SYNTAX.ERROR
				sec
				rts
					
.7				jmp (J.LI,x)

.8				clc
				rts
				
DIR.LI.ON		ldy #ASM.LI.ON
				sec 
				bra DIR.LI.APPLY
				
DIR.LI.OFF		ldy #ASM.LI.ON
				clc 
				bra DIR.LI.APPLY
				
DIR.LI.CON		ldy #ASM.LI.CON
				sec 
				bra DIR.LI.APPLY
				
DIR.LI.COFF		ldy #ASM.LI.CON
				clc
				bra DIR.LI.APPLY

DIR.LI.MON		ldy #ASM.LI.MON
				sec 
				bra DIR.LI.APPLY
				
DIR.LI.MOFF		ldy #ASM.LI.MON
				clc 
				bra DIR.LI.APPLY
				
DIR.LI.XON		ldy #ASM.LI.XON
				sec 
				bra DIR.LI.APPLY
				
DIR.LI.XOFF		ldy #ASM.LI.XON
				clc 
				
DIR.LI.APPLY	lda #0
				ror

				sta (pData),y
				rts
*---------------------------------------
DIR.MA			>LDA.G ASM.MA.ON
				bmi .9

				>LDA.G ASM.PASS		If Pass#2, ignore
				bne .8

				jsr SRC.GetNextCharNB
				beq DIR.OP.SYNERR
				
				>PUSHW ZPLinePtr
				>LDA.G MAC.hList
				>SYSCALL SListNewKey
				bcs .99
				>STYA.G MAC.ID
				
.8				lda #$ff
				>STA.G ASM.MA.ON
				
				clc
				rts
				
.9				lda #E.MACRO.INV.DEF
				sec
.99				rts
*---------------------------------------
DIR.OP			jsr SRC.GetNextCharNB
				bcs DIR.OP.SYNERR
				
				>LDYA ZPLinePtr
				jmp FIO.LOAD.ASM.T
				
DIR.OP.SYNERR	lda #E.SYNTAX.ERROR
				sec
				rts
*---------------------------------------
DIR.OR			jsr SRC.GetNextCharNB
				bcs DIR.OP.SYNERR
				
				jsr EXP.Eval
				bcs .9
				
				ldy #ASM.PC
				ldx #0
				
.1				lda SRC.ACC,x
				sta (pData),y
				inx
				iny
				cpx #4
				bne .1
				clc
.9				rts
*---------------------------------------
DIR.PG			clc
				rts
*---------------------------------------
DIR.PH			>LDA.G ASM.PH.ON
				bmi .9
				
				lda #$80
				sta (pData),y
				
				ldy #ASM.PC.PH
				jsr DIR.SavePC

				jmp DIR.OR
				
.9				lda #E.INV.DIR
				sec
				rts
*---------------------------------------
DIR.TA			clc
				rts
*---------------------------------------
DIR.TF			clc
				rts
*---------------------------------------
DIR.TI			clc
				rts
*---------------------------------------
DIR.US			clc
				rts
*---------------------------------------
DIR.SavePC		phy
				plx
				
				ldy #ASM.PC+3
				
.1				lda (pData),y
				pha
				dey
				cpy #ASM.PC-1
				bne .1
				
				phx
				ply
				
				ldx #3
				
.2				pla
				sta (pData),y
				iny
				dex
				bpl .2

				rts
*---------------------------------------
DIR.RestorePC	ldx #3
				
.1				lda (pData),y
				pha
				iny
				dex
				bpl .1
				
				ldy #ASM.PC+3
				ldx #3
				
.2				pla
				sta (pData),y
				dey
				dex
				bpl .2
				
				rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.DIR
LOAD USR/SRC/BIN/ASM.S
ASM
