Tweaked Input args and other stuff

This commit is contained in:
0xmac 2025-01-30 09:18:43 +01:00
parent 5cc21f3a6f
commit 45b8993cdd

View File

@ -1,4 +1,6 @@
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_video.h>
#include <ctype.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@ -9,8 +11,8 @@
#include "config.h"
/* Preset Values */
static float displayScale = 2;
static int cpuSpeed = 100000; // 100 kHz
static float displayScale = 1;
static int cpuSpeed = 1000000; // 1 MHz
static int singleStep = 0;
static int clockSteps = 1;
@ -28,6 +30,7 @@ uint8_t showDebug = 0;
uint8_t fpsCount = 0;
uint8_t displayMmap = 0;
uint8_t documentReload = 0;
uint8_t randomize = 0;
uint8_t fpsStore = 60;
uint8_t FPS = 30;
@ -36,12 +39,11 @@ uint8_t cpuHealth;
unsigned long cpuTicks = 0;
unsigned long tickTrigger = 0;
char debugString[512];
char snapshotFile[32];
char *reloadExecute;
char *inputFile;
char *displaySpeed;
int openFile(){
FILE *file = fopen(inputFile, "rb");
@ -61,25 +63,52 @@ int openFile(){
}
void resetSystem(){
srand((unsigned)time(NULL));
if (randomize) {
for (int i = 0; i < RAMSIZE + 1; i++) ram[i] = rand();
}
initVideo();
updateVideo();
reset6502();
}
void fetchArgs(int argc, char *argv[]){
printf(PREAMBLE);
int parseFormat(char *format){
float retVal = 0;
int i = 0;
for (;isdigit(format[i]) || format[i] == '.'; i++);
char tmp = format[i];
format[i] = 0;
retVal = atof(format);
format[i] = tmp;
if (!strcasecmp((format + i), "hz"));
else if (!strcasecmp((format + i), "khz")) retVal *= 1000;
else if (!strcasecmp((format + i), "mhz")) retVal *= 1000000;
else {
printf("\"%s\" is not a supported format\nSupported formats include: Hz, KHz and MHz\n", (format + i));
exit(EXIT_FAILURE);
}
return (int)retVal;
}
void fetchArgs(int argc, char *argv[]){
for (int i = 1; i < argc; i++) {
if (!strcmp(argv[i], "--help")) printf(HELP);
else if (!strcmp(argv[i], "--help-keys")) printf(HELPKEYS);
else if (!strcmp(argv[i], "--cpuspeed")) cpuSpeed = atoi(argv[++i]);
if (!strcmp(argv[i], "--help")) { printf(PREAMBLE); printf(HELP); exit(0); }
else if (!strcmp(argv[i], "--help-keys")) { printf(PREAMBLE); printf(HELPKEYS); exit(0); }
else if (!strcmp(argv[i], "--cpuspeed")) { cpuSpeed = parseFormat(argv[++i]); displaySpeed = argv[i]; }
else if (!strcmp(argv[i], "--scale")) displayScale = atof(argv[++i]);
else if (!strcmp(argv[i], "--singlestep")) singleStep = 1;
else if (!strcmp(argv[i], "--clocksteps")) clockSteps = atoi(argv[++i]);
//else if (!strcmp(argv[i], "--snapshot")) snapshotFile = &argv[i];
else if (!strcmp(argv[i], "--fps")) FPS = atoi(argv[++i]);
else if (!strcmp(argv[i], "--enable-reload")) documentReload = 1;
else if (!strcmp(argv[i], "--reload-execute")) reloadExecute = argv[++i];
else if (!strcmp(argv[i], "--reload-program")) documentReload = 1;
else if (!strcmp(argv[i], "--script")) reloadExecute = argv[++i];
else if (!strcmp(argv[i], "--resizable")) WINMODE |= SDL_WINDOW_RESIZABLE;
else if (!strcmp(argv[i], "--randomize")) randomize = 1;
else {
inputFile = argv[i];
if (openFile()){
@ -90,6 +119,7 @@ void fetchArgs(int argc, char *argv[]){
}
}
int main(int argc, char *argv[]){
fetchArgs(argc, argv);
initWindow();
@ -129,35 +159,33 @@ int main(int argc, char *argv[]){
if (halt) {
drawString("!CPU Haltet!", renderMemory,
SDL_X_SIZE, 0x000000FF, time(NULL) % 2 ? 0xAAAAAAFF : 0xFFFFFFFF, 16, vStack, 2);
SDL_X_SIZE, 0x000000FF, time(NULL) % 2 ? 0xAAAAAAFF : 0xFFFFFFFF, 16, vStack, 1);
vStack += (FONT_HEIGHT * 2 * 2);
vStack += (FONT_HEIGHT * 2);
} if (showDebug){
sprintf(debugString, "LOADED BINARY: \"%s\"\nSCREENSIZE: %dx%d\nFPS: %d\nSCALE: %d", inputFile, SDL_X_SIZE, SDL_Y_SIZE, fpsStore, (int)displayScale);
drawString(debugString, renderMemory,
SDL_X_SIZE, 0x000000FF, 0xAAAAAAFF, 16, vStack, 2);
SDL_X_SIZE, 0x000000FF, 0xAAAAAAFF, 16, vStack, 1);
vStack += (FONT_HEIGHT * 4 * 2);
vStack += (FONT_HEIGHT * 4);
sprintf(debugString, "CPU: %d%%", cpuHealth);
sprintf(debugString, "CPU: %d%% @ %s", cpuHealth, displaySpeed);
drawString(debugString, renderMemory,
SDL_X_SIZE, 0x000000FF, time(NULL) % 2 ? 0xAAAAAAFF : cpuHealth < 10 ?
0xFF0000FF : cpuHealth < 50 ? 0xFFFF00FF : 0xAAAAAAFF, 16, vStack, 2);
0xFF0000FF : cpuHealth < 50 ? 0xFFFF00FF : 0xAAAAAAFF, 16, vStack, 1);
vStack += (FONT_HEIGHT * 2 * 2);
vStack += (FONT_HEIGHT * 2);
} if (displayMmap){
sprintf(debugString, "RAM: $%04X - $%04X\nROM: $%04X - $%04X\nVIAADDRS: $%04X\nKBDADDRS: $%04X\nVIDADDRS: $%04X", RAMLOC, RAMLOC + RAMSIZE, ROMLOC, ROMLOC + ROMSIZE, VIAADDRS, KBDADDRS, VIDADDRS);
drawString(debugString, renderMemory, SDL_X_SIZE, 0x000000FF, 0xAAAAAAFF, 16, vStack, 2);
drawString(debugString, renderMemory, SDL_X_SIZE, 0x000000FF, 0xAAAAAAFF, 16, vStack, 1);
vStack += (FONT_HEIGHT * 6 * 2);
vStack += (FONT_HEIGHT * 6);
} if (showHelp) {
drawString(HELPKEYS, renderMemory, SDL_X_SIZE, 0x000000FF, 0xAAAAAAFF, 16, vStack, 2);
drawString(HELPKEYS, renderMemory, SDL_X_SIZE, 0x000000FF, 0xAAAAAAFF, 16, vStack, 1);
vStack += (FONT_HEIGHT * 2 * 2);
vStack += (FONT_HEIGHT * 2);
}
if (SDL_UpdateTexture(texture, NULL, renderMemory, (sizeof(uint32_t) * SDL_X_SIZE))) {
fprintf(stderr, "Could not update SDL texture: %s.\n", SDL_GetError());
exit(EXIT_FAILURE);