* 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.
New working software list items
-------------------------------
Beyond Zero Tolerance (prototype 19950714) [Hidden Palace]
Eyra - The Crow Maiden (digital release) [no-intro]
Zero Tolerance (Europe, USA) (rev. C) [no-intro]
Zero Tolerance (Germany) [no-intro]
Zero Wing (Retro-Bit) [no-intro]
Zombies Ate My Neighbors (Limited Run Games) [no-intro]
* model2: improve z-sort and clipping
Polygons in later windows are always drawn after polygons from earlier windows, regardless of z value.
Four planes representing the visible frustum are now used for polygon clipping; it is no longer necessary to add 1.0 to z during projection.
* model2: only reset the triangle z value at the start of the frame
Zero Gunner uses z value from previous object for enemy bullets; resetting z values leads to them not being visible
Setting master z-clip value to 0xFF disables z-clipping according to Model 2B-CRX manual
* 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.
* cpu/drcbec.cpp: Don't clear carry flag on a zero-bit rotate through
carry.
* cpu/drcbex86.cpp: Don't clear carry flag on a word-sized zero-bit
rotate through carry (64-bit case is more involved).
* cpu/drcbex64.cpp: Removed code for another special case of ROLAND that
the simplifier deals with.
-konami/ksys573.cpp, bus/pccard/linflash.cpp: Corrected "Gacha Gachamp".
* Actually take a voltage snapshot when R or C change. This was being attempted, but didn't work because set_target_v would exit early if the target V was not changing. Made the snapshoting more explicit.
* Consider the EG done based on elapsed time, instead of proximity to target value. Some low volume DMX sounds were affected by this.
* video/mb_vcu.cpp:
- Implement device_palette_interface for palette functionality.
- Use an address space finder to access the host address space.
- Use logmacro.h helpers for configurable logging.
- Added a VRAM addressing helper.
- Suppress side effects for debugger reads.
- Cleanup 2bpp graphics drawing and screen update function.
* stern/mazerbla.cpp:
- Reduced run-time tag lookups and preprocessor macros.
- Reduced duplication and unnecessary trampolines.
- Updated comments.
* bandai/wswan.cpp:
- Remove unused graphics decoding layout.
- Fixed sound DMA, implemented DMA direction, moved DMA-related code into WonderSwan color state class.
- Make some variables constant, reformatted code.
* bandai/wswan_v.cpp:
- Split wonderswan color VDP device class into a separate class.
- Move palette functionality from system driver into VDP device.
- Corrected VRAM size.
- Use bool for Boolean values.
- Use logmacro.h helpers for configurable logging.
- Reduced duplicated code.
- Remove unused variables and code, reduced duplication, reformatted code.
* shared/wswansound.cpp:
- Implemented Hypervoice.
- Added mono speaker/stereo headphones selection.
- Fixed some emulation issues and corrected output rate and volume.
- Use logmacro.h helpers for configurable logging.
* virtual/vgmplay.cpp: Added Hypervoice support and stereo output for WonderSwan sound.
* Fixed save state support.
* Use indirect palette for color palette.
* Implemented full screen update function.
* Reduced a lot of duplication.
* Use more appropriate integer types, made some variables const, reformatted code.
-snk/ngp.cpp: Fixed save state support
* Also reduced literal tag usage and removed unnecessary screen update trampoline function.
New working software list items (neogeo.xml)
--------------------------------------------
Double Dragon One (demo) [OzzyOuzo]
Double Dragon One (prototype 1) [Casa de Ruivo]
Double Dragon One (prototype 2) [Casa de Ruivo]
Xeno Crisis [O'Cara-do-Sei-lá]
* Implement device_palette_interface for color palette functionality.
* Added some missing members to save states, and use fixed-size integer types for members that need to be saved.
* Moved many internal functions into protected: and private: sections.
* Use more appropriate integer types, made many local variables const.
* machine/ie15_kbd.cpp: Reassigned keys on the IE15 keyboard to match the layout of a VT52 keypad.
* ussr/ms0515.cpp, ussr/dvk_ksm.cpp: Removed keyboard serial speed workaround.
-emu/diexec.cpp: If a shorter input line pulse overlaps a longer pulse, don't shorten the pulse.
-cpu/e132xs: Added named input line number constants.
-video/sprite.cpp: Got rid of simple_list and fixed_allocator.
------------------------------
Bio Rhythm [Siftware]
Janken Man Ganso 2 [buffi]
Jipin Dou Di Zhu (set 1) [little0]
San Da Yi [little0]
New clones marked not working
-----------------------------
Feng Kuang Dou Di Zhu II [little0]
Jipin Dou Di Zhu (set 2) [little0]
- bmc/koftball.cpp: identified a couple of inputs for jxzh [little0]
- igs/igspoker.cpp: added NVRAM support, split driver in subclasses, small cleanups
- kaneko/airbustr.cpp: added PLD dumps for the original sets [PLD Archive, f205v]
This was "working" on x86-64 due to the backend treating shift/rotate
instructions with zero immediate bit count as a no-op even if the source
and destination registaer aren't the same. Fixing the bug in the
back-end caused it to break the same way on x86-64 as it does on the
other three back-ends that didn't have this bug.
* Fixed many cases that could cause the upper bits of a register not to
cleared following a 32-bit operation.
* Added more simplifications.
* Allow many simplifications when flag updates are requested.
* Fixed various bits of unreachable code.
* cpu/drcbearm64.cpp, cpu/drcbex64.cpp: Removed code for special-casing
some situations the simplifier can now take care of consistently.
-cpu/drcbex64.cpp: Fixed a bug causing some shifts to be treated as a
no-op when the destination and source are not the same.
-cpu/drcbearm64.cpp, cpu/drcbex64.cpp: Added a special case for
comparing something to itself.
-cpu/e132xs: Use the CARRY instruction rather than a right shift to set
up carry in.