I should go to bed.

This commit is contained in:
Lokathor 2018-12-16 02:22:07 -07:00
parent 2542662a2c
commit e6547d78ba

View file

@ -191,13 +191,13 @@ to invoke. If you're in 16-bit code you use the value directly, and if you're in
The GBA doesn't have hardware division. You have to do it in software. The GBA doesn't have hardware division. You have to do it in software.
You can implement that yourself (we might get around to trying that, i was even We could potentially implement this in Rust (we might get around to trying that,
sent [a link to a I was even sent [a link to a
paper](https://www.microsoft.com/en-us/research/wp-content/uploads/2008/08/tr-2008-141.pdf) paper](https://www.microsoft.com/en-us/research/wp-content/uploads/2008/08/tr-2008-141.pdf)
that I promptly did not read), or you can call the BIOS to do it for you and that I promptly did not actually read right away), or you can call the BIOS to
trust that it's being as efficient as possible. do it for you and trust that big N did a good enough job.
GBATEK gives a very clear explanation of it: GBATEK gives a fairly clear explanation of our inputs and outputs:
```txt ```txt
Signed Division, r0/r1. Signed Division, r0/r1.
@ -211,11 +211,11 @@ For example, incoming -1234, 10 should return -123, -4, +123.
The function usually gets caught in an endless loop upon division by zero. The function usually gets caught in an endless loop upon division by zero.
``` ```
Of course, the math folks tell me that the `r1` value should be properly called The math folks tell me that the `r1` value should be properly called the
the "remainder" not the "modulus". We'll go with that for our function, doesn't "remainder" not the "modulus". We'll go with that for our function, doesn't hurt
hurt to use the correct names. The function itself is a single assert, then we to use the correct names. The function itself is an assert against dividing by
name some bindings without giving them a value, make the asm call, and then `0`, then we name some bindings _without_ giving them a value, we make the asm
return what we got. call, and then return what we got.
```rust ```rust
pub fn div_rem(numerator: i32, denominator: i32) -> (i32, i32) { pub fn div_rem(numerator: i32, denominator: i32) -> (i32, i32) {