trunk/src/mess/machine/bbc.c
| r20886 | r20887 | |
| 37 | 37 | /* for the model A just address the 4 on board ROM sockets */ |
| 38 | 38 | WRITE8_MEMBER(bbc_state::bbc_page_selecta_w) |
| 39 | 39 | { |
| 40 | | membank("bank4")->set_base(m_region_user1->base()+((data&0x03)<<14)); |
| 40 | m_bank4->set_base(m_region_user1->base()+((data&0x03)<<14)); |
| 41 | 41 | } |
| 42 | 42 | |
| 43 | 43 | |
| r20886 | r20887 | |
| 57 | 57 | m_rombank=data&0x0f; |
| 58 | 58 | if (m_rombank!=1) |
| 59 | 59 | { |
| 60 | | membank("bank4")->set_base(m_region_user1->base() + (m_rombank << 14)); |
| 60 | m_bank4->set_base(m_region_user1->base() + (m_rombank << 14)); |
| 61 | 61 | } |
| 62 | 62 | else |
| 63 | 63 | { |
| 64 | | membank("bank4")->set_base(m_region_user2->base() + ((m_DFSType) << 14)); |
| 64 | m_bank4->set_base(m_region_user2->base() + ((m_DFSType) << 14)); |
| 65 | 65 | } |
| 66 | 66 | } |
| 67 | 67 | |
| r20886 | r20887 | |
| 138 | 138 | if (m_pagedRAM) |
| 139 | 139 | { |
| 140 | 140 | /* if paged ram then set 8000 to afff to read from the ram 8000 to afff */ |
| 141 | | membank("bank4")->set_base(m_region_maincpu->base() + 0x8000); |
| 141 | m_bank4->set_base(m_region_maincpu->base() + 0x8000); |
| 142 | 142 | } |
| 143 | 143 | else |
| 144 | 144 | { |
| 145 | 145 | /* if paged rom then set the rom to be read from 8000 to afff */ |
| 146 | | membank("bank4")->set_base(m_region_user1->base() + (m_rombank << 14)); |
| 146 | m_bank4->set_base(m_region_user1->base() + (m_rombank << 14)); |
| 147 | 147 | }; |
| 148 | 148 | |
| 149 | 149 | /* set the rom to be read from b000 to bfff */ |
| 150 | | membank("bank6")->set_entry(m_rombank); |
| 150 | m_bank6->set_entry(m_rombank); |
| 151 | 151 | } |
| 152 | 152 | else |
| 153 | 153 | { |
| 154 | 154 | //the video display should now use this flag to display the shadow ram memory |
| 155 | 155 | m_vdusel=(data>>7)&0x01; |
| 156 | | bbcbp_setvideoshadow(machine(), m_vdusel); |
| 156 | bbcbp_setvideoshadow(m_vdusel); |
| 157 | 157 | //need to make the video display do a full screen refresh for the new memory area |
| 158 | | membank("bank2")->set_base(m_region_maincpu->base()+0x3000); |
| 158 | m_bank2->set_base(m_region_maincpu->base()+0x3000); |
| 159 | 159 | } |
| 160 | 160 | } |
| 161 | 161 | |
| r20886 | r20887 | |
| 186 | 186 | if (m_vdusel == 0) |
| 187 | 187 | { |
| 188 | 188 | // not in shadow ram mode so just read normal ram |
| 189 | | membank("bank2")->set_base(ram + 0x3000); |
| 189 | m_bank2->set_base(ram + 0x3000); |
| 190 | 190 | } |
| 191 | 191 | else |
| 192 | 192 | { |
| 193 | 193 | if (vdudriverset(machine())) |
| 194 | 194 | { |
| 195 | 195 | // if VDUDriver set then read from shadow ram |
| 196 | | membank("bank2")->set_base(ram + 0xb000); |
| 196 | m_bank2->set_base(ram + 0xb000); |
| 197 | 197 | } |
| 198 | 198 | else |
| 199 | 199 | { |
| 200 | 200 | // else read from normal ram |
| 201 | | membank("bank2")->set_base(ram + 0x3000); |
| 201 | m_bank2->set_base(ram + 0x3000); |
| 202 | 202 | } |
| 203 | 203 | } |
| 204 | 204 | return address; |
| r20886 | r20887 | |
| 360 | 360 | |
| 361 | 361 | if (m_ACCCON_Y) |
| 362 | 362 | { |
| 363 | | membank("bank7")->set_base(m_region_maincpu->base() + 0x9000); |
| 363 | m_bank7->set_base(m_region_maincpu->base() + 0x9000); |
| 364 | 364 | } |
| 365 | 365 | else |
| 366 | 366 | { |
| 367 | | membank("bank7")->set_base(m_region_user1->base() + 0x40000); |
| 367 | m_bank7->set_base(m_region_user1->base() + 0x40000); |
| 368 | 368 | } |
| 369 | 369 | |
| 370 | | bbcbp_setvideoshadow(machine(), m_ACCCON_D); |
| 370 | bbcbp_setvideoshadow(m_ACCCON_D); |
| 371 | 371 | |
| 372 | 372 | |
| 373 | 373 | if (m_ACCCON_X) |
| 374 | 374 | { |
| 375 | | membank("bank2")->set_base(m_region_maincpu->base() + 0xb000 ); |
| 375 | m_bank2->set_base(m_region_maincpu->base() + 0xb000 ); |
| 376 | 376 | } |
| 377 | 377 | else |
| 378 | 378 | { |
| 379 | | membank("bank2")->set_base(m_region_maincpu->base() + 0x3000 ); |
| 379 | m_bank2->set_base(m_region_maincpu->base() + 0x3000 ); |
| 380 | 380 | } |
| 381 | 381 | |
| 382 | 382 | /* ACCCON_TST controls paging of rom reads in the 0xFC00-0xFEFF reigon */ |
| r20886 | r20887 | |
| 384 | 384 | /* if 1 the the ROM is paged in for reads but writes still go to I/O */ |
| 385 | 385 | if (m_ACCCON_TST) |
| 386 | 386 | { |
| 387 | | membank("bank8")->set_base(m_region_user1->base()+0x43c00); |
| 387 | m_bank8->set_base(m_region_user1->base()+0x43c00); |
| 388 | 388 | space.install_read_bank(0xFC00,0xFEFF,"bank8"); |
| 389 | 389 | } |
| 390 | 390 | else |
| r20886 | r20887 | |
| 410 | 410 | |
| 411 | 411 | if (m_pagedRAM) |
| 412 | 412 | { |
| 413 | | membank("bank4")->set_base(m_region_maincpu->base() + 0x8000); |
| 414 | | membank("bank5")->set_entry(m_rombank); |
| 413 | m_bank4->set_base(m_region_maincpu->base() + 0x8000); |
| 414 | m_bank5->set_entry(m_rombank); |
| 415 | 415 | } |
| 416 | 416 | else |
| 417 | 417 | { |
| 418 | | membank("bank4")->set_base(m_region_user1->base() + ((m_rombank) << 14)); |
| 419 | | membank("bank5")->set_entry(m_rombank); |
| 418 | m_bank4->set_base(m_region_user1->base() + ((m_rombank) << 14)); |
| 419 | m_bank5->set_entry(m_rombank); |
| 420 | 420 | } |
| 421 | 421 | } |
| 422 | 422 | |
| r20886 | r20887 | |
| 432 | 432 | { |
| 433 | 433 | if (m_ACCCON_X) |
| 434 | 434 | { |
| 435 | | membank( "bank2" )->set_base( m_region_maincpu->base() + 0xb000 ); |
| 435 | m_bank2->set_base( m_region_maincpu->base() + 0xb000 ); |
| 436 | 436 | } |
| 437 | 437 | else |
| 438 | 438 | { |
| 439 | 439 | if (m_ACCCON_E && bbcm_vdudriverset(machine())) |
| 440 | 440 | { |
| 441 | | membank( "bank2" )->set_base( m_region_maincpu->base() + 0xb000 ); |
| 441 | m_bank2->set_base( m_region_maincpu->base() + 0xb000 ); |
| 442 | 442 | } |
| 443 | 443 | else |
| 444 | 444 | { |
| 445 | | membank( "bank2" )->set_base( m_region_maincpu->base() + 0x3000 ); |
| 445 | m_bank2->set_base( m_region_maincpu->base() + 0x3000 ); |
| 446 | 446 | } |
| 447 | 447 | } |
| 448 | 448 | |
| r20886 | r20887 | |
| 1993 | 1993 | { |
| 1994 | 1994 | UINT8 *ram = m_region_maincpu->base(); |
| 1995 | 1995 | m_RAMSize = 1; |
| 1996 | | membank("bank1")->set_base(ram); |
| 1997 | | membank("bank3")->set_base(ram); |
| 1996 | m_bank1->set_base(ram); |
| 1997 | m_bank3->set_base(ram); |
| 1998 | 1998 | |
| 1999 | | membank("bank4")->set_base(m_region_user1->base()); /* bank 4 is the paged ROMs from 8000 to bfff */ |
| 2000 | | membank("bank7")->set_base(m_region_user1->base()+0x10000); /* bank 7 points at the OS rom from c000 to ffff */ |
| 1999 | m_bank4->set_base(m_region_user1->base()); /* bank 4 is the paged ROMs from 8000 to bfff */ |
| 2000 | m_bank7->set_base(m_region_user1->base()+0x10000); /* bank 7 points at the OS rom from c000 to ffff */ |
| 2001 | 2001 | |
| 2002 | 2002 | bbcb_IC32_initialise(this); |
| 2003 | 2003 | } |
| r20886 | r20887 | |
| 2029 | 2029 | m_SWRAMtype = (machine().root_device().ioport("BBCCONFIG")->read() >> 3) & 0x03; |
| 2030 | 2030 | m_RAMSize= (machine().root_device().ioport("BBCCONFIG")->read() >> 5) & 0x01; |
| 2031 | 2031 | |
| 2032 | | membank("bank1")->set_base(ram); |
| 2032 | m_bank1->set_base(ram); |
| 2033 | 2033 | if (m_RAMSize) |
| 2034 | 2034 | { |
| 2035 | 2035 | /* 32K Model B */ |
| 2036 | | membank("bank3")->set_base(ram + 0x4000); |
| 2036 | m_bank3->set_base(ram + 0x4000); |
| 2037 | 2037 | m_memorySize=32; |
| 2038 | 2038 | } |
| 2039 | 2039 | else |
| 2040 | 2040 | { |
| 2041 | 2041 | /* 16K just repeat the lower 16K*/ |
| 2042 | | membank("bank3")->set_base(ram); |
| 2042 | m_bank3->set_base(ram); |
| 2043 | 2043 | m_memorySize=16; |
| 2044 | 2044 | } |
| 2045 | 2045 | |
| 2046 | | membank("bank4")->set_base(m_region_user1->base()); /* bank 4 is the paged ROMs from 8000 to bfff */ |
| 2047 | | membank("bank7")->set_base(m_region_user1->base() + 0x40000); /* bank 7 points at the OS rom from c000 to ffff */ |
| 2046 | m_bank4->set_base(m_region_user1->base()); /* bank 4 is the paged ROMs from 8000 to bfff */ |
| 2047 | m_bank7->set_base(m_region_user1->base() + 0x40000); /* bank 7 points at the OS rom from c000 to ffff */ |
| 2048 | 2048 | |
| 2049 | 2049 | bbcb_IC32_initialise(this); |
| 2050 | 2050 | |
| r20886 | r20887 | |
| 2067 | 2067 | m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcbp_direct_handler), this)); |
| 2068 | 2068 | |
| 2069 | 2069 | /* bank 6 is the paged ROMs from b000 to bfff */ |
| 2070 | | membank("bank6")->configure_entries(0, 16, m_region_user1->base() + 0x3000, 1<<14); |
| 2070 | m_bank6->configure_entries(0, 16, m_region_user1->base() + 0x3000, 1<<14); |
| 2071 | 2071 | } |
| 2072 | 2072 | |
| 2073 | 2073 | MACHINE_RESET_MEMBER(bbc_state,bbcbp) |
| 2074 | 2074 | { |
| 2075 | | membank("bank1")->set_base(m_region_maincpu->base()); |
| 2076 | | membank("bank2")->set_base(m_region_maincpu->base()+0x03000); /* bank 2 screen/shadow ram from 3000 to 7fff */ |
| 2077 | | membank("bank4")->set_base(m_region_user1->base()); /* bank 4 is paged ROM or RAM from 8000 to afff */ |
| 2078 | | membank("bank6")->set_entry(0); |
| 2079 | | membank("bank7")->set_base(m_region_user1->base()+0x40000); /* bank 7 points at the OS rom from c000 to ffff */ |
| 2075 | m_bank1->set_base(m_region_maincpu->base()); |
| 2076 | m_bank2->set_base(m_region_maincpu->base()+0x03000); /* bank 2 screen/shadow ram from 3000 to 7fff */ |
| 2077 | m_bank4->set_base(m_region_user1->base()); /* bank 4 is paged ROM or RAM from 8000 to afff */ |
| 2078 | m_bank6->set_entry(0); |
| 2079 | m_bank7->set_base(m_region_user1->base()+0x40000); /* bank 7 points at the OS rom from c000 to ffff */ |
| 2080 | 2080 | |
| 2081 | 2081 | bbcb_IC32_initialise(this); |
| 2082 | 2082 | |
| r20886 | r20887 | |
| 2093 | 2093 | m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcm_direct_handler), this)); |
| 2094 | 2094 | |
| 2095 | 2095 | /* bank 5 is the paged ROMs from 9000 to bfff */ |
| 2096 | | membank("bank5")->configure_entries(0, 16, m_region_user1->base()+0x01000, 1<<14); |
| 2096 | m_bank5->configure_entries(0, 16, m_region_user1->base()+0x01000, 1<<14); |
| 2097 | 2097 | |
| 2098 | 2098 | /* Set ROM/IO bank to point to rom */ |
| 2099 | | membank( "bank8" )->set_base( m_region_user1->base()+0x43c00); |
| 2099 | m_bank8->set_base( m_region_user1->base()+0x43c00); |
| 2100 | 2100 | m_maincpu->space(AS_PROGRAM).install_read_bank(0xFC00, 0xFEFF, "bank8"); |
| 2101 | 2101 | } |
| 2102 | 2102 | |
| 2103 | 2103 | MACHINE_RESET_MEMBER(bbc_state,bbcm) |
| 2104 | 2104 | { |
| 2105 | | membank("bank1")->set_base(m_region_maincpu->base()); /* bank 1 regular lower ram from 0000 to 2fff */ |
| 2106 | | membank("bank2")->set_base(m_region_maincpu->base() + 0x3000); /* bank 2 screen/shadow ram from 3000 to 7fff */ |
| 2107 | | membank("bank4")->set_base(m_region_user1->base()); /* bank 4 is paged ROM or RAM from 8000 to 8fff */ |
| 2108 | | membank("bank5")->set_entry(0); |
| 2109 | | membank("bank7")->set_base(m_region_user1->base() + 0x40000); /* bank 6 OS rom of RAM from c000 to dfff */ |
| 2105 | m_bank1->set_base(m_region_maincpu->base()); /* bank 1 regular lower ram from 0000 to 2fff */ |
| 2106 | m_bank2->set_base(m_region_maincpu->base() + 0x3000); /* bank 2 screen/shadow ram from 3000 to 7fff */ |
| 2107 | m_bank4->set_base(m_region_user1->base()); /* bank 4 is paged ROM or RAM from 8000 to 8fff */ |
| 2108 | m_bank5->set_entry(0); |
| 2109 | m_bank7->set_base(m_region_user1->base() + 0x40000); /* bank 6 OS rom of RAM from c000 to dfff */ |
| 2110 | 2110 | |
| 2111 | 2111 | bbcb_IC32_initialise(this); |
| 2112 | 2112 | |
trunk/src/mess/includes/bbc.h
| r20886 | r20887 | |
| 26 | 26 | bbc_state(const machine_config &mconfig, device_type type, const char *tag) |
| 27 | 27 | : driver_device(mconfig, type, tag) |
| 28 | 28 | , m_maincpu(*this, "maincpu") |
| 29 | , m_mc6845(*this, "mc6845") |
| 29 | 30 | , m_sn(*this, "sn76489") |
| 30 | 31 | , m_trom(*this, "saa505x") |
| 31 | 32 | , m_ACCCON_IRR(CLEAR_LINE) |
| r20886 | r20887 | |
| 35 | 36 | , m_region_maincpu(*this, "maincpu") |
| 36 | 37 | , m_region_user1(*this, "user1") |
| 37 | 38 | , m_region_user2(*this, "user2") |
| 39 | , m_bank1(*this, "bank1") |
| 40 | , m_bank2(*this, "bank2") |
| 41 | , m_bank3(*this, "bank3") |
| 42 | , m_bank4(*this, "bank4") |
| 43 | , m_bank5(*this, "bank5") |
| 44 | , m_bank6(*this, "bank6") |
| 45 | , m_bank7(*this, "bank7") |
| 46 | , m_bank8(*this, "bank8") |
| 38 | 47 | { } |
| 39 | 48 | |
| 40 | 49 | required_device<cpu_device> m_maincpu; |
| 50 | required_device<mc6845_device> m_mc6845; |
| 41 | 51 | optional_device<sn76489_device> m_sn; |
| 42 | 52 | required_device<saa5050_device> m_trom; |
| 43 | 53 | |
| r20886 | r20887 | |
| 314 | 324 | required_memory_region m_region_maincpu; |
| 315 | 325 | required_memory_region m_region_user1; |
| 316 | 326 | optional_memory_region m_region_user2; |
| 327 | required_memory_bank m_bank1; // bbca bbcb bbcbp bbcbp128 bbcm |
| 328 | optional_memory_bank m_bank2; // bbcbp bbcbp128 bbcm |
| 329 | optional_memory_bank m_bank3; // bbca bbcb |
| 330 | required_memory_bank m_bank4; // bbca bbcb bbcbp bbcbp128 bbcm |
| 331 | optional_memory_bank m_bank5; // bbcm |
| 332 | optional_memory_bank m_bank6; // bbcbp bbcbp128 |
| 333 | required_memory_bank m_bank7; // bbca bbcb bbcbp bbcbp128 bbcm |
| 334 | optional_memory_bank m_bank8; // bbcm |
| 335 | |
| 336 | void bbcbp_setvideoshadow(int vdusel); |
| 337 | void common_init(int memorySize); |
| 338 | void set_pixel_lookup(); |
| 317 | 339 | }; |
| 318 | 340 | |
| 319 | 341 | |
| r20886 | r20887 | |
| 329 | 351 | |
| 330 | 352 | /* tape support */ |
| 331 | 353 | |
| 332 | | |
| 333 | 354 | extern const i8271_interface bbc_i8271_interface; |
| 334 | 355 | extern const uPD7002_interface bbc_uPD7002; |
| 335 | 356 | |
| 336 | | /*----------- defined in video/bbc.c -----------*/ |
| 337 | | |
| 338 | | void bbc_set_video_memory_lookups(running_machine &machine, int ramsize); |
| 339 | | void bbc_setscreenstart(running_machine &machine, int b4, int b5); |
| 340 | | void bbcbp_setvideoshadow(running_machine &machine, int vdusel); |
| 341 | | |
| 342 | 357 | #endif /* BBC_H_ */ |
trunk/src/mess/video/bbc.c
| r20886 | r20887 | |
| 97 | 97 | |
| 98 | 98 | /* this is a quick lookup array that puts bits 0,2,4,6 into bits 0,1,2,3 |
| 99 | 99 | this is used by the pallette lookup in the video ULA */ |
| 100 | | static void set_pixel_lookup(bbc_state *state) |
| 100 | void bbc_state::set_pixel_lookup() |
| 101 | 101 | { |
| 102 | 102 | int i; |
| 103 | 103 | for (i=0; i<256; i++) |
| 104 | 104 | { |
| 105 | | state->m_pixel_bits[i] = (((i>>7)&1)<<3) | (((i>>5)&1)<<2) | (((i>>3)&1)<<1) | (((i>>1)&1)<<0); |
| 105 | m_pixel_bits[i] = (((i>>7)&1)<<3) | (((i>>5)&1)<<2) | (((i>>3)&1)<<1) | (((i>>1)&1)<<0); |
| 106 | 106 | } |
| 107 | 107 | } |
| 108 | 108 | |
| r20886 | r20887 | |
| 143 | 143 | } else { |
| 144 | 144 | m_pixels_per_byte=pixels_per_byte_set[m_videoULA_characters_per_line|(m_videoULA_6845_clock_rate<<2)]; |
| 145 | 145 | } |
| 146 | | mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845"); |
| 147 | | mc6845->set_hpixels_per_column(m_pixels_per_byte); |
| 146 | m_mc6845->set_hpixels_per_column(m_pixels_per_byte); |
| 148 | 147 | if (m_videoULA_6845_clock_rate) |
| 149 | | mc6845->set_clock(2000000); |
| 148 | m_mc6845->set_clock(2000000); |
| 150 | 149 | else |
| 151 | | mc6845->set_clock(1000000); |
| 150 | m_mc6845->set_clock(1000000); |
| 152 | 151 | } |
| 153 | 152 | break; |
| 154 | 153 | // Set a pallet register in the Video ULA |
| r20886 | r20887 | |
| 305 | 304 | |
| 306 | 305 | WRITE8_MEMBER(bbc_state::bbc_6845_w) |
| 307 | 306 | { |
| 308 | | mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845"); |
| 309 | 307 | switch(offset & 1) |
| 310 | 308 | { |
| 311 | 309 | case 0 : |
| 312 | | mc6845->address_w(space,0,data); |
| 310 | m_mc6845->address_w(space,0,data); |
| 313 | 311 | break; |
| 314 | 312 | case 1 : |
| 315 | | mc6845->register_w(space,0,data); |
| 313 | m_mc6845->register_w(space,0,data); |
| 316 | 314 | break; |
| 317 | 315 | } |
| 318 | 316 | return; |
| r20886 | r20887 | |
| 320 | 318 | |
| 321 | 319 | READ8_MEMBER(bbc_state::bbc_6845_r) |
| 322 | 320 | { |
| 323 | | mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845"); |
| 324 | | |
| 325 | 321 | switch (offset&1) |
| 326 | 322 | { |
| 327 | | case 0: return mc6845->status_r(space,0); |
| 328 | | case 1: return mc6845->register_r(space,0); |
| 323 | case 0: return m_mc6845->status_r(space,0); |
| 324 | case 1: return m_mc6845->register_r(space,0); |
| 329 | 325 | } |
| 330 | 326 | return 0; |
| 331 | 327 | } |
| r20886 | r20887 | |
| 336 | 332 | |
| 337 | 333 | /**** BBC B+ Shadow Ram change ****/ |
| 338 | 334 | |
| 339 | | void bbcbp_setvideoshadow(running_machine &machine, int vdusel) |
| 335 | void bbc_state::bbcbp_setvideoshadow(int vdusel) |
| 340 | 336 | { |
| 341 | | bbc_state *state = machine.driver_data<bbc_state>(); |
| 342 | 337 | if (vdusel) |
| 343 | 338 | { |
| 344 | | state->m_BBC_Video_RAM= state->memregion("maincpu")->base()+0x8000; |
| 339 | m_BBC_Video_RAM= m_region_maincpu->base()+0x8000; |
| 345 | 340 | } else { |
| 346 | | state->m_BBC_Video_RAM= machine.root_device().memregion("maincpu")->base(); |
| 341 | m_BBC_Video_RAM= m_region_maincpu->base(); |
| 347 | 342 | } |
| 348 | 343 | } |
| 349 | 344 | |
| r20886 | r20887 | |
| 352 | 347 | * Initialize the BBC video emulation |
| 353 | 348 | ************************************************************************/ |
| 354 | 349 | |
| 355 | | static void common_init(running_machine &machine, int memorySize) |
| 350 | void bbc_state::common_init(int memorySize) |
| 356 | 351 | { |
| 357 | | bbc_state *state = machine.driver_data<bbc_state>(); |
| 358 | | state->m_emulation_cursor_size = 1; |
| 352 | m_emulation_cursor_size = 1; |
| 359 | 353 | |
| 360 | | state->m_VideoULA_CR = 7; |
| 361 | | state->m_VideoULA_CR_counter = 0; |
| 354 | m_VideoULA_CR = 7; |
| 355 | m_VideoULA_CR_counter = 0; |
| 362 | 356 | |
| 363 | | set_pixel_lookup(state); |
| 357 | set_pixel_lookup(); |
| 364 | 358 | |
| 365 | | state->m_BBC_Video_RAM = state->memregion("maincpu")->base(); |
| 366 | | state->m_memorySize=memorySize; |
| 359 | m_BBC_Video_RAM = m_region_maincpu->base(); |
| 360 | m_memorySize=memorySize; |
| 367 | 361 | |
| 368 | 362 | } |
| 369 | 363 | |
| 370 | 364 | VIDEO_START_MEMBER(bbc_state,bbca) |
| 371 | 365 | { |
| 372 | | common_init(machine(),16); |
| 366 | common_init(16); |
| 373 | 367 | } |
| 374 | 368 | |
| 375 | 369 | VIDEO_START_MEMBER(bbc_state,bbcb) |
| 376 | 370 | { |
| 377 | | common_init(machine(),32); |
| 371 | common_init(32); |
| 378 | 372 | } |
| 379 | 373 | |
| 380 | 374 | VIDEO_START_MEMBER(bbc_state,bbcbp) |
| 381 | 375 | { |
| 382 | | common_init(machine(),32); |
| 376 | common_init(32); |
| 383 | 377 | } |
| 384 | 378 | |
| 385 | 379 | VIDEO_START_MEMBER(bbc_state,bbcm) |
| 386 | 380 | { |
| 387 | | common_init(machine(),32); |
| 381 | common_init(32); |
| 388 | 382 | } |
| 389 | 383 | |
| 390 | 384 | |
| r20886 | r20887 | |
| 582 | 576 | |
| 583 | 577 | WRITE8_MEMBER(bbc_state::bbc_6845_w) |
| 584 | 578 | { |
| 585 | | mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845"); |
| 586 | | switch(offset & 1) |
| 587 | | { |
| 588 | | case 0 : |
| 589 | | mc6845->address_w(space,0,data); |
| 590 | | break; |
| 591 | | case 1 : |
| 592 | | mc6845->register_w(space,0,data); |
| 593 | | break; |
| 594 | | } |
| 595 | | return; |
| 596 | | |
| 597 | | switch (offset&1) |
| 598 | | { |
| 599 | | case 0: |
| 600 | | m6845_address_w(0,data); |
| 601 | | break; |
| 602 | | case 1: |
| 603 | | m6845_register_w(0,data); |
| 604 | | break; |
| 605 | | } |
| 606 | | |
| 579 | switch(offset & 1) |
| 580 | { |
| 581 | case 0 : |
| 582 | m_mc6845->address_w(space,0,data); |
| 583 | break; |
| 584 | case 1 : |
| 585 | m_mc6845->register_w(space,0,data); |
| 586 | break; |
| 587 | } |
| 607 | 588 | } |
| 608 | 589 | |
| 590 | |
| 609 | 591 | READ8_HANDLER (bbc_6845_r) |
| 610 | 592 | { |
| 611 | | |
| 612 | | mc6845_device *mc6845 = space.machine().device<mc6845_device>("mc6845"); |
| 613 | | |
| 614 | | switch (offset&1) |
| 615 | | { |
| 616 | | case 0: return mc6845->status_r(space,0); break; |
| 617 | | case 1: return mc6845->register_r(space,0); break; |
| 618 | | } |
| 619 | | return 0; |
| 620 | | |
| 621 | | int retval=0; |
| 622 | | |
| 623 | | switch (offset&1) |
| 624 | | { |
| 625 | | case 0: |
| 626 | | break; |
| 627 | | case 1: |
| 628 | | retval=m6845_register_r(0); |
| 629 | | break; |
| 630 | | } |
| 631 | | return retval; |
| 593 | switch (offset&1) |
| 594 | { |
| 595 | case 0: return m_mc6845->status_r(space,0); break; |
| 596 | case 1: return m_mc6845->register_r(space,0); break; |
| 597 | } |
| 598 | return 0; |
| 632 | 599 | } |
| 633 | 600 | |
| 634 | 601 | |
| r20886 | r20887 | |
| 638 | 605 | UINT32 bbc_state::screen_update_bbc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 639 | 606 | { |
| 640 | 607 | |
| 641 | | mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845"); |
| 642 | | mc6845->update( bitmap, cliprect); |
| 608 | m_mc6845->update( bitmap, cliprect); |
| 643 | 609 | |
| 644 | 610 | return 0; |
| 645 | 611 | |