mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-29 17:50:18 +00:00
142 lines
2.1 KiB
Plaintext
142 lines
2.1 KiB
Plaintext
NEW
|
||
PREFIX
|
||
AUTO 4,1
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
* Uses: (pData)
|
||
* M32.ACC .BS 4
|
||
* M32.ARG .BS 4
|
||
* M32.TMP .BS 4
|
||
*--------------------------------------
|
||
* TODO : Make it SIGNED 32 bits
|
||
* TODO : Implement mul, div, mod ...
|
||
* http://6502.org/source/integers/32muldiv.htm
|
||
*--------------------------------------
|
||
M32.Add ldy #M32.ARG+4 ARG+ACC->ACC
|
||
|
||
.1 dey
|
||
lda (pData),y
|
||
pha
|
||
cpy #M32.ARG
|
||
bne .1
|
||
|
||
ldy #M32.ACC
|
||
ldx #4
|
||
|
||
clc
|
||
|
||
.2 pla
|
||
adc (pData),y
|
||
sta (pData),y
|
||
iny
|
||
dex
|
||
bne .2
|
||
|
||
rts if CS, Overflow
|
||
*---------------------------------------
|
||
M32.Sub ldy #M32.ARG+4 ARG-ACC->ACC
|
||
|
||
.1 dey
|
||
lda (pData),y
|
||
pha
|
||
cpy #M32.ARG
|
||
bne .1
|
||
|
||
ldy #M32.ACC
|
||
ldx #4
|
||
|
||
sec
|
||
|
||
.2 pla
|
||
sbc (pData),y
|
||
sta (pData),y
|
||
iny
|
||
dex
|
||
bne .2
|
||
|
||
bcs .8 if CC, Overflow
|
||
|
||
sec
|
||
rts
|
||
|
||
.8 clc
|
||
rts
|
||
*--------------------------------------
|
||
M32.Mul
|
||
*--------------------------------------
|
||
M32.Div
|
||
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
M32.Mod
|
||
|
||
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
M32.ACC2ARG ldy #M32.ACC+4 ACC->ARG
|
||
|
||
.1 dey
|
||
lda (pData),y
|
||
pha
|
||
cpy #M32.ACC
|
||
bne .1
|
||
|
||
ldy #M32.ARG
|
||
|
||
.2 pla
|
||
sta (pData),y
|
||
iny
|
||
cpy #M32.ARG+4
|
||
bne .2
|
||
|
||
rts
|
||
*--------------------------------------
|
||
M32.Cmp ldx #4
|
||
ldy #M32.ARG+3
|
||
|
||
.1 lda (pData),y
|
||
pha
|
||
dey
|
||
dex
|
||
bne .1
|
||
|
||
ldx #4
|
||
ldy #M32.ACC
|
||
|
||
sec
|
||
|
||
.2 pla
|
||
sbc (pData),y
|
||
sta (pData),y
|
||
iny
|
||
dex
|
||
bne .2
|
||
|
||
bcc .5 CC if ACC < ARG
|
||
|
||
ldy #M32.ACC
|
||
|
||
lda (pData),y
|
||
iny
|
||
ora (pData),y
|
||
iny
|
||
ora (pData),y
|
||
iny
|
||
ora (pData),y Z if ACC = ARG
|
||
|
||
bne .4
|
||
|
||
lda #%010 001 ACC = ARG
|
||
rts
|
||
|
||
.4 lda #%100 010 ACC > ARG
|
||
rts
|
||
|
||
.5 lda #%001 100 ACC < ARG
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE USR/SRC/X.M32.S
|