- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
setRegState :: RegisterStates -> M_Register -> Word8 -> RegisterStates
setRegState rs r n =
let (a, b, c, d, e, f, h, l, pc, sp) = rs in
case r of
M_A -> (n, b, c, d, e, f, h, l, pc, sp)
M_B -> (a, n, c, d, e, f, h, l, pc, sp)
M_C -> (a, b, n, d, e, f, h, l, pc, sp)
M_D -> (a, b, c, n, e, f, h, l, pc, sp)
M_E -> (a, b, c, d, n, f, h, l, pc, sp)
M_F -> (a, b, c, d, e, n.&.0xF0, h, l, pc, sp)
M_H -> (a, b, c, d, e, f, n, l, pc, sp)
M_L -> (a, b, c, d, e, f, h, n, pc, sp)
https://github.com/bitc/omegagb/blob/master/src/CpuIO.hs
Ну и в конце-концов это же GameBoy, а не нинтендо64 или сонька какая-нибудь. Он и на javascript летать будет 😉
И представлять сложные состояния километровыми кортежами значений, когда есть хотя бы структуры — это говновато вне зависимости от задачи и подхода. Например, в LazyNES (https://github.com/trez/LazyNES/blob/master/CPU/Definition.hs) всё гораздо лучше организовано.