1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-03-23 07:35:00 +00:00

Can't stop playing w/ MUL DIV. and removed profiler - didn't like it

This commit is contained in:
David Schmenk 2014-12-01 18:34:42 -08:00
parent a6e6bcffd8
commit aafac44a46
3 changed files with 84 additions and 386 deletions

View File

@ -54,28 +54,30 @@ IINTERP PLA
;*
MUL STY IPY
LDY #$10
LDA #$00
STA TMPL ; PRODL
STA TMPH ; PRODH
MULLP LSR ESTKH,X ; MULTPLRH
ROR ESTKL,X ; MULTPLRL
BCC +
LDA ESTKL+1,X ; MULTPLNDL
CLC
ADC TMPL ; PRODL
LDA ESTKL+1,X
EOR #$FF
STA TMPL
LDA ESTKH+1,X ; MULTPLNDH
ADC TMPH ; PRODH
LDA ESTKH+1,X
EOR #$FF
STA TMPH
+ ASL ESTKL+1,X ; MULTPLNDL
ROL ESTKH+1,X ; MULTPLNDH
LDA #$00
STA ESTKL+1,X ; PRODL
; STA ESTKH+1,X ; PRODH
MULLP LSR TMPH ; MULTPLRH
ROR TMPL ; MULTPLRL
BCS +
STA ESTKH+1,X ; PRODH
LDA ESTKL,X ; MULTPLNDL
ADC ESTKL+1,X ; PRODL
STA ESTKL+1,X
LDA ESTKH,X ; MULTPLNDH
ADC ESTKH+1,X ; PRODH
+ ASL ESTKL,X ; MULTPLNDL
ROL ESTKH,X ; MULTPLNDH
DEY
BNE MULLP
STA ESTKH+1,X ; PRODH
INX
; LDA TMPH ; PRODH
STA ESTKH,X
LDA TMPL ; PRODL
STA ESTKL,X
LDY IPY
JMP NEXTOP
;*
@ -119,7 +121,6 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E
;* DIV TOS-1 BY TOS
;*
DIV JSR _DIV
INX
LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1
BCS NEG
JMP NEXTOP
@ -127,7 +128,6 @@ DIV JSR _DIV
;* MOD TOS-1 BY TOS
;*
MOD JSR _DIV
INX
LDA TMPL ; REMNDRL
STA ESTKL,X
LDA TMPH ; REMNDRH
@ -184,23 +184,24 @@ _DIV1 LDY #$11 ; #BITS+1
ROL ESTKH+1,X ; DVDNDH
DEY
BCC -
STY ESTKL-1,X
_DIVLP ROL TMPL ; REMNDRL
ROL TMPH ; REMNDRH
LDA TMPL ; REMNDRL
SEC
SBC ESTKL,X ; DVSRL
TAY
CMP ESTKL,X ; DVSRL
LDA TMPH ; REMNDRH
SBC ESTKH,X ; DVSRH
BCC +
STA TMPH ; REMNDRH
STY TMPL ; REMNDRL
+ ROL ESTKL+1,X ; DVDNDL
LDA TMPL ; REMNDRL
SBC ESTKL,X ; DVSRL
STA TMPL ; REMNDRL
SEC
+ ROL ESTKL+1,X ; DVDNDL
ROL ESTKH+1,X ; DVDNDH
DEC ESTKL-1,X
DEY
BNE _DIVLP
LDY IPY
INX
RTS
;*
;* ADD TOS TO TOS-1

View File

@ -300,7 +300,7 @@ CMDENTRY = *
;
; INSTALL PAGE 3 VECTORS
;
LDY #$17
LDY #$12
- LDA PAGE3,Y
STA INTERP,Y
DEY
@ -381,13 +381,11 @@ PAGE3 = *
JMP IINTRP
BIT LCRDEN+LCBNK2 ; $03DC - INDIRECT INTERPX ENTRY
JMP IINTRPX
BIT LCRDEN+LCBNK2 ; $03E2 - PROFILER ENTRY
JMP PROFILER
}
DEFCMD !FILL 27
DEFCMD !FILL 30
ENDBYE = *
}
LCDEFCMD = *-27 ; DEFCMD IN LC MEMORY
LCDEFCMD = *-30 ; DEFCMD IN LC MEMORY
;*****************
;* *
;* OPXCODE TABLE *
@ -445,28 +443,30 @@ IDXW LDA ESTKL,X
;*
MUL STY IPY
LDY #$10
LDA #$00
STA TMPL ; PRODL
STA TMPH ; PRODH
MULLP LSR ESTKH,X ; MULTPLRH
ROR ESTKL,X ; MULTPLRL
BCC +
LDA ESTKL+1,X ; MULTPLNDL
CLC
ADC TMPL ; PRODL
LDA ESTKL+1,X
EOR #$FF
STA TMPL
LDA ESTKH+1,X ; MULTPLNDH
ADC TMPH ; PRODH
LDA ESTKH+1,X
EOR #$FF
STA TMPH
+ ASL ESTKL+1,X ; MULTPLNDL
ROL ESTKH+1,X ; MULTPLNDH
LDA #$00
STA ESTKL+1,X ; PRODL
; STA ESTKH+1,X ; PRODH
MULLP LSR TMPH ; MULTPLRH
ROR TMPL ; MULTPLRL
BCS +
STA ESTKH+1,X ; PRODH
LDA ESTKL,X ; MULTPLNDL
ADC ESTKL+1,X ; PRODL
STA ESTKL+1,X
LDA ESTKH,X ; MULTPLNDH
ADC ESTKH+1,X ; PRODH
+ ASL ESTKL,X ; MULTPLNDL
ROL ESTKH,X ; MULTPLNDH
DEY
BNE MULLP
STA ESTKH+1,X ; PRODH
INX
; LDA TMPH ; PRODH
STA ESTKH,X
LDA TMPL ; PRODL
STA ESTKL,X
LDY IPY
JMP NEXTOP
;*
@ -507,23 +507,24 @@ _DIV1 LDY #$11 ; #BITS+1
ROL ESTKH+1,X ; DVDNDH
DEY
BCC -
STY ESTKL-1,X
_DIVLP ROL TMPL ; REMNDRL
ROL TMPH ; REMNDRH
LDA TMPL ; REMNDRL
SEC
SBC ESTKL,X ; DVSRL
TAY
CMP ESTKL,X ; DVSRL
LDA TMPH ; REMNDRH
SBC ESTKH,X ; DVSRH
BCC +
STA TMPH ; REMNDRH
STY TMPL ; REMNDRL
+ ROL ESTKL+1,X ; DVDNDL
LDA TMPL ; REMNDRL
SBC ESTKL,X ; DVSRL
STA TMPL ; REMNDRL
SEC
+ ROL ESTKL+1,X ; DVDNDL
ROL ESTKH+1,X ; DVDNDH
DEC ESTKL-1,X
DEY
BNE _DIVLP
LDY IPY
INX
RTS
;*
;* NEGATE TOS
@ -540,7 +541,6 @@ 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
@ -548,7 +548,6 @@ DIV JSR _DIV
;* MOD TOS-1 BY TOS
;*
MOD JSR _DIV
INX
LDA TMPL ; REMNDRL
STA ESTKL,X
LDA TMPH ; REMNDRH
@ -1560,308 +1559,5 @@ LEAVEX STA ALTRDOFF
RETX STA ALTRDOFF
CLI
RTS
;*********************
;* *
;* BYTECODE PROFILER *
;* *
;*********************
STATS = $DF00
;*
;* PROFILER CONTROL
;*
;* A = 0 : DISABLE
;* A = 1 : ENABLE SYS+USER OPS
;* A = 2 : ENABLE USER OPS
;* A = 3 : WRITE STATS TO (DST), 260 BYTES
;*
PROFILER CMP #$00
BNE +
;
; DISABLE PROFILER, RESTORE INTERP ENTRYPOINTS
;
LDA #<IINTRP
STA $03DA
LDA #>IINTRP
STA $03DB
LDA #<IINTRPX
STA $03E0
LDA #>IINTRPX
STA $03E1
RTS
;
; ENABLE PROFILER, SET PROFILING INTERP ENTRYPOINTS, CLEAR STATS
;
+ CMP #$01
BNE +
LDA #<PIINTRP
STA $03DA
LDA #>PIINTRP
STA $03DB
LDA #<PIINTRPX
STA $03E0
LDA #>PIINTRPX
STA $03E1
BIT LCRWEN+LCBNK2
BIT LCRWEN+LCBNK2
LDA #$00
STA TTLOPS
STA TTLOPS+1
STA TTLOPS+2
STA TTLOPS+3
TAY
- STA STATS,Y
INY
BNE -
RTS
;
; COPY STATS TO MAIN MEMORY
;
+ CMP #$02
BNE ++
LDX #$00
LDA TTLOPS
STA (DST,X)
INC DSTL
BNE +
INC DSTH
+ LDA TTLOPS+1
STA (DST,X)
INC DSTL
BNE +
INC DSTH
+ LDA TTLOPS+2
STA (DST,X)
INC DSTL
BNE +
INC DSTH
+ LDA TTLOPS+3
STA (DST,X)
INC DSTL
BNE +
INC DSTH
+ LDY #$00
- LDA STATS,Y
STA (DST,X)
INC DSTL
BNE +
INC DSTH
+ LDA STATS+64,Y
STA (DST,X)
INC DSTL
BNE +
INC DSTH
+ LDA STATS+128,Y
STA (DST,X)
INC DSTL
BNE +
INC DSTH
+ LDA STATS+192,Y
STA (DST,X)
INC DSTL
BNE +
INC DSTH
+ INY
CPY #64
BNE -
++ RTS
;*
;* ENTER INTO BYTECODE INTERPRETER
;*
PIINTRP PLA
STA TMPL
PLA
STA TMPH
LDY #$02
LDA (TMP),Y
STA IPH
DEY
LDA (TMP),Y
STA IPL
DEY
LDA #>PROTBL
STA OPPAGE
BIT LCRWEN+LCBNK2
BIT LCRWEN+LCBNK2
JMP FETCHOP
PIINTRPX PLA
STA TMPL
PLA
STA TMPH
LDY #$02
LDA (TMP),Y
STA IPH
DEY
LDA (TMP),Y
STA IPL
DEY
LDA #>PROXTBL
STA OPPAGE
SEI
STA ALTRDON
BIT LCRWEN+LCBNK2
BIT LCRWEN+LCBNK2
JMP FETCHOP
;*
;* PROFILE OPS
;*
PROP ORA #$80
STA PROPJMP+1
AND #$7F
JSR UPDTSTATS
PROPJMP JMP (OPTBL)
PROPX STA PROPXJMP+1
JSR UPDTSTATS
PROPXJMP JMP (OPXTBL)
UPDTSTATS STX ESP
LSR
TAX
INC STATS,X
BNE +
INC STATS+64,X
BNE +
INC STATS+128,X
BNE +
INC STATS+192,X
+ LDX ESP
INC TTLOPS
BNE +
INC TTLOPS+1
BNE +
INC TTLOPS+2
BNE +
INC TTLOPS+3
+ RTS
PROCALL JSR UPDTSTATS
+INC_IP
LDA (IP),Y
STA TMPL
+INC_IP
LDA (IP),Y
STA TMPH
LDA IPH
PHA
LDA IPL
PHA
TYA
PHA
JSR JMPTMP
PLA
TAY
PLA
STA IPL
PLA
STA IPH
LDA #>PROTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
STA OPPAGE
BIT LCRWEN+LCBNK2
BIT LCRWEN+LCBNK2
JMP NEXTOP
;
PROCALLX JSR UPDTSTATS
+INC_IP
LDA (IP),Y
STA TMPL
+INC_IP
LDA (IP),Y
STA TMPH
LDA IPH
PHA
LDA IPL
PHA
TYA
PHA
STA ALTRDOFF
CLI
JSR JMPTMP
SEI
STA ALTRDON
PLA
TAY
PLA
STA IPL
PLA
STA IPH
LDA #>PROXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
STA OPPAGE
BIT LCRWEN+LCBNK2
BIT LCRWEN+LCBNK2
JMP NEXTOP
;*
;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
;*
PROICAL JSR UPDTSTATS
LDA ESTKL,X
STA TMPL
LDA ESTKH,X
STA TMPH
INX
LDA IPH
PHA
LDA IPL
PHA
TYA
PHA
JSR JMPTMP
PLA
TAY
PLA
STA IPL
PLA
STA IPH
LDA #>PROTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
STA OPPAGE
BIT LCRWEN+LCBNK2
BIT LCRWEN+LCBNK2
JMP NEXTOP
;
PROICALX JSR UPDTSTATS
LDA ESTKL,X
STA TMPL
LDA ESTKH,X
STA TMPH
INX
LDA IPH
PHA
LDA IPL
PHA
TYA
PHA
STA ALTRDOFF
CLI
JSR JMPTMP
SEI
STA ALTRDON
PLA
TAY
PLA
STA IPL
PLA
STA IPH
LDA #>PROXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
STA OPPAGE
BIT LCRWEN+LCBNK2
BIT LCRWEN+LCBNK2
JMP NEXTOP
TTLOPS !WORD 0, 0
;*
;* PROFILING OP TABLE
;*
!ALIGN 255,0
PROXTBL !WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX
!WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX
!WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX
!WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX
!WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX
!WORD PROPX,PROPX,PROCALLX,PROICALX,PROPX,PROPX,PROPX,PROPX
!WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX
!WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX
PROTBL !WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP
!WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP
!WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP
!WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP
!WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP
!WORD PROP,PROP,PROCALL,PROICAL,PROP,PROP,PROP,PROP
!WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP
!WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP
VMEND = *
}

View File

@ -174,23 +174,24 @@ _DIV1 LDY #$11 ; #BITS+1
ROL ESTKH+1,X ; DVDNDH
DEY
BCC -
STY ESTKL-1,X
_DIVLP ROL TMPL ; REMNDRL
ROL TMPH ; REMNDRH
LDA TMPL ; REMNDRL
SEC
SBC ESTKL,X ; DVSRL
TAY
CMP ESTKL,X ; DVSRL
LDA TMPH ; REMNDRH
SBC ESTKH,X ; DVSRH
BCC +
STA TMPH ; REMNDRH
STY TMPL ; REMNDRL
+ ROL ESTKL+1,X ; DVDNDL
LDA TMPL ; REMNDRL
SBC ESTKL,X ; DVSRL
STA TMPL ; REMNDRL
SEC
+ ROL ESTKL+1,X ; DVDNDL
ROL ESTKH+1,X ; DVDNDH
DEC ESTKL-1,X
DEY
BNE _DIVLP
LDY IPY
INX
RTS
;*
;* OPCODE TABLE
@ -209,28 +210,30 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E
;*
MUL STY IPY
LDY #$10
LDA #$00
STA TMPL ; PRODL
STA TMPH ; PRODH
MULLP LSR ESTKH,X ; MULTPLRH
ROR ESTKL,X ; MULTPLRL
BCC +
LDA ESTKL+1,X ; MULTPLNDL
CLC
ADC TMPL ; PRODL
LDA ESTKL+1,X
EOR #$FF
STA TMPL
LDA ESTKH+1,X ; MULTPLNDH
ADC TMPH ; PRODH
LDA ESTKH+1,X
EOR #$FF
STA TMPH
+ ASL ESTKL+1,X ; MULTPLNDL
ROL ESTKH+1,X ; MULTPLNDH
LDA #$00
STA ESTKL+1,X ; PRODL
; STA ESTKH+1,X ; PRODH
MULLP LSR TMPH ; MULTPLRH
ROR TMPL ; MULTPLRL
BCS +
STA ESTKH+1,X ; PRODH
LDA ESTKL,X ; MULTPLNDL
ADC ESTKL+1,X ; PRODL
STA ESTKL+1,X
LDA ESTKH,X ; MULTPLNDH
ADC ESTKH+1,X ; PRODH
+ ASL ESTKL,X ; MULTPLNDL
ROL ESTKH,X ; MULTPLNDH
DEY
BNE MULLP
STA ESTKH+1,X ; PRODH
INX
; LDA TMPH ; PRODH
STA ESTKH,X
LDA TMPL ; PRODL
STA ESTKL,X
LDY IPY
JMP NEXTOP
;*
@ -248,7 +251,6 @@ 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
@ -256,7 +258,6 @@ DIV JSR _DIV
;* MOD TOS-1 BY TOS
;*
MOD JSR _DIV
INX
LDA TMPL ; REMNDRL
STA ESTKL,X
LDA TMPH ; REMNDRH