NABULIB 2023.04.08.00

The RetroNET NABU-LIB z88dk C Library for creating games and software.
Post Reply
User avatar
DJ Sures
Posts: 345
Joined: Tue Mar 28, 2023 8:36 pm
Location: nabu.ca
Contact:

NABULIB 2023.04.08.00

Post by DJ Sures »

I added a new function to NABULIB that detects if cloud CPM is running. that way, your program can use the IA remote file system call to save/load files from the host PC or use other RetroNET functions. There's an example TEST project in GitHub

Requires the latest cloud cpm bios 8.3 or higher

Example Code

Code: Select all

#define BIN_TYPE BIN_CPM

// Disable the NABULIB keyboard and use the CPM keyboard
#define DISABLE_KEYBOARD_INT

// Disable the HCCA if you're not using filesystem or control ia
#define DISABLE_HCCA_RX_INT

// Disable the VDP if you're making a CPM console app. Console apps can use vt_XXX commands for moving cursor in emulation mode
#define DISABLE_VDP

#include <stdlib.h>
#include <stdbool.h>
#include <stdio.h>
#include "../NABULIB/NABU-LIB.h"

void main() {

  puts("");

  if (isCloudCPM())
    puts("You are running Cloud CPM!");
  else
    puts("Cloud CPM is not detected");

  puts("");
}

User avatar
productiondave
Posts: 117
Joined: Tue Mar 28, 2023 10:01 pm

Re: NABULIB 2023.04.08.00

Post by productiondave »

Thanks DJ,

Here is a snippet of code I am working on that seems to work fine. This is just dev code right now, but it proves the point and shows how to save integers into files over retroNet.

Hopefully this additional example will be helpful for people.

Code: Select all

/* Fetch the high score from disk*/
uint16_t getHighScore() {
    int hs = 0;
    #if BIN_TYPE == BIN_CPM
    
        if (isCloudCPM()) {  // We want to save the high score data back to the host PC as a discreet file in the STORE folder.
        
            uint8_t rnfp = rn_fileOpen(9, "snake.dat", OPEN_FILE_FLAG_READONLY, 0xFF);
            uint16_t bytesRead = rn_fileHandleRead(rnfp, &hs, 0, 0, sizeof(hs));
            rn_fileHandleClose(rnfp);
            
        } else { // We want to use regular old CP/M to store the file into the local file store.
        
            FILE * fp = fopen("snake.dat", "r");
            if (fp) {
                fscanf(fp, "%d", &hs);
            } else {
                hs = 0;
            }
            fclose(fp);
        }
    #else  // We are not building for CPM / probably NABU Native build - so return hs with it's initial value = 0 for the saved high score.
    #endif
    return hs;
}

/* Write the high score to disk*/
void setHighScore(uint16_t hs) {
    #if BIN_TYPE == BIN_CPM
    
        if (isCloudCPM()) {  //We want to fetch the high score data from a file stored on the host PC.
        
            uint8_t rnfp = rn_fileOpen(9, "snake.dat", OPEN_FILE_FLAG_READWRITE, 0xFF);
            rn_fileHandleEmptyFile(rnfp);
            rn_fileHandleInsert(rnfp, 0, 0, sizeof(hs), &hs);
            rn_fileHandleClose(rnfp);
            
        } else {  //We want to fetch the data from the local file store managed by CPM.
        
            FILE * fp = fopen("snake.dat", "w");
            fprintf(fp, "%d", hs);
            fclose(fp);
        }
    #else
        (void)hs;  // We are not building for CPM / probably NABU Native build - so do nothing at all.
    #endif
}
And after a short game, the file created in the IA Store folder on my host PC looks like this for a score of 17.

Code: Select all

hexdump /mnt/c/dev/nabu/Nabu\ Internet\ Adapter/Store/snake.dat -C
00000000  11 00                                             |..|
00000002
Last edited by productiondave on Sun Apr 09, 2023 7:16 am, edited 1 time in total.
User avatar
DJ Sures
Posts: 345
Joined: Tue Mar 28, 2023 8:36 pm
Location: nabu.ca
Contact:

Re: NABULIB 2023.04.08.00

Post by DJ Sures »

Noice.

One tip if you can initialize HS = 0 on the declaration statement and not need the multiple ELSE hl=0 statements. It'll be a bit more efficient and use fewer cycles :)
User avatar
productiondave
Posts: 117
Joined: Tue Mar 28, 2023 10:01 pm

Re: NABULIB 2023.04.08.00

Post by productiondave »

DJ Sures wrote: Sun Apr 09, 2023 7:04 am Noice.

One tip if you can initialize HS = 0 on the declaration statement and not need the multiple ELSE hl=0 statements. It'll be a bit more efficient and use fewer cycles :)
Good point. I probably would have landed there eventually, but always good to have a second set of eyes. I'll edit the code above for the casual reader.
User avatar
DJ Sures
Posts: 345
Joined: Tue Mar 28, 2023 8:36 pm
Location: nabu.ca
Contact:

Re: NABULIB 2023.04.08.00

Post by DJ Sures »

Like I say in my videos, version 1 is never optimized.

I can review my code a dozen times and always find something to optimize lol
Post Reply