• the part with

    return require("heatshrink").decompress(atob("o­FAwkEogA/AH4A/AH4A/AH4A/AE8AAAoeXoAfeDQU­BmcyD7A+Dh///8QD649CiAfaHwUvD4sEHy0DDYIf­EICg+Cn4fHICY+DD4nxcgojOHwgfEIAYfRCIQaDD­4ZAFD5r7DH4//kAfRCIZ/GAAnwD5p9DX44fTHgYS­Bf4ofVDAQEBl4fFUAgfOXoQzBgIfFBAIfPP4RAEA­oYAB+cRiK/SG4h/WIBAfXIA7CBAAswD55AHn6fUI­BMCD65AHl4gCmcziAfQQJqfQQJpiDgk0IDXxQLRA­EECaBM+QgRYRYgUIA0CD4ggSQJiDCiAKBICszAAs­wD55AHABKBVD7BAFABIqBD5pAFABPxD55AOD6BAD­iIAJQAyxLABwf/gaAPAH4A/AH4ARA=="));
    

    could be rewritten to decompress to file in storage once at startup or even be already uploaded in decompressed state as binary file. Storage.read doesn't take extra RAM and returns pointer to the storage data directly. With bangle 1 and 2 this data is read on demand from SPI flash. Bangle 2 also has about 500KB of internal directly mapped flash available as drive c:. Not sure whether this feature is already enabled in stable firmware but if you do Storage.write("c:filename",buffer) it should end in internal flash. When reading specifying the drive letter is optional, should be found both as c:filename and also filename. This internal flash is directly visible for CPU like RAM so speed should be more or less the same like having data in RAM.

About

Avatar for fanoush @fanoush started