mirror of
https://github.com/holub/mame
synced 2025-07-05 18:08:04 +03:00
srcclean in preparation for branching 0.237 release
This commit is contained in:
parent
5ab93130eb
commit
e778bb9a8c
File diff suppressed because it is too large
Load Diff
12
makefile
12
makefile
@ -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 )
|
||||
|
@ -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...
|
||||
|
@ -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)
|
||||
|
@ -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)];
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
@ -281,8 +281,8 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
|
||||
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);
|
||||
@ -297,14 +297,14 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
|
||||
{
|
||||
// 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 global_a = ((op >> 3) & 7) | 8; // global a-registers: a8-a12
|
||||
int cond = (op >> 32) & 0xf;
|
||||
int ncvz = (op >> 25) & 0xf;
|
||||
|
||||
@ -326,10 +326,10 @@ void tms32082_pp_disassembler::parallel_transfer(uint64_t op)
|
||||
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_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 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);
|
||||
|
||||
|
@ -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
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -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
|
||||
|
@ -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]);
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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
|
||||
|
||||
*/
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -189,7 +189,7 @@ 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;
|
||||
@ -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;
|
||||
|
@ -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)
|
||||
|
||||
@ -1167,10 +1167,10 @@ void rmnimbus_state::hdc_reset()
|
||||
}
|
||||
|
||||
/*
|
||||
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,7 +1185,7 @@ 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;
|
||||
@ -1551,17 +1551,17 @@ 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;
|
||||
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
|
||||
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;
|
||||
|
@ -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;
|
||||
}
|
||||
*/
|
||||
|
||||
|
@ -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.
|
||||
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.
|
||||
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"
|
||||
@ -37,91 +37,91 @@
|
||||
#include <functional>
|
||||
|
||||
/*
|
||||
Acording to the service manual the Nimbus should be capable of the following modes :
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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)
|
||||
0x2A X address status, returns current value of X counter (m_x)
|
||||
|
||||
0x2C Y address status, returns current value of Y counter (m_y)
|
||||
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
|
||||
|
||||
|
@ -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];
|
||||
|
Loading…
Reference in New Issue
Block a user