diff --git a/src/board/system76/galp3-c/board.mk b/src/board/system76/galp3-c/board.mk index eef4650..8757d67 100644 --- a/src/board/system76/galp3-c/board.mk +++ b/src/board/system76/galp3-c/board.mk @@ -16,7 +16,7 @@ SCRATCH_CC=\ sdcc \ -mmcs51 \ --model-small \ - --code-size 1024 \ + --code-size 2048 \ --Werror # Convert from binary file to C header diff --git a/src/board/system76/galp3-c/scratch.c b/src/board/system76/galp3-c/scratch.c index 6b089d2..5649f48 100644 --- a/src/board/system76/galp3-c/scratch.c +++ b/src/board/system76/galp3-c/scratch.c @@ -8,13 +8,25 @@ uint8_t __code scratch_rom[] = { #include }; -// Scratch RAM 1 is 1024 bytes, located at 2048 bytes -volatile uint8_t __xdata __at(0x0800) scratch_ram_1[1024]; +// Scratch RAM 1, 2, 3, and 4 are 2048 bytes total, located at 0x0800 bytes +volatile uint8_t __xdata __at(0x0800) scratch_ram[2048]; volatile uint8_t __xdata __at(0x1043) SCAR1L; volatile uint8_t __xdata __at(0x1044) SCAR1M; volatile uint8_t __xdata __at(0x1045) SCAR1H; +volatile uint8_t __xdata __at(0x1046) SCAR2L; +volatile uint8_t __xdata __at(0x1047) SCAR2M; +volatile uint8_t __xdata __at(0x1048) SCAR2H; + +volatile uint8_t __xdata __at(0x1049) SCAR3L; +volatile uint8_t __xdata __at(0x104A) SCAR3M; +volatile uint8_t __xdata __at(0x104B) SCAR3H; + +volatile uint8_t __xdata __at(0x104C) SCAR4L; +volatile uint8_t __xdata __at(0x104D) SCAR4M; +volatile uint8_t __xdata __at(0x104E) SCAR4H; + // Create new segment located at 0x1000, after scratch ROM mapping static void scratch_start(void) __naked { __asm @@ -27,24 +39,36 @@ static void scratch_start(void) __naked { // Enter scratch ROM int scratch_trampoline(void) { - // Uses SCAR1 which is mapped at 0x0800 in data space and is 1024 bytes in - // size. SCAR0 cannot be used due to __pdata overwriting it. + // Uses SCAR1, 2, 3, and 4 which are mapped at 0x0800 in data space and are + // 2048 bytes in size. SCAR0 cannot be used due to __pdata overwriting it. int i; // Copy scratch ROM - for (i = 0; i < ARRAY_SIZE(scratch_rom) && i < ARRAY_SIZE(scratch_ram_1); i++) { - scratch_ram_1[i] = scratch_rom[i]; + for (i = 0; i < ARRAY_SIZE(scratch_rom) && i < ARRAY_SIZE(scratch_ram); i++) { + scratch_ram[i] = scratch_rom[i]; } // Fill the rest with nop - for (; i < ARRAY_SIZE(scratch_ram_1); i++) { - scratch_ram_1[i] = 0x00; + for (; i < ARRAY_SIZE(scratch_ram); i++) { + scratch_ram[i] = 0x00; } - // Set mapping at 0x0000 and enable + // Set scratch RAM 1 mapping at 0x0000 and enable SCAR1L = 0x00; SCAR1M = 0x00; SCAR1H = 0x00; + // Set scratch RAM 2 mapping at 0x0400 and enable + SCAR2L = 0x00; + SCAR2M = 0x04; + SCAR2H = 0x00; + // Set scratch RAM 3 mapping at 0x0600 and enable + SCAR3L = 0x00; + SCAR3M = 0x06; + SCAR3H = 0x00; + // Set scratch RAM 4 mapping at 0x0800 and enable + SCAR4L = 0x00; + SCAR4M = 0x08; + SCAR4H = 0x00; // Jump to scratch reset function __asm__("ljmp 0");