From 93b8d734900eeed195aa426ef88746a5ff364beb Mon Sep 17 00:00:00 2001 From: Florian Reitz Date: Thu, 4 Jun 2020 11:49:56 +0200 Subject: [PATCH] Erase added to flasher --- Binary/Flasher.bin | Bin 11603 -> 11745 bytes Binary/Flasher.dsk | Bin 143360 -> 143360 bytes ProFile.zip => Binary/ProFile.zip | Bin Firmware/AppleIISd.vcxproj | 2 +- Firmware/AppleIISd.vcxproj.filters | 2 +- Software/src/Flasher.c | 111 ++++++++++++++++------------- 6 files changed, 65 insertions(+), 50 deletions(-) rename ProFile.zip => Binary/ProFile.zip (100%) diff --git a/Binary/Flasher.bin b/Binary/Flasher.bin index 6b5fcb9a93320886bd80e7671c23f884f921aabd..980f2d893320dcd8d96a201edea636ad8f353ddf 100644 GIT binary patch literal 11745 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 Q72;QU(XFmqMgBJb9~C^%E&u=k diff --git a/Binary/Flasher.dsk b/Binary/Flasher.dsk index 17081ad391ac7f251d178c319d9cb7ef854475e5..d9324df0441e74efc0bd6066dee5de3315dbddfb 100644 GIT binary patch delta 14726 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 delta 19901 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 G2mb^04`PJ? diff --git a/ProFile.zip b/Binary/ProFile.zip similarity index 100% rename from ProFile.zip rename to Binary/ProFile.zip diff --git a/Firmware/AppleIISd.vcxproj b/Firmware/AppleIISd.vcxproj index d0bd28e..8668b62 100644 --- a/Firmware/AppleIISd.vcxproj +++ b/Firmware/AppleIISd.vcxproj @@ -11,8 +11,8 @@ - + diff --git a/Firmware/AppleIISd.vcxproj.filters b/Firmware/AppleIISd.vcxproj.filters index 8986c9d..f299116 100644 --- a/Firmware/AppleIISd.vcxproj.filters +++ b/Firmware/AppleIISd.vcxproj.filters @@ -23,7 +23,7 @@ - + diff --git a/Software/src/Flasher.c b/Software/src/Flasher.c index 8db7569..a0ea27c 100644 --- a/Software/src/Flasher.c +++ b/Software/src/Flasher.c @@ -28,9 +28,11 @@ uint8 buffer[2048] = { 0 }; int main() { - int retval = 0; + int retval = 1; FILE* pFile; char slotNum; + boolean erase = FALSE; + uint16 fileSize = 0; APPLE_II_SD_T* pAIISD = (APPLE_II_SD_T*)SLOT_IO_START; uint8* pSlotRom = SLOT_ROM_START; @@ -39,7 +41,7 @@ int main() videomode(VIDEOMODE_40COL); clrscr(); cprintf("AppleIISd firmware flasher\r\n"); - cprintf("(c) 2019 Florian Reitz\r\n\r\n"); + cprintf("(c) 2019-2020 Florian Reitz\r\n\r\n"); // ask for slot cursor(1); // enable blinking cursor @@ -48,6 +50,18 @@ int main() slotNum -= 0x30; cursor(0); // disable blinking cursor + if(slotNum == 0) + { + // erase device + erase = TRUE; + // ask for slot + cursor(1); // enable blinking cursor + cprintf("Erase device in slot number (1-7): "); + cscanf("%c", &slotNum); + slotNum -= 0x30; + cursor(0); // disable blinking cursor + } + // check if slot is valid if((slotNum < 1) || (slotNum > 7)) { @@ -59,56 +73,57 @@ int main() ((uint8*)pAIISD) += slotNum << 4; pSlotRom += slotNum << 8; - // open file - pFile = fopen(BIN_FILE_NAME, "rb"); - if(pFile) + if(erase) { - // read buffer - uint16 fileSize = fread(buffer, 1, sizeof(buffer), pFile); - fclose(pFile); - pFile = NULL; - - if(fileSize == 2048) - { - // enable write - pAIISD->status.pgmen = 1; - - // clear 0xCFFF - *CFFF = 0; - - // write to SLOTROM - cprintf("\r\n\r\nFlashing SLOTROM: "); - if(writeChip(buffer, pSlotRom, 256)) - { - // write to EXTROM - cprintf("\r\nFlashing EXTROM: "); - if(writeChip(buffer + 256, pExtRom, fileSize - 256)) - { - cprintf("\r\n\r\nFlashing finished!\n"); - } - else - { - retval = 1; - } - } - else - { - retval = 1; - } - - // disable write - pAIISD->status.pgmen = 0; - } - else - { - cprintf("\r\nWrong file size: %d\r\n", fileSize); - retval = 1; - } + // buffer is already filled with 0 + fileSize = 2048; } else { - cprintf("\r\nCan't open %s file\r\n", BIN_FILE_NAME); - retval = 1; + // open file + pFile = fopen(BIN_FILE_NAME, "rb"); + if(pFile) + { + // read buffer + fileSize = fread(buffer, 1, sizeof(buffer), pFile); + fclose(pFile); + pFile = NULL; + + if(fileSize != 2048) + { + cprintf("\r\nWrong file size: %d\r\n", fileSize); + } + } + else + { + cprintf("\r\nCan't open %s file\r\n", BIN_FILE_NAME); + fileSize = 0; + } + } + + if(fileSize == 2048) + { + // enable write + pAIISD->status.pgmen = 1; + + // clear 0xCFFF + *CFFF = 0; + + // write to SLOTROM + cprintf("\r\n\r\nFlashing SLOTROM: "); + if(writeChip(buffer, pSlotRom, 256)) + { + // write to EXTROM + cprintf("\r\nFlashing EXTROM: "); + if(writeChip(buffer + 256, pExtRom, fileSize - 256)) + { + cprintf("\r\n\r\nFlashing finished!\n"); + retval = 0; + } + } + + // disable write + pAIISD->status.pgmen = 0; } cgetc();