Skip to content

Commit e7bcbb4

Browse files
New Device: VMU (#205)
* Added VMU config files * Update config.h for VMU * Adjust battery limits * Small amendments to full battery voltage * Update README.md * Update config.h for dev build * Just a small update to Null Nano battery to match VMU
1 parent 757b516 commit e7bcbb4

File tree

7 files changed

+335
-1
lines changed

7 files changed

+335
-1
lines changed

components/retro-go/config.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#include "targets/nullnano/config.h"
2929
#elif defined(RG_TARGET_T_DECK_PLUS)
3030
#include "targets/t-deck-plus/config.h"
31+
#elif defined(RG_TARGET_VMU)
32+
#include "targets/vmu/config.h"
3133
#else
3234
#warning "No target defined. Defaulting to ODROID-GO."
3335
#include "targets/odroid-go/config.h"

components/retro-go/targets/nullnano/config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
#define RG_BATTERY_DRIVER 1
7474
#define RG_BATTERY_ADC_UNIT ADC_UNIT_1
7575
#define RG_BATTERY_ADC_CHANNEL ADC_CHANNEL_0
76-
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) * 2.f - 3500.f) / (4200.f - 3500.f) * 100.f)
76+
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) * 2.f - 3150.f) / (4150.f - 3150.f) * 100.f)
7777
#define RG_BATTERY_CALC_VOLTAGE(raw) ((raw) * 2.f * 0.001f)
7878

7979
// Status LED
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// Target definition
2+
#define RG_TARGET_NAME "VMU"
3+
4+
// Storage
5+
#define RG_STORAGE_ROOT "/sd"
6+
#define RG_STORAGE_SDSPI_HOST SPI2_HOST
7+
#define RG_STORAGE_SDSPI_SPEED SDMMC_FREQ_DEFAULT
8+
// #define RG_STORAGE_SDMMC_HOST SDMMC_HOST_SLOT_1
9+
// #define RG_STORAGE_SDMMC_SPEED SDMMC_FREQ_DEFAULT
10+
// #define RG_STORAGE_FLASH_PARTITION "vfs"
11+
12+
// Audio
13+
#define RG_AUDIO_USE_INT_DAC 3 // 0 = Disable, 1 = GPIO25, 2 = GPIO26, 3 = Both
14+
#define RG_AUDIO_USE_EXT_DAC 0 // 0 = Disable, 1 = Enable
15+
16+
// Video
17+
#define RG_SCREEN_DRIVER 0 // 0 = ILI9341
18+
#define RG_SCREEN_HOST SPI2_HOST
19+
#define RG_SCREEN_SPEED SPI_MASTER_FREQ_40M
20+
#define RG_SCREEN_BACKLIGHT 1
21+
#define RG_SCREEN_WIDTH 240
22+
#define RG_SCREEN_HEIGHT 300
23+
#define RG_SCREEN_ROTATE 0
24+
#define RG_SCREEN_VISIBLE_AREA {0, 55, 0, 30} // Left, Top, Right, Bottom
25+
#define RG_SCREEN_SAFE_AREA {0, 0, 0, 0} // Left, Top, Right, Bottom
26+
27+
#define ST7789_MADCTL 0x36 // Memory Access Control
28+
#define ST7789_MADCTL_MY 0x80
29+
#define ST7789_MADCTL_MX 0x40
30+
#define ST7789_MADCTL_MV 0x20
31+
#define ST7789_MADCTL_ML 0x10
32+
#define ST7789_MADCTL_RGB 0x00
33+
#define ST7789_MADCTL_BGR 0x08
34+
35+
#define RG_SCREEN_INIT() \
36+
ILI9341_CMD(0xCF, 0x00, 0xc3, 0x30); \
37+
ILI9341_CMD(0xED, 0x64, 0x03, 0x12, 0x81); \
38+
ILI9341_CMD(0xE8, 0x85, 0x00, 0x78); \
39+
ILI9341_CMD(0xCB, 0x39, 0x2c, 0x00, 0x34, 0x02); \
40+
ILI9341_CMD(0xF7, 0x20); \
41+
ILI9341_CMD(0xEA, 0x00, 0x00); \
42+
ILI9341_CMD(0x36, 0x60); /* Display Rotation */ \
43+
ILI9341_CMD(0xC0, 0x1B); /* Power control //VRH[5:0] */ \
44+
ILI9341_CMD(0xC1, 0x12); /* Power control //SAP[2:0];BT[3:0] */ \
45+
ILI9341_CMD(0xC5, 0x32, 0x3C); /* VCM control */ \
46+
ILI9341_CMD(0xC7, 0x91); /* VCM control2 */ \
47+
ILI9341_CMD(ST7789_MADCTL, (ST7789_MADCTL_MV | ST7789_MADCTL_MX | ST7789_MADCTL_BGR)); \
48+
ILI9341_CMD(0xB1, 0x00, 0x10); /* Frame Rate Control (1B=70, 1F=61, 10=119) */ \
49+
ILI9341_CMD(0xB6, 0x0A, 0xA2); /* Display Function Control */ \
50+
ILI9341_CMD(0xF6, 0x01, 0x30); \
51+
ILI9341_CMD(0xF2, 0x00); /* 3Gamma Function Disable */ \
52+
ILI9341_CMD(0xE0, 0xD0, 0x00, 0x05, 0x0E, 0x15, 0x0D, 0x37, 0x43, 0x47, 0x09, 0x15, 0x12, 0x16, 0x19); \
53+
ILI9341_CMD(0xE1, 0xD0, 0x00, 0x05, 0x0D, 0x0C, 0x06, 0x2D, 0x44, 0x40, 0x0E, 0x1C, 0x18, 0x16, 0x19); \
54+
55+
56+
// Input
57+
// Refer to rg_input.h to see all available RG_KEY_* and RG_GAMEPAD_*_MAP types
58+
#define RG_GAMEPAD_ADC_MAP {\
59+
{RG_KEY_UP, ADC_UNIT_1, ADC_CHANNEL_7, ADC_ATTEN_DB_11, 2048, 4096},\
60+
{RG_KEY_DOWN, ADC_UNIT_1, ADC_CHANNEL_7, ADC_ATTEN_DB_11, 1024, 2047},\
61+
{RG_KEY_LEFT, ADC_UNIT_1, ADC_CHANNEL_6, ADC_ATTEN_DB_11, 2048, 4096},\
62+
{RG_KEY_RIGHT, ADC_UNIT_1, ADC_CHANNEL_6, ADC_ATTEN_DB_11, 1024, 2047},\
63+
}
64+
#define RG_GAMEPAD_GPIO_MAP {\
65+
{RG_KEY_MENU, GPIO_NUM_27, GPIO_PULLUP_ONLY, 0},\
66+
{RG_KEY_START, GPIO_NUM_0, GPIO_FLOATING, 0},\
67+
{RG_KEY_A, GPIO_NUM_32, GPIO_PULLUP_ONLY, 0},\
68+
{RG_KEY_B, GPIO_NUM_33, GPIO_PULLUP_ONLY, 0},\
69+
}
70+
#define RG_GAMEPAD_VIRT_MAP {\
71+
{RG_KEY_SELECT, RG_KEY_A | RG_KEY_START},\
72+
{RG_KEY_OPTION, RG_KEY_B | RG_KEY_START},\
73+
}
74+
75+
76+
77+
// Battery
78+
#define RG_BATTERY_DRIVER 1
79+
#define RG_BATTERY_ADC_UNIT ADC_UNIT_1
80+
#define RG_BATTERY_ADC_CHANNEL ADC_CHANNEL_0
81+
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) * 2.f - 3150.f) / (4150.f - 3150.f) * 100.f)
82+
#define RG_BATTERY_CALC_VOLTAGE(raw) ((raw) * 2.f * 0.001f)
83+
84+
// Status LED
85+
// #define RG_GPIO_LED GPIO_NUM_2
86+
87+
// I2C BUS
88+
// #define RG_GPIO_I2C_SDA GPIO_NUM_15
89+
// #define RG_GPIO_I2C_SCL GPIO_NUM_4
90+
91+
// SPI Display
92+
#define RG_GPIO_LCD_MISO GPIO_NUM_19
93+
#define RG_GPIO_LCD_MOSI GPIO_NUM_23
94+
#define RG_GPIO_LCD_CLK GPIO_NUM_18
95+
#define RG_GPIO_LCD_CS GPIO_NUM_5
96+
#define RG_GPIO_LCD_DC GPIO_NUM_21
97+
#define RG_GPIO_LCD_BCKL GPIO_NUM_14
98+
// #define RG_GPIO_LCD_RST GPIO_NUM_NC
99+
100+
// SPI SD Card
101+
#define RG_GPIO_SDSPI_MISO GPIO_NUM_19
102+
#define RG_GPIO_SDSPI_MOSI GPIO_NUM_23
103+
#define RG_GPIO_SDSPI_CLK GPIO_NUM_18
104+
#define RG_GPIO_SDSPI_CS GPIO_NUM_22
105+
106+
// External I2S DAC
107+
// #define RG_GPIO_SND_I2S_BCK GPIO_NUM_4
108+
// #define RG_GPIO_SND_I2S_WS GPIO_NUM_12
109+
// #define RG_GPIO_SND_I2S_DATA GPIO_NUM_15
110+
// #define RG_GPIO_SND_AMP_ENABLE GPIO_NUM_NC
111+
112+
// Updater
113+
#define RG_UPDATER_ENABLE 1
114+
#define RG_UPDATER_APPLICATION RG_APP_FACTORY
115+
#define RG_UPDATER_DOWNLOAD_LOCATION RG_STORAGE_ROOT "/vmu/firmware"
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# VMU ESP32
2+
- Status: Complete
3+
- Design files and BOM: [**Instructables link**](https://www.instructables.com/ESP32-VMU-Handheld-Console-Yes-It-Plays-Doom/)
4+
5+
# Hardware info
6+
- Module: ESP32-WROVER-E (16MB Flash)
7+
- Screen: 1.69" ST7789V Screen
8+
- 400mAh battery & charging via MicroUSB
9+
- Sound
10+
- Heavily based on Null Nano
11+
12+
13+
# Images
14+
![device.jpg](device.jpg)
2.42 MB
Loading
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import os
2+
3+
os.environ["IDF_TARGET"] = "esp32"
4+
os.environ["FW_FORMAT"] = "odroid"
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
#
2+
# Serial flasher config
3+
#
4+
CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0"
5+
CONFIG_ESPTOOLPY_BAUD_115200B=n
6+
CONFIG_ESPTOOLPY_BAUD_230400B=n
7+
CONFIG_ESPTOOLPY_BAUD_921600B=y
8+
CONFIG_ESPTOOLPY_BAUD_2MB=n
9+
CONFIG_ESPTOOLPY_BAUD=921600
10+
CONFIG_ESPTOOLPY_COMPRESSED=y
11+
CONFIG_ESPTOOLPY_FLASHMODE="dio"
12+
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
13+
CONFIG_ESPTOOLPY_FLASHFREQ_40M=n
14+
CONFIG_ESPTOOLPY_FLASHFREQ_26M=n
15+
CONFIG_ESPTOOLPY_FLASHFREQ_20M=n
16+
CONFIG_ESPTOOLPY_FLASHFREQ="80m"
17+
CONFIG_ESPTOOLPY_FLASHSIZE_1MB=n
18+
CONFIG_ESPTOOLPY_FLASHSIZE_2MB=n
19+
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=n
20+
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=n
21+
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
22+
CONFIG_ESPTOOLPY_FLASHSIZE="16MB"
23+
CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y
24+
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
25+
26+
#
27+
# Compiler options
28+
#
29+
CONFIG_COMPILER_OPTIMIZATION_DEFAULT=n
30+
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
31+
# IMPORTANT: ENABLE=y adds almost 50K to the executable, can't fit in our current 2.5MB goal...
32+
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=n
33+
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y
34+
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=n
35+
CONFIG_COMPILER_CXX_EXCEPTIONS=n
36+
CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
37+
CONFIG_COMPILER_STACK_CHECK_MODE_NORM=n
38+
CONFIG_COMPILER_STACK_CHECK_MODE_STRONG=n
39+
CONFIG_COMPILER_STACK_CHECK_MODE_ALL=n
40+
CONFIG_COMPILER_STACK_CHECK=n
41+
42+
#
43+
# SPI configuration
44+
#
45+
CONFIG_SPI_MASTER_IN_IRAM=y
46+
CONFIG_SPI_MASTER_ISR_IN_IRAM=y
47+
48+
#
49+
# ESP32-specific
50+
#
51+
CONFIG_ESP32_REV_MIN_0=n
52+
CONFIG_ESP32_REV_MIN_1=y
53+
CONFIG_ESP32_REV_MIN_2=n
54+
CONFIG_ESP32_REV_MIN_3=n
55+
CONFIG_ESP32_REV_MIN=1
56+
CONFIG_ESP32_DEFAULT_CPU_FREQ_80=n
57+
CONFIG_ESP32_DEFAULT_CPU_FREQ_160=n
58+
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
59+
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240
60+
CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=n
61+
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
62+
CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT=n
63+
CONFIG_ESP_SYSTEM_PANIC_GDBSTUB=n
64+
CONFIG_ESP32_DEBUG_OCDAWARE=n
65+
CONFIG_ESP_MAIN_TASK_STACK_SIZE=8192
66+
CONFIG_ESP_INT_WDT=y
67+
CONFIG_ESP_TASK_WDT=n
68+
CONFIG_NEWLIB_NANO_FORMAT=y
69+
70+
#
71+
# SPI RAM config
72+
#
73+
CONFIG_ESP32_SPIRAM_SUPPORT=y
74+
CONFIG_SPIRAM_BOOT_INIT=y
75+
CONFIG_SPIRAM_IGNORE_NOTFOUND=y
76+
CONFIG_SPIRAM_USE_MEMMAP=n
77+
CONFIG_SPIRAM_USE_CAPS_ALLOC=n
78+
CONFIG_SPIRAM_USE_MALLOC=y
79+
CONFIG_SPIRAM_TYPE_AUTO=y
80+
CONFIG_SPIRAM_TYPE_ESPPSRAM32=n
81+
CONFIG_SPIRAM_TYPE_ESPPSRAM64=n
82+
CONFIG_SPIRAM_SIZE=-1
83+
CONFIG_SPIRAM_SPEED_40M=n
84+
CONFIG_SPIRAM_SPEED_80M=y
85+
CONFIG_SPIRAM_MEMTEST=n
86+
CONFIG_SPIRAM_CACHE_WORKAROUND=n
87+
CONFIG_SPIRAM_BANKSWITCH_ENABLE=n
88+
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=32768
89+
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
90+
CONFIG_SPIRAM_OCCUPY_HSPI_HOST=n
91+
CONFIG_SPIRAM_OCCUPY_VSPI_HOST=y
92+
CONFIG_SPIRAM_OCCUPY_NO_HOST=n
93+
94+
#
95+
# FAT Filesystem support
96+
#
97+
CONFIG_FATFS_CODEPAGE_437=y
98+
CONFIG_FATFS_CODEPAGE=437
99+
CONFIG_FATFS_LFN_NONE=n
100+
CONFIG_FATFS_LFN_HEAP=y
101+
CONFIG_FATFS_LFN_STACK=n
102+
CONFIG_FATFS_MAX_LFN=255
103+
CONFIG_FATFS_USE_FASTSEEK=y
104+
105+
#
106+
# FreeRTOS
107+
#
108+
CONFIG_FREERTOS_HZ=100
109+
CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE=n
110+
CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL=y
111+
CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=n
112+
CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y
113+
CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE=n
114+
CONFIG_FREERTOS_ASSERT_DISABLE=n
115+
CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1024
116+
CONFIG_FREERTOS_USE_TRACE_FACILITY=n
117+
CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=n
118+
CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=n
119+
120+
#
121+
# Log output
122+
#
123+
CONFIG_LOG_DEFAULT_LEVEL_NONE=n
124+
CONFIG_LOG_DEFAULT_LEVEL_ERROR=n
125+
CONFIG_LOG_DEFAULT_LEVEL_WARN=y
126+
CONFIG_LOG_DEFAULT_LEVEL_INFO=n
127+
CONFIG_LOG_DEFAULT_LEVEL_DEBUG=n
128+
CONFIG_LOG_DEFAULT_LEVEL_VERBOSE=n
129+
CONFIG_LOG_DEFAULT_LEVEL=2
130+
CONFIG_LOG_COLORS=y
131+
132+
#
133+
# Misc
134+
#
135+
# ODROID-GO partition table doesn't use any checksum
136+
CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS=y
137+
CONFIG_PARTITION_TABLE_MD5=n
138+
CONFIG_APP_BUILD_BOOTLOADER=n
139+
140+
#
141+
# HTTP Server
142+
#
143+
CONFIG_HTTPD_MAX_REQ_HDR_LEN=1024
144+
CONFIG_HTTPD_MAX_URI_LEN=1024
145+
146+
#
147+
# TLS
148+
#
149+
# Not ideal but I don't want to deal with CAs right now :(
150+
CONFIG_ESP_TLS_INSECURE=y
151+
CONFIG_ESP_TLS_SKIP_SERVER_CERT_VERIFY=y
152+
CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=n
153+
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y
154+
# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL is not set
155+
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN=y
156+
# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set
157+
# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set
158+
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200
159+
# CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT is not set
160+
# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set
161+
CONFIG_MBEDTLS_TLS_CLIENT_ONLY=y
162+
# CONFIG_MBEDTLS_TLS_DISABLED is not set
163+
CONFIG_MBEDTLS_TLS_CLIENT=y
164+
CONFIG_MBEDTLS_TLS_ENABLED=y
165+
166+
#
167+
# SPI Flash driver
168+
#
169+
CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=n
170+
171+
#
172+
# Wi-Fi
173+
#
174+
CONFIG_ESP32_WIFI_IRAM_OPT=n
175+
CONFIG_ESP32_WIFI_RX_IRAM_OPT=n
176+
CONFIG_ESP32_WIFI_NVS_ENABLED=n
177+
178+
#
179+
# Ethernet
180+
#
181+
CONFIG_ETH_USE_ESP32_EMAC=n
182+
CONFIG_ETH_USE_SPI_ETHERNET=n
183+
CONFIG_ETH_USE_OPENETH=n
184+
185+
#
186+
# Silence deprecations because I have no intention of fixing them right now
187+
#
188+
CONFIG_ADC_SUPPRESS_DEPRECATE_WARN=y
189+
CONFIG_I2S_SUPPRESS_DEPRECATE_WARN=y
190+
191+
#
192+
# Partition table
193+
#
194+
# CONFIG_PARTITION_TABLE_SINGLE_APP is not set
195+
# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
196+
# CONFIG_PARTITION_TABLE_TWO_OTA is not set
197+
CONFIG_PARTITION_TABLE_CUSTOM=y
198+
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="../partitions.csv"
199+
CONFIG_PARTITION_TABLE_FILENAME="../partitions.csv"

0 commit comments

Comments
 (0)