mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
mc6845: fixed hd6845 rasters in interlace mode
- bbc now uses correct hd6845 - saa5050 outputs all 20 scanlines
This commit is contained in:
parent
15f6df6d66
commit
c69bc4a474
@ -220,7 +220,7 @@ WRITE8_MEMBER( mc6845_device::register_w )
|
|||||||
case 0x06: m_vert_disp = data & 0x7f; break;
|
case 0x06: m_vert_disp = data & 0x7f; break;
|
||||||
case 0x07: m_vert_sync_pos = data & 0x7f; break;
|
case 0x07: m_vert_sync_pos = data & 0x7f; break;
|
||||||
case 0x08: m_mode_control = data & 0xff; break;
|
case 0x08: m_mode_control = data & 0xff; break;
|
||||||
case 0x09: m_max_ras_addr = data & 0x1f; if (MODE_INTERLACE_AND_VIDEO) m_max_ras_addr += m_interlace_adjust; break;
|
case 0x09: m_max_ras_addr = data & 0x1f; break;
|
||||||
case 0x0a: m_cursor_start_ras = data & 0x7f; break;
|
case 0x0a: m_cursor_start_ras = data & 0x7f; break;
|
||||||
case 0x0b: m_cursor_end_ras = data & 0x1f; break;
|
case 0x0b: m_cursor_end_ras = data & 0x1f; break;
|
||||||
case 0x0c: m_disp_start_addr = ((data & 0x3f) << 8) | (m_disp_start_addr & 0x00ff); break;
|
case 0x0c: m_disp_start_addr = ((data & 0x3f) << 8) | (m_disp_start_addr & 0x00ff); break;
|
||||||
@ -456,7 +456,7 @@ void mc6845_device::recompute_parameters(bool postload)
|
|||||||
{
|
{
|
||||||
UINT16 hsync_on_pos, hsync_off_pos, vsync_on_pos, vsync_off_pos;
|
UINT16 hsync_on_pos, hsync_off_pos, vsync_on_pos, vsync_off_pos;
|
||||||
|
|
||||||
UINT16 video_char_height = m_max_ras_addr + 1; // fix garbage at the bottom of the screen (eg victor9k)
|
UINT16 video_char_height = m_max_ras_addr + (MODE_INTERLACE_AND_VIDEO ? m_interlace_adjust : m_noninterlace_adjust); // fix garbage at the bottom of the screen (eg victor9k)
|
||||||
// Would be useful for 'interlace and video' mode support...
|
// Would be useful for 'interlace and video' mode support...
|
||||||
// UINT16 frame_char_height = (MODE_INTERLACE_AND_VIDEO ? m_max_ras_addr / 2 : m_max_ras_addr) + 1;
|
// UINT16 frame_char_height = (MODE_INTERLACE_AND_VIDEO ? m_max_ras_addr / 2 : m_max_ras_addr) + 1;
|
||||||
|
|
||||||
@ -654,7 +654,7 @@ void mc6845_device::handle_line_timer()
|
|||||||
// For rudimentary 'interlace and video' support, m_raster_counter increments by 1 rather than the correct 2.
|
// For rudimentary 'interlace and video' support, m_raster_counter increments by 1 rather than the correct 2.
|
||||||
// The correct test would be:
|
// The correct test would be:
|
||||||
// if ( m_raster_counter == (MODE_INTERLACE_AND_VIDEO ? m_max_ras_addr + 1 : m_max_ras_addr) )
|
// if ( m_raster_counter == (MODE_INTERLACE_AND_VIDEO ? m_max_ras_addr + 1 : m_max_ras_addr) )
|
||||||
if ( m_raster_counter == m_max_ras_addr )
|
if ( m_raster_counter == m_max_ras_addr + (MODE_INTERLACE_AND_VIDEO ? m_interlace_adjust : m_noninterlace_adjust) - 1 )
|
||||||
{
|
{
|
||||||
/* Check if we have reached the end of the vertical area */
|
/* Check if we have reached the end of the vertical area */
|
||||||
if ( m_line_counter == m_vert_char_total )
|
if ( m_line_counter == m_vert_char_total )
|
||||||
@ -922,7 +922,7 @@ void mc6845_device::update_cursor_state()
|
|||||||
UINT8 mc6845_device::draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
UINT8 mc6845_device::draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||||
{
|
{
|
||||||
/* compute the current raster line */
|
/* compute the current raster line */
|
||||||
UINT8 ra = y % (m_max_ras_addr + 1);
|
UINT8 ra = y % (m_max_ras_addr + (MODE_INTERLACE_AND_VIDEO ? m_interlace_adjust : m_noninterlace_adjust));
|
||||||
|
|
||||||
/* check if the cursor is visible and is on this scanline */
|
/* check if the cursor is visible and is on this scanline */
|
||||||
int cursor_visible = m_cursor_state &&
|
int cursor_visible = m_cursor_state &&
|
||||||
@ -943,7 +943,7 @@ UINT8 mc6845_device::draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle
|
|||||||
if (MODE_ROW_COLUMN_ADDRESSING)
|
if (MODE_ROW_COLUMN_ADDRESSING)
|
||||||
{
|
{
|
||||||
UINT8 cc = 0;
|
UINT8 cc = 0;
|
||||||
UINT8 cr = y / (m_max_ras_addr + 1);
|
UINT8 cr = y / (m_max_ras_addr + (MODE_INTERLACE_AND_VIDEO ? m_interlace_adjust : m_noninterlace_adjust));
|
||||||
UINT16 ma = (cr << 8) | cc;
|
UINT16 ma = (cr << 8) | cc;
|
||||||
|
|
||||||
m_update_row_cb(bitmap, cliprect, ma, ra, y, m_horiz_disp, cursor_x, de, hbp, vbp);
|
m_update_row_cb(bitmap, cliprect, ma, ra, y, m_horiz_disp, cursor_x, de, hbp, vbp);
|
||||||
@ -954,7 +954,7 @@ UINT8 mc6845_device::draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* update MA if the last raster address */
|
/* update MA if the last raster address */
|
||||||
if (ra == m_max_ras_addr)
|
if (ra == m_max_ras_addr + (MODE_INTERLACE_AND_VIDEO ? m_interlace_adjust : m_noninterlace_adjust) - 1)
|
||||||
m_current_disp_addr = (m_current_disp_addr + m_horiz_disp) & 0x3fff;
|
m_current_disp_addr = (m_current_disp_addr + m_horiz_disp) & 0x3fff;
|
||||||
|
|
||||||
return ra;
|
return ra;
|
||||||
@ -1064,6 +1064,8 @@ void mc6845_device::device_start()
|
|||||||
m_line_address = 0;
|
m_line_address = 0;
|
||||||
m_current_disp_addr = 0;
|
m_current_disp_addr = 0;
|
||||||
m_disp_start_addr = 0;
|
m_disp_start_addr = 0;
|
||||||
|
m_noninterlace_adjust = 1;
|
||||||
|
m_interlace_adjust = 1;
|
||||||
|
|
||||||
save_item(NAME(m_show_border_area));
|
save_item(NAME(m_show_border_area));
|
||||||
save_item(NAME(m_visarea_adjust_min_x));
|
save_item(NAME(m_visarea_adjust_min_x));
|
||||||
@ -1173,6 +1175,11 @@ void hd6845_device::device_start()
|
|||||||
m_supports_status_reg_d6 = false;
|
m_supports_status_reg_d6 = false;
|
||||||
m_supports_status_reg_d7 = false;
|
m_supports_status_reg_d7 = false;
|
||||||
m_supports_transparent = false;
|
m_supports_transparent = false;
|
||||||
|
|
||||||
|
// Non-interlace Mode, Interlace Sync Mode - When total number of rasters is RN, RN-1 shall be programmed.
|
||||||
|
m_noninterlace_adjust = 1;
|
||||||
|
// Interlace Sync & Video Mode - When total number of rasters is RN, RN-2 shall be programmed.
|
||||||
|
m_interlace_adjust = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -167,7 +167,7 @@ public:
|
|||||||
void set_hpixels_per_column(int hpixels_per_column);
|
void set_hpixels_per_column(int hpixels_per_column);
|
||||||
|
|
||||||
/* updates the screen -- this will call begin_update(),
|
/* updates the screen -- this will call begin_update(),
|
||||||
followed by update_row() reapeatedly and after all row
|
followed by update_row() repeatedly and after all row
|
||||||
updating is complete, end_update() */
|
updating is complete, end_update() */
|
||||||
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
@ -283,7 +283,8 @@ protected:
|
|||||||
************************/
|
************************/
|
||||||
|
|
||||||
bool m_show_border_area; /* visible screen area (false) active display (true) active display + blanking */
|
bool m_show_border_area; /* visible screen area (false) active display (true) active display + blanking */
|
||||||
int m_interlace_adjust; /* adjust max ras in interlace mode */
|
int m_noninterlace_adjust; /* adjust max ras in non-interlace mode */
|
||||||
|
int m_interlace_adjust; /* adjust max ras in interlace mode */
|
||||||
|
|
||||||
/* visible screen area adjustment */
|
/* visible screen area adjustment */
|
||||||
int m_visarea_adjust_min_x;
|
int m_visarea_adjust_min_x;
|
||||||
@ -314,7 +315,7 @@ protected:
|
|||||||
* vblank/hblank timing not supported yet! */
|
* vblank/hblank timing not supported yet! */
|
||||||
mc6845_on_update_addr_changed_delegate m_on_update_addr_changed_cb;
|
mc6845_on_update_addr_changed_delegate m_on_update_addr_changed_cb;
|
||||||
|
|
||||||
/* if specified, this gets called for every change of the disply enable pin (pin 18) */
|
/* if specified, this gets called for every change of the display enable pin (pin 18) */
|
||||||
devcb_write_line m_out_de_cb;
|
devcb_write_line m_out_de_cb;
|
||||||
|
|
||||||
/* if specified, this gets called for every change of the cursor pin (pin 19) */
|
/* if specified, this gets called for every change of the cursor pin (pin 19) */
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
|
|
||||||
|
- interlace, use CRS to output odd/even fields
|
||||||
- remote controller input
|
- remote controller input
|
||||||
- boxing
|
- boxing
|
||||||
|
|
||||||
@ -535,7 +536,7 @@ WRITE_LINE_MEMBER( saa5050_device::lose_w )
|
|||||||
m_ra++;
|
m_ra++;
|
||||||
m_ra %= 20;
|
m_ra %= 20;
|
||||||
|
|
||||||
if (m_ra == 19)
|
if (!m_ra)
|
||||||
{
|
{
|
||||||
if (m_double_height_bottom_row)
|
if (m_double_height_bottom_row)
|
||||||
m_double_height_bottom_row = false;
|
m_double_height_bottom_row = false;
|
||||||
|
@ -401,7 +401,7 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
|
|||||||
MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
|
MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
|
||||||
|
|
||||||
MCFG_MC6845_ADD("ic30", MC6845, "screen", XTAL_15MHz / 10)
|
MCFG_MC6845_ADD("ic30", MC6845, "screen", XTAL_15MHz / 10)
|
||||||
MCFG_MC6845_INTERLACE_ADJUST(1)
|
MCFG_MC6845_INTERLACE_ADJUST(2)
|
||||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||||
MCFG_MC6845_CHAR_WIDTH(10)
|
MCFG_MC6845_CHAR_WIDTH(10)
|
||||||
MCFG_MC6845_UPDATE_ROW_CB(apricot_state, crtc_update_row)
|
MCFG_MC6845_UPDATE_ROW_CB(apricot_state, crtc_update_row)
|
||||||
|
@ -30,6 +30,12 @@
|
|||||||
ARM1 - ARM Evaluation System
|
ARM1 - ARM Evaluation System
|
||||||
ADB20 - Master Compact
|
ADB20 - Master Compact
|
||||||
|
|
||||||
|
Acorn Business Computer
|
||||||
|
|
||||||
|
ABC110 - 64K, 10MB HDD, Z80, CP/M 2.2
|
||||||
|
ABC210/ACW443 - 4096K, 20MB HDD, 32016, PanOS
|
||||||
|
ABC310 - 1024K, 10MB HDD, 80286, DOS 3.1/GEM
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/* Core includes */
|
/* Core includes */
|
||||||
@ -136,17 +142,17 @@ static ADDRESS_MAP_START( bbca_mem, AS_PROGRAM, 8, bbc_state )
|
|||||||
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */
|
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(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */
|
||||||
AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */
|
AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */
|
||||||
/* fe00-feff SHEILA Address Page */
|
/* fe00-feff SHEILA Address Page */
|
||||||
AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */
|
AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("hd6845", hd6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */
|
||||||
AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w)
|
AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("hd6845", hd6845_device, register_r, register_w)
|
||||||
AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */
|
AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */
|
||||||
AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w)
|
AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w)
|
||||||
AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */
|
AM_RANGE(0xfe10, 0xfe17) AM_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(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 */
|
AM_RANGE(0xfe20, 0xfe2f) AM_READWRITE(bbc_fe_r, 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 */
|
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 */
|
/* W: fe30-fe3f 74LS161 Paged ROM selector */
|
||||||
AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */
|
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(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(0xfe80, 0xfe9f) AM_NOP /* fe80-fe9f 8271/1770 FDC # Floppy disc controller */
|
||||||
@ -162,18 +168,18 @@ static ADDRESS_MAP_START( bbc_base, AS_PROGRAM, 8, bbc_state )
|
|||||||
|
|
||||||
AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */
|
AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7") /* c000-fbff OS ROM */
|
||||||
AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */
|
AM_RANGE(0xfc00, 0xfdff) AM_NOP /* fc00-fdff FRED & JIM Pages */
|
||||||
/* fe00-feff SHEILA Address Page */
|
/* fe00-feff SHEILA Address Page */
|
||||||
AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */
|
AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0x06) AM_DEVREADWRITE("hd6845", hd6845_device, status_r, address_w) /* fe00-fe07 6845 CRTC Video controller */
|
||||||
AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w)
|
AM_RANGE(0xfe01, 0xfe01) AM_MIRROR(0x06) AM_DEVREADWRITE("hd6845", hd6845_device, register_r, register_w)
|
||||||
AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */
|
AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_r, control_w) /* fe08-fe0F 6850 ACIA Serial controller */
|
||||||
AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w)
|
AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_r, data_w)
|
||||||
AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */
|
AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w) /* fe10-fe17 Serial ULA Serial system chip */
|
||||||
AM_RANGE(0xfe18, 0xfe1f) AM_READ_PORT("STATID") /* fe18-fe1f INTOFF/STATID ECONET Interrupt Off / ID No. */
|
AM_RANGE(0xfe18, 0xfe1f) AM_READ_PORT("STATID") /* 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 */
|
AM_RANGE(0xfe20, 0xfe2f) AM_READWRITE(bbc_fe_r, 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(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write) /* fe40-fe5f 6522 VIA SYSTEM VIA */
|
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(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write) /* fe60-fe7f 6522 VIA USER VIA */
|
||||||
/* fe80-fe9f FDC Floppy disc controller */
|
/* fe80-fe9f FDC Floppy disc controller */
|
||||||
AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */
|
AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r) /* fea0-febf 68B54 ADLC ECONET controller */
|
||||||
AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */
|
AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */
|
||||||
AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */
|
AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */
|
||||||
@ -186,7 +192,7 @@ static ADDRESS_MAP_START( bbcb_mem, AS_PROGRAM, 8, bbc_state )
|
|||||||
AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */
|
AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */
|
||||||
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */
|
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */
|
||||||
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */
|
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 */
|
/* W: fe30-fe3f 84LS161 Paged ROM selector */
|
||||||
AM_RANGE(0xfe80, 0xfe83) AM_DEVICE("i8271", i8271_device, map) /* fe80-fe83 8271 FDC Floppy disc controller */
|
AM_RANGE(0xfe80, 0xfe83) AM_DEVICE("i8271", i8271_device, map) /* fe80-fe83 8271 FDC Floppy disc controller */
|
||||||
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("i8271", i8271_device, data_r, data_w) /* fe84-fe9f 8271 FDC Floppy disc controller */
|
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("i8271", i8271_device, data_r, data_w) /* fe84-fe9f 8271 FDC Floppy disc controller */
|
||||||
AM_IMPORT_FROM(bbc_base)
|
AM_IMPORT_FROM(bbc_base)
|
||||||
@ -198,7 +204,7 @@ static ADDRESS_MAP_START(bbcb1770_mem, AS_PROGRAM, 8, bbc_state)
|
|||||||
AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */
|
AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w) /* 4000-7fff Regular Ram */
|
||||||
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */
|
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w) /* 8000-bfff Paged ROM */
|
||||||
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w) /* R: fe30-fe3f NC Not Connected */
|
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 */
|
/* W: fe30-fe3f 84LS161 Paged ROM selector */
|
||||||
AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */
|
AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */
|
||||||
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */
|
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */
|
||||||
AM_IMPORT_FROM(bbc_base)
|
AM_IMPORT_FROM(bbc_base)
|
||||||
@ -211,7 +217,7 @@ static ADDRESS_MAP_START( bbcbp_mem, AS_PROGRAM, 8, bbc_state )
|
|||||||
AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w) /* 8000-afff Paged ROM or 12K of SWRAM */
|
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(0xb000, 0xbfff) AM_READ_BANK("bank6") /* b000-bfff Rest of paged ROM area */
|
||||||
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */
|
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 */
|
/* W: fe30-fe3f 84LS161 Paged ROM selector */
|
||||||
AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */
|
AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */
|
||||||
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */
|
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */
|
||||||
AM_IMPORT_FROM(bbc_base)
|
AM_IMPORT_FROM(bbc_base)
|
||||||
@ -224,7 +230,7 @@ static ADDRESS_MAP_START( bbcbp128_mem, AS_PROGRAM, 8, bbc_state )
|
|||||||
AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_128_w) /* 8000-afff Paged ROM or 12K of SWRAM */
|
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(0xb000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE(bbc_memorybp6_128_w) /* b000-bfff Rest of paged ROM area */
|
||||||
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */
|
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 */
|
/* W: fe30-fe3f 84LS161 Paged ROM selector */
|
||||||
AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */
|
AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */
|
||||||
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */
|
AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_t, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */
|
||||||
AM_IMPORT_FROM(bbc_base)
|
AM_IMPORT_FROM(bbc_base)
|
||||||
@ -237,7 +243,7 @@ static ADDRESS_MAP_START( reutapm_mem, AS_PROGRAM, 8, bbc_state )
|
|||||||
AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w) /* 8000-afff Paged ROM or 12K of SWRAM */
|
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(0xb000, 0xbfff) AM_READ_BANK("bank6") /* b000-bfff Rest of paged ROM area */
|
||||||
AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w) /* R: fe30-fe3f NC Not Connected */
|
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 */
|
/* W: fe30-fe3f 84LS161 Paged ROM selector */
|
||||||
AM_RANGE(0xfe80, 0xfe83) AM_NOP /* fe80-fe83 1770 FDC Drive control register */
|
AM_RANGE(0xfe80, 0xfe83) AM_NOP /* fe80-fe83 1770 FDC Drive control register */
|
||||||
AM_RANGE(0xfe84, 0xfe9f) AM_NOP /* fe84-fe9f 1770 FDC Floppy disc controller */
|
AM_RANGE(0xfe84, 0xfe9f) AM_NOP /* fe84-fe9f 1770 FDC Floppy disc controller */
|
||||||
AM_IMPORT_FROM(bbc_base)
|
AM_IMPORT_FROM(bbc_base)
|
||||||
@ -758,11 +764,12 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
|
|||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
MCFG_SCREEN_ADD("screen", RASTER)
|
||||||
|
//MCFG_SCREEN_RAW_PARAMS( XTAL_17_73447MHz / 4, 1024, 80, 80 + 640 + 48, 625, 12, 12 + 256 + 13 )
|
||||||
MCFG_SCREEN_SIZE(640, 256)
|
MCFG_SCREEN_SIZE(640, 256)
|
||||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 256-1)
|
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 256-1)
|
||||||
MCFG_SCREEN_REFRESH_RATE(50)
|
MCFG_SCREEN_REFRESH_RATE(50)
|
||||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(128))
|
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(128))
|
||||||
MCFG_SCREEN_UPDATE_DEVICE("mc6845", mc6845_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE("hd6845", hd6845_device, screen_update)
|
||||||
|
|
||||||
MCFG_PALETTE_ADD("palette", 16)
|
MCFG_PALETTE_ADD("palette", 16)
|
||||||
MCFG_PALETTE_INIT_OWNER(bbc_state,bbc)
|
MCFG_PALETTE_INIT_OWNER(bbc_state,bbc)
|
||||||
@ -771,7 +778,7 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
|
|||||||
MCFG_SAA5050_SCREEN_SIZE(40, 25, 40)
|
MCFG_SAA5050_SCREEN_SIZE(40, 25, 40)
|
||||||
|
|
||||||
/* crtc */
|
/* crtc */
|
||||||
MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000)
|
MCFG_MC6845_ADD("hd6845", HD6845, "screen", 2000000)
|
||||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||||
MCFG_MC6845_CHAR_WIDTH(12)
|
MCFG_MC6845_CHAR_WIDTH(12)
|
||||||
MCFG_MC6845_UPDATE_ROW_CB(bbc_state, crtc_update_row)
|
MCFG_MC6845_UPDATE_ROW_CB(bbc_state, crtc_update_row)
|
||||||
@ -875,6 +882,7 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca )
|
|||||||
/* software lists */
|
/* software lists */
|
||||||
MCFG_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass")
|
MCFG_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass")
|
||||||
MCFG_SOFTWARE_LIST_ADD("flop_ls_b", "bbcb_flop")
|
MCFG_SOFTWARE_LIST_ADD("flop_ls_b", "bbcb_flop")
|
||||||
|
//MCFG_SOFTWARE_LIST_ADD("flop_ls_b_orig", "bbcb_orig_flop")
|
||||||
MCFG_SOFTWARE_LIST_ADD("flop_ls_z80", "bbc_z80_flop")
|
MCFG_SOFTWARE_LIST_ADD("flop_ls_z80", "bbc_z80_flop")
|
||||||
MCFG_SOFTWARE_LIST_ADD("flop_ls_32016", "bbc_32016_flop")
|
MCFG_SOFTWARE_LIST_ADD("flop_ls_32016", "bbc_32016_flop")
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
@ -970,6 +978,7 @@ static MACHINE_CONFIG_DERIVED( abc110, bbcbp )
|
|||||||
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a")
|
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
|
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b")
|
||||||
|
//MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b_orig")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016")
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -990,6 +999,7 @@ static MACHINE_CONFIG_DERIVED( acw443, bbcbp )
|
|||||||
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a")
|
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
|
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b")
|
||||||
|
//MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b_orig")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80")
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -1041,6 +1051,7 @@ static MACHINE_CONFIG_DERIVED( reutapm, bbcbp )
|
|||||||
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a")
|
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
|
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b")
|
||||||
|
//MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b_orig")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016")
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
@ -1077,7 +1088,8 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
|||||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(128))
|
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(128))
|
||||||
MCFG_SCREEN_SIZE(640, 256)
|
MCFG_SCREEN_SIZE(640, 256)
|
||||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 256-1)
|
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 256-1)
|
||||||
MCFG_SCREEN_UPDATE_DEVICE("mc6845", mc6845_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE("hd6845", hd6845_device, screen_update)
|
||||||
|
|
||||||
MCFG_PALETTE_ADD("palette", 16)
|
MCFG_PALETTE_ADD("palette", 16)
|
||||||
MCFG_PALETTE_INIT_OWNER(bbc_state,bbc)
|
MCFG_PALETTE_INIT_OWNER(bbc_state,bbc)
|
||||||
|
|
||||||
@ -1085,7 +1097,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
|||||||
MCFG_SAA5050_SCREEN_SIZE(40, 25, 40)
|
MCFG_SAA5050_SCREEN_SIZE(40, 25, 40)
|
||||||
|
|
||||||
/* crtc */
|
/* crtc */
|
||||||
MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000)
|
MCFG_MC6845_ADD("hd6845", HD6845, "screen", 2000000)
|
||||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||||
MCFG_MC6845_CHAR_WIDTH(12)
|
MCFG_MC6845_CHAR_WIDTH(12)
|
||||||
MCFG_MC6845_UPDATE_ROW_CB(bbc_state, crtc_update_row)
|
MCFG_MC6845_UPDATE_ROW_CB(bbc_state, crtc_update_row)
|
||||||
@ -1128,6 +1140,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
|||||||
MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_a", "bbca_cass")
|
MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_a", "bbca_cass")
|
||||||
MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_b", "bbcb_cass")
|
MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_b", "bbcb_cass")
|
||||||
MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("flop_ls_b", "bbcb_flop")
|
MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("flop_ls_b", "bbcb_flop")
|
||||||
|
//MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("flop_ls_b_orig", "bbcb_orig_flop")
|
||||||
|
|
||||||
/* acia */
|
/* acia */
|
||||||
MCFG_DEVICE_ADD("acia6850", ACIA6850, 0)
|
MCFG_DEVICE_ADD("acia6850", ACIA6850, 0)
|
||||||
@ -1217,6 +1230,7 @@ static MACHINE_CONFIG_DERIVED( bbcmet, bbcm )
|
|||||||
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
|
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_m")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_m")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b")
|
||||||
|
//MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b_orig")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016")
|
||||||
|
|
||||||
@ -1278,12 +1292,16 @@ static MACHINE_CONFIG_DERIVED( bbcmc, bbcm )
|
|||||||
/* eeprom pcd8572 */
|
/* eeprom pcd8572 */
|
||||||
//MCFG_DEVICE_REMOVE("rtc")
|
//MCFG_DEVICE_REMOVE("rtc")
|
||||||
|
|
||||||
|
MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcmc)
|
||||||
|
MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcmc)
|
||||||
|
|
||||||
/* software lists */
|
/* software lists */
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_m")
|
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_m")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a")
|
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
|
MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_m")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_m")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b")
|
||||||
|
//MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b_orig")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016")
|
MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016")
|
||||||
MCFG_SOFTWARE_LIST_REMOVE("cart_ls_m")
|
MCFG_SOFTWARE_LIST_REMOVE("cart_ls_m")
|
||||||
|
@ -34,6 +34,15 @@
|
|||||||
|
|
||||||
#define RS232_TAG "rs232"
|
#define RS232_TAG "rs232"
|
||||||
|
|
||||||
|
enum machine_type_t
|
||||||
|
{
|
||||||
|
MODELA,
|
||||||
|
MODELB,
|
||||||
|
BPLUS,
|
||||||
|
MASTER,
|
||||||
|
COMPACT
|
||||||
|
};
|
||||||
|
|
||||||
class bbc_state : public driver_device
|
class bbc_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -41,7 +50,7 @@ public:
|
|||||||
driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_ram(*this, RAM_TAG),
|
m_ram(*this, RAM_TAG),
|
||||||
m_mc6845(*this, "mc6845"),
|
m_hd6845(*this, "hd6845"),
|
||||||
m_adlc(*this, "mc6854"),
|
m_adlc(*this, "mc6854"),
|
||||||
m_sn(*this, "sn76489"),
|
m_sn(*this, "sn76489"),
|
||||||
m_trom(*this, "saa5050"),
|
m_trom(*this, "saa5050"),
|
||||||
@ -137,6 +146,9 @@ public:
|
|||||||
DECLARE_MACHINE_RESET(bbcm);
|
DECLARE_MACHINE_RESET(bbcm);
|
||||||
DECLARE_VIDEO_START(bbcm);
|
DECLARE_VIDEO_START(bbcm);
|
||||||
|
|
||||||
|
DECLARE_MACHINE_START(bbcmc);
|
||||||
|
DECLARE_MACHINE_RESET(bbcmc);
|
||||||
|
|
||||||
DECLARE_PALETTE_INIT(bbc);
|
DECLARE_PALETTE_INIT(bbc);
|
||||||
UINT32 screen_update_bbc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
UINT32 screen_update_bbc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
INTERRUPT_GEN_MEMBER(bbcb_vsync);
|
INTERRUPT_GEN_MEMBER(bbcb_vsync);
|
||||||
@ -190,7 +202,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<ram_device> m_ram;
|
required_device<ram_device> m_ram;
|
||||||
required_device<mc6845_device> m_mc6845;
|
required_device<hd6845_device> m_hd6845;
|
||||||
optional_device<mc6854_device> m_adlc;
|
optional_device<mc6854_device> m_adlc;
|
||||||
optional_device<sn76489_device> m_sn;
|
optional_device<sn76489_device> m_sn;
|
||||||
public: // HACK FOR MC6845
|
public: // HACK FOR MC6845
|
||||||
@ -227,6 +239,8 @@ public: // HACK FOR MC6845
|
|||||||
|
|
||||||
void check_interrupts();
|
void check_interrupts();
|
||||||
|
|
||||||
|
machine_type_t m_machinetype;
|
||||||
|
|
||||||
bool m_os01; // flag indicating whether OS 0.1 is being used
|
bool m_os01; // flag indicating whether OS 0.1 is being used
|
||||||
int m_SWRAMtype; // this stores the DIP switch setting for the SWRAM 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_Speech; // this stores the CONF setting for Speech enabled/disabled
|
||||||
|
@ -551,8 +551,8 @@ READ8_MEMBER(bbc_state::bbcm_r)
|
|||||||
if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
|
if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
|
||||||
{
|
{
|
||||||
myo = offset-0x200;
|
myo = offset-0x200;
|
||||||
if ((myo>=0x00) && (myo<=0x06) && (myo+0x01) & 1) return m_mc6845->status_r(space, myo-0x00); /* Video controller */
|
if ((myo>=0x00) && (myo<=0x06) && (myo+0x01) & 1) return m_hd6845->status_r(space, myo-0x00); /* Video controller */
|
||||||
if ((myo>=0x01) && (myo<=0x07) && (myo & 1)) return m_mc6845->register_r(space, myo-0x01);
|
if ((myo>=0x01) && (myo<=0x07) && (myo & 1)) return m_hd6845->register_r(space, myo-0x01);
|
||||||
if ((myo>=0x08) && (myo<=0x0e) && (myo+0x01) & 1) return m_acia ? m_acia->status_r(space, myo-0x08) : 0xfe; /* Serial controller */
|
if ((myo>=0x08) && (myo<=0x0e) && (myo+0x01) & 1) return m_acia ? m_acia->status_r(space, myo-0x08) : 0xfe; /* Serial controller */
|
||||||
if ((myo>=0x09) && (myo<=0x0f) && (myo & 1)) return m_acia ? m_acia->data_r(space, myo-0x09) : 0xfe;
|
if ((myo>=0x09) && (myo<=0x0f) && (myo & 1)) return m_acia ? m_acia->data_r(space, myo-0x09) : 0xfe;
|
||||||
if ((myo>=0x10) && (myo<=0x17)) return 0xfe; /* Serial System Chip */
|
if ((myo>=0x10) && (myo<=0x17)) return 0xfe; /* Serial System Chip */
|
||||||
@ -569,8 +569,8 @@ READ8_MEMBER(bbc_state::bbcm_r)
|
|||||||
if ((myo>=0x60) && (myo<=0x7f)) return m_via6522_1 ? m_via6522_1->read(space, myo-0x60) : 0xfe;
|
if ((myo>=0x60) && (myo<=0x7f)) return m_via6522_1 ? m_via6522_1->read(space, myo-0x60) : 0xfe;
|
||||||
if ((myo>=0x80) && (myo<=0x9f)) return 0xfe;
|
if ((myo>=0x80) && (myo<=0x9f)) return 0xfe;
|
||||||
if ((myo>=0xa0) && (myo<=0xbf)) return m_adlc ? m_adlc->read(space, myo & 0x03) : 0xfe;
|
if ((myo>=0xa0) && (myo<=0xbf)) return m_adlc ? m_adlc->read(space, myo & 0x03) : 0xfe;
|
||||||
if ((myo>=0xc0) && (myo<=0xdf)) return 0xfe;
|
if ((myo>=0xc0) && (myo<=0xdf)) return 0xff;
|
||||||
if ((myo>=0xe0) && (myo<=0xff)) return 0xfe;
|
if ((myo>=0xe0) && (myo<=0xff)) return 0xff;
|
||||||
}
|
}
|
||||||
return 0xfe;
|
return 0xfe;
|
||||||
}
|
}
|
||||||
@ -582,8 +582,8 @@ WRITE8_MEMBER(bbc_state::bbcm_w)
|
|||||||
if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
|
if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
|
||||||
{
|
{
|
||||||
myo=offset-0x200;
|
myo=offset-0x200;
|
||||||
if ((myo>=0x00) && (myo<=0x06) && (myo+0x01) & 1) m_mc6845->address_w(space, myo-0x00, data); /* Video Controller */
|
if ((myo>=0x00) && (myo<=0x06) && (myo+0x01) & 1) m_hd6845->address_w(space, myo-0x00, data); /* Video Controller */
|
||||||
if ((myo>=0x01) && (myo<=0x07) && (myo & 1)) m_mc6845->register_w(space, myo-0x01, data);
|
if ((myo>=0x01) && (myo<=0x07) && (myo & 1)) m_hd6845->register_w(space, myo-0x01, data);
|
||||||
if ((myo>=0x08) && (myo<=0x0e) && (myo+0x01) & 1) if (m_acia) m_acia->control_w(space, myo-0x08, data); /* Serial controller */
|
if ((myo>=0x08) && (myo<=0x0e) && (myo+0x01) & 1) if (m_acia) m_acia->control_w(space, myo-0x08, data); /* Serial controller */
|
||||||
if ((myo>=0x09) && (myo<=0x0f) && (myo & 1)) if (m_acia) m_acia->data_w(space, myo-0x09, data);
|
if ((myo>=0x09) && (myo<=0x0f) && (myo & 1)) if (m_acia) m_acia->data_w(space, myo-0x09, data);
|
||||||
if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10, data); /* Serial System Chip */
|
if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10, data); /* Serial System Chip */
|
||||||
@ -893,7 +893,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (m_rtc && m_MC146818_WR == 0)
|
if (m_machinetype == MASTER && m_MC146818_WR == 0)
|
||||||
{
|
{
|
||||||
/* BBC Master has NVRAM Here */
|
/* BBC Master has NVRAM Here */
|
||||||
m_MC146818_WR = 1;
|
m_MC146818_WR = 1;
|
||||||
@ -911,7 +911,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (m_rtc && m_MC146818_DS == 0)
|
if (m_machinetype == MASTER && m_MC146818_DS == 0)
|
||||||
{
|
{
|
||||||
/* BBC Master has NVRAM Here */
|
/* BBC Master has NVRAM Here */
|
||||||
m_MC146818_DS = 1;
|
m_MC146818_DS = 1;
|
||||||
@ -976,7 +976,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (m_rtc && m_MC146818_WR == 1)
|
if (m_machinetype == MASTER && m_MC146818_WR == 1)
|
||||||
{
|
{
|
||||||
/* BBC Master has NVRAM Here */
|
/* BBC Master has NVRAM Here */
|
||||||
m_MC146818_WR = 0;
|
m_MC146818_WR = 0;
|
||||||
@ -994,7 +994,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (m_rtc && m_MC146818_DS == 1)
|
if (m_machinetype == MASTER && m_MC146818_DS == 1)
|
||||||
{
|
{
|
||||||
/* BBC Master has NVRAM Here */
|
/* BBC Master has NVRAM Here */
|
||||||
m_MC146818_DS = 0;
|
m_MC146818_DS = 0;
|
||||||
@ -1051,7 +1051,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (m_rtc)
|
if (m_machinetype == MASTER)
|
||||||
{
|
{
|
||||||
//set the Address Select
|
//set the Address Select
|
||||||
if (m_MC146818_AS != BIT(data,7))
|
if (m_MC146818_AS != BIT(data,7))
|
||||||
@ -1720,6 +1720,7 @@ void bbc_state::bbcm_setup_banks(memory_bank *membank, int banks, UINT32 shift,
|
|||||||
|
|
||||||
MACHINE_START_MEMBER(bbc_state, bbca)
|
MACHINE_START_MEMBER(bbc_state, bbca)
|
||||||
{
|
{
|
||||||
|
m_machinetype = MODELA;
|
||||||
bbc_setup_banks(m_bank4, 4, 0, 0x4000);
|
bbc_setup_banks(m_bank4, 4, 0, 0x4000);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1749,6 +1750,7 @@ MACHINE_RESET_MEMBER(bbc_state, bbca)
|
|||||||
|
|
||||||
MACHINE_START_MEMBER(bbc_state, bbcb)
|
MACHINE_START_MEMBER(bbc_state, bbcb)
|
||||||
{
|
{
|
||||||
|
m_machinetype = MODELB;
|
||||||
m_mc6850_clock = 0;
|
m_mc6850_clock = 0;
|
||||||
bbc_setup_banks(m_bank4, 16, 0, 0x4000);
|
bbc_setup_banks(m_bank4, 16, 0, 0x4000);
|
||||||
}
|
}
|
||||||
@ -1771,6 +1773,7 @@ MACHINE_RESET_MEMBER(bbc_state, bbcb)
|
|||||||
|
|
||||||
MACHINE_START_MEMBER(bbc_state, bbcbp)
|
MACHINE_START_MEMBER(bbc_state, bbcbp)
|
||||||
{
|
{
|
||||||
|
m_machinetype = BPLUS;
|
||||||
m_mc6850_clock = 0;
|
m_mc6850_clock = 0;
|
||||||
|
|
||||||
m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcbp_direct_handler), this));
|
m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcbp_direct_handler), this));
|
||||||
@ -1795,6 +1798,7 @@ MACHINE_RESET_MEMBER(bbc_state, bbcbp)
|
|||||||
|
|
||||||
MACHINE_START_MEMBER(bbc_state, bbcm)
|
MACHINE_START_MEMBER(bbc_state, bbcm)
|
||||||
{
|
{
|
||||||
|
m_machinetype = MASTER;
|
||||||
m_mc6850_clock = 0;
|
m_mc6850_clock = 0;
|
||||||
|
|
||||||
m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcm_direct_handler), this));
|
m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcm_direct_handler), this));
|
||||||
@ -1818,3 +1822,16 @@ MACHINE_RESET_MEMBER(bbc_state, bbcm)
|
|||||||
|
|
||||||
bbcb_IC32_initialise(this);
|
bbcb_IC32_initialise(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MACHINE_START_MEMBER(bbc_state, bbcmc)
|
||||||
|
{
|
||||||
|
MACHINE_START_CALL_MEMBER(bbcm);
|
||||||
|
|
||||||
|
m_machinetype = COMPACT;
|
||||||
|
}
|
||||||
|
|
||||||
|
MACHINE_RESET_MEMBER(bbc_state, bbcmc)
|
||||||
|
{
|
||||||
|
MACHINE_RESET_CALL_MEMBER(bbcm);
|
||||||
|
}
|
@ -76,10 +76,10 @@ unsigned int bbc_state::calculate_video_address(int ma,int ra)
|
|||||||
if (BIT(ma,13))
|
if (BIT(ma,13))
|
||||||
{
|
{
|
||||||
// IC 10 and IC 11
|
// IC 10 and IC 11
|
||||||
m = ((ma&0x3ff) | 0x3c00) | ((s&0x8)<<11);
|
m = ((ma & 0x3ff) | 0x3c00) | ((s & 0x8)<<11);
|
||||||
} else {
|
} else {
|
||||||
// IC 8 and IC 9
|
// IC 8 and IC 9
|
||||||
m = ((ma&0xff)<<3) | (s<<11) | (ra&0x7);
|
m = ((ma & 0xff)<<3) | (s<<11) | (ra & 0x7);
|
||||||
}
|
}
|
||||||
if (m_memorySize == 16)
|
if (m_memorySize == 16)
|
||||||
return m & 0x3fff;
|
return m & 0x3fff;
|
||||||
@ -144,12 +144,12 @@ WRITE8_MEMBER(bbc_state::bbc_videoULA_w)
|
|||||||
// Set the control register in the Video ULA
|
// Set the control register in the Video ULA
|
||||||
case 0:
|
case 0:
|
||||||
m_videoULA_Reg = data;
|
m_videoULA_Reg = data;
|
||||||
m_videoULA_master_cursor_size = (m_videoULA_Reg>>7)&0x01;
|
m_videoULA_master_cursor_size = BIT(m_videoULA_Reg,7);
|
||||||
m_videoULA_width_of_cursor = (m_videoULA_Reg>>5)&0x03;
|
m_videoULA_width_of_cursor = (m_videoULA_Reg>>5)&0x03;
|
||||||
m_videoULA_6845_clock_rate = (m_videoULA_Reg>>4)&0x01;
|
m_videoULA_6845_clock_rate = BIT(m_videoULA_Reg,4);
|
||||||
m_videoULA_characters_per_line = (m_videoULA_Reg>>2)&0x03;
|
m_videoULA_characters_per_line = (m_videoULA_Reg>>2)&0x03;
|
||||||
m_videoULA_teletext_normal_select = (m_videoULA_Reg>>1)&0x01;
|
m_videoULA_teletext_normal_select = BIT(m_videoULA_Reg,1);
|
||||||
m_videoULA_flash_colour_select = m_videoULA_Reg &0x01;
|
m_videoULA_flash_colour_select = BIT(m_videoULA_Reg,0);
|
||||||
|
|
||||||
m_videoULA_palette_lookup = m_videoULA_flash_colour_select ? m_videoULA_palette0 : m_videoULA_palette1;
|
m_videoULA_palette_lookup = m_videoULA_flash_colour_select ? m_videoULA_palette0 : m_videoULA_palette1;
|
||||||
|
|
||||||
@ -161,16 +161,16 @@ WRITE8_MEMBER(bbc_state::bbc_videoULA_w)
|
|||||||
else
|
else
|
||||||
m_pixels_per_byte = pixels_per_byte_set[m_videoULA_characters_per_line | (m_videoULA_6845_clock_rate<<2)];
|
m_pixels_per_byte = pixels_per_byte_set[m_videoULA_characters_per_line | (m_videoULA_6845_clock_rate<<2)];
|
||||||
|
|
||||||
m_mc6845->set_hpixels_per_column(m_pixels_per_byte);
|
m_hd6845->set_hpixels_per_column(m_pixels_per_byte);
|
||||||
if (m_videoULA_6845_clock_rate)
|
if (m_videoULA_6845_clock_rate)
|
||||||
m_mc6845->set_clock(XTAL_16MHz/8);
|
m_hd6845->set_clock(XTAL_16MHz/8);
|
||||||
else
|
else
|
||||||
m_mc6845->set_clock(XTAL_16MHz/16);
|
m_hd6845->set_clock(XTAL_16MHz/16);
|
||||||
break;
|
break;
|
||||||
// Set a palette register in the Video ULA
|
// Set a palette register in the Video ULA
|
||||||
case 1:
|
case 1:
|
||||||
int tpal = (data >> 4)&0x0f;
|
int tpal = (data >> 4) & 0x0f;
|
||||||
int tcol = data&0x0f;
|
int tcol = data & 0x0f;
|
||||||
m_videoULA_palette0[tpal] = tcol;
|
m_videoULA_palette0[tpal] = tcol;
|
||||||
m_videoULA_palette1[tpal] = tcol<8 ? tcol : tcol^7;
|
m_videoULA_palette1[tpal] = tcol<8 ? tcol : tcol^7;
|
||||||
break;
|
break;
|
||||||
@ -226,12 +226,6 @@ MC6845_UPDATE_ROW( bbc_state::crtc_update_row )
|
|||||||
bitmap.pix32(y, (x_pos*m_pixels_per_byte)+pixelno) = rgb;
|
bitmap.pix32(y, (x_pos*m_pixels_per_byte)+pixelno) = rgb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ra == 18)
|
|
||||||
{
|
|
||||||
m_trom->lose_w(1);
|
|
||||||
m_trom->lose_w(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user