Previous 199869 Revisions Next

r32628 Friday 10th October, 2014 at 16:29:46 UTC by Fabio Priuli
(MESS) bbc: converted to use generic cart slots and clarified
a bit more what banks is mapped where by using memory bank
configure_entries & set_entry. nw.
[src/mess/drivers]bbc.c
[src/mess/includes]bbc.h
[src/mess/machine]bbc.c

trunk/src/mess/drivers/bbc.c
r32627r32628
159159   AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r)                                                  /*    fea0-febf  68B54 ADLC     # ECONET controller             */
160160   AM_RANGE(0xfec0, 0xfedf) AM_NOP                                                             /*    fec0-fedf  uPD7002        # Analogue to digital converter */
161161   AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r)                                                  /*    fee0-feff  Tube ULA       # Tube system interface         */
162   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x13f00)                                 /*    ff00-ffff                 OS Rom (continued)              */
162   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00)                                 /*    ff00-ffff                 OS Rom (continued)              */
163163ADDRESS_MAP_END
164164
165165
r32627r32628
187187   AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r)                                                  /*    fea0-febf  68B54 ADLC     ECONET controller               */
188188   AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write)            /*    fec0-fedf  uPD7002        Analogue to digital converter   */
189189   AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r)                                                  /*    fee0-feff  Tube ULA       Tube system interface           */
190   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x43f00)                                 /*    ff00-ffff                 OS Rom (continued)              */
190   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00)                                 /*    ff00-ffff                 OS Rom (continued)              */
191191ADDRESS_MAP_END
192192
193193
r32627r32628
216216   AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r)                                                  /*    fea0-febf  68B54 ADLC     ECONET controller               */
217217   AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write)            /*    fec0-fedf  uPD7002        Analogue to digital converter   */
218218   AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r)                                                  /*    fee0-feff  Tube ULA       Tube system interface           */
219   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x43f00)                                 /*    ff00-ffff                 OS Rom (continued)              */
219   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00)                                 /*    ff00-ffff                 OS Rom (continued)              */
220220ADDRESS_MAP_END
221221
222222
r32627r32628
246246   AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r)                                                  /*    fea0-febf  68B54 ADLC     ECONET controller               */
247247   AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write)            /*    fec0-fedf  uPD7002        Analogue to digital converter   */
248248   AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r)                                                  /*    fee0-feff  Tube ULA       Tube system interface           */
249   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x43f00)                                 /*    ff00-ffff                 OS Rom (continued)              */
249   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00)                                 /*    ff00-ffff                 OS Rom (continued)              */
250250ADDRESS_MAP_END
251251
252252
r32627r32628
280280   AM_RANGE(0x8000, 0x8fff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybm4_w)                    /*    8000-8fff                 Paged ROM/RAM or 4K of RAM ANDY */
281281   AM_RANGE(0x9000, 0xbfff) AM_READ_BANK("bank5") AM_WRITE(bbc_memorybm5_w)                    /*    9000-bfff                 Rest of paged ROM/RAM area      */
282282   AM_RANGE(0xc000, 0xdfff) AM_READ_BANK("bank7") AM_WRITE(bbc_memorybm7_w)                    /*    c000-dfff                 OS ROM or 8K of RAM       HAZEL */
283   AM_RANGE(0xe000, 0xfbff) AM_ROM AM_REGION("user1", 0x42000)                                 /*    e000-fbff                 OS ROM                          */
283   AM_RANGE(0xe000, 0xfbff) AM_ROM AM_REGION("os", 0x2000)                                 /*    e000-fbff                 OS ROM                          */
284284   AM_RANGE(0xfc00, 0xfeff) AM_READ_BANK("bank8") AM_WRITE(bbcm_w)                             /*    this is now processed directly because it can be ROM or hardware */
285   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x43f00)                                 /*    ff00-ffff                 OS ROM (continued)              */
285   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00)                                 /*    ff00-ffff                 OS ROM (continued)              */
286286ADDRESS_MAP_END
287287
288288
r32627r32628
313313/*  Port                                        Key description                 Emulated key                    Natural key         Shift 1         Shift 2 (Ctrl) */
314314
315315static INPUT_PORTS_START(bbc_keyboard)
316   PORT_START("COL0")  /* KEYBOARD COLUMN 0 */
316   PORT_START("COL0")
317317   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFT")              PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
318318   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q")                  PORT_CODE(KEYCODE_Q)            PORT_CHAR('Q')
319319   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F0")                 PORT_CODE(KEYCODE_F1)           PORT_CHAR(UCHAR_MAMEKEY(F1))
r32627r32628
323323   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TAB")                PORT_CODE(KEYCODE_TAB)          PORT_CHAR('\t')
324324   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ESCAPE")             PORT_CODE(KEYCODE_ESC)          PORT_CHAR(UCHAR_MAMEKEY(ESC))
325325
326   PORT_START("COL1")  /* KEYBOARD COLUMN 1 */
326   PORT_START("COL1")
327327   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CTRL")               PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
328328   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3 #")                PORT_CODE(KEYCODE_3)            PORT_CHAR('3')      PORT_CHAR('#')
329329   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W")                  PORT_CODE(KEYCODE_W)            PORT_CHAR('W')
r32627r32628
333333   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z")                  PORT_CODE(KEYCODE_Z)            PORT_CHAR('Z')
334334   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1")                 PORT_CODE(KEYCODE_F2)           PORT_CHAR(UCHAR_MAMEKEY(F2))
335335
336   PORT_START("COL2")  /* KEYBOARD COLUMN 2 */
336   PORT_START("COL2")
337337   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
338338   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4")                  PORT_CODE(KEYCODE_4)            PORT_CHAR('4')      PORT_CHAR('$')
339339   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E")                  PORT_CODE(KEYCODE_E)            PORT_CHAR('E')
r32627r32628
343343   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SPACE")              PORT_CODE(KEYCODE_SPACE)        PORT_CHAR(' ')
344344   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2")                 PORT_CODE(KEYCODE_F3)           PORT_CHAR(UCHAR_MAMEKEY(F3))
345345
346   PORT_START("COL3")  /* KEYBOARD COLUMN 3 */
346   PORT_START("COL3")
347347   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
348348   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5 %")                PORT_CODE(KEYCODE_5)            PORT_CHAR('5')      PORT_CHAR('%')
349349   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T")                  PORT_CODE(KEYCODE_T)            PORT_CHAR('T')
r32627r32628
353353   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V")                  PORT_CODE(KEYCODE_V)            PORT_CHAR('V')
354354   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3")                 PORT_CODE(KEYCODE_F4)           PORT_CHAR(UCHAR_MAMEKEY(F4))
355355
356   PORT_START("COL4")  /* KEYBOARD COLUMN 4 */
356   PORT_START("COL4")
357357   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
358358   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4")                 PORT_CODE(KEYCODE_F5)           PORT_CHAR(UCHAR_MAMEKEY(F5))
359359   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7 \\")               PORT_CODE(KEYCODE_7)            PORT_CHAR('7')      PORT_CHAR('\'')
r32627r32628
363363   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B")                  PORT_CODE(KEYCODE_B)            PORT_CHAR('B')
364364   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5")                 PORT_CODE(KEYCODE_F6)           PORT_CHAR(UCHAR_MAMEKEY(F6))
365365
366   PORT_START("COL5")  /* KEYBOARD COLUMN 5 */
366   PORT_START("COL5")
367367   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
368368   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8 (")                PORT_CODE(KEYCODE_8)            PORT_CHAR('8')      PORT_CHAR('(')
369369   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I")                  PORT_CODE(KEYCODE_I)            PORT_CHAR('I')
r32627r32628
373373   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M")                  PORT_CODE(KEYCODE_M)            PORT_CHAR('M')
374374   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F6")                 PORT_CODE(KEYCODE_F7)           PORT_CHAR(UCHAR_MAMEKEY(F7))
375375
376   PORT_START("COL6")  /* KEYBOARD COLUMN 6 */
376   PORT_START("COL6")
377377   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
378378   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F7")                 PORT_CODE(KEYCODE_F8)           PORT_CHAR(UCHAR_MAMEKEY(F8))
379379   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9 )")                PORT_CODE(KEYCODE_9)            PORT_CHAR('9')      PORT_CHAR(')')
r32627r32628
383383   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", <")                PORT_CODE(KEYCODE_COMMA)        PORT_CHAR(',')      PORT_CHAR('<')
384384   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F8")                 PORT_CODE(KEYCODE_F9)           PORT_CHAR(UCHAR_MAMEKEY(F9))
385385
386   PORT_START("COL7")  /* KEYBOARD COLUMN 7 */
386   PORT_START("COL7")
387387   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
388388   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("- =")                PORT_CODE(KEYCODE_MINUS)        PORT_CHAR('-')      PORT_CHAR('=')
389389   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0")                  PORT_CODE(KEYCODE_0)            PORT_CHAR('0')
r32627r32628
393393   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". >")                PORT_CODE(KEYCODE_STOP)         PORT_CHAR('.')      PORT_CHAR('>')
394394   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F9")                 PORT_CODE(KEYCODE_F10)          PORT_CHAR(UCHAR_MAMEKEY(F10))
395395
396   PORT_START("COL8")  /* KEYBOARD COLUMN 8 */
396   PORT_START("COL8")
397397   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
398398   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("^ ~")                PORT_CODE(KEYCODE_EQUALS)       PORT_CHAR('^') PORT_CHAR('~')
399399   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("_ \xC2\xA3")         PORT_CODE(KEYCODE_TILDE)        PORT_CHAR('_') PORT_CHAR('\xA3')
r32627r32628
403403   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("/ ?")                PORT_CODE(KEYCODE_SLASH)        PORT_CHAR('/') PORT_CHAR('?')
404404   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\\ |")               PORT_CODE(KEYCODE_BACKSLASH2)   PORT_CHAR('\\') PORT_CHAR('|')
405405
406   PORT_START("COL9")  /* KEYBOARD COLUMN 9 */
406   PORT_START("COL9")
407407   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
408408   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LEFT")               PORT_CODE(KEYCODE_LEFT)         PORT_CHAR(UCHAR_MAMEKEY(LEFT))
409409   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DOWN")               PORT_CODE(KEYCODE_DOWN)         PORT_CHAR(UCHAR_MAMEKEY(DOWN))
r32627r32628
413413   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("COPY")               PORT_CODE(KEYCODE_END)          PORT_CHAR(UCHAR_MAMEKEY(END))
414414   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("RIGHT")              PORT_CODE(KEYCODE_RIGHT)        PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
415415
416   PORT_START("BRK")  /* BREAK */
416   PORT_START("BRK")
417417   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)
418418
419419   /* Keyboard columns 10 -> 12 are reserved for BBC Master */
r32627r32628
428428
429429
430430static INPUT_PORTS_START(bbc_keypad)
431   PORT_MODIFY("COL10")  /* KEYBOARD COLUMN 10 */
431   PORT_MODIFY("COL10")
432432   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
433433   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 6")           PORT_CODE(KEYCODE_6_PAD)        PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
434434   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 8")           PORT_CODE(KEYCODE_8_PAD)        PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
r32627r32628
438438   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 0")           PORT_CODE(KEYCODE_0_PAD)        PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
439439   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 4")           PORT_CODE(KEYCODE_4_PAD)        PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
440440
441   PORT_MODIFY("COL11")  /* KEYBOARD COLUMN 11 */
441   PORT_MODIFY("COL11")
442442   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
443443   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 7")           PORT_CODE(KEYCODE_7_PAD)        PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
444444   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 9")           PORT_CODE(KEYCODE_9_PAD)        PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
r32627r32628
448448   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 1")           PORT_CODE(KEYCODE_1_PAD)        PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
449449   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 5")           PORT_CODE(KEYCODE_5_PAD)        PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
450450
451   PORT_MODIFY("COL12")  /* KEYBOARD COLUMN 12 */
451   PORT_MODIFY("COL12")
452452   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
453453   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
454454   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
r32627r32628
461461
462462
463463static INPUT_PORTS_START(bbc_dipswitch)
464   PORT_MODIFY("COL2")  /* KEYBOARD COLUMN 2 */
464   PORT_MODIFY("COL2")
465465   PORT_DIPNAME(0x01, 0x01, "DIP 8 (Default File System)")
466466   PORT_DIPSETTING(   0x00, "NFS" )
467467   PORT_DIPSETTING(   0x01, "DFS" )
468468
469   PORT_MODIFY("COL3")  /* KEYBOARD COLUMN 3 */
469   PORT_MODIFY("COL3")
470470   PORT_DIPNAME(0x01, 0x01, "DIP 7 (Not Used)")
471471   PORT_DIPSETTING(   0x00, DEF_STR( Off ))
472472   PORT_DIPSETTING(   0x01, DEF_STR( On ))
473473
474   PORT_MODIFY("COL4")  /* KEYBOARD COLUMN 4 */
474   PORT_MODIFY("COL4")
475475   PORT_DIPNAME(0x01, 0x01, "DIP 6 (Disc Timings)")
476476   PORT_DIPSETTING(   0x00, DEF_STR( Off ))
477477   PORT_DIPSETTING(   0x01, DEF_STR( On ))
478478
479   PORT_MODIFY("COL5")  /* KEYBOARD COLUMN 5 */
479   PORT_MODIFY("COL5")
480480   PORT_DIPNAME(0x01, 0x01, "DIP 5 (Disc Timings)")
481481   PORT_DIPSETTING(   0x00, DEF_STR( Off ))
482482   PORT_DIPSETTING(   0x01, DEF_STR( On ))
483483
484   PORT_MODIFY("COL6")  /* KEYBOARD COLUMN 6 */
484   PORT_MODIFY("COL6")
485485   PORT_DIPNAME(0x01, 0x01, "DIP 4 (Boot)")
486486   PORT_DIPSETTING(   0x00, "SHIFT" )
487487   PORT_DIPSETTING(   0x01, "SHIFT-BREAK" )
488488
489   PORT_MODIFY("COL7")  /* KEYBOARD COLUMN 7 */
489   PORT_MODIFY("COL7")
490490   PORT_DIPNAME(0x01, 0x01, "DIP 3 (Screen Mode)")
491491   PORT_DIPSETTING(   0x00, "+0" )
492492   PORT_DIPSETTING(   0x01, "+4" )
493493
494   PORT_MODIFY("COL8")  /* KEYBOARD COLUMN 8 */
494   PORT_MODIFY("COL8")
495495   PORT_DIPNAME(0x01, 0x01, "DIP 2 (Screen Mode)")
496496   PORT_DIPSETTING(   0x00, "+0" )
497497   PORT_DIPSETTING(   0x01, "+2" )
498498
499   PORT_MODIFY("COL9")  /* KEYBOARD COLUMN 9 */
499   PORT_MODIFY("COL9")
500500   PORT_DIPNAME(0x01, 0x01, "DIP 1 (Screen Mode)")
501501   PORT_DIPSETTING(   0x00, "+0" )
502502   PORT_DIPSETTING(   0x01, "+1" )
r32627r32628
614614   m_adlc->txc_w(state);
615615}
616616
617static MACHINE_CONFIG_FRAGMENT( bbc_cartslot )
618   MCFG_CARTSLOT_ADD("exp_rom1")
619   MCFG_CARTSLOT_EXTENSION_LIST("rom")
620   MCFG_CARTSLOT_NOT_MANDATORY
621   MCFG_CARTSLOT_LOAD(bbc_state, bbc_exp_rom)
622   MCFG_CARTSLOT_INTERFACE("bbc_cart")
617// 4 x EPROM sockets (16K) in BBC-A, these should grow to 16 for BBC-B and later...
618static MACHINE_CONFIG_FRAGMENT( bbc_eprom_sockets )
619   MCFG_GENERIC_SOCKET_ADD("exp_rom1", generic_linear_slot, "bbc_cart")
620   MCFG_GENERIC_EXTENSIONS("bin,rom")
621   MCFG_GENERIC_LOAD(bbc_state, exp1_load)
623622
624   MCFG_CARTSLOT_ADD("exp_rom2")
625   MCFG_CARTSLOT_EXTENSION_LIST("rom")
626   MCFG_CARTSLOT_NOT_MANDATORY
627   MCFG_CARTSLOT_LOAD(bbc_state, bbc_exp_rom)
628   MCFG_CARTSLOT_INTERFACE("bbc_cart")
623   MCFG_GENERIC_SOCKET_ADD("exp_rom2", generic_linear_slot, "bbc_cart")
624   MCFG_GENERIC_EXTENSIONS("bin,rom")
625   MCFG_GENERIC_LOAD(bbc_state, exp2_load)
629626
630   MCFG_CARTSLOT_ADD("exp_rom3")
631   MCFG_CARTSLOT_EXTENSION_LIST("rom")
632   MCFG_CARTSLOT_NOT_MANDATORY
633   MCFG_CARTSLOT_LOAD(bbc_state, bbc_exp_rom)
634   MCFG_CARTSLOT_INTERFACE("bbc_cart")
627   MCFG_GENERIC_SOCKET_ADD("exp_rom3", generic_linear_slot, "bbc_cart")
628   MCFG_GENERIC_EXTENSIONS("bin,rom")
629   MCFG_GENERIC_LOAD(bbc_state, exp3_load)
635630
636   MCFG_CARTSLOT_ADD("exp_rom4")
637   MCFG_CARTSLOT_EXTENSION_LIST("rom")
638   MCFG_CARTSLOT_NOT_MANDATORY
639   MCFG_CARTSLOT_LOAD(bbc_state, bbc_exp_rom)
640   MCFG_CARTSLOT_INTERFACE("bbc_cart")
631   MCFG_GENERIC_SOCKET_ADD("exp_rom4", generic_linear_slot, "bbc_cart")
632   MCFG_GENERIC_EXTENSIONS("bin,rom")
633   MCFG_GENERIC_LOAD(bbc_state, exp4_load)
641634MACHINE_CONFIG_END
642635
643636
r32627r32628
718711   MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_porta))
719712   MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_portb))
720713   MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_system_irq_w))
714
715   /* EPROM sockets */
716   MCFG_FRAGMENT_ADD(bbc_eprom_sockets)
721717MACHINE_CONFIG_END
722718
723719
r32627r32628
770766
771767   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
772768
773   /* cartridges */
774   MCFG_FRAGMENT_ADD(bbc_cartslot)
775
776769   /* software lists */
777770   MCFG_DEVICE_REMOVE("cass_ls_a")
778771   MCFG_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass")
r32627r32628
835828
836829   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
837830
838   /* cartridges */
839   MCFG_FRAGMENT_ADD(bbc_cartslot)
840
841831   /* software lists */
842832   MCFG_DEVICE_REMOVE("cass_ls_a")
843833   MCFG_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass")
r32627r32628
941931   MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
942932   MCFG_CASSETTE_INTERFACE("bbc_cass")
943933
944   /* cartridges */
945   MCFG_CARTSLOT_ADD("cart1")
946   MCFG_CARTSLOT_EXTENSION_LIST("bin")
947   MCFG_CARTSLOT_NOT_MANDATORY
948   MCFG_CARTSLOT_LOAD(bbc_state, bbcm_cart)
949   MCFG_CARTSLOT_INTERFACE("bbcm_cart")
950   MCFG_CARTSLOT_ADD("cart2")
951   MCFG_CARTSLOT_EXTENSION_LIST("bin")
952   MCFG_CARTSLOT_NOT_MANDATORY
953   MCFG_CARTSLOT_LOAD(bbc_state, bbcm_cart)
954   MCFG_CARTSLOT_INTERFACE("bbcm_cart")
934   // 2 x EPROM sockets (32K) in BBC-Master
935   MCFG_GENERIC_SOCKET_ADD("exp_rom1", generic_plain_slot, "bbcm_cart")
936   MCFG_GENERIC_LOAD(bbc_state, bbcm_exp1_load)
955937
938   MCFG_GENERIC_SOCKET_ADD("exp_rom2", generic_plain_slot, "bbcm_cart")
939   MCFG_GENERIC_LOAD(bbc_state, bbcm_exp2_load)
940
956941   /* software lists */
957942   MCFG_SOFTWARE_LIST_ADD("cass_ls_m", "bbcm_cass")
958943   MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_a", "bbca_cass")
r32627r32628
1002987
1003988   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
1004989
1005   /* rom slots */
1006   MCFG_FRAGMENT_ADD(bbc_cartslot)
1007
1008990   /* econet */
1009991   MCFG_DEVICE_ADD("mc6854", MC6854, 0)
1010992   MCFG_MC6854_OUT_TXD_CB(DEVWRITELINE(ECONET_TAG, econet_device, data_w))
r32627r32628
11031085ROM_START(bbca)
11041086   ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */
11051087
1106   ROM_REGION(0x14000,"user1",0) /* ROM */
1088   ROM_REGION(0x14000,"option",0) /* ROM */
11071089   /* rom page 0  00000 */
11081090   /* rom page 1  04000 */
11091091   /* rom page 2  08000 */
r32627r32628
11331115   ROMX_LOAD("basic1.rom", 0x04000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(6)) /* rom page 1  04000 */
11341116   ROMX_LOAD("basic1.rom", 0x08000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(6)) /* rom page 2  08000 */
11351117   ROMX_LOAD("basic1.rom", 0x0c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(6)) /* rom page 3  0c000 */
1118
1119   ROM_REGION(0x4000, "os", 0)
1120   ROM_COPY("option", 0x10000, 0, 0x4000)
11361121ROM_END
11371122
11381123
1124
11391125/*  0000- 7fff  ram */
1140/*  8000- bfff  not used, this area is mapped over with one of the roms at 10000 and above */
1141/*  c000- ffff  OS rom and memory mapped hardware at fc00-feff */
1142/* 10000-4ffff  16 paged rom banks mapped back into 8000-bfff by the page rom select */
1126/*  8000- bfff  this area is mapped over with one of the roms from "option" region 0x00000-0x40000 */
1127/*  c000- ffff  OS rom and memory mapped hardware at fc00-feff, from "option" region 0x40000-0x44000 */
11431128
11441129
11451130ROM_START(bbcb)
11461131   ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */
11471132
1148   ROM_REGION(0x44000,"user1",0) /* ROM */
1133   ROM_REGION(0x44000,"option",0) /* ROM */
11491134   /* rom page 0  00000 */
11501135   /* rom page 1  04000 */
11511136   /* rom page 2  08000 */
r32627r32628
11761161   ROMX_LOAD("os10.rom",   0x40000, 0x4000, CRC(9679b8f8) SHA1(d35f6723132aabe3c4d00fc16fd9ecc6768df753), ROM_BIOS(4)) /* os */
11771162   ROMX_LOAD("basic1.rom", 0x3c000, 0x4000, CRC(b3364108) SHA1(890f6e3e7fab3340f75b85e93ff29332bc9ecb2e), ROM_BIOS(4)) /* rom page 15 3c000 */
11781163
1179   ROM_REGION(0x20000,"user2",0) /* DFS ROMS */
1164   ROM_REGION(0x4000, "os", 0)
1165   ROM_COPY("option", 0x40000, 0, 0x4000)
1166
1167   ROM_REGION(0x20000,"dfs",0) /* DFS ROMS */
11801168   ROM_LOAD("dfs09.rom",    0x00000, 0x2000, CRC(3ce609cf) SHA1(5cc0f14b8f46855c70eaa653cca4ad079b458732))
11811169   ROM_RELOAD(              0x02000, 0x2000                )
11821170   ROM_LOAD("dnfs.rom",     0x04000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232))
r32627r32628
11991187ROM_START(bbcb_de)
12001188   ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */
12011189
1202   ROM_REGION(0x44000,"user1",0) /* ROM */
1190   ROM_REGION(0x44000,"option",0) /* ROM */
12031191   /* rom page 0  00000 */
12041192   /* rom page 1  04000 */
12051193   /* rom page 2  08000 */
r32627r32628
12211209   ROMX_LOAD("os_de.rom",   0x40000, 0x4000, CRC(b7262caf) SHA1(aadf90338ee9d1c85dfa73beba50e930c2a38f10), ROM_BIOS(1))
12221210   ROMX_LOAD("basic2.rom",  0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(1)) /* rom page 15 3c000 */
12231211
1224   ROM_REGION(0x20000,"user2",0) /* DFS ROMS */
1212   ROM_REGION(0x4000, "os", 0)
1213   ROM_COPY("option", 0x40000, 0, 0x4000)
1214
1215   ROM_REGION(0x20000,"dfs",0) /* DFS ROMS */
12251216   ROM_LOAD("dfs09.rom",    0x00000, 0x2000, CRC(3ce609cf) SHA1(5cc0f14b8f46855c70eaa653cca4ad079b458732))
12261217   ROM_RELOAD(              0x02000, 0x2000                )
12271218
r32627r32628
12381229ROM_START(bbcb_us)
12391230   ROM_REGION(0x08000,"maincpu",ROMREGION_ERASEFF) /* RAM */
12401231
1241   ROM_REGION(0x44000,"user1",0) /* ROM */
1232   ROM_REGION(0x44000,"option",0) /* ROM */
12421233   /* rom page 0  00000 */
12431234   /* rom page 1  04000 */
12441235   /* rom page 2  08000 */
r32627r32628
12601251   ROMX_LOAD("os10_us.rom", 0x40000, 0x4000, CRC(c8e946a9) SHA1(83d91d089dca092d2c8b7c3650ff8143c9069b89), ROM_BIOS(1))
12611252   ROMX_LOAD("basic3.rom",  0x3c000, 0x4000, CRC(161b9539) SHA1(b39014610a968789afd7695aa04d1277d874405c), ROM_BIOS(1)) /* rom page 15 3c000 */
12621253
1263   ROM_REGION(0x20000,"user2",0) /* DFS ROMS */
1254   ROM_REGION(0x4000, "os", 0)
1255   ROM_COPY("option", 0x40000, 0, 0x4000)
1256
1257   ROM_REGION(0x20000,"dfs",0) /* DFS ROMS */
12641258   ROM_LOAD("dfs09.rom",    0x00000, 0x2000, CRC(3ce609cf) SHA1(5cc0f14b8f46855c70eaa653cca4ad079b458732))
12651259   ROM_RELOAD(              0x02000, 0x2000                )
12661260
r32627r32628
12801274ROM_START(bbcbp)
12811275   ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
12821276
1283   ROM_REGION(0x44000,"user1",0) /* ROM */
1277   ROM_REGION(0x44000,"option",0) /* ROM */
12841278   ROM_DEFAULT_BIOS("os20")
12851279   ROM_SYSTEM_BIOS( 0, "os20", "OS 2.00" )
12861280   ROMX_LOAD("bpos2.ic71", 0x3c000, 0x4000, CRC(9f356396) SHA1(ea7d3a7e3ee1ecfaa1483af994048057362b01f2), ROM_BIOS(1)) /* rom page 15 3C000 BASIC */
r32627r32628
13031297   /* rom page 15 3C000  BASIC */
13041298   /* ddfs 2.23 this is acorns 1770 disc controller Double density disc filing system */
13051299   ROM_LOAD("ddfs223.rom", 0x1c000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa))
1300
1301   ROM_REGION(0x4000, "os", 0)
1302   ROM_COPY("option", 0x40000, 0, 0x4000)
13061303ROM_END
13071304
13081305
13091306ROM_START(bbcbp128)
13101307   ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
13111308
1312   ROM_REGION(0x44000,"user1",0) /* ROM */
1309   ROM_REGION(0x44000,"option",0) /* ROM */
13131310   ROM_DEFAULT_BIOS("os20")
13141311   ROM_SYSTEM_BIOS( 0, "os20", "OS 2.00" )
13151312   ROMX_LOAD("bpos2.ic71", 0x3c000, 0x4000, CRC(9f356396) SHA1(ea7d3a7e3ee1ecfaa1483af994048057362b01f2), ROM_BIOS(1)) /* rom page 15 3C000 BASIC */
r32627r32628
13321329   /* rom page 15 3C000  BASIC */
13331330   /* ddfs 2.23 this is acorns 1770 disc controller Double density disc filing system */
13341331   ROM_LOAD("ddfs223.rom", 0x1c000, 0x4000, CRC(7891f9b7) SHA1(0d7ed0b0b3852cb61970ada1993244f2896896aa))
1332
1333   ROM_REGION(0x4000, "os", 0)
1334   ROM_COPY("option", 0x40000, 0, 0x4000)
13351335ROM_END
13361336
13371337
13381338ROM_START(bbcm)
13391339   ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
13401340
1341   ROM_REGION(0x44000,"user1",0) /* ROM */
1341   ROM_REGION(0x44000,"option",0) /* ROM */
13421342   ROM_DEFAULT_BIOS("mos350")
13431343   ROM_SYSTEM_BIOS( 0, "mos350", "Enhanced MOS 3.50" )
13441344   ROMX_LOAD("mos350.ic24", 0x20000, 0x20000, CRC(141027b9) SHA1(85211b5bc7c7a269952d2b063b7ec0e1f0196803), ROM_BIOS(1))
13451345   ROM_SYSTEM_BIOS( 1, "mos320", "Original MOS 3.20" )
13461346   ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e), ROM_BIOS(2))
1347   ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
1347   ROM_COPY("option", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
13481348   ROM_FILL(0x20000, 0x4000, 0xFFFF)
13491349   /* 00000 rom 0   Rear Cartridge bottom 16K */
13501350   /* 04000 rom 1   Rear Cartridge top 16K */
r32627r32628
13641364   /* 3c000 rom 15  Terminal + Tube host + CFS */
13651365//  ROM_LOAD("anfs424.rom", 0x20000, 0x4000, CRC(1b9f75fd) SHA1(875f71edd48f87c3a55371409d0cc2015d8b5853) ) // TODO where to load this?
13661366
1367   ROM_REGION(0x4000, "os", 0)
1368   ROM_COPY("option", 0x40000, 0, 0x4000)
1369
13671370   ROM_REGION(0x40,"rtc",0) /* mc146818 */
13681371   /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
13691372   ROMX_LOAD("mos350.cmos", 0x00, 0x40, CRC(e84c1854) SHA1(f3cb7f12b7432caba28d067f01af575779220aac), ROM_BIOS(1))
r32627r32628
13741377ROM_START(bbcmt)
13751378   ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
13761379
1377   ROM_REGION(0x44000,"user1",0) /* ROM */
1380   ROM_REGION(0x44000,"option",0) /* ROM */
13781381   ROM_DEFAULT_BIOS("mos350")
13791382   ROM_SYSTEM_BIOS( 0, "mos350", "Enhanced MOS 3.50" )
13801383   ROMX_LOAD("mos350.ic24", 0x20000, 0x20000, CRC(141027b9) SHA1(85211b5bc7c7a269952d2b063b7ec0e1f0196803), ROM_BIOS(1))
13811384   ROM_SYSTEM_BIOS( 1, "mos320", "Original MOS 3.20" )
13821385   ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e), ROM_BIOS(2))
1383   ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
1386   ROM_COPY("option", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
13841387   ROM_FILL(0x20000, 0x4000, 0xFFFF)
13851388   /* 00000 rom 0   Rear Cartridge bottom 16K */
13861389   /* 04000 rom 1   Rear Cartridge top 16K */
r32627r32628
14001403   /* 3c000 rom 15  Terminal + Tube host + CFS */
14011404//  ROM_LOAD("anfs424.ic27", 0x20000, 0x4000, CRC(1b9f75fd) SHA1(875f71edd48f87c3a55371409d0cc2015d8b5853) ) // TODO where to load this?
14021405
1406   ROM_REGION(0x4000, "os", 0)
1407   ROM_COPY("option", 0x40000, 0, 0x4000)
1408
14031409   ROM_REGION(0x40,"rtc",0) /* mc146818 */
14041410   /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
14051411   ROMX_LOAD("mos350.cmos", 0x00, 0x40, CRC(e84c1854) SHA1(f3cb7f12b7432caba28d067f01af575779220aac), ROM_BIOS(1))
r32627r32628
14101416ROM_START(bbcmaiv)
14111417   ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
14121418
1413   ROM_REGION(0x44000,"user1",0) /* ROM */
1419   ROM_REGION(0x44000,"option",0) /* ROM */
14141420   ROM_DEFAULT_BIOS("mos320")
14151421   ROM_SYSTEM_BIOS( 0, "mos320", "MOS 3.20" )
14161422   ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e), ROM_BIOS(1))
1417   ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
1423   ROM_COPY("option", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
14181424   ROM_FILL(0x20000, 0x4000, 0xFFFF)
14191425   /* 00000 rom 0   Rear Cartridge bottom 16K */
14201426   /* 04000 rom 1   Rear Cartridge top 16K */
r32627r32628
14341440   /* 3c000 rom 15  Terminal + Tube host + CFS */
14351441   ROM_LOAD("vfs170.rom", 0x20000, 0x4000, CRC(b124a0bb) SHA1(ba31c757815cf470402d7829a70a0e1d3fb1355b) )
14361442
1443   ROM_REGION(0x4000, "os", 0)
1444   ROM_COPY("option", 0x40000, 0, 0x4000)
1445
14371446   ROM_REGION(0x40,"rtc",0) /* mc146818 */
14381447   /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
14391448   ROMX_LOAD("mos320aiv.cmos", 0x0E, 0x32, BAD_DUMP CRC(b9ae42a1) SHA1(abf3e94b013f24027ca36c96720963c3411e93f8), ROM_BIOS(1))
r32627r32628
14431452ROM_START(bbcmet)
14441453   ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
14451454
1446   ROM_REGION(0x44000,"user1",0) /* ROM */
1455   ROM_REGION(0x44000,"option",0) /* ROM */
14471456   ROM_DEFAULT_BIOS("mos400")
14481457   ROM_SYSTEM_BIOS( 0, "mos400", "Econet MOS 4.00" )
14491458   ROMX_LOAD("mos400.ic24", 0x20000, 0x10000, BAD_DUMP CRC(81729034) SHA1(d4bc2c7f5e66b5298786138f395908e70c772971), ROM_BIOS(1)) /* Merged individual ROM bank dumps */
1450   ROM_COPY("user1", 0x24000, 0x34000, 0xC000) /* Mirror */
1451   ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
1459   ROM_COPY("option", 0x24000, 0x34000, 0xC000) /* Mirror */
1460   ROM_COPY("option", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
14521461   ROM_FILL(0x20000, 0x4000, 0xFFFF)
14531462   /* 00000 rom 0   Rear Cartridge bottom 16K */
14541463   /* 04000 rom 1   Rear Cartridge top 16K */
r32627r32628
14671476   /* 38000 rom 14  ANFS */
14681477   /* 3c000 rom 15  MOS code */
14691478
1479   ROM_REGION(0x4000, "os", 0)
1480   ROM_COPY("option", 0x40000, 0, 0x4000)
1481
14701482   ROM_REGION(0x40,"rtc",0) /* mc146818 */
14711483   /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
14721484   ROMX_LOAD("mos400.cmos", 0x0E, 0x32, BAD_DUMP CRC(fff41cc5) SHA1(3607568758f90b3bd6c7dc9533e2aa24f9806ff3), ROM_BIOS(1))
r32627r32628
14761488ROM_START(bbcm512)
14771489   ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
14781490
1479   ROM_REGION(0x44000,"user1",0) /* ROM */
1491   ROM_REGION(0x44000,"option",0) /* ROM */
14801492   ROM_DEFAULT_BIOS("mos350")
14811493   ROM_SYSTEM_BIOS( 0, "mos350", "Enhanced MOS 3.50" )
14821494   ROMX_LOAD("mos350.ic24", 0x20000, 0x20000, CRC(141027b9) SHA1(85211b5bc7c7a269952d2b063b7ec0e1f0196803), ROM_BIOS(1))
14831495   ROM_SYSTEM_BIOS( 1, "mos320", "Original MOS 3.20" )
14841496   ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e), ROM_BIOS(2))
1485   ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
1497   ROM_COPY("option", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
14861498   ROM_FILL(0x20000, 0x4000, 0xFFFF)
14871499   /* 00000 rom 0   Rear Cartridge bottom 16K */
14881500   /* 04000 rom 1   Rear Cartridge top 16K */
r32627r32628
15021514   /* 3c000 rom 15  Terminal + Tube host + CFS */
15031515//  ROM_LOAD("anfs424.ic27", 0x20000, 0x4000, CRC(1b9f75fd) SHA1(875f71edd48f87c3a55371409d0cc2015d8b5853) )
15041516
1517   ROM_REGION(0x4000, "os", 0)
1518   ROM_COPY("option", 0x40000, 0, 0x4000)
1519
15051520   ROM_REGION(0x40,"rtc",0) /* mc146818 */
15061521   /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
15071522   ROMX_LOAD("mos350.cmos", 0x00, 0x40, CRC(e84c1854) SHA1(f3cb7f12b7432caba28d067f01af575779220aac), ROM_BIOS(1))
r32627r32628
15121527ROM_START(bbcmarm)
15131528   ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
15141529
1515   ROM_REGION(0x44000,"user1",0) /* ROM */
1530   ROM_REGION(0x44000,"option",0) /* ROM */
15161531   ROM_DEFAULT_BIOS("mos320")
15171532   ROM_SYSTEM_BIOS( 0, "mos320", "Original MOS 3.20" )
15181533   ROMX_LOAD("mos320.ic24", 0x20000, 0x20000, CRC(0cfad2ce) SHA1(0275719aa7746dd3b627f95ccc4362b564063a5e), ROM_BIOS(1))
1519   ROM_COPY("user1", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
1534   ROM_COPY("option", 0x20000, 0x40000, 0x4000) /* Move loaded roms into place */
15201535   ROM_FILL(0x20000, 0x4000, 0xFFFF)
15211536   /* 00000 rom 0   Rear Cartridge bottom 16K */
15221537   /* 04000 rom 1   Rear Cartridge top 16K */
r32627r32628
15361551   /* 3c000 rom 15  Terminal + Tube host + CFS */
15371552//  ROM_LOAD("anfs424.ic27", 0x20000, 0x4000, CRC(1b9f75fd) SHA1(875f71edd48f87c3a55371409d0cc2015d8b5853) )
15381553
1554   ROM_REGION(0x4000, "os", 0)
1555   ROM_COPY("option", 0x40000, 0, 0x4000)
1556
15391557   ROM_REGION(0x40,"rtc",0) /* mc146818 */
15401558   /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
15411559   ROMX_LOAD("mos320arm.cmos", 0x00, 0x40, CRC(56117257) SHA1(ed98563bef18f9d2a0b2d941cd20823d760fb127), ROM_BIOS(1))
r32627r32628
15451563ROM_START(bbcmc)
15461564   ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
15471565
1548   ROM_REGION(0x44000,"user1",0) /* ROM */
1566   ROM_REGION(0x44000,"option",0) /* ROM */
15491567   ROM_DEFAULT_BIOS("mos510")
15501568   ROM_SYSTEM_BIOS( 0, "mos510", "Enhanced MOS 5.10" )
15511569   ROMX_LOAD("mos510.ic49", 0x30000, 0x10000, BAD_DUMP CRC(9a2a6086) SHA1(094ab37b0b6437c4f1653eaa0602ef102737adb6), ROM_BIOS(1)) /* Merged individual ROM bank dumps */
15521570   ROM_SYSTEM_BIOS( 1, "mos500", "Original MOS 5.00" )
15531571   ROMX_LOAD("mos500.ic49", 0x30000, 0x10000, BAD_DUMP CRC(f6170023) SHA1(140d002d2d9cd34b47197a2ba823505af2a84633), ROM_BIOS(2)) /* Merged individual ROM bank dumps */
1554
1555   ROM_COPY("user1", 0x30000, 0x40000, 0x4000) /* Move loaded roms into place */
1572   ROM_COPY("option", 0x30000, 0x40000, 0x4000) /* Move loaded roms into place */
15561573   ROM_FILL(0x30000, 0x4000, 0xFFFF)
15571574   /* 00000 rom 0   EXTERNAL */
15581575   /* 04000 rom 1   EXTERNAL */
r32627r32628
15711588   /* 38000 rom 14  BASIC */
15721589   /* 3c000 rom 15  Utils */
15731590
1591   ROM_REGION(0x4000, "os", 0)
1592   ROM_COPY("option", 0x40000, 0, 0x4000)
1593
15741594//  ROM_REGION(0x80,"mc146818",0) /* mc146818 */
15751595   /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
15761596//  ROM_LOAD("mos500.cmos", 0x00, 0x80, CRC(d8458039) SHA1(72c056d493e74ceca41f48936012b012b496a226))
r32627r32628
15801600ROM_START(bbcmc_ar)
15811601   ROM_REGION(0x10000,"maincpu",ROMREGION_ERASEFF) /* ROM MEMORY */
15821602
1583   ROM_REGION(0x44000,"user1",0) /* ROM */
1603   ROM_REGION(0x44000,"option",0) /* ROM */
15841604   ROM_DEFAULT_BIOS("mos511i")
15851605   ROM_SYSTEM_BIOS( 0, "mos511i", "International MOS 5.11" )
15861606   ROMX_LOAD("mos511.ic49", 0x30000, 0x10000, BAD_DUMP CRC(8708803c) SHA1(d2170c8b9b536f3ad84a4a603a7fe712500cc751), ROM_BIOS(1)) /* Merged individual ROM bank dumps */
1587   ROM_COPY("user1", 0x30000, 0x40000, 0x4000) /* Move loaded roms into place */
1607   ROM_COPY("option", 0x30000, 0x40000, 0x4000) /* Move loaded roms into place */
15881608   ROM_FILL(0x30000, 0x4000, 0xFFFF)
15891609   /* 00000 rom 0   EXTERNAL */
15901610   /* 04000 rom 1   EXTERNAL */
r32627r32628
16051625   ROM_LOAD("international16.rom", 0x8000 , 0x4000, CRC(0ef527b1) SHA1(dc5149ccf588cd591a6ad47727474ef3313272ce) )
16061626   ROM_LOAD("arabian-c22.rom"    , 0x20000, 0x4000, CRC(4f3aadff) SHA1(2bbf61ba68264ce5845aab9c54e750b0efe219c8) )
16071627
1628   ROM_REGION(0x4000, "os", 0)
1629   ROM_COPY("option", 0x40000, 0, 0x4000)
1630
16081631//  ROM_REGION(0x80,"mc146818",0) /* mc146818 */
16091632   /* Factory defaulted CMOS RAM, sets default language ROM, etc. */
16101633//  ROM_LOAD("mos500.cmos", 0x00, 0x80, CRC(d8458039) SHA1(72c056d493e74ceca41f48936012b012b496a226))
trunk/src/mess/machine/bbc.c
r32627r32628
3535/* for the model A just address the 4 on board ROM sockets */
3636WRITE8_MEMBER(bbc_state::bbc_page_selecta_w)
3737{
38   m_bank4->set_base(m_region_user1->base()+((data&0x03)<<14));
38   m_bank4->set_entry(data & 0x03);
3939}
4040
4141
r32627r32628
5252/* I have set bank 1 as a special case to load different DFS roms selectable from MESS's CONF settings var:bbc_DFSTypes */
5353WRITE8_MEMBER(bbc_state::bbc_page_selectb_w)
5454{
55   m_rombank=data&0x0f;
56   if (m_rombank!=1)
55   m_rombank = data & 0x0f;
56   if (m_rombank != 1)
5757   {
58      m_bank4->set_base(m_region_user1->base() + (m_rombank << 14));
58      m_bank4->set_entry(m_rombank);
5959   }
6060   else
6161   {
62      m_bank4->set_base(m_region_user2->base() + ((m_DFSType) << 14));
62      m_bank4->set_entry(m_DFSType);
6363   }
6464}
6565
r32627r32628
9191   if (m_rombank == 1)
9292   {
9393      // special DFS case for Acorn DFS E00 Hack that can write to the DFS RAM Bank;
94      if (m_DFSType == 3) m_region_user2->base()[((m_DFSType) << 14) + offset] = data;
94      if (m_DFSType == 3) m_region_dfs->base()[((m_DFSType) << 14) + offset] = data;
9595   }
9696   else
9797   {
9898      switch (m_SWRAMtype)
9999      {
100         case 1: if (bbc_SWRAMtype1[m_userport]) m_region_user1->base()[(m_userport << 14) + offset] = data;
101         case 2: if (bbc_SWRAMtype2[m_rombank])  m_region_user1->base()[(m_rombank << 14) + offset] = data;
102         case 3: if (bbc_SWRAMtype3[m_rombank])  m_region_user1->base()[(m_rombank << 14) + offset] = data;
100         case 1: if (bbc_SWRAMtype1[m_userport]) m_region_opt->base()[(m_userport << 14) + offset] = data;
101         case 2: if (bbc_SWRAMtype2[m_rombank])  m_region_opt->base()[(m_rombank << 14) + offset] = data;
102         case 3: if (bbc_SWRAMtype3[m_rombank])  m_region_opt->base()[(m_rombank << 14) + offset] = data;
103103      }
104104   }
105105}
r32627r32628
135135      if (m_pagedRAM)
136136      {
137137         /* if paged ram then set 8000 to afff to read from the ram 8000 to afff */
138         m_bank4->set_base(m_region_maincpu->base() + 0x8000);
138         m_bank4->set_entry(0x10);
139139      }
140140      else
141141      {
142142         /* if paged rom then set the rom to be read from 8000 to afff */
143         m_bank4->set_base(m_region_user1->base() + (m_rombank << 14));
143         m_bank4->set_entry(m_rombank);
144144      };
145145
146146      /* set the rom to be read from b000 to bfff */
r32627r32628
152152      m_vdusel=(data>>7)&0x01;
153153      bbcbp_setvideoshadow(m_vdusel);
154154      //need to make the video display do a full screen refresh for the new memory area
155      m_bank2->set_base(m_region_maincpu->base()+0x3000);
155      m_bank2->set_base(m_region_maincpu->base() + 0x3000);
156156   }
157157}
158158
r32627r32628
258258   {
259259      if (bbc_b_plus_sideways_ram_banks[m_rombank])
260260      {
261         m_region_user1->base()[offset+(m_rombank<<14)]=data;
261         m_region_opt->base()[offset+(m_rombank<<14)]=data;
262262      }
263263   }
264264}
r32627r32628
267267{
268268   if (bbc_b_plus_sideways_ram_banks[m_rombank])
269269   {
270      m_region_user1->base()[offset+(m_rombank<<14)+0x3000]=data;
270      m_region_opt->base()[offset+(m_rombank<<14)+0x3000]=data;
271271   }
272272}
273273
r32627r32628
360360   }
361361   else
362362   {
363      m_bank7->set_base(m_region_user1->base() + 0x40000);
363      m_bank7->set_base(m_region_os->base());
364364   }
365365
366366   bbcbp_setvideoshadow(m_ACCCON_D);
r32627r32628
368368
369369   if (m_ACCCON_X)
370370   {
371      m_bank2->set_base(m_region_maincpu->base() + 0xb000 );
371      m_bank2->set_base(m_region_maincpu->base() + 0xb000);
372372   }
373373   else
374374   {
375      m_bank2->set_base(m_region_maincpu->base() + 0x3000 );
375      m_bank2->set_base(m_region_maincpu->base() + 0x3000);
376376   }
377377
378378   /* ACCCON_TST controls paging of rom reads in the 0xFC00-0xFEFF reigon */
r32627r32628
380380   /* if 1 the the ROM is paged in for reads but writes still go to I/O   */
381381   if (m_ACCCON_TST)
382382   {
383      m_bank8->set_base(m_region_user1->base()+0x43c00);
384      space.install_read_bank(0xFC00,0xFEFF,"bank8");
383      m_bank8->set_base(m_region_os->base() + 0x3c00);
384      space.install_read_bank(0xfc00, 0xfeff, "bank8");
385385   }
386386   else
387387   {
388      space.install_read_handler(0xFC00,0xFEFF,read8_delegate(FUNC(bbc_state::bbcm_r),this));
388      space.install_read_handler(0xfc00, 0xfeff, read8_delegate(FUNC(bbc_state::bbcm_r),this));
389389   }
390390}
391391
r32627r32628
405405
406406   if (m_pagedRAM)
407407   {
408      m_bank4->set_base(m_region_maincpu->base() + 0x8000);
408      m_bank4->set_entry(0x10);
409409      m_bank5->set_entry(m_rombank);
410410   }
411411   else
412412   {
413      m_bank4->set_base(m_region_user1->base() + ((m_rombank) << 14));
413      m_bank4->set_entry(m_rombank);
414414      m_bank5->set_entry(m_rombank);
415415   }
416416}
r32627r32628
427427{
428428   if (m_ACCCON_X)
429429   {
430      m_bank2->set_base( m_region_maincpu->base() + 0xb000 );
430      m_bank2->set_base(m_region_maincpu->base() + 0xb000);
431431   }
432432   else
433433   {
434434      if (m_ACCCON_E && bbcm_vdudriverset())
435435      {
436         m_bank2->set_base( m_region_maincpu->base() + 0xb000 );
436         m_bank2->set_base(m_region_maincpu->base() + 0xb000);
437437      }
438438      else
439439      {
440         m_bank2->set_base( m_region_maincpu->base() + 0x3000 );
440         m_bank2->set_base(m_region_maincpu->base() + 0x3000);
441441      }
442442   }
443443
r32627r32628
482482   {
483483      if (bbc_master_sideways_ram_banks[m_rombank])
484484      {
485         m_region_user1->base()[offset+(m_rombank<<14)] = data;
485         m_region_opt->base()[offset+(m_rombank<<14)] = data;
486486      }
487487   }
488488}
r32627r32628
492492{
493493   if (bbc_master_sideways_ram_banks[m_rombank])
494494   {
495      m_region_user1->base()[offset+(m_rombank<<14)+0x1000] = data;
495      m_region_opt->base()[offset+(m_rombank<<14)+0x1000] = data;
496496   }
497497}
498498
r32627r32628
555555   /* Now handled in bbcm_ACCCON_write PHS - 2008-10-11 */
556556//  if ( m_ACCCON_TST )
557557//  {
558//      return m_region_user1->base()[offset+0x43c00];
558//      return m_region_os->base()[offset + 0x3c00];
559559//  };
560560
561561   if (offset<=0x0ff) /* FRED */
r32627r32628
19381938   BBC B Rom loading functions
19391939***************************************/
19401940
1941int bbc_state::exp_rom_load(device_image_interface &image, int index)
1941int bbc_state::bbc_load_cart(device_image_interface &image, generic_slot_device *slot)
19421942{
1943   UINT8 *RAM = m_region_user1->base();
1944   int size, read_;
1945   int addr = 0x8000 + (0x4000 * index);
1946
1947   if (image.software_entry() == NULL)
1943   UINT32 size = slot->common_get_size("rom");
1944   
1945   if (size != 0x2000 && size != 0x4000)
19481946   {
1949      size = image.length();
1950      logerror("loading rom %s, at %.4x size:%.4x\n", image.filename(), addr, size);
1951
1952      switch (size)
1953      {
1954         case 0x2000:
1955            read_ = image.fread(RAM + addr, size);
1956            if (read_ != size)
1957               return 1;
1958            image.fseek(0, SEEK_SET);
1959            read_ = image.fread(RAM + addr + 0x2000, size);
1960            break;
1961         case 0x4000:
1962            read_ = image.fread(RAM + addr, size);
1963            break;
1964         default:
1965            read_ = 0;
1966            logerror("bad rom file size of %.4x\n", size);
1967            break;
1968      }
1969
1970      if (read_ != size)
1971         return IMAGE_INIT_FAIL;
1947      image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
1948      return IMAGE_INIT_FAIL;
19721949   }
1950   
1951   slot->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
1952   slot->common_load_rom(slot->get_rom_base(), size, "rom");
1953   
19731954   return IMAGE_INIT_PASS;
19741955}
19751956
1976DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbc_exp_rom )
1977{
1978   if (strcmp(image.device().tag(),":exp_rom1") == 0)
1979      return exp_rom_load(image, 0);
1980
1981   if (strcmp(image.device().tag(),":exp_rom2") == 0)
1982      return exp_rom_load(image, 1);
1983
1984   if (strcmp(image.device().tag(),":exp_rom3") == 0)
1985      return exp_rom_load(image, 2);
1986
1987   if (strcmp(image.device().tag(),":exp_rom4") == 0)
1988      return exp_rom_load(image, 3);
1989
1990   return IMAGE_INIT_FAIL;
1991}
1992
1993
19941957/**************************************
19951958   BBC Master Rom loading functions
19961959***************************************/
19971960
1998DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbcm_cart )
1961int bbc_state::bbcm_load_cart(device_image_interface &image, generic_slot_device *slot)
19991962{
2000   UINT8 *RAM = m_region_user1->base();
2001   int addr = 0, index = 0;
2002
2003   if (strcmp(image.device().tag(),":cart1") == 0)
2004      index = 0;
2005   if (strcmp(image.device().tag(),":cart2") == 0)
2006      index = 1;
2007   addr += index * 0x8000;
2008
20091963   if (image.software_entry() == NULL)
20101964   {
2011      UINT32 size = image.length();
2012      logerror("loading rom %s, size:%.4x\n", image.filename(), size);
1965      UINT32 filesize = image.length();
20131966
2014      if (size != 0x8000)
1967      if (filesize != 0x8000)
20151968      {
2016         image.seterror(IMAGE_ERROR_UNSUPPORTED, "Invalid rom file size");
1969         image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
20171970         return IMAGE_INIT_FAIL;
20181971      }
2019
2020      image.fread(RAM + addr, size);
1972     
1973      slot->rom_alloc(filesize, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
1974      image.fread(slot->get_rom_base(), filesize);
1975      return IMAGE_INIT_PASS;
20211976   }
20221977   else
20231978   {
20241979      UINT32 size_lo = image.get_software_region_length("lorom");
20251980      UINT32 size_hi = image.get_software_region_length("uprom");
2026      logerror("loading rom %s, size:%.4x\n", image.filename(), size_lo + size_hi);
2027
1981     
20281982      if (size_lo + size_hi != 0x8000)
20291983      {
2030         image.seterror(IMAGE_ERROR_UNSUPPORTED, "Invalid rom file size");
1984         image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
20311985         return IMAGE_INIT_FAIL;
20321986      }
2033
2034      memcpy(RAM + addr + 0,       image.get_software_region("uprom"), size_hi);
2035      memcpy(RAM + addr + size_hi, image.get_software_region("lorom"), size_lo);
1987     
1988      slot->rom_alloc(size_lo + size_hi, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
1989      memcpy(slot->get_rom_base() + 0,       image.get_software_region("uprom"), size_hi);
1990      memcpy(slot->get_rom_base() + size_hi, image.get_software_region("lorom"), size_lo);
20361991   }
2037
1992   
20381993   return IMAGE_INIT_PASS;
20391994}
20401995
r32627r32628
20752030   m_via6522_0->write_cb2(1);
20762031}
20772032
2078MACHINE_START_MEMBER(bbc_state,bbca)
2033// setup pointers for optional EPROMs
2034void bbc_state::bbc_setup_banks(memory_bank *membank, int banks, UINT32 shift, UINT32 size)
20792035{
2036   astring region_tag;
2037   memory_region *tmp_reg;
2038   UINT8 *eprom[4];
2039   if (m_exp1 && (tmp_reg = memregion(region_tag.cpy(m_exp1->tag()).cat(GENERIC_ROM_REGION_TAG))))
2040      eprom[0] = tmp_reg->base() + shift;
2041   else
2042      eprom[0] = m_region_opt->base() + 0x0000 + shift;
2043   if (m_exp2 && (tmp_reg = memregion(region_tag.cpy(m_exp2->tag()).cat(GENERIC_ROM_REGION_TAG))))
2044      eprom[1] = tmp_reg->base() + shift;
2045   else
2046      eprom[1] = m_region_opt->base() + 0x4000 + shift;
2047   if (m_exp3 && (tmp_reg = memregion(region_tag.cpy(m_exp3->tag()).cat(GENERIC_ROM_REGION_TAG))))
2048      eprom[2] = tmp_reg->base() + shift;
2049   else
2050      eprom[2] = m_region_opt->base() + 0x8000 + shift;
2051   if (m_exp4 && (tmp_reg = memregion(region_tag.cpy(m_exp4->tag()).cat(GENERIC_ROM_REGION_TAG))))
2052      eprom[3] = tmp_reg->base() + shift;
2053   else
2054      eprom[3] = m_region_opt->base() + 0xc000 + shift;
2055   
2056   membank->configure_entries(0, 1,  eprom[0], size);
2057   membank->configure_entries(1, 1,  eprom[1], size);
2058   membank->configure_entries(2, 1,  eprom[2], size);
2059   membank->configure_entries(3, 1,  eprom[3], size);
2060
2061   if (banks > 4)
2062   {
2063      for (int i = 0; i < banks - 4; i++)
2064         membank->configure_entries(i + 4, 1,  m_region_opt->base() + 0x10000 + shift + i * 0x4000, size);
2065   }
20802066}
20812067
2082MACHINE_RESET_MEMBER(bbc_state,bbca)
2068void bbc_state::bbcm_setup_banks(memory_bank *membank, int banks, UINT32 shift, UINT32 size)
20832069{
2070   astring region_tag;
2071   memory_region *tmp_reg;
2072   UINT8 *eprom[2];
2073   if (m_exp1 && (tmp_reg = memregion(region_tag.cpy(m_exp1->tag()).cat(GENERIC_ROM_REGION_TAG))))
2074      eprom[0] = tmp_reg->base() + shift;
2075   else
2076      eprom[0] = m_region_opt->base() + 0x0000 + shift;
2077   if (m_exp2 && (tmp_reg = memregion(region_tag.cpy(m_exp2->tag()).cat(GENERIC_ROM_REGION_TAG))))
2078      eprom[1] = tmp_reg->base() + shift;
2079   else
2080      eprom[1] = m_region_opt->base() + 0x8000 + shift;
2081   
2082   membank->configure_entries(0, 1,  eprom[0], size);
2083   membank->configure_entries(1, 1,  eprom[0] + 0x4000, size);
2084   membank->configure_entries(2, 1,  eprom[1], size);
2085   membank->configure_entries(3, 1,  eprom[1] + 0x4000, size);
2086   
2087   if (banks > 4)
2088   {
2089      for (int i = 0; i < banks - 4; i++)
2090         membank->configure_entries(i + 4, 1,  m_region_opt->base() + 0x10000 + shift + i * 0x4000, size);
2091   }
2092}
2093
2094MACHINE_START_MEMBER(bbc_state, bbca)
2095{
2096   bbc_setup_banks(m_bank4, 4, 0, 0x4000);
2097}
2098
2099MACHINE_RESET_MEMBER(bbc_state, bbca)
2100{
20842101   UINT8 *RAM = m_region_maincpu->base();
20852102
20862103   m_bank1->set_base(RAM);
r32627r32628
20972114      m_memorySize=16;
20982115   }
20992116
2100   m_bank4->set_base(m_region_user1->base());          /* bank 4 is the paged ROMs     from 8000 to bfff */
2101   m_bank7->set_base(m_region_user1->base()+0x10000);  /* bank 7 points at the OS rom  from c000 to ffff */
2117   m_bank4->set_entry(0);
2118   m_bank7->set_base(m_region_os->base());  /* bank 7 points at the OS rom  from c000 to ffff */
21022119
21032120   bbcb_IC32_initialise(this);
21042121}
21052122
2106MACHINE_START_MEMBER(bbc_state,bbcb)
2123MACHINE_START_MEMBER(bbc_state, bbcb)
21072124{
21082125   m_mc6850_clock = 0;
21092126   m_previous_i8271_int_state=0;
21102127   m_previous_wd177x_int_state=1;
2128   bbc_setup_banks(m_bank4, 16, 0, 0x4000);
2129   if (m_region_dfs)
2130      m_bank4->configure_entries(16, 8, m_region_dfs->base(), 0x4000);   // additional bank for paged ram
21112131}
21122132
2113MACHINE_RESET_MEMBER(bbc_state,bbcb)
2133MACHINE_RESET_MEMBER(bbc_state, bbcb)
21142134{
21152135   UINT8 *RAM = m_region_maincpu->base();
21162136   m_DFSType=    (ioport("BBCCONFIG")->read() >> 0) & 0x07;
r32627r32628
21192139   m_bank3->set_base(RAM + 0x4000);
21202140   m_memorySize=32;
21212141
2122   m_bank4->set_base(m_region_user1->base());            /* bank 4 is the paged ROMs     from 8000 to bfff */
2123   m_bank7->set_base(m_region_user1->base() + 0x40000);  /* bank 7 points at the OS rom  from c000 to ffff */
2142   m_bank4->set_entry(0);
2143   m_bank7->set_base(m_region_os->base());  /* bank 7 points at the OS rom  from c000 to ffff */
21242144
21252145   bbcb_IC32_initialise(this);
21262146
r32627r32628
21282148}
21292149
21302150
2131MACHINE_START_MEMBER(bbc_state,bbcbp)
2151MACHINE_START_MEMBER(bbc_state, bbcbp)
21322152{
21332153   m_mc6850_clock = 0;
21342154
21352155   m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcbp_direct_handler), this));
21362156
2137   /* bank 6 is the paged ROMs     from b000 to bfff */
2138   m_bank6->configure_entries(0, 16, m_region_user1->base()+0x3000, 1<<14);
2157   bbc_setup_banks(m_bank4, 16, 0, 0x3000);
2158   m_bank4->configure_entries(16, 1, m_region_maincpu->base() + 0x8000, 0x3000);   // additional bank for paged ram
2159   bbc_setup_banks(m_bank6, 16, 0x3000, 0x1000);
21392160}
21402161
2141MACHINE_RESET_MEMBER(bbc_state,bbcbp)
2162MACHINE_RESET_MEMBER(bbc_state, bbcbp)
21422163{
21432164   m_bank1->set_base(m_region_maincpu->base());
2144   m_bank2->set_base(m_region_maincpu->base()+0x03000);  /* bank 2 screen/shadow ram     from 3000 to 7fff */
2145   m_bank4->set_base(m_region_user1->base());            /* bank 4 is paged ROM or RAM   from 8000 to afff */
2165   m_bank2->set_base(m_region_maincpu->base() + 0x03000);  /* bank 2 screen/shadow ram     from 3000 to 7fff */
2166   m_bank4->set_entry(0);
21462167   m_bank6->set_entry(0);
2147   m_bank7->set_base(m_region_user1->base()+0x40000);    /* bank 7 points at the OS rom  from c000 to ffff */
2168   m_bank7->set_base(m_region_os->base());    /* bank 7 points at the OS rom  from c000 to ffff */
21482169
21492170   bbcb_IC32_initialise(this);
21502171
r32627r32628
21522173}
21532174
21542175
2155MACHINE_START_MEMBER(bbc_state,bbcm)
2176MACHINE_START_MEMBER(bbc_state, bbcm)
21562177{
21572178   m_mc6850_clock = 0;
21582179
21592180   m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcm_direct_handler), this));
21602181
2161   /* bank 5 is the paged ROMs from 9000 to bfff */
2162   m_bank5->configure_entries(0, 16, m_region_user1->base()+0x01000, 1<<14);
2182   bbcm_setup_banks(m_bank4, 16, 0, 0x1000);
2183   m_bank4->configure_entries(16, 1, m_region_maincpu->base() + 0x8000, 0x1000);   // additional bank for paged ram
2184   bbcm_setup_banks(m_bank5, 16, 0x1000, 0x3000);
21632185
21642186   /* Set ROM/IO bank to point to rom */
2165   m_bank8->set_base( m_region_user1->base()+0x43c00);
2166   m_maincpu->space(AS_PROGRAM).install_read_bank(0xFC00, 0xFEFF, "bank8");
2187   m_bank8->set_base(m_region_os->base() + 0x3c00);
2188   m_maincpu->space(AS_PROGRAM).install_read_bank(0xfc00, 0xfeff, "bank8");
21672189}
21682190
2169MACHINE_RESET_MEMBER(bbc_state,bbcm)
2191MACHINE_RESET_MEMBER(bbc_state, bbcm)
21702192{
21712193   m_bank1->set_base(m_region_maincpu->base());           /* bank 1 regular lower ram     from 0000 to 2fff */
21722194   m_bank2->set_base(m_region_maincpu->base() + 0x3000);  /* bank 2 screen/shadow ram     from 3000 to 7fff */
2173   m_bank4->set_base(m_region_user1->base());             /* bank 4 is paged ROM or RAM   from 8000 to 8fff */
2195   m_bank4->set_entry(0);
21742196   m_bank5->set_entry(0);
2175   m_bank7->set_base(m_region_user1->base() + 0x40000);   /* bank 6 OS rom of RAM         from c000 to dfff */
2197   m_bank7->set_base(m_region_os->base());   /* bank 6 OS rom of RAM         from c000 to dfff */
21762198
21772199   bbcb_IC32_initialise(this);
21782200
trunk/src/mess/includes/bbc.h
r32627r32628
2626#include "sound/tms5220.h"
2727#include "imagedev/cassette.h"
2828
29#include "bus/generic/slot.h"
30#include "bus/generic/carts.h"
31
2932#define RS232_TAG       "rs232"
3033
3134class bbc_state : public driver_device
r32627r32628
4851      m_via6522_1(*this, "via6522_1"),
4952      m_upd7002(*this, "upd7002"),
5053      m_i8271(*this, "i8271"),
54      m_exp1(*this, "exp_rom1"),
55      m_exp2(*this, "exp_rom2"),
56      m_exp3(*this, "exp_rom3"),
57      m_exp4(*this, "exp_rom4"),
5158      m_joy0(*this, "JOY0"),
5259      m_joy1(*this, "JOY1"),
5360      m_joy2(*this, "JOY2"),
5461      m_joy3(*this, "JOY3"),
5562      m_region_maincpu(*this, "maincpu"),
56      m_region_user1(*this, "user1"),
57      m_region_user2(*this, "user2"),
63      m_region_os(*this, "os"),
64      m_region_opt(*this, "option"),
65      m_region_dfs(*this, "dfs"),
5866      m_bank1(*this, "bank1"),
5967      m_bank2(*this, "bank2"),
6068      m_bank3(*this, "bank3"),
r32627r32628
6876      m_via_user_irq(CLEAR_LINE),
6977      m_acia_irq(CLEAR_LINE),
7078      m_palette(*this, "palette")
71   {
72   }
79   { }
7380
7481   DECLARE_WRITE8_MEMBER(bbc_page_selecta_w);
7582   DECLARE_WRITE8_MEMBER(bbc_memorya1_w);
r32627r32628
161168   UPD7002_GET_ANALOGUE(BBC_get_analogue_input);
162169   UPD7002_EOC(BBC_uPD7002_EOC);
163170
164   int exp_rom_load(device_image_interface &image, int index);
165   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbc_exp_rom );
166   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcm_cart );
171   void bbc_setup_banks(memory_bank *membank, int banks, UINT32 shift, UINT32 size);
172   void bbcm_setup_banks(memory_bank *membank, int banks, UINT32 shift, UINT32 size);
167173
174   int bbc_load_cart(device_image_interface &image, generic_slot_device *slot);
175   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(exp1_load) { return bbc_load_cart(image, m_exp1); }
176   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(exp2_load) { return bbc_load_cart(image, m_exp2); }
177   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(exp3_load) { return bbc_load_cart(image, m_exp3); }
178   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(exp4_load) { return bbc_load_cart(image, m_exp4); }
179
180   int bbcm_load_cart(device_image_interface &image, generic_slot_device *slot);
181   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(bbcm_exp1_load) { return bbcm_load_cart(image, m_exp1); }
182   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(bbcm_exp2_load) { return bbcm_load_cart(image, m_exp2); }
183
168184   MC6845_UPDATE_ROW(crtc_update_row);
169185
170186private:
r32627r32628
184200   optional_device<via6522_device> m_via6522_1;
185201   optional_device<upd7002_device> m_upd7002;
186202   optional_device<i8271_device> m_i8271;
203   required_device<generic_slot_device> m_exp1;
204   required_device<generic_slot_device> m_exp2;
205   optional_device<generic_slot_device> m_exp3;
206   optional_device<generic_slot_device> m_exp4;
187207   optional_ioport m_joy0, m_joy1, m_joy2, m_joy3;
188208
189209   required_memory_region m_region_maincpu;
190   required_memory_region m_region_user1;
191   optional_memory_region m_region_user2;
210   required_memory_region m_region_os;
211   required_memory_region m_region_opt;
212   optional_memory_region m_region_dfs;
192213   required_memory_bank m_bank1; // bbca bbcb bbcbp bbcbp128 bbcm
193214   optional_memory_bank m_bank2; //           bbcbp bbcbp128 bbcm
194215   optional_memory_bank m_bank3; // bbca bbcb

Previous 199869 Revisions Next


© 1997-2024 The MAME Team