mirror of
https://github.com/A2osX/A2osX.git
synced 2024-10-09 14:55:05 +00:00
258 lines
4.0 KiB
Plaintext
258 lines
4.0 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
MATH jmp (.1,x)
|
||
.1 .DA M16.ADD
|
||
.DA M16.SUB
|
||
.DA M16.UMUL
|
||
.DA M16.IMUL
|
||
.DA M16.UDIV
|
||
.DA M16.IDIV
|
||
.DA M16.UMOD
|
||
.DA M16.IMOD
|
||
.DA M16.CMP UCMP
|
||
.DA M16.CMP ICMP
|
||
.DA M32.ADD
|
||
.DA M32.SUB
|
||
.DA M32.UMUL
|
||
.DA M32.IMUL
|
||
.DA M32.UDIV
|
||
.DA M32.IDIV
|
||
.DA M32.UMOD
|
||
.DA M32.IMOD
|
||
.DA M32.CMP UCMP
|
||
.DA M32.CMP ICMP
|
||
*--------------------------------------
|
||
MATH.A2STR10NP ldx #3 3 digit max
|
||
ldy #0 Disable Padding
|
||
|
||
MATH.A2STR10 jsr M32.A2ACC32
|
||
clc unsigned
|
||
*--------------------------------------
|
||
* CS = signed long
|
||
* CC = unsigned long
|
||
* X = Pad Len
|
||
* Y = Pad Char
|
||
*--------------------------------------
|
||
MATH.ACC322STR10
|
||
stx .5+1 Pad Len
|
||
sty .81+1 Pad Char
|
||
|
||
stz A2osX.NumStrLen
|
||
bcc .1
|
||
|
||
clc
|
||
lda ACC32+3
|
||
bpl .1
|
||
|
||
jsr M32.nACC32
|
||
|
||
sec
|
||
.1 ror ACC32.Sign Save sign
|
||
|
||
ldx #4
|
||
|
||
.2 stz RESULT,x Clear all 5 bytes
|
||
dex
|
||
bpl .2
|
||
|
||
sed switch to BCD mode
|
||
|
||
ldx #32 let's roll 32 bits
|
||
.3 jsr MATH.ACC32x2
|
||
|
||
ldy #4
|
||
|
||
.4 lda RESULT,y
|
||
adc RESULT,y
|
||
sta RESULT,y
|
||
dey
|
||
bpl .4
|
||
|
||
dex
|
||
bne .3
|
||
|
||
cld
|
||
|
||
ldx .5+1 no padding
|
||
beq .6
|
||
|
||
lda #10 starts at 10-padlen
|
||
sec
|
||
|
||
.5 sbc #$ff SELF MODIFIED
|
||
tax
|
||
|
||
.6 txa
|
||
lsr
|
||
tay
|
||
lda RESULT,y
|
||
bcs .7
|
||
|
||
lsr
|
||
lsr
|
||
lsr
|
||
lsr
|
||
|
||
.7 and #$0F
|
||
ora #$30
|
||
|
||
cmp #'0'
|
||
beq .80
|
||
|
||
ldy #'0' next 0s always printed
|
||
sty .81+1
|
||
bra .82
|
||
|
||
.80 cpx #9 last char, print always
|
||
beq .82
|
||
|
||
.81 lda #$ff SELF MODIFIED Get Padding char
|
||
beq .87
|
||
|
||
.82 bit ACC32.Sign "-" to print ?
|
||
bpl .86
|
||
|
||
pha
|
||
lda #'-'
|
||
jsr .88
|
||
stz ACC32.Sign
|
||
pla
|
||
|
||
.86 jsr .88
|
||
.87 inx
|
||
cpx #10
|
||
bne .6
|
||
|
||
lda #0
|
||
|
||
.88 ldy A2osX.NumStrLen
|
||
inc A2osX.NumStrLen
|
||
sta A2osX.NumStrBuf,y
|
||
rts
|
||
*--------------------------------------
|
||
* Convert Hex int at ZPPtr2 to ACC32
|
||
*--------------------------------------
|
||
MATH.Hex2ACC32 lda (ZPPtr2)
|
||
beq .9
|
||
|
||
jsr SHARED.IsHexDigit
|
||
bcs .9
|
||
|
||
jsr M32.A2ACC32
|
||
|
||
ldy #0
|
||
|
||
.1 iny
|
||
lda (ZPPtr2),y
|
||
beq .8
|
||
|
||
jsr SHARED.IsHexDigit
|
||
bcs .8
|
||
|
||
pha
|
||
ldx #4
|
||
|
||
.2 jsr MATH.ACC32x2
|
||
dex
|
||
bne .2
|
||
|
||
pla
|
||
ora ACC32
|
||
sta ACC32
|
||
bra .1
|
||
|
||
.8 clc
|
||
rts
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
* Convert Decimal int at ZPPtr2 to ACC32
|
||
*--------------------------------------
|
||
MATH.Dec2ACC32 jsr M32.ACC32Z
|
||
clc
|
||
lda (ZPPtr2)
|
||
eor #'-'
|
||
bne .10
|
||
|
||
jsr SHARED.NextCharPtr2 skip '-'
|
||
sec
|
||
.10 ror .80+1 set pos/neg flag
|
||
|
||
ldy #$ff
|
||
|
||
.1 iny
|
||
lda (ZPPtr2),y
|
||
beq .8
|
||
jsr ZP.IsDigit
|
||
bcs .8
|
||
|
||
phy Save Y, pointing to next char
|
||
jsr .70
|
||
ply
|
||
bcs .9
|
||
|
||
lda (ZPPtr2),y
|
||
and #$0F
|
||
* clc
|
||
|
||
adc ACC32
|
||
sta ACC32
|
||
bcc .1
|
||
inc ACC32+1
|
||
bne .1
|
||
inc ACC32+2
|
||
bne .1
|
||
inc ACC32+3
|
||
bne .1 if 0, overflow!!!
|
||
|
||
.9 lda #E.INUM
|
||
sec
|
||
rts
|
||
|
||
.8 tya no digit parsed...error
|
||
beq .9
|
||
|
||
.80 lda #$FF SELF MODIFIED
|
||
bpl .88
|
||
|
||
phy
|
||
jsr M32.nACC32
|
||
ply
|
||
|
||
.88 clc
|
||
rts
|
||
*--------------------------------------
|
||
.70 ldx #3
|
||
|
||
.71 lda ACC32,x save ACC32 for 4+1
|
||
pha
|
||
dex
|
||
bpl .71
|
||
|
||
jsr MATH.ACC32x2 ACC32 * 2 -> ACC32
|
||
jsr MATH.ACC32x2 ACC32 * 4 -> ACC32
|
||
|
||
ldx #0
|
||
ldy #4
|
||
* clc
|
||
|
||
.72 pla ACC32 * 4 + ACC32 -> ACC32
|
||
adc ACC32,x
|
||
sta ACC32,x
|
||
inx
|
||
dey
|
||
bne .72
|
||
|
||
MATH.ACC32x2 asl ACC32
|
||
rol ACC32+1
|
||
rol ACC32+2
|
||
rol ACC32+3
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/sys/kernel.s.math
|
||
LOAD usr/src/sys/kernel.s
|
||
ASM
|