mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-03-22 01:30:45 +00:00
Just easier to add a divmod opcode
This commit is contained in:
parent
a92301908a
commit
5f9ba155eb
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
;*
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 +
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user