diff -ur nspire_emu_026/apb.c nspire_emu_026_for_os_2.1/apb.c --- nspire_emu_026/apb.c 2010-03-06 11:02:12.000000000 +0100 +++ nspire_emu_026_for_os_2.1/apb.c 2010-07-15 22:35:49.524645400 +0200 @@ -378,6 +378,7 @@ case 0x0: return 0; case 0x4: return 9; // Number of halfwords starting at +10 case 0x8: return 2; + case 0xc: return 2; } return bad_read_word(addr); } @@ -392,6 +393,7 @@ case 0x0: return; case 0x4: return; case 0x8: return; + case 0xc: return; } bad_write_word(addr, value); } @@ -405,8 +407,10 @@ } u32 unknown_900F_read_word(u32 addr) { switch (addr & 0xFFFF) { + case 0x08: return 0; case 0x0C: return 0; case 0x10: return 0; + case 0x14: return 2; } return bad_read_word(addr); } @@ -418,7 +422,9 @@ } void unknown_900F_write_word(u32 addr, u32 value) { switch (addr & 0xFFFF) { + case 0x04: return; case 0x0C: return; + case 0x14: return; case 0x20: return; } bad_write_word(addr, value); diff -ur nspire_emu_026/memory.c nspire_emu_026_for_os_2.1/memory.c --- nspire_emu_026/memory.c 2010-03-06 10:58:56.000000000 +0100 +++ nspire_emu_026_for_os_2.1/memory.c 2010-07-15 23:24:37.259020400 +0200 @@ -110,6 +110,24 @@ bad_write_word(addr, value); } +/* A9000000 */ +u32 unknown_A9_read_word(u32 addr) { + switch (addr & 0xFFFFFF) { + case 0x10: return 1; + case 0x1c: return 0; + case 0x20: return 0; + } + return bad_read_word(addr); +} +void unknown_A9_write_word(u32 addr, u32 value) { + switch (addr & 0xFFFFFF) { + case 0x0C: return; + case 0x1C: return; + case 0x20: return; + } + bad_write_word(addr, value); +} + /* AC000000 */ u8 unknown_AC_read_byte(u32 addr) { switch (addr & 0x3FFFFFF) { @@ -143,8 +161,10 @@ // returning 0 causes OS 1.1 to detect a "probe" (?) // and hang trying to communicate with it case 0x1A4: return -1; + case 0x1AC: return 0; case 0x1B0: return 0; case 0x1B4: return 0; + case 0x1BC: return 0; case 0x1C0: return 0; } return bad_read_word(addr); @@ -163,6 +183,7 @@ case 0x1A8: return; case 0x1AC: return; case 0x1B4: return; + case 0x1BC: return; case 0x1C0: return; } bad_write_word(addr, value); @@ -423,6 +444,9 @@ write_byte_map[0xA4 >> 2] = memory_write_byte; write_half_map[0xA4 >> 2] = memory_write_half; write_word_map[0xA4 >> 2] = memory_write_word; + + read_word_map[0xA9 >> 2] = unknown_A9_read_word; + write_word_map[0xA9 >> 2] = unknown_A9_write_word; read_byte_map[0xAC >> 2] = unknown_AC_read_byte;