PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
					.LIST OFF
*---------------------------------------
DIR.Init			lda #$00
					ldy #ASM.LI.CON
					sta (pData),y
					ldy #ASM.LI.XON
					sta (pData),y

					lda #$80
					ldy #ASM.LI.ON
					sta (pData),y
					rts
*---------------------------------------
DIR.AC				clc
					rts
*---------------------------------------
DIR.AS				clc
					rts
*---------------------------------------
DIR.AT				clc
					rts
*---------------------------------------
DIR.AZ				clc
					rts
*---------------------------------------
DIR.BS				jsr EXP.Eval
					bcs .9
					
					lda SRC.ACC+3
					ora SRC.ACC+2
					bne .99
					lda SRC.ACC
					sta DIR.Counter
					lda SRC.ACC+1
					bmi .99
					sta DIR.Counter+1
					
					stz DIR.Byte
					
					jsr SRC.GetChar
					beq .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					ldy #ASM.PC
					lda (pData),y
					clc
					adc DIR.Counter
					sta (pData),y
					iny
					lda (pData),y
					adc DIR.Counter+1
					sta (pData),y

.2					lda DIR.Counter
					bne .3
					lda DIR.Counter+1
					beq .8
					dec DIR.Counter+1
					
.3					dec DIR.Counter
					
					lda DIR.Byte
					jsr FIO.EmitByte
					bcc .2
					rts
					
.8					clc
.9					rts
					
.99					lda #ERR.RANGE
					sec
					rts
.98					lda #ERR.SYNTAX.ERROR
					sec
					rts
*---------------------------------------
DIR.DA				clc
					rts
*---------------------------------------
DIR.DO				ldy #ASM.DO.Count
					lda (pData),y
					inc
					cmp #SRC.DO.MAXDEPTH
					bcs .98
					
					jsr EXP.Eval
					bcs .99
					
					ldy #ASM.DO.Count
					lda (pData),y
					inc
					sta (pData),y
*					clc					ok from bcs .99
					adc #ASM.DOELSE.Flag-1
					tay
					
					lda SRC.ACC
					ora SRC.ACC+1
					ora SRC.ACC+2
					ora SRC.ACC+3		if
										
					sta (pData),y
					lda #$FF
					ldy #ASM.DO.ON
					sta (pData),y
					clc
					rts
					
.98					lda #ERR.TOO.MANY.DO
					sec
.99					rts
*---------------------------------------
DIR.DU				clc
					rts
*---------------------------------------
DIR.ED				clc
					rts
*---------------------------------------
DIR.EL				clc
					rts
*---------------------------------------
DIR.EM				lda #ERR.INVALID.MACRO.DEF
					sec
					rts
*---------------------------------------					
DIR.EN				clc
					rts
*---------------------------------------
DIR.EP				ldy #ASM.PH.ON
					lda (pData),y
					bpl .9
					
					lda #0
					sta (pData),y
					
					ldy #ASM.PC.PH+3
					ldx #3
					
.1					lda (pData),y
					pha
					dey
					dex
					bpl .1
					
					ldy #ASM.PC
					ldx #3
					
.2					pla
					sta (pData),y
					iny
					dex
					bpl .2
					clc
					rts
					
.9					lda #ERR.INVALID.DIRECTIVE
					sec
					rts
*---------------------------------------
DIR.EQ				jsr EXP.Eval
					bcs .9

					ldx #3
.1					lda SRC.ACC,x
					sta SRC.GLabel.Value,x
					dex
					bpl .1
					
					clc
.9					rts
*---------------------------------------
DIR.FI				ldy #ASM.DO.Count
					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 #ERR.INVALID.DIRECTIVE
					sec
					rts
*---------------------------------------
DIR.HS				clc
					rts
*---------------------------------------
DIR.IN				jsr SRC.GetArg
					bcs .9
					
					>LDYA L.SRC.BUFFER
					>SYSCALL SYS.NewPStrYA
					
					phx
					
					jsr FIO.OpenFileA
					plx
					php
					pha
					
					txa
					>SYSCALL SYS.FreeMemA
					
					pla
					plp
					rts
					
					
.9					lda #ERR.SYNTAX.ERROR
					sec
					rts
*---------------------------------------
DIR.LI				>LDYA L.T.LI
					jsr SRC.GetKeyword
					bcc .1
					
					lda #ERR.SYNTAX.ERROR
					sec
					rts
					
.1					jmp (J.LI,x)
					
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.XON			ldy #ASM.LI.XON
					sec 
					bra DIR.LI.APPLY
DIR.LI.XOFF			ldy #ASM.LI.XON
					clc 
					bra DIR.LI.APPLY
DIR.LI.ON			ldy #ASM.LI.ON
					sec 
					bra DIR.LI.APPLY
DIR.LI.OFF			ldy #ASM.LI.ON
					clc 
DIR.LI.APPLY		lsr

					sta (pData),y
					rts
*---------------------------------------
DIR.MA				jsr SRC.GetArg
					bcs .9
					
.1					jsr FIO.ReadLine
					bcs .99
					
					lda UsrBuf256
					beq .1
					
					cmp #'*'			Comment?
					beq .8
					cmp #';'			Comment?
					beq .8
					
					cmp #' '			no label...go scan dir/opcode
					beq .3		

.2					jsr SRC.GetChar		skip label
					beq .8
					cmp #' '
					bne .2
					
.3					jsr SRC.GetCharNB	Scan for an Opcode...
					beq .8
					cmp #'.'
					bne .8
					
					jsr SRC.GetChar
					beq .8
					cmp #'E'
					bne .8
					jsr SRC.GetChar
					beq .8
					cmp #'M'
					bne .8
					clc
					rts

.8					ldy #ASM.PASS		If Pass#2, ignore
					lda (pData),y
					bne .1
					
					
					
					bra .1
					clc
					rts
					
.9					lda #ERR.INVALID.MACRO.DEF
					sec
.99					rts
*---------------------------------------
DIR.OP				jsr SRC.GetArg
					bcs .9
					
					ldx SRC.Buffer
					lda ASM.T.FILENAMELEN
					adc SRC.Buffer
					sta ASM.T.FILENAME
					tay
					
.1					lda SRC.Buffer,x
					sta ASM.T.FILENAME,y
					dey
					dex
					bne .1
					
					jmp FIO.LOAD.ASM.T
					
.9					lda #ERR.SYNTAX.ERROR
					sec
					rts
*---------------------------------------
DIR.OR				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				ldy #ASM.PH.ON
					lda (pData),y
					bmi .9
					
					lda #$80
					sta (pData),y
					
					ldy #ASM.PC+3
					ldx #3
					
.1					lda (pData),y
					pha
					dey
					dex
					bpl .1
					
					ldy #ASM.PC.PH
					ldx #3
					
.2					pla
					sta (pData),y
					iny
					dex
					bpl .2

					jmp DIR.OR
					
.9					lda #ERR.INVALID.DIRECTIVE
					sec
					rts
*---------------------------------------
DIR.SE				clc
					rts
*---------------------------------------
DIR.TA				clc
					rts
*---------------------------------------
DIR.TF				clc
					rts
*---------------------------------------
DIR.TI				clc
					rts
*---------------------------------------
DIR.US				clc
					rts
*---------------------------------------
MAN
SAVE BIN/ASM.S.DIR
LOAD BIN/ASM.S
ASM
