mirror of
https://github.com/mattrberry/crab.git
synced 2025-02-05 08:45:50 +01:00
thumb load/store register offset
This commit is contained in:
parent
dfb833a351
commit
9b1f73e741
2 changed files with 17 additions and 1 deletions
16
src/crab/thumb/load_store_register_offset.cr
Normal file
16
src/crab/thumb/load_store_register_offset.cr
Normal file
|
@ -0,0 +1,16 @@
|
|||
module THUMB
|
||||
def thumb_load_store_register_offset(instr : Word) : Nil
|
||||
load_and_byte_quantity = bits(instr, 10..11)
|
||||
ro = bits(instr, 6..8)
|
||||
rb = bits(instr, 3..5)
|
||||
rd = bits(instr, 0..2)
|
||||
address = @r[rb] &+ @r[ro]
|
||||
case load_and_byte_quantity
|
||||
when 0b00 then @gba.bus[address] = @r[rd]
|
||||
when 0b01 then @gba.bus[address] = 0xFF_u8 & @r[rd]
|
||||
when 0b10 then @r[rd] = @gba.bus.read_word address
|
||||
when 0b11 then @r[rd] = 0xFFFFFFFF_u32 & @gba.bus[address]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -31,7 +31,7 @@ module THUMB
|
|||
elsif idx & 0b11110010 == 0b01010010
|
||||
lut[idx] = ->thumb_load_store_sign_extended(Word)
|
||||
elsif idx & 0b11110010 == 0b01010000
|
||||
# load/store with register offset
|
||||
lut[idx] = ->thumb_load_store_register_offset(Word)
|
||||
elsif idx & 0b11111000 == 0b01001000
|
||||
lut[idx] = ->thumb_pc_relative_load(Word)
|
||||
elsif idx & 0b11111100 == 0b01000100
|
||||
|
|
Loading…
Add table
Reference in a new issue