Hello,
I found a few interesting things about the memory you marked as "Unknown". Maybe you already know this but just in case here it is:
HP49G+ Memory - Additional Info
ARM MMU Tables:
Source (physical) |
Dest (ARM Domain) |
0x0000_0000 |
0x0000_0000 |
0x0010_0000 |
0x0010_0000 |
0x0020_0000 |
0x0020_0000 |
0x0030_0000 |
0x0030_0000 |
0x0040_0000 |
0x0040_0000 |
0x0050_0000 |
0x0050_0000 |
0x0060_0000 |
0x0060_0000 |
0x0070_0000 |
0x0070_0000 |
...nothing in between... |
|
0x4800_0000 |
0x0700_0000 |
0x4a00_0000 |
0x0710_0000 |
0x4c00_0000 |
0x0720_0000 |
0x4d00_0000 |
0x0730_0000 |
0x4e00_0000 |
0x0740_0000 |
0x5000_0000 |
0x0750_0000 |
0x5100_0000 |
0x0760_0000 |
0x5200_0000 |
0x0770_0000 |
0x5300_0000 |
0x0780_0000 |
0x5500_0000 |
0x0790_0000 |
0x5600_0000 |
0x07a0_0000 |
0x5700_0000 |
0x07b0_0000 |
0x5800_0000 |
0x07c0_0000 |
0x5900_0000 |
0x07d0_0000 |
0x5a00_0000 |
0x07e0_0000 |
0x4000_0000 |
0x07f0_0000 |
0x0800_0000 |
0x0800_0000 |
|
|
The above is the virtual memory map I read from the memory dump, so this is exactly what we should use. ERAM starts at 0x0800_0000 and will appear again at 0x0808_0000 because there are only 512k and the memory is mapped in 1 Mb blocks. The other addresses you observed might be due to the fact that the screen overlaps the virtual table. So we shouldn't assume that other addresses are usable.
At 0x4000_0000 (remapped to 0x07F0_0000) is:
Offset 0x00000 - 0x04000 ==> in theory this is the virtual memory map, but the HP49G+ only uses part of it, so it's really from 0x00000 - 0x00203 used, the rest are invalid entries. The screen is actually overlapping with the virtual table entry, so we could create a valid entry by drawing the proper pixels to the screen. I have not tried this but if we write the word 0x0800c1a (reversing the nibbles) at 0x07F00260 (the top of the screen), then ERAM and Port 0 should appear also mapped at 0x0980_0000.
0x00260 - 0x0089f ==> The
screen is configured for 85 lines, so it actually ends at 0x00903. Of course the
last 5 lines are invisible and full of garbage.
0x00904-0x0FFF ==> Unused FREE RAM for us? (this is also part of the unused virtual memory table). Maybe we could use this area (1788 bytes, and it doesn't seem to be used by the ROM, but who knows...).
Note: Although the virtual memory table covers up to 0x3FFF, this region of memory is mapped with the internal SRAM that the processor has for booting from flash rom, and that's only 4kbytes, so the (free?) memory ends at offset 0x0FFF.
Good job with your web page and the emulator, and thanks for sharing the info.
Claudio