mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
giz menu works
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@231 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
b39bf06ad7
commit
e5f426aa2e
35 changed files with 2507 additions and 432 deletions
11
Pico/Draw2.c
11
Pico/Draw2.c
|
@ -21,7 +21,6 @@
|
||||||
#define USE_CACHE
|
#define USE_CACHE
|
||||||
|
|
||||||
|
|
||||||
extern unsigned char *framebuff; // in format (8+320)x(8+224+8) (eights for borders)
|
|
||||||
int currpri = 0;
|
int currpri = 0;
|
||||||
|
|
||||||
static int HighCache2A[41*(TILE_ROWS+1)+1+1]; // caches for high layers
|
static int HighCache2A[41*(TILE_ROWS+1)+1+1]; // caches for high layers
|
||||||
|
@ -139,7 +138,7 @@ static void DrawWindowFull(int start, int end, int prio)
|
||||||
{
|
{
|
||||||
struct PicoVideo *pvid=&Pico.video;
|
struct PicoVideo *pvid=&Pico.video;
|
||||||
int nametab, nametab_step, trow, tilex, blank=-1, code;
|
int nametab, nametab_step, trow, tilex, blank=-1, code;
|
||||||
unsigned char *scrpos = framebuff;
|
unsigned char *scrpos = PicoDraw2FB;
|
||||||
int tile_start, tile_end; // in cells
|
int tile_start, tile_end; // in cells
|
||||||
|
|
||||||
// parse ranges
|
// parse ranges
|
||||||
|
@ -239,7 +238,7 @@ static void DrawLayerFull(int plane, int *hcache, int planestart, int planeend)
|
||||||
if (plane==0) nametab=(pvid->reg[2]&0x38)<< 9; // A
|
if (plane==0) nametab=(pvid->reg[2]&0x38)<< 9; // A
|
||||||
else nametab=(pvid->reg[4]&0x07)<<12; // B
|
else nametab=(pvid->reg[4]&0x07)<<12; // B
|
||||||
|
|
||||||
scrpos = framebuff;
|
scrpos = PicoDraw2FB;
|
||||||
scrpos+=8*328*(planestart-START_ROW);
|
scrpos+=8*328*(planestart-START_ROW);
|
||||||
|
|
||||||
// Get vertical scroll value:
|
// Get vertical scroll value:
|
||||||
|
@ -317,7 +316,7 @@ static void DrawTilesFromCacheF(int *hc)
|
||||||
// unsigned short *pal;
|
// unsigned short *pal;
|
||||||
unsigned char pal;
|
unsigned char pal;
|
||||||
short blank=-1; // The tile we know is blank
|
short blank=-1; // The tile we know is blank
|
||||||
unsigned char *scrpos = framebuff, *pd = 0;
|
unsigned char *scrpos = PicoDraw2FB, *pd = 0;
|
||||||
|
|
||||||
// *hcache++ = code|(dx<<16)|(trow<<27); // cache it
|
// *hcache++ = code|(dx<<16)|(trow<<27); // cache it
|
||||||
scrpos+=(*hc++)*328 - START_ROW*328*8;
|
scrpos+=(*hc++)*328 - START_ROW*328*8;
|
||||||
|
@ -380,7 +379,7 @@ static void DrawSpriteFull(unsigned int *sprite)
|
||||||
// goto first vertically visible tile
|
// goto first vertically visible tile
|
||||||
while(sy <= START_ROW*8) { sy+=8; tile+=tdeltay; height--; }
|
while(sy <= START_ROW*8) { sy+=8; tile+=tdeltay; height--; }
|
||||||
|
|
||||||
scrpos = framebuff;
|
scrpos = PicoDraw2FB;
|
||||||
scrpos+=(sy-START_ROW*8)*328;
|
scrpos+=(sy-START_ROW*8)*328;
|
||||||
|
|
||||||
for (; height > 0; height--, sy+=8, tile+=tdeltay)
|
for (; height > 0; height--, sy+=8, tile+=tdeltay)
|
||||||
|
@ -481,7 +480,7 @@ static void DrawAllSpritesFull(int prio, int maxwidth)
|
||||||
static void BackFillFull(int reg7)
|
static void BackFillFull(int reg7)
|
||||||
{
|
{
|
||||||
unsigned int back, i;
|
unsigned int back, i;
|
||||||
unsigned int *p=(unsigned int *)framebuff;
|
unsigned int *p=(unsigned int *)PicoDraw2FB;
|
||||||
|
|
||||||
// Start with a background color:
|
// Start with a background color:
|
||||||
// back=PicoCramHigh[reg7&0x3f];
|
// back=PicoCramHigh[reg7&0x3f];
|
||||||
|
|
12
Pico/Draw2.s
12
Pico/Draw2.s
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
|
|
||||||
.extern Pico
|
.extern Pico
|
||||||
.extern framebuff
|
.extern PicoDraw2FB
|
||||||
|
|
||||||
@ define these constants in your include file:
|
@ define these constants in your include file:
|
||||||
@ .equiv START_ROW, 1
|
@ .equiv START_ROW, 1
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
BackFillFull:
|
BackFillFull:
|
||||||
stmfd sp!, {r4-r9,lr}
|
stmfd sp!, {r4-r9,lr}
|
||||||
|
|
||||||
ldr lr, =framebuff @ lr=framebuff
|
ldr lr, =PicoDraw2FB @ lr=PicoDraw2FB
|
||||||
ldr lr, [lr]
|
ldr lr, [lr]
|
||||||
add lr, lr, #328*8
|
add lr, lr, #328*8
|
||||||
|
|
||||||
|
@ -394,7 +394,7 @@ DrawLayerFull:
|
||||||
and r4, r4, #7
|
and r4, r4, #7
|
||||||
orr lr, lr, r4, lsl #13 @ lr|=nametab_bits{3}<<13
|
orr lr, lr, r4, lsl #13 @ lr|=nametab_bits{3}<<13
|
||||||
|
|
||||||
ldr r11, =framebuff @ r11=framebuff
|
ldr r11, =PicoDraw2FB @ r11=PicoDraw2FB
|
||||||
ldr r11, [r11]
|
ldr r11, [r11]
|
||||||
sub r4, r9, #(START_ROW<<24)
|
sub r4, r9, #(START_ROW<<24)
|
||||||
mov r4, r4, asr #24
|
mov r4, r4, asr #24
|
||||||
|
@ -572,7 +572,7 @@ DrawTilesFromCacheF:
|
||||||
mov r9, #0xff000000 @ r9=prevcode=-1
|
mov r9, #0xff000000 @ r9=prevcode=-1
|
||||||
mvn r6, #0 @ r6=prevy=-1
|
mvn r6, #0 @ r6=prevy=-1
|
||||||
|
|
||||||
ldr r4, =framebuff @ r4=framebuff
|
ldr r4, =PicoDraw2FB @ r4=PicoDraw2FB
|
||||||
ldr r4, [r4]
|
ldr r4, [r4]
|
||||||
ldr r1, [r0], #4 @ read y offset
|
ldr r1, [r0], #4 @ read y offset
|
||||||
mov r7, #328
|
mov r7, #328
|
||||||
|
@ -696,7 +696,7 @@ DrawWindowFull:
|
||||||
|
|
||||||
mov r9, #0xff000000 @ r9=prevcode=-1
|
mov r9, #0xff000000 @ r9=prevcode=-1
|
||||||
|
|
||||||
ldr r11, =framebuff @ r11=scrpos
|
ldr r11, =PicoDraw2FB @ r11=scrpos
|
||||||
ldr r11, [r11]
|
ldr r11, [r11]
|
||||||
add r11, r11, #328*8
|
add r11, r11, #328*8
|
||||||
add r11, r11, #8
|
add r11, r11, #8
|
||||||
|
@ -896,7 +896,7 @@ DrawSpriteFull:
|
||||||
|
|
||||||
ldr r10, =(Pico+0x10000) @ r10=Pico.vram
|
ldr r10, =(Pico+0x10000) @ r10=Pico.vram
|
||||||
|
|
||||||
ldr r11, =framebuff @ r11=scrpos
|
ldr r11, =PicoDraw2FB @ r11=scrpos
|
||||||
ldr r11, [r11]
|
ldr r11, [r11]
|
||||||
sub r1, r12, #(START_ROW*8)
|
sub r1, r12, #(START_ROW*8)
|
||||||
mov r0, #328
|
mov r0, #328
|
||||||
|
|
|
@ -118,6 +118,7 @@ void *blockcpy(void *dst, const void *src, size_t n);
|
||||||
|
|
||||||
// Draw2.c
|
// Draw2.c
|
||||||
// stuff below is optional
|
// stuff below is optional
|
||||||
|
extern unsigned char *PicoDraw2FB; // buffer for fasr renderer in format (8+320)x(8+224+8) (eights for borders)
|
||||||
extern unsigned short *PicoCramHigh; // pointer to CRAM buff (0x40 shorts), converted to native device color (works only with 16bit for now)
|
extern unsigned short *PicoCramHigh; // pointer to CRAM buff (0x40 shorts), converted to native device color (works only with 16bit for now)
|
||||||
extern void (*PicoPrepareCram)(); // prepares PicoCramHigh for renderer to use
|
extern void (*PicoPrepareCram)(); // prepares PicoCramHigh for renderer to use
|
||||||
|
|
||||||
|
|
|
@ -316,6 +316,7 @@ PICO_INTERNAL int CheckDMA(void);
|
||||||
|
|
||||||
// cd/Pico.c
|
// cd/Pico.c
|
||||||
PICO_INTERNAL int PicoInitMCD(void);
|
PICO_INTERNAL int PicoInitMCD(void);
|
||||||
|
PICO_INTERNAL void PicoExitMCD(void);
|
||||||
PICO_INTERNAL int PicoResetMCD(int hard);
|
PICO_INTERNAL int PicoResetMCD(int hard);
|
||||||
PICO_INTERNAL int PicoFrameMCD(void);
|
PICO_INTERNAL int PicoFrameMCD(void);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// Some misc stuff
|
// Some misc stuff
|
||||||
// (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
// (c) Copyright 2007, Grazvydas "notaz" Ignotas
|
||||||
|
|
||||||
|
#include "../PicoInt.h"
|
||||||
|
|
||||||
unsigned char formatted_bram[4*0x10] =
|
unsigned char formatted_bram[4*0x10] =
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,8 +21,11 @@
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if DRZ80_FOR_PICODRIVE
|
.if DRZ80_FOR_PICODRIVE
|
||||||
|
.include "port_config.s"
|
||||||
.extern YM2612Read_
|
.extern YM2612Read_
|
||||||
|
.if EXTERNAL_YM2612
|
||||||
.extern YM2612Read_940
|
.extern YM2612Read_940
|
||||||
|
.endif
|
||||||
.extern PicoRead8
|
.extern PicoRead8
|
||||||
.extern Pico
|
.extern Pico
|
||||||
.extern z80_write
|
.extern z80_write
|
||||||
|
@ -106,7 +109,6 @@ DrZ80Ver: .long 0x0001
|
||||||
.text
|
.text
|
||||||
|
|
||||||
.if DRZ80_FOR_PICODRIVE
|
.if DRZ80_FOR_PICODRIVE
|
||||||
.include "port_config.s"
|
|
||||||
|
|
||||||
.macro YM2612Read_and_ret8
|
.macro YM2612Read_and_ret8
|
||||||
stmfd sp!,{r3,r12,lr}
|
stmfd sp!,{r3,r12,lr}
|
||||||
|
|
6
platform/common/lprintf.h
Normal file
6
platform/common/lprintf.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#if defined(__GP2X__)
|
||||||
|
#define lprintf printf
|
||||||
|
#else
|
||||||
|
#include "giz.h"
|
||||||
|
#endif
|
||||||
|
|
314
platform/common/menu.c
Normal file
314
platform/common/menu.c
Normal file
|
@ -0,0 +1,314 @@
|
||||||
|
// (c) Copyright 2006,2007 notaz, All rights reserved.
|
||||||
|
// Free for non-commercial use.
|
||||||
|
|
||||||
|
// For commercial use, separate licencing terms must be obtained.
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "menu.h"
|
||||||
|
#include "fonts.h"
|
||||||
|
#include "readpng.h"
|
||||||
|
#include "lprintf.h"
|
||||||
|
|
||||||
|
#if defined(__GP2X__)
|
||||||
|
#include "../gp2x/gp2x.h"
|
||||||
|
#define SCREEN_WIDTH 320
|
||||||
|
#define SCREEN_BUFFER gp2x_screen
|
||||||
|
#elif defined(__GIZ__)
|
||||||
|
#include "../gizmondo/giz.h"
|
||||||
|
#define SCREEN_WIDTH 321
|
||||||
|
#define SCREEN_BUFFER giz_screen
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static unsigned char menu_font_data[10240];
|
||||||
|
static int menu_text_color = 0xffff; // default to white
|
||||||
|
static int menu_sel_color = -1; // disabled
|
||||||
|
|
||||||
|
// draws text to current bbp16 screen
|
||||||
|
static void text_out16_(int x, int y, const char *text, int color)
|
||||||
|
{
|
||||||
|
int i, l, u, tr, tg, tb, len;
|
||||||
|
unsigned short *dest = (unsigned short *)SCREEN_BUFFER + x + y*SCREEN_WIDTH;
|
||||||
|
tr = (color & 0xf800) >> 8;
|
||||||
|
tg = (color & 0x07e0) >> 3;
|
||||||
|
tb = (color & 0x001f) << 3;
|
||||||
|
|
||||||
|
if (text == (void *)1)
|
||||||
|
{
|
||||||
|
// selector symbol
|
||||||
|
text = "";
|
||||||
|
len = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
len = strlen(text);
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
unsigned char *src = menu_font_data + (unsigned int)text[i]*4*10;
|
||||||
|
unsigned short *dst = dest;
|
||||||
|
for (l = 0; l < 10; l++, dst += SCREEN_WIDTH-8)
|
||||||
|
{
|
||||||
|
for (u = 8/2; u > 0; u--, src++)
|
||||||
|
{
|
||||||
|
int c, r, g, b;
|
||||||
|
c = *src >> 4;
|
||||||
|
r = (*dst & 0xf800) >> 8;
|
||||||
|
g = (*dst & 0x07e0) >> 3;
|
||||||
|
b = (*dst & 0x001f) << 3;
|
||||||
|
r = (c^0xf)*r/15 + c*tr/15;
|
||||||
|
g = (c^0xf)*g/15 + c*tg/15;
|
||||||
|
b = (c^0xf)*b/15 + c*tb/15;
|
||||||
|
*dst++ = ((r<<8)&0xf800) | ((g<<3)&0x07e0) | (b>>3);
|
||||||
|
c = *src & 0xf;
|
||||||
|
r = (*dst & 0xf800) >> 8;
|
||||||
|
g = (*dst & 0x07e0) >> 3;
|
||||||
|
b = (*dst & 0x001f) << 3;
|
||||||
|
r = (c^0xf)*r/15 + c*tr/15;
|
||||||
|
g = (c^0xf)*g/15 + c*tg/15;
|
||||||
|
b = (c^0xf)*b/15 + c*tb/15;
|
||||||
|
*dst++ = ((r<<8)&0xf800) | ((g<<3)&0x07e0) | (b>>3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dest += 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void text_out16(int x, int y, const char *texto, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
char buffer[512];
|
||||||
|
|
||||||
|
va_start(args,texto);
|
||||||
|
vsprintf(buffer,texto,args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
text_out16_(x,y,buffer,menu_text_color);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void smalltext_out16(int x, int y, const char *texto, int color)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
unsigned char *src;
|
||||||
|
unsigned short *dst;
|
||||||
|
|
||||||
|
for (i = 0;; i++, x += 6)
|
||||||
|
{
|
||||||
|
unsigned char c = (unsigned char) texto[i];
|
||||||
|
int h = 8;
|
||||||
|
|
||||||
|
if (!c) break;
|
||||||
|
|
||||||
|
src = fontdata6x8[c];
|
||||||
|
dst = (unsigned short *)SCREEN_BUFFER + x + y*SCREEN_WIDTH;
|
||||||
|
|
||||||
|
while (h--)
|
||||||
|
{
|
||||||
|
int w = 0x20;
|
||||||
|
while (w)
|
||||||
|
{
|
||||||
|
if( *src & w ) *dst = color;
|
||||||
|
dst++;
|
||||||
|
w>>=1;
|
||||||
|
}
|
||||||
|
src++;
|
||||||
|
|
||||||
|
dst += SCREEN_WIDTH-6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void smalltext_out16_lim(int x, int y, const char *texto, int color, int max)
|
||||||
|
{
|
||||||
|
char buffer[SCREEN_WIDTH/6+1];
|
||||||
|
|
||||||
|
strncpy(buffer, texto, SCREEN_WIDTH/6);
|
||||||
|
if (max > SCREEN_WIDTH/6) max = SCREEN_WIDTH/6;
|
||||||
|
if (max < 0) max = 0;
|
||||||
|
buffer[max] = 0;
|
||||||
|
|
||||||
|
smalltext_out16(x, y, buffer, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_draw_selection(int x, int y, int w)
|
||||||
|
{
|
||||||
|
int i, h;
|
||||||
|
unsigned short *dst, *dest;
|
||||||
|
|
||||||
|
text_out16_(x, y, (void *)1, (menu_sel_color < 0) ? menu_text_color : menu_sel_color);
|
||||||
|
|
||||||
|
if (menu_sel_color < 0) return; // no selection hilight
|
||||||
|
|
||||||
|
if (y > 0) y--;
|
||||||
|
dest = (unsigned short *)SCREEN_BUFFER + x + y*SCREEN_WIDTH + 14;
|
||||||
|
for (h = 11; h > 0; h--)
|
||||||
|
{
|
||||||
|
dst = dest;
|
||||||
|
for (i = w; i > 0; i--)
|
||||||
|
*dst++ = menu_sel_color;
|
||||||
|
dest += SCREEN_WIDTH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int parse_hex_color(char *buff)
|
||||||
|
{
|
||||||
|
char *endp = buff;
|
||||||
|
int t = (int) strtoul(buff, &endp, 16);
|
||||||
|
if (endp != buff) return ((t>>8)&0xf800) | ((t>>5)&0x07e0) | ((t>>3)&0x1f);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_init(void)
|
||||||
|
{
|
||||||
|
int c, l;
|
||||||
|
unsigned char *fd = menu_font_data;
|
||||||
|
char buff[256];
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
// generate default font from fontdata8x8
|
||||||
|
memset(menu_font_data, 0, sizeof(menu_font_data));
|
||||||
|
for (c = 0; c < 256; c++)
|
||||||
|
{
|
||||||
|
for (l = 0; l < 8; l++)
|
||||||
|
{
|
||||||
|
unsigned char fd8x8 = fontdata8x8[c*8+l];
|
||||||
|
if (fd8x8&0x80) *fd |= 0xf0;
|
||||||
|
if (fd8x8&0x40) *fd |= 0x0f; fd++;
|
||||||
|
if (fd8x8&0x20) *fd |= 0xf0;
|
||||||
|
if (fd8x8&0x10) *fd |= 0x0f; fd++;
|
||||||
|
if (fd8x8&0x08) *fd |= 0xf0;
|
||||||
|
if (fd8x8&0x04) *fd |= 0x0f; fd++;
|
||||||
|
if (fd8x8&0x02) *fd |= 0xf0;
|
||||||
|
if (fd8x8&0x01) *fd |= 0x0f; fd++;
|
||||||
|
}
|
||||||
|
fd += 8*2/2; // 2 empty lines
|
||||||
|
}
|
||||||
|
|
||||||
|
// load custom font and selector (stored as 1st symbol in font table)
|
||||||
|
readpng(menu_font_data, "skin/font.png", READPNG_FONT);
|
||||||
|
memcpy(menu_font_data, menu_font_data + ((int)'>')*4*10, 4*10); // default selector symbol is '>'
|
||||||
|
readpng(menu_font_data, "skin/selector.png", READPNG_SELECTOR);
|
||||||
|
|
||||||
|
// load custom colors
|
||||||
|
f = fopen("skin/skin.txt", "r");
|
||||||
|
if (f != NULL)
|
||||||
|
{
|
||||||
|
lprintf("found skin.txt\n");
|
||||||
|
while (!feof(f))
|
||||||
|
{
|
||||||
|
fgets(buff, sizeof(buff), f);
|
||||||
|
if (buff[0] == '#' || buff[0] == '/') continue; // comment
|
||||||
|
if (buff[0] == '\r' || buff[0] == '\n') continue; // empty line
|
||||||
|
if (strncmp(buff, "text_color=", 11) == 0)
|
||||||
|
{
|
||||||
|
int tmp = parse_hex_color(buff+11);
|
||||||
|
if (tmp >= 0) menu_text_color = tmp;
|
||||||
|
else lprintf("skin.txt: parse error for text_color\n");
|
||||||
|
}
|
||||||
|
else if (strncmp(buff, "selection_color=", 16) == 0)
|
||||||
|
{
|
||||||
|
int tmp = parse_hex_color(buff+16);
|
||||||
|
if (tmp >= 0) menu_sel_color = tmp;
|
||||||
|
else lprintf("skin.txt: parse error for selection_color\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lprintf("skin.txt: parse error: %s\n", buff);
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int me_id2offset(const menu_entry *entries, int count, menu_id id)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
if (entries[i].id == id) return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
lprintf("%s: id %i not found\n", __FUNCTION__, id);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void me_enable(menu_entry *entries, int count, menu_id id, int enable)
|
||||||
|
{
|
||||||
|
int i = me_id2offset(entries, count, id);
|
||||||
|
entries[i].enabled = enable;
|
||||||
|
}
|
||||||
|
|
||||||
|
int me_count_enabled(const menu_entry *entries, int count)
|
||||||
|
{
|
||||||
|
int i, ret = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
if (entries[i].enabled) ret++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_id me_index2id(const menu_entry *entries, int count, int index)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
if (entries[i].enabled)
|
||||||
|
{
|
||||||
|
if (index == 0) break;
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i >= count) i = count - 1;
|
||||||
|
return entries[i].id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void me_draw(const menu_entry *entries, int count, int x, int y, me_draw_custom_f *cust_draw, void *param)
|
||||||
|
{
|
||||||
|
int i, y1 = y;
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
if (!entries[i].enabled) continue;
|
||||||
|
if (entries[i].name == NULL)
|
||||||
|
{
|
||||||
|
if (cust_draw != NULL)
|
||||||
|
cust_draw(&entries[i], x, y1, param);
|
||||||
|
y1 += 10;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
text_out16(x, y1, entries[i].name);
|
||||||
|
if (entries[i].beh == MB_ONOFF)
|
||||||
|
text_out16(x + 27*8, y1, (*(int *)entries[i].var & entries[i].mask) ? "ON" : "OFF");
|
||||||
|
else if (entries[i].beh == MB_RANGE)
|
||||||
|
text_out16(x + 27*8, y1, "%i", *(int *)entries[i].var);
|
||||||
|
y1 += 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int me_process(menu_entry *entries, int count, menu_id id, int is_next)
|
||||||
|
{
|
||||||
|
int i = me_id2offset(entries, count, id);
|
||||||
|
menu_entry *entry = &entries[i];
|
||||||
|
switch (entry->beh)
|
||||||
|
{
|
||||||
|
case MB_ONOFF:
|
||||||
|
*(int *)entry->var ^= entry->mask;
|
||||||
|
return 1;
|
||||||
|
case MB_RANGE:
|
||||||
|
*(int *)entry->var += is_next ? 1 : -1;
|
||||||
|
if (*(int *)entry->var < (int)entry->min) *(int *)entry->var = (int)entry->min;
|
||||||
|
if (*(int *)entry->var > (int)entry->max) *(int *)entry->var = (int)entry->max;
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
98
platform/common/menu.h
Normal file
98
platform/common/menu.h
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
// (c) Copyright 2006,2007 notaz, All rights reserved.
|
||||||
|
|
||||||
|
|
||||||
|
void menu_init(void);
|
||||||
|
void text_out16(int x, int y, const char *texto, ...);
|
||||||
|
void smalltext_out16(int x, int y, const char *texto, int color);
|
||||||
|
void smalltext_out16_lim(int x, int y, const char *texto, int color, int max);
|
||||||
|
void menu_draw_selection(int x, int y, int w);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
MB_NONE = 1, /* no auto processing */
|
||||||
|
MB_ONOFF, /* ON/OFF setting */
|
||||||
|
MB_RANGE, /* [min-max] setting */
|
||||||
|
} menu_behavior;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
MA_NONE = 1,
|
||||||
|
MA_MAIN_RESUME_GAME,
|
||||||
|
MA_MAIN_SAVE_STATE,
|
||||||
|
MA_MAIN_LOAD_STATE,
|
||||||
|
MA_MAIN_RESET_GAME,
|
||||||
|
MA_MAIN_LOAD_ROM,
|
||||||
|
MA_MAIN_OPTIONS,
|
||||||
|
MA_MAIN_CONTROLS,
|
||||||
|
MA_MAIN_CREDITS,
|
||||||
|
MA_MAIN_PATCHES,
|
||||||
|
MA_MAIN_EXIT,
|
||||||
|
MA_OPT_RENDERER,
|
||||||
|
MA_OPT_SCALING,
|
||||||
|
MA_OPT_ACC_TIMING,
|
||||||
|
MA_OPT_ACC_SPRITES,
|
||||||
|
MA_OPT_SHOW_FPS,
|
||||||
|
MA_OPT_FRAMESKIP,
|
||||||
|
MA_OPT_ENABLE_SOUND,
|
||||||
|
MA_OPT_SOUND_QUALITY,
|
||||||
|
MA_OPT_ARM940_SOUND,
|
||||||
|
MA_OPT_6BUTTON_PAD,
|
||||||
|
MA_OPT_REGION,
|
||||||
|
MA_OPT_SRAM_STATES,
|
||||||
|
MA_OPT_CONFIRM_STATES,
|
||||||
|
MA_OPT_SAVE_SLOT,
|
||||||
|
MA_OPT_CPU_CLOCKS,
|
||||||
|
MA_OPT_SCD_OPTS,
|
||||||
|
MA_OPT_ADV_OPTS,
|
||||||
|
MA_OPT_SAVECFG,
|
||||||
|
MA_OPT_SAVECFG_GAME,
|
||||||
|
MA_OPT_LOADCFG,
|
||||||
|
MA_OPT2_GAMMA,
|
||||||
|
MA_OPT2_A_SN_GAMMA,
|
||||||
|
MA_OPT2_VSYNC,
|
||||||
|
MA_OPT2_ENABLE_Z80,
|
||||||
|
MA_OPT2_ENABLE_YM2612,
|
||||||
|
MA_OPT2_ENABLE_SN76496,
|
||||||
|
MA_OPT2_GZIP_STATES,
|
||||||
|
MA_OPT2_NO_LAST_ROM,
|
||||||
|
MA_OPT2_RAMTIMINGS,
|
||||||
|
MA_OPT2_SQUIDGEHACK,
|
||||||
|
MA_OPT2_DONE,
|
||||||
|
MA_CDOPT_TESTBIOS_USA,
|
||||||
|
MA_CDOPT_TESTBIOS_EUR,
|
||||||
|
MA_CDOPT_TESTBIOS_JAP,
|
||||||
|
MA_CDOPT_LEDS,
|
||||||
|
MA_CDOPT_CDDA,
|
||||||
|
MA_CDOPT_PCM,
|
||||||
|
MA_CDOPT_READAHEAD,
|
||||||
|
MA_CDOPT_SAVERAM,
|
||||||
|
MA_CDOPT_SCALEROT_CHIP,
|
||||||
|
MA_CDOPT_BETTER_SYNC,
|
||||||
|
MA_CDOPT_DONE,
|
||||||
|
} menu_id;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
menu_behavior beh;
|
||||||
|
menu_id id;
|
||||||
|
void *var; /* for on-off settings */
|
||||||
|
int mask;
|
||||||
|
signed char min; /* for ranged integer settings, to be sign-extended */
|
||||||
|
signed char max;
|
||||||
|
char enabled;
|
||||||
|
} menu_entry;
|
||||||
|
|
||||||
|
|
||||||
|
typedef void (me_draw_custom_f)(const menu_entry *entry, int x, int y, void *param);
|
||||||
|
|
||||||
|
int me_id2offset(const menu_entry *entries, int count, menu_id id);
|
||||||
|
void me_enable(menu_entry *entries, int count, menu_id id, int enable);
|
||||||
|
int me_count_enabled(const menu_entry *entries, int count);
|
||||||
|
menu_id me_index2id(const menu_entry *entries, int count, int index);
|
||||||
|
void me_draw(const menu_entry *entries, int count, int x, int y, me_draw_custom_f *cust_draw, void *param);
|
||||||
|
int me_process(menu_entry *entries, int count, menu_id id, int is_next);
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <png.h>
|
#include <png.h>
|
||||||
#include "readpng.h"
|
#include "readpng.h"
|
||||||
|
#include "lprintf.h"
|
||||||
|
|
||||||
void readpng(void *dest, const char *fname, readpng_what what)
|
void readpng(void *dest, const char *fname, readpng_what what)
|
||||||
{
|
{
|
||||||
|
@ -18,14 +19,14 @@ void readpng(void *dest, const char *fname, readpng_what what)
|
||||||
fp = fopen(fname, "rb");
|
fp = fopen(fname, "rb");
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
{
|
{
|
||||||
printf(__FILE__ ": failed to open: %s\n", fname);
|
lprintf(__FILE__ ": failed to open: %s\n", fname);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
||||||
if (!png_ptr)
|
if (!png_ptr)
|
||||||
{
|
{
|
||||||
printf(__FILE__ ": png_create_read_struct() failed\n");
|
lprintf(__FILE__ ": png_create_read_struct() failed\n");
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -33,7 +34,7 @@ void readpng(void *dest, const char *fname, readpng_what what)
|
||||||
info_ptr = png_create_info_struct(png_ptr);
|
info_ptr = png_create_info_struct(png_ptr);
|
||||||
if (!info_ptr)
|
if (!info_ptr)
|
||||||
{
|
{
|
||||||
printf(__FILE__ ": png_create_info_struct() failed\n");
|
lprintf(__FILE__ ": png_create_info_struct() failed\n");
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,11 +44,11 @@ void readpng(void *dest, const char *fname, readpng_what what)
|
||||||
row_ptr = png_get_rows(png_ptr, info_ptr);
|
row_ptr = png_get_rows(png_ptr, info_ptr);
|
||||||
if (row_ptr == NULL)
|
if (row_ptr == NULL)
|
||||||
{
|
{
|
||||||
printf(__FILE__ ": png_get_rows() failed\n");
|
lprintf(__FILE__ ": png_get_rows() failed\n");
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
// printf("%s: %ix%i @ %ibpp\n", fname, (int)info_ptr->width, (int)info_ptr->height, info_ptr->pixel_depth);
|
// lprintf("%s: %ix%i @ %ibpp\n", fname, (int)info_ptr->width, (int)info_ptr->height, info_ptr->pixel_depth);
|
||||||
|
|
||||||
switch (what)
|
switch (what)
|
||||||
{
|
{
|
||||||
|
@ -57,7 +58,7 @@ void readpng(void *dest, const char *fname, readpng_what what)
|
||||||
unsigned short *dst = dest;
|
unsigned short *dst = dest;
|
||||||
if (info_ptr->pixel_depth != 24)
|
if (info_ptr->pixel_depth != 24)
|
||||||
{
|
{
|
||||||
printf(__FILE__ ": bg image uses %ibpp, needed 24bpp\n", info_ptr->pixel_depth);
|
lprintf(__FILE__ ": bg image uses %ibpp, needed 24bpp\n", info_ptr->pixel_depth);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
height = info_ptr->height;
|
height = info_ptr->height;
|
||||||
|
@ -85,13 +86,13 @@ void readpng(void *dest, const char *fname, readpng_what what)
|
||||||
unsigned char *dst = dest;
|
unsigned char *dst = dest;
|
||||||
if (info_ptr->width != 128 || info_ptr->height != 160)
|
if (info_ptr->width != 128 || info_ptr->height != 160)
|
||||||
{
|
{
|
||||||
printf(__FILE__ ": unexpected font image size %ix%i, needed 128x160\n",
|
lprintf(__FILE__ ": unexpected font image size %ix%i, needed 128x160\n",
|
||||||
(int)info_ptr->width, (int)info_ptr->height);
|
(int)info_ptr->width, (int)info_ptr->height);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (info_ptr->pixel_depth != 8)
|
if (info_ptr->pixel_depth != 8)
|
||||||
{
|
{
|
||||||
printf(__FILE__ ": font image uses %ibpp, needed 8bpp\n", info_ptr->pixel_depth);
|
lprintf(__FILE__ ": font image uses %ibpp, needed 8bpp\n", info_ptr->pixel_depth);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for (y = 0; y < 16; y++)
|
for (y = 0; y < 16; y++)
|
||||||
|
@ -115,13 +116,13 @@ void readpng(void *dest, const char *fname, readpng_what what)
|
||||||
unsigned char *dst = dest;
|
unsigned char *dst = dest;
|
||||||
if (info_ptr->width != 8 || info_ptr->height != 10)
|
if (info_ptr->width != 8 || info_ptr->height != 10)
|
||||||
{
|
{
|
||||||
printf(__FILE__ ": unexpected selector image size %ix%i, needed 8x10\n",
|
lprintf(__FILE__ ": unexpected selector image size %ix%i, needed 8x10\n",
|
||||||
(int)info_ptr->width, (int)info_ptr->height);
|
(int)info_ptr->width, (int)info_ptr->height);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (info_ptr->pixel_depth != 8)
|
if (info_ptr->pixel_depth != 8)
|
||||||
{
|
{
|
||||||
printf(__FILE__ ": selector image uses %ibpp, needed 8bpp\n", info_ptr->pixel_depth);
|
lprintf(__FILE__ ": selector image uses %ibpp, needed 8bpp\n", info_ptr->pixel_depth);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for (y1 = 0; y1 < 10; y1++)
|
for (y1 = 0; y1 < 10; y1++)
|
173
platform/gizmondo/Makefile
Normal file
173
platform/gizmondo/Makefile
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
|
||||||
|
# you may or may not need to change this
|
||||||
|
CROSS = /opt/cegcc/arm-wince-cegcc/bin/
|
||||||
|
|
||||||
|
# settings
|
||||||
|
asm_memory = 1
|
||||||
|
asm_render = 1
|
||||||
|
asm_ym2612 = 1
|
||||||
|
asm_misc = 1
|
||||||
|
asm_cdpico = 1
|
||||||
|
asm_cdmemory = 1
|
||||||
|
amalgamate = 0
|
||||||
|
#profile = 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DEFINC = -I../.. -I. -D__GIZ__ -D_UNZIP_SUPPORT
|
||||||
|
COPT_COMMON = -static -Wall -O2 -ftracer -fstrength-reduce -fomit-frame-pointer -fstrict-aliasing -ffast-math
|
||||||
|
ifeq "$(profile)" "1"
|
||||||
|
COPT_COMMON += -fprofile-generate
|
||||||
|
endif
|
||||||
|
ifeq "$(profile)" "2"
|
||||||
|
COPT_COMMON += -fprofile-use
|
||||||
|
endif
|
||||||
|
COPT = $(COPT_COMMON) -mtune=arm920t
|
||||||
|
ASFLAGS = -mcpu=arm920t -mfloat-abi=soft
|
||||||
|
GCC = $(CROSS)gcc
|
||||||
|
STRIP = $(CROSS)strip
|
||||||
|
AS = $(CROSS)as
|
||||||
|
LD = $(CROSS)ld
|
||||||
|
|
||||||
|
# frontend
|
||||||
|
OBJS += main.o menu.o giz.o emu.o
|
||||||
|
|
||||||
|
# common
|
||||||
|
OBJS += ../common/menu.o ../common/fonts.o ../common/arm_utils.o ../common/readpng.o
|
||||||
|
|
||||||
|
# Pico
|
||||||
|
ifeq "$(amalgamate)" "1"
|
||||||
|
OBJS += ../../PicoAll.o
|
||||||
|
else
|
||||||
|
OBJS += ../../Pico/Area.o ../../Pico/Cart.o ../../Pico/Memory.o ../../Pico/Misc.o \
|
||||||
|
../../Pico/Pico.o ../../Pico/Sek.o ../../Pico/VideoPort.o ../../Pico/Draw2.o ../../Pico/Draw.o \
|
||||||
|
../../Pico/Patch.o
|
||||||
|
# Pico - CD
|
||||||
|
OBJS += ../../Pico/cd/Pico.o ../../Pico/cd/Memory.o ../../Pico/cd/Sek.o ../../Pico/cd/LC89510.o \
|
||||||
|
../../Pico/cd/cd_sys.o ../../Pico/cd/cd_file.o ../../Pico/cd/gfx_cd.o \
|
||||||
|
../../Pico/cd/Area.o ../../Pico/cd/Misc.o ../../Pico/cd/pcm.o ../../Pico/cd/buffering.o
|
||||||
|
endif
|
||||||
|
|
||||||
|
# asm stuff
|
||||||
|
ifeq "$(asm_render)" "1"
|
||||||
|
DEFINC += -D_ASM_DRAW_C
|
||||||
|
OBJS += ../../Pico/draw_asm.o ../../Pico/draw2_asm.o
|
||||||
|
endif
|
||||||
|
ifeq "$(asm_memory)" "1"
|
||||||
|
DEFINC += -D_ASM_MEMORY_C
|
||||||
|
OBJS += ../../Pico/memory_asm.o
|
||||||
|
endif
|
||||||
|
ifeq "$(asm_ym2612)" "1"
|
||||||
|
DEFINC += -D_ASM_YM2612_C
|
||||||
|
OBJS += ../../Pico/sound/ym2612_asm.o
|
||||||
|
endif
|
||||||
|
ifeq "$(asm_misc)" "1"
|
||||||
|
DEFINC += -D_ASM_MISC_C
|
||||||
|
OBJS += ../../Pico/misc_asm.o
|
||||||
|
OBJS += ../../Pico/cd/misc_asm.o
|
||||||
|
endif
|
||||||
|
ifeq "$(asm_cdpico)" "1"
|
||||||
|
DEFINC += -D_ASM_CD_PICO_C
|
||||||
|
OBJS += ../../Pico/cd/pico_asm.o
|
||||||
|
endif
|
||||||
|
ifeq "$(asm_cdmemory)" "1"
|
||||||
|
DEFINC += -D_ASM_CD_MEMORY_C
|
||||||
|
OBJS += ../../Pico/cd/memory_asm.o
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Pico - sound
|
||||||
|
ifneq "$(amalgamate)" "1"
|
||||||
|
OBJS += ../../Pico/sound/sound.o
|
||||||
|
endif
|
||||||
|
OBJS += ../../Pico/sound/mix_asm.o
|
||||||
|
OBJS += ../../Pico/sound/sn76496.o ../../Pico/sound/ym2612.o
|
||||||
|
# zlib
|
||||||
|
OBJS += ../../zlib/gzio.o ../../zlib/inffast.o ../../zlib/inflate.o ../../zlib/inftrees.o ../../zlib/trees.o \
|
||||||
|
../../zlib/deflate.o ../../zlib/crc32.o ../../zlib/adler32.o ../../zlib/zutil.o ../../zlib/compress.o
|
||||||
|
# unzip
|
||||||
|
OBJS += ../../unzip/unzip.o ../../unzip/unzip_stream.o
|
||||||
|
# mp3
|
||||||
|
OBJS += mp3.o
|
||||||
|
# CPU cores
|
||||||
|
# Cyclone
|
||||||
|
DEFINC += -DEMU_C68K
|
||||||
|
OBJS += ../../cpu/Cyclone/proj/Cyclone.o
|
||||||
|
# drz80
|
||||||
|
DEFINC += -D_USE_DRZ80
|
||||||
|
OBJS += ../../cpu/DrZ80/drz80.o
|
||||||
|
|
||||||
|
|
||||||
|
all: PicoDrive.exe
|
||||||
|
|
||||||
|
PicoDrive.exe : $(OBJS)
|
||||||
|
@echo $@
|
||||||
|
@$(GCC) -o $@ $(COPT) $^ -lm -lpng -Lkgsdk/ -lKGSDK -Wl,-Map=PicoDrive.map
|
||||||
|
ifeq ($(DEBUG),)
|
||||||
|
@$(STRIP) $@
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
@echo $<
|
||||||
|
@$(GCC) $(COPT) $(DEFINC) -c $< -o $@
|
||||||
|
#.s.o:
|
||||||
|
# @echo $<
|
||||||
|
# $(GCC) $(COPT) $(DEFINC) -c $< -o $@
|
||||||
|
|
||||||
|
../../Pico/draw_asm.o : ../../Pico/Draw.s
|
||||||
|
@echo $<
|
||||||
|
@$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
../../Pico/draw2_asm.o : ../../Pico/Draw2.s
|
||||||
|
@echo $<
|
||||||
|
@$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
../../Pico/memory_asm.o : ../../Pico/Memory.s
|
||||||
|
@echo $<
|
||||||
|
@$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
../../Pico/sound/ym2612_asm.o : ../../Pico/sound/ym2612.s
|
||||||
|
@echo $<
|
||||||
|
@$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
../../Pico/sound/mix_asm.o : ../../Pico/sound/mix.s
|
||||||
|
@echo $<
|
||||||
|
@$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
../../Pico/misc_asm.o : ../../Pico/misc.s
|
||||||
|
@echo $<
|
||||||
|
@$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
../../Pico/cd/pico_asm.o : ../../Pico/cd/Pico.s
|
||||||
|
@echo $<
|
||||||
|
@$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
../../Pico/cd/memory_asm.o : ../../Pico/cd/Memory.s
|
||||||
|
@echo $<
|
||||||
|
@$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
../../Pico/cd/misc_asm.o : ../../Pico/cd/misc.s
|
||||||
|
@echo $<
|
||||||
|
@$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
|
||||||
|
# build Cyclone
|
||||||
|
../../cpu/Cyclone/proj/Cyclone.s :
|
||||||
|
@echo building Cyclone...
|
||||||
|
@make -C ../../cpu/Cyclone/proj CONFIG_FILE=config_pico.h
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# cleanup
|
||||||
|
clean: tidy
|
||||||
|
@$(RM) PicoDrive.exe
|
||||||
|
tidy:
|
||||||
|
@$(RM) $(OBJS)
|
||||||
|
|
||||||
|
|
||||||
|
clean_prof:
|
||||||
|
find ../.. -name '*.gcno' -delete
|
||||||
|
find ../.. -name '*.gcda' -delete
|
||||||
|
|
||||||
|
# ----------- release -----------
|
||||||
|
ifneq ($(findstring rel,$(MAKECMDGOALS)),)
|
||||||
|
ifeq ($(VER),)
|
||||||
|
$(error need VER)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
rel: PicoDrive.exe kgsdk/ARMV4IRel/KGSDK.dll ../readme.txt config.txt
|
||||||
|
zip -9 -j ../../PicoDrive_$(VER).zip $^
|
||||||
|
zip -9 -r ../../PicoDrive_$(VER).zip skin -i \*.png -i \*.txt
|
||||||
|
|
33
platform/gizmondo/emu.c
Normal file
33
platform/gizmondo/emu.c
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
|
||||||
|
char romFileName[MAX_PATH];
|
||||||
|
int engineState;
|
||||||
|
currentConfig_t currentConfig;
|
||||||
|
|
||||||
|
unsigned char *rom_data = NULL;
|
||||||
|
unsigned char *PicoDraw2FB = NULL; // temporary buffer for alt renderer
|
||||||
|
int state_slot = 0;
|
||||||
|
int reset_timing = 0;
|
||||||
|
int config_slot = 0, config_slot_current = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int emu_ReloadRom(void){}
|
||||||
|
void emu_Init(void){}
|
||||||
|
void emu_Deinit(void){}
|
||||||
|
int emu_SaveLoadGame(int load, int sram){}
|
||||||
|
void emu_Loop(void){}
|
||||||
|
void emu_ResetGame(void){}
|
||||||
|
int emu_ReadConfig(int game, int no_defaults){}
|
||||||
|
int emu_WriteConfig(int game){}
|
||||||
|
char *emu_GetSaveFName(int load, int is_sram, int slot){}
|
||||||
|
int emu_check_save_file(int slot){}
|
||||||
|
void emu_set_save_cbs(int gz){}
|
||||||
|
void emu_forced_frame(void){}
|
||||||
|
int emu_cd_check(char **bios_file){}
|
||||||
|
int find_bios(int region, char **bios_file){}
|
||||||
|
void scaling_update(void){}
|
||||||
|
|
59
platform/gizmondo/emu.h
Normal file
59
platform/gizmondo/emu.h
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
// (c) Copyright 2006-2007 notaz, All rights reserved.
|
||||||
|
// Free for non-commercial use.
|
||||||
|
|
||||||
|
// For commercial use, separate licencing terms must be obtained.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// engine states
|
||||||
|
enum TPicoGameState {
|
||||||
|
PGS_Paused = 1,
|
||||||
|
PGS_Running,
|
||||||
|
PGS_Quit,
|
||||||
|
PGS_KeyConfig,
|
||||||
|
PGS_ReloadRom,
|
||||||
|
PGS_Menu,
|
||||||
|
PGS_RestartRun,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char lastRomFile[512];
|
||||||
|
int EmuOpt; // LSb->MSb: use_sram, show_fps, enable_sound, gzip_saves,
|
||||||
|
// <reserved>, no_save_cfg_on_exit, <unused>, 16_bit_mode
|
||||||
|
// <reserved>, confirm_save, show_cd_leds, confirm_load
|
||||||
|
// <reserved>, <reserved>
|
||||||
|
int PicoOpt; // used for config saving only, see Pico.h
|
||||||
|
int PsndRate; // ditto
|
||||||
|
int PicoRegion; // ditto
|
||||||
|
int Frameskip;
|
||||||
|
int CPUclock; // unused, placeholder for config compatibility
|
||||||
|
int KeyBinds[32];
|
||||||
|
int volume;
|
||||||
|
int gamma; // unused
|
||||||
|
int JoyBinds[4][32]; // unused
|
||||||
|
int PicoAutoRgnOrder;
|
||||||
|
int PicoCDBuffers;
|
||||||
|
int scaling; // unused
|
||||||
|
} currentConfig_t;
|
||||||
|
|
||||||
|
extern char romFileName[];
|
||||||
|
extern int engineState;
|
||||||
|
extern currentConfig_t currentConfig;
|
||||||
|
|
||||||
|
|
||||||
|
int emu_ReloadRom(void);
|
||||||
|
void emu_Init(void);
|
||||||
|
void emu_Deinit(void);
|
||||||
|
int emu_SaveLoadGame(int load, int sram);
|
||||||
|
void emu_Loop(void);
|
||||||
|
void emu_ResetGame(void);
|
||||||
|
int emu_ReadConfig(int game, int no_defaults);
|
||||||
|
int emu_WriteConfig(int game);
|
||||||
|
char *emu_GetSaveFName(int load, int is_sram, int slot);
|
||||||
|
int emu_check_save_file(int slot);
|
||||||
|
void emu_set_save_cbs(int gz);
|
||||||
|
void emu_forced_frame(void);
|
||||||
|
int emu_cd_check(char **bios_file);
|
||||||
|
int find_bios(int region, char **bios_file);
|
||||||
|
void scaling_update(void);
|
||||||
|
|
72
platform/gizmondo/giz.c
Normal file
72
platform/gizmondo/giz.c
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
#include <windows.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <version.h>
|
||||||
|
|
||||||
|
#include "giz.h"
|
||||||
|
#include "kgsdk/Framework.h"
|
||||||
|
#include "kgsdk/Framework2D.h"
|
||||||
|
|
||||||
|
#define LOG_FILE "log.log"
|
||||||
|
|
||||||
|
void *giz_screen = NULL;
|
||||||
|
static FILE *logf = NULL;
|
||||||
|
|
||||||
|
void lprintf_al(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list vl;
|
||||||
|
|
||||||
|
if (logf == NULL)
|
||||||
|
{
|
||||||
|
logf = fopen(LOG_FILE, "w");
|
||||||
|
if (logf == NULL)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (strchr(fmt, '\n'))
|
||||||
|
// fprintf(logf, "%lu: ", GetTickCount());
|
||||||
|
va_start(vl, fmt);
|
||||||
|
vfprintf(logf, fmt, vl);
|
||||||
|
va_end(vl);
|
||||||
|
fflush(logf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void giz_log_close(void)
|
||||||
|
{
|
||||||
|
if (logf != NULL)
|
||||||
|
{
|
||||||
|
fclose(logf);
|
||||||
|
logf = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void giz_init(HINSTANCE hInstance, HINSTANCE hPrevInstance)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
giz_screen = NULL;
|
||||||
|
|
||||||
|
lprintf("PicoDrive v" VERSION " (c) notaz, 2006,2007\n");
|
||||||
|
lprintf("%s %s\n\n", __DATE__, __TIME__);
|
||||||
|
|
||||||
|
ret = Framework_Init(hInstance, hPrevInstance);
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
lprintf_al("Framework_Init() failed\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
ret = Framework2D_Init();
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
lprintf_al("Framework2D_Init() failed\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void giz_deinit(void)
|
||||||
|
{
|
||||||
|
Framework2D_Close();
|
||||||
|
Framework_Close();
|
||||||
|
|
||||||
|
giz_log_close();
|
||||||
|
}
|
||||||
|
|
22
platform/gizmondo/giz.h
Normal file
22
platform/gizmondo/giz.h
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
extern void *giz_screen;
|
||||||
|
|
||||||
|
void giz_init();
|
||||||
|
void giz_deinit(void);
|
||||||
|
void lprintf_al(const char *fmt, ...);
|
||||||
|
|
||||||
|
#define lprintf lprintf_al
|
||||||
|
|
||||||
|
// button mappings, include kgsdk/Framework.h to use
|
||||||
|
#define BTN_LEFT (1 << FRAMEWORK_BUTTON_DPAD_LEFT)
|
||||||
|
#define BTN_RIGHT (1 << FRAMEWORK_BUTTON_DPAD_RIGHT)
|
||||||
|
#define BTN_UP (1 << FRAMEWORK_BUTTON_DPAD_UP)
|
||||||
|
#define BTN_DOWN (1 << FRAMEWORK_BUTTON_DPAD_DOWN)
|
||||||
|
#define BTN_STOP (1 << FRAMEWORK_BUTTON_STOP)
|
||||||
|
#define BTN_PLAY (1 << FRAMEWORK_BUTTON_PLAY)
|
||||||
|
#define BTN_FWD (1 << FRAMEWORK_BUTTON_FORWARD)
|
||||||
|
#define BTN_REW (1 << FRAMEWORK_BUTTON_REWIND)
|
||||||
|
#define BTN_L (1 << FRAMEWORK_BUTTON_LEFT_SHOULDER)
|
||||||
|
#define BTN_R (1 << FRAMEWORK_BUTTON_RIGHT_SHOULDER)
|
||||||
|
#define BTN_HOME (1 << FRAMEWORK_BUTTON_HOME)
|
||||||
|
|
||||||
|
|
63
platform/gizmondo/main.c
Normal file
63
platform/gizmondo/main.c
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
// (c) Copyright 2006 notaz, All rights reserved.
|
||||||
|
// Free for non-commercial use.
|
||||||
|
|
||||||
|
// For commercial use, separate licencing terms must be obtained.
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#include "giz.h"
|
||||||
|
#include "menu.h"
|
||||||
|
#include "../common/menu.h"
|
||||||
|
#include "emu.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
|
||||||
|
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
|
||||||
|
{
|
||||||
|
emu_ReadConfig(0, 0);
|
||||||
|
giz_init(hInstance, hPrevInstance);
|
||||||
|
emu_Init();
|
||||||
|
menu_init();
|
||||||
|
|
||||||
|
engineState = PGS_Menu;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
switch (engineState)
|
||||||
|
{
|
||||||
|
case PGS_Menu:
|
||||||
|
menu_loop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PGS_ReloadRom:
|
||||||
|
if (emu_ReloadRom())
|
||||||
|
engineState = PGS_Running;
|
||||||
|
else {
|
||||||
|
lprintf("PGS_ReloadRom == 0\n");
|
||||||
|
engineState = PGS_Menu;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PGS_RestartRun:
|
||||||
|
engineState = PGS_Running;
|
||||||
|
|
||||||
|
case PGS_Running:
|
||||||
|
emu_Loop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PGS_Quit:
|
||||||
|
goto endloop;
|
||||||
|
|
||||||
|
default:
|
||||||
|
lprintf("engine got into unknown state (%i), exitting\n", engineState);
|
||||||
|
goto endloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
endloop:
|
||||||
|
|
||||||
|
emu_Deinit();
|
||||||
|
giz_deinit();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
1532
platform/gizmondo/menu.c
Normal file
1532
platform/gizmondo/menu.c
Normal file
File diff suppressed because it is too large
Load diff
19
platform/gizmondo/menu.h
Normal file
19
platform/gizmondo/menu.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// (c) Copyright 2006,2007 notaz, All rights reserved.
|
||||||
|
// Free for non-commercial use.
|
||||||
|
|
||||||
|
// For commercial use, separate licencing terms must be obtained.
|
||||||
|
|
||||||
|
extern char menuErrorMsg[40];
|
||||||
|
|
||||||
|
void menu_init(void);
|
||||||
|
void text_out16(int x, int y, const char *texto, ...);
|
||||||
|
void menu_loop(void);
|
||||||
|
int menu_loop_tray(void);
|
||||||
|
void menu_romload_prepare(const char *rom_name);
|
||||||
|
void menu_romload_end(void);
|
||||||
|
|
||||||
|
// TODO: add more?
|
||||||
|
#define CONFIGURABLE_KEYS \
|
||||||
|
(BTN_UP|BTN_DOWN|BTN_LEFT|BTN_RIGHT|BTN_STOP|BTN_PLAY|BTN_FWD|BTN_REW| \
|
||||||
|
BTN_L|BTN_R)
|
||||||
|
|
8
platform/gizmondo/mp3.c
Normal file
8
platform/gizmondo/mp3.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int mp3_get_bitrate(FILE *f, int size){}
|
||||||
|
void mp3_start_play(FILE *f, int pos){}
|
||||||
|
int mp3_get_offset(void){} // 0-1023
|
||||||
|
void mp3_update(int *buffer, int length, int stereo){}
|
||||||
|
|
||||||
|
|
18
platform/gizmondo/port_config.h
Normal file
18
platform/gizmondo/port_config.h
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
// port specific settings
|
||||||
|
|
||||||
|
#ifndef PORT_CONFIG_H
|
||||||
|
#define PORT_CONFIG_H
|
||||||
|
|
||||||
|
#define CPU_CALL
|
||||||
|
|
||||||
|
// draw2.c
|
||||||
|
#define START_ROW 0 // which row of tiles to start rendering at?
|
||||||
|
#define END_ROW 28 // ..end
|
||||||
|
|
||||||
|
// pico.c
|
||||||
|
#define CAN_HANDLE_240_LINES 1
|
||||||
|
|
||||||
|
//#define dprintf(f,...) printf("%05i:%03i: " f "\n",Pico.m.frame_count,Pico.m.scanline,##__VA_ARGS__)
|
||||||
|
#define dprintf(x...)
|
||||||
|
|
||||||
|
#endif //PORT_CONFIG_H
|
10
platform/gizmondo/port_config.s
Normal file
10
platform/gizmondo/port_config.s
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
@ vim:filetype=armasm
|
||||||
|
|
||||||
|
@ .equiv START_ROW, 1
|
||||||
|
@ .equiv END_ROW, 27
|
||||||
|
@ one row means 8 pixels. If above example was used, (27-1)*8=208 lines would be rendered.
|
||||||
|
.equiv START_ROW, 0
|
||||||
|
.equiv END_ROW, 28
|
||||||
|
|
||||||
|
@ this should be set to one only for GP2X port
|
||||||
|
.equiv EXTERNAL_YM2612, 0
|
2
platform/gizmondo/version.h
Normal file
2
platform/gizmondo/version.h
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
#define VERSION "1.33"
|
||||||
|
|
|
@ -14,8 +14,9 @@
|
||||||
#include "gp2x.h"
|
#include "gp2x.h"
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "asmutils.h"
|
|
||||||
#include "mp3.h"
|
#include "mp3.h"
|
||||||
|
#include "../common/arm_utils.h"
|
||||||
|
#include "../common/menu.h"
|
||||||
#include "../../Pico/PicoInt.h"
|
#include "../../Pico/PicoInt.h"
|
||||||
#include "../../Pico/sound/mix.h"
|
#include "../../Pico/sound/mix.h"
|
||||||
|
|
||||||
|
|
|
@ -48,10 +48,13 @@ LD = $(CROSS)ld
|
||||||
OBJCOPY = $(CROSS)objcopy
|
OBJCOPY = $(CROSS)objcopy
|
||||||
|
|
||||||
# frontend
|
# frontend
|
||||||
OBJS += main.o menu.o fonts.o gp2x.o usbjoy.o emu.o squidgehack.o asmutils.o cpuctrl.o readpng.o
|
OBJS += main.o menu.o gp2x.o usbjoy.o emu.o squidgehack.o cpuctrl.o
|
||||||
# 940 core control
|
# 940 core control
|
||||||
OBJS += 940ctl.o
|
OBJS += 940ctl.o
|
||||||
|
|
||||||
|
# common
|
||||||
|
OBJS += ../common/menu.o ../common/fonts.o ../common/arm_utils.o ../common/readpng.o
|
||||||
|
|
||||||
# Pico
|
# Pico
|
||||||
ifeq "$(amalgamate)" "1"
|
ifeq "$(amalgamate)" "1"
|
||||||
OBJS += ../../PicoAll.o
|
OBJS += ../../PicoAll.o
|
||||||
|
@ -148,7 +151,7 @@ up: PicoDrive.gpe
|
||||||
# @cmd //C copy PicoDrive.gpe \\\\10.0.1.2\\gp2x\\mnt\\sd\\games\\PicoDrive\\
|
# @cmd //C copy PicoDrive.gpe \\\\10.0.1.2\\gp2x\\mnt\\sd\\games\\PicoDrive\\
|
||||||
|
|
||||||
|
|
||||||
testrefr.gpe : test.o gp2x.o asmutils.o
|
testrefr.gpe : test.o gp2x.o
|
||||||
@echo $@
|
@echo $@
|
||||||
@$(GCC) $(COPT) $^ -o $@
|
@$(GCC) $(COPT) $^ -o $@
|
||||||
@$(STRIP) $@
|
@$(STRIP) $@
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
#include "gp2x.h"
|
#include "gp2x.h"
|
||||||
#include "usbjoy.h"
|
#include "usbjoy.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "asmutils.h"
|
#include "../common/arm_utils.h"
|
||||||
|
#include "../common/fonts.h"
|
||||||
#include "cpuctrl.h"
|
#include "cpuctrl.h"
|
||||||
#include "fonts.h"
|
|
||||||
|
|
||||||
#include <Pico/PicoInt.h>
|
#include <Pico/PicoInt.h>
|
||||||
#include <Pico/Patch.h>
|
#include <Pico/Patch.h>
|
||||||
|
@ -52,7 +52,7 @@ static int combo_keys = 0, combo_acts = 0; // keys and actions which need button
|
||||||
static int gp2x_old_gamma = 100;
|
static int gp2x_old_gamma = 100;
|
||||||
static unsigned char *movie_data = NULL;
|
static unsigned char *movie_data = NULL;
|
||||||
static int movie_size = 0;
|
static int movie_size = 0;
|
||||||
unsigned char *framebuff = 0; // temporary buffer for alt renderer
|
unsigned char *PicoDraw2FB = NULL; // temporary buffer for alt renderer
|
||||||
int state_slot = 0;
|
int state_slot = 0;
|
||||||
int reset_timing = 0;
|
int reset_timing = 0;
|
||||||
int config_slot = 0, config_slot_current = 0;
|
int config_slot = 0, config_slot_current = 0;
|
||||||
|
@ -389,10 +389,10 @@ static void emu_msg_tray_open(void);
|
||||||
void emu_Init(void)
|
void emu_Init(void)
|
||||||
{
|
{
|
||||||
// make temp buffer for alt renderer
|
// make temp buffer for alt renderer
|
||||||
framebuff = malloc((8+320)*(8+240+8));
|
PicoDraw2FB = malloc((8+320)*(8+240+8));
|
||||||
if (!framebuff)
|
if (!PicoDraw2FB)
|
||||||
{
|
{
|
||||||
printf("framebuff == 0\n");
|
printf("PicoDraw2FB == 0\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// make dirs for saves, cfgs, etc.
|
// make dirs for saves, cfgs, etc.
|
||||||
|
@ -626,7 +626,7 @@ void emu_Deinit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free(framebuff);
|
free(PicoDraw2FB);
|
||||||
|
|
||||||
PicoExit();
|
PicoExit();
|
||||||
|
|
||||||
|
@ -768,7 +768,7 @@ static void blit(const char *fps, const char *notice)
|
||||||
// feed new palette to our device
|
// feed new palette to our device
|
||||||
gp2x_video_setpalette(localPal, 0x40);
|
gp2x_video_setpalette(localPal, 0x40);
|
||||||
}
|
}
|
||||||
vidCpyM2((unsigned char *)gp2x_screen+320*8, framebuff+328*8);
|
vidCpyM2((unsigned char *)gp2x_screen+320*8, PicoDraw2FB+328*8);
|
||||||
} else if (!(emu_opt&0x80)) {
|
} else if (!(emu_opt&0x80)) {
|
||||||
// 8bit accurate renderer
|
// 8bit accurate renderer
|
||||||
if (Pico.m.dirtyPal) {
|
if (Pico.m.dirtyPal) {
|
||||||
|
@ -1112,7 +1112,7 @@ void emu_forced_frame(void)
|
||||||
clearArea(1);
|
clearArea(1);
|
||||||
} else vidCpyM2 = vidCpyM2_40col;
|
} else vidCpyM2 = vidCpyM2_40col;
|
||||||
|
|
||||||
vidCpyM2((unsigned char *)gp2x_screen+320*8, framebuff+328*8);
|
vidCpyM2((unsigned char *)gp2x_screen+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);
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
#include "gp2x.h"
|
#include "gp2x.h"
|
||||||
#include "usbjoy.h"
|
#include "usbjoy.h"
|
||||||
#include "asmutils.h"
|
#include "../common/arm_utils.h"
|
||||||
|
|
||||||
volatile unsigned short *gp2x_memregs;
|
volatile unsigned short *gp2x_memregs;
|
||||||
//static
|
//static
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include "gp2x.h"
|
#include "gp2x.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
|
#include "../common/menu.h"
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "940ctl.h"
|
#include "940ctl.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
#include "gp2x.h"
|
#include "gp2x.h"
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "fonts.h"
|
|
||||||
#include "usbjoy.h"
|
#include "usbjoy.h"
|
||||||
#include "asmutils.h"
|
#include "../common/arm_utils.h"
|
||||||
#include "readpng.h"
|
#include "../common/menu.h"
|
||||||
|
#include "../common/readpng.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
#include <Pico/PicoInt.h>
|
#include <Pico/PicoInt.h>
|
||||||
|
@ -33,389 +33,18 @@ extern int mmuhack_status;
|
||||||
extern int state_slot;
|
extern int state_slot;
|
||||||
extern int config_slot, config_slot_current;
|
extern int config_slot, config_slot_current;
|
||||||
|
|
||||||
static unsigned char menu_font_data[10240];
|
static const char *gp2xKeyNames[] = {
|
||||||
static char *gp2xKeyNames[] = {
|
|
||||||
"UP", "???", "LEFT", "???", "DOWN", "???", "RIGHT", "???",
|
"UP", "???", "LEFT", "???", "DOWN", "???", "RIGHT", "???",
|
||||||
"START", "SELECT", "L", "R", "A", "B", "X", "Y",
|
"START", "SELECT", "L", "R", "A", "B", "X", "Y",
|
||||||
"???", "???", "???", "???", "???", "???", "VOL DOWN", "VOL UP",
|
"???", "???", "???", "???", "???", "???", "VOL DOWN", "VOL UP",
|
||||||
"???", "???", "???", "PUSH", "???", "???", "???", "???"
|
"???", "???", "???", "PUSH", "???", "???", "???", "???"
|
||||||
};
|
};
|
||||||
static int menu_text_color = 0xffff; // default to white
|
|
||||||
static int menu_sel_color = -1; // disabled
|
|
||||||
|
|
||||||
char menuErrorMsg[40] = {0, };
|
char menuErrorMsg[40] = {0, };
|
||||||
|
|
||||||
static void menu_darken_bg(void *dst, int pixels, int darker);
|
static void menu_darken_bg(void *dst, int pixels, int darker);
|
||||||
static void menu_prepare_bg(int use_game_bg);
|
static void menu_prepare_bg(int use_game_bg);
|
||||||
|
|
||||||
// draws text to current bbp16 screen
|
|
||||||
static void text_out16_(int x, int y, const char *text, int color)
|
|
||||||
{
|
|
||||||
int i, l, u, tr, tg, tb, len;
|
|
||||||
unsigned short *dest = (unsigned short *)gp2x_screen + x + y*320;
|
|
||||||
tr = (color & 0xf800) >> 8;
|
|
||||||
tg = (color & 0x07e0) >> 3;
|
|
||||||
tb = (color & 0x001f) << 3;
|
|
||||||
|
|
||||||
if (text == (void *)1)
|
|
||||||
{
|
|
||||||
// selector symbol
|
|
||||||
text = "";
|
|
||||||
len = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
len = strlen(text);
|
|
||||||
|
|
||||||
for (i = 0; i < len; i++)
|
|
||||||
{
|
|
||||||
unsigned char *src = menu_font_data + (unsigned int)text[i]*4*10;
|
|
||||||
unsigned short *dst = dest;
|
|
||||||
for (l = 0; l < 10; l++, dst += 320-8)
|
|
||||||
{
|
|
||||||
for (u = 8/2; u > 0; u--, src++)
|
|
||||||
{
|
|
||||||
int c, r, g, b;
|
|
||||||
c = *src >> 4;
|
|
||||||
r = (*dst & 0xf800) >> 8;
|
|
||||||
g = (*dst & 0x07e0) >> 3;
|
|
||||||
b = (*dst & 0x001f) << 3;
|
|
||||||
r = (c^0xf)*r/15 + c*tr/15;
|
|
||||||
g = (c^0xf)*g/15 + c*tg/15;
|
|
||||||
b = (c^0xf)*b/15 + c*tb/15;
|
|
||||||
*dst++ = ((r<<8)&0xf800) | ((g<<3)&0x07e0) | (b>>3);
|
|
||||||
c = *src & 0xf;
|
|
||||||
r = (*dst & 0xf800) >> 8;
|
|
||||||
g = (*dst & 0x07e0) >> 3;
|
|
||||||
b = (*dst & 0x001f) << 3;
|
|
||||||
r = (c^0xf)*r/15 + c*tr/15;
|
|
||||||
g = (c^0xf)*g/15 + c*tg/15;
|
|
||||||
b = (c^0xf)*b/15 + c*tb/15;
|
|
||||||
*dst++ = ((r<<8)&0xf800) | ((g<<3)&0x07e0) | (b>>3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dest += 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void text_out16(int x, int y, const char *texto, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
char buffer[512];
|
|
||||||
|
|
||||||
va_start(args,texto);
|
|
||||||
vsprintf(buffer,texto,args);
|
|
||||||
va_end(args);
|
|
||||||
|
|
||||||
text_out16_(x,y,buffer,menu_text_color);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void smalltext_out16(int x, int y, const char *texto, int color)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
unsigned char *src;
|
|
||||||
unsigned short *dst;
|
|
||||||
|
|
||||||
for (i = 0;; i++, x += 6)
|
|
||||||
{
|
|
||||||
unsigned char c = (unsigned char) texto[i];
|
|
||||||
int h = 8;
|
|
||||||
|
|
||||||
if (!c) break;
|
|
||||||
|
|
||||||
src = fontdata6x8[c];
|
|
||||||
dst = (unsigned short *)gp2x_screen + x + y*320;
|
|
||||||
|
|
||||||
while (h--)
|
|
||||||
{
|
|
||||||
int w = 0x20;
|
|
||||||
while (w)
|
|
||||||
{
|
|
||||||
if( *src & w ) *dst = color;
|
|
||||||
dst++;
|
|
||||||
w>>=1;
|
|
||||||
}
|
|
||||||
src++;
|
|
||||||
|
|
||||||
dst += 320-6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void smalltext_out16_lim(int x, int y, const char *texto, int color, int max)
|
|
||||||
{
|
|
||||||
char buffer[320/6+1];
|
|
||||||
|
|
||||||
strncpy(buffer, texto, 320/6);
|
|
||||||
if (max > 320/6) max = 320/6;
|
|
||||||
if (max < 0) max = 0;
|
|
||||||
buffer[max] = 0;
|
|
||||||
|
|
||||||
smalltext_out16(x, y, buffer, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void draw_selection(int x, int y, int w)
|
|
||||||
{
|
|
||||||
int i, h;
|
|
||||||
unsigned short *dst, *dest;
|
|
||||||
|
|
||||||
text_out16_(x, y, (void *)1, (menu_sel_color < 0) ? menu_text_color : menu_sel_color);
|
|
||||||
|
|
||||||
if (menu_sel_color < 0) return; // no selection hilight
|
|
||||||
|
|
||||||
if (y > 0) y--;
|
|
||||||
dest = (unsigned short *)gp2x_screen + x + y*320 + 14;
|
|
||||||
for (h = 11; h > 0; h--)
|
|
||||||
{
|
|
||||||
dst = dest;
|
|
||||||
for (i = w; i > 0; i--)
|
|
||||||
*dst++ = menu_sel_color;
|
|
||||||
dest += 320;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void menu_flip(void)
|
|
||||||
{
|
|
||||||
gp2x_video_flush_cache();
|
|
||||||
gp2x_video_flip2();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
MB_NONE = 1, /* no auto processing */
|
|
||||||
MB_ONOFF, /* ON/OFF setting */
|
|
||||||
MB_RANGE, /* [min-max] setting */
|
|
||||||
} menu_behavior;
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
MA_NONE = 1,
|
|
||||||
MA_MAIN_RESUME_GAME,
|
|
||||||
MA_MAIN_SAVE_STATE,
|
|
||||||
MA_MAIN_LOAD_STATE,
|
|
||||||
MA_MAIN_RESET_GAME,
|
|
||||||
MA_MAIN_LOAD_ROM,
|
|
||||||
MA_MAIN_OPTIONS,
|
|
||||||
MA_MAIN_CONTROLS,
|
|
||||||
MA_MAIN_CREDITS,
|
|
||||||
MA_MAIN_PATCHES,
|
|
||||||
MA_MAIN_EXIT,
|
|
||||||
MA_OPT_RENDERER,
|
|
||||||
MA_OPT_SCALING,
|
|
||||||
MA_OPT_ACC_TIMING,
|
|
||||||
MA_OPT_ACC_SPRITES,
|
|
||||||
MA_OPT_SHOW_FPS,
|
|
||||||
MA_OPT_FRAMESKIP,
|
|
||||||
MA_OPT_ENABLE_SOUND,
|
|
||||||
MA_OPT_SOUND_QUALITY,
|
|
||||||
MA_OPT_ARM940_SOUND,
|
|
||||||
MA_OPT_6BUTTON_PAD,
|
|
||||||
MA_OPT_REGION,
|
|
||||||
MA_OPT_SRAM_STATES,
|
|
||||||
MA_OPT_CONFIRM_STATES,
|
|
||||||
MA_OPT_SAVE_SLOT,
|
|
||||||
MA_OPT_CPU_CLOCKS,
|
|
||||||
MA_OPT_SCD_OPTS,
|
|
||||||
MA_OPT_ADV_OPTS,
|
|
||||||
MA_OPT_SAVECFG,
|
|
||||||
MA_OPT_SAVECFG_GAME,
|
|
||||||
MA_OPT_LOADCFG,
|
|
||||||
MA_OPT2_GAMMA,
|
|
||||||
MA_OPT2_A_SN_GAMMA,
|
|
||||||
MA_OPT2_VSYNC,
|
|
||||||
MA_OPT2_ENABLE_Z80,
|
|
||||||
MA_OPT2_ENABLE_YM2612,
|
|
||||||
MA_OPT2_ENABLE_SN76496,
|
|
||||||
MA_OPT2_GZIP_STATES,
|
|
||||||
MA_OPT2_NO_LAST_ROM,
|
|
||||||
MA_OPT2_RAMTIMINGS,
|
|
||||||
MA_OPT2_SQUIDGEHACK,
|
|
||||||
MA_OPT2_DONE,
|
|
||||||
MA_CDOPT_TESTBIOS_USA,
|
|
||||||
MA_CDOPT_TESTBIOS_EUR,
|
|
||||||
MA_CDOPT_TESTBIOS_JAP,
|
|
||||||
MA_CDOPT_LEDS,
|
|
||||||
MA_CDOPT_CDDA,
|
|
||||||
MA_CDOPT_PCM,
|
|
||||||
MA_CDOPT_READAHEAD,
|
|
||||||
MA_CDOPT_SAVERAM,
|
|
||||||
MA_CDOPT_SCALEROT_CHIP,
|
|
||||||
MA_CDOPT_BETTER_SYNC,
|
|
||||||
MA_CDOPT_DONE,
|
|
||||||
} menu_id;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
char *name;
|
|
||||||
menu_behavior beh;
|
|
||||||
menu_id id;
|
|
||||||
void *var; /* for on-off settings */
|
|
||||||
int mask;
|
|
||||||
signed char min; /* for ranged integer settings, to be sign-extended */
|
|
||||||
signed char max;
|
|
||||||
char enabled;
|
|
||||||
} menu_entry;
|
|
||||||
|
|
||||||
static int me_id2offset(const menu_entry *entries, int count, menu_id id)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
if (entries[i].id == id) return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("%s: id %i not found\n", __FUNCTION__, id);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void me_enable(menu_entry *entries, int count, menu_id id, int enable)
|
|
||||||
{
|
|
||||||
int i = me_id2offset(entries, count, id);
|
|
||||||
entries[i].enabled = enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int me_count_enabled(const menu_entry *entries, int count)
|
|
||||||
{
|
|
||||||
int i, ret = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
if (entries[i].enabled) ret++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static menu_id me_index2id(const menu_entry *entries, int count, int index)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
if (entries[i].enabled)
|
|
||||||
{
|
|
||||||
if (index == 0) break;
|
|
||||||
index--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i >= count) i = count - 1;
|
|
||||||
return entries[i].id;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef void (me_draw_custom_f)(const menu_entry *entry, int x, int y, void *param);
|
|
||||||
|
|
||||||
static void me_draw(const menu_entry *entries, int count, int x, int y, me_draw_custom_f *cust_draw, void *param)
|
|
||||||
{
|
|
||||||
int i, y1 = y;
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
if (!entries[i].enabled) continue;
|
|
||||||
if (entries[i].name == NULL)
|
|
||||||
{
|
|
||||||
if (cust_draw != NULL)
|
|
||||||
cust_draw(&entries[i], x, y1, param);
|
|
||||||
y1 += 10;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
text_out16(x, y1, entries[i].name);
|
|
||||||
if (entries[i].beh == MB_ONOFF)
|
|
||||||
text_out16(x + 27*8, y1, (*(int *)entries[i].var & entries[i].mask) ? "ON" : "OFF");
|
|
||||||
else if (entries[i].beh == MB_RANGE)
|
|
||||||
text_out16(x + 27*8, y1, "%i", *(int *)entries[i].var);
|
|
||||||
y1 += 10;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int me_process(menu_entry *entries, int count, menu_id id, int is_next)
|
|
||||||
{
|
|
||||||
int i = me_id2offset(entries, count, id);
|
|
||||||
menu_entry *entry = &entries[i];
|
|
||||||
switch (entry->beh)
|
|
||||||
{
|
|
||||||
case MB_ONOFF:
|
|
||||||
*(int *)entry->var ^= entry->mask;
|
|
||||||
return 1;
|
|
||||||
case MB_RANGE:
|
|
||||||
*(int *)entry->var += is_next ? 1 : -1;
|
|
||||||
if (*(int *)entry->var < (int)entry->min) *(int *)entry->var = (int)entry->min;
|
|
||||||
if (*(int *)entry->var > (int)entry->max) *(int *)entry->var = (int)entry->max;
|
|
||||||
return 1;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int parse_hex_color(char *buff)
|
|
||||||
{
|
|
||||||
char *endp = buff;
|
|
||||||
int t = (int) strtoul(buff, &endp, 16);
|
|
||||||
if (endp != buff) return ((t>>8)&0xf800) | ((t>>5)&0x07e0) | ((t>>3)&0x1f);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void menu_init(void)
|
|
||||||
{
|
|
||||||
int c, l;
|
|
||||||
unsigned char *fd = menu_font_data;
|
|
||||||
char buff[256];
|
|
||||||
FILE *f;
|
|
||||||
|
|
||||||
// generate default font from fontdata8x8
|
|
||||||
memset(menu_font_data, 0, sizeof(menu_font_data));
|
|
||||||
for (c = 0; c < 256; c++)
|
|
||||||
{
|
|
||||||
for (l = 0; l < 8; l++)
|
|
||||||
{
|
|
||||||
unsigned char fd8x8 = fontdata8x8[c*8+l];
|
|
||||||
if (fd8x8&0x80) *fd |= 0xf0;
|
|
||||||
if (fd8x8&0x40) *fd |= 0x0f; fd++;
|
|
||||||
if (fd8x8&0x20) *fd |= 0xf0;
|
|
||||||
if (fd8x8&0x10) *fd |= 0x0f; fd++;
|
|
||||||
if (fd8x8&0x08) *fd |= 0xf0;
|
|
||||||
if (fd8x8&0x04) *fd |= 0x0f; fd++;
|
|
||||||
if (fd8x8&0x02) *fd |= 0xf0;
|
|
||||||
if (fd8x8&0x01) *fd |= 0x0f; fd++;
|
|
||||||
}
|
|
||||||
fd += 8*2/2; // 2 empty lines
|
|
||||||
}
|
|
||||||
|
|
||||||
// load custom font and selector (stored as 1st symbol in font table)
|
|
||||||
readpng(menu_font_data, "skin/font.png", READPNG_FONT);
|
|
||||||
memcpy(menu_font_data, menu_font_data + ((int)'>')*4*10, 4*10); // default selector symbol is '>'
|
|
||||||
readpng(menu_font_data, "skin/selector.png", READPNG_SELECTOR);
|
|
||||||
|
|
||||||
// load custom colors
|
|
||||||
f = fopen("skin/skin.txt", "r");
|
|
||||||
if (f != NULL)
|
|
||||||
{
|
|
||||||
printf("found skin.txt\n");
|
|
||||||
while (!feof(f))
|
|
||||||
{
|
|
||||||
fgets(buff, sizeof(buff), f);
|
|
||||||
if (buff[0] == '#' || buff[0] == '/') continue; // comment
|
|
||||||
if (buff[0] == '\r' || buff[0] == '\n') continue; // empty line
|
|
||||||
if (strncmp(buff, "text_color=", 11) == 0)
|
|
||||||
{
|
|
||||||
int tmp = parse_hex_color(buff+11);
|
|
||||||
if (tmp >= 0) menu_text_color = tmp;
|
|
||||||
else printf("skin.txt: parse error for text_color\n");
|
|
||||||
}
|
|
||||||
else if (strncmp(buff, "selection_color=", 16) == 0)
|
|
||||||
{
|
|
||||||
int tmp = parse_hex_color(buff+16);
|
|
||||||
if (tmp >= 0) menu_sel_color = tmp;
|
|
||||||
else printf("skin.txt: parse error for selection_color\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
printf("skin.txt: parse error: %s\n", buff);
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned long inp_prev = 0;
|
static unsigned long inp_prev = 0;
|
||||||
static int inp_prevjoy = 0;
|
static int inp_prevjoy = 0;
|
||||||
|
|
||||||
|
@ -500,6 +129,11 @@ static unsigned long wait_for_input_usbjoy(unsigned long interesting, int *joy)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void menu_flip(void)
|
||||||
|
{
|
||||||
|
gp2x_video_flush_cache();
|
||||||
|
gp2x_video_flip2();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// --------- loading ROM screen ----------
|
// --------- loading ROM screen ----------
|
||||||
|
@ -887,7 +521,7 @@ static void draw_savestate_menu(int menu_sel, int is_loading)
|
||||||
|
|
||||||
text_out16(tl_x, 30, is_loading ? "Load state" : "Save state");
|
text_out16(tl_x, 30, is_loading ? "Load state" : "Save state");
|
||||||
|
|
||||||
draw_selection(tl_x - 16, tl_y + menu_sel*10, 108);
|
menu_draw_selection(tl_x - 16, tl_y + menu_sel*10, 108);
|
||||||
|
|
||||||
/* draw all 10 slots */
|
/* draw all 10 slots */
|
||||||
y = tl_y;
|
y = tl_y;
|
||||||
|
@ -1029,7 +663,7 @@ static void draw_key_config(const bind_action_t *opts, int opt_cnt, int player_i
|
||||||
x = 40;
|
x = 40;
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_selection(x - 16, tl_y + sel*10, (player_idx >= 0) ? 66 : 130);
|
menu_draw_selection(x - 16, tl_y + sel*10, (player_idx >= 0) ? 66 : 130);
|
||||||
|
|
||||||
y = tl_y;
|
y = tl_y;
|
||||||
for (i = 0; i < opt_cnt; i++, y+=10)
|
for (i = 0; i < opt_cnt; i++, y+=10)
|
||||||
|
@ -1110,7 +744,7 @@ static void draw_kc_sel(int menu_sel)
|
||||||
|
|
||||||
y = tl_y;
|
y = tl_y;
|
||||||
gp2x_pd_clone_buffer2();
|
gp2x_pd_clone_buffer2();
|
||||||
draw_selection(tl_x - 16, tl_y + menu_sel*10, 138);
|
menu_draw_selection(tl_x - 16, tl_y + menu_sel*10, 138);
|
||||||
|
|
||||||
text_out16(tl_x, y, "Player 1");
|
text_out16(tl_x, y, "Player 1");
|
||||||
text_out16(tl_x, (y+=10), "Player 2");
|
text_out16(tl_x, (y+=10), "Player 2");
|
||||||
|
@ -1246,7 +880,7 @@ static void draw_cd_menu_options(int menu_sel, struct bios_names_t *bios_names)
|
||||||
|
|
||||||
gp2x_pd_clone_buffer2();
|
gp2x_pd_clone_buffer2();
|
||||||
|
|
||||||
draw_selection(tl_x - 16, tl_y + menu_sel*10, 246);
|
menu_draw_selection(tl_x - 16, tl_y + menu_sel*10, 246);
|
||||||
|
|
||||||
me_draw(cdopt_entries, CDOPT_ENTRY_COUNT, tl_x, tl_y, menu_cdopt_cust_draw, bios_names);
|
me_draw(cdopt_entries, CDOPT_ENTRY_COUNT, tl_x, tl_y, menu_cdopt_cust_draw, bios_names);
|
||||||
|
|
||||||
|
@ -1347,7 +981,7 @@ menu_entry opt2_entries[] =
|
||||||
{
|
{
|
||||||
{ NULL, MB_NONE, MA_OPT2_GAMMA, NULL, 0, 0, 0, 1 },
|
{ NULL, MB_NONE, MA_OPT2_GAMMA, NULL, 0, 0, 0, 1 },
|
||||||
{ "A_SN's gamma curve", MB_ONOFF, MA_OPT2_A_SN_GAMMA, ¤tConfig.EmuOpt, 0x1000, 0, 0, 1 },
|
{ "A_SN's gamma curve", MB_ONOFF, MA_OPT2_A_SN_GAMMA, ¤tConfig.EmuOpt, 0x1000, 0, 0, 1 },
|
||||||
{ "Perfecf vsync", MB_ONOFF, MA_OPT2_VSYNC, ¤tConfig.EmuOpt, 0x2000, 0, 0, 1 },
|
{ "Perfect vsync", MB_ONOFF, MA_OPT2_VSYNC, ¤tConfig.EmuOpt, 0x2000, 0, 0, 1 },
|
||||||
{ "Emulate Z80", MB_ONOFF, MA_OPT2_ENABLE_Z80, ¤tConfig.PicoOpt,0x0004, 0, 0, 1 },
|
{ "Emulate Z80", MB_ONOFF, MA_OPT2_ENABLE_Z80, ¤tConfig.PicoOpt,0x0004, 0, 0, 1 },
|
||||||
{ "Emulate YM2612 (FM)", MB_ONOFF, MA_OPT2_ENABLE_YM2612, ¤tConfig.PicoOpt,0x0001, 0, 0, 1 },
|
{ "Emulate YM2612 (FM)", MB_ONOFF, MA_OPT2_ENABLE_YM2612, ¤tConfig.PicoOpt,0x0001, 0, 0, 1 },
|
||||||
{ "Emulate SN76496 (PSG)", MB_ONOFF, MA_OPT2_ENABLE_SN76496,¤tConfig.PicoOpt,0x0002, 0, 0, 1 },
|
{ "Emulate SN76496 (PSG)", MB_ONOFF, MA_OPT2_ENABLE_SN76496,¤tConfig.PicoOpt,0x0002, 0, 0, 1 },
|
||||||
|
@ -1377,7 +1011,7 @@ static void draw_amenu_options(int menu_sel)
|
||||||
|
|
||||||
gp2x_pd_clone_buffer2();
|
gp2x_pd_clone_buffer2();
|
||||||
|
|
||||||
draw_selection(tl_x - 16, tl_y + menu_sel*10, 252);
|
menu_draw_selection(tl_x - 16, tl_y + menu_sel*10, 252);
|
||||||
|
|
||||||
me_draw(opt2_entries, OPT2_ENTRY_COUNT, tl_x, tl_y, menu_opt2_cust_draw, NULL);
|
me_draw(opt2_entries, OPT2_ENTRY_COUNT, tl_x, tl_y, menu_opt2_cust_draw, NULL);
|
||||||
|
|
||||||
|
@ -1546,7 +1180,7 @@ static void draw_menu_options(int menu_sel)
|
||||||
|
|
||||||
gp2x_pd_clone_buffer2();
|
gp2x_pd_clone_buffer2();
|
||||||
|
|
||||||
draw_selection(tl_x - 16, tl_y + menu_sel*10, 284);
|
menu_draw_selection(tl_x - 16, tl_y + menu_sel*10, 284);
|
||||||
|
|
||||||
me_draw(opt_entries, OPT_ENTRY_COUNT, tl_x, tl_y, menu_opt_cust_draw, NULL);
|
me_draw(opt_entries, OPT_ENTRY_COUNT, tl_x, tl_y, menu_opt_cust_draw, NULL);
|
||||||
|
|
||||||
|
@ -1785,7 +1419,7 @@ static void draw_menu_root(int menu_sel)
|
||||||
|
|
||||||
text_out16(tl_x, 20, "PicoDrive v" VERSION);
|
text_out16(tl_x, 20, "PicoDrive v" VERSION);
|
||||||
|
|
||||||
draw_selection(tl_x - 16, tl_y + menu_sel*10, 146);
|
menu_draw_selection(tl_x - 16, tl_y + menu_sel*10, 146);
|
||||||
|
|
||||||
me_draw(main_entries, MAIN_ENTRY_COUNT, tl_x, tl_y, NULL, NULL);
|
me_draw(main_entries, MAIN_ENTRY_COUNT, tl_x, tl_y, NULL, NULL);
|
||||||
|
|
||||||
|
@ -2008,7 +1642,7 @@ int menu_loop_tray(void)
|
||||||
char curr_path[PATH_MAX], *selfname;
|
char curr_path[PATH_MAX], *selfname;
|
||||||
FILE *tstf;
|
FILE *tstf;
|
||||||
|
|
||||||
gp2x_memset_all_buffers(0, 0xe0, 320*240);
|
gp2x_memset_all_buffers(0, 0, 320*240*2);
|
||||||
menu_gfx_prepare();
|
menu_gfx_prepare();
|
||||||
|
|
||||||
if ( (tstf = fopen(currentConfig.lastRomFile, "rb")) )
|
if ( (tstf = fopen(currentConfig.lastRomFile, "rb")) )
|
||||||
|
|
|
@ -5,8 +5,6 @@
|
||||||
|
|
||||||
extern char menuErrorMsg[40];
|
extern char menuErrorMsg[40];
|
||||||
|
|
||||||
void menu_init(void);
|
|
||||||
void text_out16(int x, int y, const char *texto, ...);
|
|
||||||
void menu_loop(void);
|
void menu_loop(void);
|
||||||
int menu_loop_tray(void);
|
int menu_loop_tray(void);
|
||||||
void menu_romload_prepare(const char *rom_name);
|
void menu_romload_prepare(const char *rom_name);
|
||||||
|
|
|
@ -24,8 +24,12 @@ COPT += `pkg-config --cflags gthread-2.0`
|
||||||
LDFLAGS += `pkg-config --libs gthread-2.0`
|
LDFLAGS += `pkg-config --libs gthread-2.0`
|
||||||
|
|
||||||
# frontend
|
# frontend
|
||||||
OBJS += ../gp2x/main.o ../gp2x/menu.o ../gp2x/fonts.o ../gp2x/emu.o ../gp2x/usbjoy.o blit.o \
|
OBJS += ../gp2x/main.o ../gp2x/menu.o ../gp2x/emu.o ../gp2x/usbjoy.o blit.o \
|
||||||
gp2x.o 940ctl_ym2612.o ../gp2x/readpng.o
|
gp2x.o 940ctl_ym2612.o
|
||||||
|
|
||||||
|
# common
|
||||||
|
OBJS += ../common/menu.o ../common/fonts.o ../common/readpng.o
|
||||||
|
|
||||||
# Pico
|
# Pico
|
||||||
OBJS += ../../Pico/Area.o ../../Pico/Cart.o ../../Pico/Memory.o ../../Pico/Misc.o \
|
OBJS += ../../Pico/Area.o ../../Pico/Cart.o ../../Pico/Memory.o ../../Pico/Misc.o \
|
||||||
../../Pico/Pico.o ../../Pico/Sek.o ../../Pico/VideoPort.o ../../Pico/Draw2.o ../../Pico/Draw.o \
|
../../Pico/Pico.o ../../Pico/Sek.o ../../Pico/VideoPort.o ../../Pico/Draw2.o ../../Pico/Draw.o \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue