diff --git a/src/vmsrc/a1cmd.pla b/src/vmsrc/a1cmd.pla index c522e96..22339c6 100755 --- a/src/vmsrc/a1cmd.pla +++ b/src/vmsrc/a1cmd.pla @@ -352,28 +352,8 @@ asm uword_islt(a,b)#1 RTS end asm divmod(a,b)#2 - LDA #>(_divmod-1) - PHA - LDA #<(_divmod-1) - PHA - JSR INTERP - !BYTE $0A, $5C ; MOD, RET -_divmod DEX - LDA DSTL ; DVDNDL - STA ESTKL,X - LDA DSTH ; DVDNDH - STA ESTKH,X - LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 - BCS + - RTS -+ LDA #$00 -; SEC - SBC ESTKL,X - STA ESTKL,X - LDA #$00 - SBC ESTKH,X - STA ESTKH,X - RTS + JSR INTERP ; CALL DINTERP + !BYTE $36, $5C ; DIVMOD, RET end asm sext(a)#1 LDY #$00 diff --git a/src/vmsrc/cmd.pla b/src/vmsrc/cmd.pla index 9f229a4..34bc0dc 100755 --- a/src/vmsrc/cmd.pla +++ b/src/vmsrc/cmd.pla @@ -515,29 +515,8 @@ asm uword_islt(a,b)#1 RTS end asm divmod(a,b)#2 - JSR _divmod - DEX - LDA ESTKL+1,X - STA ESTKL,X - LDA ESTKH+1,X - STA ESTKH,X - LDA DSTL ; DVDNDL - STA ESTKL+1,X - LDA DSTH ; DVDNDH - STA ESTKH+1,X - LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 - BCS + - RTS -+ LDA #$00 -; SEC - SBC ESTKL+1,X - STA ESTKL+1,X - LDA #$00 - SBC ESTKH+1,X - STA ESTKH+1,X - RTS -_divmod JSR $03D0 ; CALL DINTERP - !BYTE $0A, $5C ; MOD, RET + JSR INTERP ; CALL INTERP + !BYTE $36, $5C ; DIVMOD, RET end asm sext(a)#1 LDY #$00 diff --git a/src/vmsrc/plvm01.s b/src/vmsrc/plvm01.s index 2d1c559..80b828e 100644 --- a/src/vmsrc/plvm01.s +++ b/src/vmsrc/plvm01.s @@ -10,6 +10,7 @@ SELFMODIFY = 1 ;* VM ZERO PAGE LOCATIONS ;* !SOURCE "vmsrc/plvmzp.inc" +DVSIGN = TMP+2 DROP = $EF NEXTOP = $F0 FETCHOP = NEXTOP+3 @@ -122,7 +123,7 @@ COMP LDA #$FF OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E - !WORD DROP,DUP,NEXTOP,NEXTOP,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E + !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E @@ -130,25 +131,37 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0 ;* ;* DIV TOS-1 BY TOS ;* -DIV JSR _DIV - LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 - BCS NEG - JMP NEXTOP +DIV JSR _DIV + LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 + BCS NEG + JMP NEXTOP ;* ;* MOD TOS-1 BY TOS ;* -MOD JSR _DIV - LDA ESTKL,X ; SAVE IN CASE OF DIVMOD - STA DSTL - LDA ESTKH,X - STA DSTH - LDA TMPL ; REMNDRL - STA ESTKL,X - LDA TMPH ; REMNDRH - STA ESTKH,X - LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND - BMI NEG - JMP NEXTOP +MOD JSR _DIV + LDA TMPL ; REMNDRL + STA ESTKL,X + LDA TMPH ; REMNDRH + STA ESTKH,X + LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND + BMI NEG + JMP NEXTOP +;* +;* DIVMOD TOS-1 BY TOS +;* +DIVMOD JSR _DIV + LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 + BCC + + INX + JSR _NEG + DEX ++ LDA TMPL ; REMNDRL + STA ESTKL,X + LDA TMPH ; REMNDRH + STA ESTKH,X + LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND + BMI NEG + JMP NEXTOP ;* ;* NEGATE TOS ;* diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index d43cc4c..3d65dc2 100755 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -40,7 +40,8 @@ ALTRDON = $C003 ALTWROFF= $C004 ALTWRON = $C005 !SOURCE "vmsrc/plvmzp.inc" -PSR = TMPH+1 +PSR = TMP+2 +DVSIGN = PSR+1 DROP = $EF NEXTOP = $F0 FETCHOP = NEXTOP+3 @@ -181,7 +182,7 @@ VMCORE = * OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E - !WORD DROP,DUP,NEXTOP,NEXTOP,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E + !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E @@ -422,7 +423,7 @@ LCDEFCMD = *-28 ; DEFCMD IN LC MEMORY OPXTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CSX ; 20 22 24 26 28 2A 2C 2E - !WORD DROP,DUP,NEXTOP,NEXTOP,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E + !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E !WORD BRNCH,IBRNCH,CALLX,ICALX,ENTER,LEAVEX,RETX,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLB,DLW ; 60 62 64 66 68 6A 6C 6E @@ -543,8 +544,7 @@ _DIVLP ROL TMPL ; REMNDRL ROL ESTKH+1,X ; DVDNDH DEY BNE _DIVLP -_DIVEX INX - LDY IPY +_DIVEX LDY IPY RTS ;* ;* NEGATE TOS @@ -561,6 +561,7 @@ NEG LDA #$00 ;* DIV TOS-1 BY TOS ;* DIV JSR _DIV + INX LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 BCS NEG JMP NEXTOP @@ -568,10 +569,7 @@ DIV JSR _DIV ;* MOD TOS-1 BY TOS ;* MOD JSR _DIV - LDA ESTKL,X ; SAVE IN CASE OF DIVMOD - STA DSTL - LDA ESTKH,X - STA DSTH + INX LDA TMPL ; REMNDRL STA ESTKL,X LDA TMPH ; REMNDRH @@ -580,6 +578,22 @@ MOD JSR _DIV BMI NEG JMP NEXTOP ;* +;* DIVMOD TOS-1 BY TOS +;* +DIVMOD JSR _DIV + LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 + BCC + + INX + JSR _NEG + DEX ++ LDA TMPL ; REMNDRL + STA ESTKL,X + LDA TMPH ; REMNDRH + STA ESTKH,X + LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND + BMI NEG + JMP NEXTOP +;* ;* INCREMENT TOS ;* INCR INC ESTKL,X @@ -1528,7 +1542,6 @@ JMPTMP JMP (TMP) ;* ENTER INY LDA (IP),Y -; PHA ; SAVE ON STACK FOR LEAVE EOR #$FF ; ALLOCATE FRAME SEC ADC PPL @@ -1556,12 +1569,24 @@ ENTER INY ;* ;* LEAVE FUNCTION ;* -LEAVEX STA ALTRDOFF +LEAVEX +INC_IP + LDA (IP),Y + STA ALTRDOFF + CLC + ADC IFPL + STA PPL + LDA #$00 + ADC IFPH + STA PPH + PLA ; RESTORE PREVIOUS FRAME + STA IFPL + PLA + STA IFPH LDA PSR PHA PLP -LEAVE ;PLA ; DEALLOCATE POOL + FRAME - +INC_IP + RTS +LEAVE +INC_IP LDA (IP),Y CLC ADC IFPL diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index 27260d6..ef0c3a9 100755 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -11,6 +11,7 @@ SELFMODIFY = 1 ; MEMBANK = $FFEF !SOURCE "vmsrc/plvmzp.inc" +DVSIGN = TMP+2 DROP = $EF NEXTOP = $F0 FETCHOP = NEXTOP+3 @@ -227,7 +228,7 @@ _DIVEX INX OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E - !WORD DROP,DUP,NEXTOP,NEXTOP,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E + !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E @@ -286,10 +287,6 @@ DIV JSR _DIV ;* MOD TOS-1 BY TOS ;* MOD JSR _DIV - LDA ESTKL,X ; SAVE IN CASE OF DIVMOD - STA DSTL - LDA ESTKH,X - STA DSTH LDA TMPL ; REMNDRL STA ESTKL,X LDA TMPH ; REMNDRH @@ -298,6 +295,22 @@ MOD JSR _DIV BMI NEG JMP NEXTOP ;* +;* DIVMOD TOS-1 BY TOS +;* +DIVMOD JSR _DIV + LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 + BCC + + INX + JSR _NEG + DEX ++ LDA TMPL ; REMNDRL + STA ESTKL,X + LDA TMPH ; REMNDRH + STA ESTKH,X + LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND + BMI NEG + JMP NEXTOP +;* ;* ADD TOS TO TOS-1 ;* ADD LDA ESTKL,X diff --git a/src/vmsrc/plvm802.s b/src/vmsrc/plvm802.s index 0126690..6e3b918 100644 --- a/src/vmsrc/plvm802.s +++ b/src/vmsrc/plvm802.s @@ -51,8 +51,8 @@ ALTRDON = $C003 ALTWROFF= $C004 ALTWRON = $C005 !SOURCE "vmsrc/plvmzp.inc" -HWSP = TMPH+1 -PSR = HWSP+1 +PSR = TMP+2 +HWSP = PSR+1 DROP = $EF NEXTOP = DROP+1 FETCHOP = NEXTOP+3 @@ -246,7 +246,7 @@ VMCORE = * OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E - !WORD DROP,DUP,NEXTOP,NEXTOP,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E + !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E @@ -518,7 +518,7 @@ LCDEFCMD = *-28 ; DEFCMD IN LC MEMORY OPXTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CSX ; 20 22 24 26 28 2A 2C 2E - !WORD DROP,DUP,NEXTOP,NEXTOP,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E + !WORD DROP,DUP,NEXTOP,DIVMOD,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E !WORD BRNCH,IBRNCH,CALLX,ICALX,ENTER,LEAVEX,RETX,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLB,DLW ; 60 62 64 66 68 6A 6C 6E @@ -611,7 +611,7 @@ DIV JSR _DIV LDA TMP STA NOS,S PLA - TXA + TXA ; DIVSGN LSR ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 BCS NEG JMP NEXTOP @@ -620,12 +620,48 @@ DIV JSR _DIV ;* MOD JSR _DIV STA NOS,S ; REMNDR - LDA TMP - STA DST ; SAVE IN CASE OF DIVMOD PLA + CPX #$80 ; DIVSGN + BCS NEG ; REMAINDER IS SIGN OF DIVIDEND + JMP NEXTOP +;* +;* DIVMOD TOS-1 BY TOS - !!!HACK!!! MUST COPY ESTK TO HW STACK +;* +DIVMOD +ACCMEM8 + LDX ESP + LDA ESTKH+1,X + PHA + LDA ESTKL+1,X + PHA + LDA ESTKH,X + PHA + LDA ESTKL,X + PHA + +ACCMEM16 + JSR _DIV + CPX #$80 ; DIVSGN + BCC + ; REMAINDER IS SIGN OF DIVIDEND + EOR #$FFFF + INC ++ STA TOS,S ; REMNDR TXA ; DIVSGN - AND #$0080 ; REMAINDER IS SIGN OF DIVIDEND - BNE NEG + LSR ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 + LDA TMP + BCC + + EOR #$FFFF + INC ++ STA NOS,S ; DVDND + +ACCMEM8 + LDX ESP + PLA + STA ESTKL,X + PLA + STA ESTKH,X + PLA + STA ESTKL+1,X + PLA + STA ESTKH+1,X + +ACCMEM16 JMP NEXTOP ;* ;* NEGATE TOS @@ -1507,20 +1543,17 @@ JMPTMP JMP (TMP) ;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT ;* ENTER INY - TYA ; QUICKY CLEAR OUT MSB - +ACCMEM8 ; 8 BIT A/M LDA (IP),Y + AND #$00FF !IF DEBUG { + +ACCMEM8 ; 8 BIT A/M PHA CLC ADC #$80+'0' STA $7D0+31 PLA -} - ;PHA ; SAVE ON STACK FOR LEAVE - ;DEC HWSP ; UPDATE HWSP TO SKIP FRAME SIZE +ACCMEM16 ; 16 BIT A/M -; AND #$00FF +} EOR #$FFFF ; ALLOCATE FRAME SEC ADC PP @@ -1548,17 +1581,15 @@ ENTER INY ;* ;* LEAVE FUNCTION ;* -LEAVEX STX ALTRDOFF -LEAVE ;PLA ; DEALLOCATE POOL + FRAME - +INC_IP - LDA (IP),Y - AND #$00FF - CLC - ADC IFP - STA PP - PLA ; RESTORE PREVIOUS FRAME - STA IFP +LEAVEX +INC_IP +ACCMEM8 ; 8 BIT A/M + LDA (IP),Y ; DEALLOCATE POOL + FRAME + STA ALTRDOFF + BRA + +LEAVE +INC_IP + +ACCMEM8 ; 8 BIT A/M + LDA (IP),Y ; DEALLOCATE POOL + FRAME ++ STA TMPL TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK EOR #$FF SEC @@ -1585,7 +1616,6 @@ LEAVE ;PLA ; DEALLOCATE POOL + FRAME + CPX ESP BNE - !IF DEBUG { - STX TMPL TSX CPX HWSP BEQ + @@ -1594,9 +1624,17 @@ LEAVE ;PLA ; DEALLOCATE POOL + FRAME - LDX $C000 BPL - LDX $C010 -+ LDX TMPL ++ } - TYX ; RESTORE NEW ESP + TYX ; RESTORE NEW ESP + LDA TMPL ; DEALLOCATE POOL + FRAME + +ACCMEM16 ; 16 BIT A/M + AND #$00FF + CLC + ADC IFP + STA PP + PLA ; RESTORE PREVIOUS FRAME + STA IFP SEC ; SWITCH TO EMULATED MODE XCE !AS @@ -1604,6 +1642,7 @@ LEAVE ;PLA ; DEALLOCATE POOL + FRAME PHA PLP RTS + +ACCMEM16 ; 16 BIT A/M ; RETX STX ALTRDOFF RET +ACCMEM8 ; 8 BIT A/M @@ -1633,19 +1672,18 @@ RET +ACCMEM8 ; 8 BIT A/M + CPX ESP BNE - !IF DEBUG { - STX TMPL TSX CPX HWSP BEQ + - LDX #$80+'R' + LDX #$80+'X' STX $7D0+30 - LDX $C000 BPL - LDX $C010 -+ LDX TMPL ++ } TYX - +ACCMEM16 ; 16 BIT A/M + +ACCMEM16 LDA IFP ; DEALLOCATE POOL STA PP PLA ; RESTORE PREVIOUS FRAME @@ -1830,9 +1868,9 @@ STEP STX TMPL TSX CMP #$10 BCC DBGKEY - LDX TMPL - CPX #$54 ; FORCE PAUSE AT 'CALL' - BEQ DBGKEY +; LDX TMPL +; CPX #$54 ; FORCE PAUSE AT 'CALL' +; BEQ DBGKEY - LDX $C000 CPX #$9B BNE + diff --git a/src/vmsrc/plvmzp.inc b/src/vmsrc/plvmzp.inc index 5e45197..58f3595 100755 --- a/src/vmsrc/plvmzp.inc +++ b/src/vmsrc/plvmzp.inc @@ -17,17 +17,14 @@ ESTK = $C0 ESTKL = ESTK ESTKH = ESTK+ESTKSZ/2 VMZP = ESTK+ESTKSZ -ESP = VMZP -DVSIGN = VMZP -IFP = ESP+1 +IFP = VMZP IFPL = IFP IFPH = IFP+1 PP = IFP+2 PPL = PP PPH = PP+1 IPY = PP+2 -TMP = IPY+1 +ESP = IPY+1 +TMP = ESP+1 TMPL = TMP TMPH = TMP+1 -NPARMS = TMPL -FRMSZ = TMPH diff --git a/src/vmsrc/soscmd.pla b/src/vmsrc/soscmd.pla index dba35f5..769d876 100755 --- a/src/vmsrc/soscmd.pla +++ b/src/vmsrc/soscmd.pla @@ -414,28 +414,8 @@ asm uword_islt(a,b)#1 RTS end asm divmod(a,b)#2 - LDA #>(_divmod-1) - PHA - LDA #<(_divmod-1) - PHA - JSR INTERP - !BYTE $0A, $5C ; MOD, RET -_divmod DEX - LDA DSTL ; DVDNDL - STA ESTKL,X - LDA DSTH ; DVDNDH - STA ESTKH,X - LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 - BCS + - RTS -+ LDA #$00 -; SEC - SBC ESTKL,X - STA ESTKL,X - LDA #$00 - SBC ESTKH,X - STA ESTKH,X - RTS + JSR INTERP ; CALL INTERP + !BYTE $36, $5C ; DIVMOD, RET end asm sext(a)#1 LDY #$00