The SH7305 is comprised of many different peripherals that surround a SH4a core in the SH7305. Due to a lack of known documentation, the peripherals included in the SH7305 are guessed based on similarities to other SuperH CPUs with known documentation.
Unknown Peripherals #
Please document all reads/writes to unknown peripherals. This is an effort to produce documentation by analyzing their usage. Please report the address, access size in bytes, mark read and/or write, and note what the surrounding code was doing or any hypothesis about the function. Note that 0x8xxxxxxx-0x9xxxxxxx and 0xAxxxxxxx-0xBxxxxxxx addresses are identical, standardize on 0xAxxxxxxx-0xBxxxxxxx addresses.
Address | Size | Read | Write | Notes |
---|---|---|---|---|
A400 0010 | 4 | 🔴 | 🔵 | Writes 4 on cold start. Later, reads it, then writes 0x808 and 0. |
A400 001C | 4 | 🔵 | 🔵 | Writes 0x800 on cold start |
A400 0024 | 4 | 🔵 | 🔴 | |
A42F 0004 | 4 | 🔴 | 🔵 | Right after reading BSC, before reading/write to A400001C |
A405 0184 | 2 | 🔴 | 🔵 | Writes 0x9554 on cold start. Order for next 3: …86, …88, …8A, …84. This overlaps with the SH7724’s PFC’s PULCR (pullup control register), but most likely not the same. |
A405 0186 | 2 | 🔴 | 🔵 | Writes 0x5555 on cold start. Overlaps with the SH7724’s PFC |
A405 0188 | 2 | 🔴 | 🔵 | Writes 0x5555 on cold start. Overlaps with the SH7724’s PFC |
A405 018A | 2 | 🔴 | 🔵 | Writes 0x5515 on cold start. Overlaps with the SH7724’s PFC |
A408 0008 | 2 | 🔵 | 🔵 | Reads and writes 0 back. |
A408 008C | 1 | 🔴 | 🔵 | Writes 0xC |
A415 0014 | 4 | 🔵 | 🔵 | Writes 0x100. This occurs in a block of writing 0x100 to A415 003C and A415 0008 (CPG-related). |
A44D 00D0 | 1 | 🔴 | 🔵 | Initialized to 0x01 in a large peripheral init block |
A44D 00D4 | 4 | 🔴 | 🔵 | Initialized to 0xFFFFFFFF in a large peripheral init block |
A44D 00D8 | 4 | 🔴 | 🔵 | Initialized to 0xFFFFFFFF in a large peripheral init block |
A44D 00DC | 1 | 🔴 | 🔵 | Initialized to 0x0 in a large peripheral init block |
FEC1 5040 | 2 | 🔵 | 🔴 | Reads on boot in a BSC-reading block. If this is the SH7730, then it read 2 bytes in a write-only 4-byte SDRAM mode register. |
FE20 0000 | 4 | 🔵 | 🔵 | This is the base of a memory block from 0xFE200000 to 0xFE227FFF (160KB). Bootloader copies… something from high to lower, whole address range. |
FE24 0000 | 4 | 🔵 | 🔵 | This is the base of a memory block from 0xFE240000 to 0xFE269FFF (168KB). Bootloader copies… something from high to lower, whole address range. |
FE28 0000 | 4 | 🔵 | 🔵 | This is the base of a memory block from 0xFE280000 to 0xFE28BFFF (176KB). Bootloader copies… something from high to lower, whole address range. |
FE30 0000 | 4 | 🔵 | 🔵 | This is the base of another memory block from 0xFE300000 to 0xFE327FFF (160KB). Also has something copied high to low right after the 0xFE200000 copy. |
FE34 0000 | 4 | 🔵 | 🔵 | This is the base of another memory block from 0xFE340000 to 0xFE369FFF (168KB). Also has something copied high to low right after the 0xFE240000 copy. |
FE38 0000 | 4 | 🔵 | 🔵 | This is the base of another memory block from 0xFE380000 to 0xFE38BFFF (176KB). Also has something copied high to low right after the 0xFE280000 copy. (0xBC000 bytes/752KB total above |
Peripherals List #
List of peripherals that match documentation
Name |
SH Core |
Base Address |
Verified |
Emulated |
Notes |
---|---|---|---|---|---|
SH7730 |
FEC1 0048 |
:white_circle: |
:red_circle: |
Assumed to be SH7724 before, register accesses match up with SH7730, maybe others. See FEC1 5040 in table above, oddity. |
|
SH7720 |
A413 FEC0 |
:large_blue_circle: |
:white_circle: |
I've tested this, from Simon's docs |
|
SH7724 |
A452 0000 |
:red_circle: |
:red_circle: |
Matches the documentation |
|
SH7724 |
A415 0000 |
:large_blue_circle: |
:white_circle: |
It is mostly understood, but there are still hardware quirks that make using this "tricky". |
|
SH7724 |
A44A 0000 |
:large_blue_circle: |
:large_blue_circle: |
There are OS syscalls for interfacing with the CMT. |
|
Unknown |
A405 0100 |
:white_circle: |
:red_circle: |
See above table for unknown accesses in the PFC. |
|
SH7724 |
FE3C 0000 |
:red_circle: |
:red_circle: |
This is just a guess on what matched, bootloader writes to the CLK_RST, SOFT_RST with valid values that match what it should be doing to initialize the peripheral. Note, this is a sound I/O interface, a peripheral of the SPU2 (sound processing unit 2) audio processing circuit. There is no indication yet if the SPU2 is present. If this is present, then there will be 2 DSPs included in the die for audio decoding. Documentation is under an NDA, however Linux kernel code exists to interface with this module. (Only thing I can think of that would use this is serial transfers, but that seems wrong). |
|
SH7724 |
A408 0000 |
:large_blue_circle: |
:red_circle: |
Interrupt controller form simon's docs, USB is on INT 9. |
|
SH7724 |
FE00 8020 |
:large_blue_circle: |
:red_circle: |
From simon's docs. |
|
SH????? |
FF20 0000 |
:large_blue_circle: |
:red_circle: |
Simon has knowledge on this |
|
SH???? |
FC11 0000 |
:red_circle: |
:red_circle: |
No pins from this have been found on the Prizm PCB yet |
|
SH7724 |
FE2F FC00 |
:large_blue_circle: |
:red_circle: |
Official emulator has this, FSI was detected on hardware |
|
SH7724 |
FE3C 0000 |
:large_blue_circle: |
:red_circle: |
FSI detected |
|
SH7724? |
FE2F FD00 |
:large_blue_circle: |
:red_circle: |
Official emulator has this |
|
SH7724? |
FE3F FD00 |
:large_blue_circle: |
:red_circle: |
Official emulator has this |
|
Key Interface Unit |
SH???? |
A44B 0000 |
:large_blue_circle: |
:red_circle: |
Official emulator has this |
Peripherals on Cold Start #
- (SH7724) STBCR <- 0 (Standby control)
- (SH7724) MSTPCR0 <- 0 (module stop 0)
- (SH7724) MSTPCR0 <- 0xFFFFFFFF (module stop 2)
- <snip>
- Watchdog timer is disabled, counter set to 0, and sets the WDT clock to Rφ/64, or 500ms
- Busy-loop waiting for the R64CNT register to hit != 0. (Verify it wants != 0)
(TODO)