pub struct PicoRng {
    hi: u32,
    lo: u32
}

impl PicoRng {
    // https://www.lexaloffle.com/bbs/?tid=51113
    pub fn srand(seed: u32) -> PicoRng {
        let mut rng = if seed == 0 {
            PicoRng { hi: 0x60009755, lo: 0xdeadbeef }
        } else {
            PicoRng { hi: seed ^ 0xbead29ba, lo: seed }
        };
        for _ in 0..0x20 {
            rng.rnd(0x10000);
        }
        return rng
    }

    pub fn rnd(&mut self, n: u32) -> u32 {
        self.hi = self.hi.rotate_left(0x10).wrapping_add(self.lo);
        self.lo += self.hi;
        return self.hi % n

    }
}