mirror of
https://git.planet-casio.com/Lephenixnoir/gint.git
synced 2025-01-04 07:53:34 +01:00
d8886c7dbf
This change adds a TLB miss handler that calls __TLB_LoadPTEH() and removes the startu mapping of add-in pages in the explore() routine of src/core/start.c. Note that calling __TLB_LoadPTEH() manually might unexpectedly lead to a TLB multihit problem as the requested page might be accidentally loaded by a TLB miss in the code that loads it. A TLB multihit is a platform reset, so this function should always be considered unsafe to call (unless the calling code is in a combination of P1 space and ILRAM). This change also moves a lot of functions out of the .pretext section, notably topti, as this was designed to allow panic messages when the add-in couldn't be mapped entirely. By contrast, a GMAPPED macro has been defined to mark crucial kernel code and data that must remain mapped at all times. This currently puts the data in ILRAM because static RAM is not executable. An alternative will have to be found for SH3-based fx9860g machines. This version still does not allow TLB misses in timer callbacks and breaks return-to-menu in a severe way! It is not suitable for any stable application!
33 lines
976 B
C
33 lines
976 B
C
//---
|
|
// core:setup - Installing and unloading the library
|
|
//---
|
|
|
|
#ifndef GINT_CORE_SETUP
|
|
#define GINT_CORE_SETUP
|
|
|
|
#include <gint/defs/types.h>
|
|
|
|
/* Prototypes for the library management functions are in <gint/gint.h> */
|
|
|
|
/* gint_setvbr()
|
|
Changes the VBR address and calls the configuration function while
|
|
interrupts are disabled. The configuration function must disable all
|
|
interrupts that the new handlers cannot handle, either by clearing the
|
|
priority registers or by setting the interrupt masks.
|
|
|
|
@vbr New VBR address
|
|
@configure Configuration function
|
|
Returns the previous VBR address. */
|
|
uint32_t gint_setvbr(uint32_t vbr, void (*configure)(void));
|
|
|
|
/* gint_exch(): Exception handler */
|
|
void gint_exch(void);
|
|
/* gint_tlbh(): TLB miss handler */
|
|
void gint_tlbh(void);
|
|
|
|
/* gint_inth_7705(): SH7705 exception handler */
|
|
void gint_inth_7705(void);
|
|
/* gint_inth_7305(): SH7305 exception handler */
|
|
void gint_inth_7305(void);
|
|
|
|
#endif /* GINT_CORE_SETUP */
|