diff --git a/src/machine/machine.c b/src/machine/machine.c
index 208f328aa..2b69c25ee 100644
--- a/src/machine/machine.c
+++ b/src/machine/machine.c
@@ -8,7 +8,7 @@
*
* Handling of the emulated machines.
*
- * Version: @(#)machine.c 1.0.18 2017/10/07
+ * Version: @(#)machine.c 1.0.19 2017/10/12
*
* Authors: Sarah Walker,
* Miran Grca,
@@ -140,7 +140,11 @@ machine_init(void)
{
pclog("Initializing as \"%s\"\n", machine_getname());
- AMSTRAD = AT = PCI = TANDY = 0;
+ /* Set up the architecture flags. */
+ AT = IS_ARCH(machine, MACHINE_AT);
+ PCI = IS_ARCH(machine, MACHINE_PCI);
+ AMSTRAD = IS_ARCH(machine, MACHINE_AMSTRAD);
+ TANDY = 0;
/* Load the machine's ROM BIOS. */
rom_load_bios(romset);
diff --git a/src/machine/machine.h b/src/machine/machine.h
index 3e706a7e9..590d13a07 100644
--- a/src/machine/machine.h
+++ b/src/machine/machine.h
@@ -8,7 +8,7 @@
*
* Handling of the emulated machines.
*
- * Version: @(#)machine.h 1.0.6 2017/10/07
+ * Version: @(#)machine.h 1.0.7 2017/10/12
*
* Authors: Sarah Walker,
* Miran Grca,
@@ -41,6 +41,8 @@
#define MACHINE_OLIM24 0x080000
#define MACHINE_RM 0x100000
+#define IS_ARCH(m, a) (machines[(m)].flags & (a)) ? 1 : 0;
+
typedef struct _machine_ {
char name[64];
diff --git a/src/machine/machine_amstrad.c b/src/machine/machine_amstrad.c
index 610807afe..d2eb674cf 100644
--- a/src/machine/machine_amstrad.c
+++ b/src/machine/machine_amstrad.c
@@ -138,11 +138,8 @@ static void amstrad_init(void)
void
machine_amstrad_init(machine_t *model)
{
- AMSTRAD = 1;
-
machine_common_init(model);
- mem_add_bios();
amstrad_init();
keyboard_amstrad_init();
diff --git a/src/machine/machine_at.c b/src/machine/machine_at.c
index e80d1afab..0c6faab0c 100644
--- a/src/machine/machine_at.c
+++ b/src/machine/machine_at.c
@@ -21,8 +21,6 @@
void
machine_at_init(machine_t *model)
{
- AT = 1;
-
machine_common_init(model);
pit_set_out_func(&pit, 1, pit_refresh_timer_at);
diff --git a/src/machine/machine_europc.c b/src/machine/machine_europc.c
index 182662a91..9328293a3 100644
--- a/src/machine/machine_europc.c
+++ b/src/machine/machine_europc.c
@@ -135,7 +135,6 @@ machine_europc_init(machine_t *model)
{
machine_common_init(model);
- mem_add_bios();
lpt3_init(0x3bc);
jim_init();
keyboard_xt_init();
diff --git a/src/machine/machine_olivetti_m24.c b/src/machine/machine_olivetti_m24.c
index 5609d4514..36ca77f1f 100644
--- a/src/machine/machine_olivetti_m24.c
+++ b/src/machine/machine_olivetti_m24.c
@@ -40,7 +40,6 @@ machine_olim24_init(machine_t *model)
{
machine_common_init(model);
- mem_add_bios();
keyboard_olim24_init();
/* FIXME: make sure this is correct?? */
diff --git a/src/machine/machine_pcjr.c b/src/machine/machine_pcjr.c
index 0114a164d..aace2715e 100644
--- a/src/machine/machine_pcjr.c
+++ b/src/machine/machine_pcjr.c
@@ -20,7 +20,6 @@
void
machine_pcjr_init(machine_t *model)
{
- mem_add_bios();
fdc_add_pcjr();
pic_init();
pit_init();
diff --git a/src/machine/machine_ps1.c b/src/machine/machine_ps1.c
index b1aa7b056..3e2be3012 100644
--- a/src/machine/machine_ps1.c
+++ b/src/machine/machine_ps1.c
@@ -338,14 +338,8 @@ static void ps1mb_m2133_init(void)
static void
machine_ps1_common_init(machine_t *model)
{
- AT = 1;
-
machine_common_init(model);
-#if 0
- /* Already done in machine.c */
- mem_add_bios();
-#endif
pit_set_out_func(&pit, 1, pit_refresh_timer_at);
dma16_init();
if (romset != ROM_IBMPS1_2011)
diff --git a/src/machine/machine_ps2_isa.c b/src/machine/machine_ps2_isa.c
index c5e762b7a..c3b71007a 100644
--- a/src/machine/machine_ps2_isa.c
+++ b/src/machine/machine_ps2_isa.c
@@ -156,14 +156,8 @@ static void ps2board_init(void)
void
machine_ps2_m30_286_init(machine_t *model)
{
- AT = 1;
-
machine_common_init(model);
-#if 0
- /* Already done in machine.c */
-#endif
- mem_add_bios();
pit_set_out_func(&pit, 1, pit_refresh_timer_at);
dma16_init();
keyboard_at_init();
diff --git a/src/machine/machine_ps2_mca.c b/src/machine/machine_ps2_mca.c
index b68fdfd65..c4ddc4ec9 100644
--- a/src/machine/machine_ps2_mca.c
+++ b/src/machine/machine_ps2_mca.c
@@ -805,14 +805,8 @@ static void ps2_mca_board_model_80_type2_init()
static void
machine_ps2_common_init(machine_t *model)
{
- AT = 1;
-
machine_common_init(model);
-#if 1
- /* Already done in machine.c. */
- mem_add_bios();
-#endif
dma16_init();
ps2_dma_init();
keyboard_at_init();
diff --git a/src/machine/machine_tandy.c b/src/machine/machine_tandy.c
index d583b4827..0698ad6f9 100644
--- a/src/machine/machine_tandy.c
+++ b/src/machine/machine_tandy.c
@@ -19,11 +19,10 @@
void
machine_tandy1k_init(machine_t *model)
{
- TANDY = 1;
+ TANDY = 1;
machine_common_init(model);
- mem_add_bios();
keyboard_tandy_init();
if (romset == ROM_TANDY)
device_add(&sn76489_device);
@@ -42,7 +41,6 @@ machine_tandy1ksl2_init(machine_t *model)
{
machine_common_init(model);
- mem_add_bios();
keyboard_tandy_init();
device_add(&pssj_device);
nmi_init();
diff --git a/src/machine/machine_xt.c b/src/machine/machine_xt.c
index b148016f9..183482fd5 100644
--- a/src/machine/machine_xt.c
+++ b/src/machine/machine_xt.c
@@ -18,8 +18,6 @@ machine_xt_init(machine_t *model)
{
machine_common_init(model);
- mem_add_bios();
-
pit_set_out_func(&pit, 1, pit_refresh_timer_xt);
keyboard_xt_init();