From 6981185a7c2c602700adbc5d9cc4f0cc4e9184de Mon Sep 17 00:00:00 2001 From: sorgelig Date: Tue, 23 Jan 2018 22:49:26 +0800 Subject: [PATCH] Cold reset combination held <1sec -> quick load Menu core. --- user_io.c | 71 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 25 deletions(-) diff --git a/user_io.c b/user_io.c index fd31455..34d231c 100644 --- a/user_io.c +++ b/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;