From d94c5b5691c2069f4ee740b9430b18b5e811f048 Mon Sep 17 00:00:00 2001 From: "Billy J. Beltran" Date: Thu, 3 Dec 2020 01:52:07 +0100 Subject: [PATCH 1/7] Add officialstm32 eeprom write API functions and wrap in conditionals --- ulisp-stm32.ino | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/ulisp-stm32.ino b/ulisp-stm32.ino index c4bcd16..91fe095 100644 --- a/ulisp-stm32.ino +++ b/ulisp-stm32.ino @@ -15,7 +15,7 @@ const char LispLibrary[] PROGMEM = ""; // #define printgcs // #define sdcardsupport // #define lisplibrary - +#define officialstm32 // Includes // #include "LispLibrary.h" @@ -380,22 +380,42 @@ void SDWriteInt (File file, int data) { } #else void FlashSetup () { +#if defined(officialstm32) + for (uint16_t i=0; i>8 & 0xFF); + FlashWriteByte(addr, data>>16 & 0xFF); FlashWriteByte(addr, data>>24 & 0xFF); +#else FlashWrite16(addr, data & 0xFFFF); FlashWrite16(addr, data>>16 & 0xFFFF); +#endif } #endif From 22cd4dcbd1d522388a17178080685825a46ddb29 Mon Sep 17 00:00:00 2001 From: "Billy J. Beltran" Date: Thu, 3 Dec 2020 02:09:04 +0100 Subject: [PATCH 2/7] Add FlashReadByte and ifdef conditionals --- ulisp-stm32.ino | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/ulisp-stm32.ino b/ulisp-stm32.ino index 91fe095..19bd6d3 100644 --- a/ulisp-stm32.ino +++ b/ulisp-stm32.ino @@ -480,16 +480,29 @@ int SDReadInt (File file) { return b0 | b1<<8 | b2<<16 | b3<<24; } #else +#if defined(officialstm32) +uint8_t FlashReadByte (unsigned int *addr) { + uint8_t data = eeprom_buffered_read_byte((uint32_t) addr); + (*addr)++; + return data; +} +#else uint16_t FlashRead16 (unsigned int *addr) { uint16_t data = (*(__IO uint16*)((*addr) + Eeprom)); (*addr) = (*addr) + 2; return data; } - +#endif int FlashReadInt (unsigned int *addr) { +#if defined(officialstm32) + uint8_t b0 = FlashReadByte(addr); uint8_t b1 = FlashReadByte(addr); + uint8_t b2 = FlashReadByte(addr); uint8_t b3 = FlashReadByte(addr); + return b0 | b1<<8 | b2<<16 | b3<<24; +#else uint16_t b0 = FlashRead16(addr); uint16_t b1 = FlashRead16(addr); return b0 | b1<<16; +#endif } #endif From 9c6e401413281036430dfa6bfe18c02738db9548 Mon Sep 17 00:00:00 2001 From: "Billy J. Beltran" Date: Thu, 3 Dec 2020 02:09:27 +0100 Subject: [PATCH 3/7] Define WiringPinMode for officialstm32 --- ulisp-stm32.ino | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ulisp-stm32.ino b/ulisp-stm32.ino index 19bd6d3..26acb3b 100644 --- a/ulisp-stm32.ino +++ b/ulisp-stm32.ino @@ -25,6 +25,10 @@ const char LispLibrary[] PROGMEM = ""; #include #include +#if defined(officialstm32) +#define WiringPinMode uint32_t +#endif + #if defined(sdcardsupport) #include #define SDSIZE 172 From 336640e395f7f70f964285e76d6b9ff70b4f2691 Mon Sep 17 00:00:00 2001 From: "Billy J. Beltran" Date: Thu, 3 Dec 2020 02:16:10 +0100 Subject: [PATCH 4/7] Update saveimage, loadimage to read/write bytes --- ulisp-stm32.ino | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ulisp-stm32.ino b/ulisp-stm32.ino index 26acb3b..c215639 100644 --- a/ulisp-stm32.ino +++ b/ulisp-stm32.ino @@ -466,7 +466,11 @@ int saveimage (object *arg) { FlashWriteInt(&addr, (uintptr_t)GCStack); #if SYMBOLTABLESIZE > BUFFERSIZE FlashWriteInt(&addr, (uintptr_t)SymbolTop); +#if defined(officialstm32) + for (int i=0; i BUFFERSIZE SymbolTop = (char *)FlashReadInt(&addr); +#if defined(officialstm32) + for (int i=0; i>8 & 0xFF; } +#endif #endif for (int i=0; i Date: Thu, 3 Dec 2020 02:24:55 +0100 Subject: [PATCH 5/7] Add appropriate buffer flush and fill to save/loadimage --- ulisp-stm32.ino | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ulisp-stm32.ino b/ulisp-stm32.ino index c215639..844c529 100644 --- a/ulisp-stm32.ino +++ b/ulisp-stm32.ino @@ -477,6 +477,9 @@ int saveimage (object *arg) { FlashWriteInt(&addr, (uintptr_t)car(obj)); FlashWriteInt(&addr, (uintptr_t)cdr(obj)); } +#if defined(officialstm32) + eeprom_buffer_flush(); +#endif return imagesize; } #endif @@ -539,6 +542,13 @@ int loadimage (object *arg) { gc(NULL, NULL); return imagesize; #else +#if defined(officialstm32) + //clear and fill the buffer + for (uint16_t i=0; i Date: Fri, 4 Dec 2020 00:11:45 +0100 Subject: [PATCH 6/7] FlashReadByte: Fix incorrect pass by reference --- ulisp-stm32.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ulisp-stm32.ino b/ulisp-stm32.ino index 844c529..f63090e 100644 --- a/ulisp-stm32.ino +++ b/ulisp-stm32.ino @@ -493,7 +493,7 @@ int SDReadInt (File file) { #else #if defined(officialstm32) uint8_t FlashReadByte (unsigned int *addr) { - uint8_t data = eeprom_buffered_read_byte((uint32_t) addr); + uint8_t data = eeprom_buffered_read_byte((uint32_t) *addr); (*addr)++; return data; } From 00cfac5bb782a6fa1007439c506d22b351c07d46 Mon Sep 17 00:00:00 2001 From: "Billy J. Beltran" Date: Fri, 4 Dec 2020 01:00:23 +0100 Subject: [PATCH 7/7] define EEPROM offset for officialstm32 --- ulisp-stm32.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/ulisp-stm32.ino b/ulisp-stm32.ino index f63090e..05c7dc7 100644 --- a/ulisp-stm32.ino +++ b/ulisp-stm32.ino @@ -27,6 +27,7 @@ const char LispLibrary[] PROGMEM = ""; #if defined(officialstm32) #define WiringPinMode uint32_t +#define FLASH_BASE_ADDRESS 0x801D800 #endif #if defined(sdcardsupport)