2022-11-16 19:12:27 +01:00
|
|
|
Bugs to fix:
|
|
|
|
* render: figure out why fx-CG dclear() now takes 4.1 ms instead of 2.6 ms
|
|
|
|
|
2020-06-01 12:11:59 +02:00
|
|
|
Extensions on existing code:
|
2022-05-15 20:16:03 +02:00
|
|
|
* clock: mono support
|
2024-03-23 23:57:23 +01:00
|
|
|
* usb: and interrupt pipes
|
2021-12-21 19:01:00 +01:00
|
|
|
* fs: support RAM files
|
|
|
|
* fs: support USB streams as generic file descriptors
|
2021-12-30 18:17:13 +01:00
|
|
|
* fugue: support glob() to abstract away BFile entirely
|
|
|
|
* fugue/fs: offer a primitive to remove recursively, which is native in Fugue
|
2021-04-20 12:19:24 +02:00
|
|
|
* bfile: implement the optimization-restart as realized by Kbd2
|
2021-02-15 09:39:14 +01:00
|
|
|
* kernel: better restore to userspace before panic (ensure BL=0 IMASK=0)
|
2020-10-05 16:20:01 +02:00
|
|
|
* project: add license file
|
kernel: dynamic loading of GMAPPED functions to user RAM
This commit introduces a large architectural change. Unlike previous
models of the fx-9860G series, the G-III models have a new user RAM
address different from 8801c000. The purpose of this change is to
dynamically load GMAPPED functions to this address by querying the TLB,
and call them through a function pointer whose address is determined
when loading.
Because of the overhead of using a function pointer in both assembly and
C code, changes have been made to avoid GMAPPED functions altogether.
Current, only cpu_setVBR() and gint_inth_callback() are left, the second
being used specifically to enable TLB misses when needed.
* Add a .gint.mappedrel section for the function pointers holding
addresses to GMAPPED functions; add function pointers for
cpu_setVBR() and gint_inth_callback()
* Move rram to address 0 instead of the hardcoded 0x8801c000
* Load GMAPPED functions at their linked address + the physical address
user RAM is mapped, to and compute their function pointers
* Remove the GMAPPED macro since no user function needs it anymore
* Add section flags "ax" (code) or "aw" (data) to every custom .section
in assembler code, as they default to unpredictable values that can
cause the section to be marked NOLOAD by the linker
* Update the main kernel, TMU, ETMU and RTC interrupt handlers to use
the new indirect calling method
This is made possible by new MMU functions giving direct access to the
physical area behind any virtualized page.
* Add an mmu_translate() function to query the TLB
* Add an mmu_uram() function to access user RAM from P1
The exception catching mechanism has been modified to avoid the use of
GMAPPED functions altogether.
* Set SR.BL=0 and SR.IMASK=15 before calling exception catchers
* Move gint_exc_skip() to normal text ROM
* Also fix registers not being popped off the stack before a panic
The timer drivers have also been modified to avoid GMAPPED functions.
* Invoke timer_stop() through gint_inth_callback() and move it to ROM
* Move and expand the ETMU driver to span 3 blocks at 0xd00 (ETMU4)
* Remove the timer_clear() function by inlining it into the ETMU handler
(TCR is provided within the storage block of each timer)
* Also split src/timer/inth.s into src/timer/inth-{tmu,etmu}.s
Additionally, VBR addresses are now determined at runtime to further
reduce hardcoded memory layout addresses in the linker script.
* Determine fx-9860G VBR addresses dynamically from mmu_uram()
* Determine fx-CG 50 VBR addresses dynamically from mmu_uram()
* Remove linker symbols for VBR addresses
Comments and documentation have been updated throughout the code to
reflect the changes.
2020-09-17 14:48:54 +02:00
|
|
|
* kernel: group linker script symbols in a single header file
|
2019-07-17 00:34:10 +02:00
|
|
|
* r61524: brightness control and clean the file
|
2020-06-01 12:11:59 +02:00
|
|
|
* core: review forgotten globals and MPU addresses not in <gint/mpu/*.h>
|
2019-07-20 18:31:46 +02:00
|
|
|
* core: run destructors when a task-switch results in leaving the app
|
2023-01-25 16:26:04 +01:00
|
|
|
* fs: support read-only files backed with GetBlockAddress() on fx-CG
|
2023-02-04 21:02:59 +01:00
|
|
|
* kernel: SH4- or G-III-specific linker scripts?
|
2024-01-29 09:49:34 +01:00
|
|
|
* render: Properly document bopti fx. Also make it faster maybe?
|
2019-03-06 14:32:51 +01:00
|
|
|
|
2021-12-21 19:01:00 +01:00
|
|
|
Future directions:
|
2020-06-01 12:11:59 +02:00
|
|
|
* Audio playback using TSWilliamson's libsnd method
|
|
|
|
* Serial communication
|
2020-05-10 16:36:21 +02:00
|
|
|
* Make fx9860g projects work out of the box on fxcg50
|
2021-01-31 15:11:13 +01:00
|
|
|
* Base for Yatis' threads library
|
2024-03-23 23:57:23 +01:00
|
|
|
|
|
|
|
Bits that need to abstract out into APIs:
|
|
|
|
- display: Toggle backlight (or set level)
|
|
|
|
-> Have a backlight property with min/max values
|
|
|
|
@ getkey
|
|
|
|
@ justui jscene
|
|
|
|
- os: OS interface to access OS info, like in fxos
|
|
|
|
@ usb/setup.c set_strings
|
|
|
|
@ usb/classes/ff-bulk.c identify command
|
|
|
|
- render: current video mode
|
|
|
|
@ usb/classes/ff-bulk.c capture_vram
|
|
|
|
- gray: make gray engine a subset of t6k11 which then supports two modes
|
|
|
|
|
|
|
|
Video formats:
|
|
|
|
- i1msb
|
|
|
|
- 2i1msb
|
|
|
|
- rgb565
|
|
|
|
|
|
|
|
T6K11:
|
|
|
|
mode 0 : i1msb 128x64 @64 Hz
|
|
|
|
mode 1 : 2i1msb 128x64 @64 Hz
|
|
|
|
R61524:
|
|
|
|
mode 0 : rgb565 396x224 @? Hz
|
|
|
|
mode 1 : i3??? 396x224 @? Hz
|
|
|
|
mode 2 : i1msb 128x64 @? Hz # <- for g1a emulation :)
|
|
|
|
mode 3 : 2i1msb 128x64 @? Hz # <- for g1a emulation :)
|
2024-04-09 08:57:46 +02:00
|
|
|
|
|
|
|
enum {
|
|
|
|
/* Indexed 1-bit, 0 is white, 1 is black. Row-major, left-to-right, each
|
|
|
|
row a set of 4-byte values with leftmost pixel on the MSB. */
|
|
|
|
IMAGE_FORMAT_I1MSB,
|
|
|
|
/* Indexed 2-bit: white, light gray, dark gray, black. Represented as a
|
|
|
|
pair of I1MSB buffers, the first being bit #0, the second bit #1. */
|
|
|
|
IMAGE_FORMAT_2I1MSB,
|
|
|
|
};
|
2024-04-16 15:53:10 +02:00
|
|
|
|
2024-07-13 21:04:29 +02:00
|
|
|
fx-CP port progress. Vibe: can write simple programs, advanced features coming
|
2024-04-16 15:53:10 +02:00
|
|
|
DONE:
|
2024-07-13 21:04:29 +02:00
|
|
|
- load: stage-2 to VRAM backup (unused memory uses gint arena), no MMU
|
|
|
|
- kernel basics: malloc, interrupts, exceptions
|
|
|
|
- r61523 driver (no DMA), rendering (no DMA), keyboard driver, timer driver
|
2024-04-16 15:53:10 +02:00
|
|
|
IN-PROGRESS:
|
|
|
|
- unification of the image/video interface
|
2024-07-13 21:04:29 +02:00
|
|
|
- porting the GUIs in gintctl, many of which are hardcoded for 396x224
|
|
|
|
- figure out why the DMA doesn't work (should make dclear/dupdate faster)
|
|
|
|
MEDIUM TERM:
|
|
|
|
- touch driver, cpg driver (w/ potential overclock, given settings), rtc driver
|
2024-04-16 15:53:10 +02:00
|
|
|
- benchmark memory and display performance
|
2024-07-13 21:04:29 +02:00
|
|
|
- (details: hardware info, quit handler, poweroff)
|
|
|
|
LONGER TERM:
|
|
|
|
- port azur's rendering pipeline (might work out of the box)
|
|
|
|
- port libraries
|
|
|
|
- filesystem, remote debugging, usb, (serial once added)
|