2022-02-05 15:47:32 +01:00
|
|
|
#include <vhex/defs/types.h>
|
2022-05-27 11:57:55 +02:00
|
|
|
#include <vhex/display.h>
|
|
|
|
#include <vhex/display/stack.h>
|
2022-02-05 15:47:32 +01:00
|
|
|
|
2022-06-15 20:40:43 +02:00
|
|
|
//---
|
|
|
|
// kernel-level API
|
|
|
|
//---
|
|
|
|
|
2022-05-27 11:57:55 +02:00
|
|
|
/* dclear_draw() : real drawing algorithm */
|
2022-06-20 16:29:28 +02:00
|
|
|
void dclear_render(dsurface_t *surface, uint32_t color)
|
2022-05-27 11:57:55 +02:00
|
|
|
{
|
2022-08-08 20:19:00 +02:00
|
|
|
uint32_t *vram = surface->vram;
|
|
|
|
for (size_t i = 0; i < surface->width * (surface->height/2); ++i)
|
|
|
|
vram[i] = color;
|
|
|
|
#if 0
|
2022-06-15 20:40:43 +02:00
|
|
|
uint32_t *vram;
|
2022-06-19 20:11:52 +02:00
|
|
|
int size = (surface->y1 == 220) ? 792 : 1980;
|
2022-05-27 11:57:55 +02:00
|
|
|
|
2022-06-20 16:29:28 +02:00
|
|
|
vram = surface->vram;
|
2022-06-15 20:40:43 +02:00
|
|
|
for (int i = 0; i < size; ++i)
|
2022-06-10 21:28:51 +02:00
|
|
|
vram[i] = color;
|
2022-08-08 20:19:00 +02:00
|
|
|
#endif
|
2022-06-10 21:28:51 +02:00
|
|
|
}
|
|
|
|
|
2022-06-15 20:40:43 +02:00
|
|
|
//---
|
|
|
|
// Dstack-level API
|
|
|
|
//---
|
|
|
|
|
|
|
|
/* dclear_dstack() : dstack rwrapper primitive */
|
2022-06-20 16:29:28 +02:00
|
|
|
void dclear_dstack(dsurface_t *surface, uint32_t *arg)
|
2022-06-10 21:28:51 +02:00
|
|
|
{
|
|
|
|
dclear_render(surface, arg[0]);
|
2022-05-27 11:57:55 +02:00
|
|
|
}
|
2022-02-05 15:47:32 +01:00
|
|
|
|
2022-06-15 20:40:43 +02:00
|
|
|
//---
|
|
|
|
// User-level API
|
|
|
|
//---
|
|
|
|
|
2022-02-05 15:47:32 +01:00
|
|
|
/* dclear(): Fill the screen with a single color */
|
2022-05-27 11:57:55 +02:00
|
|
|
did_t dclear(int color)
|
2022-02-05 15:47:32 +01:00
|
|
|
{
|
2022-06-10 21:28:51 +02:00
|
|
|
uint32_t copti;
|
|
|
|
|
|
|
|
dstack_invalidate();
|
|
|
|
|
|
|
|
if (color == C_NONE)
|
|
|
|
return (-1);
|
|
|
|
|
|
|
|
color = color & 0xffff;
|
|
|
|
copti = (color << 16) | (color << 0);
|
|
|
|
return dstack_add_action(
|
VxKernel 0.6.0-13 : Add keyboard API + update timer API
@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)
2022-06-24 15:33:36 +02:00
|
|
|
DSTACK_CALL(&dclear_dstack, copti),
|
2022-06-10 21:28:51 +02:00
|
|
|
NULL,
|
|
|
|
NULL
|
|
|
|
);
|
2022-02-05 15:47:32 +01:00
|
|
|
}
|