As many of you may be aware, you can indeed load and save 256-bytes of data broken down to a storage of 64-numbers using conventional method commands of CARTDATA(), DSET(), and DGET().
However, if you want more than this, you will have to use unconventional method commands of CSTORE and RELOAD.
What follows is a sample program I wrote to demonstrate writing 8-bytes to an external file and reading it back again. You can actually load and save up to 🔺8192-bytes of storage this way so it is not to be overlooked !
Definition and instructions are below:
this fairly complex program will load data from an external binary file and display the results. after this, with the mode set to zero (0), it will save the select text to the select external file so the next time you run, you will be able to confirm it is loaded correctly. note ! this will not work as a true compiled exe or if you are attempting to run it directly from splore. you must save this .p8 to your local hard-drive and execute it -or- run it from an internet online page. if you have any questions or comments, please let me know!
Testing to see if I can run the HTML and .JS locally as I have a program to convert HTML to EXE in case ZEP's own EXE balked (which it did).
But no, all three of running the EXE, locally running the HTML & .JS, and running your cart from SPLORE - they all fail. You can test this yourself.
OK, I tested it anyway, and it seems you're right. Doesn't work with binary or HTML export.
However, for me it doesn't work with the HTML export even if I upload it to itch though.
I made two test carts, test1.p8 and test2.p8, where test1.p8 reloads from and cstores to test2.p8, and exported them to web. This is what I see in Chrome and Firefox's developer consoles (both locally and on itch). This is on Windows btw.
Reload() does work, but either cstore() doesn't update the cart, or subsequent reload()s always just re-reads the original cart.
Navigated to file:///C:/Users/tvl/AppData/Roaming/pico-8/carts/test1.html test1.js:261 >codo_init test1.js:261 platform: Emscripten test1.js:261 codo_system_init test1.js:261 codo_reset_timer test1.js:261 codo_gui_init test1.js:261 codo_keys_init test1.js:261 codo_text_init test1.js:261 codo_video_init test1.js:261 codo_mouse_init test1.js:261 codo_joystick_init test1.js:261 <ok test1.js:261 codo_fopen data.pod (rb) opened test1.js:261 codo_load_pod: data.pod ok test1.js:261 codo_set_screen 128 128 8 100 test1.js:261 set pixel_perfect 1 test1.js:261 codo_sound_init mix_buffer_size: 1024 test1.js:261 audio_init test1.js:261 Sample Rate: 44100 test1.js:261 mounting /user_data test1.js:261 codo: mounted filesystem. test1.js:261 found directory: /user_data/cdata test1.js:261 found directory: /user_data/cstore test1.js:261 found directory: /user_data/carts test1.js:261 starting download.. test1.js:261 0 test1.js:261 loading embedded cartridge test1.js:261 codo_fopen /user_data/cstore/__f15ee4fa2c340c2d3f83e91138e16724fb766088.p8 (r) failed test1.js:261 @ mount_embedded_cart: test1.p8 f15ee4fa2c340c2d3f83e91138e16724fb766088 test1.js:261 @ mount_embedded_cart: test2.p8 d6fa7b88fa333166a5c47070d2fe1ca54d1e9e6a
Reload (from test2.p8):
codo_fopen /user_data/cstore/__d6fa7b88fa333166a5c47070d2fe1ca54d1e9e6a.p8 (r) failed test1.js:261 sandboxed_cstore file not found: /user_data/cstore/__d6fa7b88fa333166a5c47070d2fe1ca54d1e9e6a.p8 test1.js:261 --> using internal file: test2.p8 test1.js:261 reload()ing 1 bytes from: test2.p8 test1.js:261 codo_fopen test2.p8 (rb) failed test1.js:261 -> returning vdisk file: test2.p8 (rb) test1.js:261 codo_fopen test2.p8 (r) failed test1.js:261 -> returning vdisk file: test2.p8 (r)
p8_cstore: storing 1 bytes as: /user_data/cstore/test2.p8 test1.js:261 codo_fopen /user_data/cstore/test2.p8 (r) opened test1.js:261 codo_fopen /user_data/cstore/test2.p8 (wb) opened test1.js:261 warning: 2 FS.syncfs operations in flight at once, probably just doing extra work
Maybe you should move this thread to "Support" and hope @zep sees it. He did say in his blog post that this was supposed to work with the HTML export, and that binary support would come soon (although I haven't checked if he later wrote that it was released in a later version).
Wow ... So ... maybe ?? ZEP will get it working.
If he's worried about security, he could always store the files encrypted deep in \users\ data, but still accessible to the program both for reading and writing persistent data exceeding 256-bytes.
here's a related thread: https://www.lexaloffle.com/bbs/?tid=29986
the cart I posted there still works (albeit with a typo that makes it write on "itself", hence the colored pixels)
I just exported it to html and bin, works ok...
[Please log in to post a comment]