@add
> [vxdev] && [scripts]
¦ refacto the configuration script, now handle all compilation step
¦ proper cmake abstraction
¦ proper isolation between "core" and "command"
@update
> [CMakeLists.txt]
¦ support extra C flags configuration
¦ support installation request
¦ proper remove useless explicit path information
> [boards]
¦ [sdl2] move "toolchain" information in the vxsdk.toml (handled by vxSDK)
¦ [fxcg50] move "toolchain" information in the vxsdk.toml (handled by vxSDK)
> [vxsdk.toml]
¦ proper use of the new ENV configuration protocol
¦ isolate toolchain information of each board
@fix
> [.gitignore]
¦ use explicit exclusion instead of explicit inclusion
¦ add missing kernel source files (!)
@note
This commit doesn't provide the complet CMake support, because many
improvements need to be done in the vxSDK. You can only build the SDL2 board
by hardcoding environment variables (the `vxsdk.toml file is not fonctional`)
The "shared" forms of the library will be handled as a Virtual Dynamic Shared
Object (vDSO) and will be common for all board. This is not supported yet.
@add
> [CMakeLists.txt]
¦ support project architecture
¦ support project configuration file
¦ support SDL2 board (static-only)
> [scripts]
¦ provide proper API
¦ proper isolate the board manipulation
¦ proper isolate the "library format" selection (static or vdso)
¦ generate a CMake file instead of Makefile one
@update
> [common]
¦ rename 'board/' to 'boards/'
¦ move 'assets/', 'src/' and 'include' in 'kernel/'
¦ remove old makefile
¦ in 'boards/<board-name>' proper isolate :
¦ board description : `board.toml`
¦ board file to install : e.i `fxcg50.ld`
¦ board source file : `src`
¦ board include : `include`
> [configure]
¦ proper refacto the script
¦ proper isolation between vxSDK use and user
@fix
> [kernel/src]
¦ [drivers/common/sdl2]
¦ [keyboard] remove unused object
¦ [keyboard] proper table size declaration
¦ [sdl2] fix return value
¦ [timer] fix return value
¦ [modules]
¦ [dstack] fix return value
¦ [hypervisor] fix return value
@add
<> vhex/defs/call
| add common `vhex_call_t` which allow indirect call invocation
| add default helper macros to generate internal struct
| add default helper macros to involve manually the vhex call
<> vhex/dma
| add DMA user-level API
| add DMA user-level types
| add DNA driver-level interface
<> vhex/driver/mpu/sh/sh7305
| [dma] add hardware definition
| [dma] prepare DMA driver definition (WIP)
| [dma] add DMA driver declaration (WIP)
| [dma] prepare DMA primitives (WIP)
<> src/dma
| wrap the DMA driver
| expose the DMA user-level API
| expose the DMA module
@update
<> board/fxcg50/fxcg50.ld
| expose the two VRAM for the future frame render which use the triple
buffering. For now, this method add ~347ko in the generated ELF, but it's a
temporary.
<> driver/mpu/sh/sh7305
| [intc] rename some kernel-level function
| [intc] use the new vhex call mechanism instead of timer-specific indirect call
| [intc] update the generic interrupt handler installation
| [intc] isolate the generic interrupt handler
| [rtc] use the new vhex call mechanism instead of rtc-specific indirect call
| [keysc] use the new vhex call mechanism
@fix
<> src
| [keyboard] fix key_t type definition
| [keyboard] fix the driver priority
| [timer] fix the driver priority
@update
<> configure
| use TOML file format instead of INI for board description
| block configuration script if it's not involved by the vxSDK
| comment code and write documentation (WIP)
| allow kernel module selection
<> Makefile
| block compilation step if it's not involved by the vxSDK
| remove the "build/" directory creation
| moved to the root directory of the project
<> src/modules -> src
| moved all "kernel modules" in the root directory
| remove "kernel/" part of the project : now linked to the interrupt controller
<> vxsdk.toml
| change compilation steps
@fix
<> driver/mpu/sh/sh7305/intc
| fix TLB interrupt handler freeze
| link kernel panic (exception/TLB)
<> include/vhex/display
| add image API by default
@add
<> include/vhex/driver/mpu/sh/sh7305/keysc
| add internal driver primitives
<> include/vhex/driver/mpu/sh/sh7305/tmu
| add internal driver primitives
<> include/vhex/keyboard
| add getkey* (high-level) API
| add key event API
| add key status API
| add keycode information
| add keyboard driver interface
@update
<> include/vhex/driver
| add KEYBOARD driver flags
<> include/vhex/keyboard
| isolate each part of the keyboard module
| link the keycache part with the driver-provided keycache information
<> src/drivers/mpu/sh/sh7305/keysc
| use the new keycache API (high-level interrupt handler)
| update keycache API
| link the new API in the driver device
<> src/drivers/mpu/sh/sh7305/tmu
| add timer reservation (WIP)
| use a "reservation" cache to known which timer is free instead of hardware
| rename internal functions
<> src/module/display
| Now, by default, DSTACK_CALL() create a pointer on a dstack_call_t
| use dsubimage dstack primitive in dimage()
@fix
<> board/fxcg50/fxcg50.ld
| remove the IL-memory and allow only the X-memory area. This because the
bootloader uses the IL-memory for DMA transfer and other "low-level"
routine used by Gint.
Moreover, I originally try to move each "display-driver" in this place,
but after some profiling and tests, the dclear()/dupdate() combo went from
9155us up to 33250us (for many reason). So, I keep this area free, but I
moved-back from RAM display routines.
<> board/fxcg50/initialize
| remove "section" copy. This role has been delegated to the bootload (vxBoot)
because, in the final ELF file generated by GCC, many relocalization
information for the IL/X memory has been set and the bootloader cannot
performs general relocalization.
So, all "special section/memory" displacement has been moved in the
bootloader and we don't have to worrying about the section copy.
<> src/drivers/mpu/sh/sh7305/tmu
| fix delay calculation in timer reload primitive
| disable interruption for profiling timer
<> src/module/dislay/
| fix shader index used during the dstack_render()
| fix many errors in dimage() shadow render (WIP)
@update
<> include/display/image/render
| update dimage_* prototype to force return the display ID
| update dimage_* prototype to change the arguments order
| isolate "render" part of the API and the "shader" part
| prepare shadow shader primitives
<> include/display/shader
| change routine prototype (remove routine status)
| update macros, to generate directly usable dshader_call_t pointer
| add shader primitives to add shader on some display action
<> src/modules/display/stack
| update shader allocation sizeof for more visibility
| isolate shader adding
<> src/modules/display/image
| isolate each render primitive in "render/" sub-folder
| isolate each shader primitive in "shader/" sub-folder
| prepare shadow shader code (WIP)
| enable image rendering for image with no alpha channel
@fix
<> src/modules/display/stack
| remove memset() which removed shader table allocation
@update
<> board/fxcg50.ld
| add on-chip IL memory information
| add ".vhex.ilram" section
<> board/initialize
| relocalize IL memory code
<> include/vhex/display && src/modules/display
| update color information
| use only "dsurface_t" type
| isolate the dsurface_t types
| isolate interface structure information
| isolate shader structure information
| remove dstack configuration structure
| remove draw/frag information and use only one VRAM information
<> include/vhex/display/font
| isolate structure-oriented information in <vhex/display/font/types.h>
| isolate render API information in <vhex/display/font/render.h>
| isolate information API in <vhex/display/font/information.h>
<> include/vhex/display/text
| isolate render API information in <vhex/display/text/render.h>
| isolate information API in <vhex/display/text/information.h>
<> make/Makefile
| enable DSP instructions
<> src/drivers/screen/r61524
| try to use the DSP instruction for the sending loop, but seems to be a bit
too slow instead of the "full-CPU" version generated by GCC
@add
<> src/modules/display/text/dascii
| proof-of-concept of "one-char" drawing API (used for kernel debug)
<> src/modules/fs
| empty File System module used to expose some primitives used by the libc:
| write(), read(), lseek() and close() which there have been removed from the
| `fxlibc` project which used an old / deprecated ABI/sycall interface that
| doesn't exist in this version of Vhex
@update
<> include/display/draw/pixel
| remove the display ID returned by dpixel(). All primitives that support
| shaders must provide explicit API. This to allow fast-optimized API and
| polyvalence API for shadering which impact the performance
<> src/modules/display/dclear
| isolate tree level for this primitive:
| - kernel : direct fragment drawing primitive (by-pass dstack)
| - dstack : dstack drawing primitive
| - user : user drawing primitive (dstack-API)
| invalidate automatically the dstack each time the primitive (user-level) is
| involved
<> src/modules/display/dstack
| isolate the dstack invalidate part in a specific primitive
@fix
<> make/Makefile
| proper support of the OpenLibm header path
<> src/drivers/screen/r61524
| proper support of the last data fragment size. This caused an override on
| the first X line of the screen
<> src/modules/display/dstack
| fix a crash when the number of action is full
| fix a crash with the default index used for action cache
| fix a crash with the default index used for shader cache
| fix action initialization
| fix action quit primitive
<> src/modules/display/text/dfont
| fix the character drawing algorithm
| proper support of the character drawing color (foreground/background)
| fix the kernel-level primitive used to display a Unicode string
<> src/modules/display/text/dtext
| fix a crash with the internal index counter
| fix a crash in the internal cache
| fix the quit function
@add
<> include/vhex/display :
| add dwidth() primitive
| add dheight() primitive
<> include/vhex/display/font :
| create a font structure that support proportional font
| expose font primitives API (WIP)
<> vhex/module/display/text/dfont:
| support utf8 string format
| add geometry font information (WIP)
<> vhex/module/display/text/dtext:
| write most of the API primitive (WIP)
| proper isolation between font <-> text API
@update
<> include/vhex/display/shader :
| add a quit() routine that will be involved at the end of dupdate()
| add display_[width/height] in driver interface
| add display screen information primitives
<> vhex/drivers/screen/r61524/r61524.c
| add display driver interface screen information
<> vhex/module/display/dclear:
| use the 32-bits arguments instead of the broken dshader_call_arg_t
| support the new API with quit() routine
<> vhex/module/display/dstack:
| support the new display screen information
| support the quit() routine at the end of the dupdate()
@fix
<> include/vhex/display/shader :
| remove broken transparent-union implicit cast
| fix argument transmitted to drawing routine (only 32bit arguments supported)
@add
<> board/fxcg50/fxcg50-dynamic.ld : add the "user/addin" linker script
<> include/vhex/display* : rework the graphic API/pipeline
<> include/vhex/driver/scree/r61524 : add hardware description and API
<> drivers/screen/r61524 : add r61524 driver
<> module/display/dstack : new pipeline
@update
<> board/fxcg50/board : explicitly set the DWIDTH/DHEIGHT define
<> board/fxcg50/hypervisor : API update (WIP)
<> include/vhex/driver :
| update driver information (use bitfield instead of define and macros)
| configure driver's primitive cannot be NULL
| driver can embed module data (ex: r61524 embed display module primitives)
<> include/vhex/hypervisor :
| update driver information (use bitfield instead of define and macros)
| update world information (use bitfield instead of define and macros)
| remove useless "restricted" keyword in prototype
<> make/Makefile : add the support of the vxSDK (0.12.0)
<> module/display/dclear : support of the new pipeline
<> module/display/display : support of the new pipeline
<> module/display/dupdate : support of the new pipeline
<> module/hypervisor/switch : support new driver/world structure
<> module/hypervisor/table : support new driver/world structure
<> vxsdk.toml : support of the vxSDK 0.12.0
@fix
<> drivers/mpu/sh/sh7305/cpu/cpu : mask interrupt by default (cpu_atomic_end)
@add
<> board/fx9860g/board : board description for the fx9860G device
<> board/fx9860g/fx9860g.ld : linker script for the fx9860G device
<> board/fx9860g/initialize : device-specific entry for the fx9860g device
<> board/fxcg50/_Exit : define our own _Exit() function for the fxlibc
<> board/fxcg50/board : board description for the fxcg50 device
<> board/fxcg50/fxcg50.ld : linker script for the fxcg50 device
<> board/fxcg50/hardware : hardware detection for the fxcg50 device
<> board/fxcg50/initialize : device-specific entry for the fxcg50 device
<> config : configuration script for the vxKernel build system
<> make/Makefile : initial Makefile (must be used with the vxsdk)
<> include/vhex/arch/fxcg50/hardware : hardware definition for the fxcg50 device
<> include/vhex/defs/attributes : define common attributes macros
<> include/vhex/defs/types : define all types information
<> include/vhex/hardware : expose hardware "module" API
<> include/vhex/kernel : expose kernel "module" API
<> include/vhex/mmu : expose MMU "module" API
<> include/vhex/mpu/sh7305/mmu : MMU hardware definition
<> include/vhex/mpu/sh7305/pfc : PFC hardware definition
<> src/drivers/mpu/sh/sh7305/mmu : MMU driver definition
<> src/kernel/kernel : kinit() and kquit() definition