mirror of
https://github.com/holub/mame
synced 2025-04-17 22:13:04 +03:00
Merge branch 'master' of https://github.com/mamedev/mame
Some checks are pending
CI (Windows) / build-windows (gcc, gcc, g++, mame, mame) (push) Waiting to run
Some checks are pending
CI (Windows) / build-windows (gcc, gcc, g++, mame, mame) (push) Waiting to run
This commit is contained in:
commit
139386c476
21
3rdparty/ymfm/src/ymfm.h
vendored
21
3rdparty/ymfm/src/ymfm.h
vendored
@ -42,6 +42,7 @@
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -109,17 +110,6 @@ inline int32_t clamp(int32_t value, int32_t minval, int32_t maxval)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// array_size - return the size of an array
|
||||
//-------------------------------------------------
|
||||
|
||||
template<typename ArrayType, int ArraySize>
|
||||
constexpr uint32_t array_size(ArrayType (&array)[ArraySize])
|
||||
{
|
||||
return ArraySize;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// count_leading_zeros - return the number of
|
||||
// leading zeros in a 32-bit value; CPU-optimized
|
||||
@ -254,7 +244,8 @@ inline int16_t roundtrip_fp(int32_t value)
|
||||
|
||||
// apply the shift back and forth to zero out bits that are lost
|
||||
exponent -= 1;
|
||||
return (value >> exponent) << exponent;
|
||||
int32_t mask = (1 << exponent) - 1;
|
||||
return value & ~mask;
|
||||
}
|
||||
|
||||
|
||||
@ -350,7 +341,7 @@ public:
|
||||
{
|
||||
// create file
|
||||
char name[20];
|
||||
sprintf(name, "wavlog-%02d.wav", m_index);
|
||||
snprintf(&name[0], sizeof(name), "wavlog-%02d.wav", m_index);
|
||||
FILE *out = fopen(name, "wb");
|
||||
|
||||
// make the wav file header
|
||||
@ -483,6 +474,8 @@ public:
|
||||
class ymfm_engine_callbacks
|
||||
{
|
||||
public:
|
||||
virtual ~ymfm_engine_callbacks() = default;
|
||||
|
||||
// timer callback; called by the interface when a timer fires
|
||||
virtual void engine_timer_expired(uint32_t tnum) = 0;
|
||||
|
||||
@ -504,6 +497,8 @@ class ymfm_interface
|
||||
template<typename RegisterType> friend class fm_engine_base;
|
||||
|
||||
public:
|
||||
virtual ~ymfm_interface() = default;
|
||||
|
||||
// the following functions must be implemented by any derived classes; the
|
||||
// default implementations are sufficient for some minimal operation, but will
|
||||
// likely need to be overridden to integrate with the outside world; they are
|
||||
|
4
3rdparty/ymfm/src/ymfm_fm.h
vendored
4
3rdparty/ymfm/src/ymfm_fm.h
vendored
@ -267,7 +267,7 @@ public:
|
||||
// assign operators
|
||||
void assign(uint32_t index, fm_operator<RegisterType> *op)
|
||||
{
|
||||
assert(index < array_size(m_op));
|
||||
assert(index < m_op.size());
|
||||
m_op[index] = op;
|
||||
if (op != nullptr)
|
||||
op->set_choffs(m_choffs);
|
||||
@ -330,7 +330,7 @@ private:
|
||||
uint32_t m_choffs; // channel offset in registers
|
||||
int16_t m_feedback[2]; // feedback memory for operator 1
|
||||
mutable int16_t m_feedback_in; // next input value for op 1 feedback (set in output)
|
||||
fm_operator<RegisterType> *m_op[4]; // up to 4 operators
|
||||
std::array<fm_operator<RegisterType> *, 4> m_op; // up to 4 operators
|
||||
RegisterType &m_regs; // direct reference to registers
|
||||
fm_engine_base<RegisterType> &m_owner; // reference to the owning engine
|
||||
};
|
||||
|
14
3rdparty/ymfm/src/ymfm_fm.ipp
vendored
14
3rdparty/ymfm/src/ymfm_fm.ipp
vendored
@ -839,12 +839,12 @@ void fm_channel<RegisterType>::save_restore(ymfm_saved_state &state)
|
||||
template<class RegisterType>
|
||||
void fm_channel<RegisterType>::keyonoff(uint32_t states, keyon_type type, uint32_t chnum)
|
||||
{
|
||||
for (uint32_t opnum = 0; opnum < array_size(m_op); opnum++)
|
||||
for (uint32_t opnum = 0; opnum < m_op.size(); opnum++)
|
||||
if (m_op[opnum] != nullptr)
|
||||
m_op[opnum]->keyonoff(bitfield(states, opnum), type);
|
||||
|
||||
if (debug::LOG_KEYON_EVENTS && ((debug::GLOBAL_FM_CHANNEL_MASK >> chnum) & 1) != 0)
|
||||
for (uint32_t opnum = 0; opnum < array_size(m_op); opnum++)
|
||||
for (uint32_t opnum = 0; opnum < m_op.size(); opnum++)
|
||||
if (m_op[opnum] != nullptr)
|
||||
debug::log_keyon("%c%s\n", bitfield(states, opnum) ? '+' : '-', m_regs.log_keyon(m_choffs, m_op[opnum]->opoffs()).c_str());
|
||||
}
|
||||
@ -860,7 +860,7 @@ bool fm_channel<RegisterType>::prepare()
|
||||
uint32_t active_mask = 0;
|
||||
|
||||
// prepare all operators and determine if they are active
|
||||
for (uint32_t opnum = 0; opnum < array_size(m_op); opnum++)
|
||||
for (uint32_t opnum = 0; opnum < m_op.size(); opnum++)
|
||||
if (m_op[opnum] != nullptr)
|
||||
if (m_op[opnum]->prepare())
|
||||
active_mask |= 1 << opnum;
|
||||
@ -880,7 +880,7 @@ void fm_channel<RegisterType>::clock(uint32_t env_counter, int32_t lfo_raw_pm)
|
||||
m_feedback[0] = m_feedback[1];
|
||||
m_feedback[1] = m_feedback_in;
|
||||
|
||||
for (uint32_t opnum = 0; opnum < array_size(m_op); opnum++)
|
||||
for (uint32_t opnum = 0; opnum < m_op.size(); opnum++)
|
||||
if (m_op[opnum] != nullptr)
|
||||
m_op[opnum]->clock(env_counter, lfo_raw_pm);
|
||||
|
||||
@ -888,7 +888,7 @@ void fm_channel<RegisterType>::clock(uint32_t env_counter, int32_t lfo_raw_pm)
|
||||
useful temporary code for envelope debugging
|
||||
if (m_choffs == 0x101)
|
||||
{
|
||||
for (uint32_t opnum = 0; opnum < array_size(m_op); opnum++)
|
||||
for (uint32_t opnum = 0; opnum < m_op.size(); opnum++)
|
||||
{
|
||||
auto &op = *m_op[((opnum & 1) << 1) | ((opnum >> 1) & 1)];
|
||||
printf(" %c%03X%c%c ",
|
||||
@ -1504,6 +1504,8 @@ void fm_engine_base<RegisterType>::update_timer(uint32_t tnum, uint32_t enable,
|
||||
template<class RegisterType>
|
||||
void fm_engine_base<RegisterType>::engine_timer_expired(uint32_t tnum)
|
||||
{
|
||||
assert(tnum == 0 || tnum == 1);
|
||||
|
||||
// update status
|
||||
if (tnum == 0 && m_regs.enable_timer_a())
|
||||
set_reset_status(STATUS_TIMERA, 0);
|
||||
@ -1515,7 +1517,7 @@ void fm_engine_base<RegisterType>::engine_timer_expired(uint32_t tnum)
|
||||
for (uint32_t chnum = 0; chnum < CHANNELS; chnum++)
|
||||
if (bitfield(RegisterType::CSM_TRIGGER_MASK, chnum))
|
||||
{
|
||||
m_channel[chnum]->keyonoff(1, KEYON_CSM, chnum);
|
||||
m_channel[chnum]->keyonoff(0xf, KEYON_CSM, chnum);
|
||||
m_modified_channels |= 1 << chnum;
|
||||
}
|
||||
|
||||
|
1
3rdparty/ymfm/src/ymfm_misc.h
vendored
1
3rdparty/ymfm/src/ymfm_misc.h
vendored
@ -90,5 +90,4 @@ protected:
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif // YMFM_MISC_H
|
||||
|
44
3rdparty/ymfm/src/ymfm_opl.cpp
vendored
44
3rdparty/ymfm/src/ymfm_opl.cpp
vendored
@ -386,9 +386,9 @@ std::string opl_registers_base<Revision>::log_keyon(uint32_t choffs, uint32_t op
|
||||
uint32_t opnum = (opoffs & 31) - 2 * ((opoffs & 31) / 8) + 18 * bitfield(opoffs, 8);
|
||||
|
||||
char buffer[256];
|
||||
char *end = &buffer[0];
|
||||
int end = 0;
|
||||
|
||||
end += sprintf(end, "%2u.%02u freq=%04X fb=%u alg=%X mul=%X tl=%02X ksr=%u ns=%u ksl=%u adr=%X/%X/%X sl=%X sus=%u",
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, "%2u.%02u freq=%04X fb=%u alg=%X mul=%X tl=%02X ksr=%u ns=%u ksl=%u adr=%X/%X/%X sl=%X sus=%u",
|
||||
chnum, opnum,
|
||||
ch_block_freq(choffs),
|
||||
ch_feedback(choffs),
|
||||
@ -405,25 +405,25 @@ std::string opl_registers_base<Revision>::log_keyon(uint32_t choffs, uint32_t op
|
||||
op_eg_sustain(opoffs));
|
||||
|
||||
if (OUTPUTS > 1)
|
||||
end += sprintf(end, " out=%c%c%c%c",
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " out=%c%c%c%c",
|
||||
ch_output_0(choffs) ? 'L' : '-',
|
||||
ch_output_1(choffs) ? 'R' : '-',
|
||||
ch_output_2(choffs) ? '0' : '-',
|
||||
ch_output_3(choffs) ? '1' : '-');
|
||||
if (op_lfo_am_enable(opoffs) != 0)
|
||||
end += sprintf(end, " am=%u", lfo_am_depth());
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " am=%u", lfo_am_depth());
|
||||
if (op_lfo_pm_enable(opoffs) != 0)
|
||||
end += sprintf(end, " pm=%u", lfo_pm_depth());
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " pm=%u", lfo_pm_depth());
|
||||
if (waveform_enable() && op_waveform(opoffs) != 0)
|
||||
end += sprintf(end, " wf=%u", op_waveform(opoffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " wf=%u", op_waveform(opoffs));
|
||||
if (is_rhythm(choffs))
|
||||
end += sprintf(end, " rhy=1");
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " rhy=1");
|
||||
if (DYNAMIC_OPS)
|
||||
{
|
||||
operator_mapping map;
|
||||
operator_map(map);
|
||||
if (bitfield(map.chan[chnum], 16, 8) != 0xff)
|
||||
end += sprintf(end, " 4op");
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " 4op");
|
||||
}
|
||||
|
||||
return buffer;
|
||||
@ -685,9 +685,9 @@ std::string opll_registers::log_keyon(uint32_t choffs, uint32_t opoffs)
|
||||
uint32_t opnum = opoffs;
|
||||
|
||||
char buffer[256];
|
||||
char *end = &buffer[0];
|
||||
int end = 0;
|
||||
|
||||
end += sprintf(end, "%u.%02u freq=%04X inst=%X fb=%u mul=%X",
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, "%u.%02u freq=%04X inst=%X fb=%u mul=%X",
|
||||
chnum, opnum,
|
||||
ch_block_freq(choffs),
|
||||
ch_instrument(choffs),
|
||||
@ -695,11 +695,11 @@ std::string opll_registers::log_keyon(uint32_t choffs, uint32_t opoffs)
|
||||
op_multiple(opoffs));
|
||||
|
||||
if (bitfield(opoffs, 0) == 1 || (is_rhythm(choffs) && choffs >= 6))
|
||||
end += sprintf(end, " vol=%X", op_volume(opoffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " vol=%X", op_volume(opoffs));
|
||||
else
|
||||
end += sprintf(end, " tl=%02X", ch_total_level(choffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " tl=%02X", ch_total_level(choffs));
|
||||
|
||||
end += sprintf(end, " ksr=%u ksl=%u adr=%X/%X/%X sl=%X sus=%u/%u",
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " ksr=%u ksl=%u adr=%X/%X/%X sl=%X sus=%u/%u",
|
||||
op_ksr(opoffs),
|
||||
op_ksl(opoffs),
|
||||
op_attack_rate(opoffs),
|
||||
@ -710,13 +710,13 @@ std::string opll_registers::log_keyon(uint32_t choffs, uint32_t opoffs)
|
||||
ch_sustain(choffs));
|
||||
|
||||
if (op_lfo_am_enable(opoffs))
|
||||
end += sprintf(end, " am=1");
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " am=1");
|
||||
if (op_lfo_pm_enable(opoffs))
|
||||
end += sprintf(end, " pm=1");
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " pm=1");
|
||||
if (op_waveform(opoffs) != 0)
|
||||
end += sprintf(end, " wf=1");
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " wf=1");
|
||||
if (is_rhythm(choffs))
|
||||
end += sprintf(end, " rhy=1");
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " rhy=1");
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@ -1715,9 +1715,15 @@ uint8_t ymf278b::read_status()
|
||||
|
||||
uint8_t ymf278b::read_data_pcm()
|
||||
{
|
||||
// write to FM
|
||||
// read from PCM
|
||||
if (bitfield(m_address, 9) != 0)
|
||||
return m_pcm.read(m_address & 0xff);
|
||||
{
|
||||
uint8_t result = m_pcm.read(m_address & 0xff);
|
||||
if ((m_address & 0xff) == 0x02)
|
||||
result |= 0x20;
|
||||
|
||||
return result;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
20
3rdparty/ymfm/src/ymfm_opm.cpp
vendored
20
3rdparty/ymfm/src/ymfm_opm.cpp
vendored
@ -60,17 +60,17 @@ opm_registers::opm_registers() :
|
||||
{
|
||||
// waveform 0 is a sawtooth
|
||||
uint8_t am = index ^ 0xff;
|
||||
int8_t pm = int8_t(index);
|
||||
uint8_t pm = index;
|
||||
m_lfo_waveform[0][index] = am | (pm << 8);
|
||||
|
||||
// waveform 1 is a square wave
|
||||
am = bitfield(index, 7) ? 0 : 0xff;
|
||||
pm = int8_t(am ^ 0x80);
|
||||
pm = am ^ 0x80;
|
||||
m_lfo_waveform[1][index] = am | (pm << 8);
|
||||
|
||||
// waveform 2 is a triangle wave
|
||||
am = bitfield(index, 7) ? (index << 1) : ((index ^ 0xff) << 1);
|
||||
pm = int8_t(bitfield(index, 6) ? am : ~am);
|
||||
pm = bitfield(index, 6) ? am : ~am;
|
||||
m_lfo_waveform[2][index] = am | (pm << 8);
|
||||
|
||||
// waveform 3 is noise; it is filled in dynamically
|
||||
@ -330,7 +330,7 @@ uint32_t opm_registers::compute_phase_step(uint32_t choffs, uint32_t opoffs, opd
|
||||
if (pm_sensitivity < 6)
|
||||
delta += lfo_raw_pm >> (6 - pm_sensitivity);
|
||||
else
|
||||
delta += lfo_raw_pm << (pm_sensitivity - 5);
|
||||
delta += uint32_t(lfo_raw_pm) << (pm_sensitivity - 5);
|
||||
}
|
||||
|
||||
// apply delta and convert to a frequency number
|
||||
@ -354,9 +354,9 @@ std::string opm_registers::log_keyon(uint32_t choffs, uint32_t opoffs)
|
||||
uint32_t opnum = opoffs;
|
||||
|
||||
char buffer[256];
|
||||
char *end = &buffer[0];
|
||||
int end = 0;
|
||||
|
||||
end += sprintf(end, "%u.%02u freq=%04X dt2=%u dt=%u fb=%u alg=%X mul=%X tl=%02X ksr=%u adsr=%02X/%02X/%02X/%X sl=%X out=%c%c",
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, "%u.%02u freq=%04X dt2=%u dt=%u fb=%u alg=%X mul=%X tl=%02X ksr=%u adsr=%02X/%02X/%02X/%X sl=%X out=%c%c",
|
||||
chnum, opnum,
|
||||
ch_block_freq(choffs),
|
||||
op_detune2(opoffs),
|
||||
@ -376,14 +376,14 @@ std::string opm_registers::log_keyon(uint32_t choffs, uint32_t opoffs)
|
||||
|
||||
bool am = (lfo_am_depth() != 0 && ch_lfo_am_sens(choffs) != 0 && op_lfo_am_enable(opoffs) != 0);
|
||||
if (am)
|
||||
end += sprintf(end, " am=%u/%02X", ch_lfo_am_sens(choffs), lfo_am_depth());
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " am=%u/%02X", ch_lfo_am_sens(choffs), lfo_am_depth());
|
||||
bool pm = (lfo_pm_depth() != 0 && ch_lfo_pm_sens(choffs) != 0);
|
||||
if (pm)
|
||||
end += sprintf(end, " pm=%u/%02X", ch_lfo_pm_sens(choffs), lfo_pm_depth());
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " pm=%u/%02X", ch_lfo_pm_sens(choffs), lfo_pm_depth());
|
||||
if (am || pm)
|
||||
end += sprintf(end, " lfo=%02X/%c", lfo_rate(), "WQTN"[lfo_waveform()]);
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " lfo=%02X/%c", lfo_rate(), "WQTN"[lfo_waveform()]);
|
||||
if (noise_enable() && opoffs == 31)
|
||||
end += sprintf(end, " noise=1");
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " noise=1");
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
29
3rdparty/ymfm/src/ymfm_opn.cpp
vendored
29
3rdparty/ymfm/src/ymfm_opn.cpp
vendored
@ -143,26 +143,23 @@ bool opn_registers_base<IsOpnA>::write(uint16_t index, uint8_t data, uint32_t &c
|
||||
assert(index < REGISTERS);
|
||||
|
||||
// writes in the 0xa0-af/0x1a0-af region are handled as latched pairs
|
||||
// borrow unused registers 0xb8-bf/0x1b8-bf as temporary holding locations
|
||||
// borrow unused registers 0xb8-bf as temporary holding locations
|
||||
if ((index & 0xf0) == 0xa0)
|
||||
{
|
||||
if (bitfield(index, 0, 2) == 3)
|
||||
return false;
|
||||
|
||||
uint32_t latchindex = 0xb8 | bitfield(index, 3);
|
||||
if (IsOpnA)
|
||||
latchindex |= index & 0x100;
|
||||
|
||||
// writes to the upper half just latch (only low 6 bits matter)
|
||||
if (bitfield(index, 2))
|
||||
m_regdata[latchindex] = data | 0x80;
|
||||
m_regdata[latchindex] = data & 0x3f;
|
||||
|
||||
// writes to the lower half only commit if the latch is there
|
||||
else if (bitfield(m_regdata[latchindex], 7))
|
||||
// writes to the lower half also apply said latch
|
||||
else
|
||||
{
|
||||
m_regdata[index] = data;
|
||||
m_regdata[index | 4] = m_regdata[latchindex] & 0x3f;
|
||||
m_regdata[latchindex] = 0;
|
||||
m_regdata[index | 4] = m_regdata[latchindex];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -409,9 +406,9 @@ std::string opn_registers_base<IsOpnA>::log_keyon(uint32_t choffs, uint32_t opof
|
||||
}
|
||||
|
||||
char buffer[256];
|
||||
char *end = &buffer[0];
|
||||
int end = 0;
|
||||
|
||||
end += sprintf(end, "%u.%02u freq=%04X dt=%u fb=%u alg=%X mul=%X tl=%02X ksr=%u adsr=%02X/%02X/%02X/%X sl=%X",
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, "%u.%02u freq=%04X dt=%u fb=%u alg=%X mul=%X tl=%02X ksr=%u adsr=%02X/%02X/%02X/%X sl=%X",
|
||||
chnum, opnum,
|
||||
block_freq,
|
||||
op_detune(opoffs),
|
||||
@ -427,21 +424,21 @@ std::string opn_registers_base<IsOpnA>::log_keyon(uint32_t choffs, uint32_t opof
|
||||
op_sustain_level(opoffs));
|
||||
|
||||
if (OUTPUTS > 1)
|
||||
end += sprintf(end, " out=%c%c",
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " out=%c%c",
|
||||
ch_output_0(choffs) ? 'L' : '-',
|
||||
ch_output_1(choffs) ? 'R' : '-');
|
||||
if (op_ssg_eg_enable(opoffs))
|
||||
end += sprintf(end, " ssg=%X", op_ssg_eg_mode(opoffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " ssg=%X", op_ssg_eg_mode(opoffs));
|
||||
bool am = (op_lfo_am_enable(opoffs) && ch_lfo_am_sens(choffs) != 0);
|
||||
if (am)
|
||||
end += sprintf(end, " am=%u", ch_lfo_am_sens(choffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " am=%u", ch_lfo_am_sens(choffs));
|
||||
bool pm = (ch_lfo_pm_sens(choffs) != 0);
|
||||
if (pm)
|
||||
end += sprintf(end, " pm=%u", ch_lfo_pm_sens(choffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " pm=%u", ch_lfo_pm_sens(choffs));
|
||||
if (am || pm)
|
||||
end += sprintf(end, " lfo=%02X", lfo_rate());
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " lfo=%02X", lfo_rate());
|
||||
if (multi_freq() && choffs == 2)
|
||||
end += sprintf(end, " multi=1");
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " multi=1");
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
2
3rdparty/ymfm/src/ymfm_opn.h
vendored
2
3rdparty/ymfm/src/ymfm_opn.h
vendored
@ -793,7 +793,7 @@ public:
|
||||
ymf276(ymfm_interface &intf) : ym2612(intf) { }
|
||||
|
||||
// generate one sample of sound
|
||||
void generate(output_data *output, uint32_t numsamples);
|
||||
void generate(output_data *output, uint32_t numsamples = 1);
|
||||
};
|
||||
|
||||
}
|
||||
|
12
3rdparty/ymfm/src/ymfm_opq.cpp
vendored
12
3rdparty/ymfm/src/ymfm_opq.cpp
vendored
@ -339,9 +339,9 @@ std::string opq_registers::log_keyon(uint32_t choffs, uint32_t opoffs)
|
||||
uint32_t opnum = opoffs;
|
||||
|
||||
char buffer[256];
|
||||
char *end = &buffer[0];
|
||||
int end = 0;
|
||||
|
||||
end += sprintf(end, "%u.%02u freq=%04X dt=%+2d fb=%u alg=%X mul=%X tl=%02X ksr=%u adsr=%02X/%02X/%02X/%X sl=%X out=%c%c",
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, "%u.%02u freq=%04X dt=%+2d fb=%u alg=%X mul=%X tl=%02X ksr=%u adsr=%02X/%02X/%02X/%X sl=%X out=%c%c",
|
||||
chnum, opnum,
|
||||
(opoffs & 1) ? ch_block_freq_24(choffs) : ch_block_freq_13(choffs),
|
||||
int32_t(op_detune(opoffs)) - 0x20,
|
||||
@ -360,14 +360,14 @@ std::string opq_registers::log_keyon(uint32_t choffs, uint32_t opoffs)
|
||||
|
||||
bool am = (lfo_enable() && op_lfo_am_enable(opoffs) && ch_lfo_am_sens(choffs) != 0);
|
||||
if (am)
|
||||
end += sprintf(end, " am=%u", ch_lfo_am_sens(choffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " am=%u", ch_lfo_am_sens(choffs));
|
||||
bool pm = (lfo_enable() && ch_lfo_pm_sens(choffs) != 0);
|
||||
if (pm)
|
||||
end += sprintf(end, " pm=%u", ch_lfo_pm_sens(choffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " pm=%u", ch_lfo_pm_sens(choffs));
|
||||
if (am || pm)
|
||||
end += sprintf(end, " lfo=%02X", lfo_rate());
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " lfo=%02X", lfo_rate());
|
||||
if (ch_reverb(choffs))
|
||||
end += sprintf(end, " reverb");
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " reverb");
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
290
3rdparty/ymfm/src/ymfm_opx.h
vendored
Normal file
290
3rdparty/ymfm/src/ymfm_opx.h
vendored
Normal file
@ -0,0 +1,290 @@
|
||||
// BSD 3-Clause License
|
||||
//
|
||||
// Copyright (c) 2021, Aaron Giles
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are met:
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// 3. Neither the name of the copyright holder nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#ifndef YMFM_OPX_H
|
||||
#define YMFM_OPX_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ymfm.h"
|
||||
#include "ymfm_fm.h"
|
||||
|
||||
namespace ymfm
|
||||
{
|
||||
|
||||
//*********************************************************
|
||||
// REGISTER CLASSES
|
||||
//*********************************************************
|
||||
|
||||
// ======================> opx_registers
|
||||
|
||||
//
|
||||
// OPX register map:
|
||||
//
|
||||
// System-wide registers:
|
||||
//
|
||||
// Per-channel registers (channel in address bits 0-2)
|
||||
//
|
||||
// Per-operator registers (4 banks):
|
||||
// 00-0F x------- Enable
|
||||
// -xxxx--- EXT out
|
||||
// -------x Key on
|
||||
// 10-1F xxxxxxxx LFO frequency
|
||||
// 20-2F xx------ AM sensitivity (0-3)
|
||||
// --xxx--- PM sensitivity (0-7)
|
||||
// ------xx LFO waveform (0=disable, 1=saw, 2=
|
||||
// 30-3F -xxx---- Detune (0-7)
|
||||
// ----xxxx Multiple (0-15)
|
||||
// 40-4F -xxxxxxx Total level (0-127)
|
||||
// 50-5F xxx----- Key scale (0-7)
|
||||
// ---xxxxx Attack rate (0-31)
|
||||
// 60-6F ---xxxxx Decay rate (0-31)
|
||||
// 70-7F ---xxxxx Sustain rate (0-31)
|
||||
// 80-8F xxxx---- Sustain level (0-15)
|
||||
// ----xxxx Release rate (0-15)
|
||||
// 90-9F xxxxxxxx Frequency number (low 8 bits)
|
||||
// A0-AF xxxx---- Block (0-15)
|
||||
// ----xxxx Frequency number (high 4 bits)
|
||||
// B0-BF x------- Acc on
|
||||
// -xxx---- Feedback level (0-7)
|
||||
// -----xxx Waveform (0-7, 7=PCM)
|
||||
// C0-CF ----xxxx Algorithm (0-15)
|
||||
// D0-DF xxxx---- CH0 level (0-15)
|
||||
// ----xxxx CH1 level (0-15)
|
||||
// E0-EF xxxx---- CH2 level (0-15)
|
||||
// ----xxxx CH3 level (0-15)
|
||||
//
|
||||
|
||||
class opx_registers : public fm_registers_base
|
||||
{
|
||||
// LFO waveforms are 256 entries long
|
||||
static constexpr uint32_t LFO_WAVEFORM_LENGTH = 256;
|
||||
|
||||
public:
|
||||
// constants
|
||||
static constexpr uint32_t OUTPUTS = 8;
|
||||
static constexpr uint32_t CHANNELS = 24;
|
||||
static constexpr uint32_t ALL_CHANNELS = (1 << CHANNELS) - 1;
|
||||
static constexpr uint32_t OPERATORS = CHANNELS * 2;
|
||||
static constexpr uint32_t WAVEFORMS = 8;
|
||||
static constexpr uint32_t REGISTERS = 0x800;
|
||||
static constexpr uint32_t DEFAULT_PRESCALE = 8;
|
||||
static constexpr uint32_t EG_CLOCK_DIVIDER = 2;
|
||||
static constexpr uint32_t CSM_TRIGGER_MASK = ALL_CHANNELS;
|
||||
static constexpr uint32_t REG_MODE = 0x14;
|
||||
static constexpr uint8_t STATUS_TIMERA = 0x01;
|
||||
static constexpr uint8_t STATUS_TIMERB = 0x02;
|
||||
static constexpr uint8_t STATUS_BUSY = 0x80;
|
||||
static constexpr uint8_t STATUS_IRQ = 0;
|
||||
|
||||
// constructor
|
||||
opx_registers();
|
||||
|
||||
// reset to initial state
|
||||
void reset();
|
||||
|
||||
// save/restore
|
||||
void save_restore(ymfm_saved_state &state);
|
||||
|
||||
// map channel number to register offset
|
||||
static constexpr uint32_t channel_offset(uint32_t chnum)
|
||||
{
|
||||
assert(chnum < CHANNELS);
|
||||
return chnum;
|
||||
}
|
||||
|
||||
// map operator number to register offset
|
||||
static constexpr uint32_t operator_offset(uint32_t opnum)
|
||||
{
|
||||
assert(opnum < OPERATORS);
|
||||
return opnum;
|
||||
}
|
||||
|
||||
// return an array of operator indices for each channel
|
||||
struct operator_mapping { uint32_t chan[CHANNELS]; };
|
||||
void operator_map(operator_mapping &dest) const;
|
||||
|
||||
// handle writes to the register array
|
||||
bool write(uint16_t index, uint8_t data, uint32_t &chan, uint32_t &opmask);
|
||||
|
||||
// clock the noise and LFO, if present, returning LFO PM value
|
||||
int32_t clock_noise_and_lfo();
|
||||
|
||||
// return the AM offset from LFO for the given channel
|
||||
uint32_t lfo_am_offset(uint32_t choffs) const;
|
||||
|
||||
// return the current noise state, gated by the noise clock
|
||||
uint32_t noise_state() const { return m_noise_state; }
|
||||
|
||||
// caching helpers
|
||||
void cache_operator_data(uint32_t choffs, uint32_t opoffs, opdata_cache &cache);
|
||||
|
||||
// compute the phase step, given a PM value
|
||||
uint32_t compute_phase_step(uint32_t choffs, uint32_t opoffs, opdata_cache const &cache, int32_t lfo_raw_pm);
|
||||
|
||||
// log a key-on event
|
||||
std::string log_keyon(uint32_t choffs, uint32_t opoffs);
|
||||
|
||||
// system-wide registers
|
||||
uint32_t noise_frequency() const { return byte(0x0f, 0, 5); }
|
||||
uint32_t noise_enable() const { return byte(0x0f, 7, 1); }
|
||||
uint32_t timer_a_value() const { return word(0x10, 0, 8, 0x11, 0, 2); }
|
||||
uint32_t timer_b_value() const { return byte(0x12, 0, 8); }
|
||||
uint32_t csm() const { return byte(0x14, 7, 1); }
|
||||
uint32_t reset_timer_b() const { return byte(0x14, 5, 1); }
|
||||
uint32_t reset_timer_a() const { return byte(0x14, 4, 1); }
|
||||
uint32_t enable_timer_b() const { return byte(0x14, 3, 1); }
|
||||
uint32_t enable_timer_a() const { return byte(0x14, 2, 1); }
|
||||
uint32_t load_timer_b() const { return byte(0x14, 1, 1); }
|
||||
uint32_t load_timer_a() const { return byte(0x14, 0, 1); }
|
||||
uint32_t lfo2_pm_depth() const { return byte(0x148, 0, 7); } // fake
|
||||
uint32_t lfo2_rate() const { return byte(0x16, 0, 8); }
|
||||
uint32_t lfo2_am_depth() const { return byte(0x17, 0, 7); }
|
||||
uint32_t lfo_rate() const { return byte(0x18, 0, 8); }
|
||||
uint32_t lfo_am_depth() const { return byte(0x19, 0, 7); }
|
||||
uint32_t lfo_pm_depth() const { return byte(0x149, 0, 7); } // fake
|
||||
uint32_t output_bits() const { return byte(0x1b, 6, 2); }
|
||||
uint32_t lfo2_sync() const { return byte(0x1b, 5, 1); }
|
||||
uint32_t lfo_sync() const { return byte(0x1b, 4, 1); }
|
||||
uint32_t lfo2_waveform() const { return byte(0x1b, 2, 2); }
|
||||
uint32_t lfo_waveform() const { return byte(0x1b, 0, 2); }
|
||||
|
||||
// per-channel registers
|
||||
uint32_t ch_volume(uint32_t choffs) const { return byte(0x00, 0, 8, choffs); }
|
||||
uint32_t ch_output_any(uint32_t choffs) const { return byte(0x20, 7, 1, choffs) | byte(0x30, 0, 1, choffs); }
|
||||
uint32_t ch_output_0(uint32_t choffs) const { return byte(0x30, 0, 1, choffs); }
|
||||
uint32_t ch_output_1(uint32_t choffs) const { return byte(0x20, 7, 1, choffs) | byte(0x30, 0, 1, choffs); }
|
||||
uint32_t ch_output_2(uint32_t choffs) const { return 0; }
|
||||
uint32_t ch_output_3(uint32_t choffs) const { return 0; }
|
||||
uint32_t ch_key_on(uint32_t choffs) const { return byte(0x20, 6, 1, choffs); }
|
||||
uint32_t ch_feedback(uint32_t choffs) const { return byte(0x20, 3, 3, choffs); }
|
||||
uint32_t ch_algorithm(uint32_t choffs) const { return byte(0x20, 0, 3, choffs); }
|
||||
uint32_t ch_block_freq(uint32_t choffs) const { return word(0x28, 0, 7, 0x30, 2, 6, choffs); }
|
||||
uint32_t ch_lfo_pm_sens(uint32_t choffs) const { return byte(0x38, 4, 3, choffs); }
|
||||
uint32_t ch_lfo_am_sens(uint32_t choffs) const { return byte(0x38, 0, 2, choffs); }
|
||||
uint32_t ch_lfo2_pm_sens(uint32_t choffs) const { return byte(0x140, 4, 3, choffs); } // fake
|
||||
uint32_t ch_lfo2_am_sens(uint32_t choffs) const { return byte(0x140, 0, 2, choffs); } // fake
|
||||
|
||||
// per-operator registers
|
||||
uint32_t op_detune(uint32_t opoffs) const { return byte(0x40, 4, 3, opoffs); }
|
||||
uint32_t op_multiple(uint32_t opoffs) const { return byte(0x40, 0, 4, opoffs); }
|
||||
uint32_t op_fix_range(uint32_t opoffs) const { return byte(0x40, 4, 3, opoffs); }
|
||||
uint32_t op_fix_frequency(uint32_t opoffs) const { return byte(0x40, 0, 4, opoffs); }
|
||||
uint32_t op_waveform(uint32_t opoffs) const { return byte(0x100, 4, 3, opoffs); } // fake
|
||||
uint32_t op_fine(uint32_t opoffs) const { return byte(0x100, 0, 4, opoffs); } // fake
|
||||
uint32_t op_total_level(uint32_t opoffs) const { return byte(0x60, 0, 7, opoffs); }
|
||||
uint32_t op_ksr(uint32_t opoffs) const { return byte(0x80, 6, 2, opoffs); }
|
||||
uint32_t op_fix_mode(uint32_t opoffs) const { return byte(0x80, 5, 1, opoffs); }
|
||||
uint32_t op_attack_rate(uint32_t opoffs) const { return byte(0x80, 0, 5, opoffs); }
|
||||
uint32_t op_lfo_am_enable(uint32_t opoffs) const { return byte(0xa0, 7, 1, opoffs); }
|
||||
uint32_t op_decay_rate(uint32_t opoffs) const { return byte(0xa0, 0, 5, opoffs); }
|
||||
uint32_t op_detune2(uint32_t opoffs) const { return byte(0xc0, 6, 2, opoffs); }
|
||||
uint32_t op_sustain_rate(uint32_t opoffs) const { return byte(0xc0, 0, 5, opoffs); }
|
||||
uint32_t op_eg_shift(uint32_t opoffs) const { return byte(0x120, 6, 2, opoffs); } // fake
|
||||
uint32_t op_reverb_rate(uint32_t opoffs) const { return byte(0x120, 0, 3, opoffs); } // fake
|
||||
uint32_t op_sustain_level(uint32_t opoffs) const { return byte(0xe0, 4, 4, opoffs); }
|
||||
uint32_t op_release_rate(uint32_t opoffs) const { return byte(0xe0, 0, 4, opoffs); }
|
||||
|
||||
protected:
|
||||
// return a bitfield extracted from a byte
|
||||
uint32_t byte(uint32_t offset, uint32_t start, uint32_t count, uint32_t extra_offset = 0) const
|
||||
{
|
||||
return bitfield(m_regdata[offset + extra_offset], start, count);
|
||||
}
|
||||
|
||||
// return a bitfield extracted from a pair of bytes, MSBs listed first
|
||||
uint32_t word(uint32_t offset1, uint32_t start1, uint32_t count1, uint32_t offset2, uint32_t start2, uint32_t count2, uint32_t extra_offset = 0) const
|
||||
{
|
||||
return (byte(offset1, start1, count1, extra_offset) << count2) | byte(offset2, start2, count2, extra_offset);
|
||||
}
|
||||
|
||||
// internal state
|
||||
uint32_t m_lfo_counter[2]; // LFO counter
|
||||
uint32_t m_noise_lfsr; // noise LFSR state
|
||||
uint8_t m_noise_counter; // noise counter
|
||||
uint8_t m_noise_state; // latched noise state
|
||||
uint8_t m_noise_lfo; // latched LFO noise value
|
||||
uint8_t m_lfo_am[2]; // current LFO AM value
|
||||
uint8_t m_regdata[REGISTERS]; // register data
|
||||
uint16_t m_phase_substep[OPERATORS]; // phase substep for fixed frequency
|
||||
int16_t m_lfo_waveform[4][LFO_WAVEFORM_LENGTH]; // LFO waveforms; AM in low 8, PM in upper 8
|
||||
uint16_t m_waveform[WAVEFORMS][WAVEFORM_LENGTH]; // waveforms
|
||||
};
|
||||
|
||||
|
||||
|
||||
//*********************************************************
|
||||
// IMPLEMENTATION CLASSES
|
||||
//*********************************************************
|
||||
|
||||
// ======================> ymf271
|
||||
|
||||
class ymf271
|
||||
{
|
||||
public:
|
||||
using fm_engine = fm_engine_base<opx_registers>;
|
||||
static constexpr uint32_t OUTPUTS = fm_engine::OUTPUTS;
|
||||
using output_data = fm_engine::output_data;
|
||||
|
||||
// constructor
|
||||
ymf271(ymfm_interface &intf);
|
||||
|
||||
// reset
|
||||
void reset();
|
||||
|
||||
// save/restore
|
||||
void save_restore(ymfm_saved_state &state);
|
||||
|
||||
// pass-through helpers
|
||||
uint32_t sample_rate(uint32_t input_clock) const { return m_fm.sample_rate(input_clock); }
|
||||
void invalidate_caches() { m_fm.invalidate_caches(); }
|
||||
|
||||
// read access
|
||||
uint8_t read_status();
|
||||
uint8_t read(uint32_t offset);
|
||||
|
||||
// write access
|
||||
void write_address(uint8_t data);
|
||||
void write_data(uint8_t data);
|
||||
void write(uint32_t offset, uint8_t data);
|
||||
|
||||
// generate one sample of sound
|
||||
void generate(output_data *output, uint32_t numsamples = 1);
|
||||
|
||||
protected:
|
||||
// internal state
|
||||
uint8_t m_address; // address register
|
||||
fm_engine m_fm; // core FM engine
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif // YMFM_OPX_H
|
36
3rdparty/ymfm/src/ymfm_opz.cpp
vendored
36
3rdparty/ymfm/src/ymfm_opz.cpp
vendored
@ -129,17 +129,17 @@ opz_registers::opz_registers() :
|
||||
{
|
||||
// waveform 0 is a sawtooth
|
||||
uint8_t am = index ^ 0xff;
|
||||
int8_t pm = int8_t(index);
|
||||
uint8_t pm = index;
|
||||
m_lfo_waveform[0][index] = am | (pm << 8);
|
||||
|
||||
// waveform 1 is a square wave
|
||||
am = bitfield(index, 7) ? 0 : 0xff;
|
||||
pm = int8_t(am ^ 0x80);
|
||||
pm = am ^ 0x80;
|
||||
m_lfo_waveform[1][index] = am | (pm << 8);
|
||||
|
||||
// waveform 2 is a triangle wave
|
||||
am = bitfield(index, 7) ? (index << 1) : ((index ^ 0xff) << 1);
|
||||
pm = int8_t(bitfield(index, 6) ? am : ~am);
|
||||
pm = bitfield(index, 6) ? am : ~am;
|
||||
m_lfo_waveform[2][index] = am | (pm << 8);
|
||||
|
||||
// waveform 3 is noise; it is filled in dynamically
|
||||
@ -555,16 +555,16 @@ std::string opz_registers::log_keyon(uint32_t choffs, uint32_t opoffs)
|
||||
uint32_t opnum = opoffs;
|
||||
|
||||
char buffer[256];
|
||||
char *end = &buffer[0];
|
||||
int end = 0;
|
||||
|
||||
end += sprintf(end, "%u.%02u", chnum, opnum);
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, "%u.%02u", chnum, opnum);
|
||||
|
||||
if (op_fix_mode(opoffs))
|
||||
end += sprintf(end, " fixfreq=%X fine=%X shift=%X", op_fix_frequency(opoffs), op_fine(opoffs), op_fix_range(opoffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " fixfreq=%X fine=%X shift=%X", op_fix_frequency(opoffs), op_fine(opoffs), op_fix_range(opoffs));
|
||||
else
|
||||
end += sprintf(end, " freq=%04X dt2=%u fine=%X", ch_block_freq(choffs), op_detune2(opoffs), op_fine(opoffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " freq=%04X dt2=%u fine=%X", ch_block_freq(choffs), op_detune2(opoffs), op_fine(opoffs));
|
||||
|
||||
end += sprintf(end, " dt=%u fb=%u alg=%X mul=%X tl=%02X ksr=%u adsr=%02X/%02X/%02X/%X sl=%X out=%c%c",
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " dt=%u fb=%u alg=%X mul=%X tl=%02X ksr=%u adsr=%02X/%02X/%02X/%X sl=%X out=%c%c",
|
||||
op_detune(opoffs),
|
||||
ch_feedback(choffs),
|
||||
ch_algorithm(choffs),
|
||||
@ -580,32 +580,32 @@ std::string opz_registers::log_keyon(uint32_t choffs, uint32_t opoffs)
|
||||
ch_output_1(choffs) ? 'R' : '-');
|
||||
|
||||
if (op_eg_shift(opoffs) != 0)
|
||||
end += sprintf(end, " egshift=%u", op_eg_shift(opoffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " egshift=%u", op_eg_shift(opoffs));
|
||||
|
||||
bool am = (lfo_am_depth() != 0 && ch_lfo_am_sens(choffs) != 0 && op_lfo_am_enable(opoffs) != 0);
|
||||
if (am)
|
||||
end += sprintf(end, " am=%u/%02X", ch_lfo_am_sens(choffs), lfo_am_depth());
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " am=%u/%02X", ch_lfo_am_sens(choffs), lfo_am_depth());
|
||||
bool pm = (lfo_pm_depth() != 0 && ch_lfo_pm_sens(choffs) != 0);
|
||||
if (pm)
|
||||
end += sprintf(end, " pm=%u/%02X", ch_lfo_pm_sens(choffs), lfo_pm_depth());
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " pm=%u/%02X", ch_lfo_pm_sens(choffs), lfo_pm_depth());
|
||||
if (am || pm)
|
||||
end += sprintf(end, " lfo=%02X/%c", lfo_rate(), "WQTN"[lfo_waveform()]);
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " lfo=%02X/%c", lfo_rate(), "WQTN"[lfo_waveform()]);
|
||||
|
||||
bool am2 = (lfo2_am_depth() != 0 && ch_lfo2_am_sens(choffs) != 0 && op_lfo_am_enable(opoffs) != 0);
|
||||
if (am2)
|
||||
end += sprintf(end, " am2=%u/%02X", ch_lfo2_am_sens(choffs), lfo2_am_depth());
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " am2=%u/%02X", ch_lfo2_am_sens(choffs), lfo2_am_depth());
|
||||
bool pm2 = (lfo2_pm_depth() != 0 && ch_lfo2_pm_sens(choffs) != 0);
|
||||
if (pm2)
|
||||
end += sprintf(end, " pm2=%u/%02X", ch_lfo2_pm_sens(choffs), lfo2_pm_depth());
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " pm2=%u/%02X", ch_lfo2_pm_sens(choffs), lfo2_pm_depth());
|
||||
if (am2 || pm2)
|
||||
end += sprintf(end, " lfo2=%02X/%c", lfo2_rate(), "WQTN"[lfo2_waveform()]);
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " lfo2=%02X/%c", lfo2_rate(), "WQTN"[lfo2_waveform()]);
|
||||
|
||||
if (op_reverb_rate(opoffs) != 0)
|
||||
end += sprintf(end, " rev=%u", op_reverb_rate(opoffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " rev=%u", op_reverb_rate(opoffs));
|
||||
if (op_waveform(opoffs) != 0)
|
||||
end += sprintf(end, " wf=%u", op_waveform(opoffs));
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " wf=%u", op_waveform(opoffs));
|
||||
if (noise_enable() && opoffs == 31)
|
||||
end += sprintf(end, " noise=1");
|
||||
end += snprintf(&buffer[end], sizeof(buffer) - end, " noise=1");
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
1
3rdparty/ymfm/src/ymfm_pcm.cpp
vendored
1
3rdparty/ymfm/src/ymfm_pcm.cpp
vendored
@ -46,7 +46,6 @@ namespace ymfm
|
||||
void pcm_registers::reset()
|
||||
{
|
||||
std::fill_n(&m_regdata[0], REGISTERS, 0);
|
||||
m_regdata[0x02] = 0x20;
|
||||
m_regdata[0xf8] = 0x1b;
|
||||
}
|
||||
|
||||
|
2
3rdparty/ymfm/src/ymfm_ssg.h
vendored
2
3rdparty/ymfm/src/ymfm_ssg.h
vendored
@ -49,6 +49,8 @@ namespace ymfm
|
||||
class ssg_override
|
||||
{
|
||||
public:
|
||||
virtual ~ssg_override() = default;
|
||||
|
||||
// reset our status
|
||||
virtual void ssg_reset() = 0;
|
||||
|
||||
|
@ -4,8 +4,8 @@
|
||||
-->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.mamedev.mame"
|
||||
android:versionCode="273"
|
||||
android:versionName="0.273"
|
||||
android:versionCode="274"
|
||||
android:versionName="0.274"
|
||||
android:installLocation="auto">
|
||||
|
||||
<!-- OpenGL ES 2.0 -->
|
||||
|
@ -63,9 +63,9 @@ copyright = u'1997-2025, MAMEdev and contributors'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.273'
|
||||
version = '0.274'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '0.273'
|
||||
release = '0.274'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@ -27,6 +27,20 @@ TODO:
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="interfer" supported="no">
|
||||
<description>Interference (demo)</description>
|
||||
<year>1993</year>
|
||||
<publisher><homebrew></publisher>
|
||||
<info name="developer" value="Sanity"/>
|
||||
<info name="release" value="19930424"/>
|
||||
<!-- OCS/ECS -->
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="901120">
|
||||
<rom name="sanity-interference.adf" size="901120" crc="7075359f" sha1="8dc41dccf7dab7b742f9fd21d3e2d2055120f3dc"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="miseryd2" supported="no">
|
||||
<description>Misery Dentro 2 (demo)</description>
|
||||
<year>1993</year>
|
||||
@ -42,6 +56,20 @@ TODO:
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="puggs" supported="no">
|
||||
<description>Puggs In Space (demo)</description>
|
||||
<year>1989</year>
|
||||
<publisher><homebrew></publisher>
|
||||
<info name="developer" value="Dionysus"/>
|
||||
<!-- 10th best demo in EuroChart Top Ten #3 -->
|
||||
<!-- OCS/ECS -->
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="901120">
|
||||
<rom name="dionysus-puggsinspace.adf" size="901120" crc="c55e5390" sha1="b8af05dc8905c1e215f3b2b4c450020d890add25"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="elysium" supported="no">
|
||||
<description>Sanity Elysium (demo)</description>
|
||||
<year>1991</year>
|
||||
|
@ -115,7 +115,7 @@ license:CC0-1.0
|
||||
<year>1988</year>
|
||||
<publisher>Taito</publisher>
|
||||
<info name="programmer" value="Ryan Ridges and John Lund" />
|
||||
<info name="version" value="12-Jan-89" />
|
||||
<info name="version" value="12-Jan-89 - ROM 03 compatible" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs." />
|
||||
<sharedfeat name="compatibility" value="A2GS"/>
|
||||
<!-- Dump released: 2021-08-13 -->
|
||||
@ -252,17 +252,19 @@ license:CC0-1.0
|
||||
</software>
|
||||
|
||||
<software name="calcraft">
|
||||
<description>Calendar Crafter (A-194 version 1.2) (trex crack)</description>
|
||||
<description>Calendar Crafter (A-194 version 1.2) (cleanly cracked)</description>
|
||||
<year>1987</year>
|
||||
<publisher>MECC</publisher>
|
||||
<info name="partno" value="A-194" />
|
||||
<info name="programmer" value="Gene Breault, Charolyn Kapplinger, Diane Portner, Steven D. Splinter, and Paul R. Wenker" />
|
||||
<info name="usage" value="Requires a 768K Apple IIgs ROM 01 or later." />
|
||||
<info name="version" value="1.2" />
|
||||
<info name="usage" value="Requires a 768K Apple IIgs ROM 01 or later." />
|
||||
<sharedfeat name="compatibility" value="A2GS" />
|
||||
<!-- Dump released: 2021-08-13 -->
|
||||
<!-- productivity program -->
|
||||
<!-- It requires a 768K Apple IIgs ROM 01 or later. -->
|
||||
<!-- "Calendar Crafter" is a utility that allows you to design and print customized calendars to help organize your month / year. -->
|
||||
<!-- Protection: Bad block check for block $8 -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="calendar crafter v1.2 iigs(trex crack).2mg" size="819264" crc="65717231" sha1="2f2415385a699fc78a68a3a73ff8470a5fc8df6f"/>
|
||||
@ -473,17 +475,19 @@ license:CC0-1.0
|
||||
</software>
|
||||
|
||||
<software name="dsgnprnt">
|
||||
<description>Designer Prints (A-252 version 1.0) (trex crack)</description>
|
||||
<description>Designer Prints (A-252 version 1.0) (cleanly cracked)</description>
|
||||
<year>1989</year>
|
||||
<publisher>MECC</publisher>
|
||||
<info name="partno" value="A-252" />
|
||||
<info name="programmer" value="Diane Portner, Michael Stein, Brian Walker, and Paul Wenker" />
|
||||
<info name="usage" value="Requires a 768K Apple IIgs ROM 01 or later." />
|
||||
<info name="version" value="1.0" />
|
||||
<info name="usage" value="Requires a 768K Apple IIgs ROM 01 or later." />
|
||||
<sharedfeat name="compatibility" value="A2GS" />
|
||||
<!-- Dump released: 2021-08-13 -->
|
||||
<!-- desktop publishing program -->
|
||||
<!-- It requires a 768K Apple IIgs ROM 01 or later. -->
|
||||
<!-- "Designer Prints" is a versatile desktop publishing program for making worksheets, certificates, posters and other printed materials. -->
|
||||
<!-- Protection: Bad block check for block $8 -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Disk 1 - System disk"/>
|
||||
<dataarea name="flop" size="819264">
|
||||
@ -499,17 +503,19 @@ license:CC0-1.0
|
||||
</software>
|
||||
|
||||
<software name="dsgnpuzl">
|
||||
<description>Designer Puzzles (A-223 version 1.0) (trex crack)</description>
|
||||
<description>Designer Puzzles (A-223 version 1.0) (cleanly cracked)</description>
|
||||
<year>1989</year>
|
||||
<publisher>MECC</publisher>
|
||||
<info name="partno" value="A-223" />
|
||||
<info name="programmer" value="Susan Gabrys, John J. Krenz, Diane Portner, and Steve Splinter" />
|
||||
<info name="usage" value="Requires a 768K Apple IIgs ROM 01 or later." />
|
||||
<info name="version" value="1.0" />
|
||||
<info name="usage" value="Requires a 768K Apple IIgs ROM 01 or later." />
|
||||
<sharedfeat name="compatibility" value="A2GS" />
|
||||
<!-- Dump released: 2021-08-13 -->
|
||||
<!-- desktop publishing program -->
|
||||
<!-- It requires a 768K Apple IIgs ROM 01 or later. -->
|
||||
<!-- "Designer Puzzles" is a versatile desktop publishing program for making word scrambles and crossword puzzles -->
|
||||
<!-- Protection: Bad block check for block $8 -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Disk 1 - System disk"/>
|
||||
<dataarea name="flop" size="819264">
|
||||
@ -570,6 +576,26 @@ license:CC0-1.0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="drawplus10">
|
||||
<description>Draw Plus (version 1.0) (cleanly cracked)</description>
|
||||
<year>1987</year>
|
||||
<publisher>Activision</publisher>
|
||||
<info name="programmer" value="H. Lamiraux" />
|
||||
<info name="version" value="1.0" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs." />
|
||||
<sharedfeat name="compatibility" value="A2GS" />
|
||||
<!-- Dump released: 2025-01-25 -->
|
||||
<!-- It requires a 512K Apple IIgs. -->
|
||||
<!-- "Draw Plus" is full-color precision drawing program with text and graphics intergraion. -->
|
||||
<!-- Protection: Bad block check for block $7, later versions dropped the copy protection -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="draw plus v1.0 iigs (trex crack).2mg" size="819264" crc="efddd532" sha1="518ccb81ca6c20686e18c5a88b3d54708c62aba1" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fantavsn">
|
||||
<description>Fantavision (version 2.1) (cleanly cracked)</description>
|
||||
<year>1987</year>
|
||||
@ -674,7 +700,7 @@ license:CC0-1.0
|
||||
<year>1987</year>
|
||||
<publisher>Activision</publisher>
|
||||
<info name="programmer" value="Paul Terry, Jack Thornton, Scott Orr, John Cutter, Troy Lyndon, and Russell Lieblich" />
|
||||
<info name="usage" value="Requires a 256K Apple IIgs." />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs." />
|
||||
<sharedfeat name="compatibility" value="A2GS"/>
|
||||
<!-- Dump released: 2023-04-13 -->
|
||||
<!-- It requires a 512K Apple IIgs. -->
|
||||
@ -1174,7 +1200,7 @@ license:CC0-1.0
|
||||
<publisher>Davidson and Associates</publisher>
|
||||
<info name="author" value="Jan Davidson and Cathy Johnson" />
|
||||
<info name="programmer" value="C.K. Haun" />
|
||||
<info name="version" value="1.1" />
|
||||
<info name="version" value="1.0" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs ROM1 or later." />
|
||||
<sharedfeat name="compatibility" value="A2GS"/>
|
||||
<!-- Dump released: 2021-08-13 -->
|
||||
@ -1334,6 +1360,33 @@ license:CC0-1.0
|
||||
<rom name="mercury v1.0 iigs - disk 2 - program (trex crack).2mg" size="819264" crc="2682521b" sha1="5fd3948bac00b1ca4e08c79ccb437483798f25a9"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
</software> <software name="mulscribe">
|
||||
<description>MultiScribe IIgs (version 3.01c) (cleanly cracked)</description>
|
||||
<year>1987</year>
|
||||
<publisher>StyleWare</publisher>
|
||||
<info name="developer" value="StyleWare" />
|
||||
<info name="version" value="3.01c" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs." />
|
||||
<sharedfeat name="compatibility" value="A2GS" />
|
||||
<!-- Dump released: 2025-01-25 -->
|
||||
<!-- It requires a 512K Apple IIgs. -->
|
||||
<!-- "MultiScrible" is a word-processor featuring the ability to use different fonts, print styles, colors as well as allowing you to add boxes, circles and other designs. -->
|
||||
<!-- First marketed as "Scholastic MutiScrible GS by StyleWare", then it became StyleWare MultiScribe GS and eventually Beagle Bros Software acquired the StyleWare library and rebranded it as BeagleWrite GS. -->
|
||||
<!-- Protection: Nibble count on tracks $20 & $21 -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Disk 1 - Program" />
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="multiscribe gs v3.01c disk 1 - program (trex crack).2mg" size="819264" crc="d63e2246" sha1="8b5b7074f8967a79eb417cdb1a2648638473aa0f" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop2" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Disk 2 - Utilities" />
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="multiscribe gs v3.01c disk 2 - utilities (trex crack).2mg" size="819264" crc="c4a8d1b1" sha1="0e31bb265b031397f8b386916e791e618d3a891e" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mcs">
|
||||
@ -1799,14 +1852,16 @@ license:CC0-1.0
|
||||
<year>1988</year>
|
||||
<publisher>Electronic Arts</publisher>
|
||||
<info name="programmer" value="Michael Kosaka, Stephen Landrum, David Bunch, and Michelle Shelfer" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs. Music requires 768K." />
|
||||
<info name="version" value="1.1 07-Oct-88 - ROM 03 compatible" />
|
||||
<!-- sod.sys16 dated 07-Oct-88 -->
|
||||
<info name="usage" value="Requires a 512K Apple IIgs. Music requires 768K." />
|
||||
<sharedfeat name="compatibility" value="A2GS"/>
|
||||
<!-- Dump released: 2021-08-13 -->
|
||||
<!-- sports game -->
|
||||
<!-- It requires a 512K Apple IIgs. Music requires 768K. -->
|
||||
<!-- "Skate or Die" is a 1988 sports game developed by Michael Kosaka, Stephen Landrum, David Bunch, and Michelle Shelfer, and distributed by Electronic Arts. -->
|
||||
<!-- Patched to be compatible with ROM03 -->
|
||||
<!-- sod.sys16 dated 07-Oct-88 -->
|
||||
<!-- Protection: Nibble count on tracks $20 & $21 -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="skate or die v1.1 iigs (trex crack).2mg" size="819264" crc="dde655cd" sha1="cf40c92a699cf9e7c79f1a25c3f22f32f5a28d46"/>
|
||||
@ -1819,17 +1874,20 @@ license:CC0-1.0
|
||||
<year>1988</year>
|
||||
<publisher>Electronic Arts</publisher>
|
||||
<info name="programmer" value="Michael Kosaka, Stephen Landrum, David Bunch, and Michelle Shelfer" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs. Music requires 768K." />
|
||||
<info name="version" value="1.0 12-Aug-88 - ROM 03 compatible" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs. Music requires 768K." />
|
||||
<!-- sod.sys16 dated 12-Aug-88 -->
|
||||
<sharedfeat name="compatibility" value="A2GS"/>
|
||||
<!-- Dump released: 2021-08-13 -->
|
||||
<!-- sports game -->
|
||||
<!-- Dump released: 2025-01-25, redump based on WOZ released on 2024-09-02 -->
|
||||
<!-- It requires a 512K Apple IIgs. Music requires 768K. -->
|
||||
<!-- "Skate or Die" is a 1988 sports game developed by Michael Kosaka, Stephen Landrum, David Bunch, and Michelle Shelfer, and distributed by Electronic Arts. -->
|
||||
<!-- Patched to be compatible with ROM03 -->
|
||||
<!-- sod.sys16 dated 12-Aug-88 -->
|
||||
<!-- Protection: Nibble count on tracks $20 & $21 -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="skate or die v1.0 iigs (trex crack).2mg" size="819264" crc="466b7067" sha1="776c78d962d46b6b20ca464bbbed2e2f746f4099"/>
|
||||
<rom name="skate or die v1.0 iigs (trex crack).2mg" size="819264" crc="f87d1ec3" sha1="9e28b572f9d53fd276066b3701de42d45ee9cc51"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -1839,6 +1897,7 @@ license:CC0-1.0
|
||||
<year>1987</year>
|
||||
<publisher>Sierra On-Line</publisher>
|
||||
<info name="release" value="2021-08-13"/>
|
||||
<info name="usage" value="Requires a 512K Apple IIgs." />
|
||||
<sharedfeat name="compatibility" value="A2GS"/>
|
||||
<!-- Dump released: 2021-08-13 -->
|
||||
<!-- It requires a 512K Apple IIgs. -->
|
||||
@ -2354,6 +2413,70 @@ license:CC0-1.0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="ntsbalpha">
|
||||
<description>The New Talking Stickybear Alphabet (cleanly cracked)</description>
|
||||
<year>1988</year>
|
||||
<publisher>Optimum Resource</publisher>
|
||||
<info name="developer" value="Optimum Resource" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs ROM01 or later." />
|
||||
<sharedfeat name="compatibility" value="A2GS" />
|
||||
<!-- Dump released: 2025-01-25 -->
|
||||
<!-- It requires a 512K Apple IIgs ROM01 or later. -->
|
||||
<!-- "The New Talking Stickybear Alphabet" is an educational program designed to teach children the alphabet through the use of graphics and speech -->
|
||||
<!-- Protection: Unformatted track $03, Side $01 (bad blocks $54 through $5F) check -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Disk 1" />
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="the new talking stickybear alphabet iigs disk 1 (trex crack).2mg" size="819264" crc="4f80d28b" sha1="c6b243cc8aa3c2b39658095c5a1b91bbdcd40629" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop2" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Disk 2" />
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="the new talking stickybear alphabet iigs disk 2 (trex crack).2mg" size="819264" crc="35817368" sha1="1426cf78a664e0ec41128fec150c084e9d1f3874" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="ntsbopp">
|
||||
<description>The New Talking Stickybear Opposites (cleanly cracked)</description>
|
||||
<year>1988</year>
|
||||
<publisher>Optimum Resource</publisher>
|
||||
<info name="developer" value="Optimum Resource" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs ROM01 or later." />
|
||||
<sharedfeat name="compatibility" value="A2GS" />
|
||||
<!-- Dump released: 2025-01-25 -->
|
||||
<!-- It requires a 512K Apple IIgs ROM01 or later. -->
|
||||
<!-- "The New Talking Stickybear Opposites" is an educational program designed to teach children opposites through the use of graphics and speech -->
|
||||
<!-- Protection: Unformatted track $03, Side $01 (bad blocks $54 through $5F) check -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="the new talking stickybear opposites iigs (trex crack).2mg" size="819264" crc="a2ce5ec8" sha1="0954c66f8858d26ce70c1926236b4115f705f2c5" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="ntsbshapes">
|
||||
<description>The New Talking Stickybear Shapes (cleanly cracked)</description>
|
||||
<year>1988</year>
|
||||
<publisher>Optimum Resource</publisher>
|
||||
<info name="programmer" value="Richard Hefter, David Cunningham, and Susan Dubicki" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs ROM01 or later." />
|
||||
<sharedfeat name="compatibility" value="A2GS" />
|
||||
<!-- Dump released: 2025-01-25 -->
|
||||
<!-- It requires a 512K Apple IIgs ROM01 or later. -->
|
||||
<!-- "The New Talking Stickybear Shapes" is an educational program designed to teach children basic shapes through the use of graphics and speech -->
|
||||
<!-- Protection: Unformatted track $03, Side $01 (bad blocks $54 through $5F) check -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="the new talking stickybear shapes iigs (trex crack).2mg" size="819264" crc="f52125b9" sha1="93967102bb9642aba3607291cf30d6e0a1a01c5e" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="printshp">
|
||||
<description>The Print Shop (version 1.0) (cleanly cracked)</description>
|
||||
<year>1987</year>
|
||||
@ -2406,6 +2529,7 @@ license:CC0-1.0
|
||||
<year>1987</year>
|
||||
<publisher>PBI Software</publisher>
|
||||
<info name="programmer" value="Richard L. Seaborne and Jeff A. Lamberts" />
|
||||
<info name="version" value="1.0" />
|
||||
<info name="usage" value="Requires a 768K Apple IIgs." />
|
||||
<sharedfeat name="compatibility" value="A2GS"/>
|
||||
<!-- Dump released: 2021-08-13 -->
|
||||
@ -2540,18 +2664,39 @@ license:CC0-1.0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="topdraw100a">
|
||||
<description>TopDraw (version 1.00A (7/12/87)) (trex crack)</description>
|
||||
<software name="topdraw">
|
||||
<description>TopDraw (version 1.01A (8/4/87)) (cleanly cracked)</description>
|
||||
<year>1987</year>
|
||||
<publisher>StyleWare</publisher>
|
||||
<info name="programmer" value="Robert A. Hearn and Jeff G. Erickson" />
|
||||
<info name="version" value="1.01A (8/4/87)" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs." />
|
||||
<sharedfeat name="compatibility" value="A2GS" />
|
||||
<!-- Dump released: 2025-01-25 -->
|
||||
<!-- It requires a 512K Apple IIgs. -->
|
||||
<!-- "TopDraw" is a professional object-oriented graphics drawing environment. Beagle Bros Software later acquired the StyleWare library and rebranded TopDraw as BeagleDraw. -->
|
||||
<!-- Protection: Nibble count on tracks $20 & $21 -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="topdraw v1.01a iigs (trex crack).2mg" size="819264" crc="d7cf235e" sha1="b488b0cef54cb71f447a0d6b508f86220cb09d4d" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="topdraw100a" cloneof="topdraw">
|
||||
<description>TopDraw (version 1.00A (7/12/87)) (cleanly cracked)</description>
|
||||
<year>1987</year>
|
||||
<publisher>StyleWare</publisher>
|
||||
<info name="programmer" value="Robert A. Hearn and Jeff G. Erickson" />
|
||||
<info name="usage" value="Requires a 1MB Apple IIgs." />
|
||||
<info name="version" value="1.00A (7/12/87)" />
|
||||
<info name="usage" value="Requires a 512K Apple IIgs." />
|
||||
<sharedfeat name="compatibility" value="A2GS" />
|
||||
<!-- Dump released: 2021-08-13 -->
|
||||
<!-- graphics program -->
|
||||
<!-- TopDraw later became Beagle Draw sold under the Beagle Brothers banner. -->
|
||||
<!-- It requires a 512K Apple IIgs. -->
|
||||
<!-- "TopDraw" is a professional object-oriented graphics drawing environment. Beagle Bros Software later acquired the StyleWare library and rebranded TopDraw as BeagleDraw. -->
|
||||
<!-- Protection: Nibble count on tracks $20 & $21 -->
|
||||
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="819264">
|
||||
<rom name="topdraw v1.00a iigs (trex crack).2mg" size="819264" crc="39e7967f" sha1="35746bbc2232251d96264989705a6e6286bafef5"/>
|
||||
|
@ -10321,6 +10321,7 @@ license:CC0-1.0
|
||||
<!--
|
||||
Origin: Redump
|
||||
http://redump.org/disc/88153/
|
||||
http://redump.org/disc/88154/
|
||||
-->
|
||||
<description>Validation Disc (Version 1.0)</description>
|
||||
<!-- '89 for disc 1, '90 for disc 2 -->
|
||||
|
@ -36399,7 +36399,9 @@ Please stick to using the floppy versions for the time being...
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="technocp" supported="no">
|
||||
<!-- All data is in the one tape image. When the game asks to flip the tape to side 2, just keep the tape running.
|
||||
You may want to take note where this occurs in case you need to restart and rewind the tape. -->
|
||||
<software name="technocp" supported="yes">
|
||||
<description>Techno Cop (UK)</description>
|
||||
<year>1988</year>
|
||||
<publisher>Gremlin Graphics Software</publisher>
|
||||
|
@ -5873,7 +5873,7 @@ Has optional unemulated [32X] mode, which in turn needs [disc swap]
|
||||
<rom name="Game no Kandume Vol.1 (Japan) (Track 30).bin" size="19121760" crc="aa75b323" />
|
||||
<rom name="Game no Kandume Vol.1 (Japan) (Track 31).bin" size="1300656" crc="0db9cca1" />
|
||||
-->
|
||||
<description>Game no Kandume Vol.1 (Japan)</description>
|
||||
<description>Game no Kanzume Vol.1 (Japan)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Sega</publisher>
|
||||
<info name="serial" value="G-6032"/>
|
||||
@ -5916,7 +5916,7 @@ Has optional unemulated [32X] mode, which in turn needs [disc swap]
|
||||
<rom name="Game no Kandume Vol.2 (Japan) (Track 23).bin" size="19121760" crc="aa75b323" />
|
||||
<rom name="Game no Kandume Vol.2 (Japan) (Track 24).bin" size="1420608" crc="e76b47df" />
|
||||
-->
|
||||
<description>Game no Kandume Vol.2 (Japan)</description>
|
||||
<description>Game no Kanzume Vol.2 (Japan)</description>
|
||||
<year>1994</year>
|
||||
<publisher>Sega</publisher>
|
||||
<info name="serial" value="G-6033"/>
|
||||
|
@ -257,6 +257,20 @@ kanji name, romaji name, manufacturer, release date in %MMM %YY format, notes
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="ctgolf" supported="no">
|
||||
<description>Computer the Golf</description>
|
||||
<year>1983</year>
|
||||
<publisher>日本ファルコム (Nihon Falcom)</publisher>
|
||||
<!-- PC8801 -->
|
||||
<info name="release" value="198310xx"/>
|
||||
<info name="alt_title" value="コンピュータ ザ ゴルフ"/>
|
||||
<part name="cass" interface="pc8801_cass">
|
||||
<dataarea name="cass" size="23624">
|
||||
<rom name="computer the golf.t88" size="23624" crc="a149466d" sha1="176a97e426d4b0a9fca206db249bdcb07870d24c"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cosmox">
|
||||
<description>Cosmo Cross</description>
|
||||
<year>19??</year>
|
||||
|
@ -240,6 +240,7 @@ Are the following undumped or mistranslated (check also if available in TOSEC)?
|
||||
- ゴルゴ13 狼の巣 (198410xx) by Pony Canyon
|
||||
- Breakfast3号 (1984xxxx) by Kominiketo
|
||||
- Blue Blood disks (at least Vol. 1-6 and CG set Vol. 1 according to gradiusm)
|
||||
- S.F.3.D Original Operation V by Cross Media Soft
|
||||
|
||||
Not included:
|
||||
- ミラーズ (19901210) by Studio Wing, uses CDROM (>PC8801MC)
|
||||
@ -5898,12 +5899,13 @@ Not extensively tested
|
||||
</software>
|
||||
|
||||
<software name="carmine">
|
||||
<description>Carmine</description>
|
||||
<description>Carmine 88</description>
|
||||
<year>1987</year>
|
||||
<publisher>マイクロキャビン (Micro Cabin)</publisher>
|
||||
<!-- PC8801 -->
|
||||
<!-- PC8801mk2SR -->
|
||||
<info name="release" value="198702xx"/>
|
||||
<info name="alt_title" value="カーマイン"/>
|
||||
<info name="alt_title" value="カーマイン88"/>
|
||||
<info name="usage" value="Needs BASIC V2"/>
|
||||
<!--combined image-->
|
||||
<!--rom name="carmine.d88" size="770496" crc="ade94761" sha1="220ee916091ece8176e56867e3923529a8c49591"/-->
|
||||
|
||||
@ -5923,12 +5925,13 @@ Not extensively tested
|
||||
</software>
|
||||
|
||||
<software name="carminea" cloneof="carmine">
|
||||
<description>Carmine (alt?)</description>
|
||||
<description>Carmine 88 (alt?)</description>
|
||||
<year>1987</year>
|
||||
<publisher>マイクロキャビン (Micro Cabin)</publisher>
|
||||
<!-- PC8801 -->
|
||||
<!-- PC8801mk2SR -->
|
||||
<info name="release" value="198702xx"/>
|
||||
<info name="alt_title" value="カーマイン"/>
|
||||
<info name="alt_title" value="カーマイン88"/>
|
||||
<info name="usage" value="Needs BASIC V2"/>
|
||||
<!--combined image-->
|
||||
<!--rom name="carmine.d88" size="1140944" crc="62aeef7e" sha1="18a952b782b71177fa0000652422d0ed23d7d6a5"/-->
|
||||
|
||||
@ -29118,26 +29121,13 @@ Start and Program Disks OK, the remaining part is damaged (missing d88 headers?)
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="sf3dopv">
|
||||
<description>S.F.3.D Original Operation V</description>
|
||||
<year>1985</year>
|
||||
<publisher>クロスメディアソフト (Cross Media Soft)</publisher>
|
||||
<!-- PC8801 -->
|
||||
<info name="release" value="198512xx"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="365168">
|
||||
<rom name="s.f.3.d original operation v (1985)(cross media).d88" size="365168" crc="ffb66bfb" sha1="8524f776b1a0730086ebc78ae6dc20b4483fff57"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="sf3dthxg">
|
||||
<description>S.F.3.D. - Original Operation Thanksgiving</description>
|
||||
<description>Point X Senryō Sakusen S.F.3.D - Original Operation Thanksgiving</description>
|
||||
<year>1986</year>
|
||||
<publisher>クロスメディアソフト (Cross Media Soft)</publisher>
|
||||
<!-- PC8801 -->
|
||||
<info name="release" value="198609xx"/>
|
||||
<info name="alt_title" value="ポイントX占領作戦 (Box)"/>
|
||||
<info name="alt_title" value="ポイントX占領作戦 S.F.3.D - Original Operation Thanksgiving (Box)"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="365168">
|
||||
<rom name="s.f.3.d. - original operation thanksgiving.d88" size="365168" crc="4985b37a" sha1="d13efd4b247b0e6ec702e769e51a5963fa007411"/>
|
||||
@ -29145,6 +29135,20 @@ Start and Program Disks OK, the remaining part is damaged (missing d88 headers?)
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="sf3dthxga" cloneof="sf3dthxg">
|
||||
<description>Point X Senryō Sakusen S.F.3.D - Original Operation Thanksgiving (alt)</description>
|
||||
<year>1986</year>
|
||||
<publisher>クロスメディアソフト (Cross Media Soft)</publisher>
|
||||
<!-- PC8801 -->
|
||||
<info name="release" value="198609xx"/>
|
||||
<info name="alt_title" value="ポイントX占領作戦 S.F.3.D - Original Operation Thanksgiving (Box)"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="365168">
|
||||
<rom name="s.f.3.d. - original operation thanksgiving (a).d88" size="365168" crc="ffb66bfb" sha1="8524f776b1a0730086ebc78ae6dc20b4483fff57"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="saziri">
|
||||
<description>Sa・Zi・Ri</description>
|
||||
<year>1988</year>
|
||||
|
4
makefile
4
makefile
@ -1572,7 +1572,7 @@ endif
|
||||
|
||||
ifeq (posix,$(SHELLTYPE))
|
||||
$(GENDIR)/version.cpp: makefile $(GENDIR)/git_desc | $(GEN_FOLDERS)
|
||||
@echo '#define BARE_BUILD_VERSION "0.273"' > $@
|
||||
@echo '#define BARE_BUILD_VERSION "0.274"' > $@
|
||||
@echo '#define BARE_VCS_REVISION "$(NEW_GIT_VERSION)"' >> $@
|
||||
@echo 'extern const char bare_build_version[];' >> $@
|
||||
@echo 'extern const char bare_vcs_revision[];' >> $@
|
||||
@ -1582,7 +1582,7 @@ $(GENDIR)/version.cpp: makefile $(GENDIR)/git_desc | $(GEN_FOLDERS)
|
||||
@echo 'const char build_version[] = BARE_BUILD_VERSION " (" BARE_VCS_REVISION ")";' >> $@
|
||||
else
|
||||
$(GENDIR)/version.cpp: makefile $(GENDIR)/git_desc | $(GEN_FOLDERS)
|
||||
@echo #define BARE_BUILD_VERSION "0.273" > $@
|
||||
@echo #define BARE_BUILD_VERSION "0.274" > $@
|
||||
@echo #define BARE_VCS_REVISION "$(NEW_GIT_VERSION)" >> $@
|
||||
@echo extern const char bare_build_version[]; >> $@
|
||||
@echo extern const char bare_vcs_revision[]; >> $@
|
||||
|
@ -319,6 +319,6 @@ ioport_constructor z_89_11_device::device_input_ports() const
|
||||
return INPUT_PORTS_NAME(z_89_11_device);
|
||||
}
|
||||
|
||||
}
|
||||
} // anonymous namespace
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(H89BUS_Z_89_11, device_h89bus_right_card_interface, z_89_11_device, "z_89_11", "Heath/Zenith Z-89-11 Multi-Function I/O Card");
|
||||
|
@ -46,8 +46,7 @@
|
||||
#include "machine/z80sio.h"
|
||||
|
||||
// Debugging
|
||||
#undef VERBOSE
|
||||
#define VERBOSE 0
|
||||
//#define VERBOSE 1
|
||||
#include "logmacro.h"
|
||||
|
||||
namespace {
|
||||
@ -154,7 +153,7 @@ protected:
|
||||
bool m_rt_in;
|
||||
uint8_t m_modem_ctrl;
|
||||
uint8_t m_modem_status;
|
||||
uint8_t m_low_ram[ LOW_RAM_SIZE ];
|
||||
uint8_t m_low_ram[LOW_RAM_SIZE];
|
||||
};
|
||||
|
||||
base_98628_9_device::base_98628_9_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
|
||||
@ -385,14 +384,16 @@ void base_98628_9_device::cpu_io_mem_map(address_map &map)
|
||||
|
||||
void base_98628_9_device::install_68k_map(offs_t base_addr)
|
||||
{
|
||||
dio().install_memory(0x0000 + base_addr,
|
||||
0x0007 + base_addr,
|
||||
read16sm_delegate(*this, [this](offs_t addr) { return reg_r(addr); }, ""),
|
||||
write16sm_delegate(*this, [this](offs_t addr, uint16_t data) { reg_w(addr, uint8_t(data)); }, ""));
|
||||
dio().install_memory(0x4000 + base_addr,
|
||||
0x7fff + base_addr,
|
||||
read16sm_delegate(*this, FUNC(base_98628_9_device::low_ram_r_68k)),
|
||||
write16sm_delegate(*this, FUNC(base_98628_9_device::low_ram_w_68k)));
|
||||
dio().install_memory(
|
||||
0x0000 + base_addr,
|
||||
0x0007 + base_addr,
|
||||
read16sm_delegate(*this, NAME([this] (offs_t addr) { return reg_r(addr); })),
|
||||
write16sm_delegate(*this, NAME([this] (offs_t addr, uint16_t data) { reg_w(addr, uint8_t(data)); })));
|
||||
dio().install_memory(
|
||||
0x4000 + base_addr,
|
||||
0x7fff + base_addr,
|
||||
read16sm_delegate(*this, FUNC(base_98628_9_device::low_ram_r_68k)),
|
||||
write16sm_delegate(*this, FUNC(base_98628_9_device::low_ram_w_68k)));
|
||||
}
|
||||
|
||||
uint8_t base_98628_9_device::reg_r(offs_t addr)
|
||||
@ -503,7 +504,7 @@ uint8_t base_98628_9_device::low_ram_r_z80(offs_t addr)
|
||||
m_sio->ctsb_w(m_ctsb);
|
||||
LOG("CTSB 0\n");
|
||||
}
|
||||
return m_low_ram[ addr & (LOW_RAM_SIZE - 1) ];
|
||||
return m_low_ram[addr & (LOW_RAM_SIZE - 1)];
|
||||
}
|
||||
|
||||
uint16_t base_98628_9_device::low_ram_r_68k(offs_t addr)
|
||||
@ -514,7 +515,7 @@ uint16_t base_98628_9_device::low_ram_r_68k(offs_t addr)
|
||||
update_irq();
|
||||
LOG("IRQ 0\n");
|
||||
}
|
||||
return m_low_ram[ addr & (LOW_RAM_SIZE - 1) ];
|
||||
return m_low_ram[addr & (LOW_RAM_SIZE - 1)];
|
||||
}
|
||||
|
||||
void base_98628_9_device::low_ram_w_z80(offs_t addr, uint8_t data)
|
||||
@ -525,7 +526,7 @@ void base_98628_9_device::low_ram_w_z80(offs_t addr, uint8_t data)
|
||||
LOG("IRQ 1\n");
|
||||
update_irq();
|
||||
}
|
||||
m_low_ram[ addr & (LOW_RAM_SIZE - 1) ] = data;
|
||||
m_low_ram[addr & (LOW_RAM_SIZE - 1)] = data;
|
||||
}
|
||||
|
||||
void base_98628_9_device::low_ram_w_68k(offs_t addr, uint16_t data)
|
||||
@ -536,7 +537,7 @@ void base_98628_9_device::low_ram_w_68k(offs_t addr, uint16_t data)
|
||||
LOG("CTSB 1\n");
|
||||
m_sio->ctsb_w(m_ctsb);
|
||||
}
|
||||
m_low_ram[ addr & (LOW_RAM_SIZE - 1) ] = uint8_t(data);
|
||||
m_low_ram[addr & (LOW_RAM_SIZE - 1)] = uint8_t(data);
|
||||
}
|
||||
|
||||
uint8_t base_98628_9_device::sio_r(offs_t addr)
|
||||
@ -873,7 +874,7 @@ protected:
|
||||
bool m_tx;
|
||||
bool m_last_tt;
|
||||
uint8_t m_sr;
|
||||
uint8_t m_high_ram[ HIGH_RAM_SIZE ];
|
||||
uint8_t m_high_ram[HIGH_RAM_SIZE];
|
||||
};
|
||||
|
||||
void dio16_98629_device::device_start()
|
||||
@ -995,20 +996,21 @@ void dio16_98629_device::cpu_program_mem_map(address_map &map)
|
||||
void dio16_98629_device::install_68k_map(offs_t base_addr)
|
||||
{
|
||||
base_98628_9_device::install_68k_map(base_addr);
|
||||
dio().install_memory(0x8000 + base_addr,
|
||||
0xbfff + base_addr,
|
||||
read16sm_delegate(*this, [this](offs_t addr) { return high_ram_r_z80(addr); }, ""),
|
||||
write16sm_delegate(*this, [this](offs_t addr, uint16_t data) { high_ram_w_z80(addr, uint8_t(data)); }, ""));
|
||||
dio().install_memory(
|
||||
0x8000 + base_addr,
|
||||
0xbfff + base_addr,
|
||||
read16sm_delegate(*this, NAME([this] (offs_t addr) { return high_ram_r_z80(addr); })),
|
||||
write16sm_delegate(*this, NAME([this] (offs_t addr, uint16_t data) { high_ram_w_z80(addr, uint8_t(data)); })));
|
||||
}
|
||||
|
||||
uint8_t dio16_98629_device::high_ram_r_z80(offs_t addr)
|
||||
{
|
||||
return m_high_ram[ addr & (HIGH_RAM_SIZE - 1) ];
|
||||
return m_high_ram[addr & (HIGH_RAM_SIZE - 1)];
|
||||
}
|
||||
|
||||
void dio16_98629_device::high_ram_w_z80(offs_t addr, uint8_t data)
|
||||
{
|
||||
m_high_ram[ addr & (HIGH_RAM_SIZE - 1) ] = data;
|
||||
m_high_ram[addr & (HIGH_RAM_SIZE - 1)] = data;
|
||||
}
|
||||
|
||||
void dio16_98629_device::tx_out(int state)
|
||||
|
@ -2,10 +2,12 @@
|
||||
// copyright-holders:Andrei I. Holub
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "kl1839vm1.h"
|
||||
#include "kl1839vm1dasm.h"
|
||||
|
||||
#include "cpu/vax/vaxdasm.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <regex>
|
||||
|
||||
|
||||
@ -132,7 +134,7 @@ u32 kl1839vm1_device::shr(u32 val, bool va, u8 fo, bool a_c, bool l_r)
|
||||
void kl1839vm1_device::kop(u8 kop, u8 fd, u32 x, u32 y, u8 rz, u8 ps, bool va = false, u8 fo = 0)
|
||||
{
|
||||
u64 res = 0;
|
||||
switch(fd)
|
||||
switch (fd)
|
||||
{
|
||||
case 0b11:
|
||||
x = s8(x);
|
||||
@ -148,7 +150,7 @@ void kl1839vm1_device::kop(u8 kop, u8 fd, u32 x, u32 y, u8 rz, u8 ps, bool va =
|
||||
}
|
||||
|
||||
RSP &= ~(VF | CF);
|
||||
switch(kop)
|
||||
switch (kop)
|
||||
{
|
||||
case 0b0000: res = y; break;
|
||||
// 0b0001:
|
||||
@ -191,7 +193,7 @@ void kl1839vm1_device::kop(u8 kop, u8 fd, u32 x, u32 y, u8 rz, u8 ps, bool va =
|
||||
default: break;
|
||||
}
|
||||
|
||||
switch(fd)
|
||||
switch (fd)
|
||||
{
|
||||
case 0b11:
|
||||
res &= 0x000000ff;
|
||||
@ -207,7 +209,8 @@ void kl1839vm1_device::kop(u8 kop, u8 fd, u32 x, u32 y, u8 rz, u8 ps, bool va =
|
||||
break;
|
||||
}
|
||||
R(rz) |= res;
|
||||
if (rz == 0x1f) mreg_w();
|
||||
if (rz == 0x1f)
|
||||
mreg_w();
|
||||
}
|
||||
|
||||
bool kl1839vm1_device::mreg_r()
|
||||
@ -874,10 +877,14 @@ void kl1839vm1_device::vax_decode_pc()
|
||||
}
|
||||
|
||||
if (!m_op_size)
|
||||
{
|
||||
LOGVAX("(%x): undecoded OP=%02x .. EXIT\n", PC, op);
|
||||
}
|
||||
else
|
||||
{
|
||||
PC += m_op_size; // move to a next op
|
||||
;//LOGVAX("(%x): Decoded: OP=%02x args:%d \n", PC, op, m_pcm_queue.size());
|
||||
/*LOGVAX("(%x): Decoded: OP=%02x args:%d \n", PC, op, m_pcm_queue.size())*/;
|
||||
}
|
||||
}
|
||||
|
||||
u32 kl1839vm1_device::vax_pcm_pull(bool is_bo)
|
||||
|
@ -1109,7 +1109,7 @@ bool vax_disassembler::is_read_mode(vax_disassembler::mode m)
|
||||
}
|
||||
}
|
||||
|
||||
const vax_disassembler::mode* vax_disassembler::get_operands(u8 op)
|
||||
const vax_disassembler::mode *vax_disassembler::get_operands(u8 op)
|
||||
{
|
||||
return s_nonprefix_ops[op].operand;
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ public:
|
||||
vax_disassembler();
|
||||
|
||||
static bool is_read_mode(mode m);
|
||||
static const mode* get_operands(u8 op);
|
||||
static const mode *get_operands(u8 op);
|
||||
|
||||
protected:
|
||||
// disassembler overrides
|
||||
|
@ -6,11 +6,10 @@
|
||||
* CMOS Local Area Network Controller for Ethernet (C-LANCE).
|
||||
*
|
||||
* Sources:
|
||||
* - Am7990 Local Area Network Controller for Ethernet (LANCE), Publication #05698, Rev. C, June 1990, Advanced Micro Devices
|
||||
* - Am79C90 CMOS Local Area Network Controller for Ethernet (C-LANCE), Publication #17881, Rev. C, January 1998, Advanced Micro Devices
|
||||
*
|
||||
* http://bitsavers.org/components/amd/Am7990/Am7990.pdf
|
||||
* http://bitsavers.org/components/amd/Am7990/Am79c90.pdf
|
||||
*
|
||||
* TODO
|
||||
* TODO:
|
||||
* - external loopback
|
||||
* - hp9k/3xx diagnostic failures
|
||||
*
|
||||
@ -64,6 +63,7 @@ am7990_device_base::am7990_device_base(const machine_config &mconfig, device_typ
|
||||
, m_intr_out_cb(*this)
|
||||
, m_dma_in_cb(*this, 0)
|
||||
, m_dma_out_cb(*this)
|
||||
, m_interrupt(nullptr)
|
||||
, m_transmit_poll(nullptr)
|
||||
, m_intr_out_state(1)
|
||||
{
|
||||
@ -84,6 +84,7 @@ constexpr attotime am7990_device_base::TX_POLL_PERIOD;
|
||||
|
||||
void am7990_device_base::device_start()
|
||||
{
|
||||
m_interrupt = timer_alloc(FUNC(am7990_device_base::interrupt), this);
|
||||
m_transmit_poll = timer_alloc(FUNC(am7990_device_base::transmit_poll), this);
|
||||
m_transmit_poll->adjust(TX_POLL_PERIOD, 0, TX_POLL_PERIOD);
|
||||
|
||||
@ -123,7 +124,12 @@ void am7990_device_base::device_reset()
|
||||
update_interrupts();
|
||||
}
|
||||
|
||||
void am7990_device_base::update_interrupts()
|
||||
void am7990_device_base::interrupt(s32 param)
|
||||
{
|
||||
m_intr_out_cb(param);
|
||||
}
|
||||
|
||||
void am7990_device_base::update_interrupts(attotime const delay)
|
||||
{
|
||||
if (m_csr[0] & CSR0_INEA)
|
||||
{
|
||||
@ -131,7 +137,7 @@ void am7990_device_base::update_interrupts()
|
||||
if (bool(m_csr[0] & CSR0_INTR) == m_intr_out_state)
|
||||
{
|
||||
m_intr_out_state = !m_intr_out_state;
|
||||
m_intr_out_cb(m_intr_out_state);
|
||||
m_interrupt->adjust(delay, m_intr_out_state);
|
||||
|
||||
if (!m_intr_out_state)
|
||||
LOG("interrupt asserted\n");
|
||||
@ -143,7 +149,7 @@ void am7990_device_base::update_interrupts()
|
||||
if (!m_intr_out_state)
|
||||
{
|
||||
m_intr_out_state = !m_intr_out_state;
|
||||
m_intr_out_cb(m_intr_out_state);
|
||||
m_interrupt->adjust(delay, m_intr_out_state);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -543,6 +549,8 @@ void am7990_device_base::regs_w(offs_t offset, u16 data)
|
||||
{
|
||||
LOGMASKED(LOG_REG, "regs_w csr%d data 0x%04x (%s)\n", m_rap, data, machine().describe_context());
|
||||
|
||||
attotime delay = attotime::zero;
|
||||
|
||||
switch (m_rap)
|
||||
{
|
||||
case 0: // Control/Status
|
||||
@ -571,7 +579,17 @@ void am7990_device_base::regs_w(offs_t offset, u16 data)
|
||||
if ((data & CSR0_INIT) && !(m_csr[0] & CSR0_INIT))
|
||||
{
|
||||
if (m_csr[0] & CSR0_STOP)
|
||||
{
|
||||
initialize();
|
||||
|
||||
/*
|
||||
* Initialization reads 12 words from the bus using single
|
||||
* word DMA transfers. Allow 2 cycles for bus acquisition
|
||||
* and release, plus 6 cycles for each single word DMA
|
||||
* transfer.
|
||||
*/
|
||||
delay = attotime::from_ticks((1 + 6 + 1) * 12, clock());
|
||||
}
|
||||
else
|
||||
m_csr[0] |= m_idon ? CSR0_IDON : CSR0_INIT;
|
||||
}
|
||||
@ -649,7 +667,7 @@ void am7990_device_base::regs_w(offs_t offset, u16 data)
|
||||
else
|
||||
m_csr[0] &= ~CSR0_INTR;
|
||||
|
||||
update_interrupts();
|
||||
update_interrupts(delay);
|
||||
break;
|
||||
|
||||
case 1: // Least significant 15 bits of the Initialization Block
|
||||
|
@ -34,9 +34,10 @@ protected:
|
||||
|
||||
// device helpers
|
||||
void initialize();
|
||||
void update_interrupts();
|
||||
void interrupt(s32 param);
|
||||
void update_interrupts(attotime const delay = attotime::zero);
|
||||
int receive(u8 *buf, int length);
|
||||
TIMER_CALLBACK_MEMBER(transmit_poll);
|
||||
void transmit_poll(s32 param);
|
||||
void transmit();
|
||||
bool address_filter(u8 *buf);
|
||||
|
||||
@ -163,6 +164,7 @@ private:
|
||||
u8 m_tx_ring_pos;
|
||||
u16 m_tx_md[4];
|
||||
|
||||
emu_timer *m_interrupt;
|
||||
emu_timer *m_transmit_poll;
|
||||
int m_intr_out_state;
|
||||
bool m_idon;
|
||||
|
@ -972,6 +972,15 @@ u16 mc68328_device::csd_lsw_r() // 0x11e, 0x12e, 0x13e, 0x14e
|
||||
// MMU/chip-select hardware - EZ variant
|
||||
//-------------------------------------------------
|
||||
|
||||
void mc68ez328_device::scr_w(u8 data)
|
||||
{
|
||||
if (data & SCR_WDTH8)
|
||||
{
|
||||
m_pasel = 0xff;
|
||||
}
|
||||
mc68328_base_device::scr_w(data);
|
||||
}
|
||||
|
||||
u8 mc68ez328_device::revision_r(offs_t offset)
|
||||
{
|
||||
LOGMASKED(LOG_PLL, "%s: revision_r: Silicon Revision[%d] = %02x\n", machine().describe_context(), offset, 0x01);
|
||||
@ -2668,7 +2677,7 @@ void mc68328_base_device::update_gptimer_state()
|
||||
}
|
||||
else
|
||||
{
|
||||
timer->adjust(attotime::from_ticks(regs.tcmp, get_timer_frequency<Timer>()));
|
||||
timer->adjust(attotime::from_hz(get_timer_frequency<Timer>()));
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -2683,39 +2692,30 @@ TIMER_CALLBACK_MEMBER(mc68328_base_device::timer_tick)
|
||||
timer_regs ®s = get_timer_regs(Timer);
|
||||
emu_timer *timer = get_timer(Timer);
|
||||
|
||||
regs.tcn = regs.tcmp;
|
||||
regs.tstat |= TSTAT_COMP;
|
||||
|
||||
if ((regs.tctl & TCTL_FRR) == TCTL_FRR_RESTART)
|
||||
u32 frequency = get_timer_frequency<Timer>();
|
||||
if (frequency > 0)
|
||||
{
|
||||
u32 frequency = get_timer_frequency<Timer>();
|
||||
if (frequency > 0)
|
||||
{
|
||||
attotime period = attotime::from_hz(frequency) * regs.tcmp;
|
||||
regs.tcn = 0x0000;
|
||||
timer->adjust(period);
|
||||
}
|
||||
else
|
||||
{
|
||||
timer->adjust(attotime::never);
|
||||
}
|
||||
attotime period = attotime::from_hz(frequency);
|
||||
timer->adjust(period);
|
||||
}
|
||||
else
|
||||
{
|
||||
u32 frequency = get_timer_frequency<Timer>();
|
||||
if (frequency > 0)
|
||||
{
|
||||
attotime period = attotime::from_hz(frequency) * 0x10000;
|
||||
timer->adjust(period);
|
||||
}
|
||||
else
|
||||
{
|
||||
timer->adjust(attotime::never);
|
||||
}
|
||||
timer->adjust(attotime::never);
|
||||
}
|
||||
if ((regs.tctl & TCTL_IRQEN) == TCTL_IRQEN_ENABLE)
|
||||
|
||||
regs.tcn++;
|
||||
if (regs.tcn == regs.tcmp)
|
||||
{
|
||||
set_interrupt_line(get_timer_int(Timer), 1);
|
||||
regs.tstat |= TSTAT_COMP;
|
||||
if ((regs.tctl & TCTL_FRR) == TCTL_FRR_RESTART)
|
||||
{
|
||||
regs.tcn = 0x0000;
|
||||
}
|
||||
|
||||
if ((regs.tctl & TCTL_IRQEN) == TCTL_IRQEN_ENABLE)
|
||||
{
|
||||
set_interrupt_line(get_timer_int(Timer), 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -430,7 +430,7 @@ protected:
|
||||
RTCHMSR_HOURS_SHIFT = 24,
|
||||
};
|
||||
|
||||
void scr_w(u8 data);
|
||||
virtual void scr_w(u8 data);
|
||||
|
||||
void grpbasea_w(u16 data);
|
||||
void grpbaseb_w(u16 data);
|
||||
@ -1143,6 +1143,8 @@ private:
|
||||
INT_MEMIQ_MASK = (1 << INT_MEMIQ),
|
||||
};
|
||||
|
||||
virtual void scr_w(u8 data) override;
|
||||
|
||||
void csa_w(offs_t offset, u16 data, u16 mem_mask);
|
||||
void csb_w(offs_t offset, u16 data, u16 mem_mask);
|
||||
void csc_w(offs_t offset, u16 data, u16 mem_mask);
|
||||
|
@ -2551,9 +2551,11 @@ void z80sio_channel::txc_w(int state)
|
||||
// Generate a new bit
|
||||
bool new_bit = false;
|
||||
if ((m_wr4 & (WR4_SYNC_MODE_MASK | WR4_STOP_BITS_MASK)) == (WR4_SYNC_MODE_SDLC | WR4_STOP_BITS_SYNC) &&
|
||||
(m_tx_flags & (TX_FLAG_DATA_TX | TX_FLAG_CRC_TX)) && (m_tx_hist & 0x1f) == 0x1f)
|
||||
(m_tx_flags & (TX_FLAG_DATA_TX | TX_FLAG_CRC_TX)) && (m_tx_hist & 0x1f) == 0x1f)
|
||||
{
|
||||
// SDLC, sending data/CRC & 5 ones in a row: do zero insertion
|
||||
new_bit = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
bool get_out = false;
|
||||
|
@ -2106,13 +2106,15 @@ void lua_engine::initialize()
|
||||
ui_type["options"] = sol::property([] (mame_ui_manager &m) { return static_cast<core_options *>(&m.options()); });
|
||||
ui_type["line_height"] = sol::property([] (mame_ui_manager &m) { return m.get_line_height(); });
|
||||
ui_type["menu_active"] = sol::property(&mame_ui_manager::is_menu_active);
|
||||
ui_type["show_menu"] = &mame_ui_manager::show_menu;
|
||||
ui_type["ui_active"] = sol::property(&mame_ui_manager::ui_active, &mame_ui_manager::set_ui_active);
|
||||
ui_type["single_step"] = sol::property(&mame_ui_manager::single_step, &mame_ui_manager::set_single_step);
|
||||
ui_type["show_fps"] = sol::property(&mame_ui_manager::show_fps, &mame_ui_manager::set_show_fps);
|
||||
ui_type["show_profiler"] = sol::property(&mame_ui_manager::show_profiler, &mame_ui_manager::set_show_profiler);
|
||||
ui_type["image_display_enabled"] = sol::property(&mame_ui_manager::image_display_enabled, &mame_ui_manager::set_image_display_enabled);
|
||||
|
||||
// undocumented/unsupported
|
||||
ui_type["show_menu"] = &mame_ui_manager::show_menu; // FIXME: this is dangerous - it doesn't give a proper chance for the current UI handler to clean up
|
||||
|
||||
|
||||
/* rom_entry library
|
||||
*
|
||||
|
@ -791,7 +791,8 @@ cassette_image::error cassette_image::legacy_construct(const LegacyWaveFiller *l
|
||||
error err;
|
||||
int length;
|
||||
int sample_count;
|
||||
std::vector<int16_t> samples;
|
||||
std::unique_ptr<int16_t []> samples;
|
||||
std::unique_ptr<uint8_t []> chunk;
|
||||
int pos = 0;
|
||||
uint64_t offset = 0;
|
||||
|
||||
@ -814,16 +815,21 @@ cassette_image::error cassette_image::legacy_construct(const LegacyWaveFiller *l
|
||||
/* determine number of samples */
|
||||
if (args.chunk_sample_calc != nullptr)
|
||||
{
|
||||
if (size > 0x7FFFFFFF)
|
||||
if (size > 0x7fffffff)
|
||||
{
|
||||
err = error::OUT_OF_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
|
||||
LOG_FORMATS("Image size: %x\n", size);
|
||||
std::vector<uint8_t> bytes(size);
|
||||
image_read(&bytes[0], 0, size);
|
||||
sample_count = args.chunk_sample_calc(&bytes[0], (int)size);
|
||||
std::unique_ptr<uint8_t []> bytes(new (std::nothrow) uint8_t [size]);
|
||||
if (!bytes)
|
||||
{
|
||||
err = error::OUT_OF_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
|
||||
image_read(bytes.get(), 0, size);
|
||||
sample_count = args.chunk_sample_calc(bytes.get(), (int)size);
|
||||
|
||||
// chunk_sample_calc functions report errors by returning negative numbers
|
||||
if (sample_count < 0)
|
||||
@ -843,7 +849,12 @@ cassette_image::error cassette_image::legacy_construct(const LegacyWaveFiller *l
|
||||
sample_count += args.header_samples + args.trailer_samples;
|
||||
|
||||
/* allocate a buffer for the completed samples */
|
||||
samples.resize(sample_count);
|
||||
samples.reset(new (std::nothrow) int16_t [sample_count]);
|
||||
if (!samples)
|
||||
{
|
||||
err = error::OUT_OF_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* if there has to be a header */
|
||||
if (args.header_samples > 0)
|
||||
@ -858,14 +869,28 @@ cassette_image::error cassette_image::legacy_construct(const LegacyWaveFiller *l
|
||||
}
|
||||
|
||||
/* convert the file data to samples */
|
||||
chunk.reset(new (std::nothrow) uint8_t [args.chunk_size]);
|
||||
if (!chunk)
|
||||
{
|
||||
err = error::OUT_OF_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
while ((pos < sample_count) && (offset < size))
|
||||
{
|
||||
/* allocate a buffer for the binary data */
|
||||
std::vector<uint8_t> chunk(args.chunk_size);
|
||||
image_read(&chunk[0], offset, args.chunk_size);
|
||||
image_read(chunk.get(), offset, args.chunk_size);
|
||||
offset += args.chunk_size;
|
||||
|
||||
length = args.fill_wave(&samples[pos], args.chunk_size, &chunk[0]);
|
||||
/*
|
||||
This approach is problematic because we don't have control on incomming image size when processing the data
|
||||
(at least in tap implementation).
|
||||
The method sending the size of output (calculated in 'chunk_sample_calc' above) which uses same data as a input but
|
||||
without knowing how much data available in the image. Having wrong header with size bigger than image couses illegal
|
||||
access beyond image data.
|
||||
Desired state is:
|
||||
length = args.fill_wave(&samples[pos], args.chunk_size, chunk.get());
|
||||
aslo the fix for tap is commented out in 'tap_cas_fill_wave'
|
||||
*/
|
||||
length = args.fill_wave(&samples[pos], sample_count - pos, chunk.get());
|
||||
if (length < 0)
|
||||
{
|
||||
err = error::INVALID_IMAGE;
|
||||
@ -875,6 +900,7 @@ cassette_image::error cassette_image::legacy_construct(const LegacyWaveFiller *l
|
||||
if (length == 0)
|
||||
break;
|
||||
}
|
||||
chunk.reset();
|
||||
|
||||
/* if there has to be a trailer */
|
||||
if (args.trailer_samples > 0)
|
||||
|
@ -833,16 +833,19 @@ static int tap_cas_fill_wave( int16_t *buffer, int length, const uint8_t *bytes
|
||||
int16_t *p = buffer;
|
||||
int size = 0;
|
||||
|
||||
while (length > 0)
|
||||
//while (length > 0)
|
||||
while (size < length)
|
||||
{
|
||||
int data_size = get_u16le(&bytes[0]);
|
||||
int pilot_length = (bytes[2] == 0x00) ? 8063 : 3223;
|
||||
LOG_FORMATS("tap_cas_fill_wave: Handling TAP block containing 0x%X bytes\n", data_size);
|
||||
/*
|
||||
length -= data_size;
|
||||
if (length < 0)
|
||||
{
|
||||
data_size += length; // Take as much as we can.
|
||||
}
|
||||
*/
|
||||
bytes += 2;
|
||||
size += tzx_cas_handle_block(&p, bytes, 1000, data_size, 2168, pilot_length, 667, 735, 855, 1710, 8);
|
||||
bytes += data_size;
|
||||
|
@ -2,16 +2,13 @@
|
||||
// copyright-holders:m1macrophage
|
||||
|
||||
/*
|
||||
The Midiverb is a digital delay & reverb unit.
|
||||
The MIDIverb is a digital delay & reverb unit.
|
||||
|
||||
The computer portion of the device is very simple. The firmware runs on a
|
||||
80C31 microcontroller. It reads the 4 buttons, drives the two 7-segment
|
||||
displays, and listens to MIDI for program changes. It also controls which
|
||||
program (effect) is running on the DSP.
|
||||
|
||||
An interesting aspect of the Midiverb is its DSP, which is built out of discrete
|
||||
logic components. This runs custom microcode consisting of 4 instructions.
|
||||
|
||||
The UI is very simple. The user can choose one of 63 effects by using the
|
||||
"up" and "down" buttons on the unit. The effect can also be set via MIDI
|
||||
program changes, and the MIDI channel is configurable ("channel" button). The
|
||||
@ -20,12 +17,18 @@ silence program is also enabled temporarily when switching between effects.
|
||||
Finally, there is a wet/dry control knob. For more information on the audio
|
||||
hardware, see midiverb_state::configure_audio().
|
||||
|
||||
An interesting aspect of the MIDIverb is its DSP, which is built out of discrete
|
||||
logic components and runs custom microcode. Each microcode instruction consists
|
||||
of a 2-bit opcode and 14-bit RAM delta offset. The effects program makes up the
|
||||
top 6 bits of the microcode ROM address, and the DSP just loops over the 128
|
||||
instructions of each program. There are also pre-determined program counter
|
||||
addresses where specific functions are performed (e.g. ADC, DAC). For more info,
|
||||
see midiverb_dsp::sound_stream_update().
|
||||
|
||||
This driver is based on https://www.youtube.com/watch?v=JNPpU08YZjk
|
||||
and https://www.youtube.com/watch?v=5DYbirWuBaU, and is intended as an
|
||||
educational tool.
|
||||
|
||||
TODO: DSP emulation (coming soon).
|
||||
|
||||
Usage notes:
|
||||
|
||||
The driver comes with an interactive layout.
|
||||
@ -43,13 +46,9 @@ Audio inputs are emulated using MAME's sample playback mechanism.
|
||||
- When the emulation is running, press Space to trigger the processing of those
|
||||
files.
|
||||
- Look out for any errors, such as unsupported file format.
|
||||
- If there is distortion, adjust INPUT LEVEL (in the Slider Controls menu).
|
||||
- If there is distortion or crackling, adjust INPUT LEVEL (in the Slider
|
||||
Controls menu).
|
||||
- Use the "DRY/WET MIX" Slider Control to adjust the wet/dry ratio.
|
||||
|
||||
- At the moment, DSP emulation is mostly a passthrough. It just does a
|
||||
12-bit quantization and causes a resampling at its lowish sample rate. But it
|
||||
should still be possible to hear the difference between the dry and wet
|
||||
signals, in part due to all the filtering stages.
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
@ -68,8 +67,9 @@ Audio inputs are emulated using MAME's sample playback mechanism.
|
||||
#include "alesis_midiverb.lh"
|
||||
|
||||
#define LOG_PROGRAM_CHANGE (1U << 1)
|
||||
#define LOG_DSP_EXECUTION (1U << 2)
|
||||
|
||||
#define VERBOSE (LOG_GENERAL | LOG_PROGRAM_CHANGE)
|
||||
#define VERBOSE (LOG_GENERAL)
|
||||
//#define LOG_OUTPUT_FUNC osd_printf_info
|
||||
|
||||
#include "logmacro.h"
|
||||
@ -88,8 +88,18 @@ protected:
|
||||
void sound_stream_update(sound_stream &stream, const std::vector<read_stream_view> &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
private:
|
||||
u16 analog_to_digital(float sample) const;
|
||||
float digital_to_analog(u16 sample) const;
|
||||
|
||||
required_memory_region m_microcode;
|
||||
sound_stream *m_stream = nullptr;
|
||||
|
||||
// State
|
||||
u8 m_program = 0;
|
||||
u16 m_accum = 0;
|
||||
u16 m_reg = 0;
|
||||
u16 m_ram_offset = 0;
|
||||
std::vector<u16> m_ram; // 4 x TMS4416-15 (16K x 4bit). U14, U19, U22, U25.
|
||||
|
||||
static constexpr const int CLOCKS_PER_INSTRUCTION = 2;
|
||||
static constexpr const int INSTRUCTIONS_PER_SAMPLE = 128;
|
||||
@ -101,6 +111,8 @@ DEFINE_DEVICE_TYPE(MIDIVERB_DSP, midiverb_dsp, "midiverb_dsp", "MIDIverb discret
|
||||
midiverb_dsp::midiverb_dsp(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, MIDIVERB_DSP, tag, owner, clock)
|
||||
, device_sound_interface(mconfig, *this)
|
||||
, m_microcode(*this, ":dsp_microcode")
|
||||
, m_ram(0x4000, 0) // 16K
|
||||
{
|
||||
}
|
||||
|
||||
@ -112,7 +124,7 @@ void midiverb_dsp::program_select_w(u8 data)
|
||||
|
||||
m_stream->update();
|
||||
m_program = new_program;
|
||||
LOGMASKED(LOG_PROGRAM_CHANGE, "Program changed to: %d\n", m_program);
|
||||
LOGMASKED(LOG_PROGRAM_CHANGE, "DSP: Program changed to: %d\n", m_program);
|
||||
}
|
||||
|
||||
void midiverb_dsp::device_start()
|
||||
@ -123,10 +135,24 @@ void midiverb_dsp::device_start()
|
||||
m_stream = stream_alloc(1, 2, sample_clock.value());
|
||||
|
||||
save_item(NAME(m_program));
|
||||
save_item(NAME(m_accum));
|
||||
save_item(NAME(m_reg));
|
||||
save_item(NAME(m_ram_offset));
|
||||
save_item(NAME(m_ram));
|
||||
}
|
||||
|
||||
#define LOG_DSP(...) do { \
|
||||
if (sample_i < DEBUG_SAMPLES) \
|
||||
LOGMASKED(LOG_DSP_EXECUTION, __VA_ARGS__); \
|
||||
} while(0)
|
||||
|
||||
void midiverb_dsp::sound_stream_update(sound_stream &stream, const std::vector<read_stream_view> &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
static constexpr const u8 MAX_PC = 0x7f;
|
||||
static constexpr const int DEBUG_SAMPLES = 2;
|
||||
static constexpr const char* const OP_NAME[4] =
|
||||
{ "ADDHF", "LDHF ", "STPOS", "STNEG" };
|
||||
|
||||
assert(inputs.size() == 1);
|
||||
assert(outputs.size() == 2);
|
||||
|
||||
@ -134,28 +160,135 @@ void midiverb_dsp::sound_stream_update(sound_stream &stream, const std::vector<r
|
||||
write_stream_view &left = outputs[0];
|
||||
write_stream_view &right = outputs[1];
|
||||
const int n = in.samples();
|
||||
const u16 rom_base = u16(m_program) << 8;
|
||||
|
||||
for (int i = 0; i < n; ++i)
|
||||
for (int sample_i = 0; sample_i < n; ++sample_i)
|
||||
{
|
||||
// Analog-to-digital conversion is done with a 12-bit DAC+SAR.
|
||||
// Note that samples in the stream are treated as voltages (see
|
||||
// configure_audio()). Convert the voltage to the range: -/+1.
|
||||
const float sample_in = std::clamp(in.get(i), -DAC_MAX_V, DAC_MAX_V) / DAC_MAX_V;
|
||||
// Quantize to 12 bits, keeping in mind that the range is -1 - 1 (reason
|
||||
// for "/ 2"), then convert to 13 bits ("* 2").
|
||||
const s16 quantized = floorf(sample_in * ((1 << 12) / 2 - 1)) * 2;
|
||||
assert(quantized > -4096 && quantized < 4096);
|
||||
u16 rom_address = rom_base + 2 * (MAX_PC - 1);
|
||||
for (u8 pc = 0; pc <= MAX_PC; ++pc)
|
||||
{
|
||||
// Each microcode instruction consists of two bytes. A 2-bit opcode
|
||||
// and a 14-bit RAM offset. Microcode execution is pipelined:
|
||||
// - The RAM offset in each instruction gets added to the current
|
||||
// RAM address *after* the execution of the instruction, so it
|
||||
// affects the RAM access of the next instruction.
|
||||
// - The 2-bit opcode being executed comes from the *previous*
|
||||
// instruction in ROM.
|
||||
// - The "program counter" (whose value is used for some control
|
||||
// signals, see below) leads the instruction currently being
|
||||
// executed.
|
||||
|
||||
// TODO: Implement DSP logic (coming soon).
|
||||
const u8 op = m_microcode->as_u8(rom_address + 1) >> 6;
|
||||
rom_address = rom_base + 2 * ((pc + MAX_PC) & MAX_PC);
|
||||
const u8 ram_row = m_microcode->as_u8(rom_address);
|
||||
const u8 ram_col = m_microcode->as_u8(rom_address + 1) & 0x3f;
|
||||
const u16 ram_offset_delta = (u16(ram_col) << 8) | ram_row;
|
||||
|
||||
// Digital-to-analog conversion uses the 12-bit DAC and 1 extra bit
|
||||
// (LSB), for a total of 13 bits. The extra bit is implemented by
|
||||
// conditionally injecting extra current into the current-to-voltage
|
||||
// converter that follows the DAC.
|
||||
const float sample_out = DAC_MAX_V * float(quantized) / ((1 << 13) / 2 - 1);
|
||||
left.put(i, sample_out);
|
||||
right.put(i, sample_out);
|
||||
// Control signals. Names match those in:
|
||||
// https://www.youtube.com/watch?v=JNPpU08YZjk.
|
||||
const bool mode_rc0 = (pc == 0); // Read from ADC.
|
||||
const bool ld_dac = (pc == 0x60 || pc == 0x70); // Write to DAC.
|
||||
const bool dac_left = (pc == 0x70); // Route DAC to left (instead of right) channel.
|
||||
const bool ld_dsp = !mode_rc0 && !ld_dac; // Write to register.
|
||||
const bool clear_acc = BIT(op, 0); // Clear the accumulator.
|
||||
const bool rd_r0 = (op == 0x02); // Place register contents on the bus.
|
||||
const bool rd_r1 = (op == 0x03); // Place negated register contents on the bus.
|
||||
const bool dram_w = BIT(op, 1) || mode_rc0; // Write (instead of read) RAM.
|
||||
|
||||
u16 bus_value = 0;
|
||||
int num_bus_writes = 0;
|
||||
if (mode_rc0)
|
||||
{
|
||||
bus_value = analog_to_digital(in.get(sample_i));
|
||||
++num_bus_writes;
|
||||
}
|
||||
if (rd_r0)
|
||||
{
|
||||
bus_value = m_reg;
|
||||
++num_bus_writes;
|
||||
}
|
||||
if (rd_r1)
|
||||
{
|
||||
bus_value = ~m_reg;
|
||||
++num_bus_writes;
|
||||
}
|
||||
if (!dram_w)
|
||||
{
|
||||
bus_value = m_ram[m_ram_offset];
|
||||
++num_bus_writes;
|
||||
}
|
||||
if (num_bus_writes == 0)
|
||||
LOG("DSP microcode error: floating bus\n");
|
||||
else if (num_bus_writes > 1)
|
||||
LOG("DSP microcode error: bus conflict %d %d %d %d\n", mode_rc0, rd_r0, rd_r1, !dram_w);
|
||||
|
||||
if (dram_w)
|
||||
m_ram[m_ram_offset] = bus_value;
|
||||
|
||||
if (ld_dac)
|
||||
{
|
||||
if (dac_left)
|
||||
left.put(sample_i, digital_to_analog(bus_value));
|
||||
else
|
||||
right.put(sample_i, digital_to_analog(bus_value));
|
||||
}
|
||||
|
||||
if (clear_acc)
|
||||
m_accum = 0;
|
||||
|
||||
if (ld_dsp)
|
||||
{
|
||||
const u16 sign = BIT(bus_value, 15);
|
||||
m_accum += ((sign << 15) | (bus_value >> 1)) + sign;
|
||||
m_reg = m_accum;
|
||||
}
|
||||
|
||||
LOG_DSP("%04X %02x - DSP OP: %d %s (%04x), A: %6d, R: %6d, bus: %6d, ram: %6d @ %04x",
|
||||
rom_address, pc, op, OP_NAME[op], ram_offset_delta, m_accum,
|
||||
m_reg, bus_value, m_ram[m_ram_offset], m_ram_offset);
|
||||
if (mode_rc0)
|
||||
LOG_DSP(" [ADC]");
|
||||
if (ld_dac)
|
||||
{
|
||||
if (dac_left)
|
||||
LOG_DSP(" [DAC LEFT]");
|
||||
else
|
||||
LOG_DSP(" [DAC RIGHT]");
|
||||
}
|
||||
LOG_DSP("\n");
|
||||
|
||||
m_ram_offset = (m_ram_offset + ram_offset_delta) & (m_ram.size() - 1);
|
||||
}
|
||||
LOG_DSP("\n");
|
||||
}
|
||||
LOGMASKED(LOG_DSP_EXECUTION, "\n");
|
||||
}
|
||||
|
||||
u16 midiverb_dsp::analog_to_digital(float sample) const
|
||||
{
|
||||
// Analog-to-digital conversion is done with a 12-bit DAC+SAR.
|
||||
// Note that samples in the stream are treated as voltages (see
|
||||
// configure_audio()). Convert the voltage to the range: -/+1.
|
||||
const float transformed = std::clamp(sample, -DAC_MAX_V, DAC_MAX_V) / DAC_MAX_V;
|
||||
|
||||
// Quantize to 12 bits, keeping in mind that the range is -1 - 1 (reason
|
||||
// for "/ 2"). Then convert to 13 bits ("* 2"). Bit 0 is always set ("+ 1).
|
||||
const s16 quantized = floorf(transformed * ((1 << 12) / 2 - 1)) * 2 + 1;
|
||||
assert(quantized > -4096 && quantized < 4096);
|
||||
|
||||
return static_cast<u16>(quantized);
|
||||
}
|
||||
|
||||
float midiverb_dsp::digital_to_analog(u16 sample) const
|
||||
{
|
||||
// Digital-to-analog conversion uses the 12-bit DAC and 1 extra bit
|
||||
// (LSB), for a total of 13 bits. The extra bit is implemented by
|
||||
// conditionally injecting extra current into the current-to-voltage
|
||||
// converter that follows the DAC. There is also saturation logic to detect
|
||||
// overflows and underflows, and set the DAC to the max or min value
|
||||
// respectively.
|
||||
const s16 saturated = std::clamp<s16>(static_cast<s16>(sample), -4095, 4095);
|
||||
return DAC_MAX_V * float(saturated) / ((1 << 13) / 2 - 1);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@ -502,17 +635,21 @@ INPUT_PORTS_START(midiverb)
|
||||
PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(midiverb_state::audio_input_play), 0)
|
||||
|
||||
PORT_START("audio_input_level")
|
||||
PORT_ADJUSTER(50, "INPUT LEVEL")
|
||||
PORT_ADJUSTER(90, "INPUT LEVEL")
|
||||
PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(midiverb_state::audio_input_level), 0)
|
||||
INPUT_PORTS_END
|
||||
|
||||
ROM_START(midiverb)
|
||||
ROM_REGION(0x2000, MAINCPU_TAG, 0)
|
||||
// U54. 2764 ROM.
|
||||
ROM_REGION(0x2000, MAINCPU_TAG, 0) // U54. 2764 ROM.
|
||||
ROM_LOAD("mvop_4-7-86.u54", 0x000000, 0x002000, CRC(14d6596d) SHA1(c6dc579d8086556b2dd4909c8deb3c7006293816))
|
||||
|
||||
ROM_REGION(0x4000, "dsp_microcode", 0) // U51, 27256, 32K ROM, but only 16K used.
|
||||
ROM_LOAD("mvobj_2-6-86.u51", 0x000000, 0x004000, CRC(1aa25250) SHA1(ebd7ca265540c3420f4259d0eaefecaf6d95a1bf))
|
||||
ROM_CONTINUE(0x000000, 0x004000) // A14 (pin 27) tied to VCC. Only upper half used.
|
||||
// Seems to have also shipped with a 27128 ROM (16K), with the same
|
||||
// "MVOBJ 2-6-86" label.
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
SYST(1986, midiverb, 0, 0, midiverb, midiverb, midiverb_state, empty_init, "Alesis", "MIDIverb", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
|
||||
SYST(1986, midiverb, 0, 0, midiverb, midiverb, midiverb_state, empty_init, "Alesis", "MIDIverb", MACHINE_SUPPORTS_SAVE)
|
||||
|
@ -416,8 +416,8 @@ public:
|
||||
uint16_t m_genlock_color = 0;
|
||||
|
||||
/* separate 6 in-order bitplanes into 2 x 3-bit bitplanes in two nibbles */
|
||||
// FIXME: we instantiate 256 entries so that it pleases AGA
|
||||
uint8_t m_separate_bitplanes[2][256];
|
||||
// AGA adds extra complexity with PF2OFx, so we need to instantiate at init time
|
||||
std::vector<uint8_t> m_separate_bitplanes[2];
|
||||
|
||||
/* aga */
|
||||
int m_aga_diwhigh_written = 0;
|
||||
@ -429,6 +429,7 @@ public:
|
||||
int m_aga_sprite_fetched_words = 0;
|
||||
int m_aga_sprite_dma_used_words[8]{};
|
||||
|
||||
void video_start_common();
|
||||
DECLARE_VIDEO_START( amiga );
|
||||
DECLARE_VIDEO_START( amiga_aga );
|
||||
void amiga_palette(palette_device &palette) const;
|
||||
|
@ -81,9 +81,24 @@ void amiga_state::amiga_palette(palette_device &palette) const
|
||||
*
|
||||
*************************************/
|
||||
|
||||
void amiga_state::video_start_common()
|
||||
{
|
||||
/* reset the genlock color */
|
||||
m_genlock_color = 0xffff;
|
||||
|
||||
m_sprite_ctl_written = 0;
|
||||
|
||||
m_screen->register_screen_bitmap(m_flickerfixer);
|
||||
m_screen->register_screen_bitmap(m_scanline_bitmap);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER( amiga_state, amiga )
|
||||
{
|
||||
video_start_common();
|
||||
|
||||
/* generate tables that produce the correct playfield color for dual playfield mode */
|
||||
m_separate_bitplanes[0].resize(64);
|
||||
m_separate_bitplanes[1].resize(64);
|
||||
for (int j = 0; j < 64; j++)
|
||||
{
|
||||
int pf1pix = ((j >> 0) & 1) | ((j >> 1) & 2) | ((j >> 2) & 4);
|
||||
@ -92,16 +107,8 @@ VIDEO_START_MEMBER( amiga_state, amiga )
|
||||
m_separate_bitplanes[0][j] = (pf1pix || !pf2pix) ? pf1pix : (pf2pix + 8);
|
||||
m_separate_bitplanes[1][j] = pf2pix ? (pf2pix + 8) : pf1pix;
|
||||
}
|
||||
// TODO: verify usage of values in the 64-255 range
|
||||
// TODO: verify usage of values in the 64-255 range on real HW
|
||||
// (should black out pf1 if j & 0x40, pf2 if j & 0x80)
|
||||
|
||||
/* reset the genlock color */
|
||||
m_genlock_color = 0xffff;
|
||||
|
||||
m_sprite_ctl_written = 0;
|
||||
|
||||
m_screen->register_screen_bitmap(m_flickerfixer);
|
||||
m_screen->register_screen_bitmap(m_scanline_bitmap);
|
||||
}
|
||||
|
||||
|
||||
|
@ -86,15 +86,25 @@ void amiga_state::aga_palette_write(int color_reg, uint16_t data)
|
||||
|
||||
VIDEO_START_MEMBER(amiga_state,amiga_aga)
|
||||
{
|
||||
VIDEO_START_CALL_MEMBER( amiga );
|
||||
video_start_common();
|
||||
|
||||
for (int j = 0; j < 256; j++)
|
||||
// fill the AGA dblpf table, taking bplcon3:pf2ofx into account for offset values
|
||||
m_separate_bitplanes[0].resize(256 * 8);
|
||||
m_separate_bitplanes[1].resize(256 * 8);
|
||||
|
||||
static const int dblpfofs[] = { 0, 2, 4, 8, 16, 32, 64, 128 };
|
||||
|
||||
for (int offset_index = 0; offset_index < 8; offset_index ++)
|
||||
{
|
||||
int pf1pix = ((j >> 0) & 1) | ((j >> 1) & 2) | ((j >> 2) & 4) | ((j >> 3) & 8);
|
||||
int pf2pix = ((j >> 1) & 1) | ((j >> 2) & 2) | ((j >> 3) & 4) | ((j >> 4) & 8);
|
||||
int offset_value = dblpfofs[offset_index];
|
||||
for (int j = 0; j < 256; j++)
|
||||
{
|
||||
int pf1pix = ((j >> 0) & 1) | ((j >> 1) & 2) | ((j >> 2) & 4) | ((j >> 3) & 8);
|
||||
int pf2pix = ((j >> 1) & 1) | ((j >> 2) & 2) | ((j >> 3) & 4) | ((j >> 4) & 8);
|
||||
|
||||
m_separate_bitplanes[0][j] = (pf1pix || !pf2pix) ? pf1pix : (pf2pix + 16);
|
||||
m_separate_bitplanes[1][j] = pf2pix ? (pf2pix + 16) : pf1pix;
|
||||
m_separate_bitplanes[0][j + (offset_index << 8)] = (pf1pix || !pf2pix) ? pf1pix : (pf2pix + offset_value);
|
||||
m_separate_bitplanes[1][j + (offset_index << 8)] = pf2pix ? (pf2pix + offset_value) : pf1pix;
|
||||
}
|
||||
}
|
||||
|
||||
m_aga_diwhigh_written = 0;
|
||||
@ -464,6 +474,8 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
int pf1pri = 0, pf2pri = 0;
|
||||
int planes = 0;
|
||||
int raw_scanline = 0;
|
||||
u8 bplam = 0;
|
||||
u16 pf2ofx = 0;
|
||||
|
||||
uint32_t *dst = nullptr;
|
||||
int ebitoffs = 0, obitoffs = 0;
|
||||
@ -543,7 +555,6 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
// Update 2025: check and resort all these entries
|
||||
// - wbenc30 scrolling in lores mode (fmode=3, expects a +58!, verify ddfstrt / delays)
|
||||
// - sockid_a, alfred gameplay (fmode=1)
|
||||
// - virocp_a (fmode=1, +26)
|
||||
// - ssf2t (fmode=3, wants >+100, scrolling is very offset)
|
||||
// - turbojam gameplay
|
||||
// (fmode=3, unaffected here, may be missing ddfstop bits given the screen masking)
|
||||
@ -551,12 +562,14 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
// - cd32 cdtv:insidino copyright screen (fmode=3)
|
||||
// - cd32 cdtv:labytime intro/tutorial screens
|
||||
// (swaps between fmode=1 and 3, verify ddfstrt / ddfstop)
|
||||
|
||||
const int offset_hack[] = {
|
||||
11,
|
||||
// fmode 1: virocp_a (copyright) +26
|
||||
11,
|
||||
11,
|
||||
// fmode 3: dxgalaga (title) wants +20
|
||||
20
|
||||
// fmode 3: dxgalaga (title) wants +20, fatman_a (title) +24
|
||||
24
|
||||
};
|
||||
const int default_bit_offset[] = { 15, 31, 31, 63 };
|
||||
|
||||
@ -628,6 +641,17 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
// In practice we need to separate bitplane delays & drawing first.
|
||||
//shres = CUSTOM_REG(REG_BPLCON0) & 0x0040;
|
||||
|
||||
// offset table for pf2 when in dualpf
|
||||
// - alfred_a, gameplay background
|
||||
// - slamtilt, main menu cursor
|
||||
// NOTE: val << 8 so we don't need to adjust per-pixel
|
||||
pf2ofx = ((CUSTOM_REG(REG_BPLCON3) >> 10) & 7) << 8;
|
||||
|
||||
// bplam applies xor to bitplane colors (i.e. acting as pal bank)
|
||||
// - aladdin, status bar in gameplay
|
||||
// TODO: implement for ham and dualpf, below
|
||||
bplam = CUSTOM_REG(REG_BPLCON4) >> 8;
|
||||
|
||||
// In AGA Extra Half-Brite applies if this condition is satisfied
|
||||
// (bit 9 of BPLCON2 is KILLEHB)
|
||||
// cfr. bblow_a main menu
|
||||
@ -640,15 +664,16 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
|
||||
/* compute the pixel fetch parameters */
|
||||
// TODO: ECS/AGA can put bit 1 in play here
|
||||
ddf_start_pixel = ( CUSTOM_REG(REG_DDFSTRT) & 0xfc ) * 2;
|
||||
ddf_start_pixel = ( CUSTOM_REG(REG_DDFSTRT) & 0xf8 ) * 2;
|
||||
ddf_start_pixel += hires ? ddf_start_offset_hires[bitplane_fmode] : ddf_start_offset_lores[bitplane_fmode];
|
||||
ddf_stop_pixel = ( CUSTOM_REG(REG_DDFSTOP) & 0xfc ) * 2;
|
||||
ddf_stop_pixel = ( CUSTOM_REG(REG_DDFSTOP) & 0xf8 ) * 2;
|
||||
ddf_stop_pixel += hires ? ddf_stop_offset_hires[bitplane_fmode] : ddf_stop_offset_lores[bitplane_fmode];
|
||||
|
||||
// FIXME: as like OCS/ECS Amiga verify this one
|
||||
if ( ( CUSTOM_REG(REG_DDFSTRT) ^ CUSTOM_REG(REG_DDFSTOP) ) & 0x04 )
|
||||
// - https://github.com/dirkwhoffmann/vAmigaTS/blob/master/Agnus/DDF/DDF/ddf1/ddf1_A500_ECS.JPG
|
||||
// - turbojam (gameplay, fmode 3) wants this, particularly when scrolling left (+15 isn't enough).
|
||||
if ( (CUSTOM_REG(REG_DDFSTRT) & 6) != (CUSTOM_REG(REG_DDFSTOP) & 6))
|
||||
{
|
||||
ddf_stop_pixel += 8;
|
||||
ddf_stop_pixel += defbitoffs;
|
||||
}
|
||||
|
||||
// display window
|
||||
@ -881,6 +906,8 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
/* dual playfield mode */
|
||||
else if (dualpf)
|
||||
{
|
||||
// pf2pri really, overshadows above (i.e. pf1pri -> pf1p2:0)
|
||||
const u8 pf_layer_pri = BIT(CUSTOM_REG(REG_BPLCON2), 6);
|
||||
/* mask out the sprite if it doesn't have priority */
|
||||
pix = sprpix & 0xff;
|
||||
pri = (sprpix >> 12);
|
||||
@ -896,7 +923,7 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
if (pix)
|
||||
dst[x*2+0] = aga_palette[pix];
|
||||
else
|
||||
dst[x*2+0] = aga_palette[m_separate_bitplanes[(CUSTOM_REG(REG_BPLCON2) >> 6) & 1][pfpix0]];
|
||||
dst[x*2+0] = aga_palette[m_separate_bitplanes[pf_layer_pri][pfpix0 | pf2ofx]];
|
||||
|
||||
/* mask out the sprite if it doesn't have priority */
|
||||
pix = sprpix & 0xff;
|
||||
@ -912,7 +939,7 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
if (pix)
|
||||
dst[x*2+1] = aga_palette[pix];
|
||||
else
|
||||
dst[x*2+1] = aga_palette[m_separate_bitplanes[(CUSTOM_REG(REG_BPLCON2) >> 6) & 1][pfpix1]];
|
||||
dst[x*2+1] = aga_palette[m_separate_bitplanes[pf_layer_pri][pfpix1 | pf2ofx]];
|
||||
}
|
||||
|
||||
/* single playfield mode */
|
||||
@ -934,8 +961,8 @@ void amiga_state::aga_render_scanline(bitmap_rgb32 &bitmap, int scanline)
|
||||
{
|
||||
// TODO: does it applies to sprites too?
|
||||
rgb_t *dst_palette = ehb ? m_aga_ehb_palette : aga_palette;
|
||||
dst[x*2+0] = dst_palette[pfpix0];
|
||||
dst[x*2+1] = dst_palette[pfpix1];
|
||||
dst[x*2+0] = dst_palette[pfpix0 ^ bplam];
|
||||
dst[x*2+1] = dst_palette[pfpix1 ^ bplam];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -476,27 +476,19 @@ void macadb_device::portable_update_keyboard()
|
||||
|
||||
bool macadb_device::adb_pollmouse()
|
||||
{
|
||||
s32 NewX, NewY, NewButton;
|
||||
s32 const NewButton = m_mouse0->read() & 0x03;
|
||||
s32 const NewX = m_mouse1->read();
|
||||
s32 const NewY = m_mouse2->read();
|
||||
|
||||
NewButton = m_mouse0->read() & 0x03;
|
||||
NewX = m_mouse1->read();
|
||||
NewY = m_mouse2->read();
|
||||
|
||||
if ((NewX != m_lastmousex) || (NewY != m_lastmousey) || (NewButton != m_lastbutton))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return (NewX != m_lastmousex) || (NewY != m_lastmousey) || (NewButton != m_lastbutton);
|
||||
}
|
||||
|
||||
void macadb_device::adb_accummouse(u8 *MouseX, u8 *MouseY )
|
||||
{
|
||||
int MouseCountX = 0, MouseCountY = 0;
|
||||
int NewX, NewY;
|
||||
|
||||
NewX = m_mouse1->read();
|
||||
NewY = m_mouse2->read();
|
||||
int const NewX = m_mouse1->read();
|
||||
int const NewY = m_mouse2->read();
|
||||
|
||||
// printf("pollmouse: X %d Y %d\n", NewX, NewY);
|
||||
|
||||
@ -538,10 +530,8 @@ void macadb_device::adb_accummouse(u8 *MouseX, u8 *MouseY )
|
||||
|
||||
void macadb_device::adb_talk()
|
||||
{
|
||||
int addr, reg;
|
||||
|
||||
addr = (m_command>>4);
|
||||
reg = (m_command & 3);
|
||||
int const addr = m_command >> 4;
|
||||
int const reg = m_command & 3;
|
||||
|
||||
// printf("Mac sent %x (cmd %d addr %d reg %d mr %d kr %d)\n", m_command, (m_command>>2)&3, addr, reg, m_mouseaddr, m_keybaddr);
|
||||
|
||||
@ -612,10 +602,8 @@ void macadb_device::adb_talk()
|
||||
this->adb_accummouse(&mouseX, &mouseY);
|
||||
}
|
||||
//printf("X %x Y %x\n", mouseX, mouseY);
|
||||
m_buffer[0] = (m_lastbutton & 0x01) ? 0x00 : 0x80;
|
||||
m_buffer[0] |= mouseY & 0x7f;
|
||||
m_buffer[1] = (m_lastbutton & 0x02) ? 0x00 : 0x80;
|
||||
m_buffer[1] |= mouseX & 0x7f;
|
||||
m_buffer[0] = (BIT(~m_lastbutton, 0) << 7) | (mouseY & 0x7f);
|
||||
m_buffer[1] = (BIT(~m_lastbutton, 1) << 7) | (mouseX & 0x7f);
|
||||
|
||||
if ((m_buffer[0] != m_last_mouse[0]) || (m_buffer[1] != m_last_mouse[1]))
|
||||
{
|
||||
|
@ -6064,6 +6064,24 @@ static INPUT_PORTS_START( kotbinyo )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( kotbinyosu )
|
||||
PORT_INCLUDE( kotbinyo )
|
||||
|
||||
PORT_MODIFY("DSW2")
|
||||
PORT_DIPNAME( 0x08, 0x08, "Unknown 2-3" )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x00, "Unknown 2-4" )
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) // Shows Kkot Bi Nyo title regardless of the setting of 2-9
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // Shows Speed Up title, but only if 2-9 is On
|
||||
|
||||
PORT_MODIFY("DSW5")
|
||||
PORT_DIPNAME( 0x08, 0x00, "Unknown 2-9" )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) // Shows Kkot Bi Nyo title regardless of the setting of 2-4
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // Shows Speed Up title, but only if 2-4 is On
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( kotbinsp )
|
||||
PORT_START("SYSTEM")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
@ -10863,6 +10881,31 @@ ROM_START( kotbinyo )
|
||||
ROM_REGION( 0x80000, "oki", 0 ) // samples
|
||||
ROM_LOAD( "snd.1c", 0x00000, 0x40000, CRC(d3a739a7) SHA1(f21009f588202f36e4d4e1ab7566c162b5118424) )
|
||||
ROM_RELOAD( 0x40000, 0x40000 )
|
||||
|
||||
ROM_REGION( 0x104, "plds", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "ampal16l8.7a", 0x000, 0x104, NO_DUMP )
|
||||
ROM_END
|
||||
|
||||
// 9090123-1 PCB. Title can be chosen via DSWs between Kkot Bi Nyo and Speed Up (스피드업)
|
||||
// Speed Up seems to be just the minigames, with the Hanafuda main game disabled.
|
||||
ROM_START( kotbinyosu )
|
||||
ROM_REGION( 0x80000, "maincpu", 0 ) // ! KL5C80 Code !
|
||||
ROM_LOAD( "prg.5b", 0x00000, 0x80000, CRC(ce35efe7) SHA1(4d76d9540936e9de34bfe6ffabd13a44fa892ed7) ) // only this differs, SLDH
|
||||
|
||||
ROM_REGION( 0x280000, "blitter", 0 )
|
||||
ROM_LOAD16_BYTE( "gfx.8b", 0x000000, 0x80000, CRC(126f3591) SHA1(f21236587f555035ec25f1a9f5eb651a533446b2) )
|
||||
ROM_LOAD16_BYTE( "gfx.8c", 0x000001, 0x80000, CRC(ab52b33d) SHA1(05edeb5def0fda9b2028bc64f7484abe0f8705a3) )
|
||||
ROM_LOAD16_BYTE( "gfx.10b", 0x100000, 0x80000, CRC(2e9d35f9) SHA1(a412fbfc400d2ccb308c7d5c6ed0da6080a88ee0) )
|
||||
ROM_LOAD16_BYTE( "gfx.10c", 0x100001, 0x80000, CRC(83851ae1) SHA1(9fbf84d9abc81448105582cea8cdb43cbf82f857) )
|
||||
ROM_LOAD16_BYTE( "gfx.12b", 0x200000, 0x40000, CRC(bf5ae6c2) SHA1(ac22c3e4e954c116e2e33ce2db0250c608f13a71) )
|
||||
ROM_LOAD16_BYTE( "gfx.12c", 0x200001, 0x40000, CRC(2f476026) SHA1(79b62cedd6d703af7b02db3916bb373ad1e7da85) )
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 ) // samples
|
||||
ROM_LOAD( "snd.1c", 0x00000, 0x40000, CRC(d3a739a7) SHA1(f21009f588202f36e4d4e1ab7566c162b5118424) )
|
||||
ROM_RELOAD( 0x40000, 0x40000 )
|
||||
|
||||
ROM_REGION( 0x104, "plds", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "palce16v8h-25.7a", 0x000, 0x104, NO_DUMP ) // locked
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -12426,95 +12469,96 @@ ROM_END
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
GAME( 1992, htengoku, 0, htengoku, htengoku, htengoku_state, empty_init, ROT180, "Dynax", "Hanafuda Hana Tengoku (Japan)", 0 )
|
||||
GAME( 1992, htengoku, 0, htengoku, htengoku, htengoku_state, empty_init, ROT180, "Dynax", "Hanafuda Hana Tengoku (Japan)", 0 )
|
||||
|
||||
GAME( 1992, mmpanic, 0, mmpanic, mmpanic, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "Monkey Mole Panic (USA)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1992, mmpanic, 0, mmpanic, mmpanic, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "Monkey Mole Panic (USA)", MACHINE_NO_COCKTAIL )
|
||||
// "Waiwai Animal Land" (without the Jr.) should be the original Japanese version of Monkey Mole Panic
|
||||
|
||||
GAME( 1993, mjmyorn2, 0, mjmyornt, mjmyorn2, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious Orient Part 2 ~ Exotic Dream ~ (Japan, v1.00)", MACHINE_NO_COCKTAIL ) // no copyright warning, assume Japan from game strings
|
||||
GAME( 1992, mjmyornt, mjmyorn2, mjmyornt, mjmyornt, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious Orient (Japan, v1.00)", MACHINE_NO_COCKTAIL ) // no copyright warning, assume Japan from game strings
|
||||
GAME( 1993, mjmyorn2, 0, mjmyornt, mjmyorn2, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious Orient Part 2 ~ Exotic Dream ~ (Japan, v1.00)", MACHINE_NO_COCKTAIL ) // no copyright warning, assume Japan from game strings
|
||||
GAME( 1992, mjmyornt, mjmyorn2, mjmyornt, mjmyornt, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious Orient (Japan, v1.00)", MACHINE_NO_COCKTAIL ) // no copyright warning, assume Japan from game strings
|
||||
|
||||
GAME( 1993, funkyfig, 0, funkyfig, funkyfig, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "The First Funky Fighter (USA, Canada, Mexico / Japan, set 1)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) // scrolling, priority?
|
||||
GAME( 1993, funkyfiga, funkyfig, funkyfig, funkyfig, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "The First Funky Fighter (USA, Canada, Mexico / Japan, set 2)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) // ""
|
||||
GAME( 1993, funkyfig, 0, funkyfig, funkyfig, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "The First Funky Fighter (USA, Canada, Mexico / Japan, set 1)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) // scrolling, priority?
|
||||
GAME( 1993, funkyfiga, funkyfig, funkyfig, funkyfig, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "The First Funky Fighter (USA, Canada, Mexico / Japan, set 2)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) // ""
|
||||
|
||||
GAME( 1993, quizchq, 0, quizchq, quizchq, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Quiz Channel Question (Japan, Ver 1.00)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1993, quizchql, quizchq, quizchq, quizchq, ddenlovr_state, empty_init, ROT0, "Nakanihon (Laxan license)", "Quiz Channel Question (Taiwan?, Ver 1.23)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1993, quizchqk, quizchq, quizchq, quizchq, ddenlovr_state, empty_init, ROT0, "KM Korea Co, Ltd (official license)", "Quiz Channel Question (Korea, Ver 1.10)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1993, quizchq, 0, quizchq, quizchq, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Quiz Channel Question (Japan, Ver 1.00)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1993, quizchql, quizchq, quizchq, quizchq, ddenlovr_state, empty_init, ROT0, "Nakanihon (Laxan license)", "Quiz Channel Question (Taiwan?, Ver 1.23)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1993, quizchqk, quizchq, quizchq, quizchq, ddenlovr_state, empty_init, ROT0, "KM Korea Co, Ltd (official license)", "Quiz Channel Question (Korea, Ver 1.10)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
|
||||
GAME( 1993, animaljr, 0, mmpanic, animaljr, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "Exciting Animal Land Jr. (USA, Canada, Mexico)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1993, animaljrs, animaljr, mmpanic, animaljr, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "Animalandia Jr. (Spanish)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1993, animaljrj, animaljr, mmpanic, animaljr, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "Waiwai Animal Land Jr. (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1993, animaljr, 0, mmpanic, animaljr, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "Exciting Animal Land Jr. (USA, Canada, Mexico)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1993, animaljrs, animaljr, mmpanic, animaljr, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "Animalandia Jr. (Spanish)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1993, animaljrj, animaljr, mmpanic, animaljr, mmpanic_state, empty_init, ROT0, "Nakanihon / East Technology (Taito license)", "Waiwai Animal Land Jr. (Japan)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1994, mjmyster, 0, mjmyster, mjmyster, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious World (Japan, set 1)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1994, mjmywrld, mjmyster, mjmywrld, mjmyster, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious World (Japan, set 2)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1994, mjmyster, 0, mjmyster, mjmyster, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious World (Japan, set 1)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1994, mjmywrld, mjmyster, mjmywrld, mjmyster, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious World (Japan, set 2)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1994, hginga, 0, hginga, hginga, ddenlovr_state, empty_init, ROT0, "Dynax", "Hanafuda Hana Ginga (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1994, hginga, 0, hginga, hginga, ddenlovr_state, empty_init, ROT0, "Dynax", "Hanafuda Hana Ginga (Japan)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1994, mjmyuniv, 0, mjmyuniv, mjmyster, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious Universe (Japan, D85)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1994, mjmyuniv, 0, mjmyuniv, mjmyster, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious Universe (Japan, D85)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1994, quiz365, 0, quiz365, quiz365, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Quiz 365 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1994, quiz365t, quiz365, quiz365, quiz365, ddenlovr_state, empty_init, ROT0, "Nakanihon / Taito", "Quiz 365 (Hong Kong & Taiwan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1994, quiz365, 0, quiz365, quiz365, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Quiz 365 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1994, quiz365t, quiz365, quiz365, quiz365, ddenlovr_state, empty_init, ROT0, "Nakanihon / Taito", "Quiz 365 (Hong Kong & Taiwan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_UNEMULATED_PROTECTION )
|
||||
|
||||
GAME( 1994, rongrong, 0, rongrong, rongrong, ddenlovr_state, init_rongrong, ROT0, "Nakanihon (Activision license)", "Puzzle Game Rong Rong (Europe)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1994, rongrongj, rongrong, rongrong, rongrong, ddenlovr_state, init_rongrong, ROT0, "Nakanihon (Activision license)", "Puzzle Game Rong Rong (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1994, rongrongg, rongrong, rongrong, rongrong, ddenlovr_state, init_rongrong, ROT0, "Nakanihon (Activision license)", "Puzzle Game Rong Rong (Germany)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1994, rongrong, 0, rongrong, rongrong, ddenlovr_state, init_rongrong, ROT0, "Nakanihon (Activision license)", "Puzzle Game Rong Rong (Europe)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1994, rongrongj, rongrong, rongrong, rongrong, ddenlovr_state, init_rongrong, ROT0, "Nakanihon (Activision license)", "Puzzle Game Rong Rong (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1994, rongrongg, rongrong, rongrong, rongrong, ddenlovr_state, init_rongrong, ROT0, "Nakanihon (Activision license)", "Puzzle Game Rong Rong (Germany)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
|
||||
GAME( 1994, hparadis, 0, hparadis, hparadis, ddenlovr_state, empty_init, ROT0, "Dynax", "Super Hana Paradise (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1994, hparadis, 0, hparadis, hparadis, ddenlovr_state, empty_init, ROT0, "Dynax", "Super Hana Paradise (Japan)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1995, hgokou, 0, hgokou, hgokou, ddenlovr_state, empty_init, ROT0, "Dynax (Alba license)", "Hanafuda Hana Gokou (Japan, ver. B)", MACHINE_NO_COCKTAIL | MACHINE_NOT_WORKING )
|
||||
GAME( 1995, hgokoua, hgokou, hgokbang, hgokou, ddenlovr_state, empty_init, ROT0, "Dynax (Alba license)", "Hanafuda Hana Gokou (Japan, ver. A)", MACHINE_NO_COCKTAIL | MACHINE_NOT_WORKING )
|
||||
GAME( 1995, hgokbang, hgokou, hgokbang, hgokou, ddenlovr_state, empty_init, ROT0, "Dynax", "Hanafuda Hana Gokou Bangaihen (Japan)", MACHINE_NO_COCKTAIL | MACHINE_NOT_WORKING )
|
||||
GAME( 1995, hgokou, 0, hgokou, hgokou, ddenlovr_state, empty_init, ROT0, "Dynax (Alba license)", "Hanafuda Hana Gokou (Japan, ver. B)", MACHINE_NO_COCKTAIL | MACHINE_NOT_WORKING )
|
||||
GAME( 1995, hgokoua, hgokou, hgokbang, hgokou, ddenlovr_state, empty_init, ROT0, "Dynax (Alba license)", "Hanafuda Hana Gokou (Japan, ver. A)", MACHINE_NO_COCKTAIL | MACHINE_NOT_WORKING )
|
||||
GAME( 1995, hgokbang, hgokou, hgokbang, hgokou, ddenlovr_state, empty_init, ROT0, "Dynax", "Hanafuda Hana Gokou Bangaihen (Japan)", MACHINE_NO_COCKTAIL | MACHINE_NOT_WORKING )
|
||||
|
||||
GAME( 1995, mjdchuka, 0, mjchuuka, mjchuuka, hanakanz_state, empty_init, ROT0, "Dynax", "Maque Da Zhonghua Quan (Taiwan, D111)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1995, mjdchuka, 0, mjchuuka, mjchuuka, hanakanz_state, empty_init, ROT0, "Dynax", "Maque Da Zhonghua Quan (Taiwan, D111)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1995, mjschuka, 0, mjschuka, mjschuka, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong Super Dai Chuuka Ken (Japan, D115)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1995, mjschuka, 0, mjschuka, mjschuka, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong Super Dai Chuuka Ken (Japan, D115)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1995, nettoqc, 0, nettoqc, nettoqc, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Nettoh Quiz Champion (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1995, ultrchmp, nettoqc, ultrchmp, ultrchmp, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Se Gye Hweng Dan Ultra Champion (Korea)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1995, ultrchmph, nettoqc, ultrchmp, ultrchmp, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Cheng Ba Shi Jie - Chao Shi Kong Guan Jun (Taiwan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1995, nettoqc, 0, nettoqc, nettoqc, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Nettoh Quiz Champion (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1995, ultrchmp, nettoqc, ultrchmp, ultrchmp, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Se Gye Hweng Dan Ultra Champion (Korea)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1995, ultrchmph, nettoqc, ultrchmp, ultrchmp, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Cheng Ba Shi Jie - Chao Shi Kong Guan Jun (Taiwan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_COLORS )
|
||||
|
||||
GAME( 1995, ddenlovj, 0, ddenlovj, ddenlovj, ddenlovr_state, empty_init, ROT0, "Dynax", "Don Den Lover Vol. 1 - Shiro Kuro Tsukeyo! (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1995, ddenlovrk, ddenlovj, ddenlovrk, ddenlovr, ddenlovr_state, empty_init, ROT0, "Dynax", "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1995, ddenlovrb, ddenlovj, ddenlovr, ddenlovr, ddenlovr_state, empty_init, ROT0, "bootleg", "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea, bootleg)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1996, ddenlovr, ddenlovj, ddenlovr, ddenlovr, ddenlovr_state, empty_init, ROT0, "Dynax", "Don Den Lover Vol. 1 (Hong Kong)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1995, ddenlovj, 0, ddenlovj, ddenlovj, ddenlovr_state, empty_init, ROT0, "Dynax", "Don Den Lover Vol. 1 - Shiro Kuro Tsukeyo! (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1995, ddenlovrk, ddenlovj, ddenlovrk, ddenlovr, ddenlovr_state, empty_init, ROT0, "Dynax", "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1995, ddenlovrb, ddenlovj, ddenlovr, ddenlovr, ddenlovr_state, empty_init, ROT0, "bootleg", "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea, bootleg)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1996, ddenlovr, ddenlovj, ddenlovr, ddenlovr, ddenlovr_state, empty_init, ROT0, "Dynax", "Don Den Lover Vol. 1 (Hong Kong)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1996, hanakanz, 0, hanakanz, hanakanz, hanakanz_state, empty_init, ROT0, "Dynax", "Hana Kanzashi (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1997, kotbinyo, hanakanz, kotbinyo, kotbinyo, hanakanz_state, empty_init, ROT0, "Dynax / Shinwhajin", "Kkot Bi Nyo (Korea)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1996, hanakanz, 0, hanakanz, hanakanz, hanakanz_state, empty_init, ROT0, "Dynax", "Hana Kanzashi (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1997, kotbinyo, hanakanz, kotbinyo, kotbinyo, hanakanz_state, empty_init, ROT0, "Dynax / Shinwhajin", "Kkot Bi Nyo (Korea)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1997, kotbinyosu, hanakanz, kotbinyo, kotbinyosu, hanakanz_state, empty_init, ROT0, "Dynax / Shinwhajin", "Speed Up / Kkot Bi Nyo (Korea)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1997, kotbinsp, 0, kotbinsp, kotbinsp, hanakanz_state, empty_init, ROT0, "Dynax / Shinwhajin", "Kkot Bi Nyo Special (Korea)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1997, kotbinsp, 0, kotbinsp, kotbinsp, hanakanz_state, empty_init, ROT0, "Dynax / Shinwhajin", "Kkot Bi Nyo Special (Korea)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1996, akamaru, 0, akamaru, akamaru, ddenlovr_state, empty_init, ROT0, "Dynax (Nakanihon license)", "Panel & Variety Akamaru Q Joushou Dont-R", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1996, akamaru, 0, akamaru, akamaru, ddenlovr_state, empty_init, ROT0, "Dynax (Nakanihon license)", "Panel & Variety Akamaru Q Joushou Dont-R", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1996, janshinp, 0, janshinp, janshinp, ddenlovr_state, empty_init, ROT0, "Dynax / Sigma", "Mahjong Janshin Plus (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1996, janshinp, 0, janshinp, janshinp, ddenlovr_state, empty_init, ROT0, "Dynax / Sigma", "Mahjong Janshin Plus (Japan)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1996, dtoyoken, 0, dtoyoken, dtoyoken, ddenlovr_state, empty_init, ROT0, "Dynax / Sigma", "Mahjong Dai Touyouken (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1996, dtoyoken, 0, dtoyoken, dtoyoken, ddenlovr_state, empty_init, ROT0, "Dynax / Sigma", "Mahjong Dai Touyouken (Japan)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1996, sryudens, 0, sryudens, sryudens, ddenlovr_state, empty_init, ROT0, "Dynax / Face", "Mahjong Seiryu Densetsu (Japan, NM502)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
|
||||
GAME( 1996, sryudens, 0, sryudens, sryudens, ddenlovr_state, empty_init, ROT0, "Dynax / Face", "Mahjong Seiryu Densetsu (Japan, NM502)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
GAME( 1996, seljan2, 0, seljan2, seljan2, ddenlovr_state, empty_init, ROT0, "Dynax / Face", "Return Of Sel Jan II (Japan, NM557)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
|
||||
GAME( 1996, seljan2a, seljan2, sryudens, seljan2, ddenlovr_state, empty_init, ROT0, "Dynax / Face", "Return Of Sel Jan II (Japan, NM508)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
|
||||
GAME( 1996, seljan2, 0, seljan2, seljan2, ddenlovr_state, empty_init, ROT0, "Dynax / Face", "Return Of Sel Jan II (Japan, NM557)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
|
||||
GAME( 1996, seljan2a, seljan2, sryudens, seljan2, ddenlovr_state, empty_init, ROT0, "Dynax / Face", "Return Of Sel Jan II (Japan, NM508)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
GAME( 1996, mjflove, 0, mjflove, mjflove, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Mahjong Fantasic Love (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
|
||||
GAME( 1996, mjflove, 0, mjflove, mjflove, ddenlovr_state, empty_init, ROT0, "Nakanihon", "Mahjong Fantasic Love (Japan)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
GAME( 1997, mjmyorntr, 0, mjmyorntr, mjschuka, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious Orient Returns (Japan, v1.00)", MACHINE_NO_COCKTAIL ) // no copyright warning, assume Japan from game strings
|
||||
GAME( 1997, mjmyorntr, 0, mjmyorntr, mjschuka, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious Orient Returns (Japan, v1.00)", MACHINE_NO_COCKTAIL ) // no copyright warning, assume Japan from game strings
|
||||
|
||||
GAME( 1997, hkagerou, 0, hkagerou, hkagerou, hanakanz_state, empty_init, ROT0, "Nakanihon / Dynax", "Hana Kagerou (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1997, hkagerou, 0, hkagerou, hkagerou, hanakanz_state, empty_init, ROT0, "Nakanihon / Dynax", "Hana Kagerou (Japan)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1998, mjchuuka, 0, mjchuuka, mjchuuka, hanakanz_state, empty_init, ROT0, "Dynax", "Maque Zhonghua Ernu (Taiwan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1998, mjchuuka, 0, mjchuuka, mjchuuka, hanakanz_state, empty_init, ROT0, "Dynax", "Maque Zhonghua Ernu (Taiwan)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1998, mjreach1, 0, mjreach1, mjreach1, hanakanz_state, empty_init, ROT0, "Nihon System", "Mahjong Reach Ippatsu (Japan)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1998, mjreach1, 0, mjreach1, mjreach1, hanakanz_state, empty_init, ROT0, "Nihon System", "Mahjong Reach Ippatsu (Japan)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 1999, jongtei, 0, jongtei, jongtei, hanakanz_state, empty_init, ROT0, "Dynax", "Mahjong Jong-Tei (Japan, NM532-01)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 2000, jongteia, jongtei, jongteia, jongtei, hanakanz_state, empty_init, ROT0, "Dynax (Techno-Top license)", "Mahjong Jong-Tei (Japan, Techno-Top license)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 1999, jongtei, 0, jongtei, jongtei, hanakanz_state, empty_init, ROT0, "Dynax", "Mahjong Jong-Tei (Japan, NM532-01)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 2000, jongteia, jongtei, jongteia, jongtei, hanakanz_state, empty_init, ROT0, "Dynax (Techno-Top license)", "Mahjong Jong-Tei (Japan, Techno-Top license)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 2000, mjgnight, 0, mjgnight, mjgnight, hanakanz_state, empty_init, ROT0, "Techno-Top", "Mahjong Gorgeous Night (Japan, TSM003-01)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 2000, mjgnight, 0, mjgnight, mjgnight, hanakanz_state, empty_init, ROT0, "Techno-Top", "Mahjong Gorgeous Night (Japan, TSM003-01)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 2000, hnrose, 0, hnrose, daimyojn, hanakanz_state, empty_init, ROT0, "Techno-Top", "Hana Night Rose (Japan, TSM008-04)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL )
|
||||
GAME( 2000, hnrose, 0, hnrose, daimyojn, hanakanz_state, empty_init, ROT0, "Techno-Top", "Hana Night Rose (Japan, TSM008-04)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 2001, daireach, 0, daireach, seljan2, hanakanz_state, empty_init, ROT0, "Techno-Top", "Mahjong Dai-Reach (Japan, TSM012-C01)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL )
|
||||
GAME( 2001, daireach, 0, daireach, seljan2, hanakanz_state, empty_init, ROT0, "Techno-Top", "Mahjong Dai-Reach (Japan, TSM012-C01)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 2002, daimyojn, 0, daimyojn, daimyojn, hanakanz_state, empty_init, ROT0, "Dynax / Techno-Top / Techno-Planning", "Mahjong Daimyojin (Japan, T017-PB-00)", MACHINE_NO_COCKTAIL )
|
||||
GAME( 2002, daimyojn, 0, daimyojn, daimyojn, hanakanz_state, empty_init, ROT0, "Dynax / Techno-Top / Techno-Planning", "Mahjong Daimyojin (Japan, T017-PB-00)", MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 2002, mjtenho, 0, daimyojn, daimyojn, hanakanz_state, empty_init, ROT0, "Techno-Top", "Mahjong Tenho (Japan, P016B-000)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL )
|
||||
GAME( 2002, mjtenho, 0, daimyojn, daimyojn, hanakanz_state, empty_init, ROT0, "Techno-Top", "Mahjong Tenho (Japan, P016B-000)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL )
|
||||
|
||||
GAME( 2004, momotaro, 0, daimyojn, daimyojn, hanakanz_state, init_momotaro, ROT0, "Techno-Top", "Mahjong Momotarou (Japan, T027-RB-01)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
|
||||
GAME( 2004, momotaro, 0, daimyojn, daimyojn, hanakanz_state, init_momotaro, ROT0, "Techno-Top", "Mahjong Momotarou (Japan, T027-RB-01)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
|
||||
|
201
src/mame/excellent/es8906.cpp
Normal file
201
src/mame/excellent/es8906.cpp
Normal file
@ -0,0 +1,201 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:
|
||||
|
||||
/*
|
||||
Excellent System's ES-8906B PCB
|
||||
|
||||
Main components:
|
||||
R6502AP CPU
|
||||
6116ALSP-12 RAM (near CPU)
|
||||
20.0000 MHz XTAL (near CPU)
|
||||
HD46505SP CRTC
|
||||
Excellent ES-8712 custom
|
||||
4x 6116ALSP-12 RAM (near ES-8712)
|
||||
4x bank of 8 DIP switches (SW2-5)
|
||||
reset button (SW1)
|
||||
NE555P (near SW1)
|
||||
|
||||
TODO: everything
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "sound/es8712.h"
|
||||
#include "video/mc6845.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class es8906_state : public driver_device
|
||||
{
|
||||
public:
|
||||
es8906_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_screen(*this, "screen"),
|
||||
m_gfxdecode(*this, "gfxdecode")
|
||||
{ }
|
||||
|
||||
void es8906(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void video_start() override ATTR_COLD;
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void program_map(address_map &map) ATTR_COLD;
|
||||
};
|
||||
|
||||
|
||||
void es8906_state::video_start()
|
||||
{
|
||||
}
|
||||
|
||||
uint32_t es8906_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void es8906_state::program_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
|
||||
map(0x0000, 0x07ff).ram();
|
||||
map(0x0800, 0x0800).w("crtc", FUNC(hd6845s_device::address_w));
|
||||
map(0x0801, 0x0801).rw("crtc", FUNC(hd6845s_device::register_r), FUNC(hd6845s_device::register_w));
|
||||
map(0x1000, 0x2fff).ram();
|
||||
map(0x8000, 0xffff).rom();
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START( dream9 )
|
||||
PORT_START("IN0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("SW2")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW2:1")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW2:2")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW2:3")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW2:4")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW2:5")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW2:6")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW2:7")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW2:8")
|
||||
|
||||
PORT_START("SW3")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW3:1")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW3:2")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW3:3")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW3:4")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW3:5")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW3:6")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW3:7")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW3:8")
|
||||
|
||||
PORT_START("SW4")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW4:1")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW4:2")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW4:3")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW4:4")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW4:5")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW4:6")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW4:7")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW4:8")
|
||||
|
||||
PORT_START("SW5")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW5:1")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW5:2")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW5:3")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW5:4")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW5:5")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW5:6")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW5:7")
|
||||
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW5:8")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static GFXDECODE_START( gfx_es8906 )
|
||||
GFXDECODE_ENTRY( "tiles1", 0, gfx_8x8x4_planar, 0, 16 )
|
||||
GFXDECODE_ENTRY( "tiles2", 0, gfx_8x8x4_planar, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
void es8906_state::es8906(machine_config &config)
|
||||
{
|
||||
M6502(config, m_maincpu, 20_MHz_XTAL / 10); // TODO: divider not verified
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &es8906_state::program_map);
|
||||
|
||||
hd6845s_device &crtc(HD6845S(config, "crtc", 20_MHz_XTAL / 10)); // TODO: verify
|
||||
crtc.set_screen(m_screen);
|
||||
crtc.set_show_border_area(false);
|
||||
crtc.set_char_width(8);
|
||||
crtc.out_vsync_callback().set_inputline(m_maincpu, 0);
|
||||
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER); // TODO: everything
|
||||
m_screen->set_refresh_hz(60);
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
m_screen->set_size(40*8, 32*8);
|
||||
m_screen->set_visarea(0*8, 40*8-1, 2*8, 30*8-1);
|
||||
m_screen->set_screen_update(FUNC(es8906_state::screen_update));
|
||||
m_screen->set_palette("palette");
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, "palette", gfx_es8906);
|
||||
PALETTE(config, "palette", palette_device::RGB_444_PROMS, "proms", 256); // TODO
|
||||
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
|
||||
ES8712(config, "essnd", 0);
|
||||
}
|
||||
|
||||
|
||||
ROM_START( dream9 ) // (C)1989 EXCELLENT SYSTEM SUPER 9 Ver1.52 PROGRAM by KAY/AMTECH Feb,6 1990, but pics show "Dream 9"
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "d5-00_excellent.3h", 0x00000, 0x10000, CRC(7c0ad390) SHA1(b173f7d4521a4bea4246b988e6b4fce179ac12bc) )
|
||||
|
||||
ROM_REGION( 0x20000, "tiles1", 0 ) // all labels have "エクセレント システム" (means "Excellent System") before what's below
|
||||
ROM_LOAD( "9l.9l", 0x00000, 0x10000, CRC(63692c62) SHA1(ef06ffe4204b0c1e40f9685b62f403b94a9b6693) )
|
||||
ROM_LOAD( "11l.11l", 0x10000, 0x10000, CRC(9251d1a6) SHA1(ccce3240d825e7611a4e4412b4f37710d0957179) )
|
||||
|
||||
ROM_REGION( 0x20000, "tiles2", 0 ) // idem
|
||||
ROM_LOAD( "12l.12l", 0x00000, 0x10000, CRC(25395909) SHA1(d5e8caac642847450896a855e293431ad6620a77) )
|
||||
ROM_LOAD( "14l.14l", 0x10000, 0x10000, CRC(45757954) SHA1(bda96f437e5b65058e2f068b73998bad4b0bd5a3) )
|
||||
|
||||
ROM_REGION( 0x300, "proms", 0 )
|
||||
ROM_LOAD( "r.11b", 0x0000, 0x0100, CRC(b41df116) SHA1(5cae3e6c70775ad63bccbfc4847b4feee5b79ddf) )
|
||||
ROM_LOAD( "g.12b", 0x0100, 0x0100, CRC(70ac57cd) SHA1(fe238c363f09f20cdc1c6f7f6279201671664750) )
|
||||
ROM_LOAD( "b.13b", 0x0200, 0x0100, CRC(99458711) SHA1(0be119f928b9085e36056b9b6b7e8623765eef44) )
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
GAME( 1990, dream9, 0, es8906, dream9, es8906_state, empty_init, ROT0, "Excellent System", "Dream 9 (v1.52)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
|
@ -4107,9 +4107,8 @@ GAME( 1996, daiskiss, konamigx, konamigx, gokuparo, konamigx_state, init_k
|
||||
|
||||
GAME( 1996, tokkae, konamigx, konamigx_6bpp, tokkae, konamigx_state, init_konamigx, ROT0, "Konami", "Taisen Tokkae-dama (ver JAA)", MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
// protection controls player ship direction in attract mode - doesn't impact playability
|
||||
GAME( 1996, salmndr2, konamigx, salmndr2, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Salamander 2 (ver JAA)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1996, salmndr2a, salmndr2, salmndr2, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Salamander 2 (ver AAB)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_UNEMULATED_PROTECTION )
|
||||
GAME( 1996, salmndr2, konamigx, salmndr2, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Salamander 2 (ver JAA)", MACHINE_IMPERFECT_GRAPHICS )
|
||||
GAME( 1996, salmndr2a, salmndr2, salmndr2, gokuparo, konamigx_state, init_konamigx, ROT0, "Konami", "Salamander 2 (ver AAB)", MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
// bad sprite colours, part of tilemap gets blanked out when a game starts (might be more protection)
|
||||
GAME( 1997, winspike, konamigx, winspike, common, konamigx_state, init_konamigx, ROT0, "Konami", "Winning Spike (ver EAA)", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
@ -1,633 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
copyright-holders:Felipe Sanches, m1macrophage
|
||||
-->
|
||||
<mamelayout version="2">
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="red_led" defstate="0">
|
||||
<rect state="1">
|
||||
<color red="1" green="0.0" blue="0.0" />
|
||||
</rect>
|
||||
<rect state="0">
|
||||
<color red="0.2" green="0.0" blue="0.0" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="cpanel">
|
||||
<rect><color red="0.13" green="0.13" blue="0.11"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="clear_rect">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="grey_rect">
|
||||
<rect><color red="0.4" green="0.4" blue="0.4" /></rect>
|
||||
</element>
|
||||
|
||||
<element name="brown_line">
|
||||
<rect><color red="0.72" green="0.45" blue="0.13" /></rect>
|
||||
</element>
|
||||
|
||||
<element name="light_grey_disk">
|
||||
<disk><color red="0.2" green="0.2" blue="0.2"/></disk>
|
||||
</element>
|
||||
|
||||
<element name="dark_grey_disk">
|
||||
<disk><color red="0.1" green="0.1" blue="0.1"/></disk>
|
||||
</element>
|
||||
|
||||
<element name="slider-well">
|
||||
<rect><color red="0.04" green="0.05" blue="0.05"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="slider-wider-well">
|
||||
<rect><color red="0.13" green="0.15" blue="0.15"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="slider-knob">
|
||||
<rect><color red="0.18" green="0.2" blue="0.18"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="lcd_border">
|
||||
<rect><color red="0.06" green="0.06" blue="0.04"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="lcd_bg">
|
||||
<rect><color red="0.62" green="0.71" blue="0.53"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="button">
|
||||
<rect state="0"><color red="0.25" green="0.25" blue="0.25"/></rect>
|
||||
<rect state="1"><color red="0.5" green="0.5" blue="0.5"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="tone_display_text"><text string="TONE DISPLAY"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="midi_out_text"><text string="MIDI OUT"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="effect_ctrl_text"><text string="EFFECT/CTRL"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="part_text"><text string="PART"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="user_text"><text string="USER"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="f1_text"><text string="F1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="f2_text"><text string="F2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="f3_text"><text string="F3"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="f4_text"><text string="F4"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="f5_text"><text string="F5"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="exit_text"><text string="EXIT"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="dec_text"><text string="DEC"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="del_text"><text string="DEL"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="inc_text"><text string="INC"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="ins_text"><text string="INS"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="tone_palette_text"><text string="TONE PALETTE"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="lower_text"><text string="LOWER"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="upper_text"><text string="UPPER"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="level_text"><text string="LEVEL"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="pan_text"><text string="PAN"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="tuning_text"><text string="TUNING"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="cutoff_text"><text string="CUTOFF"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="resonance_text"><text string="RESONANCE"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="attack_text"><text string="ATTACK"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="release_text"><text string="RELEASE"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="solo_text"><text string="SOLO"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="portamento_text"><text string="PORTAMENTO"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="mode_text"><text string="MODE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="play_text"><text string="PLAY"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="edit_text"><text string="EDIT"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="pcm_card_text"><text string="PCM CARD"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="panic_text"><text string="PANIC"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="rom_play_text"><text string="ROM PLAY"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="lower_1_text"><text string="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="lower_2_text"><text string="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="upper_3_text"><text string="3"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="upper_4_text"><text string="4"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="tone_zone_select_text"><text string="TONE/ZONE SELECT"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="performance_text"><text string="PERFORMANCE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="patch_text"><text string="PATCH"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="tone_text"><text string="TONE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="a_slash_text"><text string="A/"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="b_text"><text string="B"><color red="1.0" green="0.2" blue="0.2" /></text></element>
|
||||
<element name="int_slash_text"><text string="INT/"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="card_text"><text string="CARD"><color red="1.0" green="0.2" blue="0.2" /></text></element>
|
||||
<element name="command_text"><text string="COMMAND"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="write_text"><text string="WRITE"><color red="1.0" green="0.2" blue="0.2" /></text></element>
|
||||
<element name="enter_text"><text string="ENTER"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="caps_text"><text string="CAPS"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="space_text"><text string="SPACE"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="a_b_text"><text string="A B"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="c_d_text"><text string="C D"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="e_f_text"><text string="E F"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="g_h_text"><text string="G H"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="i_j_text"><text string="I J"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="k_l_text"><text string="K L"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="bank_text"><text string="BANK"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="1_text"><text string="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="2_text"><text string="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="3_text"><text string="3"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="4_text"><text string="4"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="5_text"><text string="5"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="6_text"><text string="6"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="7_text"><text string="7"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="8_text"><text string="8"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="m_n_text"><text string="M N"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="o_p_text"><text string="O P"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="q_r_text"><text string="Q R"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="s_t_text"><text string="S T"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="u_v_text"><text string="U V"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="dash_w_text"><text string="- W"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="9_x_text"><text string="9 X"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="0_y_text"><text string="0 Y"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="1_z_text"><text string="1 Z"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="2_slash_text"><text string="2 /"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="3_plus_text"><text string="3 +"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="4_times_text"><text string="4 *"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="5_hash_text"><text string="5 #"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="6_dot_text"><text string="6 ."><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="7_comma_text"><text string="7 ,"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="8_exclam_text"><text string="8 !"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="number_text"><text string="NUMBER"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="value_text"><text string="VALUE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
|
||||
<element name="double_page_icon_grey">
|
||||
<image><data><![CDATA[
|
||||
<svg width="11" height="12" viewBox="0 0 2.910422 3.175">
|
||||
<path style="stroke:#d1d1d1;fill:none;stroke-width:0.29;" d="m 1.66,0.17 -1.52,0.4 V 2.9 l 1.52,-0.4 z m -0.4,2.52 v 0.3 l 1.52,-0.4 V 0.27 l -1.2,0.3" />
|
||||
</svg>
|
||||
]]></data></image>
|
||||
</element>
|
||||
|
||||
<element name="double_page_icon_brown">
|
||||
<image><data><![CDATA[
|
||||
<svg width="11" height="12" viewBox="0 0 2.910422 3.175">
|
||||
<path style="stroke:#b77222;fill:none;stroke-width:0.29;" d="m 1.66,0.17 -1.52,0.4 V 2.9 l 1.52,-0.4 z m -0.4,2.52 v 0.3 l 1.52,-0.4 V 0.27 l -1.2,0.3" />
|
||||
</svg>
|
||||
]]></data></image>
|
||||
</element>
|
||||
|
||||
<element name="triple_page_icon_grey">
|
||||
<image><data><![CDATA[
|
||||
<svg width="15" height="12" viewBox="0 0 4.3750049 3.500126">
|
||||
<path style="stroke:#d1d1d1;fill:none;stroke-width:0.29" d="M 2.57,3 V 3.3 L 4.23,2.9 V 0.4 L 3,0.7 M 1.8,0.18 0.15,0.6 V 3.1 L 1.8,2.68 Z M 1.36,2.89 V 3.2 L 3,2.78 V 0.29 L 1.8,0.58" />
|
||||
</svg>
|
||||
]]></data></image>
|
||||
</element>
|
||||
|
||||
|
||||
<element name="grey_arrows">
|
||||
<image><data><![CDATA[
|
||||
<svg width="90" height="110" viewBox="0 0 23.8125 29.1">
|
||||
<path style="fill:#d1d1d1;stroke-width:0.264" d="m 13.23,25.43 -1.32,3.67 -1.32,-3.67 z m 0,-21.76 L 11.9,0 10.58,3.67 Z m 6.88,9.94 3.7,1.3 -3.7,1.3 z m -16.4,0 L 0,14.92 3.7,16.23 Z" />
|
||||
</svg>
|
||||
]]></data></image>
|
||||
</element>
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout">
|
||||
<bounds left="0" right="1048" top="0" bottom="524" />
|
||||
|
||||
<element ref="cpanel"><bounds x="8" y="8" width="1032" height="300" /></element>
|
||||
<element ref="lcd_border"><bounds x="178" y="16" width="632" height="200" /></element>
|
||||
<element ref="lcd_bg"><bounds x="254" y="48" width="488" height="136" /></element>
|
||||
<screen index="0"><bounds x="258" y="52" width="480" height="128" /></screen>
|
||||
|
||||
<element ref="cpanel"><bounds x="8" y="316" width="464" height="200" /></element>
|
||||
|
||||
<element ref="cpanel"><bounds x="480" y="316" width="560" height="200" /></element>
|
||||
<!-- white rect around "performance ... int/card" labels-->
|
||||
<element ref="clear_rect"><bounds x="497" y="363" width="244" height="13" /></element>
|
||||
<element ref="cpanel"><bounds x="498" y="364" width="242" height="11" /></element>
|
||||
<!-- white rect around "command write enter" labels-->
|
||||
<element ref="clear_rect"><bounds x="743" y="363" width="138" height="13" /></element>
|
||||
<element ref="cpanel"><bounds x="744" y="364" width="136" height="11" /></element>
|
||||
<!-- white line over "patch tone a/b" labels-->
|
||||
<element ref="clear_rect"><bounds x="555" y="365" width="132" height="1" /></element>
|
||||
|
||||
|
||||
<element ref="tone_display_text"><bounds x="39" y="92" width="69" height="10"/></element>
|
||||
<element ref="double_page_icon_grey"><bounds x="112" y="90" width="11" height="12"/></element>
|
||||
|
||||
<element ref="midi_out_text"><bounds x="51" y="140" width="47" height="10"/></element>
|
||||
<element ref="double_page_icon_grey"><bounds x="102" y="138" width="11" height="12"/></element>
|
||||
|
||||
<element ref="effect_ctrl_text"><bounds x="45" y="188" width="64" height="10"/></element>
|
||||
<element ref="triple_page_icon_grey"><bounds x="113" y="185" width="15" height="12"/></element>
|
||||
|
||||
<element ref="part_text"><bounds x="62" y="236" width="25" height="10"/></element>
|
||||
<element ref="double_page_icon_grey"><bounds x="90" y="235" width="11" height="12"/></element>
|
||||
|
||||
<element ref="user_text"><bounds x="194" y="236" width="26" height="10"/></element>
|
||||
<element ref="f1_text"><bounds x="309" y="236" width="11" height="10"/></element>
|
||||
<element ref="f2_text"><bounds x="399" y="236" width="11" height="10"/></element>
|
||||
<element ref="f3_text"><bounds x="489" y="236" width="11" height="10"/></element>
|
||||
<element ref="f4_text"><bounds x="579" y="236" width="11" height="10"/></element>
|
||||
<element ref="f5_text"><bounds x="669" y="236" width="11" height="10"/></element>
|
||||
<element ref="exit_text"><bounds x="770" y="236" width="22" height="10"/></element>
|
||||
|
||||
<element ref="grey_arrows"><bounds x="894" y="89" width="90" height="110"/></element>
|
||||
|
||||
<element ref="dec_text"><bounds x="891" y="236" width="19" height="10"/></element>
|
||||
<element ref="del_text"><bounds x="891" y="273" width="18" height="10"/></element>
|
||||
<element ref="inc_text"><bounds x="968" y="236" width="16" height="10"/></element>
|
||||
<element ref="ins_text"><bounds x="968" y="273" width="16" height="10"/></element>
|
||||
|
||||
|
||||
<element ref="brown_line"><bounds x="31" y="336" width="173" height="1" /></element>
|
||||
<element ref="brown_line"><bounds x="271" y="336" width="177" height="1" /></element>
|
||||
<element ref="tone_palette_text"><bounds x="206" y="331" width="62" height="9"/></element>
|
||||
|
||||
<element ref="brown_line"><bounds x="200" y="346" width="39" height="1" /></element>
|
||||
<element ref="brown_line"><bounds x="273" y="346" width="39" height="1" /></element>
|
||||
<element ref="lower_text"><bounds x="242" y="341" width="29" height="9"/></element>
|
||||
|
||||
<element ref="brown_line"><bounds x="337" y="346" width="39" height="1" /></element>
|
||||
<element ref="brown_line"><bounds x="409" y="346" width="39" height="1" /></element>
|
||||
<element ref="upper_text"><bounds x="379" y="341" width="27" height="9"/></element>
|
||||
|
||||
|
||||
<element ref="slider-wider-well" id="SLIDER4"><bounds x="200" y="349" width="43" height="97"/></element>
|
||||
<element ref="slider-well"><bounds x="217" y="357" width="10" height="82"/></element>
|
||||
<element ref="slider-knob">
|
||||
<animate inputtag="SLIDER4" inputmask="0x7f"/>
|
||||
<bounds state="100" x="203" y="352" width="37" height="24"/>
|
||||
<bounds state="0" x="203" y="417" width="37" height="24"/>
|
||||
</element>
|
||||
|
||||
<element ref="slider-wider-well" id="SLIDER5"><bounds x="269" y="349" width="43" height="97"/></element>
|
||||
<element ref="slider-well"><bounds x="286" y="357" width="10" height="82"/></element>
|
||||
<element ref="slider-knob">
|
||||
<animate inputtag="SLIDER5" inputmask="0x7f"/>
|
||||
<bounds state="100" x="272" y="352" width="37" height="24"/>
|
||||
<bounds state="0" x="272" y="417" width="37" height="24"/>
|
||||
</element>
|
||||
|
||||
<element ref="slider-wider-well" id="SLIDER6"><bounds x="337" y="349" width="43" height="97"/></element>
|
||||
<element ref="slider-well"><bounds x="354" y="357" width="10" height="82"/></element>
|
||||
<element ref="slider-knob">
|
||||
<animate inputtag="SLIDER6" inputmask="0x7f"/>
|
||||
<bounds state="100" x="340" y="352" width="37" height="24"/>
|
||||
<bounds state="0" x="340" y="417" width="37" height="24"/>
|
||||
</element>
|
||||
|
||||
<element ref="slider-wider-well" id="SLIDER7"><bounds x="405" y="349" width="43" height="97"/></element>
|
||||
<element ref="slider-well"><bounds x="422" y="357" width="10" height="82"/></element>
|
||||
<element ref="slider-knob">
|
||||
<animate inputtag="SLIDER7" inputmask="0x7f"/>
|
||||
<bounds state="100" x="408" y="352" width="37" height="24"/>
|
||||
<bounds state="0" x="408" y="417" width="37" height="24"/>
|
||||
</element>
|
||||
|
||||
|
||||
<element ref="lower_1_text"><bounds x="220" y="455" width="6" height="10"/></element>
|
||||
<element ref="lower_2_text"><bounds x="287" y="455" width="6" height="10"/></element>
|
||||
<element ref="upper_3_text"><bounds x="355" y="455" width="6" height="10"/></element>
|
||||
<element ref="upper_4_text"><bounds x="423" y="455" width="6" height="10"/></element>
|
||||
|
||||
<element ref="clear_rect"><bounds x="200" y="481" width="82" height="1" /></element>
|
||||
<element ref="clear_rect"><bounds x="366" y="481" width="82" height="1" /></element>
|
||||
<element ref="tone_zone_select_text"><bounds x="281" y="480" width="87" height="9"/></element>
|
||||
|
||||
<element ref="clear_rect"><bounds x="30" y="455" width="54" height="1" /></element>
|
||||
<element ref="clear_rect"><bounds x="109" y="455" width="55" height="1" /></element>
|
||||
<element ref="mode_text"><bounds x="86" y="450" width="21" height="8"/></element>
|
||||
|
||||
<element ref="level_text"><bounds x="40" y="368" width="19" height="8"/></element>
|
||||
<element ref="cutoff_text"><bounds x="37" y="398" width="24" height="8"/></element>
|
||||
<element ref="solo_text"><bounds x="41" y="428" width="16" height="8"/></element>
|
||||
<element ref="play_text"><bounds x="42" y="458" width="15" height="8"/></element>
|
||||
|
||||
<element ref="pan_text"><bounds x="91" y="368" width="12" height="8"/></element>
|
||||
<element ref="resonance_text"><bounds x="78" y="398" width="38" height="8"/></element>
|
||||
<element ref="portamento_text"><bounds x="76" y="428" width="43" height="8"/></element>
|
||||
<element ref="edit_text"><bounds x="91" y="458" width="14" height="8"/></element>
|
||||
|
||||
<element ref="tuning_text"><bounds x="128" y="368" width="23" height="8"/></element>
|
||||
<element ref="double_page_icon_brown"><bounds x="154" y="367" width="7" height="8"/></element>
|
||||
|
||||
<element ref="attack_text"><bounds x="134" y="398" width="24" height="8"/></element>
|
||||
<element ref="release_text"><bounds x="132" y="428" width="27" height="8"/></element>
|
||||
<element ref="pcm_card_text"><bounds x="130" y="458" width="33" height="8"/></element>
|
||||
|
||||
<element ref="grey_rect"><bounds x="48" y="477" width="99" height="15" /></element>
|
||||
<element ref="cpanel"><bounds x="49" y="476" width="97" height="15" /></element>
|
||||
<element ref="cpanel"><bounds x="80" y="487" width="36" height="8" /></element>
|
||||
<element ref="rom_play_text"><bounds x="82" y="489" width="32" height="8"/></element>
|
||||
|
||||
<element ref="grey_rect"><bounds x="48" y="477" width="50" height="7" /></element>
|
||||
<element ref="cpanel"><bounds x="49" y="476" width="48" height="7" /></element>
|
||||
<element ref="cpanel"><bounds x="63" y="480" width="24" height="8" /></element>
|
||||
<element ref="panic_text"><bounds x="65" y="481" width="20" height="8"/></element>
|
||||
|
||||
<element ref="performance_text"><bounds x="500" y="366" width="47" height="8"/></element>
|
||||
<element ref="patch_text"><bounds x="562" y="366" width="19" height="8"/></element>
|
||||
<element ref="tone_text"><bounds x="612" y="366" width="17" height="8"/></element>
|
||||
<element ref="a_slash_text"><bounds x="663" y="366" width="6" height="8"/></element>
|
||||
<element ref="b_text"><bounds x="670" y="366" width="4" height="8"/></element>
|
||||
<element ref="int_slash_text"><bounds x="702" y="366" width="12" height="8"/></element>
|
||||
<element ref="card_text"><bounds x="714" y="366" width="17" height="8"/></element>
|
||||
<element ref="command_text"><bounds x="748" y="366" width="33" height="8"/></element>
|
||||
<element ref="write_text"><bounds x="804" y="366" width="20" height="8"/></element>
|
||||
<element ref="enter_text"><bounds x="852" y="366" width="20" height="8"/></element>
|
||||
|
||||
|
||||
<element ref="caps_text"><bounds x="515" y="389" width="16" height="8"/></element>
|
||||
<element ref="space_text"><bounds x="562" y="389" width="19" height="8"/></element>
|
||||
<element ref="a_b_text"><bounds x="625" y="389" width="14" height="8"/></element>
|
||||
<element ref="c_d_text"><bounds x="673" y="389" width="14" height="8"/></element>
|
||||
<element ref="e_f_text"><bounds x="722" y="389" width="13" height="8"/></element>
|
||||
<element ref="g_h_text"><bounds x="769" y="389" width="14" height="8"/></element>
|
||||
<element ref="i_j_text"><bounds x="821" y="389" width="9" height="8"/></element>
|
||||
<element ref="k_l_text"><bounds x="867" y="389" width="13" height="8"/></element>
|
||||
|
||||
<element ref="clear_rect"><bounds x="506" y="423" width="173" height="1" /></element>
|
||||
<element ref="clear_rect"><bounds x="704" y="423" width="176" height="1" /></element>
|
||||
<element ref="bank_text"><bounds x="682" y="418" width="20" height="9"/></element>
|
||||
|
||||
<element ref="1_text"><bounds x="522" y="428" width="4" height="8"/></element>
|
||||
<element ref="2_text"><bounds x="570" y="428" width="4" height="8"/></element>
|
||||
<element ref="3_text"><bounds x="619" y="428" width="4" height="8"/></element>
|
||||
<element ref="4_text"><bounds x="667" y="428" width="4" height="8"/></element>
|
||||
<element ref="5_text"><bounds x="715" y="428" width="4" height="8"/></element>
|
||||
<element ref="6_text"><bounds x="763" y="428" width="4" height="8"/></element>
|
||||
<element ref="7_text"><bounds x="812" y="428" width="4" height="8"/></element>
|
||||
<element ref="8_text"><bounds x="860" y="428" width="4" height="8"/></element>
|
||||
|
||||
<element ref="m_n_text"><bounds x="527" y="449" width="15" height="8"/></element>
|
||||
<element ref="o_p_text"><bounds x="576" y="449" width="14" height="8"/></element>
|
||||
<element ref="q_r_text"><bounds x="625" y="449" width="15" height="8"/></element>
|
||||
<element ref="s_t_text"><bounds x="674" y="449" width="13" height="8"/></element>
|
||||
<element ref="u_v_text"><bounds x="722" y="449" width="14" height="8"/></element>
|
||||
<element ref="dash_w_text"><bounds x="770" y="449" width="14" height="8"/></element>
|
||||
<element ref="9_x_text"><bounds x="819" y="449" width="14" height="8"/></element>
|
||||
<element ref="0_y_text"><bounds x="867" y="449" width="14" height="8"/></element>
|
||||
|
||||
<element ref="1_text"><bounds x="522" y="458" width="4" height="8"/></element>
|
||||
<element ref="2_text"><bounds x="570" y="458" width="4" height="8"/></element>
|
||||
<element ref="3_text"><bounds x="619" y="458" width="4" height="8"/></element>
|
||||
<element ref="4_text"><bounds x="667" y="458" width="4" height="8"/></element>
|
||||
<element ref="5_text"><bounds x="715" y="458" width="4" height="8"/></element>
|
||||
<element ref="6_text"><bounds x="763" y="458" width="4" height="8"/></element>
|
||||
<element ref="7_text"><bounds x="812" y="458" width="4" height="8"/></element>
|
||||
<element ref="8_text"><bounds x="860" y="458" width="4" height="8"/></element>
|
||||
|
||||
<element ref="1_z_text"><bounds x="529" y="479" width="13" height="8"/></element>
|
||||
<element ref="2_slash_text"><bounds x="578" y="479" width="11" height="8"/></element>
|
||||
<element ref="3_plus_text"><bounds x="625" y="479" width="14" height="8"/></element>
|
||||
<element ref="4_times_text"><bounds x="674" y="479" width="12" height="8"/></element>
|
||||
<element ref="5_hash_text"><bounds x="722" y="479" width="14" height="8"/></element>
|
||||
<element ref="6_dot_text"><bounds x="771" y="479" width="11" height="8"/></element>
|
||||
<element ref="7_comma_text"><bounds x="820" y="479" width="11" height="8"/></element>
|
||||
<element ref="8_exclam_text"><bounds x="868" y="479" width="11" height="8"/></element>
|
||||
|
||||
<element ref="clear_rect"><bounds x="506" y="488" width="166" height="1" /></element>
|
||||
<element ref="clear_rect"><bounds x="713" y="488" width="167" height="1" /></element>
|
||||
<element ref="number_text"><bounds x="674" y="486" width="38" height="9"/></element>
|
||||
|
||||
<element ref="value_text"><bounds x="960" y="352" width="24" height="9"/></element>
|
||||
<element name="value_dial" ref="light_grey_disk"><bounds x="919" y="363" width="106" height="106"/></element>
|
||||
<element name="value_dial_finger" ref="dark_grey_disk"><bounds x="931" y="381" width="32" height="32"/></element>
|
||||
|
||||
|
||||
<!-- PERFORMANCE -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x80"><bounds x="505" y="379" width="37" height="9"/></element>
|
||||
<element name="LP26" ref="red_led"><bounds x="518" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- PATCH -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x40"><bounds x="553" y="379" width="37" height="9"/></element>
|
||||
<element name="LP31" ref="red_led"><bounds x="566" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- TONE -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x20"><bounds x="602" y="379" width="37" height="9"/></element>
|
||||
<element name="LP32" ref="red_led"><bounds x="615" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- A/B -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x10"><bounds x="650" y="379" width="37" height="9"/></element>
|
||||
<element name="LP33" ref="red_led"><bounds x="663" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- INT/CARD -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x08"><bounds x="698" y="379" width="37" height="9"/></element>
|
||||
<element name="LP34" ref="red_led"><bounds x="711" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- COMMAND -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x04"><bounds x="747" y="379" width="37" height="9"/></element>
|
||||
<element name="LP35" ref="red_led"><bounds x="760" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- WRITE -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x02"><bounds x="795" y="379" width="37" height="9"/></element>
|
||||
<element name="LP36" ref="red_led"><bounds x="808" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- ENTER -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x01"><bounds x="843" y="379" width="37" height="9"/></element>
|
||||
<element name="LP37" ref="red_led"><bounds x="856" y="380" width="10" height="3" /></element>
|
||||
|
||||
|
||||
<!-- Bank 1 --><element ref="button" inputtag="KEY1" inputmask="0x80"><bounds x="505" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 2 --><element ref="button" inputtag="KEY1" inputmask="0x40"><bounds x="553" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 3 --><element ref="button" inputtag="KEY1" inputmask="0x20"><bounds x="602" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 4 --><element ref="button" inputtag="KEY1" inputmask="0x10"><bounds x="650" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 5 --><element ref="button" inputtag="KEY1" inputmask="0x08"><bounds x="698" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 6 --><element ref="button" inputtag="KEY1" inputmask="0x04"><bounds x="747" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 7 --><element ref="button" inputtag="KEY1" inputmask="0x02"><bounds x="795" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 8 --><element ref="button" inputtag="KEY1" inputmask="0x01"><bounds x="843" y="439" width="37" height="9"/></element>
|
||||
|
||||
|
||||
<!-- Number 1 --><element ref="button" inputtag="KEY2" inputmask="0x80"><bounds x="505" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 2 --><element ref="button" inputtag="KEY2" inputmask="0x40"><bounds x="553" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 3 --><element ref="button" inputtag="KEY2" inputmask="0x20"><bounds x="602" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 4 --><element ref="button" inputtag="KEY2" inputmask="0x10"><bounds x="650" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 5 --><element ref="button" inputtag="KEY2" inputmask="0x08"><bounds x="698" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 6 --><element ref="button" inputtag="KEY2" inputmask="0x04"><bounds x="747" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 7 --><element ref="button" inputtag="KEY2" inputmask="0x02"><bounds x="795" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 8 --><element ref="button" inputtag="KEY2" inputmask="0x01"><bounds x="843" y="469" width="37" height="9"/></element>
|
||||
|
||||
|
||||
<!-- DEC/DEL --><element ref="button" inputtag="KEY3" inputmask="0x80"><bounds x="871" y="252" width="59" height="13"/></element>
|
||||
<!-- INC/INS --><element ref="button" inputtag="KEY3" inputmask="0x40"><bounds x="947" y="252" width="59" height="13"/></element>
|
||||
<!-- Down --><element ref="button" inputtag="KEY3" inputmask="0x20"><bounds x="909" y="204" width="59" height="13"/></element>
|
||||
<!-- Left --><element ref="button" inputtag="KEY3" inputmask="0x10"><bounds x="871" y="157" width="59" height="13"/></element>
|
||||
<!-- Right --><element ref="button" inputtag="KEY3" inputmask="0x08"><bounds x="947" y="157" width="59" height="13"/></element>
|
||||
<!-- Up --><element ref="button" inputtag="KEY3" inputmask="0x04"><bounds x="909" y="108" width="59" height="13"/></element>
|
||||
|
||||
<!-- MIDI OUT -->
|
||||
<element ref="button" inputtag="KEY3" inputmask="0x02"><bounds x="53" y="157" width="59" height="13"/></element>
|
||||
<element name="LP03" ref="red_led"><bounds x="75" y="158" width="15" height="5" /></element>
|
||||
|
||||
<!-- TONE DISPLAY -->
|
||||
<element ref="button" inputtag="KEY3" inputmask="0x01"><bounds x="53" y="108" width="59" height="13"/></element>
|
||||
<element name="LP02" ref="red_led"><bounds x="75" y="109" width="15" height="5" /></element>
|
||||
|
||||
|
||||
<!-- EXIT --><element ref="button" inputtag="KEY4" inputmask="0x80"><bounds x="751" y="252" width="59" height="13"/></element>
|
||||
<!-- F5 --><element ref="button" inputtag="KEY4" inputmask="0x40"><bounds x="645" y="252" width="59" height="13"/></element>
|
||||
<!-- F4 --><element ref="button" inputtag="KEY4" inputmask="0x20"><bounds x="555" y="252" width="59" height="13"/></element>
|
||||
<!-- F3 --><element ref="button" inputtag="KEY4" inputmask="0x10"><bounds x="465" y="252" width="59" height="13"/></element>
|
||||
<!-- F2 --><element ref="button" inputtag="KEY4" inputmask="0x08"><bounds x="375" y="252" width="59" height="13"/></element>
|
||||
<!-- F1 --><element ref="button" inputtag="KEY4" inputmask="0x04"><bounds x="285" y="252" width="59" height="13"/></element>
|
||||
|
||||
<!-- USER -->
|
||||
<element ref="button" inputtag="KEY4" inputmask="0x02"><bounds x="177" y="252" width="59" height="13"/></element>
|
||||
<element name="LP00" ref="red_led"><bounds x="199" y="253" width="15" height="5" /></element>
|
||||
|
||||
<!-- PART -->
|
||||
<element ref="button" inputtag="KEY4" inputmask="0x01"><bounds x="53" y="252" width="59" height="13"/></element>
|
||||
<element name="LP01" ref="red_led"><bounds x="75" y="253" width="15" height="5" /></element>
|
||||
|
||||
|
||||
<!-- EDIT -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x80"><bounds x="79" y="467" width="37" height="9"/></element>
|
||||
<element name="LP04" ref="red_led"><bounds x="92" y="468" width="10" height="3" /></element>
|
||||
|
||||
<!-- PORTAMENTO -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x40"><bounds x="79" y="438" width="37" height="9"/></element>
|
||||
<element name="LP05" ref="red_led"><bounds x="92" y="439" width="10" height="3" /></element>
|
||||
|
||||
<!-- RESONANCE -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x20"><bounds x="79" y="408" width="37" height="9"/></element>
|
||||
<element name="LP06" ref="red_led"><bounds x="92" y="409" width="10" height="3" /></element>
|
||||
|
||||
<!-- PAN -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x10"><bounds x="79" y="378" width="37" height="9"/></element>
|
||||
<element name="LP07" ref="red_led"><bounds x="92" y="379" width="10" height="3" /></element>
|
||||
|
||||
<!-- TUNING -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x08"><bounds x="127" y="378" width="37" height="9"/></element>
|
||||
<element name="LP13" ref="red_led"><bounds x="140" y="379" width="10" height="3" /></element>
|
||||
|
||||
<!-- ATTACK -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x04"><bounds x="127" y="408" width="37" height="9"/></element>
|
||||
<element name="LP12" ref="red_led"><bounds x="140" y="409" width="10" height="3" /></element>
|
||||
|
||||
<!-- RELEASE -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x02"><bounds x="127" y="438" width="37" height="9"/></element>
|
||||
<element name="LP11" ref="red_led"><bounds x="140" y="439" width="10" height="3" /></element>
|
||||
|
||||
<!-- PCM CARD -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x01"><bounds x="127" y="467" width="37" height="9"/></element>
|
||||
<element name="LP10" ref="red_led"><bounds x="140" y="468" width="10" height="3" /></element>
|
||||
|
||||
|
||||
<!-- PLAY -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x80"><bounds x="30" y="467" width="37" height="9"/></element>
|
||||
<element name="LP20" ref="red_led"><bounds x="43" y="468" width="10" height="3" /></element>
|
||||
|
||||
<!-- SOLO -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x40"><bounds x="30" y="438" width="37" height="9"/></element>
|
||||
<element name="LP21" ref="red_led"><bounds x="43" y="439" width="10" height="3" /></element>
|
||||
|
||||
<!-- CUTOFF -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x20"><bounds x="30" y="408" width="37" height="9"/></element>
|
||||
<element name="LP22" ref="red_led"><bounds x="43" y="409" width="10" height="3" /></element>
|
||||
|
||||
<!-- LEVEL -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x10"><bounds x="30" y="378" width="37" height="9"/></element>
|
||||
<element name="LP23" ref="red_led"><bounds x="43" y="379" width="10" height="3" /></element>
|
||||
|
||||
<!-- UPPER (4) -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x08"><bounds x="407" y="467" width="37" height="9"/></element>
|
||||
<element name="LP16" ref="red_led"><bounds x="420" y="468" width="10" height="3" /></element>
|
||||
|
||||
<!-- UPPER (3) -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x04"><bounds x="339" y="467" width="37" height="9"/></element>
|
||||
<element name="LP17" ref="red_led"><bounds x="352" y="468" width="10" height="3" /></element>
|
||||
|
||||
<!-- LOWER (2) -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x02"><bounds x="271" y="467" width="37" height="9"/></element>
|
||||
<element name="LP15" ref="red_led"><bounds x="284" y="468" width="10" height="3" /></element>
|
||||
|
||||
<!-- LOWER (1) -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x01"><bounds x="203" y="467" width="37" height="9"/></element>
|
||||
<element name="LP14" ref="red_led"><bounds x="216" y="468" width="10" height="3" /></element>
|
||||
|
||||
|
||||
<!-- EFFECT/CTRL -->
|
||||
<element ref="button" inputtag="KEY7" inputmask="0x01"><bounds x="53" y="204" width="59" height="13"/></element>
|
||||
<element name="LP24" ref="red_led"><bounds x="75" y="205" width="15" height="5" /></element>
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
<script><![CDATA[
|
||||
file:set_resolve_tags_callback(
|
||||
function()
|
||||
-- These constants need to match the "slider" and
|
||||
-- "slider-knob" element attributes.
|
||||
local slider_height <const> = 82
|
||||
local knob_height <const> = 24
|
||||
local knob_slider_delta_y <const> = 5 -- slider y - knob y
|
||||
|
||||
local slider_deadzone <const> = math.floor(knob_height / 2) - knob_slider_delta_y
|
||||
|
||||
-- Local state used by the pointer update handler.
|
||||
local sliders = {}
|
||||
local slider_fields = {}
|
||||
local selected = 0
|
||||
|
||||
-- Gather relevant elements and inputs into local state.
|
||||
local view = file.views["Internal Layout"]
|
||||
for i = 1, #view.items do
|
||||
local item = view.items:at(i)
|
||||
if item.id ~= nil and string.find(item.id, "SLIDER") == 1 then
|
||||
local port_tag = item.id
|
||||
local port = file.device:ioport(port_tag)
|
||||
local field = nil
|
||||
if port ~= nil then
|
||||
for k, val in pairs(port.fields) do
|
||||
field = val
|
||||
break
|
||||
end
|
||||
if field == nil then
|
||||
print("LAYOUT ERROR - Port does not have a field: " .. port_tag)
|
||||
end
|
||||
else
|
||||
print("LAYOUT ERROR - Port not found: " .. port_tag)
|
||||
end
|
||||
table.insert(sliders, item)
|
||||
table.insert(slider_fields, field)
|
||||
end
|
||||
end
|
||||
|
||||
view:set_pointer_updated_callback(
|
||||
function(type, id, dev, x, y, btn, dn, up, cnt)
|
||||
-- No button pressed. Reset state.
|
||||
if btn & 1 == 0 then
|
||||
selected = 0
|
||||
return
|
||||
end
|
||||
|
||||
-- Button just pressed. Find affected slider.
|
||||
if dn & 1 ~= 0 then
|
||||
for i = 1, #sliders do
|
||||
if sliders[i].bounds:includes(x, y) then
|
||||
selected = i
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- No slider selected. Nothing to do.
|
||||
if selected <= 0 then
|
||||
return
|
||||
end
|
||||
|
||||
-- A slider is selected. Update state and, indirectly,
|
||||
-- slider knob position, based on the pointer's Y position.
|
||||
|
||||
-- It is assumed the attached IO field is an IPT_ADJUSTER
|
||||
-- with a range of 0-100 (the default).
|
||||
|
||||
local bbox = sliders[selected].bounds
|
||||
local scale_factor = bbox.height / slider_height
|
||||
local min_y = bbox.y0 + slider_deadzone * scale_factor
|
||||
local max_y = bbox.y1 - slider_deadzone * scale_factor
|
||||
|
||||
local new_value = 100 - 100 * (y - min_y) / (max_y - min_y)
|
||||
new_value = math.floor(new_value + 0.5)
|
||||
if new_value < 0 then new_value = 0 end
|
||||
if new_value > 100 then new_value = 100 end
|
||||
slider_fields[selected].user_value = new_value
|
||||
end)
|
||||
end)
|
||||
]]></script>
|
||||
|
||||
</mamelayout>
|
633
src/mame/layout/roland_d70.lay
Normal file
633
src/mame/layout/roland_d70.lay
Normal file
@ -0,0 +1,633 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
copyright-holders:Felipe Sanches, m1macrophage
|
||||
-->
|
||||
<mamelayout version="2">
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="red_led" defstate="0">
|
||||
<rect state="1">
|
||||
<color red="1" green="0.0" blue="0.0" />
|
||||
</rect>
|
||||
<rect state="0">
|
||||
<color red="0.2" green="0.0" blue="0.0" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="cpanel">
|
||||
<rect><color red="0.13" green="0.13" blue="0.11"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="clear_rect">
|
||||
<rect><color red="0.8" green="0.8" blue="0.8"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="grey_rect">
|
||||
<rect><color red="0.4" green="0.4" blue="0.4" /></rect>
|
||||
</element>
|
||||
|
||||
<element name="brown_line">
|
||||
<rect><color red="0.72" green="0.45" blue="0.13" /></rect>
|
||||
</element>
|
||||
|
||||
<element name="light_grey_disk">
|
||||
<disk><color red="0.2" green="0.2" blue="0.2"/></disk>
|
||||
</element>
|
||||
|
||||
<element name="dark_grey_disk">
|
||||
<disk><color red="0.1" green="0.1" blue="0.1"/></disk>
|
||||
</element>
|
||||
|
||||
<element name="slider-well">
|
||||
<rect><color red="0.04" green="0.05" blue="0.05"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="slider-wider-well">
|
||||
<rect><color red="0.13" green="0.15" blue="0.15"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="slider-knob">
|
||||
<rect><color red="0.18" green="0.2" blue="0.18"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="lcd_border">
|
||||
<rect><color red="0.06" green="0.06" blue="0.04"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="lcd_bg">
|
||||
<rect><color red="0.62" green="0.71" blue="0.53"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="button">
|
||||
<rect state="0"><color red="0.25" green="0.25" blue="0.25"/></rect>
|
||||
<rect state="1"><color red="0.5" green="0.5" blue="0.5"/></rect>
|
||||
</element>
|
||||
|
||||
<element name="tone_display_text"><text string="TONE DISPLAY"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="midi_out_text"><text string="MIDI OUT"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="effect_ctrl_text"><text string="EFFECT/CTRL"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="part_text"><text string="PART"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="user_text"><text string="USER"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="f1_text"><text string="F1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="f2_text"><text string="F2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="f3_text"><text string="F3"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="f4_text"><text string="F4"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="f5_text"><text string="F5"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="exit_text"><text string="EXIT"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="dec_text"><text string="DEC"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="del_text"><text string="DEL"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="inc_text"><text string="INC"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="ins_text"><text string="INS"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="tone_palette_text"><text string="TONE PALETTE"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="lower_text"><text string="LOWER"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="upper_text"><text string="UPPER"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="level_text"><text string="LEVEL"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="pan_text"><text string="PAN"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="tuning_text"><text string="TUNING"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="cutoff_text"><text string="CUTOFF"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="resonance_text"><text string="RESONANCE"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="attack_text"><text string="ATTACK"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="release_text"><text string="RELEASE"><color red="0.72" green="0.45" blue="0.13" /></text></element>
|
||||
<element name="solo_text"><text string="SOLO"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="portamento_text"><text string="PORTAMENTO"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="mode_text"><text string="MODE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="play_text"><text string="PLAY"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="edit_text"><text string="EDIT"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="pcm_card_text"><text string="PCM CARD"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="panic_text"><text string="PANIC"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="rom_play_text"><text string="ROM PLAY"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="lower_1_text"><text string="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="lower_2_text"><text string="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="upper_3_text"><text string="3"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="upper_4_text"><text string="4"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="tone_zone_select_text"><text string="TONE/ZONE SELECT"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="performance_text"><text string="PERFORMANCE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="patch_text"><text string="PATCH"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="tone_text"><text string="TONE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="a_slash_text"><text string="A/"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="b_text"><text string="B"><color red="1.0" green="0.2" blue="0.2" /></text></element>
|
||||
<element name="int_slash_text"><text string="INT/"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="card_text"><text string="CARD"><color red="1.0" green="0.2" blue="0.2" /></text></element>
|
||||
<element name="command_text"><text string="COMMAND"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="write_text"><text string="WRITE"><color red="1.0" green="0.2" blue="0.2" /></text></element>
|
||||
<element name="enter_text"><text string="ENTER"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="caps_text"><text string="CAPS"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="space_text"><text string="SPACE"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="a_b_text"><text string="A B"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="c_d_text"><text string="C D"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="e_f_text"><text string="E F"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="g_h_text"><text string="G H"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="i_j_text"><text string="I J"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="k_l_text"><text string="K L"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="bank_text"><text string="BANK"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="1_text"><text string="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="2_text"><text string="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="3_text"><text string="3"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="4_text"><text string="4"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="5_text"><text string="5"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="6_text"><text string="6"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="7_text"><text string="7"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="8_text"><text string="8"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="m_n_text"><text string="M N"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="o_p_text"><text string="O P"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="q_r_text"><text string="Q R"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="s_t_text"><text string="S T"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="u_v_text"><text string="U V"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="dash_w_text"><text string="- W"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="9_x_text"><text string="9 X"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="0_y_text"><text string="0 Y"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="1_z_text"><text string="1 Z"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="2_slash_text"><text string="2 /"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="3_plus_text"><text string="3 +"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="4_times_text"><text string="4 *"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="5_hash_text"><text string="5 #"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="6_dot_text"><text string="6 ."><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="7_comma_text"><text string="7 ,"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="8_exclam_text"><text string="8 !"><color red="0.4" green="0.4" blue="0.4" /></text></element>
|
||||
<element name="number_text"><text string="NUMBER"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="value_text"><text string="VALUE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
|
||||
<element name="double_page_icon_grey">
|
||||
<image><data><![CDATA[
|
||||
<svg width="11" height="12" viewBox="0 0 2.910422 3.175">
|
||||
<path fill="none" stroke="#d1d1d1" stroke-width="0.29" d="m 1.66,0.17 -1.52,0.4 V 2.9 l 1.52,-0.4 z m -0.4,2.52 v 0.3 l 1.52,-0.4 V 0.27 l -1.2,0.3" />
|
||||
</svg>
|
||||
]]></data></image>
|
||||
</element>
|
||||
|
||||
<element name="double_page_icon_brown">
|
||||
<image><data><![CDATA[
|
||||
<svg width="11" height="12" viewBox="0 0 2.910422 3.175">
|
||||
<path fill="none" stroke="#b77222" stroke-width="0.29" d="m 1.66,0.17 -1.52,0.4 V 2.9 l 1.52,-0.4 z m -0.4,2.52 v 0.3 l 1.52,-0.4 V 0.27 l -1.2,0.3" />
|
||||
</svg>
|
||||
]]></data></image>
|
||||
</element>
|
||||
|
||||
<element name="triple_page_icon_grey">
|
||||
<image><data><![CDATA[
|
||||
<svg width="15" height="12" viewBox="0 0 4.3750049 3.500126">
|
||||
<path fill="none" stroke="#d1d1d1" stroke-width="0.29" d="M 2.57,3 V 3.3 L 4.23,2.9 V 0.4 L 3,0.7 M 1.8,0.18 0.15,0.6 V 3.1 L 1.8,2.68 Z M 1.36,2.89 V 3.2 L 3,2.78 V 0.29 L 1.8,0.58" />
|
||||
</svg>
|
||||
]]></data></image>
|
||||
</element>
|
||||
|
||||
|
||||
<element name="grey_arrows">
|
||||
<image><data><![CDATA[
|
||||
<svg width="90" height="110" viewBox="0 0 23.8125 29.1">
|
||||
<path fill="#d1d1d1" d="m 13.23,25.43 -1.32,3.67 -1.32,-3.67 z m 0,-21.76 L 11.9,0 10.58,3.67 Z m 6.88,9.94 3.7,1.3 -3.7,1.3 z m -16.4,0 L 0,14.92 3.7,16.23 Z" />
|
||||
</svg>
|
||||
]]></data></image>
|
||||
</element>
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout">
|
||||
<bounds left="0" right="1048" top="0" bottom="524" />
|
||||
|
||||
<element ref="cpanel"><bounds x="8" y="8" width="1032" height="300" /></element>
|
||||
<element ref="lcd_border"><bounds x="178" y="16" width="632" height="200" /></element>
|
||||
<element ref="lcd_bg"><bounds x="254" y="48" width="488" height="136" /></element>
|
||||
<screen index="0"><bounds x="258" y="52" width="480" height="128" /></screen>
|
||||
|
||||
<element ref="cpanel"><bounds x="8" y="316" width="464" height="200" /></element>
|
||||
|
||||
<element ref="cpanel"><bounds x="480" y="316" width="560" height="200" /></element>
|
||||
<!-- white rect around "performance ... int/card" labels-->
|
||||
<element ref="clear_rect"><bounds x="497" y="363" width="244" height="13" /></element>
|
||||
<element ref="cpanel"><bounds x="498" y="364" width="242" height="11" /></element>
|
||||
<!-- white rect around "command write enter" labels-->
|
||||
<element ref="clear_rect"><bounds x="743" y="363" width="138" height="13" /></element>
|
||||
<element ref="cpanel"><bounds x="744" y="364" width="136" height="11" /></element>
|
||||
<!-- white line over "patch tone a/b" labels-->
|
||||
<element ref="clear_rect"><bounds x="555" y="365" width="132" height="1" /></element>
|
||||
|
||||
|
||||
<element ref="tone_display_text"><bounds x="39" y="92" width="69" height="10"/></element>
|
||||
<element ref="double_page_icon_grey"><bounds x="112" y="90" width="11" height="12"/></element>
|
||||
|
||||
<element ref="midi_out_text"><bounds x="51" y="140" width="47" height="10"/></element>
|
||||
<element ref="double_page_icon_grey"><bounds x="102" y="138" width="11" height="12"/></element>
|
||||
|
||||
<element ref="effect_ctrl_text"><bounds x="45" y="188" width="64" height="10"/></element>
|
||||
<element ref="triple_page_icon_grey"><bounds x="113" y="185" width="15" height="12"/></element>
|
||||
|
||||
<element ref="part_text"><bounds x="62" y="236" width="25" height="10"/></element>
|
||||
<element ref="double_page_icon_grey"><bounds x="90" y="235" width="11" height="12"/></element>
|
||||
|
||||
<element ref="user_text"><bounds x="194" y="236" width="26" height="10"/></element>
|
||||
<element ref="f1_text"><bounds x="309" y="236" width="11" height="10"/></element>
|
||||
<element ref="f2_text"><bounds x="399" y="236" width="11" height="10"/></element>
|
||||
<element ref="f3_text"><bounds x="489" y="236" width="11" height="10"/></element>
|
||||
<element ref="f4_text"><bounds x="579" y="236" width="11" height="10"/></element>
|
||||
<element ref="f5_text"><bounds x="669" y="236" width="11" height="10"/></element>
|
||||
<element ref="exit_text"><bounds x="770" y="236" width="22" height="10"/></element>
|
||||
|
||||
<element ref="grey_arrows"><bounds x="894" y="89" width="90" height="110"/></element>
|
||||
|
||||
<element ref="dec_text"><bounds x="891" y="236" width="19" height="10"/></element>
|
||||
<element ref="del_text"><bounds x="891" y="273" width="18" height="10"/></element>
|
||||
<element ref="inc_text"><bounds x="968" y="236" width="16" height="10"/></element>
|
||||
<element ref="ins_text"><bounds x="968" y="273" width="16" height="10"/></element>
|
||||
|
||||
|
||||
<element ref="brown_line"><bounds x="31" y="336" width="173" height="1" /></element>
|
||||
<element ref="brown_line"><bounds x="271" y="336" width="177" height="1" /></element>
|
||||
<element ref="tone_palette_text"><bounds x="206" y="331" width="62" height="9"/></element>
|
||||
|
||||
<element ref="brown_line"><bounds x="200" y="346" width="39" height="1" /></element>
|
||||
<element ref="brown_line"><bounds x="273" y="346" width="39" height="1" /></element>
|
||||
<element ref="lower_text"><bounds x="242" y="341" width="29" height="9"/></element>
|
||||
|
||||
<element ref="brown_line"><bounds x="337" y="346" width="39" height="1" /></element>
|
||||
<element ref="brown_line"><bounds x="409" y="346" width="39" height="1" /></element>
|
||||
<element ref="upper_text"><bounds x="379" y="341" width="27" height="9"/></element>
|
||||
|
||||
|
||||
<element ref="slider-wider-well" id="SLIDER4"><bounds x="200" y="349" width="43" height="97"/></element>
|
||||
<element ref="slider-well"><bounds x="217" y="357" width="10" height="82"/></element>
|
||||
<element ref="slider-knob">
|
||||
<animate inputtag="SLIDER4" inputmask="0x7f"/>
|
||||
<bounds state="100" x="203" y="352" width="37" height="24"/>
|
||||
<bounds state="0" x="203" y="417" width="37" height="24"/>
|
||||
</element>
|
||||
|
||||
<element ref="slider-wider-well" id="SLIDER5"><bounds x="269" y="349" width="43" height="97"/></element>
|
||||
<element ref="slider-well"><bounds x="286" y="357" width="10" height="82"/></element>
|
||||
<element ref="slider-knob">
|
||||
<animate inputtag="SLIDER5" inputmask="0x7f"/>
|
||||
<bounds state="100" x="272" y="352" width="37" height="24"/>
|
||||
<bounds state="0" x="272" y="417" width="37" height="24"/>
|
||||
</element>
|
||||
|
||||
<element ref="slider-wider-well" id="SLIDER6"><bounds x="337" y="349" width="43" height="97"/></element>
|
||||
<element ref="slider-well"><bounds x="354" y="357" width="10" height="82"/></element>
|
||||
<element ref="slider-knob">
|
||||
<animate inputtag="SLIDER6" inputmask="0x7f"/>
|
||||
<bounds state="100" x="340" y="352" width="37" height="24"/>
|
||||
<bounds state="0" x="340" y="417" width="37" height="24"/>
|
||||
</element>
|
||||
|
||||
<element ref="slider-wider-well" id="SLIDER7"><bounds x="405" y="349" width="43" height="97"/></element>
|
||||
<element ref="slider-well"><bounds x="422" y="357" width="10" height="82"/></element>
|
||||
<element ref="slider-knob">
|
||||
<animate inputtag="SLIDER7" inputmask="0x7f"/>
|
||||
<bounds state="100" x="408" y="352" width="37" height="24"/>
|
||||
<bounds state="0" x="408" y="417" width="37" height="24"/>
|
||||
</element>
|
||||
|
||||
|
||||
<element ref="lower_1_text"><bounds x="220" y="455" width="6" height="10"/></element>
|
||||
<element ref="lower_2_text"><bounds x="287" y="455" width="6" height="10"/></element>
|
||||
<element ref="upper_3_text"><bounds x="355" y="455" width="6" height="10"/></element>
|
||||
<element ref="upper_4_text"><bounds x="423" y="455" width="6" height="10"/></element>
|
||||
|
||||
<element ref="clear_rect"><bounds x="200" y="481" width="82" height="1" /></element>
|
||||
<element ref="clear_rect"><bounds x="366" y="481" width="82" height="1" /></element>
|
||||
<element ref="tone_zone_select_text"><bounds x="281" y="480" width="87" height="9"/></element>
|
||||
|
||||
<element ref="clear_rect"><bounds x="30" y="455" width="54" height="1" /></element>
|
||||
<element ref="clear_rect"><bounds x="109" y="455" width="55" height="1" /></element>
|
||||
<element ref="mode_text"><bounds x="86" y="450" width="21" height="8"/></element>
|
||||
|
||||
<element ref="level_text"><bounds x="40" y="368" width="19" height="8"/></element>
|
||||
<element ref="cutoff_text"><bounds x="37" y="398" width="24" height="8"/></element>
|
||||
<element ref="solo_text"><bounds x="41" y="428" width="16" height="8"/></element>
|
||||
<element ref="play_text"><bounds x="42" y="458" width="15" height="8"/></element>
|
||||
|
||||
<element ref="pan_text"><bounds x="91" y="368" width="12" height="8"/></element>
|
||||
<element ref="resonance_text"><bounds x="78" y="398" width="38" height="8"/></element>
|
||||
<element ref="portamento_text"><bounds x="76" y="428" width="43" height="8"/></element>
|
||||
<element ref="edit_text"><bounds x="91" y="458" width="14" height="8"/></element>
|
||||
|
||||
<element ref="tuning_text"><bounds x="128" y="368" width="23" height="8"/></element>
|
||||
<element ref="double_page_icon_brown"><bounds x="154" y="367" width="7" height="8"/></element>
|
||||
|
||||
<element ref="attack_text"><bounds x="134" y="398" width="24" height="8"/></element>
|
||||
<element ref="release_text"><bounds x="132" y="428" width="27" height="8"/></element>
|
||||
<element ref="pcm_card_text"><bounds x="130" y="458" width="33" height="8"/></element>
|
||||
|
||||
<element ref="grey_rect"><bounds x="48" y="477" width="99" height="15" /></element>
|
||||
<element ref="cpanel"><bounds x="49" y="476" width="97" height="15" /></element>
|
||||
<element ref="cpanel"><bounds x="80" y="487" width="36" height="8" /></element>
|
||||
<element ref="rom_play_text"><bounds x="82" y="489" width="32" height="8"/></element>
|
||||
|
||||
<element ref="grey_rect"><bounds x="48" y="477" width="50" height="7" /></element>
|
||||
<element ref="cpanel"><bounds x="49" y="476" width="48" height="7" /></element>
|
||||
<element ref="cpanel"><bounds x="63" y="480" width="24" height="8" /></element>
|
||||
<element ref="panic_text"><bounds x="65" y="481" width="20" height="8"/></element>
|
||||
|
||||
<element ref="performance_text"><bounds x="500" y="366" width="47" height="8"/></element>
|
||||
<element ref="patch_text"><bounds x="562" y="366" width="19" height="8"/></element>
|
||||
<element ref="tone_text"><bounds x="612" y="366" width="17" height="8"/></element>
|
||||
<element ref="a_slash_text"><bounds x="663" y="366" width="6" height="8"/></element>
|
||||
<element ref="b_text"><bounds x="670" y="366" width="4" height="8"/></element>
|
||||
<element ref="int_slash_text"><bounds x="702" y="366" width="12" height="8"/></element>
|
||||
<element ref="card_text"><bounds x="714" y="366" width="17" height="8"/></element>
|
||||
<element ref="command_text"><bounds x="748" y="366" width="33" height="8"/></element>
|
||||
<element ref="write_text"><bounds x="804" y="366" width="20" height="8"/></element>
|
||||
<element ref="enter_text"><bounds x="852" y="366" width="20" height="8"/></element>
|
||||
|
||||
|
||||
<element ref="caps_text"><bounds x="515" y="389" width="16" height="8"/></element>
|
||||
<element ref="space_text"><bounds x="562" y="389" width="19" height="8"/></element>
|
||||
<element ref="a_b_text"><bounds x="625" y="389" width="14" height="8"/></element>
|
||||
<element ref="c_d_text"><bounds x="673" y="389" width="14" height="8"/></element>
|
||||
<element ref="e_f_text"><bounds x="722" y="389" width="13" height="8"/></element>
|
||||
<element ref="g_h_text"><bounds x="769" y="389" width="14" height="8"/></element>
|
||||
<element ref="i_j_text"><bounds x="821" y="389" width="9" height="8"/></element>
|
||||
<element ref="k_l_text"><bounds x="867" y="389" width="13" height="8"/></element>
|
||||
|
||||
<element ref="clear_rect"><bounds x="506" y="423" width="173" height="1" /></element>
|
||||
<element ref="clear_rect"><bounds x="704" y="423" width="176" height="1" /></element>
|
||||
<element ref="bank_text"><bounds x="682" y="418" width="20" height="9"/></element>
|
||||
|
||||
<element ref="1_text"><bounds x="522" y="428" width="4" height="8"/></element>
|
||||
<element ref="2_text"><bounds x="570" y="428" width="4" height="8"/></element>
|
||||
<element ref="3_text"><bounds x="619" y="428" width="4" height="8"/></element>
|
||||
<element ref="4_text"><bounds x="667" y="428" width="4" height="8"/></element>
|
||||
<element ref="5_text"><bounds x="715" y="428" width="4" height="8"/></element>
|
||||
<element ref="6_text"><bounds x="763" y="428" width="4" height="8"/></element>
|
||||
<element ref="7_text"><bounds x="812" y="428" width="4" height="8"/></element>
|
||||
<element ref="8_text"><bounds x="860" y="428" width="4" height="8"/></element>
|
||||
|
||||
<element ref="m_n_text"><bounds x="527" y="449" width="15" height="8"/></element>
|
||||
<element ref="o_p_text"><bounds x="576" y="449" width="14" height="8"/></element>
|
||||
<element ref="q_r_text"><bounds x="625" y="449" width="15" height="8"/></element>
|
||||
<element ref="s_t_text"><bounds x="674" y="449" width="13" height="8"/></element>
|
||||
<element ref="u_v_text"><bounds x="722" y="449" width="14" height="8"/></element>
|
||||
<element ref="dash_w_text"><bounds x="770" y="449" width="14" height="8"/></element>
|
||||
<element ref="9_x_text"><bounds x="819" y="449" width="14" height="8"/></element>
|
||||
<element ref="0_y_text"><bounds x="867" y="449" width="14" height="8"/></element>
|
||||
|
||||
<element ref="1_text"><bounds x="522" y="458" width="4" height="8"/></element>
|
||||
<element ref="2_text"><bounds x="570" y="458" width="4" height="8"/></element>
|
||||
<element ref="3_text"><bounds x="619" y="458" width="4" height="8"/></element>
|
||||
<element ref="4_text"><bounds x="667" y="458" width="4" height="8"/></element>
|
||||
<element ref="5_text"><bounds x="715" y="458" width="4" height="8"/></element>
|
||||
<element ref="6_text"><bounds x="763" y="458" width="4" height="8"/></element>
|
||||
<element ref="7_text"><bounds x="812" y="458" width="4" height="8"/></element>
|
||||
<element ref="8_text"><bounds x="860" y="458" width="4" height="8"/></element>
|
||||
|
||||
<element ref="1_z_text"><bounds x="529" y="479" width="13" height="8"/></element>
|
||||
<element ref="2_slash_text"><bounds x="578" y="479" width="11" height="8"/></element>
|
||||
<element ref="3_plus_text"><bounds x="625" y="479" width="14" height="8"/></element>
|
||||
<element ref="4_times_text"><bounds x="674" y="479" width="12" height="8"/></element>
|
||||
<element ref="5_hash_text"><bounds x="722" y="479" width="14" height="8"/></element>
|
||||
<element ref="6_dot_text"><bounds x="771" y="479" width="11" height="8"/></element>
|
||||
<element ref="7_comma_text"><bounds x="820" y="479" width="11" height="8"/></element>
|
||||
<element ref="8_exclam_text"><bounds x="868" y="479" width="11" height="8"/></element>
|
||||
|
||||
<element ref="clear_rect"><bounds x="506" y="488" width="166" height="1" /></element>
|
||||
<element ref="clear_rect"><bounds x="713" y="488" width="167" height="1" /></element>
|
||||
<element ref="number_text"><bounds x="674" y="486" width="38" height="9"/></element>
|
||||
|
||||
<element ref="value_text"><bounds x="960" y="352" width="24" height="9"/></element>
|
||||
<element name="value_dial" ref="light_grey_disk"><bounds x="919" y="363" width="106" height="106"/></element>
|
||||
<element name="value_dial_finger" ref="dark_grey_disk"><bounds x="931" y="381" width="32" height="32"/></element>
|
||||
|
||||
|
||||
<!-- PERFORMANCE -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x80"><bounds x="505" y="379" width="37" height="9"/></element>
|
||||
<element name="LP26" ref="red_led"><bounds x="518" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- PATCH -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x40"><bounds x="553" y="379" width="37" height="9"/></element>
|
||||
<element name="LP31" ref="red_led"><bounds x="566" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- TONE -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x20"><bounds x="602" y="379" width="37" height="9"/></element>
|
||||
<element name="LP32" ref="red_led"><bounds x="615" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- A/B -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x10"><bounds x="650" y="379" width="37" height="9"/></element>
|
||||
<element name="LP33" ref="red_led"><bounds x="663" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- INT/CARD -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x08"><bounds x="698" y="379" width="37" height="9"/></element>
|
||||
<element name="LP34" ref="red_led"><bounds x="711" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- COMMAND -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x04"><bounds x="747" y="379" width="37" height="9"/></element>
|
||||
<element name="LP35" ref="red_led"><bounds x="760" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- WRITE -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x02"><bounds x="795" y="379" width="37" height="9"/></element>
|
||||
<element name="LP36" ref="red_led"><bounds x="808" y="380" width="10" height="3" /></element>
|
||||
|
||||
<!-- ENTER -->
|
||||
<element ref="button" inputtag="KEY0" inputmask="0x01"><bounds x="843" y="379" width="37" height="9"/></element>
|
||||
<element name="LP37" ref="red_led"><bounds x="856" y="380" width="10" height="3" /></element>
|
||||
|
||||
|
||||
<!-- Bank 1 --><element ref="button" inputtag="KEY1" inputmask="0x80"><bounds x="505" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 2 --><element ref="button" inputtag="KEY1" inputmask="0x40"><bounds x="553" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 3 --><element ref="button" inputtag="KEY1" inputmask="0x20"><bounds x="602" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 4 --><element ref="button" inputtag="KEY1" inputmask="0x10"><bounds x="650" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 5 --><element ref="button" inputtag="KEY1" inputmask="0x08"><bounds x="698" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 6 --><element ref="button" inputtag="KEY1" inputmask="0x04"><bounds x="747" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 7 --><element ref="button" inputtag="KEY1" inputmask="0x02"><bounds x="795" y="439" width="37" height="9"/></element>
|
||||
<!-- Bank 8 --><element ref="button" inputtag="KEY1" inputmask="0x01"><bounds x="843" y="439" width="37" height="9"/></element>
|
||||
|
||||
|
||||
<!-- Number 1 --><element ref="button" inputtag="KEY2" inputmask="0x80"><bounds x="505" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 2 --><element ref="button" inputtag="KEY2" inputmask="0x40"><bounds x="553" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 3 --><element ref="button" inputtag="KEY2" inputmask="0x20"><bounds x="602" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 4 --><element ref="button" inputtag="KEY2" inputmask="0x10"><bounds x="650" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 5 --><element ref="button" inputtag="KEY2" inputmask="0x08"><bounds x="698" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 6 --><element ref="button" inputtag="KEY2" inputmask="0x04"><bounds x="747" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 7 --><element ref="button" inputtag="KEY2" inputmask="0x02"><bounds x="795" y="469" width="37" height="9"/></element>
|
||||
<!-- Number 8 --><element ref="button" inputtag="KEY2" inputmask="0x01"><bounds x="843" y="469" width="37" height="9"/></element>
|
||||
|
||||
|
||||
<!-- DEC/DEL --><element ref="button" inputtag="KEY3" inputmask="0x80"><bounds x="871" y="252" width="59" height="13"/></element>
|
||||
<!-- INC/INS --><element ref="button" inputtag="KEY3" inputmask="0x40"><bounds x="947" y="252" width="59" height="13"/></element>
|
||||
<!-- Down --><element ref="button" inputtag="KEY3" inputmask="0x20"><bounds x="909" y="204" width="59" height="13"/></element>
|
||||
<!-- Left --><element ref="button" inputtag="KEY3" inputmask="0x10"><bounds x="871" y="157" width="59" height="13"/></element>
|
||||
<!-- Right --><element ref="button" inputtag="KEY3" inputmask="0x08"><bounds x="947" y="157" width="59" height="13"/></element>
|
||||
<!-- Up --><element ref="button" inputtag="KEY3" inputmask="0x04"><bounds x="909" y="108" width="59" height="13"/></element>
|
||||
|
||||
<!-- MIDI OUT -->
|
||||
<element ref="button" inputtag="KEY3" inputmask="0x02"><bounds x="53" y="157" width="59" height="13"/></element>
|
||||
<element name="LP03" ref="red_led"><bounds x="75" y="158" width="15" height="5" /></element>
|
||||
|
||||
<!-- TONE DISPLAY -->
|
||||
<element ref="button" inputtag="KEY3" inputmask="0x01"><bounds x="53" y="108" width="59" height="13"/></element>
|
||||
<element name="LP02" ref="red_led"><bounds x="75" y="109" width="15" height="5" /></element>
|
||||
|
||||
|
||||
<!-- EXIT --><element ref="button" inputtag="KEY4" inputmask="0x80"><bounds x="751" y="252" width="59" height="13"/></element>
|
||||
<!-- F5 --><element ref="button" inputtag="KEY4" inputmask="0x40"><bounds x="645" y="252" width="59" height="13"/></element>
|
||||
<!-- F4 --><element ref="button" inputtag="KEY4" inputmask="0x20"><bounds x="555" y="252" width="59" height="13"/></element>
|
||||
<!-- F3 --><element ref="button" inputtag="KEY4" inputmask="0x10"><bounds x="465" y="252" width="59" height="13"/></element>
|
||||
<!-- F2 --><element ref="button" inputtag="KEY4" inputmask="0x08"><bounds x="375" y="252" width="59" height="13"/></element>
|
||||
<!-- F1 --><element ref="button" inputtag="KEY4" inputmask="0x04"><bounds x="285" y="252" width="59" height="13"/></element>
|
||||
|
||||
<!-- USER -->
|
||||
<element ref="button" inputtag="KEY4" inputmask="0x02"><bounds x="177" y="252" width="59" height="13"/></element>
|
||||
<element name="LP00" ref="red_led"><bounds x="199" y="253" width="15" height="5" /></element>
|
||||
|
||||
<!-- PART -->
|
||||
<element ref="button" inputtag="KEY4" inputmask="0x01"><bounds x="53" y="252" width="59" height="13"/></element>
|
||||
<element name="LP01" ref="red_led"><bounds x="75" y="253" width="15" height="5" /></element>
|
||||
|
||||
|
||||
<!-- EDIT -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x80"><bounds x="79" y="467" width="37" height="9"/></element>
|
||||
<element name="LP04" ref="red_led"><bounds x="92" y="468" width="10" height="3" /></element>
|
||||
|
||||
<!-- PORTAMENTO -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x40"><bounds x="79" y="438" width="37" height="9"/></element>
|
||||
<element name="LP05" ref="red_led"><bounds x="92" y="439" width="10" height="3" /></element>
|
||||
|
||||
<!-- RESONANCE -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x20"><bounds x="79" y="408" width="37" height="9"/></element>
|
||||
<element name="LP06" ref="red_led"><bounds x="92" y="409" width="10" height="3" /></element>
|
||||
|
||||
<!-- PAN -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x10"><bounds x="79" y="378" width="37" height="9"/></element>
|
||||
<element name="LP07" ref="red_led"><bounds x="92" y="379" width="10" height="3" /></element>
|
||||
|
||||
<!-- TUNING -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x08"><bounds x="127" y="378" width="37" height="9"/></element>
|
||||
<element name="LP13" ref="red_led"><bounds x="140" y="379" width="10" height="3" /></element>
|
||||
|
||||
<!-- ATTACK -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x04"><bounds x="127" y="408" width="37" height="9"/></element>
|
||||
<element name="LP12" ref="red_led"><bounds x="140" y="409" width="10" height="3" /></element>
|
||||
|
||||
<!-- RELEASE -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x02"><bounds x="127" y="438" width="37" height="9"/></element>
|
||||
<element name="LP11" ref="red_led"><bounds x="140" y="439" width="10" height="3" /></element>
|
||||
|
||||
<!-- PCM CARD -->
|
||||
<element ref="button" inputtag="KEY5" inputmask="0x01"><bounds x="127" y="467" width="37" height="9"/></element>
|
||||
<element name="LP10" ref="red_led"><bounds x="140" y="468" width="10" height="3" /></element>
|
||||
|
||||
|
||||
<!-- PLAY -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x80"><bounds x="30" y="467" width="37" height="9"/></element>
|
||||
<element name="LP20" ref="red_led"><bounds x="43" y="468" width="10" height="3" /></element>
|
||||
|
||||
<!-- SOLO -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x40"><bounds x="30" y="438" width="37" height="9"/></element>
|
||||
<element name="LP21" ref="red_led"><bounds x="43" y="439" width="10" height="3" /></element>
|
||||
|
||||
<!-- CUTOFF -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x20"><bounds x="30" y="408" width="37" height="9"/></element>
|
||||
<element name="LP22" ref="red_led"><bounds x="43" y="409" width="10" height="3" /></element>
|
||||
|
||||
<!-- LEVEL -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x10"><bounds x="30" y="378" width="37" height="9"/></element>
|
||||
<element name="LP23" ref="red_led"><bounds x="43" y="379" width="10" height="3" /></element>
|
||||
|
||||
<!-- UPPER (4) -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x08"><bounds x="407" y="467" width="37" height="9"/></element>
|
||||
<element name="LP16" ref="red_led"><bounds x="420" y="468" width="10" height="3" /></element>
|
||||
|
||||
<!-- UPPER (3) -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x04"><bounds x="339" y="467" width="37" height="9"/></element>
|
||||
<element name="LP17" ref="red_led"><bounds x="352" y="468" width="10" height="3" /></element>
|
||||
|
||||
<!-- LOWER (2) -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x02"><bounds x="271" y="467" width="37" height="9"/></element>
|
||||
<element name="LP15" ref="red_led"><bounds x="284" y="468" width="10" height="3" /></element>
|
||||
|
||||
<!-- LOWER (1) -->
|
||||
<element ref="button" inputtag="KEY6" inputmask="0x01"><bounds x="203" y="467" width="37" height="9"/></element>
|
||||
<element name="LP14" ref="red_led"><bounds x="216" y="468" width="10" height="3" /></element>
|
||||
|
||||
|
||||
<!-- EFFECT/CTRL -->
|
||||
<element ref="button" inputtag="KEY7" inputmask="0x01"><bounds x="53" y="204" width="59" height="13"/></element>
|
||||
<element name="LP24" ref="red_led"><bounds x="75" y="205" width="15" height="5" /></element>
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
<script><![CDATA[
|
||||
file:set_resolve_tags_callback(
|
||||
function()
|
||||
-- These constants need to match the "slider" and
|
||||
-- "slider-knob" element attributes.
|
||||
local slider_height <const> = 82
|
||||
local knob_height <const> = 24
|
||||
local knob_slider_delta_y <const> = 5 -- slider y - knob y
|
||||
|
||||
local slider_deadzone <const> = math.floor(knob_height / 2) - knob_slider_delta_y
|
||||
|
||||
-- Local state used by the pointer update handler.
|
||||
local sliders = {}
|
||||
local slider_fields = {}
|
||||
local selected = 0
|
||||
|
||||
-- Gather relevant elements and inputs into local state.
|
||||
local view = file.views["Internal Layout"]
|
||||
for i = 1, #view.items do
|
||||
local item = view.items:at(i)
|
||||
if item.id ~= nil and string.find(item.id, "SLIDER") == 1 then
|
||||
local port_tag = item.id
|
||||
local port = file.device:ioport(port_tag)
|
||||
local field = nil
|
||||
if port ~= nil then
|
||||
for k, val in pairs(port.fields) do
|
||||
field = val
|
||||
break
|
||||
end
|
||||
if field == nil then
|
||||
print("LAYOUT ERROR - Port does not have a field: " .. port_tag)
|
||||
end
|
||||
else
|
||||
print("LAYOUT ERROR - Port not found: " .. port_tag)
|
||||
end
|
||||
table.insert(sliders, item)
|
||||
table.insert(slider_fields, field)
|
||||
end
|
||||
end
|
||||
|
||||
view:set_pointer_updated_callback(
|
||||
function(type, id, dev, x, y, btn, dn, up, cnt)
|
||||
-- No button pressed. Reset state.
|
||||
if btn & 1 == 0 then
|
||||
selected = 0
|
||||
return
|
||||
end
|
||||
|
||||
-- Button just pressed. Find affected slider.
|
||||
if dn & 1 ~= 0 then
|
||||
for i = 1, #sliders do
|
||||
if sliders[i].bounds:includes(x, y) then
|
||||
selected = i
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- No slider selected. Nothing to do.
|
||||
if selected <= 0 then
|
||||
return
|
||||
end
|
||||
|
||||
-- A slider is selected. Update state and, indirectly,
|
||||
-- slider knob position, based on the pointer's Y position.
|
||||
|
||||
-- It is assumed the attached IO field is an IPT_ADJUSTER
|
||||
-- with a range of 0-100 (the default).
|
||||
|
||||
local bbox = sliders[selected].bounds
|
||||
local scale_factor = bbox.height / slider_height
|
||||
local min_y = bbox.y0 + slider_deadzone * scale_factor
|
||||
local max_y = bbox.y1 - slider_deadzone * scale_factor
|
||||
|
||||
local new_value = 100 - 100 * (y - min_y) / (max_y - min_y)
|
||||
new_value = math.floor(new_value + 0.5)
|
||||
if new_value < 0 then new_value = 0 end
|
||||
if new_value > 100 then new_value = 100 end
|
||||
slider_fields[selected].user_value = new_value
|
||||
end)
|
||||
end)
|
||||
]]></script>
|
||||
|
||||
</mamelayout>
|
@ -17580,6 +17580,7 @@ jongtei // "532" Mahjong Jong-Tei (C) 1999 Dynax
|
||||
jongteia // Mahjong Jong-Tei (C) 2000 Techno-Top
|
||||
kotbinsp // "909" 1997 Dynax / Shinwhajin
|
||||
kotbinyo // 1997 Dynax / Shinwhajin
|
||||
kotbinyosu // 1997 Dynax / Shinwhajin
|
||||
mjchuuka // "121" (c) 1998 Dynax
|
||||
mjdchuka // "111" (c) 1995 Nakanihon
|
||||
mjflove // "500" (c) 1996 Dynax
|
||||
@ -17984,6 +17985,9 @@ rpanic // (c) 1992 Excellent System / Jaleco
|
||||
@source:excellent/dblcrown.cpp
|
||||
dblcrown // (c) 1994 Excellent System
|
||||
|
||||
@source:excellent/es8906.cpp
|
||||
dream9
|
||||
|
||||
@source:excellent/es9501.cpp
|
||||
d9flower
|
||||
specd9
|
||||
@ -29467,6 +29471,7 @@ castrev // Revolution
|
||||
@source:misc/cb2001.cpp
|
||||
cb2001 // (c) 2000 Dyna Electronics
|
||||
cb4 // (c) 1997 Dyna Electronics
|
||||
cb4a // (c) 1997 Dyna Electronics
|
||||
cb5 // (c) 1997 Dyna Electronics
|
||||
cb5_11 // (c) 1997 Dyna Electronics
|
||||
crzybell // (c) 1995 Dyna Electronics
|
||||
@ -31335,9 +31340,6 @@ mirderby // (c) 1988 Home Data?
|
||||
@source:misc/mjsenpu.cpp
|
||||
mjsenpu
|
||||
|
||||
@source:misc/mole.cpp
|
||||
mole // (c) 1982 Yachiyo Electronics, Ltd.
|
||||
|
||||
@source:misc/monon_color.cpp
|
||||
mononcol // (c) 2011 M&D
|
||||
|
||||
@ -32183,6 +32185,7 @@ fb2ndv1 // (c) 2004 Amcoe
|
||||
fb2ndv2 // (c) 2004 Amcoe
|
||||
fb3g // (c) 200? Amcoe - Fruit Bonus 3G
|
||||
fb4 // (c) 2004 Amcoe - Fruit Bonus 2004
|
||||
fb4_14 // (c) 2004 Amcoe
|
||||
fb4b2 // (c) 2004 Amcoe
|
||||
fb4c1 // (c) 2004 Amcoe
|
||||
fb4c2 // (c) 2004 Amcoe
|
||||
@ -32418,14 +32421,6 @@ vcarn // (c) 1999 Electronic Projects
|
||||
sprcros2 // (c) 1986 GM Shoji
|
||||
sprcros2a // (c) 1986 GM Shoji
|
||||
|
||||
@source:misc/ssingles.cpp
|
||||
atamanot // (c) 1983 Yachiyo Denki / Uni Enterprize
|
||||
ssingles // Yachiyo?
|
||||
|
||||
@source:misc/sstrangr.cpp
|
||||
sstrangr // (c) 1978 Yachiyo Electronics, Ltd.
|
||||
sstrangr2 // (c) 1979 Yachiyo Electronics, Ltd.
|
||||
|
||||
@source:misc/startouch.cpp
|
||||
europl01 //
|
||||
|
||||
@ -41851,6 +41846,7 @@ rezon // (c) 1992 Allumer
|
||||
rezono // (c) 1991 Allumer
|
||||
setaroul // UF (c) 1989? Visco
|
||||
setaroula // hack (CODERE)
|
||||
setaroulm // UF (c) 1989? Visco
|
||||
simpsonjr // bootleg of J. J. Squawkers by Daigom
|
||||
sokonuke // (c) 1995 Sammy Industries
|
||||
stg // (c) 1991 Athena / Tecmo
|
||||
@ -47321,6 +47317,17 @@ x168 //
|
||||
x820 //
|
||||
x820ii //
|
||||
|
||||
@source:yachiyo/mole.cpp
|
||||
mole // (c) 1982 Yachiyo Electronics, Ltd.
|
||||
|
||||
@source:yachiyo/ssingles.cpp
|
||||
atamanot // (c) 1983 Yachiyo Denki / Uni Enterprize
|
||||
ssingles // Yachiyo?
|
||||
|
||||
@source:yachiyo/sstrangr.cpp
|
||||
sstrangr // (c) 1978 Yachiyo Electronics, Ltd.
|
||||
sstrangr2 // (c) 1979 Yachiyo Electronics, Ltd.
|
||||
|
||||
@source:yamaha/fb01.cpp
|
||||
fb01 // 1986 FB-01
|
||||
|
||||
|
@ -7,7 +7,7 @@ This driver covers Dyna games running on the DYNA CPU91A-011 custom CPU.
|
||||
It is an encrypted NEC V25 or V35.
|
||||
It has been seen on the following PCBs:
|
||||
D9203
|
||||
D9205 (sub PCB)
|
||||
D9205 or D9205B (sub PCB)
|
||||
D9304
|
||||
D9401
|
||||
D9701 (sub PCB)
|
||||
@ -1597,7 +1597,7 @@ ROM_END
|
||||
|
||||
ROM_START( cb4 ) // Wing W4 board + DYNA D9205 subboard; DYNA CB4 V5.0 in bookkeeping screen.
|
||||
ROM_REGION16_LE( 0x040000, "boot_prg", 0 )
|
||||
ROM_LOAD16_WORD( "5mk.2g", 0x020000, 0x10000, CRC(ecc6f80e) SHA1(b6de63cd5231ef9481ee79d841a6ea591add7e4d) )
|
||||
ROM_LOAD16_WORD( "5mk.2g", 0x20000, 0x10000, CRC(ecc6f80e) SHA1(b6de63cd5231ef9481ee79d841a6ea591add7e4d) )
|
||||
ROM_RELOAD( 0x30000, 0x10000)
|
||||
|
||||
ROM_REGION( 0x100000, "gfx", 0 )
|
||||
@ -1609,6 +1609,20 @@ ROM_START( cb4 ) // Wing W4 board + DYNA D9205 subboard; DYNA CB4 V5.0 in bookke
|
||||
ROM_LOAD( "82s147.11b", 0x200, 0x200, BAD_DUMP CRC(a67e7a63) SHA1(b23e0eb9af13e57bbc8602ddc7fb381ba5c8267e) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cb4a ) // DYNA D9300 + DYNA D9205 subboard; DYNA CB4T V1.2 in bookkeeping screen.
|
||||
ROM_REGION16_LE( 0x040000, "boot_prg", 0 )
|
||||
ROM_LOAD16_WORD( "12fb.2g", 0x20000, 0x10000, CRC(2d0e519a) SHA1(a538e3003d8a008dd45ea9fd10b249744b87f3a6) )
|
||||
ROM_RELOAD( 0x30000, 0x10000)
|
||||
|
||||
ROM_REGION( 0x100000, "gfx", 0 ) // not dumped for this set
|
||||
ROM_LOAD16_BYTE( "cb4.4i", 0x000000, 0x040000, BAD_DUMP CRC(c1799150) SHA1(50e80607b93f6ee35e3e8ff5d854dc83afe76505) )
|
||||
ROM_LOAD16_BYTE( "cb4.4j", 0x000001, 0x040000, BAD_DUMP CRC(3a12cf69) SHA1(232eeca78cdabcd952825aba0ad397e3dde79747) )
|
||||
|
||||
ROM_REGION( 0x400, "proms", 0 ) // not dumped yet
|
||||
ROM_LOAD( "82s147.9b", 0x000, 0x200, BAD_DUMP CRC(dcf976d2) SHA1(73a08e4587f3516d694a8060b79470cf71df3925) )
|
||||
ROM_LOAD( "82s147.11b", 0x200, 0x200, BAD_DUMP CRC(a67e7a63) SHA1(b23e0eb9af13e57bbc8602ddc7fb381ba5c8267e) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cb5 ) // Wing W4 board + DYNA D9701 subboard; DYNA CB5 V1.3 in bookkeeping screen. Appears to be the missing link to igs/goldstar.cpp hw.
|
||||
ROM_REGION16_LE( 0x040000, "boot_prg", 0 )
|
||||
ROM_LOAD16_WORD( "cb5-131.1g", 0x020000, 0x20000, CRC(7d47192c) SHA1(bc65f0b3223789fbcd78a7f3ba4f1c0e2a1ee4da) )
|
||||
@ -1767,6 +1781,7 @@ GAME( 1993, scherrym12 , scherrym, scherrym, cb2001, cb2001_state, init_sm
|
||||
GAME( 1997, scherrymp, 0, scherrymp, scherrymp, cb2001_state, init_smaller_proms, ROT0, "Dyna", "Super Cherry Master Plus (V1.6)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1997, scherrymp10u, scherrymp, scherrymp, scherrymp, cb2001_state, empty_init, ROT0, "Dyna", "Super Cherry Master Plus (V1.0U)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1993, cb4, 0, cb5, cb5, cb2001_state, empty_init, ROT0, "Dyna", "Cherry Bonus IV (V5.0)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1993, cb4a, cb4, cb5, cb5, cb2001_state, empty_init, ROT0, "Dyna", "Cherry Bonus IV (V1.2)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1997, cb5, 0, cb5, cb5, cb2001_state, init_smaller_proms, ROT0, "Dyna", "Cherry Bonus V Five (V1.3)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1997, cb5_11, cb5, cb5, cb5, cb2001_state, init_smaller_proms, ROT0, "Dyna", "Cherry Bonus V Five (V1.1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1998, mystjb, 0, scherrymp, scherrymp, cb2001_state, init_smaller_proms, ROT0, "Dyna", "Mystery J & B (V1.3G)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -3699,6 +3699,25 @@ ROM_START( fb4d2 )
|
||||
ROM_LOAD( "fb415lt.id", 0x00, 0x20, CRC(f44d3e8c) SHA1(af462959a37c271c840324d74b2619691fadf8bd) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( fb4_14 )
|
||||
ROM_REGION( 0x80000, "maincpu", 0 ) /* Z80 Code */
|
||||
ROM_LOAD( "rom1.bin", 0x00000, 0x40000, CRC(166fc16c) SHA1(aa571cf010a308c9f615df3aa11c956ee246dc6a) )
|
||||
|
||||
ROM_REGION( 0x040000, "oki", ROMREGION_ERASE00 ) /* Samples */
|
||||
ROM_LOAD( "rom2.bin", 0x00000, 0x40000, CRC(f0bfb08e) SHA1(521a277bd0445d677afe33ec245b2b3f501771d0) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_LOAD16_BYTE( "rom3.bin", 0x00000, 0x80000, CRC(4176937d) SHA1(dbde944a154f648a86628a8165fa27032115c417) )
|
||||
ROM_LOAD16_BYTE( "rom4.bin", 0x00001, 0x80000, CRC(f8c57041) SHA1(ca8f58e89d31563b363a78db89e2711402f3ba80) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx2", 0 )
|
||||
ROM_LOAD16_BYTE( "rom5.bin", 0x00000, 0x80000, CRC(41ad506c) SHA1(19086ab859a60e5127af0e51381cbb9fda6de74a) )
|
||||
ROM_LOAD16_BYTE( "rom6.bin", 0x00001, 0x80000, CRC(f6c07f3d) SHA1(709fe2a443fdd32a3f9ab9161d5321a01c0119bb) )
|
||||
|
||||
ROM_REGION( 0x1000, "nvram", ROMREGION_ERASE00 ) /* default settings */
|
||||
ROM_LOAD( "fb415lt.id", 0x00, 0x20, CRC(1e27e3e1) SHA1(c2111ed7b3afa24457bca3fa4a4bc5947113b370) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( fb4v1 )
|
||||
ROM_REGION( 0x80000, "maincpu", 0 ) /* Z80 Code */
|
||||
ROM_LOAD( "fb4v15r.bin", 0x00000, 0x40000, CRC(891f119f) SHA1(1823826cd958a951a930b9a1a23f7cf092ed6ab2) )
|
||||
@ -5853,7 +5872,7 @@ void sfbonus_state::sfbonus_bitswap(
|
||||
void sfbonus_state::init_abnudge() { sfbonus_bitswap( 0x33, 0,3,7,6,5,2,1,4, 0xff, 3,7,6,5,1,0,4,2, 0x36, 4,2,3,7,6,5,1,0, 0xa8, 3,2,4,0,1,7,6,5, 0x2c, 0,1,7,6,5,2,4,3, 0xff, 3,7,6,5,1,0,4,2, 0x26, 2,4,3,7,6,5,1,0, 0xbe, 4,1,3,0,2,7,6,5); }
|
||||
void sfbonus_state::init_abnudged() { sfbonus_bitswap( 0x3b, 0,1,7,6,5,4,3,2, 0xef, 0,7,6,5,4,3,2,1, 0x21, 0,2,1,7,6,5,4,3, 0xa9, 4,3,0,1,2,7,6,5, 0x3d, 2,1,7,6,5,4,3,0, 0xed, 2,7,6,5,4,3,1,0, 0x21, 0,2,1,7,6,5,4,3, 0xa8, 4,3,1,2,0,7,6,5); }
|
||||
void sfbonus_state::init_abnudgev() { sfbonus_bitswap( 0x39, 1,2,7,6,5,4,3,0, 0xef, 2,7,6,5,4,3,0,1, 0x21, 2,1,0,7,6,5,4,3, 0xa8, 4,3,1,2,0,7,6,5, 0x3f, 0,1,7,6,5,4,3,2, 0xee, 1,7,6,5,4,3,0,2, 0x25, 1,0,2,7,6,5,4,3, 0xac, 4,3,0,1,2,7,6,5); }
|
||||
void sfbonus_state::init_act2000() { sfbonus_bitswap( 0x25, 1,2,7,6,5,4,3,0, 0xE6, 1,7,6,5,4,3,0,2, 0x20, 2,4,1,7,6,5,0,3, 0xBF, 0,3,1,2,4,7,6,5, 0x2E, 1,3,7,6,5,2,0,4, 0xE0, 3,7,6,5,2,0,4,1, 0x2D, 4,1,2,7,6,5,0,3, 0xB2, 2,0,4,1,3,7,6,5); }
|
||||
void sfbonus_state::init_act2000() { sfbonus_bitswap( 0x25, 1,2,7,6,5,4,3,0, 0xe6, 1,7,6,5,4,3,0,2, 0x20, 2,4,1,7,6,5,0,3, 0xbf, 0,3,1,2,4,7,6,5, 0x2e, 1,3,7,6,5,2,0,4, 0xe0, 3,7,6,5,2,0,4,1, 0x2d, 4,1,2,7,6,5,0,3, 0xb2, 2,0,4,1,3,7,6,5); }
|
||||
void sfbonus_state::init_act2000d() { sfbonus_bitswap( 0x3d, 0,2,7,6,5,4,3,1, 0xef, 1,7,6,5,4,3,2,0, 0x27, 0,2,1,7,6,5,4,3, 0xad, 4,3,0,1,2,7,6,5, 0x3b, 2,1,7,6,5,4,3,0, 0xed, 0,7,6,5,4,3,2,1, 0x27, 0,2,1,7,6,5,4,3, 0xaa, 4,3,1,2,0,7,6,5); }
|
||||
void sfbonus_state::init_act2000v() { sfbonus_bitswap( 0x39, 1,2,7,6,5,4,3,0, 0xef, 2,7,6,5,4,3,0,1, 0x23, 2,1,0,7,6,5,4,3, 0xa8, 4,3,1,2,0,7,6,5, 0x3b, 0,1,7,6,5,4,3,2, 0xe9, 1,7,6,5,4,3,0,2, 0x21, 1,0,2,7,6,5,4,3, 0xac, 4,3,0,1,2,7,6,5); }
|
||||
void sfbonus_state::init_act2000v2() { sfbonus_bitswap( 0x39, 1,2,7,6,5,4,3,0, 0xef, 2,7,6,5,4,3,0,1, 0x21, 2,1,0,7,6,5,4,3, 0xa8, 4,3,1,2,0,7,6,5, 0x3a, 0,1,7,6,5,4,3,2, 0xe9, 1,7,6,5,4,3,0,2, 0x21, 1,0,2,7,6,5,4,3, 0xac, 4,3,0,1,2,7,6,5); }
|
||||
@ -5879,7 +5898,7 @@ void sfbonus_state::init_classiced() { sfbonus_bitswap( 0x38, 0,2,7,6,5,4
|
||||
void sfbonus_state::init_classiced3() { sfbonus_bitswap( 0x3b, 2,1,7,6,5,4,3,0, 0xea, 2,7,6,5,4,3,0,1, 0x24, 2,1,0,7,6,5,4,3, 0xaa, 4,3,2,0,1,7,6,5, 0x3e, 1,0,7,6,5,4,3,2, 0xe8, 0,7,6,5,4,3,1,2, 0x24, 2,1,0,7,6,5,4,3, 0xae, 4,3,1,0,2,7,6,5); }
|
||||
void sfbonus_state::init_classicev() { sfbonus_bitswap( 0x39, 1,2,7,6,5,4,3,0, 0xef, 2,7,6,5,4,3,0,1, 0x22, 2,0,1,7,6,5,4,3, 0xa8, 4,3,1,2,0,7,6,5, 0x3a, 2,1,7,6,5,4,3,0, 0xea, 2,7,6,5,4,3,1,0, 0x22, 2,1,0,7,6,5,4,3, 0xac, 4,3,0,1,2,7,6,5); }
|
||||
void sfbonus_state::init_classicev3() { sfbonus_bitswap( 0x39, 1,2,7,6,5,4,3,0, 0xef, 2,7,6,5,4,3,0,1, 0x22, 2,0,1,7,6,5,4,3, 0xa8, 4,3,1,2,0,7,6,5, 0x3f, 2,1,7,6,5,4,3,0, 0xe9, 2,7,6,5,4,3,1,0, 0x22, 2,1,0,7,6,5,4,3, 0xac, 4,3,0,1,2,7,6,5); }
|
||||
void sfbonus_state::init_dblchal() { sfbonus_bitswap( 0x3D, 0,3,7,6,5,2,1,4, 0xF3, 3,7,6,5,1,0,4,2, 0x3D, 2,0,1,7,6,5,3,4, 0xA8, 3,4,2,0,1,7,6,5, 0x3D, 2,3,7,6,5,1,0,4, 0xEF, 2,7,6,5,1,0,3,4, 0x3A, 4,2,3,7,6,5,1,0, 0xBA, 2,4,1,0,3,7,6,5); }
|
||||
void sfbonus_state::init_dblchal() { sfbonus_bitswap( 0x3d, 0,3,7,6,5,2,1,4, 0xf3, 3,7,6,5,1,0,4,2, 0x3d, 2,0,1,7,6,5,3,4, 0xa8, 3,4,2,0,1,7,6,5, 0x3d, 2,3,7,6,5,1,0,4, 0xef, 2,7,6,5,1,0,3,4, 0x3a, 4,2,3,7,6,5,1,0, 0xba, 2,4,1,0,3,7,6,5); }
|
||||
void sfbonus_state::init_dblchald() { sfbonus_bitswap( 0x3c, 0,1,7,6,5,4,3,2, 0xed, 0,7,6,5,4,3,2,1, 0x27, 0,2,1,7,6,5,4,3, 0xae, 4,3,1,0,2,7,6,5, 0x3b, 2,1,7,6,5,4,3,0, 0xea, 2,7,6,5,4,3,0,1, 0x27, 0,2,1,7,6,5,4,3, 0xae, 4,3,1,2,0,7,6,5); }
|
||||
void sfbonus_state::init_dblchalv() { sfbonus_bitswap( 0x39, 1,2,7,6,5,4,3,0, 0xef, 2,7,6,5,4,3,0,1, 0x22, 2,0,1,7,6,5,4,3, 0xa8, 4,3,1,2,0,7,6,5, 0x3f, 1,0,7,6,5,4,3,2, 0xec, 1,7,6,5,4,3,0,2, 0x21, 1,0,2,7,6,5,4,3, 0xac, 4,3,0,1,2,7,6,5); }
|
||||
void sfbonus_state::init_fb2gen() { sfbonus_bitswap( 0x35, 0,3,7,6,5,2,1,4, 0xe8, 2,7,6,5,4,3,1,0, 0x23, 4,3,2,7,6,5,1,0, 0xb8, 2,1,4,0,3,7,6,5, 0x2d, 0,1,7,6,5,4,2,3, 0xf8, 2,7,6,5,1,4,3,0, 0x23, 4,0,3,7,6,5,2,1, 0xb8, 2,1,4,0,3,7,6,5); }
|
||||
@ -6118,6 +6137,7 @@ GAME( 2004, fb4b2, fb4, sfbonus, amcoe2_reels3, sfbonus_state, init_f
|
||||
GAME( 2004, fb4c2, fb4, sfbonus, amcoe1_reels3, sfbonus_state, init_fb4, ROT0, "Amcoe", "Fruit Bonus 2004 (Version 1.5LT, set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2004, fb4d2, fb4, sfbonus, amcoe1_reels3, sfbonus_state, init_fb4d, ROT0, "Amcoe", "Fruit Bonus 2004 (Version 1.5LT, set 3)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2004, fb4v2, fb4, sfbonus, amcoe1_reels3, sfbonus_state, init_fb4v, ROT0, "Amcoe", "Fruit Bonus 2004 (Version 1.5LT Dual)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2004, fb4_14, fb4, sfbonus, amcoe1_reels3, sfbonus_state, init_fb4d, ROT0, "Amcoe", "Fruit Bonus 2004 (Version 1.4)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2004, fb4o, fb4, sfbonus, amcoe2_reels3, sfbonus_state, init_fb4, ROT0, "Amcoe", "Fruit Bonus 2004 (Version 1.3XT)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 2004, fb4o2, fb4, sfbonus, amcoe2_reels3, sfbonus_state, init_fb4, ROT0, "Amcoe", "Fruit Bonus 2004 (Version 1.2)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
|
@ -418,17 +418,14 @@ ROM_END
|
||||
|
||||
ROM_START( sshota )
|
||||
ROM_REGION( 0x2000, "maincpu", 0 )
|
||||
ROM_LOAD( "ss_1.a6", 0x0000, 0x0400, CRC(45572eac) SHA1(17f59d651793fbfb1359327f85bf32e25c29e43d) )
|
||||
ROM_LOAD( "ss_1.a6", 0x0000, 0x0400, CRC(ec1cbcd0) SHA1(6e4bcc7e83b1237a25f830b96c0bcb76b876ace4) )
|
||||
ROM_LOAD( "ss_2.a7", 0x0400, 0x0400, CRC(2d63c338) SHA1(3b082ddd8dc42d68805c0a5d24e1eca3ad808f5c) )
|
||||
ROM_LOAD( "ss_3.a9", 0x0800, 0x0400, CRC(79aae3e3) SHA1(7d9132b1a5663e118587bcebe9b467badaf51be5) )
|
||||
ROM_LOAD( "ss_4.a10", 0x0c00, 0x0400, BAD_DUMP CRC(b7f6f5e8) SHA1(d02a84360ca746c1cc0d55198bfbff5a41183911) )
|
||||
ROM_LOAD( "ss_4.a10", 0x0c00, 0x0400, CRC(3d4fbcbf) SHA1(a7d05fa2c65ce2f4f2d732f562f3b8b0effc6de7) )
|
||||
ROM_LOAD( "ss_5.a11", 0x1000, 0x0400, CRC(d4f71cd9) SHA1(aab7e33c51e180c2486c59758105359d15e73a1e) )
|
||||
ROM_LOAD( "ss_6.a12", 0x1400, 0x0400, CRC(9d2f087e) SHA1(9c64d6a872395f6097db740199a30bcbc803ac16) )
|
||||
ROM_LOAD( "ss_7.a13", 0x1800, 0x0400, CRC(20185164) SHA1(b7ada6150a05539e9a788e6e28786a9a6832744a) )
|
||||
ROM_LOAD( "ss_8.a15", 0x1c00, 0x0400, CRC(95a01a0e) SHA1(72c233bb94a45780fa061c603eedde9cd7df3998) )
|
||||
// This seems a problem in the dump (it's 00 - HALT - here while it's 0xc4 - LDI - in the other set).
|
||||
// This causes the game to hang when pressing start. Routine is otherwise identical to the other set.
|
||||
ROM_FILL( 0x0c00, 0x0001, 0xc4 )
|
||||
|
||||
ROM_REGION( 0x0800, "gfx", 0 )
|
||||
ROM_LOAD( "ss_a.b9", 0x0000, 0x0400, CRC(ad3413e0) SHA1(ea4c2728755fe52a00fdceddca0b641965045005) )
|
||||
|
@ -1134,4 +1134,3 @@ ROM_END
|
||||
|
||||
// In production from 1982 to 1985.
|
||||
SYST(1982, memorymoog, 0, 0, memorymoog, memorymoog, memorymoog_state, empty_init, "Moog Music", "Memorymoog", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE)
|
||||
|
||||
|
@ -366,7 +366,7 @@ void source_state::cv_w(offs_t offset, u8 data)
|
||||
if (offset >= static_cast<int>(CV::SIZE))
|
||||
return;
|
||||
|
||||
const float cv = MAX_CV * data / 255.0f;
|
||||
const float cv = MAX_CV * data / 255.0F;
|
||||
if (cv == m_cv[offset])
|
||||
return;
|
||||
m_cv[offset] = cv;
|
||||
@ -410,7 +410,7 @@ float source_state::get_keyboard_v() const
|
||||
|
||||
// *** Convert pressed key to a voltage.
|
||||
|
||||
static constexpr const float KEYBOARD_VREF = 8.24f; // From schematic.
|
||||
static constexpr const float KEYBOARD_VREF = 8.24F; // From schematic.
|
||||
static constexpr const float RKEY = RES_R(100);
|
||||
static constexpr const float R74 = RES_R(150);
|
||||
static constexpr const float R76 = RES_K(220);
|
||||
|
@ -670,14 +670,13 @@ void pc8001_state::machine_start()
|
||||
{
|
||||
case 16*1024:
|
||||
membank("bank3")->configure_entry(0, ram);
|
||||
program.unmap_readwrite(0x6000, 0xbfff);
|
||||
program.unmap_readwrite(0x8000, 0xbfff);
|
||||
program.install_readwrite_bank(0xc000, 0xffff, membank("bank3"));
|
||||
break;
|
||||
|
||||
case 32*1024:
|
||||
membank("bank3")->configure_entry(0, ram);
|
||||
program.unmap_readwrite(0x6000, 0xbfff);
|
||||
program.unmap_readwrite(0x8000, 0xbfff);
|
||||
program.install_readwrite_bank(0x8000, 0xffff, membank("bank3"));
|
||||
break;
|
||||
|
||||
@ -812,13 +811,20 @@ void pc8001mk2sr_state::pc8001mk2sr(machine_config &config)
|
||||
|
||||
ROM_START( pc8001 )
|
||||
ROM_REGION( 0x8000, Z80_TAG, ROMREGION_ERASEFF )
|
||||
ROM_DEFAULT_BIOS("v110")
|
||||
// PCB pictures shows divided by 3 ROMs (and 4th socket unpopulated)
|
||||
// D2364C ROMs from a pc8001b PCB:
|
||||
// - p12019-106.u10 072NBASIC
|
||||
// - p11219-105.u11 073NBASIC
|
||||
// - p12029-106.u12 171NBASIC
|
||||
ROM_SYSTEM_BIOS( 0, "v101", "N-BASIC v1.01" )
|
||||
ROMX_LOAD( "n80v101.rom", 0x00000, 0x6000, BAD_DUMP CRC(a2cc9f22) SHA1(6d2d838de7fea20ddf6601660d0525d5b17bf8a3), ROM_BIOS(0) )
|
||||
ROM_SYSTEM_BIOS( 1, "v102", "N-BASIC v1.02" )
|
||||
ROMX_LOAD( "n80v102.rom", 0x00000, 0x6000, BAD_DUMP CRC(ed01ca3f) SHA1(b34a98941499d5baf79e7c0e5578b81dbede4a58), ROM_BIOS(1) )
|
||||
ROM_SYSTEM_BIOS( 2, "v110", "N-BASIC v1.10" )
|
||||
ROMX_LOAD( "n80v110.rom", 0x00000, 0x6000, BAD_DUMP CRC(1e02d93f) SHA1(4603cdb7a3833e7feb257b29d8052c872369e713), ROM_BIOS(2) )
|
||||
// empty socket, cfr. notes in header for usage instructions
|
||||
ROM_LOAD_OPTIONAL( "exprom.u13", 0x6000, 0x2000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x800, CGROM_TAG, 0)
|
||||
ROM_LOAD( "font.rom", 0x000, 0x800, CRC(56653188) SHA1(84b90f69671d4b72e8f219e1fe7cd667e976cf7f) )
|
||||
|
@ -161,7 +161,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* The noice generator consists of three LS164 8+8+8
|
||||
* The noise generator consists of three LS164 8+8+8
|
||||
* the output signal is taken after the xor, so
|
||||
* taking bit 0 is not exact
|
||||
*/
|
||||
|
@ -1661,4 +1661,3 @@ ROM_END
|
||||
} // anonymous namespace
|
||||
|
||||
SYST(1980, obdmx, 0, 0, dmx, dmx, dmx_state, empty_init, "Oberheim", "DMX", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND)
|
||||
|
||||
|
@ -23,12 +23,13 @@
|
||||
#include "screen.h"
|
||||
#include "softlist_dev.h"
|
||||
#include "speaker.h"
|
||||
#include "d70.lh"
|
||||
|
||||
#include "multibyte.h"
|
||||
|
||||
#include <queue>
|
||||
|
||||
#include "roland_d70.lh"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
@ -544,7 +545,7 @@ void roland_d70_state::d70(machine_config &config) {
|
||||
MIDI_PORT(config, "mdout", midiout_slot, "midiout");
|
||||
MIDI_PORT(config, "mdthru", midiout_slot, "midiout");
|
||||
|
||||
config.set_default_layout(layout_d70);
|
||||
config.set_default_layout(layout_roland_d70);
|
||||
}
|
||||
|
||||
void roland_d70_state::init_d70() {
|
||||
|
@ -4719,50 +4719,49 @@ void segaxbd_new_state_double::init_gprider_double()
|
||||
// GAME DRIVERS
|
||||
//**************************************************************************
|
||||
|
||||
// YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR,COMPANY,FULLNAME,FLAGS
|
||||
GAME( 1987, aburner2, 0, sega_aburner2, aburner2, segaxbd_new_state, init_aburner2, ROT0,"Sega", "After Burner II", 0 )
|
||||
GAME( 1987, aburner2g,aburner2, sega_aburner2, aburner2, segaxbd_new_state, init_aburner2, ROT0,"Sega", "After Burner II (German)", 0 )
|
||||
// YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR,COMPANY,FULLNAME,FLAGS
|
||||
GAME( 1987, aburner, 0, sega_aburner2, aburner, segaxbd_new_state, init_aburner2, ROT0, "Sega", "After Burner", 0 )
|
||||
|
||||
GAME( 1987, aburner, aburner2, sega_aburner2, aburner, segaxbd_new_state, init_aburner2, ROT0,"Sega", "After Burner", 0 )
|
||||
GAME( 1987, aburner2, 0, sega_aburner2, aburner2, segaxbd_new_state, init_aburner2, ROT0, "Sega", "After Burner II", 0 )
|
||||
GAME( 1987, aburner2g, aburner2, sega_aburner2, aburner2, segaxbd_new_state, init_aburner2, ROT0, "Sega", "After Burner II (German)", 0 )
|
||||
|
||||
GAME( 1987, thndrbld, 0, sega_xboard_fd1094, thndrbld, segaxbd_new_state, empty_init, ROT0, "Sega", "Thunder Blade (upright) (FD1094 317-0056)", 0 )
|
||||
GAME( 1987, thndrbld1,thndrbld, sega_xboard, thndrbd1, segaxbd_new_state, empty_init, ROT0, "Sega", "Thunder Blade (deluxe/standing) (unprotected)", 0 )
|
||||
GAME( 1987, thndrbld, 0, sega_xboard_fd1094, thndrbld, segaxbd_new_state, empty_init, ROT0, "Sega", "Thunder Blade (upright) (FD1094 317-0056)", 0 )
|
||||
GAME( 1987, thndrbld1, thndrbld, sega_xboard, thndrbd1, segaxbd_new_state, empty_init, ROT0, "Sega", "Thunder Blade (deluxe/standing) (unprotected)", 0 )
|
||||
|
||||
GAME( 1989, lastsurv, 0, sega_lastsurv_fd1094,lastsurv, segaxbd_new_state, empty_init, ROT0, "Sega", "Last Survivor (Japan) (FD1094 317-0083)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, lastsurv, 0, sega_lastsurv_fd1094,lastsurv, segaxbd_new_state, empty_init, ROT0, "Sega", "Last Survivor (Japan) (FD1094 317-0083)", MACHINE_NODEVICE_LAN )
|
||||
|
||||
GAME( 1989, loffire, 0, sega_xboard_fd1094, loffire, segaxbd_new_state, init_loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (World) (FD1094 317-0136)", 0 )
|
||||
GAME( 1989, loffireu, loffire, sega_xboard_fd1094, loffire, segaxbd_new_state, init_loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (US) (FD1094 317-0135)", 0 )
|
||||
GAME( 1989, loffirej, loffire, sega_xboard_fd1094, loffire, segaxbd_new_state, init_loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (Japan) (FD1094 317-0134)", 0 )
|
||||
GAME( 1989, loffire, 0, sega_xboard_fd1094, loffire, segaxbd_new_state, init_loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (World) (FD1094 317-0136)", 0 )
|
||||
GAME( 1989, loffireu, loffire, sega_xboard_fd1094, loffire, segaxbd_new_state, init_loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (US) (FD1094 317-0135)", 0 )
|
||||
GAME( 1989, loffirej, loffire, sega_xboard_fd1094, loffire, segaxbd_new_state, init_loffire, ROT0, "Sega", "Line of Fire / Bakudan Yarou (Japan) (FD1094 317-0134)", 0 )
|
||||
|
||||
GAME( 1989, rachero, 0, sega_xboard_fd1094, rachero, segaxbd_new_state, empty_init, ROT0, "Sega", "Racing Hero (FD1094 317-0144)", 0 )
|
||||
GAME( 1989, rachero, 0, sega_xboard_fd1094, rachero, segaxbd_new_state, empty_init, ROT0, "Sega", "Racing Hero (FD1094 317-0144)", 0 )
|
||||
|
||||
GAME( 1989, smgp, 0, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (World, Rev B) (FD1094 317-0126a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgp6, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (World, Rev A) (FD1094 317-0126a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgp5, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (World) (FD1094 317-0126)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgpu, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (US, Rev C) (FD1094 317-0125a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgpu1, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (US, Rev B) (FD1094 317-0125a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgpu2, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (US, Rev A) (FD1094 317-0125a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgpj, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (Japan, Rev B) (FD1094 317-0124a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgpja, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (Japan, Rev A) (FD1094 317-0124a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgp, 0, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (World, Rev B) (FD1094 317-0126a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgp6, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (World, Rev A) (FD1094 317-0126a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgp5, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (World) (FD1094 317-0126)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgpu, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (US, Rev C) (FD1094 317-0125a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgpu1, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (US, Rev B) (FD1094 317-0125a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgpu2, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (US, Rev A) (FD1094 317-0125a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgpj, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (Japan, Rev B) (FD1094 317-0124a)", MACHINE_NODEVICE_LAN )
|
||||
GAME( 1989, smgpja, smgp, sega_smgp_fd1094, smgp, segaxbd_new_state, init_smgp, ROT0, "Sega", "Super Monaco GP (Japan, Rev A) (FD1094 317-0124a)", MACHINE_NODEVICE_LAN )
|
||||
|
||||
GAME( 1990, abcop, 0, sega_xboard_fd1094, abcop, segaxbd_new_state, empty_init, ROT0, "Sega", "A.B. Cop (World) (FD1094 317-0169b)", 0 )
|
||||
GAME( 1990, abcopj, abcop, sega_xboard_fd1094, abcop, segaxbd_new_state, empty_init, ROT0, "Sega", "A.B. Cop (Japan) (FD1094 317-0169b)", 0 )
|
||||
GAME( 1990, abcop, 0, sega_xboard_fd1094, abcop, segaxbd_new_state, empty_init, ROT0, "Sega", "A.B. Cop (World) (FD1094 317-0169b)", 0 )
|
||||
GAME( 1990, abcopj, abcop, sega_xboard_fd1094, abcop, segaxbd_new_state, empty_init, ROT0, "Sega", "A.B. Cop (Japan) (FD1094 317-0169b)", 0 )
|
||||
|
||||
// wasn't officially available as a single PCB setup, but runs anyway albeit with messages suggesting you can compete against a nonexistent rival.
|
||||
GAME( 1990, gpriders, gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, init_gprider, ROT0, "Sega", "GP Rider (World, FD1094 317-0163)", 0 )
|
||||
GAME( 1990, gpriderus,gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, init_gprider, ROT0, "Sega", "GP Rider (US, FD1094 317-0162)", 0 )
|
||||
GAME( 1990, gpriderjs,gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, init_gprider, ROT0, "Sega", "GP Rider (Japan, FD1094 317-0161)", 0 )
|
||||
GAME( 1990, gpriders, gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, init_gprider, ROT0, "Sega", "GP Rider (World, FD1094 317-0163)", 0 )
|
||||
GAME( 1990, gpriderus, gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, init_gprider, ROT0, "Sega", "GP Rider (US, FD1094 317-0162)", 0 )
|
||||
GAME( 1990, gpriderjs, gprider, sega_xboard_fd1094, gprider, segaxbd_new_state, init_gprider, ROT0, "Sega", "GP Rider (Japan, FD1094 317-0161)", 0 )
|
||||
|
||||
// multi X-Board (2 stacks directly connected, shared RAM on bridge PCB - not networked)
|
||||
GAME( 1990, gprider, 0, sega_xboard_fd1094_double, gprider_double, segaxbd_new_state_double, init_gprider_double, ROT0, "Sega", "GP Rider (World, FD1094 317-0163) (Twin setup)", 0 )
|
||||
GAME( 1990, gprideru,gprider, sega_xboard_fd1094_double, gprider_double, segaxbd_new_state_double, init_gprider_double, ROT0, "Sega", "GP Rider (US, FD1094 317-0162) (Twin setup)", 0 )
|
||||
GAME( 1990, gpriderj,gprider, sega_xboard_fd1094_double, gprider_double, segaxbd_new_state_double, init_gprider_double, ROT0, "Sega", "GP Rider (Japan, FD1094 317-0161) (Twin setup)", 0 )
|
||||
GAME( 1990, gprider, 0, sega_xboard_fd1094_double, gprider_double, segaxbd_new_state_double, init_gprider_double, ROT0, "Sega", "GP Rider (World, FD1094 317-0163) (Twin setup)", 0 )
|
||||
GAME( 1990, gprideru, gprider, sega_xboard_fd1094_double, gprider_double, segaxbd_new_state_double, init_gprider_double, ROT0, "Sega", "GP Rider (US, FD1094 317-0162) (Twin setup)", 0 )
|
||||
GAME( 1990, gpriderj, gprider, sega_xboard_fd1094_double, gprider_double, segaxbd_new_state_double, init_gprider_double, ROT0, "Sega", "GP Rider (Japan, FD1094 317-0161) (Twin setup)", 0 )
|
||||
|
||||
// X-Board + other boards?
|
||||
GAME( 1991, rascot, 0, sega_rascot, rascot, segaxbd_new_state, empty_init, ROT0, "Sega", "Royal Ascot (Japan, terminal?)", MACHINE_NODEVICE_LAN | MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
|
||||
|
||||
// decrypted bootlegs
|
||||
|
||||
GAME( 1987, thndrbldd, thndrbld, sega_xboard, thndrbld, segaxbd_new_state, empty_init, ROT0, "bootleg", "Thunder Blade (upright) (bootleg of FD1094 317-0056 set)", 0 )
|
||||
|
||||
GAME( 1989, racherod, rachero, sega_xboard, rachero, segaxbd_new_state, empty_init, ROT0, "bootleg", "Racing Hero (bootleg of FD1094 317-0144 set)", 0 )
|
||||
|
@ -1551,6 +1551,7 @@ public:
|
||||
{ }
|
||||
|
||||
void setaroul(machine_config &config);
|
||||
void setaroulm(machine_config &config);
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(coin_drop_start);
|
||||
ioport_value coin_sensors_r();
|
||||
@ -1582,7 +1583,7 @@ private:
|
||||
void setaroul_palette(palette_device &palette) const;
|
||||
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
|
||||
template <uint8_t Irq1, uint8_t Irq2> TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
|
||||
|
||||
void setaroul_map(address_map &map) ATTR_COLD;
|
||||
|
||||
@ -4664,6 +4665,15 @@ static INPUT_PORTS_START( setaroul )
|
||||
PORT_DIPSETTING( 0x00, "Active High" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( setaroulm )
|
||||
PORT_INCLUDE( setaroul )
|
||||
|
||||
PORT_MODIFY("DSW2-B")
|
||||
PORT_DIPNAME( 0x01, 0x01, "Show Reels" ) PORT_DIPLOCATION("SW2:4")
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Eight Force
|
||||
@ -7764,15 +7774,16 @@ void seta_state::qzkklgy2(machine_config &config)
|
||||
The Roulette
|
||||
***************************************************************************/
|
||||
|
||||
template <uint8_t Irq1, uint8_t Irq2>
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(setaroul_state::interrupt)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
if ((scanline % 32) == 0) // every 2ms?
|
||||
m_maincpu->set_input_line(2, HOLD_LINE); // read 1 board column (out of 26) every other call
|
||||
m_maincpu->set_input_line(Irq1, HOLD_LINE); // read 1 board column (out of 26) every other call
|
||||
|
||||
if (scanline == 248)
|
||||
m_maincpu->set_input_line(4, HOLD_LINE); // vblank
|
||||
m_maincpu->set_input_line(Irq2, HOLD_LINE); // vblank
|
||||
|
||||
// lev 6: RS232
|
||||
}
|
||||
@ -7782,7 +7793,7 @@ void setaroul_state::setaroul(machine_config &config)
|
||||
// basic machine hardware
|
||||
M68000(config, m_maincpu, 16_MHz_XTAL / 2); // 8 MHz
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &setaroul_state::setaroul_map);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(setaroul_state::interrupt), "screen", 0, 1);
|
||||
TIMER(config, "scantimer").configure_scanline(*this, NAME((&setaroul_state::interrupt<2, 4>)), "screen", 0, 1);
|
||||
|
||||
WATCHDOG_TIMER(config, m_watchdog);
|
||||
|
||||
@ -7827,6 +7838,13 @@ void setaroul_state::setaroul(machine_config &config)
|
||||
config.set_default_layout(layout_setaroul);
|
||||
}
|
||||
|
||||
void setaroul_state::setaroulm(machine_config &config)
|
||||
{
|
||||
setaroul(config);
|
||||
|
||||
TIMER(config.replace(), "scantimer").configure_scanline(*this, NAME((&setaroul_state::interrupt<5, 4>)), "screen", 0, 1);
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Eight Force
|
||||
@ -11173,6 +11191,35 @@ ROM_START( setaroula )
|
||||
ROM_LOAD16_BYTE( "uf0-018.u51", 0x001, 0x200, CRC(1c584d5f) SHA1(f1c7e3da8b108d78b459cae53fabb6e28d3a7ee8) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( setaroulm )
|
||||
ROM_REGION( 0x0c0000, "maincpu", 0 ) // 68000 Code
|
||||
ROM_LOAD16_BYTE( "uf011.002.5a", 0x000000, 0x010000, CRC(285f41ba) SHA1(b5ff09cae1e178526145f113cc3c85892e35ec34) )
|
||||
ROM_LOAD16_BYTE( "uf011.003.7a", 0x000001, 0x010000, CRC(2ab925b0) SHA1(f02de8a6643330c833027dd99006ac2d5d07e2f0) )
|
||||
|
||||
ROM_REGION( 0x020000, "gfx1", 0 ) // Sprites
|
||||
ROM_LOAD16_BYTE( "uf1.005.1j", 0x010001, 0x008000, CRC(12ee9729) SHA1(29f621811d52413ae37137035ad687fabfe9e56e) )
|
||||
ROM_LOAD16_BYTE( "uf1.006.1l", 0x010000, 0x008000, CRC(5eb35519) SHA1(1af240ae725102f310a101829539d1ca5323e96c) )
|
||||
ROM_LOAD16_BYTE( "uf1.007.1n", 0x000001, 0x008000, CRC(b287ddcf) SHA1(70d291fcb6a60be2c45e6ad61f1c3922d45ef7e0) )
|
||||
ROM_LOAD16_BYTE( "uf1.008.1r", 0x000000, 0x008000, CRC(6de9a30b) SHA1(308468079b535d1b0ca437251c3135d7f0c91dce) )
|
||||
|
||||
ROM_REGION( 0x400000, "gfx2", 0 ) // Layer 1 - 8bpp, not dumped for this set, but MASK ROM codes match
|
||||
ROM_LOAD32_BYTE( "uf0-010.u15", 0x000000, 0x080000, CRC(0af13a56) SHA1(c294b7947d004c0e0b280ca44636e4059e05a57e) )
|
||||
ROM_LOAD32_BYTE( "uf0-012.u29", 0x000001, 0x080000, CRC(cba2a6b7) SHA1(8627eda24c6980a0e786fd9dc06176893a33c58f) )
|
||||
ROM_LOAD32_BYTE( "uf0-014.u38", 0x000002, 0x080000, CRC(da2bd4e4) SHA1(244af8705f2fa4ab3f3a002af16a0e4d60e03de8) )
|
||||
ROM_LOAD32_BYTE( "uf0-015.u40", 0x000003, 0x080000, CRC(11dc19fa) SHA1(e7084f61d075a61249d924a523c32e7993d9ae46) )
|
||||
ROM_LOAD32_BYTE( "uf0-009.u13", 0x200000, 0x080000, CRC(20f2d7f5) SHA1(343a8fac76d6ee7f845f9988c491698ebd0150d4) )
|
||||
ROM_LOAD32_BYTE( "uf0-011.u22", 0x200001, 0x080000, CRC(af60adf9) SHA1(6505cbce6e066d75b779fdbe2c034ba4daabbefe) )
|
||||
ROM_LOAD32_BYTE( "uf0-013.u37", 0x200002, 0x080000, CRC(645ec3c3) SHA1(e9b8056c68bf33b0b7130a5ce2bafd11dfd6c29b) )
|
||||
ROM_LOAD32_BYTE( "uf0-016.u48", 0x200003, 0x080000, CRC(10f99fa8) SHA1(7ef9a3f71dd071483cf3513ef57e2fcfe8702994) )
|
||||
|
||||
ROM_REGION( 0x100000, "x1snd", ROMREGION_ERASE00 ) // Samples
|
||||
ROM_LOAD( "uf1-004.14a", 0x040000, 0x020000, CRC(d63ea334) SHA1(93aaf58c90c4f704caae19b63785e471b2c1281a) ) // 1xxxxxxxxxxxxxxxx = 0xFF, possibly bad
|
||||
|
||||
ROM_REGION( 0x400, "proms", 0 ) // not dumped for this set, but stickers match
|
||||
ROM_LOAD16_BYTE( "uf0-017.u50", 0x000, 0x200, CRC(bf50c303) SHA1(31685ed4849e5c27654f02945678db425d54bf5e) )
|
||||
ROM_LOAD16_BYTE( "uf0-018.u51", 0x001, 0x200, CRC(1c584d5f) SHA1(f1c7e3da8b108d78b459cae53fabb6e28d3a7ee8) )
|
||||
ROM_END
|
||||
|
||||
|
||||
void seta_state::init_bankx1()
|
||||
{
|
||||
@ -11237,6 +11284,7 @@ void jockeyc_state::init_inttoote()
|
||||
|
||||
GAME( 1989?, setaroul, 0, setaroul, setaroul, setaroul_state, empty_init, ROT270, "Visco", "The Roulette (Visco)", 0 )
|
||||
GAME( 1989?, setaroula, setaroul, setaroul, setaroul, setaroul_state, empty_init, ROT270, "hack (CODERE)", "Super Ruleta 36 (Spanish hack of The Roulette)", 0 )
|
||||
GAME( 1989?, setaroulm, setaroul, setaroulm, setaroulm, setaroul_state, empty_init, ROT270, "Visco", "The Roulette (Visco, medal)", MACHINE_NOT_WORKING ) // check if game plays correctly, I/O..
|
||||
|
||||
GAME( 1989, drgnunit, 0, drgnunit, drgnunit, seta_state, empty_init, ROT0, "Athena / Seta", "Dragon Unit / Castle of Dragon", 0 ) // Country/License: DSW
|
||||
|
||||
|
@ -108,31 +108,43 @@ TODO:
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "emupal.h"
|
||||
|
||||
#include "st0016.h"
|
||||
|
||||
#include "cpu/mips/mips1.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#define LOG_COP (1 << 1)
|
||||
|
||||
#define LOG_ALL (LOG_COP)
|
||||
|
||||
#define VERBOSE (0)
|
||||
#include "logmacro.h"
|
||||
|
||||
#define LOGCOP(...) LOGMASKED(LOG_COP, __VA_ARGS__)
|
||||
|
||||
namespace {
|
||||
|
||||
class speglsht_state : public driver_device
|
||||
{
|
||||
public:
|
||||
speglsht_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_palette(*this, "palette"),
|
||||
m_maincpu(*this,"maincpu"),
|
||||
m_subcpu(*this, "sub"),
|
||||
m_shared(*this, "shared"),
|
||||
m_framebuffer(*this, "framebuffer"),
|
||||
m_cop_ram(*this, "cop_ram"),
|
||||
m_st0016_bank(*this, "st0016_bank")
|
||||
{ }
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this,"maincpu")
|
||||
, m_subcpu(*this, "sub")
|
||||
, m_shared(*this, "shared")
|
||||
, m_framebuffer(*this, "framebuffer")
|
||||
, m_cop_ram(*this, "cop_ram")
|
||||
, m_st0016_bank(*this, "st0016_bank")
|
||||
{ }
|
||||
|
||||
void speglsht(machine_config &config);
|
||||
void speglsht(machine_config &config) ATTR_COLD;
|
||||
|
||||
void init_speglsht();
|
||||
void init_speglsht() ATTR_COLD;
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override ATTR_COLD;
|
||||
@ -140,7 +152,6 @@ protected:
|
||||
virtual void video_start() override ATTR_COLD;
|
||||
|
||||
private:
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<st0016_cpu_device> m_maincpu;
|
||||
required_device<r3051_device> m_subcpu;
|
||||
|
||||
@ -150,7 +161,7 @@ private:
|
||||
|
||||
required_memory_bank m_st0016_bank;
|
||||
|
||||
std::unique_ptr<bitmap_ind16> m_bitmap;
|
||||
bitmap_ind16 m_bitmap;
|
||||
uint32_t m_videoreg;
|
||||
|
||||
uint32_t shared_r(offs_t offset);
|
||||
@ -158,7 +169,7 @@ private:
|
||||
void videoreg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
void cop_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
uint32_t cop_r(offs_t offset);
|
||||
uint32_t irq_ack_clear();
|
||||
uint32_t irq_ack_r();
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
@ -172,7 +183,7 @@ private:
|
||||
void speglsht_state::st0016_mem(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x7fff).rom();
|
||||
map(0x8000, 0xbfff).bankr("st0016_bank");
|
||||
map(0x8000, 0xbfff).bankr(m_st0016_bank);
|
||||
//map(0xc000, 0xcfff).rw(FUNC(speglsht_state::st0016_sprite_ram_r), FUNC(speglsht_state::st0016_sprite_ram_w));
|
||||
//map(0xd000, 0xdfff).rw(FUNC(speglsht_state::st0016_sprite2_ram_r), FUNC(speglsht_state::st0016_sprite2_ram_w));
|
||||
map(0xe000, 0xe7ff).ram();
|
||||
@ -180,7 +191,7 @@ void speglsht_state::st0016_mem(address_map &map)
|
||||
//map(0xe900, 0xe9ff) // sound - internal
|
||||
//map(0xea00, 0xebff).rw(FUNC(speglsht_state::st0016_palette_ram_r), FUNC(speglsht_state::st0016_palette_ram_w));
|
||||
//map(0xec00, 0xec1f).rw(FUNC(speglsht_state::st0016_character_ram_r), FUNC(speglsht_state::st0016_character_ram_w));
|
||||
map(0xf000, 0xffff).ram().share("shared");
|
||||
map(0xf000, 0xffff).ram().share(m_shared);
|
||||
}
|
||||
|
||||
void speglsht_state::machine_start()
|
||||
@ -188,7 +199,7 @@ void speglsht_state::machine_start()
|
||||
m_st0016_bank->configure_entries(0, 256, memregion("maincpu")->base(), 0x4000);
|
||||
}
|
||||
|
||||
// common rombank? should go in machine/st0016 with larger address space exposed?
|
||||
// common rombank? should go in seta/st0016.cpp with larger address space exposed?
|
||||
void speglsht_state::st0016_rom_bank_w(uint8_t data)
|
||||
{
|
||||
m_st0016_bank->set_entry(data);
|
||||
@ -215,7 +226,7 @@ uint32_t speglsht_state::shared_r(offs_t offset)
|
||||
|
||||
void speglsht_state::shared_w(offs_t offset, uint32_t data)
|
||||
{
|
||||
m_shared[offset]=data&0xff;
|
||||
m_shared[offset] = data & 0xff;
|
||||
}
|
||||
|
||||
void speglsht_state::videoreg_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
@ -226,52 +237,52 @@ void speglsht_state::videoreg_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
|
||||
void speglsht_state::cop_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_cop_ram[offset]);
|
||||
if (data & ~uint32_t(0xffff))
|
||||
LOGCOP("%s: cop_w(%04x) = %08x & %08x\n", machine().describe_context(), offset, data, mem_mask);
|
||||
|
||||
if(m_cop_ram[offset]&0x8000) //fix (sign)
|
||||
if (ACCESSING_BITS_0_15) // fit to 16bit
|
||||
{
|
||||
m_cop_ram[offset]|=0xffff0000;
|
||||
data &= 0xffff;
|
||||
mem_mask &= 0xffff;
|
||||
COMBINE_DATA(&m_cop_ram[offset]);
|
||||
|
||||
if (m_cop_ram[offset] & 0x8000) // 16 bit signed to 32 bit
|
||||
{
|
||||
m_cop_ram[offset] |= 0xffff0000;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cop_ram[offset] &= 0xffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//matrix * vector
|
||||
uint32_t speglsht_state::cop_r(offs_t offset)
|
||||
{
|
||||
int32_t *cop=(int32_t*)&m_cop_ram[0];
|
||||
int32_t *cop = (int32_t *)&m_cop_ram[0];
|
||||
|
||||
union
|
||||
{
|
||||
int32_t a;
|
||||
uint32_t b;
|
||||
}temp;
|
||||
int32_t res = 0;
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x40/4:
|
||||
case 0x10:
|
||||
case 0x11:
|
||||
case 0x12:
|
||||
{
|
||||
temp.a=((cop[0x3]*cop[0x0]+cop[0x4]*cop[0x1]+cop[0x5]*cop[0x2])>>14)+cop[0xc];
|
||||
return temp.b;
|
||||
}
|
||||
|
||||
case 0x44/4:
|
||||
{
|
||||
temp.a=((cop[0x6]*cop[0x0]+cop[0x7]*cop[0x1]+cop[0x8]*cop[0x2])>>14)+cop[0xd];
|
||||
return temp.b;
|
||||
}
|
||||
|
||||
case 0x48/4:
|
||||
{
|
||||
temp.a=((cop[0x9]*cop[0x0]+cop[0xa]*cop[0x1]+cop[0xb]*cop[0x2])>>14)+cop[0xe];
|
||||
return temp.b;
|
||||
unsigned displacement = (offset & 3) * 3;
|
||||
res = ((cop[0x3 + displacement] * cop[0x0] + cop[0x4 + displacement] * cop[0x1] + cop[0x5 + displacement] * cop[0x2]) >> 14) + cop[0xc + (offset & 3)];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return uint32_t(res);
|
||||
}
|
||||
|
||||
uint32_t speglsht_state::irq_ack_clear()
|
||||
uint32_t speglsht_state::irq_ack_r()
|
||||
{
|
||||
m_subcpu->set_input_line(INPUT_LINE_IRQ4, CLEAR_LINE);
|
||||
if (!machine().side_effects_disabled())
|
||||
m_subcpu->set_input_line(INPUT_LINE_IRQ4, CLEAR_LINE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -279,17 +290,17 @@ void speglsht_state::speglsht_mem(address_map &map)
|
||||
{
|
||||
map(0x00000000, 0x000fffff).ram();
|
||||
map(0x01000000, 0x01007fff).ram(); //tested - STATIC RAM
|
||||
map(0x01600000, 0x0160004f).rw(FUNC(speglsht_state::cop_r), FUNC(speglsht_state::cop_w)).share("cop_ram");
|
||||
map(0x01600000, 0x0160004f).rw(FUNC(speglsht_state::cop_r), FUNC(speglsht_state::cop_w)).share(m_cop_ram);
|
||||
map(0x01800200, 0x01800203).w(FUNC(speglsht_state::videoreg_w));
|
||||
map(0x01800300, 0x01800303).portr("IN0");
|
||||
map(0x01800400, 0x01800403).portr("IN1");
|
||||
map(0x01a00000, 0x01afffff).ram().share("framebuffer");
|
||||
map(0x01a00000, 0x01afffff).ram().share(m_framebuffer);
|
||||
map(0x01b00000, 0x01b07fff).ram(); //cleared ... video related ?
|
||||
map(0x01c00000, 0x01dfffff).rom().region("subdata", 0);
|
||||
map(0x0a000000, 0x0a003fff).rw(FUNC(speglsht_state::shared_r), FUNC(speglsht_state::shared_w));
|
||||
map(0x0fc00000, 0x0fdfffff).rom().mirror(0x10000000).region("subprog", 0);
|
||||
map(0x1eff0000, 0x1eff001f).ram();
|
||||
map(0x1eff003c, 0x1eff003f).r(FUNC(speglsht_state::irq_ack_clear));
|
||||
map(0x1eff003c, 0x1eff003f).r(FUNC(speglsht_state::irq_ack_r));
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( speglsht )
|
||||
@ -364,53 +375,44 @@ static INPUT_PORTS_START( speglsht )
|
||||
PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static GFXDECODE_START( gfx_speglsht )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
void speglsht_state::machine_reset()
|
||||
{
|
||||
std::fill(&m_shared[0],&m_shared[m_shared.bytes()],0);
|
||||
std::fill_n(&m_shared[0], m_shared.length(), 0);
|
||||
}
|
||||
|
||||
void speglsht_state::video_start()
|
||||
{
|
||||
m_bitmap = std::make_unique<bitmap_ind16>(512, 512);
|
||||
}
|
||||
|
||||
#define PLOT_PIXEL_RGB(x,y,r,g,b) if(y>=0 && x>=0 && x<512 && y<512) \
|
||||
{ \
|
||||
bitmap.pix(y, x) = (b) | ((g)<<8) | ((r)<<16); \
|
||||
m_bitmap.allocate(512, 512);
|
||||
save_item(NAME(m_videoreg));
|
||||
}
|
||||
|
||||
uint32_t speglsht_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int dy=(m_videoreg&0x20)?(256*512):0; //visible frame
|
||||
|
||||
for(int y=0;y<256;y++)
|
||||
int y = (cliprect.top() + 5 + (BIT(m_videoreg, 5) ? 256 : 0)) * 512;
|
||||
for (int dsty = cliprect.top(); dsty <= cliprect.bottom(); dsty++, y += 512)
|
||||
{
|
||||
for(int x=0;x<512;x++)
|
||||
uint32_t *const dstline = &bitmap.pix(dsty);
|
||||
for (int dstx = cliprect.left(); dstx <= cliprect.right(); dstx++)
|
||||
{
|
||||
int tmp=dy+y*512+x;
|
||||
PLOT_PIXEL_RGB(x-67,y-5,(m_framebuffer[tmp]>>0)&0xff,(m_framebuffer[tmp]>>8)&0xff,(m_framebuffer[tmp]>>16)&0xff);
|
||||
uint32_t const pix = m_framebuffer[y + dstx + 67];
|
||||
dstline[dstx] = rgb_t((pix >> 0) & 0xff, (pix >> 8) & 0xff, (pix >> 16) & 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
//draw st0016 gfx to temporary bitmap (indexed 16)
|
||||
m_bitmap->fill(0);
|
||||
m_maincpu->draw_screen(screen, *m_bitmap, cliprect);
|
||||
// draw st0016 gfx to temporary bitmap (indexed 16)
|
||||
m_bitmap.fill(0);
|
||||
m_maincpu->draw_screen(screen, m_bitmap, cliprect);
|
||||
|
||||
//copy temporary bitmap to rgb 32 bit bitmap
|
||||
for(int y=cliprect.min_y; y<=cliprect.max_y;y++)
|
||||
// copy temporary bitmap to rgb 32 bit bitmap
|
||||
for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
|
||||
{
|
||||
uint16_t const *const srcline = &m_bitmap->pix(y);
|
||||
for(int x=cliprect.min_x; x<=cliprect.max_x;x++)
|
||||
uint16_t const *const srcline = &m_bitmap.pix(y);
|
||||
uint32_t *const dstline = &bitmap.pix(y);
|
||||
for (int x = cliprect.left(); x <= cliprect.right(); x++)
|
||||
{
|
||||
if(srcline[x])
|
||||
{
|
||||
rgb_t color = m_maincpu->palette().pen_color(srcline[x]);
|
||||
PLOT_PIXEL_RGB(x,y,color.r(),color.g(),color.b());
|
||||
}
|
||||
if (srcline[x])
|
||||
dstline[x] = m_maincpu->palette().pen_color(srcline[x]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -441,9 +443,6 @@ void speglsht_state::speglsht(machine_config &config)
|
||||
screen.set_visarea(0, 319, 8, 239-8);
|
||||
screen.set_screen_update(FUNC(speglsht_state::screen_update));
|
||||
|
||||
GFXDECODE(config, "gfxdecode", m_palette, gfx_speglsht);
|
||||
PALETTE(config, m_palette).set_entries(16*16*4+1);
|
||||
|
||||
// TODO: Mono?
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
|
@ -46,7 +46,7 @@ static const discrete_dac_r1_ladder spiders_sound_dac =
|
||||
0 // no cap
|
||||
};
|
||||
|
||||
/* The noice generator consists of two LS164 plus a LS74, so the length is 8+8+1 */
|
||||
/* The noise generator consists of two LS164 plus a LS74, so the length is 8+8+1 */
|
||||
static const discrete_lfsr_desc spiders_lfsr =
|
||||
{
|
||||
DISC_CLK_IS_FREQ,
|
||||
|
@ -552,7 +552,7 @@ u8 tsconf_state::tsconf_port_xxaf_r(offs_t port)
|
||||
|
||||
void tsconf_state::copy_tiles_to_raw(const u8 *tiles_src, u8 *raw_target)
|
||||
{
|
||||
for(u32 ln = 0; ln < PAGE4K(8); ln += 4)
|
||||
for (u32 ln = 0; ln < PAGE4K(8); ln += 4)
|
||||
{
|
||||
int targ = tiles_offset_to_raw(ln);
|
||||
for (u8 x = 0; x < 4; ++x)
|
||||
|
@ -3709,13 +3709,9 @@ GAME( 1994, bublbust, pbobble, pbobble, pbobble, taitob_state, init_taito_b,
|
||||
GAME( 1994, spacedx, 0, spacedx, pbobble, taitob_state, init_taito_b, ROT0, "Taito Corporation", "Space Invaders DX (US, v2.1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1994, spacedxj, spacedx, spacedx, pbobble, taitob_state, init_taito_b, ROT0, "Taito Corporation", "Space Invaders DX (Japan, v2.1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1994, spacedxo, spacedx, spacedxo, spacedxo, taitob_state, init_taito_b, ROT0, "Taito Corporation", "Space Invaders DX (Japan, v2.0)", MACHINE_SUPPORTS_SAVE )
|
||||
/*
|
||||
Sonic Blast Man is a ticket dispensing game.
|
||||
(Japanese version however does not dispense them, only US does - try the "sbm_patch" in the machine_config).
|
||||
It is a bit different from other games running on this system,
|
||||
in that it has a punching pad that player needs to punch to hit
|
||||
the enemy.
|
||||
*/
|
||||
|
||||
// Sonic Blast Man is a ticket dispensing game. (Japanese version however does not dispense them, only US does - try the "sbm_patch" in the machine_config).
|
||||
// It is a bit different from other games running on this system, in that it has a punching pad that player needs to punch to hit the enemy.
|
||||
GAME( 1990, sbm, 0, sbm, sbm, taitob_state, init_taito_b, ROT0, "Taito Corporation", "Sonic Blast Man (US)", MACHINE_SUPPORTS_SAVE | MACHINE_MECHANICAL )
|
||||
GAME( 1990, sbmj, sbm, sbm, sbmj, taitob_state, init_taito_b, ROT0, "Taito Corporation", "Sonic Blast Man (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_MECHANICAL )
|
||||
GAME( 1994, realpunc, 0, realpunc, realpunc, taitob_c_state, init_taito_b, ROT0, "Taito Corporation Japan", "Real Puncher (World, v2.12O)", MACHINE_SUPPORTS_SAVE | MACHINE_MECHANICAL )
|
||||
|
@ -631,8 +631,8 @@ void toaplan1_rallybik_state::rallybik_main_map(address_map &map)
|
||||
// map(0x140000, 0x140001).w(?? video frame related ??)
|
||||
map(0x140003, 0x140003).w(FUNC(toaplan1_rallybik_state::intenable_w));
|
||||
map(0x140008, 0x14000f).w(FUNC(toaplan1_rallybik_state::bcu_control_w));
|
||||
map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_rallybik_state::bgpalette_w)).share("bgpalette");
|
||||
map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_rallybik_state::fgpalette_w)).share("fgpalette");
|
||||
map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_rallybik_state::bgpalette_w)).share(m_bgpaletteram);
|
||||
map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_rallybik_state::fgpalette_w)).share(m_fgpaletteram);
|
||||
map(0x180000, 0x180fff).rw(FUNC(toaplan1_rallybik_state::shared_r), FUNC(toaplan1_rallybik_state::shared_w)).umask16(0x00ff);
|
||||
map(0x1c0000, 0x1c0003).w(FUNC(toaplan1_rallybik_state::tile_offsets_w));
|
||||
map(0x1c8001, 0x1c8001).w(FUNC(toaplan1_rallybik_state::reset_sound_w));
|
||||
@ -654,8 +654,8 @@ void toaplan1_state::truxton_main_map(address_map &map)
|
||||
// map(0x140000, 0x140001).w(?? video frame related ??)
|
||||
map(0x140003, 0x140003).w(FUNC(toaplan1_state::intenable_w));
|
||||
map(0x140008, 0x14000f).w(FUNC(toaplan1_state::bcu_control_w));
|
||||
map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
|
||||
map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
|
||||
map(0x144000, 0x1447ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share(m_bgpaletteram);
|
||||
map(0x146000, 0x1467ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share(m_fgpaletteram);
|
||||
map(0x180000, 0x180fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff);
|
||||
map(0x1c0000, 0x1c0003).w(FUNC(toaplan1_state::tile_offsets_w));
|
||||
map(0x1c0006, 0x1c0006).w(FUNC(toaplan1_state::fcu_flipscreen_w));
|
||||
@ -670,8 +670,8 @@ void toaplan1_state::hellfire_main_map(address_map &map)
|
||||
// map(0x080000, 0x080001).w(?? video frame related ??)
|
||||
map(0x080003, 0x080003).w(FUNC(toaplan1_state::intenable_w));
|
||||
map(0x080008, 0x08000f).w(FUNC(toaplan1_state::bcu_control_w));
|
||||
map(0x084000, 0x0847ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
|
||||
map(0x086000, 0x0867ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
|
||||
map(0x084000, 0x0847ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share(m_bgpaletteram);
|
||||
map(0x086000, 0x0867ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share(m_fgpaletteram);
|
||||
map(0x0c0000, 0x0c0fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff);
|
||||
map(0x100001, 0x100001).w(FUNC(toaplan1_state::bcu_flipscreen_w));
|
||||
map(0x100002, 0x100003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w));
|
||||
@ -697,8 +697,8 @@ void toaplan1_state::zerowing_main_map(address_map &map)
|
||||
// map(0x400000, 0x400001).w(?? video frame related ??)
|
||||
map(0x400003, 0x400003).w(FUNC(toaplan1_state::intenable_w));
|
||||
map(0x400008, 0x40000f).w(FUNC(toaplan1_state::bcu_control_w));
|
||||
map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
|
||||
map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
|
||||
map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share(m_bgpaletteram);
|
||||
map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share(m_fgpaletteram);
|
||||
map(0x440000, 0x440fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff);
|
||||
map(0x480001, 0x480001).w(FUNC(toaplan1_state::bcu_flipscreen_w));
|
||||
map(0x480002, 0x480003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w));
|
||||
@ -717,8 +717,8 @@ void toaplan1_demonwld_state::main_map(address_map &map)
|
||||
// map(0x400000, 0x400001).w(?? video frame related ??)
|
||||
map(0x400003, 0x400003).w(FUNC(toaplan1_demonwld_state::intenable_w));
|
||||
map(0x400008, 0x40000f).w(FUNC(toaplan1_demonwld_state::bcu_control_w));
|
||||
map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_demonwld_state::bgpalette_w)).share("bgpalette");
|
||||
map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_demonwld_state::fgpalette_w)).share("fgpalette");
|
||||
map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_demonwld_state::bgpalette_w)).share(m_bgpaletteram);
|
||||
map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_demonwld_state::fgpalette_w)).share(m_fgpaletteram);
|
||||
map(0x600000, 0x600fff).rw(FUNC(toaplan1_demonwld_state::shared_r), FUNC(toaplan1_demonwld_state::shared_w)).umask16(0x00ff);
|
||||
map(0x800001, 0x800001).w(FUNC(toaplan1_demonwld_state::bcu_flipscreen_w));
|
||||
map(0x800002, 0x800003).rw(FUNC(toaplan1_demonwld_state::tileram_offs_r), FUNC(toaplan1_demonwld_state::tileram_offs_w));
|
||||
@ -746,8 +746,8 @@ void toaplan1_samesame_state::main_map(address_map &map)
|
||||
// map(0x100000, 0x100001).w(?? video frame related ??)
|
||||
map(0x100003, 0x100003).w(FUNC(toaplan1_samesame_state::intenable_w));
|
||||
map(0x100008, 0x10000f).w(FUNC(toaplan1_samesame_state::bcu_control_w));
|
||||
map(0x104000, 0x1047ff).ram().w(FUNC(toaplan1_samesame_state::bgpalette_w)).share("bgpalette");
|
||||
map(0x106000, 0x1067ff).ram().w(FUNC(toaplan1_samesame_state::fgpalette_w)).share("fgpalette");
|
||||
map(0x104000, 0x1047ff).ram().w(FUNC(toaplan1_samesame_state::bgpalette_w)).share(m_bgpaletteram);
|
||||
map(0x106000, 0x1067ff).ram().w(FUNC(toaplan1_samesame_state::fgpalette_w)).share(m_fgpaletteram);
|
||||
map(0x140000, 0x140001).portr("P1");
|
||||
map(0x140002, 0x140003).portr("P2");
|
||||
map(0x140004, 0x140005).portr("DSWA");
|
||||
@ -785,8 +785,8 @@ void toaplan1_state::outzone_main_map(address_map &map)
|
||||
// map(0x300000, 0x300001).w(?? video frame related ??)
|
||||
map(0x300003, 0x300003).w(FUNC(toaplan1_state::intenable_w));
|
||||
map(0x300008, 0x30000f).w(FUNC(toaplan1_state::bcu_control_w));
|
||||
map(0x304000, 0x3047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
|
||||
map(0x306000, 0x3067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
|
||||
map(0x304000, 0x3047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share(m_bgpaletteram);
|
||||
map(0x306000, 0x3067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share(m_fgpaletteram);
|
||||
map(0x340000, 0x340003).w(FUNC(toaplan1_state::tile_offsets_w));
|
||||
map(0x340006, 0x340006).w(FUNC(toaplan1_state::fcu_flipscreen_w));
|
||||
}
|
||||
@ -802,8 +802,8 @@ void toaplan1_state::outzonecv_main_map(address_map &map)
|
||||
// map(0x400000, 0x400001).w(?? video frame related ??)
|
||||
map(0x400003, 0x400003).w(FUNC(toaplan1_state::intenable_w));
|
||||
map(0x400008, 0x40000f).w(FUNC(toaplan1_state::bcu_control_w));
|
||||
map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
|
||||
map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
|
||||
map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share(m_bgpaletteram);
|
||||
map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share(m_fgpaletteram);
|
||||
map(0x440000, 0x440fff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff);
|
||||
map(0x480001, 0x480001).w(FUNC(toaplan1_state::bcu_flipscreen_w));
|
||||
map(0x480002, 0x480003).rw(FUNC(toaplan1_state::tileram_offs_r), FUNC(toaplan1_state::tileram_offs_w));
|
||||
@ -828,8 +828,8 @@ void toaplan1_state::vimana_main_map(address_map &map)
|
||||
// map(0x400000, 0x400001).w(?? video frame related ??)
|
||||
map(0x400003, 0x400003).w(FUNC(toaplan1_state::intenable_w));
|
||||
map(0x400008, 0x40000f).w(FUNC(toaplan1_state::bcu_control_w));
|
||||
map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share("bgpalette");
|
||||
map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share("fgpalette");
|
||||
map(0x404000, 0x4047ff).ram().w(FUNC(toaplan1_state::bgpalette_w)).share(m_bgpaletteram);
|
||||
map(0x406000, 0x4067ff).ram().w(FUNC(toaplan1_state::fgpalette_w)).share(m_fgpaletteram);
|
||||
map(0x440000, 0x4407ff).rw(FUNC(toaplan1_state::shared_r), FUNC(toaplan1_state::shared_w)).umask16(0x00ff); /* inputs, coins and sound handled by 647180 MCU via this space */
|
||||
map(0x480000, 0x487fff).ram();
|
||||
map(0x4c0001, 0x4c0001).w(FUNC(toaplan1_state::bcu_flipscreen_w));
|
||||
@ -844,7 +844,7 @@ void toaplan1_state::vimana_main_map(address_map &map)
|
||||
void toaplan1_state::sound_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x7fff).rom();
|
||||
map(0x8000, 0x87ff).ram().share("sharedram");
|
||||
map(0x8000, 0x87ff).ram().share(m_sharedram);
|
||||
}
|
||||
|
||||
void toaplan1_rallybik_state::rallybik_sound_io_map(address_map &map)
|
||||
@ -856,7 +856,7 @@ void toaplan1_rallybik_state::rallybik_sound_io_map(address_map &map)
|
||||
map(0x30, 0x30).w("coinlatch", FUNC(ls259_device::write_nibble_d0)); /* Coin counter/lockout */
|
||||
map(0x40, 0x40).portr("DSWA");
|
||||
map(0x50, 0x50).portr("DSWB");
|
||||
map(0x60, 0x61).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
map(0x60, 0x61).rw(m_ymsnd, FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
}
|
||||
|
||||
void toaplan1_state::truxton_sound_io_map(address_map &map)
|
||||
@ -868,7 +868,7 @@ void toaplan1_state::truxton_sound_io_map(address_map &map)
|
||||
map(0x30, 0x30).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */
|
||||
map(0x40, 0x40).portr("DSWA");
|
||||
map(0x50, 0x50).portr("DSWB");
|
||||
map(0x60, 0x61).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
map(0x60, 0x61).rw(m_ymsnd, FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
map(0x70, 0x70).portr("TJUMP");
|
||||
}
|
||||
|
||||
@ -882,7 +882,7 @@ void toaplan1_state::hellfire_sound_io_map(address_map &map)
|
||||
map(0x40, 0x40).portr("P1");
|
||||
map(0x50, 0x50).portr("P2");
|
||||
map(0x60, 0x60).portr("SYSTEM");
|
||||
map(0x70, 0x71).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
map(0x70, 0x71).rw(m_ymsnd, FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
}
|
||||
|
||||
void toaplan1_state::zerowing_sound_io_map(address_map &map)
|
||||
@ -895,13 +895,13 @@ void toaplan1_state::zerowing_sound_io_map(address_map &map)
|
||||
map(0x80, 0x80).portr("SYSTEM");
|
||||
map(0x88, 0x88).portr("TJUMP");
|
||||
map(0xa0, 0xa0).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */
|
||||
map(0xa8, 0xa9).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
map(0xa8, 0xa9).rw(m_ymsnd, FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
}
|
||||
|
||||
void toaplan1_demonwld_state::sound_io_map(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x00, 0x01).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
map(0x00, 0x01).rw(m_ymsnd, FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
map(0x20, 0x20).portr("TJUMP");
|
||||
map(0x40, 0x40).w(FUNC(toaplan1_demonwld_state::coin_w)); /* Coin counter/lockout */
|
||||
map(0x60, 0x60).portr("SYSTEM");
|
||||
@ -914,7 +914,7 @@ void toaplan1_demonwld_state::sound_io_map(address_map &map)
|
||||
void toaplan1_state::outzone_sound_io_map(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x00, 0x01).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
map(0x00, 0x01).rw(m_ymsnd, FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
map(0x04, 0x04).w(FUNC(toaplan1_state::coin_w)); /* Coin counter/lockout */
|
||||
map(0x08, 0x08).portr("DSWA");
|
||||
map(0x0c, 0x0c).portr("DSWB");
|
||||
@ -946,7 +946,7 @@ void toaplan1_demonwld_state::dsp_io_map(address_map &map)
|
||||
|
||||
void toaplan1_state::vimana_hd647180_mem_map(address_map &map)
|
||||
{
|
||||
map(0x08000, 0x087ff).ram().share("sharedram"); /* 2048 bytes of shared ram w/maincpu */
|
||||
map(0x08000, 0x087ff).ram().share(m_sharedram); /* 2048 bytes of shared ram w/maincpu */
|
||||
}
|
||||
|
||||
void toaplan1_state::vimana_hd647180_io_map(address_map &map)
|
||||
@ -974,8 +974,8 @@ void toaplan1_state::vimana_hd647180_io_map(address_map &map)
|
||||
map(0x82, 0x82).portr("DSWA");
|
||||
map(0x83, 0x83).portr("SYSTEM");
|
||||
map(0x84, 0x84).w(FUNC(toaplan1_state::coin_w)); // Coin counter/lockout // needs verify
|
||||
map(0x87, 0x87).rw("ymsnd", FUNC(ym3812_device::status_r), FUNC(ym3812_device::address_w));
|
||||
map(0x8f, 0x8f).w("ymsnd", FUNC(ym3812_device::data_w));
|
||||
map(0x87, 0x87).rw(m_ymsnd, FUNC(ym3812_device::status_r), FUNC(ym3812_device::address_w));
|
||||
map(0x8f, 0x8f).w(m_ymsnd, FUNC(ym3812_device::data_w));
|
||||
}
|
||||
|
||||
u8 toaplan1_state::vimana_dswb_invert_r()
|
||||
@ -999,10 +999,9 @@ void toaplan1_samesame_state::hd647180_io_map(address_map &map)
|
||||
map.global_mask(0xff);
|
||||
|
||||
map(0x63, 0x63).nopr(); // read port D
|
||||
map(0x80, 0x81).rw(m_ymsnd, FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
map(0xa0, 0xa0).r(m_soundlatch, FUNC(generic_latch_8_device::read));
|
||||
map(0xb0, 0xb0).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w));
|
||||
|
||||
map(0x80, 0x81).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
@ -1902,29 +1901,29 @@ static const gfx_layout tilelayout =
|
||||
|
||||
|
||||
static GFXDECODE_START( gfx_toaplan1 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 64 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 64*16, 64 )
|
||||
GFXDECODE_ENTRY( "tiles", 0, tilelayout, 0, 64 )
|
||||
GFXDECODE_ENTRY( "sprites", 0, tilelayout, 64*16, 64 )
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( gfx_rallybik )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 64 )
|
||||
GFXDECODE_ENTRY( "tiles", 0, tilelayout, 0, 64 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
#define PIXEL_CLOCK (XTAL(28'000'000) / 4)
|
||||
static constexpr XTAL PIXEL_CLOCK = XTAL(28'000'000) / 4;
|
||||
|
||||
// HTOTAL and VTOTAL taken from CRTC registers (bcu_control_w)
|
||||
// rallybik, demonwld and outzone program a larger VTOTAL than the other
|
||||
// games, giving them a lower frame rate
|
||||
|
||||
#define HTOTAL ((224+1)*2)
|
||||
#define HBEND (0)
|
||||
#define HBSTART (320)
|
||||
static constexpr unsigned HTOTAL = ((224+1)*2);
|
||||
static constexpr unsigned HBEND = (0);
|
||||
static constexpr unsigned HBSTART = (320);
|
||||
|
||||
#define VTOTAL ((134+1)*2)
|
||||
#define VTOTAL55 ((140+1)*2)
|
||||
#define VBEND (0)
|
||||
#define VBSTART (240)
|
||||
static constexpr unsigned VTOTAL = ((134+1)*2);
|
||||
static constexpr unsigned VTOTAL55 = ((140+1)*2);
|
||||
static constexpr unsigned VBEND = (0);
|
||||
static constexpr unsigned VBSTART = (240);
|
||||
|
||||
|
||||
void toaplan1_rallybik_state::rallybik(machine_config &config)
|
||||
@ -2243,7 +2242,7 @@ ROM_START( rallybik )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "b45-05.rom", 0x0000, 0x4000, CRC(10814601) SHA1(bad7a834d8849752a7f3000bb5154ec0fa50d695) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "b45-09.bin", 0x00000, 0x20000, CRC(1dc7b010) SHA1(67e8633bd787ffcae0e7867e7e591c492c4f2d63) )
|
||||
ROM_LOAD16_BYTE( "b45-08.bin", 0x00001, 0x20000, CRC(fab661ba) SHA1(acc43cd6d979b1c6a348727f315643d7b8f1496a) )
|
||||
ROM_LOAD16_BYTE( "b45-07.bin", 0x40000, 0x20000, CRC(cd3748b4) SHA1(a20eb19a0f813112b4e5d9cd91db29de9b37af17) )
|
||||
@ -2327,13 +2326,13 @@ ROM_START( truxton )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "b65_09.2f", 0x0000, 0x4000, CRC(1bdd4ddc) SHA1(6bf7e3a7ca42f79082503ef471f30f271e2f0f99) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "b65_08.13e", 0x00000, 0x20000, CRC(d2315b37) SHA1(eb42a884df319728c830c067c2423043ed4536ee) )
|
||||
ROM_LOAD16_BYTE( "b65_07.11e", 0x00001, 0x20000, CRC(fb83252a) SHA1(48a38584d223f56286137f7acdfaec86ee6588e7) )
|
||||
ROM_LOAD16_BYTE( "b65_06.10e", 0x40000, 0x20000, CRC(36cedcbe) SHA1(f79d4b1e98b3c9091ae907fb671ad201d3698b42) )
|
||||
ROM_LOAD16_BYTE( "b65_05.8e", 0x40001, 0x20000, CRC(81cd95f1) SHA1(526a437fbe033ac21054ee5c3bf1ba2fed354c7a) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "b65_04.20c", 0x00000, 0x20000, CRC(8c6ff461) SHA1(5199e31f4eb23bad01f7d1079f3618fe39d8a32e) )
|
||||
ROM_LOAD16_BYTE( "b65_03.20b", 0x00001, 0x20000, CRC(58b1350b) SHA1(7eb2fe329579a6f651d3c1aed9155ac6ffefbc4b) )
|
||||
ROM_LOAD16_BYTE( "b65_02.20ab", 0x40000, 0x20000, CRC(1dd55161) SHA1(c537456ac56801dea0ac48fb1389228530d00a61) )
|
||||
@ -2352,13 +2351,13 @@ ROM_START( hellfire )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "b90_03.11e", 0x0000, 0x8000, CRC(4058fa67) SHA1(155c364273c270cd74955f447efc804bb4c9b560) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "b90_04.7x", 0x00000, 0x20000, CRC(ea6150fc) SHA1(1116947d10ce14fbc6a3b86368fc2024c6f51803) )
|
||||
ROM_LOAD16_BYTE( "b90_05.7v", 0x00001, 0x20000, CRC(bb52c507) SHA1(b0b1821476647f10c7023f92a66a7f54b92f50c3) )
|
||||
ROM_LOAD16_BYTE( "b90_06.7t", 0x40000, 0x20000, CRC(cf5b0252) SHA1(e2102967af61afb11d2290a40d13d2faf9ef1e12) )
|
||||
ROM_LOAD16_BYTE( "b90_07.7r", 0x40001, 0x20000, CRC(b98af263) SHA1(54d636a50a41dbb58b54c22dfab3eabfdb452575) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "b90_11.3a", 0x00000, 0x20000, CRC(c33e543c) SHA1(b85cba30cc651f820aeedd41e04584df92078ed9) )
|
||||
ROM_LOAD16_BYTE( "b90_10.3c", 0x00001, 0x20000, CRC(35fd1092) SHA1(5e136a35eea45034ccd4aea52cc0ffeec944e27e) )
|
||||
ROM_LOAD16_BYTE( "b90_09.3d", 0x40000, 0x20000, CRC(cf01009e) SHA1(e260c479fa97f23a65c220e5071aaf2dc2baf46d) )
|
||||
@ -2377,13 +2376,13 @@ ROM_START( hellfire1 )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "b90_03.11e", 0x0000, 0x8000, CRC(4058fa67) SHA1(155c364273c270cd74955f447efc804bb4c9b560) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "b90_04.7x", 0x00000, 0x20000, CRC(ea6150fc) SHA1(1116947d10ce14fbc6a3b86368fc2024c6f51803) )
|
||||
ROM_LOAD16_BYTE( "b90_05.7v", 0x00001, 0x20000, CRC(bb52c507) SHA1(b0b1821476647f10c7023f92a66a7f54b92f50c3) )
|
||||
ROM_LOAD16_BYTE( "b90_06.7t", 0x40000, 0x20000, CRC(cf5b0252) SHA1(e2102967af61afb11d2290a40d13d2faf9ef1e12) )
|
||||
ROM_LOAD16_BYTE( "b90_07.7r", 0x40001, 0x20000, CRC(b98af263) SHA1(54d636a50a41dbb58b54c22dfab3eabfdb452575) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "b90_11.3a", 0x00000, 0x20000, CRC(c33e543c) SHA1(b85cba30cc651f820aeedd41e04584df92078ed9) )
|
||||
ROM_LOAD16_BYTE( "b90_10.3c", 0x00001, 0x20000, CRC(35fd1092) SHA1(5e136a35eea45034ccd4aea52cc0ffeec944e27e) )
|
||||
ROM_LOAD16_BYTE( "b90_09.3d", 0x40000, 0x20000, CRC(cf01009e) SHA1(e260c479fa97f23a65c220e5071aaf2dc2baf46d) )
|
||||
@ -2402,13 +2401,13 @@ ROM_START( hellfire2a )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "b90_03.11e", 0x0000, 0x8000, CRC(4058fa67) SHA1(155c364273c270cd74955f447efc804bb4c9b560) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "b90_04.7x", 0x00000, 0x20000, CRC(ea6150fc) SHA1(1116947d10ce14fbc6a3b86368fc2024c6f51803) )
|
||||
ROM_LOAD16_BYTE( "b90_05.7v", 0x00001, 0x20000, CRC(bb52c507) SHA1(b0b1821476647f10c7023f92a66a7f54b92f50c3) )
|
||||
ROM_LOAD16_BYTE( "b90_06.7t", 0x40000, 0x20000, CRC(cf5b0252) SHA1(e2102967af61afb11d2290a40d13d2faf9ef1e12) )
|
||||
ROM_LOAD16_BYTE( "b90_07.7r", 0x40001, 0x20000, CRC(b98af263) SHA1(54d636a50a41dbb58b54c22dfab3eabfdb452575) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "b90_11.3a", 0x00000, 0x20000, CRC(c33e543c) SHA1(b85cba30cc651f820aeedd41e04584df92078ed9) )
|
||||
ROM_LOAD16_BYTE( "b90_10.3c", 0x00001, 0x20000, CRC(35fd1092) SHA1(5e136a35eea45034ccd4aea52cc0ffeec944e27e) )
|
||||
ROM_LOAD16_BYTE( "b90_09.3d", 0x40000, 0x20000, CRC(cf01009e) SHA1(e260c479fa97f23a65c220e5071aaf2dc2baf46d) )
|
||||
@ -2427,13 +2426,13 @@ ROM_START( hellfire1a )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "b90_03x.11e", 0x0000, 0x8000, CRC(f58c368f) SHA1(2ee5396a4b70a3374f3a3bbd791b1d962f6a8a52) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "b90_04.7x", 0x00000, 0x20000, CRC(ea6150fc) SHA1(1116947d10ce14fbc6a3b86368fc2024c6f51803) )
|
||||
ROM_LOAD16_BYTE( "b90_05.7v", 0x00001, 0x20000, CRC(bb52c507) SHA1(b0b1821476647f10c7023f92a66a7f54b92f50c3) )
|
||||
ROM_LOAD16_BYTE( "b90_06.7t", 0x40000, 0x20000, CRC(cf5b0252) SHA1(e2102967af61afb11d2290a40d13d2faf9ef1e12) )
|
||||
ROM_LOAD16_BYTE( "b90_07.7r", 0x40001, 0x20000, CRC(b98af263) SHA1(54d636a50a41dbb58b54c22dfab3eabfdb452575) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "b90_11.3a", 0x00000, 0x20000, CRC(c33e543c) SHA1(b85cba30cc651f820aeedd41e04584df92078ed9) )
|
||||
ROM_LOAD16_BYTE( "b90_10.3c", 0x00001, 0x20000, CRC(35fd1092) SHA1(5e136a35eea45034ccd4aea52cc0ffeec944e27e) )
|
||||
ROM_LOAD16_BYTE( "b90_09.3d", 0x40000, 0x20000, CRC(cf01009e) SHA1(e260c479fa97f23a65c220e5071aaf2dc2baf46d) )
|
||||
@ -2454,13 +2453,13 @@ ROM_START( zerowing ) // 2 player simultaneous version
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "o15-13.rom", 0x0000, 0x8000, CRC(e7b72383) SHA1(ea1f6f33a86d14d58bd396fd46081462f00177d5) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o15-05.rom", 0x00000, 0x20000, CRC(4e5dd246) SHA1(5366b4a6f3c900a4f57a6583b7399163a06f42d7) )
|
||||
ROM_LOAD16_BYTE( "o15-06.rom", 0x00001, 0x20000, CRC(c8c6d428) SHA1(76ee5bcb8f10fe201fc5c32697beee3de9d8b751) )
|
||||
ROM_LOAD16_BYTE( "o15-07.rom", 0x40000, 0x20000, CRC(efc40e99) SHA1(a04fad4197a7fb4787cd9bebf43e1d9b02b2f61b) )
|
||||
ROM_LOAD16_BYTE( "o15-08.rom", 0x40001, 0x20000, CRC(1b019eab) SHA1(c9569ca85696825142acc5cde9ac829e82b1ca1b) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o15-03.rom", 0x00000, 0x20000, CRC(7f245fd3) SHA1(efbcb3663d4accc4f8128a8fee5475bc109bc17a) )
|
||||
ROM_LOAD16_BYTE( "o15-04.rom", 0x00001, 0x20000, CRC(0b1a1289) SHA1(ce6c06342392d11952873e3b1d6aea8dc02a551c) )
|
||||
ROM_LOAD16_BYTE( "o15-01.rom", 0x40000, 0x20000, CRC(70570e43) SHA1(acc9baec71b0930cb2f193677e0663efa5d5551d) )
|
||||
@ -2481,13 +2480,13 @@ ROM_START( zerowing1 ) // 1 player version
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "o15-13.rom", 0x0000, 0x8000, CRC(e7b72383) SHA1(ea1f6f33a86d14d58bd396fd46081462f00177d5) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o15-05.rom", 0x00000, 0x20000, CRC(4e5dd246) SHA1(5366b4a6f3c900a4f57a6583b7399163a06f42d7) )
|
||||
ROM_LOAD16_BYTE( "o15-06.rom", 0x00001, 0x20000, CRC(c8c6d428) SHA1(76ee5bcb8f10fe201fc5c32697beee3de9d8b751) )
|
||||
ROM_LOAD16_BYTE( "o15-07.rom", 0x40000, 0x20000, CRC(efc40e99) SHA1(a04fad4197a7fb4787cd9bebf43e1d9b02b2f61b) )
|
||||
ROM_LOAD16_BYTE( "o15-08.rom", 0x40001, 0x20000, CRC(1b019eab) SHA1(c9569ca85696825142acc5cde9ac829e82b1ca1b) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o15-03.rom", 0x00000, 0x20000, CRC(7f245fd3) SHA1(efbcb3663d4accc4f8128a8fee5475bc109bc17a) )
|
||||
ROM_LOAD16_BYTE( "o15-04.rom", 0x00001, 0x20000, CRC(0b1a1289) SHA1(ce6c06342392d11952873e3b1d6aea8dc02a551c) )
|
||||
ROM_LOAD16_BYTE( "o15-01.rom", 0x40000, 0x20000, CRC(70570e43) SHA1(acc9baec71b0930cb2f193677e0663efa5d5551d) )
|
||||
@ -2508,13 +2507,13 @@ ROM_START( zerowingw ) // 2 player simultaneous version (Williams Electronics)
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "o15-13.rom", 0x0000, 0x8000, CRC(e7b72383) SHA1(ea1f6f33a86d14d58bd396fd46081462f00177d5) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o15-05.rom", 0x00000, 0x20000, CRC(4e5dd246) SHA1(5366b4a6f3c900a4f57a6583b7399163a06f42d7) )
|
||||
ROM_LOAD16_BYTE( "o15-06.rom", 0x00001, 0x20000, CRC(c8c6d428) SHA1(76ee5bcb8f10fe201fc5c32697beee3de9d8b751) )
|
||||
ROM_LOAD16_BYTE( "o15-07.rom", 0x40000, 0x20000, CRC(efc40e99) SHA1(a04fad4197a7fb4787cd9bebf43e1d9b02b2f61b) )
|
||||
ROM_LOAD16_BYTE( "o15-08.rom", 0x40001, 0x20000, CRC(1b019eab) SHA1(c9569ca85696825142acc5cde9ac829e82b1ca1b) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o15-03.rom", 0x00000, 0x20000, CRC(7f245fd3) SHA1(efbcb3663d4accc4f8128a8fee5475bc109bc17a) )
|
||||
ROM_LOAD16_BYTE( "o15-04.rom", 0x00001, 0x20000, CRC(0b1a1289) SHA1(ce6c06342392d11952873e3b1d6aea8dc02a551c) )
|
||||
ROM_LOAD16_BYTE( "o15-01.rom", 0x40000, 0x20000, CRC(70570e43) SHA1(acc9baec71b0930cb2f193677e0663efa5d5551d) )
|
||||
@ -2538,13 +2537,13 @@ ROM_START( demonwld )
|
||||
ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, BAD_DUMP CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
|
||||
ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, BAD_DUMP CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
|
||||
ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
|
||||
ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
|
||||
ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
|
||||
ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
|
||||
ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
|
||||
@ -2569,13 +2568,13 @@ ROM_START( demonwld1 )
|
||||
ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, BAD_DUMP CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
|
||||
ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, BAD_DUMP CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
|
||||
ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
|
||||
ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
|
||||
ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
|
||||
ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
|
||||
ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
|
||||
@ -2598,13 +2597,13 @@ ROM_START( demonwld2 )
|
||||
ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, BAD_DUMP CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
|
||||
ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, BAD_DUMP CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
|
||||
ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
|
||||
ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
|
||||
ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
|
||||
ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
|
||||
ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
|
||||
@ -2627,13 +2626,13 @@ ROM_START( demonwld3 )
|
||||
ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, BAD_DUMP CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
|
||||
ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, BAD_DUMP CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
|
||||
ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
|
||||
ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
|
||||
ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
|
||||
ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
|
||||
ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
|
||||
@ -2656,13 +2655,13 @@ ROM_START( demonwld4 )
|
||||
ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, BAD_DUMP CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
|
||||
ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, BAD_DUMP CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
|
||||
ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
|
||||
ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
|
||||
ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
|
||||
ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
|
||||
ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
|
||||
@ -2685,13 +2684,13 @@ ROM_START( demonwld5 ) // standard TP-O16 PCB
|
||||
ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, BAD_DUMP CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) )
|
||||
ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, BAD_DUMP CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "rom05", 0x00000, 0x20000, CRC(6506c982) SHA1(6d4c1ef91e5617724789ff196abb7abf23e4a7fb) )
|
||||
ROM_LOAD16_BYTE( "rom07", 0x00001, 0x20000, CRC(a3a0d993) SHA1(50311b9447eb04271b17b212ca31d083ab5b2414) )
|
||||
ROM_LOAD16_BYTE( "rom06", 0x40000, 0x20000, CRC(4fc5e5f3) SHA1(725d4b009d575ff8ffbe1c00df352ccf235465d7) )
|
||||
ROM_LOAD16_BYTE( "rom08", 0x40001, 0x20000, CRC(eb53ab09) SHA1(d98195cc1b65b76335b5b24adb31deae1b313f3a) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "rom01", 0x00000, 0x20000, CRC(1b3724e9) SHA1(3dbb0450ab1e40e6df2b7c7356352419cd3f113d) )
|
||||
ROM_LOAD16_BYTE( "rom02", 0x00001, 0x20000, CRC(7b20a44d) SHA1(4dc1a2fa2058077b112c73492808ee9381060ec7) )
|
||||
ROM_LOAD16_BYTE( "rom03", 0x40000, 0x20000, CRC(2cacdcd0) SHA1(92216d1c6859e05d39363c30e0beb45bc0ae4e1c) )
|
||||
@ -2712,13 +2711,13 @@ ROM_START( samesame )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-017.8m", 0x00000, 0x08000, CRC(43523032) SHA1(1b94003a00e7bf6bdf1b1b946f42ff5d04629949) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
|
||||
ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
|
||||
ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
|
||||
ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
|
||||
ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
|
||||
ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
|
||||
@ -2739,13 +2738,13 @@ ROM_START( samesame2 )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-017.8m", 0x00000, 0x08000, CRC(43523032) SHA1(1b94003a00e7bf6bdf1b1b946f42ff5d04629949) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
|
||||
ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
|
||||
ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
|
||||
ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
|
||||
ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
|
||||
ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
|
||||
@ -2766,13 +2765,13 @@ ROM_START( samesamenh ) /* this hack has been used on various PCBs */
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-017.8m", 0x00000, 0x08000, CRC(43523032) SHA1(1b94003a00e7bf6bdf1b1b946f42ff5d04629949) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
|
||||
ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
|
||||
ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
|
||||
ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
|
||||
ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
|
||||
ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
|
||||
@ -2845,13 +2844,13 @@ ROM_START( fireshrk )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-017.8m", 0x00000, 0x08000, CRC(43523032) SHA1(1b94003a00e7bf6bdf1b1b946f42ff5d04629949) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
|
||||
ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
|
||||
ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
|
||||
ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
|
||||
ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
|
||||
ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
|
||||
@ -2872,13 +2871,13 @@ ROM_START( fireshrka )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-017.8m", 0x00000, 0x08000, CRC(43523032) SHA1(1b94003a00e7bf6bdf1b1b946f42ff5d04629949) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
|
||||
ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
|
||||
ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
|
||||
ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
|
||||
ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
|
||||
ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
|
||||
@ -2899,13 +2898,13 @@ ROM_START( fireshrkd )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-017.8m", 0x00000, 0x08000, CRC(43523032) SHA1(1b94003a00e7bf6bdf1b1b946f42ff5d04629949) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
|
||||
ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
|
||||
ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
|
||||
ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
|
||||
ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
|
||||
ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
|
||||
@ -2926,13 +2925,13 @@ ROM_START( fireshrkdh )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-017.8m", 0x00000, 0x08000, CRC(43523032) SHA1(1b94003a00e7bf6bdf1b1b946f42ff5d04629949) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
|
||||
ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
|
||||
ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
|
||||
ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
|
||||
ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
|
||||
ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
|
||||
@ -2953,13 +2952,13 @@ ROM_START( samesamecn )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-017.8m", 0x00000, 0x08000, CRC(43523032) SHA1(1b94003a00e7bf6bdf1b1b946f42ff5d04629949) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_05.12j", 0x00000, 0x20000, CRC(565315f8) SHA1(6b1c5ef52359483228b329c89c2e1174e3fbf017) )
|
||||
ROM_LOAD16_BYTE( "o17_06.13j", 0x00001, 0x20000, CRC(95262d4c) SHA1(16f3aabecb1c87ce7eadf4f0ff61b29a4c017614) )
|
||||
ROM_LOAD16_BYTE( "o17_07.12l", 0x40000, 0x20000, CRC(4c4b735c) SHA1(812c3bf46bd7764b2bb812bd2b9eb0331ed257ae) )
|
||||
ROM_LOAD16_BYTE( "o17_08.13l", 0x40001, 0x20000, CRC(95c6586c) SHA1(ff87901f79d80f73ad09664b0c0d892898570616) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "o17_01.1d", 0x00000, 0x20000, CRC(ea12e491) SHA1(02190722b7c5383471e0af9596be7039a5367240) )
|
||||
ROM_LOAD16_BYTE( "o17_02.3d", 0x00001, 0x20000, CRC(32a13a9f) SHA1(1446acdfd21cd41f3d97aaf30f498c0c5d890605) )
|
||||
ROM_LOAD16_BYTE( "o17_03.5d", 0x40000, 0x20000, CRC(68723dc9) SHA1(4f1b7aa2469c955e03737b611a7d2524f1e4f61e) )
|
||||
@ -2978,11 +2977,11 @@ ROM_START( outzone )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "tp_018_09.3j", 0x0000, 0x8000, CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tiles", 0 )
|
||||
ROM_LOAD16_WORD( "tp-018_rom5.19h", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
|
||||
ROM_LOAD16_WORD( "tp-018_rom6.22h", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom2.1c", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom1.1e", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom3.1d", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
|
||||
@ -3001,11 +3000,11 @@ ROM_START( outzoneh )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "tp_018_09.3j", 0x0000, 0x8000, CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tiles", 0 )
|
||||
ROM_LOAD16_WORD( "tp-018_rom5.19h", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
|
||||
ROM_LOAD16_WORD( "tp-018_rom6.22h", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom2.1c", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom1.1e", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom3.1d", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
|
||||
@ -3024,7 +3023,7 @@ ROM_START( outzonea )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "tp_018_09.3j", 0x0000, 0x8000, CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tiles", 0 )
|
||||
ROM_LOAD16_WORD( "tp-018_rom5.19h", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
|
||||
ROM_LOAD16_WORD( "tp-018_rom6.22h", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
|
||||
/* a bootleg board exists using the same data in a different layout
|
||||
@ -3046,7 +3045,7 @@ ROM_START( outzonea )
|
||||
ROM_LOAD16_BYTE( "12.bin", 0x0e0001, 0x10000, CRC(90d37ded) SHA1(6a4d1d2a8e548fce953833b6ad3658bff85b6c73) )
|
||||
*/
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom2.1c", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom1.1e", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom3.1d", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
|
||||
@ -3065,11 +3064,11 @@ ROM_START( outzoneb )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "tp09.3j", 0x0000, 0x8000, CRC(dd56041f) SHA1(a481b8959b349761624166906175f8efcbebb7e7) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tiles", 0 )
|
||||
ROM_LOAD16_WORD( "tp-018_rom5.19h", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
|
||||
ROM_LOAD16_WORD( "tp-018_rom6.22h", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom2.1c", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom1.1e", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom3.1d", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
|
||||
@ -3088,11 +3087,11 @@ ROM_START( outzonec ) // From board serial number 2122, is this a prototype?
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "tp_018_09.3j", 0x0000, 0x8000, BAD_DUMP CRC(73d8e235) SHA1(f37ad497259a467cdf2ec8b3e6e7d3e873087e6c) ) // see notes
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tiles", 0 )
|
||||
ROM_LOAD16_WORD( "tp-018_rom5.19h", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) )
|
||||
ROM_LOAD16_WORD( "tp-018_rom6.22h", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom2.1c", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom1.1e", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom3.1d", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
|
||||
@ -3112,11 +3111,11 @@ ROM_START( outzonecv ) // This is a factory conversion of a Zero Wing (TP-015 ha
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // Sound Z80 code
|
||||
ROM_LOAD( "tp_018_09+.9l", 0x0000, 0x8000, CRC(b7201606) SHA1(d413074b59f25eb2136c1bc98189550410658493) ) // The actual label has a black dot instead of the "+"
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tiles", 0 )
|
||||
ROM_LOAD16_WORD( "tp-018_rom5.bin", 0x00000, 0x80000, CRC(c64ec7b6) SHA1(e73b51c3713c2ea7a572a02531c15d1261ddeaa0) ) // Located on a SUB 015 daughter card
|
||||
ROM_LOAD16_WORD( "tp-018_rom6.bin", 0x80000, 0x80000, CRC(64b6c5ac) SHA1(07fa20115f603445c0d51af3465c0471c09d76b1) ) // Located on a SUB 015 daughter card
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom2.22a", 0x00000, 0x20000, CRC(6bb72d16) SHA1(a127b10d9c255542bd09fcb5df057c12fd28c0d1) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom1.20a", 0x00001, 0x20000, CRC(0934782d) SHA1(e4a775ead23227d7d6e76aea23aa3103b511d031) )
|
||||
ROM_LOAD16_BYTE( "tp-018_rom3.25a", 0x40000, 0x20000, CRC(ec903c07) SHA1(75906f31200877fc8f6e78c2606ad5be49778165) )
|
||||
@ -3135,13 +3134,13 @@ ROM_START( vimana ) // From board serial number 1547.04 (July '94)
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-019.4m", 0x00000, 0x08000, CRC(41a97ebe) SHA1(9b377086e4d9b8de6e3c8c7d2dd099b80ab88934) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom6.24f", 0x00000, 0x20000, CRC(2886878d) SHA1(f44933d87bbcd3bd58f46e0f0f89b05c409b713b) )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom5.22f", 0x00001, 0x20000, CRC(61a63d7a) SHA1(5cdebc03110252cc43d31b6f87f9a23556892977) )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom4.20f", 0x40000, 0x20000, CRC(b0515768) SHA1(9907b52b4d30ce5324270a12c40250068adafca8) )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom3.18f", 0x40001, 0x20000, CRC(0b539131) SHA1(07f3e3b9b28c8218e36668c24d16dbb6e9a66889) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx2", 0 )
|
||||
ROM_REGION( 0x100000, "sprites", 0 )
|
||||
ROM_LOAD16_WORD( "tp-019_rom1.20a", 0x00000, 0x80000, CRC(cdde26cd) SHA1(27893af4692ec7bcbaac9e790c0707c98df84e62) )
|
||||
ROM_LOAD16_WORD( "tp-019_rom2.20b", 0x80000, 0x80000, CRC(1dbfc118) SHA1(4fd039a3172f73ad910349b2d360e8ae77ccddb2) )
|
||||
|
||||
@ -3158,13 +3157,13 @@ ROM_START( vimanan )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-019.4m", 0x00000, 0x08000, CRC(41a97ebe) SHA1(9b377086e4d9b8de6e3c8c7d2dd099b80ab88934) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom6.24f", 0x00000, 0x20000, CRC(2886878d) SHA1(f44933d87bbcd3bd58f46e0f0f89b05c409b713b) )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom5.22f", 0x00001, 0x20000, CRC(61a63d7a) SHA1(5cdebc03110252cc43d31b6f87f9a23556892977) )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom4.20f", 0x40000, 0x20000, CRC(b0515768) SHA1(9907b52b4d30ce5324270a12c40250068adafca8) )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom3.18f", 0x40001, 0x20000, CRC(0b539131) SHA1(07f3e3b9b28c8218e36668c24d16dbb6e9a66889) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx2", 0 )
|
||||
ROM_REGION( 0x100000, "sprites", 0 )
|
||||
ROM_LOAD16_WORD( "tp-019_rom1.20a", 0x00000, 0x80000, CRC(cdde26cd) SHA1(27893af4692ec7bcbaac9e790c0707c98df84e62) )
|
||||
ROM_LOAD16_WORD( "tp-019_rom2.20b", 0x80000, 0x80000, CRC(1dbfc118) SHA1(4fd039a3172f73ad910349b2d360e8ae77ccddb2) )
|
||||
|
||||
@ -3181,13 +3180,13 @@ ROM_START( vimanaj )
|
||||
ROM_REGION( 0x8000, "audiocpu", 0 ) // HD647180 (Z180) with internal ROM
|
||||
ROM_LOAD( "hd647180_tp-019.4m", 0x00000, 0x08000, CRC(41a97ebe) SHA1(9b377086e4d9b8de6e3c8c7d2dd099b80ab88934) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tiles", 0 )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom6.24f", 0x00000, 0x20000, CRC(2886878d) SHA1(f44933d87bbcd3bd58f46e0f0f89b05c409b713b) )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom5.22f", 0x00001, 0x20000, CRC(61a63d7a) SHA1(5cdebc03110252cc43d31b6f87f9a23556892977) )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom4.20f", 0x40000, 0x20000, CRC(b0515768) SHA1(9907b52b4d30ce5324270a12c40250068adafca8) )
|
||||
ROM_LOAD16_BYTE( "tp-019_rom3.18f", 0x40001, 0x20000, CRC(0b539131) SHA1(07f3e3b9b28c8218e36668c24d16dbb6e9a66889) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx2", 0 )
|
||||
ROM_REGION( 0x100000, "sprites", 0 )
|
||||
ROM_LOAD16_WORD( "tp-019_rom1.20a", 0x00000, 0x80000, CRC(cdde26cd) SHA1(27893af4692ec7bcbaac9e790c0707c98df84e62) )
|
||||
ROM_LOAD16_WORD( "tp-019_rom2.20b", 0x80000, 0x80000, CRC(1dbfc118) SHA1(4fd039a3172f73ad910349b2d360e8ae77ccddb2) )
|
||||
|
||||
@ -3198,9 +3197,9 @@ ROM_END
|
||||
|
||||
|
||||
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS
|
||||
GAME( 1988, rallybik, 0, rallybik, rallybik, toaplan1_rallybik_state, empty_init, ROT270, "Toaplan / Taito Corporation", "Rally Bike / Dash Yarou", 0 )
|
||||
GAME( 1988, rallybik, 0, rallybik, rallybik, toaplan1_rallybik_state, empty_init, ROT270, "Toaplan / Taito Corporation", "Rally Bike (Europe, US) / Dash Yarou (Japan)", 0 )
|
||||
|
||||
GAME( 1988, truxton, 0, truxton, truxton, toaplan1_state, empty_init, ROT270, "Toaplan / Taito Corporation", "Truxton / Tatsujin", 0 )
|
||||
GAME( 1988, truxton, 0, truxton, truxton, toaplan1_state, empty_init, ROT270, "Toaplan / Taito Corporation", "Truxton (Europe, US) / Tatsujin (Japan)", 0 )
|
||||
|
||||
GAME( 1989, hellfire, 0, hellfire, hellfire, toaplan1_state, empty_init, ROT0, "Toaplan (Taito license)", "Hellfire (2P set)", 0 )
|
||||
GAME( 1989, hellfire1, hellfire, hellfire, hellfire1, toaplan1_state, empty_init, ROT0, "Toaplan (Taito license)", "Hellfire (1P set)", 0 )
|
||||
@ -3211,21 +3210,21 @@ GAME( 1989, zerowing, 0, zerowing, zerowing2, toaplan1_state,
|
||||
GAME( 1989, zerowing1, zerowing, zerowing, zerowing, toaplan1_state, empty_init, ROT0, "Toaplan", "Zero Wing (1P set)", 0 )
|
||||
GAME( 1989, zerowingw, zerowing, zerowing, zerowing2, toaplan1_state, empty_init, ROT0, "Toaplan (Williams license)", "Zero Wing (2P set, Williams license)", 0 )
|
||||
|
||||
GAME( 1990, demonwld, 0, demonwld, demonwld, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 1)", 0 )
|
||||
GAME( 1989, demonwld1, demonwld, demonwld, demonwld, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 2)", 0 )
|
||||
GAME( 1989, demonwld2, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 3)", 0 )
|
||||
GAME( 1989, demonwld3, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 4)", 0 )
|
||||
GAME( 1989, demonwld4, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World / Horror Story (set 5)", 0 )
|
||||
GAME( 1989, demonwld5, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan (APM Electronics license)", "Demon's World / Horror Story (set 6)", 0 )
|
||||
GAME( 1990, demonwld, 0, demonwld, demonwld, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World (World) / Horror Story (Japan) (set 1)", 0 )
|
||||
GAME( 1989, demonwld1, demonwld, demonwld, demonwld, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World (World) / Horror Story (Japan) (set 2)", 0 )
|
||||
GAME( 1989, demonwld2, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World (World) / Horror Story (Japan) (set 3)", 0 )
|
||||
GAME( 1989, demonwld3, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World (World) / Horror Story (Japan) (set 4)", 0 )
|
||||
GAME( 1989, demonwld4, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan", "Demon's World (World) / Horror Story (Japan) (set 5)", 0 )
|
||||
GAME( 1989, demonwld5, demonwld, demonwld, demonwld1, toaplan1_demonwld_state, empty_init, ROT0, "Toaplan (APM Electronics license)", "Demon's World (World) / Horror Story (Japan) (set 6)", 0 )
|
||||
|
||||
GAME( 1990, fireshrk, 0, samesame, fireshrk, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Fire Shark", 0 )
|
||||
GAME( 1989, fireshrka, fireshrk, samesame, fireshrka, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Fire Shark (earlier)", 0 )
|
||||
GAME( 1990, fireshrkd, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 1, easier)", 0 )
|
||||
GAME( 1990, fireshrkdh, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 2, harder)", 0 )
|
||||
GAME( 1989, samesame, fireshrk, samesame, samesame, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Same! Same! Same! (1P set)", 0 )
|
||||
GAME( 1989, samesame2, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Same! Same! Same! (2P set)", 0 )
|
||||
GAME( 1990, samesamecn, fireshrk, samesame, jiaojiao, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Hong Kong Honest Trading license)", "Jiao! Jiao! Jiao! (China, 2P set)", 0 )
|
||||
GAME( 2015, samesamenh, fireshrk, samesame, samesame, toaplan1_samesame_state, empty_init, ROT270, "hack (trap15)", "Same! Same! Same! (1P set, NEW VER! hack)", 0 )
|
||||
GAME( 1990, fireshrk, 0, samesame, fireshrk, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Fire Shark", 0 )
|
||||
GAME( 1989, fireshrka, fireshrk, samesame, fireshrka, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Fire Shark (earlier)", 0 )
|
||||
GAME( 1990, fireshrkd, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 1, easier)", 0 )
|
||||
GAME( 1990, fireshrkdh, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Dooyong license)", "Fire Shark (Korea, set 2, harder)", 0 )
|
||||
GAME( 1989, samesame, fireshrk, samesame, samesame, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Same! Same! Same! (Japan, 1P set)", 0 )
|
||||
GAME( 1989, samesame2, fireshrk, samesame, samesame2, toaplan1_samesame_state, empty_init, ROT270, "Toaplan", "Same! Same! Same! (Japan, 2P set)", 0 )
|
||||
GAME( 1990, samesamecn, fireshrk, samesame, jiaojiao, toaplan1_samesame_state, empty_init, ROT270, "Toaplan (Hong Kong Honest Trading license)", "Jiao! Jiao! Jiao! (China, 2P set)", 0 )
|
||||
GAME( 2015, samesamenh, fireshrk, samesame, samesame, toaplan1_samesame_state, empty_init, ROT270, "hack (trap15)", "Same! Same! Same! (Japan, 1P set, NEW VER! hack)", 0 )
|
||||
|
||||
GAME( 1990, outzone, 0, outzone, outzone, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone", 0 )
|
||||
GAME( 1990, outzoneh, outzone, outzone, outzone, toaplan1_state, empty_init, ROT270, "Toaplan", "Out Zone (harder)", 0 )
|
||||
|
@ -23,18 +23,18 @@ class toaplan1_state : public driver_device
|
||||
public:
|
||||
toaplan1_state(const machine_config &mconfig, device_type type, const char *tag, bool large = false) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_bgpaletteram(*this, "bgpalette"),
|
||||
m_fgpaletteram(*this, "fgpalette"),
|
||||
m_sharedram(*this, "sharedram"),
|
||||
m_dswb_io(*this, "DSWB"),
|
||||
m_tjump_io(*this, "TJUMP"),
|
||||
m_spriteram(*this, "spriteram", large ? 0x1000 : 0x800, ENDIANNESS_BIG),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_ymsnd(*this, "ymsnd"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette")
|
||||
m_palette(*this, "palette"),
|
||||
m_bgpaletteram(*this, "bgpalette"),
|
||||
m_fgpaletteram(*this, "fgpalette"),
|
||||
m_sharedram(*this, "sharedram"),
|
||||
m_spriteram(*this, "spriteram", large ? 0x1000 : 0x800, ENDIANNESS_BIG),
|
||||
m_dswb_io(*this, "DSWB"),
|
||||
m_tjump_io(*this, "TJUMP")
|
||||
{ }
|
||||
|
||||
void truxton(machine_config &config);
|
||||
@ -49,16 +49,22 @@ protected:
|
||||
virtual void machine_reset() override ATTR_COLD;
|
||||
virtual void video_start() override ATTR_COLD;
|
||||
|
||||
required_device<m68000_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<ym3812_device> m_ymsnd;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_shared_ptr<u16> m_bgpaletteram;
|
||||
required_shared_ptr<u16> m_fgpaletteram;
|
||||
|
||||
optional_shared_ptr<u8> m_sharedram;
|
||||
memory_share_creator<u16> m_spriteram;
|
||||
|
||||
optional_ioport m_dswb_io;
|
||||
optional_ioport m_tjump_io;
|
||||
|
||||
u8 m_intenable = 0;
|
||||
|
||||
std::unique_ptr<u16[]> m_tilevram[4];
|
||||
/*
|
||||
std::unique_ptr<u16[]> m_tilevram[3]; // || Drawn in this order
|
||||
@ -67,13 +73,14 @@ protected:
|
||||
std::unique_ptr<u16[]> m_tilevram[0]; // \/
|
||||
*/
|
||||
|
||||
memory_share_creator<u16> m_spriteram;
|
||||
std::unique_ptr<u16[]> m_buffered_spriteram;
|
||||
std::unique_ptr<u16[]> m_spritesizeram;
|
||||
std::unique_ptr<u16[]> m_buffered_spritesizeram;
|
||||
|
||||
u8 m_intenable = 0;
|
||||
|
||||
s32 m_bcu_flipscreen; /* Tile controller flip flag */
|
||||
s32 m_fcu_flipscreen; /* Sprite controller flip flag */
|
||||
bool m_fcu_flipscreen; /* Sprite controller flip flag */
|
||||
|
||||
s32 m_pf_voffs = 0;
|
||||
s32 m_spriteram_offs = 0;
|
||||
@ -82,8 +89,8 @@ protected:
|
||||
s32 m_scrolly[4]{};
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
int m_display_pf[4]{};
|
||||
int m_displog = 0;
|
||||
bool m_display_pf[4]{};
|
||||
bool m_displog = false;
|
||||
#endif
|
||||
|
||||
s32 m_tiles_offsetx = 0;
|
||||
@ -137,12 +144,6 @@ protected:
|
||||
void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
virtual void reset_sound();
|
||||
void reset_callback(int state);
|
||||
required_device<m68000_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<ym3812_device> m_ymsnd;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
void hellfire_main_map(address_map &map) ATTR_COLD;
|
||||
void hellfire_sound_io_map(address_map &map) ATTR_COLD;
|
||||
@ -174,6 +175,8 @@ protected:
|
||||
virtual void video_start() override ATTR_COLD;
|
||||
|
||||
private:
|
||||
required_device<toaplan_scu_device> m_spritegen;
|
||||
|
||||
void coin_counter_1_w(int state);
|
||||
void coin_counter_2_w(int state);
|
||||
void coin_lockout_1_w(int state);
|
||||
@ -183,7 +186,6 @@ private:
|
||||
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
void screen_vblank(int state);
|
||||
|
||||
required_device<toaplan_scu_device> m_spritegen;
|
||||
void rallybik_main_map(address_map &map) ATTR_COLD;
|
||||
void rallybik_sound_io_map(address_map &map) ATTR_COLD;
|
||||
};
|
||||
@ -205,10 +207,12 @@ protected:
|
||||
virtual void machine_reset() override ATTR_COLD;
|
||||
|
||||
private:
|
||||
required_device<tms32010_device> m_dsp;
|
||||
|
||||
/* Demon world */
|
||||
int m_dsp_on = 0;
|
||||
int m_dsp_bio = 0;
|
||||
int m_dsp_execute = 0;
|
||||
s32 m_dsp_on = 0;
|
||||
s32 m_dsp_bio = 0;
|
||||
bool m_dsp_execute = false;
|
||||
u32 m_dsp_addr_w = 0;
|
||||
u32 m_main_ram_seg = 0;
|
||||
|
||||
@ -220,7 +224,6 @@ private:
|
||||
void dsp_ctrl_w(u8 data);
|
||||
void dsp_int_w(int enable);
|
||||
|
||||
required_device<tms32010_device> m_dsp;
|
||||
void dsp_io_map(address_map &map) ATTR_COLD;
|
||||
void dsp_program_map(address_map &map) ATTR_COLD;
|
||||
void main_map(address_map &map) ATTR_COLD;
|
||||
|
@ -50,19 +50,23 @@ u16 toaplan1_demonwld_state::dsp_r()
|
||||
case 0xc00000: {address_space &mainspace = m_maincpu->space(AS_PROGRAM);
|
||||
input_data = mainspace.read_word(m_main_ram_seg + m_dsp_addr_w);
|
||||
break;}
|
||||
default: logerror("DSP PC:%04x Warning !!! IO reading from %08x (port 1)\n", m_dsp->pcbase(), m_main_ram_seg + m_dsp_addr_w);
|
||||
default:
|
||||
if (!machine().side_effects_disabled())
|
||||
logerror("DSP PC:%04x Warning !!! IO reading from %08x (port 1)\n", m_dsp->pcbase(), m_main_ram_seg + m_dsp_addr_w);
|
||||
break;
|
||||
}
|
||||
logerror("DSP PC:%04x IO read %04x at %08x (port 1)\n", m_dsp->pcbase(), input_data, m_main_ram_seg + m_dsp_addr_w);
|
||||
if (!machine().side_effects_disabled())
|
||||
logerror("DSP PC:%04x IO read %04x at %08x (port 1)\n", m_dsp->pcbase(), input_data, m_main_ram_seg + m_dsp_addr_w);
|
||||
return input_data;
|
||||
}
|
||||
|
||||
void toaplan1_demonwld_state::dsp_w(u16 data)
|
||||
{
|
||||
/* Data written to main CPU RAM via DSP IO port 1 */
|
||||
m_dsp_execute = 0;
|
||||
m_dsp_execute = false;
|
||||
switch (m_main_ram_seg)
|
||||
{
|
||||
case 0xc00000: {if ((m_dsp_addr_w < 3) && (data == 0)) m_dsp_execute = 1;
|
||||
case 0xc00000: {if ((m_dsp_addr_w < 3) && (data == 0)) m_dsp_execute = true;
|
||||
address_space &mainspace = m_maincpu->space(AS_PROGRAM);
|
||||
mainspace.write_word(m_main_ram_seg + m_dsp_addr_w, data);
|
||||
break;}
|
||||
@ -80,7 +84,7 @@ void toaplan1_demonwld_state::dsp_bio_w(u16 data)
|
||||
/* communication to main processor*/
|
||||
|
||||
logerror("DSP PC:%04x IO write %04x at port 3\n", m_dsp->pcbase(), data);
|
||||
if (data & 0x8000)
|
||||
if (BIT(data, 15))
|
||||
m_dsp_bio = CLEAR_LINE;
|
||||
|
||||
if (data == 0)
|
||||
@ -89,7 +93,7 @@ void toaplan1_demonwld_state::dsp_bio_w(u16 data)
|
||||
{
|
||||
logerror("Turning 68000 on\n");
|
||||
m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
|
||||
m_dsp_execute = 0;
|
||||
m_dsp_execute = false;
|
||||
}
|
||||
m_dsp_bio = ASSERT_LINE;
|
||||
}
|
||||
@ -127,14 +131,14 @@ void toaplan1_demonwld_state::device_post_load()
|
||||
void toaplan1_demonwld_state::dsp_ctrl_w(u8 data)
|
||||
{
|
||||
#if 0
|
||||
logerror("68000:%08x Writing %02x to $e0000b.\n",m_maincpu->pc() ,data);
|
||||
logerror("68000:%08x Writing %02x to $e0000b.\n", m_maincpu->pc(), data);
|
||||
#endif
|
||||
|
||||
switch (data)
|
||||
{
|
||||
case 0x00: dsp_int_w(1); break; /* Enable the INT line to the DSP */
|
||||
case 0x01: dsp_int_w(0); break; /* Inhibit the INT line to the DSP */
|
||||
default: logerror("68000:%08x Writing unknown command %02x to $e0000b\n",m_maincpu->pcbase() ,data); break;
|
||||
default: logerror("68000:%08x Writing unknown command %02x to $e0000b\n", m_maincpu->pcbase(), data); break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -223,7 +227,7 @@ void toaplan1_demonwld_state::machine_reset()
|
||||
toaplan1_state::machine_reset();
|
||||
m_dsp_addr_w = 0;
|
||||
m_main_ram_seg = 0;
|
||||
m_dsp_execute = 0;
|
||||
m_dsp_execute = false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -126,9 +126,9 @@ Abnormalities:
|
||||
#include "toaplan1.h"
|
||||
|
||||
|
||||
#define TOAPLAN1_TILEVRAM_SIZE 0x4000 /* 4 tile layers each this RAM size */
|
||||
#define TOAPLAN1_SPRITERAM_SIZE 0x800 /* sprite ram */
|
||||
#define TOAPLAN1_SPRITESIZERAM_SIZE 0x80 /* sprite size ram */
|
||||
static constexpr u32 TOAPLAN1_TILEVRAM_SIZE = 0x4000; /* 4 tile layers each this RAM size */
|
||||
static constexpr u32 TOAPLAN1_SPRITERAM_SIZE = 0x800; /* sprite ram */
|
||||
static constexpr u32 TOAPLAN1_SPRITESIZERAM_SIZE = 0x80; /* sprite size ram */
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
@ -140,18 +140,16 @@ Abnormalities:
|
||||
template<unsigned Layer>
|
||||
TILE_GET_INFO_MEMBER(toaplan1_state::get_tile_info)
|
||||
{
|
||||
int color, tile_number, attrib;
|
||||
|
||||
tile_number = m_tilevram[Layer][2 * tile_index + 1] & 0x7fff;
|
||||
attrib = m_tilevram[Layer][2 * tile_index];
|
||||
color = attrib & 0x3f;
|
||||
const u16 tile_number = m_tilevram[Layer][2 * tile_index + 1] & 0x7fff;
|
||||
const u16 attrib = m_tilevram[Layer][2 * tile_index];
|
||||
const u16 color = attrib & 0x3f;
|
||||
tileinfo.set(0,
|
||||
tile_number,
|
||||
color,
|
||||
0);
|
||||
// "disabled" tiles are behind everything else
|
||||
if (m_tilevram[Layer][2 * tile_index + 1] & 0x8000) tileinfo.category = 16;
|
||||
else tileinfo.category = (attrib & 0xf000) >> 12;
|
||||
if (BIT(m_tilevram[Layer][2 * tile_index + 1], 15)) tileinfo.category = 16;
|
||||
else tileinfo.category = (attrib & 0xf000) >> 12;
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
@ -182,11 +180,11 @@ void toaplan1_state::vram_alloc()
|
||||
}
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
m_display_pf[0] = 1;
|
||||
m_display_pf[1] = 1;
|
||||
m_display_pf[2] = 1;
|
||||
m_display_pf[3] = 1;
|
||||
m_displog = 0;
|
||||
m_display_pf[0] = true;
|
||||
m_display_pf[1] = true;
|
||||
m_display_pf[2] = true;
|
||||
m_display_pf[3] = true;
|
||||
m_displog = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -229,7 +227,7 @@ void toaplan1_state::register_common()
|
||||
|
||||
void toaplan1_rallybik_state::video_start()
|
||||
{
|
||||
m_spritegen->gfx(0)->set_colorbase(64*16);
|
||||
m_spritegen->gfx(0)->set_colorbase(64 * 16);
|
||||
|
||||
create_tilemaps();
|
||||
vram_alloc();
|
||||
@ -247,7 +245,7 @@ void toaplan1_rallybik_state::video_start()
|
||||
m_tilemap[3]->set_scrolldy(-0x111, 0x8);
|
||||
|
||||
m_bcu_flipscreen = -1;
|
||||
m_fcu_flipscreen = 0;
|
||||
m_fcu_flipscreen = false;
|
||||
|
||||
register_common();
|
||||
}
|
||||
@ -268,7 +266,7 @@ void toaplan1_state::video_start()
|
||||
m_tilemap[3]->set_scrolldy(-0x101, -0xff);
|
||||
|
||||
m_bcu_flipscreen = -1;
|
||||
m_fcu_flipscreen = 0;
|
||||
m_fcu_flipscreen = false;
|
||||
|
||||
register_common();
|
||||
}
|
||||
@ -304,8 +302,8 @@ void toaplan1_state::bcu_flipscreen_w(u8 data)
|
||||
{
|
||||
if (data != m_bcu_flipscreen)
|
||||
{
|
||||
logerror("Setting BCU controller flipscreen port to %02x\n",data);
|
||||
m_bcu_flipscreen = data & 0x01; /* 0x0001 = flip, 0x0000 = no flip */
|
||||
logerror("Setting BCU controller flipscreen port to %02x\n", data);
|
||||
m_bcu_flipscreen = BIT(data, 0); /* 0x0001 = flip, 0x0000 = no flip */
|
||||
machine().tilemap().set_flip_all((data ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0));
|
||||
|
||||
set_scrolls();
|
||||
@ -314,8 +312,8 @@ void toaplan1_state::bcu_flipscreen_w(u8 data)
|
||||
|
||||
void toaplan1_state::fcu_flipscreen_w(u8 data)
|
||||
{
|
||||
logerror("Setting FCU controller flipscreen port to %02x\n",data);
|
||||
m_fcu_flipscreen = data & 0x80; /* 0x80 = flip, 0x00 = no flip */
|
||||
logerror("Setting FCU controller flipscreen port to %02x\n", data);
|
||||
m_fcu_flipscreen = BIT(data, 7); /* 0x80 = flip, 0x00 = no flip */
|
||||
}
|
||||
|
||||
u16 toaplan1_state::spriteram_offs_r() // this aint really needed ?
|
||||
@ -333,25 +331,25 @@ void toaplan1_state::bgpalette_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_bgpaletteram[offset]);
|
||||
data = m_bgpaletteram[offset];
|
||||
m_palette->set_pen_color(offset, pal5bit(data>>0), pal5bit(data>>5), pal5bit(data>>10));
|
||||
m_palette->set_pen_color(offset, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10));
|
||||
}
|
||||
|
||||
void toaplan1_state::fgpalette_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_fgpaletteram[offset]);
|
||||
data = m_fgpaletteram[offset];
|
||||
m_palette->set_pen_color(offset + 64*16, pal5bit(data>>0), pal5bit(data>>5), pal5bit(data>>10));
|
||||
m_palette->set_pen_color(offset + 64 * 16, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10));
|
||||
}
|
||||
|
||||
|
||||
u16 toaplan1_state::spriteram_r()
|
||||
{
|
||||
return m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE / 2)-1)];
|
||||
return m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE / 2) - 1)];
|
||||
}
|
||||
|
||||
void toaplan1_state::spriteram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE / 2)-1)]);
|
||||
COMBINE_DATA(&m_spriteram[m_spriteram_offs & ((TOAPLAN1_SPRITERAM_SIZE / 2) - 1)]);
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if (m_spriteram_offs >= (TOAPLAN1_SPRITERAM_SIZE / 2))
|
||||
@ -366,12 +364,12 @@ void toaplan1_state::spriteram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
|
||||
u16 toaplan1_state::spritesizeram_r()
|
||||
{
|
||||
return m_spritesizeram[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE / 2)-1)];
|
||||
return m_spritesizeram[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE / 2) - 1)];
|
||||
}
|
||||
|
||||
void toaplan1_state::spritesizeram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_spritesizeram[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE / 2)-1)]);
|
||||
COMBINE_DATA(&m_spritesizeram[m_spriteram_offs & ((TOAPLAN1_SPRITESIZERAM_SIZE / 2) - 1)]);
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if (m_spriteram_offs >= (TOAPLAN1_SPRITESIZERAM_SIZE / 2))
|
||||
@ -388,7 +386,7 @@ void toaplan1_state::spritesizeram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
|
||||
void toaplan1_state::bcu_control_w(offs_t offset, u16 data)
|
||||
{
|
||||
logerror("BCU tile controller register:%02x now = %04x\n",offset,data);
|
||||
logerror("BCU tile controller register:%02x now = %04x\n", offset, data);
|
||||
}
|
||||
|
||||
u16 toaplan1_state::tileram_offs_r()
|
||||
@ -399,7 +397,7 @@ u16 toaplan1_state::tileram_offs_r()
|
||||
void toaplan1_state::tileram_offs_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
if (data >= 0x4000)
|
||||
logerror("Hmmm, unknown video layer being selected (%08x)\n",data);
|
||||
logerror("Hmmm, unknown video layer being selected (%08x)\n", data);
|
||||
COMBINE_DATA(&m_pf_voffs);
|
||||
}
|
||||
|
||||
@ -408,7 +406,6 @@ u16 toaplan1_state::tileram_r(offs_t offset)
|
||||
{
|
||||
const int layer = m_pf_voffs >> 12;
|
||||
const int offs = m_pf_voffs & 0xfff;
|
||||
offs_t vram_offset;
|
||||
u16 video_data = 0;
|
||||
|
||||
switch (layer) /* Locate Layer (PlayField) */
|
||||
@ -417,12 +414,15 @@ u16 toaplan1_state::tileram_r(offs_t offset)
|
||||
case 0x1:
|
||||
case 0x2:
|
||||
case 0x3:
|
||||
vram_offset = ((offs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE / 2)-1);
|
||||
video_data = m_tilevram[layer][vram_offset];
|
||||
break;
|
||||
{
|
||||
offs_t vram_offset = ((offs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE / 2) - 1);
|
||||
video_data = m_tilevram[layer][vram_offset];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
if (!machine().side_effects_disabled())
|
||||
logerror("Hmmm, reading %04x from unknown playfield layer address %06x Offset:%01x !!!\n", video_data, m_pf_voffs, offset);
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
return video_data;
|
||||
@ -444,7 +444,6 @@ void toaplan1_state::tileram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
const int layer = m_pf_voffs >> 12;
|
||||
const int offs = m_pf_voffs & 0xfff;
|
||||
offs_t vram_offset;
|
||||
|
||||
switch (layer) /* Locate Layer (PlayField) */
|
||||
{
|
||||
@ -452,13 +451,15 @@ void toaplan1_state::tileram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
case 0x1:
|
||||
case 0x2:
|
||||
case 0x3:
|
||||
vram_offset = ((offs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE / 2)-1);
|
||||
COMBINE_DATA(&m_tilevram[layer][vram_offset]);
|
||||
m_tilemap[layer]->mark_tile_dirty(vram_offset / 2);
|
||||
break;
|
||||
{
|
||||
offs_t vram_offset = ((offs * 2) + offset) & ((TOAPLAN1_TILEVRAM_SIZE / 2) - 1);
|
||||
COMBINE_DATA(&m_tilevram[layer][vram_offset]);
|
||||
m_tilemap[layer]->mark_tile_dirty(vram_offset / 2);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
logerror("Hmmm, writing %04x to unknown playfield layer address %06x Offset:%01x\n", data, m_pf_voffs, offset);
|
||||
break;
|
||||
logerror("Hmmm, writing %04x to unknown playfield layer address %06x Offset:%01x\n", data, m_pf_voffs, offset);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -479,8 +480,10 @@ u16 toaplan1_state::scroll_regs_r(offs_t offset)
|
||||
case 03:
|
||||
case 05:
|
||||
case 07: scroll = m_scrolly[layer]; break;
|
||||
default: logerror("Hmmm, reading unknown video scroll register (%02x) !!!\n",offset);
|
||||
break;
|
||||
default:
|
||||
if (!machine().side_effects_disabled())
|
||||
logerror("Hmmm, reading unknown video scroll register (%02x) !!!\n",offset);
|
||||
break;
|
||||
}
|
||||
return scroll;
|
||||
}
|
||||
@ -495,18 +498,18 @@ void toaplan1_state::scroll_regs_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
case 02: /* 1D5h */
|
||||
case 04: /* 1D7h */
|
||||
case 06: /* 1D9h */
|
||||
COMBINE_DATA(&m_scrollx[layer]);
|
||||
m_tilemap[layer]->set_scrollx(0, (m_scrollx[layer] >> 7) - m_tiles_offsetx);
|
||||
break;
|
||||
COMBINE_DATA(&m_scrollx[layer]);
|
||||
m_tilemap[layer]->set_scrollx(0, (m_scrollx[layer] >> 7) - m_tiles_offsetx);
|
||||
break;
|
||||
case 01: /* 1EBh */
|
||||
case 03: /* 1EBh */
|
||||
case 05: /* 1EBh */
|
||||
case 07: /* 1EBh */
|
||||
COMBINE_DATA(&m_scrolly[layer]);
|
||||
m_tilemap[layer]->set_scrolly(0, (m_scrolly[layer] >> 7) - m_tiles_offsety);
|
||||
break;
|
||||
COMBINE_DATA(&m_scrolly[layer]);
|
||||
m_tilemap[layer]->set_scrolly(0, (m_scrolly[layer] >> 7) - m_tiles_offsety);
|
||||
break;
|
||||
default: logerror("Hmmm, writing %04x to unknown video scroll register (%02x) !!!\n",data ,offset);
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -519,28 +522,26 @@ void toaplan1_state::log_vram()
|
||||
|
||||
if (machine().input().code_pressed(KEYCODE_M))
|
||||
{
|
||||
u16 *spriteram = m_spriteram;
|
||||
u16 *buffered_spriteram = m_buffered_spriteram.get();
|
||||
offs_t sprite_voffs;
|
||||
u16 const *const spriteram = m_spriteram;
|
||||
u16 const *const buffered_spriteram = m_buffered_spriteram.get();
|
||||
while (machine().input().code_pressed(KEYCODE_M)) ;
|
||||
if (m_spritesizeram) /* FCU controller */
|
||||
{
|
||||
int schar,sattr,sxpos,sypos,bschar,bsattr,bsxpos,bsypos;
|
||||
u16 *size = (u16 *)(m_spritesizeram.get());
|
||||
u16 *bsize = (u16 *)(m_buffered_spritesizeram.get());
|
||||
u16 const *const size = (u16 *)(m_spritesizeram.get());
|
||||
u16 const *const bsize = (u16 *)(m_buffered_spritesizeram.get());
|
||||
logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n");
|
||||
logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n",
|
||||
m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]);
|
||||
for (sprite_voffs = 0; sprite_voffs < m_spriteram.bytes() / 2; sprite_voffs += 4)
|
||||
for (offs_t sprite_voffs = 0; sprite_voffs < m_spriteram.bytes() / 2; sprite_voffs += 4)
|
||||
{
|
||||
bschar = buffered_spriteram[sprite_voffs];
|
||||
bsattr = buffered_spriteram[sprite_voffs + 1];
|
||||
bsxpos = buffered_spriteram[sprite_voffs + 2];
|
||||
bsypos = buffered_spriteram[sprite_voffs + 3];
|
||||
schar = spriteram[sprite_voffs];
|
||||
sattr = spriteram[sprite_voffs + 1];
|
||||
sxpos = spriteram[sprite_voffs + 2];
|
||||
sypos = spriteram[sprite_voffs + 3];
|
||||
const int bschar = buffered_spriteram[sprite_voffs];
|
||||
const int bsattr = buffered_spriteram[sprite_voffs + 1];
|
||||
const int bsxpos = buffered_spriteram[sprite_voffs + 2];
|
||||
const int bsypos = buffered_spriteram[sprite_voffs + 3];
|
||||
const int schar = spriteram[sprite_voffs];
|
||||
const int sattr = spriteram[sprite_voffs + 1];
|
||||
const int sxpos = spriteram[sprite_voffs + 2];
|
||||
const int sypos = spriteram[sprite_voffs + 3];
|
||||
logerror("$(%04x) Tile-Attr-Xpos-Ypos Now:%04x %04x %04x.%01x %04x.%01x nxt:%04x %04x %04x.%01x %04x.%01x\n", sprite_voffs,
|
||||
schar, sattr, sxpos, size[( sattr >> 6) & 0x3f] & 0xf, sypos,( size[( sattr >> 6) & 0x3f] >> 4) & 0xf,
|
||||
bschar,bsattr,bsxpos,bsize[(bsattr >> 6) & 0x3f] & 0xf,bsypos,(bsize[(bsattr >> 6) & 0x3f] >> 4) & 0xf);
|
||||
@ -548,20 +549,19 @@ void toaplan1_state::log_vram()
|
||||
}
|
||||
else /* SCU controller */
|
||||
{
|
||||
int schar,sattr,sxpos,sypos,bschar,bsattr,bsxpos,bsypos;
|
||||
logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n");
|
||||
logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n",
|
||||
m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]);
|
||||
for (sprite_voffs = 0; sprite_voffs < m_spriteram.bytes() / 2; sprite_voffs += 4)
|
||||
for (offs_t sprite_voffs = 0; sprite_voffs < m_spriteram.bytes() / 2; sprite_voffs += 4)
|
||||
{
|
||||
bschar = buffered_spriteram[sprite_voffs];
|
||||
bsattr = buffered_spriteram[sprite_voffs + 1];
|
||||
bsypos = buffered_spriteram[sprite_voffs + 2];
|
||||
bsxpos = buffered_spriteram[sprite_voffs + 3];
|
||||
schar = spriteram[sprite_voffs];
|
||||
sattr = spriteram[sprite_voffs + 1];
|
||||
sypos = spriteram[sprite_voffs + 2];
|
||||
sxpos = spriteram[sprite_voffs + 3];
|
||||
const int bschar = buffered_spriteram[sprite_voffs];
|
||||
const int bsattr = buffered_spriteram[sprite_voffs + 1];
|
||||
const int bsypos = buffered_spriteram[sprite_voffs + 2];
|
||||
const int bsxpos = buffered_spriteram[sprite_voffs + 3];
|
||||
const int schar = spriteram[sprite_voffs];
|
||||
const int sattr = spriteram[sprite_voffs + 1];
|
||||
const int sypos = spriteram[sprite_voffs + 2];
|
||||
const int sxpos = spriteram[sprite_voffs + 3];
|
||||
logerror("$(%04x) Tile-Attr-Xpos-Ypos Now:%04x %04x %04x %04x nxt:%04x %04x %04x %04x\n", sprite_voffs,
|
||||
schar, sattr, sxpos, sypos,
|
||||
bschar,bsattr,bsxpos, bsypos);
|
||||
@ -571,16 +571,15 @@ void toaplan1_state::log_vram()
|
||||
|
||||
if (machine().input().code_pressed(KEYCODE_SLASH))
|
||||
{
|
||||
u16 *size = (u16 *)(m_spritesizeram.get());
|
||||
u16 *bsize = (u16 *)(m_buffered_spritesizeram.get());
|
||||
offs_t offs;
|
||||
while (machine().input().code_pressed(KEYCODE_SLASH)) ;
|
||||
if (m_spritesizeram) /* FCU controller */
|
||||
{
|
||||
u16 const *const size = (u16 *)(m_spritesizeram.get());
|
||||
u16 const *const bsize = (u16 *)(m_buffered_spritesizeram.get());
|
||||
logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n");
|
||||
logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n",
|
||||
m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]);
|
||||
for (offs = 0; offs < (TOAPLAN1_SPRITESIZERAM_SIZE / 2); offs += 4)
|
||||
for (offs_t offs = 0; offs < (TOAPLAN1_SPRITESIZERAM_SIZE / 2); offs += 4)
|
||||
{
|
||||
logerror("SizeOffs:%04x now:%04x %04x %04x %04x next: %04x %04x %04x %04x\n", offs,
|
||||
bsize[offs + 0], bsize[offs + 1],
|
||||
@ -593,13 +592,12 @@ void toaplan1_state::log_vram()
|
||||
|
||||
if (machine().input().code_pressed(KEYCODE_N))
|
||||
{
|
||||
offs_t tile_voffs;
|
||||
int tchar[4], tattr[4];
|
||||
int tchar[4]{}, tattr[4]{};
|
||||
while (machine().input().code_pressed(KEYCODE_N)) ; /* BCU controller */
|
||||
logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n");
|
||||
logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n",
|
||||
m_scrollx[0], m_scrolly[0], m_scrollx[1], m_scrolly[1], m_scrollx[2], m_scrolly[2], m_scrollx[3], m_scrolly[3]);
|
||||
for (tile_voffs = 0; tile_voffs < (TOAPLAN1_TILEVRAM_SIZE / 2); tile_voffs += 2)
|
||||
for (offs_t tile_voffs = 0; tile_voffs < (TOAPLAN1_TILEVRAM_SIZE / 2); tile_voffs += 2)
|
||||
{
|
||||
tchar[0] = m_tilevram[0][tile_voffs + 1];
|
||||
tattr[0] = m_tilevram[0][tile_voffs];
|
||||
@ -624,8 +622,7 @@ void toaplan1_state::log_vram()
|
||||
if (machine().input().code_pressed(KEYCODE_E))
|
||||
{
|
||||
while (machine().input().code_pressed(KEYCODE_E)) ;
|
||||
m_displog += 1;
|
||||
m_displog &= 1;
|
||||
m_displog = !m_displog;
|
||||
}
|
||||
if (m_displog)
|
||||
{
|
||||
@ -636,29 +633,25 @@ void toaplan1_state::log_vram()
|
||||
if (machine().input().code_pressed(KEYCODE_L)) /* Turn Playfield 4 on/off */
|
||||
{
|
||||
while (machine().input().code_pressed(KEYCODE_L)) ;
|
||||
m_display_pf[3] += 1;
|
||||
m_display_pf[3] &= 1;
|
||||
m_display_pf[3] = !m_display_pf[3];
|
||||
m_tilemap[3]->enable(m_display_pf[3]);
|
||||
}
|
||||
if (machine().input().code_pressed(KEYCODE_K)) /* Turn Playfield 3 on/off */
|
||||
{
|
||||
while (machine().input().code_pressed(KEYCODE_K)) ;
|
||||
m_display_pf[2] += 1;
|
||||
m_display_pf[2] &= 1;
|
||||
m_display_pf[2] = !m_display_pf[2];
|
||||
m_tilemap[2]->enable(m_display_pf[2]);
|
||||
}
|
||||
if (machine().input().code_pressed(KEYCODE_J)) /* Turn Playfield 2 on/off */
|
||||
{
|
||||
while (machine().input().code_pressed(KEYCODE_J)) ;
|
||||
m_display_pf[1] += 1;
|
||||
m_display_pf[1] &= 1;
|
||||
m_display_pf[1] = !m_display_pf[1];
|
||||
m_tilemap[1]->enable(m_display_pf[1]);
|
||||
}
|
||||
if (machine().input().code_pressed(KEYCODE_H)) /* Turn Playfield 1 on/off */
|
||||
{
|
||||
while (machine().input().code_pressed(KEYCODE_H)) ;
|
||||
m_display_pf[0] += 1;
|
||||
m_display_pf[0] &= 1;
|
||||
m_display_pf[0] = !m_display_pf[0];
|
||||
m_tilemap[0]->enable(m_display_pf[0]);
|
||||
}
|
||||
#endif
|
||||
@ -684,21 +677,19 @@ void toaplan1_rallybik_state::pri_cb(u8 priority, u32 &pri_mask)
|
||||
|
||||
void toaplan1_state::draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
u16 *source = (u16 *)m_buffered_spriteram.get();
|
||||
u16 *size = (u16 *)m_buffered_spritesizeram.get();
|
||||
int fcu_flipscreen = m_fcu_flipscreen;
|
||||
u16 const *const source = (u16 *)m_buffered_spriteram.get();
|
||||
u16 const *const size = (u16 *)m_buffered_spritesizeram.get();
|
||||
const bool fcu_flipscreen = m_fcu_flipscreen;
|
||||
|
||||
for (int offs = m_spriteram.bytes() / 2 - 4; offs >= 0; offs -= 4)
|
||||
{
|
||||
if (!(source[offs] & 0x8000))
|
||||
if (BIT(~source[offs], 15))
|
||||
{
|
||||
int sx, sy;
|
||||
|
||||
const u16 attrib = source[offs + 1];
|
||||
const u8 priority = (attrib & 0xf000) >> 12;
|
||||
|
||||
u32 sprite = source[offs] & 0x7fff;
|
||||
u32 color = attrib & 0x3f;
|
||||
const u32 color = attrib & 0x3f;
|
||||
|
||||
/****** find sprite dimension ******/
|
||||
const u32 sizeram_ptr = (attrib >> 6) & 0x3f;
|
||||
@ -724,11 +715,13 @@ void toaplan1_state::draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, c
|
||||
|
||||
for (int dim_y = 0; dim_y < sprite_sizey; dim_y += 8)
|
||||
{
|
||||
int sy;
|
||||
if (fcu_flipscreen) sy = sy_base - dim_y;
|
||||
else sy = sy_base + dim_y;
|
||||
|
||||
for (int dim_x = 0; dim_x < sprite_sizex; dim_x += 8)
|
||||
{
|
||||
int sx;
|
||||
if (fcu_flipscreen) sx = sx_base - dim_x;
|
||||
else sx = sx_base + dim_x;
|
||||
|
||||
@ -765,7 +758,7 @@ u32 toaplan1_rallybik_state::screen_update(screen_device &screen, bitmap_rgb32 &
|
||||
{
|
||||
// get priority mask
|
||||
// value: 0x1 (tilemap priority 0x0~0x4), 0x2 (tilemap priority 0x5~0x8), 0x4 (tilemap priority 0x9~0xc), 0x8 (tilemap priority 0xd~)
|
||||
int primask = 1 << (((priority - 1) >> 2));
|
||||
const u32 primask = 1 << (((priority - 1) >> 2));
|
||||
m_tilemap[3]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_CATEGORY(priority), primask);
|
||||
m_tilemap[2]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_CATEGORY(priority), primask);
|
||||
m_tilemap[1]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_CATEGORY(priority), primask);
|
||||
|
@ -50,8 +50,10 @@
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "sound/ay8910.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -71,13 +73,16 @@ public:
|
||||
|
||||
void mole(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void video_start() override ATTR_COLD;
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_bg_tilemap = nullptr;
|
||||
int m_tile_bank = 0;
|
||||
uint8_t m_tile_bank = 0;
|
||||
|
||||
/* memory */
|
||||
uint16_t m_tileram[0x400];
|
||||
@ -88,9 +93,6 @@ private:
|
||||
void mole_flipscreen_w(uint8_t data);
|
||||
uint8_t mole_protection_r(offs_t offset);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
virtual void machine_start() override ATTR_COLD;
|
||||
virtual void machine_reset() override ATTR_COLD;
|
||||
virtual void video_start() override ATTR_COLD;
|
||||
uint32_t screen_update_mole(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void mole_map(address_map &map) ATTR_COLD;
|
||||
};
|
||||
@ -115,6 +117,7 @@ void mole_state::video_start()
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(mole_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 40, 25);
|
||||
|
||||
save_item(NAME(m_tileram));
|
||||
save_item(NAME(m_tile_bank));
|
||||
}
|
||||
|
||||
void mole_state::mole_tileram_w(offs_t offset, uint8_t data)
|
||||
@ -145,7 +148,6 @@ uint32_t mole_state::screen_update_mole(screen_device &screen, bitmap_ind16 &bit
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Memory handlers
|
||||
@ -316,20 +318,10 @@ GFXDECODE_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
void mole_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_tile_bank));
|
||||
}
|
||||
|
||||
void mole_state::machine_reset()
|
||||
{
|
||||
m_tile_bank = 0;
|
||||
}
|
||||
|
||||
void mole_state::mole(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M6502(config, m_maincpu, 4000000); // ???
|
||||
M6502(config, m_maincpu, 2000000); // ???
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &mole_state::mole_map);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(mole_state::irq0_line_assert));
|
||||
|
||||
@ -382,4 +374,4 @@ ROM_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
GAME( 1982, mole, 0, mole, mole, mole_state, empty_init, ROT0, "Yachiyo Electronics, Ltd.", "Mole Attack", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, mole, 0, mole, mole, mole_state, empty_init, ROT0, "Yachiyo Electronics", "Mole Attack", MACHINE_SUPPORTS_SAVE )
|
@ -15,14 +15,14 @@
|
||||
TODO:
|
||||
- atamanot: needs a trojan, in order to understand how the protection really works.
|
||||
- colors (missing PROM(s) ?)
|
||||
- samples (at least two of unused ROMs contains samples (unkn. format , ADPCM ?)
|
||||
- samples (at least two of unused ROMs contains samples (unkn. format, ADPCM ?)
|
||||
- dips (one is tested in game (difficulty related?), another 2 are tested at start)
|
||||
|
||||
Unknown reads/writes:
|
||||
- AY i/o ports (writes)
|
||||
- mem $c000, $c001 = protection device ? if tests fails, game crashes (problems with stack - skipped code with "pop af")
|
||||
- i/o port $8 = data read used for $e command arg for one of AY chips (volume? - could be a sample player (based on volume changes?)
|
||||
- i/o port $1a = 1 or 0, rarely accessed, related to crt writes
|
||||
- i/o port $1a = 1 or 0, rarely accessed, related to crt writes
|
||||
|
||||
==================================================================
|
||||
|
||||
@ -580,7 +580,6 @@ void ssingles_state::ssingles(machine_config &config)
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
AY8910(config, "ay1", 1'500'000).add_route(ALL_OUTPUTS, "mono", 0.5); // ? MHz
|
||||
|
||||
AY8910(config, "ay2", 1'500'000).add_route(ALL_OUTPUTS, "mono", 0.5); // ? MHz
|
||||
}
|
||||
|
@ -8,7 +8,6 @@
|
||||
/* */
|
||||
/*******************************************************/
|
||||
|
||||
|
||||
/*
|
||||
********************************************************
|
||||
|
||||
@ -323,9 +322,11 @@ TODO:
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "cpu/i8085/i8085.h"
|
||||
#include "sound/samples.h"
|
||||
#include "sound/sn76477.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -570,7 +571,7 @@ void sstrangr_state::sstrangr(machine_config &config)
|
||||
|
||||
// video hardware
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_size(32*8, 262); // vert size is a guess, taken from mw8080bw
|
||||
screen.set_size(32*8, 262); // vert size is a guess, taken from mw8080bw
|
||||
screen.set_visarea(0*8, 32*8-1, 4*8, 32*8-1);
|
||||
screen.set_refresh_hz(60);
|
||||
screen.set_screen_update(FUNC(sstrangr_state::screen_update_sstrangr));
|
||||
@ -634,7 +635,7 @@ static INPUT_PORTS_START( sstrngr2 )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
|
||||
|
||||
PORT_START("INPUTS")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
|
||||
PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) // This is an edge connector pin for testing ROM/RAM and I/O ports
|
||||
@ -690,5 +691,5 @@ ROM_END
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
GAMEL( 1978, sstrangr, 0, sstrangr, sstrangr, sstrangr_state, empty_init, ROT270, "Yachiyo Electronics, Ltd.", "Space Stranger", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_sstrangr )
|
||||
GAME( 1979, sstrangr2, sstrangr, sstrngr2, sstrngr2, sstrangr_state, empty_init, ROT270, "Yachiyo Electronics, Ltd.", "Space Stranger 2", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAMEL( 1978, sstrangr, 0, sstrangr, sstrangr, sstrangr_state, empty_init, ROT270, "Yachiyo Electric", "Space Stranger", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_sstrangr )
|
||||
GAME( 1979, sstrangr2, sstrangr, sstrngr2, sstrngr2, sstrangr_state, empty_init, ROT270, "Yachiyo Electric", "Space Stranger 2", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
Loading…
Reference in New Issue
Block a user