NEW PREFIX /A2OSX.BUILD AUTO 4,1 *--------------------------------------- DIR.Init lda #$80 ldy #ASM.LI.ON sta (pData),y lda #0 ldy #ASM.LI.CON 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 sta DIR.Word Save delimiter.... sta DIR.Word+1 Save also in prev char.. .1 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 .1 yes, skip jsr OUT.EmitByte no, emit prev char bcc .1 .9 lda #ERR.SYNTAX.ERROR sec rts .8 lda DIR.Word+1 Get prev char cmp DIR.Word someone typed .AS "" ? beq .80 ora DIR.Byte jmp OUT.EmitByte .80 clc rts *--------------------------------------- DIR.AZ jsr DIR.AS bcs .9 lda #0 jmp OUT.EmitByte .9 rts *--------------------------------------- DIR.BS jsr SRC.GetNextChar 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 #ERR.RANGE sec rts .98 lda #ERR.SYNTAX.ERROR sec rts *--------------------------------------- DIR.DA .1 jsr SRC.GetNextChar bcs .98 jsr EXP.Eval bcs .9 lda SRC.ACC.SIZE jsr SRC.GetNextChar bcs .8 cmp #' ' beq .8 cmp #',' beq .1 .98 lda #ERR.SYNTAX.ERROR clc .9 rts .8 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.MACRO.INV.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.INV.DIR sec rts *--------------------------------------- DIR.EQ >LDA.G SYM.bGlobal beq .99 jsr SRC.GetNextCharNB bcs .99 jsr EXP.Eval bcs .9 jsr SYM.UpdateGlobalAcc bcs .9 clc rts .99 lda #ERR.SYNTAX.ERROR sec .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.INV.DIR sec rts *--------------------------------------- DIR.HS jsr SRC.GetNextCharNB bcs .99 jsr SRC.IsDigit16 bcs .99 .1 asl asl asl asl >STA.G DIR.Byte jsr SRC.GetNextChar bcs .99 jsr SRC.IsDigit16 bcs .99 >ORA.G DIR.Byte jsr OUT.EmitByte bcs .9 jsr SRC.GetNextChar bcs .8 cmp #' ' beq .8 jsr SRC.IsDigit16 bcc .1 cmp #',' beq .2 cmp #'.' bne .99 .2 jsr SRC.GetNextChar bcs .99 jsr SRC.IsDigit16 bcc .1 .99 lda #ERR.SYNTAX.ERROR sec .9 rts .8 clc rts *--------------------------------------- DIR.IN jsr SRC.GetNextCharNB bcs .9 >LDYA ZPLinePtr >SYSCALL RealPath.YA phx jsr FIO.OpenFile plx php pha txa >SYSCALL FreeMem.A pla plp rts .9 lda #ERR.SYNTAX.ERROR sec rts *--------------------------------------- DIR.LI jsr SRC.GetNextCharNB bcs DIR.LI.9 >LDYA L.T.LI jsr SRC.GetKeyword bcs DIR.LI.9 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 asl sta (pData),y clc rts DIR.LI.9 lda #ERR.SYNTAX.ERROR sec rts *--------------------------------------- DIR.MA >LDA.G MAC.bAdd bmi .9 >LDA.G ASM.PASS If Pass#2, ignore bne .8 jsr SRC.GetNextCharNB beq DIR.OP.SYNERR jsr MAC.Clear .8 lda #$ff >STA.G MAC.bAdd clc rts .9 lda #ERR.MACRO.INV.DEF sec rts *--------------------------------------- DIR.OP jsr SRC.GetNextCharNB beq DIR.OP.SYNERR >LDYA ZPLinePtr jmp FIO.LOAD.ASM.T DIR.OP.SYNERR lda #ERR.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 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.INV.DIR sec rts *--------------------------------------- DIR.SE clc rts *--------------------------------------- DIR.TA clc rts *--------------------------------------- DIR.TF clc rts *--------------------------------------- DIR.TI clc rts *--------------------------------------- DIR.US clc rts *--------------------------------------- MAN SAVE /A2OSX.BUILD/BIN/DEV/ASM.S.DIR LOAD /A2OSX.BUILD/BIN/DEV/ASM.S ASM