summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/emu/machine/mc146818.c86
-rw-r--r--src/emu/machine/mc146818.h2
-rw-r--r--src/mess/drivers/bbc.c1253
-rw-r--r--src/mess/includes/bbc.h47
-rw-r--r--src/mess/machine/bbc.c365
-rw-r--r--src/mess/mess.lst21
-rw-r--r--src/mess/video/bbc.c2
7 files changed, 1175 insertions, 601 deletions
diff --git a/src/emu/machine/mc146818.c b/src/emu/machine/mc146818.c
index 8706549df81..27ddcfb3b6d 100644
--- a/src/emu/machine/mc146818.c
+++ b/src/emu/machine/mc146818.c
@@ -4,7 +4,7 @@
Implementation of the MC146818 chip
- Real time clock chip with battery buffered ram (or CMOS)
+ Real time clock chip with battery backed ram (or CMOS)
Used in IBM PC/AT, several PC clones, Amstrad NC200, Apollo workstations
Nathan Woods (npwoods@mess.org)
@@ -92,12 +92,14 @@
#define HOURS_24 (m_data[0xb]&2)
#define BCD_MODE !(m_data[0xb]&4) // book has other description!
-#define CENTURY m_data[100]
+#define CENTURY m_data[72]
#define YEAR m_data[9]
#define MONTH m_data[8]
#define DAY m_data[7]
#define WEEK_DAY m_data[6]
-
+#define HOUR m_data[4]
+#define MINUTE m_data[2]
+#define SECOND m_data[0]
//**************************************************************************
@@ -175,19 +177,19 @@ void mc146818_device::device_timer(emu_timer &timer, device_timer_id id, int par
if (BCD_MODE)
{
- m_data[0]=bcd_adjust(m_data[0]+1);
- if (m_data[0]>=0x60)
+ SECOND=bcd_adjust(SECOND+1);
+ if (SECOND>=0x60)
{
- m_data[0]=0;
- m_data[2]=bcd_adjust(m_data[2]+1);
- if (m_data[2]>=0x60)
+ SECOND=0;
+ MINUTE=bcd_adjust(MINUTE+1);
+ if (MINUTE>=0x60)
{
- m_data[2]=0;
- m_data[4]=bcd_adjust(m_data[4]+1);
+ MINUTE=0;
+ HOUR=bcd_adjust(HOUR+1);
// different handling of hours
- if (m_data[4]>=0x24)
+ if (HOUR>=0x24)
{
- m_data[4]=0;
+ HOUR=0;
WEEK_DAY=bcd_adjust(WEEK_DAY+1)%7;
DAY=bcd_adjust(DAY+1);
//month=bcd_2_dec(MONTH);
@@ -218,17 +220,17 @@ void mc146818_device::device_timer(emu_timer &timer, device_timer_id id, int par
}
else
{
- m_data[0]=m_data[0]+1;
- if (m_data[0]>=60)
+ SECOND=SECOND+1;
+ if (SECOND>=60)
{
- m_data[0]=0;
- m_data[2]=m_data[2]+1;
- if (m_data[2]>=60) {
- m_data[2]=0;
- m_data[4]=m_data[4]+1;
+ SECOND=0;
+ MINUTE=MINUTE+1;
+ if (MINUTE>=60) {
+ MINUTE=0;
+ HOUR=HOUR+1;
// different handling of hours //?
- if (m_data[4]>=24) {
- m_data[4]=0;
+ if (HOUR>=24) {
+ HOUR=0;
WEEK_DAY=(WEEK_DAY+1)%7;
year=YEAR;
if (m_type!=MC146818_IGNORE_CENTURY) year+=CENTURY*100;
@@ -250,9 +252,9 @@ void mc146818_device::device_timer(emu_timer &timer, device_timer_id id, int par
}
}
- if (m_data[1] == m_data[0] && //
- m_data[3] == m_data[2] && //
- m_data[5] == m_data[4]) {
+ if (m_data[1] == SECOND && //
+ m_data[3] == MINUTE && //
+ m_data[5] == HOUR) {
// set the alarm interrupt flag AF
m_data[0x0c] |= 0x20;
} else {
@@ -287,13 +289,13 @@ void mc146818_device::device_timer(emu_timer &timer, device_timer_id id, int par
void mc146818_device::rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second)
{
- YEAR = year;
- MONTH = month;
- DAY = day;
+ YEAR = year;
+ MONTH = month;
+ DAY = day;
WEEK_DAY = day_of_week;
- m_data[4] = hour;
- m_data[2] = minute;
- m_data[0] = second;
+ HOUR = hour;
+ MINUTE = minute;
+ SECOND = second;
}
@@ -304,6 +306,16 @@ void mc146818_device::rtc_clock_updated(int year, int month, int day, int day_of
void mc146818_device::nvram_default()
{
+ // populate from a memory region if present
+ if (m_region != NULL)
+ {
+ UINT32 bytes = m_region->bytes();
+
+ if (bytes > sizeof(m_data))
+ bytes = sizeof(m_data);
+
+ memcpy(m_data, m_region->base(), bytes);
+ }
set_base_datetime();
}
@@ -361,18 +373,18 @@ void mc146818_device::set_base_datetime()
// current_time.hour,current_time.minute, current_time.second);
if (HOURS_24 || (current_time.hour < 12))
- m_data[4] = dec_2_local(current_time.hour);
+ HOUR = dec_2_local(current_time.hour);
else
- m_data[4] = dec_2_local(current_time.hour - 12) | 0x80;
+ HOUR = dec_2_local(current_time.hour - 12) | 0x80;
if (m_type != MC146818_IGNORE_CENTURY)
CENTURY = dec_2_local(current_time.year /100);
- m_data[0] = dec_2_local(current_time.second);
- m_data[2] = dec_2_local(current_time.minute);
- DAY = dec_2_local(current_time.mday);
- MONTH = dec_2_local(current_time.month + 1);
- YEAR = dec_2_local(current_time.year % 100);
+ SECOND = dec_2_local(current_time.second);
+ MINUTE = dec_2_local(current_time.minute);
+ DAY = dec_2_local(current_time.mday);
+ MONTH = dec_2_local(current_time.month + 1);
+ YEAR = dec_2_local(current_time.year % 100);
WEEK_DAY = current_time.weekday;
if (current_time.is_dst)
diff --git a/src/emu/machine/mc146818.h b/src/emu/machine/mc146818.h
index 09e177d3501..3d8a4ac9261 100644
--- a/src/emu/machine/mc146818.h
+++ b/src/emu/machine/mc146818.h
@@ -4,7 +4,7 @@
Implementation of the MC146818 chip
- Real time clock chip with batteru buffered ram
+ Real time clock chip with battery backed ram
Used in IBM PC/AT, several PC clones, Amstrad NC200
Peter Trauner (peter.trauner@jk.uni-linz.ac.at)
diff --git a/src/mess/drivers/bbc.c b/src/mess/drivers/bbc.c
index 1d6c9683406..20919e193e1 100644
--- a/src/mess/drivers/bbc.c
+++ b/src/mess/drivers/bbc.c
@@ -1,38 +1,75 @@
/******************************************************************************
BBC Model A,B
- BBC Model B Plus
-
+ ANA01 - Model A
+ ANA02 - Model A with Econet interface
+
+ ANB01 - Model B
+ ANB02 - Model B with Econet interface
+ ANB03 - Model B with Disc interface
+ ANB04 - Model B with Disc and Econet interfaces
+
+ GNB14 - Model B with Disc, Econet & Speech (German model)
+ UNB09 - Model B with Disc, Econet & Speech (US model)
+
+ BBC Model B+
+
+ ANB51 - BBC Model B+ 64K
+ ANB52 - BBC Model B+ 64K with Econet
+ ANB53 - BBC Model B+ 64K with Disc interface
+ ANB54 - BBC Model B+ 64K with Disc and Econet interfaces
+ ANB55 - BBC Model B+ 128K with Disc interface
+
+ BBC Master
+
+ AMB15 - Master 128
+ ADB12 - Master Econet Terminal
+ AVC12 - Master AIV
+ ARM1 - ARM Evaluation System
+ ADB20 - Master Compact
+
+
MESS Driver By:
Gordon Jefferyes
mess_bbc@romvault.com
+ Nigel Barnes
+ ngbarnes@hotmail.com
******************************************************************************/
+/* Core includes */
#include "emu.h"
-#include "bus/econet/econet.h"
+
+/* Components */
#include "cpu/m6502/m6502.h"
#include "cpu/m6502/m65sc02.h"
#include "machine/6522via.h"
-#include "machine/mc146818.h"
+#include "machine/mc146818.h" /* RTC & CMOS RAM */
#include "machine/mc6854.h"
#include "machine/upd7002.h"
#include "bus/centronics/ctronics.h"
+#include "bus/econet/econet.h"
+#include "sound/sn76496.h" /* Sound */
+#include "sound/tms5220.h" /* Speech */
+#include "video/saa5050.h" /* Teletext */
+
+/* Devices */
#include "imagedev/flopdrv.h"
#include "formats/basicdsk.h"
#include "imagedev/cartslot.h"
#include "imagedev/cassette.h"
#include "formats/uef_cas.h"
#include "formats/csw_cas.h"
-#include "sound/sn76496.h"
-#include "video/saa5050.h"
#include "includes/bbc.h"
/******************************************************************************
-A= BBC Model A
-
+A = BBC Model A
+B = BBC Model B
+B+ = BBC Model B+
+M = BBC Master
+
A B B+ M
+ &0000 + + + +
| | | | |
@@ -103,31 +140,26 @@ 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 */
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_memorya1_w) /* 4000-7fff Repeat of the 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 CRTA Video 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_read, control_write)
AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_read, data_write)
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 */
+ /* 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 */
+ /* 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("user1", 0x13f00) /* ff00-ffff OS Rom (continued) */
ADDRESS_MAP_END
@@ -137,31 +169,25 @@ static ADDRESS_MAP_START( bbcb_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(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 */
+ /* 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_read, control_write)
AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_read, data_write)
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 */
+ /* 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 */
+ /* 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_LEGACY("upd7002",uPD7002_r,uPD7002_w) /* fec0-fedf uPD7002 Analogue to digital converter */
+ AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE_LEGACY("upd7002", uPD7002_r, uPD7002_w) /* 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("user1", 0x43f00) /* ff00-ffff OS Rom (continued) */
ADDRESS_MAP_END
@@ -171,50 +197,40 @@ static ADDRESS_MAP_START( bbcbp_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 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 */
+ /* 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_read, control_write)
AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_read, data_write)
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 */
+ /* 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 */
+ /* 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_LEGACY("upd7002", uPD7002_r, uPD7002_w) /* fec0-fedf uPD7002 Analogue to digital converter */
+ AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE_LEGACY("upd7002", uPD7002_r, uPD7002_w) /* 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("user1", 0x43f00) /* ff00-ffff OS Rom (continued) */
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 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 */
+ /* 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_read, control_write)
AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_read, data_write)
@@ -222,21 +238,19 @@ static ADDRESS_MAP_START( bbcbp128_mem, AS_PROGRAM, 8, bbc_state )
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 */
+ /* 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 */
+ /* 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_LEGACY("upd7002", uPD7002_r, uPD7002_w) /* fec0-fedf uPD7002 Analogue to digital converter */
+ AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE_LEGACY("upd7002", uPD7002_r, uPD7002_w) /* 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("user1", 0x43f00) /* ff00-ffff OS Rom (continued) */
ADDRESS_MAP_END
-
/******************************************************************************
&FC00-&FCFF FRED
&FD00-&FDFF JIM
@@ -262,25 +276,17 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START(bbcm_mem, AS_PROGRAM, 8, bbc_state )
-
AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorybm1_w) /* 0000-2fff Regular Ram */
-
AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE(bbc_memorybm2_w) /* 3000-7fff Video/Shadow Ram */
-
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("user1", 0x42000) /* e000-fbff OS ROM */
-
- //AM_RANGE(0xfc00, 0xfeff) AM_READWRITE(bbcm_r, bbcm_w)
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("user1", 0x43f00) /* ff00-ffff OS Rom (continued) */
+ AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x43f00) /* ff00-ffff OS ROM (continued) */
ADDRESS_MAP_END
-
static const rgb_t bbc_palette[8]=
{
MAKE_RGB(0x0ff,0x0ff,0x0ff),
@@ -293,11 +299,17 @@ static const rgb_t bbc_palette[8]=
MAKE_RGB(0x000,0x000,0x000)
};
-PALETTE_INIT_MEMBER(bbc_state,bbc)
+PALETTE_INIT_MEMBER(bbc_state, bbc)
{
palette_set_colors(machine(), 0, bbc_palette, ARRAY_LENGTH(bbc_palette));
}
+
+INPUT_CHANGED_MEMBER(bbc_state::trigger_reset)
+{
+ m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? CLEAR_LINE : ASSERT_LINE);
+}
+
/* 2008-05 FP:
Small note about natural keyboard support: currently,
- "Copy" is mapped to 'F11'
@@ -305,14 +317,14 @@ Small note about natural keyboard support: currently,
/* Port Key description Emulated key Natural key Shift 1 Shift 2 (Ctrl) */
-static INPUT_PORTS_START(bbca)
+static INPUT_PORTS_START(bbc_keyboard)
PORT_START("COL0") /* KEYBOARD COLUMN 0 */
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F0") PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F0") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1 !") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CAPSLOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFTLOCK") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(F12))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CAPSLOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_TOGGLE
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFTLOCK") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) PORT_TOGGLE
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ESCAPE") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
@@ -324,7 +336,7 @@ static INPUT_PORTS_START(bbca)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('S')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
PORT_START("COL2") /* KEYBOARD COLUMN 2 */
PORT_DIPNAME(0x01, 0x01, "DIP 8 (Not Used)")
@@ -336,55 +348,55 @@ static INPUT_PORTS_START(bbca)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('X')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
PORT_START("COL3") /* KEYBOARD COLUMN 3 */
PORT_DIPNAME(0x01, 0x01, "DIP 7 (Not Used)")
PORT_DIPSETTING( 0x00, DEF_STR( Off ))
PORT_DIPSETTING( 0x01, DEF_STR( On ))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5 %") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('T')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('R')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('G')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
PORT_START("COL4") /* KEYBOARD COLUMN 4 */
PORT_DIPNAME(0x01, 0x01, "DIP 6 (Disc Speed 1)")
PORT_DIPSETTING( 0x00, DEF_STR( Off ))
PORT_DIPSETTING( 0x01, DEF_STR( On ))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7 \\") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6 &") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('H')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
PORT_START("COL5") /* KEYBOARD COLUMN 5 */
PORT_DIPNAME(0x01, 0x01, "DIP 5 (Disc Speed 0)")
PORT_DIPSETTING( 0x00, DEF_STR( Off ))
PORT_DIPSETTING( 0x01, DEF_STR( On ))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("* (") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8 (") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('I')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('U')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('J')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('N')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('M')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F6") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
PORT_START("COL6") /* KEYBOARD COLUMN 6 */
PORT_DIPNAME(0x01, 0x01, "DIP 4 (Shift Break)")
PORT_DIPSETTING( 0x00, DEF_STR( Off ))
PORT_DIPSETTING( 0x01, DEF_STR( On ))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F7") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9 )") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('O')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('K')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('L')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", <") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F8") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
PORT_START("COL7") /* KEYBOARD COLUMN 7 */
PORT_DIPNAME(0x01, 0x01, "DIP 3 (Mode bit 2)")
@@ -396,7 +408,7 @@ static INPUT_PORTS_START(bbca)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('@')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("; +") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F9") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F9") PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))
PORT_START("COL8") /* KEYBOARD COLUMN 8 */
PORT_DIPNAME(0x01, 0x01, "DIP 2 (Mode bit 1)")
@@ -418,10 +430,13 @@ static INPUT_PORTS_START(bbca)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DELETE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("COPY") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(F11))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DELETE") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("COPY") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END))
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
+ PORT_START("BRK") /* BREAK */
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("BREAK") PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12)) PORT_CHANGED_MEMBER(DEVICE_SELF, bbc_state, trigger_reset, 0)
+
/* Keyboard columns 10 -> 15 are reserved for BBC Master */
PORT_START("COL10")
PORT_START("COL11")
@@ -433,7 +448,10 @@ static INPUT_PORTS_START(bbca)
PORT_START("IN0")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
+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)
@@ -445,16 +463,24 @@ static INPUT_PORTS_START(bbca)
PORT_START("JOY3")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_MINMAX(0x0,0xff ) PORT_PLAYER(2)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START(bbc_config)
PORT_START("BBCCONFIG")
- PORT_CONFNAME( 0x07, 0x00, "DFS SELECT" )
+
+// 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( 0x06, "Opus Challenger 512K (RAM drive only)" )
PORT_CONFSETTING( 0x07, DEF_STR( None ) )
PORT_CONFNAME( 0x18, 0x00, "Sideways RAM Type" )
@@ -462,233 +488,23 @@ static INPUT_PORTS_START(bbca)
PORT_CONFSETTING( 0x08, "Solidisk 128K (fe62)" )
PORT_CONFSETTING( 0x10, "Acorn 64K (fe30)" )
PORT_CONFSETTING( 0x18, "Acorn 128K (fe30)" )
-
- PORT_CONFNAME( 0x20, 0x20, "Main Ram Size" )
- PORT_CONFSETTING( 0x00, "16K" )
- PORT_CONFSETTING( 0x20, "32K" )
+// PORT_CONFSETTING( 0x20, "ATPL Sidewise 16K" )
INPUT_PORTS_END
+static INPUT_PORTS_START(bbca)
+ PORT_INCLUDE(bbc_keyboard)
+INPUT_PORTS_END
-/* the BBC came with 4 rom sockets on the mother board 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 */
-
-ROM_START(bbca)
- ROM_REGION(0x04000,"maincpu",ROMREGION_ERASEFF) /* RAM */
-
- ROM_REGION(0x14000,"user1",0) /* ROM */
- ROM_LOAD("os12.rom", 0x10000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d))
-
- /* rom page 0 00000 */
- /* rom page 1 04000 */
- /* rom page 2 08000 */
- ROM_LOAD("basic2.rom", 0x0c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) /* rom page 3 0c000 */
-ROM_END
-
-
-/* 0000- 7fff ram */
-/* 8000- bfff not used, this area is mapped over with one of the roms at 10000 and above */
-/* c000- ffff OS rom and memory mapped hardware at fc00-feff */
-/* 10000-4ffff 16 paged rom banks mapped back into 8000-bfff by the page rom select */
-
-
-ROM_START(bbcb)
- ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */
-
- ROM_REGION(0x44000,"user1",0) /* ROM */
-
- ROM_LOAD("os12.rom", 0x40000,0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d))
-
- // usos12.rom is the USA version of the OS. acorn tried to release the BBC B in the USA calling it the
- // "Acorn Proton", it failed to sell in the USA and was withdrawn from the market.
- // the main difference is the screen resolution setting the display to work on American TV's
- //ROM_LOAD("usos12.rom", 0x40000,0x4000, CRC(c8e946a9) )
-
-
- ROM_LOAD("basic2.rom", 0x00000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) /* rom page 15 3c000 */
- //ROM_LOAD("speech-1.0.rom", 0x08000, 0x2000, CRC(e63f7fb7) )
- //ROM_RELOAD( 0x0a000, 0x2000 )
- //ROM_LOAD("dfs144.rom", 0x04000, 0x4000, CRC(9fb8d13f) SHA1(387d2468c6e1360f5b531784ce95d5f71a50c2b5)) /* rom page 14 38000 */
- /* 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 */
- /* rom page 13 34000 */
-
- ROM_REGION(0x20000,"user2",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_END
-
-#ifdef UNUSED_DEFINITION
-ROM_START(bbcbcsw)
- ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */
-
- ROM_REGION(0x44000,"user1",0) /* ROM */
-
- ROM_LOAD("os12.rom", 0x40000,0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d))
-
- // usos12.rom is the USA version of the OS. acorn tried to release the BBC B in the USA calling it the
- // "Acorn Proton", it failed to sell in the USA and was withdrawn from the market.
- // the main difference is the screen resolution setting the display to work on American TV's
- //ROM_LOAD("usos12.rom", 0x40000,0x4000, CRC(c8e946a9) )
-
-
- ROM_LOAD("basic2.rom", 0x00000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281)) /* rom page 15 3c000 */
- //ROM_LOAD("speech-1.0.rom", 0x08000, 0x2000, CRC(e63f7fb7) )
- //ROM_RELOAD( 0x0a000, 0x2000 )
- //ROM_LOAD("dfs144.rom", 0x04000, 0x4000, CRC(9fb8d13f) SHA1(387d2468c6e1360f5b531784ce95d5f71a50c2b5)) /* rom page 14 38000 */
- /* 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 */
- /* rom page 13 34000 */
-
- ROM_REGION(0x20000,"user2",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_END
-#endif
-
-ROM_START(bbcbp)
- ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
-
- ROM_REGION(0x44000,"user1",0) /* ROM */
- ROM_LOAD("bpos2.rom", 0x3c000, 0x4000, CRC(9f356396) SHA1(ea7d3a7e3ee1ecfaa1483af994048057362b01f2)) /* basic rom */
- ROM_CONTINUE( 0x40000, 0x4000) /* OS */
-
- /* 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 */
- /* rom page 13 34000 */
-
- /* ddfs 2.23 this is acorns 1770 disc controller Double density disc filing system */
- ROM_LOAD("ddfs223.rom", 0x38000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) /* rom page 14 38000 */
-
-ROM_END
-
-
-ROM_START(bbcbp128)
- ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
-
- ROM_REGION(0x44000,"user1",0) /* ROM */
- ROM_LOAD("bpos2.rom", 0x3c000, 0x4000, CRC(9f356396) SHA1(ea7d3a7e3ee1ecfaa1483af994048057362b01f2)) /* basic rom */
- ROM_CONTINUE( 0x40000, 0x4000) /* OS */
-
- /* 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 */
- /* rom page 13 34000 */
-
- /* ddfs 2.23 this is acorns 1770 disc controller Double density disc filing system */
- ROM_LOAD("ddfs223.rom", 0x38000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa)) /* rom page 14 38000 */
-
-ROM_END
-
-
-/* BBC Master Rom Load */
-ROM_START(bbcm)
- ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
-
- ROM_REGION(0x44000,"user1",0) /* ROM */
-
- ROM_SYSTEM_BIOS( 0, "mos350", "Enhanced MOS 3.50" )
- ROMX_LOAD("mos+3.50.rom",0x20000, 0x20000, CRC(141027b9) SHA1(85211b5bc7c7a269952d2b063b7ec0e1f0196803),ROM_BIOS(1))
-
- ROM_SYSTEM_BIOS( 1, "mos320", "Original MOS 3.20" )
- ROMX_LOAD("mos3.20.rom",0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e),ROM_BIOS(2))
-
- /* Move loaded roms into place */
- ROM_COPY("user1",0x20000,0x40000,0x4000)
- ROM_FILL(0x20000,0x4000,0xFFFF)
-
- /* 00000 rom 0 Cartridge */
- /* 04000 rom 1 Cartridge */
- /* 08000 rom 2 Cartridge */
- /* 0c000 rom 3 Cartridge */
- /* 10000 rom 4 RAM */
- /* 14000 rom 5 RAM */
- /* 18000 rom 6 RAM */
- /* 1c000 rom 7 RAM */
- /* 20000 rom 8 SPARE SOCKET */
- /* 24000 rom 9 DFS */
- /* 28000 rom 10 Viewsheet */
- /* 2c000 rom 11 Edit */
- /* 30000 rom 12 Basic */
- /* 34000 rom 13 ADFS */
- /* 38000 rom 14 View */
- /* 3c000 rom 15 Terminal */
-
- ROM_LOAD("anfs424.ic27", 0x20000, 0x4000, CRC(1b9f75fd) SHA1(875f71edd48f87c3a55371409d0cc2015d8b5853) ) // TODO where to load this?
-ROM_END
-
-
+static INPUT_PORTS_START(bbcb)
+ PORT_INCLUDE(bbc_config)
+ PORT_INCLUDE(bbc_keyboard)
+ PORT_INCLUDE(bbc_joy)
+INPUT_PORTS_END
+static INPUT_PORTS_START(bbcm)
+ PORT_INCLUDE(bbc_keyboard)
+ PORT_INCLUDE(bbc_joy)
+INPUT_PORTS_END
INTERRUPT_GEN_MEMBER(bbc_state::bbcb_vsync)
@@ -750,12 +566,18 @@ static ACIA6850_INTERFACE( bbc_acia6850_interface )
};
static LEGACY_FLOPPY_OPTIONS_START(bbc)
- LEGACY_FLOPPY_OPTION(bbc, "ssd,bbc,img", "BBC disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
+ 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 =
@@ -765,19 +587,19 @@ static const floppy_interface bbc_floppy_interface =
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- FLOPPY_STANDARD_5_25_DSHD,
+ FLOPPY_STANDARD_5_25_DSDD,
LEGACY_FLOPPY_OPTIONS_NAME(bbc),
- NULL,
+ "floppy_5_25",
NULL
};
-
static SAA5050_INTERFACE( trom_intf )
{
DEVCB_NULL,
40, 24, 40 // x, y, size
};
+
static const mc6854_interface adlc_intf =
{
DEVCB_NULL,
@@ -806,7 +628,7 @@ WRITE_LINE_MEMBER(bbc_state::econet_clk_w)
static ECONET_INTERFACE( econet_intf )
{
- DEVCB_DRIVER_LINE_MEMBER(bbc_state,econet_clk_w),
+ DEVCB_DRIVER_LINE_MEMBER(bbc_state, econet_clk_w),
DEVCB_NULL
};
@@ -841,16 +663,23 @@ static MACHINE_CONFIG_FRAGMENT( bbc_cartslot )
MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart)
MACHINE_CONFIG_END
+
static MACHINE_CONFIG_START( bbca, bbc_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6502, 2000000) /* 2.00 MHz */
- MCFG_CPU_PROGRAM_MAP( bbca_mem)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", bbc_state, bbcb_vsync) /* screen refresh interrupts */
- MCFG_CPU_PERIODIC_INT_DRIVER(bbc_state, bbcb_keyscan, 1000) /* scan keyboard */
+ MCFG_CPU_PROGRAM_MAP(bbca_mem)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", bbc_state, bbcb_vsync) /* screen refresh interrupts */
+ MCFG_CPU_PERIODIC_INT_DRIVER(bbc_state, bbcb_keyscan, 1000) /* scan keyboard */
MCFG_QUANTUM_TIME(attotime::from_hz(60))
- MCFG_MACHINE_START_OVERRIDE(bbc_state, bbca )
- MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbca )
+ /* internal ram */
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("16K")
+ MCFG_RAM_EXTRA_OPTIONS("32K")
+ MCFG_RAM_DEFAULT_VALUE(0x00)
+
+ MCFG_MACHINE_START_OVERRIDE(bbc_state, bbca)
+ MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbca)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -859,25 +688,23 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
MCFG_SCREEN_UPDATE_DEVICE("mc6845", mc6845_device, screen_update)
MCFG_PALETTE_LENGTH(16)
- MCFG_PALETTE_INIT_OVERRIDE(bbc_state,bbc)
- MCFG_SAA5050_ADD("saa505x", XTAL_12MHz/2, trom_intf)
-
- MCFG_MC6845_ADD("mc6845",MC6845,"screen",2000000, bbc_mc6845_intf)
+ MCFG_PALETTE_INIT_OVERRIDE(bbc_state, bbc)
+ MCFG_SAA5050_ADD("saa5050", XTAL_12MHz/2, trom_intf)
- MCFG_VIDEO_START_OVERRIDE(bbc_state,bbca)
+ MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000, bbc_mc6845_intf)
+ MCFG_VIDEO_START_OVERRIDE(bbc_state, bbca)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("sn76489", SN76489, 4000000) /* 4 MHz */
MCFG_SOUND_CONFIG(psg_intf)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
-// MCFG_SOUND_ADD("tms5220", TMS5220, tms5220_interface)
/* cassette */
MCFG_CASSETTE_ADD( "cassette", bbc_cassette_interface )
- /* software list */
- MCFG_SOFTWARE_LIST_ADD("cass_ls_a","bbca_cass")
+ /* software lists */
+ MCFG_SOFTWARE_LIST_ADD("cass_ls_a", "bbca_cass")
/* acia */
MCFG_ACIA6850_ADD("acia6850", bbc_acia6850_interface)
@@ -885,81 +712,158 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
/* devices */
MCFG_VIA6522_ADD("via6522_0", 1000000, bbcb_system_via)
-
MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( bbcb, bbca )
+ /* basic machine hardware */
MCFG_CPU_MODIFY( "maincpu" )
- MCFG_CPU_PROGRAM_MAP( bbcb_mem)
+ MCFG_CPU_PROGRAM_MAP(bbcb_mem)
+
+ MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcb)
+ MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcb)
+ MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcb)
+
+ /* internal ram */
+ MCFG_RAM_MODIFY(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("32K")
+ MCFG_RAM_DEFAULT_VALUE(0x00)
+
+ /* speech hardware */
+// MCFG_SOUND_ADD("tms5220", TMS5220, 640000)
+// MCFG_TMS52XX_SPEECHROM("vsm")
+
+ /* devices */
+ MCFG_VIA6522_ADD("via6522_1", 1000000, bbcb_user_via)
+ MCFG_UPD7002_ADD("upd7002", bbc_uPD7002)
+
+ /* printer */
+ MCFG_CENTRONICS_PRINTER_ADD("centronics", bbcb_centronics_config)
+
+ /* fdc */
+ MCFG_I8271_ADD("i8271", bbc_i8271_interface)
+ MCFG_WD1770_ADD("wd177x", bbc_wd17xx_interface )
+ MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
+
+ /* slot devices */
+ MCFG_FRAGMENT_ADD(bbc_cartslot)
+
+ /* 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")
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( bbcb_us, bbca )
+ /* basic machine hardware */
+ MCFG_CPU_MODIFY( "maincpu" )
+ MCFG_CPU_PROGRAM_MAP(bbcb_mem)
+
MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcb )
MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcb )
MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcb )
+ /* internal ram */
+ MCFG_RAM_MODIFY(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("32K")
+ MCFG_RAM_DEFAULT_VALUE(0x00)
+
+ /* speech hardware */
+// MCFG_SOUND_ADD("tms5220", TMS5220, 640000)
+// MCFG_TMS52XX_SPEECHROM("vsm")
+
+ /* video hardware */
+ MCFG_SCREEN_MODIFY("screen")
+ MCFG_SCREEN_REFRESH_RATE(60)
+
/* devices */
- MCFG_UPD7002_ADD("upd7002", bbc_uPD7002)
MCFG_VIA6522_ADD("via6522_1", 1000000, bbcb_user_via)
+ MCFG_UPD7002_ADD("upd7002", bbc_uPD7002)
+
+ /* printer */
MCFG_CENTRONICS_PRINTER_ADD("centronics", bbcb_centronics_config)
+ /* fdc */
MCFG_I8271_ADD("i8271", bbc_i8271_interface)
MCFG_WD1770_ADD("wd177x", bbc_wd17xx_interface )
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
MCFG_FRAGMENT_ADD(bbc_cartslot)
- /* software list */
+ /* 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_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass")
+ MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_a", "bbca_cass")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( bbcbp, bbcb )
- MCFG_CPU_MODIFY( "maincpu" )
- MCFG_CPU_PROGRAM_MAP( bbcbp_mem)
- MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcbp )
- MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcbp )
- MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcbp )
+ /* basic machine hardware */
+ MCFG_CPU_MODIFY( "maincpu" ) /* M6512 */
+ MCFG_CPU_PROGRAM_MAP(bbcbp_mem)
+
+ MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcbp)
+ MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcbp)
+ MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcbp)
+ /* internal ram */
+ MCFG_RAM_MODIFY(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("64K")
+ MCFG_RAM_DEFAULT_VALUE(0x00)
+
+ /* fdc */
MCFG_DEVICE_REMOVE("i8271")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( bbcbp128, bbcbp )
- MCFG_CPU_MODIFY( "maincpu" )
- 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 )
+ /* 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)
+
+ /* internal ram */
+ MCFG_RAM_MODIFY(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("128K")
+ MCFG_RAM_DEFAULT_VALUE(0x00)
MACHINE_CONFIG_END
-/* BBC MASTER */
+/* BBC Master Series */
+
static MACHINE_CONFIG_START( bbcm, bbc_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M65SC02, 2000000) /* 2.00 MHz */
- MCFG_CPU_PROGRAM_MAP( bbcm_mem)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", bbc_state, bbcb_vsync) /* screen refresh interrupts */
- MCFG_CPU_PERIODIC_INT_DRIVER(bbc_state, bbcm_keyscan, 1000) /* scan keyboard */
+ MCFG_CPU_PROGRAM_MAP(bbcm_mem)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", bbc_state, bbcb_vsync) /* screen refresh interrupts */
+ MCFG_CPU_PERIODIC_INT_DRIVER(bbc_state, bbcm_keyscan, 1000) /* scan keyboard */
MCFG_QUANTUM_TIME(attotime::from_hz(60))
- MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcm )
- MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcm )
+ /* internal ram */
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("128K")
+ MCFG_RAM_DEFAULT_VALUE(0x00)
+
+ MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcm)
+ MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcm)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(128))
- MCFG_SCREEN_SIZE(800,300)
- MCFG_SCREEN_VISIBLE_AREA(0,800-1,0,300-1)
+ MCFG_SCREEN_SIZE(800, 300)
+ MCFG_SCREEN_VISIBLE_AREA(0, 800-1, 0, 300-1)
MCFG_PALETTE_LENGTH(16)
- MCFG_PALETTE_INIT_OVERRIDE(bbc_state,bbc)
+ MCFG_PALETTE_INIT_OVERRIDE(bbc_state, bbc)
MCFG_SCREEN_UPDATE_DEVICE("mc6845", mc6845_device, screen_update)
- MCFG_SAA5050_ADD("saa505x", XTAL_12MHz/2, trom_intf)
-
- MCFG_MC6845_ADD("mc6845",MC6845,"screen",2000000, bbc_mc6845_intf)
+ MCFG_SAA5050_ADD("saa5050", XTAL_12MHz/2, trom_intf)
- MCFG_VIDEO_START_OVERRIDE(bbc_state,bbcm)
+ MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000, bbc_mc6845_intf)
+ MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcm)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -967,7 +871,8 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
MCFG_SOUND_CONFIG(psg_intf)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
- MCFG_MC146818_ADD( "rtc", MC146818_STANDARD )
+ /* rtc and cmos */
+ MCFG_MC146818_ADD( "rtc", MC146818_IGNORE_CENTURY )
/* printer */
MCFG_CENTRONICS_PRINTER_ADD("centronics", bbcb_centronics_config)
@@ -975,10 +880,18 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
/* cassette */
MCFG_CASSETTE_ADD( "cassette", bbc_cassette_interface )
- /* software list */
- MCFG_SOFTWARE_LIST_ADD("cass_ls_m","bbcm_cass")
- MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_a","bbca_cass")
- MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_b","bbcb_cass")
+ /* cartridges */
+ MCFG_CARTSLOT_ADD("cart")
+ MCFG_CARTSLOT_EXTENSION_LIST("bin")
+ MCFG_CARTSLOT_NOT_MANDATORY
+ MCFG_CARTSLOT_LOAD(bbc_state, bbcm_cart)
+ MCFG_CARTSLOT_INTERFACE("bbcm_cart")
+
+ /* software lists */
+ MCFG_SOFTWARE_LIST_ADD("cass_ls_m", "bbcm_cass")
+ MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_a", "bbca_cass")
+ MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_b", "bbcb_cass")
+ MCFG_SOFTWARE_LIST_ADD("cart_ls_m", "bbcm_cart")
/* acia */
MCFG_ACIA6850_ADD("acia6850", bbc_acia6850_interface)
@@ -989,19 +902,625 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
MCFG_VIA6522_ADD("via6522_0", 1000000, bbcb_system_via)
MCFG_VIA6522_ADD("via6522_1", 1000000, bbcb_user_via)
+ /* fdc */
MCFG_WD1770_ADD("wd177x", bbc_wd17xx_interface )
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
+ /* rom slots */
MCFG_FRAGMENT_ADD(bbc_cartslot)
+ /* econet */
MCFG_MC6854_ADD("mc6854", adlc_intf)
MCFG_ECONET_ADD(econet_intf)
MCFG_ECONET_SLOT_ADD("econet254", 254, econet_devices, NULL)
MACHINE_CONFIG_END
-/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-COMP ( 1981, bbca, 0, 0, bbca, bbca, bbc_state, bbc, "Acorn","BBC Micro Model A" , 0)
-COMP ( 1981, bbcb, bbca, 0, bbcb, bbca, bbc_state, bbc, "Acorn","BBC Micro Model B" , 0)
-COMP ( 1985, bbcbp, bbca, 0, bbcbp, bbca, bbc_state, bbc, "Acorn","BBC Micro Model B+ 64K" , 0)
-COMP ( 1985, bbcbp128, bbca, 0, bbcbp128, bbca, bbc_state, bbc, "Acorn","BBC Micro Model B+ 128k" , 0)
-COMP ( 1986, bbcm, bbca, 0, bbcm, bbca, bbc_state, bbcm, "Acorn","BBC Master" , 0)
+
+static MACHINE_CONFIG_DERIVED( bbcmt, bbcm )
+
+ /* Add 65C102 co-processor */
+
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( bbcmaiv, bbcm )
+
+ /* Add 65C102 co-processor */
+
+ /* Add Philips VP415 Laserdisc player */
+
+ /* Add Acorn Tracker Ball */
+
+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")
+
+ /* printer */
+// MCFG_DEVICE_REMOVE("centronics")
+
+ /* cassette */
+ MCFG_DEVICE_REMOVE("cassette")
+
+ /* software lists */
+ MCFG_SOFTWARE_LIST_REMOVE("cass_ls_m")
+ MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a")
+ MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
+
+ /* acia */
+// MCFG_DEVICE_REMOVE("acia6850")
+ MCFG_DEVICE_REMOVE(RS232_TAG)
+
+ /* devices */
+// MCFG_DEVICE_REMOVE("upd7002")
+// MCFG_DEVICE_REMOVE("via6522_1")
+
+ /* fdc */
+// MCFG_DEVICE_REMOVE("wd177x")
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( bbcm512, bbcm )
+
+ /* Add Intel 80186 co-processor */
+
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( bbcmarm, bbcm )
+
+ /* Add ARM co-processor */
+
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( bbcmc, bbcm )
+
+// MCFG_DEVICE_REMOVE("rtc")
+
+ /* fdc */
+ MCFG_DEVICE_REMOVE("wd177x")
+ MCFG_WD1772_ADD("wd177x", bbc_wd17xx_interface )
+
+ /* software lists */
+ MCFG_SOFTWARE_LIST_REMOVE("cart_ls_m")
+ MCFG_SOFTWARE_LIST_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 */
+
+ROM_START(bbca)
+ ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */
+
+ ROM_REGION(0x14000,"user1",0) /* ROM */
+ /* rom page 0 00000 */
+ /* rom page 1 04000 */
+ /* rom page 2 08000 */
+ /* rom page 3 0c000 BASIC */
+ ROM_DEFAULT_BIOS("os12b2")
+ ROM_SYSTEM_BIOS( 0, "os12b2", "OS 1.20 / BASIC2" )
+ ROMX_LOAD("os12.rom", 0x10000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d), ROM_BIOS(1)) /* os */
+ ROMX_LOAD("basic2.rom", 0x0c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(1)) /* rom page 3 0c000 */
+ ROM_SYSTEM_BIOS( 1, "os12b1", "OS 1.20 / BASIC1" )
+ ROMX_LOAD("os12.rom", 0x10000, 0x4000, CRC(3c14fc70) SHA1(0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d), ROM_BIOS(2)) /* os */
+ ROMX_LOAD("basic1.rom", 0x0c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(2)) /* rom page 3 0c000 */
+ ROM_SYSTEM_BIOS( 2, "os10b2", "OS 1.00 / BASIC2" )
+ ROMX_LOAD("os10.rom", 0x10000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(3)) /* os */
+ ROMX_LOAD("basic2.rom", 0x0c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(3)) /* rom page 3 0c000 */
+ 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 */
+ 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 */
+ ROMX_LOAD("basic2.rom", 0x04000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(5)) /* rom page 1 04000 */
+ ROMX_LOAD("basic2.rom", 0x08000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(5)) /* rom page 2 08000 */
+ ROMX_LOAD("basic2.rom", 0x0c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(5)) /* rom page 3 0c000 */
+ ROM_SYSTEM_BIOS( 5, "os01b1", "OS 0.10 / BASIC1" )
+ ROMX_LOAD("os01.rom", 0x10000, 0x4000, CRC(45ee0980) SHA1(4b0ece6dc139d5d3f4fabd023716fb6f25149b80), ROM_BIOS(6)) /* os */
+ ROMX_LOAD("basic1.rom", 0x00000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(6)) /* rom page 0 00000 */
+ ROMX_LOAD("basic1.rom", 0x04000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(6)) /* rom page 1 04000 */
+ ROMX_LOAD("basic1.rom", 0x08000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(6)) /* rom page 2 08000 */
+ ROMX_LOAD("basic1.rom", 0x0c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(6)) /* rom page 3 0c000 */
+ROM_END
+
+
+/* 0000- 7fff ram */
+/* 8000- bfff not used, this area is mapped over with one of the roms at 10000 and above */
+/* c000- ffff OS rom and memory mapped hardware at fc00-feff */
+/* 10000-4ffff 16 paged rom banks mapped back into 8000-bfff by the page rom select */
+
+
+ROM_START(bbcb)
+ ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */
+
+ ROM_REGION(0x44000,"user1",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 */
+ /* rom page 13 34000 */
+ /* rom page 14 38000 */
+ /* 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_REGION(0x20000,"user2",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_END
+
+ROM_START(bbcb_de)
+ ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */
+
+ ROM_REGION(0x44000,"user1",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 */
+ /* rom page 13 34000 */
+ /* rom page 14 38000 */
+ /* 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_REGION(0x20000,"user2",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_END
+
+ROM_START(bbcb_us)
+ ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */
+
+ ROM_REGION(0x44000,"user1",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 */
+ /* rom page 13 34000 */
+ /* rom page 14 38000 */
+ /* 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_REGION(0x20000,"user2",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 */
+
+ ROM_REGION(0x44000,"user1",0) /* ROM */
+ ROM_DEFAULT_BIOS("os20")
+ ROM_SYSTEM_BIOS( 0, "os20", "OS 2.00" )
+ ROMX_LOAD("bpos2.ic71", 0x3c000, 0x4000, CRC(9f356396) SHA1(ea7d3a7e3ee1ecfaa1483af994048057362b01f2), ROM_BIOS(1)) /* rom page 15 3C000 BASIC */
+ ROM_CONTINUE( 0x40000, 0x4000) /* OS */
+ /* 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 DDFS */
+ /* 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 */
+ /* ddfs 2.23 this is acorns 1770 disc controller Double density disc filing system */
+ ROM_LOAD("ddfs223.rom", 0x1c000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa))
+ROM_END
+
+
+ROM_START(bbcbp128)
+ ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
+
+ ROM_REGION(0x44000,"user1",0) /* ROM */
+ ROM_DEFAULT_BIOS("os20")
+ ROM_SYSTEM_BIOS( 0, "os20", "OS 2.00" )
+ ROMX_LOAD("bpos2.ic71", 0x3c000, 0x4000, CRC(9f356396) SHA1(ea7d3a7e3ee1ecfaa1483af994048057362b01f2), ROM_BIOS(1)) /* rom page 15 3C000 BASIC */
+ ROM_CONTINUE( 0x40000, 0x4000) /* OS */
+ /* 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 DDFS */
+ /* 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 */
+ /* ddfs 2.23 this is acorns 1770 disc controller Double density disc filing system */
+ ROM_LOAD("ddfs223.rom", 0x1c000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa))
+ROM_END
+
+
+ROM_START(bbcm)
+ ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
+
+ ROM_REGION(0x44000,"user1",0) /* ROM */
+ ROM_DEFAULT_BIOS("mos350")
+ ROM_SYSTEM_BIOS( 0, "mos350", "Enhanced MOS 3.50" )
+ ROMX_LOAD("mos350.ic24", 0x20000, 0x20000, CRC(141027b9) SHA1(85211b5bc7c7a269952d2b063b7ec0e1f0196803), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS( 1, "mos320", "Original MOS 3.20" )
+ ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e), ROM_BIOS(2))
+ ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
+ ROM_FILL(0x20000, 0x4000, 0xFFFF)
+ /* 00000 rom 0 Rear Cartridge bottom 16K */
+ /* 04000 rom 1 Rear Cartridge top 16K */
+ /* 08000 rom 2 Front Cartridge bottom 16K */
+ /* 0c000 rom 3 Front Cartridge top 16K */
+ /* 10000 rom 4 SWRAM */
+ /* 14000 rom 5 SWRAM */
+ /* 18000 rom 6 SWRAM */
+ /* 1c000 rom 7 SWRAM */
+ /* 20000 rom 8 SPARE SOCKET */
+ /* 24000 rom 9 DFS + SRAM */
+ /* 28000 rom 10 Viewsheet */
+ /* 2c000 rom 11 Edit */
+ /* 30000 rom 12 BASIC */
+ /* 34000 rom 13 ADFS */
+ /* 38000 rom 14 View + MOS code */
+ /* 3c000 rom 15 Terminal + Tube host + CFS */
+// ROM_LOAD("anfs424.rom", 0x20000, 0x4000, CRC(1b9f75fd) SHA1(875f71edd48f87c3a55371409d0cc2015d8b5853) ) // TODO where to load this?
+
+ ROM_REGION(0x40,"rtc",0) /* mc146818 */
+ /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
+ ROMX_LOAD("mos350.cmos", 0x00, 0x40, CRC(e84c1854) SHA1(f3cb7f12b7432caba28d067f01af575779220aac), ROM_BIOS(1))
+ ROMX_LOAD("mos320.cmos", 0x00, 0x40, CRC(c7f9e85a) SHA1(f24cc9db0525910689219f7204bf8b864033ee94), ROM_BIOS(2))
+ROM_END
+
+
+ROM_START(bbcmt)
+ ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
+
+ ROM_REGION(0x44000,"user1",0) /* ROM */
+ ROM_DEFAULT_BIOS("mos350")
+ ROM_SYSTEM_BIOS( 0, "mos350", "Enhanced MOS 3.50" )
+ ROMX_LOAD("mos350.ic24", 0x20000, 0x20000, CRC(141027b9) SHA1(85211b5bc7c7a269952d2b063b7ec0e1f0196803), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS( 1, "mos320", "Original MOS 3.20" )
+ ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e), ROM_BIOS(2))
+ ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
+ ROM_FILL(0x20000, 0x4000, 0xFFFF)
+ /* 00000 rom 0 Rear Cartridge bottom 16K */
+ /* 04000 rom 1 Rear Cartridge top 16K */
+ /* 08000 rom 2 Front Cartridge bottom 16K */
+ /* 0c000 rom 3 Front Cartridge top 16K */
+ /* 10000 rom 4 SWRAM */
+ /* 14000 rom 5 SWRAM */
+ /* 18000 rom 6 SWRAM */
+ /* 1c000 rom 7 SWRAM */
+ /* 20000 rom 8 SPARE SOCKET */
+ /* 24000 rom 9 DFS + SRAM */
+ /* 28000 rom 10 Viewsheet */
+ /* 2c000 rom 11 Edit */
+ /* 30000 rom 12 BASIC */
+ /* 34000 rom 13 ADFS */
+ /* 38000 rom 14 View + MOS code */
+ /* 3c000 rom 15 Terminal + Tube host + CFS */
+// ROM_LOAD("anfs424.ic27", 0x20000, 0x4000, CRC(1b9f75fd) SHA1(875f71edd48f87c3a55371409d0cc2015d8b5853) ) // TODO where to load this?
+
+ ROM_REGION(0x40,"rtc",0) /* mc146818 */
+ /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
+ ROMX_LOAD("mos350.cmos", 0x00, 0x40, CRC(e84c1854) SHA1(f3cb7f12b7432caba28d067f01af575779220aac), ROM_BIOS(1))
+ ROMX_LOAD("mos320.cmos", 0x00, 0x40, CRC(c7f9e85a) SHA1(f24cc9db0525910689219f7204bf8b864033ee94), ROM_BIOS(2))
+ROM_END
+
+
+ROM_START(bbcmaiv)
+ ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
+
+ ROM_REGION(0x44000,"user1",0) /* ROM */
+ ROM_DEFAULT_BIOS("mos320")
+ ROM_SYSTEM_BIOS( 0, "mos320", "MOS 3.20" )
+ ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e), ROM_BIOS(1))
+ ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
+ ROM_FILL(0x20000, 0x4000, 0xFFFF)
+ /* 00000 rom 0 Rear Cartridge bottom 16K */
+ /* 04000 rom 1 Rear Cartridge top 16K */
+ /* 08000 rom 2 Front Cartridge bottom 16K */
+ /* 0c000 rom 3 Front Cartridge top 16K */
+ /* 10000 rom 4 SWRAM */
+ /* 14000 rom 5 SWRAM */
+ /* 18000 rom 6 SWRAM */
+ /* 1c000 rom 7 SWRAM */
+ /* 20000 rom 8 VFS */
+ /* 24000 rom 9 DFS + SRAM */
+ /* 28000 rom 10 Viewsheet */
+ /* 2c000 rom 11 Edit */
+ /* 30000 rom 12 BASIC */
+ /* 34000 rom 13 ADFS */
+ /* 38000 rom 14 View + MOS code */
+ /* 3c000 rom 15 Terminal + Tube host + CFS */
+ ROM_LOAD("vfs170.rom", 0x20000, 0x4000, CRC(b124a0bb) SHA1(ba31c757815cf470402d7829a70a0e1d3fb1355b) )
+
+ ROM_REGION(0x40,"rtc",0) /* mc146818 */
+ /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
+ ROMX_LOAD("mos320aiv.cmos", 0x0E, 0x32, BAD_DUMP CRC(b9ae42a1) SHA1(abf3e94b013f24027ca36c96720963c3411e93f8), ROM_BIOS(1))
+ROM_END
+
+
+ROM_START(bbcmet)
+ ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
+
+ ROM_REGION(0x44000,"user1",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("user1", 0x24000, 0x34000, 0xC000) /* Mirror */
+ ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
+ ROM_FILL(0x20000, 0x4000, 0xFFFF)
+ /* 00000 rom 0 Rear Cartridge bottom 16K */
+ /* 04000 rom 1 Rear Cartridge top 16K */
+ /* 08000 rom 2 Front Cartridge bottom 16K */
+ /* 0c000 rom 3 Front Cartridge top 16K */
+ /* 10000 rom 4 SWRAM */
+ /* 14000 rom 5 SWRAM */
+ /* 18000 rom 6 SWRAM */
+ /* 1c000 rom 7 SWRAM */
+ /* 20000 rom 8 NO SOCKET */
+ /* 24000 rom 9 BASIC */
+ /* 28000 rom 10 ANFS */
+ /* 2c000 rom 11 MOS code */
+ /* 30000 rom 12 UNUSED */
+ /* 34000 rom 13 BASIC */
+ /* 38000 rom 14 ANFS */
+ /* 3c000 rom 15 MOS code */
+
+ ROM_REGION(0x40,"rtc",0) /* mc146818 */
+ /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
+ ROMX_LOAD("mos400.cmos", 0x0E, 0x32, BAD_DUMP CRC(fff41cc5) SHA1(3607568758f90b3bd6c7dc9533e2aa24f9806ff3), ROM_BIOS(1))
+ROM_END
+
+
+ROM_START(bbcm512)
+ ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
+
+ ROM_REGION(0x44000,"user1",0) /* ROM */
+ ROM_DEFAULT_BIOS("mos350")
+ ROM_SYSTEM_BIOS( 0, "mos350", "Enhanced MOS 3.50" )
+ ROMX_LOAD("mos350.ic24", 0x20000, 0x20000, CRC(141027b9) SHA1(85211b5bc7c7a269952d2b063b7ec0e1f0196803), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS( 1, "mos320", "Original MOS 3.20" )
+ ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e), ROM_BIOS(2))
+ ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
+ ROM_FILL(0x20000, 0x4000, 0xFFFF)
+ /* 00000 rom 0 Rear Cartridge bottom 16K */
+ /* 04000 rom 1 Rear Cartridge top 16K */
+ /* 08000 rom 2 Front Cartridge bottom 16K */
+ /* 0c000 rom 3 Front Cartridge top 16K */
+ /* 10000 rom 4 SWRAM */
+ /* 14000 rom 5 SWRAM */
+ /* 18000 rom 6 SWRAM */
+ /* 1c000 rom 7 SWRAM */
+ /* 20000 rom 8 SPARE SOCKET */
+ /* 24000 rom 9 DFS + SRAM */
+ /* 28000 rom 10 Viewsheet */
+ /* 2c000 rom 11 Edit */
+ /* 30000 rom 12 BASIC */
+ /* 34000 rom 13 ADFS */
+ /* 38000 rom 14 View + MOS code */
+ /* 3c000 rom 15 Terminal + Tube host + CFS */
+// ROM_LOAD("anfs424.ic27", 0x20000, 0x4000, CRC(1b9f75fd) SHA1(875f71edd48f87c3a55371409d0cc2015d8b5853) )
+
+ ROM_REGION(0x40,"rtc",0) /* mc146818 */
+ /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
+ ROMX_LOAD("mos350.cmos", 0x00, 0x40, CRC(e84c1854) SHA1(f3cb7f12b7432caba28d067f01af575779220aac), ROM_BIOS(1))
+ ROMX_LOAD("mos320.cmos", 0x00, 0x40, CRC(c7f9e85a) SHA1(f24cc9db0525910689219f7204bf8b864033ee94), ROM_BIOS(2))
+ROM_END
+
+
+ROM_START(bbcmarm)
+ ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
+
+ ROM_REGION(0x44000,"user1",0) /* ROM */
+ ROM_DEFAULT_BIOS("mos320")
+ ROM_SYSTEM_BIOS( 0, "mos320", "Original MOS 3.20" )
+ ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e), ROM_BIOS(1))
+ ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
+ ROM_FILL(0x20000, 0x4000, 0xFFFF)
+ /* 00000 rom 0 Rear Cartridge bottom 16K */
+ /* 04000 rom 1 Rear Cartridge top 16K */
+ /* 08000 rom 2 Front Cartridge bottom 16K */
+ /* 0c000 rom 3 Front Cartridge top 16K */
+ /* 10000 rom 4 SWRAM */
+ /* 14000 rom 5 SWRAM */
+ /* 18000 rom 6 SWRAM */
+ /* 1c000 rom 7 SWRAM */
+ /* 20000 rom 8 SPARE SOCKET */
+ /* 24000 rom 9 DFS + SRAM */
+ /* 28000 rom 10 Viewsheet */
+ /* 2c000 rom 11 Edit */
+ /* 30000 rom 12 BASIC */
+ /* 34000 rom 13 ADFS */
+ /* 38000 rom 14 View + MOS code */
+ /* 3c000 rom 15 Terminal + Tube host + CFS */
+// ROM_LOAD("anfs424.ic27", 0x20000, 0x4000, CRC(1b9f75fd) SHA1(875f71edd48f87c3a55371409d0cc2015d8b5853) )
+
+ ROM_REGION(0x40,"rtc",0) /* mc146818 */
+ /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
+ ROMX_LOAD("mos320a.cmos", 0x00, 0x40, CRC(56117257) SHA1(ed98563bef18f9d2a0b2d941cd20823d760fb127), ROM_BIOS(1))
+ROM_END
+
+
+ROM_START(bbcmc)
+ ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
+
+ ROM_REGION(0x44000,"user1",0) /* ROM */
+ ROM_DEFAULT_BIOS("mos510")
+ ROM_SYSTEM_BIOS( 0, "mos510", "Enhanced MOS 5.10" )
+ ROMX_LOAD("mos510.ic49", 0x30000, 0x10000, BAD_DUMP CRC(9a2a6086) SHA1(094ab37b0b6437c4f1653eaa0602ef102737adb6), ROM_BIOS(1)) /* Merged individual ROM bank dumps */
+ ROM_SYSTEM_BIOS( 1, "mos500", "Original MOS 5.00" )
+ ROMX_LOAD("mos500.ic49", 0x30000, 0x10000, BAD_DUMP CRC(f6170023) SHA1(140d002d2d9cd34b47197a2ba823505af2a84633), ROM_BIOS(2)) /* Merged individual ROM bank dumps */
+
+ ROM_COPY("user1", 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(0x80,"mc146818",0) /* mc146818 */
+ /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
+// ROM_LOAD("mos500.cmos", 0x00, 0x80, CRC(d8458039) SHA1(72c056d493e74ceca41f48936012b012b496a226))
+ROM_END
+
+
+ROM_START(bbcmc_ar)
+ ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
+
+ ROM_REGION(0x44000,"user1",0) /* ROM */
+ ROM_DEFAULT_BIOS("mos511i")
+ ROM_SYSTEM_BIOS( 0, "mos511i", "International MOS 5.11" )
+ ROMX_LOAD("mos511.ic49", 0x30000, 0x10000, BAD_DUMP CRC(8708803c) SHA1(d2170c8b9b536f3ad84a4a603a7fe712500cc751), ROM_BIOS(1)) /* Merged individual ROM bank dumps */
+ ROM_COPY("user1", 0x30000, 0x40000, 0x4000) /* Move loaded roms into place */
+ ROM_FILL(0x30000, 0x4000, 0xFFFF)
+ /* 00000 rom 0 EXTERNAL */
+ /* 04000 rom 1 EXTERNAL */
+ /* 08000 rom 2 International */
+ /* 0c000 rom 3 SPARE SOCKET */
+ /* 10000 rom 4 SWRAM */
+ /* 14000 rom 5 SWRAM */
+ /* 18000 rom 6 SWRAM */
+ /* 1c000 rom 7 SWRAM */
+ /* 20000 rom 8 Arabian */
+ /* 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_LOAD("international16.rom", 0x8000 , 0x4000, CRC(0ef527b1) SHA1(dc5149ccf588cd591a6ad47727474ef3313272ce) )
+ ROM_LOAD("arabian-c22.rom" , 0x20000, 0x4000, CRC(4f3aadff) SHA1(2bbf61ba68264ce5845aab9c54e750b0efe219c8) )
+
+// ROM_REGION(0x80,"mc146818",0) /* mc146818 */
+ /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
+// ROM_LOAD("mos500.cmos", 0x00, 0x80, CRC(d8458039) SHA1(72c056d493e74ceca41f48936012b012b496a226))
+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", GAME_NOT_WORKING)
+COMP ( 1986, bbcmaiv, bbcm, 0, bbcmaiv, bbcm, bbc_state, bbcm, "Acorn", "BBC Master AIV", GAME_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", GAME_NOT_WORKING)
+COMP ( 1986, bbcmarm, bbcm, 0, bbcmarm, bbcm, bbc_state, bbcm, "Acorn", "ARM Evaluation System", GAME_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)
diff --git a/src/mess/includes/bbc.h b/src/mess/includes/bbc.h
index cf3d28c49e4..3f4c455ed85 100644
--- a/src/mess/includes/bbc.h
+++ b/src/mess/includes/bbc.h
@@ -13,12 +13,14 @@
#include "machine/6522via.h"
#include "machine/6850acia.h"
+#include "machine/ram.h"
#include "machine/i8271.h"
#include "machine/wd17xx.h"
#include "machine/upd7002.h"
#include "video/mc6845.h"
#include "video/saa5050.h"
#include "sound/sn76496.h"
+#include "sound/tms5220.h"
#include "imagedev/cassette.h"
#include "machine/serial.h"
@@ -30,9 +32,11 @@ public:
bbc_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
+ m_ram(*this, RAM_TAG),
m_mc6845(*this, "mc6845"),
m_sn(*this, "sn76489"),
- m_trom(*this, "saa505x"),
+ m_trom(*this, "saa5050"),
+ m_tms(*this, "tms5220"),
m_cassette(*this, "cassette"),
m_acia(*this, "acia6850"),
m_rs232(*this, RS232_TAG),
@@ -53,28 +57,30 @@ public:
m_bank8(*this, "bank8") { }
required_device<cpu_device> m_maincpu;
+ required_device<ram_device> m_ram;
required_device<mc6845_device> m_mc6845;
optional_device<sn76489_device> m_sn;
required_device<saa5050_device> m_trom;
- required_device<cassette_image_device> m_cassette;
- required_device<acia6850_device> m_acia;
- required_device<rs232_port_device> m_rs232;
+ optional_device<tms5220_device> m_tms;
+ optional_device<cassette_image_device> m_cassette;
+ optional_device<acia6850_device> m_acia;
+ optional_device<rs232_port_device> m_rs232;
void check_interrupts();
- int m_RAMSize; // BBC Memory Size
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
+ // if 1 then we are emulating a BBC Master style machine
- int m_ACCCON_IRR; // IRQ inputs
+ int m_ACCCON_IRR; // IRQ inputs
int m_rombank; // This is the latch that holds the sideways ROM bank to read
int m_userport; // This stores the sideways RAM latch type.
- // Acorn and others use the bbc_rombank latch to select the write bank to be used.(type 0)
- // Solidisc use the BBC's userport to select the write bank to be used (type 1)
+ // Acorn and others use the bbc_rombank latch to select the write bank to be used.(type 0)
+ // Solidisc use the BBC's userport to select the write bank to be used (type 1)
int m_pagedRAM; // BBC B+ memory handling
int m_vdusel; // BBC B+ memory handling
@@ -183,11 +189,10 @@ public:
int m_previous_i8271_int_state; // 8271 interupt status
-
-
/**************************************
WD1770 disc control
***************************************/
+
int m_drive_control;
int m_wd177x_irq_state;
int m_wd177x_drq_state;
@@ -197,9 +202,8 @@ public:
/**************************************
Opus Challenger Disc control
***************************************/
- int m_opusbank;
-
+ int m_opusbank;
/**************************************
Video Code
@@ -229,7 +233,6 @@ public:
int m_BBC_VSync;
-
int m_Teletext_Latch;
int m_VideoULA_CR;
int m_VideoULA_CR_counter;
@@ -242,7 +245,6 @@ public:
int m_videoULA_flash_colour_select;
-
int m_pixels_per_byte;
int m_emulation_pixels_per_real_pixel;
int m_emulation_pixels_per_byte;
@@ -302,16 +304,16 @@ public:
DECLARE_MACHINE_START(bbca);
DECLARE_MACHINE_RESET(bbca);
DECLARE_VIDEO_START(bbca);
- DECLARE_PALETTE_INIT(bbc);
- DECLARE_MACHINE_START(bbcm);
- DECLARE_MACHINE_RESET(bbcm);
- DECLARE_VIDEO_START(bbcm);
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);
INTERRUPT_GEN_MEMBER(bbcb_keyscan);
@@ -340,8 +342,10 @@ public:
DECLARE_READ_LINE_MEMBER(bbc_cts_r);
DECLARE_WRITE_LINE_MEMBER(bbc_rts_w);
DECLARE_WRITE_LINE_MEMBER(bbc_txd_w);
+ DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcb_cart );
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcm_cart );
protected:
required_memory_region m_region_maincpu;
@@ -384,17 +388,16 @@ public:
/*----------- defined in machine/bbc.c -----------*/
-
extern const mc6845_interface bbc_mc6845_intf;
-
extern const via6522_interface bbcb_system_via;
extern const via6522_interface bbcb_user_via;
+
+extern const i8271_interface bbc_i8271_interface;
extern const wd17xx_interface bbc_wd17xx_interface;
/* tape support */
-extern const i8271_interface bbc_i8271_interface;
extern const uPD7002_interface bbc_uPD7002;
#endif /* BBC_H_ */
diff --git a/src/mess/machine/bbc.c b/src/mess/machine/bbc.c
index dcb5f39189f..e5a9c0a254b 100644
--- a/src/mess/machine/bbc.c
+++ b/src/mess/machine/bbc.c
@@ -5,6 +5,8 @@
Gordon Jefferyes
mess_bbc@romvault.com
+ Nigel Barnes
+ ngbarnes@hotmail.com
******************************************************************************/
@@ -51,7 +53,7 @@ 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 DIP settings var:bbc_DFSTypes */
+/* 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;
@@ -68,7 +70,7 @@ WRITE8_MEMBER(bbc_state::bbc_page_selectb_w)
WRITE8_MEMBER(bbc_state::bbc_memoryb3_w)
{
- if (m_RAMSize)
+ if (m_ram->size() == 32*1024)
{
m_region_maincpu->base()[offset + 0x4000] = data;
}
@@ -76,7 +78,6 @@ WRITE8_MEMBER(bbc_state::bbc_memoryb3_w)
{
m_region_maincpu->base()[offset] = data;
}
-
}
/* I have setup 3 types of sideways ram:
@@ -95,7 +96,8 @@ WRITE8_MEMBER(bbc_state::bbc_memoryb4_w)
{
// special DFS case for Acorn DFS E00 Hack that can write to the DFS RAM Bank;
if (m_DFSType == 3) m_region_user2->base()[((m_DFSType) << 14) + offset] = data;
- } else
+ }
+ else
{
switch (m_SWRAMtype)
{
@@ -181,23 +183,23 @@ WRITE8_MEMBER(bbc_state::bbc_memorybp1_w)
DIRECT_UPDATE_MEMBER(bbc_state::bbcbp_direct_handler)
{
- UINT8 *ram = m_region_maincpu->base();
+ UINT8 *RAM = m_region_maincpu->base();
if (m_vdusel == 0)
{
// not in shadow ram mode so just read normal ram
- m_bank2->set_base(ram + 0x3000);
+ m_bank2->set_base(RAM + 0x3000);
}
else
{
if (vdudriverset())
{
// if VDUDriver set then read from shadow ram
- m_bank2->set_base(ram + 0xb000);
+ m_bank2->set_base(RAM + 0xb000);
}
else
{
// else read from normal ram
- m_bank2->set_base(ram + 0x3000);
+ m_bank2->set_base(RAM + 0x3000);
}
}
return address;
@@ -206,23 +208,23 @@ DIRECT_UPDATE_MEMBER(bbc_state::bbcbp_direct_handler)
WRITE8_MEMBER(bbc_state::bbc_memorybp2_w)
{
- UINT8 *ram = m_region_maincpu->base();
+ UINT8 *RAM = m_region_maincpu->base();
if (m_vdusel==0)
{
// not in shadow ram mode so just write to normal ram
- ram[offset + 0x3000] = data;
+ RAM[offset + 0x3000] = data;
}
else
{
if (vdudriverset())
{
// if VDUDriver set then write to shadow ram
- ram[offset + 0xb000] = data;
+ RAM[offset + 0xb000] = data;
}
else
{
// else write to normal ram
- ram[offset + 0x3000] = data;
+ RAM[offset + 0x3000] = data;
}
}
}
@@ -292,7 +294,7 @@ ACCCON
b7 IRR 1=Causes an IRQ to the processor
b6 TST 1=Selects &FC00-&FEFF read from OS-ROM
-b5 IFJ 1=Internal 1 MHz bus
+b5 IFJ 1=Internal 1MHz bus
0=External 1MHz bus
b4 ITU 1=Internal Tube
0=External Tube
@@ -307,7 +309,7 @@ b0 D 1=Display LYNNE as screen
ACCCON is a read/write register
-HAZEL is the 8K of RAM used by the MOS,filling system, and other Roms at &C000-&DFFF
+HAZEL is the 8K of RAM used by the MOS, filing system, and other Roms at &C000-&DFFF
ANDY is the name of the 4K of RAM used by the MOS at &8000-&8FFF
@@ -342,7 +344,6 @@ WRITE8_MEMBER(bbc_state::bbcm_ACCCON_write)
tempIRR=m_ACCCON_IRR;
-
m_ACCCON_IRR=(data>>7)&1;
m_ACCCON_TST=(data>>6)&1;
m_ACCCON_IFJ=(data>>5)&1;
@@ -390,7 +391,6 @@ WRITE8_MEMBER(bbc_state::bbcm_ACCCON_write)
{
space.install_read_handler(0xFC00,0xFEFF,read8_delegate(FUNC(bbc_state::bbcm_r),this));
}
-
}
@@ -452,20 +452,20 @@ DIRECT_UPDATE_MEMBER(bbc_state::bbcm_direct_handler)
WRITE8_MEMBER(bbc_state::bbc_memorybm2_w)
{
- UINT8 *ram = m_region_maincpu->base();
+ UINT8 *RAM = m_region_maincpu->base();
if (m_ACCCON_X)
{
- ram[offset + 0xb000] = data;
+ RAM[offset + 0xb000] = data;
}
else
{
if (m_ACCCON_E && bbcm_vdudriverset())
{
- ram[offset + 0xb000] = data;
+ RAM[offset + 0xb000] = data;
}
else
{
- ram[offset + 0x3000] = data;
+ RAM[offset + 0x3000] = data;
}
}
}
@@ -480,13 +480,13 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm4_w)
{
if (m_pagedRAM)
{
- m_region_maincpu->base()[offset+0x8000]=data;
+ m_region_maincpu->base()[offset+0x8000] = data;
}
else
{
if (bbc_master_sideways_ram_banks[m_rombank])
{
- m_region_user1->base()[offset+(m_rombank<<14)]=data;
+ m_region_user1->base()[offset+(m_rombank<<14)] = data;
}
}
}
@@ -496,7 +496,7 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm5_w)
{
if (bbc_master_sideways_ram_banks[m_rombank])
{
- m_region_user1->base()[offset+(m_rombank<<14)+0x1000]=data;
+ m_region_user1->base()[offset+(m_rombank<<14)+0x1000] = data;
}
}
@@ -505,7 +505,7 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm7_w)
{
if (m_ACCCON_Y)
{
- m_region_maincpu->base()[offset+0x9000]=data;
+ m_region_maincpu->base()[offset+0x9000] = data;
}
}
@@ -513,29 +513,48 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm7_w)
/******************************************************************************
&FC00-&FCFF FRED
+&FC00-&FC03 Byte-Wide Expansion RAM
+&FC08-&FC0F Ample M2000 MIDI Interface (see also FCF0)
+&FC10-&FC13 Teletext
+&FC14-&FC1F Prestel
+&FC20-&FC27 IEEE 488 Interface
+&FC28-&FC2F Acorn Expansion, currently unused
+&FC30-&FC3F Cambridge Ring Interface
+&FC40-&FC47 Winchester Disc Interface
+&FC48-&FC7F Acorn Expansion, currently unused
+&FC80-&FC8F Test Hardware
+&FC90-&FCBF Acorn Expansion, currently unused
+&FCC0-&FCFE User Applications
+&FCF0-&FCF7 JGH/ETI MIDI Control (see also FC08)
+&FCFC-&FCFF Page-Wide Expansion RAM
+
&FD00-&FDFF JIM
-&FE00-&FEFF SHEILA Read Write
-&00-&07 6845 CRTC Video controller Video Controller 8 ( 2 bytes x 4 )
-&08-&0F 6850 ACIA Serial controller Serial Controller 8 ( 2 bytes x 4 )
-&10-&17 Serial ULA - Serial system chip 8 ( 1 byte x 8 )
-&18-&1F uPD7002 A to D converter A to D converter 8 ( 4 bytes x 2 )
-&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 )
-&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 - -
-&40-&5F 6522 VIA SYSTEM VIA SYSTEM VIA 32 (16 bytes x 2 ) 1MHz
-&60-&7F 6522 VIA USER VIA USER VIA 32 (16 bytes x 2 ) 1MHz
-&80-&9F Int. Modem Int. Modem Int Modem
-&A0-&BF 68B54 ADLC ECONET controller ECONET controller 32 ( 4 bytes x 8 ) 2MHz
-&C0-&DF NC - -
-&E0-&FF Tube ULA Tube system interface Tube system interface 32 (32 bytes x 1 ) 2MHz
+&FD00-&FDFF Page-wide expansion RAM window
+&FD40-&FD4F Torch SASI/SCSI Hard Drive Access
+&FDFE-&FDFF Reset Test vector
+
+&FE00-&FEFF SHEILA Read Write
+&FE00-&FE07 6845 CRTC Video controller Video Controller 8 ( 2 bytes x 4 )
+&FE08-&FE0F 6850 ACIA Serial controller Serial Controller 8 ( 2 bytes x 4 )
+&FE10-&FE17 Serial ULA - Serial system chip 8 ( 1 byte x 8 )
+&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 )
+&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 - -
+&FE40-&FE5F 6522 VIA SYSTEM VIA SYSTEM VIA 32 (16 bytes x 2 ) 1MHz
+&FE60-&FE7F 6522 VIA USER VIA USER VIA 32 (16 bytes x 2 ) 1MHz
+&FE80-&FE9F 8271 registers 8271 Disk Controller 8271 Disk Controller
+&FEA0-&FEBF 68B54 ADLC ECONET controller ECONET controller 32 ( 4 bytes x 8 ) 2MHz
+&FEC0-&FEDF 6854 ADLC ECONET controller ECONET controller 32 ( 4 bytes x 8 ) 2MHz
+&FEE0-&FEFF Tube ULA Tube system interface Tube system interface 32 (32 bytes x 1 ) 2MHz
******************************************************************************/
READ8_MEMBER(bbc_state::bbcm_r)
{
-long myo;
+ long myo;
/* Now handled in bbcm_ACCCON_write PHS - 2008-10-11 */
// if ( m_ACCCON_TST )
@@ -553,14 +572,13 @@ long myo;
return 0xff;
};
-
if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
{
via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
via6522_device *via_1 = machine().device<via6522_device>("via6522_1");
device_t *adlc = machine().device("mc6854");
- myo=offset-0x200;
+ myo = offset-0x200;
if ((myo>=0x00) && (myo<=0x07)) return bbc_6845_r(space, myo-0x00); /* Video Controller */
if ((myo>=0x08) && (myo<=0x0f))
{
@@ -569,16 +587,16 @@ long myo;
else
return m_acia->data_read(space,0);
}
- if ((myo>=0x10) && (myo<=0x17)) return 0xfe; /* Serial System Chip */
+ if ((myo>=0x10) && (myo<=0x17)) return 0xfe; /* Serial System Chip */
if ((myo>=0x18) && (myo<=0x1f)) return uPD7002_r(machine().device("upd7002"), 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>=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 via_0->read(space,myo-0x40);
- if ((myo>=0x60) && (myo<=0x7f)) return via_1->read(space,myo-0x60);
+ if ((myo>=0x38) && (myo<=0x3f)) return 0xfe; /* NC ?? */
+ if ((myo>=0x40) && (myo<=0x5f)) return via_0->read(space, myo-0x40);
+ if ((myo>=0x60) && (myo<=0x7f)) return via_1->read(space, myo-0x60);
if ((myo>=0x80) && (myo<=0x9f)) return 0xfe;
if ((myo>=0xa0) && (myo<=0xbf)) return mc6854_r(adlc, space, myo & 0x03);
if ((myo>=0xc0) && (myo<=0xdf)) return 0xfe;
@@ -590,7 +608,7 @@ long myo;
WRITE8_MEMBER(bbc_state::bbcm_w)
{
-long myo;
+ long myo;
if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
{
@@ -599,7 +617,7 @@ long myo;
device_t *adlc = machine().device("mc6854");
myo=offset-0x200;
- if ((myo>=0x00) && (myo<=0x07)) bbc_6845_w(space, myo-0x00,data); /* Video Controller */
+ if ((myo>=0x00) && (myo<=0x07)) bbc_6845_w(space, myo-0x00, data); /* Video Controller */
if ((myo>=0x08) && (myo<=0x0f))
{
if ((myo - 0x08) & 1)
@@ -607,22 +625,21 @@ long myo;
else
m_acia->data_write(space, 0, data);
}
- if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10,data); /* Serial System Chip */
- if ((myo>=0x18) && (myo<=0x1f)) uPD7002_w(machine().device("upd7002"),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)) via_0->write(space,myo-0x40, data);
- if ((myo>=0x60) && (myo<=0x7f)) via_1->write(space,myo-0x60, data);
+ if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10, data); /* Serial System Chip */
+ if ((myo>=0x18) && (myo<=0x1f)) uPD7002_w(machine().device("upd7002"), 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)) via_0->write(space, myo-0x40, data);
+ if ((myo>=0x60) && (myo<=0x7f)) via_1->write(space, myo-0x60, data);
//if ((myo>=0x80) && (myo<=0x9f))
if ((myo>=0xa0) && (myo<=0xbf)) mc6854_w(adlc, space, myo & 0x03, data);
//if ((myo>=0xc0) && (myo<=0xdf))
//if ((myo>=0xe0) && (myo<=0xff))
}
-
}
@@ -647,25 +664,24 @@ PB0-PB2 outputs
These 3 outputs form the address to an 8 bit addressable latch.
(IC32 74LS259)
-
PB3 output
----------
This output holds the data to be written to the selected
addressable latch bit.
-
PB4 and PB5 inputs
+------------------
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 is the speech processor 'ready' output and PB7 is from the
speech processor 'interrupt' output.
-
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
@@ -674,24 +690,23 @@ they maintain synchronisation with the rest of the picture.
----------------------------------------------------------------
This is required for a lot of time function within the machine
and must be triggered every 20ms. (Should check at some point
-how this 20ms signal is made, and see if none standard shapped
+how this 20ms signal is made, and see if none standard shaped
screen modes change this time period.)
-
CB1 input
+---------
The CB1 input is the end of conversion (EOC) signal from the
7002 analogue to digital converter. It can be used to interrupt
the 6502 whenever a conversion is complete.
-
CA2 input
+---------
This input comes from the keyboard circuit, and is used to
generate an interrupt whenever a key is pressed. See the
keyboard circuit section for more details.
-
-
CB2 input
+---------
This is the light pen strobe signal (LPSTB) from the light pen.
If also connects to the 6845 video processor,
CB2 can be programmed to interrupt the processor whenever
@@ -718,16 +733,15 @@ B3 - Keyboard write enable
B4,B5 - these two outputs define the number to be added to the
start of screen address in hardware to control hardware scrolling:-
Mode Size Start of screen Number to add B5 B4
-0,1,2 20K &3000 12K 1 1
-3 16K &4000 16K 0 0
-4,5 10K &5800 (or &1800) 22K 1 0
-6 8K &6000 (or &2000) 24K 0 1
+0,1,2 20K &3000 12K 1 1
+3 16K &4000 16K 0 0
+4,5 10K &5800 (or &1800) 22K 1 0
+6 8K &6000 (or &2000) 24K 0 1
B6 - Operates the CAPS lock LED (Pin 17 keyboard connector)
B7 - Operates the SHIFT lock LED (Pin 16 keyboard connector)
******************************************************************************/
-
INTERRUPT_GEN_MEMBER(bbc_state::bbcb_keyscan)
{
static const char *const colnames[] = {
@@ -756,7 +770,6 @@ INTERRUPT_GEN_MEMBER(bbc_state::bbcb_keyscan)
{
via_0->write_ca2(0);
}
-
}
else
{
@@ -796,7 +809,6 @@ INTERRUPT_GEN_MEMBER(bbc_state::bbcm_keyscan)
{
via_0->write_ca2(0);
}
-
}
else
{
@@ -853,19 +865,18 @@ int bbc_state::bbc_keyboard(address_space &space, int data)
void bbc_state::bbcb_IC32_initialise(bbc_state *state)
{
- m_b0_sound=0x01; // Sound is negative edge trigered
- m_b1_speech_read=0x01; // ????
- m_b2_speech_write=0x01; // ????
- m_b3_keyboard=0x01; // Keyboard is negative edge trigered
- m_b4_video0=0x01;
- m_b5_video1=0x01;
- m_b6_caps_lock_led=0x01;
- m_b7_shift_lock_led=0x01;
-
+ m_b0_sound=0x01; // Write Enable to the sound generator IC
+ m_b1_speech_read=0x01; // READ select on the speech processor
+ m_b2_speech_write=0x01; // WRITE select on the speech processor
+ m_b3_keyboard=0x01; // Keyboard write enable
+ m_b4_video0=0x01; // These two outputs define the number to be added to the start of screen address
+ m_b5_video1=0x01; // in hardware to control hardware scrolling
+ m_b6_caps_lock_led=0x01; // Operates the CAPS lock LED
+ m_b7_shift_lock_led=0x01; // Operates the SHIFT lock LED
}
-/* This the BBC Masters Real Time Clock and NVRam IC */
+/* 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);
@@ -907,7 +918,7 @@ 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);
+ m_sn->write(space, 0, m_via_system_porta);
}
if (m_b3_keyboard == 0)
{
@@ -924,7 +935,6 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
bit = data & 0x07;
value = (data >> 3) & 0x01;
-
//logerror("SYSTEM write portb %d %d %d\n",data,bit,value);
if (value)
@@ -942,7 +952,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
{
if (m_MC146818_WR == 0)
{
- /* BBC MASTER has NV RAM Here */
+ /* BBC MASTER has NVRAM Here */
m_MC146818_WR = 1;
MC146818_set(space);
}
@@ -961,7 +971,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
{
if (m_MC146818_DS == 0)
{
- /* BBC MASTER has NV RAM Here */
+ /* BBC MASTER has NVRAM Here */
m_MC146818_DS = 1;
MC146818_set(space);
}
@@ -1096,7 +1106,6 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
}
-
if (m_Master)
{
//set the Address Select
@@ -1146,9 +1155,9 @@ 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));
+ //logerror("SYSTEM read portb %d\n",0xf | input_port(machine, "IN0") | (TMSint<<6)|(TMSrdy<<7));
- return (0xf | ioport("IN0")->read()|(TMSint<<6)|(TMSrdy<<7));
+ return (0xf | ioport("IN0")->read() | (TMSint<<6)|(TMSrdy<<7));
}
@@ -1162,7 +1171,7 @@ READ8_MEMBER(bbc_state::bbcb_via_system_read_ca1)
/* joystick EOC */
READ8_MEMBER(bbc_state::bbcb_via_system_read_cb1)
{
- return uPD7002_EOC_r(machine().device("upd7002"),space,0);
+ return uPD7002_EOC_r(machine().device("upd7002"), space, 0);
}
@@ -1289,7 +1298,6 @@ const uPD7002_interface bbc_uPD7002 =
****************************************/
-
void bbc_state::MC6850_Receive_Clock(int new_clock)
{
m_rxd_cass = new_clock;
@@ -1367,7 +1375,6 @@ TIMER_CALLBACK_MEMBER(bbc_state::bbc_tape_timer_cb)
m_len2=0;
m_len3=0;
m_wav_len=0;
-
}
m_len3=m_len2;
@@ -1406,8 +1413,6 @@ TIMER_CALLBACK_MEMBER(bbc_state::bbc_tape_timer_cb)
m_len2=0;
m_len3=0;
}
-
-
}
m_wav_len++;
@@ -1623,8 +1628,6 @@ WRITE8_MEMBER(bbc_state::bbc_i8271_write)
***************************************/
-
-
/*
B/ B+ drive control:
@@ -1728,7 +1731,6 @@ WRITE8_MEMBER(bbc_state::bbc_wd177x_status_w)
wd17xx_dden_w(fdc, BIT(data, 3));
m_1770_IntEnabled=(((data>>4) & 0x01)==0);
-
}
@@ -1838,7 +1840,6 @@ WRITE8_MEMBER(bbc_state::bbc_opus_status_w)
wd17xx_dden_w(fdc, BIT(data, 5));
m_1770_IntEnabled=(data>>4) & 0x01;
-
}
READ8_MEMBER(bbc_state::bbc_opus_read)
@@ -1861,7 +1862,6 @@ READ8_MEMBER(bbc_state::bbc_opus_read)
case 0xfb:
return wd17xx_data_r(fdc, space, 0);
}
-
}
else
{
@@ -2003,7 +2003,7 @@ READ8_MEMBER(bbc_state::bbc_disc_r)
/* 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 acown 1770 interface */
+ /* case 4 is the acorn 1770 interface */
case 4:
return bbc_wd1770_read(space, offset);
/* case 5 is the watford 1770 interface */
@@ -2027,7 +2027,7 @@ WRITE8_MEMBER(bbc_state::bbc_disc_w)
case 0: case 1: case 2: case 3:
bbc_i8271_write(space, offset,data);
break;
- /* case 4 is the acown 1770 interface */
+ /* case 4 is the acorn 1770 interface */
case 4:
bbc_wd1770_write(space, offset,data);
break;
@@ -2052,7 +2052,7 @@ WRITE8_MEMBER(bbc_state::bbc_disc_w)
***************************************/
DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbcb_cart )
{
- UINT8 *mem = m_region_user1->base();
+ UINT8 *RAM = m_region_user1->base();
int size, read_;
int addr = 0;
int index = 0;
@@ -2084,14 +2084,14 @@ DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbcb_cart )
switch (size)
{
case 0x2000:
- read_ = image.fread(mem + addr, size);
+ read_ = image.fread(RAM + addr, size);
if (read_ != size)
return 1;
image.fseek(0, SEEK_SET);
- read_ = image.fread(mem + addr + 0x2000, size);
+ read_ = image.fread(RAM + addr + 0x2000, size);
break;
case 0x4000:
- read_ = image.fread(mem + addr, size);
+ read_ = image.fread(RAM + addr, size);
break;
default:
read_ = 0;
@@ -2105,6 +2105,62 @@ DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbcb_cart )
}
+/**************************************
+ BBC Master Rom loading functions
+***************************************/
+DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbcm_cart )
+{
+ UINT8 *RAM = m_region_user1->base();
+ int size, read_;
+ int addr = 0;
+ int index = 0;
+
+ size = image.length();
+
+ if (strcmp(image.device().tag(),":cart1") == 0)
+ {
+ index = 0;
+ }
+ if (strcmp(image.device().tag(),":cart2") == 0)
+ {
+ index = 1;
+ }
+ if (strcmp(image.device().tag(),":cart3") == 0)
+ {
+ index = 2;
+ }
+ if (strcmp(image.device().tag(),":cart4") == 0)
+ {
+ index = 3;
+ }
+ addr = 0x8000 + (0x4000 * index);
+
+
+ logerror("loading rom %s at %.4x size:%.4x\n", image.filename(), addr, size);
+
+
+ switch (size)
+ {
+ case 0x2000:
+ read_ = image.fread(RAM + addr, size);
+ if (read_ != size)
+ return 1;
+ image.fseek(0, SEEK_SET);
+ read_ = image.fread(RAM + addr + 0x2000, size);
+ break;
+ case 0x4000:
+ read_ = image.fread(RAM + addr, size);
+ break;
+ default:
+ read_ = 0;
+ logerror("bad rom file size of %.4x\n", size);
+ break;
+ }
+
+ if (read_ != size)
+ return 1;
+ return 0;
+}
/**************************************
@@ -2137,10 +2193,21 @@ MACHINE_START_MEMBER(bbc_state,bbca)
MACHINE_RESET_MEMBER(bbc_state,bbca)
{
- UINT8 *ram = m_region_maincpu->base();
- m_RAMSize = 1;
- m_bank1->set_base(ram);
- m_bank3->set_base(ram);
+ UINT8 *RAM = m_region_maincpu->base();
+
+ m_bank1->set_base(RAM);
+ if (m_ram->size() == 32*1024)
+ {
+ /* 32K Model A */
+ m_bank3->set_base(RAM + 0x4000);
+ m_memorySize=32;
+ }
+ else
+ {
+ /* 16K just repeat the lower 16K*/
+ m_bank3->set_base(RAM);
+ m_memorySize=16;
+ }
m_bank4->set_base(m_region_user1->base()); /* bank 4 is the paged ROMs from 8000 to bfff */
m_bank7->set_base(m_region_user1->base()+0x10000); /* bank 7 points at the OS rom from c000 to ffff */
@@ -2151,58 +2218,25 @@ MACHINE_RESET_MEMBER(bbc_state,bbca)
MACHINE_START_MEMBER(bbc_state,bbcb)
{
m_mc6850_clock = 0;
- //removed from here because MACHINE_START can no longer read DIP swiches.
- //put in machine_reset instead.
- //m_DFSType= (ioport("BBCCONFIG")->read()>>0)&0x07;
- //m_SWRAMtype=(ioport("BBCCONFIG")->read()>>3)&0x03;
- //m_RAMSize= (ioport("BBCCONFIG")->read()>>5)&0x01;
-
- /*set up the required disc controller*/
- //switch (m_DFSType) {
- //case 0: case 1: case 2: case 3:
- m_previous_i8271_int_state=0;
- // break;
- //case 4: case 5: case 6:
- m_previous_wd177x_int_state=1;
- // break;
- //}
+ m_previous_i8271_int_state=0;
+ m_previous_wd177x_int_state=1;
}
MACHINE_RESET_MEMBER(bbc_state,bbcb)
{
- UINT8 *ram = m_region_maincpu->base();
+ UINT8 *RAM = m_region_maincpu->base();
m_DFSType= (ioport("BBCCONFIG")->read() >> 0) & 0x07;
m_SWRAMtype = (ioport("BBCCONFIG")->read() >> 3) & 0x03;
- m_RAMSize= (ioport("BBCCONFIG")->read() >> 5) & 0x01;
+ m_bank1->set_base(RAM);
+ m_bank3->set_base(RAM + 0x4000);
+ m_memorySize=32;
- m_bank1->set_base(ram);
- if (m_RAMSize)
- {
- /* 32K Model B */
- m_bank3->set_base(ram + 0x4000);
- m_memorySize=32;
- }
- else
- {
- /* 16K just repeat the lower 16K*/
- m_bank3->set_base(ram);
- m_memorySize=16;
- }
-
- m_bank4->set_base(m_region_user1->base()); /* bank 4 is the paged ROMs from 8000 to bfff */
+ m_bank4->set_base(m_region_user1->base()); /* bank 4 is the paged ROMs from 8000 to bfff */
m_bank7->set_base(m_region_user1->base() + 0x40000); /* bank 7 points at the OS rom from c000 to ffff */
bbcb_IC32_initialise(this);
-
m_opusbank = 0;
- /*set up the required disc controller*/
- //switch (m_DFSType) {
- //case 0: case 1: case 2: case 3:
- // break;
- //case 4: case 5: case 6:
- // break;
- //}
}
@@ -2213,32 +2247,30 @@ MACHINE_START_MEMBER(bbc_state,bbcbp)
m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcbp_direct_handler), this));
/* bank 6 is the paged ROMs from b000 to bfff */
- m_bank6->configure_entries(0, 16, m_region_user1->base() + 0x3000, 1<<14);
+ m_bank6->configure_entries(0, 16, m_region_user1->base()+0x3000, 1<<14);
}
MACHINE_RESET_MEMBER(bbc_state,bbcbp)
{
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_base(m_region_user1->base()); /* bank 4 is paged ROM or RAM from 8000 to afff */
+ m_bank4->set_base(m_region_user1->base()); /* bank 4 is paged ROM or RAM from 8000 to afff */
m_bank6->set_entry(0);
- m_bank7->set_base(m_region_user1->base()+0x40000); /* bank 7 points at the OS rom from c000 to ffff */
+ m_bank7->set_base(m_region_user1->base()+0x40000); /* bank 7 points at the OS rom from c000 to ffff */
bbcb_IC32_initialise(this);
-
m_previous_wd177x_int_state=1;
}
-
MACHINE_START_MEMBER(bbc_state,bbcm)
{
m_mc6850_clock = 0;
m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcm_direct_handler), this));
- /* bank 5 is the paged ROMs from 9000 to bfff */
+ /* bank 5 is the paged ROMs from 9000 to bfff */
m_bank5->configure_entries(0, 16, m_region_user1->base()+0x01000, 1<<14);
/* Set ROM/IO bank to point to rom */
@@ -2250,12 +2282,11 @@ MACHINE_RESET_MEMBER(bbc_state,bbcm)
{
m_bank1->set_base(m_region_maincpu->base()); /* bank 1 regular lower ram from 0000 to 2fff */
m_bank2->set_base(m_region_maincpu->base() + 0x3000); /* bank 2 screen/shadow ram from 3000 to 7fff */
- m_bank4->set_base(m_region_user1->base()); /* bank 4 is paged ROM or RAM from 8000 to 8fff */
+ m_bank4->set_base(m_region_user1->base()); /* bank 4 is paged ROM or RAM from 8000 to 8fff */
m_bank5->set_entry(0);
- m_bank7->set_base(m_region_user1->base() + 0x40000); /* bank 6 OS rom of RAM from c000 to dfff */
+ m_bank7->set_base(m_region_user1->base() + 0x40000); /* bank 6 OS rom of RAM from c000 to dfff */
bbcb_IC32_initialise(this);
-
m_previous_wd177x_int_state=1;
}
diff --git a/src/mess/mess.lst b/src/mess/mess.lst
index 4d7578de587..aff62252fd7 100644
--- a/src/mess/mess.lst
+++ b/src/mess/mess.lst
@@ -351,15 +351,24 @@ d110
// Acorn
acrnsys1 // 1979 Acorn System 1 (Microcomputer Kit)
atom // 1979 Acorn Atom
-atomeb // 1979 Acorn Atom
-atombb // 1979 Acorn Atom
+atomeb // 1979 Acorn Atom
+atombb // 1979 Acorn Atom
bbca // 1981 BBC Micro Model A
bbcb // 1981 BBC Micro Model B
-bbcbp // 198? BBC Micro Model B+ 64K
-bbcbp128 // 198? BBC Micro Model B+ 128K
-bbcm // 198? BBC Master
-bbcbc // 1985 BBC Bridge Companion
+bbcb_de // 1981 BBC Micro Model B (German)
+bbcb_us // 1981 BBC Micro Model B (US)
electron // 1983 Acorn Electron
+bbcbp // 1985 BBC Micro Model B+ 64K
+bbcbp128 // 1985 BBC Micro Model B+ 128K
+bbcm // 1986 BBC Master 128
+bbcmt // 1986 BBC Master Turbo
+bbcmaiv // 1986 BBC Master AIV
+bbcmet // 1986 BBC Master ET
+bbcm512 // 1986 BBC Master 512
+bbcmarm // 1986 ARM Evaluation System
+bbcmc // 1986 BBC Master Compact
+bbcmc_ar // 1986 BBC Master Comapact (Arabic)
+bbcbc // 1985 BBC Bridge Companion
a310 // 1988 Acorn Archimedes 310
a3010 // 1988 Acorn Archimedes 3010
a3020 // 1988 Acorn Archimedes 3020
diff --git a/src/mess/video/bbc.c b/src/mess/video/bbc.c
index 5aadc335da6..2c0f29ee522 100644
--- a/src/mess/video/bbc.c
+++ b/src/mess/video/bbc.c
@@ -96,7 +96,7 @@ static const int pixels_per_byte_set[8]={ 2,4,8,16,1,2,4,8 };
static const int width_of_cursor_set[8]={ 0,0,1,2,1,0,2,4 };
/* this is a quick lookup array that puts bits 0,2,4,6 into bits 0,1,2,3
- this is used by the pallette lookup in the video ULA */
+ this is used by the palette lookup in the video ULA */
void bbc_state::set_pixel_lookup()
{
int i;