mirror of
https://github.com/wavemotion-dave/GimliDS.git
synced 2025-06-18 22:05:33 -04:00
New 'Slide-n-Glide' joystick settings. New key mapping implemented. General cleanup and refactor. Getting ready for the 0.9 release.
This commit is contained in:
parent
6f27ba9773
commit
0035ef390d
2
Makefile
2
Makefile
@ -9,7 +9,7 @@ include $(DEVKITARM)/ds_rules
|
|||||||
|
|
||||||
export TARGET := GimliDS
|
export TARGET := GimliDS
|
||||||
export TOPDIR := $(CURDIR)
|
export TOPDIR := $(CURDIR)
|
||||||
export VERSION := 0.8b
|
export VERSION := 0.9
|
||||||
|
|
||||||
ICON := -b $(CURDIR)/C64_icon.bmp "GimliDS $(VERSION);wavemotion-dave;https://github.com/wavemotion-dave/GimliDS"
|
ICON := -b $(CURDIR)/C64_icon.bmp "GimliDS $(VERSION);wavemotion-dave;https://github.com/wavemotion-dave/GimliDS"
|
||||||
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
@ -170,12 +170,9 @@ C64::~C64()
|
|||||||
delete TheCPU;
|
delete TheCPU;
|
||||||
delete TheDisplay;
|
delete TheDisplay;
|
||||||
|
|
||||||
//delete[] RAM;
|
|
||||||
delete[] Basic;
|
delete[] Basic;
|
||||||
//delete[] Kernal;
|
|
||||||
delete[] Char;
|
delete[] Char;
|
||||||
delete[] Color;
|
delete[] Color;
|
||||||
//delete[] RAM1541;
|
|
||||||
delete[] ROM1541;
|
delete[] ROM1541;
|
||||||
|
|
||||||
c64_dtor();
|
c64_dtor();
|
||||||
@ -896,6 +893,8 @@ ITCM_CODE void C64::VBlank(bool draw_frame)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u8 key_row_map[] __attribute__((section(".dtcm"))) = {7,7,0,0,0,0,6,6,5,5,5,5,5,6,6,5, 1,3,2,2,1,2,3,3,4,4,4,5,4,4,4,5,7,2,1,2,3,3,1,2,3,1, 7,7,1,1,2,2,3,3,4,4};
|
||||||
|
u8 key_col_map[] __attribute__((section(".dtcm"))) = {7,5,4,5,6,3,1,5,0,3,4,7,5,2,7,6, 2,4,4,2,6,5,2,5,1,2,5,2,4,7,6,1,6,1,5,6,6,7,1,7,1,4, 0,3,0,3,0,3,0,3,0,3};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Poll joystick port, return CIA mask
|
* Poll joystick port, return CIA mask
|
||||||
@ -905,6 +904,15 @@ u8 retkey=0;
|
|||||||
u16 dampen=0;
|
u16 dampen=0;
|
||||||
extern s16 temp_offset;
|
extern s16 temp_offset;
|
||||||
extern u16 slide_dampen;
|
extern u16 slide_dampen;
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Chuckie-Style d-pad keeps moving in the last known direction for a few more
|
||||||
|
// frames to help make those hairpin turns up and off ladders much easier...
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
u8 slide_n_glide_key_up = 0;
|
||||||
|
u8 slide_n_glide_key_down = 0;
|
||||||
|
u8 slide_n_glide_key_left = 0;
|
||||||
|
u8 slide_n_glide_key_right = 0;
|
||||||
|
|
||||||
uint8 C64::poll_joystick(int port)
|
uint8 C64::poll_joystick(int port)
|
||||||
{
|
{
|
||||||
uint8 j = 0xff;
|
uint8 j = 0xff;
|
||||||
@ -922,140 +930,147 @@ uint8 C64::poll_joystick(int port)
|
|||||||
|
|
||||||
u32 keys= keysHeld();
|
u32 keys= keysHeld();
|
||||||
|
|
||||||
u8 joy_up = 0;
|
u8 joy_up = 0;
|
||||||
u8 joy_dn = 0;
|
u8 joy_down = 0;
|
||||||
u8 joy_fire = 0;
|
u8 joy_left = 0;
|
||||||
|
u8 joy_right = 0;
|
||||||
if(keys & KEY_B)
|
u8 joy_fire = 0;
|
||||||
|
u8 mappable_key_press[8] = {0,0,0,0,0,0,0,0};
|
||||||
|
|
||||||
|
if (keys & (KEY_UP | KEY_DOWN | KEY_LEFT | KEY_RIGHT | KEY_A | KEY_B | KEY_X | KEY_Y))
|
||||||
{
|
{
|
||||||
switch (myConfig.key_B)
|
if (myConfig.joyMode == JOYMODE_SLIDE_N_GLIDE)
|
||||||
{
|
{
|
||||||
case KEY_MAP_RETURN:
|
if (keys & KEY_UP)
|
||||||
TheDisplay->KeyPress(MATRIX(0,1), TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
{
|
||||||
retkey=1;
|
slide_n_glide_key_up = 12;
|
||||||
break;
|
slide_n_glide_key_down = 0;
|
||||||
case KEY_MAP_SPACE:
|
}
|
||||||
TheDisplay->KeyPress(MATRIX(7,4), TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
if (keys & KEY_DOWN)
|
||||||
space=1;
|
{
|
||||||
break;
|
slide_n_glide_key_down = 12;
|
||||||
case KEY_MAP_PAN_UP:
|
slide_n_glide_key_up = 0;
|
||||||
temp_offset = -16;
|
}
|
||||||
slide_dampen = 15;
|
if (keys & KEY_LEFT)
|
||||||
break;
|
{
|
||||||
case KEY_MAP_PAN_DN:
|
slide_n_glide_key_left = 12;
|
||||||
temp_offset = 16;
|
slide_n_glide_key_right = 0;
|
||||||
slide_dampen = 15;
|
}
|
||||||
break;
|
if (keys & KEY_RIGHT)
|
||||||
case KEY_MAP_JOY_UP:
|
{
|
||||||
joy_up = 1;
|
slide_n_glide_key_right = 12;
|
||||||
break;
|
slide_n_glide_key_left = 0;
|
||||||
case KEY_MAP_JOY_DN:
|
}
|
||||||
joy_dn = 1;
|
|
||||||
break;
|
if (slide_n_glide_key_up)
|
||||||
case KEY_MAP_JOY_FIRE:
|
{
|
||||||
joy_fire = 1;
|
slide_n_glide_key_up--;
|
||||||
break;
|
keys |= KEY_UP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slide_n_glide_key_down)
|
||||||
|
{
|
||||||
|
slide_n_glide_key_down--;
|
||||||
|
keys |= KEY_DOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slide_n_glide_key_left)
|
||||||
|
{
|
||||||
|
slide_n_glide_key_left--;
|
||||||
|
keys |= KEY_LEFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slide_n_glide_key_right)
|
||||||
|
{
|
||||||
|
slide_n_glide_key_right--;
|
||||||
|
keys |= KEY_RIGHT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
if (keys & KEY_UP) mappable_key_press[0] = 1;
|
||||||
|
if (keys & KEY_DOWN) mappable_key_press[1] = 1;
|
||||||
|
if (keys & KEY_LEFT) mappable_key_press[2] = 1;
|
||||||
|
if (keys & KEY_RIGHT) mappable_key_press[3] = 1;
|
||||||
|
|
||||||
if(keys & KEY_A)
|
if (keys & KEY_A) mappable_key_press[4] = 1;
|
||||||
{
|
if (keys & KEY_B) mappable_key_press[5] = 1;
|
||||||
switch (myConfig.key_A)
|
if (keys & KEY_X) mappable_key_press[6] = 1;
|
||||||
{
|
if (keys & KEY_Y) mappable_key_press[7] = 1;
|
||||||
case KEY_MAP_RETURN:
|
}
|
||||||
TheDisplay->KeyPress(MATRIX(0,1), TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
else // No NDS keys pressed...
|
||||||
retkey=1;
|
{
|
||||||
break;
|
if (slide_n_glide_key_up) slide_n_glide_key_up--;
|
||||||
case KEY_MAP_SPACE:
|
if (slide_n_glide_key_down) slide_n_glide_key_down--;
|
||||||
TheDisplay->KeyPress(MATRIX(7,4), TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
if (slide_n_glide_key_left) slide_n_glide_key_left--;
|
||||||
space=1;
|
if (slide_n_glide_key_right) slide_n_glide_key_right--;
|
||||||
break;
|
}
|
||||||
case KEY_MAP_PAN_UP:
|
|
||||||
temp_offset = -16;
|
|
||||||
slide_dampen = 15;
|
|
||||||
break;
|
|
||||||
case KEY_MAP_PAN_DN:
|
|
||||||
temp_offset = 16;
|
|
||||||
slide_dampen = 15;
|
|
||||||
break;
|
|
||||||
case KEY_MAP_JOY_UP:
|
|
||||||
joy_up = 1;
|
|
||||||
break;
|
|
||||||
case KEY_MAP_JOY_DN:
|
|
||||||
joy_dn = 1;
|
|
||||||
break;
|
|
||||||
case KEY_MAP_JOY_FIRE:
|
|
||||||
joy_fire = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(keys & KEY_X)
|
u8 auto_fire = 0;
|
||||||
|
for (int i=0; i<8; i++)
|
||||||
{
|
{
|
||||||
switch (myConfig.key_X)
|
if (mappable_key_press[i])
|
||||||
{
|
{
|
||||||
case KEY_MAP_RETURN:
|
switch (myConfig.key_map[i])
|
||||||
TheDisplay->KeyPress(MATRIX(0,1), TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
{
|
||||||
retkey=1;
|
// Handle space and return specially
|
||||||
break;
|
case KEY_MAP_RETURN:
|
||||||
case KEY_MAP_SPACE:
|
TheDisplay->KeyPress(MATRIX(0,1), TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
||||||
TheDisplay->KeyPress(MATRIX(7,4), TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
retkey=1;
|
||||||
space=1;
|
break;
|
||||||
break;
|
case KEY_MAP_SPACE:
|
||||||
case KEY_MAP_PAN_UP:
|
TheDisplay->KeyPress(MATRIX(7,4), TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
||||||
temp_offset = -16;
|
space=1;
|
||||||
slide_dampen = 15;
|
break;
|
||||||
break;
|
|
||||||
case KEY_MAP_PAN_DN:
|
|
||||||
temp_offset = 16;
|
|
||||||
slide_dampen = 15;
|
|
||||||
break;
|
|
||||||
case KEY_MAP_JOY_UP:
|
|
||||||
joy_up = 1;
|
|
||||||
break;
|
|
||||||
case KEY_MAP_JOY_DN:
|
|
||||||
joy_dn = 1;
|
|
||||||
break;
|
|
||||||
case KEY_MAP_JOY_FIRE:
|
|
||||||
joy_fire = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(keys & KEY_Y)
|
// Handle all joystick mapped buttons
|
||||||
{
|
case KEY_MAP_JOY_UP:
|
||||||
switch (myConfig.key_Y)
|
joy_up = 1;
|
||||||
{
|
break;
|
||||||
case KEY_MAP_RETURN:
|
case KEY_MAP_JOY_DOWN:
|
||||||
TheDisplay->KeyPress(MATRIX(0,1), TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
joy_down = 1;
|
||||||
retkey=1;
|
break;
|
||||||
break;
|
case KEY_MAP_JOY_LEFT:
|
||||||
case KEY_MAP_SPACE:
|
joy_left = 1;
|
||||||
TheDisplay->KeyPress(MATRIX(7,4), TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
break;
|
||||||
space=1;
|
case KEY_MAP_JOY_RIGHT:
|
||||||
break;
|
joy_right = 1;
|
||||||
case KEY_MAP_PAN_UP:
|
break;
|
||||||
temp_offset = -16;
|
case KEY_MAP_JOY_FIRE:
|
||||||
slide_dampen = 15;
|
joy_fire = 1;
|
||||||
break;
|
break;
|
||||||
case KEY_MAP_PAN_DN:
|
case KEY_MAP_JOY_AUTO:
|
||||||
temp_offset = 16;
|
joy_fire = 1;
|
||||||
slide_dampen = 15;
|
auto_fire = 1;
|
||||||
break;
|
break;
|
||||||
case KEY_MAP_JOY_UP:
|
|
||||||
joy_up = 1;
|
// Handle special meta-mapped buttons (pan screen Up/Down)
|
||||||
break;
|
case KEY_MAP_PAN_UP16:
|
||||||
case KEY_MAP_JOY_DN:
|
temp_offset = -16;
|
||||||
joy_dn = 1;
|
slide_dampen = 15;
|
||||||
break;
|
break;
|
||||||
case KEY_MAP_JOY_FIRE:
|
case KEY_MAP_PAN_UP24:
|
||||||
joy_fire = 1;
|
temp_offset = -24;
|
||||||
break;
|
slide_dampen = 15;
|
||||||
|
break;
|
||||||
|
case KEY_MAP_PAN_DN16:
|
||||||
|
temp_offset = 16;
|
||||||
|
slide_dampen = 15;
|
||||||
|
break;
|
||||||
|
case KEY_MAP_PAN_DN24:
|
||||||
|
temp_offset = 24;
|
||||||
|
slide_dampen = 15;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Handle all other keypresses... mark the key as pressed for the PollKeyboard() routine
|
||||||
|
default:
|
||||||
|
TheDisplay->IssueKeypress(key_row_map[myConfig.key_map[i]-8], key_col_map[myConfig.key_map[i]-8], TheCIA1->KeyMatrix, TheCIA1->RevMatrix);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 auto_fire_dampen=0;
|
static u32 auto_fire_dampen=0;
|
||||||
if ((myConfig.autoFire) && joy_fire)
|
if (auto_fire && joy_fire)
|
||||||
{
|
{
|
||||||
if (++auto_fire_dampen & 0x08) joy_fire=0;
|
if (++auto_fire_dampen & 0x08) joy_fire=0;
|
||||||
} else auto_fire_dampen=0;
|
} else auto_fire_dampen=0;
|
||||||
@ -1075,7 +1090,7 @@ uint8 C64::poll_joystick(int port)
|
|||||||
if (keys & KEY_LEFT)
|
if (keys & KEY_LEFT)
|
||||||
{
|
{
|
||||||
dampen = 4;
|
dampen = 4;
|
||||||
myConfig.offsetX++;
|
if (myConfig.offsetX < 64) myConfig.offsetX++;
|
||||||
}
|
}
|
||||||
if (keys & KEY_RIGHT)
|
if (keys & KEY_RIGHT)
|
||||||
{
|
{
|
||||||
@ -1094,12 +1109,12 @@ uint8 C64::poll_joystick(int port)
|
|||||||
if (keys & KEY_DOWN)
|
if (keys & KEY_DOWN)
|
||||||
{
|
{
|
||||||
dampen = 4;
|
dampen = 4;
|
||||||
myConfig.scaleY--;
|
if (myConfig.scaleY > 140) myConfig.scaleY--;
|
||||||
}
|
}
|
||||||
if (keys & KEY_LEFT)
|
if (keys & KEY_LEFT)
|
||||||
{
|
{
|
||||||
dampen = 4;
|
dampen = 4;
|
||||||
myConfig.scaleX--;
|
if (myConfig.scaleX > 200) myConfig.scaleX--;
|
||||||
}
|
}
|
||||||
if (keys & KEY_RIGHT)
|
if (keys & KEY_RIGHT)
|
||||||
{
|
{
|
||||||
@ -1119,23 +1134,19 @@ uint8 C64::poll_joystick(int port)
|
|||||||
if( keys & KEY_START && !dampen)
|
if( keys & KEY_START && !dampen)
|
||||||
{
|
{
|
||||||
kbd_buf_feed("\rLOAD\"*\",8,1\rRUN\r");
|
kbd_buf_feed("\rLOAD\"*\",8,1\rRUN\r");
|
||||||
dampen = 30;
|
dampen = 50; // Full second - do not repeat this often!
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dampen) dampen--;
|
if (dampen) dampen--;
|
||||||
|
|
||||||
if (!dampen)
|
// Handle the joystick input... never dampen this!
|
||||||
{
|
if(port != myConfig.joyPort) return j;
|
||||||
if(port != myConfig.joyPort) return j;
|
|
||||||
|
|
||||||
if( keys & KEY_LEFT ) j&=0xfb;
|
if( joy_up ) j&=0xfe; // Up
|
||||||
if( keys & KEY_RIGHT ) j&=0xf7;
|
if( joy_down ) j&=0xfd; // Down
|
||||||
if( keys & KEY_UP ) j&=0xfe;
|
if( joy_left ) j&=0xfb; // Left
|
||||||
if( keys & KEY_DOWN ) j&=0xfd;
|
if( joy_right ) j&=0xf7; // Right
|
||||||
if( joy_fire ) j&=0xef; // Fire button
|
if( joy_fire ) j&=0xef; // Fire button
|
||||||
if( joy_up ) j&=0xfe;
|
|
||||||
if( joy_dn ) j&=0xfd;
|
|
||||||
}
|
|
||||||
|
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
|
@ -262,8 +262,8 @@ u16 vBlanks;
|
|||||||
void vblankIntr(void)
|
void vblankIntr(void)
|
||||||
{
|
{
|
||||||
vBlanks++;
|
vBlanks++;
|
||||||
int cxBG = (myConfig.offsetX << 8);
|
int cxBG = ((s16)myConfig.offsetX << 8);
|
||||||
int cyBG = (myConfig.offsetY+temp_offset) << 8;
|
int cyBG = ((s16)myConfig.offsetY+temp_offset) << 8;
|
||||||
int xdxBG = ((320 / myConfig.scaleX) << 8) | (320 % myConfig.scaleX) ;
|
int xdxBG = ((320 / myConfig.scaleX) << 8) | (320 % myConfig.scaleX) ;
|
||||||
int ydyBG = ((200 / myConfig.scaleY) << 8) | (200 % myConfig.scaleY);
|
int ydyBG = ((200 / myConfig.scaleY) << 8) | (200 % myConfig.scaleY);
|
||||||
|
|
||||||
@ -510,6 +510,13 @@ bool m_tpActive=false;
|
|||||||
touchPosition m_tp;
|
touchPosition m_tp;
|
||||||
u8 issue_commodore_key = 0;
|
u8 issue_commodore_key = 0;
|
||||||
|
|
||||||
|
void C64Display::IssueKeypress(uint8 row, uint8 col, uint8 *key_matrix, uint8 *rev_matrix)
|
||||||
|
{
|
||||||
|
c64_key = MATRIX(row,col);
|
||||||
|
KeyPress(c64_key, key_matrix, rev_matrix);
|
||||||
|
lastc64key=c64_key;
|
||||||
|
}
|
||||||
|
|
||||||
void C64Display::PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick)
|
void C64Display::PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick)
|
||||||
{
|
{
|
||||||
scanKeys();
|
scanKeys();
|
||||||
|
@ -59,6 +59,7 @@ public:
|
|||||||
void PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick);
|
void PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick);
|
||||||
void InitColors(uint8 *colors);
|
void InitColors(uint8 *colors);
|
||||||
void NewPrefs(Prefs *prefs);
|
void NewPrefs(Prefs *prefs);
|
||||||
|
void IssueKeypress(uint8 row, uint8 col, uint8 *key_matrix, uint8 *rev_matrix);
|
||||||
C64 *TheC64;
|
C64 *TheC64;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -41,7 +41,6 @@ Prefs::Prefs()
|
|||||||
|
|
||||||
SIDType = SIDTYPE_DIGITAL;
|
SIDType = SIDTYPE_DIGITAL;
|
||||||
|
|
||||||
LimitSpeed = true;
|
|
||||||
FastReset = true;
|
FastReset = true;
|
||||||
CIAIRQHack = false;
|
CIAIRQHack = false;
|
||||||
TrueDrive = false; // True Drive Emulation when TRUE (slower emulation)
|
TrueDrive = false; // True Drive Emulation when TRUE (slower emulation)
|
||||||
|
@ -44,7 +44,6 @@ public:
|
|||||||
|
|
||||||
char DrivePath[2][256]; // Path for drive 8 and 9
|
char DrivePath[2][256]; // Path for drive 8 and 9
|
||||||
int SIDType; // SID emulation type
|
int SIDType; // SID emulation type
|
||||||
bool LimitSpeed; // Limit speed to 100%
|
|
||||||
bool FastReset; // Skip RAM test on reset
|
bool FastReset; // Skip RAM test on reset
|
||||||
bool CIAIRQHack; // Write to CIA ICR clears IRQ
|
bool CIAIRQHack; // Write to CIA ICR clears IRQ
|
||||||
bool TrueDrive; // Enable processor-level 1541 emulation
|
bool TrueDrive; // Enable processor-level 1541 emulation
|
||||||
|
@ -46,10 +46,11 @@ extern void BottomScreenMainMenu(void);
|
|||||||
#define MENU_ACTION_END 255 // Always the last sentinal value
|
#define MENU_ACTION_END 255 // Always the last sentinal value
|
||||||
#define MENU_ACTION_EXIT 0 // Exit the menu
|
#define MENU_ACTION_EXIT 0 // Exit the menu
|
||||||
#define MENU_ACTION_RESET_EMU 1 // Reset Emulator
|
#define MENU_ACTION_RESET_EMU 1 // Reset Emulator
|
||||||
#define MENU_ACTION_SAVE_STATE 2 //
|
#define MENU_ACTION_SAVE_STATE 2 // Save State
|
||||||
#define MENU_ACTION_LOAD_STATE 3 //
|
#define MENU_ACTION_LOAD_STATE 3 // Load State
|
||||||
#define MENU_ACTION_CONFIG 4 //
|
#define MENU_ACTION_CONFIG 4 // Configure Game
|
||||||
#define MENU_ACTION_PRESS_C64 5 // Issue the actual C= key!
|
#define MENU_ACTION_PRESS_C64 5 // Issue the actual C= key!
|
||||||
|
#define MENU_ACTION_QUIT_EMU 6 // Exit Emulator
|
||||||
#define MENU_ACTION_SKIP 99 // Skip this MENU choice
|
#define MENU_ACTION_SKIP 99 // Skip this MENU choice
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -74,6 +75,7 @@ MainMenu_t main_menu =
|
|||||||
{(char *)" LOAD STATE ", MENU_ACTION_LOAD_STATE},
|
{(char *)" LOAD STATE ", MENU_ACTION_LOAD_STATE},
|
||||||
{(char *)" RESET C64 ", MENU_ACTION_RESET_EMU},
|
{(char *)" RESET C64 ", MENU_ACTION_RESET_EMU},
|
||||||
{(char *)" PRESS @ KEY ", MENU_ACTION_PRESS_C64},
|
{(char *)" PRESS @ KEY ", MENU_ACTION_PRESS_C64},
|
||||||
|
{(char *)" QUIT GIMLIDS", MENU_ACTION_QUIT_EMU},
|
||||||
{(char *)" EXIT MENU ", MENU_ACTION_EXIT},
|
{(char *)" EXIT MENU ", MENU_ACTION_EXIT},
|
||||||
{(char *)" NULL ", MENU_ACTION_END},
|
{(char *)" NULL ", MENU_ACTION_END},
|
||||||
},
|
},
|
||||||
@ -168,6 +170,10 @@ u8 MainMenu(C64 *the_c64)
|
|||||||
{
|
{
|
||||||
switch(menu->menulist[menuSelection].menu_action)
|
switch(menu->menulist[menuSelection].menu_action)
|
||||||
{
|
{
|
||||||
|
case MENU_ACTION_QUIT_EMU:
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
|
||||||
case MENU_ACTION_PRESS_C64:
|
case MENU_ACTION_PRESS_C64:
|
||||||
extern u8 issue_commodore_key;
|
extern u8 issue_commodore_key;
|
||||||
issue_commodore_key = 1;
|
issue_commodore_key = 1;
|
||||||
@ -338,31 +344,41 @@ void SetDefaultGameConfig(void)
|
|||||||
{
|
{
|
||||||
myConfig.game_crc = 0; // No game in this slot yet
|
myConfig.game_crc = 0; // No game in this slot yet
|
||||||
|
|
||||||
myConfig.key_A = 0;
|
myConfig.key_map[0] = KEY_MAP_JOY_UP; // D-Pad Up
|
||||||
myConfig.key_B = 1;
|
myConfig.key_map[1] = KEY_MAP_JOY_DOWN; // D-Pad Down
|
||||||
myConfig.key_Y = 2;
|
myConfig.key_map[2] = KEY_MAP_JOY_LEFT; // D-Pad Left
|
||||||
myConfig.key_X = 3;
|
myConfig.key_map[3] = KEY_MAP_JOY_RIGHT;// D-Pad Right
|
||||||
myConfig.autoFire = 0;
|
|
||||||
myConfig.trueDrive = 0;
|
myConfig.key_map[4] = KEY_MAP_JOY_FIRE; // A = Fire Button
|
||||||
myConfig.jitter = 1; // Medium
|
myConfig.key_map[5] = KEY_MAP_SPACE; // B = SPACE key
|
||||||
myConfig.diskSFX = 1; // Disk sound effects on
|
myConfig.key_map[6] = KEY_MAP_JOY_UP; // X = Joy Up
|
||||||
myConfig.joyPort = 0; // Default to Joy1
|
myConfig.key_map[7] = KEY_MAP_RETURN; // Y = RETURN key
|
||||||
|
|
||||||
|
myConfig.key_map[8] = KEY_MAP_SPACE; // Spare 1
|
||||||
|
myConfig.key_map[9] = KEY_MAP_SPACE; // Spare 2
|
||||||
|
|
||||||
|
myConfig.trueDrive = 0; // Fast 1541 emulation by default
|
||||||
|
myConfig.jitter = 1; // Medium level of jitter
|
||||||
|
myConfig.diskSFX = 1; // Disk sound effects on
|
||||||
|
myConfig.joyPort = 0; // Default to Joy1
|
||||||
|
myConfig.joyMode = 0; // Default is normal joypad / dpad
|
||||||
myConfig.reserved2 = 0;
|
myConfig.reserved2 = 0;
|
||||||
myConfig.reserved3 = 0;
|
myConfig.reserved3 = 0;
|
||||||
myConfig.reserved4 = 0;
|
myConfig.reserved4 = 0;
|
||||||
myConfig.reserved5 = 0;
|
myConfig.reserved5 = 0;
|
||||||
myConfig.reserved6 = 0xA5; // So it's easy to spot on an "upgrade" and we can re-default it
|
myConfig.reserved6 = 0;
|
||||||
|
myConfig.reserved7 = 0;
|
||||||
|
myConfig.reserved8 = 0xA5; // So it's easy to spot on an "upgrade" and we can re-default it
|
||||||
|
myConfig.cpuCycles = 0; // Normal 63 - this is the delta adjustment to that
|
||||||
|
myConfig.badCycles = 0; // Normal 23 - this is the delta adjustment to that
|
||||||
|
|
||||||
myConfig.cpuCycles = 0; // Normal 63 - this is the adjustment to that
|
myConfig.offsetX = 32; // Push the side border off the main display
|
||||||
myConfig.badCycles = 0; // Normal 23 - this is the adjustment to that
|
myConfig.offsetY = 19; // Push the top border off the main display
|
||||||
|
myConfig.scaleX = 256; // Scale the 320 pixels of C64 display to the DS 256 pixels (squashed... booo!)
|
||||||
myConfig.offsetX = 32;
|
myConfig.scaleY = 200; // Scale the 200 pixels of C64 display to the DS 200 (yes, there is only 192 so this will cut... use PAN UP/DN)
|
||||||
myConfig.offsetY = 19;
|
|
||||||
myConfig.scaleX = 256;
|
|
||||||
myConfig.scaleY = 200;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s16 CycleDeltas[] = {0,1,2,3,4,5,6,7,8,9,-9,-8,-7,-6,-5,-4,-3,-2,-1};
|
s16 CycleDeltas[] = {0,1,2,3,4,5,6,7,8,9,-9,-8,-7,-6,-5,-4,-3,-2,-1}; // Used with myConfig.cpuCycles and myConfig.badCycles
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Read file twice and ensure we get the same CRC... if not, do it again
|
// Read file twice and ensure we get the same CRC... if not, do it again
|
||||||
@ -533,29 +549,44 @@ void FindConfig(void)
|
|||||||
struct options_t
|
struct options_t
|
||||||
{
|
{
|
||||||
const char *label;
|
const char *label;
|
||||||
const char *option[20];
|
const char *option[64];
|
||||||
u8 *option_val;
|
u8 *option_val;
|
||||||
u8 option_max;
|
u8 option_max;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CYCLE_DELTA_STR "+0","+1","+2","+3","+4","+5","+6","+7","+8","+9","-9","-8","-7","-6","-5","-4","-3","-2","-1",
|
#define CYCLE_DELTA_STR "+0","+1","+2","+3","+4","+5","+6","+7","+8","+9","-9","-8","-7","-6","-5","-4","-3","-2","-1",
|
||||||
|
|
||||||
|
#define KEY_MAP_OPTIONS "JOY FIRE", "JOY UP", "JOY DOWN", "JOY LEFT", "JOY RIGHT", "JOY AUTOFIRE",\
|
||||||
|
"KEY SPACE", "KEY RETURN", "RUN/STOP", "KEY C=", "KEY F1", "KEY F3", "KEY F5", "KEY F7",\
|
||||||
|
"KEY *", "KEY =", "KEY +", "KEY -", "KEY PERIOD", "KEY COMMA", "KEY COLON", "KEY SEMI", "KEY SLASH", "KEY @",\
|
||||||
|
"KEY A", "KEY B", "KEY C", "KEY D", "KEY E", "KEY F", "KEY G", "KEY H", "KEY I", "KEY J", "KEY K", "KEY L",\
|
||||||
|
"KEY M", "KEY N", "KEY O", "KEY P", "KEY Q", "KEY R", "KEY S", "KEY T", "KEY U", "KEY V", "KEY W", "KEY X",\
|
||||||
|
"KEY Y", "KEY Z", "KEY 1", "KEY 2", "KEY 3", "KEY 4", "KEY 5", "KEY 6", "KEY 7", "KEY 8", "KEY 9", "KEY 0",\
|
||||||
|
"PAN-UP 16", "PAN-UP 24", "PAN-DOWN 16", "PAN-DOWN 24"
|
||||||
|
|
||||||
|
|
||||||
const struct options_t Option_Table[1][20] =
|
const struct options_t Option_Table[1][20] =
|
||||||
{
|
{
|
||||||
// Game Specific Configuration
|
// Game Specific Configuration
|
||||||
{
|
{
|
||||||
{"TRUE DRIVE", {"DISABLE (FAST)", "ENABLED (SLOW)"}, &myConfig.trueDrive, 2},
|
{"TRUE DRIVE", {"DISABLE (FAST)", "ENABLED (SLOW)"}, &myConfig.trueDrive, 2},
|
||||||
{"AUTO FIRE", {"OFF", "ON"}, &myConfig.autoFire, 2},
|
|
||||||
{"JOY PORT", {"PORT 1", "PORT 2"}, &myConfig.joyPort, 2},
|
{"JOY PORT", {"PORT 1", "PORT 2"}, &myConfig.joyPort, 2},
|
||||||
|
{"JOY MODE", {"NORMAL", "SLIDE-N-GLIDE"}, &myConfig.joyMode, 2},
|
||||||
{"LCD JITTER", {"NONE", "LIGHT", "HEAVY"}, &myConfig.jitter, 3},
|
{"LCD JITTER", {"NONE", "LIGHT", "HEAVY"}, &myConfig.jitter, 3},
|
||||||
{"DISK SOUND", {"SFX OFF", "SFX ON"}, &myConfig.diskSFX, 2},
|
{"DISK SOUND", {"SFX OFF", "SFX ON"}, &myConfig.diskSFX, 2},
|
||||||
{"A BUTTON", {"JOY FIRE", "SPACE", "RETURN", "JOY UP", "JOY DOWN", "PAN-UP", "PAN-DOWN"}, &myConfig.key_A, 7},
|
|
||||||
{"B BUTTON", {"JOY FIRE", "SPACE", "RETURN", "JOY UP", "JOY DOWN", "PAN-UP", "PAN-DOWN"}, &myConfig.key_B, 7},
|
|
||||||
{"X BUTTON", {"JOY FIRE", "SPACE", "RETURN", "JOY UP", "JOY DOWN", "PAN-UP", "PAN-DOWN"}, &myConfig.key_X, 7},
|
|
||||||
{"Y BUTTON", {"JOY FIRE", "SPACE", "RETURN", "JOY UP", "JOY DOWN", "PAN-UP", "PAN-DOWN"}, &myConfig.key_Y, 7},
|
|
||||||
{"CPU CYCLES", {CYCLE_DELTA_STR}, &myConfig.cpuCycles, 19},
|
{"CPU CYCLES", {CYCLE_DELTA_STR}, &myConfig.cpuCycles, 19},
|
||||||
{"BAD CYCLES", {CYCLE_DELTA_STR}, &myConfig.badCycles, 19},
|
{"BAD CYCLES", {CYCLE_DELTA_STR}, &myConfig.badCycles, 19},
|
||||||
|
|
||||||
|
{"D-PAD UP", {KEY_MAP_OPTIONS}, &myConfig.key_map[0], 64},
|
||||||
|
{"D-PAD DOWN", {KEY_MAP_OPTIONS}, &myConfig.key_map[1], 64},
|
||||||
|
{"D-PAD LEFT", {KEY_MAP_OPTIONS}, &myConfig.key_map[2], 64},
|
||||||
|
{"D-PAD RIGHT", {KEY_MAP_OPTIONS}, &myConfig.key_map[3], 64},
|
||||||
|
|
||||||
|
{"A BUTTON", {KEY_MAP_OPTIONS}, &myConfig.key_map[4], 64},
|
||||||
|
{"B BUTTON", {KEY_MAP_OPTIONS}, &myConfig.key_map[5], 64},
|
||||||
|
{"X BUTTON", {KEY_MAP_OPTIONS}, &myConfig.key_map[6], 64},
|
||||||
|
{"Y BUTTON", {KEY_MAP_OPTIONS}, &myConfig.key_map[7], 64},
|
||||||
|
|
||||||
{NULL, {"", ""}, NULL, 1},
|
{NULL, {"", ""}, NULL, 1},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,30 +1,29 @@
|
|||||||
|
|
||||||
#define MAX_CONFIGS 1150
|
#define MAX_CONFIGS 960
|
||||||
#define CONFIG_VERSION 0x0005
|
#define CONFIG_VERSION 0x0006
|
||||||
|
|
||||||
extern s16 CycleDeltas[];
|
extern s16 CycleDeltas[];
|
||||||
|
|
||||||
struct __attribute__((__packed__)) Config_t
|
struct __attribute__((__packed__)) Config_t
|
||||||
{
|
{
|
||||||
u32 game_crc;
|
u32 game_crc;
|
||||||
u8 key_A;
|
u8 key_map[10]; // U,D,L,R, A,B,X,Y, +2 spares
|
||||||
u8 key_B;
|
|
||||||
u8 key_X;
|
|
||||||
u8 key_Y;
|
|
||||||
u8 trueDrive;
|
u8 trueDrive;
|
||||||
u8 autoFire;
|
|
||||||
u8 jitter;
|
u8 jitter;
|
||||||
u8 diskSFX;
|
u8 diskSFX;
|
||||||
u8 joyPort;
|
u8 joyPort;
|
||||||
|
u8 joyMode;
|
||||||
u8 reserved2;
|
u8 reserved2;
|
||||||
u8 reserved3;
|
u8 reserved3;
|
||||||
u8 reserved4;
|
u8 reserved4;
|
||||||
u8 reserved5;
|
u8 reserved5;
|
||||||
u8 reserved6;
|
u8 reserved6;
|
||||||
|
u8 reserved7;
|
||||||
|
u8 reserved8;
|
||||||
u8 cpuCycles;
|
u8 cpuCycles;
|
||||||
u8 badCycles;
|
u8 badCycles;
|
||||||
s16 offsetX;
|
s8 offsetX;
|
||||||
s16 offsetY;
|
s8 offsetY;
|
||||||
s16 scaleX;
|
s16 scaleX;
|
||||||
s16 scaleY;
|
s16 scaleY;
|
||||||
};
|
};
|
||||||
@ -32,12 +31,78 @@ struct __attribute__((__packed__)) Config_t
|
|||||||
extern struct Config_t myConfig;
|
extern struct Config_t myConfig;
|
||||||
|
|
||||||
#define KEY_MAP_JOY_FIRE 0
|
#define KEY_MAP_JOY_FIRE 0
|
||||||
#define KEY_MAP_SPACE 1
|
#define KEY_MAP_JOY_UP 1
|
||||||
#define KEY_MAP_RETURN 2
|
#define KEY_MAP_JOY_DOWN 2
|
||||||
#define KEY_MAP_JOY_UP 3
|
#define KEY_MAP_JOY_LEFT 3
|
||||||
#define KEY_MAP_JOY_DN 4
|
#define KEY_MAP_JOY_RIGHT 4
|
||||||
#define KEY_MAP_PAN_UP 5
|
#define KEY_MAP_JOY_AUTO 5
|
||||||
#define KEY_MAP_PAN_DN 6
|
|
||||||
|
#define KEY_MAP_SPACE 6
|
||||||
|
#define KEY_MAP_RETURN 7
|
||||||
|
|
||||||
|
#define KEY_MAP_RUNSTOP 8
|
||||||
|
#define KEY_MAP_COMMODORE 9
|
||||||
|
#define KEY_MAP_F1 10
|
||||||
|
#define KEY_MAP_F3 11
|
||||||
|
#define KEY_MAP_F5 12
|
||||||
|
#define KEY_MAP_F7 13
|
||||||
|
#define KEY_MAP_ASTERISK 14
|
||||||
|
#define KEY_MAP_EQUALS 15
|
||||||
|
#define KEY_MAP_PLUS 16
|
||||||
|
#define KEY_MAP_MINUS 17
|
||||||
|
#define KEY_MAP_PERIOD 18
|
||||||
|
#define KEY_MAP_COMMA 19
|
||||||
|
#define KEY_MAP_COLON 20
|
||||||
|
#define KEY_MAP_SEMI 21
|
||||||
|
#define KEY_MAP_SLASH 22
|
||||||
|
#define KEY_MAP_ATSIGN 23
|
||||||
|
|
||||||
|
#define KEY_MAP_A 24
|
||||||
|
#define KEY_MAP_B 25
|
||||||
|
#define KEY_MAP_C 26
|
||||||
|
#define KEY_MAP_D 27
|
||||||
|
#define KEY_MAP_E 28
|
||||||
|
#define KEY_MAP_F 29
|
||||||
|
#define KEY_MAP_G 30
|
||||||
|
#define KEY_MAP_H 31
|
||||||
|
#define KEY_MAP_I 32
|
||||||
|
#define KEY_MAP_J 33
|
||||||
|
#define KEY_MAP_K 34
|
||||||
|
#define KEY_MAP_L 35
|
||||||
|
#define KEY_MAP_M 36
|
||||||
|
#define KEY_MAP_N 37
|
||||||
|
#define KEY_MAP_O 38
|
||||||
|
#define KEY_MAP_P 39
|
||||||
|
#define KEY_MAP_Q 40
|
||||||
|
#define KEY_MAP_R 41
|
||||||
|
#define KEY_MAP_S 42
|
||||||
|
#define KEY_MAP_T 43
|
||||||
|
#define KEY_MAP_U 44
|
||||||
|
#define KEY_MAP_V 45
|
||||||
|
#define KEY_MAP_W 46
|
||||||
|
#define KEY_MAP_X 47
|
||||||
|
#define KEY_MAP_Y 48
|
||||||
|
#define KEY_MAP_Z 49
|
||||||
|
#define KEY_MAP_1 50
|
||||||
|
#define KEY_MAP_2 51
|
||||||
|
#define KEY_MAP_3 52
|
||||||
|
#define KEY_MAP_4 53
|
||||||
|
#define KEY_MAP_5 54
|
||||||
|
#define KEY_MAP_6 55
|
||||||
|
#define KEY_MAP_7 56
|
||||||
|
#define KEY_MAP_8 57
|
||||||
|
#define KEY_MAP_9 58
|
||||||
|
#define KEY_MAP_0 59
|
||||||
|
|
||||||
|
#define KEY_MAP_PAN_UP16 60
|
||||||
|
#define KEY_MAP_PAN_UP24 61
|
||||||
|
#define KEY_MAP_PAN_DN16 62
|
||||||
|
#define KEY_MAP_PAN_DN24 63
|
||||||
|
|
||||||
|
#define KEY_MAP_MAX 64
|
||||||
|
|
||||||
|
#define JOYMODE_NORMAL 0
|
||||||
|
#define JOYMODE_SLIDE_N_GLIDE 1
|
||||||
|
|
||||||
extern u32 getCRC32(u8 *buf, int size);
|
extern u32 getCRC32(u8 *buf, int size);
|
||||||
extern u32 file_crc;
|
extern u32 file_crc;
|
||||||
|
Loading…
Reference in New Issue
Block a user