tmp68301: Reimplement in the new68k framework. The timers are not yet implemented, couldn't find a driver which cared. Hopefully the regression testing will find some.

This commit is contained in:
Olivier Galibert 2023-04-04 14:42:30 +02:00
parent fb89dcf6d3
commit ca6e220dbb
22 changed files with 1871 additions and 746 deletions

View File

@ -1918,6 +1918,7 @@ end
--@src/devices/cpu/m68000/scc68070.h,CPUS["M680X0"] = true --@src/devices/cpu/m68000/scc68070.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/fscpu32.h,CPUS["M680X0"] = true --@src/devices/cpu/m68000/fscpu32.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/mcf5206e.h,CPUS["M680X0"] = true --@src/devices/cpu/m68000/mcf5206e.h,CPUS["M680X0"] = true
--@src/devices/cpu/m68000/tmp68301.h,CPUS["M680X0"] = true
-------------------------------------------------- --------------------------------------------------
if CPUS["M680X0"] then if CPUS["M680X0"] then
@ -1961,6 +1962,8 @@ if CPUS["M680X0"] then
MAME_DIR .. "src/devices/cpu/m68000/fscpu32.cpp", MAME_DIR .. "src/devices/cpu/m68000/fscpu32.cpp",
MAME_DIR .. "src/devices/cpu/m68000/mcf5206e.h", MAME_DIR .. "src/devices/cpu/m68000/mcf5206e.h",
MAME_DIR .. "src/devices/cpu/m68000/mcf5206e.cpp", MAME_DIR .. "src/devices/cpu/m68000/mcf5206e.cpp",
MAME_DIR .. "src/devices/cpu/m68000/tmp68301.h",
MAME_DIR .. "src/devices/cpu/m68000/tmp68301.cpp",
} }
end end

View File

@ -3508,18 +3508,6 @@ if (MACHINES["TMC208K"]~=null) then
} }
end end
---------------------------------------------------
--
--@src/devices/machine/tmp68301.h,MACHINES["TMP68301"] = true
---------------------------------------------------
if (MACHINES["TMP68301"]~=null) then
files {
MAME_DIR .. "src/devices/machine/tmp68301.cpp",
MAME_DIR .. "src/devices/machine/tmp68301.h",
}
end
--------------------------------------------------- ---------------------------------------------------
-- --
--@src/devices/machine/tms1024.h,MACHINES["TMS1024"] = true --@src/devices/machine/tms1024.h,MACHINES["TMS1024"] = true

View File

@ -464,3 +464,105 @@ void m68000_device::end_interrupt_vector_lookup()
m_int_vector = (m_edb & 0xff) << 2; m_int_vector = (m_edb & 0xff) << 2;
m_int_next_state = 0; m_int_next_state = 0;
} }
m68000_mcu_device::m68000_mcu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) :
m68000_device(mconfig, type, tag, owner, clock)
{
}
void m68000_mcu_device::execute_run()
{
internal_update(total_cycles());
m_icount -= m_count_before_instruction_step;
if(m_icount < 0) {
m_count_before_instruction_step = -m_icount;
m_icount = 0;
} else
m_count_before_instruction_step = 0;
while(m_bcount && m_icount <= m_bcount)
internal_update(total_cycles() + m_icount - m_bcount);
while(m_icount > 0) {
for(;;) {
if(m_icount > m_bcount && m_inst_substate)
(this->*(m_handlers_p[m_inst_state]))();
while(m_icount > m_bcount) {
if(m_inst_state >= S_first_instruction) {
m_ipc = m_pc - 2;
m_irdi = m_ird;
if(machine().debug_flags & DEBUG_FLAG_ENABLED)
debugger_instruction_hook(m_ipc);
}
(this->*(m_handlers_f[m_inst_state]))();
}
if(m_post_run)
do_post_run();
else
break;
}
if(m_icount > 0)
while(m_bcount && m_icount <= m_bcount)
internal_update(total_cycles() + m_icount - m_bcount);
if(m_icount > 0 && m_inst_substate) {
(this->*(m_handlers_p[m_inst_state]))();
if(m_post_run)
do_post_run();
}
}
if(m_icount < 0) {
m_count_before_instruction_step = -m_icount;
m_icount = 0;
}
}
void m68000_mcu_device::recompute_bcount(uint64_t event_time)
{
if(!event_time || event_time >= total_cycles() + m_icount) {
m_bcount = 0;
return;
}
m_bcount = total_cycles() + m_icount - event_time;
}
void m68000_mcu_device::add_event(uint64_t &event_time, uint64_t new_event)
{
if(!new_event)
return;
if(!event_time || event_time > new_event)
event_time = new_event;
}
void m68000_mcu_device::device_start()
{
m68000_device::device_start();
if(m_mmu) {
m_handlers_f = s_handlers_ifm;
m_handlers_p = s_handlers_ipm;
} else {
m_handlers_f = s_handlers_dfm;
m_handlers_p = s_handlers_dpm;
}
}
void m68000_mcu_device::set_current_interrupt_level(u32 level)
{
if(level == m_int_level)
return;
m_int_level = level;
/* A transition from < 7 to 7 always interrupts (NMI) */
/* Note: Level 7 can also level trigger like a normal IRQ */
if(m_int_level == 7)
m_nmi_pending = true;
update_interrupt();
}

View File

@ -927,6 +927,22 @@ protected:
} }
}; };
class m68000_mcu_device : public m68000_device
{
protected:
m68000_mcu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
virtual void execute_run() override;
void recompute_bcount(uint64_t event_time);
static void add_event(uint64_t &event_time, uint64_t new_event);
void internal_update();
virtual void internal_update(uint64_t current_time) = 0;
virtual void device_start() override;
void set_current_interrupt_level(u32 level);
};
DECLARE_DEVICE_TYPE(M68000, m68000_device) DECLARE_DEVICE_TYPE(M68000, m68000_device)
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,289 @@
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
#ifndef MAME_CPU_M68000_TMP68301_H
#define MAME_CPU_M68000_TMP68301_H
#pragma once
#include "m68000.h"
class tmp68301_device : public m68000_mcu_device
{
public:
tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
void set_serial_external_clock(u32 hz) { m_serial_external_clock = hz; }
auto parallel_r_cb() { return m_parallel_r_cb.bind(); }
auto parallel_w_cb() { return m_parallel_w_cb.bind(); }
DECLARE_WRITE_LINE_MEMBER(rx0_w) { serial_rx_w(0, state); }
DECLARE_WRITE_LINE_MEMBER(rx1_w) { serial_rx_w(1, state); }
DECLARE_WRITE_LINE_MEMBER(rx2_w) { serial_rx_w(2, state); }
auto tx0_handler() { return m_tx_cb[0].bind(); }
auto tx1_handler() { return m_tx_cb[1].bind(); }
auto tx2_handler() { return m_tx_cb[2].bind(); }
void timer_in_w(int state);
protected:
devcb_read16 m_parallel_r_cb;
devcb_write16 m_parallel_w_cb;
devcb_write_line m_tx_cb[3];
void device_start() override;
void device_reset() override;
u32 execute_input_lines() const noexcept override;
void execute_set_input(int inputnum, int state) override;
void internal_update(uint64_t current_time = 0) override;
void internal_map(address_map &map);
void cpu_space_map(address_map &map);
// Address decoder
u8 m_amar[2], m_aamr[2], m_aacr[3];
u8 m_ator;
u16 m_arelr;
void show_cs(int cs);
void show_iack();
void amar_w(int reg, u8 data);
void aamr_w(int reg, u8 data);
void aacr_w(int reg, u8 data);
u8 amar0_r();
void amar0_w(u8 data);
u8 amar1_r();
void amar1_w(u8 data);
u8 aamr0_r();
void aamr0_w(u8 data);
u8 aamr1_r();
void aamr1_w(u8 data);
u8 aacr0_r();
void aacr0_w(u8 data);
u8 aacr1_r();
void aacr1_w(u8 data);
u8 aacr2_r();
void aacr2_w(u8 data);
u8 ator_r();
void ator_w(u8 data);
u16 arelr_r();
void arelr_w(offs_t, u16 data, u16 mem_mask);
// Interrupt controller
static const char *const interrupt_slot_names[11];
static const int interrupt_vector_to_slot[32];
static const int interrupt_slot_to_priority[11];
u16 m_external_interrupt_state;
u32 m_interrupt_state;
u8 m_icr[10];
u16 m_imr, m_ipr, m_iisr;
u8 m_ivnr, m_ieir;
u8 icr_r(offs_t reg);
void icr_w(offs_t reg, u8 data);
u16 imr_r();
void imr_w(offs_t, u16 data, u16 mem_mask);
u16 ipr_r();
void ipr_w(offs_t, u16 data, u16 mem_mask);
u16 iisr_r();
void iisr_w(offs_t, u16 data, u16 mem_mask);
u8 ivnr_r();
void ivnr_w(u8 data);
u8 ieir_r();
void ieir_w(u8 data);
u8 interrupt_callback();
void interrupt_update();
void interrupt_internal_trigger(int id);
std::tuple<u32, u8, u32> interrupt_get_current() const;
// Parallel interface
static const int parallel_mode_table[16];
static const char *const parallel_mode_names[10];
u16 m_pdir;
u8 m_pcr, m_psr, m_pcmr, m_pmr;
u16 m_pdr;
u8 m_ppr1, m_ppr2;
u8 m_parallel_mode;
u8 parallel_get_interrupt() const;
u16 pdir_r();
void pdir_w(offs_t, u16 data, u16 mem_mask);
u8 pcr_r();
void pcr_w(u8 data);
u8 psr_r();
void psr_w(u8 data);
u8 pcmr_r();
void pcmr_w(u8 data);
u8 pmr_r();
void pmr_w(u8 data);
u16 pdr_r();
void pdr_w(offs_t, u16 data, u16 mem_mask);
u8 ppr1_r();
void ppr1_w(u8 data);
u8 ppr2_r();
void ppr2_w(u8 data);
// Serial interface
enum {
SCR_INTM = 0x01,
SCR_RES = 0x20,
SCR_CKSE = 0x80,
SMR_ST = 0x01,
SMR_TXINTM = 0x02,
SMR_CL_SFT = 2,
SMR_PEN = 0x10,
SMR_PEO = 0x20,
SMR_ERINTM = 0x40,
SMR_RXINTM = 0x80,
SCMR_TXEN = 0x01,
SCMR_DTR = 0x02,
SCMR_RXEN = 0x04,
SCMR_SBRK = 0x08,
SCMR_ERS = 0x10,
SCMR_RTS = 0x20,
SSR_TXRDY = 0x01,
SSR_RXRDY = 0x02,
SSR_TXE = 0x04,
SSR_PE = 0x08,
SSR_OE = 0x10,
SSR_FE = 0x20,
SSR_RBRK = 0x40,
SSR_DSR = 0x80,
SR_INT_ERR = 0,
SR_INT_RX = 1,
SR_INT_TX = 2,
SR_INT_UNK = 3,
};
enum {
SR_IDLE,
SR_START,
SR_BIT_0,
SR_BIT_1,
SR_BIT_2,
SR_BIT_3,
SR_BIT_4,
SR_BIT_5,
SR_BIT_6,
SR_BIT_7,
SR_PARITY,
SR_STOP,
SR_DONE,
};
u64 m_serial_tx_next_event[3], m_serial_rx_next_event[3];
u64 m_serial_gclk[3];
u32 m_serial_external_clock;
u8 m_smr[3], m_scmr[3], m_sbrr[3], m_ssr[3], m_sdrr[3], m_sdrt[3], m_sr_intr[3], m_serial_rx[3], m_serial_tx[3];
u8 m_serial_tx_state[3], m_serial_rx_state[3], m_serial_rx_line[3];
u8 m_spr, m_scr;
static u8 sbrr_to_div(u8 value);
void serial_clock_update(int ch);
u64 serial_get_next_edge(int ch);
bool serial_validate_interrupt(u8 vector) const;
void serial_check_interrupt(int ch);
void serial_tx_update(int ch);
void serial_rx_update(int ch);
void serial_rx_w(int ch, int state);
void ssr_set(int ch, u8 val, u8 mask);
void smr_w(int ch, u8 data);
void scmr_w(int ch, u8 data);
void sbrr_w(int ch, u8 data);
u8 sdr_r(int ch);
void sdr_w(int ch, u8 data);
u8 smr0_r();
void smr0_w(u8 data);
u8 smr1_r();
void smr1_w(u8 data);
u8 smr2_r();
void smr2_w(u8 data);
u8 scmr0_r();
void scmr0_w(u8 data);
u8 scmr1_r();
void scmr1_w(u8 data);
u8 scmr2_r();
void scmr2_w(u8 data);
u8 sbrr0_r();
void sbrr0_w(u8 data);
u8 sbrr1_r();
void sbrr1_w(u8 data);
u8 sbrr2_r();
void sbrr2_w(u8 data);
u8 ssr0_r();
u8 ssr1_r();
u8 ssr2_r();
u8 sdr0_r();
void sdr0_w(u8 data);
u8 sdr1_r();
void sdr1_w(u8 data);
u8 sdr2_r();
void sdr2_w(u8 data);
u8 spr_r();
void spr_w(u8 data);
u8 scr_r();
void scr_w(u8 data);
// 16-bit timer
u16 m_tcr[3], m_tmcr1[3], m_tmcr2[3], m_tctr[3];
static const int timer_source_id[3][2];
static const char *const timer_source_names[3][4];
static const int timer_divider[16];
void tcr_w(int ch, u16 data, u16 mem_mask);
void tmcr1_w(int ch, u16 data, u16 mem_mask);
void tmcr2_w(int ch, u16 data, u16 mem_mask);
void tctr_w(int ch, u16 data, u16 mem_mask);
void tcr0_w(offs_t, u16 data, u16 mem_mask);
u16 tcr0_r();
void tcr1_w(offs_t, u16 data, u16 mem_mask);
u16 tcr1_r();
void tcr2_w(offs_t, u16 data, u16 mem_mask);
u16 tcr2_r();
void tmcr01_w(offs_t, u16 data, u16 mem_mask);
u16 tmcr01_r();
void tmcr11_w(offs_t, u16 data, u16 mem_mask);
u16 tmcr11_r();
void tmcr12_w(offs_t, u16 data, u16 mem_mask);
u16 tmcr12_r();
void tmcr21_w(offs_t, u16 data, u16 mem_mask);
u16 tmcr21_r();
void tmcr22_w(offs_t, u16 data, u16 mem_mask);
u16 tmcr22_r();
void tctr0_w(offs_t, u16 data, u16 mem_mask);
u16 tctr0_r();
void tctr1_w(offs_t, u16 data, u16 mem_mask);
u16 tctr1_r();
void tctr2_w(offs_t, u16 data, u16 mem_mask);
u16 tctr2_r();
};
DECLARE_DEVICE_TYPE(TMP68301, tmp68301_device)
#endif

View File

@ -555,7 +555,7 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
case T10SBC_CMD_READ_10: case T10SBC_CMD_READ_10:
case T10SBC_CMD_READ_12: case T10SBC_CMD_READ_12:
//m_device->logerror("T10MMC: read %x dataLength, \n", dataLength); //m_device->logerror("T10MMC: read %x dataLength lba=%x\n", dataLength, m_lba);
if ((m_cdrom) && (m_blocks)) if ((m_cdrom) && (m_blocks))
{ {
while (dataLength > 0) while (dataLength > 0)
@ -822,6 +822,17 @@ void t10mmc::ReadData( uint8_t *data, int dataLength )
data[21] = 0; data[21] = 0;
break; break;
case 0x0d: // CD page
data[1] = 0x06;
data[0] = 0x0d;
data[2] = 0;
data[3] = 0;
data[4] = 0;
data[5] = 60;
data[6] = 0;
data[7] = 75;
break;
default: default:
m_device->logerror("T10MMC: MODE SENSE unknown page %x\n", command[2] & 0x3f); m_device->logerror("T10MMC: MODE SENSE unknown page %x\n", command[2] & 0x3f);
break; break;

View File

@ -1,380 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia, AJR
/***************************************************************************
TMP68301 basic emulation + Interrupt Handling
The Toshiba TMP68301 is a 68HC000 + serial I/O, parallel I/O,
3 timers, address decoder, wait generator, interrupt controller,
all integrated in a single chip.
TODO:
- Interrupt generation: edge detection, input expansion (INT3-INT9)
- Parallel port: handle timing latency
- Serial port: not done at all
- (and many other things)
***************************************************************************/
#include "emu.h"
#include "machine/tmp68301.h"
DEFINE_DEVICE_TYPE(TMP68301, tmp68301_device, "tmp68301", "Toshiba TMP68301")
void tmp68301_device::tmp68301_regs(address_map &map)
{
map(0x000, 0x3ff).rw(FUNC(tmp68301_device::regs_r), FUNC(tmp68301_device::regs_w));
map(0x080, 0x093).rw(FUNC(tmp68301_device::icr_r), FUNC(tmp68301_device::icr_w)).umask16(0x00ff);
map(0x094, 0x095).rw(FUNC(tmp68301_device::imr_r), FUNC(tmp68301_device::imr_w));
map(0x096, 0x097).rw(FUNC(tmp68301_device::ipr_r), FUNC(tmp68301_device::ipr_w));
map(0x098, 0x099).rw(FUNC(tmp68301_device::iisr_r), FUNC(tmp68301_device::iisr_w));
/* Parallel Port */
map(0x100, 0x101).rw(FUNC(tmp68301_device::pdir_r), FUNC(tmp68301_device::pdir_w));
map(0x10a, 0x10b).rw(FUNC(tmp68301_device::pdr_r), FUNC(tmp68301_device::pdr_w));
/* Serial Port */
map(0x18e, 0x18f).rw(FUNC(tmp68301_device::scr_r), FUNC(tmp68301_device::scr_w));
}
// IRQ Mask register
uint16_t tmp68301_device::imr_r()
{
return m_imr;
}
void tmp68301_device::imr_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_imr);
update_ipl();
}
// IRQ Pending Register
uint16_t tmp68301_device::ipr_r()
{
return m_ipr;
}
void tmp68301_device::ipr_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
// software writes only clear bits
m_ipr &= data | ~mem_mask;
update_ipl();
}
// IRQ In-Service Register
uint16_t tmp68301_device::iisr_r()
{
return m_iisr;
}
void tmp68301_device::iisr_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
// software writes only clear bits
m_iisr &= data | ~mem_mask;
}
// Serial Control Register (TODO: 8-bit wide)
uint16_t tmp68301_device::scr_r()
{
return m_scr;
}
void tmp68301_device::scr_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
/*
*--- ---- CKSE
--*- ---- RES
---- ---* INTM
*/
COMBINE_DATA(&m_scr);
m_scr &= 0xa1;
}
/* Parallel direction: 1 = output, 0 = input */
uint16_t tmp68301_device::pdir_r()
{
return m_pdir;
}
void tmp68301_device::pdir_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_pdir);
}
uint16_t tmp68301_device::pdr_r()
{
return (m_in_parallel_cb(0) & ~m_pdir) | (m_pdr & m_pdir);
}
void tmp68301_device::pdr_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
uint16_t old = m_pdr;
COMBINE_DATA(&m_pdr);
m_pdr = (old & ~m_pdir) | (m_pdr & m_pdir);
m_out_parallel_cb(0, m_pdr, mem_mask);
}
uint8_t tmp68301_device::icr_r(offs_t offset)
{
return m_icr[offset];
}
void tmp68301_device::icr_w(offs_t offset, uint8_t data)
{
/*
--x- ---- Vector number is autogenerated if 1, else use external source
---x x--- 00 falling edge, 01 low level, 10 rising edge, 11 high level
^ applies only to external irqs (offset 0 to 2)
---- -xxx irq level
*/
m_icr[offset] = data;
}
tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: m68000_device(mconfig, TMP68301, tag, owner, clock),
m_in_parallel_cb(*this),
m_out_parallel_cb(*this),
m_ipl(0),
m_imr(0),
m_ipr(0),
m_iisr(0),
m_scr(0),
m_pdir(0),
m_pdr(0)
{
memset(m_regs, 0, sizeof(m_regs));
memset(m_icr, 0, sizeof(m_icr));
m_cpu_space_config.m_internal_map = address_map_constructor(FUNC(tmp68301_device::internal_vectors_r), this);
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void tmp68301_device::device_start()
{
m68000_device::device_start();
for (int i = 0; i < 3; i++)
m_tmp68301_timer[i] = timer_alloc(FUNC(tmp68301_device::timer_callback), this);
m_in_parallel_cb.resolve_safe(0);
m_out_parallel_cb.resolve_safe();
m_s_program->install_device(0xfffc00, 0xffffff, *this, &tmp68301_device::tmp68301_regs);
save_item(NAME(m_regs));
save_item(NAME(m_icr));
save_item(NAME(m_ipl));
save_item(NAME(m_imr));
save_item(NAME(m_ipr));
save_item(NAME(m_iisr));
save_item(NAME(m_scr));
save_item(NAME(m_pdir));
save_item(NAME(m_pdr));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void tmp68301_device::device_reset()
{
m68000_device::device_reset();
m_ipr = 0;
m_iisr = 0;
m_imr = 0x7f7; // mask all irqs
std::fill(std::begin(m_icr), std::end(m_icr), 0x07);
update_ipl();
}
//**************************************************************************
// INLINE HELPERS
//**************************************************************************
void tmp68301_device::internal_vectors_r(address_map &map)
{
map(0xfffff0, 0xffffff).r(FUNC(tmp68301_device::irq_callback)).umask16(0x00ff);
}
uint8_t tmp68301_device::irq_callback(offs_t offset)
{
uint8_t IVNR = m_regs[0x9a/2] & 0xe0; // Interrupt Vector Number Register (IVNR)
for (int src : { 0, 7, 3, 1, 8, 4, 5, 9, 2 })
{
// check if the IPL matches
if (offset == (m_icr[src] & 0x07))
{
// check if interrupt is pending and not masked out
u16 mask = (src > 2 ? 2 : 1) << src;
if ((m_ipr & mask) != 0 && (m_imr & mask) == 0)
{
if (!machine().side_effects_disabled())
{
// add cause to interrupt in-service register
m_iisr |= mask;
// no longer pending
m_ipr &= ~mask;
update_ipl();
}
// vary vector number by type
if (src > 6)
return IVNR | (src - 3);
else if (src > 2)
return IVNR | (src - 1) << 2 | serial_interrupt_cause(src - 3);
else /*if (BIT(m_icr[src], 5))*/ // TODO: use external vector otherwise
return IVNR | src;
}
}
}
// default vector
return IVNR | 0x1f;
}
TIMER_CALLBACK_MEMBER(tmp68301_device::timer_callback)
{
int i = param;
uint16_t TCR = m_regs[(0x200 + i * 0x20)/2];
// logerror("s: callback timer %04X, j = %d\n",machine().describe_context(),i,tcount);
if (TCR & 0x0004) // INT
{
m_ipr |= 0x100 << i;
update_ipl();
}
if (TCR & 0x0080) // N/1
{
// Repeat
update_timer(i);
}
else
{
// One Shot
}
}
void tmp68301_device::update_timer(int i)
{
uint16_t TCR = m_regs[(0x200 + i * 0x20)/2];
uint16_t MAX1 = m_regs[(0x204 + i * 0x20)/2];
uint16_t MAX2 = m_regs[(0x206 + i * 0x20)/2];
int max = 0;
attotime duration = attotime::zero;
m_tmp68301_timer[i]->adjust(attotime::never,i);
// timers 1&2 only
switch( (TCR & 0x0030)>>4 ) // MR2..1
{
case 1:
max = MAX1;
break;
case 2:
max = MAX2;
break;
}
switch ( (TCR & 0xc000)>>14 ) // CK2..1
{
case 0: // System clock (CLK)
if (max)
{
int scale = (TCR & 0x3c00)>>10; // P4..1
if (scale > 8) scale = 8;
duration = attotime::from_hz(unscaled_clock()) * ((1 << scale) * max);
}
break;
}
// logerror("%s: TMP68301 Timer %d, duration %lf, max %04X\n",machine().describe_context(),i,duration,max);
if (!(TCR & 0x0002)) // CS
{
if (duration != attotime::zero)
m_tmp68301_timer[i]->adjust(duration,i);
else
logerror("%s: TMP68301 error, timer %d duration is 0\n",machine().describe_context(),i);
}
}
/* Update the IRQ state based on all possible causes */
void tmp68301_device::update_ipl()
{
uint8_t new_ipl = 0;
for (int src = 0; src < 10; src++)
{
u16 mask = (src > 2 ? 2 : 1) << src;
if ((m_ipr & mask) != 0 && (m_imr & mask) == 0 && new_ipl < (m_icr[src] & 0x07))
new_ipl = m_icr[src] & 0x07;
}
if (new_ipl != m_ipl)
{
if (m_ipl != 0)
set_input_line(m_ipl, CLEAR_LINE);
if (new_ipl != 0)
set_input_line(new_ipl, ASSERT_LINE);
m_ipl = new_ipl;
}
}
uint8_t tmp68301_device::serial_interrupt_cause(int channel)
{
/*
* 00 error occurred
* 01 receive completed
* 10 transmit ready
* 11 interrupt cause cleared while interrupt pending
*/
(void)channel;
return 3;
}
uint16_t tmp68301_device::regs_r(offs_t offset)
{
return m_regs[offset];
}
void tmp68301_device::regs_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_regs[offset]);
if (!ACCESSING_BITS_0_7) return;
// logerror("CPU #0 PC %06X: TMP68301 Reg %04X<-%04X & %04X\n", >pc(),offset*2,data,mem_mask^0xffff);
switch( offset * 2 )
{
// Timers
case 0x200:
case 0x220:
case 0x240:
{
int i = ((offset*2) >> 5) & 3;
update_timer( i );
}
break;
}
}
void tmp68301_device::external_interrupt_0() { m_ipr |= EXT_IRQ0; update_ipl(); }
void tmp68301_device::external_interrupt_1() { m_ipr |= EXT_IRQ1; update_ipl(); }
void tmp68301_device::external_interrupt_2() { m_ipr |= EXT_IRQ2; update_ipl(); }

View File

@ -1,100 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia
#ifndef MAME_MACHINE_TMP68301_H
#define MAME_MACHINE_TMP68301_H
#pragma once
#include "cpu/m68000/m68000.h"
/* TODO: serial ports, frequency & hook it up with m68k */
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class tmp68301_device : public m68000_device
{
public:
tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
auto in_parallel_callback() { return m_in_parallel_cb.bind(); }
auto out_parallel_callback() { return m_out_parallel_cb.bind(); }
// Interrupts
void external_interrupt_0();
void external_interrupt_1();
void external_interrupt_2();
private:
uint16_t imr_r();
void imr_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
uint16_t ipr_r();
void ipr_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
uint16_t iisr_r();
void iisr_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
uint16_t scr_r();
void scr_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
uint16_t pdr_r();
void pdr_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
uint16_t pdir_r();
void pdir_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
uint8_t icr_r(offs_t offset);
void icr_w(offs_t offset, uint8_t data);
// Hardware Registers
uint16_t regs_r(offs_t offset);
void regs_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void tmp68301_regs(address_map &map);
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
private:
TIMER_CALLBACK_MEMBER(timer_callback);
void update_timer(int i);
void update_ipl();
uint8_t serial_interrupt_cause(int channel);
static constexpr uint16_t EXT_IRQ0 = 1 << 0;
static constexpr uint16_t EXT_IRQ1 = 1 << 1;
static constexpr uint16_t EXT_IRQ2 = 1 << 2;
static constexpr uint16_t SERIAL_IRQ_CH0 = 1 << 4;
static constexpr uint16_t SERIAL_IRQ_CH1 = 1 << 5;
static constexpr uint16_t SERIAL_IRQ_CH2 = 1 << 6;
static constexpr uint16_t PARALLEL_IRQ = 1 << 7;
static constexpr uint16_t TIMER0_IRQ = 1 << 8;
static constexpr uint16_t TIMER1_IRQ = 1 << 9;
static constexpr uint16_t TIMER2_IRQ = 1 << 10;
devcb_read16 m_in_parallel_cb;
devcb_write16 m_out_parallel_cb;
// internal state
uint16_t m_regs[0x400];
emu_timer *m_tmp68301_timer[3]; // 3 Timers
uint8_t m_ipl; // internal interrupt level
uint16_t m_imr;
uint16_t m_ipr;
uint16_t m_iisr;
uint16_t m_scr;
uint16_t m_pdir;
uint16_t m_pdr;
uint8_t m_icr[10];
void internal_vectors_r(address_map &map);
uint8_t irq_callback(offs_t offset);
};
DECLARE_DEVICE_TYPE(TMP68301, tmp68301_device)
#endif // MAME_MACHINE_TMP68301_H

View File

@ -46,7 +46,6 @@ To Do:
#include "emu.h" #include "emu.h"
#include "realbrk.h" #include "realbrk.h"
#include "cpu/m68000/m68000.h"
#include "sound/ymopl.h" #include "sound/ymopl.h"
#include "sound/ymz280b.h" #include "sound/ymz280b.h"
#include "speaker.h" #include "speaker.h"
@ -748,29 +747,22 @@ GFXDECODE_END
Billiard Academy Real Break Billiard Academy Real Break
***************************************************************************/ ***************************************************************************/
WRITE_LINE_MEMBER(realbrk_state::vblank_irq)
{
/* VBlank is connected to INT1 (external interrupts pin 1) */
if (state)
m_maincpu->external_interrupt_1();
}
void realbrk_state::realbrk(machine_config &config) void realbrk_state::realbrk(machine_config &config)
{ {
/* basic machine hardware */ /* basic machine hardware */
TMP68301(config, m_maincpu, XTAL(32'000'000) / 2); TMP68301(config, m_maincpu, XTAL(32'000'000) / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::realbrk_mem); m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::realbrk_mem);
m_maincpu->out_parallel_callback().set(FUNC(realbrk_state::realbrk_flipscreen_w)); m_maincpu->parallel_w_cb().set(FUNC(realbrk_state::realbrk_flipscreen_w));
/* video hardware */ /* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER); SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60); m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500));
m_screen->set_size(0x140, 0xe0); m_screen->set_size(0x140, 0xe0);
m_screen->set_visarea(0, 0x140-1, 0, 0xe0-1); m_screen->set_visarea(0, 0x140-1, 0, 0xe0-1);
m_screen->set_screen_update(FUNC(realbrk_state::screen_update)); m_screen->set_screen_update(FUNC(realbrk_state::screen_update));
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
m_screen->screen_vblank().set(FUNC(realbrk_state::vblank_irq)); m_screen->screen_vblank().set_inputline(m_maincpu, 1);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_realbrk); GFXDECODE(config, m_gfxdecode, m_palette, gfx_realbrk);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x8000); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x8000);
@ -793,7 +785,7 @@ void realbrk_state::pkgnsh(machine_config &config)
realbrk(config); realbrk(config);
m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::pkgnsh_mem); m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::pkgnsh_mem);
m_maincpu->out_parallel_callback().set_nop(); m_maincpu->parallel_w_cb().set_nop();
} }
void realbrk_state::pkgnshdx(machine_config &config) void realbrk_state::pkgnshdx(machine_config &config)
@ -808,7 +800,7 @@ void realbrk_state::dai2kaku(machine_config &config)
realbrk(config); realbrk(config);
m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::dai2kaku_mem); m_maincpu->set_addrmap(AS_PROGRAM, &realbrk_state::dai2kaku_mem);
m_maincpu->out_parallel_callback().set(FUNC(realbrk_state::dai2kaku_flipscreen_w)); m_maincpu->parallel_w_cb().set(FUNC(realbrk_state::dai2kaku_flipscreen_w));
m_gfxdecode->set_info(gfx_dai2kaku); m_gfxdecode->set_info(gfx_dai2kaku);
m_screen->set_screen_update(FUNC(realbrk_state::screen_update_dai2kaku)); m_screen->set_screen_update(FUNC(realbrk_state::screen_update_dai2kaku));

View File

@ -5,7 +5,7 @@
#pragma once #pragma once
#include "machine/tmp68301.h" #include "cpu/m68000/tmp68301.h"
#include "emupal.h" #include "emupal.h"
#include "screen.h" #include "screen.h"
#include "tilemap.h" #include "tilemap.h"

View File

@ -31,11 +31,10 @@
#include "bus/nscsi/cd.h" #include "bus/nscsi/cd.h"
#include "bus/nscsi/hd.h" #include "bus/nscsi/hd.h"
#include "cpu/m6502/m3745x.h" #include "cpu/m6502/m3745x.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/tmp68301.h"
#include "imagedev/floppy.h" #include "imagedev/floppy.h"
#include "machine/bankdev.h" #include "machine/bankdev.h"
#include "machine/ncr5380.h" #include "machine/ncr5380.h"
#include "machine/tmp68301.h"
#include "machine/upd765.h" #include "machine/upd765.h"
#include "video/t6963c.h" #include "video/t6963c.h"

View File

@ -93,12 +93,11 @@ TODO:
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/tmp68301.h"
#include "machine/bankdev.h" #include "machine/bankdev.h"
#include "machine/eepromser.h" #include "machine/eepromser.h"
#include "machine/intelfsh.h" #include "machine/intelfsh.h"
#include "machine/msm6242.h" #include "machine/msm6242.h"
#include "machine/tmp68301.h"
#include "sound/okim6295.h" #include "sound/okim6295.h"
#include "sound/ymopl.h" #include "sound/ymopl.h"
#include "emupal.h" #include "emupal.h"
@ -556,20 +555,13 @@ void joystand_state::machine_reset()
{ {
} }
INTERRUPT_GEN_MEMBER(joystand_state::joystand_interrupt)
{
// VBlank is connected to INT1 (external interrupts pin 1)
m_maincpu->external_interrupt_1();
}
void joystand_state::joystand(machine_config &config) void joystand_state::joystand(machine_config &config)
{ {
// basic machine hardware // basic machine hardware
TMP68301(config, m_maincpu, XTAL(16'000'000)); TMP68301(config, m_maincpu, XTAL(16'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &joystand_state::joystand_map); m_maincpu->set_addrmap(AS_PROGRAM, &joystand_state::joystand_map);
m_maincpu->set_vblank_int("screen", FUNC(joystand_state::joystand_interrupt)); m_maincpu->parallel_r_cb().set(FUNC(joystand_state::eeprom_r));
m_maincpu->in_parallel_callback().set(FUNC(joystand_state::eeprom_r)); m_maincpu->parallel_w_cb().set(FUNC(joystand_state::eeprom_w));
m_maincpu->out_parallel_callback().set(FUNC(joystand_state::eeprom_w));
ADDRESS_MAP_BANK(config, m_cartflash_bankdev).set_map(&joystand_state::cart_map).set_options(ENDIANNESS_BIG, 16, 24, 0x800000); // TODO: address bit per carts? ADDRESS_MAP_BANK(config, m_cartflash_bankdev).set_map(&joystand_state::cart_map).set_options(ENDIANNESS_BIG, 16, 24, 0x800000); // TODO: address bit per carts?
// video hardware // video hardware
@ -578,6 +570,7 @@ void joystand_state::joystand(machine_config &config)
screen.set_screen_update(FUNC(joystand_state::screen_update)); screen.set_screen_update(FUNC(joystand_state::screen_update));
screen.set_size(0x200, 0x100); screen.set_size(0x200, 0x100);
screen.set_visarea(0x40, 0x40+0x178-1, 0x10, 0x100-1); screen.set_visarea(0x40, 0x40+0x178-1, 0x10, 0x100-1);
screen.screen_vblank().set_inputline(m_maincpu, 1);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x1000); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x1000);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_joystand); GFXDECODE(config, m_gfxdecode, m_palette, gfx_joystand);

View File

@ -12,39 +12,58 @@
- csplayh1: inputs doesn't work at all, slower than the others too. - csplayh1: inputs doesn't work at all, slower than the others too.
Probably not a DVD but CD rom game? Probably not a DVD but CD rom game?
DVD Notes: DVD Notes:
- Testing currently requires converting the data to cd mode 1
format (extracthd, rename to .iso, createcd) then change the
checksum. This will be fixed and the checksums changed to
something different again, so don't do the intermediate step
yet
- TMP68301 communicates with h8 via their respective internal serial comms - TMP68301 communicates with h8 via their respective internal serial comms
- First command is a "?P<CR>", which, according to the Pioneer V5000 protocol manual
is an Active Mode request. Manual is at: - TMP sends "?P", h8 answers "P01", TMP tends "?S", h8 answers "NG", games says the dvd drive has a problem
http://www.pioneerelectronics.com/ephox/StaticFiles/Manuals/Business/Pio%20V5000-RS232%20-%20CPM.pdf
After returning a correct status code, tmp68301 sends "FSDVD04.MPG00001<CR>" to serial, probably tries
to playback the file ...
- h8 board components: - h8 board components:
H8/3002 H8/3002
MN7100 8-bit channel data acquisition system MN7100 8-bit channel data acquisition system
Fujitsu MD0208 Fujitsu MD0208
Heatsinked chip (TBD) Heatsinked chip (TBD)
IDE and RS232c ports IDE and RS232c ports
xtal 27 MHz xtal 27 MHz, 12.288MHz
H8 ports directions:
8: fe /5 ---ooooi
9: c3 /6 --iiiioo
a: ff /8 oooooooo
b: 3f /8 iioooooo
***********************************************************************************************************/ ***********************************************************************************************************/
#include "emu.h" #include "emu.h"
#include "bus/ata/atadev.h" #include "bus/ata/atadev.h"
#include "bus/ata/atapicdr.h"
#include "bus/ata/ataintf.h"
#include "cpu/h8/h83002.h" #include "cpu/h8/h83002.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/tmp68301.h"
#include "machine/nvram.h" #include "machine/nvram.h"
#include "machine/tmp68301.h"
#include "machine/idectrl.h"
#include "machine/timer.h" #include "machine/timer.h"
#include "video/v9938.h" #include "video/v9938.h"
#include "nichisnd.h" #include "nichisnd.h"
class hrdvd_ata_controller_device : public abstract_ata_interface_device
{
public:
hrdvd_ata_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
namespace { uint16_t dma_read();
void dma_write(uint16_t data);
#define USE_H8 0 uint16_t read(offs_t offset, uint16_t mem_mask);
#define DVD_CLOCK XTAL(27'000'000) void write(offs_t offset, uint16_t data, uint16_t mem_mask);
};
DEFINE_DEVICE_TYPE(HRDVD_ATA_CONTROLLER_DEVICE, hrdvd_ata_controller_device, "hrdvd_atactrl", "High Rate DVD ATA controller device")
class csplayh5_state : public driver_device class csplayh5_state : public driver_device
{ {
@ -52,53 +71,44 @@ public:
csplayh5_state(const machine_config &mconfig, device_type type, const char *tag) : csplayh5_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag), driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_subcpu(*this, "subcpu"),
m_ata(*this, "ata"),
m_nichisnd(*this, "nichisnd"), m_nichisnd(*this, "nichisnd"),
m_key(*this, "KEY.%u", 0), m_key(*this, "KEY.%u", 0),
m_region_maincpu(*this, "maincpu") m_region_maincpu(*this, "maincpu")
{ } { }
required_device<tmp68301_device> m_maincpu; required_device<tmp68301_device> m_maincpu;
required_device<h83002_device> m_subcpu;
required_device<hrdvd_ata_controller_device> m_ata;
required_device<nichisnd_device> m_nichisnd; required_device<nichisnd_device> m_nichisnd;
required_ioport_array<5> m_key; required_ioport_array<5> m_key;
required_memory_region m_region_maincpu; required_memory_region m_region_maincpu;
uint16_t m_mux_data; uint16_t m_mux_data;
uint8_t m_p5, m_pa, m_pb;
uint16_t pb_r();
void pb_w(uint16_t data);
void pa_w(uint16_t data);
uint8_t cs0_r(offs_t offset);
void cs0_w(offs_t offset, uint8_t data);
uint8_t sec_r();
void sec_w(uint8_t data);
void sec2_w(uint8_t data);
void sec3_w(uint8_t data);
uint16_t csplayh5_mux_r(); uint16_t csplayh5_mux_r();
void csplayh5_mux_w(uint16_t data); void csplayh5_mux_w(uint16_t data);
void tmp68301_parallel_port_w(uint16_t data); void tmp68301_parallel_port_w(uint16_t data);
#if USE_H8 DECLARE_WRITE_LINE_MEMBER(ata_irq);
uint16_t test_r(); DECLARE_WRITE_LINE_MEMBER(ata_drq);
DECLARE_WRITE_LINE_MEMBER(ide_irq);
#endif
void init_csplayh1();
void init_aimode();
void init_bikiniko();
void init_csplayh5();
void init_csplayh6();
void init_csplayh7();
void init_fuudol();
void init_junai();
void init_junai2();
void init_konhaji();
void init_mjgalpri();
void init_mjmania();
void init_mogitate();
void init_nichisel();
void init_nuretemi();
void init_pokoachu();
void init_renaimj();
void init_sengomjk();
void init_thenanpa();
void init_torarech();
void init_tsuwaku();
virtual void machine_reset() override; virtual void machine_reset() override;
TIMER_DEVICE_CALLBACK_MEMBER(csplayh5_irq);
DECLARE_WRITE_LINE_MEMBER(csplayh5_vdp0_interrupt);
void general_init(int patchaddress, int patchvalue); void general_init(int patchaddress, int patchvalue);
void csplayh5(machine_config &config); void csplayh5(machine_config &config);
@ -107,9 +117,52 @@ public:
void csplayh5_sub_map(address_map &map); void csplayh5_sub_map(address_map &map);
}; };
// Some kind of device a table is sent to
uint8_t csplayh5_state::sec_r()
{
// Bit 3 means ready for upload
return 0x08;
}
void csplayh5_state::sec_w(uint8_t data)
{
// Table is 0xe00 bytes at offset 0x1000 of the h8 rom
}
void csplayh5_state::sec2_w(uint8_t data)
{
// Table is 0x1000 bytes at offset 0x1e00 of the h8 rom
}
void csplayh5_state::sec3_w(uint8_t data)
{
// Another table, partially hardcoded, partially generated
}
uint16_t csplayh5_state::pb_r()
{
return m_pb;
}
void csplayh5_state::pb_w(uint16_t data)
{
m_pb = (m_pb & 0xc0) | (data & 0x3f);
logerror("pb %02x\n", data);
}
void csplayh5_state::pa_w(uint16_t data)
{
if((m_pa & 0x80) && !(data & 0x80))
logerror("bit %c\n", data & 0x40 ? '1' : '0');
if(m_pa & 0x20)
logerror("bit reset\n");
m_pa = data;
logerror("pa %02x %c%c%c\n",
data,
data & 0x80 ? 'c' : '-',
data & 0x40 ? 'd' : '-',
data & 0x20 ? '#' : '-');
}
uint16_t csplayh5_state::csplayh5_mux_r() uint16_t csplayh5_state::csplayh5_mux_r()
{ {
@ -129,6 +182,46 @@ void csplayh5_state::csplayh5_mux_w(uint16_t data)
m_mux_data = (~data & 0x1f); m_mux_data = (~data & 0x1f);
} }
hrdvd_ata_controller_device::hrdvd_ata_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
abstract_ata_interface_device(mconfig, HRDVD_ATA_CONTROLLER_DEVICE, tag, owner, clock)
{
}
uint16_t hrdvd_ata_controller_device::dma_read()
{
write_dmack(1);
uint16_t r = swapendian_int16(read_dma());
write_dmack(0);
return r;
}
void hrdvd_ata_controller_device::dma_write(uint16_t data)
{
write_dmack(1);
write_dma(swapendian_int16(data));
write_dmack(0);
}
uint16_t hrdvd_ata_controller_device::read(offs_t offset, uint16_t mem_mask)
{
if(mem_mask == 0xffff)
return swapendian_int16(internal_read_cs0(offset * 2, 0xffff));
else if(ACCESSING_BITS_0_7)
return internal_read_cs0(offset * 2 + 1, 0xff);
else
return internal_read_cs0(offset * 2, 0xff) << 8;
}
void hrdvd_ata_controller_device::write(offs_t offset, uint16_t data, uint16_t mem_mask)
{
if(mem_mask == 0xffff)
internal_write_cs0(offset * 2, swapendian_int16(data), 0xffff);
else if(ACCESSING_BITS_0_7)
internal_write_cs0(offset * 2 + 1, data, 0xff);
else
internal_write_cs0(offset * 2, data >> 8, 0xff);
}
void csplayh5_state::csplayh5_map(address_map &map) void csplayh5_state::csplayh5_map(address_map &map)
{ {
map(0x000000, 0x03ffff).rom(); map(0x000000, 0x03ffff).rom();
@ -142,25 +235,18 @@ void csplayh5_state::csplayh5_map(address_map &map)
map(0x800000, 0xbfffff).rom().region("blit_gfx", 0); // GFX ROM routes here map(0x800000, 0xbfffff).rom().region("blit_gfx", 0); // GFX ROM routes here
map(0xc00000, 0xc7ffff).ram().share("nvram").mirror(0x380000); // work RAM map(0xe80000, 0xefffff).ram(); // work RAM
}
#if USE_H8
uint16_t csplayh5_state::test_r()
{
return machine().rand();
} }
void csplayh5_state::csplayh5_sub_map(address_map &map) void csplayh5_state::csplayh5_sub_map(address_map &map)
{ {
map(0x000000, 0x01ffff).rom(); map(0x000000, 0x01ffff).rom();
map(0x02000a, 0x02000b).r(FUNC(csplayh5_state::test_r)); map(0x020008, 0x020008).w (FUNC(csplayh5_state::sec3_w));
// map(0x020008, 0x02000f).rw("ide", FUNC(ide_controller_device::cs0_r), FUNC(ide_controller_device::cs0_w)); map(0x02000a, 0x02000a).rw(FUNC(csplayh5_state::sec_r), FUNC(csplayh5_state::sec_w));
map(0x02000e, 0x02000e).w (FUNC(csplayh5_state::sec2_w));
map(0x040018, 0x040019).r(FUNC(csplayh5_state::test_r)); map(0x040018, 0x040019).rw(m_ata, FUNC(hrdvd_ata_controller_device::dma_read), FUNC(hrdvd_ata_controller_device::dma_write));
map(0x040028, 0x04002f).rw("ide", FUNC(ide_controller_device::cs0_r), FUNC(ide_controller_device::cs0_w)); // correct? map(0x040028, 0x04002f).rw(m_ata, FUNC(hrdvd_ata_controller_device::read), FUNC(hrdvd_ata_controller_device::write));
map(0x040036, 0x040037).r(FUNC(csplayh5_state::test_r));
map(0x078000, 0x07ffff).mirror(0xf80000).ram(); //.share("nvram"); map(0x078000, 0x07ffff).mirror(0xf80000).ram(); //.share("nvram");
} }
@ -168,9 +254,11 @@ void csplayh5_state::csplayh5_sub_map(address_map &map)
void csplayh5_state::csplayh5_sub_io_map(address_map &map) void csplayh5_state::csplayh5_sub_io_map(address_map &map)
{ {
map(0x0a, 0x0b).r(FUNC(csplayh5_state::test_r)); map(h8_device::PORT_A, h8_device::PORT_A).w (FUNC(csplayh5_state::pa_w));
map(h8_device::PORT_B, h8_device::PORT_B).rw(FUNC(csplayh5_state::pb_r), FUNC(csplayh5_state::pb_w));
// map(h8_device::PORT_6, h8_device::PORT_6).noprw();
// map(h8_device::PORT_A, h8_device::PORT_A).nopw();
} }
#endif
static INPUT_PORTS_START( csplayh5 ) static INPUT_PORTS_START( csplayh5 )
@ -322,29 +410,22 @@ INPUT_PORTS_END
void csplayh5_state::machine_reset() void csplayh5_state::machine_reset()
{ {
m_p5 = 0;
m_pa = 0;
m_pb = 0;
} }
TIMER_DEVICE_CALLBACK_MEMBER(csplayh5_state::csplayh5_irq) WRITE_LINE_MEMBER(csplayh5_state::ata_irq)
{ {
int scanline = param; // logerror("ata irq %d\n", state);
if(scanline == 212*2)
m_maincpu->external_interrupt_0();
} }
WRITE_LINE_MEMBER(csplayh5_state::csplayh5_vdp0_interrupt) WRITE_LINE_MEMBER(csplayh5_state::ata_drq)
{ {
/* this is not used as the v9938 interrupt callbacks are broken // logerror("ata drq %d\n", state);
interrupts seem to be fired quite randomly */ m_pb = (m_pb & 0x7f) | (state ? 0x00 : 0x80);
} }
#if USE_H8
WRITE_LINE_MEMBER(csplayh5_state::ide_irq)
{
printf("h8 ide alive %d\n",state);
}
#endif
void csplayh5_state::tmp68301_parallel_port_w(uint16_t data) void csplayh5_state::tmp68301_parallel_port_w(uint16_t data)
{ {
/* /*
@ -352,89 +433,45 @@ void csplayh5_state::tmp68301_parallel_port_w(uint16_t data)
---- x--- enable DVD sound? Used by aimode at very least ---- x--- enable DVD sound? Used by aimode at very least
*/ */
if(data & ~0x48) logerror("tmp: %02x\n", data);
printf("%04x\n",data);
} }
static void atapi_devs(device_slot_interface &device)
{
device.option_add("cdrom", ATAPI_FIXED_CDROM);
}
void csplayh5_state::csplayh5(machine_config &config) void csplayh5_state::csplayh5(machine_config &config)
{ {
/* basic machine hardware */ /* basic machine hardware */
TMP68301(config, m_maincpu, 16000000); /* TMP68301-16 */ TMP68301(config, m_maincpu, 12.288_MHz_XTAL); /* TMP68301-16 */
m_maincpu->set_addrmap(AS_PROGRAM, &csplayh5_state::csplayh5_map); m_maincpu->set_addrmap(AS_PROGRAM, &csplayh5_state::csplayh5_map);
m_maincpu->out_parallel_callback().set(FUNC(csplayh5_state::tmp68301_parallel_port_w)); m_maincpu->parallel_w_cb().set(FUNC(csplayh5_state::tmp68301_parallel_port_w));
TIMER(config, "scantimer", 0).configure_scanline(FUNC(csplayh5_state::csplayh5_irq), "screen", 0, 1); H83002(config, m_subcpu, 27_MHz_XTAL/2);
m_subcpu->set_addrmap(AS_PROGRAM, &csplayh5_state::csplayh5_sub_map);
m_subcpu->set_addrmap(AS_IO, &csplayh5_state::csplayh5_sub_io_map);
#if USE_H8 m_maincpu->tx0_handler().set(*m_subcpu->subdevice<h8_sci_device>("sci0"), FUNC(h8_sci_device::rx_w));
h830002_device &subcpu(H83002(config, "subcpu", DVD_CLOCK/2)); /* unknown divider */ m_subcpu->subdevice<h8_sci_device>("sci0")->tx_handler().set(m_maincpu, FUNC(tmp68301_device::rx0_w));
subcpu.set_addrmap(AS_PROGRAM, &csplayh5_state::csplayh5_sub_map);
subcpu.set_addrmap(AS_IO, &csplayh5_state::csplayh5_sub_io_map);
ide_controller_device &ide(IDE_CONTROLLER(config, "ide").options(ata_devices, "hdd", nullptr, true)); // dvd HRDVD_ATA_CONTROLLER_DEVICE(config, m_ata).options(atapi_devs, "cdrom", nullptr, true); // dvd
ide.irq_handler().set(FUNC(csplayh5_state::ide_irq)); m_ata->irq_handler().set(FUNC(csplayh5_state::ata_irq));
#endif m_ata->dmarq_handler().set(FUNC(csplayh5_state::ata_drq));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */ /* video hardware */
v9958_device &v9958(V9958(config, "v9958", XTAL(21'477'272))); // typical 9958 clock, not verified v9958_device &v9958(V9958(config, "v9958", XTAL(21'477'272))); // typical 9958 clock, not verified
v9958.set_screen_ntsc("screen"); v9958.set_screen_ntsc("screen");
v9958.set_vram_size(0x20000); v9958.set_vram_size(0x20000);
v9958.int_cb().set(FUNC(csplayh5_state::csplayh5_vdp0_interrupt)); v9958.int_cb().set_inputline(m_maincpu, 0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER); SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */ /* sound hardware */
NICHISND(config, m_nichisnd, 0); NICHISND(config, m_nichisnd, 0);
} }
/***************************************************************************
Game driver(s)
***************************************************************************/
void csplayh5_state::general_init(int patchaddress, int patchvalue)
{
#if !USE_H8
uint16_t *MAINROM = (uint16_t *)m_region_maincpu->base();
/* patch DVD comms check */
MAINROM[patchaddress] = patchvalue;
#endif
//uint8_t *SNDROM = m_region_:nichisnd:audiorom->base();
/* initialize sound rom bank */
//soundbank_w(0);
/* patch sound program */
//SNDROM[0x0213] = 0x00; // DI -> NOP
}
void csplayh5_state::init_csplayh1() { general_init(0x6880/2, 0x6020); }
void csplayh5_state::init_aimode() { general_init(0x9cda/2, 0x6018); }
void csplayh5_state::init_bikiniko() { general_init(0x585c/2, 0x6018); }
void csplayh5_state::init_csplayh5() { general_init(0x4cb4/2, 0x6018); }
void csplayh5_state::init_csplayh6() { general_init(0x5976/2, 0x6018); }
void csplayh5_state::init_csplayh7() { general_init(0x7a20/2, 0x6018); }
void csplayh5_state::init_fuudol() { general_init(0x9166/2, 0x6018); }
void csplayh5_state::init_junai() { general_init(0x679c/2, 0x6018); }
void csplayh5_state::init_junai2() { general_init(0x6588/2, 0x6018); }
void csplayh5_state::init_konhaji() { general_init(0x9200/2, 0x6018); }
void csplayh5_state::init_mjgalpri() { general_init(0x5396/2, 0x6018); }
void csplayh5_state::init_mjmania() { general_init(0x6b96/2, 0x6018); }
void csplayh5_state::init_mogitate() { general_init(0x6ab4/2, 0x6018); }
void csplayh5_state::init_nichisel() { general_init(0x9cd6/2, 0x6018); }
void csplayh5_state::init_nuretemi() { general_init(0x8de2/2, 0x6018); }
void csplayh5_state::init_pokoachu() { general_init(0x7b1e/2, 0x6018); }
void csplayh5_state::init_renaimj() { general_init(0x568c/2, 0x6018); }
void csplayh5_state::init_sengomjk() { general_init(0x5226/2, 0x6018); }
void csplayh5_state::init_thenanpa() { general_init(0x69ec/2, 0x6018); }
void csplayh5_state::init_torarech() { general_init(0x9384/2, 0x6018); }
void csplayh5_state::init_tsuwaku() { general_init(0x856e/2, 0x6018); }
/* /*
* Base BIOS root (DVD board is common for all DVD games) * Base BIOS root (DVD board is common for all DVD games)
@ -463,7 +500,7 @@ ROM_START( nichidvd )
ROM_REGION16_BE( 0x400000, "blit_gfx", ROMREGION_ERASEFF ) // blitter based gfxs ROM_REGION16_BE( 0x400000, "blit_gfx", ROMREGION_ERASEFF ) // blitter based gfxs
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
ROM_END ROM_END
// TODO: this surely uses a different subboard // TODO: this surely uses a different subboard
@ -482,7 +519,7 @@ ROM_START( csplayh1 )
ROM_LOAD16_BYTE( "4.bin", 0x000001, 0x080000, CRC(2e63ee15) SHA1(78fefbc277234458212cded997d393bd8b82cf76) ) ROM_LOAD16_BYTE( "4.bin", 0x000001, 0x080000, CRC(2e63ee15) SHA1(78fefbc277234458212cded997d393bd8b82cf76) )
ROM_LOAD16_BYTE( "8.bin", 0x000000, 0x080000, CRC(a8567f1b) SHA1(2a854ef8b1988ad097bbcbeddc4b275ad738e1e1) ) ROM_LOAD16_BYTE( "8.bin", 0x000000, 0x080000, CRC(a8567f1b) SHA1(2a854ef8b1988ad097bbcbeddc4b275ad738e1e1) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "csplayh1", 0, SHA1(d6514882c2626e62c5079df9ac68ecb70fc33209) ) DISK_IMAGE_READONLY( "csplayh1", 0, SHA1(d6514882c2626e62c5079df9ac68ecb70fc33209) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
@ -506,7 +543,7 @@ ROM_START( mjgalpri )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.020", 0x000000, 0x040000, CRC(4c92a523) SHA1(51da73fdfdfccdc070fa8a13163e031438b50876) ) ROM_LOAD( "gal16v8b.020", 0x000000, 0x040000, CRC(4c92a523) SHA1(51da73fdfdfccdc070fa8a13163e031438b50876) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8001", 0, SHA1(30f356af4e08567273a88758bb0ddd3544eea228) ) DISK_IMAGE_READONLY( "nb8001", 0, SHA1(30f356af4e08567273a88758bb0ddd3544eea228) )
ROM_END ROM_END
@ -524,7 +561,7 @@ ROM_START( sengomjk )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(20791a5a) SHA1(03c38e9b8e60b0dded7504b2725210df5405110c) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(20791a5a) SHA1(03c38e9b8e60b0dded7504b2725210df5405110c) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(1ed72387) SHA1(7e2b8ce49561d6fd79dcf0d427569e5f6ef8dc67) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(1ed72387) SHA1(7e2b8ce49561d6fd79dcf0d427569e5f6ef8dc67) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8002", 0, SHA1(d3502496526e62a877f12dccc27b32ae33d3704d) ) DISK_IMAGE_READONLY( "nb8002", 0, SHA1(d3502496526e62a877f12dccc27b32ae33d3704d) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
@ -546,8 +583,9 @@ ROM_START( junai )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(4182dc30) SHA1(89601c62b74aff3d65b075d4b5cd1eb2ccf4e386) ) ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(4182dc30) SHA1(89601c62b74aff3d65b075d4b5cd1eb2ccf4e386) )
// 0x100000 - 0x3fffff empty sockets // 0x100000 - 0x3fffff empty sockets
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "junai", 0, SHA1(0491533e0ce3e4d2af608ea0b9d9646316b512bd) ) DISK_IMAGE_READONLY( "junai", 0, SHA1(0491533e0ce3e4d2af608ea0b9d9646316b512bd) )
// DISK_IMAGE_READONLY( "junai", 0, SHA1(282cc528ff175ac55f1545481ca1c40377cf9347) )
ROM_END ROM_END
ROM_START( csplayh5 ) ROM_START( csplayh5 )
@ -565,7 +603,7 @@ ROM_START( csplayh5 )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(113d7e96) SHA1(f3fb9c719544417a6a018b82f07c65bf73de21ff) ) ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(113d7e96) SHA1(f3fb9c719544417a6a018b82f07c65bf73de21ff) )
// 0x100000 - 0x3fffff empty sockets // 0x100000 - 0x3fffff empty sockets
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "csplayh5", 0, SHA1(ce4883ce1351ce5299e41bfbd9a5ae8078b82b8c) ) DISK_IMAGE_READONLY( "csplayh5", 0, SHA1(ce4883ce1351ce5299e41bfbd9a5ae8078b82b8c) )
ROM_END ROM_END
@ -584,7 +622,7 @@ ROM_START( junai2 )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(5b37c8dd) SHA1(8de5e2f92721c6679c6506850a442cafff89653f) ) ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(5b37c8dd) SHA1(8de5e2f92721c6679c6506850a442cafff89653f) )
// 0x100000 - 0x3fffff empty sockets // 0x100000 - 0x3fffff empty sockets
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "junai2", 0, SHA1(dc9633a101f20f03fd9b4414c10274d2539fb7c2) ) DISK_IMAGE_READONLY( "junai2", 0, SHA1(dc9633a101f20f03fd9b4414c10274d2539fb7c2) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
@ -606,7 +644,7 @@ ROM_START( mogitate )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(ea655990) SHA1(7f59cfab21e8858625e82a9501acc943b07f799c) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(ea655990) SHA1(7f59cfab21e8858625e82a9501acc943b07f799c) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(4c910b86) SHA1(48007f03f4e445b9de15531afe821c1b18fccae1) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(4c910b86) SHA1(48007f03f4e445b9de15531afe821c1b18fccae1) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8006", 0, SHA1(aa911e46e791d89ce4fed4a32b4b0637ba3a9920) ) DISK_IMAGE_READONLY( "nb8006", 0, SHA1(aa911e46e791d89ce4fed4a32b4b0637ba3a9920) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
@ -627,7 +665,7 @@ ROM_START( mjmania )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(37dde764) SHA1(0530b63d8e682cdf01128057fdc3a8c23262afc9) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(37dde764) SHA1(0530b63d8e682cdf01128057fdc3a8c23262afc9) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(dea4a2d2) SHA1(0118eb1330c9da8fead99f64fc015fd343fed79b) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(dea4a2d2) SHA1(0118eb1330c9da8fead99f64fc015fd343fed79b) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "mjmania", 0, SHA1(7117f2045fd04a3d8f8e06a6a98e8f585c4da301) ) DISK_IMAGE_READONLY( "mjmania", 0, SHA1(7117f2045fd04a3d8f8e06a6a98e8f585c4da301) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
@ -649,7 +687,7 @@ ROM_START( renaimj )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(6d1c9efd) SHA1(c9ea9d6e6d34db5635fc55d41e7bb54a41948d27) ) ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(6d1c9efd) SHA1(c9ea9d6e6d34db5635fc55d41e7bb54a41948d27) )
// 0x100000 - 0x3fffff empty sockets // 0x100000 - 0x3fffff empty sockets
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8008", 0, SHA1(49c92cb9b08ee7773f3d93fce0bbecc3c0ae654d) ) DISK_IMAGE_READONLY( "nb8008", 0, SHA1(49c92cb9b08ee7773f3d93fce0bbecc3c0ae654d) )
ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 )
@ -671,7 +709,7 @@ ROM_START( bikiniko )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(1e2e1cf3) SHA1(f71b5dedf4f897644d519e412651152d0d81edb8) ) ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(1e2e1cf3) SHA1(f71b5dedf4f897644d519e412651152d0d81edb8) )
// 0x100000 - 0x3fffff empty sockets // 0x100000 - 0x3fffff empty sockets
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "bikiniko", 0, SHA1(2189b676746dd848b9b5eb69f9663d6dccd63787) ) DISK_IMAGE_READONLY( "bikiniko", 0, SHA1(2189b676746dd848b9b5eb69f9663d6dccd63787) )
ROM_END ROM_END
@ -690,7 +728,7 @@ ROM_START( csplayh6 )
ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(858e0604) SHA1(64c23bc06898188798937770129697b3c4b547d6) ) ROM_LOAD16_BYTE( "4.ic41", 0x00000, 0x80000, CRC(858e0604) SHA1(64c23bc06898188798937770129697b3c4b547d6) )
// 0x100000 - 0x3fffff empty sockets // 0x100000 - 0x3fffff empty sockets
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8010", 0, SHA1(01e247fe1b86bbfe743e09a625432874f881a9a0) ) DISK_IMAGE_READONLY( "nb8010", 0, SHA1(01e247fe1b86bbfe743e09a625432874f881a9a0) )
ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 )
@ -711,7 +749,7 @@ ROM_START( thenanpa )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(ee6b88c4) SHA1(64ae66a24f1639801c7bdda7faa0d604bb97ceb1) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(ee6b88c4) SHA1(64ae66a24f1639801c7bdda7faa0d604bb97ceb1) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(ce987845) SHA1(2f7dca32a79ad6afbc55ca1d492b582f952688ff) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(ce987845) SHA1(2f7dca32a79ad6afbc55ca1d492b582f952688ff) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "thenanpa", 0, SHA1(72bf8c75189e877508c5a64d5591738d23ed7e96) ) DISK_IMAGE_READONLY( "thenanpa", 0, SHA1(72bf8c75189e877508c5a64d5591738d23ed7e96) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
@ -732,7 +770,7 @@ ROM_START( pokoachu )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(843c288e) SHA1(2741b9da83fd35c7472b8c67bc02313a1c5e4e25) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(843c288e) SHA1(2741b9da83fd35c7472b8c67bc02313a1c5e4e25) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(6920a9b8) SHA1(0a4cb9e2a0d871aed60c1293b7cac4bf79a9446c) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(6920a9b8) SHA1(0a4cb9e2a0d871aed60c1293b7cac4bf79a9446c) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8012", 0, SHA1(06c611f110377f5d02bbde1ab1d43d3623772b7b) ) DISK_IMAGE_READONLY( "nb8012", 0, SHA1(06c611f110377f5d02bbde1ab1d43d3623772b7b) )
ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 )
@ -753,7 +791,7 @@ ROM_START( csplayh7 )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(1d67ca95) SHA1(9b45045b6fa67308bade324f91c21010aa8d121e) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(1d67ca95) SHA1(9b45045b6fa67308bade324f91c21010aa8d121e) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(b4f5f990) SHA1(88cccae04f89fef43d88f4e82b65de3de946e9af) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(b4f5f990) SHA1(88cccae04f89fef43d88f4e82b65de3de946e9af) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "csplayh7", 0, SHA1(f81e772745b0c62b17d91bd294993e49fe8da4d9) ) DISK_IMAGE_READONLY( "csplayh7", 0, SHA1(f81e772745b0c62b17d91bd294993e49fe8da4d9) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
@ -774,7 +812,7 @@ ROM_START( aimode )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(4a9863cf) SHA1(ccf08befe773fb94fa78423ed19b6b8d255ca3a7) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(4a9863cf) SHA1(ccf08befe773fb94fa78423ed19b6b8d255ca3a7) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(893aac1a) SHA1(14dd3f07363858c2be3a9400793f720b1f5baf1a) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(893aac1a) SHA1(14dd3f07363858c2be3a9400793f720b1f5baf1a) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8014", 0, SHA1(c5ad9bd66f0930e1c477126301286e38f077c164) ) DISK_IMAGE_READONLY( "nb8014", 0, SHA1(c5ad9bd66f0930e1c477126301286e38f077c164) )
ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x40000, "gal", ROMREGION_ERASE00 )
@ -795,7 +833,7 @@ ROM_START( fuudol )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(5c9e8665) SHA1(2a1b040e5c72d4400d4b5c467c75ae99e9bb01e2) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(5c9e8665) SHA1(2a1b040e5c72d4400d4b5c467c75ae99e9bb01e2) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(fdd79d8f) SHA1(f8bb82afaa28affb04b83270eb407129f1c7e611) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(fdd79d8f) SHA1(f8bb82afaa28affb04b83270eb407129f1c7e611) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "fuudol", 0, SHA1(fabab43543ed14da4fe7c63a2a2cc4e68936938a) ) DISK_IMAGE_READONLY( "fuudol", 0, SHA1(fabab43543ed14da4fe7c63a2a2cc4e68936938a) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
@ -816,7 +854,7 @@ ROM_START( nuretemi )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(5c7af7f6) SHA1(78e58e3a81a6585c2c61f0026b7dc73a72c0d862) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(5c7af7f6) SHA1(78e58e3a81a6585c2c61f0026b7dc73a72c0d862) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(335b6388) SHA1(c5427b42af011b5a5026d905b1740684b9f6f953) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(335b6388) SHA1(c5427b42af011b5a5026d905b1740684b9f6f953) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8016", 0, SHA1(607d9f390265da3f0c50753d0ea32257b12e8c08) ) DISK_IMAGE_READONLY( "nb8016", 0, SHA1(607d9f390265da3f0c50753d0ea32257b12e8c08) )
ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x1000, "gal", ROMREGION_ERASE00 )
@ -837,7 +875,7 @@ ROM_START( tsuwaku )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(00657ca3) SHA1(a02bb8a177f3915ddf0bf97fd69426a3a28061a5) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(00657ca3) SHA1(a02bb8a177f3915ddf0bf97fd69426a3a28061a5) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(edf56c94) SHA1(76d95a45aced3ad8bfe8a561f355731f4f99603e) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(edf56c94) SHA1(76d95a45aced3ad8bfe8a561f355731f4f99603e) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8017", 0, SHA1(6c86985574d53f990c4eec573d7fa84782cb9c4c) ) DISK_IMAGE_READONLY( "nb8017", 0, SHA1(6c86985574d53f990c4eec573d7fa84782cb9c4c) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
@ -858,7 +896,7 @@ ROM_START( torarech )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(cbbbab5c) SHA1(ab8ae64b1f2acfab55ba7cbb173f3036a46001e6) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(cbbbab5c) SHA1(ab8ae64b1f2acfab55ba7cbb173f3036a46001e6) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(18412fd8) SHA1(6907ce2739549519e1f3dcee2186f6add219a3c2) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(18412fd8) SHA1(6907ce2739549519e1f3dcee2186f6add219a3c2) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8018", 0, SHA1(cf8758bb2caaba6377b354694123ddec71a4f8e1) ) DISK_IMAGE_READONLY( "nb8018", 0, SHA1(cf8758bb2caaba6377b354694123ddec71a4f8e1) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
@ -879,7 +917,7 @@ ROM_START( nichisel )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(5ab63481) SHA1(fc81fbdd1df496813fc0d80bcab6d0434b75d311) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(5ab63481) SHA1(fc81fbdd1df496813fc0d80bcab6d0434b75d311) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(50085861) SHA1(b8f99a66a743c9bf66ef307fe4b581586e293fe5) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(50085861) SHA1(b8f99a66a743c9bf66ef307fe4b581586e293fe5) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb80sp", 0, SHA1(48eb9f8adba0ea5f59cfcbdee61c29b4af84ac97) ) DISK_IMAGE_READONLY( "nb80sp", 0, SHA1(48eb9f8adba0ea5f59cfcbdee61c29b4af84ac97) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
@ -900,15 +938,13 @@ ROM_START( konhaji )
ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(88f31da7) SHA1(dc76532fa3261b3b238a42e2ca8f270f2b2ea1fa) ) ROM_LOAD16_BYTE( "3.ic40", 0x000001, 0x080000, CRC(88f31da7) SHA1(dc76532fa3261b3b238a42e2ca8f270f2b2ea1fa) )
ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(35893109) SHA1(6a55bd147a75913af59bc355abf010e1b75063bf) ) ROM_LOAD16_BYTE( "4.ic41", 0x000000, 0x080000, CRC(35893109) SHA1(6a55bd147a75913af59bc355abf010e1b75063bf) )
DISK_REGION( "ide:0:hdd:image" ) DISK_REGION( "ata:0:cdrom" )
DISK_IMAGE_READONLY( "nb8019", 0, SHA1(f59ac1587009d7d15618549dc60cbd24c263a95f) ) DISK_IMAGE_READONLY( "nb8019", 0, SHA1(f59ac1587009d7d15618549dc60cbd24c263a95f) )
ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 ) ROM_REGION( 0x040000, "gal", ROMREGION_ERASE00 )
ROM_LOAD( "gal16v8b.bin", 0x000000, 0x000117, CRC(9f0dec43) SHA1(d836e564da496c3049e16f025daf362cced413d4) ) ROM_LOAD( "gal16v8b.bin", 0x000000, 0x000117, CRC(9f0dec43) SHA1(d836e564da496c3049e16f025daf362cced413d4) )
ROM_END ROM_END
} // anonymous namespace
/*************************************************************************** /***************************************************************************
@ -917,35 +953,35 @@ ROM_END
***************************************************************************/ ***************************************************************************/
// 1995 // 1995
GAME( 1995, csplayh1, 0, csplayh5, csplayh5, csplayh5_state, init_csplayh1, ROT0, "Sphinx/AV Japan/Astro System Japan", "Super CD Dai8dan Mahjong Hanafuda Cosplay Tengoku (Japan)", MACHINE_NOT_WORKING ) GAME( 1995, csplayh1, 0, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Sphinx/AV Japan/Astro System Japan", "Super CD Dai8dan Mahjong Hanafuda Cosplay Tengoku (Japan)", MACHINE_NOT_WORKING )
GAME( 1998, nichidvd, 0, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu", "Nichibutsu High Rate DVD BIOS", MACHINE_IS_BIOS_ROOT ) GAME( 1998, nichidvd, 0, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu", "Nichibutsu High Rate DVD BIOS", MACHINE_IS_BIOS_ROOT )
// 1998 // 1998
/* 01 */ GAME( 1998, mjgalpri, nichidvd, csplayh5, csplayh5, csplayh5_state, init_mjgalpri, ROT0, "Nichibutsu/Just&Just", "Mahjong Gal-pri - World Gal-con Grandprix (Japan)", MACHINE_NOT_WORKING ) /* 01 */ GAME( 1998, mjgalpri, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/Just&Just", "Mahjong Gal-pri - World Gal-con Grandprix (Japan)", MACHINE_NOT_WORKING )
/* 02 */ GAME( 1998, sengomjk, nichidvd, csplayh5, csplayh5, csplayh5_state, init_sengomjk, ROT0, "Nichibutsu/Just&Just", "Sengoku Mahjong Kurenai Otome-tai (Japan)", MACHINE_NOT_WORKING ) /* 02 */ GAME( 1998, sengomjk, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/Just&Just", "Sengoku Mahjong Kurenai Otome-tai (Japan)", MACHINE_NOT_WORKING )
/* 03 */ GAME( 1998, junai, nichidvd, csplayh5, csplayh5, csplayh5_state, init_junai, ROT0, "Nichibutsu/eic", "Junai - Manatsu no First Kiss (Japan)", MACHINE_NOT_WORKING ) /* 03 */ GAME( 1998, junai, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/eic", "Junai - Manatsu no First Kiss (Japan)", MACHINE_NOT_WORKING )
/* 04 */ GAME( 1998, csplayh5, nichidvd, csplayh5, csplayh5, csplayh5_state, init_csplayh5, ROT0, "Nichibutsu", "Mahjong Hanafuda Cosplay Tengoku 5 (Japan)", MACHINE_NOT_WORKING ) /* 04 */ GAME( 1998, csplayh5, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu", "Mahjong Hanafuda Cosplay Tengoku 5 (Japan)", MACHINE_NOT_WORKING )
/* 05 */ GAME( 1998, junai2, nichidvd, csplayh5, csplayh5, csplayh5_state, init_junai2, ROT0, "Nichibutsu/eic", "Junai 2 - White Love Story (Japan)", MACHINE_NOT_WORKING ) /* 05 */ GAME( 1998, junai2, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/eic", "Junai 2 - White Love Story (Japan)", MACHINE_NOT_WORKING )
/* 06 */ GAME( 1998, mogitate, nichidvd, csplayh5, csplayh5, csplayh5_state, init_mogitate, ROT0, "Nichibutsu/Just&Just/NVS/Astro System/AV Japan", "Mahjong Mogitate (Japan)", MACHINE_NOT_WORKING ) /* 06 */ GAME( 1998, mogitate, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/Just&Just/NVS/Astro System/AV Japan", "Mahjong Mogitate (Japan)", MACHINE_NOT_WORKING )
// 1999 // 1999
/* 07 */ GAME( 1999, mjmania, nichidvd, csplayh5, csplayh5, csplayh5_state, init_mjmania, ROT0, "Sphinx/Just&Just", "Mahjong Mania - Kairakukan e Youkoso (Japan)", MACHINE_NOT_WORKING ) /* 07 */ GAME( 1999, mjmania, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Sphinx/Just&Just", "Mahjong Mania - Kairakukan e Youkoso (Japan)", MACHINE_NOT_WORKING )
/* 08 */ GAME( 1999, renaimj, nichidvd, csplayh5, csplayh5, csplayh5_state, init_renaimj, ROT0, "Nichibutsu/eic", "Renai Mahjong Idol Gakuen (Japan)", MACHINE_NOT_WORKING ) /* 08 */ GAME( 1999, renaimj, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/eic", "Renai Mahjong Idol Gakuen (Japan)", MACHINE_NOT_WORKING )
/* 09 */ GAME( 1999, bikiniko, nichidvd, csplayh5, csplayh5, csplayh5_state, init_bikiniko, ROT0, "Nichibutsu/eic", "BiKiNikko - Okinawa de Ippai Shichaimashita (Japan)", MACHINE_NOT_WORKING ) /* 09 */ GAME( 1999, bikiniko, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/eic", "BiKiNikko - Okinawa de Ippai Shichaimashita (Japan)", MACHINE_NOT_WORKING )
/* 10 */ GAME( 1999, csplayh6, nichidvd, csplayh5, csplayh5, csplayh5_state, init_csplayh6, ROT0, "Nichibutsu/eic", "Mahjong Hanafuda Cosplay Tengoku 6 - Junai-hen (Japan)", MACHINE_NOT_WORKING ) /* 10 */ GAME( 1999, csplayh6, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/eic", "Mahjong Hanafuda Cosplay Tengoku 6 - Junai-hen (Japan)", MACHINE_NOT_WORKING )
/* 11 */ GAME( 1999, thenanpa, nichidvd, csplayh5, csplayh5, csplayh5_state, init_thenanpa, ROT0, "Nichibutsu/Love Factory/eic", "The Nanpa (Japan)", MACHINE_NOT_WORKING ) /* 11 */ GAME( 1999, thenanpa, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/Love Factory/eic", "The Nanpa (Japan)", MACHINE_NOT_WORKING )
/* 12 */ GAME( 1999, pokoachu, nichidvd, csplayh5, csplayh5, csplayh5_state, init_pokoachu, ROT0, "Nichibutsu/eic", "PokoaPoka Onsen de CHU - Bijin 3 Shimai ni Kiotsukete! (Japan)", MACHINE_NOT_WORKING ) /* 12 */ GAME( 1999, pokoachu, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/eic", "PokoaPoka Onsen de CHU - Bijin 3 Shimai ni Kiotsukete! (Japan)", MACHINE_NOT_WORKING )
/* 13 */ GAME( 1999, csplayh7, nichidvd, csplayh5, csplayh5, csplayh5_state, init_csplayh7, ROT0, "Nichibutsu/eic", "Cosplay Tengoku 7 - Super Kogal Ranking (Japan)", MACHINE_NOT_WORKING ) /* 13 */ GAME( 1999, csplayh7, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/eic", "Cosplay Tengoku 7 - Super Kogal Ranking (Japan)", MACHINE_NOT_WORKING )
/* 14 */ GAME( 1999, aimode, nichidvd, csplayh5, csplayh5, csplayh5_state, init_aimode, ROT0, "Nichibutsu/eic", "Ai-mode - Pet Shiiku (Japan)", MACHINE_NOT_WORKING ) /* 14 */ GAME( 1999, aimode, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/eic", "Ai-mode - Pet Shiiku (Japan)", MACHINE_NOT_WORKING )
// 2000 // 2000
/* 15 */ GAME( 2000, fuudol, nichidvd, csplayh5, csplayh5, csplayh5_state, init_fuudol, ROT0, "Nichibutsu/eic", "Fuudol (Japan)", MACHINE_NOT_WORKING ) /* 15 */ GAME( 2000, fuudol, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/eic", "Fuudol (Japan)", MACHINE_NOT_WORKING )
/* 16 */ GAME( 2000, nuretemi, nichidvd, csplayh5, csplayh5, csplayh5_state, init_nuretemi, ROT0, "Nichibutsu/Love Factory", "Nurete Mitaino... - Net Idol Hen (Japan)", MACHINE_NOT_WORKING ) /* 16 */ GAME( 2000, nuretemi, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/Love Factory", "Nurete Mitaino... - Net Idol Hen (Japan)", MACHINE_NOT_WORKING )
/* 17 */ GAME( 2000, tsuwaku, nichidvd, csplayh5, csplayh5, csplayh5_state, init_tsuwaku, ROT0, "Nichibutsu/Love Factory/Just&Just", "Tsuugakuro no Yuuwaku (Japan)", MACHINE_NOT_WORKING ) /* 17 */ GAME( 2000, tsuwaku, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/Love Factory/Just&Just", "Tsuugakuro no Yuuwaku (Japan)", MACHINE_NOT_WORKING )
/* 18 */ GAME( 2000, torarech, nichidvd, csplayh5, csplayh5, csplayh5_state, init_torarech, ROT0, "Nichibutsu/Love Factory/M Friend", "Torarechattano - AV Kantoku Hen (Japan)", MACHINE_NOT_WORKING ) /* 18 */ GAME( 2000, torarech, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/Love Factory/M Friend", "Torarechattano - AV Kantoku Hen (Japan)", MACHINE_NOT_WORKING )
/* sp */ GAME( 2000, nichisel, nichidvd, csplayh5, csplayh5, csplayh5_state, init_nichisel, ROT0, "Nichibutsu", "DVD Select (Japan)", MACHINE_NOT_WORKING ) /* sp */ GAME( 2000, nichisel, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu", "DVD Select (Japan)", MACHINE_NOT_WORKING )
// 2001 // 2001
/* 19 */ GAME( 2001, konhaji, nichidvd, csplayh5, csplayh5, csplayh5_state, init_konhaji, ROT0, "Nichibutsu/Love Factory", "Konnano Hajimete! (Japan)", MACHINE_NOT_WORKING ) /* 19 */ GAME( 2001, konhaji, nichidvd, csplayh5, csplayh5, csplayh5_state, empty_init, ROT0, "Nichibutsu/Love Factory", "Konnano Hajimete! (Japan)", MACHINE_NOT_WORKING )
/* 20 */ // Uwasa no Deaikei Site : Nichibutsu/Love Factory/eic /* 20 */ // Uwasa no Deaikei Site : Nichibutsu/Love Factory/eic

View File

@ -38,9 +38,7 @@ Memo:
#include "emu.h" #include "emu.h"
#include "niyanpai.h" #include "niyanpai.h"
#include "cpu/m68000/m68000.h"
#include "machine/nvram.h" #include "machine/nvram.h"
#include "machine/tmp68301.h"
@ -676,19 +674,12 @@ static INPUT_PORTS_START( zokumahj ) // I don't have manual for this game.
INPUT_PORTS_END INPUT_PORTS_END
WRITE_LINE_MEMBER(niyanpai_state::vblank_irq)
{
if (state)
m_maincpu->external_interrupt_0();
}
void niyanpai_state::niyanpai(machine_config &config) void niyanpai_state::niyanpai(machine_config &config)
{ {
/* basic machine hardware */ /* basic machine hardware */
TMP68301(config, m_maincpu, 12288000/2); /* TMP68301, 6.144 MHz */ TMP68301(config, m_maincpu, 12288000/2); /* TMP68301, 6.144 MHz */
m_maincpu->set_addrmap(AS_PROGRAM, &niyanpai_state::niyanpai_map); m_maincpu->set_addrmap(AS_PROGRAM, &niyanpai_state::niyanpai_map);
m_maincpu->out_parallel_callback().set(FUNC(niyanpai_state::tmp68301_parallel_port_w)); m_maincpu->parallel_w_cb().set(FUNC(niyanpai_state::tmp68301_parallel_port_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@ -700,7 +691,7 @@ void niyanpai_state::niyanpai(machine_config &config)
m_screen->set_visarea(0, 640-1, 0, 240-1); m_screen->set_visarea(0, 640-1, 0, 240-1);
m_screen->set_screen_update(FUNC(niyanpai_state::screen_update)); m_screen->set_screen_update(FUNC(niyanpai_state::screen_update));
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
m_screen->screen_vblank().set(FUNC(niyanpai_state::vblank_irq)); m_screen->screen_vblank().set_inputline(m_maincpu, 0);
PALETTE(config, m_palette).set_entries(256*3); PALETTE(config, m_palette).set_entries(256*3);

View File

@ -1,7 +1,7 @@
// license:BSD-3-Clause // license:BSD-3-Clause
// copyright-holders:Takahiro Nogi // copyright-holders:Takahiro Nogi
#include "machine/tmp68301.h" #include "cpu/m68000/tmp68301.h"
#include "screen.h" #include "screen.h"
#include "nichisnd.h" #include "nichisnd.h"
#include "nb1413m3.h" #include "nb1413m3.h"

View File

@ -8,7 +8,7 @@
#include "emu.h" #include "emu.h"
#include "machine/tmp68301.h" #include "cpu/m68000/tmp68301.h"
#include "machine/nvram.h" #include "machine/nvram.h"
#include "sound/x1_010.h" #include "sound/x1_010.h"
#include "video/x1_001.h" #include "video/x1_001.h"
@ -71,12 +71,6 @@ u16 kiwame_state::input_r(offs_t offset)
return 0xffff; return 0xffff;
} }
WRITE_LINE_MEMBER(kiwame_state::kiwame_vblank)
{
if (state)
m_maincpu->external_interrupt_0();
}
u32 kiwame_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) u32 kiwame_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
bitmap.fill(0x1f0, cliprect); bitmap.fill(0x1f0, cliprect);
@ -275,7 +269,7 @@ void kiwame_state::kiwame(machine_config &config)
/* basic machine hardware */ /* basic machine hardware */
TMP68301(config, m_maincpu, 16000000); TMP68301(config, m_maincpu, 16000000);
m_maincpu->set_addrmap(AS_PROGRAM, &kiwame_state::kiwame_map); m_maincpu->set_addrmap(AS_PROGRAM, &kiwame_state::kiwame_map);
m_maincpu->out_parallel_callback().set(FUNC(kiwame_state::row_select_w)); m_maincpu->parallel_w_cb().set(FUNC(kiwame_state::row_select_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 2x LH52B256D-70LL + battery (possibly only lower bytes battery-backed) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 2x LH52B256D-70LL + battery (possibly only lower bytes battery-backed)
@ -292,7 +286,7 @@ void kiwame_state::kiwame(machine_config &config)
screen.set_size(64*8, 32*8); screen.set_size(64*8, 32*8);
screen.set_visarea(0*8, 56*8-1, 1*8, 31*8-1); screen.set_visarea(0*8, 56*8-1, 1*8, 31*8-1);
screen.set_screen_update(FUNC(kiwame_state::screen_update)); screen.set_screen_update(FUNC(kiwame_state::screen_update));
screen.screen_vblank().set(FUNC(kiwame_state::kiwame_vblank)); screen.screen_vblank().set_inputline(m_maincpu, 0);
screen.set_palette("palette"); screen.set_palette("palette");
PALETTE(config, "palette").set_format(palette_device::xRGB_555, 512); // sprites only PALETTE(config, "palette").set_format(palette_device::xRGB_555, 512); // sprites only

View File

@ -49,7 +49,6 @@ P0-145-1 2002 Trophy Hunting - Bear & Moose (test) Sammy
TODO: TODO:
- Proper emulation of the TMP68301 CPU, in a core file.
- Proper emulation of the ColdFire CPU, in a core file. - Proper emulation of the ColdFire CPU, in a core file.
- improvements to Flip screen / Zooming support. (Flip Screen is often done with 'negative zoom value') - improvements to Flip screen / Zooming support. (Flip Screen is often done with 'negative zoom value')
- Fix some graphics imperfections (e.g. color depth selection, "tilemap" sprites) [all done? - NS] - Fix some graphics imperfections (e.g. color depth selection, "tilemap" sprites) [all done? - NS]
@ -2271,22 +2270,10 @@ GFXDECODE_END
***************************************************************************/ ***************************************************************************/
INTERRUPT_GEN_MEMBER(seta2_state::seta2_interrupt)
{
/* VBlank is connected to INT0 (external interrupts pin 0) */
downcast<tmp68301_device &>(*m_maincpu).external_interrupt_0();
}
INTERRUPT_GEN_MEMBER(seta2_state::samshoot_interrupt)
{
downcast<tmp68301_device &>(*m_maincpu).external_interrupt_2(); // to do: hook up x1-10 interrupts
}
void seta2_state::seta2(machine_config &config) void seta2_state::seta2(machine_config &config)
{ {
TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // Verified on some PCBs TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // Verified on some PCBs
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::mj4simai_map); m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::mj4simai_map);
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::seta2_interrupt));
WATCHDOG_TIMER(config, "watchdog"); WATCHDOG_TIMER(config, "watchdog");
@ -2298,6 +2285,7 @@ void seta2_state::seta2(machine_config &config)
m_screen->set_visarea(0x00, 0x180-1, 0x00, 0xf0-1); m_screen->set_visarea(0x00, 0x180-1, 0x00, 0xf0-1);
m_screen->set_screen_update(FUNC(seta2_state::screen_update)); m_screen->set_screen_update(FUNC(seta2_state::screen_update));
m_screen->screen_vblank().set(FUNC(seta2_state::screen_vblank)); m_screen->screen_vblank().set(FUNC(seta2_state::screen_vblank));
m_screen->screen_vblank().append_inputline(m_maincpu, 0);
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
//m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE); //m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE);
@ -2333,8 +2321,8 @@ void seta2_state::gundamex(machine_config &config)
seta2_32m(config); seta2_32m(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::gundamex_map); m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::gundamex_map);
downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_r)); downcast<tmp68301_device &>(*m_maincpu).parallel_r_cb().set(FUNC(seta2_state::gundamex_eeprom_r));
downcast<tmp68301_device &>(*m_maincpu).out_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_w)); downcast<tmp68301_device &>(*m_maincpu).parallel_w_cb().set(FUNC(seta2_state::gundamex_eeprom_w));
EEPROM_93C46_16BIT(config, "eeprom"); EEPROM_93C46_16BIT(config, "eeprom");
@ -2413,7 +2401,7 @@ void seta2_state::reelquak(machine_config &config)
seta2(config); seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::reelquak_map); m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::reelquak_map);
downcast<tmp68301_device &>(*m_maincpu).out_parallel_callback().set(FUNC(seta2_state::reelquak_leds_w)); downcast<tmp68301_device &>(*m_maincpu).parallel_w_cb().set(FUNC(seta2_state::reelquak_leds_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
TICKET_DISPENSER(config, m_dispenser, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW); TICKET_DISPENSER(config, m_dispenser, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
@ -2426,9 +2414,10 @@ void seta2_state::samshoot(machine_config &config)
{ {
seta2(config); seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::samshoot_map); m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::samshoot_map);
m_maincpu->set_periodic_int(FUNC(seta2_state::samshoot_interrupt), attotime::from_hz(60)); m_screen->screen_vblank().set(FUNC(seta2_state::screen_vblank));
m_screen->screen_vblank().append_inputline(m_maincpu, 2);
downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set_ioport("DSW2"); downcast<tmp68301_device &>(*m_maincpu).parallel_w_cb().set_ioport("DSW2");
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@ -2457,7 +2446,7 @@ void seta2_state::telpacfl(machine_config &config)
seta2(config); seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::telpacfl_map); m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::telpacfl_map);
downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set_ioport("KNOB"); downcast<tmp68301_device &>(*m_maincpu).parallel_r_cb().set_ioport("KNOB");
EEPROM_93C46_16BIT(config, "eeprom"); // not hooked up, seems unused EEPROM_93C46_16BIT(config, "eeprom"); // not hooked up, seems unused
@ -2562,7 +2551,6 @@ void seta2_state::namcostr(machine_config &config)
{ {
TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !! TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::namcostr_map); m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::namcostr_map);
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::seta2_interrupt));
// does this have a ticket dispenser? // does this have a ticket dispenser?
// video hardware // video hardware
@ -2573,6 +2561,7 @@ void seta2_state::namcostr(machine_config &config)
m_screen->set_visarea(0x40, 0x1c0-1, 0x00, 0xf0-1); m_screen->set_visarea(0x40, 0x1c0-1, 0x00, 0xf0-1);
m_screen->set_screen_update(FUNC(seta2_state::screen_update)); m_screen->set_screen_update(FUNC(seta2_state::screen_update));
m_screen->screen_vblank().set(FUNC(seta2_state::screen_vblank)); m_screen->screen_vblank().set(FUNC(seta2_state::screen_vblank));
m_screen->screen_vblank().append_inputline(m_maincpu, 0);
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_seta2); GFXDECODE(config, m_gfxdecode, m_palette, gfx_seta2);

View File

@ -6,7 +6,7 @@
#pragma once #pragma once
#include "machine/tmp68301.h" #include "cpu/m68000/tmp68301.h"
#include "machine/eepromser.h" #include "machine/eepromser.h"
#include "machine/intelfsh.h" #include "machine/intelfsh.h"
#include "machine/ticket.h" #include "machine/ticket.h"
@ -99,9 +99,6 @@ protected:
void sound_bank_w(offs_t offset, uint8_t data); void sound_bank_w(offs_t offset, uint8_t data);
INTERRUPT_GEN_MEMBER(seta2_interrupt);
INTERRUPT_GEN_MEMBER(samshoot_interrupt);
void ablastb_map(address_map &map); void ablastb_map(address_map &map);
void grdians_map(address_map &map); void grdians_map(address_map &map);
void gundamex_map(address_map &map); void gundamex_map(address_map &map);

View File

@ -781,7 +781,7 @@ TIMER_CALLBACK_MEMBER(seta2_state::raster_timer_done)
{ {
if (m_rasterenabled & 1) if (m_rasterenabled & 1)
{ {
tmp68301->external_interrupt_1(); tmp68301->set_input_line(1, HOLD_LINE);
logerror("external int (vpos is %d)\n", m_screen->vpos()); logerror("external int (vpos is %d)\n", m_screen->vpos());
m_screen->update_partial(m_screen->vpos() - 1); m_screen->update_partial(m_screen->vpos() - 1);
} }

View File

@ -40,10 +40,9 @@
#include "emu.h" #include "emu.h"
#include "speaker.h" #include "speaker.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/tmp68301.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/te7750.h" #include "machine/te7750.h"
#include "machine/tmp68301.h"
#include "sound/ymopn.h" #include "sound/ymopn.h"
#include "taitosnd.h" #include "taitosnd.h"

View File

@ -33,7 +33,7 @@
#include "emu.h" #include "emu.h"
#include "machine/tmp68301.h" #include "cpu/m68000/tmp68301.h"
#include "video/t6963c.h" #include "video/t6963c.h"
namespace { namespace {