mirror of
https://github.com/A2osX/A2osX.git
synced 2024-10-31 23:09:33 +00:00
360 lines
5.3 KiB
Plaintext
360 lines
5.3 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
MATH jmp (.1,x)
|
||
.1 .DA M16.uMUL
|
||
.DA M16.uDIV
|
||
.DA M16.uMOD
|
||
.DA M16.ADD
|
||
.DA M16.SUB
|
||
|
||
.DA M16.SHL
|
||
.DA M16.SHR
|
||
|
||
.DA M16.L
|
||
.DA M16.LE
|
||
.DA M16.G
|
||
.DA M16.GE
|
||
.DA M16.E
|
||
.DA M16.NE
|
||
|
||
.DA M16.AND
|
||
.DA M16.OR
|
||
.DA M16.XOR
|
||
|
||
.DA M16.LAND
|
||
.DA M16.LOR
|
||
*--------------------------------------
|
||
.DA M16.iMUL
|
||
.DA M16.iDIV
|
||
.DA M16.iMOD
|
||
.DA M16.ADD
|
||
.DA M16.SUB
|
||
|
||
.DA M16.SHL
|
||
.DA M16.SHR
|
||
|
||
.DA M16.L
|
||
.DA M16.LE
|
||
.DA M16.G
|
||
.DA M16.GE
|
||
.DA M16.E
|
||
.DA M16.NE
|
||
|
||
.DA M16.AND
|
||
.DA M16.OR
|
||
.DA M16.XOR
|
||
|
||
.DA M16.LAND
|
||
.DA M16.LOR
|
||
*--------------------------------------
|
||
.DA M32.uMUL
|
||
.DA M32.uDIV
|
||
.DA M32.uMOD
|
||
.DA M32.ADD
|
||
.DA M32.SUB
|
||
|
||
.DA M32.SHL
|
||
.DA M32.SHR
|
||
|
||
.DA M32.L
|
||
.DA M32.LE
|
||
.DA M32.G
|
||
.DA M32.GE
|
||
.DA M32.E
|
||
.DA M32.NE
|
||
|
||
.DA M32.AND
|
||
.DA M32.OR
|
||
.DA M32.XOR
|
||
|
||
.DA M32.LAND
|
||
.DA M32.LOR
|
||
*--------------------------------------
|
||
.DA M32.iMUL
|
||
.DA M32.iDIV
|
||
.DA M32.iMOD
|
||
.DA M32.ADD
|
||
.DA M32.SUB
|
||
|
||
.DA M32.SHL
|
||
.DA M32.SHR
|
||
|
||
.DA M32.L
|
||
.DA M32.LE
|
||
.DA M32.G
|
||
.DA M32.GE
|
||
.DA M32.E
|
||
.DA M32.NE
|
||
|
||
.DA M32.AND
|
||
.DA M32.OR
|
||
.DA M32.XOR
|
||
|
||
.DA M32.LAND
|
||
.DA M32.LOR
|
||
*--------------------------------------
|
||
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 FOUTBuf-1
|
||
bcc .1
|
||
|
||
clc
|
||
lda ACC32+3
|
||
bpl .1
|
||
|
||
jsr M32.nACC
|
||
|
||
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 FOUTBuf-1
|
||
inc FOUTBuf-1
|
||
sta FOUTBuf,y
|
||
rts
|
||
*--------------------------------------
|
||
* Convert Hex int at ZPPtr2 to ACC32
|
||
*--------------------------------------
|
||
MATH.Hex2ACC32 lda (ZPPtr2)
|
||
beq .9
|
||
|
||
jsr .80
|
||
bcs .9
|
||
|
||
jsr M32.A2ACC32
|
||
|
||
ldy #0
|
||
|
||
.1 iny
|
||
lda (ZPPtr2),y
|
||
beq .8
|
||
|
||
jsr .80
|
||
bcs .8
|
||
|
||
pha
|
||
ldx #4
|
||
|
||
.2 jsr MATH.ACC32x2
|
||
dex
|
||
bne .2
|
||
|
||
pla
|
||
ora ACC32
|
||
sta ACC32
|
||
bra .1
|
||
|
||
.8 clc
|
||
rts
|
||
|
||
.9 sec
|
||
.99 rts
|
||
*--------------------------------------
|
||
.80 jsr ZP.IsDigit
|
||
bcc .88
|
||
|
||
cmp #'A'
|
||
bcc .9
|
||
|
||
cmp #'F'+1
|
||
bcc .81
|
||
|
||
cmp #'a'
|
||
bcc .9
|
||
|
||
cmp #'f'+1
|
||
bcs .99
|
||
|
||
eor #$20
|
||
.81
|
||
* clc
|
||
sbc #'A'-11 cc so A->10 (11-CC)
|
||
clc
|
||
.88 and #$0F
|
||
rts
|
||
*--------------------------------------
|
||
* Convert Decimal int at ZPPtr2 to ACC32
|
||
*--------------------------------------
|
||
MATH.Dec2ACC32 jsr M32.ACC32Z
|
||
clc
|
||
lda (ZPPtr2)
|
||
eor #'-'
|
||
bne .10
|
||
|
||
jsr SHARED.NextCP2 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.nACC
|
||
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
|
||
*--------------------------------------
|
||
MATH.CMPT .DA #%100 L
|
||
.DA #%110 LE
|
||
.DA #%001 G
|
||
.DA #%011 GE
|
||
.DA #%010 E
|
||
.DA #%101 NE
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/sys/kernel.s.math
|
||
LOAD usr/src/sys/kernel.s
|
||
ASM
|