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
|
@ -313,7 +313,7 @@ void YM2612Init_940(int baseclock, int rate)
|
|||
fp = fopen(binpath, "rb");
|
||||
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, 110, CODE940_FILE);
|
||||
gp2x_video_flip2();
|
||||
|
|
80
gp2x/emu.c
80
gp2x/emu.c
|
@ -17,7 +17,6 @@
|
|||
#include "emu.h"
|
||||
#include "gp2x.h"
|
||||
#include "menu.h"
|
||||
#include "../linux/usbjoy.h"
|
||||
#include "../common/arm_utils.h"
|
||||
#include "../common/fonts.h"
|
||||
#include "../common/emu.h"
|
||||
|
@ -167,23 +166,24 @@ void emu_prepareDefaultConfig(void)
|
|||
void osd_text(int x, int y, const char *text)
|
||||
{
|
||||
int len = strlen(text)*8;
|
||||
int *p, i, h, offs;
|
||||
|
||||
if ((PicoOpt&0x10)||!(currentConfig.EmuOpt&0x80)) {
|
||||
int *p, i, h;
|
||||
x &= ~3; // align x
|
||||
len = (len+3) >> 2;
|
||||
for (h = 0; h < 8; h++) {
|
||||
p = (int *) ((unsigned char *) gp2x_screen+x+320*(y+h));
|
||||
for (i = len; i; i--, p++) *p = 0xe0e0e0e0;
|
||||
offs = (x + g_screen_width * (y+h)) & ~3;
|
||||
p = (int *) ((char *)g_screen_ptr + offs);
|
||||
for (i = len; i; i--, p++)
|
||||
*p = 0xe0e0e0e0;
|
||||
}
|
||||
emu_textOut8(x, y, text);
|
||||
} else {
|
||||
int *p, i, h;
|
||||
x &= ~1; // align x
|
||||
len = (len+1) >> 1;
|
||||
for (h = 0; h < 8; h++) {
|
||||
p = (int *) ((unsigned short *) gp2x_screen+x+320*(y+h));
|
||||
for (i = len; i; i--, p++) *p = (*p>>2)&0x39e7;
|
||||
offs = (x + g_screen_width * (y+h)) & ~1;
|
||||
p = (int *) ((short *)g_screen_ptr + offs);
|
||||
for (i = len; i; i--, p++)
|
||||
*p = (*p >> 2) & 0x39e7;
|
||||
}
|
||||
emu_textOut16(x, y, text);
|
||||
}
|
||||
|
@ -200,15 +200,15 @@ static void draw_cd_leds(void)
|
|||
// 8-bit modes
|
||||
unsigned int col_g = (old_reg & 2) ? 0xc0c0c0c0 : 0xe0e0e0e0;
|
||||
unsigned int col_r = (old_reg & 1) ? 0xd0d0d0d0 : 0xe0e0e0e0;
|
||||
*(unsigned int *)((char *)gp2x_screen + 320*2+ 4) =
|
||||
*(unsigned int *)((char *)gp2x_screen + 320*3+ 4) =
|
||||
*(unsigned int *)((char *)gp2x_screen + 320*4+ 4) = col_g;
|
||||
*(unsigned int *)((char *)gp2x_screen + 320*2+12) =
|
||||
*(unsigned int *)((char *)gp2x_screen + 320*3+12) =
|
||||
*(unsigned int *)((char *)gp2x_screen + 320*4+12) = col_r;
|
||||
*(unsigned int *)((char *)g_screen_ptr + 320*2+ 4) =
|
||||
*(unsigned int *)((char *)g_screen_ptr + 320*3+ 4) =
|
||||
*(unsigned int *)((char *)g_screen_ptr + 320*4+ 4) = col_g;
|
||||
*(unsigned int *)((char *)g_screen_ptr + 320*2+12) =
|
||||
*(unsigned int *)((char *)g_screen_ptr + 320*3+12) =
|
||||
*(unsigned int *)((char *)g_screen_ptr + 320*4+12) = col_r;
|
||||
} else {
|
||||
// 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_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;
|
||||
|
@ -219,7 +219,7 @@ static void draw_cd_leds(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
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
@ -247,7 +247,7 @@ static int EmuScanBegin16(unsigned int num)
|
|||
static int EmuScanBegin8(unsigned int num)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
@ -272,7 +272,7 @@ static void blit(const char *fps, const char *notice)
|
|||
if (PicoRead16Hook == PicoSVPRead16)
|
||||
memset32((int *)(PicoDraw2FB+328*8+328*223), 0xe0e0e0e0, 328);
|
||||
// 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))
|
||||
{
|
||||
|
@ -326,12 +326,12 @@ static void blit(const char *fps, const char *notice)
|
|||
if (!(PicoOpt&0x10)) {
|
||||
if (!(Pico.video.reg[1]&8)) {
|
||||
if (currentConfig.EmuOpt&0x80) {
|
||||
DrawLineDest = (unsigned short *) gp2x_screen + 320*8;
|
||||
DrawLineDest = (unsigned short *) g_screen_ptr + 320*8;
|
||||
} else {
|
||||
DrawLineDest = (unsigned char *) gp2x_screen + 320*8;
|
||||
DrawLineDest = (unsigned char *) g_screen_ptr + 320*8;
|
||||
}
|
||||
} else {
|
||||
DrawLineDest = gp2x_screen;
|
||||
DrawLineDest = g_screen_ptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -389,12 +389,12 @@ static void emu_msg_cb(const char *msg)
|
|||
// 8-bit renderers
|
||||
gp2x_memset_all_buffers(320*232, 0xe0, 320*8);
|
||||
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 {
|
||||
// 16bit accurate renderer
|
||||
gp2x_memset_all_buffers(320*232*2, 0, 320*8*2);
|
||||
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);
|
||||
noticeMsgTime.tv_sec -= 2;
|
||||
|
@ -521,7 +521,7 @@ static void RunEvents(unsigned int which)
|
|||
if (do_it) {
|
||||
osd_text(4, 232, (which & 0x1000) ? "LOADING GAME" : "SAVING GAME");
|
||||
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);
|
||||
PicoStateProgressCB = NULL;
|
||||
}
|
||||
|
@ -567,14 +567,10 @@ static void updateKeys(void)
|
|||
{
|
||||
unsigned int keys, keys2, allActions[2] = { 0, 0 }, events;
|
||||
static unsigned int prevEvents = 0;
|
||||
int joy, i;
|
||||
|
||||
keys = gp2x_joystick_read(0);
|
||||
if (keys & GP2X_SELECT) {
|
||||
if (keys & GP2X_SELECT)
|
||||
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;
|
||||
keys2 = keys;
|
||||
|
@ -612,22 +608,6 @@ static void updateKeys(void)
|
|||
}
|
||||
#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[1] = allActions[1] & 0xfff;
|
||||
|
||||
|
@ -736,7 +716,7 @@ void emu_forcedFrame(int opts)
|
|||
clearArea(1);
|
||||
} 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);
|
||||
gp2x_video_setpalette(localPal, 0x40);
|
||||
*/
|
||||
|
@ -799,11 +779,11 @@ static void tga_dump(void)
|
|||
#define CONV(X) (((X>>1)&0x7fe0)|(X&0x1f)) // 555?
|
||||
|
||||
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)
|
||||
{
|
||||
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);
|
||||
f = fopen(name, "wb");
|
||||
if (!f) { printf("!f\n"); exit(1); }
|
||||
|
|
28
gp2x/gp2x.c
28
gp2x/gp2x.c
|
@ -32,7 +32,6 @@
|
|||
#include <errno.h>
|
||||
|
||||
#include "gp2x.h"
|
||||
#include "../linux/usbjoy.h"
|
||||
#include "../linux/sndout_oss.h"
|
||||
#include "../common/arm_utils.h"
|
||||
#include "../common/arm_linux.h"
|
||||
|
@ -47,8 +46,6 @@ int memdev = 0;
|
|||
static int touchdev = -1;
|
||||
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_ADDR0 (0x4000000-FRAMEBUFF_WHOLESIZE)
|
||||
#define FRAMEBUFF_ADDR1 (FRAMEBUFF_ADDR0+0x30000)
|
||||
|
@ -72,7 +69,7 @@ void gp2x_video_flip(void)
|
|||
gp2x_memregs[0x2912>>1] = lsw;
|
||||
|
||||
// jump to other buffer:
|
||||
gp2x_screen = gp2x_screens[++screensel&3];
|
||||
g_screen_ptr = gp2x_screens[++screensel&3];
|
||||
}
|
||||
|
||||
/* doulblebuffered flip */
|
||||
|
@ -86,7 +83,7 @@ void gp2x_video_flip2(void)
|
|||
gp2x_memregs[0x2912>>1] = 0;
|
||||
|
||||
// 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)
|
||||
{
|
||||
// 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)
|
||||
{
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -318,7 +308,7 @@ void gp2x_init(void)
|
|||
gp2x_screens[0] = mmap(0, FRAMEBUFF_WHOLESIZE, PROT_WRITE, MAP_SHARED, memdev, FRAMEBUFF_ADDR0);
|
||||
if(gp2x_screens[0] == MAP_FAILED)
|
||||
{
|
||||
perror("mmap(gp2x_screen)");
|
||||
perror("mmap(g_screen_ptr)");
|
||||
exit(1);
|
||||
}
|
||||
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[3] = (char *) gp2x_screens[2]+0x30000;
|
||||
|
||||
gp2x_screen = gp2x_screens[0];
|
||||
g_screen_ptr = gp2x_screens[0];
|
||||
screensel = 0;
|
||||
|
||||
gp2x_screenaddr_old[0] = gp2x_memregs[0x290E>>1];
|
||||
|
@ -340,9 +330,6 @@ void gp2x_init(void)
|
|||
// snd
|
||||
sndout_oss_init();
|
||||
|
||||
/* init usb joys -GnoStiC */
|
||||
usbjoy_init();
|
||||
|
||||
// touchscreen
|
||||
touchdev = open("/dev/touchscreen/wm97xx", O_RDONLY);
|
||||
if (touchdev >= 0) {
|
||||
|
@ -381,7 +368,6 @@ void gp2x_deinit(void)
|
|||
if (touchdev >= 0) close(touchdev);
|
||||
|
||||
sndout_oss_exit();
|
||||
usbjoy_deinit();
|
||||
|
||||
printf("all done, running ");
|
||||
|
||||
|
|
|
@ -29,7 +29,6 @@ void Pause940(int yes);
|
|||
void Reset940(int yes, int bank);
|
||||
|
||||
|
||||
extern void *gp2x_screen;
|
||||
extern int memdev;
|
||||
|
||||
|
||||
|
|
11
gp2x/plat.c
11
gp2x/plat.c
|
@ -4,6 +4,7 @@
|
|||
#include "../common/plat.h"
|
||||
#include "../common/readpng.h"
|
||||
#include "../common/menu.h"
|
||||
#include "../common/emu.h"
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
// darken the active framebuffer
|
||||
memset(gp2x_screen, 0, 320*8*2);
|
||||
menu_darken_bg((char *)gp2x_screen + 320*8*2, 320*224, 1);
|
||||
memset((char *)gp2x_screen + 320*232*2, 0, 320*8*2);
|
||||
memset(g_screen_ptr, 0, 320*8*2);
|
||||
menu_darken_bg((char *)g_screen_ptr + 320*8*2, 320*224, 1);
|
||||
memset((char *)g_screen_ptr + 320*232*2, 0, 320*8*2);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 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
|
||||
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
|
||||
gp2x_video_changemode2(16);
|
||||
|
|
|
@ -8,6 +8,10 @@
|
|||
#define REDUCE_IO_CALLS 0
|
||||
#define SIMPLE_WRITE_SOUND 0
|
||||
|
||||
#define SCREEN_SIZE_FIXED 1
|
||||
#define SCREEN_WIDTH 320
|
||||
#define SCREEN_HEIGHT 240
|
||||
|
||||
// draw.c
|
||||
#define OVERRIDE_HIGHCOL 0
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue