mirror of
https://github.com/RaySollium99/libpicofe.git
synced 2025-09-05 06:47:45 -04:00
screen ptr/size unification, major cleanups
git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@644 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
bf3c44f485
commit
e31266dd11
16 changed files with 259 additions and 415 deletions
150
common/common.h
150
common/common.h
|
@ -1,155 +1,17 @@
|
||||||
// platform specific things for common menu code
|
/* random common definitions */
|
||||||
|
|
||||||
/* TODO: get rid of this file */
|
|
||||||
|
|
||||||
#ifdef __GP2X__
|
|
||||||
#include "../gp2x/gp2x.h"
|
|
||||||
|
|
||||||
// TODO merge
|
|
||||||
#define PBTN_UP (1 << 0)
|
|
||||||
#define PBTN_DOWN (1 << 1)
|
|
||||||
#define PBTN_LEFT (1 << 2)
|
|
||||||
#define PBTN_RIGHT (1 << 3)
|
|
||||||
|
|
||||||
#define PBTN_NORTH (1 << 4)
|
|
||||||
#define PBTN_SOUTH (1 << 5)
|
|
||||||
#define PBTN_WEST (1 << 6)
|
|
||||||
#define PBTN_EAST (1 << 7)
|
|
||||||
#define PBTN_L (1 << 8)
|
|
||||||
#define PBTN_R (1 << 9)
|
|
||||||
|
|
||||||
/* menu nav */
|
|
||||||
#define PBTN_MOK PBTN_EAST
|
|
||||||
#define PBTN_MBACK PBTN_SOUTH
|
|
||||||
#define PBTN_MENU (1 << 10)
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
#define PBTN_UP GP2X_UP
|
|
||||||
#define PBTN_DOWN GP2X_DOWN
|
|
||||||
#define PBTN_LEFT GP2X_LEFT
|
|
||||||
#define PBTN_RIGHT GP2X_RIGHT
|
|
||||||
|
|
||||||
#define PBTN_NORTH GP2X_Y
|
|
||||||
#define PBTN_SOUTH GP2X_X
|
|
||||||
#define PBTN_WEST GP2X_A
|
|
||||||
#define PBTN_EAST GP2X_B
|
|
||||||
#define PBTN_L GP2X_L
|
|
||||||
#define PBTN_R GP2X_R
|
|
||||||
|
|
||||||
/* menu nav */
|
|
||||||
#define PBTN_MOK GP2X_B
|
|
||||||
#define PBTN_MBACK GP2X_X
|
|
||||||
#define PBTN_MENU GP2X_SELECT
|
|
||||||
#endif
|
|
||||||
#define GP2X_Y 0 /* FIXME */
|
|
||||||
|
|
||||||
void gp2x_pd_clone_buffer2(void);
|
|
||||||
void menu_darken_bg(void *dst, int pixels, int darker);
|
|
||||||
void menu_flip(void);
|
|
||||||
|
|
||||||
#define SCREEN_WIDTH 320
|
|
||||||
#define SCREEN_HEIGHT 240
|
|
||||||
#define SCREEN_BUFFER gp2x_screen
|
|
||||||
|
|
||||||
#define menu_draw_begin() \
|
|
||||||
gp2x_pd_clone_buffer2()
|
|
||||||
#define clear_screen() \
|
|
||||||
memset(gp2x_screen, 0, 320*240*2)
|
|
||||||
#define darken_screen() \
|
|
||||||
menu_darken_bg(gp2x_screen, 320*240, 0)
|
|
||||||
#define menu_draw_end() \
|
|
||||||
menu_flip()
|
|
||||||
|
|
||||||
// ------------------------------------
|
|
||||||
|
|
||||||
#elif defined(__GIZ__)
|
|
||||||
|
|
||||||
#include "../gizmondo/giz.h"
|
|
||||||
|
|
||||||
#define PBTN_NORTH PBTN_STOP
|
|
||||||
#define PBTN_SOUTH PBTN_PLAY
|
|
||||||
#define PBTN_WEST PBTN_REW
|
|
||||||
#define PBTN_EAST PBTN_FWD
|
|
||||||
|
|
||||||
void menu_draw_begin(int use_bgbuff);
|
|
||||||
void menu_darken_bg(void *dst, const void *src, int pixels, int darker);
|
|
||||||
void menu_draw_end(void);
|
|
||||||
|
|
||||||
#define SCREEN_WIDTH 321
|
|
||||||
#define SCREEN_HEIGHT 240
|
|
||||||
#define SCREEN_BUFFER ((giz_screen != NULL) ? giz_screen : menu_screen)
|
|
||||||
extern void *menu_screen;
|
|
||||||
extern void *giz_screen;
|
|
||||||
|
|
||||||
#define menu_draw_begin() \
|
|
||||||
menu_draw_begin(1)
|
|
||||||
#define clear_screen() \
|
|
||||||
memset(SCREEN_BUFFER, 0, SCREEN_WIDTH*SCREEN_HEIGHT*2)
|
|
||||||
#define darken_screen() \
|
|
||||||
menu_darken_bg(menu_screen, menu_screen, SCREEN_WIDTH*SCREEN_HEIGHT, 0)
|
|
||||||
|
|
||||||
// ------------------------------------
|
|
||||||
|
|
||||||
#elif defined(PSP)
|
|
||||||
|
|
||||||
#include "../psp/psp.h"
|
|
||||||
|
|
||||||
#define PBTN_NORTH PBTN_TRIANGLE
|
|
||||||
#define PBTN_SOUTH PBTN_X
|
|
||||||
#define PBTN_WEST PBTN_SQUARE
|
|
||||||
#define PBTN_EAST PBTN_CIRCLE
|
|
||||||
|
|
||||||
void menu_draw_begin(void);
|
|
||||||
void menu_darken_bg(void *dst, const void *src, int pixels, int darker);
|
|
||||||
void menu_draw_end(void);
|
|
||||||
|
|
||||||
#define SCREEN_WIDTH 512
|
|
||||||
#define SCREEN_HEIGHT 272
|
|
||||||
#define SCREEN_BUFFER psp_screen
|
|
||||||
|
|
||||||
#define clear_screen() \
|
|
||||||
memset(SCREEN_BUFFER, 0, SCREEN_WIDTH*SCREEN_HEIGHT*2)
|
|
||||||
#define darken_screen() \
|
|
||||||
menu_darken_bg(psp_screen, psp_screen, SCREEN_WIDTH*SCREEN_HEIGHT, 0)
|
|
||||||
|
|
||||||
// ------------------------------------
|
|
||||||
|
|
||||||
#elif defined(PANDORA)
|
|
||||||
|
|
||||||
#define PBTN_UP (1 << 0)
|
#define PBTN_UP (1 << 0)
|
||||||
#define PBTN_DOWN (1 << 1)
|
#define PBTN_DOWN (1 << 1)
|
||||||
#define PBTN_LEFT (1 << 2)
|
#define PBTN_LEFT (1 << 2)
|
||||||
#define PBTN_RIGHT (1 << 3)
|
#define PBTN_RIGHT (1 << 3)
|
||||||
|
|
||||||
#define PBTN_NORTH (1 << 4)
|
#define PBTN_MOK (1 << 4)
|
||||||
#define PBTN_SOUTH (1 << 5)
|
#define PBTN_MBACK (1 << 5)
|
||||||
#define PBTN_WEST (1 << 6)
|
#define PBTN_MA2 (1 << 6) /* menu action 2 */
|
||||||
#define PBTN_EAST (1 << 7)
|
#define PBTN_MA3 (1 << 7)
|
||||||
|
|
||||||
#define PBTN_L (1 << 8)
|
#define PBTN_L (1 << 8)
|
||||||
#define PBTN_R (1 << 9)
|
#define PBTN_R (1 << 9)
|
||||||
|
|
||||||
/* menu nav */
|
|
||||||
#define PBTN_MOK PBTN_EAST
|
|
||||||
#define PBTN_MBACK PBTN_SOUTH
|
|
||||||
#define PBTN_MENU (1 << 10)
|
#define PBTN_MENU (1 << 10)
|
||||||
|
|
||||||
void gp2x_pd_clone_buffer2(void);
|
|
||||||
void menu_darken_bg(void *dst, int pixels, int darker);
|
|
||||||
void menu_flip(void);
|
|
||||||
|
|
||||||
extern void *gp2x_screen;
|
|
||||||
|
|
||||||
#define SCREEN_WIDTH 800
|
|
||||||
#define SCREEN_HEIGHT 480
|
|
||||||
#define SCREEN_BUFFER gp2x_screen
|
|
||||||
|
|
||||||
#define menu_draw_begin() \
|
|
||||||
gp2x_pd_clone_buffer2()
|
|
||||||
#define clear_screen() \
|
|
||||||
memset(gp2x_screen, 0, 800*480*2)
|
|
||||||
#define darken_screen() \
|
|
||||||
menu_darken_bg(gp2x_screen, 800*480, 0)
|
|
||||||
#define menu_draw_end() \
|
|
||||||
menu_flip()
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
78
common/emu.c
78
common/emu.c
|
@ -24,6 +24,13 @@
|
||||||
#include <zlib/zlib.h>
|
#include <zlib/zlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
void *g_screen_ptr;
|
||||||
|
|
||||||
|
#if !SCREEN_SIZE_FIXED
|
||||||
|
int g_screen_width = SCREEN_WIDTH;
|
||||||
|
int g_screen_height = SCREEN_HEIGHT;
|
||||||
|
#endif
|
||||||
|
|
||||||
char *PicoConfigFile = "config.cfg";
|
char *PicoConfigFile = "config.cfg";
|
||||||
currentConfig_t currentConfig, defaultConfig;
|
currentConfig_t currentConfig, defaultConfig;
|
||||||
char noticeMsg[64] = { 0, };
|
char noticeMsg[64] = { 0, };
|
||||||
|
@ -679,54 +686,36 @@ void emu_writelrom(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef UIQ3
|
/* always using built-in font */
|
||||||
void emu_textOut8(int x, int y, const char *text)
|
|
||||||
{
|
|
||||||
int i,l,len=strlen(text);
|
|
||||||
unsigned char *screen = (unsigned char *)SCREEN_BUFFER + x + y*SCREEN_WIDTH;
|
|
||||||
|
|
||||||
/* always using built-in font */
|
#define mk_text_out(name, type, val) \
|
||||||
for (i = 0; i < len; i++)
|
void name(int x, int y, const char *text) \
|
||||||
{
|
{ \
|
||||||
for (l=0;l<8;l++)
|
int i, l, len = strlen(text); \
|
||||||
{
|
type *screen = (type *)g_screen_ptr + x + y * g_screen_width; \
|
||||||
unsigned char fd = fontdata8x8[((text[i])*8)+l];
|
\
|
||||||
if (fd&0x80) screen[l*SCREEN_WIDTH+0]=0xf0;
|
for (i = 0; i < len; i++, screen += 8) \
|
||||||
if (fd&0x40) screen[l*SCREEN_WIDTH+1]=0xf0;
|
{ \
|
||||||
if (fd&0x20) screen[l*SCREEN_WIDTH+2]=0xf0;
|
for (l = 0; l < 8; l++) \
|
||||||
if (fd&0x10) screen[l*SCREEN_WIDTH+3]=0xf0;
|
{ \
|
||||||
if (fd&0x08) screen[l*SCREEN_WIDTH+4]=0xf0;
|
unsigned char fd = fontdata8x8[text[i] * 8 + l];\
|
||||||
if (fd&0x04) screen[l*SCREEN_WIDTH+5]=0xf0;
|
type *s = screen + l * g_screen_width; \
|
||||||
if (fd&0x02) screen[l*SCREEN_WIDTH+6]=0xf0;
|
if (fd&0x80) s[0] = val; \
|
||||||
if (fd&0x01) screen[l*SCREEN_WIDTH+7]=0xf0;
|
if (fd&0x40) s[1] = val; \
|
||||||
}
|
if (fd&0x20) s[2] = val; \
|
||||||
screen += 8;
|
if (fd&0x10) s[3] = val; \
|
||||||
}
|
if (fd&0x08) s[4] = val; \
|
||||||
|
if (fd&0x04) s[5] = val; \
|
||||||
|
if (fd&0x02) s[6] = val; \
|
||||||
|
if (fd&0x01) s[7] = val; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
void emu_textOut16(int x, int y, const char *text)
|
mk_text_out(emu_textOut8, unsigned char, 0xf0)
|
||||||
{
|
mk_text_out(emu_textOut16, unsigned short, 0xffff)
|
||||||
int i,l,len=strlen(text);
|
|
||||||
unsigned short *screen = (unsigned short *)SCREEN_BUFFER + x + y*SCREEN_WIDTH;
|
|
||||||
|
|
||||||
for (i = 0; i < len; i++)
|
#undef mk_text_out
|
||||||
{
|
|
||||||
for (l=0;l<8;l++)
|
|
||||||
{
|
|
||||||
unsigned char fd = fontdata8x8[((text[i])*8)+l];
|
|
||||||
if(fd&0x80) screen[l*SCREEN_WIDTH+0]=0xffff;
|
|
||||||
if(fd&0x40) screen[l*SCREEN_WIDTH+1]=0xffff;
|
|
||||||
if(fd&0x20) screen[l*SCREEN_WIDTH+2]=0xffff;
|
|
||||||
if(fd&0x10) screen[l*SCREEN_WIDTH+3]=0xffff;
|
|
||||||
if(fd&0x08) screen[l*SCREEN_WIDTH+4]=0xffff;
|
|
||||||
if(fd&0x04) screen[l*SCREEN_WIDTH+5]=0xffff;
|
|
||||||
if(fd&0x02) screen[l*SCREEN_WIDTH+6]=0xffff;
|
|
||||||
if(fd&0x01) screen[l*SCREEN_WIDTH+7]=0xffff;
|
|
||||||
}
|
|
||||||
screen += 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PSP
|
#ifdef PSP
|
||||||
#define MAX_COMBO_KEY 23
|
#define MAX_COMBO_KEY 23
|
||||||
|
@ -734,6 +723,7 @@ void emu_textOut16(int x, int y, const char *text)
|
||||||
#define MAX_COMBO_KEY 31
|
#define MAX_COMBO_KEY 31
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// FIXME
|
||||||
void emu_findKeyBindCombos(void)
|
void emu_findKeyBindCombos(void)
|
||||||
{
|
{
|
||||||
int act, u;
|
int act, u;
|
||||||
|
|
11
common/emu.h
11
common/emu.h
|
@ -9,6 +9,17 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern void *g_screen_ptr;
|
||||||
|
|
||||||
|
#if SCREEN_SIZE_FIXED
|
||||||
|
#define g_screen_width SCREEN_WIDTH
|
||||||
|
#define g_screen_height SCREEN_HEIGHT
|
||||||
|
#else
|
||||||
|
extern int g_screen_width;
|
||||||
|
extern int g_screen_height;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define EOPT_USE_SRAM (1<<0)
|
#define EOPT_USE_SRAM (1<<0)
|
||||||
#define EOPT_SHOW_FPS (1<<1)
|
#define EOPT_SHOW_FPS (1<<1)
|
||||||
#define EOPT_EN_SOUND (1<<2)
|
#define EOPT_EN_SOUND (1<<2)
|
||||||
|
|
144
common/menu.c
144
common/menu.c
|
@ -1,4 +1,4 @@
|
||||||
// (c) Copyright 2006,2007 notaz, All rights reserved.
|
// (c) Copyright 2006-2009 notaz, All rights reserved.
|
||||||
// Free for non-commercial use.
|
// Free for non-commercial use.
|
||||||
|
|
||||||
// For commercial use, separate licencing terms must be obtained.
|
// For commercial use, separate licencing terms must be obtained.
|
||||||
|
@ -38,7 +38,7 @@ static int menu_sel_color = -1; // disabled
|
||||||
static void text_out16_(int x, int y, const char *text, int color)
|
static void text_out16_(int x, int y, const char *text, int color)
|
||||||
{
|
{
|
||||||
int i, l, u, tr, tg, tb, len;
|
int i, l, u, tr, tg, tb, len;
|
||||||
unsigned short *dest = (unsigned short *)SCREEN_BUFFER + x + y*SCREEN_WIDTH;
|
unsigned short *dest = (unsigned short *)g_screen_ptr + x + y * g_screen_width;
|
||||||
tr = (color & 0xf800) >> 8;
|
tr = (color & 0xf800) >> 8;
|
||||||
tg = (color & 0x07e0) >> 3;
|
tg = (color & 0x07e0) >> 3;
|
||||||
tb = (color & 0x001f) << 3;
|
tb = (color & 0x001f) << 3;
|
||||||
|
@ -61,7 +61,7 @@ static void text_out16_(int x, int y, const char *text, int color)
|
||||||
{
|
{
|
||||||
unsigned char *src = menu_font_data + (unsigned int)text[i]*4*10;
|
unsigned char *src = menu_font_data + (unsigned int)text[i]*4*10;
|
||||||
unsigned short *dst = dest;
|
unsigned short *dst = dest;
|
||||||
for (l = 0; l < 10; l++, dst += SCREEN_WIDTH-8)
|
for (l = 0; l < 10; l++, dst += g_screen_width - 8)
|
||||||
{
|
{
|
||||||
for (u = 8/2; u > 0; u--, src++)
|
for (u = 8/2; u > 0; u--, src++)
|
||||||
{
|
{
|
||||||
|
@ -92,7 +92,7 @@ void text_out16(int x, int y, const char *texto, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
int maxw = (SCREEN_WIDTH - x) / 8;
|
int maxw = (g_screen_width - x) / 8;
|
||||||
|
|
||||||
if (maxw < 0)
|
if (maxw < 0)
|
||||||
return;
|
return;
|
||||||
|
@ -123,7 +123,7 @@ static void smalltext_out16_(int x, int y, const char *texto, int color)
|
||||||
if (!c) break;
|
if (!c) break;
|
||||||
|
|
||||||
src = fontdata6x8[c];
|
src = fontdata6x8[c];
|
||||||
dst = (unsigned short *)SCREEN_BUFFER + x + y*SCREEN_WIDTH;
|
dst = (unsigned short *)g_screen_ptr + x + y * g_screen_width;
|
||||||
|
|
||||||
while (h--)
|
while (h--)
|
||||||
{
|
{
|
||||||
|
@ -136,15 +136,15 @@ static void smalltext_out16_(int x, int y, const char *texto, int color)
|
||||||
}
|
}
|
||||||
src++;
|
src++;
|
||||||
|
|
||||||
dst += SCREEN_WIDTH-6;
|
dst += g_screen_width - 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void smalltext_out16(int x, int y, const char *texto, int color)
|
void smalltext_out16(int x, int y, const char *texto, int color)
|
||||||
{
|
{
|
||||||
char buffer[SCREEN_WIDTH/6+1];
|
char buffer[128];
|
||||||
int maxw = (SCREEN_WIDTH - x) / 6;
|
int maxw = (g_screen_width - x) / 6;
|
||||||
|
|
||||||
if (maxw < 0)
|
if (maxw < 0)
|
||||||
return;
|
return;
|
||||||
|
@ -167,13 +167,13 @@ static void menu_draw_selection(int x, int y, int w)
|
||||||
if (menu_sel_color < 0) return; // no selection hilight
|
if (menu_sel_color < 0) return; // no selection hilight
|
||||||
|
|
||||||
if (y > 0) y--;
|
if (y > 0) y--;
|
||||||
dest = (unsigned short *)SCREEN_BUFFER + x + y*SCREEN_WIDTH + 14;
|
dest = (unsigned short *)g_screen_ptr + x + y * g_screen_width + 14;
|
||||||
for (h = 11; h > 0; h--)
|
for (h = 11; h > 0; h--)
|
||||||
{
|
{
|
||||||
dst = dest;
|
dst = dest;
|
||||||
for (i = w; i > 0; i--)
|
for (i = w; i > 0; i--)
|
||||||
*dst++ = menu_sel_color;
|
*dst++ = menu_sel_color;
|
||||||
dest += SCREEN_WIDTH;
|
dest += g_screen_width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,17 +334,17 @@ static void me_draw(const menu_entry *entries, int sel)
|
||||||
h = n * 10;
|
h = n * 10;
|
||||||
w += 16; /* selector */
|
w += 16; /* selector */
|
||||||
|
|
||||||
if (w > SCREEN_WIDTH) {
|
if (w > g_screen_width) {
|
||||||
lprintf("width %d > %d\n", w, SCREEN_WIDTH);
|
lprintf("width %d > %d\n", w, g_screen_width);
|
||||||
w = SCREEN_WIDTH;
|
w = g_screen_width;
|
||||||
}
|
}
|
||||||
if (h > SCREEN_HEIGHT) {
|
if (h > g_screen_height) {
|
||||||
lprintf("height %d > %d\n", w, SCREEN_HEIGHT);
|
lprintf("height %d > %d\n", w, g_screen_height);
|
||||||
h = SCREEN_HEIGHT;
|
h = g_screen_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
x = SCREEN_WIDTH / 2 - w / 2;
|
x = g_screen_width / 2 - w / 2;
|
||||||
y = SCREEN_HEIGHT / 2 - h / 2;
|
y = g_screen_height / 2 - h / 2;
|
||||||
|
|
||||||
/* draw */
|
/* draw */
|
||||||
plat_video_menu_begin();
|
plat_video_menu_begin();
|
||||||
|
@ -390,7 +390,7 @@ static void me_draw(const menu_entry *entries, int sel)
|
||||||
/* display message if we have one */
|
/* display message if we have one */
|
||||||
if (menuErrorMsg[0] != 0) {
|
if (menuErrorMsg[0] != 0) {
|
||||||
static int msg_redraws = 0;
|
static int msg_redraws = 0;
|
||||||
if (SCREEN_HEIGHT - h >= 2*10)
|
if (g_screen_height - h >= 2*10)
|
||||||
text_out16(5, 226, menuErrorMsg);
|
text_out16(5, 226, menuErrorMsg);
|
||||||
else
|
else
|
||||||
lprintf("menu msg doesn't fit!\n");
|
lprintf("menu msg doesn't fit!\n");
|
||||||
|
@ -510,14 +510,14 @@ static void draw_menu_credits(void)
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
x = SCREEN_WIDTH / 2 - w * 8 / 2;
|
x = g_screen_width / 2 - w * 8 / 2;
|
||||||
y = SCREEN_HEIGHT / 2 - h * 10 / 2;
|
y = g_screen_height / 2 - h * 10 / 2;
|
||||||
if (x < 0) x = 0;
|
if (x < 0) x = 0;
|
||||||
if (y < 0) y = 0;
|
if (y < 0) y = 0;
|
||||||
|
|
||||||
plat_video_menu_begin();
|
plat_video_menu_begin();
|
||||||
|
|
||||||
for (p = creds; *p != 0 && y <= SCREEN_HEIGHT - 10; y += 10) {
|
for (p = creds; *p != 0 && y <= g_screen_height - 10; y += 10) {
|
||||||
text_out16(x, y, p);
|
text_out16(x, y, p);
|
||||||
|
|
||||||
for (; *p != 0 && *p != '\n'; p++)
|
for (; *p != 0 && *p != '\n'; p++)
|
||||||
|
@ -535,30 +535,30 @@ static int cdload_called = 0;
|
||||||
|
|
||||||
static void load_progress_cb(int percent)
|
static void load_progress_cb(int percent)
|
||||||
{
|
{
|
||||||
int ln, len = percent * SCREEN_WIDTH / 100;
|
int ln, len = percent * g_screen_width / 100;
|
||||||
unsigned short *dst = (unsigned short *)SCREEN_BUFFER + SCREEN_WIDTH * 10 * 2;
|
unsigned short *dst = (unsigned short *)g_screen_ptr + g_screen_width * 10 * 2;
|
||||||
|
|
||||||
if (len > SCREEN_WIDTH)
|
if (len > g_screen_width)
|
||||||
len = SCREEN_WIDTH;
|
len = g_screen_width;
|
||||||
for (ln = 10 - 2; ln > 0; ln--, dst += SCREEN_WIDTH)
|
for (ln = 10 - 2; ln > 0; ln--, dst += g_screen_width)
|
||||||
memset(dst, 0xff, len * 2);
|
memset(dst, 0xff, len * 2);
|
||||||
plat_video_menu_end();
|
plat_video_menu_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cdload_progress_cb(int percent)
|
static void cdload_progress_cb(int percent)
|
||||||
{
|
{
|
||||||
int ln, len = percent * SCREEN_WIDTH / 100;
|
int ln, len = percent * g_screen_width / 100;
|
||||||
unsigned short *dst = (unsigned short *)SCREEN_BUFFER + SCREEN_WIDTH * 10 * 2;
|
unsigned short *dst = (unsigned short *)g_screen_ptr + g_screen_width * 10 * 2;
|
||||||
|
|
||||||
memset(dst, 0xff, SCREEN_WIDTH * (10 - 2) * 2);
|
memset(dst, 0xff, g_screen_width * (10 - 2) * 2);
|
||||||
|
|
||||||
smalltext_out16(1, 3 * 10, "Processing CD image / MP3s", 0xffff);
|
smalltext_out16(1, 3 * 10, "Processing CD image / MP3s", 0xffff);
|
||||||
smalltext_out16(1, 4 * 10, rom_fname_loaded, 0xffff);
|
smalltext_out16(1, 4 * 10, rom_fname_loaded, 0xffff);
|
||||||
dst += SCREEN_WIDTH * 30;
|
dst += g_screen_width * 30;
|
||||||
|
|
||||||
if (len > SCREEN_WIDTH)
|
if (len > g_screen_width)
|
||||||
len = SCREEN_WIDTH;
|
len = g_screen_width;
|
||||||
for (ln = (10 - 2); ln > 0; ln--, dst += SCREEN_WIDTH)
|
for (ln = (10 - 2); ln > 0; ln--, dst += g_screen_width)
|
||||||
memset(dst, 0xff, len * 2);
|
memset(dst, 0xff, len * 2);
|
||||||
|
|
||||||
plat_video_menu_end();
|
plat_video_menu_end();
|
||||||
|
@ -618,7 +618,7 @@ static void draw_dirlist(char *curdir, struct dirent **namelist, int n, int sel)
|
||||||
{
|
{
|
||||||
int max_cnt, start, i, pos;
|
int max_cnt, start, i, pos;
|
||||||
|
|
||||||
max_cnt = SCREEN_HEIGHT / 10;
|
max_cnt = g_screen_height / 10;
|
||||||
start = max_cnt / 2 - sel;
|
start = max_cnt / 2 - sel;
|
||||||
n--; // exclude current dir (".")
|
n--; // exclude current dir (".")
|
||||||
|
|
||||||
|
@ -627,7 +627,7 @@ static void draw_dirlist(char *curdir, struct dirent **namelist, int n, int sel)
|
||||||
// if (!rom_loaded)
|
// if (!rom_loaded)
|
||||||
// menu_darken_bg(gp2x_screen, 320*240, 0);
|
// menu_darken_bg(gp2x_screen, 320*240, 0);
|
||||||
|
|
||||||
menu_darken_bg((short *)SCREEN_BUFFER + SCREEN_WIDTH * max_cnt/2 * 10, SCREEN_WIDTH * 8, 0);
|
menu_darken_bg((short *)g_screen_ptr + g_screen_width * max_cnt/2 * 10, g_screen_width * 8, 0);
|
||||||
|
|
||||||
if (start - 2 >= 0)
|
if (start - 2 >= 0)
|
||||||
smalltext_out16(14, (start - 2)*10, curdir, 0xffff);
|
smalltext_out16(14, (start - 2)*10, curdir, 0xffff);
|
||||||
|
@ -723,14 +723,14 @@ rescan:
|
||||||
{
|
{
|
||||||
draw_dirlist(curr_path, namelist, n, sel);
|
draw_dirlist(curr_path, namelist, n, sel);
|
||||||
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|
|
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|
|
||||||
PBTN_L|PBTN_R|PBTN_WEST|PBTN_MOK|PBTN_MBACK|PBTN_MENU, 33); // TODO L R
|
PBTN_L|PBTN_R|PBTN_MA2|PBTN_MOK|PBTN_MBACK|PBTN_MENU, 33);
|
||||||
if (inp & PBTN_UP ) { sel--; if (sel < 0) sel = n-2; }
|
if (inp & PBTN_UP ) { sel--; if (sel < 0) sel = n-2; }
|
||||||
if (inp & PBTN_DOWN) { sel++; if (sel > n-2) sel = 0; }
|
if (inp & PBTN_DOWN) { sel++; if (sel > n-2) sel = 0; }
|
||||||
if (inp & PBTN_LEFT) { sel-=10; if (sel < 0) sel = 0; }
|
if (inp & PBTN_LEFT) { sel-=10; if (sel < 0) sel = 0; }
|
||||||
if (inp & PBTN_L) { sel-=24; if (sel < 0) sel = 0; }
|
if (inp & PBTN_L) { sel-=24; if (sel < 0) sel = 0; }
|
||||||
if (inp & PBTN_RIGHT) { sel+=10; if (sel > n-2) sel = n-2; }
|
if (inp & PBTN_RIGHT) { sel+=10; if (sel > n-2) sel = n-2; }
|
||||||
if (inp & PBTN_R) { sel+=24; if (sel > n-2) sel = n-2; }
|
if (inp & PBTN_R) { sel+=24; if (sel > n-2) sel = n-2; }
|
||||||
if ((inp & PBTN_MOK) || (inp & (PBTN_MENU|PBTN_WEST)) == (PBTN_MENU|PBTN_WEST)) // enter dir/select || delete
|
if ((inp & PBTN_MOK) || (inp & (PBTN_MENU|PBTN_MA2)) == (PBTN_MENU|PBTN_MA2))
|
||||||
{
|
{
|
||||||
again:
|
again:
|
||||||
if (namelist[sel+1]->d_type == DT_REG)
|
if (namelist[sel+1]->d_type == DT_REG)
|
||||||
|
@ -810,7 +810,7 @@ static void draw_patchlist(int sel)
|
||||||
{
|
{
|
||||||
int max_cnt, start, i, pos, active;
|
int max_cnt, start, i, pos, active;
|
||||||
|
|
||||||
max_cnt = SCREEN_HEIGHT / 10;
|
max_cnt = g_screen_height / 10;
|
||||||
start = max_cnt / 2 - sel;
|
start = max_cnt / 2 - sel;
|
||||||
|
|
||||||
plat_video_menu_begin();
|
plat_video_menu_begin();
|
||||||
|
@ -932,9 +932,9 @@ static void draw_savestate_menu(int menu_sel, int is_loading)
|
||||||
|
|
||||||
w = 13 * 8 + 16;
|
w = 13 * 8 + 16;
|
||||||
h = (1+2+10+1) * 10;
|
h = (1+2+10+1) * 10;
|
||||||
x = SCREEN_WIDTH / 2 - w / 2;
|
x = g_screen_width / 2 - w / 2;
|
||||||
if (x < 0) x = 0;
|
if (x < 0) x = 0;
|
||||||
y = SCREEN_HEIGHT / 2 - h / 2;
|
y = g_screen_height / 2 - h / 2;
|
||||||
if (y < 0) y = 0;
|
if (y < 0) y = 0;
|
||||||
|
|
||||||
plat_video_menu_begin();
|
plat_video_menu_begin();
|
||||||
|
@ -945,7 +945,6 @@ static void draw_savestate_menu(int menu_sel, int is_loading)
|
||||||
menu_draw_selection(x - 16, y + menu_sel * 10, 13 * 8 + 4);
|
menu_draw_selection(x - 16, y + menu_sel * 10, 13 * 8 + 4);
|
||||||
|
|
||||||
/* draw all 10 slots */
|
/* draw all 10 slots */
|
||||||
y += 10;
|
|
||||||
for (i = 0; i < 10; i++, y += 10)
|
for (i = 0; i < 10; i++, y += 10)
|
||||||
{
|
{
|
||||||
text_out16(x, y, "SLOT %i (%s)", i, (state_slot_flags & (1 << i)) ? "USED" : "free");
|
text_out16(x, y, "SLOT %i (%s)", i, (state_slot_flags & (1 << i)) ? "USED" : "free");
|
||||||
|
@ -1060,7 +1059,7 @@ static void draw_key_config(const me_bind_action *opts, int opt_cnt, int player_
|
||||||
int x, y = 30, w, i;
|
int x, y = 30, w, i;
|
||||||
const char *dev_name;
|
const char *dev_name;
|
||||||
|
|
||||||
x = SCREEN_WIDTH / 2 - 32*8 / 2;
|
x = g_screen_width / 2 - 32*8 / 2;
|
||||||
if (x < 0) x = 0;
|
if (x < 0) x = 0;
|
||||||
|
|
||||||
plat_video_menu_begin();
|
plat_video_menu_begin();
|
||||||
|
@ -1079,20 +1078,20 @@ static void draw_key_config(const me_bind_action *opts, int opt_cnt, int player_
|
||||||
w = strlen(dev_name) * 8;
|
w = strlen(dev_name) * 8;
|
||||||
if (w < 30 * 8)
|
if (w < 30 * 8)
|
||||||
w = 30 * 8;
|
w = 30 * 8;
|
||||||
if (w > SCREEN_WIDTH)
|
if (w > g_screen_width)
|
||||||
w = SCREEN_WIDTH;
|
w = g_screen_width;
|
||||||
|
|
||||||
x = SCREEN_WIDTH / 2 - w / 2;
|
x = g_screen_width / 2 - w / 2;
|
||||||
|
|
||||||
if (dev_count > 1) {
|
if (dev_count > 1) {
|
||||||
text_out16(x, SCREEN_HEIGHT - 4*10, "Viewing binds for:");
|
text_out16(x, g_screen_height - 4*10, "Viewing binds for:");
|
||||||
text_out16(x, SCREEN_HEIGHT - 3*10, dev_name);
|
text_out16(x, g_screen_height - 3*10, dev_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_bind)
|
if (is_bind)
|
||||||
text_out16(x, SCREEN_HEIGHT - 2*10, "Press a button to bind/unbind");
|
text_out16(x, g_screen_height - 2*10, "Press a button to bind/unbind");
|
||||||
else if (dev_count > 1)
|
else if (dev_count > 1)
|
||||||
text_out16(x, SCREEN_HEIGHT - 2*10, "Press left/right for other devs");
|
text_out16(x, g_screen_height - 2*10, "Press left/right for other devs");
|
||||||
|
|
||||||
plat_video_menu_end();
|
plat_video_menu_end();
|
||||||
}
|
}
|
||||||
|
@ -1653,7 +1652,8 @@ static void mplayer_loop(void)
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
PDebugZ80Frame();
|
PDebugZ80Frame();
|
||||||
if (in_menu_wait_any(0) & PBTN_NORTH) break;
|
if (in_menu_wait_any(0) & PBTN_MA3)
|
||||||
|
break;
|
||||||
emu_waitSound();
|
emu_waitSound();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1674,7 +1674,7 @@ static void draw_text_debug(const char *str, int skip, int from)
|
||||||
}
|
}
|
||||||
|
|
||||||
str = p;
|
str = p;
|
||||||
for (line = from; line < SCREEN_HEIGHT/10; line++)
|
for (line = from; line < g_screen_height / 10; line++)
|
||||||
{
|
{
|
||||||
while (*p && *p != '\n') p++;
|
while (*p && *p != '\n') p++;
|
||||||
smalltext_out16(1, line*10, str, 0xffff);
|
smalltext_out16(1, line*10, str, 0xffff);
|
||||||
|
@ -1691,9 +1691,9 @@ static void draw_frame_debug(void)
|
||||||
if (PicoDrawMask & PDRAW_SPRITES_LOW_ON) memcpy(layer_str + 12, "spr_lo", 6);
|
if (PicoDrawMask & PDRAW_SPRITES_LOW_ON) memcpy(layer_str + 12, "spr_lo", 6);
|
||||||
if (PicoDrawMask & PDRAW_SPRITES_HI_ON) memcpy(layer_str + 19, "spr_hi", 6);
|
if (PicoDrawMask & PDRAW_SPRITES_HI_ON) memcpy(layer_str + 19, "spr_hi", 6);
|
||||||
|
|
||||||
clear_screen();
|
memset(g_screen_ptr, 0, g_screen_width * g_screen_height * 2);
|
||||||
emu_forcedFrame(0);
|
emu_forcedFrame(0);
|
||||||
smalltext_out16(4, SCREEN_HEIGHT-8, layer_str, 0xffff);
|
smalltext_out16(4, g_screen_height - 8, layer_str, 0xffff);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void debug_menu_loop(void)
|
static void debug_menu_loop(void)
|
||||||
|
@ -1711,26 +1711,26 @@ static void debug_menu_loop(void)
|
||||||
emu_platformDebugCat(tmp);
|
emu_platformDebugCat(tmp);
|
||||||
draw_text_debug(tmp, 0, 0);
|
draw_text_debug(tmp, 0, 0);
|
||||||
if (dumped) {
|
if (dumped) {
|
||||||
smalltext_out16(SCREEN_WIDTH-6*10, SCREEN_HEIGHT-8, "dumped", 0xffff);
|
smalltext_out16(g_screen_width - 6*10, g_screen_height - 8, "dumped", 0xffff);
|
||||||
dumped = 0;
|
dumped = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1: draw_frame_debug(); break;
|
case 1: draw_frame_debug(); break;
|
||||||
case 2: clear_screen();
|
case 2: memset(g_screen_ptr, 0, g_screen_width * g_screen_height * 2);
|
||||||
emu_forcedFrame(0);
|
emu_forcedFrame(0);
|
||||||
darken_screen();
|
menu_darken_bg(g_screen_ptr, g_screen_width * g_screen_height, 0);
|
||||||
PDebugShowSpriteStats((unsigned short *)SCREEN_BUFFER + (SCREEN_HEIGHT/2 - 240/2)*SCREEN_WIDTH +
|
PDebugShowSpriteStats((unsigned short *)g_screen_ptr + (g_screen_height/2 - 240/2)*g_screen_width +
|
||||||
SCREEN_WIDTH/2 - 320/2, SCREEN_WIDTH); break;
|
g_screen_width/2 - 320/2, g_screen_width); break;
|
||||||
case 3: clear_screen();
|
case 3: memset(g_screen_ptr, 0, g_screen_width * g_screen_height * 2);
|
||||||
PDebugShowPalette(SCREEN_BUFFER, SCREEN_WIDTH);
|
PDebugShowPalette(g_screen_ptr, g_screen_width);
|
||||||
PDebugShowSprite((unsigned short *)SCREEN_BUFFER + SCREEN_WIDTH*120+SCREEN_WIDTH/2+16,
|
PDebugShowSprite((unsigned short *)g_screen_ptr + g_screen_width*120 + g_screen_width/2 + 16,
|
||||||
SCREEN_WIDTH, spr_offs);
|
g_screen_width, spr_offs);
|
||||||
draw_text_debug(PDebugSpriteList(), spr_offs, 6);
|
draw_text_debug(PDebugSpriteList(), spr_offs, 6);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
plat_video_menu_end();
|
plat_video_menu_end();
|
||||||
|
|
||||||
inp = in_menu_wait(PBTN_EAST|PBTN_MBACK|PBTN_WEST|PBTN_NORTH|PBTN_L|PBTN_R |
|
inp = in_menu_wait(PBTN_MOK|PBTN_MBACK|PBTN_MA2|PBTN_MA3|PBTN_L|PBTN_R |
|
||||||
PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT, 70);
|
PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT, 70);
|
||||||
if (inp & PBTN_MBACK) return;
|
if (inp & PBTN_MBACK) return;
|
||||||
if (inp & PBTN_L) { mode--; if (mode < 0) mode = 3; }
|
if (inp & PBTN_L) { mode--; if (mode < 0) mode = 3; }
|
||||||
|
@ -1738,15 +1738,17 @@ static void debug_menu_loop(void)
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if (inp & PBTN_EAST) SekStepM68k();
|
if (inp & PBTN_MOK)
|
||||||
if (inp & PBTN_NORTH) {
|
SekStepM68k();
|
||||||
while (inp & PBTN_NORTH) inp = in_menu_wait_any(-1);
|
if (inp & PBTN_MA3) {
|
||||||
|
while (inp & PBTN_MA3)
|
||||||
|
inp = in_menu_wait_any(-1);
|
||||||
mplayer_loop();
|
mplayer_loop();
|
||||||
}
|
}
|
||||||
if ((inp & (PBTN_WEST|PBTN_LEFT)) == (PBTN_WEST|PBTN_LEFT)) {
|
if ((inp & (PBTN_MA2|PBTN_LEFT)) == (PBTN_MA2|PBTN_LEFT)) {
|
||||||
mkdir("dumps", 0777);
|
mkdir("dumps", 0777);
|
||||||
PDebugDumpMem();
|
PDebugDumpMem();
|
||||||
while (inp & PBTN_WEST) inp = in_menu_wait_any(-1);
|
while (inp & PBTN_MA2) inp = in_menu_wait_any(-1);
|
||||||
dumped = 1;
|
dumped = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1755,12 +1757,12 @@ static void debug_menu_loop(void)
|
||||||
if (inp & PBTN_RIGHT) PicoDrawMask ^= PDRAW_LAYERA_ON;
|
if (inp & PBTN_RIGHT) PicoDrawMask ^= PDRAW_LAYERA_ON;
|
||||||
if (inp & PBTN_DOWN) PicoDrawMask ^= PDRAW_SPRITES_LOW_ON;
|
if (inp & PBTN_DOWN) PicoDrawMask ^= PDRAW_SPRITES_LOW_ON;
|
||||||
if (inp & PBTN_UP) PicoDrawMask ^= PDRAW_SPRITES_HI_ON;
|
if (inp & PBTN_UP) PicoDrawMask ^= PDRAW_SPRITES_HI_ON;
|
||||||
if (inp & PBTN_EAST) {
|
if (inp & PBTN_MOK) {
|
||||||
PsndOut = NULL; // just in case
|
PsndOut = NULL; // just in case
|
||||||
PicoSkipFrame = 1;
|
PicoSkipFrame = 1;
|
||||||
PicoFrame();
|
PicoFrame();
|
||||||
PicoSkipFrame = 0;
|
PicoSkipFrame = 0;
|
||||||
while (inp & PBTN_EAST) inp = in_menu_wait_any(-1);
|
while (inp & PBTN_MOK) inp = in_menu_wait_any(-1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
|
|
@ -313,7 +313,7 @@ void YM2612Init_940(int baseclock, int rate)
|
||||||
fp = fopen(binpath, "rb");
|
fp = fopen(binpath, "rb");
|
||||||
if(!fp)
|
if(!fp)
|
||||||
{
|
{
|
||||||
memset(gp2x_screen, 0, 320*240*2);
|
memset(g_screen_ptr, 0, 320*240*2);
|
||||||
text_out16(10, 100, "failed to open required file:");
|
text_out16(10, 100, "failed to open required file:");
|
||||||
text_out16(10, 110, CODE940_FILE);
|
text_out16(10, 110, CODE940_FILE);
|
||||||
gp2x_video_flip2();
|
gp2x_video_flip2();
|
||||||
|
|
80
gp2x/emu.c
80
gp2x/emu.c
|
@ -17,7 +17,6 @@
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "gp2x.h"
|
#include "gp2x.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "../linux/usbjoy.h"
|
|
||||||
#include "../common/arm_utils.h"
|
#include "../common/arm_utils.h"
|
||||||
#include "../common/fonts.h"
|
#include "../common/fonts.h"
|
||||||
#include "../common/emu.h"
|
#include "../common/emu.h"
|
||||||
|
@ -167,23 +166,24 @@ void emu_prepareDefaultConfig(void)
|
||||||
void osd_text(int x, int y, const char *text)
|
void osd_text(int x, int y, const char *text)
|
||||||
{
|
{
|
||||||
int len = strlen(text)*8;
|
int len = strlen(text)*8;
|
||||||
|
int *p, i, h, offs;
|
||||||
|
|
||||||
if ((PicoOpt&0x10)||!(currentConfig.EmuOpt&0x80)) {
|
if ((PicoOpt&0x10)||!(currentConfig.EmuOpt&0x80)) {
|
||||||
int *p, i, h;
|
|
||||||
x &= ~3; // align x
|
|
||||||
len = (len+3) >> 2;
|
len = (len+3) >> 2;
|
||||||
for (h = 0; h < 8; h++) {
|
for (h = 0; h < 8; h++) {
|
||||||
p = (int *) ((unsigned char *) gp2x_screen+x+320*(y+h));
|
offs = (x + g_screen_width * (y+h)) & ~3;
|
||||||
for (i = len; i; i--, p++) *p = 0xe0e0e0e0;
|
p = (int *) ((char *)g_screen_ptr + offs);
|
||||||
|
for (i = len; i; i--, p++)
|
||||||
|
*p = 0xe0e0e0e0;
|
||||||
}
|
}
|
||||||
emu_textOut8(x, y, text);
|
emu_textOut8(x, y, text);
|
||||||
} else {
|
} else {
|
||||||
int *p, i, h;
|
|
||||||
x &= ~1; // align x
|
|
||||||
len = (len+1) >> 1;
|
len = (len+1) >> 1;
|
||||||
for (h = 0; h < 8; h++) {
|
for (h = 0; h < 8; h++) {
|
||||||
p = (int *) ((unsigned short *) gp2x_screen+x+320*(y+h));
|
offs = (x + g_screen_width * (y+h)) & ~1;
|
||||||
for (i = len; i; i--, p++) *p = (*p>>2)&0x39e7;
|
p = (int *) ((short *)g_screen_ptr + offs);
|
||||||
|
for (i = len; i; i--, p++)
|
||||||
|
*p = (*p >> 2) & 0x39e7;
|
||||||
}
|
}
|
||||||
emu_textOut16(x, y, text);
|
emu_textOut16(x, y, text);
|
||||||
}
|
}
|
||||||
|
@ -200,15 +200,15 @@ static void draw_cd_leds(void)
|
||||||
// 8-bit modes
|
// 8-bit modes
|
||||||
unsigned int col_g = (old_reg & 2) ? 0xc0c0c0c0 : 0xe0e0e0e0;
|
unsigned int col_g = (old_reg & 2) ? 0xc0c0c0c0 : 0xe0e0e0e0;
|
||||||
unsigned int col_r = (old_reg & 1) ? 0xd0d0d0d0 : 0xe0e0e0e0;
|
unsigned int col_r = (old_reg & 1) ? 0xd0d0d0d0 : 0xe0e0e0e0;
|
||||||
*(unsigned int *)((char *)gp2x_screen + 320*2+ 4) =
|
*(unsigned int *)((char *)g_screen_ptr + 320*2+ 4) =
|
||||||
*(unsigned int *)((char *)gp2x_screen + 320*3+ 4) =
|
*(unsigned int *)((char *)g_screen_ptr + 320*3+ 4) =
|
||||||
*(unsigned int *)((char *)gp2x_screen + 320*4+ 4) = col_g;
|
*(unsigned int *)((char *)g_screen_ptr + 320*4+ 4) = col_g;
|
||||||
*(unsigned int *)((char *)gp2x_screen + 320*2+12) =
|
*(unsigned int *)((char *)g_screen_ptr + 320*2+12) =
|
||||||
*(unsigned int *)((char *)gp2x_screen + 320*3+12) =
|
*(unsigned int *)((char *)g_screen_ptr + 320*3+12) =
|
||||||
*(unsigned int *)((char *)gp2x_screen + 320*4+12) = col_r;
|
*(unsigned int *)((char *)g_screen_ptr + 320*4+12) = col_r;
|
||||||
} else {
|
} else {
|
||||||
// 16-bit modes
|
// 16-bit modes
|
||||||
unsigned int *p = (unsigned int *)((short *)gp2x_screen + 320*2+4);
|
unsigned int *p = (unsigned int *)((short *)g_screen_ptr + 320*2+4);
|
||||||
unsigned int col_g = (old_reg & 2) ? 0x06000600 : 0;
|
unsigned int col_g = (old_reg & 2) ? 0x06000600 : 0;
|
||||||
unsigned int col_r = (old_reg & 1) ? 0xc000c000 : 0;
|
unsigned int col_r = (old_reg & 1) ? 0xc000c000 : 0;
|
||||||
*p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r; p += 320/2 - 12/2;
|
*p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r; p += 320/2 - 12/2;
|
||||||
|
@ -219,7 +219,7 @@ static void draw_cd_leds(void)
|
||||||
|
|
||||||
static void draw_pico_ptr(void)
|
static void draw_pico_ptr(void)
|
||||||
{
|
{
|
||||||
unsigned short *p = (unsigned short *)gp2x_screen;
|
unsigned short *p = (unsigned short *)g_screen_ptr;
|
||||||
|
|
||||||
// only if pen enabled and for 16bit modes
|
// only if pen enabled and for 16bit modes
|
||||||
if (pico_inp_mode == 0 || (PicoOpt&0x10) || !(currentConfig.EmuOpt&0x80)) return;
|
if (pico_inp_mode == 0 || (PicoOpt&0x10) || !(currentConfig.EmuOpt&0x80)) return;
|
||||||
|
@ -239,7 +239,7 @@ static void draw_pico_ptr(void)
|
||||||
static int EmuScanBegin16(unsigned int num)
|
static int EmuScanBegin16(unsigned int num)
|
||||||
{
|
{
|
||||||
if (!(Pico.video.reg[1]&8)) num += 8;
|
if (!(Pico.video.reg[1]&8)) num += 8;
|
||||||
DrawLineDest = (unsigned short *) gp2x_screen + 320 * num;
|
DrawLineDest = (unsigned short *) g_screen_ptr + g_screen_width * num;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -247,7 +247,7 @@ static int EmuScanBegin16(unsigned int num)
|
||||||
static int EmuScanBegin8(unsigned int num)
|
static int EmuScanBegin8(unsigned int num)
|
||||||
{
|
{
|
||||||
if (!(Pico.video.reg[1]&8)) num += 8;
|
if (!(Pico.video.reg[1]&8)) num += 8;
|
||||||
DrawLineDest = (unsigned char *) gp2x_screen + 320 * num;
|
DrawLineDest = (unsigned char *) g_screen_ptr + g_screen_width * num;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -272,7 +272,7 @@ static void blit(const char *fps, const char *notice)
|
||||||
if (PicoRead16Hook == PicoSVPRead16)
|
if (PicoRead16Hook == PicoSVPRead16)
|
||||||
memset32((int *)(PicoDraw2FB+328*8+328*223), 0xe0e0e0e0, 328);
|
memset32((int *)(PicoDraw2FB+328*8+328*223), 0xe0e0e0e0, 328);
|
||||||
// do actual copy
|
// do actual copy
|
||||||
vidCpyM2((unsigned char *)gp2x_screen+320*8, PicoDraw2FB+328*8);
|
vidCpyM2((unsigned char *)g_screen_ptr+320*8, PicoDraw2FB+328*8);
|
||||||
}
|
}
|
||||||
else if (!(emu_opt&0x80))
|
else if (!(emu_opt&0x80))
|
||||||
{
|
{
|
||||||
|
@ -326,12 +326,12 @@ static void blit(const char *fps, const char *notice)
|
||||||
if (!(PicoOpt&0x10)) {
|
if (!(PicoOpt&0x10)) {
|
||||||
if (!(Pico.video.reg[1]&8)) {
|
if (!(Pico.video.reg[1]&8)) {
|
||||||
if (currentConfig.EmuOpt&0x80) {
|
if (currentConfig.EmuOpt&0x80) {
|
||||||
DrawLineDest = (unsigned short *) gp2x_screen + 320*8;
|
DrawLineDest = (unsigned short *) g_screen_ptr + 320*8;
|
||||||
} else {
|
} else {
|
||||||
DrawLineDest = (unsigned char *) gp2x_screen + 320*8;
|
DrawLineDest = (unsigned char *) g_screen_ptr + 320*8;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DrawLineDest = gp2x_screen;
|
DrawLineDest = g_screen_ptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -389,12 +389,12 @@ static void emu_msg_cb(const char *msg)
|
||||||
// 8-bit renderers
|
// 8-bit renderers
|
||||||
gp2x_memset_all_buffers(320*232, 0xe0, 320*8);
|
gp2x_memset_all_buffers(320*232, 0xe0, 320*8);
|
||||||
osd_text(4, 232, msg);
|
osd_text(4, 232, msg);
|
||||||
gp2x_memcpy_all_buffers((char *)gp2x_screen+320*232, 320*232, 320*8);
|
gp2x_memcpy_all_buffers((char *)g_screen_ptr+320*232, 320*232, 320*8);
|
||||||
} else {
|
} else {
|
||||||
// 16bit accurate renderer
|
// 16bit accurate renderer
|
||||||
gp2x_memset_all_buffers(320*232*2, 0, 320*8*2);
|
gp2x_memset_all_buffers(320*232*2, 0, 320*8*2);
|
||||||
osd_text(4, 232, msg);
|
osd_text(4, 232, msg);
|
||||||
gp2x_memcpy_all_buffers((char *)gp2x_screen+320*232*2, 320*232*2, 320*8*2);
|
gp2x_memcpy_all_buffers((char *)g_screen_ptr+320*232*2, 320*232*2, 320*8*2);
|
||||||
}
|
}
|
||||||
gettimeofday(¬iceMsgTime, 0);
|
gettimeofday(¬iceMsgTime, 0);
|
||||||
noticeMsgTime.tv_sec -= 2;
|
noticeMsgTime.tv_sec -= 2;
|
||||||
|
@ -521,7 +521,7 @@ static void RunEvents(unsigned int which)
|
||||||
if (do_it) {
|
if (do_it) {
|
||||||
osd_text(4, 232, (which & 0x1000) ? "LOADING GAME" : "SAVING GAME");
|
osd_text(4, 232, (which & 0x1000) ? "LOADING GAME" : "SAVING GAME");
|
||||||
PicoStateProgressCB = emu_state_cb;
|
PicoStateProgressCB = emu_state_cb;
|
||||||
gp2x_memcpy_all_buffers(gp2x_screen, 0, 320*240*2);
|
gp2x_memcpy_all_buffers(g_screen_ptr, 0, 320*240*2);
|
||||||
emu_SaveLoadGame((which & 0x1000) >> 12, 0);
|
emu_SaveLoadGame((which & 0x1000) >> 12, 0);
|
||||||
PicoStateProgressCB = NULL;
|
PicoStateProgressCB = NULL;
|
||||||
}
|
}
|
||||||
|
@ -567,14 +567,10 @@ static void updateKeys(void)
|
||||||
{
|
{
|
||||||
unsigned int keys, keys2, allActions[2] = { 0, 0 }, events;
|
unsigned int keys, keys2, allActions[2] = { 0, 0 }, events;
|
||||||
static unsigned int prevEvents = 0;
|
static unsigned int prevEvents = 0;
|
||||||
int joy, i;
|
|
||||||
|
|
||||||
keys = gp2x_joystick_read(0);
|
keys = gp2x_joystick_read(0);
|
||||||
if (keys & GP2X_SELECT) {
|
if (keys & GP2X_SELECT)
|
||||||
engineState = select_exits ? PGS_Quit : PGS_Menu;
|
engineState = select_exits ? PGS_Quit : PGS_Menu;
|
||||||
// wait until select is released, so menu would not resume game
|
|
||||||
while (gp2x_joystick_read(1) & GP2X_SELECT) usleep(50*1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
keys &= CONFIGURABLE_KEYS;
|
keys &= CONFIGURABLE_KEYS;
|
||||||
keys2 = keys;
|
keys2 = keys;
|
||||||
|
@ -612,22 +608,6 @@ static void updateKeys(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// add joy inputs
|
|
||||||
if (num_of_joys > 0)
|
|
||||||
{
|
|
||||||
usbjoy_update();
|
|
||||||
for (joy = 0; joy < num_of_joys; joy++) {
|
|
||||||
int btns = usbjoy_check2(joy);
|
|
||||||
for (i = 0; i < 32; i++) {
|
|
||||||
if (btns & (1 << i)) {
|
|
||||||
int acts = currentConfig.JoyBinds[joy][i];
|
|
||||||
int pl = (acts >> 16) & 1;
|
|
||||||
allActions[pl] |= acts;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PicoPad[0] = allActions[0] & 0xfff;
|
PicoPad[0] = allActions[0] & 0xfff;
|
||||||
PicoPad[1] = allActions[1] & 0xfff;
|
PicoPad[1] = allActions[1] & 0xfff;
|
||||||
|
|
||||||
|
@ -736,7 +716,7 @@ void emu_forcedFrame(int opts)
|
||||||
clearArea(1);
|
clearArea(1);
|
||||||
} else vidCpyM2 = vidCpyM2_40col;
|
} else vidCpyM2 = vidCpyM2_40col;
|
||||||
|
|
||||||
vidCpyM2((unsigned char *)gp2x_screen+320*8, PicoDraw2FB+328*8);
|
vidCpyM2((unsigned char *)g_screen_ptr+320*8, PicoDraw2FB+328*8);
|
||||||
vidConvCpyRGB32(localPal, Pico.cram, 0x40);
|
vidConvCpyRGB32(localPal, Pico.cram, 0x40);
|
||||||
gp2x_video_setpalette(localPal, 0x40);
|
gp2x_video_setpalette(localPal, 0x40);
|
||||||
*/
|
*/
|
||||||
|
@ -799,11 +779,11 @@ static void tga_dump(void)
|
||||||
#define CONV(X) (((X>>1)&0x7fe0)|(X&0x1f)) // 555?
|
#define CONV(X) (((X>>1)&0x7fe0)|(X&0x1f)) // 555?
|
||||||
|
|
||||||
for (i = 0; i < 320*240; i++)
|
for (i = 0; i < 320*240; i++)
|
||||||
if(oldscr[i] != CONV(((unsigned short *)gp2x_screen)[i])) break;
|
if(oldscr[i] != CONV(((unsigned short *)g_screen_ptr)[i])) break;
|
||||||
if (i < 320*240)
|
if (i < 320*240)
|
||||||
{
|
{
|
||||||
for (i = 0; i < 320*240; i++)
|
for (i = 0; i < 320*240; i++)
|
||||||
oldscr[i] = CONV(((unsigned short *)gp2x_screen)[i]);
|
oldscr[i] = CONV(((unsigned short *)g_screen_ptr)[i]);
|
||||||
sprintf(name, "%05i.tga", Pico.m.frame_count);
|
sprintf(name, "%05i.tga", Pico.m.frame_count);
|
||||||
f = fopen(name, "wb");
|
f = fopen(name, "wb");
|
||||||
if (!f) { printf("!f\n"); exit(1); }
|
if (!f) { printf("!f\n"); exit(1); }
|
||||||
|
|
28
gp2x/gp2x.c
28
gp2x/gp2x.c
|
@ -32,7 +32,6 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "gp2x.h"
|
#include "gp2x.h"
|
||||||
#include "../linux/usbjoy.h"
|
|
||||||
#include "../linux/sndout_oss.h"
|
#include "../linux/sndout_oss.h"
|
||||||
#include "../common/arm_utils.h"
|
#include "../common/arm_utils.h"
|
||||||
#include "../common/arm_linux.h"
|
#include "../common/arm_linux.h"
|
||||||
|
@ -47,8 +46,6 @@ int memdev = 0;
|
||||||
static int touchdev = -1;
|
static int touchdev = -1;
|
||||||
static int touchcal[7] = { 6203, 0, -1501397, 0, -4200, 16132680, 65536 };
|
static int touchcal[7] = { 6203, 0, -1501397, 0, -4200, 16132680, 65536 };
|
||||||
|
|
||||||
void *gp2x_screen;
|
|
||||||
|
|
||||||
#define FRAMEBUFF_WHOLESIZE (0x30000*4) // 320*240*2 + some more
|
#define FRAMEBUFF_WHOLESIZE (0x30000*4) // 320*240*2 + some more
|
||||||
#define FRAMEBUFF_ADDR0 (0x4000000-FRAMEBUFF_WHOLESIZE)
|
#define FRAMEBUFF_ADDR0 (0x4000000-FRAMEBUFF_WHOLESIZE)
|
||||||
#define FRAMEBUFF_ADDR1 (FRAMEBUFF_ADDR0+0x30000)
|
#define FRAMEBUFF_ADDR1 (FRAMEBUFF_ADDR0+0x30000)
|
||||||
|
@ -72,7 +69,7 @@ void gp2x_video_flip(void)
|
||||||
gp2x_memregs[0x2912>>1] = lsw;
|
gp2x_memregs[0x2912>>1] = lsw;
|
||||||
|
|
||||||
// jump to other buffer:
|
// jump to other buffer:
|
||||||
gp2x_screen = gp2x_screens[++screensel&3];
|
g_screen_ptr = gp2x_screens[++screensel&3];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* doulblebuffered flip */
|
/* doulblebuffered flip */
|
||||||
|
@ -86,7 +83,7 @@ void gp2x_video_flip2(void)
|
||||||
gp2x_memregs[0x2912>>1] = 0;
|
gp2x_memregs[0x2912>>1] = 0;
|
||||||
|
|
||||||
// jump to other buffer:
|
// jump to other buffer:
|
||||||
gp2x_screen = gp2x_screens[++screensel&1];
|
g_screen_ptr = gp2x_screens[++screensel&1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -162,7 +159,7 @@ void gp2x_video_wait_vsync(void)
|
||||||
void gp2x_video_flush_cache(void)
|
void gp2x_video_flush_cache(void)
|
||||||
{
|
{
|
||||||
// since we are using the mmu hack, we must flush the cache first
|
// since we are using the mmu hack, we must flush the cache first
|
||||||
cache_flush_d_inval_i(gp2x_screen, (char *)gp2x_screen + 320*240*2);
|
cache_flush_d_inval_i(g_screen_ptr, (char *)g_screen_ptr + 320*240*2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -193,11 +190,11 @@ void gp2x_memset_all_buffers(int offset, int byte, int len)
|
||||||
|
|
||||||
void gp2x_pd_clone_buffer2(void)
|
void gp2x_pd_clone_buffer2(void)
|
||||||
{
|
{
|
||||||
memcpy(gp2x_screen, gp2x_screens[2], 320*240*2);
|
memcpy(g_screen_ptr, gp2x_screens[2], 320*240*2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned long gp2x_joystick_read(int allow_usb_joy)
|
unsigned long gp2x_joystick_read(int unused)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned long value=(gp2x_memregs[0x1198>>1] & 0x00FF); // GPIO M
|
unsigned long value=(gp2x_memregs[0x1198>>1] & 0x00FF); // GPIO M
|
||||||
|
@ -207,13 +204,6 @@ unsigned long gp2x_joystick_read(int allow_usb_joy)
|
||||||
if(value==0x7F) value=0xBE;
|
if(value==0x7F) value=0xBE;
|
||||||
value = ~((gp2x_memregs[0x1184>>1] & 0xFF00) | value | (gp2x_memregs[0x1186>>1] << 16)); // C D
|
value = ~((gp2x_memregs[0x1184>>1] & 0xFF00) | value | (gp2x_memregs[0x1186>>1] << 16)); // C D
|
||||||
|
|
||||||
if (allow_usb_joy && num_of_joys > 0) {
|
|
||||||
// check the usb joy as well..
|
|
||||||
usbjoy_update();
|
|
||||||
for (i = 0; i < num_of_joys; i++)
|
|
||||||
value |= usbjoy_check(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,7 +308,7 @@ void gp2x_init(void)
|
||||||
gp2x_screens[0] = mmap(0, FRAMEBUFF_WHOLESIZE, PROT_WRITE, MAP_SHARED, memdev, FRAMEBUFF_ADDR0);
|
gp2x_screens[0] = mmap(0, FRAMEBUFF_WHOLESIZE, PROT_WRITE, MAP_SHARED, memdev, FRAMEBUFF_ADDR0);
|
||||||
if(gp2x_screens[0] == MAP_FAILED)
|
if(gp2x_screens[0] == MAP_FAILED)
|
||||||
{
|
{
|
||||||
perror("mmap(gp2x_screen)");
|
perror("mmap(g_screen_ptr)");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("framebuffers point to %p\n", gp2x_screens[0]);
|
printf("framebuffers point to %p\n", gp2x_screens[0]);
|
||||||
|
@ -326,7 +316,7 @@ void gp2x_init(void)
|
||||||
gp2x_screens[2] = (char *) gp2x_screens[1]+0x30000;
|
gp2x_screens[2] = (char *) gp2x_screens[1]+0x30000;
|
||||||
gp2x_screens[3] = (char *) gp2x_screens[2]+0x30000;
|
gp2x_screens[3] = (char *) gp2x_screens[2]+0x30000;
|
||||||
|
|
||||||
gp2x_screen = gp2x_screens[0];
|
g_screen_ptr = gp2x_screens[0];
|
||||||
screensel = 0;
|
screensel = 0;
|
||||||
|
|
||||||
gp2x_screenaddr_old[0] = gp2x_memregs[0x290E>>1];
|
gp2x_screenaddr_old[0] = gp2x_memregs[0x290E>>1];
|
||||||
|
@ -340,9 +330,6 @@ void gp2x_init(void)
|
||||||
// snd
|
// snd
|
||||||
sndout_oss_init();
|
sndout_oss_init();
|
||||||
|
|
||||||
/* init usb joys -GnoStiC */
|
|
||||||
usbjoy_init();
|
|
||||||
|
|
||||||
// touchscreen
|
// touchscreen
|
||||||
touchdev = open("/dev/touchscreen/wm97xx", O_RDONLY);
|
touchdev = open("/dev/touchscreen/wm97xx", O_RDONLY);
|
||||||
if (touchdev >= 0) {
|
if (touchdev >= 0) {
|
||||||
|
@ -381,7 +368,6 @@ void gp2x_deinit(void)
|
||||||
if (touchdev >= 0) close(touchdev);
|
if (touchdev >= 0) close(touchdev);
|
||||||
|
|
||||||
sndout_oss_exit();
|
sndout_oss_exit();
|
||||||
usbjoy_deinit();
|
|
||||||
|
|
||||||
printf("all done, running ");
|
printf("all done, running ");
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ void Pause940(int yes);
|
||||||
void Reset940(int yes, int bank);
|
void Reset940(int yes, int bank);
|
||||||
|
|
||||||
|
|
||||||
extern void *gp2x_screen;
|
|
||||||
extern int memdev;
|
extern int memdev;
|
||||||
|
|
||||||
|
|
||||||
|
|
11
gp2x/plat.c
11
gp2x/plat.c
|
@ -4,6 +4,7 @@
|
||||||
#include "../common/plat.h"
|
#include "../common/plat.h"
|
||||||
#include "../common/readpng.h"
|
#include "../common/readpng.h"
|
||||||
#include "../common/menu.h"
|
#include "../common/menu.h"
|
||||||
|
#include "../common/emu.h"
|
||||||
|
|
||||||
|
|
||||||
void plat_video_menu_enter(int is_rom_loaded)
|
void plat_video_menu_enter(int is_rom_loaded)
|
||||||
|
@ -11,18 +12,18 @@ void plat_video_menu_enter(int is_rom_loaded)
|
||||||
if (is_rom_loaded)
|
if (is_rom_loaded)
|
||||||
{
|
{
|
||||||
// darken the active framebuffer
|
// darken the active framebuffer
|
||||||
memset(gp2x_screen, 0, 320*8*2);
|
memset(g_screen_ptr, 0, 320*8*2);
|
||||||
menu_darken_bg((char *)gp2x_screen + 320*8*2, 320*224, 1);
|
menu_darken_bg((char *)g_screen_ptr + 320*8*2, 320*224, 1);
|
||||||
memset((char *)gp2x_screen + 320*232*2, 0, 320*8*2);
|
memset((char *)g_screen_ptr + 320*232*2, 0, 320*8*2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// should really only happen once, on startup..
|
// should really only happen once, on startup..
|
||||||
readpng(gp2x_screen, "skin/background.png", READPNG_BG);
|
readpng(g_screen_ptr, "skin/background.png", READPNG_BG);
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy to buffer2
|
// copy to buffer2
|
||||||
gp2x_memcpy_buffers((1<<2), gp2x_screen, 0, 320*240*2);
|
gp2x_memcpy_buffers((1<<2), g_screen_ptr, 0, 320*240*2);
|
||||||
|
|
||||||
// switch to 16bpp
|
// switch to 16bpp
|
||||||
gp2x_video_changemode2(16);
|
gp2x_video_changemode2(16);
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
#define REDUCE_IO_CALLS 0
|
#define REDUCE_IO_CALLS 0
|
||||||
#define SIMPLE_WRITE_SOUND 0
|
#define SIMPLE_WRITE_SOUND 0
|
||||||
|
|
||||||
|
#define SCREEN_SIZE_FIXED 1
|
||||||
|
#define SCREEN_WIDTH 320
|
||||||
|
#define SCREEN_HEIGHT 240
|
||||||
|
|
||||||
// draw.c
|
// draw.c
|
||||||
#define OVERRIDE_HIGHCOL 0
|
#define OVERRIDE_HIGHCOL 0
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ CFLAGS += `pkg-config --cflags gthread-2.0`
|
||||||
LDFLAGS += `pkg-config --libs gthread-2.0`
|
LDFLAGS += `pkg-config --libs gthread-2.0`
|
||||||
|
|
||||||
# frontend
|
# frontend
|
||||||
OBJS += platform/gp2x/main.o platform/gp2x/emu.o platform/gp2x/plat.o usbjoy.o blit.o \
|
OBJS += platform/gp2x/main.o platform/gp2x/emu.o platform/gp2x/plat.o blit.o \
|
||||||
in_evdev.o plat.o sndout_oss.o gp2x.o 940ctl_ym2612.o log_io.o
|
in_evdev.o plat.o sndout_oss.o gp2x.o 940ctl_ym2612.o log_io.o
|
||||||
|
|
||||||
# common
|
# common
|
||||||
|
|
80
linux/gp2x.c
80
linux/gp2x.c
|
@ -15,16 +15,16 @@
|
||||||
#include "../gp2x/emu.h"
|
#include "../gp2x/emu.h"
|
||||||
#include "../gp2x/gp2x.h"
|
#include "../gp2x/gp2x.h"
|
||||||
#include "../gp2x/version.h"
|
#include "../gp2x/version.h"
|
||||||
|
#include "../common/emu.h"
|
||||||
#include "sndout_oss.h"
|
#include "sndout_oss.h"
|
||||||
#include "usbjoy.h"
|
|
||||||
|
|
||||||
#include "log_io.h"
|
#include "log_io.h"
|
||||||
|
|
||||||
void *gp2x_screen;
|
|
||||||
unsigned long current_keys = 0;
|
unsigned long current_keys = 0;
|
||||||
static int current_bpp = 8;
|
static int current_bpp = 8;
|
||||||
static int current_pal[256];
|
static int current_pal[256];
|
||||||
static const char *verstring = "PicoDrive " VERSION;
|
static const char *verstring = "PicoDrive " VERSION;
|
||||||
|
static int scr_changed = 0, scr_w = SCREEN_WIDTH, scr_h = SCREEN_HEIGHT;
|
||||||
|
|
||||||
// dummies
|
// dummies
|
||||||
char *ext_menu = 0, *ext_state = 0;
|
char *ext_menu = 0, *ext_state = 0;
|
||||||
|
@ -111,17 +111,12 @@ static gint key_release_event (GtkWidget *widget, GdkEventKey *event)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
void gdk_drawable_get_size (GdkDrawable *drawable,
|
|
||||||
gint *width,
|
|
||||||
gint *height);
|
|
||||||
**/
|
|
||||||
|
|
||||||
static void size_allocate_event(GtkWidget *widget, GtkAllocation *allocation, gpointer user_data)
|
static void size_allocate_event(GtkWidget *widget, GtkAllocation *allocation, gpointer user_data)
|
||||||
{
|
{
|
||||||
gint w, h;
|
// printf("%dx%d\n", allocation->width, allocation->height);
|
||||||
gdk_drawable_get_size(gtk_items.window, &w, &h);
|
scr_w = allocation->width - 2;
|
||||||
printf("%dx%d %dx%d\n", allocation->width, allocation->height, w, h);
|
scr_h = allocation->height - 2;
|
||||||
|
scr_changed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *gtk_threadf(void *targ)
|
static void *gtk_threadf(void *targ)
|
||||||
|
@ -153,7 +148,7 @@ static void *gtk_threadf(void *targ)
|
||||||
g_signal_connect (G_OBJECT (gtk_items.window), "size_allocate",
|
g_signal_connect (G_OBJECT (gtk_items.window), "size_allocate",
|
||||||
G_CALLBACK (size_allocate_event), NULL);
|
G_CALLBACK (size_allocate_event), NULL);
|
||||||
|
|
||||||
gtk_container_set_border_width (GTK_CONTAINER (gtk_items.window), 2);
|
gtk_container_set_border_width (GTK_CONTAINER (gtk_items.window), 1);
|
||||||
gtk_window_set_title ((GtkWindow *) gtk_items.window, verstring);
|
gtk_window_set_title ((GtkWindow *) gtk_items.window, verstring);
|
||||||
|
|
||||||
box = gtk_hbox_new(FALSE, 0);
|
box = gtk_hbox_new(FALSE, 0);
|
||||||
|
@ -198,28 +193,35 @@ void finalize_image(guchar *pixels, gpointer data)
|
||||||
|
|
||||||
/* --- */
|
/* --- */
|
||||||
|
|
||||||
|
static void realloc_screen(void)
|
||||||
|
{
|
||||||
|
void *old = g_screen_ptr;
|
||||||
|
g_screen_width = scr_w;
|
||||||
|
g_screen_height = scr_h;
|
||||||
|
g_screen_ptr = malloc(g_screen_width * g_screen_height * 2);
|
||||||
|
free(old);
|
||||||
|
scr_changed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void gp2x_init(void)
|
void gp2x_init(void)
|
||||||
{
|
{
|
||||||
printf("entering init()\n"); fflush(stdout);
|
printf("entering init()\n"); fflush(stdout);
|
||||||
|
|
||||||
gp2x_screen = malloc(320*240*2 + 320*2);
|
realloc_screen();
|
||||||
memset(gp2x_screen, 0, 320*240*2 + 320*2);
|
memset(g_screen_ptr, 0, g_screen_width * g_screen_height * 2);
|
||||||
|
|
||||||
// snd
|
// snd
|
||||||
sndout_oss_init();
|
sndout_oss_init();
|
||||||
|
|
||||||
gtk_initf();
|
gtk_initf();
|
||||||
|
|
||||||
usbjoy_init();
|
|
||||||
|
|
||||||
printf("exitting init()\n"); fflush(stdout);
|
printf("exitting init()\n"); fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gp2x_deinit(void)
|
void gp2x_deinit(void)
|
||||||
{
|
{
|
||||||
free(gp2x_screen);
|
free(g_screen_ptr);
|
||||||
sndout_oss_exit();
|
sndout_oss_exit();
|
||||||
usbjoy_deinit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* video */
|
/* video */
|
||||||
|
@ -227,11 +229,13 @@ void gp2x_video_flip(void)
|
||||||
{
|
{
|
||||||
GdkPixbuf *pixbuf;
|
GdkPixbuf *pixbuf;
|
||||||
unsigned char *image;
|
unsigned char *image;
|
||||||
int i;
|
int pixel_count, i;
|
||||||
|
|
||||||
|
pixel_count = g_screen_width * g_screen_height;
|
||||||
|
|
||||||
gdk_threads_enter();
|
gdk_threads_enter();
|
||||||
|
|
||||||
image = malloc (320*240*3);
|
image = malloc(pixel_count * 3);
|
||||||
if (image == NULL)
|
if (image == NULL)
|
||||||
{
|
{
|
||||||
gdk_threads_leave();
|
gdk_threads_leave();
|
||||||
|
@ -240,10 +244,10 @@ void gp2x_video_flip(void)
|
||||||
|
|
||||||
if (current_bpp == 8)
|
if (current_bpp == 8)
|
||||||
{
|
{
|
||||||
unsigned char *pixels = gp2x_screen;
|
unsigned char *pixels = g_screen_ptr;
|
||||||
int pix;
|
int pix;
|
||||||
|
|
||||||
for (i = 0; i < 320*240; i++)
|
for (i = 0; i < pixel_count; i++)
|
||||||
{
|
{
|
||||||
pix = current_pal[pixels[i]];
|
pix = current_pal[pixels[i]];
|
||||||
image[3 * i + 0] = pix >> 16;
|
image[3 * i + 0] = pix >> 16;
|
||||||
|
@ -253,9 +257,9 @@ void gp2x_video_flip(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
unsigned short *pixels = gp2x_screen;
|
unsigned short *pixels = g_screen_ptr;
|
||||||
|
|
||||||
for (i = 0; i < 320*240; i++)
|
for (i = 0; i < pixel_count; i++)
|
||||||
{
|
{
|
||||||
/* in: rrrr rggg gggb bbbb */
|
/* in: rrrr rggg gggb bbbb */
|
||||||
/* out: rrrr r000 gggg gg00 bbbb b000 */
|
/* out: rrrr r000 gggg gg00 bbbb b000 */
|
||||||
|
@ -266,11 +270,15 @@ void gp2x_video_flip(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
pixbuf = gdk_pixbuf_new_from_data (image, GDK_COLORSPACE_RGB,
|
pixbuf = gdk_pixbuf_new_from_data (image, GDK_COLORSPACE_RGB,
|
||||||
FALSE, 8, 320, 240, 320*3, finalize_image, NULL);
|
FALSE, 8, g_screen_width, g_screen_height,
|
||||||
|
g_screen_width * 3, finalize_image, NULL);
|
||||||
gtk_image_set_from_pixbuf (GTK_IMAGE (gtk_items.pixmap1), pixbuf);
|
gtk_image_set_from_pixbuf (GTK_IMAGE (gtk_items.pixmap1), pixbuf);
|
||||||
g_object_unref (pixbuf);
|
g_object_unref (pixbuf);
|
||||||
|
|
||||||
gdk_threads_leave();
|
gdk_threads_leave();
|
||||||
|
|
||||||
|
if (scr_changed)
|
||||||
|
realloc_screen();
|
||||||
}
|
}
|
||||||
|
|
||||||
void gp2x_video_flip2(void)
|
void gp2x_video_flip2(void)
|
||||||
|
@ -303,40 +311,30 @@ void gp2x_video_RGB_setscaling(int v_offs, int W, int H)
|
||||||
|
|
||||||
void gp2x_memcpy_buffers(int buffers, void *data, int offset, int len)
|
void gp2x_memcpy_buffers(int buffers, void *data, int offset, int len)
|
||||||
{
|
{
|
||||||
if ((char *)gp2x_screen + offset != data)
|
if ((char *)g_screen_ptr + offset != data)
|
||||||
memcpy((char *)gp2x_screen + offset, data, len);
|
memcpy((char *)g_screen_ptr + offset, data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gp2x_memcpy_all_buffers(void *data, int offset, int len)
|
void gp2x_memcpy_all_buffers(void *data, int offset, int len)
|
||||||
{
|
{
|
||||||
memcpy((char *)gp2x_screen + offset, data, len);
|
memcpy((char *)g_screen_ptr + offset, data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void gp2x_memset_all_buffers(int offset, int byte, int len)
|
void gp2x_memset_all_buffers(int offset, int byte, int len)
|
||||||
{
|
{
|
||||||
memset((char *)gp2x_screen + offset, byte, len);
|
memset((char *)g_screen_ptr + offset, byte, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gp2x_pd_clone_buffer2(void)
|
void gp2x_pd_clone_buffer2(void)
|
||||||
{
|
{
|
||||||
memset(gp2x_screen, 0, 320*240*2);
|
memset(g_screen_ptr, 0, g_screen_width * g_screen_height * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* joy */
|
/* joy */
|
||||||
unsigned long gp2x_joystick_read(int allow_usb_joy)
|
unsigned long gp2x_joystick_read(int allow_usb_joy)
|
||||||
{
|
{
|
||||||
unsigned long value = current_keys;
|
return current_keys;
|
||||||
int i;
|
|
||||||
|
|
||||||
if (allow_usb_joy && num_of_joys > 0) {
|
|
||||||
// check the usb joy as well..
|
|
||||||
usbjoy_update();
|
|
||||||
for (i = 0; i < num_of_joys; i++)
|
|
||||||
value |= usbjoy_check(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int gp2x_touchpad_read(int *x, int *y)
|
int gp2x_touchpad_read(int *x, int *y)
|
||||||
|
|
|
@ -10,6 +10,10 @@
|
||||||
#define REDUCE_IO_CALLS 0
|
#define REDUCE_IO_CALLS 0
|
||||||
#define SIMPLE_WRITE_SOUND 0
|
#define SIMPLE_WRITE_SOUND 0
|
||||||
|
|
||||||
|
#define SCREEN_SIZE_FIXED 0
|
||||||
|
#define SCREEN_WIDTH 320
|
||||||
|
#define SCREEN_HEIGHT 240
|
||||||
|
|
||||||
// draw.c
|
// draw.c
|
||||||
#define OVERRIDE_HIGHCOL 0
|
#define OVERRIDE_HIGHCOL 0
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ int reset_timing = 0;
|
||||||
|
|
||||||
#define PICO_PEN_ADJUST_X 4
|
#define PICO_PEN_ADJUST_X 4
|
||||||
#define PICO_PEN_ADJUST_Y 2
|
#define PICO_PEN_ADJUST_Y 2
|
||||||
static int pico_pen_x = SCREEN_WIDTH/2, pico_pen_y = 240/2;
|
static int pico_pen_x = 0, pico_pen_y = 240/2;
|
||||||
|
|
||||||
static void emu_msg_cb(const char *msg);
|
static void emu_msg_cb(const char *msg);
|
||||||
static void emu_msg_tray_open(void);
|
static void emu_msg_tray_open(void);
|
||||||
|
@ -126,7 +126,6 @@ void emu_prepareDefaultConfig(void)
|
||||||
defaultConfig.EmuOpt = 0x8f | 0x00600; // | <- confirm_save, cd_leds
|
defaultConfig.EmuOpt = 0x8f | 0x00600; // | <- confirm_save, cd_leds
|
||||||
defaultConfig.s_PicoOpt = 0x0f | POPT_EXT_FM|POPT_EN_MCD_PCM|POPT_EN_MCD_CDDA|POPT_EN_SVP_DRC;
|
defaultConfig.s_PicoOpt = 0x0f | POPT_EXT_FM|POPT_EN_MCD_PCM|POPT_EN_MCD_CDDA|POPT_EN_SVP_DRC;
|
||||||
defaultConfig.s_PicoOpt |= POPT_ACC_SPRITES|POPT_EN_MCD_GFX;
|
defaultConfig.s_PicoOpt |= POPT_ACC_SPRITES|POPT_EN_MCD_GFX;
|
||||||
// defaultConfig.s_PicoOpt &= ~POPT_EN_SVP_DRC; // crashes :(
|
|
||||||
defaultConfig.EmuOpt &= ~8; // no save gzip
|
defaultConfig.EmuOpt &= ~8; // no save gzip
|
||||||
defaultConfig.s_PsndRate = 44100;
|
defaultConfig.s_PsndRate = 44100;
|
||||||
defaultConfig.s_PicoRegion = 0;
|
defaultConfig.s_PicoRegion = 0;
|
||||||
|
@ -142,14 +141,14 @@ void emu_prepareDefaultConfig(void)
|
||||||
static void textOut16(int x, int y, const char *text)
|
static void textOut16(int x, int y, const char *text)
|
||||||
{
|
{
|
||||||
int i,l,len=strlen(text);
|
int i,l,len=strlen(text);
|
||||||
unsigned int *screen = (unsigned int *)((unsigned short *)SCREEN_BUFFER + (x&~1) + y*SCREEN_WIDTH);
|
unsigned int *screen = (unsigned int *)((unsigned short *)g_screen_ptr + (x&~1) + y*g_screen_width);
|
||||||
|
|
||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
for (l=0;l<16;)
|
for (l=0;l<16;)
|
||||||
{
|
{
|
||||||
unsigned char fd = fontdata8x8[((text[i])*8)+l/2];
|
unsigned char fd = fontdata8x8[((text[i])*8)+l/2];
|
||||||
unsigned int *d = &screen[l*SCREEN_WIDTH/2];
|
unsigned int *d = &screen[l*g_screen_width/2];
|
||||||
if (fd&0x80) d[0]=0xffffffff;
|
if (fd&0x80) d[0]=0xffffffff;
|
||||||
if (fd&0x40) d[1]=0xffffffff;
|
if (fd&0x40) d[1]=0xffffffff;
|
||||||
if (fd&0x20) d[2]=0xffffffff;
|
if (fd&0x20) d[2]=0xffffffff;
|
||||||
|
@ -158,7 +157,7 @@ static void textOut16(int x, int y, const char *text)
|
||||||
if (fd&0x04) d[5]=0xffffffff;
|
if (fd&0x04) d[5]=0xffffffff;
|
||||||
if (fd&0x02) d[6]=0xffffffff;
|
if (fd&0x02) d[6]=0xffffffff;
|
||||||
if (fd&0x01) d[7]=0xffffffff;
|
if (fd&0x01) d[7]=0xffffffff;
|
||||||
l++; d = &screen[l*SCREEN_WIDTH/2];
|
l++; d = &screen[l*g_screen_width/2];
|
||||||
if (fd&0x80) d[0]=0xffffffff;
|
if (fd&0x80) d[0]=0xffffffff;
|
||||||
if (fd&0x40) d[1]=0xffffffff;
|
if (fd&0x40) d[1]=0xffffffff;
|
||||||
if (fd&0x20) d[2]=0xffffffff;
|
if (fd&0x20) d[2]=0xffffffff;
|
||||||
|
@ -183,7 +182,7 @@ void osd_text(int x, int y, const char *text)
|
||||||
x &= ~3; // align x
|
x &= ~3; // align x
|
||||||
len = (len+3) >> 2;
|
len = (len+3) >> 2;
|
||||||
for (h = 0; h < 8; h++) {
|
for (h = 0; h < 8; h++) {
|
||||||
p = (int *) ((unsigned char *) gp2x_screen+x+SCREEN_WIDTH*(y+h));
|
p = (int *) ((unsigned char *) gp2x_screen+x+g_screen_width*(y+h));
|
||||||
for (i = len; i; i--, p++) *p = 0xe0e0e0e0;
|
for (i = len; i; i--, p++) *p = 0xe0e0e0e0;
|
||||||
}
|
}
|
||||||
emu_textOut8(x, y, text);
|
emu_textOut8(x, y, text);
|
||||||
|
@ -192,7 +191,7 @@ void osd_text(int x, int y, const char *text)
|
||||||
x &= ~1; // align x
|
x &= ~1; // align x
|
||||||
len++;
|
len++;
|
||||||
for (h = 0; h < 16; h++) {
|
for (h = 0; h < 16; h++) {
|
||||||
p = (int *) ((unsigned short *) gp2x_screen+x+SCREEN_WIDTH*(y+h));
|
p = (int *) ((unsigned short *) gp2x_screen+x+g_screen_width*(y+h));
|
||||||
for (i = len; i; i--, p++) *p = 0;//(*p>>2)&0x39e7;
|
for (i = len; i; i--, p++) *p = 0;//(*p>>2)&0x39e7;
|
||||||
}
|
}
|
||||||
textOut16(x, y, text);
|
textOut16(x, y, text);
|
||||||
|
@ -210,19 +209,19 @@ static void draw_cd_leds(void)
|
||||||
// 8-bit modes
|
// 8-bit modes
|
||||||
unsigned int col_g = (old_reg & 2) ? 0xc0c0c0c0 : 0xe0e0e0e0;
|
unsigned int col_g = (old_reg & 2) ? 0xc0c0c0c0 : 0xe0e0e0e0;
|
||||||
unsigned int col_r = (old_reg & 1) ? 0xd0d0d0d0 : 0xe0e0e0e0;
|
unsigned int col_r = (old_reg & 1) ? 0xd0d0d0d0 : 0xe0e0e0e0;
|
||||||
*(unsigned int *)((char *)gp2x_screen + SCREEN_WIDTH*2+ 4) =
|
*(unsigned int *)((char *)gp2x_screen + g_screen_width*2+ 4) =
|
||||||
*(unsigned int *)((char *)gp2x_screen + SCREEN_WIDTH*3+ 4) =
|
*(unsigned int *)((char *)gp2x_screen + g_screen_width*3+ 4) =
|
||||||
*(unsigned int *)((char *)gp2x_screen + SCREEN_WIDTH*4+ 4) = col_g;
|
*(unsigned int *)((char *)gp2x_screen + g_screen_width*4+ 4) = col_g;
|
||||||
*(unsigned int *)((char *)gp2x_screen + SCREEN_WIDTH*2+12) =
|
*(unsigned int *)((char *)gp2x_screen + g_screen_width*2+12) =
|
||||||
*(unsigned int *)((char *)gp2x_screen + SCREEN_WIDTH*3+12) =
|
*(unsigned int *)((char *)gp2x_screen + g_screen_width*3+12) =
|
||||||
*(unsigned int *)((char *)gp2x_screen + SCREEN_WIDTH*4+12) = col_r;
|
*(unsigned int *)((char *)gp2x_screen + g_screen_width*4+12) = col_r;
|
||||||
} else {
|
} else {
|
||||||
// 16-bit modes
|
// 16-bit modes
|
||||||
unsigned int *p = (unsigned int *)((short *)gp2x_screen + SCREEN_WIDTH*2+4);
|
unsigned int *p = (unsigned int *)((short *)gp2x_screen + g_screen_width*2+4);
|
||||||
unsigned int col_g = (old_reg & 2) ? 0x06000600 : 0;
|
unsigned int col_g = (old_reg & 2) ? 0x06000600 : 0;
|
||||||
unsigned int col_r = (old_reg & 1) ? 0xc000c000 : 0;
|
unsigned int col_r = (old_reg & 1) ? 0xc000c000 : 0;
|
||||||
*p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r; p += SCREEN_WIDTH/2 - 12/2;
|
*p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r; p += g_screen_width/2 - 12/2;
|
||||||
*p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r; p += SCREEN_WIDTH/2 - 12/2;
|
*p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r; p += g_screen_width/2 - 12/2;
|
||||||
*p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r;
|
*p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -237,7 +236,7 @@ static void draw_pico_ptr(void)
|
||||||
if (!(Pico.video.reg[12]&1) && !(PicoOpt&POPT_DIS_32C_BORDER))
|
if (!(Pico.video.reg[12]&1) && !(PicoOpt&POPT_DIS_32C_BORDER))
|
||||||
p += 32;
|
p += 32;
|
||||||
|
|
||||||
p += SCREEN_WIDTH * (pico_pen_y + PICO_PEN_ADJUST_Y);
|
p += g_screen_width * (pico_pen_y + PICO_PEN_ADJUST_Y);
|
||||||
p += pico_pen_x + PICO_PEN_ADJUST_X;
|
p += pico_pen_x + PICO_PEN_ADJUST_X;
|
||||||
p[0] ^= 0xffff;
|
p[0] ^= 0xffff;
|
||||||
p[319] ^= 0xffff;
|
p[319] ^= 0xffff;
|
||||||
|
@ -305,7 +304,7 @@ static int EmuScanEnd16(unsigned int num)
|
||||||
static int EmuScanBegin8(unsigned int num)
|
static int EmuScanBegin8(unsigned int num)
|
||||||
{
|
{
|
||||||
if (!(Pico.video.reg[1]&8)) num += 8;
|
if (!(Pico.video.reg[1]&8)) num += 8;
|
||||||
DrawLineDest = (unsigned char *) gp2x_screen + SCREEN_WIDTH * num;
|
DrawLineDest = (unsigned char *) gp2x_screen + g_screen_width * num;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -330,7 +329,7 @@ static void blit(const char *fps, const char *notice)
|
||||||
if (PicoRead16Hook == PicoSVPRead16)
|
if (PicoRead16Hook == PicoSVPRead16)
|
||||||
memset32((int *)(PicoDraw2FB+328*8+328*223), 0xe0e0e0e0, 328);
|
memset32((int *)(PicoDraw2FB+328*8+328*223), 0xe0e0e0e0, 328);
|
||||||
// do actual copy
|
// do actual copy
|
||||||
vidCpyM2((unsigned char *)gp2x_screen+SCREEN_WIDTH*8, PicoDraw2FB+328*8);
|
vidCpyM2((unsigned char *)gp2x_screen+g_screen_width*8, PicoDraw2FB+328*8);
|
||||||
}
|
}
|
||||||
else if (!(emu_opt&0x80))
|
else if (!(emu_opt&0x80))
|
||||||
{
|
{
|
||||||
|
@ -368,7 +367,7 @@ static void blit(const char *fps, const char *notice)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notice || (emu_opt & 2)) {
|
if (notice || (emu_opt & 2)) {
|
||||||
int h = SCREEN_HEIGHT-16;
|
int h = g_screen_height-16;
|
||||||
if (currentConfig.scaling == 2 && !(Pico.video.reg[1]&8)) h -= 16;
|
if (currentConfig.scaling == 2 && !(Pico.video.reg[1]&8)) h -= 16;
|
||||||
if (notice) osd_text(4, h, notice);
|
if (notice) osd_text(4, h, notice);
|
||||||
if (emu_opt & 2)
|
if (emu_opt & 2)
|
||||||
|
@ -393,12 +392,12 @@ static void clearArea(int full)
|
||||||
{
|
{
|
||||||
if ((PicoOpt&0x10)||!(currentConfig.EmuOpt&0x80)) {
|
if ((PicoOpt&0x10)||!(currentConfig.EmuOpt&0x80)) {
|
||||||
// 8-bit renderers
|
// 8-bit renderers
|
||||||
if (full) gp2x_memset_all_buffers(0, 0xe0, SCREEN_WIDTH*240);
|
if (full) gp2x_memset_all_buffers(0, 0xe0, g_screen_width*240);
|
||||||
else gp2x_memset_all_buffers(SCREEN_WIDTH*232, 0xe0, SCREEN_WIDTH*8);
|
else gp2x_memset_all_buffers(g_screen_width*232, 0xe0, g_screen_width*8);
|
||||||
} else {
|
} else {
|
||||||
// 16bit accurate renderer
|
// 16bit accurate renderer
|
||||||
if (full) gp2x_memset_all_buffers(0, 0, SCREEN_WIDTH*SCREEN_HEIGHT*2);
|
if (full) gp2x_memset_all_buffers(0, 0, g_screen_width*g_screen_height*2);
|
||||||
else gp2x_memset_all_buffers(SCREEN_WIDTH*(SCREEN_HEIGHT-16)*2, 0, SCREEN_WIDTH*16*2);
|
else gp2x_memset_all_buffers(g_screen_width*(g_screen_height-16)*2, 0, g_screen_width*16*2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,16 +442,16 @@ static void emu_msg_cb(const char *msg)
|
||||||
{
|
{
|
||||||
if ((PicoOpt&0x10)||!(currentConfig.EmuOpt&0x80)) {
|
if ((PicoOpt&0x10)||!(currentConfig.EmuOpt&0x80)) {
|
||||||
// 8-bit renderers
|
// 8-bit renderers
|
||||||
gp2x_memset_all_buffers(SCREEN_WIDTH*(SCREEN_HEIGHT-16), 0xe0, SCREEN_WIDTH*16);
|
gp2x_memset_all_buffers(g_screen_width*(g_screen_height-16), 0xe0, g_screen_width*16);
|
||||||
osd_text(4, SCREEN_HEIGHT-16, msg);
|
osd_text(4, g_screen_height-16, msg);
|
||||||
gp2x_memcpy_all_buffers((char *)gp2x_screen+SCREEN_WIDTH*(SCREEN_HEIGHT-16),
|
gp2x_memcpy_all_buffers((char *)gp2x_screen+g_screen_width*(g_screen_height-16),
|
||||||
SCREEN_WIDTH*(SCREEN_HEIGHT-16), SCREEN_WIDTH*16);
|
g_screen_width*(g_screen_height-16), g_screen_width*16);
|
||||||
} else {
|
} else {
|
||||||
// 16bit accurate renderer
|
// 16bit accurate renderer
|
||||||
gp2x_memset_all_buffers(SCREEN_WIDTH*(SCREEN_HEIGHT-16)*2, 0, SCREEN_WIDTH*16*2);
|
gp2x_memset_all_buffers(g_screen_width*(g_screen_height-16)*2, 0, g_screen_width*16*2);
|
||||||
osd_text(4, SCREEN_HEIGHT-16, msg);
|
osd_text(4, g_screen_height-16, msg);
|
||||||
gp2x_memcpy_all_buffers((char *)gp2x_screen+SCREEN_WIDTH*(SCREEN_HEIGHT-16)*2,
|
gp2x_memcpy_all_buffers((char *)gp2x_screen+g_screen_width*(g_screen_height-16)*2,
|
||||||
SCREEN_WIDTH*(SCREEN_HEIGHT-16)*2, SCREEN_WIDTH*16*2);
|
g_screen_width*(g_screen_height-16)*2, g_screen_width*16*2);
|
||||||
}
|
}
|
||||||
gettimeofday(¬iceMsgTime, 0);
|
gettimeofday(¬iceMsgTime, 0);
|
||||||
noticeMsgTime.tv_sec -= 2;
|
noticeMsgTime.tv_sec -= 2;
|
||||||
|
@ -581,9 +580,9 @@ static void RunEvents(unsigned int which)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (do_it) {
|
if (do_it) {
|
||||||
osd_text(4, SCREEN_HEIGHT-16, (which & 0x1000) ? "LOADING GAME" : "SAVING GAME");
|
osd_text(4, g_screen_height-16, (which & 0x1000) ? "LOADING GAME" : "SAVING GAME");
|
||||||
PicoStateProgressCB = emu_state_cb;
|
PicoStateProgressCB = emu_state_cb;
|
||||||
gp2x_memcpy_all_buffers(gp2x_screen, 0, SCREEN_WIDTH*SCREEN_HEIGHT*2);
|
gp2x_memcpy_all_buffers(gp2x_screen, 0, g_screen_width*g_screen_height*2);
|
||||||
emu_SaveLoadGame((which & 0x1000) >> 12, 0);
|
emu_SaveLoadGame((which & 0x1000) >> 12, 0);
|
||||||
PicoStateProgressCB = NULL;
|
PicoStateProgressCB = NULL;
|
||||||
}
|
}
|
||||||
|
@ -708,7 +707,7 @@ void emu_forcedFrame(int opts)
|
||||||
clearArea(1);
|
clearArea(1);
|
||||||
} else vidCpyM2 = vidCpyM2_40col;
|
} else vidCpyM2 = vidCpyM2_40col;
|
||||||
|
|
||||||
vidCpyM2((unsigned char *)gp2x_screen+SCREEN_WIDTH*8, PicoDraw2FB+328*8);
|
vidCpyM2((unsigned char *)gp2x_screen+g_screen_width*8, PicoDraw2FB+328*8);
|
||||||
vidConvCpyRGB32(localPal, Pico.cram, 0x40);
|
vidConvCpyRGB32(localPal, Pico.cram, 0x40);
|
||||||
gp2x_video_setpalette(localPal, 0x40);
|
gp2x_video_setpalette(localPal, 0x40);
|
||||||
*/
|
*/
|
||||||
|
@ -851,7 +850,7 @@ void emu_Loop(void)
|
||||||
modes = ((Pico.video.reg[12]&1)<<2)|(Pico.video.reg[1]&8);
|
modes = ((Pico.video.reg[12]&1)<<2)|(Pico.video.reg[1]&8);
|
||||||
if (modes != oldmodes)
|
if (modes != oldmodes)
|
||||||
{
|
{
|
||||||
int scalex = SCREEN_WIDTH;
|
int scalex = g_screen_width;
|
||||||
osd_fps_x = OSD_FPS_X;
|
osd_fps_x = OSD_FPS_X;
|
||||||
if (modes & 4) {
|
if (modes & 4) {
|
||||||
vidCpyM2 = vidCpyM2_40col;
|
vidCpyM2 = vidCpyM2_40col;
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
#define REDUCE_IO_CALLS 0
|
#define REDUCE_IO_CALLS 0
|
||||||
#define SIMPLE_WRITE_SOUND 0
|
#define SIMPLE_WRITE_SOUND 0
|
||||||
|
|
||||||
|
#define SCREEN_SIZE_FIXED 1
|
||||||
|
#define SCREEN_WIDTH 800
|
||||||
|
#define SCREEN_HEIGHT 480
|
||||||
|
|
||||||
// draw.c
|
// draw.c
|
||||||
#define OVERRIDE_HIGHCOL 0
|
#define OVERRIDE_HIGHCOL 0
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
#define REDUCE_IO_CALLS 1 // another workaround
|
#define REDUCE_IO_CALLS 1 // another workaround
|
||||||
#define SIMPLE_WRITE_SOUND 0
|
#define SIMPLE_WRITE_SOUND 0
|
||||||
|
|
||||||
|
#define SCREEN_SIZE_FIXED 1
|
||||||
|
#define SCREEN_WIDTH 512
|
||||||
|
#define SCREEN_HEIGHT 272
|
||||||
|
|
||||||
// draw.c
|
// draw.c
|
||||||
#define USE_BGR555 1
|
#define USE_BGR555 1
|
||||||
#define OVERRIDE_HIGHCOL 1
|
#define OVERRIDE_HIGHCOL 1
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue