Compare commits
3 Commits
37f487ae3f
...
108bf334e8
Author | SHA1 | Date |
---|---|---|
Juhani Krekelä | 108bf334e8 | |
Juhani Krekelä | 95b7c676b2 | |
Juhani Krekelä | 41bdec1b12 |
|
@ -136,15 +136,15 @@ debug:
|
|||
|
||||
breq r0, r0, debugLoop
|
||||
|
||||
debugEnd:
|
||||
cleq r0, r0, newline
|
||||
debugEnd:
|
||||
cleq r0, r0, newline
|
||||
|
||||
load r0, debugr0
|
||||
load r1, debugr1
|
||||
load r2, debugr2
|
||||
load r3, debugr3
|
||||
load r0, debugr0
|
||||
load r1, debugr1
|
||||
load r2, debugr2
|
||||
load r3, debugr3
|
||||
|
||||
ret
|
||||
ret
|
||||
|
||||
debugPtr: addr debugPtr
|
||||
debugr0: data 0
|
||||
|
@ -334,9 +334,7 @@ fUnpack:
|
|||
cleq r0, r0, stLowNybble
|
||||
cleq r0, r0, stOver
|
||||
cleq r0, r0, stStoreByte
|
||||
cleq r0, r0, stDec
|
||||
|
||||
ret
|
||||
breq r0, r0, stDec
|
||||
|
||||
; ptr -- f
|
||||
fPack:
|
||||
|
@ -388,9 +386,7 @@ fPack:
|
|||
cleq r0, r0, stLoadByte
|
||||
cleq r0, r0, stOr
|
||||
cleq r0, r0, stSwap
|
||||
cleq r0, r0, stInc
|
||||
|
||||
ret
|
||||
breq r0, r0, stInc
|
||||
|
||||
; ------------------------------------------------------------------
|
||||
; Unpacked floating point variables
|
||||
|
@ -442,8 +438,8 @@ fResult:
|
|||
; Arithmetic
|
||||
; ------------------------------------------------------------------
|
||||
|
||||
; x y -- tens(x+y) ones(x+y)
|
||||
bcdDigitAdd:
|
||||
; x y z -- tens(x+y+z) ones(x+y+z)
|
||||
bcdDigitAdd3:
|
||||
cleq r0, r0, stAdd
|
||||
|
||||
cleq r0, r0, stDup
|
||||
|
@ -451,18 +447,43 @@ bcdDigitAdd:
|
|||
load r1, #a
|
||||
cleq r0, r0, pushWord
|
||||
cleq r0, r0, stGtEq
|
||||
breq r0, r1, bcdDigitAdd
|
||||
|
||||
; Adjust so that carry is in the high 3 bits
|
||||
; Basically we want 9+1=a₁₆ to become 20₁₆
|
||||
xor r0, r0
|
||||
load r1, #16
|
||||
cleq r0, r0, pushWord
|
||||
cleq r0, r0, stAdd
|
||||
|
||||
; x y -- tens(x+y) ones(x+y)
|
||||
bcdDigitAdd:
|
||||
cleq r0, r0, stAdd
|
||||
|
||||
cleq r0, r0, stDup
|
||||
; Only look at the bottom 5 bits, since high 3 bits may already
|
||||
; contain carry
|
||||
cleq r0, r0, popWord
|
||||
load r2, #1f
|
||||
and r1, r2
|
||||
cleq r0, r0, pushWord
|
||||
xor r0, r0
|
||||
load r1, #a
|
||||
cleq r0, r0, pushWord
|
||||
cleq r0, r0, stGtEq
|
||||
breq r0, r1, bcdDigitAddNoAdjust
|
||||
|
||||
; Adjust so that carry is in the high nybble
|
||||
; Basically we want 9+1=a₁₆ to become 10₁₆
|
||||
; Adjust so that carry is in the high 3 bits
|
||||
; Basically we want 9+1=a₁₆ to become 20₁₆
|
||||
xor r0, r0
|
||||
load r1, #6
|
||||
load r1, #16
|
||||
cleq r0, r0, pushWord
|
||||
cleq r0, r0, stAdd
|
||||
|
||||
bcdDigitAddNoAdjust:
|
||||
cleq r0, r0, stDup
|
||||
cleq r0, r0, stShr4
|
||||
cleq r0, r0, stShr1
|
||||
cleq r0, r0, stSwap
|
||||
breq r0, r0, stLowNybble
|
||||
|
||||
|
@ -602,9 +623,7 @@ fPrint:
|
|||
load r0, fArg1+2
|
||||
cleq r0, r0, writehexNybble
|
||||
load r0, fArg1+3
|
||||
cleq r0, r0, writehexNybble
|
||||
|
||||
ret
|
||||
breq r0, r0, writehexNybble
|
||||
|
||||
fPrintNegativeExponent:
|
||||
cleq r0, r0, popWord ; Remove result we don't need
|
||||
|
@ -624,11 +643,7 @@ fPrint:
|
|||
; added to the corresponding minuend. This by itself gives a
|
||||
; result that is one too small, so we add one to it (c.f. binary
|
||||
; subtraction, where we negate the subtrahend and then add one).
|
||||
; Normally we'd have to split subtraction into two rounds, one
|
||||
; to add the complemented subtrahend and one to add the 1, but
|
||||
; since our minuend is a constant, we can add 1 to it instead.
|
||||
; 501 + 999 - biased
|
||||
; = 500 + 1 + 999 - biased
|
||||
; 500 + 1 + 999 - biased
|
||||
; = 500 + 1000 - biased (1000 = 0 mod 1000)
|
||||
; = 500 - biased
|
||||
|
||||
|
@ -655,14 +670,11 @@ fPrint:
|
|||
xor r0, r0
|
||||
load r1, #5
|
||||
cleq r0, r0, pushWord
|
||||
cleq r0, r0, bcdDigitAdd
|
||||
cleq r0, r0, stSwap
|
||||
cleq r0, r0, popWord
|
||||
xor r0, r0
|
||||
load r1, fArg1+1
|
||||
cleq r0, r0, pushWord
|
||||
cleq r0, r0, bcdDigit9sComplement
|
||||
cleq r0, r0, bcdDigitAdd
|
||||
cleq r0, r0, bcdDigitAdd3
|
||||
cleq r0, r0, stSwap
|
||||
cleq r0, r0, popWord
|
||||
|
||||
|
@ -678,9 +690,7 @@ fPrint:
|
|||
cleq r0, r0, popWord
|
||||
xor r0, r0
|
||||
or r0, r1
|
||||
cleq r0, r0, writehexNybble
|
||||
|
||||
ret
|
||||
breq r0, r0, writehexNybble
|
||||
|
||||
fPrintOverflow:
|
||||
load r0, #4f ; O
|
||||
|
@ -787,6 +797,18 @@ stShr4:
|
|||
shr r0, 4
|
||||
breq r0, r0, pushWord
|
||||
|
||||
; a -- a>>1
|
||||
stShr1:
|
||||
cleq r0, r0, popWord
|
||||
shr r1, 1
|
||||
xor r2, r2
|
||||
or r2, r0
|
||||
shl r2, 4
|
||||
shl r2, 3
|
||||
or r1, r2
|
||||
shr r0, 1
|
||||
breq r0, r0, pushWord
|
||||
|
||||
; a -- a&f
|
||||
stLowNybble:
|
||||
cleq r0, r0, popWord
|
||||
|
@ -942,7 +964,7 @@ stZeroMem:
|
|||
cleq r0, r0, stSwap
|
||||
breq r0, r0, stZeroMem
|
||||
|
||||
stZeroMemDone:
|
||||
stZeroMemDone:
|
||||
ret
|
||||
|
||||
; ==================================================================
|
||||
|
|
Loading…
Reference in New Issue