mirror of
https://git.planet-casio.com/Lephenixnoir/gint.git
synced 2024-12-29 13:03:36 +01:00
core: add return-to-menu on Graph 90+E (looks bad though)
This is a first version of gint_osmenu() on Graph 90+E. It works on the same basis as the mono version, with the caveat that the automatic VRAM display done by the system is terrible because of the reduced resolution and status bar. Disabling any of this requires taking back control earlier, which would make the whole GetKeyWait() method obsolete. Tried the special key processing syscall, but it crashes upon return in the add-in even before the fxlib code finishes. Maybe try later.
This commit is contained in:
parent
e217309adf
commit
15dd4990dd
2 changed files with 59 additions and 9 deletions
|
@ -207,17 +207,17 @@ int __Timer_Install(int id, void (*handler)(void), int delay);
|
|||
int __Timer_Start(int id);
|
||||
int __Timer_Stop(int id);
|
||||
int __Timer_Deinstall(int id);
|
||||
int __PutKeyCode(short *matrixcode);
|
||||
int __PutKeyCode(int row, int column, int keycode);
|
||||
int __GetKeyWait(int *col,int *row,int type,int time,int menu,uint16_t *key);
|
||||
void __ClearKeyBuffer(void); /* ? */
|
||||
void *__GetVRAMAddress(void);
|
||||
void __ConfigureStatusArea(int mode);
|
||||
|
||||
static int __osmenu_id;
|
||||
|
||||
static void __osmenu_handler(void)
|
||||
{
|
||||
short matrixcode = 0x0308;
|
||||
__PutKeyCode(&matrixcode);
|
||||
__PutKeyCode(0x04, 0x09, 0);
|
||||
|
||||
__Timer_Stop(__osmenu_id);
|
||||
__Timer_Deinstall(__osmenu_id);
|
||||
|
@ -226,23 +226,49 @@ static void __osmenu_handler(void)
|
|||
static void __osmenu(void)
|
||||
{
|
||||
__ClearKeyBuffer();
|
||||
|
||||
#ifdef FX9860G
|
||||
memcpy(__GetVRAMAddress(), gint_vram, 1024);
|
||||
#endif
|
||||
|
||||
#ifdef FXCG50
|
||||
/* Unfortunately ineffective (main menu probably reenables it)
|
||||
__ConfigureStatusArea(3); */
|
||||
|
||||
/* TODO: Improve copied VRAM behavior in gint_osmenu() on fxcg50 */
|
||||
uint16_t *vram1, *vram2;
|
||||
dgetvram(&vram1, &vram2);
|
||||
|
||||
uint16_t *dst = __GetVRAMAddress();
|
||||
uint16_t *src = (gint_vram == vram1) ? vram2 + 6 : vram1 + 6;
|
||||
|
||||
for(int y = 0; y < 216; y++, dst+=384, src+=396)
|
||||
for(int x = 0; x < 384; x++)
|
||||
{
|
||||
dst[x] = src[x];
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Mysteriously crashes when coming back; might be useful another time
|
||||
instead of GetKeyWait()
|
||||
int C=0x04, R=0x09;
|
||||
__SpecialMatrixCodeProcessing(&C, &R); */
|
||||
|
||||
__osmenu_id = __Timer_Install(0, __osmenu_handler, 0 /* ms */);
|
||||
if(__osmenu_id <= 0) return;
|
||||
|
||||
__Timer_Start(__osmenu_id);
|
||||
|
||||
int column, row;
|
||||
unsigned short keycode;
|
||||
__GetKeyWait(&column, &row, 0, 0 /* s */, 0, &keycode);
|
||||
__GetKeyWait(&column, &row,
|
||||
0 /* KEYWAIT_HALTON_TIMEROFF */,
|
||||
1 /* Delay in seconds */,
|
||||
0 /* Enable return to main menu */,
|
||||
&keycode);
|
||||
}
|
||||
|
||||
/* gint_osmenu() - switch out of gint and call the calculator's main menu */
|
||||
void gint_osmenu(void)
|
||||
{
|
||||
/* TODO: return to menu on fxcg50 */
|
||||
#ifdef FX9860G
|
||||
gint_switch(__osmenu);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
.global ___GetKeyWait
|
||||
.global ___ClearKeyBuffer
|
||||
.global ___GetVRAMAddress
|
||||
.global ___ConfigureStatusArea
|
||||
|
||||
.section ".pretext"
|
||||
|
||||
|
@ -114,7 +115,7 @@ ___Timer_Stop:
|
|||
___Timer_Deinstall:
|
||||
syscall(0x119)
|
||||
___PutKeyCode:
|
||||
syscall(0x24f)
|
||||
syscall(0x248)
|
||||
___GetKeyWait:
|
||||
syscall(0x247)
|
||||
___ClearKeyBuffer:
|
||||
|
@ -140,6 +141,29 @@ _calloc:
|
|||
_realloc:
|
||||
syscall(0x1f46)
|
||||
|
||||
___Timer_Install:
|
||||
syscall(0x8d9)
|
||||
___Timer_Start:
|
||||
syscall(0x8db)
|
||||
___Timer_Stop:
|
||||
syscall(0x8dc)
|
||||
___Timer_Deinstall:
|
||||
syscall(0x8da)
|
||||
___PutKeyCode:
|
||||
syscall(0x12c6)
|
||||
___GetKeyWait:
|
||||
syscall(0x12bf)
|
||||
___ClearKeyBuffer:
|
||||
syscall(0x12c7)
|
||||
___GetVRAMAddress:
|
||||
syscall(0x1e6)
|
||||
___ConfigureStatusArea:
|
||||
syscall(0x2b7)
|
||||
|
||||
.global ___SpecialMatrixCodeProcessing
|
||||
___SpecialMatrixCodeProcessing:
|
||||
syscall(0x1e60)
|
||||
|
||||
syscall_table:
|
||||
.long 0x80020070
|
||||
|
||||
|
|
Loading…
Reference in a new issue