2021-06-30 20:26:15 +00:00
|
|
|
#include "pico.h"
|
|
|
|
#include "pico/stdlib.h"
|
|
|
|
#include <stdio.h>
|
2021-11-14 20:50:46 +00:00
|
|
|
extern "C" {
|
|
|
|
#include "iopins.h"
|
|
|
|
#include "emuapi.h"
|
|
|
|
}
|
2023-04-20 21:21:15 +00:00
|
|
|
#include "keyboard_osd.h"
|
|
|
|
#include "pico_dsp.h"
|
2021-11-14 20:50:46 +00:00
|
|
|
|
2021-06-30 20:26:15 +00:00
|
|
|
#define BLUE RGBVAL16(0, 0, 170)
|
|
|
|
#define LIGHT_BLUE RGBVAL16(0, 136, 255)
|
|
|
|
|
2023-04-20 21:21:15 +00:00
|
|
|
PICO_DSP tft;
|
2021-06-30 20:26:15 +00:00
|
|
|
static int fb_width, fb_height;
|
|
|
|
|
|
|
|
|
|
|
|
#include "hardware/clocks.h"
|
|
|
|
#include "hardware/vreg.h"
|
|
|
|
|
|
|
|
static const char * digits = "0123456789ABCDEF";
|
2021-10-08 19:46:02 +00:00
|
|
|
static int hk = 0;
|
|
|
|
static int prevhk = 0;
|
|
|
|
static int col=0;
|
|
|
|
static int row=0;
|
|
|
|
|
|
|
|
|
|
|
|
void emu_Input(uint16_t bClick) {
|
|
|
|
hk = emu_ReadI2CKeyboard();
|
|
|
|
}
|
2021-06-30 20:26:15 +00:00
|
|
|
|
2021-07-04 14:55:43 +00:00
|
|
|
bool repeating_timer_callback(struct repeating_timer *t) {
|
|
|
|
uint16_t bClick = emu_DebounceLocalKeys();
|
2021-10-08 19:46:02 +00:00
|
|
|
emu_Input(bClick);
|
2021-07-04 14:55:43 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2021-06-30 20:26:15 +00:00
|
|
|
int main(void) {
|
2023-04-20 21:21:15 +00:00
|
|
|
// vreg_set_voltage(VREG_VOLTAGE_1_05);
|
2021-06-30 20:26:15 +00:00
|
|
|
// set_sys_clock_khz(125000, true);
|
|
|
|
// set_sys_clock_khz(150000, true);
|
|
|
|
// set_sys_clock_khz(133000, true);
|
|
|
|
// set_sys_clock_khz(200000, true);
|
2023-04-20 21:21:15 +00:00
|
|
|
// set_sys_clock_khz(210000, true);
|
|
|
|
set_sys_clock_khz(230000, true);
|
2021-06-30 20:26:15 +00:00
|
|
|
// set_sys_clock_khz(225000, true);
|
2023-04-20 21:21:15 +00:00
|
|
|
// set_sys_clock_khz(250000, true);
|
2021-06-30 20:26:15 +00:00
|
|
|
stdio_init_all();
|
|
|
|
|
|
|
|
printf("start\n");
|
2023-04-20 21:21:15 +00:00
|
|
|
|
2021-06-30 20:26:15 +00:00
|
|
|
emu_init();
|
2023-04-20 21:21:15 +00:00
|
|
|
#ifdef FILEBROWSER
|
|
|
|
while (true) {
|
|
|
|
if (menuActive()) {
|
|
|
|
uint16_t bClick = emu_DebounceLocalKeys();
|
|
|
|
int action = handleMenu(bClick);
|
|
|
|
char * filename = menuSelection();
|
|
|
|
if (action == ACTION_RUN) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
tft.waitSync();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
2021-06-30 20:26:15 +00:00
|
|
|
emu_start();
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.startRefresh();
|
2021-07-04 14:55:43 +00:00
|
|
|
struct repeating_timer timer;
|
2021-10-08 19:46:02 +00:00
|
|
|
add_repeating_timer_ms(20, repeating_timer_callback, NULL, &timer);
|
2021-11-14 20:50:46 +00:00
|
|
|
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.fillScreen(LIGHT_BLUE);
|
2021-06-30 20:26:15 +00:00
|
|
|
tft.get_frame_buffer_size(&fb_width, &fb_height);
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawRect((fb_width-320)/2,(fb_height-200)/2, 320,200, BLUE);
|
2021-06-30 20:26:15 +00:00
|
|
|
|
|
|
|
char buf[4] = {32,32,32,0};
|
|
|
|
uint sys_clk = clock_get_hz(clk_sys)/1000000;
|
|
|
|
uint r1 = sys_clk/100;
|
|
|
|
uint r = sys_clk - r1*100;
|
|
|
|
uint r2 = r/10;
|
|
|
|
r = sys_clk - r1*100 - r2*10;
|
|
|
|
uint r3 = r;
|
|
|
|
buf[0] = digits[r1];
|
|
|
|
buf[1] = digits[r2];
|
|
|
|
buf[2] = digits[r3];
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawText(8,8,buf,BLUE,LIGHT_BLUE,false);
|
2021-06-30 20:26:15 +00:00
|
|
|
|
|
|
|
while (true) {
|
2021-07-04 14:55:43 +00:00
|
|
|
uint16_t bClick = emu_GetPad();
|
2021-06-30 20:26:15 +00:00
|
|
|
char buf[5] = {0,0,0,0,0};
|
|
|
|
buf[0] = digits[(bClick>>12)&0xf];
|
|
|
|
buf[1] = digits[(bClick>>8)&0xf];
|
|
|
|
buf[2] = digits[(bClick>>4)&0xf];
|
|
|
|
buf[3] = digits[bClick&0xf];
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawText(4*8,0,buf,RGBVAL16(0x00,0x00,0x00),RGBVAL16(0xFF,0xFF,0xFF),false);
|
2021-06-30 20:26:15 +00:00
|
|
|
buf[3] = 0;
|
|
|
|
int key = emu_ReadI2CKeyboard();
|
|
|
|
buf[0] = digits[(key>>8)&0xf];
|
|
|
|
buf[1] = digits[(key>>4)&0xf];
|
|
|
|
buf[2] = digits[key&0xf];
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawText(4*8,8,buf,RGBVAL16(0x00,0x00,0x00),RGBVAL16(0xFF,0xFF,0xFF),false);
|
2021-07-04 14:55:43 +00:00
|
|
|
|
2021-06-30 20:26:15 +00:00
|
|
|
buf[2] = 0;
|
2021-07-04 14:55:43 +00:00
|
|
|
key = emu_ReadI2CKeyboard2(0);
|
2021-06-30 20:26:15 +00:00
|
|
|
buf[0] = digits[(key>>4)&0xf];
|
|
|
|
buf[1] = digits[key&0xf];
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawText(9*8+0*24,0*8,buf,RGBVAL16(0x00,0x00,0x00),RGBVAL16(0xFF,0xFF,0xFF),true);
|
2021-06-30 20:26:15 +00:00
|
|
|
key = emu_ReadI2CKeyboard2(1);
|
|
|
|
buf[0] = digits[(key>>4)&0xf];
|
|
|
|
buf[1] = digits[key&0xf];
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawText(9*8+1*24,0*8,buf,RGBVAL16(0x00,0x00,0x00),RGBVAL16(0xFF,0xFF,0xFF),true);
|
2021-06-30 20:26:15 +00:00
|
|
|
key = emu_ReadI2CKeyboard2(2);
|
|
|
|
buf[0] = digits[(key>>4)&0xf];
|
|
|
|
buf[1] = digits[key&0xf];
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawText(9*8+2*24,0*8,buf,RGBVAL16(0x00,0x00,0x00),RGBVAL16(0xFF,0xFF,0xFF),true);
|
2021-06-30 20:26:15 +00:00
|
|
|
key = emu_ReadI2CKeyboard2(3);
|
|
|
|
buf[0] = digits[(key>>4)&0xf];
|
|
|
|
buf[1] = digits[key&0xf];
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawText(9*8+3*24,0*8,buf,RGBVAL16(0x00,0x00,0x00),RGBVAL16(0xFF,0xFF,0xFF),true);
|
2021-06-30 20:26:15 +00:00
|
|
|
key = emu_ReadI2CKeyboard2(4);
|
|
|
|
buf[0] = digits[(key>>4)&0xf];
|
|
|
|
buf[1] = digits[key&0xf];
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawText(9*8+4*24,0*8,buf,RGBVAL16(0x00,0x00,0x00),RGBVAL16(0xFF,0xFF,0xFF),true);
|
2021-06-30 20:26:15 +00:00
|
|
|
key = emu_ReadI2CKeyboard2(5);
|
|
|
|
buf[0] = digits[(key>>4)&0xf];
|
|
|
|
buf[1] = digits[key&0xf];
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawText(9*8+5*24,0*8,buf,RGBVAL16(0x00,0x00,0x00),RGBVAL16(0xFF,0xFF,0xFF),true);
|
|
|
|
#ifdef PICOZX
|
|
|
|
key = emu_ReadI2CKeyboard2(6);
|
|
|
|
buf[0] = digits[(key>>4)&0xf];
|
|
|
|
buf[1] = digits[key&0xf];
|
|
|
|
tft.drawText(9*8+6*24,0*8,buf,RGBVAL16(0x00,0x00,0x00),RGBVAL16(0xFF,0xFF,0xFF),true);
|
|
|
|
#endif
|
2021-10-08 19:46:02 +00:00
|
|
|
if ( (hk != 0) && (hk < 128) ) {
|
|
|
|
buf[0] = (char)(hk&0xff);
|
|
|
|
buf[1] = 0;
|
2023-04-20 21:21:15 +00:00
|
|
|
tft.drawText(col*8,(row+3)*8,buf,LIGHT_BLUE,BLUE,false);
|
2021-10-08 19:46:02 +00:00
|
|
|
col += 1;
|
|
|
|
if (col >= 40) {
|
|
|
|
col=0;
|
|
|
|
row += 1;
|
|
|
|
if (row >= 25) {
|
|
|
|
row=0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (hk != prevhk) {
|
|
|
|
sleep_ms(200);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
sleep_ms(100);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
prevhk = hk;
|
2021-06-30 20:26:15 +00:00
|
|
|
sleep_ms(20);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|