Browse Source

spirom: issue the right 1-bit command; update ufddos80.rom

In 1-bit mode need ROM_FAST_READ not ROM_FAST_READ_DUAL.

Update UFD-DOS for ABC80 from the abc80sim tree to better handle the
case of no disks.
H. Peter Anvin 3 years ago
parent
commit
d2951ecd94
9 changed files with 20 additions and 10 deletions
  1. 2 2
      fpga/max80.qpf
  2. BIN
      fpga/output/v1.jic
  3. BIN
      fpga/output/v1.sof
  4. BIN
      fpga/output/v2.jic
  5. BIN
      fpga/output/v2.sof
  6. 1 1
      rv32/boot.mif
  7. 1 1
      rv32/checksum.h
  8. 16 6
      rv32/romcopy.c
  9. BIN
      rv32/roms/ufddos80.rom

+ 2 - 2
fpga/max80.qpf

@@ -19,12 +19,12 @@
 #
 # Quartus Prime
 # Version 21.1.0 Build 842 10/21/2021 SJ Lite Edition
-# Date created = 04:00:36  January 27, 2022
+# Date created = 04:32:14  January 27, 2022
 #
 # -------------------------------------------------------------------------- #
 
 QUARTUS_VERSION = "21.1"
-DATE = "04:00:36  January 27, 2022"
+DATE = "04:32:14  January 27, 2022"
 
 # Revisions
 

BIN
fpga/output/v1.jic


BIN
fpga/output/v1.sof


BIN
fpga/output/v2.jic


BIN
fpga/output/v2.sof


+ 1 - 1
rv32/boot.mif

@@ -706,7 +706,7 @@ CONTENT BEGIN
 02BB : 0655050B;
 02BC : 27038082;
 02BD : 02B700C0;
-02BE : 20233B00;
+02BE : 20230B00;
 02BF : 8333A0A0;
 02C0 : 03B300E2;
 02C1 : 053700B3;

+ 1 - 1
rv32/checksum.h

@@ -1,4 +1,4 @@
 #ifndef CHECKSUM_H
 #define CHECKSUM_H
-#define SDRAM_SUM 0xd5634772
+#define SDRAM_SUM 0xff919e72
 #endif

+ 16 - 6
rv32/romcopy.c

@@ -14,7 +14,7 @@ enum romcmd {
     ROM_JEDEC_ID			= 0x9f,
     ROM_READ_UNIQUE_ID			= 0x4b,
     ROM_READ_DATA			= 0x03, /* DO NOT USE */
-    ROM_FAST_READ			= 0x0b, /* Only for non-DMA */
+    ROM_FAST_READ			= 0x0b,
     ROM_PAGE_PROGRAM			= 0x02,
     ROM_ERASE_4K			= 0x20,
     ROM_ERASE_32K			= 0x52,
@@ -45,20 +45,30 @@ enum romcmd {
 
 size_t __sbss romcopy_log[15];
 
+#define SPIROM_DUAL_MODE 0
+
 void __hot romcopy_download(void *dst, size_t offset, size_t len)
 {
+    unsigned int cmd;
+    unsigned int flags = ROMCOPY_SPI_CMDLEN(5) | ROMCOPY_WRITE_RAM;
+
+    if (SPIROM_DUAL_MODE) {
+	cmd = ROM_FAST_READ_DUAL;
+	flags |= ROMCOPY_SPI_DUAL;
+    } else {
+	cmd = ROM_FAST_READ;
+    }
+  
     ROMCOPY_RAMADDR = (size_t)dst;
-    ROMCOPY_ROMCMD  = __rom_offset + offset + (ROM_FAST_READ_DUAL << 24);
-    ROMCOPY_DATALEN =
-	len | ROMCOPY_SPI_CMDLEN(5) | /*ROMCOPY_SPI_DUAL |*/ ROMCOPY_WRITE_RAM;
+    ROMCOPY_ROMCMD  = __rom_offset + offset + (cmd << 24);
+    ROMCOPY_DATALEN = len | flags;
 }
 
 void __hot romcopy_bzero(void *dst, size_t len)
 {
     ROMCOPY_RAMADDR = (size_t)dst;
     ROMCOPY_ROMCMD  = 0;
-    ROMCOPY_DATALEN =
-	len | ROMCOPY_ZERO_BUFFER | ROMCOPY_WRITE_RAM;
+    ROMCOPY_DATALEN = len | ROMCOPY_ZERO_BUFFER | ROMCOPY_WRITE_RAM;
 }
 
 uint32_t __sbss romcopy_time[2];

BIN
rv32/roms/ufddos80.rom