summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess
diff options
context:
space:
mode:
author Nigel Barnes <Pernod70@users.noreply.github.com>2015-09-07 09:46:21 +0100
committer Nigel Barnes <Pernod70@users.noreply.github.com>2015-09-07 09:49:14 +0100
commitc0e72ea08dfb0ba8a93bd9e09d58de7b361ef31f (patch)
treeb4c0979f795852124e734fedd0127a34e09fab45 /src/mess
parent3227c85ed64e08ad1cc1d61d22e8e8556f56d043 (diff)
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.
Diffstat (limited to 'src/mess')
-rw-r--r--src/mess/drivers/bbc.c939
-rw-r--r--src/mess/includes/bbc.h56
-rw-r--r--src/mess/machine/bbc.c700
-rw-r--r--src/mess/video/bbc.c36
4 files changed, 826 insertions, 905 deletions
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") 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) */
+ADDRESS_MAP_END
- 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)
+
+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_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_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 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_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 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_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
+
+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
-static SLOT_INTERFACE_START( bbc_floppies )
+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)
+
+ /* fdc */
+ MCFG_DEVICE_REMOVE("i8271")
+ MCFG_DEVICE_REMOVE(FLOPPY_0)
+ MCFG_DEVICE_REMOVE(FLOPPY_1)
- MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcb )
- MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcb )
- MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcb )
+ 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))
- /* internal ram */
- MCFG_RAM_MODIFY(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("32K")
- MCFG_RAM_DEFAULT_VALUE(0x00)
+ 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
- /* speech hardware */
-// MCFG_SOUND_ADD("tms5220", TMS5220, 640000)
-// MCFG_TMS52XX_SPEECHROM("vsm")
+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 )
+/***************************************************************************
+
+ BBC Master Compact
-// MCFG_DEVICE_REMOVE("rtc")
+****************************************************************************/
+
+
+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<saa5050_device> m_trom;
optional_device<tms5220_device> m_tms;
optional_device<cassette_image_device> m_cassette;
- required_device<acia6850_device> m_acia;
- required_device<clock_device> m_acia_clock;
+ optional_device<acia6850_device> m_acia;
+ optional_device<clock_device> m_acia_clock;
optional_device<rs232_port_device> m_rs232;
required_device<via6522_device> m_via6522_0;
optional_device<via6522_device> m_via6522_1;
optional_device<upd7002_device> m_upd7002;
+ optional_device<mc146818_device> m_rtc;
optional_device<i8271_device> m_i8271;
+ optional_device<wd1770_t> m_wd1770;
+ optional_device<wd1772_t> m_wd1772;
required_device<generic_slot_device> m_exp1;
required_device<generic_slot_device> m_exp2;
optional_device<generic_slot_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<mc146818_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<mc146818_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<wd1770_t>("wd177x");
- floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device();
- floppy_image_device *floppy1 = machine().device<floppy_connector>("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 5: reset
+ if (!BIT(data, 5)) m_wd1770->reset();
- fdc->set_floppy(floppy);
+ // bit 0, 1: drive select
+ if (BIT(data, 0)) floppy = m_wd1770->subdevice<floppy_connector>("0")->get_device();
+ if (BIT(data, 1)) floppy = m_wd1770->subdevice<floppy_connector>("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);
}
+/***************************************
+BBC MASTER DISC SUPPORT
+***************************************/
-
-READ8_MEMBER(bbc_state::bbc_wd1770_read)
-{
- int retval=0xff;
- wd1770_t *fdc = machine().device<wd1770_t>("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)
+READ8_MEMBER(bbc_state::bbcm_wd177xl_read)
{
- wd1770_t *fdc = machine().device<wd1770_t>("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;
- }
+ return m_drive_control;
}
-
-/*********************************************
-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)
+WRITE8_MEMBER(bbc_state::bbcm_wd1770l_write)
{
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
- floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device();
- floppy_image_device *floppy1 = machine().device<floppy_connector>("wd177x:1")->get_device();
floppy_image_device *floppy = NULL;
m_drive_control = data;
+ //logerror("Drive control %d \n", data);
- // bit 1, 2: drive select
- if (BIT(data, 1)) floppy = floppy0;
- if (BIT(data, 2)) floppy = floppy1;
+ // bit 2: reset
+ if (!BIT(data, 5)) m_wd1770->reset();
- fdc->set_floppy(floppy);
+ // bit 0, 1, 3: drive select
+ if (BIT(data, 0)) floppy = m_wd1770->subdevice<floppy_connector>("0")->get_device();
+ if (BIT(data, 1)) floppy = m_wd1770->subdevice<floppy_connector>("1")->get_device();
+ if (BIT(data, 3)) floppy = m_wd1770->subdevice<floppy_connector>("2")->get_device();
+ m_wd1770->set_floppy(floppy);
- // bit 0: side select
+ // bit 4: side select
if (floppy)
- floppy->ss_w(BIT(data, 0));
+ floppy->ss_w(BIT(data, 4));
// 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<wd1770_t>("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;
-}
+ m_wd1770->dden_w(BIT(data, 5));
-WRITE8_MEMBER(bbc_state::bbc_opus_write)
-{
- wd1770_t *fdc = machine().device<wd1770_t>("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;
- }
- }
+ m_177x_IntEnabled = 1;
}
-
-/***************************************
-BBC MASTER DISC SUPPORT
-***************************************/
-
-
-READ8_MEMBER(bbc_state::bbcm_wd1770_read)
+WRITE8_MEMBER(bbc_state::bbcm_wd1772l_write)
{
- int retval=0xff;
- wd1770_t *fdc = machine().device<wd1770_t>("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<wd1770_t>("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)
-{
- return m_drive_control;
-}
-
-WRITE8_MEMBER(bbc_state::bbcm_wd1770l_write)
-{
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
- floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device();
- floppy_image_device *floppy1 = machine().device<floppy_connector>("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_wd1772->reset();
+
+ // bit 0, 1, 3: drive select
+ if (BIT(data, 0)) floppy = m_wd1772->subdevice<floppy_connector>("0")->get_device();
+ if (BIT(data, 1)) floppy = m_wd1772->subdevice<floppy_connector>("1")->get_device();
+ if (BIT(data, 3)) floppy = m_wd1772->subdevice<floppy_connector>("2")->get_device();
+ m_wd1772->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_wd1772->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)
-{
- 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;
-}
-
-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)