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.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 #ERR.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 #ERR.RANGE sec rts .98 lda #ERR.SYNTAX.ERROR sec rts *--------------------------------------- DIR.DA jsr SRC.GetNextCharNB bcs .98 .1 jsr EXP.Eval bcs .9 lda SRC.ACC.SIZE jsr SRC.GetNextChar bcs .8 cmp #' ' beq .8 cmp #',' bne .98 jsr SRC.GetNextChar bcc .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.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 #ERR.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 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