trunk/src/mess/drivers/excali64.c
| r242444 | r242445 | |
| 19 | 19 | - Disk controller |
| 20 | 20 | - Graphics commands such as LINE and CIRCLE produce a syntax error. |
| 21 | 21 | - Some commands such as HGRCLS are missing from the rom. Perhaps we need a later version? |
| 22 | | - SET command produces random graphics instead of the expected lo-res dot. |
| 23 | 22 | - The schematic shows the audio counter connected to 2MHz, but this produces |
| 24 | 23 | sounds that are too high. Connected to 1MHz for now. |
| 25 | 24 | - Serial |
| r242444 | r242445 | |
| 86 | 85 | AM_RANGE(0x0000, 0x1FFF) AM_READ_BANK("bankr1") AM_WRITE_BANK("bankw1") |
| 87 | 86 | AM_RANGE(0x2000, 0x2FFF) AM_READ_BANK("bankr2") AM_WRITE_BANK("bankw2") |
| 88 | 87 | AM_RANGE(0x3000, 0x3FFF) AM_READ_BANK("bankr3") AM_WRITE_BANK("bankw3") |
| 89 | | AM_RANGE(0x4000, 0x4FFF) AM_READ_BANK("bankr4") AM_WRITE_BANK("bankw4") |
| 90 | | AM_RANGE(0x5000, 0xFFFF) AM_RAM AM_REGION("rambank", 0x5000) |
| 88 | AM_RANGE(0x4000, 0xBFFF) AM_READ_BANK("bankr4") AM_WRITE_BANK("bankw4") |
| 89 | AM_RANGE(0xC000, 0xFFFF) AM_RAM AM_REGION("rambank", 0xC000) |
| 91 | 90 | ADDRESS_MAP_END |
| 92 | 91 | |
| 93 | 92 | static ADDRESS_MAP_START(excali64_io, AS_IO, 8, excali64_state) |
| r242444 | r242445 | |
| 245 | 244 | membank("bankr1")->set_entry(0); |
| 246 | 245 | membank("bankr2")->set_entry(0); |
| 247 | 246 | membank("bankr3")->set_entry(0); |
| 247 | membank("bankr4")->set_entry(0); |
| 248 | 248 | membank("bankw2")->set_entry(0); |
| 249 | 249 | membank("bankw3")->set_entry(0); |
| 250 | 250 | membank("bankw4")->set_entry(0); |
| r242444 | r242445 | |
| 252 | 252 | else |
| 253 | 253 | if BIT(data, 0) |
| 254 | 254 | { |
| 255 | | // select videoram and hiresram for writing, and ROM for reading |
| 255 | // select videoram and hiresram |
| 256 | 256 | membank("bankr1")->set_entry(1); |
| 257 | | membank("bankr2")->set_entry(1); |
| 258 | | membank("bankr3")->set_entry(1); |
| 257 | membank("bankr2")->set_entry(2); |
| 258 | membank("bankr3")->set_entry(2); |
| 259 | 259 | membank("bankw2")->set_entry(2); |
| 260 | 260 | membank("bankw3")->set_entry(2); |
| 261 | membank("bankr4")->set_entry(2); |
| 261 | 262 | membank("bankw4")->set_entry(2); |
| 262 | 263 | } |
| 263 | 264 | else |
| 264 | 265 | { |
| 265 | | // as above, except 4000-4FFF is main ram |
| 266 | // select rom, videoram, and main ram |
| 266 | 267 | membank("bankr1")->set_entry(1); |
| 267 | 268 | membank("bankr2")->set_entry(1); |
| 268 | 269 | membank("bankr3")->set_entry(1); |
| 269 | 270 | membank("bankw2")->set_entry(2); |
| 270 | 271 | membank("bankw3")->set_entry(2); |
| 272 | membank("bankr4")->set_entry(0); |
| 271 | 273 | membank("bankw4")->set_entry(0); |
| 272 | 274 | } |
| 273 | 275 | |
| r242444 | r242445 | |
| 284 | 286 | membank("bankr4")->set_entry(0); // read from RAM |
| 285 | 287 | membank("bankw1")->set_entry(0); // write to RAM |
| 286 | 288 | membank("bankw2")->set_entry(2); // write to videoram |
| 287 | | membank("bankw3")->set_entry(2); // write to hiresram |
| 289 | membank("bankw3")->set_entry(2); // write to videoram hires pointers |
| 288 | 290 | membank("bankw4")->set_entry(0); // write to RAM |
| 289 | 291 | m_maincpu->reset(); |
| 290 | 292 | } |
| r242444 | r242445 | |
| 325 | 327 | // do this here because driver_init hasn't run yet |
| 326 | 328 | m_p_videoram = memregion("videoram")->base(); |
| 327 | 329 | m_p_chargen = memregion("chargen")->base(); |
| 328 | | m_p_hiresram = memregion("hiresram")->base(); |
| 330 | m_p_hiresram = m_p_videoram + 0x2000; |
| 329 | 331 | UINT8 *main = memregion("roms")->base(); |
| 330 | 332 | UINT8 *ram = memregion("rambank")->base(); |
| 331 | 333 | |
| r242444 | r242445 | |
| 345 | 347 | membank("bankr2")->configure_entry(1, &main[0x4000]);//boot |
| 346 | 348 | membank("bankr3")->configure_entry(1, &main[0x5000]);//boot |
| 347 | 349 | // videoram |
| 350 | membank("bankr2")->configure_entry(2, &m_p_videoram[0x0000]); |
| 348 | 351 | membank("bankw2")->configure_entry(2, &m_p_videoram[0x0000]);//boot |
| 349 | 352 | // hiresram |
| 350 | | membank("bankw3")->configure_entry(2, &m_p_hiresram[0x0000]);//boot |
| 353 | membank("bankr3")->configure_entry(2, &m_p_videoram[0x1000]); |
| 354 | membank("bankw3")->configure_entry(2, &m_p_videoram[0x1000]);//boot |
| 355 | membank("bankr4")->configure_entry(2, &m_p_hiresram[0x0000]); |
| 351 | 356 | membank("bankw4")->configure_entry(2, &m_p_hiresram[0x0000]); |
| 352 | 357 | |
| 353 | 358 | // Set up foreground palettes |
| r242444 | r242445 | |
| 388 | 393 | fg = col_base + (col >> 4); |
| 389 | 394 | bg = 32 + ((col >> 1) & 7); |
| 390 | 395 | |
| 391 | | if (BIT(col, 0) & BIT(chr, 7)) |
| 392 | | gfx = m_p_hiresram[(chr<<4) | ra]; // hires definition |
| 396 | if BIT(col, 0) |
| 397 | { |
| 398 | UINT16 hires_bank = (m_p_videoram[mem+0x1000] ^ 4) << 24; |
| 399 | gfx = m_p_hiresram[hires_bank | (chr<<4) | ra]; // hires definition |
| 400 | } |
| 393 | 401 | else |
| 394 | 402 | gfx = m_p_chargen[(chr<<4) | ra]; // normal character |
| 395 | 403 | |
| r242444 | r242445 | |
| 478 | 486 | ROM_FILL(0x4f7, 1, 8) |
| 479 | 487 | |
| 480 | 488 | ROM_REGION(0x10000, "rambank", ROMREGION_ERASE00) |
| 481 | | ROM_REGION(0x1000, "videoram", ROMREGION_ERASE00) |
| 482 | | ROM_REGION(0x1000, "hiresram", ROMREGION_ERASE00) |
| 489 | ROM_REGION(0xA000, "videoram", ROMREGION_ERASE00) |
| 483 | 490 | |
| 484 | 491 | ROM_REGION(0x1020, "chargen", 0) |
| 485 | 492 | ROM_LOAD( "genex_3.ic43", 0x0000, 0x1000, CRC(b91619a9) SHA1(2ced636cb7b94ba9d329868d7ecf79963cefe9d9) ) |