summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/magicard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/magicard.cpp')
-rw-r--r--src/mame/drivers/magicard.cpp190
1 files changed, 8 insertions, 182 deletions
diff --git a/src/mame/drivers/magicard.cpp b/src/mame/drivers/magicard.cpp
index 7fd94a4d1b4..8b366eb09ee 100644
--- a/src/mame/drivers/magicard.cpp
+++ b/src/mame/drivers/magicard.cpp
@@ -395,7 +395,7 @@
*******************************************************************************/
#include "emu.h"
-#include "cpu/m68000/m68000.h"
+#include "machine/scc68070.h"
#include "sound/ay8910.h"
#include "sound/saa1099.h"
#include "video/ramdac.h"
@@ -417,14 +417,6 @@ public:
m_magicram(*this, "magicram"),
m_magicramb(*this, "magicramb"),
m_pcab_vregs(*this, "pcab_vregs"),
- m_scc68070_ext_irqc_regs(*this, "scc_xirqc_regs"),
- m_scc68070_iic_regs(*this, "scc_iic_regs"),
- m_scc68070_uart_regs(*this, "scc_uart_regs"),
- m_scc68070_timer_regs(*this, "scc_timer_regs"),
- m_scc68070_int_irqc_regs(*this, "scc_iirqc_regs"),
- m_scc68070_dma_ch1_regs(*this, "scc_dma1_regs"),
- m_scc68070_dma_ch2_regs(*this, "scc_dma2_regs"),
- m_scc68070_mmu_regs(*this, "scc_mmu_regs"),
m_maincpu(*this, "maincpu"),
m_screen(*this, "screen"),
m_palette(*this, "palette") { }
@@ -435,37 +427,13 @@ public:
void init_magicard();
private:
- u16 m_vector;
+ //u16 m_vector;
required_shared_ptr<uint16_t> m_magicram;
required_shared_ptr<uint16_t> m_magicramb;
required_shared_ptr<uint16_t> m_pcab_vregs;
- required_shared_ptr<uint16_t> m_scc68070_ext_irqc_regs;
- required_shared_ptr<uint16_t> m_scc68070_iic_regs;
- required_shared_ptr<uint16_t> m_scc68070_uart_regs;
- required_shared_ptr<uint16_t> m_scc68070_timer_regs;
- required_shared_ptr<uint16_t> m_scc68070_int_irqc_regs;
- required_shared_ptr<uint16_t> m_scc68070_dma_ch1_regs;
- required_shared_ptr<uint16_t> m_scc68070_dma_ch2_regs;
- required_shared_ptr<uint16_t> m_scc68070_mmu_regs;
DECLARE_READ16_MEMBER(test_r);
DECLARE_READ16_MEMBER(philips_66470_r);
DECLARE_WRITE16_MEMBER(philips_66470_w);
- DECLARE_READ16_MEMBER(scc68070_ext_irqc_r);
- DECLARE_WRITE16_MEMBER(scc68070_ext_irqc_w);
- DECLARE_READ16_MEMBER(scc68070_iic_r);
- DECLARE_WRITE16_MEMBER(scc68070_iic_w);
- DECLARE_READ16_MEMBER(scc68070_uart_r);
- DECLARE_WRITE16_MEMBER(scc68070_uart_w);
- DECLARE_READ16_MEMBER(scc68070_timer_r);
- DECLARE_WRITE16_MEMBER(scc68070_timer_w);
- DECLARE_READ16_MEMBER(scc68070_int_irqc_r);
- DECLARE_WRITE16_MEMBER(scc68070_int_irqc_w);
- DECLARE_READ16_MEMBER(scc68070_dma_ch1_r);
- DECLARE_WRITE16_MEMBER(scc68070_dma_ch1_w);
- DECLARE_READ16_MEMBER(scc68070_dma_ch2_r);
- DECLARE_WRITE16_MEMBER(scc68070_dma_ch2_w);
- DECLARE_READ16_MEMBER(scc68070_mmu_r);
- DECLARE_WRITE16_MEMBER(scc68070_mmu_w);
virtual void machine_reset() override;
virtual void video_start() override;
uint32_t screen_update_magicard(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -476,8 +444,6 @@ private:
void hotslots_mem(address_map &map);
void magicard_mem(address_map &map);
void ramdac_map(address_map &map);
- void scc68070_mem(address_map &map);
- void cpu_space_map(address_map &map);
};
@@ -782,147 +748,14 @@ WRITE16_MEMBER(magicard_state::philips_66470_w)
// }
}
-/* scc68070 specific stuff (to be moved) */
-
-READ16_MEMBER(magicard_state::scc68070_ext_irqc_r)
-{
- return m_scc68070_ext_irqc_regs[offset];
-}
-
-WRITE16_MEMBER(magicard_state::scc68070_ext_irqc_w)
-{
- data &= mem_mask;
-
- m_scc68070_ext_irqc_regs[offset] = data;
-}
-
-READ16_MEMBER(magicard_state::scc68070_iic_r)
-{
- //printf("%04x\n",offset*2);
-
- switch(offset)
- {
- case 0x04/2: return m_scc68070_iic_regs[offset] & 0xef; //iic status register, bit 4 = pending irq
- }
-
- return m_scc68070_iic_regs[offset];
-}
-
-WRITE16_MEMBER(magicard_state::scc68070_iic_w)
-{
- data &= mem_mask;
-
- m_scc68070_iic_regs[offset] = data;
-}
-
-READ16_MEMBER(magicard_state::scc68070_uart_r)
-{
- //printf("%02x\n",offset*2);
-
- switch(offset)
- {
- case 0x02/2: return machine().rand(); //uart mode register
- }
-
- return m_scc68070_uart_regs[offset];
-}
-
-WRITE16_MEMBER(magicard_state::scc68070_uart_w)
-{
- data &= mem_mask;
-
- m_scc68070_uart_regs[offset] = data;
-}
-
-READ16_MEMBER(magicard_state::scc68070_timer_r)
-{
- return m_scc68070_timer_regs[offset];
-}
-
-WRITE16_MEMBER(magicard_state::scc68070_timer_w)
-{
- data &= mem_mask;
-
- m_scc68070_timer_regs[offset] = data;
-}
-
-READ16_MEMBER(magicard_state::scc68070_int_irqc_r)
-{
- return m_scc68070_int_irqc_regs[offset];
-}
-
-WRITE16_MEMBER(magicard_state::scc68070_int_irqc_w)
-{
- data &= mem_mask;
-
- m_scc68070_int_irqc_regs[offset] = data;
-}
-
-READ16_MEMBER(magicard_state::scc68070_dma_ch1_r)
-{
- return m_scc68070_dma_ch1_regs[offset];
-}
-
-WRITE16_MEMBER(magicard_state::scc68070_dma_ch1_w)
-{
- data &= mem_mask;
-
- m_scc68070_dma_ch1_regs[offset] = data;
-}
-
-READ16_MEMBER(magicard_state::scc68070_dma_ch2_r)
-{
- return m_scc68070_dma_ch2_regs[offset];
-}
-
-WRITE16_MEMBER(magicard_state::scc68070_dma_ch2_w)
-{
- data &= mem_mask;
-
- m_scc68070_dma_ch2_regs[offset] = data;
-}
-
-READ16_MEMBER(magicard_state::scc68070_mmu_r)
-{
- return m_scc68070_mmu_regs[offset];
-}
-
-WRITE16_MEMBER(magicard_state::scc68070_mmu_w)
-{
- data &= mem_mask;
-
- m_scc68070_mmu_regs[offset] = data;
-
- switch(offset)
- {
- case 0x0000/2:
- if(data & 0x80) //throw an error if the (unemulated) MMU is enabled
- fatalerror("SCC68070: MMU enable bit active\n");
- break;
- }
-}
-
/*************************
* Memory Maps *
*************************/
-void magicard_state::scc68070_mem(address_map &map)
-{
- map(0x80001000, 0x8000100f).rw(FUNC(magicard_state::scc68070_ext_irqc_r), FUNC(magicard_state::scc68070_ext_irqc_w)).share("scc_xirqc_regs"); //lir
- map(0x80002000, 0x8000200f).rw(FUNC(magicard_state::scc68070_iic_r), FUNC(magicard_state::scc68070_iic_w)).share("scc_iic_regs"); //i2c
- map(0x80002010, 0x8000201f).rw(FUNC(magicard_state::scc68070_uart_r), FUNC(magicard_state::scc68070_uart_w)).share("scc_uart_regs");
- map(0x80002020, 0x8000202f).rw(FUNC(magicard_state::scc68070_timer_r), FUNC(magicard_state::scc68070_timer_w)).share("scc_timer_regs");
- map(0x80002040, 0x8000204f).rw(FUNC(magicard_state::scc68070_int_irqc_r), FUNC(magicard_state::scc68070_int_irqc_w)).share("scc_iirqc_regs");
- map(0x80004000, 0x8000403f).rw(FUNC(magicard_state::scc68070_dma_ch1_r), FUNC(magicard_state::scc68070_dma_ch1_w)).share("scc_dma1_regs");
- map(0x80004040, 0x8000407f).rw(FUNC(magicard_state::scc68070_dma_ch2_r), FUNC(magicard_state::scc68070_dma_ch2_w)).share("scc_dma2_regs");
- map(0x80008000, 0x8000807f).rw(FUNC(magicard_state::scc68070_mmu_r), FUNC(magicard_state::scc68070_mmu_w)).share("scc_mmu_regs");
-}
-
void magicard_state::magicard_mem(address_map &map)
{
// ADDRESS_MAP_GLOBAL_MASK(0x1fffff)
- scc68070_mem(map);
map(0x00000000, 0x001ffbff).mirror(0x00200000).ram().share("magicram");
map(0x00600000, 0x007ffbff).ram().share("magicramb");
/* 001ffc00-001ffdff System I/O */
@@ -941,7 +774,6 @@ void magicard_state::magicard_mem(address_map &map)
void magicard_state::hotslots_mem(address_map &map)
{
// ADDRESS_MAP_GLOBAL_MASK(0x1fffff)
- scc68070_mem(map);
map(0x00000000, 0x001ffbff).mirror(0x00200000).ram().share("magicram");
map(0x00600000, 0x007ffbff).ram().share("magicramb");
map(0x001fff80, 0x001fffbf).mirror(0x7fe00000).ram(); //DRAM I/O, not accessed by this game, CD buffer?
@@ -970,12 +802,12 @@ void magicard_state::machine_reset()
memcpy (dst, src, 0x80000);
memcpy (dst + 0x40000 * 1, src, 0x80000);
memcpy (dst + 0x40000 * 2, src, 0x80000);
- memcpy (dst + 0x40000 * 3, src, 0x80000);
+ memcpy (dst + 0x40000 * 3, src, 0x7fc00);
dst = m_magicramb;
memcpy (dst, src, 0x80000);
memcpy (dst + 0x40000 * 1, src, 0x80000);
memcpy (dst + 0x40000 * 2, src, 0x80000);
- memcpy (dst + 0x40000 * 3, src, 0x80000);
+ memcpy (dst + 0x40000 * 3, src, 0x7fc00);
m_maincpu->reset();
}
@@ -986,15 +818,9 @@ void magicard_state::machine_reset()
/*Probably there's a mask somewhere if it REALLY uses irqs at all...irq vectors dynamically changes after some time.*/
-//In practice, needs a *real* 68070 emu
-void magicard_state::cpu_space_map(address_map &map)
-{
- map(0xfffff0, 0xffffff).m(m_maincpu, FUNC(m68000_base_device::autovectors_map));
- map(0xfffff2, 0xfffff3).lr16("irq 2", [this]() -> u16 { return m_vector; });
-}
-
INTERRUPT_GEN_MEMBER(magicard_state::magicard_irq)
{
+#if 0
if(machine().input().code_pressed(KEYCODE_Z)) { //vblank?
m_vector = 0xe4;
device.execute().set_input_line(1, HOLD_LINE);
@@ -1002,7 +828,8 @@ INTERRUPT_GEN_MEMBER(magicard_state::magicard_irq)
if(machine().input().code_pressed(KEYCODE_X)) { //uart irq
m_vector = 0xf0;
device.execute().set_input_line(1, HOLD_LINE);
- }
+ }
+#endif
}
void magicard_state::ramdac_map(address_map &map)
@@ -1013,9 +840,8 @@ void magicard_state::ramdac_map(address_map &map)
void magicard_state::magicard(machine_config &config)
{
- SCC68070(config, m_maincpu, CLOCK_A / 2); /* SCC-68070 CCA84 datasheet */
+ SCC68070(config, m_maincpu, CLOCK_A); /* SCC-68070 CCA84 datasheet */
m_maincpu->set_addrmap(AS_PROGRAM, &magicard_state::magicard_mem);
- m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &magicard_state::cpu_space_map);
m_maincpu->set_vblank_int("screen", FUNC(magicard_state::magicard_irq)); /* no interrupts? (it erases the vectors..) */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);