aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-04-15 13:32:44 +0200
committerkdx <kikoodx@paranoici.org>2023-04-15 13:32:44 +0200
commit936a48f7279542b78b012517f27aea4380e70c18 (patch)
tree9dd07367195c6ed84ef9b6e475c8231c050cd169
parent3e5be77ecceb87cc4e0915c4acd6cfb83744b292 (diff)
downloadorga-936a48f7279542b78b012517f27aea4380e70c18.tar.gz
art of shitty shell scripts
-rw-r--r--.gitignore5
-rwxr-xr-xbuild.sh5
-rwxr-xr-xembed.sh10
-rwxr-xr-xembed_win.sh10
-rw-r--r--src/orgaemu.c27
5 files changed, 46 insertions, 11 deletions
diff --git a/.gitignore b/.gitignore
index ba302ed..7fbcde6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
-/orgaasm
-/orgaemu
+/orgaasm*
+/orgaemu*
/*.rom
+/src/rom.h
diff --git a/build.sh b/build.sh
index 85d04c6..f670638 100755
--- a/build.sh
+++ b/build.sh
@@ -1,6 +1,7 @@
#!/bin/sh
CFLAGS='-std=c99 -Wall -Wextra -O2'
+[ "$CC" == "" ] && CC=gcc
printf 'orgaasm\n'
-gcc $CFLAGS -o orgaasm src/orgaasm.c
+$CC $CFLAGS -o orgaasm src/orgaasm.c
printf 'orgaemu\n'
-gcc $CFLAGS -o orgaemu src/orgaemu.c -lSDL2
+$CC $CFLAGS -o orgaemu src/orgaemu.c $@ -lSDL2
diff --git a/embed.sh b/embed.sh
new file mode 100755
index 0000000..67062ba
--- /dev/null
+++ b/embed.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+./build.sh
+TMPASM="$(mktemp)"
+cd "$(dirname "$1")" || exit 1
+m4 "$(basename "$1")" >"$TMPASM" || exit 1
+cd "$OLDPWD" || exit 1
+./orgaasm "$TMPASM" rom || exit 1
+cembed rom >src/rom.h || exit 1
+rm -f rom
+./build.sh -DEMBED_ROM=
diff --git a/embed_win.sh b/embed_win.sh
new file mode 100755
index 0000000..53c935c
--- /dev/null
+++ b/embed_win.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+./build.sh
+TMPASM="$(mktemp)"
+cd "$(dirname "$1")" || exit 1
+m4 "$(basename "$1")" >"$TMPASM" || exit 1
+cd "$OLDPWD" || exit 1
+./orgaasm "$TMPASM" rom || exit 1
+cembed rom >src/rom.h || exit 1
+rm -f rom
+CC=x86_64-w64-mingw32-gcc ./build.sh -DEMBED_ROM= -Dmain=SDL_main -lmingw32 -lSDL2main -mwindows
diff --git a/src/orgaemu.c b/src/orgaemu.c
index 4de09cf..ecc9c4d 100644
--- a/src/orgaemu.c
+++ b/src/orgaemu.c
@@ -1,9 +1,14 @@
-#include "drain.h"
#include "ops.h"
#include <stdio.h>
#include <stdint.h>
#include <SDL2/SDL.h>
+#ifdef EMBED_ROM
+#include "rom.h"
+#else
+#include "drain.h"
+#endif
+
#define MEM_SIZE 0xffff
static const uint16_t buttons[SDL_NUM_SCANCODES] = {
@@ -123,10 +128,9 @@ render(uint16_t *mem)
next_time += 1000 / 30;
const Uint64 cur_time = SDL_GetTicks64();
- if (next_time <= cur_time) {
- fprintf(stderr, "lagging %lu\n", cur_time - next_time);
+ if (next_time <= cur_time)
next_time = cur_time;
- } else
+ else
SDL_Delay(next_time - cur_time);
SDL_RenderPresent(renderer);
@@ -349,12 +353,22 @@ exec_data(uint16_t *mem)
int
main(int argc, char **argv)
{
+#ifdef EMBED_ROM
+ (void)argc, (void)argv;
+ mem = calloc(MEM_SIZE, sizeof(uint16_t));
+ if (mem == NULL) {
+ perror("main:calloc");
+ return 1;
+ }
+ for (unsigned i = 0; i < sizeof(rom); i += 2)
+ mem[i / 2] = get_short(rom + i);
+#else
if (argc != 2) {
fprintf(stderr, "usage: %s <rom>\n", argv[0]);
return 1;
}
- FILE *file = fopen(argv[1], "rb");
+ FILE *const file = fopen(argv[1], "rb");
if (file == NULL) {
perror(argv[1]);
return 1;
@@ -372,10 +386,9 @@ main(int argc, char **argv)
free(data);
return 1;
}
-
for (long i = 0; i < size; i += 2)
mem[i / 2] = get_short(data + i);
- free(data);
+#endif
stack = calloc(MEM_SIZE, sizeof(uint16_t));
if (stack == NULL) {