diff --git a/Binary/Flasher.bin b/Binary/Flasher.bin
index 6b5fcb9..980f2d8 100644
Binary files a/Binary/Flasher.bin and b/Binary/Flasher.bin differ
diff --git a/Binary/Flasher.dsk b/Binary/Flasher.dsk
index 17081ad..d9324df 100644
Binary files a/Binary/Flasher.dsk and b/Binary/Flasher.dsk differ
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();