diff --git a/.Floppies/A2OSX.BOOTHD.woz b/.Floppies/A2OSX.BOOTHD.woz index a16065a4..73fd6498 100644 Binary files a/.Floppies/A2OSX.BOOTHD.woz and b/.Floppies/A2OSX.BOOTHD.woz differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 35f6b63b..25401196 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index e3251443..3a9e64d2 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/BIN/ACOS.S.CODE.txt b/BIN/ACOS.S.CODE.txt new file mode 100644 index 00000000..3c4322e4 --- /dev/null +++ b/BIN/ACOS.S.CODE.txt @@ -0,0 +1,140 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +CODE.PUSHINT32 ldy #3 + +.1 lda #$A9 LDA #imm + jsr CODE.EmitByte + + lda (pStack),y + jsr CODE.EmitByte + + jsr CODE.PUSHA + dey + bpl .1 + + rts +*-------------------------------------- +CODE.PULLL2ZPADDR + >LDYA ZPADDR + jsr CODE.LDYAI + + ldx #0 + +.1 lda CCODE.PULLLYA,x + jsr CODE.EmitByte + inx + cpx #CCODE.PULLLYA.LEN + bne .1 + + rts +*-------------------------------------- +CODE.PUSHfZPADDR + >LDYA ZPADDR +CODE.PUSHfYA jsr CODE.LDYAI + + ldx #0 + +.1 lda CCODE.PUSHLYA,x + jsr CODE.EmitByte + inx + cpx #CCODE.PUSHLYA.LEN + bne .1 + + rts +*-------------------------------------- +CODE.LDYAI pha + lda #$A0 LDY #imm + jsr CODE.EmitByte + tya + jsr CODE.EmitByte + + lda #$A9 LDA #imm + jsr CODE.EmitByte + pla + jmp CODE.EmitByte +*-------------------------------------- +CODE.PUSHA ldx #0 + +.1 lda CCODE.PUSHA,x + jsr CODE.EmitByte + inx + cpx #CCODE.PUSHA.LEN + bne .1 + + rts +*-------------------------------------- +CODE.PULLA ldx #0 + +.1 lda CCODE.PULLA,x + jsr CODE.EmitByte + inx + cpx #CCODE.PULLA.LEN + bne .1 + + rts +*-------------------------------------- +CODE.FPRINTSTR ldx #0 + +.1 lda CCODE.FPRINTSTR,x + jsr CODE.EmitByte + inx + cpx #CCODE.FPRINTSTR.LEN + bne .1 + + rts +*-------------------------------------- +CODE.FPRINTL ldx #0 + +.1 lda CCODE.FPRINTL,x + jsr CODE.EmitByte + inx + cpx #CCODE.FPRINTL.LEN + bne .1 + + rts +*-------------------------------------- +CODE.FPRINTCR ldx #0 + +.1 lda CCODE.FPRINTCR,x + jsr CODE.EmitByte + inx + cpx #CCODE.FPRINTCR.LEN + bne .1 + + rts +*-------------------------------------- +CODE.FPUCALL lda #$A2 LDX #imm + jsr CODE.EmitByte + txa + jsr CODE.EmitByte + lda #$20 JSR + jsr CODE.EmitByte + lda #A2osX.FPUCALL + jsr CODE.EmitByte + lda /A2osX.FPUCALL + bra CODE.EmitByte +*-------------------------------------- +CODE.SYSCALL lda #$A2 LDX #imm + jsr CODE.EmitByte + txa + jsr CODE.EmitByte + lda #$20 JSR + jsr CODE.EmitByte + lda #A2osX.SYSCALL + jsr CODE.EmitByte + lda /A2osX.SYSCALL +*-------------------------------------- +CODE.EmitByte sta (ZPCodeBufPtr) + inc ZPCodeBufPtr + bne .8 + + inc ZPCodeBufPtr+1 + +.8 rts +*-------------------------------------- +MAN +SAVE usr/src/bin/acos.s.code +LOAD usr/src/bin/acos.s +ASM diff --git a/BIN/ACOS.S.CORE.txt b/BIN/ACOS.S.CORE.txt new file mode 100644 index 00000000..016e42b4 --- /dev/null +++ b/BIN/ACOS.S.CORE.txt @@ -0,0 +1,463 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +CORE.Init >LDYAI CODESEG + >SYSCALL GetMem + bcs .9 + + >STYA ZPCodeBufPtr + txa + >STA.G hCodeBuf + + >LDYAI CONSTSEG + >SYSCALL GetMem + bcs .9 + + >STYA ZPConstBufPtr + txa + >STA.G hConstBuf + + >LDYAI DATASEG + >SYSCALL GetMem + bcs .9 + + >STYA ZPDataBufPtr + txa + >STA.G hDataBuf + + >SYSCALL SListNew + bcs .9 + + >STA.G hLabels + + >SYSCALL SListNew + bcs .9 + + >STA.G hVars + + clc +.9 rts +*-------------------------------------- +CORE.Quit >LDA.G hConstBuf + beq .1 + + >SYSCALL FreeMem + +.1 >LDA.G hCodeBuf + beq CORE.Cleanup + + >SYSCALL FreeMem +*-------------------------------------- +CORE.Cleanup >LDA.G hVars + beq .1 + + >PUSHA + >SYSCALL SListFree + + >STZ.G hVars + +.1 >LDA.G hLabels + beq .8 + + >PUSHA + >SYSCALL SListFree + + >STZ.G hLabels + +.8 clc +CORE.Quit.RTS rts +*-------------------------------------- +CORE.Compile jsr CORE.GetChar + bcs CORE.Quit.RTS + + cmp #'#' + beq .80 #/bin/acos.... + + cmp #';' + beq .80 Comment: skip line... + + cmp #C.CR + beq .81 Blank line... + + jsr CORE.CheckCharNB + bcs .1 CS=SPACE -> go check VAR or KW + + jsr CORE.IsLetter LABEL must start with a letter + bcs .99 + + jsr CORE.CreateLabel + bcs .99 + + bra .8 +*-------------------------------------- +.1 jsr CORE.GetNextCharNB skip SPACE(s) or ":" + bcs .99 + + + jsr CORE.IsLetter + bcs .90 + + >LDYA L.ACOS.KW + jsr CORE.Lookup + bcs .3 + + jmp (J.ACOS.KW,x) +*-------------------------------------- +.3 jsr CORE.CreateOrGetVar + bcs .90 + + jsr CORE.GetCharNB + bcs .90 + + cmp #'=' + bne .90 + + jsr CORE.GetNextCharNB skip '=' + bcs .90 + + jsr EXP.Eval + bcs .99 + + jsr CODE.PULLL2ZPADDR Store Int32 result in DATASEG +*-------------------------------------- +.8 jsr CORE.GetCharNB + bcs .99 + + jsr CORE.IsEndInst + bcc .90 + + cmp #':' + beq .1 + + clc + +.81 jmp CORE.GetNextChar skip char + +.80 jmp CORE.SkipLine + +.90 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +CORE.Run lda #$60 RTS + sta (ZPCodeBufPtr) + + jsr CORE.Cleanup + + lda ZPCodeBufPtr + sta ZPPtr1 + + lda ZPCodeBufPtr+1 + sta ZPPtr1+1 + + >LDA.G hCodeBuf + >SYSCALL GetMemPtr + >STYA ZPCodeBufPtr + + lda ZPPtr1 + sec + sbc ZPCodeBufPtr + sta ZPPtr2 + + lda ZPPtr1+1 + sbc ZPCodeBufPtr + sta ZPPtr1+2 + + >PUSHW L.MSG.RUN + >PUSHW ZPPtr1 + >PUSHBI 2 + >SYSCALL PrintF +* >DEBUG + jmp (ZPCodeBufPtr) +*-------------------------------------- +CORE.Lookup >STYA ZPPtr1 + + ldx #0 + +.1 ldy #$ff + +.2 jsr .7 get next valid char in src text + bcs .3 + +.20 jsr CORE.ToUpperCase + eor (ZPPtr1),y match table char ? + asl compare only 7 bits + bne .4 no match...get next table keyword + + bcc .2 not last char in this keyword + + jsr .7 next char in text... + bcc .4 valid....failed + +.8 tya Keyword Len + + clc + adc ZPInputBufPtr + sta ZPInputBufPtr + bcc .80 + + clc + + inc ZPInputBufPtr+1 + +.80 rts + +.3 dey + lda (ZPPtr1),y was last char in this keyword ? + bmi .8 + + iny +.41 jsr CORE.IncPtr1 skip chars to next keyword + +.4 lda (ZPPtr1) + bpl .41 + + jsr CORE.IncPtr1 + +.6 inx + inx + lda (ZPPtr1) Array Ending 0, lookup failed + bne .1 + +.9 sec + rts + +.7 iny + lda (ZPInputBufPtr),y Get Src text char... + beq .9 end of text + + jmp CORE.IsLetterOrDigit CS=end of valid chars +*-------------------------------------- +CORE.IncPtr1 inc ZPPtr1 + bne .8 + + inc ZPPtr1+1 + +.8 rts +*-------------------------------------- +CORE.CreateLabel + >LDA.G hLabels + jsr CORE.NewKey + bcs .9 + + >PUSHB.G hLabels + >PUSHW ZPSID + >PUSHWI ZPCodeBufPtr + >PUSHWI 2 + >SYSCALL SListAddData +.9 rts +*-------------------------------------- +CORE.CreateOrGetVar + >LDA.G hVars + jsr CORE.GetAddr + bcc .8 + + >LDA.G hVars + jsr CORE.NewKey + bcs .9 + + >PUSHB.G hVars + >PUSHW ZPSID + >PUSHWI ZPDataBufPtr + >PUSHWI 2 + >SYSCALL SListAddData + bcs .9 + + lda ZPDataBufPtr + sta ZPADDR + +* clc + adc #4 longint + sta ZPDataBufPtr + + lda ZPDataBufPtr+1 + sta ZPADDR+1 + adc #0 + sta ZPDataBufPtr+1 + +.8 +.9 rts +*-------------------------------------- +CORE.NewKey >PUSHA + >PUSHW ZPInputBufPtr + >SYSCALL SListNewKey + bcs .9 + + >STYA ZPSID + + txa +* clc + adc ZPInputBufPtr + sta ZPInputBufPtr + bcc .1 + + clc + inc ZPInputBufPtr+1 + +.1 +.9 rts +*-------------------------------------- +CORE.GetAddr >PUSHA + >PUSHA for SListGetData + + >PUSHW ZPInputBufPtr + >SYSCALL SListLookup + bcs .9 + + >STYA ZPSID + + txa +* clc + adc ZPInputBufPtr + sta ZPInputBufPtr + bcc .1 + + inc ZPInputBufPtr+1 + +.1 >PUSHW ZPSID + >PUSHWI ZPADDR + >PUSHWI 2 2 bytes + >PUSHWZ From Start + >SYSCALL SListGetData + rts + +.9 >PULLA + rts +*-------------------------------------- +CORE.ToUpperCase + cmp #'a' + bcc .8 + + cmp #'z'+1 + bcs .8 + + eor #$20 + +.8 +CORE.ToUpperCase.RTS + rts +*-------------------------------------- +CORE.IsAOPSChar ldx #0 + +.1 cmp ACOS.AOPSChars,x + beq .8 + + inx + cpx #ACOS.AOPSChars.Cnt + bcc .1 + + rts + +.8 txa + asl + tax + +* clc + rts +*-------------------------------------- +CORE.IsEndExp cmp #',' + beq CORE.ToUpperCase.RTS + + cmp #';' + beq CORE.ToUpperCase.RTS + +CORE.IsEndInst cmp #':' CS=TRUE + beq .8 + + cmp #C.CR + beq .8 + + clc + +.8 rts +*--------------------------------------- +CORE.IsLetterOrDigit + jsr CORE.IsDigit10 + bcc CORE.IsLetterRTS +*--------------------------------------- +CORE.IsLetter cmp #'_' + bne .1 + + clc + rts + +.1 cmp #'A' + bcc .9 + + cmp #'Z'+1 + bcc CORE.IsLetterRTS + + cmp #'a' + bcc .9 + + cmp #'z'+1 + + rts CC if lowercase + +.9 sec +CORE.IsLetterRTS + rts +*--------------------------------------- +CORE.IsDigit10 cmp #'0' + bcc .9 + + cmp #'9'+1 + rts cc if ok, cs if not + +.9 sec + rts +*-------------------------------------- +CORE.CheckCharNB + cmp #C.SPACE + beq .9 + + cmp #C.LF + beq .9 + + cmp #C.TAB + beq .9 + + clc +.9 rts +*-------------------------------------- +CORE.GetCharNB jsr CORE.GetChar + bcs CORE.GetNextCharNB.RTS + jsr CORE.CheckCharNB + bcc CORE.GetNextCharNB.RTS +*-------------------------------------- +CORE.GetNextCharNB + jsr CORE.GetNextChar + bcs CORE.GetNextCharNB.RTS + + jsr CORE.CheckCharNB + bcs CORE.GetNextCharNB + +CORE.GetNextCharNB.RTS + rts +*-------------------------------------- +CORE.SkipLine jsr CORE.GetNextChar + bcs CORE.GetNextCharNB.RTS + + cmp #C.CR + bne CORE.SkipLine +*-------------------------------------- +CORE.GetNextChar + inc ZPInputBufPtr + bne CORE.GetChar + inc ZPInputBufPtr+1 +*-------------------------------------- +CORE.GetChar lda (ZPInputBufPtr) + bne .8 + + lda #MLI.E.EOF + sec + rts + +.8 clc + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/acos.s.core +LOAD usr/src/bin/acos.s +ASM diff --git a/BIN/ACOS.S.EXP.txt b/BIN/ACOS.S.EXP.txt new file mode 100644 index 00000000..ef66456c --- /dev/null +++ b/BIN/ACOS.S.EXP.txt @@ -0,0 +1,148 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +* In: A = current CHAR +* Out: CC, longint on stack +*-------------------------------------- +EXP.Eval ldx #$FF + stx EXP.AOPS1 + stx EXP.AOPS2 + + + +.10 jsr CORE.IsLetter + bcc .1 FN or VAR + + jsr CORE.IsDigit10 + bcs .9 + + jsr EXP.Int32 + bcs .99 + + bra .5 +*-------------------------------------- +.1 >LDYA L.ACOS.FN + jsr CORE.Lookup + bcs .3 + + jsr EXP.FNjmpX + bcs .99 + + + + bra .5 +*-------------------------------------- +.3 jsr EXP.VARLookup + bcs .99 + + >LDYA EXP.ADDR + jsr CODE.PUSHfYA +*-------------------------------------- +.5 jsr CORE.GetCharNB + bcs .7 + + jsr CORE.IsEndExp + bcs .7 + + jsr CORE.IsAOPSChar + - * / + bcc .6 + + >LDYA L.ACOS.AOPS MOD + jsr CORE.Lookup + bcs .9 + + txa +* clc + adc #ACOS.AOPSChars.Cnt*2 + tax + + lda EXP.AOPS1 + bmi .6 + + cpx EXP.AOPS1 + + +.6 stx EXP.AOPS1 + + jsr CORE.GetNextCharNB + bcs .9 + + jmp .10 + +.7 ldx EXP.AOPS1 + bmi .8 + + jsr EXP.AOPSjmpX + +.8 clc + rts + +.9 lda #E.CSYN +.99 rts +*-------------------------------------- +EXP.FNjmpX jmp (J.ACOS.FN,x) +EXP.AOPSjmpX jmp (J.ACOS.AOPS,x) +*-------------------------------------- +EXP.Int32 >PUSHW ZPInputBufPtr + >PUSHWI ZPInputBufPtr + >PUSHBI 10 + >SYSCALL StrToL + bcs .9 + + jsr CODE.PUSHINT32 + + >POP 4 + + clc + +.9 rts +*-------------------------------------- +EXP.VARLookup >LDA.G hVars + + >PUSHA + >PUSHA for SListGetData + + >PUSHW ZPInputBufPtr + >SYSCALL SListLookup + bcs .9 + + >PUSHYA ZPSID + + txa +* clc + adc ZPInputBufPtr + sta ZPInputBufPtr + bcc .1 + + inc ZPInputBufPtr+1 + +.1 >PUSHWI EXP.ADDR + >PUSHWI 2 2 bytes + >PUSHWZ From Start + >SYSCALL SListGetData + rts + +.9 >PULLA + rts +*-------------------------------------- +EXP.ADD ldx #FPU.ADD32 + jmp CODE.FPUCALL + +EXP.SUB ldx #FPU.SUB32 + jmp CODE.FPUCALL + +EXP.MUL ldx #FPU.IMUL32 + jmp CODE.FPUCALL + +EXP.DIV ldx #FPU.IDIV32 + jmp CODE.FPUCALL + +EXP.MOD ldx #FPU.IMOD32 + jmp CODE.FPUCALL +*-------------------------------------- +*-------------------------------------- +MAN +SAVE usr/src/bin/acos.s.exp +LOAD usr/src/bin/acos.s +ASM diff --git a/BIN/ACOS.S.FN.txt b/BIN/ACOS.S.FN.txt new file mode 100644 index 00000000..ad20305e --- /dev/null +++ b/BIN/ACOS.S.FN.txt @@ -0,0 +1,31 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +FN.BYTE +FN.CLOCK +FN.DATEd +FN.FLAG +FN.CHRd +FN.INSTR +FN.KEY +FN.LEN +FN.LEFTd +FN.MIDd +FN.PDL +FN.PEEK +FN.RANDOM +FN.RIGHTd +FN.RNDd +FN.STRd +FN.TIMEd +FN.VAL +FN.WHENd +FN.WIDTH + clc + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/acos.s.fn +LOAD usr/src/bin/acos.s +ASM diff --git a/BIN/ACOS.S.KW.txt b/BIN/ACOS.S.KW.txt new file mode 100644 index 00000000..615efb19 --- /dev/null +++ b/BIN/ACOS.S.KW.txt @@ -0,0 +1,183 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +KW.ADDINT +KW.APPEND +KW.BYTE +KW.CLEAR +KW.CLOCK +KW.CLOSE +KW.COPY +KW.CREATE +KW.ECHO +KW.EDIT +KW.END +KW.FILL +KW.FLAG +KW.FOR +KW.FREE +KW.GET +KW.GOSUB + clc + rts +*-------------------------------------- +KW.GOTO jsr CORE.GetNextCharNB + bcs .90 + + >LDA.G hLabels + jsr CORE.GetAddr + bcs .99 + + lda #$4C JMP abs + jsr CODE.EmitByte + lda ZPADDR + jsr CODE.EmitByte + lda ZPADDR+1 + jsr CODE.EmitByte + + clc + rts + +.90 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +KW.HOME +KW.IF +KW.INFO +KW.INPUT +KW.KILL +KW.LINK +KW.LOG +KW.MARK +KW.MODEM +KW.MOVE +KW.MSG +KW.NEXT +KW.NIBBLE +KW.NOT +KW.ON +KW.NOCAR +KW.OPEN +KW.POKE +KW.POP +KW.POSITION + clc + rts +*-------------------------------------- +KW.PRINT stz hOut reset to hStdOut + + +* ldy #S.PS.hStdOut +* lda (pPS),y +* sta hOut Default to screen + + sec + ror bFlag put ending CR + +.10 jsr CORE.GetNextCharNB + bcs .8 + + jsr CORE.IsEndInst + bcs .8 + + cmp #'"' + bne .5 + + ldy #0 + +.1 jsr CORE.GetNextChar + bcs .90 + + cmp #'"' + beq .2 + + sta (ZPConstBufPtr),y + iny + bne .1 + +.2 lda #0 + sta (ZPConstBufPtr),y + iny + phy + + >LDYA ZPConstBufPtr + jsr CODE.LDYAI + jsr CODE.FPRINTSTR + + pla + clc + adc ZPConstBufPtr + sta ZPConstBufPtr + bcc .3 + + inc ZPConstBufPtr+1 + +.3 jsr CORE.GetNextCharNB skip " + bra .70 +*-------------------------------------- +.5 jsr EXP.Eval + bcs .99 + + jsr CODE.FPRINTL + +.7 jsr CORE.GetCharNB + bcs .8 + +.70 jsr CORE.IsEndInst + bcs .8 + + cmp #',' + bne .71 + +* TODO : CR ? or not CR ? + + bra .10 go skip + +.71 cmp #';' + bne .90 + +* TODO : PRINT ; ? or not ? + + jsr CORE.GetNextCharNB skip ; + stz bFlag + + +.8 bit bFlag + bpl .80 + + jsr CODE.FPRINTCR + +.80 clc + rts + +.90 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +KW.PUBLIC +KW.PUSH +KW.RAM +KW.RAM2 +KW.READ +KW.READY +KW.RETURN +KW.REWIND +KW.RIPCO +KW.SET +KW.SETINT +KW.TEXT +KW.THEN +KW.TONE +KW.UPDATE +KW.USE +KW.WHENd +KW.WRITE + clc + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/acos.s.kw +LOAD usr/src/bin/acos.s +ASM diff --git a/BIN/ACOS.S.txt b/BIN/ACOS.S.txt new file mode 100644 index 00000000..9721c192 --- /dev/null +++ b/BIN/ACOS.S.txt @@ -0,0 +1,603 @@ +NEW + AUTO 3,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF bin/acos +*-------------------------------------- +CODESEG .EQ 1024 +CONSTSEG .EQ 1024 +DATASEG .EQ 256 +*-------------------------------------- + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/mli.i + .INB inc/mli.e.i +*-------------------------------------- +* Zero Page Segment, up to 32 bytes +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START + +ZPInputBuf .BS 2 +ZPInputBufPtr .BS 2 +ZPSID .BS 2 +ZPADDR .BS 2 + +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 +ZPPtr3 .BS 2 +hIn .BS 1 +hOut .BS 1 + +ZPCodeBufPtr .BS 2 +ZPConstBufPtr .BS 2 +ZPDataBufPtr .BS 2 +ArgIndex .BS 1 +bFlag .BS 1 + +EXP.ADDR .BS 2 +EXP.AOPS1 .BS 1 +EXP.AOPS2 .BS 1 +EXP.DEPTH .BS 1 + .BS 1 + +ZS.END .ED +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA #0 S.PS.F.EVENT + .DA #0 + .DA CS.END-CS.START Code Size (without Constants) + .DA DS.END-DS.START Data SegmentSize + .DA #256 Stack Size + .DA #ZS.END-ZS.START Zero Page Size + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.MSG.GREETINGS .DA MSG.GREETINGS +L.MSG.USAGE .DA MSG.USAGE +L.MSG.ECHOCRLF .DA MSG.ECHOCRLF +L.MSG.COMPILING .DA MSG.COMPILING +L.MSG.DEBUG .DA MSG.DEBUG +L.MSG.ERR .DA MSG.ERR +L.MSG.RUN .DA MSG.RUN +L.MSG.STR .DA MSG.STR +L.MSG.INT32 .DA MSG.INT32 +*-------------------------------------- +L.ACOS.AOPS .DA ACOS.AOPS +J.ACOS.AOPS .DA EXP.ADD + .DA EXP.SUB + .DA EXP.MUL + .DA EXP.DIV + .DA EXP.MOD +L.ACOS.BOPS .DA ACOS.BOPS +L.ACOS.KW .DA ACOS.KW +J.ACOS.KW .DA KW.ADDINT + .DA KW.APPEND + .DA KW.BYTE + .DA KW.CLEAR + .DA KW.CLOCK + .DA KW.CLOSE + .DA KW.COPY + .DA KW.CREATE + .DA KW.ECHO + .DA KW.EDIT + .DA KW.END + .DA KW.FILL + .DA KW.FLAG + .DA KW.FOR + .DA KW.FREE + .DA KW.GET + .DA KW.GOSUB + .DA KW.GOTO + .DA KW.HOME + .DA KW.IF + .DA KW.INFO + .DA KW.INPUT + .DA KW.KILL + .DA KW.LINK + .DA KW.LOG + .DA KW.MARK + .DA KW.MODEM + .DA KW.MOVE + .DA KW.MSG + .DA KW.NEXT + .DA KW.NIBBLE + .DA KW.NOT + .DA KW.ON + .DA KW.NOCAR + .DA KW.OPEN + .DA KW.POKE + .DA KW.POP + .DA KW.POSITION + .DA KW.PRINT + .DA KW.PUBLIC + .DA KW.PUSH + .DA KW.RAM + .DA KW.RAM2 + .DA KW.READ + .DA KW.READY + .DA KW.RETURN + .DA KW.REWIND + .DA KW.RIPCO + .DA KW.SET + .DA KW.SETINT + .DA KW.TEXT + .DA KW.THEN + .DA KW.TONE + .DA KW.UPDATE + .DA KW.USE + .DA KW.WHENd + .DA KW.WRITE +*-------------------------------------- +L.ACOS.FN .DA ACOS.FN +J.ACOS.FN .DA FN.BYTE + .DA FN.CLOCK + .DA FN.DATEd + .DA FN.FLAG + .DA FN.CHRd + .DA FN.INSTR + .DA FN.KEY + .DA FN.LEN + .DA FN.LEFTd + .DA FN.MIDd + .DA FN.PDL + .DA FN.PEEK + .DA FN.RANDOM + .DA FN.RIGHTd + .DA FN.RNDd + .DA FN.STRd + .DA FN.TIMEd + .DA FN.VAL + .DA FN.WHENd + .DA FN.WIDTH + .DA 0 +*-------------------------------------- +* Called once at process creation +* Put code for loading LIB here +*-------------------------------------- +CS.INIT clc +CS.INIT.RTS rts +*-------------------------------------- +* Called until exit with CS +* if RUN exits with CC, RN entered again +*-------------------------------------- +CS.RUN >PUSHW L.MSG.GREETINGS + >PUSHW A2osX.KVER + >PUSHBI 2 + >SYSCALL PrintF + bcs CS.INIT.RTS + + jsr CS.RUN.ARGS + bcs CS.INIT.RTS + + jsr CORE.Init + bcs CS.INIT.RTS + + >PUSHW L.MSG.COMPILING + >PUSHW ZPPtr2 + >PUSHBI 2 + >SYSCALL PrintF + bcs CS.INIT.RTS + +.1 >SLEEP + + >LDA.G bDebug + bpl .2 + + jsr PrintDebugMsg + +.2 >LDA.G bTrace + bpl .3 + + >LDYA ZPInputBufPtr + jsr PrintTraceMsg + +.3 jsr CORE.Compile + bcc .1 + + cmp #MLI.E.EOF + bne .9 + + jsr CORE.Run + bcc .8 + +.9 pha + jsr PrintErrMsg + pla + sec + rts + +.8 lda #0 Exit Code = Success + sec + rts +*-------------------------------------- +CS.RUN.ARGS inc ArgIndex + + lda ArgIndex + >SYSCALL ArgV + bcs .7 + + >STYA ZPPtr1 + lda (ZPPtr1) + cmp #'-' + bne .4 + + ldy #1 + lda (ZPPtr1),y + + ldx #OptionVars-OptionList-1 + +.1 cmp OptionList,x + beq .2 + + dex + bpl .1 + + bra .90 + +.2 ldy OptionVars,x + lda #$ff + sta (pData),y + bra CS.RUN.ARGS + +.4 >LDA.G hFileBuf + bne .90 + + >LDYA ZPPtr1 + >STYA ZPPtr2 form printing later + jsr CS.RUN.LoadFile + bcs .9 + + >STYA ZPInputBuf + >STYA ZPInputBufPtr + + txa + >STA.G hFileBuf + bra CS.RUN.ARGS + +.7 >LDA.G hFileBuf + beq .90 + + clc +.9 rts + +.90 >PUSHW L.MSG.USAGE + >PUSHBI 0 + >SYSCALL PrintF + + lda #E.SYN + sec QUIT Process + rts +*-------------------------------------- +CS.RUN.LoadFile >SYSCALL LoadTxtFile + bcs .9 + + phx + txa + >SYSCALL GetMemPtr + plx + +.9 rts +*-------------------------------------- +CS.DOEVENT sec + rts +*-------------------------------------- +CS.QUIT jsr CORE.Quit + clc + rts +*-------------------------------------- +PrintErrMsg >LDA.G hFileBuf + + >SYSCALL GetMemPtr + >STYA ZPPtr1 + + stz ZPPtr2 + stz ZPPtr2+1 Line counter + +.1 inc ZPPtr2 + bne .2 + inc ZPPtr2+1 + +.2 >LDYA ZPPtr1 + >STYA ZPPtr3 save line start + +.20 lda (ZPPtr1) + beq .4 EoF + + inc ZPPtr1 + bne .3 + + inc ZPPtr1+1 +.3 cmp #C.CR + bne .20 Scan until EoL + + ldx ZPPtr1 + cpx ZPInputBufPtr + lda ZPPtr1+1 + sbc ZPInputBufPtr+1 + bcc .1 not this line.... + +.4 >LDA.G bTrace + bmi .5 + + jsr PrintTraceMsg.3 + +.5 lda ZPPtr3 + cmp ZPInputBufPtr + bne .6 + + lda ZPPtr3+1 + cmp ZPInputBufPtr+1 + beq .8 + +.6 >PUSHBI '-' + ldy #S.PS.hStdErr + lda (pPS),y + >SYSCALL FPutC + inc ZPPtr3 + bne .5 + + inc ZPPtr3+1 + bra .5 + +.8 ldy #S.PS.hStdErr + lda (pPS),y + >PUSHA + >PUSHW L.MSG.ERR + >PUSHW ZPPtr2 Line counter + >PUSHBI 2 + >SYSCALL FPrintF + + rts +*-------------------------------------- +PrintDebugMsg >LDYA pStack + >STYA ZPPtr2 + >PUSHW L.MSG.DEBUG + + >PUSHW ZPPtr2 + >PUSHW ZPCodeBufPtr + + >PUSHBI 4 + >SYSCALL PrintF + rts +*-------------------------------------- +PrintTraceMsg >STYA ZPPtr3 + +PrintTraceMsg.3 >PUSHBI '>' + ldy #S.PS.hStdErr + lda (pPS),y + >SYSCALL FPutC + + ldy #$ff + +.1 iny + lda (ZPPtr3),y + beq .8 + + cmp #C.CR + beq .8 + + phy + >PUSHA + ldy #S.PS.hStdErr + lda (pPS),y + >SYSCALL FPutC + ply + bra .1 + +.8 ldy #S.PS.hStdErr + lda (pPS),y + >PUSHA + + >PUSHW L.MSG.ECHOCRLF + >PUSHBI 0 + >SYSCALL FPrintF + + rts +*-------------------------------------- +CCODE.PUSHLYA >STYA ZPADDR + ldy #3 +.1 lda (ZPADDR),y + >PUSHA + dey + bpl .1 +CCODE.PUSHLYA.LEN .EQ *-CCODE.PUSHLYA +*-------------------------------------- +CCODE.PULLLYA >STYA ZPADDR + ldy #0 +.1 >PULLA + sta (ZPADDR),y + iny + cpy #4 + bcc .1 +CCODE.PULLLYA.LEN .EQ *-CCODE.PULLLYA +*-------------------------------------- +CCODE.PUSHA >PUSHA +CCODE.PUSHA.LEN .EQ *-CCODE.PUSHA +*-------------------------------------- +CCODE.PULLA >PULLA +CCODE.PULLA.LEN .EQ *-CCODE.PULLA +*-------------------------------------- +CCODE.FPRINTSTR pha + >PUSHW L.MSG.STR + pla + >PUSHA + tya + >PUSHA + >PUSHBI 2 + >SYSCALL PrintF +CCODE.FPRINTSTR.LEN .EQ *-CCODE.FPRINTSTR +*-------------------------------------- +CCODE.FPRINTL >PUSHW L.MSG.INT32 + ldx #4 + ldy #5 + +.1 lda (pStack),y + >PUSHA + dex + bne .1 + >PUSHBI 4 + >SYSCALL PrintF + >POP 4 Discard long on stack +CCODE.FPRINTL.LEN .EQ *-CCODE.FPRINTL +*-------------------------------------- +CCODE.FPRINTCR >PUSHW L.MSG.ECHOCRLF + >PUSHBI 0 + >SYSCALL PrintF +CCODE.FPRINTCR.LEN .EQ *-CCODE.FPRINTCR +*-------------------------------------- + +*-------------------------------------- + .INB usr/src/bin/acos.s.code + .INB usr/src/bin/acos.s.core + .INB usr/src/bin/acos.s.exp + .INB usr/src/bin/acos.s.fn + .INB usr/src/bin/acos.s.kw +*-------------------------------------- +CS.END +*-------------------------------------- +* Initialized DATA +*-------------------------------------- +MSG.GREETINGS .AZ "\r\nACOS-Shell %d.%d\r\n\r\n" +MSG.USAGE .AS "Usage : ACOS