NEW AUTO 3,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 >PUSHB.G MAC.hList >PUSHW ZPLinePtr >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.CPU 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