Hopefully the last adjustments before the first release.
7
TODO
|
@ -14,11 +14,14 @@ Things to do before 1.0:
|
||||||
|
|
||||||
Things to do later:
|
Things to do later:
|
||||||
- bopti: Implement blending modes for monochrome bitmaps
|
- bopti: Implement blending modes for monochrome bitmaps
|
||||||
|
- clock: Only measure if requires as option, otherwise trust {FTune}
|
||||||
- clock: Handle overclock (relaunch clocks when overclocking)
|
- clock: Handle overclock (relaunch clocks when overclocking)
|
||||||
|
- clock: Split code into several files, change clock_config_t type
|
||||||
- core: Change interrupt priority using the gint API
|
- core: Change interrupt priority using the gint API
|
||||||
- core: Register more interrupts (and understand their parameters)
|
- core: Register more interrupts (and understand their parameters)
|
||||||
- core: Remove redundant code linked to environment saves
|
- core: Remove redundant code linked to environment saves
|
||||||
- core: Review interrupt system (again) - this one is too slow
|
- core: Review interrupt system (again) - this one is too slow
|
||||||
|
- display: Try to make this module lighter (lots of code in text section)
|
||||||
- errno: Introduce errno and use it more or less everywhere
|
- errno: Introduce errno and use it more or less everywhere
|
||||||
- esper: Cleaner playback, synthesizing
|
- esper: Cleaner playback, synthesizing
|
||||||
- events: Allow customization of keyboard event system (option to return
|
- events: Allow customization of keyboard event system (option to return
|
||||||
|
@ -26,10 +29,12 @@ Things to do later:
|
||||||
- events: Generate keyboard events on-the-fly by reading state arrays,
|
- events: Generate keyboard events on-the-fly by reading state arrays,
|
||||||
| allowing both a faster interrupt and avoiding supressing other
|
| allowing both a faster interrupt and avoiding supressing other
|
||||||
| events inside getkey() and multigetkey()
|
| events inside getkey() and multigetkey()
|
||||||
|
- gray: Same as display, it's quite heavy
|
||||||
- serial: Implement a driver
|
- serial: Implement a driver
|
||||||
- stdio: More serious formatted printing functions
|
- stdio: More serious formatted printing functions and headers
|
||||||
- string: Use cmp/str to implement memchr() (assembler examples)
|
- string: Use cmp/str to implement memchr() (assembler examples)
|
||||||
- string: Do some tests for memcmp() and memcpy()
|
- string: Do some tests for memcmp() and memcpy()
|
||||||
|
- string: Lighter functions?
|
||||||
- usb: Implement a driver
|
- usb: Implement a driver
|
||||||
|
|
||||||
Things to investigate:
|
Things to investigate:
|
||||||
|
|
6
configure
vendored
|
@ -52,11 +52,11 @@ Options that affect the behavior of the library:
|
||||||
use this option when using both the gray engine and --no-syscalls.
|
use this option when using both the gray engine and --no-syscalls.
|
||||||
|
|
||||||
Options that customize size limits:
|
Options that customize size limits:
|
||||||
$Cr--atexit-max$C0=$Cy<integer>$Cg [default:$Cp 16$Cg]$C0
|
$Cr--atexit-max=$Cy<integer>$Cg [default:$Cp 16$Cg]$C0
|
||||||
Number of exit handlers that can be registered by atexit().
|
Number of exit handlers that can be registered by atexit().
|
||||||
$Cr--timer-slots$C0=$Cy<integer>$Cg [default:$Cp 16$Cg]$C0
|
$Cr--timer-slots=$Cy<integer>$Cg [default:$Cp 16$Cg]$C0
|
||||||
Number of virtual timers that may be registered at the same time.
|
Number of virtual timers that may be registered at the same time.
|
||||||
$Cr--events-queue-size$C0=$Cy<integer>$Cg [default:$Cp 64$Cg]$C0
|
$Cr--events-queue-size=$Cy<integer>$Cg [default:$Cp 64$Cg]$C0
|
||||||
Number of events simultaneously stored in the event queue.
|
Number of events simultaneously stored in the event queue.
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
|
|
||||||
# int BFile_Remove(const uint16_t *file)
|
|
||||||
.global _BFile_Remove
|
|
||||||
|
|
||||||
_BFile_Remove:
|
|
||||||
mov.l 1f, r0
|
|
||||||
mov.l 2f, r1
|
|
||||||
jmp @r1
|
|
||||||
mov #0, r5
|
|
||||||
1: .long 0x0439
|
|
||||||
|
|
||||||
# int BFile_Create(const uint16_t *file, enum { file = 1, folder = 5 },
|
|
||||||
# int *size)
|
|
||||||
.global _BFile_Create
|
|
||||||
|
|
||||||
_BFile_Create:
|
|
||||||
mov.l 1f, r0
|
|
||||||
mov.l 2f, r1
|
|
||||||
jmp @r1
|
|
||||||
nop
|
|
||||||
1: .long 0x0434
|
|
||||||
|
|
||||||
# int BFile_Open(const uint16_t *file, int mode)
|
|
||||||
.global _BFile_Open
|
|
||||||
|
|
||||||
_BFile_Open:
|
|
||||||
mov.l 1f, r0
|
|
||||||
mov.l 2f, r1
|
|
||||||
jmp @r1
|
|
||||||
mov #0, r6
|
|
||||||
1: .long 0x042c
|
|
||||||
|
|
||||||
# int BFile_Close(int handle)
|
|
||||||
.global _BFile_Close
|
|
||||||
|
|
||||||
_BFile_Close:
|
|
||||||
mov.l 1f, r0
|
|
||||||
mov.l 2f, r1
|
|
||||||
jmp @r1
|
|
||||||
nop
|
|
||||||
1: .long 0x042d
|
|
||||||
|
|
||||||
# int BFile_Write(int handle, void *ram_buffer, int even_size)
|
|
||||||
.global _BFile_Write
|
|
||||||
|
|
||||||
_BFile_Write:
|
|
||||||
mov.l 1f, r0
|
|
||||||
mov.l 2f, r1
|
|
||||||
jmp @r1
|
|
||||||
nop
|
|
||||||
1: .long 0x0435
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
|
|
||||||
# Syscall branch address
|
|
||||||
2: .long 0x80010070
|
|
267
demo/gintdemo.c
|
@ -54,154 +54,6 @@ void printf_test(void)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
static const unsigned char screen[1024] = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 7, 159, 0, 0, 1, 192, 0, 0, 0, 0, 0, 121, 240, 0, 0, 0,
|
|
||||||
31, 191, 192, 0, 3, 224, 27, 216, 0, 0, 1, 251, 252, 0, 0, 0, 57, 247, 222,
|
|
||||||
30, 7, 240, 36, 36, 62, 25, 131, 159, 24, 255, 129, 224, 0, 227, 142, 126, 1,
|
|
||||||
192, 45, 172, 127, 127, 192, 14, 1, 255, 199, 224, 0, 227, 140, 240, 1, 192,
|
|
||||||
26, 88, 115, 127, 224, 14, 57, 221, 207, 0, 0, 227, 13, 192, 1, 192, 34, 68,
|
|
||||||
120, 30, 0, 14, 25, 156, 220, 0, 0, 227, 253, 252, 1, 192, 36, 36, 126, 28,
|
|
||||||
0, 14, 219, 156, 223, 192, 0, 227, 253, 252, 1, 192, 36, 36, 31, 12, 0, 46,
|
|
||||||
27, 140, 223, 192, 0, 227, 141, 193, 193, 192, 40, 20, 7, 140, 0, 206, 25, 140,
|
|
||||||
220, 28, 0, 227, 140, 225, 129, 199, 24, 24, 99, 156, 1, 14, 25, 204, 206, 24,
|
|
||||||
0, 227, 142, 127, 1, 195, 39, 228, 255, 156, 2, 14, 24, 237, 199, 240, 1, 247,
|
|
||||||
222, 62, 1, 198, 44, 44, 223, 30, 2, 31, 28, 237, 131, 224, 1, 224, 0, 0, 3,
|
|
||||||
254, 27, 216, 0, 0, 4, 30, 0, 0, 0, 0, 3, 192, 0, 0, 7, 252, 0, 0, 0, 0, 4,
|
|
||||||
60, 1, 249, 240, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 4, 0, 97, 240, 56, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 224, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
4, 0, 47, 192, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 32, 255, 128, 63, 128,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 32, 255, 0, 48, 78, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 15, 176, 255, 0, 112, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 8, 56, 255, 0,
|
|
||||||
96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 8, 60, 255, 0, 224, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 130, 56, 126, 255, 3, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 192,
|
|
||||||
62, 255, 15, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 191, 255, 192, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 6, 129, 255, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
1, 0, 0, 6, 0, 255, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 128, 63, 192,
|
|
||||||
0, 0, 96, 1, 224, 1, 0, 0, 0, 2, 0, 0, 7, 0, 31, 192, 0, 0, 95, 1, 11, 68, 88,
|
|
||||||
0, 0, 4, 0, 0, 7, 128, 31, 192, 0, 1, 192, 129, 204, 85, 100, 0, 0, 8, 0, 0,
|
|
||||||
15, 128, 63, 224, 0, 0, 95, 1, 8, 85, 68, 0, 1, 144, 0, 0, 31, 128, 143, 224,
|
|
||||||
64, 0, 96, 1, 232, 41, 68, 0, 2, 96, 0, 31, 255, 129, 7, 248, 96, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 4, 0, 0, 96, 254, 129, 7, 254, 96, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 128,
|
|
||||||
254, 131, 135, 255, 224, 0, 0, 1, 192, 64, 16, 0, 8, 0, 7, 0, 254, 131, 255,
|
|
||||||
63, 224, 0, 0, 1, 38, 113, 208, 0, 8, 0, 13, 0, 222, 147, 254, 31, 224, 0, 0,
|
|
||||||
1, 41, 74, 80, 0, 8, 0, 25, 0, 222, 67, 254, 31, 160, 0, 0, 1, 41, 74, 80, 0,
|
|
||||||
12, 0, 49, 0, 222, 19, 254, 62, 48, 0, 0, 1, 198, 113, 208, 0, 2, 0, 32, 128,
|
|
||||||
222, 195, 255, 252, 56, 0, 0, 0, 0, 0, 0, 0, 2, 0, 124, 64, 220, 151, 135, 248,
|
|
||||||
127, 0, 0, 0, 0, 0, 0, 0, 2, 0, 66, 32, 221, 223, 7, 240, 255, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 2, 0, 129, 23, 93, 159, 15, 241, 131, 0, 0, 0, 0, 0, 0, 0, 4, 0, 128,
|
|
||||||
136, 217, 95, 3, 226, 9, 0, 0, 1, 240, 0, 0, 0, 4, 0, 128, 72, 89, 95, 129,
|
|
||||||
228, 18, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 72, 73, 127, 128, 224, 36, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 28, 1, 0, 76, 129, 127, 192, 96, 8, 0, 0, 0, 0, 0, 0, 0, 16, 1, 0,
|
|
||||||
231, 203, 124, 96, 64, 0, 0, 0, 0, 0, 0, 0, 0, 16, 1, 1, 28, 123, 240, 12, 64,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 16, 1, 2, 28, 143, 128, 15, 192, 7, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 16, 1, 4, 17, 143, 24, 15, 192, 14, 0, 0, 0, 0, 0, 0, 0, 28, 1, 4, 1, 135,
|
|
||||||
24, 31, 192, 24, 0, 0, 0, 0, 0, 0, 0, 18, 1, 62, 1, 135, 248, 63, 224, 192,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 35, 1, 195, 1, 135, 128, 254, 126, 1, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 35, 193, 131, 195, 135, 255, 248, 112, 1, 0, 0, 0, 0, 0, 0, 0, 67, 241, 131,
|
|
||||||
14, 207, 255, 192, 224, 3, 0, 0, 0, 0, 0, 0, 3, 67, 15, 143, 56, 255, 7, 1,
|
|
||||||
224, 7, 0, 0, 0, 0, 0, 0, 28, 130, 7, 255, 112, 204, 7, 131, 224, 31, 0, 0,
|
|
||||||
0, 0, 0, 0, 32, 134, 30, 29, 120, 156, 7, 255, 224, 127, 0, 0, 0, 0, 0, 63,
|
|
||||||
197, 206, 60, 56, 192, 248, 15, 255, 248, 255, 0, 0, 0, 0, 0, 120, 5, 227, 248,
|
|
||||||
56, 195, 248, 127, 191, 254, 63, 0, 0, 0, 0, 7, 254, 255, 193, 255, 15, 193,
|
|
||||||
255, 15, 31, 252, 31 };
|
|
||||||
|
|
||||||
void ML_bmp_or_cl(const unsigned char *bmp, int x, int y, int width, int height)
|
|
||||||
{
|
|
||||||
unsigned short line;
|
|
||||||
char shift, *screen, *p;
|
|
||||||
int i, j, real_width, begin_x, end_x, begin_y, end_y;
|
|
||||||
char bool1=1, bool2=1, bool3;
|
|
||||||
if(!bmp || x<1-width || x>127 || y<1-height || y>63 || height<1 || width<1) return;
|
|
||||||
p = (char*)&line;
|
|
||||||
real_width = (width-1>>3<<3)+8;
|
|
||||||
if(y < 0) begin_y = -y;
|
|
||||||
else begin_y = 0;
|
|
||||||
if(y+height > 64) end_y = 64-y;
|
|
||||||
else end_y = height;
|
|
||||||
shift = 8-(x&7);
|
|
||||||
if(x<0)
|
|
||||||
{
|
|
||||||
begin_x = -x>>3;
|
|
||||||
if(shift != 8) bool1 = 0;
|
|
||||||
} else begin_x = 0;
|
|
||||||
if(x+real_width > 128) end_x = 15-(x>>3), bool2 = 0;
|
|
||||||
else end_x = real_width-1>>3;
|
|
||||||
bool3 = (end_x == real_width-1>>3);
|
|
||||||
screen = display_getCurrentVRAM()+(y+begin_y<<4)+(x>>3);
|
|
||||||
|
|
||||||
for(i=begin_y ; i<end_y ; i++)
|
|
||||||
{
|
|
||||||
if(begin_x < end_x)
|
|
||||||
{
|
|
||||||
line = bmp[i*(real_width>>3)+begin_x] << shift;
|
|
||||||
if(bool1) screen[begin_x] |= *p;
|
|
||||||
if(shift!=8) screen[begin_x+1] |= *(p+1);
|
|
||||||
for(j=begin_x+1 ; j<end_x ; j++)
|
|
||||||
{
|
|
||||||
line = bmp[i*(real_width>>3)+j] << shift;
|
|
||||||
screen[j] |= *p;
|
|
||||||
if(shift!=8) screen[j+1] |= *(p+1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
line = bmp[i*(real_width>>3)+end_x];
|
|
||||||
if(bool3) line &= -1<<real_width-width;
|
|
||||||
line <<= shift;
|
|
||||||
if(begin_x < end_x || bool1) screen[end_x] |= *p;
|
|
||||||
if(bool2) screen[end_x+1] |= *(p+1);
|
|
||||||
screen += 16;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include <internals/timer.h>
|
|
||||||
void debug(void)
|
|
||||||
{
|
|
||||||
extern Image res_screen_start;
|
|
||||||
struct mod_tmu *timer;
|
|
||||||
int time1, time2;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
timer_get(TIMER_USER, &timer, NULL);
|
|
||||||
|
|
||||||
dclear();
|
|
||||||
ML_bmp_or_cl(screen, 1, 1, 128, 64);
|
|
||||||
dupdate();
|
|
||||||
getkey();
|
|
||||||
|
|
||||||
dclear();
|
|
||||||
dimage(&res_screen_start, 1, 1);
|
|
||||||
dupdate();
|
|
||||||
getkey();
|
|
||||||
|
|
||||||
dclear();
|
|
||||||
dtext("ML...", 2, 2);
|
|
||||||
dupdate();
|
|
||||||
|
|
||||||
timer_start2(TIMER_USER, 0x0fffffff, TIMER_Po_4, NULL, 0);
|
|
||||||
for(i = 0; i < 1000; i++) ML_bmp_or_cl(screen, 1, 1, 128, 64);
|
|
||||||
time1 = timer->TCNT;
|
|
||||||
timer_stop(TIMER_USER);
|
|
||||||
time1 = 0x0fffffff - time1;
|
|
||||||
|
|
||||||
dclear();
|
|
||||||
dtext("gint...", 2, 2);
|
|
||||||
dupdate();
|
|
||||||
|
|
||||||
timer_start2(TIMER_USER, 0x0fffffff, TIMER_Po_4, NULL, 0);
|
|
||||||
for(i = 0; i < 1000; i++) dimage(&res_screen_start, 1, 1);
|
|
||||||
time2 = timer->TCNT;
|
|
||||||
timer_stop(TIMER_USER);
|
|
||||||
time2 = 0x0fffffff - time2;
|
|
||||||
|
|
||||||
dclear();
|
|
||||||
print_hex(time1, 2, 2);
|
|
||||||
print_hex(time2, 2, 9);
|
|
||||||
dupdate();
|
|
||||||
while(getkey() != KEY_EXIT);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
tlb_debug()
|
tlb_debug()
|
||||||
Displays the TLB contents and some information. Only available for
|
Displays the TLB contents and some information. Only available for
|
||||||
|
@ -311,15 +163,13 @@ void main_menu(int *category, int *app)
|
||||||
"Clocks and timers",
|
"Clocks and timers",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
const char *list_perfs[] = {
|
const char *list_perfs[] = {
|
||||||
"Image rendering",
|
"Image rendering",
|
||||||
"Text rendering",
|
"Text rendering",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
const char *list_debug[] = {
|
*/
|
||||||
"View TLB (SH3 only)",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
const char **list = NULL;
|
const char **list = NULL;
|
||||||
int list_len = 0;
|
int list_len = 0;
|
||||||
|
|
||||||
|
@ -367,22 +217,17 @@ void main_menu(int *category, int *app)
|
||||||
locate(1, 1, "Test list");
|
locate(1, 1, "Test list");
|
||||||
list = list_tests;
|
list = list_tests;
|
||||||
break;
|
break;
|
||||||
|
/*
|
||||||
case 2:
|
case 2:
|
||||||
locate(1, 1, "Performance");
|
locate(1, 1, "Performance");
|
||||||
list = list_perfs;
|
list = list_perfs;
|
||||||
break;
|
break;
|
||||||
|
*/
|
||||||
case 3:
|
|
||||||
locate(1, 1, "Debug");
|
|
||||||
list = list_debug;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
print(1, 1, "Tab %d", tab);
|
print(1, 1, "Tab %d", tab);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
dimage(0, 56, &res_opt_menu);
|
dimage_part(0, 56, &res_opt_menu, 0, 0, 42, 8);
|
||||||
|
|
||||||
if(list)
|
if(list)
|
||||||
{
|
{
|
||||||
|
@ -422,22 +267,17 @@ void main_menu(int *category, int *app)
|
||||||
index = 0;
|
index = 0;
|
||||||
scroll = 0;
|
scroll = 0;
|
||||||
break;
|
break;
|
||||||
case KEY_F3:
|
/* case KEY_F3:
|
||||||
|
*category = 2;
|
||||||
|
*app = 1;
|
||||||
|
return;
|
||||||
|
*/
|
||||||
|
/* case KEY_F3:
|
||||||
if(tab == 2) break;
|
if(tab == 2) break;
|
||||||
tab = 2;
|
tab = 2;
|
||||||
index = 0;
|
index = 0;
|
||||||
scroll = 0;
|
scroll = 0;
|
||||||
break;
|
break;
|
||||||
case KEY_F4:
|
|
||||||
if(tab == 3) break;
|
|
||||||
tab = 3;
|
|
||||||
index = 0;
|
|
||||||
scroll = 0;
|
|
||||||
break;
|
|
||||||
/* case KEY_F6:;
|
|
||||||
void screen(void);
|
|
||||||
screen();
|
|
||||||
break;
|
|
||||||
*/
|
*/
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
if(list && list_len > 1)
|
if(list && list_len > 1)
|
||||||
|
@ -514,36 +354,18 @@ int main(void)
|
||||||
case 0x0105: test_rtc(); break;
|
case 0x0105: test_rtc(); break;
|
||||||
case 0x0106: test_timer(); break;
|
case 0x0106: test_timer(); break;
|
||||||
|
|
||||||
case 0x0201: /* perf_bopti(); */ break;
|
case 0x0201: perf_bopti(); break;
|
||||||
case 0x0202: /* perf_tales(); */ break;
|
case 0x0202: /* perf_tales(); */ break;
|
||||||
|
|
||||||
case 0x0301: /* if(isSH3()) debug_tlb(); */ break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void crash(void)
|
/*
|
||||||
|
#include <bfile.h>
|
||||||
|
void screen(void)
|
||||||
{
|
{
|
||||||
__asm__(
|
|
||||||
"mov #0, r0 \n\t"
|
|
||||||
"ldc r0, vbr \n\t"
|
|
||||||
"trapa #1 "
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void screen(void)
|
|
||||||
{
|
|
||||||
enum { File = 1, Folder = 5 };
|
|
||||||
enum { Read = 0x01, Write = 0x02, ReadWrite = Read | Write };
|
|
||||||
|
|
||||||
int BFile_Remove(const uint16_t *file);
|
|
||||||
int BFile_Create(const uint16_t *file, int type, int *size);
|
|
||||||
int BFile_Open(const uint16_t *file, int mode);
|
|
||||||
int BFile_Close(int handle);
|
|
||||||
int BFile_Write(int handle, const void *ram_buffer, int even_size);
|
|
||||||
|
|
||||||
const uint8_t bmp_header[0x7e] = {
|
const uint8_t bmp_header[0x7e] = {
|
||||||
0x42, 0x4d, 0x7e, 0x04, 0x00, 0x00, 0x00, 0x00,
|
0x42, 0x4d, 0x7e, 0x04, 0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x6c, 0x00,
|
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x6c, 0x00,
|
||||||
|
@ -567,8 +389,8 @@ static void screen(void)
|
||||||
int size = 0x7e + 1024;
|
int size = 0x7e + 1024;
|
||||||
|
|
||||||
BFile_Remove(file);
|
BFile_Remove(file);
|
||||||
BFile_Create(file, File, &size);
|
BFile_Create(file, BFile_File, &size);
|
||||||
int handle = BFile_Open(file, Write);
|
int handle = BFile_Open(file, BFile_WriteOnly);
|
||||||
BFile_Write(handle, bmp_header, 0x7e);
|
BFile_Write(handle, bmp_header, 0x7e);
|
||||||
void *vram = (void *)display_getCurrentVRAM() + 1024;
|
void *vram = (void *)display_getCurrentVRAM() + 1024;
|
||||||
for(int i = 1; i <= 64; i++)
|
for(int i = 1; i <= 64; i++)
|
||||||
|
@ -577,3 +399,58 @@ static void screen(void)
|
||||||
}
|
}
|
||||||
BFile_Close(handle);
|
BFile_Close(handle);
|
||||||
}
|
}
|
||||||
|
void screengray(void)
|
||||||
|
{
|
||||||
|
const uint8_t bmp_header[0x7e] = {
|
||||||
|
0x42, 0x4d, 0x7e, 0x04, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x6c, 0x00,
|
||||||
|
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00,
|
||||||
|
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x13, 0x0b,
|
||||||
|
0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x01, 0x00,
|
||||||
|
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x47,
|
||||||
|
0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0xff, 0xff, 0xff, 0x00,
|
||||||
|
};
|
||||||
|
uint16_t file[] = { '\\', '\\', 'f', 'l', 's', '0', '\\', 'g', 's',
|
||||||
|
'c', 'r', 'e', 'e', 'n', '#', '.', 'b', 'm', 'p', 0x00 };
|
||||||
|
int size = 0x7e + 1024;
|
||||||
|
void *vram;
|
||||||
|
int handle;
|
||||||
|
|
||||||
|
gupdate();
|
||||||
|
|
||||||
|
file[14] = 'l';
|
||||||
|
BFile_Remove(file);
|
||||||
|
BFile_Create(file, BFile_File, &size);
|
||||||
|
handle = BFile_Open(file, BFile_WriteOnly);
|
||||||
|
BFile_Write(handle, bmp_header, 0x7e);
|
||||||
|
vram = (void *)gray_lightVRAM() + 1024;
|
||||||
|
for(int i = 1; i <= 64; i++)
|
||||||
|
{
|
||||||
|
BFile_Write(handle, vram - 16 * i, 16);
|
||||||
|
}
|
||||||
|
BFile_Close(handle);
|
||||||
|
|
||||||
|
file[14] = 'd';
|
||||||
|
BFile_Remove(file);
|
||||||
|
BFile_Create(file, BFile_File, &size);
|
||||||
|
handle = BFile_Open(file, BFile_WriteOnly);
|
||||||
|
BFile_Write(handle, bmp_header, 0x7e);
|
||||||
|
vram = (void *)gray_darkVRAM() + 1024;
|
||||||
|
for(int i = 1; i <= 64; i++)
|
||||||
|
{
|
||||||
|
BFile_Write(handle, vram - 16 * i, 16);
|
||||||
|
}
|
||||||
|
BFile_Close(handle);
|
||||||
|
|
||||||
|
gupdate();
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
179
demo/perf_bopti.c
Normal file
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 13 KiB |
BIN
demo/resources/town.bmp
Normal file
After Width: | Height: | Size: 103 KiB |
|
@ -19,7 +19,7 @@
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
zelda.bmp 86 * 280 Mono -
|
zelda.bmp 86 * 280 Mono -
|
||||||
isometric.bmp 37 * 27 Mono Full
|
isometric.bmp 37 * 27 Mono Full
|
||||||
Mono Greater
|
- - Mono Greater
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ static image_t *select(image_t *current)
|
||||||
res_swords,
|
res_swords,
|
||||||
res_zelda,
|
res_zelda,
|
||||||
res_isometric;
|
res_isometric;
|
||||||
|
extern image_t res_screen;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
image_t *img;
|
image_t *img;
|
||||||
|
@ -71,6 +72,7 @@ static image_t *select(image_t *current)
|
||||||
{ &res_swords, "Swords", "Gray Alpha" },
|
{ &res_swords, "Swords", "Gray Alpha" },
|
||||||
{ &res_zelda, "Zelda", "Mono" },
|
{ &res_zelda, "Zelda", "Mono" },
|
||||||
{ &res_isometric, "Isometric", "Mono Alpha" },
|
{ &res_isometric, "Isometric", "Mono Alpha" },
|
||||||
|
{ &res_screen, "TLT", "Mono" },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -81,6 +83,7 @@ static image_t *select(image_t *current)
|
||||||
|
|
||||||
while(images[items].img) items++;
|
while(images[items].img) items++;
|
||||||
|
|
||||||
|
keyboard_setRepeatRate(625, 125);
|
||||||
gray_start();
|
gray_start();
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
|
@ -141,8 +144,10 @@ void test_bopti(void)
|
||||||
int black_bg = 0;
|
int black_bg = 0;
|
||||||
int x = 0, y = 0;
|
int x = 0, y = 0;
|
||||||
|
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
keyboard_setRepeatRate(25, 25);
|
||||||
if(img && (img->format & channel_light))
|
if(img && (img->format & channel_light))
|
||||||
{
|
{
|
||||||
gray_start();
|
gray_start();
|
||||||
|
@ -152,8 +157,7 @@ void test_bopti(void)
|
||||||
if(img) gimage(x, y, img);
|
if(img) gimage(x, y, img);
|
||||||
|
|
||||||
grect(0, 55, 127, 63, color_white);
|
grect(0, 55, 127, 63, color_white);
|
||||||
gimage(0, 56, &res_opt_bitmap);
|
gimage_part(0, 56, &res_opt_bitmap, 0, 0, 96, 8);
|
||||||
gupdate();
|
|
||||||
}
|
}
|
||||||
else if(img)
|
else if(img)
|
||||||
{
|
{
|
||||||
|
@ -164,8 +168,7 @@ void test_bopti(void)
|
||||||
if(img) dimage(x, y, img);
|
if(img) dimage(x, y, img);
|
||||||
|
|
||||||
drect(0, 55, 127, 63, color_white);
|
drect(0, 55, 127, 63, color_white);
|
||||||
dimage(0, 56, &res_opt_bitmap);
|
dimage_part(0, 56, &res_opt_bitmap, 0, 0, 96, 8);
|
||||||
dupdate();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -174,10 +177,36 @@ void test_bopti(void)
|
||||||
dclear();
|
dclear();
|
||||||
locate(3, 3, "No image selected");
|
locate(3, 3, "No image selected");
|
||||||
|
|
||||||
dimage(0, 56, &res_opt_bitmap);
|
dimage_part(0, 56, &res_opt_bitmap, 0, 0, 96, 8);
|
||||||
dupdate();
|
dupdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(img)
|
||||||
|
{
|
||||||
|
int width, height;
|
||||||
|
getwh(img, &width, &height);
|
||||||
|
|
||||||
|
if(x < 0) print(1, 4, "\x01");
|
||||||
|
if(x + width > 128) print(21, 4, "\x02");
|
||||||
|
|
||||||
|
if(img->format & channel_light)
|
||||||
|
{
|
||||||
|
if(y < 0) gimage_part(61, 0, &res_opt_bitmap,
|
||||||
|
122, 0, 6, 8);
|
||||||
|
if(y + height > 64) gimage_part(61, 48,
|
||||||
|
&res_opt_bitmap, 116, 0, 6, 8);
|
||||||
|
gupdate();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(y < 0) dimage_part(61, 0, &res_opt_bitmap,
|
||||||
|
122, 0, 6, 8);
|
||||||
|
if(y + height > 64) dimage_part(61, 48,
|
||||||
|
&res_opt_bitmap, 116, 0, 6, 8);
|
||||||
|
dupdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
leave = 1;
|
leave = 1;
|
||||||
|
@ -185,6 +214,7 @@ void test_bopti(void)
|
||||||
switch(getkey())
|
switch(getkey())
|
||||||
{
|
{
|
||||||
case KEY_EXIT:
|
case KEY_EXIT:
|
||||||
|
keyboard_setRepeatRate(625, 125);
|
||||||
gray_stop();
|
gray_stop();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -192,22 +222,14 @@ void test_bopti(void)
|
||||||
img = select(img);
|
img = select(img);
|
||||||
getxy(img, &x, &y);
|
getxy(img, &x, &y);
|
||||||
break;
|
break;
|
||||||
case KEY_F5:
|
case KEY_F2:
|
||||||
black_bg = !black_bg;
|
black_bg = !black_bg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_UP:
|
case KEY_UP: y++; break;
|
||||||
y--;
|
case KEY_DOWN: y--; break;
|
||||||
break;
|
case KEY_LEFT: x++; break;
|
||||||
case KEY_DOWN:
|
case KEY_RIGHT: x--; break;
|
||||||
y++;
|
|
||||||
break;
|
|
||||||
case KEY_LEFT:
|
|
||||||
x--;
|
|
||||||
break;
|
|
||||||
case KEY_RIGHT:
|
|
||||||
x++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
leave = 0;
|
leave = 0;
|
||||||
|
@ -216,6 +238,7 @@ void test_bopti(void)
|
||||||
while(!leave);
|
while(!leave);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
keyboard_setRepeatRate(625, 125);
|
||||||
gray_stop();
|
gray_stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,10 +8,9 @@
|
||||||
Lets the user set the gray delays and see the results.
|
Lets the user set the gray delays and see the results.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void draw(int delay1, int delay2, int selected)
|
static void draw(int delay1, int delay2, int selected, int gran)
|
||||||
{
|
{
|
||||||
extern image_t res_opt_gray;
|
extern image_t res_opt_gray;
|
||||||
extern font_t res_font_modern;
|
|
||||||
uint32_t *vl = gray_lightVRAM();
|
uint32_t *vl = gray_lightVRAM();
|
||||||
uint32_t *vd = gray_darkVRAM();
|
uint32_t *vd = gray_darkVRAM();
|
||||||
|
|
||||||
|
@ -25,15 +24,16 @@ static void draw(int delay1, int delay2, int selected)
|
||||||
vd[offset] = -(i < 32);
|
vd[offset] = -(i < 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
text_configure(&res_font_modern, color_black);
|
print(2, 3, "light %d", delay1);
|
||||||
gtext(13, 17, "light");
|
print(2, 4, " dark %d", delay2);
|
||||||
gtext(13, 31, "dark");
|
print(2, 6, "Mode: \x04%d", gran);
|
||||||
|
|
||||||
text_configure(NULL, color_black);
|
int lengths[2] = {
|
||||||
print(4, 4, "%d", delay1);
|
4 - (delay1 < 1000),
|
||||||
print(4, 6, "%d", delay2);
|
4 - (delay2 < 1000)
|
||||||
|
};
|
||||||
locate(3, selected ? 6 : 4, "\x02");
|
print(8, 3 + selected, "\x01");
|
||||||
|
print(9 + lengths[selected], 3 + selected, "\x02");
|
||||||
|
|
||||||
gimage(0, 56, &res_opt_gray);
|
gimage(0, 56, &res_opt_gray);
|
||||||
gupdate();
|
gupdate();
|
||||||
|
@ -44,6 +44,7 @@ void test_gray(void)
|
||||||
int delays[2]; // { light, dark }
|
int delays[2]; // { light, dark }
|
||||||
int key, changed = 1;
|
int key, changed = 1;
|
||||||
int selected = 0;
|
int selected = 0;
|
||||||
|
int gran = 1;
|
||||||
|
|
||||||
gray_getDelays(delays, delays + 1);
|
gray_getDelays(delays, delays + 1);
|
||||||
gray_start();
|
gray_start();
|
||||||
|
@ -53,11 +54,11 @@ void test_gray(void)
|
||||||
if(changed)
|
if(changed)
|
||||||
{
|
{
|
||||||
gray_setDelays(delays[0], delays[1]);
|
gray_setDelays(delays[0], delays[1]);
|
||||||
draw(delays[0], delays[1], selected);
|
draw(delays[0], delays[1], selected, gran);
|
||||||
}
|
}
|
||||||
changed = 0;
|
changed = 0;
|
||||||
|
|
||||||
key = getkey_opt(getkey_repeat_arrow_keys, 25);
|
key = getkey_opt(getkey_default, 25);
|
||||||
if(key == KEY_EXIT) break;
|
if(key == KEY_EXIT) break;
|
||||||
|
|
||||||
changed = 1;
|
changed = 1;
|
||||||
|
@ -65,31 +66,33 @@ void test_gray(void)
|
||||||
switch(key)
|
switch(key)
|
||||||
{
|
{
|
||||||
case KEY_F1:
|
case KEY_F1:
|
||||||
selected = !selected;
|
|
||||||
break;
|
|
||||||
case KEY_F2:
|
|
||||||
delays[0] = 912;
|
delays[0] = 912;
|
||||||
delays[1] = 1343;
|
delays[1] = 1343;
|
||||||
break;
|
break;
|
||||||
case KEY_F3:
|
case KEY_F2:
|
||||||
delays[0] = 993;
|
delays[0] = 993;
|
||||||
delays[1] = 1609;
|
delays[1] = 1609;
|
||||||
break;
|
break;
|
||||||
case KEY_F4:
|
case KEY_F3:
|
||||||
delays[0] = 860;
|
delays[0] = 860;
|
||||||
delays[1] = 1298;
|
delays[1] = 1298;
|
||||||
break;
|
break;
|
||||||
|
case KEY_F5:
|
||||||
|
if(gran >= 100) gran = 1;
|
||||||
|
else gran *= 10;
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
delays[selected] += 10;
|
selected = 0;
|
||||||
break;
|
break;
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
if(delays[selected] >= 110) delays[selected] -= 10;
|
selected = 1;
|
||||||
break;
|
|
||||||
case KEY_RIGHT:
|
|
||||||
delays[selected]++;
|
|
||||||
break;
|
break;
|
||||||
case KEY_LEFT:
|
case KEY_LEFT:
|
||||||
if(delays[selected] >= 101) delays[selected]--;
|
if(delays[selected] - gran >= 100)
|
||||||
|
delays[selected] -= gran;
|
||||||
|
break;
|
||||||
|
case KEY_RIGHT:
|
||||||
|
if(delays[selected] + gran < 10000)
|
||||||
|
delays[selected] += gran;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
changed = 0;
|
changed = 0;
|
||||||
|
|
BIN
gscreen.bmp
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
gscreend.bmp
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
gscreenl.bmp
Normal file
After Width: | Height: | Size: 1.1 KiB |
74
include/bfile.h
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
//---
|
||||||
|
//
|
||||||
|
// gint core module: BFile interface
|
||||||
|
//
|
||||||
|
// Syscall-based interface to the BFile driver (which I would never dare
|
||||||
|
// to re-write considering how much the storage memory filesystem is an
|
||||||
|
// awful mess).
|
||||||
|
//
|
||||||
|
//---
|
||||||
|
|
||||||
|
#ifndef _BFILE_H
|
||||||
|
#define _BFILE_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
BFile_Remove()
|
||||||
|
Remove a file from the filesystem. The path must be encoded as two-byte
|
||||||
|
fontcharacters!
|
||||||
|
*/
|
||||||
|
int BFile_Remove(const uint16_t *file);
|
||||||
|
|
||||||
|
/*
|
||||||
|
BFile_Create()
|
||||||
|
Creates an entry in the filesystem (two-byte fontcharacter path) of the
|
||||||
|
given type. The size pointer must point to the file size for files, and
|
||||||
|
may be NULL for folders.
|
||||||
|
*/
|
||||||
|
enum BFile_EntryType
|
||||||
|
{
|
||||||
|
BFile_File = 1,
|
||||||
|
BFile_Folder = 5,
|
||||||
|
};
|
||||||
|
int BFile_Create(const uint16_t *file, enum BFile_EntryType type, int *size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
BFile_Open()
|
||||||
|
Opens an existing file (two-byte fontcharacter path) with the required
|
||||||
|
mode, and returns a handle (positive integer) on success, or an
|
||||||
|
negative integer on error.
|
||||||
|
*/
|
||||||
|
enum BFile_OpenMode
|
||||||
|
{
|
||||||
|
BFile_ReadOnly = 0x01,
|
||||||
|
BFile_WriteOnly = 0x02,
|
||||||
|
BFile_ReadWrite = BFile_ReadOnly | BFile_WriteOnly,
|
||||||
|
};
|
||||||
|
int BFile_Open(const uint16_t *file, enum BFile_OpenMode mode);
|
||||||
|
|
||||||
|
/*
|
||||||
|
BFile_Close()
|
||||||
|
Closes an open file.
|
||||||
|
*/
|
||||||
|
int BFile_Close(int handle);
|
||||||
|
|
||||||
|
/*
|
||||||
|
BFile_Write()
|
||||||
|
Writes data to a file. The data is taken from the second-argument
|
||||||
|
buffer. The size to write is given as third argument.
|
||||||
|
WARNING: Always write an even number of bytes or you're in for trouble!
|
||||||
|
*/
|
||||||
|
int BFile_Write(int handle, const void *ram_buffer, int even_size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
BFile_Read()
|
||||||
|
Reads from an open file. The second and third arguments indicate where
|
||||||
|
to store data and how much to read. The location from where the data is
|
||||||
|
read depends on the value of `whence`:
|
||||||
|
- If `whence` >= 0, it is considered as the absolute location (in
|
||||||
|
bytes) of the requested data in the file;
|
||||||
|
- If `whence` == -1, BFile_Read() reads from the current virtual
|
||||||
|
position in the file.
|
||||||
|
*/
|
||||||
|
int BFile_Read(int handle, void *ram_buffer, int size, int whence);
|
||||||
|
|
||||||
|
#endif // _BFILE_H
|
|
@ -1,6 +1,9 @@
|
||||||
//---
|
//---
|
||||||
|
//
|
||||||
// gint core module: syscalls
|
// gint core module: syscalls
|
||||||
|
//
|
||||||
// Some of the functionality still requires interacting with the system.
|
// Some of the functionality still requires interacting with the system.
|
||||||
|
//
|
||||||
//---
|
//---
|
||||||
|
|
||||||
#ifndef _INTERNALS_SYSCALLS_H
|
#ifndef _INTERNALS_SYSCALLS_H
|
||||||
|
|
|
@ -177,6 +177,9 @@ typedef enum
|
||||||
// Shorthand for the four previous properties.
|
// Shorthand for the four previous properties.
|
||||||
getkey_repeat_all_keys = 0xf0,
|
getkey_repeat_all_keys = 0xf0,
|
||||||
|
|
||||||
|
// Default combination of getkey().
|
||||||
|
getkey_default = 0x1f,
|
||||||
|
|
||||||
} getkey_option_t;
|
} getkey_option_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef _MODULES_INTERRUPTS
|
#ifndef _MODULES_INTERRUPTS_H
|
||||||
#define _MODULES_INTERRUPTS
|
#define _MODULES_INTERRUPTS_H
|
||||||
|
|
||||||
#include <modules/macros.h>
|
#include <modules/macros.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -685,4 +685,4 @@ typedef union
|
||||||
// Here's what you'll need to use.
|
// Here's what you'll need to use.
|
||||||
extern mod_intc_t INTC;
|
extern mod_intc_t INTC;
|
||||||
|
|
||||||
#endif // _MODULE_INTERRUPTS
|
#endif // _MODULE_INTERRUPTS_H
|
||||||
|
|
|
@ -22,8 +22,18 @@
|
||||||
/* Return to menu */
|
/* Return to menu */
|
||||||
.global ___system_menu
|
.global ___system_menu
|
||||||
|
|
||||||
|
/* Storage memory filesystem */
|
||||||
|
.global _BFile_Remove
|
||||||
|
.global _BFile_Create
|
||||||
|
.global _BFile_Open
|
||||||
|
.global _BFile_Close
|
||||||
|
.global _BFile_Write
|
||||||
|
.global _BFile_Read
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Dynamic memory allocation */
|
||||||
|
|
||||||
___malloc:
|
___malloc:
|
||||||
mov.l syscall_table, r2
|
mov.l syscall_table, r2
|
||||||
mov.l 1f, r0
|
mov.l 1f, r0
|
||||||
|
@ -45,6 +55,8 @@ ___realloc:
|
||||||
nop
|
nop
|
||||||
1: .long 0xe6d
|
1: .long 0xe6d
|
||||||
|
|
||||||
|
/* OS version access */
|
||||||
|
|
||||||
___get_os_version:
|
___get_os_version:
|
||||||
mov.l syscall_table, r2
|
mov.l syscall_table, r2
|
||||||
mov.l 1f, r0
|
mov.l 1f, r0
|
||||||
|
@ -126,6 +138,58 @@ ___system_menu:
|
||||||
.memcpy:
|
.memcpy:
|
||||||
.long _memcpy
|
.long _memcpy
|
||||||
|
|
||||||
|
/* BFile driver */
|
||||||
|
|
||||||
|
|
||||||
|
# int BFile_Remove(const uint16_t *file)
|
||||||
|
_BFile_Remove:
|
||||||
|
mov.l 1f, r0
|
||||||
|
mov.l syscall_table, r1
|
||||||
|
jmp @r1
|
||||||
|
mov #0, r5
|
||||||
|
1: .long 0x0439
|
||||||
|
|
||||||
|
# int BFile_Create(const uint16_t *file, enum { file = 1, folder = 5 },
|
||||||
|
# int *size)
|
||||||
|
_BFile_Create:
|
||||||
|
mov.l 1f, r0
|
||||||
|
mov.l syscall_table, r1
|
||||||
|
jmp @r1
|
||||||
|
nop
|
||||||
|
1: .long 0x0434
|
||||||
|
|
||||||
|
# int BFile_Open(const uint16_t *file, int mode)
|
||||||
|
_BFile_Open:
|
||||||
|
mov.l 1f, r0
|
||||||
|
mov.l syscall_table, r1
|
||||||
|
jmp @r1
|
||||||
|
mov #0, r6
|
||||||
|
1: .long 0x042c
|
||||||
|
|
||||||
|
# int BFile_Close(int handle)
|
||||||
|
_BFile_Close:
|
||||||
|
mov.l 1f, r0
|
||||||
|
mov.l syscall_table, r1
|
||||||
|
jmp @r1
|
||||||
|
nop
|
||||||
|
1: .long 0x042d
|
||||||
|
|
||||||
|
# int BFile_Write(int handle, const void *ram_buffer, int even_size)
|
||||||
|
_BFile_Write:
|
||||||
|
mov.l 1f, r0
|
||||||
|
mov.l syscall_table, r1
|
||||||
|
jmp @r1
|
||||||
|
nop
|
||||||
|
1: .long 0x0435
|
||||||
|
|
||||||
|
# int BFile_Read(int handle, void *ram_buffer, int size, int whence)
|
||||||
|
_BFile_Read:
|
||||||
|
mov.l 1f, r0
|
||||||
|
mov.l syscall_table, r1
|
||||||
|
jmp @r1
|
||||||
|
nop
|
||||||
|
1: .long 0x0432
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
|
|
|
@ -20,7 +20,7 @@ void grect(int x1, int y1, int x2, int y2, color_t operator)
|
||||||
// Doing things in this order will be slower, but man, I can't stand
|
// Doing things in this order will be slower, but man, I can't stand
|
||||||
// writing that many lines of code for such a simple task. It will be
|
// writing that many lines of code for such a simple task. It will be
|
||||||
// terribly heavy in the binary file...
|
// terribly heavy in the binary file...
|
||||||
while(lvideo > lbase) for(int i = 0; i < 4; i++) switch(operator)
|
while(lvideo > lbase) for(int i = 3; i >= 0; i--) switch(operator)
|
||||||
{
|
{
|
||||||
case color_white:
|
case color_white:
|
||||||
*--lvideo &= ~masks[i];
|
*--lvideo &= ~masks[i];
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <display.h>
|
#include <display.h>
|
||||||
#include <internals/init.h>
|
#include <internals/init.h>
|
||||||
#include <internals/modules.h>
|
#include <internals/modules.h>
|
||||||
|
#include <modules/interrupts.h>
|
||||||
|
|
||||||
/* We need some more functionality to generate these */
|
/* We need some more functionality to generate these */
|
||||||
#ifdef GINT_STARTUP_LOG
|
#ifdef GINT_STARTUP_LOG
|
||||||
|
@ -15,7 +16,6 @@
|
||||||
#include <clock.h>
|
#include <clock.h>
|
||||||
#include <events.h>
|
#include <events.h>
|
||||||
#include <internals/keyboard.h>
|
#include <internals/keyboard.h>
|
||||||
#include <modules/interrupts.h>
|
|
||||||
|
|
||||||
#ifndef GINT_NO_SYSCALLS
|
#ifndef GINT_NO_SYSCALLS
|
||||||
#include <internals/syscalls.h>
|
#include <internals/syscalls.h>
|
||||||
|
@ -226,7 +226,7 @@ __attribute__((section(".pretext.entry"))) int start(void)
|
||||||
init();
|
init();
|
||||||
|
|
||||||
#ifdef GINT_STARTUP_LOG
|
#ifdef GINT_STARTUP_LOG
|
||||||
/* Keep this visible for a second or so */
|
/* Keep this visible if a key is kept pressed */
|
||||||
keyboard_interrupt();
|
keyboard_interrupt();
|
||||||
if(pollevent().type != event_none) getkey();
|
if(pollevent().type != event_none) getkey();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -12,17 +12,7 @@
|
||||||
*/
|
*/
|
||||||
int getkey(void)
|
int getkey(void)
|
||||||
{
|
{
|
||||||
return getkey_opt(
|
return getkey_opt(getkey_default, 0);
|
||||||
getkey_shift_modifier |
|
|
||||||
getkey_alpha_modifier |
|
|
||||||
getkey_manage_backlight |
|
|
||||||
#ifndef GINT_NO_SYSCALLS
|
|
||||||
getkey_task_switch |
|
|
||||||
#endif
|
|
||||||
getkey_repeat_arrow_keys,
|
|
||||||
|
|
||||||
0
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
2
version
|
@ -1 +1 @@
|
||||||
beta-0.9-581
|
beta-0.9-584
|
||||||
|
|