diff --git a/README.md b/README.md index 13862e2..fae1857 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,18 @@ +# About this fork + +This is a fork of [tobigun's fork of the Pico-GB Game Boy emulator](https://github.com/tobigun/Pico-GB). I only changed very few things to make it easy to use for a display addition to Lego's official Game Boy set as I describe it in my blog post at [there.oughta.be/a/lego-game-boy](https://there.oughta.be/a/lego-game-boy). + +My modifications are trivial: +* Disable sound and SD card features +* Disable input by setting all inputs to the unused GPIO 0 +* Set display driver and pinout according to the display used in my post (see [there.oughta.be/a/lego-game-boy](https://there.oughta.be/a/lego-game-boy) ). +* Change default to stretched scaling +* Set the grayscale color palette + +Below is the original readme. + +--- + # RP2040-GB for Pico-GB This is a fork of [YouMakeTech's Pico-GB Game Boy emulator](https://github.com/YouMakeTech/Pico-GB) which again is a fork of the [Peanut-GB based RP2040-GB Game Boy (DMG) emulator from deltabeard](https://github.com/deltabeard/Peanut-GB). diff --git a/platformio.ini b/platformio.ini index aff0502..f18ab8a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -25,9 +25,10 @@ build_flags = -I. -Isrc/tft-espi-config -Ilib - -DENABLE_SOUND=1 + -DENABLE_SOUND=0 -DENABLE_LCD=1 - -DENABLE_SDCARD=1 + -DENABLE_SDCARD=0 + -DENABLE_INPUT=1 -DENABLE_LCD_DMA=1 -DENABLE_LCD_FRAMEBUFFER=1 -DENABLE_FRAMEBUFFER_FLIP_X_Y=1 diff --git a/src/common.h b/src/common.h index 4866d6c..e4b2c2f 100644 --- a/src/common.h +++ b/src/common.h @@ -29,14 +29,14 @@ #define PIN_START 7 #elif ENABLE_INPUT == INPUT_GPIO // Use GPIOs directly on Pico for Joypad -#define PIN_UP 2 -#define PIN_DOWN 3 -#define PIN_LEFT 4 -#define PIN_RIGHT 5 -#define PIN_A 6 -#define PIN_B 7 -#define PIN_SELECT 8 -#define PIN_START 9 +#define PIN_UP 0 +#define PIN_DOWN 0 +#define PIN_LEFT 0 +#define PIN_RIGHT 0 +#define PIN_A 0 +#define PIN_B 0 +#define PIN_SELECT 0 +#define PIN_START 0 #endif #if ENABLE_SOUND @@ -46,10 +46,10 @@ #if ENABLE_SDCARD #define SD_SPI SPI -#define SD_CS_PIN 17 -#define SD_SCK_PIN 18 -#define SD_MOSI_PIN 19 -#define SD_MISO_PIN 16 +#define SD_CS_PIN 13 +#define SD_SCK_PIN 14 +#define SD_MOSI_PIN 15 +#define SD_MISO_PIN 12 extern uint8_t _FS_start; extern uint8_t _FS_end; diff --git a/src/lcd_core.cpp b/src/lcd_core.cpp index 1815dbd..b2fd5d9 100644 --- a/src/lcd_core.cpp +++ b/src/lcd_core.cpp @@ -44,7 +44,7 @@ static uint8_t scaledLineOffsetTable[LCD_HEIGHT]; // scaled to 240 lines /* Pixel data is stored in here. */ static uint8_t pixels_buffer[LCD_WIDTH]; -volatile ScalingMode scalingMode = ScalingMode::STRETCH_KEEP_ASPECT; +volatile ScalingMode scalingMode = ScalingMode::STRETCH; static int lcd_line_busy = 0; diff --git a/src/main.cpp b/src/main.cpp index e826e1e..ca9899a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -68,7 +68,8 @@ void startEmulator() { /* Automatically assign a colour palette to the game */ char rom_title[16]; - auto_assign_palette(palette, gb_colour_hash(&gb), gb_get_rom_name(&gb, rom_title)); + //auto_assign_palette(palette, gb_colour_hash(&gb), gb_get_rom_name(&gb, rom_title)); + get_colour_palette(palette, 0x16, 0x00); #if ENABLE_LCD gb_init_lcd(&gb, &lcd_draw_line); @@ -166,7 +167,6 @@ void setup() { void loop() { gb.gb_frame = 0; - do { __gb_step_cpu(&gb); tight_loop_contents(); diff --git a/src/tft-espi-config/tft_setup.h b/src/tft-espi-config/tft_setup.h index 071a5f9..23e816f 100644 --- a/src/tft-espi-config/tft_setup.h +++ b/src/tft-espi-config/tft_setup.h @@ -22,10 +22,10 @@ // Tell the library to use parallel mode (otherwise SPI is assumed) //#define TFT_PARALLEL_8_BIT -#define TFT_PARALLEL_16_BIT // **** 16-bit parallel ONLY for RP2040 processor **** +//#define TFT_PARALLEL_16_BIT // **** 16-bit parallel ONLY for RP2040 processor **** // Only define one driver, the other ones must be commented out -#define ILI9341_DRIVER // Generic driver for common displays +//#define ILI9341_DRIVER // Generic driver for common displays //#define ILI9341_2_DRIVER // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172 //#define ST7735_DRIVER // Define additional parameters below for this display //#define ILI9163_DRIVER // Define additional parameters below for this display @@ -35,7 +35,7 @@ //#define ILI9481_DRIVER //#define ILI9486_DRIVER //#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high) -//#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display +#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display //#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display //#define R61581_DRIVER //#define RM68140_DRIVER @@ -100,22 +100,15 @@ // driven with a PWM signal or turned OFF/ON then this must be handled by the user // sketch. e.g. with digitalWrite(TFT_BL, LOW); -// #define TFT_BL 32 // LED back-light control pin -// #define TFT_BACKLIGHT_ON HIGH // Level to turn ON back-light (HIGH or LOW) +#define TFT_BL 14 // LED back-light control pin +#define TFT_BACKLIGHT_ON HIGH // Level to turn ON back-light (HIGH or LOW) -#define TFT_D0 0 -#define TFT_D1 1 -#define TFT_D2 2 -#define TFT_D3 3 -#define TFT_D4 4 -#define TFT_D5 5 -#define TFT_D6 6 -#define TFT_D7 7 -#define TFT_WR 18 // Write strobe for modified Raspberry Pi TFT only -#define TFT_DC 19 // Data Command control pin -#define TFT_CS 22 // Chip select control pin D8 -//#define TFT_RST 22 // Reset pin (could connect to NodeMCU RST, see next line) -#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V +#define TFT_MOSI 9 +#define TFT_SCLK 10 +#define TFT_DC 13 // Data Command control pin +#define TFT_CS 11 // Chip select control pin D8 +#define TFT_RST 12 // Reset pin (could connect to NodeMCU RST, see next line) +//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V // ################################################################################## // @@ -150,7 +143,7 @@ // ################################################################################## // For RP2040 processor and SPI displays, uncomment the following line to use the PIO interface. -//#define RP2040_PIO_SPI // Leave commented out to use standard RP2040 SPI port interface +#define RP2040_PIO_SPI // Leave commented out to use standard RP2040 SPI port interface // For RP2040 processor and 8 or 16-bit parallel displays: // The parallel interface write cycle period is derived from a division of the CPU clock