#include "pico.h" #include "pico/stdlib.h" extern "C" { #include "iopins.h" #include "emuapi.h" } #include "keyboard_osd.h" extern "C" { #include "atari5200.h" } #include #include "pico_dsp.h" static bool timer_running=false; static volatile bool vbl=true; bool repeating_timer_callback(struct repeating_timer *t) { uint16_t bClick = emu_DebounceLocalKeys(); emu_Input(bClick); if (vbl) { vbl = false; } else { vbl = true; } return true; } PICO_DSP tft; static int skip=0; #include "hardware/clocks.h" #include "hardware/vreg.h" #include "hardware/sync.h" static unsigned short palette16[PALETTE_SIZE]; int main(void) { // vreg_set_voltage(VREG_VOLTAGE_1_05); // set_sys_clock_khz(125000, true); // set_sys_clock_khz(150000, true); // set_sys_clock_khz(133000, true); // set_sys_clock_khz(200000, true); // set_sys_clock_khz(210000, true); // set_sys_clock_khz(230000, true); // set_sys_clock_khz(225000, true); // set_sys_clock_khz(250000, true); set_sys_clock_khz(250000, true); *((uint32_t *)(0x40010000+0x58)) = 2 << 16; //CLK_HSTX_DIV = 2 << 16; // HSTX clock/2 emu_init(); char * filename; #ifdef FILEBROWSER while (true) { if (menuActive()) { uint16_t bClick = emu_DebounceLocalKeys(); int action = handleMenu(bClick); filename = menuSelection(); if (action == ACTION_RUN) { break; } tft.waitSync(); } } #endif emu_start(); emu_Init(filename); tft.startRefresh(); struct repeating_timer timer; add_repeating_timer_ms(15, repeating_timer_callback, NULL, &timer); timer_running=true; while (true) { emu_Step(); } } void emu_SetPaletteEntry(unsigned char r, unsigned char g, unsigned char b, int index) { if (index