Cold reset combination held <1sec -> quick load Menu core.
This commit is contained in:
71
user_io.c
71
user_io.c
@@ -960,6 +960,8 @@ void user_io_rtc_reset()
|
||||
rtc_timer = 0;
|
||||
}
|
||||
|
||||
static int coldreset_req = 0;
|
||||
|
||||
void user_io_poll()
|
||||
{
|
||||
if ((core_type != CORE_TYPE_MINIMIG2) &&
|
||||
@@ -1500,6 +1502,24 @@ void user_io_poll()
|
||||
}
|
||||
DisableIO();
|
||||
}
|
||||
|
||||
static int prev_coldreset_req = 0;
|
||||
static uint32_t reset_timer = 0;
|
||||
if (!prev_coldreset_req && coldreset_req)
|
||||
{
|
||||
reset_timer = GetTimer(1000);
|
||||
}
|
||||
|
||||
if (!coldreset_req && prev_coldreset_req)
|
||||
{
|
||||
fpga_load_rbf("menu.rbf");
|
||||
}
|
||||
|
||||
prev_coldreset_req = coldreset_req;
|
||||
if (reset_timer && CheckTimer(reset_timer))
|
||||
{
|
||||
reboot(1);
|
||||
}
|
||||
}
|
||||
|
||||
char user_io_dip_switch1()
|
||||
@@ -1727,11 +1747,11 @@ void user_io_check_reset(unsigned short modifiers, char useKeys)
|
||||
|
||||
if ((modifiers & ~2) == combo[useKeys])
|
||||
{
|
||||
if (modifiers & 2) // with lshift - MiST reset
|
||||
if (modifiers & 2) // with lshift - cold reset
|
||||
{
|
||||
reboot(1);
|
||||
coldreset_req = 1;
|
||||
}
|
||||
|
||||
else
|
||||
switch (core_type)
|
||||
{
|
||||
case CORE_TYPE_MINIMIG2:
|
||||
@@ -1746,6 +1766,7 @@ void user_io_check_reset(unsigned short modifiers, char useKeys)
|
||||
}
|
||||
else
|
||||
{
|
||||
coldreset_req = 0;
|
||||
kbd_reset = 0;
|
||||
}
|
||||
}
|
||||
@@ -1881,8 +1902,8 @@ emu_mode_t user_io_get_kbdemu()
|
||||
return emu_mode;
|
||||
}
|
||||
|
||||
int getPLL(double Fout, uint32_t *M, uint32_t *K, uint32_t *C)
|
||||
{
|
||||
int getPLL(double Fout, uint32_t *M, uint32_t *K, uint32_t *C)
|
||||
{
|
||||
uint32_t c = 1;
|
||||
while ((Fout*c) < 400) c++;
|
||||
|
||||
@@ -1924,20 +1945,20 @@ int getPLL(double Fout, uint32_t *M, uint32_t *K, uint32_t *C)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t getPLLdiv(uint32_t div)
|
||||
{
|
||||
if (div & 1) return 0x20000 | (((div / 2)+1) << 8) | (div / 2);
|
||||
return ((div / 2) << 8) | (div / 2);
|
||||
}
|
||||
|
||||
struct
|
||||
{
|
||||
uint32_t vpar[8];
|
||||
double Fpix;
|
||||
} vmodes[8] =
|
||||
{
|
||||
}
|
||||
|
||||
uint32_t getPLLdiv(uint32_t div)
|
||||
{
|
||||
if (div & 1) return 0x20000 | (((div / 2)+1) << 8) | (div / 2);
|
||||
return ((div / 2) << 8) | (div / 2);
|
||||
}
|
||||
|
||||
struct
|
||||
{
|
||||
uint32_t vpar[8];
|
||||
double Fpix;
|
||||
} vmodes[8] =
|
||||
{
|
||||
{ {1280, 110, 40, 220, 720, 5, 5, 20}, 74.25 },
|
||||
{ {1024, 24, 136, 160, 768, 3, 6, 29}, 65 },
|
||||
{ {720, 16, 62, 60, 480, 9, 6, 30}, 27 },
|
||||
@@ -1946,8 +1967,8 @@ struct
|
||||
{ {800, 40, 128, 88, 600, 1, 4, 23}, 40 },
|
||||
{ {640, 16, 96, 48, 480, 10, 2, 33}, 25.175 },
|
||||
{ {1280, 440, 40, 220, 720, 5, 5, 20}, 74.25 }
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
uint32_t vitems[32];
|
||||
|
||||
static int parse_custom_video_mode()
|
||||
@@ -1968,8 +1989,8 @@ static int parse_custom_video_mode()
|
||||
}
|
||||
|
||||
uint32_t M, K, C;
|
||||
if (!getPLL(Fout, &M, &K, &C)) return 0;
|
||||
|
||||
if (!getPLL(Fout, &M, &K, &C)) return 0;
|
||||
|
||||
vitems[9] = 4;
|
||||
vitems[10] = getPLLdiv(M);
|
||||
vitems[11] = 3;
|
||||
@@ -2034,8 +2055,8 @@ void parse_video_mode()
|
||||
}
|
||||
|
||||
uint32_t M, K, C;
|
||||
getPLL(vmodes[mode].Fpix, &M, &K, &C);
|
||||
|
||||
getPLL(vmodes[mode].Fpix, &M, &K, &C);
|
||||
|
||||
vitems[9] = 4;
|
||||
vitems[10] = getPLLdiv(M);
|
||||
vitems[11] = 3;
|
||||
|
||||
Reference in New Issue
Block a user