From c0e72ea08dfb0ba8a93bd9e09d58de7b361ef31f Mon Sep 17 00:00:00 2001 From: Nigel Barnes Date: Mon, 7 Sep 2015 09:46:21 +0100 Subject: [PATCH] bbc: clones, floppy formats, softlists, and cleanups. - Added clone bbcb1770, bbcb now 8271 only. - Added clone pro128s, Olivetti Prodest PC 128S. - Added clones Acorn Business Computers and Cambridge Workstation. - Added clone reutapm, Reuters APM board. - Improved floppy formats, added dsd and double density formats for ADFS. - Added speech PHROMs, not yet hooked up correctly. - Added softlists bbcb_de_cass, bbcb_us_flop and bbcmc_flop. - Added S11 links (dipswitch) to specify Econet ID. - Address map cleanups. --- hash/bbcb_cass.xml | 151 +----- hash/bbcb_de_cass.xml | 166 +++++++ hash/bbcb_us_flop.xml | 25 + hash/bbcmc_flop.xml | 25 + hash/pro128_cart.xml | 55 +++ src/lib/formats/bbc_dsk.c | 218 ++++++++- src/lib/formats/bbc_dsk.h | 62 ++- src/mame/mess.lst | 12 +- src/mess/drivers/bbc.c | 941 ++++++++++++++++++++++++++------------ src/mess/includes/bbc.h | 56 +-- src/mess/machine/bbc.c | 710 +++++++--------------------- src/mess/video/bbc.c | 36 +- 12 files changed, 1370 insertions(+), 1087 deletions(-) create mode 100644 hash/bbcb_de_cass.xml create mode 100644 hash/bbcb_us_flop.xml create mode 100644 hash/bbcmc_flop.xml create mode 100644 hash/pro128_cart.xml diff --git a/hash/bbcb_cass.xml b/hash/bbcb_cass.xml index ce9acc3d4f5..74f030d4883 100644 --- a/hash/bbcb_cass.xml +++ b/hash/bbcb_cass.xml @@ -3324,13 +3324,13 @@ Visions - - + + - - + + @@ -5710,17 +5710,6 @@ - - Hopper (Ger) - 1983 - Acornsoft - - - - - - - Hopper v2.1 1983 @@ -7430,17 +7419,6 @@ - - Meteors (Ger) - 1982 - Acornsoft - - - - - - - Meteors (The Acornsoft Hits Vol.2) 1987 @@ -7745,17 +7723,6 @@ - - Monsters (Ger) - 1982 - Acornsoft - - - - - - - Monsters (Play It Again Sam 11) 1989 @@ -8889,17 +8856,6 @@ - - Planetoid (Ger) - 1982 - Acornsoft - - - - - - - Planetoid (The Acornsoft Hits Vol.1) 1987 @@ -9828,17 +9784,6 @@ - - Rocket Raid (Ger) - 1982 - Acornsoft - - - - - - - Rocket Raid (The Acornsoft Hits Vol.1) 1987 @@ -10721,17 +10666,6 @@ - - Snapper (Ger) - 1982 - Acornsoft - - - - - - - Snapper (Play It Again Sam 7) 1988 @@ -11902,17 +11836,6 @@ - - Super Invaders (Ger) - 1982 - Acornsoft - - - - - - - Super Invaders 1982 @@ -13494,17 +13417,6 @@ - - Welcome (Ger) - 1981 - BBC Soft - - - - - - - Welcome 1981 @@ -14099,17 +14011,6 @@ - - Desk Diary (Ger) - 198? - Acornsoft - - - - - - - Desk Diary 198? @@ -14753,17 +14654,6 @@ - - Number Balance (Ger) - 198? - Acornsoft/ESM - - - - - - - Number Balance 198? @@ -14852,17 +14742,6 @@ - - Sentence Sequencing (Ger) - 198? - Acornsoft - - - - - - - Sentence Sequencing 198? @@ -14967,17 +14846,6 @@ - - Tree Of Knowledge (Ger) - 198? - Acornsoft - - - - - - - Tree Of Knowledge 198? @@ -15077,17 +14945,6 @@ - - Jars (Ger) - 198? - Acornsoft - - - - - - - Spooky Manor 198? diff --git a/hash/bbcb_de_cass.xml b/hash/bbcb_de_cass.xml new file mode 100644 index 00000000000..633f28f6166 --- /dev/null +++ b/hash/bbcb_de_cass.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + Hopper (Ger) + 1983 + Acornsoft + + + + + + + + + Meteors (Ger) + 1982 + Acornsoft + + + + + + + + + Monsters (Ger) + 1982 + Acornsoft + + + + + + + + + Planetoid (Ger) + 1982 + Acornsoft + + + + + + + + + Rocket Raid (Ger) + 1982 + Acornsoft + + + + + + + + + Snapper (Ger) + 1982 + Acornsoft + + + + + + + + + Super Invaders (Ger) + 1982 + Acornsoft + + + + + + + + + Welcome (Ger) + 1981 + BBC Soft + + + + + + + + + + + Desk Diary (Ger) + 198? + Acornsoft + + + + + + + + + + + Number Balance (Ger) + 198? + Acornsoft/ESM + + + + + + + + + Sentence Sequencing (Ger) + 198? + Acornsoft + + + + + + + + + Tree Of Knowledge (Ger) + 198? + Acornsoft + + + + + + + + + Jars (Ger) + 198? + Acornsoft + + + + + + + + diff --git a/hash/bbcb_us_flop.xml b/hash/bbcb_us_flop.xml new file mode 100644 index 00000000000..9a9f2499922 --- /dev/null +++ b/hash/bbcb_us_flop.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + Introductory and Utilities Disk + 1983 + Acorn + + + + + + + + + diff --git a/hash/bbcmc_flop.xml b/hash/bbcmc_flop.xml new file mode 100644 index 00000000000..f685734bd13 --- /dev/null +++ b/hash/bbcmc_flop.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + BBC Master Compact Welcome Disc + 1986 + Acorn + + + + + + + + + diff --git a/hash/pro128_cart.xml b/hash/pro128_cart.xml new file mode 100644 index 00000000000..9ee19e3ad25 --- /dev/null +++ b/hash/pro128_cart.xml @@ -0,0 +1,55 @@ + + + + + + + Agenda + 1984 + Answare + + + + + + + + + + Colorpaint + 1985 + Thomson + + + + + + + + + + LOGO v1.0 + 1984 + Soli + + + + + + + + + + Scriptor + 1986 + To Tek + + + + + + + + + + diff --git a/src/lib/formats/bbc_dsk.c b/src/lib/formats/bbc_dsk.c index dfa78c0bfd8..53c3652ab51 100644 --- a/src/lib/formats/bbc_dsk.c +++ b/src/lib/formats/bbc_dsk.c @@ -1,53 +1,229 @@ // license:GPL-2.0+ -// copyright-holders:Dirk Best +// copyright-holders:Dirk Best, Nigel Barnes /*************************************************************************** BBC Micro - Disk image format + Disk image formats ***************************************************************************/ #include "bbc_dsk.h" +#include "basicdsk.h" -bbc_format::bbc_format() : wd177x_format(formats) +LEGACY_FLOPPY_OPTIONS_START(bbc) + LEGACY_FLOPPY_OPTION( ssd40, "bbc,img,ssd", "BBC 40t SSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, + HEADS([1]) + TRACKS([40]) + SECTORS([10]) + SECTOR_LENGTH([256]) + FIRST_SECTOR_ID([0])) + LEGACY_FLOPPY_OPTION( ssd80, "bbc,img,ssd", "BBC 80t SSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, + HEADS([1]) + TRACKS([80]) + SECTORS([10]) + SECTOR_LENGTH([256]) + FIRST_SECTOR_ID([0])) + LEGACY_FLOPPY_OPTION( dsd40, "dsd", "BBC 40t DSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, + HEADS([2]) + TRACKS([40]) + SECTORS([10]) + SECTOR_LENGTH([256]) + INTERLEAVE([0]) + FIRST_SECTOR_ID([0])) + LEGACY_FLOPPY_OPTION( dsd80, "dsd", "BBC 80t DSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, + HEADS([2]) + TRACKS([80]) + SECTORS([10]) + SECTOR_LENGTH([256]) + INTERLEAVE([0]) + FIRST_SECTOR_ID([0])) +LEGACY_FLOPPY_OPTIONS_END + +/********************************************************************/ + +bbc_ssd_525_format::bbc_ssd_525_format() : wd177x_format(formats) { } -const char *bbc_format::name() const +const char *bbc_ssd_525_format::name() const { - return "bbc"; + return "ssd"; } -const char *bbc_format::description() const +const char *bbc_ssd_525_format::description() const { - return "BBC Micro disk image"; + return "BBC Micro 5.25\" disk image"; } -const char *bbc_format::extensions() const +const char *bbc_ssd_525_format::extensions() const { - return "bbc,img,ssd,dsd"; + return "bbc,img,ssd"; } -const bbc_format::format bbc_format::formats[] = +int bbc_ssd_525_format::find_size(io_generic *io, UINT32 form_factor) { - { // 100k single sided single density + char cat[8]; + io_generic_read(io, cat, 256, 8); + UINT64 sectors = ((cat[6] & 3) << 8) + cat[7]; // sector count from catalogue + UINT64 size = io_generic_size(io); + for(int i=0; formats[i].form_factor; i++) { + const format &f = formats[i]; + if(form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor) + continue; + + if((size <= (UINT64)compute_track_size(f) * f.track_count * f.head_count) && (sectors == f.track_count * f.sector_count)) + return i; + } + return -1; +} + +const bbc_ssd_525_format::format bbc_ssd_525_format::formats[] = +{ + { // 100k 40 track single sided single density floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, - 4000, 10, 40, 1, 256, {}, 0, {}, 16, 11, 19 + 4000, 10, 40, 1, 256, {}, 0, {}, 40, 10, 10 }, - { // 200k double sided single density - floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, - 4000, 10, 40, 2, 256, {}, 0, {}, 16, 11, 19 - }, - { // 200k single sided double density + { // 200k 80 track single sided single density floppy_image::FF_525, floppy_image::SSQD, floppy_image::FM, - 4000, 10, 80, 1, 256, {}, 0, {}, 16, 11, 19 + 4000, 10, 80, 1, 256, {}, 0, {}, 40, 10, 10 }, - { // 400k double sided double density + { // 200k 40 track double sided single density + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, 0, {}, 40, 10, 10 + }, + { // 400k 80 track double sided single density floppy_image::FF_525, floppy_image::DSQD, floppy_image::FM, - 4000, 10, 80, 2, 256, {}, 0, {}, 16, 11, 19 + 4000, 10, 80, 2, 256, {}, 0, {}, 40, 10, 10 }, {} }; -const floppy_format_type FLOPPY_BBC_FORMAT = &floppy_image_format_creator; + +bbc_dsd_525_format::bbc_dsd_525_format() : wd177x_format(formats) +{ +} + +const char *bbc_dsd_525_format::name() const +{ + return "dsd"; +} + +const char *bbc_dsd_525_format::description() const +{ + return "BBC Micro 5.25\" disk image"; +} + +const char *bbc_dsd_525_format::extensions() const +{ + return "dsd"; +} + +int bbc_dsd_525_format::find_size(io_generic *io, UINT32 form_factor) +{ + char cat[8]; + io_generic_read(io, cat, 256, 8); + UINT64 sectors = ((cat[6] & 3) << 8) + cat[7]; // sector count from catalogue + UINT64 size = io_generic_size(io); + for(int i=0; formats[i].form_factor; i++) { + const format &f = formats[i]; + if(form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor) + continue; + + if((size <= (UINT64)compute_track_size(f) * f.track_count * f.head_count) && (sectors == f.track_count * f.sector_count)) + return i; + } + return -1; +} + +const bbc_dsd_525_format::format bbc_dsd_525_format::formats[] = +{ + { // 200k 40 track double sided single density + floppy_image::FF_525, floppy_image::DSQD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9 }, 40, 10, 10 + }, + { // 400k 80 track double sided single density + floppy_image::FF_525, floppy_image::DSQD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9 }, 40, 10, 10 + }, + {} +}; + + +bbc_adf_525_format::bbc_adf_525_format() : wd177x_format(formats) +{ +} + +const char *bbc_adf_525_format::name() const +{ + return "adf"; +} + +const char *bbc_adf_525_format::description() const +{ + return "BBC Micro 5.25\" ADFS disk image"; +} + +const char *bbc_adf_525_format::extensions() const +{ + return "adf,ads,adm,adl,img"; +} + +const bbc_adf_525_format::format bbc_adf_525_format::formats[] = +{ + { // 160K 40 track single sided double density + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 16, 40, 1, 256, {}, 0, {}, 60, 22, 43 + }, + { // 320K 80 track single sided double density + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 16, 80, 1, 256, {}, 0, {}, 60, 22, 43 + }, + { // 640K 80 track double sided double density + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 16, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, 60, 22, 43 + }, + {} +}; + + +bbc_adf_35_format::bbc_adf_35_format() : wd177x_format(formats) +{ +} + +const char *bbc_adf_35_format::name() const +{ + return "adf"; +} + +const char *bbc_adf_35_format::description() const +{ + return "BBC Micro 3.5\" ADFS disk image"; +} + +const char *bbc_adf_35_format::extensions() const +{ + return "adf,ads,adm,adl,img"; +} + +const bbc_adf_35_format::format bbc_adf_35_format::formats[] = { + { // 160K 3 1/2 inch 40 track single sided double density + floppy_image::FF_35, floppy_image::SSDD, floppy_image::MFM, + 2000, 16, 40, 1, 256, {}, 0, {}, 60, 22, 43 + }, + { // 320K 3 1/2 inch 80 track single sided double density + floppy_image::FF_35, floppy_image::SSQD, floppy_image::MFM, + 2000, 16, 80, 1, 256, {}, 0, {}, 60, 22, 43 + }, + { // 640K 3 1/2 inch 80 track double sided double density + floppy_image::FF_35, floppy_image::DSQD, floppy_image::MFM, + 2000, 16, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, 60, 22, 43 + }, + {} +}; + + +const floppy_format_type FLOPPY_BBC_SSD_525_FORMAT = &floppy_image_format_creator; +const floppy_format_type FLOPPY_BBC_DSD_525_FORMAT = &floppy_image_format_creator; +const floppy_format_type FLOPPY_BBC_ADF_525_FORMAT = &floppy_image_format_creator; +const floppy_format_type FLOPPY_BBC_ADF_35_FORMAT = &floppy_image_format_creator; diff --git a/src/lib/formats/bbc_dsk.h b/src/lib/formats/bbc_dsk.h index e2520781a15..d757c8a90ac 100644 --- a/src/lib/formats/bbc_dsk.h +++ b/src/lib/formats/bbc_dsk.h @@ -1,10 +1,10 @@ // license:GPL-2.0+ -// copyright-holders:Dirk Best +// copyright-holders:Dirk Best, Nigel Barnes /*************************************************************************** BBC Micro - Disk image format + Disk image formats ***************************************************************************/ @@ -13,12 +13,47 @@ #ifndef __BBC_DSK_H__ #define __BBC_DSK_H__ +#include "flopimg.h" #include "wd177x_dsk.h" -class bbc_format : public wd177x_format +/**************************************************************************/ + +LEGACY_FLOPPY_OPTIONS_EXTERN(bbc); + +/**************************************************************************/ + +class bbc_ssd_525_format : public wd177x_format { public: - bbc_format(); + bbc_ssd_525_format(); + + virtual int find_size(io_generic *io, UINT32 form_factor); + virtual const char *name() const; + virtual const char *description() const; + virtual const char *extensions() const; + +private: + static const format formats[]; +}; + +class bbc_dsd_525_format : public wd177x_format +{ +public: + bbc_dsd_525_format(); + + virtual int find_size(io_generic *io, UINT32 form_factor); + virtual const char *name() const; + virtual const char *description() const; + virtual const char *extensions() const; + +private: + static const format formats[]; +}; + +class bbc_adf_525_format : public wd177x_format +{ +public: + bbc_adf_525_format(); virtual const char *name() const; virtual const char *description() const; @@ -28,6 +63,23 @@ private: static const format formats[]; }; -extern const floppy_format_type FLOPPY_BBC_FORMAT; +class bbc_adf_35_format : public wd177x_format +{ +public: + bbc_adf_35_format(); + + virtual const char *name() const; + virtual const char *description() const; + virtual const char *extensions() const; + +private: + static const format formats[]; +}; + + +extern const floppy_format_type FLOPPY_BBC_SSD_525_FORMAT; +extern const floppy_format_type FLOPPY_BBC_DSD_525_FORMAT; +extern const floppy_format_type FLOPPY_BBC_ADF_525_FORMAT; +extern const floppy_format_type FLOPPY_BBC_ADF_35_FORMAT; #endif // __BBC_DSK_H__ diff --git a/src/mame/mess.lst b/src/mame/mess.lst index 051469663ed..cea61196da1 100644 --- a/src/mame/mess.lst +++ b/src/mame/mess.lst @@ -342,12 +342,17 @@ atomeb // 1979 Acorn Atom atombb // 1979 Acorn Atom //prophet2 bbca // 1981 BBC Micro Model A -bbcb // 1981 BBC Micro Model B +bbcb // 1981 BBC Micro Model B w/8271 FDC bbcb_de // 1981 BBC Micro Model B (German) -bbcb_us // 1981 BBC Micro Model B (US) +bbcb_us // 1983 BBC Micro Model B (US) electron // 1983 Acorn Electron +bbcb1770 // 1985 BBC Micro Model B w/1770 FDC bbcbp // 1985 BBC Micro Model B+ 64K bbcbp128 // 1985 BBC Micro Model B+ 128K +abc110 // 1985 ABC 110 +abc210 // 1985 ABC 210/Cambridge Workstation +abc310 // 1985 ABC 310 +reutapm // 1985 Reuters APM Board bbcm // 1986 BBC Master 128 bbcmt // 1986 BBC Master Turbo bbcmaiv // 1986 BBC Master AIV @@ -355,7 +360,8 @@ bbcmet // 1986 BBC Master ET bbcm512 // 1986 BBC Master 512 bbcmarm // 1986 ARM Evaluation System bbcmc // 1986 BBC Master Compact -bbcmc_ar // 1986 BBC Master Comapact (Arabic) +bbcmc_ar // 1986 BBC Master Compact (Arabic) +pro128s // 1987 Olivetti Prodest PC 128S bbcbc // 1985 BBC Bridge Companion a310 // 1988 Acorn Archimedes 310 a3010 // 1988 Acorn Archimedes 3010 diff --git a/src/mess/drivers/bbc.c b/src/mess/drivers/bbc.c index d6c85f06d80..8c6815c3eb7 100644 --- a/src/mess/drivers/bbc.c +++ b/src/mess/drivers/bbc.c @@ -48,7 +48,6 @@ #include "cpu/m6502/m6502.h" #include "cpu/m6502/m65sc02.h" #include "machine/6522via.h" -#include "machine/mc146818.h" /* RTC & CMOS RAM */ #include "bus/centronics/ctronics.h" #include "bus/econet/econet.h" #include "sound/tms5220.h" /* Speech */ @@ -58,7 +57,6 @@ /* Devices */ #include "imagedev/flopdrv.h" #include "formats/bbc_dsk.h" -#include "formats/basicdsk.h" #include "imagedev/cassette.h" #include "formats/uef_cas.h" #include "formats/csw_cas.h" @@ -138,120 +136,120 @@ READ8_MEMBER(bbc_state::bbc_fe_r) } static ADDRESS_MAP_START( bbca_mem, AS_PROGRAM, 8, bbc_state ) - ADDRESS_MAP_UNMAP_HIGH /* Hardware marked with a # is not present in a Model A */ + ADDRESS_MAP_UNMAP_HIGH /* Hardware marked with a # is not present in a Model A */ - AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorya1_w) /* 0000-3fff Regular Ram */ - AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Repeat of the Regular Ram */ - AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") /* 8000-bfff Paged ROM */ - AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ - AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ - /* fe00-feff Shiela Address Page */ - AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w) /* fe00-fe07 6845 CRTC Video controller */ - AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) + AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorya1_w) /* 0000-3fff Regular Ram */ + AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Repeat of the Regular Ram */ + AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */ + AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ + AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ + /* fe00-feff SHEILA Address Page */ + AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */ + AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w) + AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */ AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w) - AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ - AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID # ECONET Interrupt Off / ID No. */ - AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON # ECONET Interrupt On */ - /* W: fe20-fe2f Video ULA Video system chip */ - AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selecta_w) /* R: fe30-fe3f NC Not Connected */ - /* W: fe30-fe3f 84LS161 Paged ROM selector */ - AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ - AM_RANGE(0xfe60, 0xfe7f) AM_NOP /* fe60-fe7f 6522 VIA # USER VIA */ - AM_RANGE(0xfe80, 0xfe9f) AM_NOP /* fe80-fe9f 8271/1770 FDC # Floppy disc controller */ - AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC # ECONET controller */ - AM_RANGE(0xfec0, 0xfedf) AM_NOP /* fec0-fedf uPD7002 # Analogue to digital converter */ - AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA # Tube system interface */ - AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS Rom (continued) */ + AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ + AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID # ECONET Interrupt Off / ID No. */ + AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON # ECONET Interrupt On */ + /* W: fe20-fe2f Video ULA Video system chip */ + AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selecta_w) /* R: fe30-fe3f NC Not Connected */ + /* W: fe30-fe3f 84LS161 Paged ROM selector */ + AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ + AM_RANGE(0xfe60, 0xfe7f) AM_NOP /* fe60-fe7f 6522 VIA # USER VIA */ + AM_RANGE(0xfe80, 0xfe9f) AM_NOP /* fe80-fe9f 8271/1770 FDC # Floppy disc controller */ + AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC # ECONET controller */ + AM_RANGE(0xfec0, 0xfedf) AM_NOP /* fec0-fedf uPD7002 # Analogue to digital converter */ + AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA # Tube system interface */ + AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS Rom (continued) */ +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( bbc_base, AS_PROGRAM, 8, bbc_state ) + ADDRESS_MAP_UNMAP_HIGH + + AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ + AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ + /* fe00-feff SHEILA Address Page */ + AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */ + AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w) + AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */ + AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w) + AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ + AM_RANGE(0xfe18, 0xfe1f) AM_READ_PORT("S11") /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */ + AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON ECONET Interrupt On */ + /* W: fe20-fe2f Video ULA Video system chip */ + AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ + AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */ + /* fe80-fe9f FDC Floppy disc controller */ + AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */ + AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */ + AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ + AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS ROM (continued) */ ADDRESS_MAP_END static ADDRESS_MAP_START( bbcb_mem, AS_PROGRAM, 8, bbc_state ) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorya1_w) /* 0000-3fff Regular Ram */ - AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Repeat of the Regular Ram */ + AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */ AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */ - AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ - AM_RANGE(0xfc00, 0xfdff) AM_READWRITE(bbc_opus_read, bbc_opus_write) /* fc00-fdff OPUS Disc Controller */ - /* fe00-feff Shiela Address Page */ - AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w) /* fe00-fe07 6845 CRTC Video controller */ - AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) - AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w) - AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ - AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */ - AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON ECONET Interrupt On */ - /* W: fe20-fe2f Video ULA Video system chip */ AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */ - /* W: fe30-fe3f 84LS161 Paged ROM selector */ - AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ - AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */ - AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE(bbc_disc_r, bbc_disc_w) /* fe80-fe9f 8271 FDC Floppy disc controller */ - AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */ - AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */ - AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ - AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS Rom (continued) */ + /* W: fe30-fe3f 84LS161 Paged ROM selector */ + AM_RANGE(0xfe80, 0xfe83) AM_DEVREADWRITE("i8271", i8271_device, read, write) /* fe80-fe9f 8271 FDC Floppy disc controller */ + AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("i8271", i8271_device, dack_r, dack_w) /* fe80-fe9f 8271 FDC Floppy disc controller */ + AM_IMPORT_FROM(bbc_base) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START(bbcb1770_mem, AS_PROGRAM, 8, bbc_state) + AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorya1_w) /* 0000-3fff Regular Ram */ + AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */ + AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */ + AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */ + /* W: fe30-fe3f 84LS161 Paged ROM selector */ + AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ + AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ + AM_IMPORT_FROM(bbc_base) ADDRESS_MAP_END static ADDRESS_MAP_START( bbcbp_mem, AS_PROGRAM, 8, bbc_state ) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorybp1_w) /* 0000-2fff Regular Ram */ AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE(bbc_memorybp2_w) /* 3000-7fff Video/Shadow Ram */ AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w) /* 8000-afff Paged ROM or 12K of SWRAM */ AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") /* b000-bfff Rest of paged ROM area */ - AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ - AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ - /* fe00-feff Shiela Address Page */ - AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w) /* fe00-fe07 6845 CRTC Video controller */ - AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) - AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w) - AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ - AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */ - AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON ECONET Interrupt On */ - /* W: fe20-fe2f Video ULA Video system chip */ AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */ - /* W: fe30-fe3f 84LS161 Paged ROM selector */ - AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ - AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */ - AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE(bbc_wd1770_read, bbc_wd1770_write) /* fe80-fe9f 1770 FDC Floppy disc controller */ - AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */ - AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */ - AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ - AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS Rom (continued) */ + /* W: fe30-fe3f 84LS161 Paged ROM selector */ + AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ + AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ + AM_IMPORT_FROM(bbc_base) ADDRESS_MAP_END static ADDRESS_MAP_START( bbcbp128_mem, AS_PROGRAM, 8, bbc_state ) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorybp1_w) /* 0000-2fff Regular Ram */ AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE(bbc_memorybp2_w) /* 3000-7fff Video/Shadow Ram */ AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_128_w) /* 8000-afff Paged ROM or 12K of SWRAM */ AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE(bbc_memorybp6_128_w) /* b000-bfff Rest of paged ROM area */ - AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */ - AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */ - /* fe00-feff Shiela Address Page */ - AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w) /* fe00-fe07 6845 CRTC Video controller */ - AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) - AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w) - AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */ - AM_RANGE(0xfe10, 0xfe17) AM_NOP /* fe10-fe17 Serial ULA Serial system chip */ - AM_RANGE(0xfe18, 0xfe1f) AM_NOP /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */ - AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w) /* R: fe20-fe2f INTON ECONET Interrupt On */ - /* W: fe20-fe2f Video ULA Video system chip */ AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */ - /* W: fe30-fe3f 84LS161 Paged ROM selector */ - AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */ - AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */ - AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE(bbc_wd1770_read, bbc_wd1770_write) /* fe80-fe9f 1770 FDC Floppy disc controller */ - AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */ - AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */ - AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ - AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS Rom (continued) */ + /* W: fe30-fe3f 84LS161 Paged ROM selector */ + AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ + AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ + AM_IMPORT_FROM(bbc_base) ADDRESS_MAP_END +static ADDRESS_MAP_START( reutapm_mem, AS_PROGRAM, 8, bbc_state ) + AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorybp1_w) /* 0000-2fff Regular Ram */ + AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE(bbc_memorybp2_w) /* 3000-7fff Video/Shadow Ram */ + AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w) /* 8000-afff Paged ROM or 12K of SWRAM */ + AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") /* b000-bfff Rest of paged ROM area */ + AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */ + /* W: fe30-fe3f 84LS161 Paged ROM selector */ + AM_RANGE(0xfe80, 0xfe83) AM_NOP /* fe80-fe83 1770 FDC Drive control register */ + AM_RANGE(0xfe84, 0xfe9f) AM_NOP /* fe84-fe9f 1770 FDC Floppy disc controller */ + AM_IMPORT_FROM(bbc_base) +ADDRESS_MAP_END + /****************************************************************************** &FC00-&FCFF FRED &FD00-&FDFF JIM @@ -263,7 +261,7 @@ ADDRESS_MAP_END &20-&23 Video ULA - Video system chip 4 ( 2 bytes x 2 ) &24-&27 FDC Latch 1770 Control latch 1770 Control latch 4 ( 1 byte x 4 ) -&28-&2F 1770 registers 1770 Disc Controller 1170 Disc Controller 8 ( 4 bytes x 2 ) +&28-&2F 1770 registers 1770 Disc Controller 1770 Disc Controller 8 ( 4 bytes x 2 ) &30-&33 ROMSEL - ROM Select 4 ( 1 byte x 4 ) &34-&37 ACCCON ACCCON select reg. ACCCON select reg 4 ( 1 byte x 4 ) &38-&3F NC - - @@ -282,9 +280,9 @@ static ADDRESS_MAP_START(bbcm_mem, AS_PROGRAM, 8, bbc_state ) AM_RANGE(0x8000, 0x8fff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybm4_w) /* 8000-8fff Paged ROM/RAM or 4K of RAM ANDY */ AM_RANGE(0x9000, 0xbfff) AM_READ_BANK("bank5") AM_WRITE(bbc_memorybm5_w) /* 9000-bfff Rest of paged ROM/RAM area */ AM_RANGE(0xc000, 0xdfff) AM_READ_BANK("bank7") AM_WRITE(bbc_memorybm7_w) /* c000-dfff OS ROM or 8K of RAM HAZEL */ - AM_RANGE(0xe000, 0xfbff) AM_ROM AM_REGION("os", 0x2000) /* e000-fbff OS ROM */ - AM_RANGE(0xfc00, 0xfeff) AM_READ_BANK("bank8") AM_WRITE(bbcm_w) /* this is now processed directly because it can be ROM or hardware */ - AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS ROM (continued) */ + AM_RANGE(0xe000, 0xfbff) AM_ROM AM_REGION("os", 0x2000) /* e000-fbff OS ROM */ + AM_RANGE(0xfc00, 0xfeff) AM_READ_BANK("bank8") AM_WRITE(bbcm_w) /* processed directly because it can be ROM or hardware */ + AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS ROM (continued) */ ADDRESS_MAP_END @@ -464,47 +462,105 @@ INPUT_PORTS_END static INPUT_PORTS_START(bbc_dipswitch) PORT_MODIFY("COL2") - PORT_DIPNAME(0x01, 0x01, "DIP 8 (Default File System)") + PORT_DIPNAME(0x01, 0x01, "Default File System") PORT_DIPLOCATION("KBD:1") PORT_DIPSETTING( 0x00, "NFS" ) PORT_DIPSETTING( 0x01, "DFS" ) PORT_MODIFY("COL3") - PORT_DIPNAME(0x01, 0x01, "DIP 7 (Not Used)") + PORT_DIPNAME(0x01, 0x01, "Not Used") PORT_DIPLOCATION("KBD:2") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x01, DEF_STR( On )) PORT_MODIFY("COL4") - PORT_DIPNAME(0x01, 0x01, "DIP 6 (Disc Timings)") + PORT_DIPNAME(0x01, 0x01, "Disc Timings") PORT_DIPLOCATION("KBD:3") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x01, DEF_STR( On )) PORT_MODIFY("COL5") - PORT_DIPNAME(0x01, 0x01, "DIP 5 (Disc Timings)") + PORT_DIPNAME(0x01, 0x01, "Disc Timings") PORT_DIPLOCATION("KBD:4") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x01, DEF_STR( On )) PORT_MODIFY("COL6") - PORT_DIPNAME(0x01, 0x01, "DIP 4 (Boot)") + PORT_DIPNAME(0x01, 0x01, "Boot") PORT_DIPLOCATION("KBD:5") PORT_DIPSETTING( 0x00, "SHIFT" ) PORT_DIPSETTING( 0x01, "SHIFT-BREAK" ) PORT_MODIFY("COL7") - PORT_DIPNAME(0x01, 0x01, "DIP 3 (Screen Mode)") + PORT_DIPNAME(0x01, 0x01, "Screen Mode") PORT_DIPLOCATION("KBD:6") PORT_DIPSETTING( 0x00, "+0" ) PORT_DIPSETTING( 0x01, "+4" ) - + PORT_MODIFY("COL8") - PORT_DIPNAME(0x01, 0x01, "DIP 2 (Screen Mode)") + PORT_DIPNAME(0x01, 0x01, "Screen Mode") PORT_DIPLOCATION("KBD:7") PORT_DIPSETTING( 0x00, "+0" ) PORT_DIPSETTING( 0x01, "+2" ) PORT_MODIFY("COL9") - PORT_DIPNAME(0x01, 0x01, "DIP 1 (Screen Mode)") + PORT_DIPNAME(0x01, 0x01, "Screen Mode") PORT_DIPLOCATION("KBD:8") PORT_DIPSETTING( 0x00, "+0" ) PORT_DIPSETTING( 0x01, "+1" ) INPUT_PORTS_END +static INPUT_PORTS_START(bbc_links) + PORT_START("S11") + PORT_DIPNAME(0xff, 0xfe, "Econet ID") PORT_DIPLOCATION("S11:1,2,3,4,5,6,7,8") + PORT_DIPSETTING( 0x00, "0" ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x02, "2" ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x04, "4" ) + PORT_DIPSETTING( 0x05, "5" ) PORT_DIPSETTING( 0x06, "6" ) PORT_DIPSETTING( 0x07, "7" ) PORT_DIPSETTING( 0x08, "8" ) PORT_DIPSETTING( 0x09, "9" ) + PORT_DIPSETTING( 0x0a, "10" ) PORT_DIPSETTING( 0x0b, "11" ) PORT_DIPSETTING( 0x0c, "12" ) PORT_DIPSETTING( 0x0d, "13" ) PORT_DIPSETTING( 0x0e, "14" ) + PORT_DIPSETTING( 0x0f, "15" ) PORT_DIPSETTING( 0x10, "16" ) PORT_DIPSETTING( 0x11, "17" ) PORT_DIPSETTING( 0x12, "18" ) PORT_DIPSETTING( 0x13, "19" ) + PORT_DIPSETTING( 0x14, "20" ) PORT_DIPSETTING( 0x15, "21" ) PORT_DIPSETTING( 0x16, "22" ) PORT_DIPSETTING( 0x17, "23" ) PORT_DIPSETTING( 0x18, "24" ) + PORT_DIPSETTING( 0x19, "25" ) PORT_DIPSETTING( 0x1a, "26" ) PORT_DIPSETTING( 0x1b, "27" ) PORT_DIPSETTING( 0x1c, "28" ) PORT_DIPSETTING( 0x1d, "29" ) + PORT_DIPSETTING( 0x1e, "30" ) PORT_DIPSETTING( 0x1f, "31" ) PORT_DIPSETTING( 0x20, "32" ) PORT_DIPSETTING( 0x21, "33" ) PORT_DIPSETTING( 0x22, "34" ) + PORT_DIPSETTING( 0x23, "35" ) PORT_DIPSETTING( 0x24, "36" ) PORT_DIPSETTING( 0x25, "37" ) PORT_DIPSETTING( 0x26, "38" ) PORT_DIPSETTING( 0x27, "39" ) + PORT_DIPSETTING( 0x28, "40" ) PORT_DIPSETTING( 0x29, "41" ) PORT_DIPSETTING( 0x2a, "42" ) PORT_DIPSETTING( 0x2b, "43" ) PORT_DIPSETTING( 0x2c, "44" ) + PORT_DIPSETTING( 0x2d, "45" ) PORT_DIPSETTING( 0x2e, "46" ) PORT_DIPSETTING( 0x2f, "47" ) PORT_DIPSETTING( 0x30, "48" ) PORT_DIPSETTING( 0x31, "49" ) + PORT_DIPSETTING( 0x32, "50" ) PORT_DIPSETTING( 0x33, "51" ) PORT_DIPSETTING( 0x34, "52" ) PORT_DIPSETTING( 0x35, "53" ) PORT_DIPSETTING( 0x36, "54" ) + PORT_DIPSETTING( 0x37, "15" ) PORT_DIPSETTING( 0x38, "56" ) PORT_DIPSETTING( 0x39, "57" ) PORT_DIPSETTING( 0x3a, "58" ) PORT_DIPSETTING( 0x3b, "59" ) + PORT_DIPSETTING( 0x3c, "60" ) PORT_DIPSETTING( 0x3d, "61" ) PORT_DIPSETTING( 0x3e, "62" ) PORT_DIPSETTING( 0x3f, "63" ) PORT_DIPSETTING( 0x40, "64" ) + PORT_DIPSETTING( 0x41, "65" ) PORT_DIPSETTING( 0x42, "66" ) PORT_DIPSETTING( 0x43, "67" ) PORT_DIPSETTING( 0x44, "68" ) PORT_DIPSETTING( 0x45, "69" ) + PORT_DIPSETTING( 0x46, "70" ) PORT_DIPSETTING( 0x47, "71" ) PORT_DIPSETTING( 0x48, "72" ) PORT_DIPSETTING( 0x49, "73" ) PORT_DIPSETTING( 0x4a, "74" ) + PORT_DIPSETTING( 0x4b, "75" ) PORT_DIPSETTING( 0x4c, "76" ) PORT_DIPSETTING( 0x4d, "77" ) PORT_DIPSETTING( 0x4e, "78" ) PORT_DIPSETTING( 0x4f, "79" ) + PORT_DIPSETTING( 0x50, "80" ) PORT_DIPSETTING( 0x51, "81" ) PORT_DIPSETTING( 0x52, "82" ) PORT_DIPSETTING( 0x53, "83" ) PORT_DIPSETTING( 0x54, "84" ) + PORT_DIPSETTING( 0x55, "85" ) PORT_DIPSETTING( 0x56, "86" ) PORT_DIPSETTING( 0x57, "87" ) PORT_DIPSETTING( 0x58, "88" ) PORT_DIPSETTING( 0x59, "89" ) + PORT_DIPSETTING( 0x5a, "90" ) PORT_DIPSETTING( 0x5b, "91" ) PORT_DIPSETTING( 0x5c, "92" ) PORT_DIPSETTING( 0x5d, "93" ) PORT_DIPSETTING( 0x5e, "94" ) + PORT_DIPSETTING( 0x5f, "95" ) PORT_DIPSETTING( 0x60, "96" ) PORT_DIPSETTING( 0x61, "97" ) PORT_DIPSETTING( 0x62, "98" ) PORT_DIPSETTING( 0x63, "99" ) + PORT_DIPSETTING( 0x64, "100" ) PORT_DIPSETTING( 0x65, "101" ) PORT_DIPSETTING( 0x66, "102" ) PORT_DIPSETTING( 0x67, "103" ) PORT_DIPSETTING( 0x68, "104" ) + PORT_DIPSETTING( 0x69, "105" ) PORT_DIPSETTING( 0x6a, "106" ) PORT_DIPSETTING( 0x6b, "107" ) PORT_DIPSETTING( 0x6c, "108" ) PORT_DIPSETTING( 0x6d, "109" ) + PORT_DIPSETTING( 0x6e, "110" ) PORT_DIPSETTING( 0x6f, "111" ) PORT_DIPSETTING( 0x70, "112" ) PORT_DIPSETTING( 0x71, "113" ) PORT_DIPSETTING( 0x72, "114" ) + PORT_DIPSETTING( 0x73, "115" ) PORT_DIPSETTING( 0x74, "116" ) PORT_DIPSETTING( 0x75, "117" ) PORT_DIPSETTING( 0x76, "118" ) PORT_DIPSETTING( 0x77, "119" ) + PORT_DIPSETTING( 0x78, "120" ) PORT_DIPSETTING( 0x79, "121" ) PORT_DIPSETTING( 0x7a, "122" ) PORT_DIPSETTING( 0x7b, "123" ) PORT_DIPSETTING( 0x7c, "124" ) + PORT_DIPSETTING( 0x7d, "125" ) PORT_DIPSETTING( 0x7e, "126" ) PORT_DIPSETTING( 0x7f, "127" ) PORT_DIPSETTING( 0x80, "128" ) PORT_DIPSETTING( 0x81, "129" ) + PORT_DIPSETTING( 0x82, "130" ) PORT_DIPSETTING( 0x83, "131" ) PORT_DIPSETTING( 0x84, "132" ) PORT_DIPSETTING( 0x85, "133" ) PORT_DIPSETTING( 0x86, "134" ) + PORT_DIPSETTING( 0x87, "135" ) PORT_DIPSETTING( 0x88, "136" ) PORT_DIPSETTING( 0x89, "137" ) PORT_DIPSETTING( 0x8a, "138" ) PORT_DIPSETTING( 0x8b, "139" ) + PORT_DIPSETTING( 0x8c, "140" ) PORT_DIPSETTING( 0x8d, "141" ) PORT_DIPSETTING( 0x8e, "142" ) PORT_DIPSETTING( 0x8f, "143" ) PORT_DIPSETTING( 0x90, "144" ) + PORT_DIPSETTING( 0x91, "145" ) PORT_DIPSETTING( 0x92, "146" ) PORT_DIPSETTING( 0x93, "147" ) PORT_DIPSETTING( 0x94, "148" ) PORT_DIPSETTING( 0x95, "149" ) + PORT_DIPSETTING( 0x96, "150" ) PORT_DIPSETTING( 0x97, "151" ) PORT_DIPSETTING( 0x98, "152" ) PORT_DIPSETTING( 0x99, "153" ) PORT_DIPSETTING( 0x9a, "154" ) + PORT_DIPSETTING( 0x9b, "155" ) PORT_DIPSETTING( 0x9c, "156" ) PORT_DIPSETTING( 0x9d, "157" ) PORT_DIPSETTING( 0x9e, "158" ) PORT_DIPSETTING( 0x9f, "159" ) + PORT_DIPSETTING( 0xa0, "160" ) PORT_DIPSETTING( 0xa1, "161" ) PORT_DIPSETTING( 0xa2, "162" ) PORT_DIPSETTING( 0xa3, "163" ) PORT_DIPSETTING( 0xa4, "164" ) + PORT_DIPSETTING( 0xa5, "165" ) PORT_DIPSETTING( 0xa6, "166" ) PORT_DIPSETTING( 0xa7, "167" ) PORT_DIPSETTING( 0xa8, "168" ) PORT_DIPSETTING( 0xa9, "169" ) + PORT_DIPSETTING( 0xaa, "170" ) PORT_DIPSETTING( 0xab, "171" ) PORT_DIPSETTING( 0xac, "172" ) PORT_DIPSETTING( 0xad, "173" ) PORT_DIPSETTING( 0xae, "174" ) + PORT_DIPSETTING( 0xaf, "175" ) PORT_DIPSETTING( 0xb0, "176" ) PORT_DIPSETTING( 0xb1, "177" ) PORT_DIPSETTING( 0xb2, "178" ) PORT_DIPSETTING( 0xb3, "179" ) + PORT_DIPSETTING( 0xb4, "180" ) PORT_DIPSETTING( 0xb5, "181" ) PORT_DIPSETTING( 0xb6, "182" ) PORT_DIPSETTING( 0xb7, "183" ) PORT_DIPSETTING( 0xb8, "184" ) + PORT_DIPSETTING( 0xb9, "185" ) PORT_DIPSETTING( 0xba, "186" ) PORT_DIPSETTING( 0xbb, "187" ) PORT_DIPSETTING( 0xbc, "188" ) PORT_DIPSETTING( 0xbd, "189" ) + PORT_DIPSETTING( 0xbe, "190" ) PORT_DIPSETTING( 0xbf, "191" ) PORT_DIPSETTING( 0xc0, "192" ) PORT_DIPSETTING( 0xc1, "193" ) PORT_DIPSETTING( 0xc2, "194" ) + PORT_DIPSETTING( 0xc3, "195" ) PORT_DIPSETTING( 0xc4, "196" ) PORT_DIPSETTING( 0xc5, "197" ) PORT_DIPSETTING( 0xc6, "198" ) PORT_DIPSETTING( 0xc7, "199" ) + PORT_DIPSETTING( 0xc8, "200" ) PORT_DIPSETTING( 0xc9, "201" ) PORT_DIPSETTING( 0xca, "202" ) PORT_DIPSETTING( 0xcb, "203" ) PORT_DIPSETTING( 0xcc, "204" ) + PORT_DIPSETTING( 0xcd, "205" ) PORT_DIPSETTING( 0xce, "206" ) PORT_DIPSETTING( 0xcf, "207" ) PORT_DIPSETTING( 0xd0, "208" ) PORT_DIPSETTING( 0xd1, "209" ) + PORT_DIPSETTING( 0xd2, "210" ) PORT_DIPSETTING( 0xd3, "211" ) PORT_DIPSETTING( 0xd4, "212" ) PORT_DIPSETTING( 0xd5, "213" ) PORT_DIPSETTING( 0xd6, "214" ) + PORT_DIPSETTING( 0xd7, "215" ) PORT_DIPSETTING( 0xd8, "216" ) PORT_DIPSETTING( 0xd9, "217" ) PORT_DIPSETTING( 0xda, "218" ) PORT_DIPSETTING( 0xdb, "219" ) + PORT_DIPSETTING( 0xdc, "220" ) PORT_DIPSETTING( 0xdd, "221" ) PORT_DIPSETTING( 0xde, "222" ) PORT_DIPSETTING( 0xdf, "223" ) PORT_DIPSETTING( 0xe0, "224" ) + PORT_DIPSETTING( 0xe1, "225" ) PORT_DIPSETTING( 0xe2, "226" ) PORT_DIPSETTING( 0xe3, "227" ) PORT_DIPSETTING( 0xe4, "228" ) PORT_DIPSETTING( 0xe5, "229" ) + PORT_DIPSETTING( 0xe6, "230" ) PORT_DIPSETTING( 0xe7, "231" ) PORT_DIPSETTING( 0xe8, "232" ) PORT_DIPSETTING( 0xe9, "233" ) PORT_DIPSETTING( 0xea, "234" ) + PORT_DIPSETTING( 0xeb, "235" ) PORT_DIPSETTING( 0xec, "236" ) PORT_DIPSETTING( 0xed, "237" ) PORT_DIPSETTING( 0xee, "238" ) PORT_DIPSETTING( 0xef, "239" ) + PORT_DIPSETTING( 0xf0, "240" ) PORT_DIPSETTING( 0xf1, "241" ) PORT_DIPSETTING( 0xf2, "242" ) PORT_DIPSETTING( 0xf3, "243" ) PORT_DIPSETTING( 0xf4, "244" ) + PORT_DIPSETTING( 0xf5, "245" ) PORT_DIPSETTING( 0xf6, "246" ) PORT_DIPSETTING( 0xf7, "247" ) PORT_DIPSETTING( 0xf8, "248" ) PORT_DIPSETTING( 0xf9, "249" ) + PORT_DIPSETTING( 0xfa, "250" ) PORT_DIPSETTING( 0xfb, "251" ) PORT_DIPSETTING( 0xfc, "252" ) PORT_DIPSETTING( 0xfd, "253" ) PORT_DIPSETTING( 0xfe, "254" ) + PORT_DIPSETTING( 0xff, "255" ) +INPUT_PORTS_END + + static INPUT_PORTS_START(bbc_joy) PORT_START("JOY0") PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_MINMAX(0x0,0xff ) PORT_PLAYER(1) @@ -523,19 +579,9 @@ INPUT_PORTS_END static INPUT_PORTS_START(bbc_config) PORT_START("BBCCONFIG") -// PORT_CONFNAME( 0x01, 0x00, "Speech Upgrade" ) -// PORT_CONFSETTING( 0x00, DEF_STR( On ) ) -// PORT_CONFSETTING( 0x01, DEF_STR( Off ) ) - - PORT_CONFNAME( 0x07, 0x00, "DFS Select" ) - PORT_CONFSETTING( 0x00, "Acorn DFS 0.90 (read only)" ) - PORT_CONFSETTING( 0x01, "Acorn DNFS 1.20 (read only)" ) - PORT_CONFSETTING( 0x02, "Watford DFS 1.44 (read only)" ) - PORT_CONFSETTING( 0x03, "Acorn DFS E00 (hack / read only)" ) - PORT_CONFSETTING( 0x04, "Acorn DDFS" ) - PORT_CONFSETTING( 0x05, "Watford DDFS (not working)" ) - PORT_CONFSETTING( 0x06, "Opus Challenger 512K (RAM drive only)" ) - PORT_CONFSETTING( 0x07, DEF_STR( None ) ) + PORT_CONFNAME( 0x01, 0x00, "Speech Upgrade" ) + PORT_CONFSETTING( 0x00, DEF_STR( On ) ) + PORT_CONFSETTING( 0x01, DEF_STR( Off ) ) PORT_CONFNAME( 0x18, 0x00, "Sideways RAM Type" ) PORT_CONFSETTING( 0x00, DEF_STR( None ) ) @@ -554,6 +600,15 @@ static INPUT_PORTS_START(bbcb) PORT_INCLUDE(bbc_config) PORT_INCLUDE(bbc_keyboard) PORT_INCLUDE(bbc_dipswitch) + PORT_INCLUDE(bbc_links) + PORT_INCLUDE(bbc_joy) +INPUT_PORTS_END + +static INPUT_PORTS_START(abc) + PORT_INCLUDE(bbc_keyboard) + PORT_INCLUDE(bbc_keypad) + PORT_INCLUDE(bbc_dipswitch) + PORT_INCLUDE(bbc_links) PORT_INCLUDE(bbc_joy) INPUT_PORTS_END @@ -572,15 +627,6 @@ INTERRUPT_GEN_MEMBER(bbc_state::bbcb_vsync) } -//static const struct TMS5220interface tms5220_interface = -//{ -// 680000L, -// 50, -// bbc_TMSint -//}; - - - WRITE_LINE_MEMBER(bbc_state::bbcb_acia6850_irq_w) { m_acia_irq = state; @@ -588,20 +634,6 @@ WRITE_LINE_MEMBER(bbc_state::bbcb_acia6850_irq_w) check_interrupts(); } -static LEGACY_FLOPPY_OPTIONS_START(bbc) - LEGACY_FLOPPY_OPTION( ssd80, "bbc,img,ssd", "BBC SSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, - HEADS([1]) - TRACKS([80]) - SECTORS([10]) - SECTOR_LENGTH([256]) - FIRST_SECTOR_ID([0])) - LEGACY_FLOPPY_OPTION( dsd80, "dsd", "BBC DSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, - HEADS([2]) - TRACKS([80]) - SECTORS([10]) - SECTOR_LENGTH([256]) - FIRST_SECTOR_ID([0])) -LEGACY_FLOPPY_OPTIONS_END static const floppy_interface bbc_floppy_interface = { @@ -610,11 +642,22 @@ static const floppy_interface bbc_floppy_interface = "floppy_5_25" }; -FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats ) - FLOPPY_BBC_FORMAT +FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_525sd ) + FLOPPY_BBC_SSD_525_FORMAT, + FLOPPY_BBC_DSD_525_FORMAT FLOPPY_FORMATS_END -static SLOT_INTERFACE_START( bbc_floppies ) +FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_525dd ) + FLOPPY_BBC_SSD_525_FORMAT, + FLOPPY_BBC_DSD_525_FORMAT, + FLOPPY_BBC_ADF_525_FORMAT +FLOPPY_FORMATS_END + +FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_35dd ) + FLOPPY_BBC_ADF_35_FORMAT +FLOPPY_FORMATS_END + +static SLOT_INTERFACE_START( bbc_floppies_525 ) SLOT_INTERFACE("sssd", FLOPPY_525_SSSD) SLOT_INTERFACE("sd", FLOPPY_525_SD) SLOT_INTERFACE("ssdd", FLOPPY_525_SSDD) @@ -623,6 +666,10 @@ static SLOT_INTERFACE_START( bbc_floppies ) SLOT_INTERFACE("qd", FLOPPY_525_QD) SLOT_INTERFACE_END +static SLOT_INTERFACE_START( bbc_floppies_35 ) + SLOT_INTERFACE("qd", FLOPPY_35_DD) +SLOT_INTERFACE_END + WRITE_LINE_MEMBER(bbc_state::econet_clk_w) { m_adlc->rxc_w(state); @@ -649,6 +696,13 @@ static MACHINE_CONFIG_FRAGMENT( bbc_eprom_sockets ) MACHINE_CONFIG_END +/*************************************************************************** + + BBC Micro + +****************************************************************************/ + + static MACHINE_CONFIG_START( bbca, bbc_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6502, 2000000) /* 2.00 MHz */ @@ -747,8 +801,9 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca ) MCFG_RAM_DEFAULT_VALUE(0x00) /* speech hardware */ -// MCFG_SOUND_ADD("tms5220", TMS5220, 640000) -// MCFG_TMS52XX_SPEECHROM("vsm") + MCFG_DEVICE_ADD("vsm", SPEECHROM, 0) + MCFG_SOUND_ADD("tms5220", TMS5220, 640000) + MCFG_TMS52XX_SPEECHROM("vsm") /* user via */ MCFG_DEVICE_ADD("via6522_1", VIA6522, 1000000) @@ -766,7 +821,6 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca ) /* printer */ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer") MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */ - MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") /* fdc */ @@ -776,13 +830,6 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca ) MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface) - MCFG_WD1770_ADD("wd177x", XTAL_16MHz / 2) - MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) - MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w)) - - MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats) - /* software lists */ MCFG_DEVICE_REMOVE("cass_ls_a") MCFG_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass") @@ -790,71 +837,50 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( bbcb_us, bbca ) +static MACHINE_CONFIG_DERIVED(bbcb1770, bbcb) /* basic machine hardware */ - MCFG_CPU_MODIFY( "maincpu" ) - MCFG_CPU_PROGRAM_MAP(bbcb_mem) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(bbcb1770_mem) - MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcb ) - MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcb ) - MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcb ) + /* fdc */ + MCFG_DEVICE_REMOVE("i8271") + MCFG_DEVICE_REMOVE(FLOPPY_0) + MCFG_DEVICE_REMOVE(FLOPPY_1) - /* internal ram */ - MCFG_RAM_MODIFY(RAM_TAG) - MCFG_RAM_DEFAULT_SIZE("32K") - MCFG_RAM_DEFAULT_VALUE(0x00) + MCFG_WD1770_ADD("wd1770", XTAL_16MHz / 2) + MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) + MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w)) - /* speech hardware */ -// MCFG_SOUND_ADD("tms5220", TMS5220, 640000) -// MCFG_TMS52XX_SPEECHROM("vsm") + MCFG_FLOPPY_DRIVE_ADD("wd1770:0", bbc_floppies_525, "qd", bbc_state::floppy_formats_525dd) + MCFG_FLOPPY_DRIVE_SOUND(true) + MCFG_FLOPPY_DRIVE_ADD("wd1770:1", bbc_floppies_525, "qd", bbc_state::floppy_formats_525dd) + MCFG_FLOPPY_DRIVE_SOUND(true) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( bbcb_de, bbcb ) + /* software lists */ + MCFG_DEVICE_REMOVE("cass_ls_b") + MCFG_SOFTWARE_LIST_ADD("flop_ls_b_de", "bbcb_de_cass") + MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_b", "bbcb_cass") +MACHINE_CONFIG_END + + +static MACHINE_CONFIG_DERIVED( bbcb_us, bbcb ) /* video hardware */ MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_SIZE(640, 200) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) MCFG_SCREEN_REFRESH_RATE(60) - /* system via */ - MCFG_DEVICE_ADD("via6522_1", VIA6522, 1000000) - MCFG_VIA6522_READPB_HANDLER(READ8(bbc_state, bbcb_via_user_read_portb)) - MCFG_VIA6522_WRITEPA_HANDLER(DEVWRITE8("cent_data_out", output_latch_device, write)) - MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_user_write_portb)) - MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE("centronics", centronics_device, write_strobe)) - MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_user_irq_w)) - - /* adc */ - MCFG_DEVICE_ADD("upd7002", UPD7002, 0) - MCFG_UPD7002_GET_ANALOGUE_CB(bbc_state, BBC_get_analogue_input) - MCFG_UPD7002_EOC_CB(bbc_state, BBC_uPD7002_EOC) - - /* printer */ - MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer") - MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */ - - MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") - - /* fdc */ - MCFG_DEVICE_ADD("i8271", I8271, 0) - MCFG_I8271_IRQ_CALLBACK(WRITELINE(bbc_state, bbc_i8271_interrupt)) - MCFG_I8271_FLOPPIES(FLOPPY_0, FLOPPY_1) - - MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface) - - MCFG_WD1770_ADD("wd177x", XTAL_16MHz / 2) - MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) - MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w)) - - MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats) - /* software lists */ - MCFG_DEVICE_REMOVE("cass_ls_a") - MCFG_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass") - MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_a", "bbca_cass") + MCFG_DEVICE_REMOVE("cass_ls_b") + MCFG_SOFTWARE_LIST_ADD("flop_ls_b_us", "bbcb_us_flop") + MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_b", "bbcb_cass") MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( bbcbp, bbcb ) +static MACHINE_CONFIG_DERIVED( bbcbp, bbcb1770 ) /* basic machine hardware */ MCFG_CPU_MODIFY( "maincpu" ) /* M6512 */ MCFG_CPU_PROGRAM_MAP(bbcbp_mem) @@ -867,18 +893,14 @@ static MACHINE_CONFIG_DERIVED( bbcbp, bbcb ) MCFG_RAM_MODIFY(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("64K") MCFG_RAM_DEFAULT_VALUE(0x00) - - /* fdc */ - MCFG_DEVICE_REMOVE("i8271") - MCFG_DEVICE_REMOVE(FLOPPY_0) - MCFG_DEVICE_REMOVE(FLOPPY_1) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( bbcbp128, bbcbp ) +static MACHINE_CONFIG_DERIVED( bbcbp128, bbcb1770 ) /* basic machine hardware */ MCFG_CPU_MODIFY( "maincpu" ) /* M6512 */ MCFG_CPU_PROGRAM_MAP(bbcbp128_mem) + MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcbp) MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcbp) MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcbp) @@ -890,7 +912,90 @@ static MACHINE_CONFIG_DERIVED( bbcbp128, bbcbp ) MACHINE_CONFIG_END -/* BBC Master Series */ +/*************************************************************************** + + Acorn Business Computers + +****************************************************************************/ + + +static MACHINE_CONFIG_DERIVED( abc110, bbcbp ) + /* fdc */ + MCFG_DEVICE_REMOVE("wd1770:1") + + /* Add Z80 co-processor */ + + /* Add ADAPTEC ACB-4000 Winchester Disc Controller */ + + /* Add 10MB ST-412 Winchester */ + +MACHINE_CONFIG_END + + +static MACHINE_CONFIG_DERIVED( abc210, bbcbp ) + /* fdc */ + MCFG_DEVICE_REMOVE("wd1770:1") + + /* Add 32016 co-processor */ + + /* Add ADAPTEC ACB-4000 Winchester Disc Controller */ + + /* Add 10MB ST-412 Winchester ABC210 */ + + /* Add 20MB ST-412 Winchester Cambridge */ + +MACHINE_CONFIG_END + + +static MACHINE_CONFIG_DERIVED( abc310, bbcbp ) + /* fdc */ + MCFG_DEVICE_REMOVE("wd1770:1") + + /* Add 80286 co-processor */ + + /* Add ADAPTEC ACB-4000 Winchester Disc Controller */ + + /* Add 10MB ST-412 Winchester */ + +MACHINE_CONFIG_END + + +/*************************************************************************** + + Reuters APM Board (Application Processor Module) + +****************************************************************************/ + + +static MACHINE_CONFIG_DERIVED( reutapm, bbcbp ) + /* basic machine hardware */ + MCFG_CPU_MODIFY( "maincpu" ) /* M6512 */ + MCFG_CPU_PROGRAM_MAP(reutapm_mem) + + /* sound hardware */ + MCFG_DEVICE_REMOVE("mono") + MCFG_DEVICE_REMOVE("sn76489") + MCFG_DEVICE_REMOVE("vsm") + MCFG_DEVICE_REMOVE("tms5220") + + /* cassette */ + MCFG_DEVICE_REMOVE( "cassette" ) + + /* fdc */ + MCFG_DEVICE_REMOVE("wd1770") + + /* software lists */ + MCFG_DEVICE_REMOVE("cass_ls_a") + MCFG_DEVICE_REMOVE("cass_ls_b") +MACHINE_CONFIG_END + + +/*************************************************************************** + + BBC Master Series + +****************************************************************************/ + static MACHINE_CONFIG_START( bbcm, bbc_state ) /* basic machine hardware */ @@ -943,7 +1048,6 @@ static MACHINE_CONFIG_START( bbcm, bbc_state ) /* printer */ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer") MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */ - MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") /* cassette */ @@ -1001,12 +1105,14 @@ static MACHINE_CONFIG_START( bbcm, bbc_state ) MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_user_irq_w)) /* fdc */ - MCFG_WD1770_ADD("wd177x", XTAL_16MHz / 2) + MCFG_WD1770_ADD("wd1770", XTAL_16MHz / 2) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w)) - MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("wd1770:0", bbc_floppies_525, "qd", bbc_state::floppy_formats_525dd) + MCFG_FLOPPY_DRIVE_SOUND(true) + MCFG_FLOPPY_DRIVE_ADD("wd1770:1", bbc_floppies_525, "qd", bbc_state::floppy_formats_525dd) + MCFG_FLOPPY_DRIVE_SOUND(true) /* econet */ MCFG_DEVICE_ADD("mc6854", MC6854, 0) @@ -1037,15 +1143,12 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bbcmet, bbcm ) - - /* Remove all devices not present in this model */ - /* sound hardware */ -// MCFG_DEVICE_REMOVE("mono") -// MCFG_DEVICE_REMOVE("sn76489") + MCFG_DEVICE_REMOVE("mono") + MCFG_DEVICE_REMOVE("sn76489") /* printer */ -// MCFG_DEVICE_REMOVE("centronics") + MCFG_DEVICE_REMOVE("centronics") /* cassette */ MCFG_DEVICE_REMOVE("cassette") @@ -1056,15 +1159,16 @@ static MACHINE_CONFIG_DERIVED( bbcmet, bbcm ) MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b") /* acia */ -// MCFG_DEVICE_REMOVE("acia6850") + MCFG_DEVICE_REMOVE("acia6850") MCFG_DEVICE_REMOVE(RS232_TAG) + MCFG_DEVICE_REMOVE("acia_clock") /* devices */ -// MCFG_DEVICE_REMOVE("upd7002") -// MCFG_DEVICE_REMOVE("via6522_1") + MCFG_DEVICE_REMOVE("upd7002") + MCFG_DEVICE_REMOVE("via6522_1") /* fdc */ -// MCFG_DEVICE_REMOVE("wd177x") + MCFG_DEVICE_REMOVE("wd1770") MACHINE_CONFIG_END @@ -1082,27 +1186,49 @@ static MACHINE_CONFIG_DERIVED( bbcmarm, bbcm ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( bbcmc, bbcm ) +/*************************************************************************** -// MCFG_DEVICE_REMOVE("rtc") + BBC Master Compact + +****************************************************************************/ + + +static MACHINE_CONFIG_DERIVED( bbcmc, bbcm ) + /* cassette */ + MCFG_DEVICE_REMOVE("cassette") /* fdc */ - MCFG_DEVICE_REMOVE("wd177x") + MCFG_DEVICE_REMOVE("wd1770") -// MCFG_WD1772_ADD("wd177x", XTAL_16MHz / 2) - MCFG_WD1770_ADD("wd177x", XTAL_16MHz / 2) + MCFG_WD1772_ADD("wd1772", XTAL_16MHz / 2) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w)) - MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("wd1772:0", bbc_floppies_35, "qd", bbc_state::floppy_formats_35dd) + MCFG_FLOPPY_DRIVE_SOUND(true) + MCFG_FLOPPY_DRIVE_ADD("wd1772:1", bbc_floppies_35, NULL, bbc_state::floppy_formats_35dd) + MCFG_FLOPPY_DRIVE_SOUND(true) + + /* eeprom pcd8572 */ + //MCFG_DEVICE_REMOVE("rtc") /* software lists */ + MCFG_SOFTWARE_LIST_REMOVE("cass_ls_m") + MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a") + MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b") MCFG_SOFTWARE_LIST_REMOVE("cart_ls_m") MCFG_SOFTWARE_LIST_ADD("flop_ls_mc", "bbcmc_flop") MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED(pro128s, bbcmc) + /* software lists */ + MCFG_SOFTWARE_LIST_REMOVE("flop_ls_mc") + MCFG_SOFTWARE_LIST_ADD("flop_ls_pro128s", "pro128s_flop") + MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("flop_ls_mc", "bbcmc_flop") +MACHINE_CONFIG_END + + /* the BBC came with 4 rom sockets on the motherboard as shown in the model A driver */ /* you could get a number of rom upgrade boards that took this up to 16 roms as in the */ /* model B driver */ @@ -1111,9 +1237,9 @@ ROM_START(bbca) ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */ ROM_REGION(0x14000,"option",0) /* ROM */ - /* rom page 0 00000 */ - /* rom page 1 04000 */ - /* rom page 2 08000 */ + /* rom page 0 00000 SPARE SOCKET */ + /* rom page 1 04000 SPARE SOCKET */ + /* rom page 2 08000 SPARE SOCKET */ /* rom page 3 0c000 BASIC */ ROM_DEFAULT_BIOS("os12b2") ROM_SYSTEM_BIOS( 0, "os12b2", "OS 1.20 / BASIC2" ) @@ -1128,6 +1254,7 @@ ROM_START(bbca) ROM_SYSTEM_BIOS( 3, "os10b1", "OS 1.00 / BASIC1" ) ROMX_LOAD("os10.rom", 0x10000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(4)) /* os */ ROMX_LOAD("basic1.rom", 0x0c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(4)) /* rom page 3 0c000 */ + /* OS0.1 does not support rom paging, load BASIC into all pages */ ROM_SYSTEM_BIOS( 4, "os01b2", "OS 0.10 / BASIC2" ) ROMX_LOAD("os01.rom", 0x10000, 0x4000, CRC(45ee0980) SHA1(4b0ece6dc139d5d3f4fabd023716fb6f25149b80), ROM_BIOS(5)) /* os */ ROMX_LOAD("basic2.rom", 0x00000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(5)) /* rom page 0 00000 */ @@ -1146,7 +1273,6 @@ ROM_START(bbca) ROM_END - /* 0000- 7fff ram */ /* 8000- bfff this area is mapped over with one of the roms from "option" region 0x00000-0x40000 */ /* c000- ffff OS rom and memory mapped hardware at fc00-feff, from "option" region 0x40000-0x44000 */ @@ -1168,9 +1294,9 @@ ROM_START(bbcb) /* rom page 9 24000 */ /* rom page 10 28000 */ /* rom page 11 2c000 */ - /* rom page 12 30000 */ - /* rom page 13 34000 */ - /* rom page 14 38000 */ + /* rom page 12 30000 SPARE SOCKET */ + /* rom page 13 34000 SPARE SOCKET */ + /* rom page 14 38000 DFS */ /* rom page 15 3c000 BASIC */ ROM_DEFAULT_BIOS("os12b2") ROM_SYSTEM_BIOS( 0, "os12b2", "OS 1.20 / BASIC2" ) @@ -1186,29 +1312,60 @@ ROM_START(bbcb) ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(4)) /* os */ ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(4)) /* rom page 15 3c000 */ + ROM_LOAD("dnfs.rom", 0x38000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232)) + ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) - ROM_REGION(0x20000,"dfs",0) /* DFS ROMS */ - ROM_LOAD("dfs09.rom", 0x00000, 0x2000, CRC(3ce609cf) SHA1(5cc0f14b8f46855c70eaa653cca4ad079b458732)) - ROM_RELOAD( 0x02000, 0x2000 ) - ROM_LOAD("dnfs.rom", 0x04000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232)) - ROM_LOAD("dfs144.rom", 0x08000, 0x4000, CRC(9fb8d13f) SHA1(387d2468c6e1360f5b531784ce95d5f71a50c2b5)) - ROM_LOAD("zdfs-0.90.rom",0x0C000, 0x2000, CRC(ea579d4d) SHA1(59ad2a8994f4bddad6687891f1a2bc29f2fd32b8)) - ROM_LOAD("ddfs223.rom", 0x10000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) - ROM_LOAD("ddfs-1.53.rom",0x14000, 0x4000, CRC(e1be4ee4) SHA1(6719dc958f2631e6dc8f045429797b289bfe649a)) - ROM_LOAD("ch103.rom", 0x18000, 0x4000, CRC(98367cf4) SHA1(eca3631aa420691f96b72bfdf2e9c2b613e1bf33)) - /*NONE*/ - ROM_REGION(0x80000, "disks", ROMREGION_ERASEFF) /* Opus Ram Disc Space */ - - //ROM_REGION(0x2000, "torch", 0) - //ROM_LOAD("torchz80_094.bin", 0x0000, 0x2000, CRC(49989bd4) SHA1(62b57c858a3baa4ff943c31f77d331c414772a61)) - //ROM_LOAD("torchz80_102.bin", 0x0000, 0x2000, CRC(2eb40a21) SHA1(e6ee738e5f2f8556002b79d18caa8ef21f14e08d)) - - //ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ - //ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) + ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) ROM_END + +ROM_START(bbcb1770) + ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */ + + ROM_REGION(0x44000,"option",0) /* ROM */ + /* rom page 0 00000 */ + /* rom page 1 04000 */ + /* rom page 2 08000 */ + /* rom page 3 0c000 */ + /* rom page 4 10000 */ + /* rom page 5 14000 */ + /* rom page 6 18000 */ + /* rom page 7 1c000 */ + /* rom page 8 20000 */ + /* rom page 9 24000 */ + /* rom page 10 28000 */ + /* rom page 11 2c000 */ + /* rom page 12 30000 SPARE SOCKET */ + /* rom page 13 34000 SPARE SOCKET */ + /* rom page 14 38000 DDFS */ + /* rom page 15 3c000 BASIC */ + ROM_DEFAULT_BIOS("os12b2") + ROM_SYSTEM_BIOS( 0, "os12b2", "OS 1.20 / BASIC2" ) + ROMX_LOAD("os12.rom", 0x40000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d), ROM_BIOS(1)) /* os */ + ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(1)) /* rom page 15 3c000 */ + ROM_SYSTEM_BIOS( 1, "os12b1", "OS 1.20 / BASIC1" ) + ROMX_LOAD("os12.rom", 0x40000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d), ROM_BIOS(2)) /* os */ + ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(2)) /* rom page 15 3c000 */ + ROM_SYSTEM_BIOS( 2, "os10b2", "OS 1.00 / BASIC2" ) + ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(3)) /* os */ + ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(3)) /* rom page 15 3c000 */ + ROM_SYSTEM_BIOS( 3, "os10b1", "OS 1.00 / BASIC1" ) + ROMX_LOAD("os10.rom", 0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(4)) /* os */ + ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(4)) /* rom page 15 3c000 */ + + ROM_LOAD("ddfs223.rom", 0x38000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) + + ROM_REGION(0x4000, "os", 0) + ROM_COPY("option", 0x40000, 0, 0x4000) + + ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) +ROM_END + + ROM_START(bbcb_de) ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */ @@ -1225,32 +1382,25 @@ ROM_START(bbcb_de) /* rom page 9 24000 */ /* rom page 10 28000 */ /* rom page 11 2c000 */ - /* rom page 12 30000 */ - /* rom page 13 34000 */ - /* rom page 14 38000 */ + /* rom page 12 30000 SPARE SOCKET */ + /* rom page 13 34000 SPARE SOCKET */ + /* rom page 14 38000 DFS */ /* rom page 15 3c000 BASIC */ ROM_DEFAULT_BIOS("os12") ROM_SYSTEM_BIOS( 0, "os12", "OS 1.20 / BASIC2" ) ROMX_LOAD("os_de.rom", 0x40000, 0x4000, CRC(b7262caf) SHA1(aadf90338ee9d1c85dfa73beba50e930c2a38f10), ROM_BIOS(1)) ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(1)) /* rom page 15 3c000 */ + ROM_LOAD("dfs10.rom", 0x38000, 0x4000, CRC(7e367e8c) SHA1(161f585dc45665ea77433c84afd2f95049f7f5a0)) + ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) - ROM_REGION(0x20000,"dfs",0) /* DFS ROMS */ - ROM_LOAD("dfs09.rom", 0x00000, 0x2000, CRC(3ce609cf) SHA1(5cc0f14b8f46855c70eaa653cca4ad079b458732)) - ROM_RELOAD( 0x02000, 0x2000 ) - - ROM_LOAD("dnfs.rom", 0x04000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232)) - ROM_LOAD("dfs144.rom", 0x08000, 0x4000, CRC(9fb8d13f) SHA1(387d2468c6e1360f5b531784ce95d5f71a50c2b5)) - ROM_LOAD("zdfs-0.90.rom",0x0C000, 0x2000, CRC(ea579d4d) SHA1(59ad2a8994f4bddad6687891f1a2bc29f2fd32b8)) - ROM_LOAD("ddfs223.rom", 0x10000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) - ROM_LOAD("ddfs-1.53.rom",0x14000, 0x4000, CRC(e1be4ee4) SHA1(6719dc958f2631e6dc8f045429797b289bfe649a)) - ROM_LOAD("ch103.rom", 0x18000, 0x4000, CRC(98367cf4) SHA1(eca3631aa420691f96b72bfdf2e9c2b613e1bf33)) - /*NONE*/ - ROM_REGION(0x80000, "disks", ROMREGION_ERASEFF) /* Opus Ram Disc Space */ + ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) ROM_END + ROM_START(bbcb_us) ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */ @@ -1267,35 +1417,25 @@ ROM_START(bbcb_us) /* rom page 9 24000 */ /* rom page 10 28000 */ /* rom page 11 2c000 */ - /* rom page 12 30000 */ - /* rom page 13 34000 */ - /* rom page 14 38000 */ + /* rom page 12 30000 SPARE SOCKET */ + /* rom page 13 34000 SPARE SOCKET */ + /* rom page 14 38000 DFS */ /* rom page 15 3c000 BASIC */ ROM_DEFAULT_BIOS("os10b3") ROM_SYSTEM_BIOS( 0, "os10b3", "OS A1.0 / BASIC3" ) ROMX_LOAD("os10_us.rom", 0x40000, 0x4000, CRC(c8e946a9) SHA1(83d91d089dca092d2c8b7c3650ff8143c9069b89), ROM_BIOS(1)) ROMX_LOAD("basic3.rom", 0x3c000, 0x4000, CRC(161b9539) SHA1(b39014610a968789afd7695aa04d1277d874405c), ROM_BIOS(1)) /* rom page 15 3c000 */ + ROM_LOAD("dfs10.rom", 0x38000, 0x4000, CRC(7e367e8c) SHA1(161f585dc45665ea77433c84afd2f95049f7f5a0)) + ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) - ROM_REGION(0x20000,"dfs",0) /* DFS ROMS */ - ROM_LOAD("dfs09.rom", 0x00000, 0x2000, CRC(3ce609cf) SHA1(5cc0f14b8f46855c70eaa653cca4ad079b458732)) - ROM_RELOAD( 0x02000, 0x2000 ) - - ROM_LOAD("dnfs.rom", 0x04000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232)) - ROM_LOAD("dfs144.rom", 0x08000, 0x4000, CRC(9fb8d13f) SHA1(387d2468c6e1360f5b531784ce95d5f71a50c2b5)) - ROM_LOAD("zdfs-0.90.rom",0x0C000, 0x2000, CRC(ea579d4d) SHA1(59ad2a8994f4bddad6687891f1a2bc29f2fd32b8)) - ROM_LOAD("ddfs223.rom", 0x10000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) - ROM_LOAD("ddfs-1.53.rom",0x14000, 0x4000, CRC(e1be4ee4) SHA1(6719dc958f2631e6dc8f045429797b289bfe649a)) - ROM_LOAD("ch103.rom", 0x18000, 0x4000, CRC(98367cf4) SHA1(eca3631aa420691f96b72bfdf2e9c2b613e1bf33)) - /*NONE*/ - ROM_REGION(0x80000, "disks", ROMREGION_ERASEFF) /* Opus Ram Disc Space */ - ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ ROM_LOAD("phrom_us.bin", 0x0000, 0x4000, CRC(bf4b3b64) SHA1(66876702d1d95eecc034d20f25047f893a27cde5)) ROM_END + ROM_START(bbcbp) ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ @@ -1309,7 +1449,7 @@ ROM_START(bbcbp) /* rom page 2 08000 32K IN PAGE 3 */ /* rom page 3 0c000 SPARE SOCKET */ /* rom page 4 10000 32K IN PAGE 5 */ - /* rom page 5 14000 SPARE SOCKET */ + /* rom page 5 14000 ADFS */ /* rom page 6 18000 32K IN PAGE 7 */ /* rom page 7 1c000 DDFS */ /* rom page 8 20000 32K IN PAGE 9 */ @@ -1320,11 +1460,14 @@ ROM_START(bbcbp) /* rom page 13 34000 */ /* rom page 14 38000 32K IN PAGE 15 */ /* rom page 15 3C000 BASIC */ - /* ddfs 2.23 this is acorns 1770 disc controller Double density disc filing system */ + ROM_LOAD("adfs130.rom", 0x14000, 0x4000, CRC(d3855588) SHA1(301fd05c475a629c4bec70510d4507256a5b00d8)) ROM_LOAD("ddfs223.rom", 0x1c000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) + + ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) ROM_END @@ -1341,7 +1484,7 @@ ROM_START(bbcbp128) /* rom page 2 08000 32K IN PAGE 3 */ /* rom page 3 0c000 SPARE SOCKET */ /* rom page 4 10000 32K IN PAGE 5 */ - /* rom page 5 14000 SPARE SOCKET */ + /* rom page 5 14000 ADFS */ /* rom page 6 18000 32K IN PAGE 7 */ /* rom page 7 1c000 DDFS */ /* rom page 8 20000 32K IN PAGE 9 */ @@ -1352,11 +1495,159 @@ ROM_START(bbcbp128) /* rom page 13 34000 */ /* rom page 14 38000 32K IN PAGE 15 */ /* rom page 15 3C000 BASIC */ - /* ddfs 2.23 this is acorns 1770 disc controller Double density disc filing system */ + ROM_LOAD("adfs130.rom", 0x14000, 0x4000, CRC(d3855588) SHA1(301fd05c475a629c4bec70510d4507256a5b00d8)) ROM_LOAD("ddfs223.rom", 0x1c000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) + + ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) +ROM_END + + +ROM_START(abc110) + ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ + + ROM_REGION(0x44000,"option",0) /* ROM */ + ROM_DEFAULT_BIOS("mos200") + ROM_SYSTEM_BIOS( 0, "mos200", "MOS2.00" ) + ROMX_LOAD("mos200.rom", 0x40000, 0x4000, CRC(5e88f994) SHA1(76235ff15d736f5def338f73ac7497c41b916505), ROM_BIOS(1)) + ROM_SYSTEM_BIOS( 1, "mos123", "MOS1.23" ) + ROMX_LOAD("mos123.rom", 0x40000, 0x4000, CRC(90d31d08) SHA1(42a01892cf8bd2ada4db1c8b36aff80c85eb5dcb), ROM_BIOS(2)) + ROM_SYSTEM_BIOS( 2, "mos120", "MOS1.20" ) + ROMX_LOAD("mos120.rom", 0x40000, 0x4000, CRC(0a1e83a0) SHA1(21dc3a94eef7c003b194686730fb461779f44925), ROM_BIOS(3)) + /* rom page 0 00000 */ + /* rom page 1 04000 */ + /* rom page 2 08000 32K IN PAGE 3 */ + /* rom page 3 0c000 SPARE SOCKET */ + /* rom page 4 10000 32K IN PAGE 5 */ + /* rom page 5 14000 DDFS */ + /* rom page 6 18000 32K IN PAGE 7 */ + /* rom page 7 1c000 ADFS */ + /* rom page 8 20000 32K IN PAGE 9 */ + /* rom page 9 24000 SPARE SOCKET */ + /* rom page 10 28000 32K IN PAGE 11 */ + /* rom page 11 2c000 SPARE SOCKET */ + /* rom page 12 30000 */ + /* rom page 13 34000 */ + /* rom page 14 38000 32K IN PAGE 15 */ + /* rom page 15 3C000 BASIC */ + ROM_LOAD("ddfs223.rom", 0x14000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) + ROM_LOAD("adfs130.rom", 0x1c000, 0x4000, CRC(d3855588) SHA1(301fd05c475a629c4bec70510d4507256a5b00d8)) + ROM_LOAD("basic200.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) + + ROM_REGION(0x4000, "os", 0) + ROM_COPY("option", 0x40000, 0, 0x4000) + + ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) +ROM_END + + +ROM_START(abc210) + ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ + + ROM_REGION(0x44000,"option",0) /* ROM */ + ROM_DEFAULT_BIOS("mos200") + ROM_SYSTEM_BIOS( 0, "mos200", "MOS2.00" ) + ROMX_LOAD("mos200.rom", 0x40000, 0x4000, CRC(5e88f994) SHA1(76235ff15d736f5def338f73ac7497c41b916505), ROM_BIOS(1)) + ROM_SYSTEM_BIOS( 1, "mos123", "MOS1.23" ) + ROMX_LOAD("mos123.rom", 0x40000, 0x4000, CRC(90d31d08) SHA1(42a01892cf8bd2ada4db1c8b36aff80c85eb5dcb), ROM_BIOS(2)) + ROM_SYSTEM_BIOS( 2, "mos120", "MOS1.20" ) + ROMX_LOAD("mos120.rom", 0x40000, 0x4000, CRC(0a1e83a0) SHA1(21dc3a94eef7c003b194686730fb461779f44925), ROM_BIOS(3)) + /* rom page 0 00000 */ + /* rom page 1 04000 */ + /* rom page 2 08000 32K IN PAGE 3 */ + /* rom page 3 0c000 SPARE SOCKET */ + /* rom page 4 10000 32K IN PAGE 5 */ + /* rom page 5 14000 DDFS */ + /* rom page 6 18000 32K IN PAGE 7 */ + /* rom page 7 1c000 ADFS */ + /* rom page 8 20000 32K IN PAGE 9 */ + /* rom page 9 24000 SPARE SOCKET */ + /* rom page 10 28000 32K IN PAGE 11 */ + /* rom page 11 2c000 SPARE SOCKET */ + /* rom page 12 30000 */ + /* rom page 13 34000 */ + /* rom page 14 38000 32K IN PAGE 15 */ + /* rom page 15 3C000 BASIC */ + ROM_LOAD("ddfs223.rom", 0x14000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) + ROM_LOAD("adfs130.rom", 0x1c000, 0x4000, CRC(d3855588) SHA1(301fd05c475a629c4bec70510d4507256a5b00d8)) + ROM_LOAD("basic200.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) + + ROM_REGION(0x4000, "os", 0) + ROM_COPY("option", 0x40000, 0, 0x4000) + + ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) +ROM_END + + +ROM_START(abc310) + ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ + + ROM_REGION(0x44000,"option",0) /* ROM */ + ROM_DEFAULT_BIOS("mos200") + ROM_SYSTEM_BIOS( 0, "mos200", "MOS2.00" ) + ROMX_LOAD("mos200.rom", 0x40000, 0x4000, CRC(5e88f994) SHA1(76235ff15d736f5def338f73ac7497c41b916505), ROM_BIOS(1)) + ROM_SYSTEM_BIOS( 1, "mos123", "MOS1.23" ) + ROMX_LOAD("mos123.rom", 0x40000, 0x4000, CRC(90d31d08) SHA1(42a01892cf8bd2ada4db1c8b36aff80c85eb5dcb), ROM_BIOS(2)) + ROM_SYSTEM_BIOS( 2, "mos120", "MOS1.20" ) + ROMX_LOAD("mos120.rom", 0x40000, 0x4000, CRC(0a1e83a0) SHA1(21dc3a94eef7c003b194686730fb461779f44925), ROM_BIOS(3)) + /* rom page 0 00000 */ + /* rom page 1 04000 */ + /* rom page 2 08000 32K IN PAGE 3 */ + /* rom page 3 0c000 SPARE SOCKET */ + /* rom page 4 10000 32K IN PAGE 5 */ + /* rom page 5 14000 DDFS */ + /* rom page 6 18000 32K IN PAGE 7 */ + /* rom page 7 1c000 ADFS */ + /* rom page 8 20000 32K IN PAGE 9 */ + /* rom page 9 24000 SPARE SOCKET */ + /* rom page 10 28000 32K IN PAGE 11 */ + /* rom page 11 2c000 SPARE SOCKET */ + /* rom page 12 30000 */ + /* rom page 13 34000 */ + /* rom page 14 38000 32K IN PAGE 15 */ + /* rom page 15 3C000 BASIC */ + ROM_LOAD("ddfs223.rom", 0x14000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) + ROM_LOAD("adfs130.rom", 0x1c000, 0x4000, CRC(d3855588) SHA1(301fd05c475a629c4bec70510d4507256a5b00d8)) + ROM_LOAD("basic200.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) + + ROM_REGION(0x4000, "os", 0) + ROM_COPY("option", 0x40000, 0, 0x4000) + + ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) +ROM_END + + +ROM_START(reutapm) + ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */ + + ROM_REGION(0x44000,"option",0) /* ROM */ + /* rom page 0 00000 */ + /* rom page 1 04000 */ + /* rom page 2 08000 32K IN PAGE 3 */ + /* rom page 3 0c000 SPARE SOCKET */ + /* rom page 4 10000 32K IN PAGE 5 */ + /* rom page 5 14000 SPARE SOCKET */ + /* rom page 6 18000 32K IN PAGE 7 */ + /* rom page 7 1c000 SPARE SOCKET */ + /* rom page 8 20000 32K IN PAGE 9 */ + /* rom page 9 24000 SPARE SOCKET */ + /* rom page 10 28000 32K IN PAGE 11 */ + /* rom page 11 2c000 SPARE SOCKET */ + /* rom page 12 30000 */ + /* rom page 13 34000 */ + /* rom page 14 38000 32K IN PAGE 15 */ + /* rom page 15 3C000 SPARE SOCKET */ + ROM_LOAD("reutera100.rom", 0x1c000, 0x4000, CRC(98ebabfb) SHA1(a7887e1e5c206203491e1e06682b9508b0fef49d)) + ROM_LOAD("reuterb.rom", 0x2c000, 0x4000, CRC(9e02f59b) SHA1(1e63aa3bf4b37bf9ba41e454f95db05c3d15bfbf)) + + ROM_REGION(0x4000, "os", 0) + ROM_LOAD("mos_r030.rom", 0x0000, 0x4000, CRC(8b652337) SHA1(6a5c7ace255c8ac96c983d5ba67084fbd71ff61e)) ROM_END @@ -1480,10 +1771,10 @@ ROM_START(bbcmet) ROM_REGION(0x44000,"option",0) /* ROM */ ROM_DEFAULT_BIOS("mos400") ROM_SYSTEM_BIOS( 0, "mos400", "Econet MOS 4.00" ) - ROMX_LOAD("mos400.ic24", 0x20000, 0x10000, BAD_DUMP CRC(81729034) SHA1(d4bc2c7f5e66b5298786138f395908e70c772971), ROM_BIOS(1)) /* Merged individual ROM bank dumps */ - ROM_COPY("option", 0x24000, 0x34000, 0xC000) /* Mirror */ - ROM_COPY("option", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */ - ROM_FILL(0x20000, 0x4000, 0xFFFF) + ROMX_LOAD("mos400.ic24", 0x30000, 0x10000, BAD_DUMP CRC(81729034) SHA1(d4bc2c7f5e66b5298786138f395908e70c772971), ROM_BIOS(1)) /* Merged individual ROM bank dumps */ + ROM_COPY("option", 0x34000, 0x24000, 0xC000) /* Mirror */ + ROM_COPY("option", 0x30000, 0x40000, 0x4000) /* Move loaded roms into place */ + ROM_FILL(0x30000, 0x4000, 0xFFFF) /* 00000 rom 0 Rear Cartridge bottom 16K */ /* 04000 rom 1 Rear Cartridge top 16K */ /* 08000 rom 2 Front Cartridge bottom 16K */ @@ -1659,18 +1950,58 @@ ROM_START(bbcmc_ar) ROM_END -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */ -COMP ( 1981, bbcb, 0, bbca, bbcb, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B", 0) -COMP ( 1981, bbca, bbcb, 0, bbca, bbca, bbc_state, bbc, "Acorn", "BBC Micro Model A", 0) -COMP ( 1981, bbcb_us, bbcb, 0, bbcb_us, bbcb, bbc_state, bbc, "Acorn", "Acorn Proton (US)", 0) -COMP ( 1981, bbcb_de, bbcb, 0, bbcb, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B (German)", 0) -COMP ( 1985, bbcbp, 0, bbcb, bbcbp, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B+ 64K", 0) -COMP ( 1985, bbcbp128, bbcbp, 0, bbcbp128, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B+ 128K", 0) -COMP ( 1986, bbcm, 0, bbcb, bbcm, bbcm, bbc_state, bbcm, "Acorn", "BBC Master 128", 0) -COMP ( 1986, bbcmt, bbcm, 0, bbcmt, bbcm, bbc_state, bbcm, "Acorn", "BBC Master Turbo", MACHINE_NOT_WORKING) -COMP ( 1986, bbcmaiv, bbcm, 0, bbcmaiv, bbcm, bbc_state, bbcm, "Acorn", "BBC Master AIV", MACHINE_NOT_WORKING) -COMP ( 1986, bbcmet, bbcm, 0, bbcmet, bbcm, bbc_state, bbcm, "Acorn", "BBC Master ET", 0) -COMP ( 1986, bbcm512, bbcm, 0, bbcm512, bbcm, bbc_state, bbcm, "Acorn", "BBC Master 512", MACHINE_NOT_WORKING) -COMP ( 1986, bbcmarm, bbcm, 0, bbcmarm, bbcm, bbc_state, bbcm, "Acorn", "ARM Evaluation System", MACHINE_NOT_WORKING) -COMP ( 1986, bbcmc, 0, bbcm, bbcmc, bbcm, bbc_state, bbcm, "Acorn", "BBC Master Compact", 0) -COMP ( 1986, bbcmc_ar, bbcmc, 0, bbcmc, bbcm, bbc_state, bbcm, "Acorn", "BBC Master Compact (Arabic)", 0) +ROM_START(pro128s) + ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF) /* ROM MEMORY */ + + ROM_REGION(0x44000, "option", 0) /* ROM */ + ROM_DEFAULT_BIOS("mos510o") + ROM_SYSTEM_BIOS(0, "mos510o", "Olivetti MOS 5.10") + ROMX_LOAD("mos510o.ic49", 0x30000, 0x10000, CRC(c16858d3) SHA1(ad231ed21a55e493b553703285530d1cacd3de7a), ROM_BIOS(1)) + ROM_COPY("option", 0x30000, 0x40000, 0x4000) /* Move loaded roms into place */ + ROM_FILL(0x30000, 0x4000, 0xFFFF) + /* 00000 rom 0 EXTERNAL */ + /* 04000 rom 1 EXTERNAL */ + /* 08000 rom 2 SPARE SOCKET */ + /* 0c000 rom 3 SPARE SOCKET */ + /* 10000 rom 4 SWRAM */ + /* 14000 rom 5 SWRAM */ + /* 18000 rom 6 SWRAM */ + /* 1c000 rom 7 SWRAM */ + /* 20000 rom 8 SPARE SOCKET */ + /* 24000 rom 9 UNUSED */ + /* 28000 rom 10 UNUSED */ + /* 2c000 rom 11 UNUSED */ + /* 30000 rom 12 UNUSED */ + /* 34000 rom 13 ADFS */ + /* 38000 rom 14 BASIC */ + /* 3c000 rom 15 Utils */ + + ROM_REGION(0x4000, "os", 0) + ROM_COPY("option", 0x40000, 0, 0x4000) + + // ROM_REGION(0x80,"eeprom",0) /* pcd8572 */ + /* Factory defaulted EEPROM, sets default language ROM, etc. */ + // ROM_LOAD("mos510o.epr", 0x00, 0x80, CRC(d8458039) SHA1(72c056d493e74ceca41f48936012b012b496a226)) +ROM_END + +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP ( 1981, bbcb, 0, bbca, bbcb, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B w/8271 FDC", MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1981, bbca, bbcb, 0, bbca, bbca, bbc_state, bbc, "Acorn", "BBC Micro Model A", MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1981, bbcb_de, bbcb, 0, bbcb_de, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B (German)", MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1983, bbcb_us, bbcb, 0, bbcb_us, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B (US)", MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1985, bbcb1770, bbcb, 0, bbcb1770, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B w/1770 FDC", MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1985, bbcbp, 0, bbcb, bbcbp, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B+ 64K", MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1985, bbcbp128, bbcbp, 0, bbcbp128, bbcb, bbc_state, bbc, "Acorn", "BBC Micro Model B+ 128K", MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1985, abc110, abc210, 0, abc110, abc, bbc_state, bbc, "Acorn", "ABC 110", MACHINE_NOT_WORKING) +COMP ( 1985, abc210, 0, 0, abc210, abc, bbc_state, bbc, "Acorn", "ABC 210/Cambridge Workstation", MACHINE_NOT_WORKING) +COMP ( 1985, abc310, abc210, 0, abc310, abc, bbc_state, bbc, "Acorn", "ABC 310", MACHINE_NOT_WORKING) +COMP ( 1985, reutapm, 0, 0, reutapm, bbcb, bbc_state, bbc, "Acorn", "Reuters APM", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) +COMP ( 1986, bbcm, 0, bbcb, bbcm, bbcm, bbc_state, bbc, "Acorn", "BBC Master 128", MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1986, bbcmt, bbcm, 0, bbcmt, bbcm, bbc_state, bbc, "Acorn", "BBC Master Turbo", MACHINE_NOT_WORKING) +COMP ( 1986, bbcmaiv, bbcm, 0, bbcmaiv, bbcm, bbc_state, bbc, "Acorn", "BBC Master AIV", MACHINE_NOT_WORKING) +COMP ( 1986, bbcmet, bbcm, 0, bbcmet, bbcm, bbc_state, bbc, "Acorn", "BBC Master ET", MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1986, bbcm512, bbcm, 0, bbcm512, bbcm, bbc_state, bbc, "Acorn", "BBC Master 512", MACHINE_NOT_WORKING) +COMP ( 1986, bbcmarm, bbcm, 0, bbcmarm, bbcm, bbc_state, bbc, "Acorn", "ARM Evaluation System", MACHINE_NOT_WORKING) +COMP ( 1986, bbcmc, 0, bbcm, bbcmc, bbcm, bbc_state, bbc, "Acorn", "BBC Master Compact", MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1986, bbcmc_ar, bbcmc, 0, bbcmc, bbcm, bbc_state, bbc, "Acorn", "BBC Master Compact (Arabic)", MACHINE_IMPERFECT_GRAPHICS) +COMP ( 1987, pro128s, bbcmc, 0, pro128s, bbcm, bbc_state, bbc, "Olivetti", "Prodest PC 128S", MACHINE_IMPERFECT_GRAPHICS) diff --git a/src/mess/includes/bbc.h b/src/mess/includes/bbc.h index 11bd1c13eb1..9f5dcb19327 100644 --- a/src/mess/includes/bbc.h +++ b/src/mess/includes/bbc.h @@ -22,6 +22,7 @@ #include "machine/i8271.h" #include "machine/wd_fdc.h" #include "machine/upd7002.h" +#include "machine/mc146818.h" #include "video/mc6845.h" #include "video/saa5050.h" #include "sound/sn76496.h" @@ -52,7 +53,10 @@ public: m_via6522_0(*this, "via6522_0"), m_via6522_1(*this, "via6522_1"), m_upd7002(*this, "upd7002"), + m_rtc(*this, "rtc"), m_i8271(*this, "i8271"), + m_wd1770(*this, "wd1770"), + m_wd1772(*this, "wd1772"), m_exp1(*this, "exp_rom1"), m_exp2(*this, "exp_rom2"), m_exp3(*this, "exp_rom3"), @@ -64,7 +68,6 @@ public: m_region_maincpu(*this, "maincpu"), m_region_os(*this, "os"), m_region_opt(*this, "option"), - m_region_dfs(*this, "dfs"), m_bank1(*this, "bank1"), m_bank2(*this, "bank2"), m_bank3(*this, "bank3"), @@ -80,7 +83,9 @@ public: m_palette(*this, "palette") { } - DECLARE_FLOPPY_FORMATS(floppy_formats); + DECLARE_FLOPPY_FORMATS(floppy_formats_525sd); + DECLARE_FLOPPY_FORMATS(floppy_formats_525dd); + DECLARE_FLOPPY_FORMATS(floppy_formats_35dd); DECLARE_WRITE8_MEMBER(bbc_page_selecta_w); DECLARE_WRITE8_MEMBER(bbc_memorya1_w); @@ -104,40 +109,34 @@ public: DECLARE_READ8_MEMBER(bbcm_r); DECLARE_WRITE8_MEMBER(bbcm_w); DECLARE_WRITE8_MEMBER(bbc_SerialULA_w); - DECLARE_READ8_MEMBER(bbc_i8271_read); - DECLARE_WRITE8_MEMBER(bbc_i8271_write); - DECLARE_WRITE8_MEMBER(bbc_wd177x_status_w); - DECLARE_READ8_MEMBER(bbc_wd1770_read); - DECLARE_WRITE8_MEMBER(bbc_wd1770_write); - DECLARE_WRITE8_MEMBER(bbc_opus_status_w); - DECLARE_READ8_MEMBER(bbc_opus_read); - DECLARE_WRITE8_MEMBER(bbc_opus_write); - DECLARE_READ8_MEMBER(bbcm_wd1770_read); - DECLARE_WRITE8_MEMBER(bbcm_wd1770_write); - DECLARE_READ8_MEMBER(bbcm_wd1770l_read); + + DECLARE_WRITE8_MEMBER(bbc_wd1770_status_w); + DECLARE_READ8_MEMBER(bbcm_wd177xl_read); DECLARE_WRITE8_MEMBER(bbcm_wd1770l_write); - DECLARE_READ8_MEMBER(bbc_disc_r); - DECLARE_WRITE8_MEMBER(bbc_disc_w); + DECLARE_WRITE8_MEMBER(bbcm_wd1772l_write); DECLARE_WRITE8_MEMBER(bbc_videoULA_w); - DECLARE_WRITE8_MEMBER(bbc_6845_w); - DECLARE_READ8_MEMBER(bbc_6845_r); DECLARE_READ8_MEMBER(bbc_fe_r); DECLARE_DIRECT_UPDATE_MEMBER(bbcbp_direct_handler); DECLARE_DIRECT_UPDATE_MEMBER(bbcm_direct_handler); + DECLARE_DRIVER_INIT(bbc); - DECLARE_DRIVER_INIT(bbcm); + DECLARE_MACHINE_START(bbca); DECLARE_MACHINE_RESET(bbca); DECLARE_VIDEO_START(bbca); + DECLARE_MACHINE_START(bbcb); DECLARE_MACHINE_RESET(bbcb); DECLARE_VIDEO_START(bbcb); + DECLARE_MACHINE_START(bbcbp); DECLARE_MACHINE_RESET(bbcbp); DECLARE_VIDEO_START(bbcbp); + DECLARE_MACHINE_START(bbcm); DECLARE_MACHINE_RESET(bbcm); DECLARE_VIDEO_START(bbcm); + DECLARE_PALETTE_INIT(bbc); UINT32 screen_update_bbc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(bbcb_vsync); @@ -197,13 +196,16 @@ public: // HACK FOR MC6845 optional_device m_trom; optional_device m_tms; optional_device m_cassette; - required_device m_acia; - required_device m_acia_clock; + optional_device m_acia; + optional_device m_acia_clock; optional_device m_rs232; required_device m_via6522_0; optional_device m_via6522_1; optional_device m_upd7002; + optional_device m_rtc; optional_device m_i8271; + optional_device m_wd1770; + optional_device m_wd1772; required_device m_exp1; required_device m_exp2; optional_device m_exp3; @@ -213,7 +215,6 @@ public: // HACK FOR MC6845 required_memory_region m_region_maincpu; required_memory_region m_region_os; required_memory_region m_region_opt; - optional_memory_region m_region_dfs; required_memory_bank m_bank1; // bbca bbcb bbcbp bbcbp128 bbcm optional_memory_bank m_bank2; // bbcbp bbcbp128 bbcm optional_memory_bank m_bank3; // bbca bbcb @@ -225,11 +226,8 @@ public: // HACK FOR MC6845 void check_interrupts(); - int m_DFSType; // this stores the DIP switch setting for the DFS type being used int m_SWRAMtype; // this stores the DIP switch setting for the SWRAM type being used int m_Speech; // this stores the CONF setting for Speech enabled/disabled - int m_Master; // if 0 then we are emulating a BBC B style machine - // if 1 then we are emulating a BBC Master style machine int m_ACCCON_IRR; // IRQ inputs @@ -347,7 +345,7 @@ public: // HACK FOR MC6845 i8271 disc control ***************************************/ - int m_previous_i8271_int_state; // 8271 interupt status + int m_previous_i8271_int_state; // 8271 interrupt status /************************************** WD1770 disc control @@ -357,13 +355,7 @@ public: // HACK FOR MC6845 int m_wd177x_irq_state; int m_wd177x_drq_state; int m_previous_wd177x_int_state; - int m_1770_IntEnabled; - - /************************************** - Opus Challenger Disc control - ***************************************/ - - int m_opusbank; + int m_177x_IntEnabled; /************************************** Video Code diff --git a/src/mess/machine/bbc.c b/src/mess/machine/bbc.c index d0a5572540e..2027a0f76c0 100644 --- a/src/mess/machine/bbc.c +++ b/src/mess/machine/bbc.c @@ -51,18 +51,10 @@ Model B memory handling functions *************************/ /* the model B address all 16 of the ROM sockets */ -/* I have set bank 1 as a special case to load different DFS roms selectable from MESS's CONF settings var:bbc_DFSTypes */ WRITE8_MEMBER(bbc_state::bbc_page_selectb_w) { m_rombank = data & 0x0f; - if (m_rombank != 1) - { - m_bank4->set_entry(m_rombank); - } - else - { - m_bank4->set_entry(0x10 + m_DFSType); - } + m_bank4->set_entry(m_rombank); } @@ -80,7 +72,7 @@ WRITE8_MEMBER(bbc_state::bbc_memoryb3_w) /* I have setup 3 types of sideways ram: 0: none -1: 128K (bank 8 to 15) Solidisc sidewaysram userport bank latch +1: 128K (bank 8 to 15) Solidisc sideways ram userport bank latch 2: 64K (banks 4 to 7) for Acorn sideways ram FE30 bank latch 3: 128K (banks 8 to 15) for Acown sideways ram FE30 bank latch */ @@ -90,19 +82,11 @@ static const unsigned short bbc_SWRAMtype3[16]={0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1} WRITE8_MEMBER(bbc_state::bbc_memoryb4_w) { - if (m_rombank == 1) + switch (m_SWRAMtype) { - // special DFS case for Acorn DFS E00 Hack that can write to the DFS RAM Bank; - if (m_DFSType == 3) m_region_dfs->base()[((m_DFSType) << 14) + offset] = data; - } - else - { - switch (m_SWRAMtype) - { - case 1: if (bbc_SWRAMtype1[m_userport]) m_region_opt->base()[(m_userport << 14) + offset] = data; - case 2: if (bbc_SWRAMtype2[m_rombank]) m_region_opt->base()[(m_rombank << 14) + offset] = data; - case 3: if (bbc_SWRAMtype3[m_rombank]) m_region_opt->base()[(m_rombank << 14) + offset] = data; - } + case 1: if (bbc_SWRAMtype1[m_userport]) m_region_opt->base()[(m_userport << 14) + offset] = data; + case 2: if (bbc_SWRAMtype2[m_rombank]) m_region_opt->base()[(m_rombank << 14) + offset] = data; + case 3: if (bbc_SWRAMtype3[m_rombank]) m_region_opt->base()[(m_rombank << 14) + offset] = data; } } @@ -377,7 +361,7 @@ WRITE8_MEMBER(bbc_state::bbcm_ACCCON_write) m_bank2->set_base(m_region_maincpu->base() + 0x3000); } - /* ACCCON_TST controls paging of rom reads in the 0xFC00-0xFEFF reigon */ + /* ACCCON_TST controls paging of rom reads in the 0xFC00-0xFEFF region */ /* if 0 the I/O is paged for both reads and writes */ /* if 1 the ROM is paged in for reads but writes still go to I/O */ if (m_ACCCON_TST) @@ -538,7 +522,7 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm7_w) &FE18-&FE1F uPD7002 A to D converter A to D converter 8 ( 4 bytes x 2 ) &FE20-&FE23 Video ULA - Video system chip 4 ( 2 bytes x 2 ) &FE24-&FE27 FDC Latch 1770 Control latch 1770 Control latch 4 ( 1 byte x 4 ) -&FE28-&FE2F 1770 registers 1770 Disc Controller 1170 Disc Controller 8 ( 4 bytes x 2 ) +&FE28-&FE2F 1770 registers 1770 Disc Controller 1770 Disc Controller 8 ( 4 bytes x 2 ) &FE30-&FE33 ROMSEL - ROM Select 4 ( 1 byte x 4 ) &FE34-&3FE7 ACCCON ACCCON select reg. ACCCON select reg 4 ( 1 byte x 4 ) &FE38-&FE3F NC - - @@ -554,12 +538,6 @@ READ8_MEMBER(bbc_state::bbcm_r) { long myo; - /* Now handled in bbcm_ACCCON_write PHS - 2008-10-11 */ -// if ( m_ACCCON_TST ) -// { -// return m_region_os->base()[offset + 0x3c00]; -// }; - if (offset<=0x0ff) /* FRED */ { return 0xff; @@ -573,30 +551,27 @@ READ8_MEMBER(bbc_state::bbcm_r) if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */ { myo = offset-0x200; - if ((myo>=0x00) && (myo<=0x07)) return bbc_6845_r(space, myo-0x00); /* Video Controller */ - if ((myo>=0x08) && (myo<=0x0f)) - { - if ((myo - 0x08) & 1) - return m_acia->status_r(space,0); - else - return m_acia->data_r(space,0); - } - if ((myo>=0x10) && (myo<=0x17)) return 0xfe; /* Serial System Chip */ - if ((myo>=0x18) && (myo<=0x1f)) return m_upd7002->read(space, myo-0x18); /* A to D converter */ - if ((myo>=0x20) && (myo<=0x23)) return 0xfe; /* VideoULA */ - if ((myo>=0x24) && (myo<=0x27)) return bbcm_wd1770l_read(space, myo-0x24); /* 1770 */ - if ((myo>=0x28) && (myo<=0x2f)) return bbcm_wd1770_read(space, myo-0x28); /* disc control latch */ - if ((myo>=0x30) && (myo<=0x33)) return 0xfe; /* page select */ - if ((myo>=0x34) && (myo<=0x37)) return bbcm_ACCCON_read(space, myo-0x34); /* ACCCON */ - if ((myo>=0x38) && (myo<=0x3f)) return 0xfe; /* NC ?? */ - if ((myo>=0x40) && (myo<=0x5f)) return m_via6522_0->read(space, myo-0x40); - if ((myo>=0x60) && (myo<=0x7f)) return m_via6522_1->read(space, myo-0x60); - if ((myo>=0x80) && (myo<=0x9f)) return 0xfe; - if ((myo>=0xa0) && (myo<=0xbf)) return m_adlc->read(space, myo & 0x03); - if ((myo>=0xc0) && (myo<=0xdf)) return 0xfe; - if ((myo>=0xe0) && (myo<=0xff)) return 0xfe; + if ((myo>=0x00) && (myo<=0x06) && (myo+0x01) & 1) return m_mc6845->status_r(space, myo-0x00); /* Video controller */ + if ((myo>=0x01) && (myo<=0x07) && (myo & 1)) return m_mc6845->register_r(space, myo-0x01); + if ((myo>=0x08) && (myo<=0x0e) && (myo+0x01) & 1) return m_acia ? m_acia->status_r(space, myo-0x08) : 0xfe; /* Serial controller */ + if ((myo>=0x09) && (myo<=0x0f) && (myo & 1)) return m_acia ? m_acia->data_r(space, myo-0x09) : 0xfe; + if ((myo>=0x10) && (myo<=0x17)) return 0xfe; /* Serial System Chip */ + if ((myo>=0x18) && (myo<=0x1f)) return m_upd7002 ? m_upd7002->read(space, myo-0x18) : 0xfe; /* A to D converter */ + if ((myo>=0x20) && (myo<=0x23)) return 0xfe; /* VideoULA */ + if ((myo>=0x24) && (myo<=0x27)) return bbcm_wd177xl_read(space, myo - 0x24); /* 177x Control Latch */ + if ((myo>=0x28) && (myo<=0x2f) && (m_wd1770)) return m_wd1770->read(space, myo-0x28); /* 1770 Controller */ + if ((myo>=0x28) && (myo<=0x2f) && (m_wd1772)) return m_wd1772->read(space, myo-0x28); /* 1772 Controller */ + if ((myo>=0x28) && (myo<=0x2f)) return 0xfe; /* No Controller */ + if ((myo>=0x30) && (myo<=0x33)) return 0xfe; + if ((myo>=0x34) && (myo<=0x37)) return bbcm_ACCCON_read(space, myo-0x34); /* ACCCON */ + if ((myo>=0x38) && (myo<=0x3f)) return 0xfe; /* NC ?? */ + if ((myo>=0x40) && (myo<=0x5f)) return m_via6522_0->read(space, myo-0x40); + if ((myo>=0x60) && (myo<=0x7f)) return m_via6522_1 ? m_via6522_1->read(space, myo-0x60) : 0xfe; + if ((myo>=0x80) && (myo<=0x9f)) return 0xfe; + if ((myo>=0xa0) && (myo<=0xbf)) return m_adlc ? m_adlc->read(space, myo & 0x03) : 0xfe; + if ((myo>=0xc0) && (myo<=0xdf)) return 0xfe; + if ((myo>=0xe0) && (myo<=0xff)) return 0xfe; } - return 0xfe; } @@ -607,26 +582,24 @@ WRITE8_MEMBER(bbc_state::bbcm_w) if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */ { myo=offset-0x200; - if ((myo>=0x00) && (myo<=0x07)) bbc_6845_w(space, myo-0x00, data); /* Video Controller */ - if ((myo>=0x08) && (myo<=0x0f)) - { - if ((myo - 0x08) & 1) - m_acia->control_w(space, 0, data); - else - m_acia->data_w(space, 0, data); - } - if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10, data); /* Serial System Chip */ - if ((myo>=0x18) && (myo<=0x1f)) m_upd7002->write(space, myo-0x18, data); /* A to D converter */ - if ((myo>=0x20) && (myo<=0x23)) bbc_videoULA_w(space, myo-0x20, data); /* VideoULA */ - if ((myo>=0x24) && (myo<=0x27)) bbcm_wd1770l_write(space, myo-0x24, data); /* 1770 */ - if ((myo>=0x28) && (myo<=0x2f)) bbcm_wd1770_write(space, myo-0x28, data); /* disc control latch */ - if ((myo>=0x30) && (myo<=0x33)) page_selectbm_w(space, myo-0x30, data); /* page select */ - if ((myo>=0x34) && (myo<=0x37)) bbcm_ACCCON_write(space, myo-0x34, data); /* ACCCON */ - //if ((myo>=0x38) && (myo<=0x3f)) /* NC ?? */ - if ((myo>=0x40) && (myo<=0x5f)) m_via6522_0->write(space, myo-0x40, data); - if ((myo>=0x60) && (myo<=0x7f)) m_via6522_1->write(space, myo-0x60, data); + if ((myo>=0x00) && (myo<=0x06) && (myo+0x01) & 1) m_mc6845->address_w(space, myo-0x00, data); /* Video Controller */ + if ((myo>=0x01) && (myo<=0x07) && (myo & 1)) m_mc6845->register_w(space, myo-0x01, data); + if ((myo>=0x08) && (myo<=0x0e) && (myo+0x01) & 1) if (m_acia) m_acia->control_w(space, myo-0x08, data); /* Serial controller */ + if ((myo>=0x09) && (myo<=0x0f) && (myo & 1)) if (m_acia) m_acia->data_w(space, myo-0x09, data); + if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10, data); /* Serial System Chip */ + if ((myo>=0x18) && (myo<=0x1f) && (m_upd7002)) m_upd7002->write(space, myo-0x18, data); /* A to D converter */ + if ((myo>=0x20) && (myo<=0x23)) bbc_videoULA_w(space, myo-0x20, data); /* VideoULA */ + if ((myo>=0x24) && (myo<=0x27) && (m_wd1770)) bbcm_wd1770l_write(space, myo-0x24, data); /* disc control latch */ + if ((myo>=0x28) && (myo<=0x2f) && (m_wd1770)) m_wd1770->write(space, myo-0x28, data); /* 1770 Controller */ + if ((myo>=0x24) && (myo<=0x27) && (m_wd1772)) bbcm_wd1772l_write(space, myo-0x24, data); /* disc control latch */ + if ((myo>=0x28) && (myo<=0x2f) && (m_wd1772)) m_wd1772->write(space, myo-0x28, data); /* 1772 Controller */ + if ((myo>=0x30) && (myo<=0x33)) page_selectbm_w(space, myo-0x30, data); /* ROMSEL */ + if ((myo>=0x34) && (myo<=0x37)) bbcm_ACCCON_write(space, myo-0x34, data); /* ACCCON */ + //if ((myo>=0x38) && (myo<=0x3f)) /* NC ?? */ + if ((myo>=0x40) && (myo<=0x5f)) m_via6522_0->write(space, myo-0x40, data); + if ((myo>=0x60) && (myo<=0x7f) && (m_via6522_1)) m_via6522_1->write(space, myo-0x60, data); //if ((myo>=0x80) && (myo<=0x9f)) - if ((myo>=0xa0) && (myo<=0xbf)) m_adlc->write(space, myo & 0x03, data); + if ((myo>=0xa0) && (myo<=0xbf) && (m_adlc)) m_adlc->write(space, myo & 0x03, data); //if ((myo>=0xc0) && (myo<=0xdf)) //if ((myo>=0xe0) && (myo<=0xff)) } @@ -665,18 +638,23 @@ These are the inputs from the joystick FIRE buttons. They are normally at logic 1 with no button pressed and change to 0 when a button is pressed. -PB6 and PB7 inputs from the speech processor --------------------------------------------- +PB6 and PB7 inputs from the speech processor (model B and B+) +------------------------------------------------------------- PB6 is the speech processor 'ready' output and PB7 is from the speech processor 'interrupt' output. +PB6 and PB7 outputs to Master CMOS RAM/RTC +------------------------------------------ +PB6 operates the 146818 chip enable when set to '1'. PB7 operates +the 146818 address strobe line. + CA1 input --------- This is the vertical sync input from the 6845. CA1 is set up to interrupt the 6502 every 20ms (50Hz) as a vertical sync from -the video circuity is detected. The operation system changes -the flash colours on the display in this interrupt time so that -they maintain synchronisation with the rest of the picture. +the video circuitry is detected. The operation system changes +the display flash colours on this interrupt so that they occur +during the screen blanking period. ---------------------------------------------------------------- This is required for a lot of time function within the machine and must be triggered every 20ms. (Should check at some point @@ -830,8 +808,8 @@ void bbc_state::bbcb_IC32_initialise(bbc_state *state) /* This the BBC Masters Real Time Clock and NVRAM IC */ void bbc_state::MC146818_set(address_space &space) { - logerror ("146181 WR=%d DS=%d AS=%d CE=%d \n",m_MC146818_WR,m_MC146818_DS,m_MC146818_AS,m_MC146818_CE); - mc146818_device *rtc = space.machine().device("rtc"); + //logerror ("146181 WR=%d DS=%d AS=%d CE=%d \n",m_MC146818_WR,m_MC146818_DS,m_MC146818_AS,m_MC146818_CE); + //mc146818_device *rtc = space.machine().device("rtc"); // if chip enabled if (m_MC146818_CE) @@ -841,12 +819,12 @@ void bbc_state::MC146818_set(address_space &space) { if (m_MC146818_WR) { - m_via_system_porta=rtc->read(space, 1); + m_via_system_porta = m_rtc->read(space, 1); //logerror("read 146818 data %d \n",m_via_system_porta); } else { - rtc->write(space, 1, m_via_system_porta); + m_rtc->write(space, 1, m_via_system_porta); //logerror("write 146818 data %d \n",m_via_system_porta); } } @@ -854,7 +832,7 @@ void bbc_state::MC146818_set(address_space &space) // if address select is set then set the address in the 146818 if (m_MC146818_AS) { - rtc->write(space, 0, m_via_system_porta); + m_rtc->write(space, 0, m_via_system_porta); //logerror("write 146818 address %d \n",m_via_system_porta); } } @@ -869,14 +847,24 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_porta) if (m_b0_sound == 0) { //logerror("Doing an unsafe write to the sound chip %d \n",data); - m_sn->write(space, 0, m_via_system_porta); + if (m_sn) m_sn->write(space, 0, m_via_system_porta); + } + if (m_b1_speech_read == 0) + { + if (m_tms) m_via_system_porta = m_tms->status_r(space, 0); + //logerror("Doing an unsafe read to the speech chip %d \n",m_via_system_porta); + } + if (m_b2_speech_write == 0) + { + //logerror("Doing an unsafe write to the speech chip %d \n",data); + if (m_tms) m_tms->data_w(space, 0, m_via_system_porta); } if (m_b3_keyboard == 0) { //logerror("Doing an unsafe write to the keyboard %d \n",data); m_via_system_porta = bbc_keyboard(space, m_via_system_porta); } - if (m_Master) MC146818_set(space); + if (m_rtc) MC146818_set(space); } @@ -899,14 +887,11 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb) } break; case 1: - if (m_Master) + if (m_rtc && m_MC146818_WR == 0) { - if (m_MC146818_WR == 0) - { - /* BBC MASTER has NVRAM Here */ - m_MC146818_WR = 1; - MC146818_set(space); - } + /* BBC Master has NVRAM Here */ + m_MC146818_WR = 1; + MC146818_set(space); } else { @@ -914,18 +899,17 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb) { /* VSP TMS 5220 */ m_b1_speech_read = 1; + //logerror("Speech read select TRUE\n"); + if (m_tms) m_tms->rsq_w(TRUE); } } break; case 2: - if (m_Master) + if (m_rtc && m_MC146818_DS == 0) { - if (m_MC146818_DS == 0) - { - /* BBC MASTER has NVRAM Here */ - m_MC146818_DS = 1; - MC146818_set(space); - } + /* BBC Master has NVRAM Here */ + m_MC146818_DS = 1; + MC146818_set(space); } else { @@ -933,6 +917,8 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb) { /* VSP TMS 5220 */ m_b2_speech_write = 1; + //logerror("Speech write select TRUE\n"); + if (m_tms) m_tms->wsq_w(TRUE); } } break; @@ -980,18 +966,15 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb) if (m_b0_sound == 1) { m_b0_sound = 0; - m_sn->write(space, 0, m_via_system_porta); + if (m_sn) m_sn->write(space, 0, m_via_system_porta); } break; case 1: - if (m_Master) + if (m_rtc && m_MC146818_WR == 1) { - if (m_MC146818_WR == 1) - { - /* BBC MASTER has NV RAM Here */ - m_MC146818_WR = 0; - MC146818_set(space); - } + /* BBC Master has NVRAM Here */ + m_MC146818_WR = 0; + MC146818_set(space); } else { @@ -999,18 +982,17 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb) { /* VSP TMS 5220 */ m_b1_speech_read = 0; + //logerror("Speech read select FALSE\n"); + if (m_tms) m_tms->rsq_w(FALSE); } } break; case 2: - if (m_Master) + if (m_rtc && m_MC146818_DS == 1) { - if (m_MC146818_DS == 1) - { - /* BBC MASTER has NV RAM Here */ - m_MC146818_DS = 0; - MC146818_set(space); - } + /* BBC Master has NVRAM Here */ + m_MC146818_DS = 0; + MC146818_set(space); } else { @@ -1018,6 +1000,8 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb) { /* VSP TMS 5220 */ m_b2_speech_write = 0; + //logerror("Speech write select FALSE\n"); + if (m_tms) m_tms->wsq_w(FALSE); } } break; @@ -1026,7 +1010,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb) { m_b3_keyboard = 0; /* *** call keyboard enabled *** */ - m_via_system_porta=bbc_keyboard(space, m_via_system_porta); + m_via_system_porta = bbc_keyboard(space, m_via_system_porta); } break; case 4: @@ -1061,7 +1045,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb) } - if (m_Master) + if (m_rtc) { //set the Address Select if (m_MC146818_AS != ((data>>7)&1)) @@ -1086,33 +1070,18 @@ READ8_MEMBER(bbc_state::bbcb_via_system_read_porta) return m_via_system_porta; } -// D4 of portb is joystick fire button 1 -// D5 of portb is joystick fire button 2 -// D6 VSPINT -// D7 VSPRDY - -/* this is the interupt and ready signal from the BBC B Speech processor */ -static const int TMSint=1; -static const int TMSrdy=1; - -#ifdef UNUSED_FUNCTION -void bbc_state::bbc_TMSint(int status) -{ - TMSint=(!status)&1; - TMSrdy=(!tms5220_readyq_r())&1; - via_0_portb_w(0,(0xf | ioport("IN0")->read()|(TMSint<<6)|(TMSrdy<<7))); -} -#endif - READ8_MEMBER(bbc_state::bbcb_via_system_read_portb) { - //TMSint=(!tms5220_int_r())&1; - //TMSrdy=(!tms5220_readyq_r())&1; - - //logerror("SYSTEM read portb %d\n",0xf | input_port(machine, "IN0") | (TMSint<<6)|(TMSrdy<<7)); - - return (0xf | ioport("IN0")->read() | (TMSint<<6)|(TMSrdy<<7)); + // D4 of portb is joystick fire button 1 + // D5 of portb is joystick fire button 2 + // D6 VSPINT + // D7 VSPRDY + int TMSint = m_tms ? m_tms->intq_r() : 0; + int TMSrdy = m_tms ? m_tms->readyq_r() : 0; + //logerror("TMSint %d\n",TMSint); + //logerror("TMSrdy %d\n",TMSrdy); + return (0xf | ioport("IN0")->read() | (!TMSrdy << 7) | (!TMSint << 6)); } @@ -1129,7 +1098,7 @@ Port A output is buffered before being connected to the printer connector. This means that they can only be operated as output lines. CA1 is pulled high by a 4K7 resistor. CA1 normally acts as an acknowledge line when a printer is used. CA2 is buffered so that it has become an open -collector output only. It usially acts as the printer strobe line. +collector output only. It usually acts as the printer strobe line. ***********************************************************************/ /* USER VIA 6522 port B is connected to the BBC user port */ @@ -1430,7 +1399,7 @@ WRITE8_MEMBER(bbc_state::bbc_SerialULA_w) update_acia_rxd(); update_acia_dcd(); update_acia_cts(); - BBC_Cassette_motor(m_serproc_data & 0x80); + if (m_cassette) BBC_Cassette_motor(m_serproc_data & 0x80); // Set transmit clock rate m_acia_clock->set_clock_scale( (double) 1 / serial_clocks[ data & 0x07 ] ); @@ -1463,7 +1432,7 @@ WRITE_LINE_MEMBER(bbc_state::bbc_i8271_interrupt) { /* I'll pulse it because if I used hold-line I'm not sure it would clear - to be checked */ - m_maincpu->set_input_line(INPUT_LINE_NMI,PULSE_LINE); + m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } } @@ -1471,55 +1440,6 @@ WRITE_LINE_MEMBER(bbc_state::bbc_i8271_interrupt) } -READ8_MEMBER(bbc_state::bbc_i8271_read) -{ - int ret; - logerror("i8271 read %d ",offset); - switch (offset) - { - case 0: - case 1: - case 2: - case 3: - /* 8271 registers */ - ret=m_i8271->read(space, offset); - logerror(" %d\n",ret); - break; - case 4: - ret=m_i8271->data_r(space, offset); - logerror(" %d\n",ret); - break; - default: - ret=0x0ff; - break; - } - logerror(" void\n"); - return ret; -} - -WRITE8_MEMBER(bbc_state::bbc_i8271_write) -{ - logerror("i8271 write %d %d\n",offset,data); - - switch (offset) - { - case 0: - case 1: - case 2: - case 3: - /* 8271 registers */ - m_i8271->write(space, offset, data); - return; - case 4: - m_i8271->data_w(space, offset, data); - return; - default: - break; - } -} - - - /************************************** WD1770 disc control function ***************************************/ @@ -1543,9 +1463,6 @@ WRITE8_MEMBER(bbc_state::bbc_i8271_write) density select single density is as the 8271 disc format double density is as the 8271 disc format but with 16 sectors per track - -At some point we need to check the size of the disc image to work out if it is a single or double -density disc image */ @@ -1566,7 +1483,7 @@ void bbc_state::bbc_update_fdq_int(int state) int bbc_state; /* if drq or irq is set, and interrupt is enabled */ - if ((m_wd177x_irq_state || m_wd177x_drq_state) && (m_1770_IntEnabled)) + if ((m_wd177x_irq_state || m_wd177x_drq_state) && (m_177x_IntEnabled)) { /* int trigger */ bbc_state = 1; @@ -1576,10 +1493,9 @@ void bbc_state::bbc_update_fdq_int(int state) /* do not trigger int */ bbc_state = 0; } -//printf("bbc_state %d prev %d\n", bbc_state, m_previous_wd177x_int_state); /* nmi is edge triggered, and triggers when the state goes from clear->set. Here we are checking this transition before triggering the nmi */ - if (bbc_state!=m_previous_wd177x_int_state) + if (bbc_state != m_previous_wd177x_int_state) { if (bbc_state) { @@ -1594,7 +1510,6 @@ void bbc_state::bbc_update_fdq_int(int state) WRITE_LINE_MEMBER(bbc_state::bbc_wd177x_intrq_w) { -//printf("bbc_wd177x_intrq_w %d \n", state); m_wd177x_irq_state = state; bbc_update_fdq_int(state); } @@ -1605,358 +1520,93 @@ WRITE_LINE_MEMBER(bbc_state::bbc_wd177x_drq_w) bbc_update_fdq_int(state); } -WRITE8_MEMBER(bbc_state::bbc_wd177x_status_w) +WRITE8_MEMBER(bbc_state::bbc_wd1770_status_w) { - wd1770_t *fdc = machine().device("wd177x"); - floppy_image_device *floppy0 = machine().device("wd177x:0")->get_device(); - floppy_image_device *floppy1 = machine().device("wd177x:1")->get_device(); floppy_image_device *floppy = NULL; m_drive_control = data; + logerror("Drive control %d \n", data); + + // bit 5: reset + if (!BIT(data, 5)) m_wd1770->reset(); // bit 0, 1: drive select - if (BIT(data, 0)) floppy = floppy0; - if (BIT(data, 1)) floppy = floppy1; - - fdc->set_floppy(floppy); + if (BIT(data, 0)) floppy = m_wd1770->subdevice("0")->get_device(); + if (BIT(data, 1)) floppy = m_wd1770->subdevice("1")->get_device(); + m_wd1770->set_floppy(floppy); // bit 2: side select if (floppy) floppy->ss_w(BIT(data, 2)); // bit 3: density - fdc->dden_w(BIT(data, 3)); + m_wd1770->dden_w(BIT(data, 3)); // bit 4: interrupt enable - m_1770_IntEnabled = !BIT(data, 4); + m_177x_IntEnabled = !BIT(data, 4); } - - -READ8_MEMBER(bbc_state::bbc_wd1770_read) -{ - int retval=0xff; - wd1770_t *fdc = machine().device("wd177x"); - switch (offset) - { - case 4: - retval=fdc->status_r(space, 0); - break; - case 5: - retval=fdc->track_r(space, 0); - break; - case 6: - retval=fdc->sector_r(space, 0); - break; - case 7: - retval=fdc->data_r(space, 0); - break; - default: - break; - } - //logerror("wd177x read: $%02X $%02X\n", offset,retval); - - return retval; -} - -WRITE8_MEMBER(bbc_state::bbc_wd1770_write) -{ - wd1770_t *fdc = machine().device("wd177x"); - //logerror("wd177x write: $%02X $%02X\n", offset,data); - switch (offset) - { - case 0: - bbc_wd177x_status_w(space, 0, data); - break; - case 4: - fdc->cmd_w(space, 0, data); - break; - case 5: - fdc->track_w(space, 0, data); - break; - case 6: - fdc->sector_w(space, 0, data); - break; - case 7: - fdc->data_w(space, 0, data); - break; - default: - break; - } -} - - -/********************************************* -OPUS CHALLENGER MEMORY MAP - Read Write - -&FCF8 1770 Status register 1770 command register -&FCF9 1770 track register -&FCFA 1770 sector register -&FCFB 1770 data register -&FCFC 1770 drive control - - -drive control register bits -0 select side 0= side 0 1= side 1 -1 select drive 0 -2 select drive 1 -3 ?unused? -4 ?Always Set -5 Density Select 0=double, 1=single -6 ?unused? -7 ?unused? - -The RAM is accessible through JIM (page &FD). One page is visible in JIM at a time. -The selected page is controlled by the two paging registers: - -&FCFE Paging register MSB -&FCFF Paging register LSB - -256K model has 1024 pages &000 to &3ff -512K model has 2048 pages &000 to &7ff - -AM_RANGE(0xfc00, 0xfdff) AM_READWRITE(bbc_opus_read , bbc_opus_write ) - - -**********************************************/ - - -WRITE8_MEMBER(bbc_state::bbc_opus_status_w) -{ - wd1770_t *fdc = machine().device("wd177x"); - floppy_image_device *floppy0 = machine().device("wd177x:0")->get_device(); - floppy_image_device *floppy1 = machine().device("wd177x:1")->get_device(); - floppy_image_device *floppy = NULL; - - m_drive_control = data; - - // bit 1, 2: drive select - if (BIT(data, 1)) floppy = floppy0; - if (BIT(data, 2)) floppy = floppy1; - - fdc->set_floppy(floppy); - - // bit 0: side select - if (floppy) - floppy->ss_w(BIT(data, 0)); - - // bit 5: density - fdc->dden_w(BIT(data, 5)); - - // bit 4: interrupt enable - m_1770_IntEnabled = BIT(data, 4); -} - -READ8_MEMBER(bbc_state::bbc_opus_read) -{ - wd1770_t *fdc = machine().device("wd177x"); - //logerror("wd177x read: $%02X\n", offset); - - if (m_DFSType==6) - { - if (offset<0x100) - { - switch (offset) - { - case 0xf8: - return fdc->status_r(space, 0); - case 0xf9: - return fdc->track_r(space, 0); - case 0xfa: - return fdc->sector_r(space, 0); - case 0xfb: - return fdc->data_r(space, 0); - } - } - else - { - return memregion("disks")->base()[offset + (m_opusbank << 8)]; - } - } - return 0xff; -} - -WRITE8_MEMBER(bbc_state::bbc_opus_write) -{ - wd1770_t *fdc = machine().device("wd177x"); - //logerror("wd177x write: $%02X $%02X\n", offset,data); - - if (m_DFSType==6) - { - if (offset<0x100) - { - switch (offset) - { - case 0xf8: - fdc->cmd_w(space, 0, data); - break; - case 0xf9: - fdc->track_w(space, 0, data); - break; - case 0xfa: - fdc->sector_w(space, 0, data); - break; - case 0xfb: - fdc->data_w(space, 0, data); - break; - case 0xfc: - bbc_opus_status_w(space, 0,data); - break; - case 0xfe: - m_opusbank=(m_opusbank & 0xff) | (data<<8); - break; - case 0xff: - m_opusbank=(m_opusbank & 0xff00) | data; - break; - } - } - else - { - memregion("disks")->base()[offset + (m_opusbank << 8)] = data; - } - } -} - - /*************************************** BBC MASTER DISC SUPPORT ***************************************/ - -READ8_MEMBER(bbc_state::bbcm_wd1770_read) -{ - int retval=0xff; - wd1770_t *fdc = machine().device("wd177x"); - switch (offset) - { - case 0: - retval=fdc->status_r(space, 0); - break; - case 1: - retval=fdc->track_r(space, 0); - break; - case 2: - retval=fdc->sector_r(space, 0); - break; - case 3: - retval=fdc->data_r(space, 0); - break; - default: - break; - } - return retval; -} - - -WRITE8_MEMBER(bbc_state::bbcm_wd1770_write) -{ - wd1770_t *fdc = machine().device("wd177x"); - //logerror("wd177x write: $%02X $%02X\n", offset,data); - switch (offset) - { - case 0: - fdc->cmd_w(space, 0, data); - break; - case 1: - fdc->track_w(space, 0, data); - break; - case 2: - fdc->sector_w(space, 0, data); - break; - case 3: - fdc->data_w(space, 0, data); - break; - default: - break; - } -} - - -READ8_MEMBER(bbc_state::bbcm_wd1770l_read) +READ8_MEMBER(bbc_state::bbcm_wd177xl_read) { return m_drive_control; } WRITE8_MEMBER(bbc_state::bbcm_wd1770l_write) { - wd1770_t *fdc = machine().device("wd177x"); - floppy_image_device *floppy0 = machine().device("wd177x:0")->get_device(); - floppy_image_device *floppy1 = machine().device("wd177x:1")->get_device(); floppy_image_device *floppy = NULL; m_drive_control = data; + //logerror("Drive control %d \n", data); - // bit 0, 1: drive select - if (BIT(data, 0)) floppy = floppy0; - if (BIT(data, 1)) floppy = floppy1; + // bit 2: reset + if (!BIT(data, 5)) m_wd1770->reset(); + + // bit 0, 1, 3: drive select + if (BIT(data, 0)) floppy = m_wd1770->subdevice("0")->get_device(); + if (BIT(data, 1)) floppy = m_wd1770->subdevice("1")->get_device(); + if (BIT(data, 3)) floppy = m_wd1770->subdevice("2")->get_device(); + m_wd1770->set_floppy(floppy); // bit 4: side select if (floppy) floppy->ss_w(BIT(data, 4)); // bit 5: density - fdc->dden_w(BIT(data, 5)); + m_wd1770->dden_w(BIT(data, 5)); -// m_1770_IntEnabled=(((data>>4) & 0x01)==0); - m_1770_IntEnabled=1; + m_177x_IntEnabled = 1; } - -/************************************** -DFS Hardware mapping for different Disc Controller types -***************************************/ - -READ8_MEMBER(bbc_state::bbc_disc_r) +WRITE8_MEMBER(bbc_state::bbcm_wd1772l_write) { - switch (m_DFSType){ - /* case 0 to 3 are all standard 8271 interfaces */ - case 0: case 1: case 2: case 3: - return bbc_i8271_read(space, offset); - /* case 4 is the acorn 1770 interface */ - case 4: - return bbc_wd1770_read(space, offset); - /* case 5 is the watford 1770 interface */ - case 5: - return bbc_wd1770_read(space, offset); - /* case 6 is the Opus challenger interface */ - case 6: - /* not connected here, opus drive is connected via the 1MHz Bus */ - break; - /* case 7 in no disc controller */ - case 7: - break; - } - return 0x0ff; + floppy_image_device *floppy = NULL; + + m_drive_control = data; + //logerror("Drive control %d \n", data); + + // bit 2: reset + if (!BIT(data, 5)) m_wd1772->reset(); + + // bit 0, 1, 3: drive select + if (BIT(data, 0)) floppy = m_wd1772->subdevice("0")->get_device(); + if (BIT(data, 1)) floppy = m_wd1772->subdevice("1")->get_device(); + if (BIT(data, 3)) floppy = m_wd1772->subdevice("2")->get_device(); + m_wd1772->set_floppy(floppy); + + // bit 4: side select + if (floppy) + floppy->ss_w(BIT(data, 4)); + + // bit 5: density + m_wd1772->dden_w(BIT(data, 5)); + + m_177x_IntEnabled = 1; } -WRITE8_MEMBER(bbc_state::bbc_disc_w) -{ - switch (m_DFSType){ - /* case 0 to 3 are all standard 8271 interfaces */ - case 0: case 1: case 2: case 3: - bbc_i8271_write(space, offset,data); - break; - /* case 4 is the acorn 1770 interface */ - case 4: - bbc_wd1770_write(space, offset,data); - break; - /* case 5 is the watford 1770 interface */ - case 5: - bbc_wd1770_write(space, offset,data); - break; - /* case 6 is the Opus challenger interface */ - case 6: - /* not connected here, opus drive is connected via the 1MHz Bus */ - break; - /* case 7 in no disc controller */ - case 7: - break; - } -} - - - /************************************** BBC B Rom loading functions ***************************************/ @@ -2023,23 +1673,6 @@ int bbc_state::bbcm_load_cart(device_image_interface &image, generic_slot_device DRIVER_INIT_MEMBER(bbc_state,bbc) { - m_Master=0; - m_rxd_cass = 0; - m_nr_high_tones = 0; - m_serproc_data = 0; - m_cass_out_enabled = 0; - m_tape_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bbc_state::bbc_tape_timer_cb),this)); - - /* vertical sync pulse from video circuit */ - m_via6522_0->write_ca1(1); - - /* light pen strobe detect (not emulated) */ - m_via6522_0->write_cb2(1); -} - -DRIVER_INIT_MEMBER(bbc_state,bbcm) -{ - m_Master=1; m_rxd_cass = 0; m_nr_high_tones = 0; m_serproc_data = 0; @@ -2076,10 +1709,10 @@ void bbc_state::bbc_setup_banks(memory_bank *membank, int banks, UINT32 shift, U else eprom[3] = m_region_opt->base() + 0xc000 + shift; - membank->configure_entries(0, 1, eprom[0], size); - membank->configure_entries(1, 1, eprom[1], size); - membank->configure_entries(2, 1, eprom[2], size); - membank->configure_entries(3, 1, eprom[3], size); + membank->configure_entries(0, 1, eprom[0], size); + membank->configure_entries(1, 1, eprom[1], size); + membank->configure_entries(2, 1, eprom[2], size); + membank->configure_entries(3, 1, eprom[3], size); if (banks > 4) { @@ -2102,10 +1735,10 @@ void bbc_state::bbcm_setup_banks(memory_bank *membank, int banks, UINT32 shift, else eprom[1] = m_region_opt->base() + 0x8000 + shift; - membank->configure_entries(0, 1, eprom[0], size); - membank->configure_entries(1, 1, eprom[0] + 0x4000, size); - membank->configure_entries(2, 1, eprom[1], size); - membank->configure_entries(3, 1, eprom[1] + 0x4000, size); + membank->configure_entries(0, 1, eprom[0], size); + membank->configure_entries(1, 1, eprom[0] + 0x4000, size); + membank->configure_entries(2, 1, eprom[1], size); + membank->configure_entries(3, 1, eprom[1] + 0x4000, size); if (banks > 4) { @@ -2149,14 +1782,12 @@ MACHINE_START_MEMBER(bbc_state, bbcb) m_previous_i8271_int_state=0; m_previous_wd177x_int_state=1; bbc_setup_banks(m_bank4, 16, 0, 0x4000); - if (m_region_dfs) - m_bank4->configure_entries(16, 8, m_region_dfs->base(), 0x4000); // additional bank for paged ram } MACHINE_RESET_MEMBER(bbc_state, bbcb) { UINT8 *RAM = m_region_maincpu->base(); - m_DFSType= (ioport("BBCCONFIG")->read() >> 0) & 0x07; + m_Speech = (ioport("BBCCONFIG")->read() >> 0) & 0x01; m_SWRAMtype = (ioport("BBCCONFIG")->read() >> 3) & 0x03; m_bank1->set_base(RAM); m_bank3->set_base(RAM + 0x4000); @@ -2166,8 +1797,6 @@ MACHINE_RESET_MEMBER(bbc_state, bbcb) m_bank7->set_base(m_region_os->base()); /* bank 7 points at the OS rom from c000 to ffff */ bbcb_IC32_initialise(this); - - m_opusbank = 0; } @@ -2184,11 +1813,12 @@ MACHINE_START_MEMBER(bbc_state, bbcbp) MACHINE_RESET_MEMBER(bbc_state, bbcbp) { + m_Speech = 1; m_bank1->set_base(m_region_maincpu->base()); m_bank2->set_base(m_region_maincpu->base() + 0x03000); /* bank 2 screen/shadow ram from 3000 to 7fff */ m_bank4->set_entry(0); m_bank6->set_entry(0); - m_bank7->set_base(m_region_os->base()); /* bank 7 points at the OS rom from c000 to ffff */ + m_bank7->set_base(m_region_os->base()); /* bank 7 points at the OS rom from c000 to ffff */ bbcb_IC32_initialise(this); @@ -2217,7 +1847,7 @@ MACHINE_RESET_MEMBER(bbc_state, bbcm) m_bank2->set_base(m_region_maincpu->base() + 0x3000); /* bank 2 screen/shadow ram from 3000 to 7fff */ m_bank4->set_entry(0); m_bank5->set_entry(0); - m_bank7->set_base(m_region_os->base()); /* bank 6 OS rom of RAM from c000 to dfff */ + m_bank7->set_base(m_region_os->base()); /* bank 6 OS rom of RAM from c000 to dfff */ bbcb_IC32_initialise(this); diff --git a/src/mess/video/bbc.c b/src/mess/video/bbc.c index 8297f4cacaf..5e059647705 100644 --- a/src/mess/video/bbc.c +++ b/src/mess/video/bbc.c @@ -99,8 +99,7 @@ static const int width_of_cursor_set[8]={ 0,0,1,2,1,0,2,4 }; this is used by the palette lookup in the video ULA */ void bbc_state::set_pixel_lookup() { - int i; - for (i=0; i<256; i++) + for (int i=0; i<256; i++) { m_pixel_bits[i] = (((i>>7)&1)<<3) | (((i>>5)&1)<<2) | (((i>>3)&1)<<1) | (((i>>1)&1)<<0); } @@ -254,37 +253,6 @@ WRITE_LINE_MEMBER(bbc_state::bbc_vsync) m_trom->dew_w(state); } -/************************************************************************ - * memory interface to BBC's 6845 - ************************************************************************/ - -WRITE8_MEMBER(bbc_state::bbc_6845_w) -{ - switch(offset & 1) - { - case 0 : - m_mc6845->address_w(space,0,data); - break; - case 1 : - m_mc6845->register_w(space,0,data); - break; - } - return; -} - -READ8_MEMBER(bbc_state::bbc_6845_r) -{ - switch (offset&1) - { - case 0: return m_mc6845->status_r(space,0); - case 1: return m_mc6845->register_r(space,0); - } - return 0; -} - - - - /**** BBC B+ Shadow Ram change ****/ @@ -319,7 +287,7 @@ void bbc_state::common_init(int memorySize) VIDEO_START_MEMBER(bbc_state,bbca) { - common_init(16); + common_init(m_ram->size()/1024); } VIDEO_START_MEMBER(bbc_state,bbcb)