From 03aae62f0ba51f108286489030bb77e5bd004ae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20H=C3=B6ppner?= Date: Wed, 19 Aug 2026 15:57:27 +0200 Subject: [PATCH 1/3] Update CARTRIDGE_PINOUT.md --- CARTRIDGE_PINOUT.md | 83 ++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 43 deletions(-) diff --git a/CARTRIDGE_PINOUT.md b/CARTRIDGE_PINOUT.md index f996151..3c2d544 100644 --- a/CARTRIDGE_PINOUT.md +++ b/CARTRIDGE_PINOUT.md @@ -22,51 +22,51 @@ A concise 32-pin cartridge interface for expansion modules, storage, I/O, and op | 1 | GND | ground | grounded | | 2 | VCC_3V3 | supply | N/A | | 3 | CARTRIDGE_DET | cartridge presence detect | pull-up | -| 4 | POWER_CTRL | power direction control | pull-down | -| 5 | USB_FLAG | USB-capable flag | pull-up | -| 6 | USB_DP | USB D+ | pull-down | -| 7 | USB_DM | USB D- | pull-down | -| 8 | USB_ID | USB host/device mode | pull-up | -| 9 | USB_VBUS | VBUS sense / optional power | pull-down | -| 10 | SD_CMD | SDMMC command / host->cartridge control | pull-up | -| 11 | SD_CLK | SDMMC clock / host->cartridge | pull-down | -| 12 | SD_D0 | SDMMC data0 (bi-directional) | pull-up | -| 13 | SD_D1 | SDMMC data1 (bi-directional) | pull-up | -| 14 | SD_D2 | SDMMC data2 (bi-directional) | pull-up | -| 15 | SD_D3 | SDMMC data3 (bi-directional) | pull-up | -| 16 | I2C_SCL | I2C clock | pull-up | -| 17 | I2C_SDA | I2C data | pull-up | -| 18 | I2S_SCLK | I2S bit clock | pull-down | -| 19 | I2S_WS | I2S word select / frame clock | pull-down | -| 20 | I2S_SDOUT | I2S data out (cartridge->host) | pull-down | -| 21 | I2S_SDIN | I2S data in (host->cartridge) | pull-down | -| 22 | I2S_MCLK | I2S master clock | pull-down | -| 23 | SPI_MOSI | SPI MOSI (host->cartridge) | pull-down | -| 24 | SPI_MISO | SPI MISO (cartridge->host) | pull-down | -| 25 | SPI_SCLK | SPI clock (host->cartridge) | pull-down | -| 26 | SPI_CS0 | SPI chip select (host->cartridge) | pull-down | -| 27 | CAN_H | CAN high | recessive bias | -| 28 | CAN_L | CAN low | recessive bias | -| 29 | UART_RX | UART RX (host->cartridge) | pull-up | -| 30 | UART_TX | UART TX (cartridge->host) | pull-up | -| 31 | VCC_5V | supply | N/A | -| 32 | GND | ground | grounded | +| 4 | USB_FLAG | USB-capable flag | pull-up | +| 5 | USB_DP | USB D+ | pull-down | +| 6 | USB_DM | USB D- | pull-down | +| 7 | USB_ID | USB host/device mode | pull-up | +| 8 | USB_VBUS | VBUS sense / optional power | pull-down | +| 9 | SD_CMD | SDMMC command / host->cartridge control | pull-up | +| 10 | SD_CLK | SDMMC clock / host->cartridge | pull-down | +| 11 | SD_D0 | SDMMC data0 (bi-directional) | pull-up | +| 12 | SD_D1 | SDMMC data1 (bi-directional) | pull-up | +| 13 | SD_D2 | SDMMC data2 (bi-directional) | pull-up | +| 14 | SD_D3 | SDMMC data3 (bi-directional) | pull-up | +| 15 | I2C_SCL | I2C clock | pull-up | +| 16 | I2C_SDA | I2C data | pull-up | +| 17 | I2S_SCLK | I2S bit clock | pull-down | +| 18 | I2S_WS | I2S word select / frame clock | pull-down | +| 19 | I2S_SDOUT | I2S data out (cartridge->host) | pull-down | +| 20 | I2S_SDIN | I2S data in (host->cartridge) | pull-down | +| 21 | I2S_MCLK | I2S master clock | pull-down | +| 22 | SPI_MOSI | SPI MOSI (host->cartridge) | pull-down | +| 23 | SPI_MISO | SPI MISO (cartridge->host) | pull-down | +| 24 | SPI_SCLK | SPI clock (host->cartridge) | pull-down | +| 25 | SPI_CS0 | SPI chip select (host->cartridge) | pull-down | +| 26 | CAN_H | CAN high | recessive bias | +| 27 | CAN_L | CAN low | recessive bias | +| 28 | UART_RX | UART RX (host->cartridge) | pull-up | +| 29 | UART_TX | UART TX (cartridge->host) | pull-up | +| 30 | VCC_5V | supply | N/A | +| 31 | GND | ground | grounded | +| 30 | 5V_EXT | external power supply (optional) | N/A | ## Signal Groups -- Ground: pins 1, 32 +- Ground: pins 1, 31 - 3.3V supply: pin 2 - Cartridge detection: pin 3 -- Power direction: pin 4 -- USB flag: pin 5 -- USB: pins 6-9 -- SDMMC: pins 10-15 -- I2C: pins 16-17 -- I2S audio: pins 18-22 -- SPI: pins 23-26 -- CAN: pins 27-28 -- UART: pins 29-30 -- 5V supply: pin 31 +- USB flag: pin 4 +- USB: pins 5-8 +- SDMMC: pins 9-14 +- I2C: pins 15-16 +- I2S audio: pins 17-21 +- SPI: pins 22-25 +- CAN: pins 26-27 +- UART: pins 28-29 +- 5V supply: pin 30 +- Optional external 5V supply: pin 30 ## Design Rationale @@ -85,7 +85,6 @@ A concise 32-pin cartridge interface for expansion modules, storage, I/O, and op - Cartridge features such as SD/storage, I2C, SPI, CAN, UART and audio should be discovered dynamically at runtime after insertion. - For bidirectional power delivery, the system should use a dedicated power-path controller and a clear source priority scheme. - Monitor main device and cartridge voltage presence before enabling any power path. - - Use POWER_CTRL as a control input for a power-path switch or enable pin, not as a current-carrying line. - If the main device is powered and the cartridge is not actively supplying power, keep cartridge supply disabled. - If the main device is unpowered and a powered cartridge is inserted, allow the cartridge to supply the system after voltage stability is confirmed. - Prevent backfeed by using ideal diodes or bidirectional power-path ICs that only conduct from the active source. @@ -100,8 +99,6 @@ Suggested cartridge categories: USB_FLAG = 1 indicates the cartridge can present USB functionality in addition to its category. -POWER_CTRL = 1 indicates the cartridge provides power to the main device - --- A short technical reference for the Nova64 cartridge connector, intended for initial design discussion. From 272619c2b8a4506fbf500cb1ae3d7589bd5aabd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20H=C3=B6ppner?= Date: Wed, 19 Aug 2026 16:12:09 +0200 Subject: [PATCH 2/3] Update CARTRIDGE_PINOUT.md --- CARTRIDGE_PINOUT.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/CARTRIDGE_PINOUT.md b/CARTRIDGE_PINOUT.md index 3c2d544..30ef23a 100644 --- a/CARTRIDGE_PINOUT.md +++ b/CARTRIDGE_PINOUT.md @@ -25,8 +25,8 @@ A concise 32-pin cartridge interface for expansion modules, storage, I/O, and op | 4 | USB_FLAG | USB-capable flag | pull-up | | 5 | USB_DP | USB D+ | pull-down | | 6 | USB_DM | USB D- | pull-down | -| 7 | USB_ID | USB host/device mode | pull-up | -| 8 | USB_VBUS | VBUS sense / optional power | pull-down | +| 7 | | | | +| 8 | | | | | 9 | SD_CMD | SDMMC command / host->cartridge control | pull-up | | 10 | SD_CLK | SDMMC clock / host->cartridge | pull-down | | 11 | SD_D0 | SDMMC data0 (bi-directional) | pull-up | @@ -35,11 +35,11 @@ A concise 32-pin cartridge interface for expansion modules, storage, I/O, and op | 14 | SD_D3 | SDMMC data3 (bi-directional) | pull-up | | 15 | I2C_SCL | I2C clock | pull-up | | 16 | I2C_SDA | I2C data | pull-up | -| 17 | I2S_SCLK | I2S bit clock | pull-down | -| 18 | I2S_WS | I2S word select / frame clock | pull-down | -| 19 | I2S_SDOUT | I2S data out (cartridge->host) | pull-down | -| 20 | I2S_SDIN | I2S data in (host->cartridge) | pull-down | -| 21 | I2S_MCLK | I2S master clock | pull-down | +| 17 | | | | +| 18 | I2S_WS | I2S word select | pull-down | +| 19 | I2S_SD | I2S data out | pull-down | +| 20 | I2S_SCK | I2S clock | pull-down | +| 21 | I2S_MCLK | I2S master clock | | | 22 | SPI_MOSI | SPI MOSI (host->cartridge) | pull-down | | 23 | SPI_MISO | SPI MISO (cartridge->host) | pull-down | | 24 | SPI_SCLK | SPI clock (host->cartridge) | pull-down | @@ -50,15 +50,15 @@ A concise 32-pin cartridge interface for expansion modules, storage, I/O, and op | 29 | UART_TX | UART TX (cartridge->host) | pull-up | | 30 | VCC_5V | supply | N/A | | 31 | GND | ground | grounded | -| 30 | 5V_EXT | external power supply (optional) | N/A | +| 30 | EXT_5V | external power supply (optional) | N/A | ## Signal Groups - Ground: pins 1, 31 - 3.3V supply: pin 2 - Cartridge detection: pin 3 -- USB flag: pin 4 -- USB: pins 5-8 +- USB detection: pin 4 +- USB: pins 5-6 - SDMMC: pins 9-14 - I2C: pins 15-16 - I2S audio: pins 17-21 From e76be6810a1d05dd0d6ee584ad3f9dd41a8b0bae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20H=C3=B6ppner?= Date: Thu, 20 Aug 2026 01:11:24 +0200 Subject: [PATCH 3/3] linux fixes --- .vscode/settings.json | 2 +- core/CMakeLists.txt | 14 +++++++++++++- core/include/nova64_framebuffer.h | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 8c3b338..a27524a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,7 +4,7 @@ "cmake.configureOnOpen": true, "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", - "cmake.cmakePath": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\CommonExtensions\\Microsoft\\CMake\\CMake\\bin\\cmake.exe", + //"cmake.cmakePath": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\CommonExtensions\\Microsoft\\CMake\\CMake\\bin\\cmake.exe", "cmake.configureSettings": { "BUILD_SIMULATOR": "ON" } diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 4bb0cb6..88a7baa 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -64,7 +64,7 @@ else() if(WIN32) set(FREERTOS_PORT "MSVC_MINGW" CACHE STRING "") else() - set(FREERTOS_PORT "GCC/POSIX" CACHE STRING "") + set(FREERTOS_PORT "GCC_POSIX" CACHE STRING "") endif() # Select FreeRTOS heap implementation (provides pvPortMalloc/vPortFree) set(FREERTOS_HEAP 4 CACHE STRING "FreeRTOS Heap Implementation") @@ -102,6 +102,18 @@ else() FetchContent_MakeAvailable(FreeRTOS_Kernel wamr_runtime) + # -------------------------------------------------------------------------- + # Force -fPIC for FreeRTOS targets (required for linking into .so) + # -------------------------------------------------------------------------- + if(NOT WIN32) + if(TARGET freertos_kernel) + set_target_properties(freertos_kernel PROPERTIES POSITION_INDEPENDENT_CODE ON) + endif() + if(TARGET freertos_kernel_port) + set_target_properties(freertos_kernel_port PROPERTIES POSITION_INDEPENDENT_CODE ON) + endif() + endif() + # -------------------------------------------------------------------------- # Nova64 Core Target # -------------------------------------------------------------------------- diff --git a/core/include/nova64_framebuffer.h b/core/include/nova64_framebuffer.h index 6898560..690c034 100644 --- a/core/include/nova64_framebuffer.h +++ b/core/include/nova64_framebuffer.h @@ -28,7 +28,7 @@ typedef struct { } nova64_framebuffer_t; // Global instance access -NOVA64_API nova64_framebuffer_t nova64_framebuffer; +NOVA64_API extern nova64_framebuffer_t nova64_framebuffer; // Function prototypes bool nova64_framebuffer_init(void);