diff options
author | Autechre | 2021-03-17 07:20:55 +0100 |
---|---|---|
committer | GitHub | 2021-03-17 07:20:55 +0100 |
commit | 85ba903b19f9ef39c80906680dd210f259b5160c (patch) | |
tree | f9adf1475cbaa9621bb22eb02c7452a3b6c62922 /gba_memory.c | |
parent | b9ac4536757c4c24afaa86b6e3131ec21e407e80 (diff) | |
parent | 34e672ed25f96c3558534ac24523103f3711e58a (diff) | |
download | picogpsp-85ba903b19f9ef39c80906680dd210f259b5160c.tar.gz picogpsp-85ba903b19f9ef39c80906680dd210f259b5160c.tar.bz2 picogpsp-85ba903b19f9ef39c80906680dd210f259b5160c.zip |
Merge pull request #110 from davidgfnet/master
Rewrite the MIPS stub backend to add OpenDingux
Diffstat (limited to 'gba_memory.c')
-rw-r--r-- | gba_memory.c | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/gba_memory.c b/gba_memory.c index 0727279..c59aab1 100644 --- a/gba_memory.c +++ b/gba_memory.c @@ -427,7 +427,7 @@ u32 eeprom_address = 0; s32 eeprom_counter = 0; u8 eeprom_buffer[8]; -void function_cc write_eeprom(u32 address, u32 value) +void function_cc write_eeprom(u32 unused_address, u32 value) { switch(eeprom_mode) { @@ -749,6 +749,7 @@ static cpu_alert_type trigger_dma(u32 dma_number, u32 value) cpu_alert_type function_cc write_io_register8(u32 address, u32 value) { + value &= 0xff; switch(address) { case 0x00: @@ -1165,6 +1166,7 @@ cpu_alert_type function_cc write_io_register8(u32 address, u32 value) cpu_alert_type function_cc write_io_register16(u32 address, u32 value) { + value &= 0xffff; switch(address) { case 0x00: @@ -1967,6 +1969,10 @@ u8 function_cc read_memory8(u32 address) return value; } +u32 read_memory8s(u32 address) { + return (u32)((s8)read_memory8(address)); +} + u16 function_cc read_memory16_signed(u32 address) { u16 value; @@ -1979,22 +1985,21 @@ u16 function_cc read_memory16_signed(u32 address) return value; } +u32 read_memory16s(u32 address) { + return (u32)((s16)read_memory16_signed(address)); +} + // unaligned reads are actually 32bit u32 function_cc read_memory16(u32 address) { u32 value; - - if(address & 0x01) - { - address &= ~0x01; - read_memory(16); + bool unaligned = (address & 0x01); + address &= ~0x01; + read_memory(16); + if (unaligned) { ror(value, value, 8); } - else - { - read_memory(16); - } return value; } @@ -2003,18 +2008,10 @@ u32 function_cc read_memory16(u32 address) u32 function_cc read_memory32(u32 address) { u32 value; - if(address & 0x03) - { - u32 rotate = (address & 0x03) * 8; - address &= ~0x03; - read_memory(32); - ror(value, value, rotate); - } - else - { - read_memory(32); - } - + u32 rotate = (address & 0x03) * 8; + address &= ~0x03; + read_memory(32); + ror(value, value, rotate); return value; } |