mirror of
https://github.com/KarolS/millfork.git
synced 2026-04-20 18:16:35 +00:00
6502: Fix word division and byte multiplication
This commit is contained in:
+27
-2
@@ -68,12 +68,17 @@ __mul_u16u8u16_start:
|
||||
}
|
||||
|
||||
// divide (__reg[1]:__reg[0])/__reg[2]
|
||||
// remainder in A, quotient in (__reg[1]:__reg[0])
|
||||
|
||||
noinline asm byte __mod_u16u8u16u8() {
|
||||
? LDA #0
|
||||
? LDX #15
|
||||
? CLC
|
||||
__divmod_u16u8u16u8_start:
|
||||
// TODO: decide when
|
||||
#if OPTIMIZE_FOR_SPEED
|
||||
? LDA __reg+2
|
||||
? BMI __divmod_u16u8u16u8_variant2
|
||||
? LDA #0
|
||||
__divmod_u16u8u16u8_start: // for divisors <= 127
|
||||
? ROL __reg
|
||||
? ROL __reg+1
|
||||
? ROL
|
||||
@@ -86,6 +91,25 @@ __divmod_u16u8u16u8_skip:
|
||||
? ROL __reg
|
||||
? ROL __reg+1
|
||||
? RTS
|
||||
#endif
|
||||
__divmod_u16u8u16u8_variant2:
|
||||
? LDA #0
|
||||
__divmod_u16u8u16u8_start2: // for divisors >= 128
|
||||
? ROL __reg
|
||||
? ROL __reg+1
|
||||
? ROL
|
||||
? BCS __divmod_u16u8u16u8_sub2
|
||||
? CMP __reg+2
|
||||
? BCC __divmod_u16u8u16u8_skip2
|
||||
__divmod_u16u8u16u8_sub2:
|
||||
? SBC __reg+2
|
||||
? SEC
|
||||
__divmod_u16u8u16u8_skip2:
|
||||
? DEX
|
||||
? BPL __divmod_u16u8u16u8_start2
|
||||
? ROL __reg
|
||||
? ROL __reg+1
|
||||
? RTS
|
||||
}
|
||||
|
||||
asm word __div_u16u8u16u8() {
|
||||
@@ -93,6 +117,7 @@ asm word __div_u16u8u16u8() {
|
||||
? LDA __reg
|
||||
? LDX __reg+1
|
||||
? RTS
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user