Moved masks to system
This commit is contained in:
parent
bd976ce842
commit
2c560686d8
|
@ -16,6 +16,8 @@ WITH REGARD TO THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char *boot_rom;
|
char *boot_rom;
|
||||||
|
Uint8 dei_masks[0x100], deo_masks[0x100];
|
||||||
|
Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
|
||||||
|
|
||||||
static const char *errors[] = {
|
static const char *errors[] = {
|
||||||
"underflow",
|
"underflow",
|
||||||
|
@ -64,12 +66,12 @@ system_inspect(Uxn *u)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo)
|
system_connect(Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo)
|
||||||
{
|
{
|
||||||
int i, d = (device << 0x4);
|
int i, d = (device << 0x4);
|
||||||
for(i = 0; i < 0x10; i++) {
|
for(i = 0; i < 0x10; i++) {
|
||||||
u->dei_masks[d + i] = (dei >> i) & 0x1;
|
dei_masks[d + i] = (dei >> i) & 0x1;
|
||||||
u->deo_masks[d + i] = (deo >> i) & 0x1;
|
deo_masks[d + i] = (deo >> i) & 0x1;
|
||||||
}
|
}
|
||||||
dev_vers[device] = ver;
|
dev_vers[device] = ver;
|
||||||
dei_mask[device] = dei;
|
dei_mask[device] = dei;
|
||||||
|
@ -77,7 +79,7 @@ system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
system_version(Uxn *u, char *name, char *date)
|
system_version(char *name, char *date)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
printf("%s, %s.\n", name, date);
|
printf("%s, %s.\n", name, date);
|
||||||
|
|
|
@ -17,10 +17,10 @@ WITH REGARD TO THIS SOFTWARE.
|
||||||
|
|
||||||
extern char *boot_rom;
|
extern char *boot_rom;
|
||||||
|
|
||||||
void system_connect(Uxn *u, Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo);
|
void system_connect(Uint8 device, Uint8 ver, Uint16 dei, Uint16 deo);
|
||||||
void system_reboot(Uxn *u, char *rom, int soft);
|
void system_reboot(Uxn *u, char *rom, int soft);
|
||||||
void system_inspect(Uxn *u);
|
void system_inspect(Uxn *u);
|
||||||
int system_version(Uxn *u, char *emulator, char *date);
|
int system_version(char *emulator, char *date);
|
||||||
int system_error(char *msg, const char *err);
|
int system_error(char *msg, const char *err);
|
||||||
int system_init(Uxn *u, Uint8 *ram, char *rom);
|
int system_init(Uxn *u, Uint8 *ram, char *rom);
|
||||||
|
|
||||||
|
|
|
@ -11,10 +11,10 @@ WITH REGARD TO THIS SOFTWARE.
|
||||||
|
|
||||||
/* clang-format off */
|
/* clang-format off */
|
||||||
|
|
||||||
#define POKE2(d, v) { *(d) = (v) >> 8; (d)[1] = (v); }
|
|
||||||
#define PEEK2(d) (*(d) << 8 | (d)[1])
|
#define PEEK2(d) (*(d) << 8 | (d)[1])
|
||||||
#define DEI(p) (u->dei_masks[p] ? emu_dei(u, (p)) : u->dev[(p)])
|
#define POKE2(d, v) { *(d) = (v) >> 8; (d)[1] = (v); }
|
||||||
#define DEO(p, v) { u->dev[p] = v; if(u->deo_masks[p]) emu_deo(u, p); }
|
#define DEI(p) (dei_masks[p] ? emu_dei(u, (p)) : u->dev[(p)])
|
||||||
|
#define DEO(p, v) { u->dev[p] = v; if(deo_masks[p]) emu_deo(u, p); }
|
||||||
|
|
||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ typedef struct {
|
||||||
} Stack;
|
} Stack;
|
||||||
|
|
||||||
typedef struct Uxn {
|
typedef struct Uxn {
|
||||||
Uint8 *ram, dev[0x100], dei_masks[0x100], deo_masks[0x100];
|
Uint8 *ram, dev[0x100];
|
||||||
Stack wst, rst;
|
Stack wst, rst;
|
||||||
} Uxn;
|
} Uxn;
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ typedef struct Uxn {
|
||||||
extern Uint8 emu_dei(Uxn *u, Uint8 addr);
|
extern Uint8 emu_dei(Uxn *u, Uint8 addr);
|
||||||
extern void emu_deo(Uxn *u, Uint8 addr);
|
extern void emu_deo(Uxn *u, Uint8 addr);
|
||||||
extern int emu_halt(Uxn *u, Uint8 instr, Uint8 err, Uint16 addr);
|
extern int emu_halt(Uxn *u, Uint8 instr, Uint8 err, Uint16 addr);
|
||||||
|
extern Uint8 dei_masks[0x100], deo_masks[0x100];
|
||||||
extern Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
|
extern Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
|
||||||
|
|
||||||
/* built-ins */
|
/* built-ins */
|
||||||
|
|
20
src/uxn11.c
20
src/uxn11.c
|
@ -38,8 +38,6 @@ static Window window;
|
||||||
#define SCALE 1
|
#define SCALE 1
|
||||||
#define CONINBUFSIZE 256
|
#define CONINBUFSIZE 256
|
||||||
|
|
||||||
Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
clamp(int val, int min, int max)
|
clamp(int val, int min, int max)
|
||||||
{
|
{
|
||||||
|
@ -261,17 +259,17 @@ main(int argc, char **argv)
|
||||||
if(i == argc)
|
if(i == argc)
|
||||||
return system_error("usage", "uxn11 [-v] file.rom [args...]");
|
return system_error("usage", "uxn11 [-v] file.rom [args...]");
|
||||||
/* Connect Varvara */
|
/* Connect Varvara */
|
||||||
system_connect(&u, 0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
|
system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
|
||||||
system_connect(&u, 0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
|
system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
|
||||||
system_connect(&u, 0x2, SCREEN_VERSION, SCREEN_DEIMASK, SCREEN_DEOMASK);
|
system_connect(0x2, SCREEN_VERSION, SCREEN_DEIMASK, SCREEN_DEOMASK);
|
||||||
system_connect(&u, 0x8, CONTROL_VERSION, CONTROL_DEIMASK, CONTROL_DEOMASK);
|
system_connect(0x8, CONTROL_VERSION, CONTROL_DEIMASK, CONTROL_DEOMASK);
|
||||||
system_connect(&u, 0x9, MOUSE_VERSION, MOUSE_DEIMASK, MOUSE_DEOMASK);
|
system_connect(0x9, MOUSE_VERSION, MOUSE_DEIMASK, MOUSE_DEOMASK);
|
||||||
system_connect(&u, 0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
|
system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
|
||||||
system_connect(&u, 0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
|
system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
|
||||||
system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
|
system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
|
||||||
/* Read flags */
|
/* Read flags */
|
||||||
if(argv[i][0] == '-' && argv[i][1] == 'v')
|
if(argv[i][0] == '-' && argv[i][1] == 'v')
|
||||||
return system_version(&u, "Uxn11 - Graphical Varvara Emulator", "17 Aug 2023");
|
return system_version("Uxn11 - Graphical Varvara Emulator", "17 Aug 2023");
|
||||||
if(!emu_init())
|
if(!emu_init())
|
||||||
return system_error("Init", "Failed to initialize varvara.");
|
return system_error("Init", "Failed to initialize varvara.");
|
||||||
if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))
|
if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))
|
||||||
|
|
16
src/uxncli.c
16
src/uxncli.c
|
@ -6,7 +6,6 @@
|
||||||
#include "devices/console.h"
|
#include "devices/console.h"
|
||||||
#include "devices/file.h"
|
#include "devices/file.h"
|
||||||
#include "devices/datetime.h"
|
#include "devices/datetime.h"
|
||||||
#include "devices/link.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2021-2023 Devine Lu Linvega, Andrew Alderwick
|
Copyright (c) 2021-2023 Devine Lu Linvega, Andrew Alderwick
|
||||||
|
@ -19,8 +18,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
WITH REGARD TO THIS SOFTWARE.
|
WITH REGARD TO THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Uint16 dev_vers[0x10], dei_mask[0x10], deo_mask[0x10];
|
|
||||||
|
|
||||||
Uint8
|
Uint8
|
||||||
emu_dei(Uxn *u, Uint8 addr)
|
emu_dei(Uxn *u, Uint8 addr)
|
||||||
{
|
{
|
||||||
|
@ -40,7 +37,6 @@ emu_deo(Uxn *u, Uint8 addr)
|
||||||
case 0x10: console_deo(&u->dev[d], p); break;
|
case 0x10: console_deo(&u->dev[d], p); break;
|
||||||
case 0xa0: file_deo(0, u->ram, &u->dev[d], p); break;
|
case 0xa0: file_deo(0, u->ram, &u->dev[d], p); break;
|
||||||
case 0xb0: file_deo(1, u->ram, &u->dev[d], p); break;
|
case 0xb0: file_deo(1, u->ram, &u->dev[d], p); break;
|
||||||
case 0xf0: link_deo(u, &u->dev[d], p); break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,14 +65,14 @@ main(int argc, char **argv)
|
||||||
if(i == argc)
|
if(i == argc)
|
||||||
return system_error("usage", "uxncli [-v] file.rom [args..]");
|
return system_error("usage", "uxncli [-v] file.rom [args..]");
|
||||||
/* Connect Varvara */
|
/* Connect Varvara */
|
||||||
system_connect(&u, 0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
|
system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
|
||||||
system_connect(&u, 0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
|
system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
|
||||||
system_connect(&u, 0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
|
system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
|
||||||
system_connect(&u, 0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
|
system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
|
||||||
system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
|
system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
|
||||||
/* Read flags */
|
/* Read flags */
|
||||||
if(argv[i][0] == '-' && argv[i][1] == 'v')
|
if(argv[i][0] == '-' && argv[i][1] == 'v')
|
||||||
return system_version(&u, "Uxncli - Console Varvara Emulator", "19 Aug 2023");
|
return system_version("Uxncli - Console Varvara Emulator", "19 Aug 2023");
|
||||||
if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))
|
if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))
|
||||||
return system_error("Init", "Failed to initialize uxn.");
|
return system_error("Init", "Failed to initialize uxn.");
|
||||||
/* Game Loop */
|
/* Game Loop */
|
||||||
|
|
Loading…
Reference in New Issue