mirror of
https://git.planet-casio.com/Lephenixnoir/gint.git
synced 2024-12-28 04:23:36 +01:00
Made INCOMPATIBLE changes to image rendering. Added inttypes.h and bakclight management in getkey().
This commit is contained in:
parent
28f790bade
commit
93dca0ef6f
15 changed files with 178 additions and 20 deletions
4
TODO
4
TODO
|
@ -1,6 +1,9 @@
|
|||
Bugs to fix:
|
||||
- A few key hits ignored after leaving the application (could not reproduce)
|
||||
- Lost keyboard control at startup (could not reproduce)
|
||||
- Influence of keyboard on some timers and RTC (maybe interrupt priority)
|
||||
- Alignment of ALL .data / .rodata files is required to ensure converted data
|
||||
is properly aligned
|
||||
|
||||
Simple improvements:
|
||||
- demo: Try 284x124 at (-60, -28) (all disadvantages)
|
||||
|
@ -8,6 +11,7 @@ Simple improvements:
|
|||
- time: Compute CLOCKS_PER_SEC
|
||||
- core: Add VBR handlers debugging information (if possible)
|
||||
- events: Introduce KeyRepeat events
|
||||
- library: Implement C99's inttypes.h for Cake's UpdateExe
|
||||
Larger improvements:
|
||||
- errno: Introduce errno and use it more or less everywhere
|
||||
- bopti: Monochrome bitmaps blending modes
|
||||
|
|
|
@ -43,7 +43,9 @@ SECTIONS
|
|||
|
||||
.rodata : {
|
||||
*(.rodata.fxconv);
|
||||
*(.rodata.paradox);
|
||||
*(.rodata)
|
||||
. = ALIGN(4);
|
||||
*(.rodata.*)
|
||||
|
||||
_romdata = ALIGN(4) ;
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
static void getwh(Image *img, int *width, int *height)
|
||||
{
|
||||
const unsigned char *data;
|
||||
const uint8_t *data;
|
||||
|
||||
if(!img)
|
||||
{
|
||||
|
@ -37,7 +37,7 @@ static void getwh(Image *img, int *width, int *height)
|
|||
*height = img->height;
|
||||
if(*width && *height) return;
|
||||
|
||||
data = img->data;
|
||||
data = (uint8_t *)img->data;
|
||||
*width = (data[0] << 8) | data[1];
|
||||
*height = (data[2] << 8) | data[3];
|
||||
}
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
#ifndef _DISPLAY_H
|
||||
#define _DISPLAY_H 1
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
//---
|
||||
// Heading declarations.
|
||||
|
@ -36,15 +38,15 @@ enum Color
|
|||
*/
|
||||
struct Image
|
||||
{
|
||||
unsigned char magic;
|
||||
unsigned char format;
|
||||
uint8_t magic;
|
||||
uint8_t format;
|
||||
|
||||
unsigned char width;
|
||||
unsigned char height;
|
||||
uint8_t width;
|
||||
uint8_t height;
|
||||
|
||||
const unsigned char __attribute__((aligned(4))) data[];
|
||||
const uint32_t data[];
|
||||
|
||||
} __attribute__((aligned(4)));
|
||||
} __attribute__((packed, aligned(4)));
|
||||
// Useful shorthand for user code.
|
||||
typedef struct Image Image;
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ struct Structure
|
|||
int width, height;
|
||||
int layer_size;
|
||||
|
||||
const unsigned char *data;
|
||||
const uint8_t *data;
|
||||
int columns;
|
||||
int end_size, end_bytes;
|
||||
};
|
||||
|
|
116
include/inttypes.h
Normal file
116
include/inttypes.h
Normal file
|
@ -0,0 +1,116 @@
|
|||
#ifndef _INTTYPES_H
|
||||
#define _INTTYPES_H
|
||||
|
||||
// Decimal notation.
|
||||
#define PRId8 "d"
|
||||
#define PRId16 "d"
|
||||
#define PRId32 "d"
|
||||
#define PRId64 "lld"
|
||||
|
||||
#define PRIdLEAST8 "d"
|
||||
#define PRIdLEAST16 "d"
|
||||
#define PRIdLEAST32 "d"
|
||||
#define PRIdLEAST64 "lld"
|
||||
|
||||
#define PRIdFAST8 "d"
|
||||
#define PRIdFAST16 "d"
|
||||
#define PRIdFAST32 "d"
|
||||
#define PRIdFAST64 "lld"
|
||||
|
||||
// Decimal notation, again.
|
||||
#define PRIi8 "i"
|
||||
#define PRIi16 "i"
|
||||
#define PRIi32 "i"
|
||||
#define PRIi64 "lli"
|
||||
|
||||
#define PRIiLEAST8 "i"
|
||||
#define PRIiLEAST16 "i"
|
||||
#define PRIiLEAST32 "i"
|
||||
#define PRIiLEAST64 "lli"
|
||||
|
||||
#define PRIiFAST8 "i"
|
||||
#define PRIiFAST16 "i"
|
||||
#define PRIiFAST32 "i"
|
||||
#define PRIiFAST64 "lli"
|
||||
|
||||
// Octal notation.
|
||||
#define PRIo8 "o"
|
||||
#define PRIo16 "o"
|
||||
#define PRIo32 "o"
|
||||
#define PRIo64 "llo"
|
||||
|
||||
#define PRIoLEAST8 "o"
|
||||
#define PRIoLEAST16 "o"
|
||||
#define PRIoLEAST32 "o"
|
||||
#define PRIoLEAST64 "llo"
|
||||
|
||||
#define PRIoFAST8 "o"
|
||||
#define PRIoFAST16 "o"
|
||||
#define PRIoFAST32 "o"
|
||||
#define PRIoFAST64 "llo"
|
||||
|
||||
// Unsigned integers.
|
||||
#define PRIu8 "u"
|
||||
#define PRIu16 "u"
|
||||
#define PRIu32 "u"
|
||||
#define PRIu64 "llu"
|
||||
|
||||
#define PRIuLEAST8 "u"
|
||||
#define PRIuLEAST16 "u"
|
||||
#define PRIuLEAST32 "u"
|
||||
#define PRIuLEAST64 "llu"
|
||||
|
||||
#define PRIuFAST8 "u"
|
||||
#define PRIuFAST16 "u"
|
||||
#define PRIuFAST32 "u"
|
||||
#define PRIuFAST64 "llu"
|
||||
|
||||
// Lowercase hexadecimal notation.
|
||||
#define PRIx8 "x"
|
||||
#define PRIx16 "x"
|
||||
#define PRIx32 "x"
|
||||
#define PRIx64 "llx"
|
||||
|
||||
#define PRIxLEAST8 "x"
|
||||
#define PRIxLEAST16 "x"
|
||||
#define PRIxLEAST32 "x"
|
||||
#define PRIxLEAST64 "llx"
|
||||
|
||||
#define PRIxFAST8 "x"
|
||||
#define PRIxFAST16 "x"
|
||||
#define PRIxFAST32 "x"
|
||||
#define PRIxFAST64 "llx"
|
||||
|
||||
// Uppercase hexadecimal notation.
|
||||
#define PRIX8 "X"
|
||||
#define PRIX16 "X"
|
||||
#define PRIX32 "X"
|
||||
#define PRIX64 "llX"
|
||||
|
||||
#define PRIXLEAST8 "X"
|
||||
#define PRIXLEAST16 "X"
|
||||
#define PRIXLEAST32 "X"
|
||||
#define PRIXLEAST64 "llX"
|
||||
|
||||
#define PRIXFAST8 "X"
|
||||
#define PRIXFAST16 "X"
|
||||
#define PRIXFAST32 "X"
|
||||
#define PRIXFAST64 "llX"
|
||||
|
||||
// Format specifiers of intmax_t and uintmax_t.
|
||||
#define PRIdMAX "lld"
|
||||
#define PRIiMAX "lli"
|
||||
#define PRIoMAX "llo"
|
||||
#define PRIuMAX "llu"
|
||||
#define PRIxMAX "llx"
|
||||
#define PRIXMAX "llX"
|
||||
|
||||
// Format specifiers of intptr_t and uintptr_t.
|
||||
#define PRIdPTR "d"
|
||||
#define PRIiPTR "i"
|
||||
#define PRIoPTR "o"
|
||||
#define PRIuPTR "u"
|
||||
#define PRIxPTR "x"
|
||||
#define PRIXPTR "X"
|
||||
|
||||
#endif // _INTTYPES_H
|
|
@ -152,6 +152,9 @@ enum GetkeyOpt
|
|||
Getkey_ShiftModifier = 0x01,
|
||||
Getkey_AlphaModifier = 0x02,
|
||||
|
||||
// Allow changing the backlight status on [SHIFT] + [OPTN].
|
||||
Getkey_ManageBacklight = 0x04,
|
||||
|
||||
// Key repetition. Notice that modifiers will never be repeated.
|
||||
Getkey_RepeatArrowKeys = 0x10,
|
||||
Getkey_RepeatCharKeys = 0x20,
|
||||
|
|
|
@ -26,4 +26,10 @@ void screen_display(const void *vram);
|
|||
*/
|
||||
void screen_setBacklight(int on);
|
||||
|
||||
/*
|
||||
screen_toggleBacklight()
|
||||
Changes the backlight state, regardless of its current state.
|
||||
*/
|
||||
void screen_toggleBacklight(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -290,7 +290,7 @@ void getStructure(struct Image *img, struct Structure *s)
|
|||
{
|
||||
s->width = (img->data[0] << 8) | img->data[1];
|
||||
s->height = (img->data[2] << 8) | img->data[3];
|
||||
s->data = img->data + 4;
|
||||
s->data = (uint8_t *)img->data + 4;
|
||||
|
||||
column_count = (s->width + 31) >> 5;
|
||||
end = 0;
|
||||
|
@ -300,7 +300,7 @@ void getStructure(struct Image *img, struct Structure *s)
|
|||
{
|
||||
s->width = img->width;
|
||||
s->height = img->height;
|
||||
s->data = img->data;
|
||||
s->data = (uint8_t *)img->data;
|
||||
|
||||
column_count = img->width >> 5;
|
||||
end = img->width & 31;
|
||||
|
@ -320,7 +320,7 @@ void getStructure(struct Image *img, struct Structure *s)
|
|||
|
||||
// The layer size must be rounded to a multiple of 4.
|
||||
layer = s->height * ((column_count << 2) + end_bytes);
|
||||
if(layer & 3) layer += 4 - (layer & 3);
|
||||
layer = (layer + 3) & ~3;
|
||||
|
||||
s->columns = column_count;
|
||||
s->end_bytes = end_bytes;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
*/
|
||||
void dimage(int x, int y, struct Image *img)
|
||||
{
|
||||
if(!img || img->magic != 0xb7) return;
|
||||
if(!img || img->magic != 0x01) return;
|
||||
|
||||
struct Structure s;
|
||||
struct Command command;
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
void dimage_part(int x, int y, struct Image *img, int left, int top,
|
||||
int width, int height)
|
||||
{
|
||||
if(!img || img->magic != 0xb7) return;
|
||||
if(!img || img->magic != 0x01) return;
|
||||
|
||||
struct Structure s;
|
||||
struct Command command;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
*/
|
||||
void gimage(int x, int y, struct Image *img)
|
||||
{
|
||||
if(!img || img->magic != 0xb7) return;
|
||||
if(!img || img->magic != 0x01) return;
|
||||
|
||||
struct Structure s;
|
||||
struct Command command;
|
||||
|
|
|
@ -30,7 +30,7 @@ struct Rect intersect(struct Rect r1, struct Rect r2)
|
|||
void gimage_part(int x, int y, struct Image *img, int left, int top,
|
||||
int width, int height)
|
||||
{
|
||||
if(!img || img->magic != 0xb7) return;
|
||||
if(!img || img->magic != 0x01) return;
|
||||
|
||||
struct Structure s;
|
||||
struct Command command;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <internals/keyboard.h>
|
||||
#include <keyboard.h>
|
||||
#include <events.h>
|
||||
#include <screen.h>
|
||||
|
||||
/*
|
||||
getkey()
|
||||
|
@ -10,11 +11,10 @@
|
|||
int getkey(void)
|
||||
{
|
||||
return getkey_opt(
|
||||
Getkey_ShiftModifier |
|
||||
Getkey_AlphaModifier |
|
||||
|
||||
Getkey_ShiftModifier |
|
||||
Getkey_AlphaModifier |
|
||||
Getkey_ManageBacklight |
|
||||
Getkey_RepeatArrowKeys,
|
||||
|
||||
0
|
||||
);
|
||||
}
|
||||
|
@ -77,6 +77,13 @@ int getkey_opt(enum GetkeyOpt options, int cycles)
|
|||
case ET_KeyPress:
|
||||
;
|
||||
int key = event.key;
|
||||
if(options & Getkey_ManageBacklight && key == KEY_OPTN
|
||||
&& modifier & MOD_SHIFT)
|
||||
{
|
||||
screen_toggleBacklight();
|
||||
modifier &= ~MOD_SHIFT;
|
||||
continue;
|
||||
}
|
||||
if(options & Getkey_ShiftModifier && key == KEY_SHIFT)
|
||||
{
|
||||
modifier ^= MOD_SHIFT;
|
||||
|
|
|
@ -20,3 +20,21 @@ void screen_setBacklight(int on)
|
|||
else *PNDR &= ~0x10;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
screen_toggleBacklight()
|
||||
Changes the backlight state, regardless of its current state.
|
||||
*/
|
||||
void screen_toggleBacklight(void)
|
||||
{
|
||||
if(isSH3())
|
||||
{
|
||||
volatile unsigned char *PGDR = (void *)0xa400012c;
|
||||
*PGDR ^= 0x80;
|
||||
}
|
||||
else
|
||||
{
|
||||
volatile unsigned char *PNDR = (void *)0xa4050138;
|
||||
*PNDR ^= 0x10;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue