From 77c8e8241987a4497f155754eaf5a879c5d3b8fe Mon Sep 17 00:00:00 2001 From: Devine Lu Linvega Date: Mon, 6 Mar 2023 10:36:24 -0800 Subject: [PATCH] Moved dei/deo masks into emulators --- src/uxn-fast.c | 14 ++------------ src/uxn.h | 2 ++ src/uxncli.c | 3 +++ src/uxnemu.c | 3 +++ 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/uxn-fast.c b/src/uxn-fast.c index 2478fac..93e65e9 100644 --- a/src/uxn-fast.c +++ b/src/uxn-fast.c @@ -33,18 +33,8 @@ WITH REGARD TO THIS SOFTWARE. #define PUT2(o, v) { tmp = (v); s->dat[s->ptr - o - 2] = tmp >> 8; s->dat[s->ptr - o - 1] = tmp; } #define PUSH(stack, v) { if(s->ptr > 254) HALT(2) stack->dat[stack->ptr++] = (v); } #define PUSH2(stack, v) { if(s->ptr > 253) HALT(2) tmp = (v); stack->dat[stack->ptr] = (v) >> 8; stack->dat[stack->ptr + 1] = (v); stack->ptr += 2; } -#define DEO(a, b) { u->dev[a] = b; if((deo_masks[(a) >> 4] >> ((a) & 0xf)) & 0x1) uxn_deo(u, a); } -#define DEI(a, b) { PUT(a, ((dei_masks[(b) >> 4] >> ((b) & 0xf)) & 0x1) ? uxn_dei(u, b) : u->dev[b]) } - -static -Uint16 deo_masks[] = { - 0x6a08, 0x0300, 0xc028, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, - 0x0000, 0x0000, 0xa260, 0xa260, 0x0000, 0x0000, 0x0000, 0x0000}; - -static -Uint16 dei_masks[] = { - 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x07fd, 0x0000, 0x0000, 0x0000}; +#define DEO(a, b) { u->dev[a] = b; if((deo_mask[(a) >> 4] >> ((a) & 0xf)) & 0x1) uxn_deo(u, a); } +#define DEI(a, b) { PUT(a, ((dei_mask[(b) >> 4] >> ((b) & 0xf)) & 0x1) ? uxn_dei(u, b) : u->dev[b]) } int uxn_eval(Uxn *u, Uint16 pc) diff --git a/src/uxn.h b/src/uxn.h index ac3fce3..c35587a 100644 --- a/src/uxn.h +++ b/src/uxn.h @@ -40,6 +40,8 @@ typedef struct Uxn { extern Uint8 uxn_dei(Uxn *u, Uint8 addr); extern void uxn_deo(Uxn *u, Uint8 addr); extern int uxn_halt(Uxn *u, Uint8 instr, Uint8 err, Uint16 addr); +extern Uint16 dei_mask[]; +extern Uint16 deo_mask[]; /* built-ins */ diff --git a/src/uxncli.c b/src/uxncli.c index 50584cc..b6260f0 100644 --- a/src/uxncli.c +++ b/src/uxncli.c @@ -17,6 +17,9 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ +Uint16 deo_mask[] = {0x6a08, 0x0300, 0xc028, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x0000, 0x0000, 0xa260, 0xa260, 0x0000, 0x0000, 0x0000, 0x0000}; +Uint16 dei_mask[] = {0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07fd, 0x0000, 0x0000, 0x0000}; + static int emu_error(char *msg, const char *err) { diff --git a/src/uxnemu.c b/src/uxnemu.c index 9ef36bb..8808812 100644 --- a/src/uxnemu.c +++ b/src/uxnemu.c @@ -46,6 +46,9 @@ static SDL_AudioDeviceID audio_id; static SDL_Rect gRect; static SDL_Thread *stdin_thread; +Uint16 deo_mask[] = {0x6a08, 0x0300, 0xc028, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x0000, 0x0000, 0xa260, 0xa260, 0x0000, 0x0000, 0x0000, 0x0000}; +Uint16 dei_mask[] = {0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07fd, 0x0000, 0x0000, 0x0000}; + /* devices */ static Uint8 zoom = 1;