Commit Graph

17 Commits

Author SHA1 Message Date
Yann MAGNIN c966807cd7 VxKernel 0.6.0-12 : Fix image rendering + fix shader crash
@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
2022-06-21 18:43:11 +02:00
Yann MAGNIN b2fc0db544 VxKernel 0.6.0-11 : Update text/font architecture
@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
2022-06-20 16:29:28 +02:00
Yann MAGNIN 1ebab24090 VxKernel 0.6.0-10 : Add image API
@add
<> include/vhex/display/image && src/modules/display/draw
  | add image "types" information
  | add image "object" manipulation API
  | add image "render" API (first version)

@update
<> include/vhex/display/shader.h
  | update surface structure to add some precalculated information
<> src/drivers/screen/r61524
  | precalculate some surface geometry information
  | remove useless code
<> src/module/display
  | use the new surface precalculated information

@fix
<> include/display/draw/circle
  | fix DCIRCLE_* flags value
<> src/modules/display/draw
  | fix dhline culling check
  | fix dvline culling check
  | fix circle position
  | fix circle render freeze
2022-06-19 20:11:52 +02:00
Yann MAGNIN 221dacae2e VxKernel 0.6.0-9 : Add line API + circle API
@add
<> include/vhex/display/draw
  | add circle drawing primitive
  | add line drawing primitives
<> src/drivers/screen/r61524
  | add assembly version of the "frame_frag_send" (WIP)
<> src/modules/display/draw
  | add filled circle algorithm
  | add line algorithm

@update
<> include/vhex/display
  | use "dsurface_t" instead of "struct dshader_surface"
  | rename pixel dstack primitives
<> src/drivers/screen/r61524
  | clear proper zone of the surface
  | avoid unused area wiping
  | remove (temporary) surface merging
<> src/module/display/dclear
  | clear proper zone of the surface
  | rename internal primitives
2022-06-15 20:40:43 +02:00
Yann MAGNIN 392925ac3e VxKernel 0.6.0-8 : Add profiling primitives in timer API
@add
<> include/vhex/timer
  | add profiling API
  | add the profiling primitives in driver interface
  | add profiling type
<> src/driver/mpu/sh/sh7305/tmu
  | add profiling primitives
  | add profiling information in driver definition
<> src/module/timer
  | add profiling driver binding
2022-06-15 12:03:21 +02:00
Yann MAGNIN 7aada07d23 VxKernel 0.6.0-7 : First version of the timer API + update INTC API
@add
<> include/vhex/driver/mpu/sh/sh7305/intc
  | add interruption priority primitives
  | add all interruption configuration available
<> src/driver/mpu/sh/sh7305/intc
  | remove the install.c source file (merge its content in driver definition)
  | add proper priority primitive
  | add priority information

@update
<> include/vhex/timer
  | force TIMER_CONTINUE at 0
  | force TIMER_STOP at 1
<> src/driver/mpu/sh/sh7305/keysc
  | use the new interrupt priority primitives

@fix
<> src/driver/mpu/sh/sh7305/tmu
  | fix interrupt handler assembly crash for ETMUx
  | fix timer ID check security
  | fix timer available check
  | fix ETMUx interrupt handlers installation runtime patch
  | add timer interrupt level (enable interrupt)
<> src/modules/display/text/dtext
  | fix string cache reallocation
<> src/module/timer
  | fix driver flag check
  | fix module definition
2022-06-14 21:56:06 +02:00
Yann MAGNIN 0c50357b7d VxKernel 0.6.0-6 : Add exception/kernel panic screen + add assets
@add
<> assets
  | add default font assets (project)
  | add default font assets (image)
  | add default fotn assets (vxsdk conv information)
<> board/fxcg50/fxcg50
  | add kernel relocation start symbols for the kernel panic screen

@update
<> kernel/exch
  | reactivate the kernel panic screen
  | add relocation information
  | isolate the PC address properly

@fix
<> drivers/mpu/sh/sh7305/tmu
  | fix interrupt handler configuration crash
  | enable the TMU/ETMU driver
2022-06-14 10:51:23 +02:00
Yann MAGNIN cb4af4f7bb VxKernel 0.6.0-5 : Clock driver + TMU/ETMU driver (WIP) + timer API
@add
<> include/vhex/driver/mpu/sh/sh7305/cpg
  | add hardware description
  | add kernel-level API to fetch clocks information
<> include/vhex/driver/mpu/sh/sh7305/tmu
  | add hardware description
<> include/vhex/timer
  | add timer API
  | add timer callback definition
  | add timer types information
<> src/drivers/mpu/sh/sh7305/cpg
  | add CPG driver declaration
  | add CPG driver kernel-API
  | prepare "real" driver installation hook
<> src/drivers/mpu/sh/sh7305/cpu/sleep
  | add CPU sleep primitives
<> src/drivers/mpu/sh/sh7305/intc/inth_callback
  | add special interrupt handler callback manager
<> src/drivers/mpu/sh/sh7305/tmu
  | add TMU interrupt handlers
  | add ETMU interrupt handlers
  | add TMU/ETMU driver-level API code
<> src/modules/timer
  | add timer API code (simply a binding to the TMU/ETMU driver)

@update
<> include/vhex/driver
  | add TIMER flags information
<> include/vhex/driver/cpu
  | add sleep primitive
<> include/vhex/driver/mpu/sh/sh7305/intc
  | return the address where the handle has been installed
<> src/driver/screen/r61524
  | perform the "sprite" VRAM merging before sending all pixel on screen

@fix
<> include/vhex/hardware
  | add workaround to allow this header to be included in ASM source file (.S)
<> src/modules/display/text/dfont
  | fix line discipline with \n
  | fix string size when a bad character is detected
2022-06-13 21:15:36 +02:00
Yann MAGNIN dca07d7f06 VxKernel 0.6.0-4 : Support the text API
@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
2022-06-10 21:28:51 +02:00
Yann MAGNIN eb9b0078c2 VxKernel 0.6.0-3 : Fix dstack crash + pixel API + support assets generation
@add
<> include/vhex/display/draw/pixel :
   | add pixel drawing API
<> modules/display/draw/dpixel
   | add pixel drawing API code

@update
<> board/fxcg50/board :
   | remove old DWIDTH/DHEIGHT display API dependencies (use the new driver
   | interface instead).
<> include/vhex/display/font :
   | update the font structure information
<> include/vhex/display/shader :
   | switch x/y to unsigned int to signed int to avoid many cast in render
   | primitives
<> make/Makefile
   | support header modification detection (header dependencies)
   | support assets generation
<> modules/display/text/font
<> modules/display/text/text
   | prepare drawing algorithm (WIP)

@fix
<> kernel/drivers/screen/r61524/r61524
   | proper handle geometry of each drawing area
   | fix clear loop boundary
   | fix render loop boundary
<> modules/display/dstack
   | fix shader index
   | remove useless extern keyword
2022-06-02 10:16:25 +02:00
Yann MAGNIN 510c4f1f86 VxKernel 0.6.0-2 : Prepare font and text API (WIP)
@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)
2022-05-28 21:55:48 +02:00
Yann MAGNIN a916120d66 VxKernel 0.6.0-1 : Rework the graphic pipeline
@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)
2022-05-27 11:57:55 +02:00
Yann MAGNIN f851b73cba VxKernel 0.5.0 : Modules + project architecture update
@add
<> board/fxcg50/fxcg50.ld : module section
<> board/fxcg50/hypervisor : board-specific hypervisor init/quit primitives
<> board/fxcg50/kmalloc : board-specific kmalloc init/quit primitives
<> vhex/module.h : module information
<> modules/display/display.c : add "display" module
<> modules/keyboard/keyboard.c : add "keyboard" module
<> modules/hypervisor/hypervisor.c : add "hypervisor" module
<> modules/kmalloc/kmalloc.c : add "kmalloc" module

@update
<> vxsdk.toml : update the project version
<> GLOBAL : change the "src/" architecture
<> board/fxcg50/initialize.c : isolate kmalloc part
<> kernel/kernel.c : initialize all modules
2022-03-04 17:37:38 +01:00
Yann MAGNIN ef2632b5dc VxKernel 0.4.0 : Interrupt handling + KEYSC driver
@add
<> vhex/arch/sh7305/keysc.h : KEYSC module definition
<> vhex/drivers/keyboard.h : keyboard API
<> vhex/arch/sh7305/intc.h : provide hardware-specific primitive (inth install)
<> drivers/mpu/sh/sh7305/intc/exch.S : hardware-specific exception handler
<> drivers/mpu/sh/sh7305/intc/inth.S : hardware-specific interrupt handler
<> drivers/mpu/sh/sh7305/intc/tlbh.S : hardware-specific TLB exception handler
<> drivers/mpu/sh/sh7305/intc/install.c : interrupt handle installer
<> drivers/mpu/sh/sh7305/intc/intc.c : rename the exposed INTC module
<> drivers/mpu/sh/sh7305/keysc/intc.c : rename the exposed INTC module
<> drivers/mpu/sh/sh7305/intc/inth.S : rename the exposed INTC module
<> drivers/mpu/sh/sh7305/keysc/handler.c : user-level KEYSC handler
<> drivers/mpu/sh/sh7305/keysc/inth.S : kernel-level KEYSC handler
<> drivers/mpu/sh/sh7305/keysc/keysc.c : define the KEYSC module and driver
<> keyboard/keycache.c : user-level KEYSC abstraction (key event list)

@update
<> vxsdk.toml : update the project version
<> board/fxcg50/fxcg50.ld : rename interrupt section
<> hypervisor/switch.c : remove debug log
<> kernel/exch.c : common exception handler
<> kernel/tlbh.c : common TLB exception handler
<> kernel/kernel.c : add keyboard initialization

@fix
<> vhex/arch/sh7305/intc.h : fix types and names
<> render/dclear.c : remove vram definition (defined manually in the linker)
2022-03-04 11:28:32 +01:00
Yann MAGNIN df8d26ecca VxKernel 0.3.0 : Worlds
@add
<> include/vhex/arch/sh7305/cpu : add CPU hardware information
<> include/vhex/arch/sh7305/intc : add INTC hardware information
<> include/vhex/driver : add driver information
<> include/vhex/hypervisor : add hypervisor API
<> include/vhex/drivers/cpu : add CPU API
<> src/drivers/mpu/sh/sh7305/cpu/atomic : add CPU atomic primitives
<> src/drivers/mpu/sh/sh7305/cpu/cpu : add CPU driver for the hypervisor
<> src/drivers/mpu/sh/sh7305/cpu/register : add CPU registers abstraction
<> src/drivers/mpu/sh/sh7305/intc/intc : add INTC driver for the hypervisor
<> src/hypervisor/switch : add world switch
<> src/hypervisor/table : add world management

@update
<> vxsdk.toml : update the project version
<> src/kernel/kernel : hypervisor bootstrap (worlds switch between Casio / Vhex)
<> board/fxcg50/fxcg50.ld : drivers blocks

@fix
<> board/fxcg50/fxcg50.ld : generate the VRAM information (300ko -> 130ko)
<> board/fxcg50/fxcg50.ld : isolate BSS information
<> board/fxcg50/initialize : comments indentation
<> config : board and arch detection (os.walk())
<> gitignore : allow vxsdk.toml update
2022-02-13 15:01:01 +01:00
Yann MAGNIN 2fbee9cdeb VxKernel 0.2.0 : kmalloc + startup + display
@add
<> include/vhex/config.h : add configuration header (only for kmalloc for now)
<> include/vhex/defs/util.h : add common MACROS utilities
<> src/render : add display primitives (text and draw for now)
<> src/kmalloc : add kmalloc module

@update
<> board/fxcg50/hardware : add RAM (physical) information
<> board/fxcg50/initialize : add kmalloc initialization
<> driver/mpu/sh/sh7305/mmu : add MMU primitive to get area size using the UTLB

@fix
<> board/fxcg50/fxcg50.ld : fix executable size
<> board/fxcg50/fxcg50.ld : fix GOT/PLT and relocation information
<> make/Makefile : fix verbose option + change the library name
<> config : fix verbose option
2022-02-05 15:47:32 +01:00
Yann MAGNIN f38bea7024 VxKernel - 0.1.0 : Base
@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
2022-01-08 11:49:29 +01:00