mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-01-25 11:30:04 +00:00
New 32 bit integer library
This commit is contained in:
parent
4aa8c8da1f
commit
5ca96095cf
231
src/libsrc/int32.pla
Normal file
231
src/libsrc/int32.pla
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
//
|
||||||
|
// 32 bit integer math routines
|
||||||
|
//
|
||||||
|
include "inc/cmdsys.plh"
|
||||||
|
//
|
||||||
|
// Include zero page definitions
|
||||||
|
//
|
||||||
|
asm int32Inc
|
||||||
|
!SOURCE "vmsrc/plvmzp.inc"
|
||||||
|
ACCUM32 = DSTH+1
|
||||||
|
end
|
||||||
|
export asm accum32zero#0
|
||||||
|
LDA #$00
|
||||||
|
STA ACCUM32+0
|
||||||
|
STA ACCUM32+1
|
||||||
|
STA ACCUM32+2
|
||||||
|
STA ACCUM32+3
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
export asm accum32neg#0
|
||||||
|
LDA #$00
|
||||||
|
SEC
|
||||||
|
SBC ACCUM32+0
|
||||||
|
STA ACCUM32+0
|
||||||
|
LDA #$00
|
||||||
|
SBC ACCUM32+1
|
||||||
|
STA ACCUM32+1
|
||||||
|
LDA #$00
|
||||||
|
SBC ACCUM32+2
|
||||||
|
STA ACCUM32+2
|
||||||
|
LDA #$00
|
||||||
|
SBC ACCUM32+3
|
||||||
|
STA ACCUM32+3
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
export asm accum32loadi(imm16)#0
|
||||||
|
LDY #$00
|
||||||
|
LDA ESTKL+0,X
|
||||||
|
STA ACCUM32+0
|
||||||
|
LDA ESTKH+0,X
|
||||||
|
BPL + ; SIGN EXTEND
|
||||||
|
DEY
|
||||||
|
+ STA ACCUM32+1
|
||||||
|
STY ACCUM32+2
|
||||||
|
STY ACCUM32+3
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
export asm accum32load(i32ptr)#0
|
||||||
|
LDA ESTKL+0,X ; i32PTR
|
||||||
|
STA SRCL
|
||||||
|
LDA ESTKH+0,X ; I32PTR
|
||||||
|
STA SRCL
|
||||||
|
LDY #$00
|
||||||
|
LDA (SRC),Y
|
||||||
|
STA ACCUM32+0
|
||||||
|
INY
|
||||||
|
LDA (SRC),Y
|
||||||
|
STA ACCUM32+1
|
||||||
|
INY
|
||||||
|
LDA (SRC),Y
|
||||||
|
STA ACCUM32+2
|
||||||
|
INY
|
||||||
|
LDA (SRC),Y
|
||||||
|
STA ACCUM32+3
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
export asm accum32store(i32ptr)#0
|
||||||
|
LDA ESTKL+0,X ; i32PTR
|
||||||
|
STA DSTL
|
||||||
|
LDA ESTKH+0,X ; I32PTR
|
||||||
|
STA DSTL
|
||||||
|
LDY #$00
|
||||||
|
LDA ACCUM32+0
|
||||||
|
STA (DST),Y
|
||||||
|
INY
|
||||||
|
LDA ACCUM32+1
|
||||||
|
STA (DST),Y
|
||||||
|
INY
|
||||||
|
LDA ACCUM32+2
|
||||||
|
STA (DST),Y
|
||||||
|
INY
|
||||||
|
LDA ACCUM32+3
|
||||||
|
STA (DST),Y
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
export asm accum32addi(imm16)#0
|
||||||
|
LDY #$00
|
||||||
|
LDA ESTKL+0,X ; IMM16
|
||||||
|
CLC
|
||||||
|
ADC ACCUM32+0
|
||||||
|
STA ACCUM32+0
|
||||||
|
LDA ESTKH+0,X ; IMM16
|
||||||
|
BPL +
|
||||||
|
DEY
|
||||||
|
+ ADC ACCUM32+1
|
||||||
|
STA ACCUM32+1
|
||||||
|
TYA
|
||||||
|
ADC ACCUM32+2
|
||||||
|
STA ACCUM32+2
|
||||||
|
TYA
|
||||||
|
ADC ACCUM32+3
|
||||||
|
STA ACCUM32+3
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
export asm accum32add(i32ptr)#0
|
||||||
|
LDA ESTKL+0,X ; I32PTR
|
||||||
|
STA SRCL
|
||||||
|
LDA ESTKH+0,X ; I32PTR
|
||||||
|
STA SRCL
|
||||||
|
LDY #$00
|
||||||
|
LDA (SRC),Y
|
||||||
|
CLC
|
||||||
|
ADC ACCUM32+0
|
||||||
|
STA ACCUM32+0
|
||||||
|
INY
|
||||||
|
ADC ACCUM32+1
|
||||||
|
STA ACCUM32+1
|
||||||
|
INY
|
||||||
|
ADC ACCUM32+2
|
||||||
|
STA ACCUM32+2
|
||||||
|
INY
|
||||||
|
ADC ACCUM32+3
|
||||||
|
STA ACCUM32+3
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
export asm accum32subi(imm16)#0
|
||||||
|
LDY #$00
|
||||||
|
LDA ESTKL+0,X ; IMM16
|
||||||
|
SEC
|
||||||
|
SBC ACCUM32+0
|
||||||
|
STA ACCUM32+0
|
||||||
|
LDA ESTKH+0,X ; IMM16
|
||||||
|
BPL +
|
||||||
|
DEY
|
||||||
|
+ SBC ACCUM32+1
|
||||||
|
STA ACCUM32+1
|
||||||
|
TYA
|
||||||
|
SBC ACCUM32+2
|
||||||
|
STA ACCUM32+2
|
||||||
|
TYA
|
||||||
|
SBC ACCUM32+3
|
||||||
|
STA ACCUM32+3
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
export asm accum32sub(i32ptr)#0
|
||||||
|
LDA ESTKL+0,X ; I32PTR
|
||||||
|
STA SRCL
|
||||||
|
LDA ESTKH+0,X ; I32PTR
|
||||||
|
STA SRCL
|
||||||
|
LDY #$00
|
||||||
|
LDA (SRC),Y
|
||||||
|
SEC
|
||||||
|
SBC ACCUM32+0
|
||||||
|
STA ACCUM32+0
|
||||||
|
INY
|
||||||
|
SBC ACCUM32+1
|
||||||
|
STA ACCUM32+1
|
||||||
|
INY
|
||||||
|
SBC ACCUM32+2
|
||||||
|
STA ACCUM32+2
|
||||||
|
INY
|
||||||
|
SBC ACCUM32+3
|
||||||
|
STA ACCUM32+3
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
end
|
||||||
|
export asm accum32mul(i32ptr)#0
|
||||||
|
LDA ESTKL+1,X ; I32PTR
|
||||||
|
STA SRCL
|
||||||
|
LDA ESTKH+1,X ; I32PTR
|
||||||
|
STA SRCH
|
||||||
|
STX ESP
|
||||||
|
LDX #$00
|
||||||
|
LDY #$03
|
||||||
|
STY IPY
|
||||||
|
LDA #$80
|
||||||
|
_MULLP PHA
|
||||||
|
LDY IPY
|
||||||
|
AND (TMP),Y
|
||||||
|
BEQ +
|
||||||
|
LDY #$00
|
||||||
|
CLC
|
||||||
|
LDA (SRC),Y
|
||||||
|
ADC (DST),Y
|
||||||
|
STA (DST),Y
|
||||||
|
INY
|
||||||
|
LDA (SRC),Y
|
||||||
|
ADC (DST),Y
|
||||||
|
STA (DST),Y
|
||||||
|
INY
|
||||||
|
LDA (SRC),Y
|
||||||
|
ADC (DST),Y
|
||||||
|
STA (DST),Y
|
||||||
|
INY
|
||||||
|
LDA (SRC),Y
|
||||||
|
ADC (DST),Y
|
||||||
|
STA (DST),Y
|
||||||
|
+ DEX
|
||||||
|
BEQ ++
|
||||||
|
LDY #$00
|
||||||
|
ASL (DST),Y
|
||||||
|
INY
|
||||||
|
ROL (DST),Y
|
||||||
|
INY
|
||||||
|
ROL (DST),Y
|
||||||
|
INY
|
||||||
|
ROL (DST),Y
|
||||||
|
PLA
|
||||||
|
LSR
|
||||||
|
BNE _MULLP
|
||||||
|
LDA #$80
|
||||||
|
DEC IPY
|
||||||
|
|
||||||
|
_SHLPRD LDY
|
||||||
|
ASL ESTKL,X ; MULTPLNDL
|
||||||
|
ROL ESTKH,X ; MULTPLNDH
|
||||||
|
DEX
|
||||||
|
BNE _MULLP
|
||||||
|
STA ESTKH+1,X ; PRODH
|
||||||
|
|
||||||
|
LDX ESP
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
RTS
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user