srcclean in preparation for branching 0.237 release

This commit is contained in:
Vas Crabb 2021-10-24 09:58:53 +11:00
parent 5ab93130eb
commit e778bb9a8c
31 changed files with 513 additions and 512 deletions

File diff suppressed because it is too large Load Diff

View File

@ -18,7 +18,7 @@ license:CC0
</dataarea>
</part>
</software>
<!-- Doesn't boot -->
<software name="crowman" supported="no">
<description>The Curse of Crowley Manor</description>
@ -106,7 +106,7 @@ license:CC0
</software>
<!-- Utilities -->
<!-- TODO: how to actually draw? Missing key? -->
<software name="micropai" supported="no">
<!-- Stylized with double hyphen in the middle on title screen -->

View File

@ -1809,18 +1809,18 @@ tests: $(REGTESTS)
cleansrc:
@echo Cleaning up tabs/spaces/end of lines....
ifeq (posix,$(SHELLTYPE))
$(SILENT) find src \
$(SILENT) find src \( \
-name \*.c -o -name \*.cpp -o \
-name \*.h -o -name \*.hpp -o -name \*.hxx -o \
-name \*.ipp -o \
-name \*.mm -o \
-name \*.lay -o \
-name \*.lst \
-exec ./srcclean {} \; >&2
$(SILENT) find hash -name \*.hsi -o -name \*.xml -exec ./srcclean {} \; >&2
$(SILENT) find bgfx -name \*.json -exec ./srcclean {} \; >&2
$(SILENT) find plugins -name \*.lua -o -name \*.json -exec ./srcclean {} \; >&2
$(SILENT) find scripts -name \*.lua -exec ./srcclean {} \; >&2
\) -exec ./srcclean {} \; >&2
$(SILENT) find hash \( -name \*.hsi -o -name \*.xml \) -exec ./srcclean {} \; >&2
$(SILENT) find bgfx \( -name \*.json \) -exec ./srcclean {} \; >&2
$(SILENT) find plugins \( -name \*.lua -o -name \*.json \) -exec ./srcclean {} \; >&2
$(SILENT) find scripts \( -name \*.lua \) -exec ./srcclean {} \; >&2
else
$(shell for /r src %%i in (*.c, *.cpp, *.h, *.hpp, *.hxx, *.ipp, *.mm, *.lay, *.lst) do srcclean %%i >&2 )
$(shell for /r hash %%i in (*.hsi, *.xml) do srcclean %%i >&2 )

View File

@ -1758,7 +1758,7 @@ void nes_bmc_970630c_device::write_h(offs_t offset, u8 data)
u8 nes_bmc_970630c_device::read_h(offs_t offset)
{
// LOG_MMC(("bmc_970630c read_h, offset: %04x\n", offset));
// LOG_MMC(("bmc_970630c read_h, offset: %04x\n", offset));
if (m_latch)
return 0; // TODO: menu supposedly varies by solder pad value returned here, but it doesn't seem to work...

View File

@ -556,7 +556,7 @@ void nes_sachen_3014_device::write_h(offs_t offset, u8 data)
u8 nes_sachen_3014_device::read_h(offs_t offset)
{
// LOG_MMC(("Sachen 3014 read_h, offset: %04x\n", offset));
// LOG_MMC(("Sachen 3014 read_h, offset: %04x\n", offset));
u8 temp = hi_access_rom(offset);
if ((offset & 0x7000) == 0x6000)

View File

@ -399,7 +399,7 @@ void nes_cityfight_device::write_h(offs_t offset, u8 data)
u8 nes_shuiguan_device::read_m(offs_t offset)
{
// LOG_MMC(("shuiguan read_m, offset: %04x\n", offset));
// LOG_MMC(("shuiguan read_m, offset: %04x\n", offset));
return m_prg[(m_reg * 0x2000 + offset) & (m_prg_size - 1)];
}

View File

@ -1,20 +1,20 @@
// license:BSD-3-Clause
// copyright-holders:Devin Acker
/***************************************************************************
Casio GT913
Casio GT913
This chip powers several late-90s/early-2000s Casio keyboards.
It's based on the H8/300 instruction set, but with different encoding
for many opcodes, as well as:
This chip powers several late-90s/early-2000s Casio keyboards.
It's based on the H8/300 instruction set, but with different encoding
for many opcodes, as well as:
- Dedicated bank switching instructions (20-bit external address bus)
- Two timers, three 8-bit ports, two 8-bit ADCs
- Keyboard controller w/ key velocity detection
- MIDI UART
- 24-voice PCM sound (currently not emulated / fully understood)
- Dedicated bank switching instructions (20-bit external address bus)
- Two timers, three 8-bit ports, two 8-bit ADCs
- Keyboard controller w/ key velocity detection
- MIDI UART
- 24-voice PCM sound (currently not emulated / fully understood)
Earlier and later Casio keyboard models contain "uPD912" and "uPD914" chips,
which are presumably similar.
Earlier and later Casio keyboard models contain "uPD912" and "uPD914" chips,
which are presumably similar.
***************************************************************************/
@ -45,7 +45,7 @@ std::unique_ptr<util::disasm_interface> gt913_device::create_disassembler()
void gt913_device::map(address_map &map)
{
// map.unmap_value_high();
// map.unmap_value_high();
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("bank");
@ -80,7 +80,7 @@ void gt913_device::map(address_map &map)
map(0xfff1, 0xfff1).rw(m_port[1], FUNC(h8_port_device::ddr_r), FUNC(h8_port_device::ddr_w));
map(0xfff2, 0xfff2).rw(m_port[0], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
map(0xfff3, 0xfff3).rw(m_port[1], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
// map(0xfff4, 0xfff4).nopw(); probably not port 3 DDR - ctk551 writes 0x00 but uses port 3 for output only
// map(0xfff4, 0xfff4).nopw(); probably not port 3 DDR - ctk551 writes 0x00 but uses port 3 for output only
map(0xfff5, 0xfff5).rw(m_port[2], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
}

View File

@ -38,7 +38,7 @@ protected:
virtual void internal_update(uint64_t current_time) override;
virtual void irq_setup() override;
virtual void execute_set_input(int inputnum, int state) override;
virtual void device_add_mconfig(machine_config &config) override;
void map(address_map &map);
@ -58,12 +58,12 @@ protected:
required_memory_bank m_bank;
uint16_t m_banknum;
required_device<gt913_intc_device> m_intc;
/* sound */
required_device<gt913_sound_hle_device> m_sound;
/* key controller */
required_device<gt913_kbd_hle_device> m_kbd;
@ -72,7 +72,7 @@ protected:
/* serial port */
required_device<h8_sci_device> m_sci;
/* 3x 8-bit I/O ports */
required_device_array<h8_port_device, 3> m_port;
};

View File

@ -25,7 +25,7 @@ std::string tms32082_pp_disassembler::get_reg_name(int reg, bool read)
case 0x07:
case 0x0f:
return util::string_format("0"); // a7 and a15 read as zero
return util::string_format("0"); // a7 and a15 read as zero
case 0x06:
case 0x0e:
@ -136,16 +136,16 @@ std::string tms32082_pp_disassembler::make_mem_transfer(int mode, int dst, int a
switch (le)
{
case 0: // store
case 0: // store
transfer_text = util::string_format("&%s*(%s) = %s", TRANSFER_SIZE[size], make_ea(mode, a, scale, size, imm, x), get_reg_name(dst, true));
break;
case 1: // address unit arithmetic
case 1: // address unit arithmetic
transfer_text = util::string_format("%s = %s", get_reg_name(dst, false), make_ea(mode, a, scale, size, imm, x));
break;
case 2: // zero-extended load
case 2: // zero-extended load
transfer_text = util::string_format("%s = &%s*(%s)", get_reg_name(dst, false), TRANSFER_SIZE[size], make_ea(mode, a, scale, size, imm, x));
break;
case 3: // sign-extended load
case 3: // sign-extended load
transfer_text = util::string_format("%s = &s%s*(%s)", get_reg_name(dst, false), TRANSFER_SIZE[size], make_ea(mode, a, scale, size, imm, x));
break;
}
@ -218,13 +218,13 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
int gbits = (op >> 15) & 3;
if (lbits == 0 && gbits == 0)
{
{
switch ((op >> 13) & 3)
{
case 0:
{
// 7. Conditional DU||Conditional Move
int cond = (op >> 32) & 0xf;
int cond = (op >> 32) & 0xf;
int ncvz = (op >> 25) & 0xf;
m_alu_condition = make_condition(cond, ncvz);
@ -258,7 +258,7 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
int dst = ((op >> 3) & 7) | (m_dstbank << 3);
int src = ((op >> 10) & 7) | (4 << 3);
int cond = (op >> 32) & 0xf;
int cond = (op >> 32) & 0xf;
int ncvz = (op >> 25) & 0xf;
bool r = (op & (1 << 29)) ? true : false;
@ -275,14 +275,14 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
case 3:
{
// 10. Conditional Non-D Data Unit
// no transfer, only modifies ALU operation
m_src1bank = (op >> 6) & 0xf;
m_dstbank = (op >> 18) & 0xf;
int cond = (op >> 32) & 0xf;
// bool c = (op & (1 << 31)) ? true : false;
// bool r = (op & (1 << 30)) ? true : false;
// bool c = (op & (1 << 31)) ? true : false;
// bool r = (op & (1 << 30)) ? true : false;
int ncvz = (op >> 25) & 0xf;
m_alu_condition = make_condition(cond, ncvz);
@ -292,20 +292,20 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
}
else if (lbits == 0 && gbits != 0)
{
{
if (op & 0x4)
{
// 9. Conditional DU||Conditional Global
int global_im = (op >> 22) & 7;
int global_x = ((op >> 22) & 7) | 8; // global x-registers: x8-x10
int global_x = ((op >> 22) & 7) | 8; // global x-registers: x8-x10
int bank = (op >> 18) & 7;
int global_le = ((op >> 9) & 1) | ((op >> 16) & 2);
int gmode = (op >> 13) & 0xf;
int reg = (op >> 10) & 7;
int global_size = (op >> 7) & 3;
bool global_s = (op & (1 << 6)) ? true : false;
int global_a = ((op >> 3) & 7) | 8; // global a-registers: a8-a12
int cond = (op >> 32) & 0xf;
int global_a = ((op >> 3) & 7) | 8; // global a-registers: a8-a12
int cond = (op >> 32) & 0xf;
int ncvz = (op >> 25) & 0xf;
m_alu_condition = make_condition(cond, ncvz);
@ -319,17 +319,17 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
}
else
{
// 5. Global(Long Offset)
// 5. Global(Long Offset)
int bank = (op >> 18) & 0xf;
int global_le = ((op >> 9) & 1) | ((op >> 16) & 2);
int gmode = (op >> 13) & 0xf;
int reg = (op >> 10) & 7;
int global_size = (op >> 7) & 3;
bool global_s = (op & (1 << 6)) ? true : false;
int global_a = ((op >> 3) & 7) | 8; // global a-registers: a8-a12
int global_a = ((op >> 3) & 7) | 8; // global a-registers: a8-a12
int offset = (op >> 22) & 0x7fff;
int x = (offset & 7) | 8; // global x-registers: x8-x10
int x = (offset & 7) | 8; // global x-registers: x8-x10
// s-bit is MSB for immediate value when transfer size is 8 bits
if (global_size == 0)
@ -346,7 +346,7 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
{
// 2. Move||Local
int lmode = (op >> 35) & 0xf;
int d = ((op >> 32) & 7) | (0x4 << 3); // d-registers are in bank 4
int d = ((op >> 32) & 7) | (0x4 << 3); // d-registers are in bank 4
int local_le = ((op >> 31) & 1) | ((op >> 16) & 2);
int local_size = (op >> 29) & 3;
bool local_s = (op & (1 << 28)) ? true : false;
@ -381,7 +381,7 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
{
// 6. Non-D DU||Local
int lmode = (op >> 35) & 0xf;
int d = ((op >> 32) & 7) | (0x4 << 3); // d-registers are in bank 4
int d = ((op >> 32) & 7) | (0x4 << 3); // d-registers are in bank 4
int le = ((op >> 31) & 1) | ((op >> 16) & 2);
int size = (op >> 29) & 3;
bool s = (op & (1 << 28)) ? true : false;
@ -425,20 +425,20 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
// (gbits != 0 && lbits != 0)
// 1. Double Parallel
int lmode = (op >> 35) & 0xf;
int d = ((op >> 32) & 7) | (0x4 << 3); // d-registers are in bank 4
int d = ((op >> 32) & 7) | (0x4 << 3); // d-registers are in bank 4
int local_le = ((op >> 31) & 1) | ((op >> 20) & 2);
int local_size = (op >> 29) & 3;
bool local_s = (op & (1 << 28)) ? true : false;
int local_a = (op >> 25) & 7;
int global_im = (op >> 22) & 7;
int global_x = ((op >> 22) & 7) | 8; // global x-registers: x8-x10
int global_im = (op >> 22) & 7;
int global_x = ((op >> 22) & 7) | 8; // global x-registers: x8-x10
int bank = (op >> 18) & 7;
int global_le = ((op >> 9) & 1) | ((op >> 16) & 2);
int global_le = ((op >> 9) & 1) | ((op >> 16) & 2);
int gmode = (op >> 13) & 0xf;
int reg = (op >> 10) & 7;
int reg = (op >> 10) & 7;
int global_size = (op >> 7) & 3;
bool global_s = (op & (1 << 6)) ? true : false;
int global_a = ((op >> 3) & 7) | 8; // global a-registers: a8-a12
int global_a = ((op >> 3) & 7) | 8; // global a-registers: a8-a12
int local_im = op & 7;
int local_x = op & 7;
@ -462,12 +462,12 @@ std::string tms32082_pp_disassembler::format_alu_op(int aluop, int a, const std:
switch (modifier)
{
case 0: break; // normal operation
case 1: break; // cin (TODO)
case 4: a_text = util::string_format("0"); break; // A port = 0
case 5: a_text = util::string_format("0"); break; // A port = 0, cin (TODO)
case 6: a_text = util::string_format("0"); break; // A port = 0 and %! if maskgen instruction. lmbc if not maskgen instruction. (TODO)
case 7: a_text = util::string_format("0"); break; // A port = 0, %!, and cin if maskgen instruction. rmbc if not maskgen instruction. (TODO)
case 0: break; // normal operation
case 1: break; // cin (TODO)
case 4: a_text = util::string_format("0"); break; // A port = 0
case 5: a_text = util::string_format("0"); break; // A port = 0, cin (TODO)
case 6: a_text = util::string_format("0"); break; // A port = 0 and %! if maskgen instruction. lmbc if not maskgen instruction. (TODO)
case 7: a_text = util::string_format("0"); break; // A port = 0, %!, and cin if maskgen instruction. rmbc if not maskgen instruction. (TODO)
}
int bits = (aluop & 1) | ((aluop >> 1) & 2) | ((aluop >> 2) & 4) | ((aluop >> 3) & 8);
@ -535,14 +535,14 @@ std::string tms32082_pp_disassembler::format_alu_op(int aluop, int a, const std:
case 0x44: // ~A & B & C | ~A & B & ~C = ~A & B
return util::string_format("%s = ~%s & %s", dst_text, a_text, b_text);
case 0x22: // A & ~B & ~C | A & ~B & C = A & ~B
case 0x22: // A & ~B & ~C | A & ~B & C = A & ~B
return util::string_format("%s = %s & ~%s", dst_text, a_text, b_text);
case 0xaf: // A & B & C | A & ~B & C | A & B & ~C |
case 0xaf: // A & B & C | A & ~B & C | A & B & ~C |
// ~A & B & ~C | A & ~B & ~C | ~A & ~B & ~C = A | ~C
return util::string_format("%s = %s | ~%s", dst_text, a_text, c_text);
case 0xfa: // A & B & C | ~A & B & C | A & ~B & C |
case 0xfa: // A & B & C | ~A & B & C | A & ~B & C |
// ~A & ~B & C | A & B & ~C | A & ~B & ~C = A | C
return util::string_format("%s = %s | %s", dst_text, a_text, c_text);
@ -646,7 +646,7 @@ offs_t tms32082_pp_disassembler::disassemble(std::ostream &stream, offs_t pc, co
if ((op & 0xfaa8100000000000U) == 0x8800000000000000U)
{
int operation = (op >> 39) & 0x1f;
parallel_transfer(op);
switch (operation)
@ -669,7 +669,7 @@ offs_t tms32082_pp_disassembler::disassemble(std::ostream &stream, offs_t pc, co
case 0:
case 1: // Base set ALU (5-bit immediate)
{
parallel_transfer(op);
parallel_transfer(op);
int dst = (op >> 48) & 7;
int src1 = (op >> 45) & 7;
@ -728,7 +728,7 @@ offs_t tms32082_pp_disassembler::disassemble(std::ostream &stream, offs_t pc, co
break;
}
m_alu_operation = format_alu_op(aluop, a, dst_text, a_text, b_text, c_text);
m_alu_operation = format_alu_op(aluop, a, dst_text, a_text, b_text, c_text);
break;
}
@ -793,7 +793,7 @@ offs_t tms32082_pp_disassembler::disassemble(std::ostream &stream, offs_t pc, co
break;
}
m_alu_operation = format_alu_op(aluop, a, dst_text, a_text, b_text, c_text);
m_alu_operation = format_alu_op(aluop, a, dst_text, a_text, b_text, c_text);
break;
}
@ -890,7 +890,7 @@ offs_t tms32082_pp_disassembler::disassemble(std::ostream &stream, offs_t pc, co
{
stream << " || ";
}
}
}
if (m_parallel_transfer.length() > 0)
{
stream << m_parallel_condition;

View File

@ -1,11 +1,11 @@
// license:BSD-3-Clause
// copyright-holders:Devin Acker
/***************************************************************************
Casio GT913 I/O (HLE)
Casio GT913 I/O (HLE)
TODO:
- timer behavior is unverified (see comment in timer_control_w and timer_adjust)
- various other unemulated registers
TODO:
- timer behavior is unverified (see comment in timer_control_w and timer_adjust)
- various other unemulated registers
***************************************************************************/

View File

@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders: Devin Acker
/***************************************************************************
Casio GT913 I/O (HLE)
Casio GT913 I/O (HLE)
***************************************************************************/
#ifndef MAME_MACHINE_GT913_IO_H

View File

@ -1,17 +1,17 @@
// license:BSD-3-Clause
// copyright-holders:Devin Acker
/***************************************************************************
Casio GT913 keyboard controller (HLE)
Casio GT913 keyboard controller (HLE)
This is the keyboard controller portion of the GT913.
The actual keyboard keys (as opposed to console buttons) have two
contacts per key, which allows the controller to detect the velocity
of the keypress. The detected velocity is read as a 7-bit value
from the data port, along with the actual key scan code.
This is the keyboard controller portion of the GT913.
The actual keyboard keys (as opposed to console buttons) have two
contacts per key, which allows the controller to detect the velocity
of the keypress. The detected velocity is read as a 7-bit value
from the data port, along with the actual key scan code.
Right now, velocity is just simulated using an (optional) analog
control. The keyboard FIFO size is also basically a guess based on
the CTK-551's 16-key polyphony.
Right now, velocity is just simulated using an (optional) analog
control. The keyboard FIFO size is also basically a guess based on
the CTK-551's 16-key polyphony.
***************************************************************************/
@ -37,7 +37,7 @@ gt913_kbd_hle_device::gt913_kbd_hle_device(const machine_config &mconfig, const
void gt913_kbd_hle_device::device_start()
{
m_intc = siblingdevice<h8_intc_device>(m_intc_tag);
save_item(NAME(m_status));
save_item(NAME(m_fifo));
save_item(NAME(m_fifo_read));

View File

@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders: Devin Acker
/***************************************************************************
Casio GT913 keyboard controller (HLE)
Casio GT913 keyboard controller (HLE)
***************************************************************************/
#ifndef MAME_MACHINE_GT913_KBD_H

View File

@ -1,20 +1,20 @@
// license:BSD-3-Clause
// copyright-holders:Devin Acker
/***************************************************************************
Casio GT913 sound (HLE)
Casio GT913 sound (HLE)
This is the sound portion of the GT913.
Up to 24 voices can be mixed into a 16-bit stereo serial bitstream,
which is then input to either a serial DAC or a HG51B-based DSP,
depending on the model of keyboard.
This is the sound portion of the GT913.
Up to 24 voices can be mixed into a 16-bit stereo serial bitstream,
which is then input to either a serial DAC or a HG51B-based DSP,
depending on the model of keyboard.
Currently, the actual sample format in ROM is unknown.
The serial output is twos-complement 16-bit PCM, but the data in ROM
doesn't seem to be - reading it as such produces sounds that are
somewhat recognizable, but highly distorted.
Currently, the actual sample format in ROM is unknown.
The serial output is twos-complement 16-bit PCM, but the data in ROM
doesn't seem to be - reading it as such produces sounds that are
somewhat recognizable, but highly distorted.
For now, all known (and unknown) register writes are just logged
without generating any sound.
For now, all known (and unknown) register writes are just logged
without generating any sound.
***************************************************************************/

View File

@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders: Devin Acker
/***************************************************************************
Casio GT913 sound (HLE)
Casio GT913 sound (HLE)
***************************************************************************/
#ifndef MAME_AUDIO_GT913_H
@ -30,7 +30,7 @@ protected:
// device_t overrides
virtual void device_start() override;
virtual void device_reset() override;
private:
uint8_t m_gain;
uint16_t m_data[3];

View File

@ -903,7 +903,7 @@ uint8_t mos6526_device::read(offs_t offset)
data = (m_ir1 << 7) | m_icr;
// Do not reset irqs unless one is effectively issued.
// cfr. amigaocs_flop.xml barb2paln4 that polls for Timer B status
// cfr. amigaocs_flop.xml barb2paln4 that polls for Timer B status
// until it expires at PC=7821c and other places.
if (machine().side_effects_disabled() || !m_icr)
return data;

View File

@ -4,8 +4,8 @@
Seta custom ST-0016 chip
sound emulation by R. Belmont, Tomasz Slanina, and David Haywood
TODO:
- Verify keyon/off flag behavior
TODO:
- Verify keyon/off flag behavior
************************************/
#include "emu.h"
@ -238,12 +238,12 @@ void st0016_device::voice_t::reg_w(offs_t offset, u8 data, int voice)
/*
LOG("Key on V%02d: st %06x-%06x lp %06x-%06x frq %x flg %x\n", voice,
m_start,
m_end,
m_lpstart,
m_lpend,
m_freq,
m_regs[0x16]);
m_start,
m_end,
m_lpstart,
m_lpend,
m_freq,
m_regs[0x16]);
*/
}
}

View File

@ -1072,7 +1072,7 @@ int debugger_commands::mini_printf(char *buffer, const char *format, int params,
/*-------------------------------------------------
execute_index_command - helper for commands
that take multiple indices as arguments
that take multiple indices as arguments
-------------------------------------------------*/
template <typename T>

View File

@ -152,7 +152,7 @@ private:
std::string m_publisher;
std::list<software_info_item> m_info; // Here we store info like developer, serial #, etc. which belong to the software entry as a whole
software_info_item::set m_shared_features; // Here we store info like TV standard compatibility, or add-on requirements, etc. which get inherited
// by each part of this software entry (after loading these are stored in partdata->features)
// by each part of this software entry (after loading these are stored in partdata->features)
std::list<software_part> m_partdata;
};

View File

@ -69,8 +69,8 @@ public:
bool done() const { return m_done; }
private:
const std::function<bool(const char *shortname, bool &done)> & m_callback;
bool m_done;
const std::function<bool(const char *shortname, bool &done)> & m_callback;
bool m_done;
};
@ -91,9 +91,9 @@ public:
bool done() const { return m_done || m_devfilter.done(); }
private:
driver_enumerator & m_drivlist;
device_filter & m_devfilter;
bool m_done;
driver_enumerator & m_drivlist;
device_filter & m_devfilter;
bool m_done;
};
@ -592,8 +592,8 @@ std::string normalize_string(const char *string)
//-------------------------------------------------
// device_filter::filter - apply the filter, if
// present
// device_filter::filter - apply the filter, if
// present
//-------------------------------------------------
bool device_filter::filter(const char *shortname)
@ -604,7 +604,7 @@ bool device_filter::filter(const char *shortname)
//-------------------------------------------------
// filtered_driver_enumerator::next - take a number
// of game_drivers, while applying filters
// of game_drivers, while applying filters
//-------------------------------------------------
std::vector<std::reference_wrapper<const game_driver>> filtered_driver_enumerator::next(int count)

View File

@ -7,12 +7,12 @@
Amiga 500 + Sony laserdisc player LDP-1450
(LDP-3300P for Zorton Brothers, LDP-1500 for Marbella Vice)
TODO:
- Implement LD comms (thru Amiga SERDAT / SERDATR ports);
- Why it enables FDC DMA like at all?
Is the board really capable of reading floppies for some reason?
- Picmatic games may really belong to a different driver,
just sharing the Amiga base state;
TODO:
- Implement LD comms (thru Amiga SERDAT / SERDATR ports);
- Why it enables FDC DMA like at all?
Is the board really capable of reading floppies for some reason?
- Picmatic games may really belong to a different driver,
just sharing the Amiga base state;
Games Supported:

View File

@ -1104,9 +1104,9 @@ ROM_START( cosmica23 ) // Main: 7910-AII, sub: 7910-BII, no sound sub PCB
ROM_END
/* This set appears to be an intermediate version between the 'II' (cosmica) version and the early cosmica1 version; It still has the (C) 1979 titlescreen
(which was removed on the II version since it may have came out in 1980?), and on all tms2708 eproms on a special rom daughterboard called "7910-V3";
(which was removed on the II version since it may have came out in 1980?), and on all tms2708 eproms on a special rom daughterboard called "7910-V3";
one possible reason is that 2708 eproms became cheaper than tms2516s for a time, so production was switched to them for a while between the early and II versions? */
ROM_START( cosmica2a )
ROM_START( cosmica2a )
/* ROMs a-1 and b-2 match ii-1 from cosmica
ROMs c-3 and d-4 are unique
ROMs e-5 and f-6 match ii-3 from cosmica

View File

@ -1,47 +1,47 @@
// license:BSD-3-Clause
// copyright-holders:Devin Acker
/*
Casio CTK-551 keyboard (and related models)
Casio CTK-551 keyboard (and related models)
Casio released several keyboard models with the same main board.
As usual, some of them were also rebranded by Radio Shack.
Casio released several keyboard models with the same main board.
As usual, some of them were also rebranded by Radio Shack.
- CTK-531, CTK-533
Basic 61-key model
- CTK-541, Optimus MD-1150
Adds velocity-sensitive keys
- CTK-551, CTK-558, Radio Shack MD-1160
Adds pitch wheel and different selection of demo songs
- CTK-531, CTK-533
Basic 61-key model
- CTK-541, Optimus MD-1150
Adds velocity-sensitive keys
- CTK-551, CTK-558, Radio Shack MD-1160
Adds pitch wheel and different selection of demo songs
Main board (JCM456-MA1M):
Main board (JCM456-MA1M):
LSI1: CPU (Casio GT913F)
Custom chip based on H8/300 instruction set, built in peripheral controllers & sound generator
LSI1: CPU (Casio GT913F)
Custom chip based on H8/300 instruction set, built in peripheral controllers & sound generator
LSI2: 8Mbit ROM (OKI MSM538002E)
LSI2: 8Mbit ROM (OKI MSM538002E)
LSI3: LCD controller (HD44780 compatible)
May be either a Samsung KS0066U-10B or Epson SED1278F2A.
LSI3: LCD controller (HD44780 compatible)
May be either a Samsung KS0066U-10B or Epson SED1278F2A.
IC1: stereo DAC (NEC uPD6379GR)
IC1: stereo DAC (NEC uPD6379GR)
CTK-541 service manual with schematics, pinouts, etc.:
https://revenant1.net/ctk541.pdf
CTK-541 service manual with schematics, pinouts, etc.:
https://revenant1.net/ctk541.pdf
To access the test mode (not mentioned in the service manual):
Hold the "Start/Stop" and keypad 0 buttons together when turning on the keyboard.
Afterwards, press one of these buttons:
- Tone: LCD test (press repeatedly)
- Keypad 0: switch test (press all front panel buttons in a specific order, generally left to right)
- Keypad 1 or Rhythm: pedal and key test
- Keypad 2: ROM test
- Keypad 4/5/6: sound volume test
- Keypad 7/8: stereo test
- Keypad 9: MIDI loopback test
- Keypad + or Song Bank: power source test
- Keypad -: pitch wheel test
- FFWD: exit test mode
- Stop: power off
To access the test mode (not mentioned in the service manual):
Hold the "Start/Stop" and keypad 0 buttons together when turning on the keyboard.
Afterwards, press one of these buttons:
- Tone: LCD test (press repeatedly)
- Keypad 0: switch test (press all front panel buttons in a specific order, generally left to right)
- Keypad 1 or Rhythm: pedal and key test
- Keypad 2: ROM test
- Keypad 4/5/6: sound volume test
- Keypad 7/8: stereo test
- Keypad 9: MIDI loopback test
- Keypad + or Song Bank: power source test
- Keypad -: pitch wheel test
- FFWD: exit test mode
- Stop: power off
*/
@ -267,7 +267,7 @@ INPUT_PORTS_START(ctk551)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Song Bank")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Tone")
PORT_START("maincpu:kbd:KO9")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 5") PORT_CODE(KEYCODE_5_PAD)

View File

@ -63,38 +63,38 @@
ROM [0xc0050000] 0x10000 floats copied to [0x40180000]
ROM [0xff800000 - 0xff80171f] sound data headers, 32 bytes each
Word 0: sound data pointer (offset from 0xff800000)
Word 1: uncompressed length?
Word 2: ?
Word 3: same as word 1?
Word 4: ?
Word 5: ?
Word 6: ?
Word 7: 0
ROM [0xff800000 - 0xff80171f] sound data headers, 32 bytes each
Word 0: sound data pointer (offset from 0xff800000)
Word 1: uncompressed length?
Word 2: ?
Word 3: same as word 1?
Word 4: ?
Word 5: ?
Word 6: ?
Word 7: 0
ROM [0xff801720 -> ] compressed audio data
ROM [0xff801720 -> ] compressed audio data
[0x0000100c] bitmask of active sound channels (max 16 channels?)
[0x00001018 -> ] sound channel data, 64 bytes each
+0x00: sound data pointer in ROM
+0x04: 0
+0x08: uncompressed length
+0x0c: uncompressed length
+0x10: 0?
+0x14: 0 - sample rate?
+0x18: 0?
+0x1c: sample rate? (halfword)
+0x1e: ?? (halfword)
+0x20: ?
+0x24: ?
+0x28: ?
+0x2c: ?
+0x30: ?
+0x34: ?
+0x36: ? (halfword)
+0x38: ?
+0x3c: ?
[0x0000100c] bitmask of active sound channels (max 16 channels?)
[0x00001018 -> ] sound channel data, 64 bytes each
+0x00: sound data pointer in ROM
+0x04: 0
+0x08: uncompressed length
+0x0c: uncompressed length
+0x10: 0?
+0x14: 0 - sample rate?
+0x18: 0?
+0x1c: sample rate? (halfword)
+0x1e: ?? (halfword)
+0x20: ?
+0x24: ?
+0x28: ?
+0x2c: ?
+0x30: ?
+0x34: ?
+0x36: ? (halfword)
+0x38: ?
+0x3c: ?
@ -519,7 +519,7 @@ uint32_t rollext_state::a0000000_r(offs_t offset, uint32_t mem_mask)
}
if (ACCESSING_BITS_8_15)
{
data |= 0x200; // 0 causes inf loop
data |= 0x200; // 0 causes inf loop
data |= m_eeprom_in->read() << 8;
}
if (ACCESSING_BITS_0_7)
@ -686,7 +686,7 @@ static INPUT_PORTS_START(rollext)
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read)
PORT_START("EEPROMOUT")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write)
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write)

View File

@ -264,7 +264,7 @@ void st22xx_bbl338_state::porta_w(u8 data)
void st22xx_bbl338_state::portb_w(u8 data)
{
// logerror("%s: port b write %02x\n", machine().describe_context(), data);
// logerror("%s: port b write %02x\n", machine().describe_context(), data);
m_portb = data;
}

View File

@ -761,9 +761,9 @@ ROM_START(hotwheel)
ROM_LOAD ( "htwhls_5.u5", 0x1000, 0x0400, CRC(e28f3c60) SHA1(eb780be60b41017d105288cef71906d15474b8fa))
ROM_END
// Alternatives for rom3
// ROM_LOAD( "hw04-3-425i.bin", 0x0800, 0x0400, CRC(ef0dcd76) SHA1(2250ecb883534df394466bdae96cef1ab7adf190) )
// ROM_LOAD( "hw04-3-429a.bin", 0x0800, 0x0400, CRC(997daff6) SHA1(c0889f1c48e72cdf4b10548442002b31499d4123) )
// ROM_LOAD( "hw04-3-5245.bin", 0x0800, 0x0400, CRC(2067112a) SHA1(8a6c21c6d0fff97b3577f0334d0f5e45a1f076c8) )
// ROM_LOAD( "hw04-3-425i.bin", 0x0800, 0x0400, CRC(ef0dcd76) SHA1(2250ecb883534df394466bdae96cef1ab7adf190) )
// ROM_LOAD( "hw04-3-429a.bin", 0x0800, 0x0400, CRC(997daff6) SHA1(c0889f1c48e72cdf4b10548442002b31499d4123) )
// ROM_LOAD( "hw04-3-5245.bin", 0x0800, 0x0400, CRC(2067112a) SHA1(8a6c21c6d0fff97b3577f0334d0f5e45a1f076c8) )
/*--------------------------------
// House of Diamonds (07/78)
@ -793,9 +793,9 @@ ROM_START(locomotp)
ROM_LOAD("loc-snd.fil", 0x0000, 0x0800, CRC(51ea9d2a) SHA1(9a68687af2c1cad2a261f61a67a625d906c502e1))
ROM_END
// Alternate dumps (not working)
// ROM_LOAD( "loc-2.fil", 0x1c00, 0x0800, CRC(2ca902ac) SHA1(39d2728194933527f2aa4b2f5c2b2695b31bbedf) )
// ROM_LOAD( "loc-4.fil", 0x0c00, 0x0800, CRC(c370a033) SHA1(e21c008662d7253d0eabf68832f93eb458999748) )
// ROM_LOAD( "loc-5.fil", 0x1000, 0x0800, CRC(ba1f3e71) SHA1(f691a9b50295a1ec60c85c820c90d4af629ebc9c) )
// ROM_LOAD( "loc-2.fil", 0x1c00, 0x0800, CRC(2ca902ac) SHA1(39d2728194933527f2aa4b2f5c2b2695b31bbedf) )
// ROM_LOAD( "loc-4.fil", 0x0c00, 0x0800, CRC(c370a033) SHA1(e21c008662d7253d0eabf68832f93eb458999748) )
// ROM_LOAD( "loc-5.fil", 0x1000, 0x0800, CRC(ba1f3e71) SHA1(f691a9b50295a1ec60c85c820c90d4af629ebc9c) )
/*--------------------------------
/ Shooting the Rapids (04/79)
@ -823,9 +823,9 @@ ROM_START(sshtlzac)
ROM_REGION(0x1000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("spcshtl.snd", 0x0000, 0x0800, CRC(9a61781c) SHA1(0293640653d8cc9532debd31bbb70f025b4e6d03))
// Alternate dumps
// ROM_LOAD( "campioneflash1-2-3.bin", 0x0000, 0x0800, CRC(61894206) SHA1(f78724b416c27c26990ad28c1c4f5376353be55b) )
// ROM_LOAD( "flash17.bin", 0x0000, 0x0800, CRC(5049326d) SHA1(3b2f4ea054962bf4ba41d46663b7d3d9a77590ef) )
// ROM_LOAD( "spaceshuttle3.bin", 0x0800, 0x0400, CRC(c6a95dfc) SHA1(135e65264455da41c35a68378227b1b84517f98c) )
// ROM_LOAD( "campioneflash1-2-3.bin", 0x0000, 0x0800, CRC(61894206) SHA1(f78724b416c27c26990ad28c1c4f5376353be55b) )
// ROM_LOAD( "flash17.bin", 0x0000, 0x0800, CRC(5049326d) SHA1(3b2f4ea054962bf4ba41d46663b7d3d9a77590ef) )
// ROM_LOAD( "spaceshuttle3.bin", 0x0800, 0x0400, CRC(c6a95dfc) SHA1(135e65264455da41c35a68378227b1b84517f98c) )
ROM_END
/*--------------------------------
@ -862,8 +862,8 @@ ROM_START(stargodb) // alternate version of the stargod set, with variable repla
ROM_LOAD ( "stargod.u5", 0x1000, 0x0400, CRC(536484f8) SHA1(7c40bf7e8b5b21cce44d96633581730ea9eeb176))
ROM_END
// Alternate stargod dumps (not working)
// ROM_LOAD( "stargod5.lgc", 0x1000, 0x0400, CRC(03cd4e24) SHA1(b73d383dc71e44277de9116a702b899a54ce32b9) )
// ROM_LOAD( "stargod.snd", 0x7800, 0x0800, CRC(5079e493) SHA1(51d366cdd09ad00b8b016b0ea1c85ac95ef94d71) )
// ROM_LOAD( "stargod5.lgc", 0x1000, 0x0400, CRC(03cd4e24) SHA1(b73d383dc71e44277de9116a702b899a54ce32b9) )
// ROM_LOAD( "stargod.snd", 0x7800, 0x0800, CRC(5079e493) SHA1(51d366cdd09ad00b8b016b0ea1c85ac95ef94d71) )
/*--------------------------------
/ Winter Sports (01/78)

View File

@ -189,8 +189,8 @@ private:
void rmni_sound_reset();
void mouse_js_reset();
void check_scsi_irq();
void set_scsi_drqlat(bool clock, bool clear);
void set_scsi_drqlat(bool clock, bool clear);
int m_scsi_iena;
int m_scsi_msg;
int m_scsi_bsy;
@ -224,8 +224,8 @@ private:
/* Mouse/Joystick */
struct
{
int8_t m_mouse_x;
int8_t m_mouse_y;
int8_t m_mouse_x;
int8_t m_mouse_y;
uint8_t m_mouse_pcx;
uint8_t m_mouse_pcy;

View File

@ -109,16 +109,16 @@ chdman createhd -o ST125N.chd -chs 41921,1,1 -ss 512
#define MOUSE_INT_ENABLE 0x08
#define PC8031_INT_ENABLE 0x10
#define MOUSE_NONE 0x00
#define MOUSE_LEFT 0x01
#define MOUSE_RIGHT 0x02
#define MOUSE_DOWN 0x04
#define MOUSE_UP 0x08
#define MOUSE_LBUTTON 0x10
#define MOUSE_RBUTTON 0x20
#define MOUSE_NONE 0x00
#define MOUSE_LEFT 0x01
#define MOUSE_RIGHT 0x02
#define MOUSE_DOWN 0x04
#define MOUSE_UP 0x08
#define MOUSE_LBUTTON 0x10
#define MOUSE_RBUTTON 0x20
// Frequency in Hz to poll for mouse movement.
#define MOUSE_POLL_FREQUENCY 5000
#define MOUSE_POLL_FREQUENCY 5000
#define MOUSE_INT_ENABLED(state) (((state)->m_iou_reg092 & MOUSE_INT_ENABLE) ? 1 : 0)
@ -1163,14 +1163,14 @@ void rmnimbus_state::hdc_reset()
m_scsi_req = 0;
// Latched req, IC11b
m_scsi_reqlat = 0;
m_scsi_reqlat = 0;
}
/*
The SCSI code outputs a 1 to indicate an active line, even though it is active low
The inputs on the RM schematic are fed through inverters, but because of the above
we don't need to invert them, unless the schematic uses the signal directly
For consistency we will invert msg before latching.
/*
The SCSI code outputs a 1 to indicate an active line, even though it is active low
The inputs on the RM schematic are fed through inverters, but because of the above
we don't need to invert them, unless the schematic uses the signal directly
For consistency we will invert msg before latching.
*/
void rmnimbus_state::check_scsi_irq()
@ -1185,13 +1185,13 @@ WRITE_LINE_MEMBER(rmnimbus_state::write_scsi_iena)
}
// This emulates the 74LS74 latched version of req
void rmnimbus_state::set_scsi_drqlat(bool clock, bool clear)
{
void rmnimbus_state::set_scsi_drqlat(bool clock, bool clear)
{
if (clear)
m_scsi_reqlat = 0;
else if (clock)
m_scsi_reqlat = 1;
if(m_scsi_reqlat)
hdc_drq(true);
else
@ -1202,9 +1202,9 @@ void rmnimbus_state::hdc_post_rw()
{
if(m_scsi_req)
m_scsibus->write_ack(1);
// IC17A, IC17B, latched req cleared by SCSI data read or write, or C/D= command
set_scsi_drqlat(false, true);
set_scsi_drqlat(false, true);
}
void rmnimbus_state::hdc_drq(bool state)
@ -1220,10 +1220,10 @@ WRITE_LINE_MEMBER( rmnimbus_state::write_scsi_bsy )
WRITE_LINE_MEMBER( rmnimbus_state::write_scsi_cd )
{
m_scsi_cd = state;
// IC17A, IC17B, latched req cleared by SCSI data read or write, or C/D= command
set_scsi_drqlat(false, !m_scsi_cd);
check_scsi_irq();
}
@ -1247,16 +1247,16 @@ WRITE_LINE_MEMBER( rmnimbus_state::write_scsi_req )
{
// Detect rising edge on req, IC11b, clock
int rising = ((m_scsi_req == 0) && (state == 1));
// This is the state of the actual line from the SCSI
m_scsi_req = state;
// Latched req, is forced low by C/D being set to command
set_scsi_drqlat(rising, m_scsi_cd);
if (!m_scsi_reqlat)
m_scsibus->write_ack(0);
check_scsi_irq();
}
@ -1551,41 +1551,41 @@ void rmnimbus_state::mouse_js_reset()
void rmnimbus_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
int mouse_x = 0; // Current mouse X and Y
int mouse_y = 0;
int xdiff = 0; // Difference from previous X and Y
int ydiff = 0;
uint8_t intstate_x; // Used to calculate if we should trigger interrupt
uint8_t intstate_y;
int xint; // X and Y interrupts to trigger
int mouse_x = 0; // Current mouse X and Y
int mouse_y = 0;
int xdiff = 0; // Difference from previous X and Y
int ydiff = 0;
uint8_t intstate_x; // Used to calculate if we should trigger interrupt
uint8_t intstate_y;
int xint; // X and Y interrupts to trigger
int yint;
uint8_t mxa; // Values of quadrature encoders for X and Y
uint8_t mxa; // Values of quadrature encoders for X and Y
uint8_t mxb;
uint8_t mya;
uint8_t myb;
// Read mouse buttons
m_nimbus_mouse.m_reg0a4 = m_io_mouse_button->read();
// Read mose positions and calculate difference from previous value
mouse_x = m_io_mousex->read();
mouse_y = m_io_mousey->read();
xdiff = m_nimbus_mouse.m_mouse_x - mouse_x;
ydiff = m_nimbus_mouse.m_mouse_y - mouse_y;
// check and compensate for wrap.....
if (xdiff > 0x80)
if (xdiff > 0x80)
xdiff -= 0x100;
else if (xdiff < -0x80)
xdiff += 0x100;
if (ydiff > 0x80)
if (ydiff > 0x80)
ydiff -= 0x100;
else if (ydiff < -0x80)
ydiff += 0x100;
ydiff += 0x100;
// convert movement into emulated movement of quadrature encoder in mouse.
if (xdiff < 0)
@ -1597,7 +1597,7 @@ void rmnimbus_state::device_timer(emu_timer &timer, device_timer_id id, int para
m_nimbus_mouse.m_mouse_pcy++;
else if (ydiff > 0)
m_nimbus_mouse.m_mouse_pcy--;
// Compensate for quadrature wrap.
m_nimbus_mouse.m_mouse_pcx &= 0x03;
m_nimbus_mouse.m_mouse_pcy &= 0x03;

View File

@ -497,8 +497,8 @@ void st0016_cpu_device::draw_sprites(bitmap_ind16 &bitmap, const rectangle &clip
/*
if (plx | ply) //parent
{
lx = plx;
ly = ply;
lx = plx;
ly = ply;
}
*/

View File

@ -22,10 +22,10 @@
operation by disassembling the Nimbus bios and by writing experemental
code on the real machine.
2021-09-29, P.Harvey-Smith.
I now have access to the service manual for the Nimbus, this documents to facilities provided
by the video chip, which will hopefully allow a much more accurate implementation.
2021-09-29, P.Harvey-Smith.
I now have access to the service manual for the Nimbus, this documents to facilities provided
by the video chip, which will hopefully allow a much more accurate implementation.
*/
#include "emu.h"
@ -36,92 +36,92 @@
#include <functional>
/*
Acording to the service manual the Nimbus should be capable of the following modes :
320 x 200 4bpp
640 x 200 2bpp
400 x 200 4bpp
800 x 200 2bpp
320 x 250 4bpp
640 x 250 2bpp
400 x 250 4bpp
800 x 250 2bpp
*/
/*
Acording to the service manual the Nimbus should be capable of the following modes :
320 x 200 4bpp
640 x 200 2bpp
400 x 200 4bpp
800 x 200 2bpp
320 x 250 4bpp
640 x 250 2bpp
400 x 250 4bpp
800 x 250 2bpp
*/
/*
From the service manual the registers are defined as follows :
/*
From the service manual the registers are defined as follows :
Ports 0x00-0x1E are the registers used to update the display RAM thus :
Addr m_x m_y Update memory on write?
0x00 nop nop no
0x02 load nop no
0x04 nop inc no
0x06 load inc no
0x08 nop nop no
0x0A inc nop no
0x0C nop load no
0x0E inc load no
0x10 nop nop yes
0x12 load nop yes
0x14 nop inc yes
0x16 load inc yes
0x18 nop nop yes
0x1A inc nop yes
0x1C nop load yes
0x1E inc load yes
Addr m_x m_y Update memory on write?
0x00 nop nop no
0x02 load nop no
0x04 nop inc no
0x06 load inc no
0x08 nop nop no
0x0A inc nop no
0x0C nop load no
0x0E inc load no
0x10 nop nop yes
0x12 load nop yes
0x14 nop inc yes
0x16 load inc yes
0x18 nop nop yes
0x1A inc nop yes
0x1C nop load yes
0x1E inc load yes
0x20 scroll port, contains 8 bit scroll address
0x20 scroll port, contains 8 bit scroll address
0x22 Update mode control port (up_mode), controls how data is written to display ram.
see UPMODE_ constants below
0x24h Intensity port, provides current logical intensities for update operations
bits 0..3 Foreground
bits 4..7 Background
0x26 Display mode (m_mode) current display mode and border colour.
see MODE_ constants below
0x22 Update mode control port (up_mode), controls how data is written to display ram.
see UPMODE_ constants below
0x24h Intensity port, provides current logical intensities for update operations
bits 0..3 Foreground
bits 4..7 Background
0x26 Display mode (m_mode) current display mode and border colour.
see MODE_ constants below
For READ.
Ports 0x28, 0x2A, 0x2C and 0x2E have different read and write functions :
0x28 Timing / status, all bits active high
bit 0 line blank
bit 1 line display
bit 2 frame blank
bit 3 frame display
0x2A X address status, returns current value of X counter (m_x)
0x28 Timing / status, all bits active high
bit 0 line blank
bit 1 line display
bit 2 frame blank
bit 3 frame display
0x2C Y address status, returns current value of Y counter (m_y)
0x2A X address status, returns current value of X counter (m_x)
0x2C Y address status, returns current value of Y counter (m_y)
For Write
0x28, 0x2A, 0x2C, 0x2E Colour look up table :
Logic colour
Port Bits Low res High Res
0x28 0..3 0 0
0x28 4..7 1 0
0x28 8..11 2 0
0x28 12..15 3 0
Logic colour
Port Bits Low res High Res
0x28 0..3 0 0
0x28 4..7 1 0
0x28 8..11 2 0
0x28 12..15 3 0
0x2A 0..3 3 1
0x2A 4..7 5 1
0x2A 8..11 6 1
0x2A 12..15 7 1
0x2A 0..3 3 1
0x2A 4..7 5 1
0x2A 8..11 6 1
0x2A 12..15 7 1
0x2C 0..3 8 2
0x2C 4..7 9 2
0x2C 8..11 10 2
0x2C 12..15 11 2
0x2C 0..3 8 2
0x2C 4..7 9 2
0x2C 8..11 10 2
0x2C 12..15 11 2
0x2E 0..3 12 3
0x2E 4..7 13 3
0x2E 8..11 14 3
0x2E 12..15 15 3
0x2E 0..3 12 3
0x2E 4..7 13 3
0x2E 8..11 14 3
0x2E 12..15 15 3
*/
@ -129,47 +129,47 @@ Port Bits Low res High Res
// In following definitions ports are the WORD offset, the RM manual
// lists them by the byte offset so they are 2* the value
#define P_SCROLL 0x10
#define P_UPDATE_MODE 0x11
#define P_INTENSITY 0x12
#define P_MODE 0x13
#define P_STATUS 0x14
#define P_X_COUNT 0x15
#define P_Y_COUNT 0x16
#define P_SCROLL 0x10
#define P_UPDATE_MODE 0x11
#define P_INTENSITY 0x12
#define P_MODE 0x13
#define P_STATUS 0x14
#define P_X_COUNT 0x15
#define P_Y_COUNT 0x16
#define P_COLOUR03 0x14
#define P_COLOUR47 0x15
#define P_COLOUR8B 0x16
#define P_COLOURCF 0x17
#define P_COLOUR03 0x14
#define P_COLOUR47 0x15
#define P_COLOUR8B 0x16
#define P_COLOURCF 0x17
// From the service manual, Reg022 update mode constants :
// The first 8 are NON XOR writes
#define UPMODE_40_TEXT 0x00 // 40 character text
#define UPMODE_80_TEXT 0x01 // 80 character text
#define UPMODE_LO_PIXEL 0x02 // Low res pixel
#define UPMODE_HI_PIXEL 0x03 // Hi res pixel
#define UPMODE_ANIMATION 0x04 // Animation (mask + data)
#define UPMODE_SCROLL 0x05 // Scroll mode
#define UPMODE_DIRECT 0x06 // Direct write to video ram
#define UPMODE_ILLEGAL7 0x07
#define UPMODE_40_TEXT 0x00 // 40 character text
#define UPMODE_80_TEXT 0x01 // 80 character text
#define UPMODE_LO_PIXEL 0x02 // Low res pixel
#define UPMODE_HI_PIXEL 0x03 // Hi res pixel
#define UPMODE_ANIMATION 0x04 // Animation (mask + data)
#define UPMODE_SCROLL 0x05 // Scroll mode
#define UPMODE_DIRECT 0x06 // Direct write to video ram
#define UPMODE_ILLEGAL7 0x07
// The second 8 are XOR writes
#define UPMODE_40_TEXT_X 0x08
#define UPMODE_80_TEXT_X 0x09
#define UPMODE_LO_PIXEL_X 0x0A
#define UPMODE_HI_PIXEL_X 0x0B
#define UPMODE_ANIMATION_X 0x0C
#define UPMODE_SCROLL_X 0x0D
#define UPMODE_DIRECT_X 0x0E
#define UPMODE_ILLEGALF 0x0F
#define UPMODE_40_TEXT_X 0x08
#define UPMODE_80_TEXT_X 0x09
#define UPMODE_LO_PIXEL_X 0x0A
#define UPMODE_HI_PIXEL_X 0x0B
#define UPMODE_ANIMATION_X 0x0C
#define UPMODE_SCROLL_X 0x0D
#define UPMODE_DIRECT_X 0x0E
#define UPMODE_ILLEGALF 0x0F
#define UP_XOR_MASK 0x08
#define UP_XOR_MASK 0x08
// port 026, display mode (m_mode)
#define MODE_BORDER 0x0F // bits 0..3, Border colour number
#define MODE_RESOLUTION 0x10 // bit 4, 0=low res (40 col), high = high res (80 col)
#define MODE_WIDTH 0x20 // bit 5, 0=narrow, 1=wide
#define MODE_HEIGHT 0x40 // bit 6, 0=625 lines, 1=562
#define MODE_BORDER 0x0F // bits 0..3, Border colour number
#define MODE_RESOLUTION 0x10 // bit 4, 0=low res (40 col), high = high res (80 col)
#define MODE_WIDTH 0x20 // bit 5, 0=narrow, 1=wide
#define MODE_HEIGHT 0x40 // bit 6, 0=625 lines, 1=562
#define WIDTH_MASK 0x07
@ -604,7 +604,7 @@ void rmnimbus_state::write_pixel_data(uint16_t x, uint16_t y, uint16_t data)
// Colours are encoded as follows :
// Each nibble contains a colour encoded as igrb
// so we shift through the specified colours and extract the bits, to set the palette.
//
//
void rmnimbus_state::change_palette(uint8_t bank, uint16_t colours)
{
// loop over changing colours

View File

@ -148,8 +148,8 @@
borderType:[watchScroll borderType]];
NSSize const registerDesired = [NSScrollView frameSizeForContentSize:[registerView maximumFrameSize]
hasHorizontalScroller:YES
hasVerticalScroller:YES
borderType:[registerScroll borderType]];
hasVerticalScroller:YES
borderType:[registerScroll borderType]];
NSSize const desired = NSMakeSize(std::max({ breakDesired.width, watchDesired.width, registerDesired.width }),
std::max({ breakDesired.height, watchDesired.height, registerDesired.height }));
[self cascadeWindowWithDesiredSize:desired forView:tabs];