N64FlashcartMenu/src/menu/hdmi.c
Mateusz Faderewski 1eb654d1c1
64DD disk loading support for SummerCart64 (#49) (and other fixes/improvements)
<!--- Provide a general summary of your changes in the Title above -->

## Description
<!--- Describe your changes in detail -->

## Motivation and Context
<!--- What does this sample do? What problem does it solve? -->
<!--- If it fixes/closes/resolves an open issue, please link to the
issue here -->

## How Has This Been Tested?
<!-- (if applicable) -->
<!--- Please describe in detail how you tested your sample/changes. -->
<!--- Include details of your testing environment, and the tests you ran
to -->
<!--- see how your change affects other areas of the code, etc. -->

## Screenshots
<!-- (if appropriate): -->

## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Improvement (non-breaking change that adds a new feature)
- [ ] Bug fix (fixes an issue)
- [ ] Breaking change (breaking change)
- [ ] Config and build (change in the configuration and build system,
has no impact on code or features)

## Checklist:
<!--- Go over all the following points, and put an `x` in all the boxes
that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
- [ ] My code follows the code style of this project.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [ ] I have added tests to cover my changes.
- [ ] All new and existing tests passed.

<!--- It would be nice if you could sign off your contribution by
replacing the name with your GitHub user name and GitHub email contact.
-->
Signed-off-by: GITHUB_USER <GITHUB_USER_EMAIL>

---------

Signed-off-by: Polprzewodnikowy <sc@mateuszfaderewski.pl>
Co-authored-by: Robin Jones <networkfusion@users.noreply.github.com>
2023-10-10 21:12:53 +02:00

35 lines
842 B
C

#include <libdragon.h>
#include "hdmi.h"
#define ROM_ADDRESS (0x10000000)
#define DDIPL_ADDRESS (0x06000000)
void hdmi_clear_game_id (void) {
pixelfx_clear_game_id();
}
void hdmi_send_game_id (boot_params_t *boot_params) {
uint8_t rom_header[0x40] __attribute__((aligned(8)));
uint32_t pi_address = ROM_ADDRESS;
if (boot_params->device_type == BOOT_DEVICE_TYPE_64DD) {
pi_address = DDIPL_ADDRESS;
}
dma_read_async(rom_header, pi_address, sizeof(rom_header));
dma_wait();
uint64_t rom_check_code;
uint8_t media_format;
uint8_t region_code;
memcpy((uint8_t *) (&rom_check_code), rom_header + 0x10, sizeof(rom_check_code));
media_format = rom_header[0x3B];
region_code = rom_header[0x3E];
pixelfx_send_game_id(rom_check_code, media_format, region_code);
}