* Split host interface into separate data_r, data_w and status_r.
* Added access mask for µPD96050 data RAM write, simplified downstream code that uses it.
* bus/snes/event.cpp, bus/snes/upd.cpp: Added logging for writes to DSP status register address.
* linn/linndrum.cpp: Modeled click filter, improved hihat decay emulation.
Primary changes:
* Hihat decay knob will alway have an effect, not just at trigger time.
* Modeling the "click" filter.
* sound/flt_biquad.cpp: Fixed LOWPASS1P and HIGHPASS1P modes for flt_biquad.
Other changes:
* Renamed input for hihat decay pot.
* Updated "mux drums" section comments.
* Updated snare_w comments.
* Other minor comment changes.
* flt_biquad: Added HIGHPASS1P1Z implementation and used in the linndrum.
Reverted HIGHPASS1P changes.
* shared/exidysound.cpp: Use real 8253 PIT device rather than a local
implementation, fixed class memory access error, cleaned up code to
use virtual member functions idiomatically.
* cpu/alto2: Fixed class memory access error (was nuking unique
pointers).
* interton/vc4000_v.cpp: Fixed class memory access error, got rid of
indirection on bitmap, cleaned up a little.
* Enabled error for GCC class memory access warning to avoid rot.
* Made it a bit easier to cross-compile for x86-64 or i686 on an AArch64
Windows system.
* Choose the default native recompiler back-end based on predefined
macros rather than requiring the build scripts to set it.
* Don't require every target without a native recompiler to declare
this.
* Got rid of the code that was supposed to set -m32 or -m64 when
building GENie (it didn't work - it tried to use ARCHITECTURE before
setting it).
* Avoid relying on the unreliable PROCESSOR_ARCHITECTURE environment
variable.
* Got rid of stuff for versions of Xcode that are definitely no longer
supported.
* Got rid of workarounds for very old Linux distros.
* Use newer makefile syntax for if/else/if structures, comment some else
and endif statements for clarity.
* Change hexadecimal prefix from $ to 0x ($ means something else in MIPS assembler syntax) and omit for small numbers
* mips1, mips3, psx: Use shorthand mnemonics bal, beqz(l), bnez(l), li, move, neg, negu, not where applicable
* mips1, mips3, psx: Add delay slot to jr ra for stepping out
* mips1, mips3: Remove invalid instructions from other MIPS cores and use .word syntax for invalid instructions
* mips3: Fix field spacing for some instructions
This was changed in 822c3b4232 but it
never worked for multiple reasons:
* The comment mentions saving around CALLC, but there is no code to save
and restore around CALLC, DEBUG and RECOVER, all of which can clobber
callee-saved registers.
* Numerous opcode handlers assume XMM0 and XMM1 can be used as scratch
registers, but this change mapped them to UML F0 and F1. This
resulted in F0 and F1 getting clobbered by many UML instructions.
* Fixed master volume control.
* Fixed output range.
* Fixed sweep, wave RAM corruption and GBA read/write emulation.
* Use integer bit fields for pulse duty cycle tables.
* Reduced duplication made some variables const, improved member names.
* machine/msm6200.cpp: Scan matrix on a timer until a change is detected.
* sound/upd934g.cpp: Fixed play sample command.
* casio/cz1.cpp: Added MSM6200 clock input frequency.
New systems marked not working
---------------
Casio CPS-2000 [BCM, Devin Acker]
ROLAND could clobber source registers or produce incorrect results if
the desination was the same UML register as the shift or mask.
Fixed a bug in the logic for deciding whether to use a temporary
register for the mask for ROLINS.
Also optimised ROLAND and ROLINS some more (particularly translation
from UML's left rotate to ARM's right rotate) and removed a special case
that the simplifier now takes care of.
* Elfin will eventually get into a state where it ignores coins.
Protection is conceptually similar to The X-Files.
-cpu/uml.cpp, cpu/drcuml.cpp: Made it possible to build with logging
simplifications enabled (in uml.cpp it logs each step, in drcuml.cpp it
logs the net change). It will produce absoluely massive logs, though.
-cpu/drcuml.cpp: Removed woefully inadequate and badly rotted "backend
validation" code.
* cpu/drcbearm64.cpp: Optimised setting up carry flag for ADDC and SUBB.
There's no need to preserve the NZV flags so a two-instruction
sequence can be used.
* cpu/drcbex64.cpp: Simplified code generation for CARRY. I have no
idea why it was preserving RAX at all - it always uses RAX as a
scratch register.
* Fixed program address masks for word addressing.
* Fixed PC shift in state string export.
* handheld/pensebem.cpp: Fixed internal ROM region size.
* makerbot/replicator.cpp: Use lowercase hexadecimal literals.
* skeleton/venteta.cpp: Fixed CPU type for fix PC size (16 bits - also word unit) and internal RAM size (4000 bytes).
* ultimachine/rambo.cpp: Fixed internal ROM region size, use lowercase hexadecimal literals.
* Use references rather than pointers where appropriate, made some variables const.
* Made parameter names match in header and source and reformatted code.
* cpu/drcbearm64.cpp: Fixed ROLAND, ROLINS and CARRY clobbering the
shift input when it's a a register.
* cpu/drcbex86.cpp: Fixed DROLINS clobbering source in I0 and
miscalculating flags when destination is I0.
* cpu/uml.h: Removed assertion that's no longer valid.
* cpu/drcbearm64.cpp: Added minimal operand swizzling to allow AND, OR
and XOR to work without the simplifier.
* cpu/drcbex64.cpp: Optimised shift operations slightly.
* cpu/drcbec.cpp: Added stub implementations for TEST with no flag
outputs to allow running with simplifier disabled.
* cpu/drcbec.cpp: Implemented DREADM/DWRITEM with byte size access.
* cpu/drcbec.cpp: Store pointer to address space directly in instruction
stream.
* cpu/drcbearm64.cpp: Removed some special cases for situations the
simplifier deals with for ROLAND and ROLINS.
* cpu/drcbec.cpp: Added some actual detail to error messages on
encountering unexpected instructions.
* machine/rescap.h: Implemented audio potentiometer law.
Used it in oberheim/dmx.cpp and linn/linndrum.cpp.
* machine/rescap.h: Function should not be a constexpr.
Also avoiding pow in constexpr constants.
* apple/rbv.cpp: Send blue channel to all outputs when a monochrome
monitor is connected.
* apple/rbv.cpp: Implement device_palette_interface rathr than using a
separate palette device.
* apple/rbv.cpp: Derive 60.15 Hz timer and pseudo-VIA clock from clock
input.
* apple/maciici.cpp: Derive clocks from RBV clock crystal.
-docs: Link more configuration options to their descriptions.
* bus/snes/st018.cpp: Add primary support of ST018 coprocessor
moritas2 now boots, but still hangs at in-game.
* bus/snes/st018.cpp: Fix CPU latch accessing
* cpu/drcbec.cpp: Interpret index operand for load/store instructions as
a signed value for consistency with other back-ends.
* cpu/drcbec.cpp: Honour alignment rules when packing immediate values.
* cpu/drcbex64.cpp: Don't special-case SEXT with an immediate source -
the simplifier takes care of this.
* cpu/drcbex86.cpp: Be explicit about preserving flags in load/store
instructions.
* docs: Added a couple more UML data movement instructions.
* 6522via: Don't generate a signal on PB7 when the timer 1 latch is
programmed with 0.
On the Victor 9000, the clock for the audio codec is generated by a
via6522. PB7 is connected to the codec's clock input. Non-speech
sounds (e.g. beeps, musical notes) are produced by outputting a cyclical
waveform from the codec, with the pitch determined by the frequency of
the codec clock.
Software running on the Victor 9000 has been observed to attempt to
silence the audio by writing 0 to the T1 timer latch (not by turning off
continuous mode or PB7 output). With the emulated via6522, this resulted
in a high-frequency clock signal being output on PB7, causing a
high-pitched squeal whenever notes are not being played.
From this observed behavior we could infer that the original 6522 HW
does not output a signal on PB7 when the latch value is 0, and that the
Victor 9000 software was relying on this behaviour to silence the audio
output (one would have to assume that the real hardware didn't produce
a squeal).
* mc6852: fix various transmit-related issues which were preventing
victor9k Audio output from working.
The expected behavior of mc6852 is to write the data received in the
FIFO register serially via tx_data_callback(). However, this was not
implemented, and the only way data in the transmit FIFO could be
removed and transmitted was by calling get_tx_byte(), and to then
serially transmit the data by some external mechanism.
Only m68sfdc.cpp calls get_tx_byte(), so it's hard to see how any
other device using the mc6852 would have been able to transmit data.
Software running on victor9k attempting to play audio would hang,
since it would block waiting for the TX FIFO to empty. With these
changes, Victor 9000 audio playback works as expected, with the data
getting sent serially to the Audio codec.
In order to avoid breaking m68sfdc, a new API call is added to allow
data to be sent the "old" way. m68sfdc now calls
set_tx_pull_mode(true), to get the previous behavior. As I understand
it, other devices using mc6852 must be broken, and would need to
be revisited.
* victor9k: complete Audio support, adding a low-pass filter after
the HC-55516 codec. Mark victor9k Audio as working.
* cpu/drcbearm64.cpp Interpret index operand for load and store
instructions as a signed 32-bit value for consistency with x86-64.
Moved code to interpret load and scale the index for integer
load/store to a helper function to make it easier to update if it
needs changes or fixes.
* cpu/drcbearm64.cpp: Use and/orr to set carry flag directly rahter than
using an intermediate register when both operands of a CARRY
instruction are immediates.
* cpu/drcbearm64.cpp: Fixed incorrect operand type assertion for FREAD.
* cpu/drcbearm64.cpp: Use less verbose asmjit helper functions for shift
operations and addressing modes.
* cpu/drcbex64.cpp: Interpret index operand for floating point
load/store as a signed 32-bit value for consistency with integer
load/store.
* cpu/drcbex64.cpp: Guard against any possibility of load and store
instructions altering the flags.
* cpu/drcbex64.cpp: Reduced copy/paste in floating point load/store
instructions.
* cpu/drcbex64.cpp: Cleaned up some casts between integer types with
differing size and signedness.
* docs: Added reference for UML flow control, data movement and emulated
memory access instructions.
* cpu/uml.cpp: Truncate immediates to size for a few more instructions.
* cpu/uml.cpp: Added SPACE_OPCODES since it's a well-known address space
now.
* cpu/uml.cpp: Removed SCALE_DEFAULT. It's unimplemented by back-ends
and unused by front-ends.
* cpu/uml.h, cpu/drcumlsh.h: Less confusing names for parameters to read
and write instruction generators.
* cpu/drcbex86.cpp: Templated 64-bit multiplication helpers on the
zero/sign flag source, cleaned up casting pointers to integers.
* Added support for reference current (multiplying capability).
* Added support for voltage output.
* Added support for streaming reference current.
* Used those capabilities in oberheim/dmx.cpp and linn/linndrum.cpp.
* cpu/uml.cpp: Fixed some cases where simplifying multiplication
instructons incorrectly changed output flags.
* cpu/drcbex64.cpp: Fixed some cases where a ROLC/RORC with zero shift
count could incorrectly clear the carry flag.
* cpu/drcbex86.cpp: Made 64-bit ROLC/RORC with zero bit count preserve
the carry flag.
* cpu/drcbec.cpp: Fixed FSMOV/FDMOV turning things that look like
signalling NaNs into quiet NaNs on i686.
* cpu/drcbex64.cpp: Greatly reduced copy/paste in the code generation
for multiply instructions.