mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-03-27 18:35:06 +00:00
Space/time opt for MUL, Apple1 rearrangement to save space
This commit is contained in:
parent
5f71c1481b
commit
72bea1e510
@ -50,13 +50,13 @@ IINTERP PLA
|
||||
;* MUL TOS-1 BY TOS
|
||||
;*
|
||||
MUL STY IPY
|
||||
LDY #$00
|
||||
STY TMPL ; PRODL
|
||||
STY TMPH ; PRODH
|
||||
LDY #$10
|
||||
MUL1 LSR ESTKH,X ; MULTPLRH
|
||||
LDA #$00
|
||||
STA TMPL ; PRODL
|
||||
STA TMPH ; PRODH
|
||||
MULLP LSR ESTKH,X ; MULTPLRH
|
||||
ROR ESTKL,X ; MULTPLRL
|
||||
BCC MUL2
|
||||
BCC +
|
||||
LDA ESTKL+1,X ; MULTPLNDL
|
||||
CLC
|
||||
ADC TMPL ; PRODL
|
||||
@ -64,18 +64,43 @@ MUL1 LSR ESTKH,X ; MULTPLRH
|
||||
LDA ESTKH+1,X ; MULTPLNDH
|
||||
ADC TMPH ; PRODH
|
||||
STA TMPH
|
||||
MUL2 ASL ESTKL+1,X ; MULTPLNDL
|
||||
+ ASL ESTKL+1,X ; MULTPLNDL
|
||||
ROL ESTKH+1,X ; MULTPLNDH
|
||||
DEY
|
||||
BNE MUL1
|
||||
BNE MULLP
|
||||
INX
|
||||
; LDA TMPH ; PRODH
|
||||
STA ESTKH,X
|
||||
LDA TMPL ; PRODL
|
||||
STA ESTKL,X
|
||||
LDA TMPH ; PRODH
|
||||
STA ESTKH,X
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* INCREMENT TOS
|
||||
;*
|
||||
INCR INC ESTKL,X
|
||||
BNE INCR1
|
||||
INC ESTKH,X
|
||||
INCR1 JMP NEXTOP
|
||||
;*
|
||||
;* DECREMENT TOS
|
||||
;*
|
||||
DECR LDA ESTKL,X
|
||||
BNE DECR1
|
||||
DEC ESTKH,X
|
||||
DECR1 DEC ESTKL,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* BITWISE COMPLIMENT TOS
|
||||
;*
|
||||
COMP LDA #$FF
|
||||
EOR ESTKL,X
|
||||
STA ESTKL,X
|
||||
LDA #$FF
|
||||
EOR ESTKH,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* OPCODE TABLE
|
||||
;*
|
||||
!ALIGN 255,0
|
||||
@ -88,73 +113,6 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E
|
||||
!WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E
|
||||
!WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E
|
||||
;*
|
||||
;* INTERNAL DIVIDE ALGORITHM
|
||||
;*
|
||||
_NEG LDA #$00
|
||||
SEC
|
||||
SBC ESTKL,X
|
||||
STA ESTKL,X
|
||||
LDA #$00
|
||||
SBC ESTKH,X
|
||||
STA ESTKH,X
|
||||
RTS
|
||||
_DIV STY IPY
|
||||
LDA ESTKH,X
|
||||
AND #$80
|
||||
STA DVSIGN
|
||||
BPL _DIV1
|
||||
JSR _NEG
|
||||
INC DVSIGN
|
||||
_DIV1 LDA ESTKH+1,X
|
||||
BPL _DIV2
|
||||
INX
|
||||
JSR _NEG
|
||||
DEX
|
||||
INC DVSIGN
|
||||
BNE _DIV3
|
||||
_DIV2 ORA ESTKL+1,X ; DVDNDL
|
||||
BNE _DIV3
|
||||
STA TMPL
|
||||
STA TMPH
|
||||
RTS
|
||||
_DIV3 LDY #$11 ; #BITS+1
|
||||
LDA #$00
|
||||
STA TMPL ; REMNDRL
|
||||
STA TMPH ; REMNDRH
|
||||
_DIV4 ASL ESTKL+1,X ; DVDNDL
|
||||
ROL ESTKH+1,X ; DVDNDH
|
||||
DEY
|
||||
BCC _DIV4
|
||||
STY ESTKL-1,X
|
||||
_DIV5 ROL TMPL ; REMNDRL
|
||||
ROL TMPH ; REMNDRH
|
||||
LDA TMPL ; REMNDRL
|
||||
SEC
|
||||
SBC ESTKL,X ; DVSRL
|
||||
TAY
|
||||
LDA TMPH ; REMNDRH
|
||||
SBC ESTKH,X ; DVSRH
|
||||
BCC _DIV6
|
||||
STA TMPH ; REMNDRH
|
||||
STY TMPL ; REMNDRL
|
||||
_DIV6 ROL ESTKL+1,X ; DVDNDL
|
||||
ROL ESTKH+1,X ; DVDNDH
|
||||
DEC ESTKL-1,X
|
||||
BNE _DIV5
|
||||
LDY IPY
|
||||
RTS
|
||||
;*
|
||||
;* NEGATE TOS
|
||||
;*
|
||||
NEG LDA #$00
|
||||
SEC
|
||||
SBC ESTKL,X
|
||||
STA ESTKL,X
|
||||
LDA #$00
|
||||
SBC ESTKH,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* DIV TOS-1 BY TOS
|
||||
;*
|
||||
DIV JSR _DIV
|
||||
@ -175,6 +133,73 @@ MOD JSR _DIV
|
||||
BMI NEG
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* NEGATE TOS
|
||||
;*
|
||||
NEG LDA #$00
|
||||
SEC
|
||||
SBC ESTKL,X
|
||||
STA ESTKL,X
|
||||
LDA #$00
|
||||
SBC ESTKH,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* INTERNAL DIVIDE ALGORITHM
|
||||
;*
|
||||
_NEG LDA #$00
|
||||
SEC
|
||||
SBC ESTKL,X
|
||||
STA ESTKL,X
|
||||
LDA #$00
|
||||
SBC ESTKH,X
|
||||
STA ESTKH,X
|
||||
RTS
|
||||
_DIV STY IPY
|
||||
LDA ESTKH,X
|
||||
AND #$80
|
||||
STA DVSIGN
|
||||
BPL +
|
||||
JSR _NEG
|
||||
INC DVSIGN
|
||||
+ LDA ESTKH+1,X
|
||||
BPL +
|
||||
INX
|
||||
JSR _NEG
|
||||
DEX
|
||||
INC DVSIGN
|
||||
BNE _DIV1
|
||||
+ ORA ESTKL+1,X ; DVDNDL
|
||||
BNE _DIV1
|
||||
STA TMPL
|
||||
STA TMPH
|
||||
RTS
|
||||
_DIV1 LDY #$11 ; #BITS+1
|
||||
LDA #$00
|
||||
STA TMPL ; REMNDRL
|
||||
STA TMPH ; REMNDRH
|
||||
- ASL ESTKL+1,X ; DVDNDL
|
||||
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
|
||||
LDA TMPH ; REMNDRH
|
||||
SBC ESTKH,X ; DVSRH
|
||||
BCC +
|
||||
STA TMPH ; REMNDRH
|
||||
STY TMPL ; REMNDRL
|
||||
+ ROL ESTKL+1,X ; DVDNDL
|
||||
ROL ESTKH+1,X ; DVDNDH
|
||||
DEC ESTKL-1,X
|
||||
BNE _DIVLP
|
||||
LDY IPY
|
||||
RTS
|
||||
;*
|
||||
;* ADD TOS TO TOS-1
|
||||
;*
|
||||
ADD LDA ESTKL,X
|
||||
@ -214,31 +239,6 @@ IDXW LDA ESTKL,X
|
||||
INX
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* INCREMENT TOS
|
||||
;*
|
||||
INCR INC ESTKL,X
|
||||
BNE INCR1
|
||||
INC ESTKH,X
|
||||
INCR1 JMP NEXTOP
|
||||
;*
|
||||
;* DECREMENT TOS
|
||||
;*
|
||||
DECR LDA ESTKL,X
|
||||
BNE DECR1
|
||||
DEC ESTKH,X
|
||||
DECR1 DEC ESTKL,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* BITWISE COMPLIMENT TOS
|
||||
;*
|
||||
COMP LDA #$FF
|
||||
EOR ESTKL,X
|
||||
STA ESTKL,X
|
||||
LDA #$FF
|
||||
EOR ESTKH,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* BITWISE AND TOS TO TOS-1
|
||||
;*
|
||||
BAND LDA ESTKL+1,X
|
||||
|
@ -397,13 +397,13 @@ IDXW LDA ESTKL,X
|
||||
;* MUL TOS-1 BY TOS
|
||||
;*
|
||||
MUL STY IPY
|
||||
LDY #$00
|
||||
STY TMPL ; PRODL
|
||||
STY TMPH ; PRODH
|
||||
LDY #$10
|
||||
MUL1 LSR ESTKH,X ; MULTPLRH
|
||||
LDA #$00
|
||||
STA TMPL ; PRODL
|
||||
STA TMPH ; PRODH
|
||||
MULLP LSR ESTKH,X ; MULTPLRH
|
||||
ROR ESTKL,X ; MULTPLRL
|
||||
BCC MUL2
|
||||
BCC +
|
||||
LDA ESTKL+1,X ; MULTPLNDL
|
||||
CLC
|
||||
ADC TMPL ; PRODL
|
||||
@ -411,15 +411,15 @@ MUL1 LSR ESTKH,X ; MULTPLRH
|
||||
LDA ESTKH+1,X ; MULTPLNDH
|
||||
ADC TMPH ; PRODH
|
||||
STA TMPH
|
||||
MUL2 ASL ESTKL+1,X ; MULTPLNDL
|
||||
+ ASL ESTKL+1,X ; MULTPLNDL
|
||||
ROL ESTKH+1,X ; MULTPLNDH
|
||||
DEY
|
||||
BNE MUL1
|
||||
BNE MULLP
|
||||
INX
|
||||
; LDA TMPH ; PRODH
|
||||
STA ESTKH,X
|
||||
LDA TMPL ; PRODL
|
||||
STA ESTKL,X
|
||||
LDA TMPH ; PRODH
|
||||
STA ESTKH,X
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
@ -437,31 +437,31 @@ _DIV STY IPY
|
||||
LDA ESTKH,X
|
||||
AND #$80
|
||||
STA DVSIGN
|
||||
BPL _DIV1
|
||||
BPL +
|
||||
JSR _NEG
|
||||
INC DVSIGN
|
||||
_DIV1 LDA ESTKH+1,X
|
||||
BPL _DIV2
|
||||
+ LDA ESTKH+1,X
|
||||
BPL +
|
||||
INX
|
||||
JSR _NEG
|
||||
DEX
|
||||
INC DVSIGN
|
||||
BNE _DIV3
|
||||
_DIV2 ORA ESTKL+1,X ; DVDNDL
|
||||
BNE _DIV3
|
||||
BNE _DIV1
|
||||
+ ORA ESTKL+1,X ; DVDNDL
|
||||
BNE _DIV1
|
||||
STA TMPL
|
||||
STA TMPH
|
||||
RTS
|
||||
_DIV3 LDY #$11 ; #BITS+1
|
||||
_DIV1 LDY #$11 ; #BITS+1
|
||||
LDA #$00
|
||||
STA TMPL ; REMNDRL
|
||||
STA TMPH ; REMNDRH
|
||||
_DIV4 ASL ESTKL+1,X ; DVDNDL
|
||||
- ASL ESTKL+1,X ; DVDNDL
|
||||
ROL ESTKH+1,X ; DVDNDH
|
||||
DEY
|
||||
BCC _DIV4
|
||||
BCC -
|
||||
STY ESTKL-1,X
|
||||
_DIV5 ROL TMPL ; REMNDRL
|
||||
_DIVLP ROL TMPL ; REMNDRL
|
||||
ROL TMPH ; REMNDRH
|
||||
LDA TMPL ; REMNDRL
|
||||
SEC
|
||||
@ -469,13 +469,13 @@ _DIV5 ROL TMPL ; REMNDRL
|
||||
TAY
|
||||
LDA TMPH ; REMNDRH
|
||||
SBC ESTKH,X ; DVSRH
|
||||
BCC _DIV6
|
||||
BCC +
|
||||
STA TMPH ; REMNDRH
|
||||
STY TMPL ; REMNDRL
|
||||
_DIV6 ROL ESTKL+1,X ; DVDNDL
|
||||
+ ROL ESTKL+1,X ; DVDNDL
|
||||
ROL ESTKH+1,X ; DVDNDH
|
||||
DEC ESTKL-1,X
|
||||
BNE _DIV5
|
||||
BNE _DIVLP
|
||||
LDY IPY
|
||||
RTS
|
||||
;*
|
||||
|
@ -149,31 +149,31 @@ _DIV STY IPY
|
||||
LDA ESTKH,X
|
||||
AND #$80
|
||||
STA DVSIGN
|
||||
BPL _DIV1
|
||||
BPL +
|
||||
JSR _NEG
|
||||
INC DVSIGN
|
||||
_DIV1 LDA ESTKH+1,X
|
||||
BPL _DIV2
|
||||
+ LDA ESTKH+1,X
|
||||
BPL +
|
||||
INX
|
||||
JSR _NEG
|
||||
DEX
|
||||
INC DVSIGN
|
||||
BNE _DIV3
|
||||
_DIV2 ORA ESTKL+1,X ; DVDNDL
|
||||
BNE _DIV3
|
||||
BNE _DIV1
|
||||
+ ORA ESTKL+1,X ; DVDNDL
|
||||
BNE _DIV1
|
||||
STA TMPL
|
||||
STA TMPH
|
||||
RTS
|
||||
_DIV3 LDY #$11 ; #BITS+1
|
||||
_DIV1 LDY #$11 ; #BITS+1
|
||||
LDA #$00
|
||||
STA TMPL ; REMNDRL
|
||||
STA TMPH ; REMNDRH
|
||||
_DIV4 ASL ESTKL+1,X ; DVDNDL
|
||||
- ASL ESTKL+1,X ; DVDNDL
|
||||
ROL ESTKH+1,X ; DVDNDH
|
||||
DEY
|
||||
BCC _DIV4
|
||||
BCC -
|
||||
STY ESTKL-1,X
|
||||
_DIV5 ROL TMPL ; REMNDRL
|
||||
_DIVLP ROL TMPL ; REMNDRL
|
||||
ROL TMPH ; REMNDRH
|
||||
LDA TMPL ; REMNDRL
|
||||
SEC
|
||||
@ -181,13 +181,13 @@ _DIV5 ROL TMPL ; REMNDRL
|
||||
TAY
|
||||
LDA TMPH ; REMNDRH
|
||||
SBC ESTKH,X ; DVSRH
|
||||
BCC _DIV6
|
||||
BCC +
|
||||
STA TMPH ; REMNDRH
|
||||
STY TMPL ; REMNDRL
|
||||
_DIV6 ROL ESTKL+1,X ; DVDNDL
|
||||
+ ROL ESTKL+1,X ; DVDNDL
|
||||
ROL ESTKH+1,X ; DVDNDH
|
||||
DEC ESTKL-1,X
|
||||
BNE _DIV5
|
||||
BNE _DIVLP
|
||||
LDY IPY
|
||||
RTS
|
||||
;*
|
||||
@ -206,13 +206,13 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E
|
||||
;* MUL TOS-1 BY TOS
|
||||
;*
|
||||
MUL STY IPY
|
||||
LDY #$00
|
||||
STY TMPL ; PRODL
|
||||
STY TMPH ; PRODH
|
||||
LDY #$10
|
||||
MUL1 LSR ESTKH,X ; MULTPLRH
|
||||
LDA #$00
|
||||
STA TMPL ; PRODL
|
||||
STA TMPH ; PRODH
|
||||
MULLP LSR ESTKH,X ; MULTPLRH
|
||||
ROR ESTKL,X ; MULTPLRL
|
||||
BCC MUL2
|
||||
BCC +
|
||||
LDA ESTKL+1,X ; MULTPLNDL
|
||||
CLC
|
||||
ADC TMPL ; PRODL
|
||||
@ -220,15 +220,15 @@ MUL1 LSR ESTKH,X ; MULTPLRH
|
||||
LDA ESTKH+1,X ; MULTPLNDH
|
||||
ADC TMPH ; PRODH
|
||||
STA TMPH
|
||||
MUL2 ASL ESTKL+1,X ; MULTPLNDL
|
||||
+ ASL ESTKL+1,X ; MULTPLNDL
|
||||
ROL ESTKH+1,X ; MULTPLNDH
|
||||
DEY
|
||||
BNE MUL1
|
||||
BNE MULLP
|
||||
INX
|
||||
; LDA TMPH ; PRODH
|
||||
STA ESTKH,X
|
||||
LDA TMPL ; PRODL
|
||||
STA ESTKL,X
|
||||
LDA TMPH ; PRODH
|
||||
STA ESTKH,X
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
|
Loading…
x
Reference in New Issue
Block a user