/* Generates BUZBEE command data table asm file */ #include #include /* Length of commands in printable-char count (excluding NUL terminator). */ const int s_cchCmd = 4; /* Add your commands here to be hashed. Imprtant that they all be CCH_CMD * chars long EXCLUDING the NUL terminator. */ const char *s_ppszCmds[] = { "CALL", "EXEC", "HELP", "PEEK", "POKE", "SREC", /* "BOOT", */ }; int mkHash(const char pszCmd[]); int main(void) { /* Emit file header */ puts("; CHIBI PC-09 -- BUZBEE -- Command Data\n\ ; Copyright (c) 2025 Gale Faraday\n\ ; Licensed under MIT\n\ \n\ ; This file generated by bbmkcmds.c\n\ \n\ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\ ;;\n\ ;; BUZBEE Command Data\n\ ;;\n\ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\ \n\ SECTION BBCMDS\n"); for (int iCmd = 0; iCmd < sizeof(s_ppszCmds) / sizeof(char *); iCmd++) { const char *pszLabel = s_ppszCmds[iCmd]; printf(" EXPORT BBC%s\n", pszLabel); } /* Extra newline */ printf("\n"); /* Emit table data */ for (int iCmd = 0; iCmd < sizeof(s_ppszCmds) / sizeof(char *); iCmd++) { const char *pszLabel = s_ppszCmds[iCmd]; uint8_t uHash = mkHash(s_ppszCmds[iCmd]); printf("BBC%s\n fcb $%.2X\n", pszLabel, uHash); } return 0; } int mkHash(const char pszCmd[]) { uint8_t nhash = 0; /* NOTE: Very important that condition is the length of the string MINUS the * NUL terminator, in this case iChar < 4 */ for (int iChar = 0; iChar < s_cchCmd; iChar++) nhash = nhash - pszCmd[iChar]; return nhash; }