From 6571e1153cd1cf27e1c7aecdc98faabc8bb9281b Mon Sep 17 00:00:00 2001 From: tiseno100 <58827426+tiseno100@users.noreply.github.com> Date: Thu, 26 Mar 2020 18:29:20 +0200 Subject: [PATCH 1/3] Added initial Apollo Pro emulation - Added the Apollo Pro Northbridge - Added a PC Partner board (APRO + 586B Southbridge) **COMPATIBLE WITH VIA C3!** --- src/chipset/chipset.h | 1 + src/chipset/via_apro.c | 345 ++++++++++++++++++++++++++++++++++++ src/machine/m_at_socket8.c | 25 ++- src/machine/machine.h | 2 + src/machine/machine_table.c | 7 +- src/win/Makefile.mingw | 2 +- src/win/Makefile_ndr.mingw | 2 +- 7 files changed, 366 insertions(+), 18 deletions(-) create mode 100644 src/chipset/via_apro.c diff --git a/src/chipset/chipset.h b/src/chipset/chipset.h index 057df0cdb..da4942c99 100644 --- a/src/chipset/chipset.h +++ b/src/chipset/chipset.h @@ -66,6 +66,7 @@ extern const device_t sis_85c50x_device; /* VIA */ extern const device_t via_mvp3_device; +extern const device_t via_apro_device; /* VLSI */ extern const device_t vlsi_scamp_device; diff --git a/src/chipset/via_apro.c b/src/chipset/via_apro.c new file mode 100644 index 000000000..573f18df8 --- /dev/null +++ b/src/chipset/via_apro.c @@ -0,0 +1,345 @@ +/* + + 86Box A hypervisor and IBM PC system emulator that specializes in + running old operating systems and software designed for IBM + PC systems and compatibles from 1981 through fairly recent + system designs based on the PCI bus. + + + +VIA Apollo Pro North Bridge emulation + +VT82C691 used in the PC Partner APAS3 board +based on the model of VIA MVP3 by mooch & Sarah + +Authors: Sarah Walker, +Copyright(C) 2020 Tiseno100 +Copyright(C) 2020 Melissa Goad +Copyright(C) 2020 Miran Grca + + +Note: Due to 99.9% similarities with the VP3, MVP3 but also other later Apollo chipsets. We probably should create a common Apollo tree +just like the Intel 4x0 series. + +*/ + +#include +#include +#include +#include +#include +#include "86box.h" +#include "mem.h" +#include "86box_io.h" +#include "rom.h" +#include "pci.h" +#include "device.h" +#include "keyboard.h" +#include "chipset.h" + +typedef struct via_apro_t +{ + uint8_t pci_conf[2][256]; +} via_apro_t; + +static void +apro_map(uint32_t addr, uint32_t size, int state) +{ + switch (state & 3) { + case 0: + mem_set_mem_state(addr, size, MEM_READ_EXTANY | MEM_WRITE_EXTANY); + break; + case 1: + mem_set_mem_state(addr, size, MEM_READ_EXTANY | MEM_WRITE_INTERNAL); + break; + case 2: + mem_set_mem_state(addr, size, MEM_READ_INTERNAL | MEM_WRITE_EXTANY); + break; + case 3: + mem_set_mem_state(addr, size, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); + break; + } + + flushmmucache_nopc(); +} + +static void +via_apro_pci_regs(via_apro_t *dev) +{ + memset(dev, 0, sizeof(via_apro_t)); + +// Host Bridge registers + + dev->pci_conf[0][0x00] = 0x06; // VIA + dev->pci_conf[0][0x01] = 0x11; + + dev->pci_conf[0][0x02] = 0x91; // VT82C691 + dev->pci_conf[0][0x03] = 0x06; + + dev->pci_conf[0][0x04] = 6; // Command + dev->pci_conf[0][0x05] = 0; + +// These(06h-0fh) probably aren't needed but as they're referenced by the MVP3 chipset code i added them too + + dev->pci_conf[0][0x06] = 0; // Status + dev->pci_conf[0][0x07] = 0; + + dev->pci_conf[0][0x09] = 0; // Program Interface + + dev->pci_conf[0][0x0a] = 0; // Sub Class Code + + dev->pci_conf[0][0x0b] = 0; // Base Class Code + + dev->pci_conf[0][0x0c] = 0; // reserved + + dev->pci_conf[0][0x0d] = 0; // Latency Timer + + dev->pci_conf[0][0x0e] = 0; // Header Type + + dev->pci_conf[0][0x0f] = 0; // Built-in Self test + + dev->pci_conf[0][0x10] = 0x08; // Graphics Aperature Base + + dev->pci_conf[0][0x34] = 0xa0; // Capability Pointer + + dev->pci_conf[0][0x56] = 1; // Bank 6 Ending + dev->pci_conf[0][0x57] = 1; // Bank 7 Ending + dev->pci_conf[0][0x5a] = 1; // Bank 0 Ending + dev->pci_conf[0][0x5b] = 1; // Bank 1 Ending + dev->pci_conf[0][0x5c] = 1; // Bank 2 Ending + dev->pci_conf[0][0x5d] = 1; // Bank 3 Ending + dev->pci_conf[0][0x5e] = 1; // Bank 4 Ending + dev->pci_conf[0][0x5f] = 1; // Bank 5 Ending + + dev->pci_conf[0][0x64] = 0xec; // DRAM Timing for Banks 0,1 + dev->pci_conf[0][0x65] = 0xec; // DRAM Timing for Banks 2,3 + dev->pci_conf[0][0x66] = 0xec; // DRAM Timing for Banks 4,5 + dev->pci_conf[0][0x67] = 0x01; // DRAM Timing for Banks 6,7 + + dev->pci_conf[0][0x6b] = 1; // DRAM Abritration control + + dev->pci_conf[0][0xa4] = 0x03; // AGP Status + dev->pci_conf[0][0xa5] = 0x02; + dev->pci_conf[0][0xa6] = 0; + dev->pci_conf[0][0xa7] = 0x07; + +// PCI-to-PCI + + dev->pci_conf[1][0x00] = 0x06; // VIA + dev->pci_conf[1][0x01] = 0x11; + + dev->pci_conf[1][0x02] = 0x91; // VT82C691 + dev->pci_conf[1][0x03] = 0x06; + + dev->pci_conf[1][0x04] = 7; // Command + dev->pci_conf[1][0x05] = 0; + + dev->pci_conf[1][0x06] = 0x20; // Status + dev->pci_conf[1][0x07] = 0x02; + + dev->pci_conf[1][0x09] = 0; // Program Interface + + dev->pci_conf[1][0x0A] = 4; // Sub Class Code + + dev->pci_conf[1][0x0B] = 6; // Base Class Code + + dev->pci_conf[1][0x0C] = 0; // reserved + + dev->pci_conf[1][0x0D] = 0; // Latency Timer + + dev->pci_conf[1][0x0E] = 1; // Header Type + + dev->pci_conf[1][0x0F] = 0; // Built-in Self test + + dev->pci_conf[1][0x1c] = 0xf0; // I/O Base + + dev->pci_conf[1][0x20] = 0xf0; // Memory Base + dev->pci_conf[1][0x21] = 0xff; + dev->pci_conf[1][0x24] = 0xf0; + dev->pci_conf[1][0x25] = 0xff; + +} + +static void +host_bridge_write(int func, int addr, uint8_t val, void *priv) +{ + +via_apro_t *dev = (via_apro_t *) priv; + + // Read-Only registers. Exact same as MVP3 + if ((addr < 4) || ((addr >= 5) && (addr < 7)) || ((addr >= 8) && (addr < 0xd)) || ((addr >= 0xe) && (addr < 0x12)) || + ((addr >= 0x14) && (addr < 0x50)) || ((addr >= 0x79) && (addr < 0x7e)) || ((addr >= 0x85) && (addr < 0x88)) || + ((addr >= 0x8c) && (addr < 0xa8)) || ((addr >= 0xad) && (addr < 0xfd))) + return; + + switch(addr){ + case 0x04: // Command + dev->pci_conf[0][0x04] = (dev->pci_conf[0][0x04] & ~0x40) | (val & 0x40); + + case 0x07: // Status + dev->pci_conf[0][0x07] &= ~(val & 0xb0); + break; + + case 0x12: //Graphics Aperature Base + dev->pci_conf[0][0x12] = (val & 0xf0); + break; + case 0x13: + dev->pci_conf[0][0x13] = val; + break; + + case 0x61: // Shadow RAM control 1 + if ((dev->pci_conf[0][0x61] ^ val) & 0x03) + apro_map(0xc0000, 0x04000, val & 0x03); + if ((dev->pci_conf[0][0x61] ^ val) & 0x0c) + apro_map(0xc4000, 0x04000, (val & 0x0c) >> 2); + if ((dev->pci_conf[0][0x61] ^ val) & 0x30) + apro_map(0xc8000, 0x04000, (val & 0x30) >> 4); + if ((dev->pci_conf[0][0x61] ^ val) & 0xc0) + apro_map(0xcc000, 0x04000, (val & 0xc0) >> 6); + dev->pci_conf[0][0x61] = val; + return; + + case 0x62: // Shadow RAM Control 2 + if ((dev->pci_conf[0][0x62] ^ val) & 0x03) + apro_map(0xd0000, 0x04000, val & 0x03); + if ((dev->pci_conf[0][0x62] ^ val) & 0x0c) + apro_map(0xd4000, 0x04000, (val & 0x0c) >> 2); + if ((dev->pci_conf[0][0x62] ^ val) & 0x30) + apro_map(0xd8000, 0x04000, (val & 0x30) >> 4); + if ((dev->pci_conf[0][0x62] ^ val) & 0xc0) + apro_map(0xdc000, 0x04000, (val & 0xc0) >> 6); + dev->pci_conf[0][0x62] = val; + return; + + case 0x63: // Shadow RAM Control 3 + if ((dev->pci_conf[0][0x63] ^ val) & 0x30) { + apro_map(0xf0000, 0x10000, (val & 0x30) >> 4); + shadowbios = (((val & 0x30) >> 4) & 0x02); + } + if ((dev->pci_conf[0][0x63] ^ val) & 0xc0) + apro_map(0xe0000, 0x10000, (val & 0xc0) >> 6); + dev->pci_conf[0][0x63] = val; + return; + + //In case we throw somewhere + default: + dev->pci_conf[0][addr] = val; + break; + } +} + +static void +pci_to_pci_bridge_write(int func, int addr, uint8_t val, void *priv) +{ + via_apro_t *dev = (via_apro_t *) priv; + + if (func != 1) + return; + + //As with MVP3. Same deal + if ((addr < 4) || ((addr >= 5) && (addr < 7)) || + ((addr >= 8) && (addr < 0x18)) || (addr == 0x1b) || + ((addr >= 0x1e) && (addr < 0x20)) || ((addr >= 0x28) && (addr < 0x3e)) || + (addr >= 0x43)) + return; + + switch(addr) { + case 0x04: + dev->pci_conf[1][0x04] = (dev->pci_conf[1][0x04] & ~0x47) | (val & 0x47); + break; + case 0x07: + dev->pci_conf[1][0x07] &= ~(val & 0x30); + break; + + case 0x20: // Memory Base + dev->pci_conf[1][0x20] = val & 0xf0; + break; + + case 0x22: // Memory Limit + dev->pci_conf[1][0x22] = val & 0xf0; + break; + + case 0x24: // Prefetchable Memory base + dev->pci_conf[1][0x24] = val & 0xf0; + break; + + case 0x26: // Prefetchable Memory limit + dev->pci_conf[1][0x26] = val & 0xf0; + break; + + default: + dev->pci_conf[1][addr] = val; + break; + } +} + +static uint8_t +via_apro_read(int func, int addr, void *priv) +{ + via_apro_t *dev = (via_apro_t *) priv; + uint8_t ret = 0xff; + + switch(func) { + case 0: + ret = dev->pci_conf[0][addr]; + break; + case 1: + ret = dev->pci_conf[1][addr]; + break; + } + + return ret; +} + +static void +via_apro_write(int func, int addr, uint8_t val, void *priv) +{ + switch(func) { + case 0: + host_bridge_write(func, addr, val, priv); + break; + + case 1: + pci_to_pci_bridge_write(func, addr, val, priv); + break; + } +} + +static void +via_apro_reset(void *priv) +{ + via_apro_write(0, 0x63, via_apro_read(0, 0x63, priv) & 0xcf, priv); +} + +static void * +via_apro_init(const device_t *info) +{ + via_apro_t *dev = (via_apro_t *) malloc(sizeof(via_apro_t)); + + pci_add_card(PCI_ADD_NORTHBRIDGE, via_apro_read, via_apro_write, dev); + + via_apro_pci_regs(dev); + + return dev; +} + +static void +via_apro_close(void *priv) +{ + via_apro_t *dev = (via_apro_t *) priv; + + free(dev); +} + +const device_t via_apro_device = { + "VIA Apollo Pro", + DEVICE_PCI, + 0, + via_apro_init, + via_apro_close, + via_apro_reset, + NULL, + NULL, + NULL, + NULL +}; \ No newline at end of file diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c index 32a4ec981..5dc9ae6cd 100644 --- a/src/machine/m_at_socket8.c +++ b/src/machine/m_at_socket8.c @@ -30,6 +30,7 @@ #include "hdc_ide.h" #include "keyboard.h" #include "intel_flash.h" +#include "via_vt82c586b.h" #include "intel_sio.h" #include "piix.h" #include "sio.h" @@ -237,13 +238,13 @@ machine_at_borapro_init(const machine_t *model) return ret; } -#if defined(DEV_BRANCH) && defined(USE_I686) + int -machine_at_p6bxt_init(const machine_t *model) +machine_at_apas3_init(const machine_t *model) { int ret; - ret = bios_load_linear(L"roms/machines/p6bxt/bxt53s.BIN", + ret = bios_load_linear(L"roms/machines/apas3/V0218SAG.BIN", 0x000c0000, 262144, 0); if (bios_only || !ret) @@ -253,23 +254,21 @@ machine_at_p6bxt_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 3, 2, 1); /* Slot 5: Probably the integrated sound chip. */ + pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); pci_register_slot(0x01, PCI_CARD_NORMAL, 1, 2, 3, 4); - device_add(&i440bx_device); - device_add(&piix4e_device); - device_add(&w83977tf_device); + device_add(&via_apro_device); + device_add(&via_vt82c586b_device); + device_add(&fdc37c669_device); device_add(&keyboard_ps2_pci_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); return ret; } -#endif int machine_at_63a_init(const machine_t *model) @@ -304,4 +303,4 @@ machine_at_63a_init(const machine_t *model) spd_register(SPD_TYPE_SDRAM, 0x3, 256); return ret; -} +} \ No newline at end of file diff --git a/src/machine/machine.h b/src/machine/machine.h index ed4180989..53ca637b3 100644 --- a/src/machine/machine.h +++ b/src/machine/machine.h @@ -300,6 +300,7 @@ extern int machine_at_586t2_init(const machine_t *); extern int machine_at_807ds_init(const machine_t *); extern int machine_at_mvp3_init(const machine_t *); +extern int machine_at_apas3_init(const machine_t *); #ifdef EMU_DEVICE_H extern const device_t *at_pb640_get_device(void); @@ -316,6 +317,7 @@ extern int machine_at_6abx3_init(const machine_t *); extern int machine_at_p2bls_init(const machine_t *); extern int machine_at_borapro_init(const machine_t *); extern int machine_at_63a_init(const machine_t *); +extern int machine_at_vim863s_init(const machine_t *); /* m_at_t3100e.c */ extern int machine_at_t3100e_init(const machine_t *); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 9765f334c..2326decee 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -244,14 +244,15 @@ const machine_t machines[] = { { "[Slot 1 BX] ASUS P2B-LS", "p2bls", {{"VIA", cpus_Cyrix3}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p2bls_init, NULL }, #endif #if defined(DEV_BRANCH) && defined(USE_I686) - { "[Slot 1 ZX] Packard Bell Bora Pro", "borapro", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 255, machine_at_borapro_init, NULL }, + { "[Slot 1 ZX] Packard Bell Bora Pro", "borapro", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 255, machine_at_borapro_init, NULL }, - { "[Socket 370 BX] ECS P6BXT-A+", "p6bxt", {{"Intel", cpus_Celeron}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 768, 8, 255, machine_at_p6bxt_init, NULL }, { "[Socket 370 ZX] Soltek SL-63A1", "63a", {{"Intel", cpus_Celeron}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 255, machine_at_63a_init, NULL }, + { "[Socket 370 APRO] PC Partner APAS3", "apas3", {{"Intel", cpus_Celeron}, {"VIA", cpus_Cyrix3}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_apas3_init, NULL }, #else - { "[Slot 1 ZX] Packard Bell Bora Pro", "borapro", {{"VIA", cpus_Cyrix3}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 255, machine_at_borapro_init, NULL }, + { "[Slot 1 ZX] Packard Bell Bora Pro", "borapro", {{"VIA", cpus_Cyrix3}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 255, machine_at_borapro_init, NULL }, { "[Socket 370 ZX] Soltek SL-63A1", "63a", {{"VIA", cpus_Cyrix3}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 255, machine_at_63a_init, NULL }, + { "[Socket 370 APRO] PC Partner APAS3", "apas3", {{"VIA", cpus_Cyrix3}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_apas3_init, NULL }, #endif { NULL, NULL, {{"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}}, 0, 0, 0, 0, 0, NULL, NULL } diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index 50bcdafdb..95a55517a 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -575,7 +575,7 @@ CPUOBJ := cpu.o cpu_table.o \ CHIPSETOBJ := acc2168.o acer_m3a.o cs8230.o ali1429.o headland.o \ intel_4x0.o neat.o opti495.o scamp.o scat.o \ sis_85c471.o sis_85c496.o \ - via_mvp3.o wd76c10.o + via_mvp3.o via_apro.o wd76c10.o MCHOBJ := machine.o machine_table.o \ m_xt.o m_xt_compaq.o \ diff --git a/src/win/Makefile_ndr.mingw b/src/win/Makefile_ndr.mingw index 9ffecdc3c..b2f6d81e8 100644 --- a/src/win/Makefile_ndr.mingw +++ b/src/win/Makefile_ndr.mingw @@ -580,7 +580,7 @@ CPUOBJ := cpu.o cpu_table.o \ CHIPSETOBJ := acc2168.o acer_m3a.o cs8230.o ali1429.o headland.o \ intel_4x0.o neat.o opti495.o scamp.o scat.o \ sis_85c471.o sis_85c496.o \ - via_mvp3.o wd76c10.o + via_mvp3.o via_apro.o wd76c10.o MCHOBJ := machine.o machine_table.o \ m_xt.o m_xt_compaq.o \ From b58150b91b5668b6fe96e920edf985e376d82192 Mon Sep 17 00:00:00 2001 From: tiseno100 <58827426+tiseno100@users.noreply.github.com> Date: Thu, 26 Mar 2020 18:30:45 +0200 Subject: [PATCH 2/3] Removed the P6BXT from machine.h --- src/machine/machine.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/machine/machine.h b/src/machine/machine.h index 53ca637b3..792882aa8 100644 --- a/src/machine/machine.h +++ b/src/machine/machine.h @@ -310,7 +310,6 @@ extern const device_t *at_pb640_get_device(void); #if defined(DEV_BRANCH) && defined(USE_I686) extern int machine_at_i440fx_init(const machine_t *); extern int machine_at_s1668_init(const machine_t *); -extern int machine_at_p6bxt_init(const machine_t *); /*BIOS doesn't work correctly with VIA C3*/ #endif extern int machine_at_6abx3_init(const machine_t *); From 74b9f869823dfab0711698ab11c730722efb51c2 Mon Sep 17 00:00:00 2001 From: tiseno100 <58827426+tiseno100@users.noreply.github.com> Date: Thu, 26 Mar 2020 18:38:13 +0200 Subject: [PATCH 3/3] removed few useless lines off machine.h --- src/machine/machine.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/machine.h b/src/machine/machine.h index 792882aa8..b59353903 100644 --- a/src/machine/machine.h +++ b/src/machine/machine.h @@ -300,7 +300,7 @@ extern int machine_at_586t2_init(const machine_t *); extern int machine_at_807ds_init(const machine_t *); extern int machine_at_mvp3_init(const machine_t *); -extern int machine_at_apas3_init(const machine_t *); + #ifdef EMU_DEVICE_H extern const device_t *at_pb640_get_device(void); @@ -316,7 +316,7 @@ extern int machine_at_6abx3_init(const machine_t *); extern int machine_at_p2bls_init(const machine_t *); extern int machine_at_borapro_init(const machine_t *); extern int machine_at_63a_init(const machine_t *); -extern int machine_at_vim863s_init(const machine_t *); +extern int machine_at_apas3_init(const machine_t *); /* m_at_t3100e.c */ extern int machine_at_t3100e_init(const machine_t *);