feat(buzbee): BUZBEE command tables now generated with bbmkcmds.c
This commit is contained in:
66
bbmkcmds.c
Normal file
66
bbmkcmds.c
Normal file
@@ -0,0 +1,66 @@
|
||||
/* Generates BUZBEE command data table asm file */
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/* 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;
|
||||
}
|
Reference in New Issue
Block a user