From c93999003d1ab00ec95b085b58eec959cc0f4da1 Mon Sep 17 00:00:00 2001 From: Zane Kaminski Date: Sat, 24 Apr 2021 03:51:07 -0400 Subject: [PATCH] Add commands for RAM2GS with AGM CPLD --- bin/GWRAM.dbg.po | Bin 143360 -> 143360 bytes bin/GWRAM.po | Bin 143360 -> 143360 bytes ram2gs.c | 65 ++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/bin/GWRAM.dbg.po b/bin/GWRAM.dbg.po index 0c4a1b2a10bba629b6ac765ed3dacd703e762221..be1d2a3bd11bc7341821b3d0ec656e183223ce28 100644 GIT binary patch delta 4842 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 diff --git a/ram2gs.c b/ram2gs.c index ca1d0a0..21e399e 100644 --- a/ram2gs.c +++ b/ram2gs.c @@ -9,11 +9,14 @@ #include "gwconio.h" #include "ram2gs_asm.h" -static void ram2gs_erase() { ram2gs_cmd(0x28); } -static void ram2gs_program() { ram2gs_cmd(0x24); } +// Commands common to Altera and AGM static void ram2gs_set4mb() { ram2gs_cmd(0x10); } static void ram2gs_set8mb() { ram2gs_cmd(0x11); } -static void ram2gs_setnvm(char en8meg) { + +// Commands for just altera +static void ram2gs_altera_erase() { ram2gs_cmd(0x28); } +static void ram2gs_altera_program() { ram2gs_cmd(0x24); } +static void ram2gs_altera_setnvm(char en8meg) { char i; // Clock in 0 to enable this setting entry ram2gs_cmd(0x20); @@ -35,7 +38,44 @@ static void ram2gs_setnvm(char en8meg) { ram2gs_cmd(0x23); } - ram2gs_program(); + ram2gs_altera_program(); +} + +// Commands for just AGM +static void ram2gs_agm_select() { ram2gs_cmd(0x34); } +static void ram2gs_agm_deselect() { ram2gs_cmd(0x30); } +static void ram2gs_agm_tx8(char data) { + char i; + for (i = 0; i < 8; i++) { + ram2gs_cmd(0x34 + ((data >> (7-i)) & 1)); + ram2gs_cmd(0x36 + ((data >> (7-i)) & 1)); + } +} +static void ram2gs_agm_write_en() { + ram2gs_agm_deselect(); + ram2gs_agm_select(); + ram2gs_agm_tx8(0x06); // 0x06 is write enable + ram2gs_agm_deselect(); +} +static void ram2gs_agm_erase() { + ram2gs_agm_write_en(); + ram2gs_agm_select(); + ram2gs_agm_tx8(0x20); // 0x20 is sector erase (4 kB) + ram2gs_agm_tx8(0x00); // address[23:16] + ram2gs_agm_tx8(0x10); // address[15:8] + ram2gs_agm_tx8(0x00); // address[7:0] + ram2gs_agm_deselect(); +} +static void ram2gs_agm_write_nvm(char en8meg) { + ram2gs_agm_write_en(); + ram2gs_agm_select(); + ram2gs_agm_tx8(0x02); // 0x02 is page (byte) program + ram2gs_agm_tx8(0x00); // address[23:16] + ram2gs_agm_tx8(0x10); // address[15:8] + ram2gs_agm_tx8(0x00); // address[7:0] + if (en8meg) { ram2gs_agm_tx8(0xFF); } // data[7:0] + else { ram2gs_agm_tx8(0x00); } // data[7:0] + ram2gs_agm_deselect(); } static void menu(void) @@ -102,11 +142,11 @@ int ram2gs_main(void) gwcputsxy(1, 8, "Resetting RAM2GS settings."); gwcputsxy(1, 9, "Do not turn off your Apple."); - ram2gs_erase(); // Erase RAM2GS settings memory - ram2gs_set8mb(); // Enable 8 megabytes now - - // Wait for >= 500ms on even the fastest systems. - spin(32, 8); + // Erase RAM2GS settings memory + ram2gs_altera_erase(); // Erase for Altera CPLD + ram2gs_agm_erase(); // Erase for AGM CPLD + spin(32, 8); // Wait for >= 500ms on even the fastest systems. + ram2gs_set8mb(); // Enable 8 megabytes now (default) // Show success message and quit clrscr(); // Clear screen @@ -130,9 +170,10 @@ int ram2gs_main(void) gwcputsxy(1, 8, "Saving RAM2GS capacity setting."); gwcputsxy(1, 9, "Do not turn off your Apple."); // Save capacity in nonvolatile memory. - ram2gs_setnvm(en8meg); - // Wait for >= 500ms on even the fastest systems. - spin(33, 8); + ram2gs_altera_setnvm(en8meg); // Save for Altera CPLD + ram2gs_agm_erase(); // Erase for AGM CPLD + spin(33, 8); // Wait for >= 500ms on even the fastest systems. + ram2gs_agm_write_nvm(en8meg); // Write for AGM CPLD // Print success message clrscr(); // Clear screen gwcputsxy(1, 8, "RAM2GS capacity saved successfully.");