-------------------
-  HARDWARE 0.284 -
-------------------

CPU
SOUND / AUDIO
PROTECTION
INPUT/OUTPUT
OTHER
VIDEO / GRAFIK
ROM/RAM TYPES
ARCADE SYSTEMS
DECLARATION
MEMO

=================================================================================================================================================================================================================================================================================


CPU

  0.    MAME CPU Interface

  1.    Zilog
  1.1   Z80
  1.11  Z80 CTC
  1.12  Z80 DAISY
  1.13  Z80 DART
  1.14  Z80 DMA
  1.15  Z80 PIO
  1.16  Z80 SCC
  1.17  Z80 SIO
  1.18  Z80 STI
  1.2   Compatible/enhanced Z80 CPUs
  1.3   Z8000/Z8002
  1.4   Z8
  1.41  Z8681
  1.42  Z8682
  1.43  Z8671
  1.5   Z86E02
  1.51  Z86E08
  1.6   Sharp LZ8420M

  2.    MOS-Tech
  2.1   M6502
  2.11  W65C02
  2.12  R65C02
  2.13  M65CE02
  2.14  G65SC02
  2.15  M6503
  2.16  M6504
  2.17  M6507
  2.18  M6508
  2.19  M6509
  2.1A  M6510
  2.1B  M6510T
  2.1C  M4510

  3.    Motorola
  3.1   MC6800
  3.2   MC6801
  3.3   MC6802
  3.4   MC6803
  3.5   M6805
  3.6   MC6808
  3.7   MC6809
  3.8   M68000
  3.81  M68008
  3.82  M68010
  3.83  M68020 / M68EC020
  3.84  M68030
  3.85  M68040
  3.86  M68301
  3.87  MC68307
  3.88  MC68328
  3.89  MC68EZ328
  3.8A  MC68340
  3.9   MC68881
  3.9   MC68882
  3.A   SCC68070
  3.B   DSP56000
  3.B1  DSP56156
  3.B2  DSP56362
  3.C   ColdFire and MCF5206E
  3.D   CPU16
  3.D1  MC68HC16Z

  4.    Signetics
  4.1   S2650

  5.    Cinematronics CPU

  6.    Intel
  6.1   8080
  6.11  8080A
  6.2   8085A
  6.3   8086
  6.31  I80C86/I80C88
  6.4   8088
  6.5   I80130
  6.6   80186
  6.61  80188
  6.62  80286
  6.63  I386
  6.64  I486
  6.65  i860XR
  6.66  80960KA/KB
  6.67  Pentium
  6.68  Pentium MMX
  6.69  Pentium Pro
  6.6A  Pentium II
  6.6B  Pentium III
  6.6C  Pentium 4
  6.7   MediaGX
  6.8   Athlon XP
  6.9   I8087 FPU

  7.    Texas Instruments
  7.1   TMS0270
  7.11  TP0320
  7.12  TMS0970
  7.13  TMS0980
  7.2   TMS1000
  7.21  TMS1100
  7.22  TMS1300
  7.23  TMS1400
  7.24  TMS1475
  7.25  TMS1600
  7.26  TMS1990
  7.27  TMS2100
  7.28  TMS2400
  7.3   TMS7000
  7.4   TMS99xx
  7.41  TMS9900
  7.42  TMS9940
  7.43  TMS9980A
  7.44  TMS9981
  7.45  TMS9995
  7.46  TMS99100
  7.47  TMS99105A
  7.48  TMS99110A
  7.5   TMS320xx
  7.51  TMS32020
  7.52  TMS32025
  7.53  TMS32026
  7.54  TMS32030
  7.55  TMS32031
  7.56  TMS32032
  7.57  TMS32033
  7.58  TMS32051
  7.59  TMS32053
  7.5A  TMS32082
  7.6   TMS340xx
  7.61  TMS34010
  7.62  TMS34020
  7.7   TMS57002

  8.    Hitachi
  8.1   HD6301
  8.11  HD6303
  8.12  HD6309
  8.2   HD61700
  8.3   HD63701
  8.4   HD63705
  8.5   HD641016
  8.6   H8
  8.61  H8/300
  8.62  H8/325
  8.63  H8/500
  8.64  H8/510
  8.65  H8/520
  8.66  H8/532
  8.67  H8/534
  8.68  H8S/2xxx
  8.69  H8/3xxx
  8.6A  H8/3002
  8.6B  H8/3003
  8.6C  H8/3006
  8.6D  H8/3007
  8.6E  H8/3008
  8.6F  H8/303x
  8.6G  H8/3040/3041/3042
  8.6H  H8/3044
  8.6I  H8/3048
  8.6J  H8/83217
  8.6K  H8/3258
  8.6L  H8/3334
  8.6M  H8/3337
  8.7   Zilog Z180
  8.71  Hitachi HD64180RP
  8.72  Hitachi HD647180X MCU
  8.73  Zilog Z80180
  8.74  Zilog Z8S180
  8.8   FD1089
  8.81  FD1094
  8.82  FD1149
  8.9   SH
  8.91  SH-1
  8.92  SH-2
  8.93  Hitachi SH-2 (SH704x)
  8.94  Hitachi SH-2 (SH7604)
  8.95  SH-3
  8.96  SH-4
  8.A   HCD62121

  9.    NEC
  9.1   D70008
  9.2   uPD7725 / uPD96050
  9.3   uPD7751
  9.4   uPD780C
  9.41  uPD7801
  9.42  uPD78C06
  9.43  uPD7807
  9.44  uPD78C10
  9.45  uPD78C11
  9.46  uPD78053
  9.47  uPD78213
  9.48  uPD78312
  9.49  uPD784031
  9.5   MC-8123
  9.6   NEC Vxx
  9.61  V20
  9.62  V25
  9.63  TS-001/2/4/7
  9.64  V30
  9.65  V30MZ
  9.66  V33
  9.67  V35
  9.68  V40
  9.69  V50
  9.6A  V53
  9.6B  V60
  9.6C  V70
  9.6D  V810
  9.7   D80000
  9.8   DYNA CPU91A
  9.9   NANAO 08J27291
 10.    Data East
 10.1   DECO CPU-6
 10.2   DECO CPU-7
 10.3   DECO16
 10.4   DECO 45 / HuC6280
 10.5   DECO 59
 10.6   DECO 101 / ARM
 10.7   DECO 102
 10.8   DECO 156
 10.9   ARM7
 10.A   ARM9
 10.B   DECO ???
 10.C   DECO 222
 10.D   Samsung S3C24xx
 10.E   Intel XScale
 10.E1  PXA250
 10.E2  PXA255
 10.E3  PXA270

 11.    Nintendo
 11.1   Ricoh RP2A03
 11.12  Ricoh RP2A03G
 11.2   G65C816 / 5A22
 11.3   SPC700
 11.31  SPC7110
 11.4   DSP-1
 11.5   DSP-2
 11.6   DSP-3
 11.7   DSP-4
 11.8   RSP
 11.9   RCP
 11.A   RDP
 11.B   Minx

 12.    Atari
 12.1   DEC T11
 12.2   ADSP21xx
 12.21  ADSP-2100
 12.22  ADSP-2101
 12.23  ADSP-2104
 12.24  ADSP-2105
 12.25  ADSP21062 / SHARC
 12.26  ADSP-2112
 12.27  ADSP-2115
 12.28  ADSP-2181
 12.3   DSP32C
 12.4   ASAP
 12.5   Jaguar GPU
 12.6   Jaguar DSP

 13.    Toshiba
 13.1   T5182
 13.2   TMP8039
 13.3   TMP8085
 13.4   TLCS-Z80
 13.41  TMPZ84C011
 13.42  TMPZ84C015
 13.5   TLCS-90
 13.51  TMP90840
 13.52  TMP90841
 13.53  TMP90PH44
 13.54  TMP90C051
 13.55  TMP91640
 13.6   TMP68HC000
 13.61  TMP68301
 13.7   TLCS-870 / TMP87PH40AN
 13.8   TLCS-900
 13.81  TMP94C241
 13.82  TMP95C061
 13.83  TMP95C063

 14.    Konami
 14.1   Konami 1
 14.2   KONAMI CPU

 15.    MIPS CPUs
 15.1   MIPS-I
 15.11  R2000
 15.12  R3000
 15.13  R3041
 15.14  R3051
 15.15  R3560
 15.2   MIPS-III/IV
 15.21  R4000
 15.22  VR4300
 15.23  VR4310
 15.24  R4400
 15.25  R4600
 15.26  IDT R4650 (big)
 15.27  R4700
 15.28  TX4925
 15.29  R5000
 15.2A  QED5271
 15.2B  VR5500
 15.2C  R5900
 15.2D  RM7000
 15.3   PSX CPU
 15.31  CXD8661R

 16.    AMD
 16.1   AMD 2901
 16.2   Am29000
 16.3   AM29116 / ESRIP
 16.4   AM29323
 16.5   CUBEQCPU

 17.    Hyperstone
 17.1   E1-16T
 17.11  E1-16XT
 17.12  E1-32N
 17.13  E1-32T
 17.14  E1-32XN
 17.15  E1-32XS
 17.16  E1-32XT
 17.2   Hynix
 17.21  GMS30C2116
 17.22  GMS30C2132
 17.23  GMS30C2216
 17.24  GMS30C2232

 18.    Fujitsu
 18.1   MB86233
 18.2   MB86234
 18.3   MB86235

 19.    IBM
 19.1   PowerPC 4xx/6xx
 19.11  PowerPC 403GA
 19.12  PowerPC 403GCX
 19.13  PowerPC 405GP
 19.14  PowerPC 601
 19.15  PowerPC 602
 19.16  PowerPC 603
 19.17  PowerPC 604
 19.18  PowerPC MPC8240
 19.19  Konami PowerPC Common Functions
 19.2   PowerPC Dynamic Recompiler
 19.3   DRC - Dynamic Re-Compiling
 19.31  x86/x64
 19.4   PowerPC MMU
 19.5   PowerPC FPU

 20.    SE3208

 21.    Others
 21.1   APEXC
 21.2   GenSync
 21.3   CP1610
 21.31  SSP1601
 21.4   RCA COSMAC
 21.41  CDP1801
 21.42  CDP1802
 21.43  CDP1805
 21.5   F8
 21.6   KABUKI
 21.7   ST0016
 21.8   SCUDSP
 21.9   M7700
 21.91  M37702S1
 21.92  M37710S4
 21.93  M37720S1
 21.94  M16C
 21.A   MN1020012A
 21.A1  MN10300
 21.B   CY7C9101
 21.C   SC61860
 21.D   LH5801
 21.E   SM8500
 21.F   HP Saturn
 21.G   PDP1
 21.G1  PDP8
 21.H   Sharp LR35902
 21.I   SSEM
 21.J   Atmel 8-bit AVR
 21.K   SuperFX
 21.L   INS 8050 SC/MP
 21.L1  INS 8060 SC/MP II
 21.M   PPS4
 21.N   15IE-00-013
 21.O   NEC uCOM-4
 21.O1  AMI S2000
 21.P   ARCompact
 21.Q   KL5C80A12
 21.Q1  KL5C80A16
 21.Q2  KP63
 21.Q3  KP69
 21.Q4  Taxan KY-80
 21.Q5  KC82
 21.R   STmicro ST6228
 21.S   3DO DSPP
 21.T   National Semiconductor
 21.T1  HPC46003
 21.T2  HPC46104
 21.U   Sharp SM59x
 21.V   Altera Nios II Processor

 22.    CPU/Sound Communication
 22.1   Konami K054986
 22.2   Data East Pinball CPU boards

 23.    Discrete Netlist

..................................................................................................................................................................................................................................



0.    MAME CPU Interface

- 0.277              : No need to check debug enabled flag manually (devices\cpu\*) [hap].
- 0.268              : Updated "CPU Tester" sample code so it will mostly build and work again. Only remaining issue is that m_icountptr is now private, so it can't set remaining cycles (emu\drivers\testcpu.cpp) [Vas Crabb].
- 0.267              : Fixed possible time travel issue in defer_access (emu\devcpu.cpp) [hap].
- 0.262              : No need to always change cpuclock at reset when non-default port_changed takes care of it (only MESS drivers) [hap].
- 0.253              : Wrap the constants (emu\divtlb.cpp) [O. Galibert]. Added defer_access() method, which is useful for keeping the cpu in a loop restarting the current instruction to emulate waitstates (emu\devcpu.cpp) [Sven Schnelle].
- 0.249              : Additions to osd\eminline.h: Added mul_16x16 inline function to perform a signed 16x16-bit multiplication with 32-bit result. This was moved from cpu\e132xs to unite it with the analogous 32x32 operations. Added rotl_32, rotr_32, rotl_64 and rotr_64 inline functions to perform 32-bit and 64-bit circular shifts in either direction by the specified number of places, modulo 32 or 64. It is anticipated that these will eventually be replaced by standard functions in C++20's <bit> header, and so they have been given similar signatures and semantics (which are also validity-checked). Removed LSL, LSR, ROL and ROR macros from cpu/arm and cpu/arm7 to ameliorate unnecessary obfuscation [AJR].
- 0.235              : Removed a crash caused by the modulus operator (emu\divtlb.cpp). In the original code all values are signed integers, so m_dynindex would overflow and become negative, then the modulus of a negative value by a positive one would generate a negative result and finally the next array read would make the program crash. Also the maximum value plus one of m_dynindex is not generally a multiple of m_dynamic and this would cause a jump in the values of liveindex [yz70s].
- 0.209              : Annotated all uses of set_input_line_vector with CPU type (Example cvs.cpp: m_audiocpu->set_input_line_vector(0, 0x03); // S2650) [O. Galibert].
- 0.196              : Blind faith fixed long names for almost all CPUs [Angelo Salese]. Prettier way of adding DRC framework on-demand (scripts\src\cpu.lua). Reduced use of naked pointers, using namespace and preprocessor macros in recompiling CPU cores [Vas Crabb].
- 0.193              : API change (emu\emumem.cpp): * direct_read_data is now a template which takes the address bus shift as a parameter. * address_space::direct<shift>() is now a template method that takes the shift as a parameter and returns a pointer instead of a reference. * The address to give to {read|write}_* on address_space or direct_read_data is now the address one wants to access. Longer explanation: Up until now, the {read|write}_* methods required the caller to give the byte offset instead of the actual address. That's the same on byte-addressing CPUs, e.g. the ones everyone knows, but it's different on the word/long/quad addressing ones (TMS, Sharc, etc...) or the bit-addressing one (TMS340x0). Changing that required templatizing the direct access interface on the bus addressing granularity, historically called address bus shift. Also, since everybody was taking the address of the reference returned by direct(), and structurally didn't have much choice in the matter, it got changed to return a pointer directly. Longest historical explanation: In a cpu core, the hottest memory access, by far, is the opcode fetching. It's also an access with very good locality (doesn't move much, tends to stay in the same rom/ram zone even when jumping around, tends not to hit handlers), which makes efficient caching worthwhile (as in, 30-50% faster core iirc on something like the 6502, but that was 20 years ago and a number of things changed since then). In fact, opcode fetching was, in the distant past, just an array lookup indexed by pc on an offset pointer, which was updated on branches. It didn't stay that way because more elaborate access is often needed (handlers, banking with instructions crossing a bank...) but it still ends up with a frontend of "if the address is still in the current range read from pointer+address otherwise do the slowpath", e.g. two usually correctly predicted branches plus the read most of the time. Then the >8 bits cpus arrived. That was ok, it just required to do the add to a u8 *, then convert to a u16/u32 * and do the read. At the asm level, it was all identical except for the final read, and read_byte/word/long being separate there was no test (and associated overhead) added in the path. Then the word-addressing CPUs arrived with, iirc, the tms cpus used in atari games. They require, to read from the pointer, to shift the address, either explicitely, or implicitely through indexing a u16 *. There were three possibilities: 1. Create a new read_* method for each size and granularity. That amounts to a lot of copy/paste in the end, and functions with identical prototypes so the compiler can't detect you're using the wrong one. 2. Put a variable shift in the read path. That was too expensive especially since the most critical cpus are byte-addressing (68000 at the time was the key). Having bit-adressing cpus which means the shift can either be right or left depending on the variable makes things even worse. 3. Require the caller to do the shift himself when needed. The last solution was chosen, and starting that day the address was a byte offset and not the real address. Which is, actually, quite surprising when writing a new cpu core or, worse, when using the read/write methods from the driver code. But since then, C++ happened. And, in particular, templates with non-type parameters. Suddendly, solution 1 can be done without the copy/paste and with different types allowing to detect (at runtime, but systematically and at startup) if you got it wrong, while still generating optimal code. So it was time to switch to that solution and makes the address parameter sane again. Especially since it makes mucking in the rest of the memory subsystem code a lot more understandable [O. Galibert].
- 0.188              : Renamed AS_DECRYPTED_OPCODES to AS_OPCODES [O. Galibert].
- 0.180              : Removed emu\drivers\emudummy.cpp.
- 0.179              : Make sure all CPU's export STATE_GENPCBASE and use safe_pcbase() for everything in the debugger, which allows interruptible CPU's to work properly. Changed CPU cores pcbase handling to be consistent with the majority of CPU cores, now that the debugger relies on it [smf].
- 0.177              : Store address of elemtnt 0 of m_table and return it in vtlb_table, with this in debug mode i386 is 1.7 times faster (emu\divtlb.cpp) [yz70s]. Fixed TARGET=virtual (scripts\target\mame\virtual.lua) [Miodrag Milanovic].
- 0.171              : Changed devices\cpu\vtlb.cpp/h to emu\divtlb.cpp/h. Make generic VTLB implementation a modern device interface [AJR].
- 0.166              : Changed GAME_NO_SOUND to MACHINE_NO_SOUND in emu\drivers\emudummy.c [Kyungdahm Yun].
- 0.155              : Sync'd CPU list (mame\mame.mak and mess.mak) [Oliver Stoeneberg]. Removed legacy_cpu_device (emu\devcpu.c/h) [Wilbert Pol].
- 0.154              : Removed DECLARE_LEGACY_CPU_DEVICE (emu\devcpu.h) [Wilbert Pol].
- 0.153              : Enable all cpu cores in MAME (SCORE and 8X300 CPU). Getting rid of some references to legacy_cpu_device (video\epic12.c, drivers\chihiro.c and cv1k.c) [Wilbert Pol]. Replaced machine().firstcpu with m_maincpu (cpu\psx\rcnt.c, sound\disc_inp.c, drivers\chihiro.c. limenko.c. m90.c. midqslvr.c. peplus.c, policetr.c, seattle.c, skydiver.c, splus.c, sprint2.c, machine\balsente.c, galaxold.c and video\system1.c). Replaced some calls to machine().firstcpu->pcbase() with machine().describe_context() (machine\mc6843.c, mc6846.c, mc6854.c and mos6530.c) [smf].
- 0.150              : Added MCFG_{CPU|DEVICE}_VBLANK_INT_REMOVE and MCFG_{CPU|DEVICE}_PERIODIC_INT_REMOVE to properly remove non-legacy VBLANK interrupts - the current code only reset the legacy interrupt which wasn't set anyways (emu\devcpu.h, diexec.c/h, drivers\dacholer.c, segas18.c and system1.c). Removed unused legacy VBLANK interrupt code (emu\devcpu.h, diexec.c/h). Removed some unused device_irq_acknowledge_callback occurrances (cpu\arm7\arm7.h, arm7core.h, tms32031\tms32031.c/h and tms32051.c). Removed unused periodic interrupt legacy code (emu\devcpu.h and diexec.c/h) [Oliver Stoeneberg].
- 0.149u1            : Added missing cpu metadata (cpu\cpu.mak). Made makemak create lst as well, and some fixes for cpu.mak [Miodrag Milanovic]. legacy_cpu--: This is a first pass at converting to a modern device, I'd be surprised if there are no issue but it's already a weeks worth of updating + testing [David Haywood].
- 0.148u4            : Moved cpu_device * to required_device in existing driver state classes. Added m_maincpu where missing in driver classes that are placed in drivers (m_maincpu(*this, "maincpu") { } + required_device<cpu_device> m_maincpu;). Changed machine().device("maincpu") with m_maincpu in MAME tree part. Changed machine().device("audiocpu") with m_maincpu. Make slot depended checks to be case insensitive like other parts of core (emu\mconfig.c). Various cpu lookup cleanup [Miodrag Milanovic].
- 0.148u2            : Changed CPU_DISASSEMBLE to use cpu_device * instead of legacy_cpu_device *, so that class based cpu devices can also be passed (emu\devcpu.h). Pass this instead of NULL and options instead of 0 in the class based cpu cores (cpu\adsp2100\adsp2100.c, asap\asap.c, avr8\avr8.c, cosmac\cosmac.c, dsp16\dsp16.c, dsp32\dsp32.c, hd61700\hd61700.c, i8008\i8008.c, lr35902\lr35902.c, m6809\hd6309.c, m6809\konami.c, mips\r3000.c, sm8500\sm8500.c, tms32031\tms32031.c and upd7725\upd7725.c) [smf].
- 0.148u1            : Added direct dynamic entry load to virtual TLB (cpu\vtlb.c). vtlb_fill doesn't appear to provide an easy way to determine whether a failure is due to a presence or permission error also entries need to be marked dirty or the performance improvement is minimal [Carl].
- 0.147u3            : Allow overriding TMSMAKE/M68KMAKE (ifndef...endif) for easier cross-compilation and testing of alternatives (emu\cpu\cpu.mak) [Robert Muth].
- 0.147              : Added safe_pc() and safe_pcbase() methods to device_t. Convert all cpu_get_pc() to safe_pc() and cpu_getpreviouspc() to safe_basepc(). Removed the old macros. Don't use safe_pc[base] when you already have a resolved device_state_interface. Added redundant methods to device_state_interface to generate errors when this is done. In device_state_interface, rename state() to state_int() and set_state() to set_state_int() for consistency. Update all callers. Also add set_pc() helper and updated all callers to use that instead of set_state_int(STATE_GENPC). Added device_t::state() method to get the state interface. Added redundant device_state_interface::state() method to catch redundant use of it. Removed cpu_get_reg() and cpu_set_reg() macros in favor of using the above methods. Closeout on old macros. Retired cputag_set_input_line and cputag_set_input_line_and_vector, replacing them with machine.device("tag")->execute().set_input_line[_and_vector]. More AM_BASE_LEGACY removal [Aaron Giles].
- 0.146u5            : Made MCFG_QUANTUM_PERFECT_CPU able to work within devices (emu\mconfig.c ) [Miodrag Milanovic].
- 0.144u6            : Added emu\drivers\testcpu.c. Created new testcpu driver that shows how to develop an empty test driver that (ab)uses the core to single step a CPU executing arbitrary instructions and capturing before/after state and tracking memory. Currently this driver is always compiled, but is not referenced in mame.lst [Aaron Giles].
- 0.142              : Aaron Giles removed redundant item cpu from address_space, in favor of space->device().
- 0.141u2            : Curt Coder added all CPU and sound devices in emu folder to the MAME build. Removed cpuexec_describe_context, cpuexec_boost_interleave, cpuexec_trigger, and cpuexec_triggertime in favor of calls to the scheduler [Aaron Giles].
- 0.140u3            : Aaron Giles added DEVICE_SELF_OWNER which allows an address map to refer to the owner of its owning device. Useful for CPU address map handlers for CPU's that are part of a device.
- 0.140              : Added emu\drivers\emudummy.c. Dummy driver file that references CPU devices which are in turn referenced by devices in libemu.a. The reason we need this is due to link ordering issues with GCC if the actual drivers being linked don't reference these CPU devices. Since we link libcpu first, if libemu needs stuff from libcpu that wasn't previously referenced, it will fail the link.
- 0.139u1            : More API cleanup [Aaron Giles]: Removed cputag_clocks_to_attotime() and cputag_attotime_to_clocks() in favor of just expanding the class. Same for cputag_suspend() and cputag_resume().
- 0.138u3            : Aaron Giles removed the following functions: cpu_get_total_cycles()   == cpudevice->total_cycles(), cpu_clocks_to_attotime() == cpudevice->cycles_to_attotime() and cpu_attotime_to_clocks() == cpudevice->attotime_to_cycles(). Aaron Giles removed most other instances of cpu_get_total_cycles. Aaron Giles removed cpu_get_sp(). Aaron Giles added cycles_to_attotime() and attotime_to_cycles() which is more often what is requested (clocks are the raw input clock, while cycles are internal clock after dividers/multipliers). Aaron Giles created CPU-specific device types for all CPUs, using new macros DECLARE_LEGACY_CPU_DEVICE and DEFINE_LEGACY_CPU_DEVICE. Changed CPUs to be their own device types, rather than all of type CPU with a special internal subtype. Note that as part of this process I removed the CPU_ prefix from the ALL-CAPS device name, so CPU_Z80 is just plain old Z80 now. This required changing a couple of names like 8080 to I8080 so that there was an alphabetic first character. Got rid of cpu_count, cpu_first, cpu_next, etc. as they were badly broken. Also removed cpu_is_executing, cpu_is_suspended, cpu_get_local_time, and cpu_abort_timeslice [Aaron Giles].
- 0.138u2            : Added emu\devcpu.c/h. Removed emu\cpuexec.c/h and cpuintrf.h. Converted the classic CPU device to a standard device that uses the execution, state, memory and disassembly interfaces. Used this new class (cpu_device) to implement the existing CPU device interface. In the future it will be possible to convert each CPU core to its own device type, but for now they are still all CPU devices with a cpu_type() that specifies exactly which kind of CPU [Aaron Giles]. Changed the way CPU state tables are built up. Previously, these were data structures defined by a CPU core which described all the registers and how to output them. This functionality is now part of the state interface and is implemented via the device_state_entry class. Updated all CPU cores which were using the old data structure to use the new form. The syntax is currently awkward, but will be cleaner for CPUs that are native new devices [Aaron Giles]. Removed MDRV_CPU_FLAGS() which was only used for disabling a CPU. Changed it to MDRV_DEVICE_DISABLE() instead. Updated drivers [Aaron Giles].
- 0.136u1            : Fabio Priuli replaced all occurrences of cputag_get_cpu with devtag_get_device: the former function was just an alias and now cpus are no different from other devices. Also removed cputag_get_cpu and cputag_reset (another alias, not even used in the source) from cpuexec.h.
- 0.135u1            : Curt Coder allowed child CPUs to be used in read8/write8 callbacks.
- 0.134u4            : Dirk Best changed device callback system to look up devices owned by the same parent if a child device references another device.
- 0.134u3            : Removed osd\osdmini\osd_cpu.h and osd\windows\osd_cpu.h.
- 0.134              : Aaron Giles removed remaining references to machine->cpu[n]. Removed cpu[n] array. Replaced with machine->firstcpu which is a fast access to the head of the list of CPUs.
- 0.131u4            : Fabio Priuli replaced almost all remaining cpu[num] occurrences in src\mame\ with tags.
- 0.131u3            : CPUs actually take some time to reset. Changed the 68000/68010 to eat an appropriate number of cycles after a reset [Aaron Giles].
- 0.131u1            : Replaced the use of CPU numbers with tags where possible across most drivers [Fabio Priuli]. Deprecated device_set_info. Almost all devices had a NULL or empty function here. Remaining devices have been converted to have device-specific functions to do the same thing with proper type checking. CPUs still have a set_info function but it is CPU-specific now and no longer piggybacks on the general device function [Aaron Giles].
- 0.130u4            : Fabio Priuli fixed CPU_GET_INFO issues spotted by -validate in MESS debug build.
- 0.130u2            : CPU cores are now enabled on a per CPU core family basis instead of per CPU core variant. As a result CPUDEFS is no longer needed in the makefile [Wilbert Pol].
- 0.130u1            : Aaron Giles changed the CPU cores to use the get_safe_token() pattern like other devices.
- 0.129u4            : Aaron Giles fixed disassembler for CPUs with address bus shifts. Nathan Woods added the ability to invoke CPU input lines with DEVCB callbacks.
- 0.129u1            : Removed several useless occurrences of "#define INLINE" in CPU and sound cores [Dirk Best]. Made direct (opcode) access more robust. Direct access now crawls the memory table to find its ranges, and caches them for fast access in the future. It invalidates intersecting regions when new ones are installed, and now properly handles mirrored ranges [Aaron Giles].
- 0.129              : Removed emu\cpuintrf.c. Significantly optimized the inner execution loop [Aaron Giles]. Arkanoid 2 is ~2.5x faster with maximum interleave now. CPU interface organization shuffle. The file cpuintrf.h now merely describes the interface, but does not contain any implementation. All remaining bits of implementation have been migrated either to cpuexec.c or to debugcpu.c. Specifically, cpu_dasm() is now debug_cpu_disassemble(), and cpu_set_dasm_override() is now debug_cpu_set_dasm_override(). Also moved memory_address_physical() to debug_cpu_translate(), since it was only ever used for debugging [Aaron Giles]. Aaron Giles changed all CPU and sound cores to use memory_find_address_space() instead of cpu_get_address_space(). The former is reliable even during early initialization when the CPU cores generally need it. Aaron Giles removed the dummy CPU core and cpuintrf.c. Aaron Giles changed the core execution loop to directly call the execute function instead of using the inline helper (which has been removed). Aaron Giles normalized the CPU cores to always do while (icount > 0), in order to remove the kludge in cpuexec.c that caused us to overeat by 1 cycle to accommodate those cores that there looping while (icount >= 0). Aaron Giles cleaned up the profiler. Reduced its runtime overhead significantly by inlining the check to see if it is running. Removed obsolete entries and updated the text to more accurately describe each one. Added CPU tags to the CPU names. Switched to using an astring for building the final string. Unfortunately, still a bit too much overhead to leave it on in all builds.
- 0.128u7            : Made CPUs into proper devices. CPUs are now added in the machine configuration just as any other device, and the standard CPU configuration is performed via the inline configuration macros [Aaron Giles]. Aaron Giles and Atari Ace changed cpu_type from an enumeration into a pointer to the CPU's get_info function, very similar to device behavior. Updated all drivers to #include the necessary header files for the CPU's they reference. Aaron Giles added function cpu_get_type() to return the CPU type. Aaron Giles changed several cpu_* functions over to the device_* equivalents, specifically for get/set info and for reset. Aaron Giles cleaned up code that looped over CPUs via the machine->cpu array to now loop using the type-based device list. Aaron Giles cleaned up the generic interrupt_enable code to work with CPU devices instead of numbers. Aaron Giles removed cpuintrf_init() which is no longer necessary. Aaron Giles defined a generic device execute function callback, though it is not used yet. The long term plan is that any device with an execute callback will be scheduled along with the CPUs. Now that CPUs are devices, their scheduling will be moved over to this logic eventually. Aaron Giles moved device startup to *before* the DRIVER_INIT is called. This is to allow the DRIVER_INIT to configure devices that have been properly allocated. So far I don't see any negative effects, but be on the lookout if something weird shows up. Aaron Giles rewrote the device iteration logic to make use of the typenext field and the newly-introduced classnext field for iterating more efficiently through devices of a given type or class. Aaron Giles cleaned up many other CPU headers to move memory read/write macros out of them, since they are inappropriate and should be prive to the CPU core. Aaron Giles added the concept of a cpu_state_table, which is supplied by the CPU cores and which describes all the register state accessible to the debugger and other subsystems. The format of the table is such that most data can be simply fetched from memory without the further involvement of the CPU core, including the display of common formats. Extensibility points are available for custom display and for importing/exporting the data to intermediate variables for more complicated scenarios. Updated the ADSP21xx, TMS340x0, i86, Z80, Z180 and 8085 cores to use this. More cleanup [Aaron Giles]: Added address-space-specific constants for the various bus width and shift CPU interface constants. Changed all the cores to use them. Aaron Giles added new MDRV_QUANTUM_PERFECT_CPU(x) to specify that the minimum quantum should be enough to ensure that the specified CPU tag only ever executes a single instruction at a time. This can be used to explicitly require "perfect" synchronization for drivers that have multiple CPUs with shared memory. Turned this on for the arknoid2 driver for now as a test (the interleave on that driver was already very close to perfect anyway).
- 0.128u6            : Aaron Giles enabled all CPU cores/variants. Fixed compile issue revealed as a result. Aaron Giles added new function cpuexec_describe_context(machine) which can be used in logerror() and other printf-style functions to return a description of the current CPU/PC given only the machine. Changed several dozen sites to use this instead of directly interrogating the activecpu. Aaron Giles removed all other uses of activecpu throughout the system. Removed activecpu from the machine structure to prevent future abuse. Aaron Giles removed cpu_push_context() and cpu_pop_context(), and all call sites. Aaron Giles removed get context/set context calls from the CPU interface entirely. Aaron Giles removed safe_cpu_get_pc() which doesn't really make sense anymore. Aaron Giles moved cpu_execute() to be an inline function. Atari Ace removed remaining deprecat.h references from the CPU cores. Aaron Giles expanded cpuexec cycles <-> attotime functions to handle UINT64s.
- 0.128u5            : Aaron Giles removed globals from cpuexec. Also removed ATTOTIME_TO_CYCLES() and ATTOTIME_IN_CYCLES(). Replaced them with functions in cpuexec: cpu_clocks_to_attotime() and cpu_attotime_to_clocks(), both of which take CPU devices instead of indexes. Updated all callers, many of which were using the functions dubiously. Aaron Giles removed cpunum_get_active() calls and activecpu references from all of the CPU cores. Normalized several local CPU state variables to the generic 'cpustate' instead of names_with_underscores. Removed all references to cpunum_get_active() and removed the function entirely [Aaron Giles, Andrew Gardner]. Aaron Giles renamed constants CPU_IS_LE -> ENDIANNESS_LITTLE and CPU_IS_BE -> ENDIANNESS_BIG. Aaron Giles added a number of new cputag_* macros to cpuexec.h. Aaron Giles renumbered CPU and sound get/set info constants to align with the device constants, and shared values where they were perfectly aligned. Aaron Giles set the type field in the fake device_configs for CPU and sound chips to a get_info stub which calls through to the CPU and sound specific get_info functions. This means the device_get_info() functions work for CPU and sound cores, even in their fake state. Aaron Giles changed device information getters from device_info() to device_get_info() to match the CPU and sound macros. Aaron Giles removed cpunum_get_active(). Main important change is that IDE controllers with bus mastering (DMA) need to specify the target address space in the IDE device configuration. Aaron Giles removed mame_find_cpu_index(). Use cputag_get_cpu() instead. Updated all drivers calling this to the newer function, and generally simplified their code as a result. Aaron Giles removed mostly silly uses of activecpu from the CPU cores.
- 27th November  2008: MAME 0.128u4 Changes [Aaron Giles]: A number of people have asked about the changes that went into MAME 0.128u4, and why they were made. This article explains the motivation and reasoning behind these changes, and what still needs to be done. CPU Context Switching: When MAME was originally designed, wasn't envisioned that it would eventually be used to emulate multiple CPUs at the same time. MAME 0.1 was derived from Nicola's Multi-Pac emulator, which emulates Pac-Man based hardware, which consists simply of a single Z80 CPU. Eventually, more arcade games were discovered to run on similar hardware, and a large collection of Z80-based games were quickly supported. Of course it was soon discovered that arcade hardware is much more diverse than a single Z80. Support for additional 8-bit CPUs was added, including the 6502 and 6809. In addition, it quickly became apparent that many games had more than one CPU, so support for multiple CPUs was added. The problem is, the code in the CPU emulators for the various CPUs was not designed to run multiple instances of the same type of CPU, and so in order to make this work, a concept called context switching was introduced. Let's take the Z80 as our example. The main problem with running more than one Z80 CPU at a time is that the Z80 CPU emulator stored the state of the CPU in global variables. At the time (remember this is back in the days of the 386 and DOS), it was faster to fetch data from global variables than to allocate memory for each Z80 and reference all the CPU state via a pointer. So in order to allow the Z80 core to continue to work the way it did, we introduced context switching. With context switching, when MAME needs to stop executing one of the Z80's and begin executing one of the others, it asks the first Z80 to copy all of its relevant global variables to some temporary memory, and then copy the second Z80's state from temporary memory back into the global variables. At this point, the global variables contained the state of the second Z80, and it could be executed normally. In practice, this worked great because MAME would execute the first Z80 for many thousands of cycles, perform a context switch, execute the second Z80 for many thousands of cycles, perform a context switch, etc., so the context switch did not require a significant percentage of the total execution time, because it was only done once every few thousand emulated cycles. Where the problems arise is when we want to do "cycle accurate" execution of these two Z80's. In this case, we really want to run each Z80 for just one or two cycles at a time, and switch back and forth between them many many times per second. When we do this, we execute the first Z80 for a cycle or two, context switch, execute the second Z80 for a cycle or two, switch again, etc. In this situation, it turns out, we spend more time context switching than we do executing. The solution to this is to get rid of the context switching. To do this, we need to allocate memory for each Z80 and instruct each Z80 to reference all of its data from that memory, rather than accessing global variables. In the past, doing this was a bit of a performance penalty, but on modern processors and modern compliers, it is either a wash or marginally faster to do it the "right" way. So one of the major motivations of the changes in MAME 0.128u4 is to make changes that get rid of the CPU context switching. To do this, the interfaces to all the CPU cores had to change, and each core has to be modified to fetch its state from memory pointers instead of global variables. As of the 0.128u4 release, several important CPU cores have been converted, but more work is still pending in this direction. Memory Context Switching: In addition to the way the CPUs do context switching, the memory system in MAME also did the same thing. That is, when a CPU needs to read or write to memory, it works with the memory system to figure out whom to call to implement to read/write behavior. Whenever MAME needed to stop executing of one CPU and begin execution of another, it had to perform a memory context switch, so that memory accesses from the new CPU accessed the correct memory. In order to remove memory context switching, the state of the memory subsystem needed to be moved out of global variables and into allocated memory. The problem is that the memory system wasn't really organized in this manner, so some significant changes had to be made. In the end, I decided to expose the concept of an "address space" to describe the state of the memory subsystem. Each CPU can have one or more address spaces, and whenever the CPU needs to talk to the memory system, it hands a pointer to the relevant address space to the memory system so that the memory system knows how to map that memory access. In addition, when the memory system identifies a particular callback in a game driver to handle a read or a write, it also passes along the pointer to the address space structure, so that the game driver has the information it needs to know about handling that memory access.To make all this work, the interfaces to all the read/write handlers in the system had to change, the memory system had to be rewired, and all the CPU cores had to be modified to pass along these address space objects. As of 0.128u4, the memory context switch has been removed entirely. Completing this work is necessary before we can eliminate the CPU context switching. The "Active" CPU: One of the things that goes hand-in-hand with context switching is the notion of an "active" CPU, which is defined to be the CPU whose context is currently copied into the global variables. As we remove the need for CPU context switching, the notion of an active CPU becomes less well-defined and less meaningful. Take, for example, a CPU (we'll call it CPU A) which can write to the memory space of another CPU (call it CPU B). In a context switching system, when CPU A is executing, CPU A's state is loaded into the global variables, and all of CPU A's memory reads and writes use the global memory state information in order to know what happens when memory is accessed. Logically, CPU A is the "active" CPU. Now let's say CPU A performs some action which causes it to modify CPU B's memory space. In order to do this, we must save off CPU A's state (both CPU and memory state), and load up CPU B's state, thus making CPU B the "active" CPU. Then we perform the access to CPU B's memory space. When finished, we save off CPU B's state and restore CPU A's state so that it can continue executing. In a more modern system, when CPU A is executing, CPU A's state lives off in memory somewhere and can be accessed at any time, and its address spaces are similarly configured so that they can be accessed at any time without context switching. Now CPU A performs the same action which causes it to modify CPU B's memory space. In this case, we don't need to do any context switching. Instead, CPU A can directly modify CPU B's memory space by passing in a pointer to CPU B's address space when it performs its memory operations. It should be obvious that the big difference in these two scenarios is that there is no context switching in the second case, which should make things faster. But even more importantly, there is no "active" CPU at any point in the second case. One could argue that because CPU A is executing, that it should be designated "active"; however, even in this case, CPU B is certainly never considered active, even though it previously would have been. Looking further down the line, if we define a CPU as "active" while it is executing, we consign ourselves to only ever executing a single CPU at a time, because only one CPU can ever be "active" at a time. Thus, the right solution is to get rid of this "active" CPU notion. Unfortunately, the MAME drivers and core are peppered with references to the active CPU. These must go over time. Only when they are gone can we fully remove the context switching; as long as references to the active CPU still exist, we have to continue to context switch in order to keep up a valid definition of the active CPU. What Does This All Mean? For users, all the existing games should continue to work. Speed should be equivalent if not a bit better, especially in situations where there is aggressive context switching today. Once all the context switching is removed, MAME will be doing less work when it switches frequently between different CPUs. Longer term, however, it is likely that some of these cases will get slower again, because for many early games, the multiple CPUs work closely in concert, and to achieve the most accurate behavior, we ideally should execute each CPU one instruction at a time, alternating back and forth very quickly. Today, this makes performance very bad; with the context switching changes in, I hope it will be bearable at least for many of the 8-bit systems. For developers, these changes mean that MAME is more object-oriented. Even though MAME is written in straight C and not C++, you can imagine that core structures in the system such as running_machine, device_config, and address_space are objects, and pointers to these objects are passed in and out of most calls in the system. There should be very few if any cases where the need for an "active" CPU is necessary any more, and references to the global Machine (capital "M") object are removed in favor of pointers to that machine that are passed into your functions. The changes we are making aren't particularly revolutionary from a software architecture point of view, but they are revolutionary from a MAME design point of view. There are still many more changes to come as we push toward removing the CPU context switching altogether, but as of MAME 0.128u4 the core infrastructure is in place to make these changes happen. This particular update was the "biggie"; future updates along this path should be smaller until we are in a position to finally remove the CPU context switch for good.
- 0.128u4            : Removed emu\cpuint.c/h. IMPORTANT NOTICE: This update represents the first part of a monumental internal change within MAME in the way CPU cores are managed and how memory is addressed. There are two ways you can help get these changes sorted out. Aaron Giles converted remaining CPU cores over to new memory functions. Major cpuintrf changes [Aaron Giles]: Added a set of cpu_* calls which accept a CPU device object; these are now the preferred means of manipulating a CPU. Removed the cpunum_* calls; added an array of cpu[] to the running_machine object; converted all existing cpunum_* calls to cpu_* calls, pulling the CPU device object from the new array in the running_machine. Removed the activecpu_* calls; added an activecpu member to the running_machine object; converted all existing activecpu_* calls to cpu_* calls, pulling the active CPU device object from the running_machine. Changed cpuintrf_push_context() to cpu_push_context(), taking a CPU object pointer; changed cpuintrf_pop_context() to cpu_pop_context(); eventually these will go away. Many other similar changes moving toward a model where all CPU references are done by the CPU object and not by index. Added CPU device parameters to all CPU callbacks except for the context ones (which are going away), and the validity check. Populated tag and static_config parts of fake CPU device. Removed 'config' parameter from CPU_INIT. Modified CPU cores to pull config from the device static_config. Massive API cleanup/change [Aaron Giles]: The primary goal is that all CPU-related APIs now take a device pointer instead of an index. All functions that take a CPU device are prefixed with cpu_*. All functions that are globally related to cpu execution are prefixed with cpuexec_*. Below is a list of some of the mappings: cpu_boost_interleave -> cpuexec_boost_interleave, cpunum_suspend -> cpu_suspend, cpunum_resume -> cpu_resume, cpunum_is_suspended -> cpu_is_suspended, cpunum_get_clock -> cpu_get_clock, cpunum_set_clock -> cpu_set_clock, cpunum_get_clockscale -> cpu_get_clockscale, cpunum_set_clockscale -> cpu_set_clockscale, cpunum_get_localtime -> cpu_get_local_time, cpunum_gettotalcycles -> cpu_get_total_cycles, activecpu_eat_cycles -> cpu_eat_cycles, activecpu_adjust_icount -> cpu_adjust_icount, cpu_trigger -> cpuexec_trigger, cpu_triggertime -> cpuexec_triggertime, cpunum_set_input_line -> cpu_set_input_line and cpunum_set_irq_callback -> cpu_set_irq_callback. In addition, a number of functions retain the same name but now require a specific CPU parameter to be passed in: cpu_yield, cpu_spin, cpu_spinuntil_time, cpu_spinuntil_int, cpu_spinuntil_trigger and cpu_triggerint. Merged cpuint.c into cpuexec.c. One side-effect of this change is that driver reset callbacks are called AFTER the CPUs and devices are reset. This means that if you make changes to the CPU state and expect the reset vectors to recognize the changes in your reset routine, you will need to manually reset the CPU after making the change (since it has already been reset). Added a number of inline helper functions to cpuintrf.h for managing addresses. Removed cpu_gettotalcpu(). This information is rarely needed outside of the core and can be obtained by looking at the machine->cpu[] array. Changed CPU interrupt acknowledge callbacks to pass a CPU device instead of machine\cpunum pair. Changed VBLANK and periodic timer callbacks to pass a CPU device instead of machine\cpunum pair. Renamed all information getters from cpu_* to cpu_get_* and from cputype_* to cputype_get_*.
- 0.128u3            : Aaron Giles defined macros for all core CPU functions, along with macros for the name and for calling, in the spirit of the devintrf.h macros. Aaron Giles changed the CPU IRQ callbacks to a proper type, and added a device parameter to them. Aaron Giles added machine parameter to cpu_boost_interleave. Aaron Giles updated cpuexec to compute the "perfect" interleave value taking into account the minimum number of cycles per instruction specified by the CPU core. Updated Z80 core to indicate that the minimum cpi is 2. Fixed incorrect minimum cpi in the 68020+ cores. Atari Ace added ADDRESS_MAP_NAME macro, updated CPU cores to use it to reference internal address maps.
- 0.127u8            : Couriersud fixed assertion in cpuint.c.
- 0.127u7            : Aaron Giles fixed various games with: CPU x: PULSE_LINE used with level-detected IRQ y.
- 0.127u4            : CPU-internal regions now have priority again. Fixed mario by installing a handler in the sound_start function [Aaron Giles].
- 0.127u3            : Aaron Giles fixed memory handling of internal banks. They should be LOWER priority than the driver's memory maps. Reverted recent changes to MCS-48 core that were very hacky and which crashed many games. You can now properly override the internal memory map and do your own banking. CPUs, sound chips, devices and ROM-regions which are specified by devices now have their tags auto-prefixed with the device's tag. This allows for multiple instances to be present. For example, the PR-8210 laserdisc player has a CPU with a tag of "pr8210". When it is included as a device by a driver, the driver may tag the device "laserdisc". The resulting final CPU tag name will be "laserdisc:pr8210". Also updated the debugger expression engine to support names with embedded colons [Aaron Giles]. Aaron Giles added checks to ensure that tags used for CPUs, sound chips, regions and devices follow some basic rules: they should be less than 15 characters long, be all lower-case, and only contain letters, numbers, underscores, or dots (no spaces). This is to ensure that they can be used properly in debugger expressions and don't get too long or unwieldy to type (even 15 chars is rather long). Fixed up all tags in the system that failed these checks.
- 0.126u5            : Derrick Renaud updated structure and naming conventions of sound and CPU cores to match core conventions.
- 0.126u4            : Aaron Giles added new functions cputag_set_input_line() to assert input lines via CPU tag instead of index.
- 0.126u3            : Aaron Giles changed the auto-binding behavior of CPU regions. Previously, the first CPU would auto-bind to REGION_CPU1 (that is, any ROM references would automatically assume that they lived in the corresponding region). Now, each CPU automatically binds to the region with the same tag as the CPU itself. This behavior required ensuring that all previous REGION_CPU* regions were changed to regions with the same tag as the CPU.
- 0.126u2            : Aaron Giles changed MDRV_CPU_ADD to require a tag. Removed MDRV_CPU_ADD_TAG. Tagged all CPUs.
- 0.125u9            : Aaron Giles removed calls to memory_set_context() in favor of cpuintrf_push_context().
- 0.125u6            : Added cpu\vtlb.c/h.
- 0.125u3            : Nicola Salmoria fixed cpu_getiloops() which was not returning the correct value. Aaron Giles changed the behavior of the translate callback in the CPU interface: Added new 'intention' parameter to the translate callback to indicate read/write/fetch access, user/supervisor mode, and a flag for debugging. Updated all call sites to pass an appropriate value. Updated all CPU cores to the new prototype.
- 0.124u2            : Oliver Stoenberg added the running_machine* parameter to the function passed into cpunum_set_irq_callback() and adds the IRQ_CALLBACK macro for the callback function.
- 0.123u4            : Zsolt Vasvari removed a couple of unused items from the cpuexec_data structure.
- 0.123u2            : Atari Ace added some missing cores to cpuintrf.c.
- 0.123u1            : Atari Ace improved build independence for CPU/sound cores and fixed some MESS cores that were broken by the deprecat.h changes.
- 0.123              : Aaron Giles fixed regression in cpu_spinuntil* calls that broke a number of games.
- 0.122u8            : Aaron Giles moved cpu_getiloops() and cpu_scalebyfcount() to deprecat.h. Added #include "deprecat.h" where necessary to make this happen. Cleaned up cpuexec.c/h to latest core style. Aaron Giles removed external access to cycles_currently_ran(). Replaced use of cycles_currently_ran() in v9938 code with mame_rand(), since that is effectively the same thing.
- 0.122u6            : Aaron Giles added CPUINFO_INT_CLOCK_MULTIPLIER to support CPU clock multipliers. Updated all CPU cores to return a CPUINFO_INT_CLOCK_MULTIPLIER of 1. Changed the core to actually respect both CPUINFO_INT_CLOCK_MULTIPLIER and CPUINFO_INT_CLOCK_DIVIDER. Updated a number of drivers to use cpunum_get_clock() instead of Machine->drv->cpu[x].clock. Raw input clock speeds should now be specified for all CPUs in the MACHINE_DRIVER.
- 0.122u5            : Atari Ace added machine and cpunum parameters to INTERRUPT_GEN callbacks. Fixed several places that were not using INTERRUPT_GEN or OPBASE_HANDLER macros.
- 0.121u2            : Aaron Giles deprecated cpu_yield* functions except for cpu_yield() itself, which yields for the current timeslice only. Drivers that relied on the other yielding functions should be updated to use cpu_boost_interleave() instead, as it does not have the same negative side effects on time management.
- 0.120u1            : Atari Ace defined strict types for CPU and sound chips. Removed unnecessary cpu_ prefix from several structure members.
- 0.118u5            : Atari Ace changed all comparison for CPU and sound chip types to compare against CPU_DUMMY or Sound_DUMMY instead of 0. Also updated usages of sndti_to_sndnum() so that they use sndti_exists() where appropriate.
- 0.118u4            : Aaron Giles added new functions to the memory system to support CPU cores explicitly specifying the access mask on 32-bit and 64-bit data bus systems. This enables the MIPS core to handle SWL/SWR and SDL/SDR without a read/modify/write cycle. Updated the C and DRC MIPS cores to use this new mechanism.
- 0.116u3            : Zsolt Vasvari changed all CPU cores' internal timers to the mame_timer* functions as well as the remaining couple of core files that still used timer_alloc(). After this, none of the emu\* files have any old style timing code left.
- 0.116              : Atari Ace improved independence of CPU and sound core variants in order to make them more properly separated by the existing compile-time flags.
- 0.114u4            : Aaron Giles changed cpu_boost_interleave(), cpu_spinuntil_time() and cpu_yielduntil_time() to take mame_time parameters instead of doubles. Changed MDRV_CPU_PERIODIC_INT() to take a frequency parameter instead of a time. This is converted internally to a subseconds value.
- 0.113u4            : Now enabling all CPUs by default, which helps ensure that even unused CPUs get updated with core changes, etc [David Haywood]. Zsolt Vasvari updated the Leland driver to the new video timing routines, as well as the remaining drivers. Removed now-obsolete old timing routines from cpuexec.
- 0.111u2            : Nathan Woods added the remaining MESS CPU cores to MAME. They are disabled in the build, but will be maintained along with the MAME CPU cores as future changes are made.
- 0.111u1            : Widespread cleanup of disassemblers and CPU interfaces across the project [Giuseppe Gorgoglione]: Removed from many disassemblers the dependency on eainfo.h. The output produced by those disassemblers has been checked to be the same as before. Extensively rewrote the 6309dasm.c and 6809dasm.c disassemblers. Fixed minor bugs in the v810 and hd6309 interfaces. Removed m68000\cpudefs.h. This was used by the old assembly m68000 core. Removed from m68kmame.c and m68kmame.h as well many references to the old core (e.g A68K0, A68K2, etc.). Properly typedeffed the cpuinfo union, this affects cpuintrf.h and many, many, other files. Converted 8051dasm.c, m65ce02.c and t11dasm.c to use cpuintrf_temp_str() instead of local string pools. Moved the info.s = cpuintrf_temp_str() initialization to: activecpu_get_info_string(), cpunum_get_info_string() and cputype_get_info_string(). This allows us to remove tons of info->s = cpuintrf_temp_str() statements from the xxx_get_info() accessors of every CPU core, making them more readable.
- 0.109u4            : Aaron Giles removed obsolete CPUINFO_PTR_REGISTER_LAYOUT and CPUINFO_PTR_WINDOW_LAYOUT data items.
- 0.104u8            : Nathan Woods added cpunum_set_clock_period(), a variation of cpunum_set_clock() that takes subseconds_t, providing better granularity.
- 0.104u6            : Atari Ace and Aaron Giles reduced global namespace pollution by marking many global functions explicitly static, especially in the CPU cores. Nathan Woods added validity checks to ensure CPU core completeness.
- 0.104u5            : Atari Ace and Aaron Giles cleaned up include files in CPU/sound cores. CPU cores should generally only need to include cpuintrf.h. Sound cores should generally only need to include sndintrf.h. Made it a fatal error to request operations on invalid sound/CPU indexes. These have been logged to the error.log in the past, but really need to be cleaned up. Added a new function safe_activecpu_get_pc() that can be used when logging PCs to smartly detect whether or not it is safe to call activecpu_get_pc(). Changed CPU init/reset callbacks. The init callback now accepts a number of parameters, including the CPU index, the clock, a generic configuration parameter, and a pointer to the IRQ callback. The reset callback no longer takes any parameters (the configuration parameter has been moved to the init callback). And the IRQ_CALLBACK getter/setter has been removed since this is now set up once at initialization time [Aaron Giles].
- 0.104u2            : Aaron Giles removed scrbitmap and memory_region from the global Machine structure. There is no need for non-core systems to access these directly.
- 0.103u5            : Added cpu\cpu.mak.
- 30th January   2006: R. Belmont - A couple of people have recently asked for an introduction to how emulation actually works at a lower level. Introduction: At their lowest level, digital computers run programs that composed ultimately of a stream of numbers (this is called machine language). For a given CPU chip, certain numbers always mean certain things. For instance, on a 6502, the number '105? translates to 'ADC' or Add with Carry. It's important to realize that every time the 6502 encounters instruction 105 it will always perform the same addition operation. You could, in fact, write a valid program composed entirely of instruction 105, although it wouldn't be very interesting. Incidentally, the 3-letter code for the instruction ('ADC' in this case) is what is called assembly language, sometimes abbreviated ASM. Most programs for 8 bit processors were written in this manner - it's somewhat cryptic, but it also gives you full control with minimum size. The number itself is known as an opcode (operation code). Inside the CPU there's hardware to fetch the next instruction number from memory, figure out what it is, and execute it. Now, there's nothing digital hardware can do that digital software can't also do. So emulation starts off with a block of code (a CPU core) which does the same thing for a given type of processor, like a 6502 or Z80. In C-like pseudo-code, it would look something like this: CPU_Start: opcode = fetch_next_opcode(); if (opcode = 105) do_addition_with_carry(); else print 'ERROR: Unknown opcode!'; goto CPU_Start;  . That is remarkably close to how most real CPU cores work, incidentally. The major difference is ususally that a C switch statement is used to efficiently go to the right place for each opcode. Yeah, but where's the wakka-wakka come from? Each CPU has a limited amount of memory it can talk to. For 8 bit CPUs this was usually 64K (65,536 units). This means that each unit of memory has an address (similar to the one on your home) from 0 to 65,535. Some of this memory must be dedicated to the program itself (usually stored in ROMs). Some must be dedicated to a work area for the program (so-called work RAM). But addresses don't have to be just memory - they can also be devices. For instance, in Pac-Man, one set of memory addresses controls the horizontal and vertical positions of Pac-Man. By writing different numbers there, the video hardware will dutifully draw Pac-Man at various places on the screen without further CPU intervention. (This is quite a time-saver for the CPU!) Such special addresses are called registers or sometimes switches. For emulation, this is relatively easy. CPU cores don't want to tie themselves to one machine, so they call out to other code in the emulator (sometimes called the memory manager or memory mapper). To read a memory location, they call out with an address and expect to get an answer back from elsewhere in the emulator. To write a memory location, they call out with the address and the new number to place at that address. Code elsewhere in the emulator figures out for the current game if that address is work RAM, program storage, or something else entirely. The complete set of valid memory addresses for a machine is called a memory map. A simplified real-world example is Pac-Man once again. Addresses 0 to 16,383 are program storage (ROM chips in this case). Addresses 20,464 through 20,479 control the screen positions of Pac-Man and the ghosts. Address 20,480 contains the current status of the joystick. And so on. If you respond properly to all of the necessary addresses you get a running game. That is how basic emulation works.
- 0.103u3            : Nathan Woods added CPUINFO_PTR_DEBUG_SETUP_COMMANDS: a callback that is invoked to tell CPU cores to set up commands specific to a CPU core.
- 0.102u5            : Nathan Woods changed activecpu_dasm() and activecpu_dasm_new() so that they "function" even if the getinfo handler does not specify CPUINFO_PTR_DISASSEMBLE nor CPUINFO_PTR_DISASSEMBLE_NEW.
- 14th December  2005: Aaron Giles - CPU Scheduling in MAME (part 4): Part 3 of this series discussed the problems involved in scheduling communication from a "later" CPU (one scheduled later in the round-robin order) to an "earlier" CPU. Since the MAME scheduler does not support changing the order of CPU execution within the round-robin, the only options to improve latency are to increase the interleave factor, either globally or temporarily. There are two other means of altering the scheduling of CPUs during execution. These are the cpu_yield() and cpu_spin() calls. Both of these methods have been abused often in the past due to a lack of understanding about how they actually work, so now is the time to set the record straight. What cpu_yield() does is end the current CPU's timeslice early. It does not affect the execution of any other CPUs in the system. Let's look at an example. Again we'll say that CPU #0 is running at 14MHz, and CPU #1 is running at 2MHz. There is a scheduled timer that is set to fire at time 0.000150. So we begin executing CPU #0 for 2100 cycles, but this time, partway through its timeslice (say, 1250 cycles in), one of its read/write handlers calls cpu_yield(). This aborts the current timeslice, leaving CPU #0's local time set to 0.000089286. Now CPU #1 gets its turn to execute. Normally it would have executed for its entire timeslice up to time 0.000150; however, since the previous CPU stopped early, the scheduler only schedules up to the time when the previous CPU stopped execution. This equates to 0.000089286 * 2,000,000 = 179 cycles. Let's say it executes for 180 cycles, giving it a local time of 0.00009. At this point, we tell the timer system that the global time is 0.000089286, but there are no timers ready to fire until 0.000150, so nothing happens, and the round robin begins again, scheduling each CPU to execute until 0.000150. Simple enough; this looks like it is the equivalent of setting an "instant" timer that goes off. Ah, but there is an additional side-effect that is not immediately obvious. cpu_yield() belongs to a class of synchronization calls: cpu_yielduntil_trigger(), cpu_yielduntil_int(), cpu_yielduntil_time(). All of these perform a cpu_yield() but have the additional side effect that the CPU is descheduled until the specified trigger/interrupt/time is signalled. This has some interesting consequences. Let's look at the previous example again, except that instead of calling cpu_yield(), we will call cpu_yielduntil_time(0.00005). This is essentially telling the scheduler to not only give up our timeslice, but remove us from the scheduling equation altogether for the next 50 microseconds. So: CPU #0 executes as before, ending its timeslice early at time 0.000089286 by calling cpu_yielduntil_time(0.00005). This aborts its timeslice and also internally sets a timer to go off at the current local time (0.000089286) plus 0.00005 seconds, or at time 0.000139286. Then CPU #1 executes up to the time when the previous CPU stopped execution, which is time 0.000089286. This is again 179 cycles, so we run the CPU, and it comes back claiming 180 cycles, making its local time now 0.00009. The timer system is called, but nothing is ready to fire, so the round-robin starts over. This time, when we ask the timer system when the next timer is set to go off, it reports 0.000139286, due to the timer that was set in response to cpu_yielduntil_time(). Now the round-robin begins again, except that CPU #0 is completely removed from the scheduling, so we skip right to CPU #1. Computing cycles: ((0.000139286 - 0.00009) * 2,000,000) = 99 cycles. We run CPU #1 with that request, and get back 101 cycles, putting its local time at 0.0001405, and the round-robin ends. At this point, the timer set in cpu_yielduntil_time() fires, and it enables CPU #0 to be scheduled for the next round. However, notice that the two CPUs are now signficantly out of sync with respect to each other. CPU #0 is still stuck back at local time 0.000089286, while CPU #1 is already at 0.0001405. There is still a timer set to go off at 0.000150, so that will be used as the target for the next round-robin. For CPU #0, that next pass at execution will run 0.000150 - 0.000089286 = 0.000060714 seconds, or 850 cycles, which is much longer than normal because it needs to execute more cycles to catch up to the target time. CPU #1, on the other hand, is almost at the target time, and only needs to execute 19 cycles to reach the target. So the big side-effect of using cpu_yielduntil_time() in this manner is that you cause the yielding CPU to get behind in the scheduling process. Repeated use of the yield calls can put the CPU farther and farther behind, which can result in some seriously wacky behavior. For example, since CPU #0 is starting out at a time significantly behind CPU #1, if it sets a timer, that timer could already be in the past relative to CPU #1. Analagous to the cpu_yield() calls are the cpu_spin() calls. These calls operate exactly the same as their partners, except that the local time for a spinning CPU is automatically bumped to the current global time at the end of each timeslice. This means that the CPU doesn't get behind; rather, it effectively "burns" all of the remaining cycles in a way that the spinning CPU will never get them back. The thing that is confusing to people is this: Yielding is a form of synchronization. Spinning is a hack. Even though they look similar, they are used for two very different purposes. There is really only one legitimate reason for spinning, and that is for adding spin loop optimizations to games that are doing no useful work while waiting for some event. If the event happens at some known time in the future, use cpu_spinuntil_time(). If that event is an interrupt, use cpu_spinuntil_int(). If that event is some other externally-driver factor, use cpu_spinuntil_trigger(), and then call cpu_trigger() when the event occurs. If you find yourself using a cpu_spin() call for synchronization, you are masking some other problem in the emulation system. Finally, a word about triggers. Triggers are simply a signalling mechanism that is used to indicate that a particular event has occurred. A trigger is identified by an integer, which is essentially a random number that is chosen by the person creating/using the trigger. There is no collision detection or means of allocating them (though there probably should be). To signal a trigger, you simply call cpu_trigger() with the trigger identifier. Triggers are mostly used in conjunction with the yield and spin calls to block execution of a CPU until the trigger is signalled. It's really no more complicated than that.
- 12th December  2005: Aaron Giles - CPU Scheduling in MAME (part 3): Part 2 of this article discussed the cooperation between the scheduler and timers that enables events to be synchronized between multiple CPUs. In short, when a CPU needs to signal an event to another CPU, it sets an "instant" timer which causes all CPUs to execute up to that point in time. Then, the timer callback is fired and the event can be signalled safely and accurately. The big problem with this approach is that it really only works well if the target CPU has a local time that is less than the current time. The example we looked at last time had CPU #0 signalling an interrupt to CPU #1. Since the round-robin ordering causes CPU #0 to execute first, we were (pretty much) guaranteed that when CPU #0 wanted to issue its signal, its local time would be greater than the local time of CPU #1. But what happens when CPU #1 wants to send a signal back to CPU #0? Taking the naive approach, and returning back to our previous example, let's say that we have CPU #0 running at 14MHz, and CPU #1 running at 2MHz. There is a scheduled timer that is set to fire in 150usecs, or at time 0.000150. So we begin executing CPU #0 for 2100 cycles, and it completes its timeslice normally, returning 2112 cycles, meaning its local time ends up being 0.000150857. Now we execute CPU #1 for its timeslice, which turns out to be 300 cycles as in the example from Part 1. However, this time, at 50 cycles into execution, CPU #1 decides that it needs to send a signal to CPU #0. So, rather than sending the signal immediately, it sets an instant timer to go off immediately, at time = 50 / 2,000,000 = 0.000025. This also has the side effect of aborting the execution of CPU #1 and ending the current round robin. So, at this point, the scheduler contacts the timer system and indicates that the global time should be updated to the minimum of all the CPUs' local times, which would be 0.000025. The timer system sees that there is a timer scheduled to go off at 0.000025, and fires it; in the callback, we send our signal to CPU #0. But wait, isn't CPU #0's local time already way off in the future at 0.000150857? Yep. This means that the signal arrives much later that it should have (0.000150857 - 0.000025 = 0.000125857 seconds, or 1762 CPU cycles too late), and we have lost our synchronization. How do we solve this problem? Well, we could have swapped the execution order, making the scheduler execute CPU #1 first. But in order to do that, we would have needed to predict the future once again. If the communication details between two CPUs are well-understood and follow strict rules, then it might be possible to make this sort of fine-grain scheduler tweaking work. Up to now, however, there has not been a good case made for running out-of-order like this. And so the round-robin order remains fixed. Traditionally in MAME - in fact, even before I ever wrote the timer system and the scheduler - the way this sort of communication issue was resolved was to increase the interleave factor between CPUs. The interleave factor was a number that indicated how frequently the CPUs in MAME were configured to re-synchronize their execution times each video frame. (This was specified in terms of video frames originally because all timing in MAME was done relative to video frames before the timers existed). The interleave factor is specified globally in MAME's machine driver structure. It is implemented by computing how many times per second the synchronization is implied (for example, an interleave of 100 with a game that runs at 60Hz, would imply 6000 synchronizations per second), and simply setting a timer with a NULL callback to go off at that rate. No callback is needed because no action needs to be performed; rather, the mere existence of the timer firing at that rate effectively brings all CPU into sync at that frequency. Back to our example, let's say our game runs at a 60Hz frame rate, and we bump the interleave factor to 500. That will ensure for us 500 * 60 = 30,000 synchronizations per second, or once every 0.000033333 seconds. This means that there will be a timer set to fire every 0.000033333 like clockwork. So let's re-evaluate what happens and why the interleave improves things. Remember that the timer system figures out when the first timer is set to fire. Previously, our first timer was going to go off at 0.000150, but now we have this interleave timer which is going to go off even earlier at 0.000033333, so that determines what our first timeslice will be. Taking 0.000033333 * 14,000,000 gives us 467 cycles, so we execute CPU #0 for 467 cycles. Let's say it comes back having executed 470 cycles. That puts our local time at 0.000033571. Now we execute CPU #1 for its timeslice, which turns out to be 67 cycles with the new timer in place. Again, at 50 cycles into execution, CPU #1 decides that it needs to send a signal to CPU #0. So we set an instant timer to go off immediately, at time = 0.000025. This ends the round robin, and the timer system is notified just as before. This time, however, CPU #0 receives the signal at 0.000033571, which is only 0.000008571 seconds or 120 CPU cycles too late. This is a big improvement over 1762 cycles, but it's still not perfect. By increasing the interleave we could make it even better if we wanted. In fact, the interleave factor effectively determines the worst case latency for a signal from one CPU to another. Could we make it perfect? Well, actually, we could. If we set up a timer to run at a frequency of 2,000,000 times per second (the clock speed of the 2nd fastest CPU), then we would get as close as possible to perfect interleave. CPU #0 would never execute longer than a single clock on CPU #1, so when CPU #1 sent a signal, it would hit CPU #0 at the same time as the end of that particular clock cycle on CPU #1. To set the interleave that high would require specifying an interleave of 33333 in the game's machine driver. Try it sometime. Things get very very slow. This is because a context switch between two CPUs is not free, and when you try to set up a timer to run that frequently, you spend all your time context switching and very little time actually executing any code on the CPUs. The ideal solution to this is to detect when it is likely that CPU #1 needs to signal CPU #0, and temporarily boost the interleave so that, at least for a while, synchronization is guaranteed. This is the purpose of the cpu_boost_interleave call. It takes two parameters. The first parameter is how frequently the timer should fire - note that it is not specified in terms of video frames, but rather as an absolute time. You can also pass 0 here, which causes the system to automatically pick the clock rate of the 2nd fastest CPU, which will give you ideal synchronization. The second parameter specifies how long, in seconds, you want to maintain this level of interleave. Generally, you don't want it on too long. Most commonly, games in MAME are set up so that "master" CPUs are run first, and communication tends to go from earlier CPUs to later ones in the round-robin order. Interleave boosting is used in these cases when the "slave" CPUs need to send some information back, and the master is sitting there waiting for a response. Keep in mind that none of these systems are perfect, yet they have been successfully used for many thousands of different platforms.
-  9th December  2005: Aaron Giles - CPU Scheduling in MAME (part 2): Part 1 described the basic round robin scheduling algorithm used by MAME when running multiple CPUs. It can be summarized as: 1. Determine when the next timer is going to fire. 2. Loop over each CPU: Compute the difference between this time and the CPU's local time, execute for at least that long and count up the cycles executed and compute the CPU's local time. 3. Return to step 1. Now this is all fine and great when you can predict the future - notice that step 1 requires you to do just that. And many events in MAME are in fact periodic and predictable in nature, so this works out ok as a starting point. One very common event that isn't predictable, however, is communication between two CPUs. In fact, this is one of the main reasons I added the timer system to MAME in the first place. Let's look at an example of what can go wrong with CPU communication when there is no synchronization. Going back to our previous example, we have CPU #0 running at 14MHz, and CPU #1 running at 2MHz. We also know there is a timer that is going to fire in 150usecs, or at time 0.000150. So we begin executing CPU #0 for 2100 cycles. This time, however, the code executing on CPU #0 decides to signal an interrupt to CPU #1 at a point 1500 cycles into its execution (at time = 1500 / 14,000,000 = 0.000107143). With no synchronization, the interrupt is signalled (generally some state is set in CPU #1's context indicating that an interrupt is pending), and CPU #0 continues executing until the end of its timeslice. When it's done, it has executed 2112 cycles like before, and its local time is 0.000150857. Now it's time to execute CPU #1 for the first time. Right away, however, it notices that it has an interrupt pending, so it may process the interrupt, and then continue executing for the rest of its timeslice normally. So what's the problem? Well, CPU #0 signalled the interrupt at local time = 0.000107143, but CPU #1 acted on the interrupt at local time = 0 (right at the start of its timeslice). Let's say CPU #1 is a sound CPU; maybe the music started just a fraction of a second too early as a result. Worse, let's say CPU #1 was busy doing something else and wasn't ready to handle the interrupt just then. Maybe you've crashed the code or altered its state in a bad way. What might not be immediately obvious in looking at the timer system is that most of the timers that are created are set to fire instantly. If you've even seen timer_set(TIME_NOW, ...) in MAME, you've seen a request for a instant timer. This is done because timers are effectively synchronization barriers. The whole scheduling algorithm is based upon executing all the CPUs until the time when the next timer is set to fire. Setting up an instant timer is essentially asking the scheduler and the timer system to work together to bring all the CPUs up to the current instant in time before calling the function you provide it. How does this help the interrupt signalling issue described above? Let's say that when CPU #0 decides to signal an interrupt to CPU #1, it doesn't signal it immediately. Rather, it sets an instant timer to go off. Since the current time = 0.000107143, that is when the timer is scheduled to fire. But timers don't fire until the end of the round robin sequence, and then only after all CPUs have reached that time. So even if we were at the end of the round robin, it still wouldn't be able to fire just yet because CPU #1 is still sitting back at time = 0. We have another issue here as well. CPU #0 has just set a timer to go off at time = 0.000107143, but it also still has 600 cycles left to execute before the end of its timeslice. We could potentially allow it to complete its run, ending up at time = 0.000150857. But then when we executed CPU #1, we would only execute up until the time the timer was set to go off (at 0.000107143), and the two CPUs would be significantly out of sync. Rather than letting that happen, whenever a new timer is created during a timeslice, and it is scheduled to fire before that timeslice is up, the timer system and the scheduler work together to abort the execution of that CPU. Generally, this means that the CPU will stop executing at the end of the current instruction, and return control back to the scheduler. In this case, since CPU #0 set the timer during its timeslice, and since the timer is scheduled to fire during the timeslice, execution on CPU #0 is aborted with 600 cycles left to go. The scheduler knows that CPU #0 only executed 1500 of its requested 2100 cycles, and updates the local time of CPU #0 to be 1500 / 14,000,000 = 0.000107143. Now CPU #1 gets its chance to execute. 0.000107143 * 2,000,000 = 215 cycles, so we execute CPU #1 for that long. When it is finished, maybe it actually executed 217 cycles, so its local time is 0.0001085. The global time is updated to the minimum of the CPU times, in this case 0.000107143, and the timer system is asked to process timers. At this point, the callback for the instant timer we set is called, and in that callback is where we signal the interrupt to CPU #1. Returning to the scheduler, we look into the future and see that there is still a timer set to go off at time = 0.000150, so we compute cycles for CPU #0 (600) and execute. After CPU #0 is done, we switch to CPU #1 and start executing. CPU #1 now has an interrupt pending, but it has been signalled at the correct local time (or close to it, at 0.0001085), and synchronization between the two CPUs has been achieved. What happens when CPU #1 tries to talk back to CPU #0? Find out in part 3, which will deal with this complex issue.
-  7th December  2005: Aaron Giles - CPU Scheduling in MAME (part 1): Multi-CPU games in MAME are scheduled in a round-robin fashion. The order of the round robin execution is strictly defined by the order of the CPUs in the machine driver. There is no way to alter this order; however, you can affect the scheduling by suspending CPUs or adjusting the granularity of the scheduling. That kind of stuff will be discussed more in part 2. The scheduler relies on the timer system, which knows when the next timer is scheduled. All scheduling happens between firings of timers. Similarly, timers are never fired while a CPU is executing. This important to keep in mind. The scheduler queries the timer system to find out when the next timer is set to fire. It then loops over each CPU, computes how many cycles that CPU needs to execute to reach that time, and runs the CPU for that many cycles. When the CPU is finished executing, it returns how many cycles it actually executed. This information is accumulated and converted back into a "local CPU time", in order to account for overshooting or early exiting from the CPU core. For example... Let's say that CPU #0 is running at 14MHz, and CPU #1 is running at 2MHz. Let's also say that we're starting at time 0 (local CPU time for both CPUs is 0), and a timer is scheduled to go off in 150 microseconds (time = 0.000150). The round robin logic will start with CPU #0 and compute how many cycles it needs to execute to reach 0.000150. Since we're starting from time 0, we need to execute for at least 150usec. 0.000150 * 14,000,000 = 2100 cycles. It then calls that CPU's execute function with 2100 cycles; when the execute function returns, it specifies how many cycles it actually ran. Let's say it returns saying that it ran 2112 cycles. (CPU cores generally overshoot because many instructions take more than 1 cycle each to execute.) 2112 cycles puts the local CPU time for CPU #0 at 0.000150857 (2112 / 14,000,000). Now it's time for CPU #1 to execute. 0.000150 * 2,000,000 = 300 cycles. So we call execute(300), and get back 300 cycles. CPU #1 local time is now 0.000150. At this point, both CPUs have executed, and both their local times are greater than or equal to the target time 0.000150. So the scheduler calls the timer system to let it process the timers. When finished, it again asks when the next timer will fire. Let's say it's set to fire exactly 150usec later at time = 0.000300. Back to the scheduler, we start the round robin over again. CPU #0 needs to execute (0.000300 - 0.000150857) * 14,000,000 = 2088 cycles to reach a local time of 0.300. Note that we took into account the extra cycles that we executed last time. So we call execute(2088), and we get back, say, 2091. That puts our local time at 0.000150857 + 0.000149357 = 0.000300214. Now it's CPU #1's turn. (0.000300 - 0.000150) * 2,000,000 = 300 cycles again. Calling execute(300), we get back 302 cycles. This puts CPU #1's local time at 0.000150 + 0.000151 = 0.000301. Again, both CPUs have executed, both their local times are greater than or equal to 0.000300, so we contact the timer system to let it run its timers. This procedure continues throughout the execution of the system. Some things to note here. After the first round robin, CPU #0's local time was slightly ahead of CPU #1's local time. After the second pass, the opposite was true. Thus, you can't be guaranteed at any time that any given CPU is ahead of or behind the others. Also, be sure to keep in mind that each CPU has its own local time. The timer system also has a "global time". The global time is generally the minimum of all the CPU local times. Which time is used when calling the timer system depends entirely upon which CPU context is currently active. If a CPU context is active (generally true only while a CPU is executing; for example, in read/write callbacks), then all timer operations treat the "current time" as the CPU local time, accounting for all cycles that have been executed on that CPU so far in the current timeslice. If a CPU context is not active (all other times; for example, in timer callbacks), then the "current time" is the global time. The global time is updated at the end of each timeslice before the scheduler calls into the timer system to let it run its timers, and that global time is used to dispatch the timers.
- 0.101u3            : Aaron Giles changed the way encrypted CPU memory is allocated and managed. Previously, memory_set_opcode_base() was used to set a single pointer to the decrypted opcodes; however this presented a number of limitations. Now that all RAM and ROM-like regions are assigned banks, the memory system now tracks decrypted opcodes per bank. For implicit banks (marked RAM or ROM in the memory map), a new function memory_set_decrypted_region() configures which areas of the address space contain decrypted opcodes and where the decrypted opcodes live. For explicit banks, there is a new function memory_configure_bank_decrypted() which operates identically to memory_configure_bank() but specifies a pointer to the decrypted opcodes on a per-bank basis. Updated all drivers using the old mechanism to the new mechanism and removed the old system.
- 0.101u2            : Aaron Giles added support for logical mapping to the CPU interfaces and debugger. CPUs that have an MMU now need to support several new interface bits, including a logical address mask and page size for each address space, as well as a new translate function. There is also a new disassembler interface that should be used going forward, which will make it much simpler to keep the disassemblers standalone and not dependent on MAME functions for opcode accesses. Converted the i386 core to use the new interfaces.
- 0.99u7             : Aaron Giles fixed crash when running games whose CPU core did not support save states.
- 0.95u4             : Aaron Giles removed CPU_16BIT_PORT hack; this means that all Z80 drivers must explicitly clamp their I/O space address space to 8-bits via ADDRESS_MAP_FLAGS(AMEF_ABITS(8)). Removed CPU_AUDIO_CPU; it was no longer having any effect, and it was a poor substitution for documentation since it wasn't used consistently across all games.
- 0.95               : CPUs tagged as audio CPUs are no longer disabled when sound is turned off [Aaron Giles].
- 0.94u2             : cpuintrf.c cleanup [Aaron Giles].
- 0.81u7             : Ville Linde added a check enabled when MAME_DEBUG is defined that raises an error if the CPU core executed a negative cycle count (src\cpuexec.c).
- 0.81u5             : Aaron Giles removed vblank callback logging left in by mistake.
- 0.80               : Nathan Woods introduces cpu_getscanlinetime_mt() and cpu_getscanlineperiod_mt(); variants on their namesake calls except they return mame_time instead of double (src\cpuexec.c).
- 0.79u3             : Nathan Woods added a new consistency check on CPUs to check for the existence of certain get_info cases needed for debugging. This consistency check is currently only enabled for MESS (src\mame.c).
- 0.79u2             : CPU specific memory map fix [Aaron Giles]. Nathan Woods added a new consistency check for drivers that use non-existent CPU cores (src\mame.c).
- 0.79u1             : Support for CPU-specific internal memory maps [Aaron Giles].
- 0.78u4             : Address spaces are now determined dynamically based on whether a given CPU returns a non-zero value for the address bus width for a given space [Aaron Giles].
- 0.78u3             : smf fixed cpuintrf compile bug with DJGPP.
- 0.78u2             : The significant change in this release is the way CPUs are defined and referenced. Previously, the file cpuintrf.c contained a huge table with many pointers into each CPU, and a bunch of data about each CPU type. This was problematic to maintain, and left a bunch of data out of the CPU core to be defined by MAME instead. The new release defines a new function that every CPU core must implement, of the form: <cputype>_get_info(UINT32 state, union cpuinfo *info). This is the only public function defined for each CPU core. The table in cpuintrf.c now simply consists of an enumerated index for the CPU type, followed by the pointer to the actual CPU's get_info function. The flexible get_info function is then responsible for providing pointers to all the remaining functions. In addition, the number of other functions has been greatly reduced: void set_info(UINT32 state, union cpuinfo *info); void get_context(void *context); void set_context(void *context); void init(void); void reset(void *param); void exit(void); int execute(int cycles); void burn(int cycles) and offs_t disassemble(char *buffer, offs_t pc). The old functions get_reg, set_reg, set_irq_line, set_irq_callback, info, get_cycle_table, set_cycle_table have all been incorporated into get_info and set_info. All the existing MAME CPU cores have been updated to work with this new system. Also, for most cores, all functions and the icount global variable have been made static apart from the get_info function. A number of selectors for get_info/set_info have been defined to return information about the CPU, including the address and data bus sizes for all address spaces, clock dividers, IRQ line size, context size, etc. NOTE TO PORTERS: the cpuintrf[] array is now populated dynamically by the cpuintrf_init() function. This means that if you have informational code or other code that relies on the CPU information being present (i.e., if you call any of the cputype_* functions) before calling run_game(), you must manually call cpuintrf_init() first. Don't worry, it is safe to call cpuintrf_init() multiple times.
-  8th January   2004: smf sent in a small fix for compiling cpuintrf.c in DJGPP.
- 0.76u2             : Aaron Giles added new function: activecpu_eat_cycles(cycles), needed for idle skipping in certain situations.
- 0.75               : Nathan Woods added a call cpuintrf_set_dasm_override() that gives drivers the ability to customize disassemblies. This probably isn't very useful for MAME, but it is useful for MESS for things like software interrupts used for BIOS calls. Aaron Giles changed scanline timing to use floor() to get consistent results and fixed bug in time computation if requesting a scanline in the next frame.
- 0.69a              : A number of changes to the timer system [Aaron Giles]: All the CPU scheduling has moved into cpuexec.c and been taken out of timer.c. A number of bugs relating to time tracking for suspended CPUs have been fixed. A side effect of all this is a change in the behavior of the CPU scheduling. For the most part, games are fine with this. However, there were a few exceptions: taitosj.c: timing of the MCU communication broke, arkanoid.c: timing of the MCU communication broke and harddriv.c: stunrun timing glitches, racedriv/steeltal/hdrivair broken. There may be more, but I haven't found them yet. The first two problems have been fixed, as has racedriv, but steeltal, hdrivair and stunrun still have issues. Oh, one other useful function I added is this: cpu_boost_interleave(double timeslice_duration, double boost_duration). You call this if you need to temporarily crank up the interleave for a short period of time in order to get CPU synchronization working. I used this in arkanoid and taitosj to get the MCU communications working. For example, you could say: cpu_boost_interleave(TIME_IN_USEC(1), TIME_IN_USEC(100)) which would interleave the CPUs on 1 usec boundaries for the next 100 usecs. Even more useful is this: cpu_boost_interleave(0, TIME_IN_USEC(10)). A very small value (0) for the first parameter means "use perfect synchronization", which should guarantee cycle-accurate synchronization for the specified duration. Note that this is *really* slow, so you don't want to be doing it too much! Let us know ASAP if anything else is broken as a result of this update.
- 0.58               : Added src\cpuint.c/h. The old interrupt system has now been made officially obsolete. This means that the function cpu_cause_interrupt() is no longer available; you must use cpu_set_irq_line() or cpu_set_irq_line_and_vector() instead. It also means that a number of old/conflicting constants have been removed. In addition, interrupt generation callbacks for CPUs no longer return an IRQ line or vector. Instead, the interrupt callback must actively cause the interrupt via cpu_set_irq_line(). All existing drivers have been updated to these changes. New interrupt callback functions: nmi_line_pulse(), nmi_line_assert(), irqn_line_hold(), irqn_line_pulse(), irqn_line_assert(). These functions replace the old interrupt() and nmi_interrupt() callbacks and can be used directly as interrupt callbacks. The following old functions and macros have now been fully deprecated: cpu_get_pc() -> activecpu_get_pc(), cpu_get_sp() -> activecpu_get_sp(), cpu_getpreviouspc() -> activecpu_get_previouspc(), cpu_get_reg() -> activecpu_get_reg(), cpu_set_reg() -> activecpu_set_reg(), cpu_set_op_base() -> activecpu_set_op_base(), cpu_get_pc_byte() -> activecpu_get_pc_byte(), READ_WORD -> (no equivalent) and WRITE_WORD -> (no equivalent).
- 29th August    2001: Aaron Giles sent another CPU interface cleanup update, removing redundant code and improving the interface.
- 0.54               : Added src\cpuexec.c/h. Major changes to the CPU interface. As a result of this, some games are temporarily broken, most notably CPS2 [Aaron Giles].
- 22nd August    2001: Aaron Giles started cleaning up the CPU interface and fixing obscure bugs in it.
- 14th November  2000: Aaron Giles fixed a bug in CPU interface that caused suspended CPUs to never get released.
- 0.37b7             : Important for porters: The HAS_XXX constants for cpu and sound emulation are no longer #defined in cpuintrf.h if they were not already defined. They are set by the makefile (rules.mak). If you are not using that in your port, you'll have to make sure that all constants are initialized somewhere.
- 0.37b5             : New functions in cpuintrf.c: cpu_get/set_cycle_table(), cpu_set_irq_callback() + New CPU cores and fixes to old ones [Juergen Buchmueller].
- 20th July      2000: Juergen Buchmueller submitted some new functionality to the CPU interfaces.
- 0.36               : Juergen Buchmueller added cpu overclocking control to the on screen display (available only when cheats are enabled).
- 0.36RC1            : Lots of CPU fixes and cleanup [Juergen Buchmueller].
- 0.36b12            : Juergen Buchmueller added cpu overclocking control to the on screen display.
- 0.36b7             : Replaced cpu_reset() with cpu_set_reset_line(). cpu_set_reset_line(num,PULSE_LINE) is equivalent to the old cpu_reset(). ASSERT_LINE resets the cpu and halts it. CLEAR_LINE restarts it. This avoids the need to call cpu_halt() in most cases [Nicola Salmoria].
- 0.35b10            : Removed src\types.h.
- 0.35b7             : Major overhaul to the CPU cores. Note that the debugger doesn't work in this release [Juergen Buchmueller].
- 0.35b6             : Major changes to the whole CPU interface and cores [Juergen Buchmueller]. Note: The CPU cores have been completely torn apart and rearranged in this release. Don't be surprised if a large number of games don't work at all. For example, Twin Cobra doesn't boot, and most (all?) of the games using a 6803 lock up (ctrl-alt-del needed).
-  2nd March     1999: Eric Hustvedt updated the CPU interface, resulting in a little speed boost.
- 0.35b2             : The CPU cores are still in a state of flux. Most of the problems in 0.35b1 have been fixed, however some still remain (e.g. Gauntlet doesn't accept coins and Exterminator crashes).
- 0.35b1             : New CPU interrupt system. The functions cpu_set_irq_line() and cpu_set_nmi_line() can be used to precisely control the status of the CPU physical lines, instead of using the limited control granted by cpu_cause_interrupt() [Juergen Buchmueller]. Nicola Salmoria added a horrible dirty hack to allow opcode encryption on CPUs other than the main one. It's really ugly and needs a rewrite, but it's enough to get sound in Pocket Gal and The Real Ghostbusters.
- 0.31               : New function: cpu_setOPbaseoverride(). This function is called whenever the code jumps into an area of memory that is in a different bank than the current one (i.e., the code jumps from RAM to BANK1). It takes the destination PC as a parameter and returns a new PC which is to be used to determine which bank to switch to by the standard function. The main purpose of adding this is for slapstic coding. Empire Strikes Back and at least one of the System 1 games jumps to code in the slapstic memory region, but since we read the opcodes directly out of ROM, we never call the read handler. Although this won't solve the problem completely, we can at least detect when the code jumps into the slapstic memory region, and based on the registers and the PC, cause the proper bank switching to occur [Aaron Giles].
- 0.30               : Aaron Giles redesigned cpuintrf.c to be more modular and readable. Added a cpu_reset() call so that a single processor can be reset during execution; Gauntlet needs this to work properly. cpu_setbankhandler_r() / cpu_setbankhandler_w() for better bank switching support. The Williams drivers take advantage of it [Tatsuyuki Satoh].
- 0.29               : Moved the memory code from cpuintrf.c to memory.c [Tatsuyuki Satoh, Aaron Giles]. CPU execution is interleaved. The cpu_slices_per_frame field in the MachineDriver controls how often control is passed from one CPU to another. 1 is the minimum, meaning that each CPU runs for the whole video frame before giving control to the others. The higher this setting, the more closely CPUs are interleaved and therefore the more accurate the emulation is. However, an higher setting also means slower performance [Nicola Salmoria].
- 0.27               : New support functions in cpuintrf.c [Nicola Salmoria]: cpu_getfcount(), which returns the number of CPU cycles till the end of the current video frame (as opposed to cpu_geticount(), which  returns the number of CPU cycles till the next call of the interrupt handler) cpu_getiloops(), which returns the number of times the interrupt handler will be called before the end of the video frame (useful in interrupt handlers). cpu_gettotalcycles(), which returns the total number of CPU cycles passed since the CPU was reset. ignore_interrupt(), companion to interrupt() and nmi_interrupt(). This allows interrupt handlers to be cpu-independant, avoiding use of CPU-specific interrupt indetifiers.
- 0.22               : Rick Wirch proposed a better optimization to cpu_readmem and cpu_writemem. Speed results are good under DOS and Windows. Source: Changed CPUIntrf regarding readmem/writemem optimizations.
- 0.21               : Added M6809 CPU support. Changes in cpuintrf.c and driver.h to accommodate the new CPU. The first driver working on this CPU is Super Pac Man. The driver is based on the super-detailed KEG file of Replay emulator by Kevin Brisley.
- 0.20               : New flag for the cpu type [Nicola Salmoria]: CPU_AUDIO_CPU. For example, you'll define a CPU type as CPU_Z80 | CPU_AUDIO_CPU. This indicates that the CPU is a slave used for audio only, and is therefore not needed if sound is disabled. The CPU will not be emulated when sound is turned off, therefore speeding  up the emulation a lot.
- 0.19               : Added input ports 5 and 6 in CPUINTRF module.
- 0.16               : Added src\types.h. Nicola Salmoria finally took the time to change Z80.h / M6502.h to make them work together. This allowed me to remove some kludges in cpuintrf.c. I also added some new functions, which can be used regardless of the CPU type: cpu_getpc(), cpu_geticount(), cpu_seticount().
- 0.12               : Multiple CPU support [Nicola Salmoria]. All you have to do to setup multiple CPUs is add entries to the cpu[] array in the MachineDriver definition. Each CPU can have different type (currently Z80 and M6502 are supported), clock, address space, memory/IO port hook, interrupt handlers, number of interrupts per video frame. Sound support in Burger Time. This is the first multiple CPU game supported by MAME (two 6502, one for code, one for sound). It's not perfect, but we're getting there. Also, as you can guess, this is slow. A 486/100 cannot handle it at 60 fps. Runs reasonably with -frameskip 1, though. I also set up the second CPU to emulate sound in Scramble, but the sound that comes out is completely wrong. I don't know what I'm missing, anyone can help?
- 0.10               : Added cpuintrf.c/h.
- 0.09               : Some changes to the MachineDriver definition and mame.c needed to support multiple CPUs (they are NOT supported yet - this is just the first step) [Nicola Salmoria].



1.    Zilog

1.1   Z80

- 0.284              : Skipped memory write in stackless NMI mode (z80\z80n, z80\z80.lst) [holub].
- 0.282              : Cleaned up unnecessary internal state validation (SA_BUSACK) which caused INT skip (z80\z80.cpp) [holub].
- 0.279              : Updated timings for z80n instructions (z80\z80.lst) [holub].
- 0.278              : Optimized detection of attention needed in service step. Removed internal TADR variable - effective addresses can be passed around as needed. Changed macro call syntax in generator input. Flatten 16b rw operations in order to avoid vars manipulations. Renamed LUT fields. Handled flags lazily [holub]. Set the flags after loadstate. Support accessing F register in debugger. Use z80 terminology for the flag vars. Fixed debugger h flag. Don't clear all input pins state at reset [hap].
- 0.277              : Around 10% performance gain by checking if devcb is unset that is called on every opcode (z80\z80.lst). Sort prefixes to have consistent generated output (z80\z80make.py) [hap]. Improved Z80 code generation (z80\z80*.*). Revisited z80 code generator. Avoided wrong isunset() detection in some (MESS) Spectrum clones (z80\z80.lst and z80\z80make.py). Get rid of some flag LUTs (z80\z80.cpp/h and z80\z80.lst). Correct name of generated nsc800 source file and removed duplicate sources from build script (src\cpu.lua and z80\nsc800.cpp) [holub]. Fixed nsc800 compile [hap].
- 0.276              : Switched *R (LDIR, OTIR, etc) debugger flag to STEP_OVER (z80\z80dasm.cpp) [holub].
- 0.270              : Added z80\nsc800.cpp/h. Changed PAIR to PAIR16 (all those registers are 16bit) (z80\z80.h). Moved logmacro stuff to C++ files so subdevices can add their own logging if they want (z80\z80.inc). Removed identical local copy of z80.inc (z80\r800.cpp). Added m_ea/m_rtemp to savestates (z80\z80.cpp). Moved nsc800 device to its own file (z80\nsc800.cpp). Removed Z80 boguswait pin (tried to fix (MESS) super6 properly but no luck). Use LOGMASKED instead of a macro for each log type [hap].
- 0.268              : Fixed compile issue (z80\z80ndasm.cpp). Small cleanup (z80\z80dasm.cpp). Reset m_ref when PC is changed through state_import (z80\z80.cpp) [hap]. Removed undocumented Z80 instructions that are not supported by the R800 (z80\r800.cpp). Updated basic instruction timing. Implemented MULUB and MULUW. Other R800 features are not implemented [Wilbert Pol].
- 0.267              : Added z80\z80.inc, z80\z80.lst, z80\z80make.py, z80\z80n.cpp/h and z80\z80ndasm.cpp/h. New generatable Z80 core [holub]. Updated core generator to support 'ASCII R800' CPU [holub, Wilbert Pol]. Removed inaccessible wait check in check_icount (m_wait_state is never 1 here). Added busack output pin. Decide to remove embedded changelog from comments (refer to github history) (z80\z80.cpp) [hap]. Refactor redoable case. Moved busrq check to service step. Fixed misleading-indentation [holub]. Fixed prefix header inclusion (z80\z80ndasm.cpp) [Vas Crabb].
- 0.262              : Updated WZ during in block I/O instructions. The inir, indr, otir and otdr instructions modify WZ when updating PC when the repeat condition is met [Manuel Sainz de Baranda y Goni].
- 0.259              : Improved emulation of undocumented flags [Manuel Sainz de Baranda y Goni, Peter Helcmanovsky, Patrik Rak]. Removed instruction timing tables and helpers for systems with simple wait states [smf, hap, Lord Nightmare]. Keep all member initialisations in the constructor initialiser list. Added a validity check for impossibly low cycle counts. Reformatted an if/else tree [Vas Crabb]. Fixed rop() opcode read call (z80\z80.cpp) [hap].
- 0.256              : Added EI to IM0 handler. Interrupt mode 0 should be able to execute arbitrary opcodes. Note: The (MESS) heath\h89.cpp with a z37 soft-sectored controller uses IM0 and places an EI instruction on the bus when DRQ signal is received from the WD disk controller [Mark Garlanger].
- 0.255              : Added z80\z84c015.cpp/h. Fixed incorrect cycle counts when custom cycle tables are used (z80\z80.cpp) [Wilbert Pol]. Added support for variants with address translation and implemented Z84C015 chip selects [holub].
- 0.248              : Fixed WZ flag [holub].
- 0.244              : Improved timing within instructions. This allows improved emulation of bus contention in the (MESS) ZX Spectrum family. Also updated Z80 timings for MSX, Amstrad CPC and Sega System 1/2. Fixed "floating" int for (MESS) Spectrum 48k. Now border in demos stays steady and not shaking. Removed undesired state var in cpu implementation (z80\z80.cpp) [holub]. Bug fix for 16-bit operands [Patrick Mackinlay].
- 0.224              : Don't continue cpu when halt opcode gets overwritten [hap].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.195              : Changed refresh callback to write8 [smf].
- 0.194              : Fixed disassembly when $ed, $dd & $fd prefixes are used but the instruction is not valid (z80\z80dasm.cpp) [smf].
- 0.193              : Added cpu\z80\z80dasm.h.
- 0.192              : Implemented Z80 HALT output and clear HALT condition during reset. Wakeup (MESS) Ritam 'Monty Plays Scrabble' and 'Master Monty' from HALT instruction using reset [smf]. Small whitespace alignment [hap].
- 0.184              : Removed tag() argument from logerror() calls in Z80 cpu [Sergey Svishchev].
- 0.180              : Changed the Z80 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Fixed disassembly window updating when you set pc/curpc on Z80 [smf].
- 0.173              : Make the Z80/Z180 daisy chain an interface that interfaces with the existing interface. Removed leftover MCFG_SEGAZ80_SET_DECRYPTED_TAG from macros in system1.cpp, which lets all drivers validate without crashing [AJR].
- 0.171              : Added a debug mechanism for /WAIT pin assertion mechanism (enable with STALLS_ON_WAIT_ASSERT in CPU core), and hooked it up to Night Gal driver as a quick example [Angelo Salese]. Added crude implementation of WAIT pin. Put take_nmi in the execution loop, eg. z80 writes to another device NMI enable register. Removed obsolete irq_line write handler [hap].
- 0.168              : Start of an (MESS) ZX80/81 hardware-correct rewrite: Added irqack to Z80 CPU [O. Galibert].
- 0.154              : Shortened CALLBACK to CB (cpu\z80\z80.h) [hap].
- 0.153              : Converted Z80 to C++. Fixed Z80 regression and Z80 related regressions (MESS: includes\abc80x.h, aquarius.h, c128.h and pcw16.h). Renamed functions with upper case names to lower case to avoid #define collisions [smf].
- 0.147u2            : hap fixed Z80 cycles on illegal prefixes.
- 0.147              : Get rid of old speedup hack (besides, it made halt timing inaccurate on drivers with custom cycletables) [hap].
- 0.146u1            : hap fixed Z80 t-state table for dd/fd opcodes, the 'illegal' ones were especially wrong, all taking 4 t-states.
-  5th September 2011: Charles MacDonald - Free Kick dumped: I ran Free Kick in single-step mode up until a point where the stack pointer was initialized to a known value, than triggered repeated NMIs to push the stack pointer down past zero, wrapping around the address space into the external memory area. This is the only place where activity on the Z80 bus can be monitored. The NMI routine was allowed to finish instead of being interrupted again. At a point where it calls a leaf function, the return address was modified to point to a fragment of the IRQ handler which pops several registers off the stack before returning. This let BC, DE, and HL to be set to user-specified values, followed by another modified return address that pointed to a single LDIR instruction. A block transfer was performed that copied the internal RAM data to the external memory area in 4K chunks, and the process was automated to dump the entire content of security module correctly. It's satisfying to have this game dumped after working on it for quite some time, and this outcome certainly justified the time spent developing the Z80 analysis board. Here's hoping Counter Run can be dumped in a similar way. Does anyone have an original (non-bootleg) version of Counter Run they could lend for attempted dumping?
- 23rd August    2011: Charles MacDonald - One of the coolest things created to assist emulation was Dave Widel's application of using a I/O card to control a custom Z80 to identify instructions and find the correlation between encrypted opcode/data bytes and their decrypted value. I've been continuing research on the Z80-based Free Kick / Counter Run security module and I wanted to add similar functionality into a new board designed to facilitate analysis of these modules. This board connects the expansion port of the Rev. 4 PAL dumper and has sockets for regular 40-pin Z80s and the 52-pin security modules. It has three operating modes: Static clock: The user controls the clock input and can assert any inputs and monitor outputs. Single step: Like above, but the CPU runs at full speed and automatically enters a wait state for all bus cycles. Bus request: CPU gives up ownership of the bus and the internal memory and I/O spaces can be probed. The two dead Free Kick modules work as expected despite having corrupted program code in the internal RAM, I can observe what they do for each clock cycle or bus cycle, though they don't do much. For some reason the one working module doesn't seem to operate reliably in the analysis board, but works fine on the real thing. I guess more testing is necessary. Using the bus request feature didn't allow access to the internal RAMs, but it was highly likely they'd disable the read/write strobes to prevent that kind of attack. Regular Z80s and custom 40-pin ones (Top Roller, MC8123, Kabuki) all work fine, though there isn't a pressing need to work on those parts. The Counter Run bootlegs seem to come from the same source. One set is extensively modified to work with the bootleg hardware, the others have a protection check disabled (a 3-bit latch mapped to an I/O port inside the security module) and a checksum test that is bypassed. I guess they were too lazy to calculate a correct checksum. What's really interesting is that the bootleg ROM is a dump of the entire internal Z80 address space and includes the work RAM which isn't necessary or even utilized. The work RAM has a factory default high score list (no initials from the bootleggers), a sprite list and other variables, the Z80 stack contents (likely ruling out a HD647180), and even the original correct checksum result. This means the bootleggers were able to take control of the module at some point during normal operation, perhaps during the attract sequence. I want to say there should be an easy way in, but I don't know what it is yet.
- 0.143              : Curt Coder added BUSRQ and WAIT input lines to the Z80 CPU core.
- 0.139u2            : Phil Bennett set Z80 IFF1 and IFF2 to 0 on a reset.
- 0.138u1            : Added NSC800 CPU emulation to the Z80 core [Sandro Ronco].
- 0.135u1            : Dirk Best added a check for NOP in Z80 interrupt mode 0. This allows code like ei / halt / di to work correctly. A better solution would be to implement full support for arbitrary opcodes in mode 0. Curt Coder refactored Z80 to use DEVCB.
- 0.133u4            : Eke fixed IM2 interrupt cycles in the Z80 core.
- 0.133u3            : Z80 changes [hap]: Fixed X/Y flags in CCF/SCF/BIT, ZEXALL is happy now. Simplified DAA, renamed MEMPTR (3.8) to WZ (same temp register as the officially named WZ in the 8080), added TODO.
- 0.132              : Marshmellow fixed minor cycle counting inaccuracy in Z80 core.
- 0.131u1            : Xander Xander fixed bug when setting breakpoints on Z80 CPUs at addresses A-F.
- 0.130u4            : Aaron Giles correct System 1 Z80 clocking: Each opcode fetch is 2 cycles with /M1 low, so each byte of opcode fetching causes slightly longer delays than the previous tables. Implemented approximate wait state timing for videoram access; further accuracy will rely on getting a dump of the PAL16R4 that controls the horizontal video timing.
- 0.130u3            : Aaron Giles changed Z80 cycle table definitions to be per-device. Removed old set_info constants for the tables; they are now set up via the z80_set_cycle_tables function.
- 0.128u7            : Aaron Giles added the concept of a cpu_state_table, which is supplied by the CPU cores and which describes all the register state accessible to the debugger and other subsystems. The format of the table is such that most data can be simply fetched from memory without the further involvement of the CPU core, including the display of common formats. Extensibility points are available for custom display and for importing/exporting the data to intermediate variables for more complicated scenarios. Updated the Z80 core to use this.
- 0.128u4            : Aaron Giles cleaned up macro mess in the Z80 core. Switched to using generic memory calls instead of program_* and io_*.
- 0.128u3            : Miodrag Milanovic added support for recently-discovered internal Z80 register to the Z80 core. Improves accuracy of undefined flags. Aaron Giles converted the Z80 core to reference their data via pointers instead of global structs, in anticipation of future changes. Aaron Giles updated cpuexec to compute the "perfect" interleave value taking into account the minimum number of cycles per instruction specified by the CPU core. Updated Z80 core to indicate that the minimum cpi is 2.
- 0.127u7            : Aaron Giles added new functions for building device-relative tags. Changed machine configuration builder to use these functions. Also changed the laserdisc player devices to use them. Updated Z80 CTC/SIO code to assume that the CPU provided for the clock is relative to the device that the CTC/SIO belong to. Updated memory code to assume that regions and devices referenced by the memory map are relative to the device the associated CPU belongs to.
- 0.122u2            : Barry Rodewald removed the increasing of the R register from each IX/IY related (FD xx or DD xx) instruction on the Z80. According to documentation and the behavior of the Amstrad CPC driver, this is incorrect.
- 0.115              : Aaron Giles fixed Z80 IRQ which broke YM2203 sound in the Capcom games (gng, commando, gunsmoke, 1943, sidearms) in 0.111u5.
- 0.114u3            : Removed cpu\z80\z80dasm.h.
- 0.112              : David Haywood fixed broken games due to Z80 update (peedspn.c, calorie.c, talbot.c, portrait.c, merit.c, couple.c and onetwo.c).
- 0.111u5            : Rewrote Z80 interrupt handling to avoid a bad bug in the post-EI interrupt signalling [Aaron Giles].
- 0.104u1            : Removed machine\z80fmly.c/h. Aaron Giles separated various Z80 peripherals (CTC, PIO) into separate modules. Added SIO module, hooked it up to NFL Football. Still no visible progress.
- 0.104              : Made 8-bit A,B,C,D,E,H and L registers available in the Z80 debugger [Nicola Salmoria, Aaron Giles].
- 0.101u2            : Frank Palazzolo fixed Z80 behavior on cold versus warm reset.
- 0.98u3             : Aaron Giles added step in/out support to the Z80 disassembler.
-  2nd July      2005: Dave Widel - Did some tests to see how accurate MAME is for initializing the Z80. Long story short MAME's only getting 2 registers right, PC and I. So far I've tried 5 different Z80's with the same results. AF,BC,DE,HL,IX,IY,SP,AF',BC',DE',HL',R are all initialized incorrectly. Technically I guess I'm not sure about R, it's either initialized or used incorrectly. The upper right is the registers at boot (see screenshot). It should be full of garbage. except for RI which should be 1300. Lower right is after filling all regs with FF and resetting. It should be all FF except RI=1300. Lower left is all 00 except R=13. The Z80's tested were 2 Zilogs, 1 SGS, 1 Sharp, 1 NEC. Z80's don't work correctly when booted they have to be reset so when I say booted, I'm assuming it's after the first reset. I don't know what the values are at boot. I would guess none of the registers including the pc are set at boot.
- 0.89u4             : Juergen Buchmueller cleaned up Z80 core, removing the optional inexact emulation mode and the leading underscores from macro names to comply with C99 naming conventions.
- 0.82u1             : Juergen Buchmueller fixed Z80 RETN / RETI cycle counts.
- 0.79u2             : Nathan Woods patched the Z80 CPU core to set the Z80 cycle tables to their defaults on startup. This removes any need for drivers to reset the Z80 cycle tables back to their defaults on exit.
- 0.77u3             : Nathan Woods added osd_die() function; a friendlier way to die in some unexpected fatal way than exit(-1) or [shudder] raise(SIGABRT).
- 0.77u2             : Found the way the OTIR/INIR instructions affect the PF flag and removed the Z80 look-up tables [Ramsoft, Sean Young].
- 0.77               : Removed cpu\z80\z80daa.h. Sean Young and Stefano improved Z80 DAA emulation allowing removal of look-up table (cpu\z80\z80daa.h). Credit for the Z80 DAA emulation improvement goes to 'Ramsoft' ( http://www.ramsoft.bbk.org/).
-  8th December  2002: Barry Rodewald submitted a bug fix for resetting the Z80 in the CPS-2 driver, and smf improved the fix.
-  4th January   2002: Andrea Mazzoleni partially fixed a bug in compiling the Z80 CPU core with GCC 3.0.x.
- 18th April     2001: Sean Young adjusted the Z80 core to work better with MSX emulation.
- 15th April     2001: Sean Young fixed some more undocumented flags in the Z80 CPU core.
- 27th March     2001: Olivier Galibert fixed multi-Z80 games that were broken because of a bug in the save state routines.
- 14th November  2000: Sean Young submitted some bug fixes for Z80's undocumented opcodes.
- 0.37b7             : Removed cpu\z80\makez80.c.
- 29th July      2000: Juergen Buchmueller fixed the Z80 problems in Brute Force.
-  9th May       2000: Juergen Buchmueller fixed some Z80 core bugs.
- 0.36RC1            : Removed cpu\z80\z80_vm.c/h.
-  4th February  2000: Juergen Buchmueller fixed a Z80 bug with banked memory.
- 10th January   2000: Juergen Buchmueller sent in a new version of his Z80 core with yet more fixes to the timing.
- 30th December  1999: Aaron Giles fixed some compilation bugs and removed a minor Z80-related kludge from Tapper and Timber.
- 24th December  1999: Juergen Buchmueller made the Z80 cycle counting even more exact, but it still isn't perfect. Together with his another fix to some other Z80 problems they seem to fix Tehkan World Cup from losing its sound.
- 0.36b7             : Added cpu\z80\z80_vm.c. Some improvements to the Z80 emulator [Juergen Buchmueller].
- 13th October   1999: Juergen Buchmueller sent in another Z80 update.
-  5th October   1999: Juergen Buchmueller sent in another Z80 update with better emulation of the undocumented opcodes.
-  3rd October   1999: Juergen Buchmueller sent in a new version of the Z80 core with more undocumented opcodes added.
- 29th September 1999: Michael Soderstrom fixed a Z80 bug affecting the usage of BIG_FLAGS_ARRAY.
-  9th May       1999: Juergen Buchmueller fixed a Z80 bug involving interrupt flipflops.
- 0.35b11            : Added cpu\z80\z80_vm.h.
- 14th April     1999: Juergen Buchmueller fixed a Z80 bug which affected Astrocade emulation (on the MESS side).
- 13th April     1999: Juergen Buchmueller has modified the Z80 core to understand more than 64kB of memory.
- 11th April     1999: Nicola fixed Puzzle De Pon Z80 error.
-  1st April     1999: Nicola fixed some bug with cycle skipping and Z80.
-  8th March     1999: Juergen Buchmueller improved the Z80 core (Regulus & Star Jacker work again).
-  2nd March     1999: Brad Oliver fixed problems of the C Z80 core on Mac.
-  1st March     1999: Juergen Buchmueller has fixed a RETN opcode bug in the Z80 core.
- 27th February  1999: Juergen Buchmueller has made the Z80 code faster with memory accesses.
- 0.35b3             : Added cpu\z80\makez80.c. X86 asm Z80 core [Juergen Buchmueller].
- 12th February  1999: Juergen Buchmueller has made the ASM Z80 core even better. Speed improvements range from 25% (Galaga) to 45% (Tapper). It's still far from complete, and daisy-chaining doesn't work.
-  6th February  1999: Juergen Buchmueller has made a preliminary x86 assembler Z80 core for MAME. Currently not many games work, but it shows an enhancement of about 20% in the speed.
- 0.35b2             : Removed z80\asm.bat.
- 0.35b1             : Added z80\asm.bat. Removed z80\z80codes.h, z80debug.c, z80io.h, z80cdx86.h, makefile and readme.txt. New Z80 emulator [Juergen Buchmueller].
- 0.34               : Juergen Buchmueller fixed bug in the Z80 emulator which caused crashes in Tapper and Tron.
- 0.34b2             : Frank Palazzolo fixed bug in the Z80 block I/O instructions (INI, IND, INIR, INDR, OUTI, OUTD, OTIR, and OTDR).
- 0.33b1             : Juergen Buchmueller added support for undocumented Z80 opcodes to the C Z80 core.
- 0.30               : Removed z80\z80.txt.
- 0.29               : Aligned to version 1.2 of Marcel de Kogel's Z80 emulator. New memory handling functions, about 10%-30% faster than before. Moved the memory code from cpuintrf.c to memory.c. Banked ROMs can now be handled in a cleaner and faster way. Use the new MRA_BANK1... types in the memory handler arrays, and cpu_setbank() to set the current bank. The Z80 and M6809 emulators natively support bank switching. IMPORTANT: For 24 bit addressing (i.e. 68000) you cannot associate a memory handler to a single byte. You must use four consecutive bytes, longword aligned. This was done to speedup word (2 bytes) and dword (4 bytes) operations [Tatsuyuki Satoh, Aaron Giles].
- 0.27               : Added machine\z80fmly.c/h.
- 0.21               : Nicola Salmoria introduced changes to the Z80 emulator code that intercept some sorts of tight loop used during an interrupt waitstate. Normal games should not be affected, while Galaga and 1942 are now very fast!!
- 0.16               : Nicola Salmoria finally took the time to change Z80.h / M6502.h to make them work together. This allowed me to remove some kludges in cpuintrf.c. I also added some new functions, which can be used regardless of the CPU type: cpu_getpc(), cpu_geticount(), cpu_seticount().
- 0.12               : Source: Multiple CPU support. All you have to do to setup multiple CPUs is add entries to the cpu[] array in the MachineDriver definition. Each CPU can have different type (currently Z80 and M6502 are supported), clock, address space, memory/IO port hook, interrupt handlers, number of interrupts per video frame. Sometimes interrupt requests happen while interrupts are disabled. Until now I just ignored them, but some games need them to be processed as soon as interrupts are re-enabled. Rally X is an example of such a game. The Z80 engine has provision to do that, but it would make writing a driver more complex (need to find the interrupt acknowledge register) so I slightly modified the engine to automatically cache an interrupt request and execute it as soon as interrupts are enabled.
- 0.04               : Changed daa.h to z80\z80daa.h. Use version 1.1 of Z80Em by Marcel de Kogel. Faster! (note that I had to make a couple of changes to Z80.c to make Crazy Climber work) [Nicola Salmoria].
- 0.01               : Added z80\z80.c/h, z80codes.h, z80dasm.c/h, z80debug.c, z80io.h, z80cdx86.h and daa.h. Z80Em Portable Zilog Z80 Emulator Copyright (C) Marcel de Kogel 1996,1997.
- PCB: Z80, Z80A, Z80-A, Z80B, Z80-B
- PCB: Z840006 (QFP44), Z84C0006PEC, Z84C0008PEC, Z84C00A85, Goldstar Z8400B PS, Z8400APS, 84C000AM-6 (ZN1/2)
- PCB: Lwings: Z80(custom) and Z80A(sound), Exerion: SHARP LH0080A(Z80A), Passsht: SHARP LH0080BZ80B, Myhero: Z80A + Z80A-PIO, Starforc: Z80A CPU + Z80PIO, Fortecar: SGS Z8400AB1 (Z80ACPU), Paranoia: CPU Z84C00A85 (Z80A CPU), Aerofgt: LH0080B Z80B-CPU
- PCB: Agallet: Z84C0008PEC  DIP40, Z84C000FEC, QFP44 (Grdnstrm), Z0840006PCS 6MHz (Lordgun), F15se: Zilog Z85C3010VSC (communications controller)
- PCB: Mechatt: Z08400 (40 pin, compatible to Z80), Avengers: Z0840006PSC(Z80B), Contcirc: Z0840004PSC, Polepos2: ZILOG Z8400APS-Z80ACPU
- PCB: Dbz2: SHARP LH0080E (Z80E), MOSTEK MK3880N-4-Z80CPU (Lsasquad, Tactcian, Thepit), KL5C80A12CFP (Mjreach1, Hkagerou, NeoGeoHyper64), SGS Z80ACPUB1 (Crash)
- PCB: Z84C00 CPU  DIL-40  6/10MHz, Z0840004 PSC  DIL-40 (Z80A), Z0840006 PSC  DIL-40 (Z80B), Z0847006 PSC DIL-40 (Z8530 AB1)
- SOURCE: cpu\z80\z80.cpp



1.11  Z80 CTC

- 0.282              : Improved interrupts handling in (MESS) specnext (machine\z80ctc.h) [holub].
- 0.266              : Fixed channel bus readback on unset timer. Fixes (MESS) x1turbo not detecting YM regression caused by MAME 0.209 (Prevent integer overflow in Z80 CTC device, which causes a runtime error on WebAssembly builds) (machine\z80ctc.cpp) [Angelo Salese].
- 0.265              : Added support for derived device classes (machine\z80ctc.cpp) [holub].
- 0.239              : Z80 CTC ZC/TO goes high for one clock cycle [smf].
- 0.209              : Simplified read/write handlers [AJR]. Prevent integer overflow in Z80 CTC device, which causes a runtime error on WebAssembly builds. The issue was introduced in MAME 0.204 (fixed-rate clock input to be configured...) [Justin Kerk].
- 0.204              : Allow a fixed-rate clock input to be configured for each channel. This improves performance by alleviating the need to drive the CLK/TRG inputs with high-frequency timers [AJR].
- 0.202              : Removed Z80CTC MCFG macros [Osso].
- 0.198              : Disabling a channel interrupt also turns it off [AJR].
- 0.197              : Added 'Z80 CTC Channel' device. Make channels into subdevices [AJR].
- 0.186              : Minor clock cleanup [AJR].
- 0.182              : Fixed undocumented Z80 CTC 'on-the-fly' mode switch; internal timer didn't stop [SailorSat].
- 0.154              : Converted Z80CTC to use DEVCB2 [Fabio Priuli].
- 0.152              : Removed logerrors ("z80ctc_irq_ack: failed to find an interrupt to ack!") and ("z80ctc_irq_reti: failed to find an interrupt to clear IEO on!") [Curt Coder].
- 0.146u5            : Removed legacy Z80 CTC interfaces. Removed Star Force sound hack in favor of just driving a DAC directly with the CTC output line (MAME can handle sound frequency timers no problem). Removed NOTIMER hack from Z80 CTC interface (Star Force was the only one using it). The first parameter of the interface struct is now gone (machine\ldv1000.c, machine\z80ctc.c, machine\z80ctc.h, audio\cchasm.c, audio\cinemat.c, audio\senjyo.c, drivers\astrocde.c, drivers\cchasm.c, drivers\csplayh5.c, drivers\dlair.c, drivers\jankenmn.c, drivers\mcr.c, drivers\mcr3.c, drivers\nbmj9195.c, drivers\niyanpai.c, drivers\pipeline.c, drivers\proconn.c, drivers\senjyo.c, includes\cchasm.h, includes\senjyo.h, machine\mcr.c) [Angelo Salese].
- 0.136u4            : Tim Schuerewegen fixed Z80CTC read handler.
- 0.134u4            : Curt Coder refactored Z80CTC to use DEVCB. Emulated coin flag flip-flop in Cosmic Chasm.
- 0.129u6            : Another round of static/const qualifier additions, plus a rename of has_addon_chip to snes_has_addon_chip. Notably a number of z80ctc_interface are now const (devicification must have removed the cases where it was dynamically modified) [Atari Ace].
- 0.127u7            : Aaron Giles added new functions for building device-relative tags. Changed machine configuration builder to use these functions. Also changed the laserdisc player devices to use them. Updated Z80 CTC/SIO code to assume that the CPU provided for the clock is relative to the device that the CTC/SIO belong to. Updated memory code to assume that regions and devices referenced by the memory map are relative to the device the associated CPU belongs to.
- 0.127u6            : Aaron Giles converted Z80 CTC to a proper device. Updated all drivers. Added new item to the interface which is the tag of a CPU to take the base clock from.
- 0.104u1            : Added machine\z80ctc.c/h. Removed machine\z80fmly.c. Aaron Giles separated various Z80 peripherals (CTC, PIO) into separate modules.
- 0.100u4            : Aaron Giles added save state support to the Z80 CTC system.
- 0.98u2             : Rewrote the Z80/Z180 daisy chaining logic to work a little closer to the hardware. Updated the Z80 CTC module to support the new model. Changed the CTC module to not generate interrupts if there is an outstanding request on the same timer is currently in service; this allows Journey to (finally) run with the correct CPU speed [Aaron Giles].
- 16th July      1999: Mathis Rosenhauer sent in a Cosmic Chasm driver with much better Z80CTC sound.
- 0.28               : Aaron Giles perfected the CTC emulation, needed by the MCR driver.
- 0.27               : Added machine\z80fmly.c/h. Tatsuyuki Satoh added Z80CTC emulator, in COMMON.C.
- NOTES: CTC = Counter Timer Controller; Z80A CTC = Z0843004 PSC  DIL-40;  Z8430, DIP28 (Pipeline); Z80B CTC = Z0843006 PSC  DIL-40; Z84C30 CTC DIL-40 6MHz (Enhanced)
- DRIVERS: astrocde.c, avt.c, balsente.c, cchasm.c, csplayh5.c, dlair.c, mcr.c, mcr3.c, nbmj9195.c, niyanpai.c, pipeline.c, machine\ldv1000.c, audio\cchasm.c, audio\cinemat.c, includes\senjyo.h
- SOURCE: machine\z80ctc.cpp



1.12  Z80 DAISY

- 0.202              : Removed Z80DAISY MCFG macros [Osso].
- 0.198              : Implemented independent RETI decoding. Moved z80daisy* to devices\machine [AJR].
- 0.192              : Added cpu\z80\z80daisy_generic.cpp. Added a generic Z80 daisy chain device, for use in drivers with non-Z80 peripherals. Added irq output callback (cpu\z80\z80daisy_generic.cpp) [Dirk Best].
- 0.182              : Reconfigure Z80 daisy chain behavior to use the standard vector for an external IRQ, rather than a bogus one from the last device in the chain. Enabled Z80 daisy chain on Cedar Magnet sound board (fake IRQ still necessary, though vectors are correct now). Source note regarding IM 2 behavior contrary to Zilog datasheet (was fixed way back in 0.35b11). Simplify daisy-chain IRQ ack routine (get rid of delegate member) (cpu\z80\z80daisy.cpp) [AJR].
- 0.173              : Make the Z80/Z180 daisy chain an interface that interfaces with the existing interface. Z8000 has been hooked up to this as well (p8000_16 already configures it), but currently does nothing with it. Prevent tmpz84c015_device::irq_priority_w from crashing or corrupting the daisy chain. Eliminate the need for TMPZ84C015_DAISY_INTERNAL by not overwriting elements in the daisy list (z80\tmpz84c015.h; drivers\pve500.cpp) [AJR].
- 0.169              : Clang-modernize [Miodrag Milanovic].
- 0.152              : Removed logerror("z80daisy_call_ack_device: failed to find an device to ack!"). (MESS) Fixed fast controller Z80 daisy chain, formatting a disk works now except for a not ready status after the last track (bus\abcbus\lux21046.c) [Curt Coder].
- 0.141u1            : Allow Z80 daisy chain functionality to be used in a situation where there are more interrupt sources besides the daisy chain devices [Wilbert Pol].
- 0.138u2            : Defined a new custom interface for the Z80 daisy chain. This interface behaves like the standard interfaces, and can be added to any device that implements the Z80 daisy chain behavior. Converted all existing Z80 daisy chain devices to new-style devices that inherit this interface [Aaron Giles].
- 0.127u7            : Made the Z80 daisy chain aware of referencing device-specific devices [Aaron Giles].
- 0.127u6            : Changed Z80 daisy chain interface to simply be a list of devices in the chain. Interrupt callback functions are now fetched via the standard device interface and referenced by the daisy chain code [Aaron Giles].
- 0.98u2             : Added cpu\z80\z80daisy.c/h. Rewrote the Z80/Z180 daisy chaining logic to work a little closer to the hardware [Aaron Giles].
- 0.31               : Support for Z80 daisy chain interrupts [Tatsuyuki Satoh].
- NOTES: Z80/180 daisy chain
- DRIVERS: astrocde.cpp, avt.cpp, cchasm.cpp, cedar_magnet.cpp, dlair.cpp, gp_1.cpp, gp_2.cpp, jankenmn.cpp, meritm.cpp, pipeline.cpp and polyplay.cpp
- SOURCE: machine\z80daisy.cpp and machine\z80daisy_generic.cpp



1.13  Z80 DART

- 0.220              : Removed machine\z80dart.cpp/h. Replaced old Z80 DART device with new variant of modern SIO emulation (machine\z80sio.cpp) [AJR].
- 0.209              : Simplified read/write handlers [AJR].
- 0.204              : Don't reset the receiver whenever WR5 changes [AJR].
- 0.202              : Default RXD to 1 to eliminate spurious break condition. Correct CTS level in RR0 after "Reset External/Status Interrupt" command. Allow immediate inactivation of RTS output when nothing is being transmitted [AJR].
- 0.191              : Eliminated custom MCFG_Z80DART_ADD macros [AJR].
- 0.186              : Improved encapsulation of Z80DART channels [Vas Crabb].
- 0.181              : Set the vector status bits to 1 at eoi [Carl]. Only update serial line configuration if it actually changes. Allows the apricot serial port to work correctly [Dirk Best].
- 0.180              : Finalized conversion to use util::fifo. Refactored FIFOs using new template based FIFO class [Joakim Larsson Edstrom].
- 0.163              : Added direct control/data access functions to Z80DART [Dirk Best].
- 0.158              : Save diserial state in Z80DART, fixes (MESS) Bondwell 12/14 SIO test error after loading a state [Osso].
- 0.154              : Fixed usage of uninitialized member in z80dart_channel [Oliver Stoeneberg]. Quick fix to get (MESS CPC) CP/M to detect the presence of the serial interface [Brian Troha]. Converted Z80DART to use DEVCB2 [Fabio Priuli].
- 0.153              : Added Z80DART priority and irq vector for 8274 (needed for MESS: Intel iSBC 286) [Carl]. Sets Z80DART RR1_ALL_SENT on reset, previously it relied on tra_complete() being called after reset. It's no longer called if there has been no data sent. It makes more sense to mask out the errors that are going to be brought in from the error mask rather than throw all the other bits away. However I haven't seen any documentation for Z80DART that says there is an error FIFO at all. Fixed Z80DART parity selection. Removed hack from (MESS) Little Big Board (Pulsar) and hooked up Z80DART now that parity works. Call set_data_frame() before stc_rcv_rate() in Z80 DART, as since r26274 there is random behaviour if you don't [smf]. Fixed Z80DART array out of bounds access [hap].
- 0.152              : Removed logerrors ("z80dart_irq_ack: failed to find an interrupt to ack!") and ("z80dart_irq_reti: failed to find an interrupt to clear IEO on!") [Curt Coder]. Replaced read rx callback in Z80DART (and clones) with a write handler, which allows multiple chips to be connected together without using glue methods [smf].
- 0.149              : Merged uPD7201 in Z80 DART and modernized the interface. (MESS) Refactored drivers to use z80dart.c instead of z80sio.c, the easy part. Refactored dart_channel to be of device_t kin. Refactored z80dart_channel to implement device_serial_interface. Cleanup driver. (MESS) superslv regression: Fixed Z80 DART [Curt Coder].
- 0.148u2            : (MESS) abc80x: Connected RS-232 ports to Z80 DART/SIO (machine\z80dart.h) [Curt Coder].
- 0.148u1            : Added modern register accessors (machine\z80dart.c/h) [Curt Coder].
- 0.143u7            : Exposed the Z80 DART interrupt vector to non-Z80 users. Fixed Z80DART FIFO starting index [Curt Coder].
- 0.141u4            : Curt Coder fixed Z80-DART transmit word length.
- 0.141              : Z80DART driver [Wilbert Pol]: The channel B modified interrupt vector can be read immediately after setting it. Reading from a read register other than 0 also masks out the register index.
- 0.140u3            : Z80DART changes [Curt Coder]: Fixed asynchronous transmit mode. Fixed channel A interrupt vector. Improved logging.
- 0.139u2            : Expanded the Z80-DART interface to allow future implementation of Z80-SIO features [Curt Coder]: Added separate clock inputs for channel B. Added SYNC inputs/outputs for both channels. Clear Z80 DART interrupts at constructor time. Added SIO specific constants. Added sync character write registers.
- 0.137              : Added machine\z80dart.c/h. Imported Z80 DART from MESS [Curt Coder].
- NOTES: Z80A DART = Z0847004 PSC  DIL-40
- DRIVERS: ddenlovr.cpp, dynax.cpp, mcr.cpp, model1.cpp, model2.cpp and royalmah.cpp
- SOURCE: machine\z80sio.cpp



1.14  Z80 DMA

- 0.284              : Relaxed fatal error which were used for unknown commands catching (machine\z80dma.cpp) [holub].
- 0.282              : Always return live status regardless of when read command was sent. Refactor read register emulation. Minor logging refinements and cleanups (machine\z80dma.cpp) [AJR]. Keep member declarations together (machine\z80dma.h) [Vas Crabb].
- 0.281              : Clear BUSRQ line upon device reset to prevent CPU from freezing after a soft reset (machine\z80dma.cpp) [holub].
- 0.280              : Implemented BAO callback (machine\z80dma.cpp) [Curt Coder].
- 0.279              : Changed description to 'Zilog Z80 DMA Controller'. Added UA858D DMA Controller variant to machine\z80dma.cpp. Added extra memory read wait state at 28MHz for (MESS) ZX Spectrum Next (machine\z80dma.cpp) [holub].
- 0.275              : Suppress side effects for debugger reads (machine\z80dma.cpp) [cam900].
- 0.269              : Burst mode and refactoring (machine\z80dma.cpp) [holub].
- 0.265              : Added support for derived device classes (machine\z80dma.cpp) [holub].
- 0.263              : Added PULSE mode handling (machine\z80dma.cpp) [Miodrag Milanovic].
- 0.252              : Correct/Improved end of block test (machine\z80dma.cpp) [Patrick Mackinlay].
- 0.245              : Ensure DMA is stopped after most commands [Patrick Mackinlay].
- 0.242              : Fixed interrupt enable output. Implemented the byte counter as an up counter. Note: (MESS) abc1600 expects an up counter and checks that the byte counter value is 0x200 after transferring 0x200 bytes. This is corroborated by the Z-80 DMA Controller Product Specification (February 1980) on page 7 (machine\z80dma.cpp) [Curt Coder].
- 0.224              : Added IEO callback [Curt Coder].
- 0.202              : Removed Z80DMA MCFG macros [Osso].
- 0.186              : Changed description to 'Z80 DMA Controller'.
- 0.157              : Fixed Z80DMA buffer overflow. Fixes (MESS) altos5 and wmbullet floppies. Removed no-longer-needed asserts from Z80DMA [Robbbert].
- 0.155              : Added asserts for index out-of-bounds accesses with (MESS) wmbullet -flop cpm22 (machine\z80dma.c) [Oliver Stoeneberg].
- 0.154              : Converted Z80DMA to use DEVCB2 [Fabio Priuli].
- 0.153              : Fixed array out of bounds access (machine\z80dma.h) [hap]. Z80DMA finalized modernizing [Miodrag Milanovic].
- 0.152              : Implemented Z80DMA Auto Restart [Curt Coder].
- 0.148u2            : Fixed uninitialized variable, member and memory in machine\z80dma.c [Oliver Stoeneberg].
- 0.146u3            : Support for Z80DMA search & transfer mode [Angelo Salese].
- 0.146u1            : Removed memconv.h usage [Miodrag Milanovic].
- 0.143u4            : Angelo Salese added an alternative way of register Z80 DMA read-back that directly change the read mask without passing from the init read sequence command, also moved around DMA counters incrementing.
- 0.141u4            : Angelo Salese fixed decrementing transfers in Z80 DMA core.
- 0.139u4            : Curt Coder modified Z80-DMA reset command (C3) to not randomly clear registers.
- 0.139u1            : Z80 DMA changes [Curt Coder]: Fixed DMA by re-adding a status update call to ENABLE DMA command. Allowed illegal mode 0 DMA operation since trs80m2 in MESS is abusing this. Fixed ready signal handling by adding a check for ready condition on each byte.
- 0.137u1            : Curt Coder fixed Z80-DMA Load and Continue commands.
- 0.137              : Curt Coder fixed Z80 DMA ready signal handling.
- 0.136u4            : Implemented Z80-DMA interrupts [Curt Coder].
- 0.134u1            : Z80 DMA improvements [Angelo Salese]: Added Initiate read sequence command and hooked up basic status reading. Added continue and reset port A/B timing commands. Added enable/disable irq, force ready and reinitialize status byte commands. Fixed Initiate read command. Implemented reset command. Implemented fixed port transfer behaviour. Added decrement step mode and fixed a conceptual bug with portA writes. Added preliminary search mode support and fixed a bug with WR3 mask byte. Fixed ready flag when the DMA disabled/enabled commands are used.
- 0.128u5            : Curt Coder added placeholders for interrupt callback and Z80 daisy chain functions in Z80DMA.
- 0.126u4            : Z80DMA device now require device callback handlers instead of machine handlers. Updated affected drivers accordingly [Couriersud].
- 0.125u7            : Cleaned up Z80DMA interface [Couriersud]: Removed compatibility to old Z80DMA driver. Now uses std. callbacks (READ8_HANDLER, WRITE8_HANDLER). Updated mario and dkong3 accordingly.
- 0.123u4            : Changed Z80DMA to new device interface, updated mario.c and dkong.c to use new interface. Illustrates how to keep existing memory read/write handlers. This is slower than caching the device interface, but does not have an impact on devices accessed at a low frequency like in this case [Couriersud].
- 0.122u5            : Couriersud hooked up Z80 DMA to Mario Bros.
- 0.122u4            : Added machine\z80dma.c/h. Added Z80 DMA chip [Couriersud]: Only implements intelligence to emulate dkong3.
- NOTES: Z80 DMA Controller
- DRIVERS: anoworld.cpp, dkong.cpp and mario.cpp
- SOURCE: machine\z80dma.cpp



1.15  Z80 PIO

- 0.259              : Changed an if/else block to switch/case [hap].
- 0.233              : Changing the vector neither enables nor causes an interrupt. Fixes crash in (MESS) Microbee 256TC when F2 pressed [Robbbert].
- 0.209              : Simplified handlers. Reduced duplicates [cam900].
- 0.202              : Removed Z80PIO MCFG macros [Osso].
- 0.161              : Fixed Z80PIO bit control mode interrupt handling. Added individual write line handlers for port bits [Curt Coder].
- 0.154              : Converted Z80PIO to use DEVCB2 [Fabio Priuli].
- 0.146u5            : De-legacy the Z80PIO device (machine\z80pio.c, machine\z80pio.h, drivers\mcr.c, drivers\meritm.c, drivers\proconn.c, drivers\senjyo.c and drivers\system1.c) [Aaron Giles].
- 0.138u2            : Added 'Z80 PIO' device (machine\z80pio.c).
- 0.137              : Curt Coder added ARDY/BRDY signal read handlers to Z80 PIO.
- 0.136u4            : Complete rewrite of the Z80-PIO implementation. The handshaking signals are now more accurately emulated. As a result, the Merit Megatouch games are no longer working since they relied on the earlier incorrect behavior [Curt Coder].
- 0.131u4            : Curt Coder added alternate read/write handlers to the Z80 PIO implementation.
- 0.130u1            : Z80PIO: When outputting from a port to the hardware in PIO mode 3, only those bits defined by the mask should be output. MAME currently outputs everything [Robbbert].
- 0.127u6            : Wilbert Pol converted the Z80PIO implementation into a device.
- 0.127u6            : Aaron Giles changed Z80 PIO interrupt callback to pass a device instead of the machine. All device callbacks should provide the device.
- 0.123u3            : One-line fix for the Z80PIO. At the moment when the interrupt control word is sent (with interrupts enabled), an interrupt occurs. In reality, interrupts are disabled until the interrupt mask byte is sent [Robert].
- 0.105u1            : Fixed the Z80 PIO code to prevent an interrupt to occur between the PIO_OP_MODE byte and mask which follows. According to the datasheet, this is not permitted in hardware [Robert].
- 0.104u1            : Added machine\z80pio.c/h. Removed machine\z80fmly.c. Aaron Giles separated various Z80 peripherals (CTC, PIO) into separate modules.
- 0.98u2             : Rewrote the Z80/Z180 daisy chaining logic to work a little closer to the hardware. Updated the Z80 PIO module to support the new model [Aaron Giles].
- 0.27               : Added machine\z80fmly.c/h. Tatsuyuki Satoh added Z80PIO emulator, in COMMON.C.
- NOTES: Z80A PIO = Z0842004 PSC  DIL-40; Z80B PIO = Z0842006 PSC  DIL-40; Z84C20  PIO DIL-40 10MHz (Enhanced)
- DRIVERS: avt.cpp, cedar_magnet.cpp, ddenlovr.cpp, dynax.cpp, hazelgr.cpp, mcr.cpp, meritm.cpp, model1.cpp, model2.cpp, polyplay.cpp, proconn.cpp, royalmah.cpp, senjyo.cpp, system1.cpp and victory.cpp
- SOURCE: machine\z80pio.cpp



1.16  Z80 SCC

- 0.276              : Reassert interrupt if conditions persist (machine\z80scc.cpp). Fixes (MESS) x68000 [metlunit, metluni2]: Reaction on mouse use is only partial (ID 09141) [Patrick Mackinlay].
- 0.274              : Removed machine\8530scc.cpp/h. Retire 'Zilog 8530 SCC (legacy)' device [Patrick Mackinlay].
- 0.263              : Implemented RTxC clock source. Fixes serial emulation at 115200 or 230400bps [Colin Leroy-Mira].
- 0.258              : Channel reset empties FIFOs [Patrick Mackinlay].
- 0.256              : Fixed access to wr7'. Reset Highest IUS command is available on NMOS versions too according to manuals (machine\z80scc.cpp) [Patrick Mackinlay]. Added Z8530 SCC to mpu4plasma.cpp [AJR].
- 0.254              : Make receive error logging conditional (machine\z80scc.cpp) [AJR].
- 0.250              : Fixed flag test in logging (machine\z80scc.cpp) [Vas Crabb].
- 0.246              : Added support for using /W//REQ as the RX DMA pin, as well as the /DTR//REQ pin as the TX DMA pin, allowing software that uses both directions simultaneously to function (machine\z80scc.cpp) [Brice Onken]. Fixed uninitialized variable [O. Galibert].
- 0.244              : Fixed a cast-to-bool that broke detection of changes to one register bit (machine\z80scc.cpp) [Vas Crabb].
- 0.243              : Fixed incorrect setting of baud rate due to uninitialised variables (machine\z80scc.cpp; fbcrazy) [Paul Arnold]. Added support for WR15_ZEROCOUNT interrupts (machine\z80scc.cpp), fixes (MESS) Apple IIgs Diversi-Tune 1.1 freezes MAME [ksherlock]. Removed unused Z80SCC_USE_LOCAL_BRG and simplified WR15_ZEROCOUNT usage to reduce the likelihood of needless timer activation [Ryan Holtz].
- 0.233              : Implemented local loopback [Patrick Mackinlay].
- 0.229              : Tidy logging a little bit. There's only one WR2. Note: WR2 is the interrupt vector register. Only one vector register exists in the SCC, and it can be accessed through either channel [Patrick Mackinlay].
- 0.226              : Fixed vector modification in high bits (machine\z80scc.cpp) [Dirk Best].
- 0.222              : Don't invent data (m_rx_fifo_rp_step; machine\z80scc.cpp). Clear IUS not IP [Patrick Mackinlay].
- 0.221              : Simplified handlers [Osso]. Test the correct bit [Patrick Mackinlay].
- 0.211              : Reduced gratuitous logging. Read/write handler cleanups. Simplified handler signatures. Renamed cd_ab_r/w and ba_cd_inv_r/w to dc_ab_r/w and ab_dc_r/w to be more hardware-accurate. Eliminated cd_ba_r/w and ba_cd_r/w (no legitimate uses in existing code) [AJR].
- 0.206              : Don't spam interrupt state [Patrick Mackinlay].
- 0.202              : Removed macros which weren't already needed (machine\z80scc.cpp) [Osso].
- 0.201              : Added DEVCB3 accessors [Ryan Holtz]. Serial control signal fixes: /CTS, /DCD and /SYNC are active low lines represented as 1's in rr0 when asserted. Immediately deassert /RTS in some circumstances. Fixed rr1 "all sent" status handling. There is no ring indicator input line. Generated interrupts for /SYNC input. Updated /WREQ when transmitter is enabled/disabled, use 0 for assert state of active low output [Patrick Mackinlay]. Fixed Z-BUS access [Robbbert].
- 0.200              : Fixed transmit interrupt behavior that was locking up the (MESS) Apple IIgs [R. Belmont]. Clear tranmitter interrupt if a written byte fills the FIFO. Fixes (MESS) Apple IIgs problems without breaking Intergraph [R. Belmont, Patrick Mackinlay].
- 0.199              : Removed generic device type 'Z80 SCC' (which nothing was using) and custom MCFG_SCCXXXX_ADD macros. Actually clear interrupt state [AJR].
- 0.192              : General cleanup and backport of Z80 SIO improvements (machine\z80scc.cpp) [Joakim Larsson Edstrom].
- 0.191              : Z80 SCC now returns CPU specific default vector when no interrupt found to acknowledge [Joakim Larsson Edstrom]. Fixed interrupt mask generation [Patrick Mackinlay].
- 0.188              : Basic wait/dma request implementation. Renamed WRDY to WREQ to match datasheet, minor touch-up [Patrick Mackinlay].
- 0.187              : Added support for resetting RX interrupts/status by reading Rx FIFO through RR3 [Joakim Larsson Edstrom]. Moved rearming of tx interrupt from tx buffer write to transmit complete when using WR0_RESET_TX_INT [Ted Green].
- 0.186              : Changed description to 'Z80 SCC Channel'. Implemented Reset Tx Interrupt Pending Command (machine\z80scc.cpp) [Joakim Larsson Edstrom].
- 0.184              : Added 'Z80 SCC' device (machine\z80scc.cpp).
- 0.182              : Improved LOG printouts [Joakim Larsson Edstrom]. Added logmacro.h inspired by Edstrom's log macros (emu\logmacro.h) [Vas Crabb].
- 0.181              : Added 'Z80 SCC channel' device (machine\z80scc.cpp). Enabled more Rx interrupts and fixed FIFO error. Fixed a regression FIFO bug and a bug in the handling of Special Interrupts. Clean up some of this double paren nonsense [Joakim Larsson Edstrom].
- 0.180              : Added support for RTxC as BRG clock source, allows the SGI Indy to have a console. Fixed a bug in read register 15 support, allows macplus, etc. to boot now. Improved interrupt handling, allows mouse pointer to move in macplus driver for System 6.0.8. Fixed init state of latched rr0 values, improves the success ratio of getting the mouse working in both X and Y on macplus, etc. Improved LOG printouts for synchrounous features of WR4 and WR10. Added external clock to SCC and decoded SCC synchronous init for (MESS) MacOS 7. Added minimal support for SYNC/HUNT mode to allow MacOS7 to boot to desktop [Joakim Larsson Edstrom].
- 0.179              : Z-Bus interface functions zbus_r and zbus_w added supporting shift left/right modes. Improved variant handling including the incomplete read register maps for some. External CTS and DCD interrupts added. Improved device reset values. SWI acknowledge command added. Improved/fixed handling of wr9, rr2, rr3. WR7PRIME register added. Fixed vector modification. Added iack by reading rr2. z80daisy_iack now returns -1 when no vector found or disabled through the WR9 VIS. Removed z80daisy_reti code to match SCC documentation. Removed defacto reset values where possible and replaced them with documented SCC reset values. Improved Tx handling with FIFO including special case with 1 slot FIFO [Joakim Larsson Edstrom].
- 0.176              : Fixed for mid tx reset of scc channel and problem with dropped characters for (MESS) Sun4_75 (machine\z80scc.cpp). Added support for changing the BRG constants after enabling Rx/Tx. Added support for delayed change of Tx baudrate [Joakim Larsson Edstrom].
- 0.175              : Fixed baudrate calculation issue to make (MESS) Sun3-80 work and some minor debug message errors (machine\z80scc.cpp) [Joakim Larsson Edstrom].
- 0.174              : Baud Rate Generator now uses diserial timers through setrate(), Added ADD_ macros for all supported chip variants, Log messages cleanup [Joakim Larsson Edstrom].
- 0.172              : Initial Z80SCC Baudrate Generator support. Turned off logging [Joakim Larsson Edstrom].
- 0.169              : Switched to new Z80SCC device and added RS232 ports (not functioning yet) to (MESS) Sun Microsystems Sun 3 [R. Belmont].
- 0.167              : Z80 SCC rework: z80scc_channel class rebased on device_t instead of z80sio_channel. Improved LOG printouts. Interrupt support started. Made register pointer bits shared bewtween A and B channel as per spec. Variant type keeping moved from channel class to device class where it belongs. Clocks are blocked until Rx/Tx enabled by ROM code [Joakim Larsson Edstrom].
- 0.166              : Added machine\z80scc.c/h. Added Z80 Serial Communications Controller. Added correct reset values. Added correct read FIFO depths for the different SCC variants. Started work on interrupt system, not verified/debugged due to lack of software. Added conditonal compile for MVC and GCC LOG messages to sort out differences. Cleaned up LOG messages [Joakim Larsson Edstrom]. Use MAME standard 64-bit int workaroundfor Z80 SCC [R. Belmont].
- NOTES: Z80-SCC Serial Communications Controller. The z80scc is an updated version of the z80sio, with additional support for CRC checks and a number of data link layer protocols such as HDLC, SDLC and BiSync (see https://en.wikipedia.org/wiki/Zilog_SCC).
- NOTES: The SCC variants: Z8530, Z85C30, Z85230 and Z85233 with Universal bus. Z8030, Z80C30 and Z80230 with Zbus. The difference between Zbus and Universal bus is mainly at hardware design level and suitable for Intel oriented (Zbus) or Motorola oriented chip designs.
- DRIVERS: atronic.cpp, hotstuff.cpp, iteagle.cpp, micro3d.cpp, mpu4plasma.cpp and rastersp.cpp
- SOURCE: machine\z80scc.cpp



1.17  Z80 SIO

- 0.274              : Added support for wait/ready, fixed rx int logic and SDLC bit stuffing bug (machine\z80sio.cpp) [F. Ulivi].
- 0.245              : Pass z80sio tests in (MESS) MCS PowerView 10 (drivers\pwrview.cpp) [Carl].
- 0.220              : Replaced legacy device emulations i8274_new and upd7201_new. Make LOGBIT less spammy. Booleanize a few members [AJR].
- 0.216              : Fixed some log messages. Verified sync byte behavior for SDLC/HDLC, LOG message details added [Joakim Larsson Edstrom].
- 0.211              : Massive enhancement to Z80 SIO driven by (MESS) HP98046 test software (http://www.hpmuseum.net/display_item.php?sw=324). Fixed a few regressions in systems with z80sio/i8274 [fulivi].
- 0.209              : Simplified read/write handlers [AJR].
- 0.207              : MCFG and MACHINE_CONFIG removals [Ryan Holtz].
- 0.202              : Removed macros which weren't already needed (machine\z80sio.h) [Osso].
- 0.201              : Ignore "Send Abort" command when not in SDLC mode - allows (MESS) jade.cpp to start [AJR].
- 0.192              : Added machine\sdlc.cpp/h. Moved object finder resolution before device_start (emu\device.cpp and machine.cpp). This fixed Z80SIO not safe with attached RS232 port. MAME can crash if a device sets the initial state of the input lines for a z80sio_device at device_start time. Made async receive behave more like real device. Check that start bit persists for half a clock interval. Sample data bits mid-interval. Handle invalid stop bit as described in Zilog manual. Check parity and latch overrun and parity errors. This fixes the issues with corrupt characters being typed on the Kaypro. Synchronous modes are still broken. The channels are still using device_serial_interface to transmit frames, but receiving is handled entirely in the device class itself. Overruns still aren't handled properly. Better handling of Rx FIFO and interrupts in async mode. Framing error should always generate interrupt in interrupt-on-first mode. Don't use device_serial_interface for transmit - it can't support sync modes, on-the-fly register updates, and other weirdness. Better modelling of 1-deep transmit queue. Better RTS/CTS behaviour. Completely overhauled interrupt logic - vectors should be correct for most async modes. Implemented different auto-reset receive errors in MPSC vs SIO. Implemented SDLC transmission including bit stuffing, transmit CRC, abort and underrun/end-of-message behaviour. Added an SDLC consumer device that logs SNA frame headers and data. Generalise synchronous transmission to other modes, re-implement break detection. Implemented enough of synchronous receive mode to pass (MESS) Univac UTS-20 channel A loopback test. Treat disabling transmitter as satisfying a transmit interrupt. Disabled automatic CRC transmission in monosync mode. Clear receive errors on channel reset. Fixed reporting receive errors [Vas Crabb]. Moved dlair.cpp and proconn.cpp driver from z80dart.h to z80sio.h [Robbbert]. First stab at WRDY emulation. Some logging improvements. Use arays for callbacks [AJR, Vas Crabb].
- 0.191              : Eliminated custom Z80SIO_ADD macros [AJR]. Inverted DCD status bit [Carl]. Z80 SIO now returns CPU specific default vector when no interrupt found to acknowledge [Joakim Larsson Edstrom].
- 0.190              : Added Z80 SIO to (MESS) Jade JGZ80 [Robbbert].
- 0.184              : Added I8274 type macros and derived class + logging. Changed (MESS) isbc.cpp to use z80sio.cpp i8274 device driver instead of z80dart.cpp. Variant support for i8274/upd7201 and a refactored interrupt support and cleanup Z80-SIO [Joakim Larsson Edstrom].
- 0.180              : Added UPD7201 device type to Z80 SIO and used it in (MESS) Mizar VME8105, plus some maintenance [Joakim Larsson Edstrom].
- 0.167              : Improved logging. Started variant handling [Joakim Larsson Edstrom].
- 0.166              : Re-added machine\z80sio.c/h. Added driver for (MESS) Heurikon HK68/V10 [Joakim Larsson Edstrom].
- 0.154              : Removed machine\z80sio.c/h. Flagged Z80SIO as deprecated [Oliver Stoeneberg]. DEVCB2'd Z80SIO so we can get rid of DEVCB1 [Curt Coder]. Removed old Z80SIO device [hap].
- 0.146u5            : Fixed unused variable (m_status[regnum]) [Curt Coder]. De-legacy the Z80SIO device (drivers\dlair.c, mcr.c, proconn.c and machine\mcr.c) [Aaron Giles].
- 0.139u1            : Curt Coder fixed Z80 SIO interrupts by clearing them at constructor time so Z80 daisy chain works properly and doesn't stall on a non-existent IEO condition.
- 0.137              : Dirk Best added Z80SIO register access functions to prevent trampoline functions.
- 0.127u7            : Aaron Giles made the Z80 daisy chain aware of referencing device-specific devices. Aaron Giles added new functions for building device-relative tags. Changed machine configuration builder to use these functions. Also changed the laserdisc player devices to use them. Updated Z80 CTC/SIO code to assume that the CPU provided for the clock is relative to the device that the CTC/SIO belong to. Updated memory code to assume that regions and devices referenced by the memory map are relative to the device the associated CPU belongs to.
- 0.127u6            : Aaron Giles converted Z80 SIO to device. Updated drivers accordingly.
- 0.111u4            : Aaron Giles fixed several bugs and improved emulation of the Z80 SIO chip.
- 0.104u1            : Added machine\z80sio.c/h. Removed machine\z80fmly.c. Aaron Giles separated various Z80 peripherals (CTC, PIO) into separate modules. Added SIO module, hooked it up to NFL Football. Still no visible progress.
- NOTES: Z80-SIO Serial Input/Output emulation
- PCB: Z80A SIO-0 = Z0844004 PSC  DIL-40; Z80B SIO-0 = Z0844006 PSC  DIL-40; Z84C40  SIO-0 DIL-40 10MHz (Enhanced)
- DRIVERS: ddenlovr.cpp, dlair.cpp, dynax.cpp, mcr.cpp, model1.cpp, polyplay.cpp, proconn.cpp, quickncrash.cpp and royalmah.cpp
- SOURCE: machine\z80sio.cpp



1.18  Z80 STI

- 0.221              : Simplified handlers [Osso].
- 0.191              : Fixed (MESS) Televideo TS803H and used Z80STI; cleanup and notes [Robbbert].
- 0.154              : Converted Z80 STI to DEVCB2 [Fabio Priuli].
- 0.152              : Removed unused rxd callback from Z80STI [smf].
- 0.149              : Added RS-232 ports to machine\z80sti.c [Curt Coder].
- 0.148u2            : Fixed uninitialized member in machine\z80sti.c [Oliver Stoeneberg].
- 0.142u3            : Curt Coder fixed Z80STI interrupts.
- 0.137              : Added machine\z80sti.c/h. Imported Z80 STI from MESS [Curt Coder].
- NOTES: Mostek MK3801 Serial Timer Interrupt Controller (Z80-STI) emulation
- DRIVERS: (MESS)
- SOURCE: machine\z80sti.cpp



1.2   Compatible/enhanced Z80 CPUs

- 0.120              : Andrew Gardner and Justin Kerk hooked up the KL5C80 communications CPU to the HNG64 BIOS and emulated some of its features.
D780   : The NEC D780C  is a Z80A compatible processor for program and sound (Mariner, Myhero, Tehkanwc).
D70008 : The NEC D70008 is a Z80A compatible processor for program and sound (Bbmanw, Dynablst, Silkworm, Tbowl).
ST-0016: The Seta custom chip ST-0016 is a all in one Z80, gfx and sound chip (Nratechu, Mayjinsn, Renju)
KL5C80 : Nintendo Z80 based CPU (hng64.c)



1.3   Z8000/Z8002

- 0.252              : Fixed m20 word I/O writes [Carl].
- 0.237              : Simplified EXTS[BL]? implementation (z8000\z8000ops.hxx) [AJR].
- 0.221              : Clean up reset sequence (don't read program space at device_reset time). Use callbacks to vector all external interrupts and correct data pushed during acknowledgment. For NMI and NVI, a vector is read from the bus but merely stored on the stack (Most Z8000 systems seem to just leave the bus open here.) For VI, the vector offset calculation has been changed for the Z8001: the low byte is multiplied by 2, not 4, so AD0 generally must be driven low. Fixed unreliable order of operations in operand calculation for certain instruction modes. Memory access refinements. Implemented byte smearing for memory and I/O writes. More accurately handle unaligned word I/O without breaking PCOS-M24. Z8002: Correct width of I/O space (16-bit, not 8-bit). Z8001: Expanded address space to 23 bits. Z8001 and Z8002: Documented pinout [AJR].
- 0.210              : Added register save state. Misc cleanup. Pile on some extra address spaces [AJR].
- 0.201              : Added notes that Z8002 endianness is still broken [AJR].
- 0.193              : Added cpu\z8000\8000dasm.h.
- 0.191              : The Z8000 daisy chain is different enough from the Z80 that it'll probably need it's own implementation if anything uses it. The (MESS) P8000 (16bit Board) uses glue logic to make z80 daisy chain devices work [Carl].
- 0.186              : Changed description to 'Zilog Z8002'.
- 0.180              : Changed the Z8000 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\z8000\z8000ops.inc and z8000tbl.inc to z8000ops.hxx and z8000tbl.hxx.
- 0.173              : Make the Z80/Z180 daisy chain an interface that interfaces with the existing interface. Z8000 has been hooked up to this as well (p8000_16 already configures it), but currently does nothing with it [AJR].
- 0.168              : Fixed Z800x disassembly (z8000tbl.inc) [Oliver Lehmann].
- 0.164              : Fixed lda register corruption (store src in case dst == src) [Carl].
- 0.163              : Set flag on even parity. Make 9c00 an alias to testl [Carl].
- 0.162              : Added Z8000 apb support to (MESS) Olivetti M24. Z8000 mreq instruction and the apb expects sout to work just like out. Port access can be unaligned [Carl].
- 0.153              : Changed cpu\z8000\z8000ops.c to z8000ops.inc and z8000tbl.c to z8000tbl.inc [Oliver Stoeneberg]. Modernized Z8000 cpu core [Wilbert Pol].
- 0.148u4            : (MESS) Z800x and M20 improvements to boot CP/M-8000 [Christian Groessler]: Z800x: Push the correct word on internal traps. Fixed FCW handling in system non-segmented mode. Added missing form of ldb reg, #imm. Show previous PC, NSPSEG, and PSAPSEG in the debugger. Improved flags display in the debugger. Added debugger command z8k_disass_mode to toggle segmented/non-segmented. Default "auto" tracks the current execution state. Don't block nested exceptions if the priority and the FCW allows it. M20: Initialize memory to 0x00. Some keyboard fixes.
- 0.148              : Christian Groessler fixed Z800x some bugs in non-segmented mode.
- 0.147u4            : Fixed some incorrect Z800x opcodes and address register math in segment mode. Olivetti M20 (MESS) now can boot PCOS to the prompt. Implement Z8001 separate program/data address spaces [Christian Groessler].
- 0.147u3            : Fixed implementation of trdb, trdrb, trib, trirb, trtdb, trtdrb, trtib and trtirb instructions (cpu\z8000\z8000ops.c) [Christian Groessler, R. Belmont].
- 0.146u1            : Handle Z800x vectored interrupts correctly. More Z8001 improvements [Christian Groessler].
- 0.146              : Preliminary Z8001 support. Support for disassembly of Z8001 instructions [Christian Groessler]. More Z8001 work, Olivetti L1 M20 (MESS) now passes memory test. Fixed Z8001 inb/outb @rX form. M20 PPI test now passes [R. Belmont]. Z8001 has 16-bit wide I/O ports [R. Belmont, Christian Groessler].
- 0.128u6            : Updated Z8000 tables to reflect recent findings [Juergen Buchmueller]. Pointer-ified the Z8000 core [Aaron Giles].
- 0.109u5            : Aaron Giles converted the Z8000 disassemblers to the new format and added step in/out support where it was obvious.
- 0.35b2             : Added z8000\z8000.c/h, z8000cpu.h, z8000dab.h, z8000ops.c, z8000tbl.c, 8000dasm.c and makedab.c. Z8000 emulator [Juergen Buchmueller].
- GAMES: Pole Position (Namco 1982), Pole Position II (Namco 1983)
- PCB: ST Z8002B1-NONSEGCPU, ZILOG Z8002PS-NONSEGCPU, DIP40 (Polepos2), LH8002P-Z8002CPU (Polepos)
- DRIVERS: polepos.cpp
- SOURCE: cpu\z8000\z8000.cpp


1.4   Z8

- 0.263              : A little more optional logging for IRQs (z8\z8.cpp and z8\z8ops.hxx) [AJR].
- 0.225              : Added interface notes. Added optional logging for SIO (z8\z8.cpp). Fixed reads from Ports 0 & 1 [AJR].
- 0.224              : Fixed bug in decimal adjust (z8\z8ops.hxx). Fixes PRINT 654 in (MESS) BERT (1987) [Robbbert].
- 0.212              : Fixed calculation of half carry flag. Z8671 BASIC no longer prints "12" when the result is 18 (z8\z8ops.hxx) [AJR].
- 0.209              : Added register pairs to debug state [AJR].
- 0.207              : Fixed disassembly of LD IR, R opcode. Write RRn instead of Rn when disassembling INCW/DECW (z8\z8dasm.cpp) [AJR].
- 0.206              : Rewrote timer emulation, including support for most TIN and TOUT modes. Handle more timer corner cases. Preliminary UART emulation. Added standard_irq_callback for the sake of debugging. Mask RP properly for debug register view. Splitted sio_tick into two functions [AJR].
- 0.205              : Register overhaul: Created address space for internal register file. Added port output registers to debug state. Lock out interrupts on reset until EI [AJR].
- 0.204              : Use DEVCB3 instead of MCFG macros [AJR].
- 0.203              : Allow step-over with djnz (z8\z8dasm.cpp). When pc adjusted, move yellow bar [Robbbert].
- 0.202              : Fixed detection of stack type and JP @ and CALL @ instructions. Added DA instruction (Decimal Adjust). Fixed numerous bugs. Now all 4 machines in (MESS) jtc.cpp are pretty much working now [Robbbert].
- 0.195              : Make address spaces big-endian [AJR].
- 0.193              : Added cpu\z8\z8dasm.h.
- 0.191              : Fixed disassembly of "LDE Irr, r" [AJR].
- 0.190              : Make data space optional and fixed stack pop semantics. Mask addresses for external memory accesses based on P0 control bit and external stack accesses. Fixed C flag polarity for CP, SBC, SUB and actually subtract with carry in SBC. This lets Ameri-Hockey pass its initial checksum calculation. Interrupts are working now [AJR].
- 0.188              : Convert ports to DEVCB. A few technical modifications to memory interface.
- 0.187              : Fixed disassembly of DECW RR opcode (cpu\z8\z8dasm.cpp). Added more control registers for debug state (cpu\z8\z8.cpp) [AJR].
- 0.186              : Timer clock cleanup [AJR].
- 0.180              : Changed the Z8 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\z8\z8ops.inc to z8ops.hxx.
- 0.152              : Modernized Z8 cpu core [Wilbert Pol].
- 0.134              : Curt Coder fixed Z8 disassembler argument order.
- 0.133u5            : Added cpu\z8\z8.c/h, z8dasm.c and z8ops.c. Curt Coder added preliminary Zilog Z8 CPU core for MESS.
- SOURCE: cpu\z8\z8.cpp


1.41  Z8681
- 0.190              : Make data space optional and fixed stack pop semantics. Mask addresses for external memory accesses based on P0 control bit and external stack accesses. Fixed C flag polarity for CP, SBC, SUB and actually subtract with carry in SBC. This lets Ameri-Hockey pass its initial checksum calculation. Interrupts are working now (Z8681 CPU; cpu\z8\z8.cpp) [AJR].
- 0.188              : Added 'Z8681' device. Added Z8681 type for Ameri-Hockey [AJR].
- DRIVERS: amerihok.cpp
- SOURCE: cpu\z8\z8.cpp


1.42  Z8682
- 0.206              : Added 'Zilog Z8682' device. Added Z8682 type with (fake) internal ROM; prevent timer from endlessly thrashing with a count of 1. Provide Z8 test ROM from Zilog application note. First 18 bytes of this (the interrupt/reset bootstrap) are identical to the previous hand-crafted binary [AJR].
- SOURCE: cpu\z8\z8.cpp


1.43  Z8671
- 0.212              : Fixed calculation of half carry flag. Z8671 BASIC no longer prints "12" when the result is 18 (z8\z8ops.hxx) [AJR].
- 0.200              : Added dump of pre-programmed Z8671 MCU with BASIC/DEBUG interpreter [AJR].
- SOURCE: cpu\z8\z8.cpp


1.5   Z86E02
- 0.225              : Added Z86E02 type. Replaced coin MCU simulation in Puzzlet with low-level Z86E02 CPU emulation [AJR].
- 0.138u3            : Dr. Decapitator added Puzzlet's MCU internal ROM. Zilog Z8 8-bit family MCU requires a new CPU core to be written.
- 26th June 2010: Guru - The Zilog Z86E02 for Puzzlet has now been successfully processed (decap, de-protect & read).
- DRIVERS: metro.cpp
- SOURCE: cpu\z8\z8.cpp


1.51  Z86E08
- 25th June      2010: Dr. Decapitator - Here are some pictures of recently decapped chips. In the center is a picture of a Z86E08, which is similar to the Z86E02 used in Puzzlet.
- SOURCE: ???



1.6   Sharp LZ8420M

- 0.219              : Added cpu\z80\lz8420m.cpp/h. Added skeleton LZ8420M device. It has additional IO, embedded RAM used in psikyo.cpp [cam900].
- NOTES: Sharp LZ8420M Z80 with Built-in RAM
- PCB: LZ8420M (Btlkroad, Gunbird, S1945, Tengai)
- DRIVERS: psikyo.cpp
- SOURCE: cpu\z80\lz8420m.cpp




2.    MOS-Tech (Metal Oxid Semiconductor)

2.1   M6502

- 0.277              : Around 10% performance gain by checking unset devcb on every opcode (m6502\m6502.cpp) [hap].
- 0.258              : Don't clear input pins external state at device_reset. Don't detect edge triggered inputs before the first clockcycle [hap].
- 0.256              : Make fully wait-states compatible [O. Galibert]. Return to implicitly using read_arg to read operands at PC (fixes regression in all (MESS) XaviX games). Side note: This changes the semantics of read_pc to what was formerly known as read_pc_noinc. Now that memory accesses themselves can be interrupted and restarted, updating PC as a side effect is obsolete anyway [AJR].
- 0.254              : Added m6502\m6502mcu.h/ipp. Template 6502 microcontroller helper on underlying CPU type (cpu\m6502\*) [Vas Crabb].
- 0.248              : 6502 future-proofing: Do not overwrite the variable with the access address on a read in case we want to rerun it. Added the missing uses_custom_memory_interface. Avoid multiple instructions on one line for when reads at restartable [O. Galibert].
- 0.223              : NMI is edge triggered, fixes (MESS) Intelligent Chess [hap].
- 0.222              : Changed description to 'MOS Technology 6502' [hap].
- 0.217              : Get rid of deprecated universal newlines open flag in Python scripts (io module is present as of Python 2.6) (scripts\build\verinfo.py, cpu\m6502\m6502make.py) [Vas Crabb].
- 0.216              : Eliminated the disable_cache hack. Now that 'direct_read_data' has been replaced with 'memory_access_cache', which is better equipped to deal with dynamic banking, there should be all the more reason to put an end to this pernicious antipattern [AJR].
- 0.214              : Fixed reset procedure. Fixes incorrect default stack pointer position for the M6507 CPU in (MESS) Atari 2600. The console hardware uses $FD. MAME reveals the default stack to be set to $BD [MoochMcGee]. Added dummy reads before reset (cpu\m6502\om6502.lst) [hap].
- 0.213              : Added P |= F_I to STATE_RESET (https://www.pagetable.com/?p=410) [hap].
- 0.203              : Allow debugger to step over CALLF instruction (m6502\m6502make.py) [AJR].
- 0.201              : Added MCU capabilities [O. Galibert]. Fixed execute loop in 6502 MCU [Vas Crabb]. Fixes 6502 core freakout in (MESS) C64 'Pac Man Arcade' Demo.
- 0.195              : Created derived 6502 type for (MESS) XaviX because it has at least one custom. Fixed tracing and breakpoints for paged variants [O. Galibert].
- 0.194              : Fixed memory leak in M6502 CPU cores [AJR].
- 0.193              : Added cpu\m6502\m6502d.cpp/h.
- 0.189              : Correct cycle counts for undocumented $BF instruction (om6502.lst). Note: Passes now the Lorenz testsuite-2.15's cputiming.prg and does not break laxay.prg. Ref: NMOS 6510 Unintended Opcodes no more secrets (v0.91 - 24/12/16) http://csdb.dk/release/?id=152327 page 14 ($BF) cycles = 3 to read and 4+1 if page boundary [David Viens].
- 0.180              : Changed the M6502 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.176              : Removed irq_line methods from M6502 and replace uses with DEVCB_INPUTLINE [AJR].
- 0.175              : Disabled VBL opcode logging (use wpiset 0,1,r) (cpu\m6502\odeco16.lst) [Angelo Salese].
- 0.160              : Removed except clause syntax not supported on Python 3. This change uses sys.exc_info()[1] instead of the "as" syntax to retain Python 2.5 compatibility (cpu\h8\m6502make.py) [Mike Naberezny]. Fixed icounting (m6502\m6502make.py) [Peter Ferrie].
- 0.159              : Fixed inline helpers (m6502\m6502.h), does that break (MESS) C65? [O. Galibert].
- 0.154              : Compile-time disable now the slow attotime precalculation/caching at start of each timeslice. This precalculation seems to be part of OG's "CPU core template", as all CPU cores written by him do it. It's used to optimize things like onboard serial ports and high-frequency timers; however, the M6502 and its derivatives have neither onboard serial ports nor high-frequency timers, and the precalculation is simply a boat anchor on drivers with 6502-family CPUs and tight interleaving. (MESS) Added MCFG_M6502_DISABLE_DIRECT (address decoding is 100% dynamic, no RAM/ROM banks) to all Commodore 8bit drivers [Alex Jackson].
- 0.153              : Expose SYNC pin through DEVCB2 in M6502 for more flexibility. Not everyone calls the base device_start, but they do call the base init(). Fixed missing semicolon. Fixed some unofficial opcodes. The 6510 version of lxa may be wrong in the same way (on 6502 it loads A and X with the immediate value, no AND occurs), someone C= savvy please check [R. Belmont].
- 0.149u1            : Fixed some M6502 related compiler output (cpu\m6502\m6502make.py) [Mamesick].
- 0.149              : Redo the M6502 prefetch and reset the state on debugger PC change [O. Galibert].
- 0.148u4            : Undocumented M6502 instruction 0x80 is a 2-byte nop, not a 1-byte one (m6502\dm6502.lst, dm6509.lst, dm6510.lst and dn2a03.lst) [O. Galibert].
- 0.148u3            : Seriously untested multi-dispatch-table support for M6502 [O. Galibert]. The (indirect),y zeropage should wrap. So ff,00 instead of ff,100 (m6502\om6502.lst, om6509.lst, om740.lst and on2a03.lst) [hap].
- 0.148              : Cleanup M6502 [O. Galibert].
- 0.147u4            : Removed cpu\m6502\m6502make.c. Added cpu\m6502\m6502make.py. Snakes in an emulator (Compile M6502 with Python) [Robert Muth, O. Galibert]. Fixed Python to use env variable as described in root makefile; fixes builds on Windows with spaces in the path [Balrog, Lord Nightmare].
- 0.147u3            : Removed cpu\m6502\6502dasm.c, ill02.h, minc4510.h, mincce02.h, ops02.h, ops09.h, ops4510.h, opsc02.h, opsce02.h, opsn2a03.h, t6502.c, t6509.c, t6510.c, t65c02.c, t65ce02.c, t65sc02.c and tn2a03.c. Added cpu\m6502\dm4510.lst, dm6502.lst, dm6509.lst, dm6510.lst, dn2a03.lst, m6502make.c, m6504.c/h, m6510.c/h, m6510t.c/h, m65sc02.c/h, m7501.c/h, m8502.c/h, n2a03.c/h, odeco16.lst, om4510.lst, om6502.lst, om6509.lst, om6510.lst, om65ce02.lst and on2a03.lst. Rewrote 6502 to modern device, cycle-exact and interruptible. IRQ fixes. Fixed the bitwise ops and their disassembly. Added virtual destructors [O. Galibert].
- 0.147              : Fixed 6502 CPU peripheral port behavior by introducing pull-up and pull-down masks to the CPU interface. Refactored the indexed read/write to use DEVCB, and fixed the peripheral port for Plus4 (MESS) [Curt Coder].
- 0.145u4            : Wilbert Pol fixed OAL illegal m6502 instruction to pass Acid5200 test (http://www.virtualdub.org/altirra.html).
- 0.131u3            : Wilbert Pol moved the configuration of M6502-family callbacks to the CPU configuration.
- 0.129              : Aaron Giles added kludge to 6502 core such that CLI followed by RTI does not allow any interrupts through. In the future, the 6502 interrupt handling needs further revisiting.
- 0.128u3            : Couriersud converted the M6502 core to reference data via pointers.
- 0.128u2            : Pugsy synchronized 6502 disassembly with CPU core.
- 0.124u4            : Roberto Fresca fixed the 6502 family of disassemblers to show the correct bit to operate for BBR, BBS, RMB and SMB instructions (65C02/65CE02 CPUs and variants).
- 0.114u4            : Added cpu\m6502\minc4510.h. Wilbert Pol improved accuracy of 6502 CPU cores (DECO CPU16, M4510, M6502, M6509, M6510, M6510T, M65SC02 and N2A03) to implement the read/write that happens on every cycle. Moved the "undocumented" instructions from the 6510 cores into the main 6502 core, since there were several other versions of the 6502 cores which have the same undocumented instructions. Removed some of the #define override magic that was going on to make the code easier to read and understand. Updated the 6510 core port_read and port_write functions to include the ddr register in the parameters.
- 0.111u5            : Nathan Woods fixed a 6502 register naming bug.
- 0.110              : Aaron Giles fixed assertions in 6502 diassembler caused by stricter checking introduced in 0.109u5.
- 0.102              : Nathan Woods fixed 6502 initialization so that all internal states are reset properly.
- 0.101u3            : Nathan Woods updated 6502 family of disassemblers to the new disassembler style.
- 0.95u3             : Nathan Woods updated some M6502 variants (DECO CPU16, N2A03) in accordance with his recent M6502 changes and fixed crashes in NES games with new 6502 code.
- 0.95u2             : Nathan Woods added a hook to M6502 that allows drivers to override the indexed addressing mode (there is a certain system on the MESS side that does some very ugly tricks to change the behavior of this mode).
- 0.94u5             : Nathan Woods removed RUNTIME_LOADER cruft and implemented disassembler flags in cpu\m6502\6502dasm.c and did some minor cleanups.
- 0.84u5             : Curt Coder fixed disassembly in mirrored regions for the 6502.
- 0.84               : Aaron Giles removed some silly 6502 speedups in the Atari games.
- 0.82               : Stefan Jokisch fixed the 6502 STX (abs) cycle count.
- 21st February  2004: Nathan Woods sent in another miscellaneous patch for I286 and M6502 CPU cores.
- 26th April     2003: Stefan Jokisch fixed the cycle counts for the P[HL][PA] instructions in the 6502 CPU core.
-  5th December  2001: Zsolt Vasvari and Aaron Giles fixed a small bug in 6502/65c02 CPU cores.
- 18th August    2001: Zsolt Vasvari updated the 6502 CPU core so that another hack could be removed from the Burger Time decryption.
-  5th March     2001: Olivier Galibert fixed a bug in the 6502 core which was introduced by the saved states support, and some Taito games that were broken because of some bugs in the state saving code.
- 0.37b10            : Added cpu\m6502\opsn2a03.h.
- 25th November  2000: Peter Trauner fixed some problems in the M6502 CPU core.
- 0.37b3             : Added cpu\m6502\ops4510.h and m6502.txt.
- 0.37b2             : Added cpu\m6502\opsc02.h and ill02.h.
- 0.36RC1            : Changed m6502\m6502ops.h and tbl6502.c to t6502.c, ops02.h.
- 16th December  1999: Juergen Buchmueller fixed a 6502 interrupt bug.
- 0.35b11            : Major overhaul to the Atari games, and fixes to the 68000 and 6502 cores to get them going properly [Aaron Giles].
- 0.34b4             : Removed m6502\codes.h, makefile, dasm.c and tables.h.
- 18th April     1999: Aaron Giles modified the 6502 core to fix Indiana Jones, and changed the Atari System 1 drivers to decode certain graphics data from PROMs instead of hard-coded variables.
- 0.34b2             : Added m6502\m6502ops.h, tbl6502.c, tbl6510.c and tbl65c02.c. Juergen Buchmueller replaced the 6502 emulator with a new one which also supports 65C02 and 6510. Marat Fayzullin's core is no longer used.
- 0.33b2             : Christophe Verre fixed a bug in 6502\dasm.c (this only applies if you compile it to get a standalone disassembler - it is not part of MAME).
- 0.33b1             : Changed the 6502 emulation to disable interrupts on a reset. Not sure if this is the correct behaviour, but Centipede needed it for the service mode to work.
- 0.30               : Added m6502\6502dasm.c. Removed m6502\debug.c. The 6502 supports bank switching via cpu_setbank() [Aaron Giles].
- 0.27               : Bernd Wiebelt sincerely hopes he fixed the BCD-emulation in the 6502 emulation. At least the authentic Tempest feeling (broken X/Y monitor) is gone, since the game now starts without pressing Fire. New macro ROM_RELOAD(), meaning to reload the previous ROM at a different address (useful with 6502 games which need reset/irq vectors at FFFx).
- 0.16               : Nicola Salmoria finally took the time to change Z80.h / M6502.h to make them work together. This allowed me to remove some kludges in cpuintrf.c. I also added some new functions, which can be used regardless of the CPU type: cpu_getpc(), cpu_geticount(), cpu_seticount(). Fixed a couple of bugs in M6502 BCD arithmetic. One of them was causing the pepper counter in Burger Time to behave strangely.
- 0.14               : Nicola Salmoria fixed bug which sometimes caused 6502 games not to run (actually they did run, but interrupts didn't happen).
- 0.13               : Use latest version of Marat's 6502 engine [Nicola Salmoria].
- 0.12               : Source: Multiple CPU support. All you have to do to setup multiple CPUs is add entries to the cpu[] array in the MachineDriver definition. Each CPU can have different type (currently Z80 and M6502 are supported), clock, address space, memory/IO port hook, interrupt handlers, number of interrupts per video frame. Nicola had already done a similar change to the 6502 engine, it was needed by Burger Time which wouldn't accept coins otherwise. Burger Time is the first multiple CPU game supported by MAME (two 6502, one for code, one for sound).
- 0.10               : Added m6502\m6502.c/h, codes.h, tables.h, dasm.c, debug.c and makefile. Support for 6502 CPU. From a driver writer point of view, it is used just like the Z80, the only difference being that you have to specify CPU_M6502 instead of CPU_Z80 in the MachineDriver definition. Multiple CPUs are still NOT supported. Centipede is the first and Nibbler is the second 6502 game supported by MAME. Nicola currently using the M6502 Emulator (1996) by Marat Fayzullin & Alex Krasivsky. The version used in MAME is slightly modified.
- PCB: R6502 (Centiped), SynerTek SY6502A (Fantasy), UM6502A CPU + R6502P SND (Pcktgal), 8333 (SY 6502A) (Liberate)
- PCB: 6502, 6502A, 6502B, R6502, R6502P, Rockwell R6502AP, RP6502, RP6502A, UM6502, UM6502A, S8010-6502 or S8010 6502 (Astrof)
- DRIVERS: 5clown.cpp, actfancr.cpp, akkaarrh.cpp, alinvade.cpp, asteroid.cpp, astrof.cpp, atarifb.cpp, atarig1.cpp, atarig42.cpp, atarisy1.cpp, atarisy2.cpp, atetris.cpp, attckufo.cpp, avalnche.cpp, badlands.cpp...
- SOURCE: cpu\m6502\m6502.cpp



2.11  W65C02

- 0.282              : Stub out another register to get toumapet slightly closer to booting (st2302u; m6502\st2205u.cpp) [AJR].
- 0.273              : Changed cpu\m6502\dm65c02.lst to cpu\m6502\dw65c02.lst, m6502\om65c02.lst to m6502\ow65c02.lst, m6502\m65c02.cpp/h to m6502\w65c02.cpp/h, m6502\m65c02d.cpp/h to m6502\w65c02d.cpp/h. Renamed m65c02 to w65c02 [hap].
- 0.241              : Added m6502\w65c02s.cpp/h. Changed m6502\dst2xxx.lst to m6502\dw65c02s.lst, m6502\ost2xxx.lst to m6502\ow65c02s.lst. 65C02 updates: Added W65C02S CPU emulation with subtly different fetch patterns from classic 65C02 and use it for Centipede / Millipede / Missile Command (rev 1.03) and Centipede / Millipede / Missile Command / Let's Go Bowling (rev 1.62). Replaced ST2XXX's slightly customized CPU emulation with hooks into new W65C02S core. Fixed regression by preventing IRQ level from changing between vector pulls (m6502\st2xxx.cpp) [AJR].
- 0.223              : NMI is edge triggered, fixes (MESS) Intelligent Chess [hap].
- 0.222              : Changed description to 'WDC W65C02' [hap].
- 0.216              : Added m6502\dst2xxx.lst, ost2xxx.lst, st2204.cpp/h, st2205u.cpp/h and st2xxx.cpp/h. 65C02 opcode timing and bus usage corrections: BBR and BBS use one or two extra cycles when the branch is taken, like other conditional branches. TRB and TSB perform an extra read of the operand instead of an extra write. Preliminary SoC emulation for (MESS) Sitronix ST2204 and ST2205U [AJR].
- 0.214              : Added stack access to 65c02 reset too (cpu\m6502\om65c02.lst) [hap].
- 0.213              : Correct memory access patterns for read-modify-write instructions. The extra operand cycle in CMOS versions becomes a dummy read rather than a writeback, and page boundaries do not figure into cycle timings for indexed modes. D flag is cleared on reset in CMOS models [AJR].
- 0.193              : Added cpu\m6502\m65c02d.cpp/h.
- 0.148u3            : The (indirect),y zeropage should wrap. So ff,00 instead of ff,100 (m6502\om65c02.lst) [hap].
- 0.147u3            : Added cpu\m6502\m65c02.c/h. Removed cpu\m6502\t65c02.c, t65ce02.c, dm65c02.lst, dm65ce02.lst, m65c02.c/h, om65c02.lst. Rewrote 6502 to modern device, cycle-exact and interruptible. IRQ fixes. Fixed the bitwise ops and their disassembly. Added virtual destructors [O. Galibert].
- 0.128u1            : Phill Harvey-Smith fixed a subtle bug in the 65c02 emulation where the result of the BIT instruction differs on the 65c02 (from the 6502), when executed in immediate mode.
- 0.124u4            : Roberto Fresca fixed the 6502 family of disassemblers to show the correct bit to operate for BBR, BBS, RMB and SMB instructions (65C02/65CE02 CPUs and variants).
- 0.122u2            : Fixed M65C02 optimization [Peter Trauner].
- 0.114u4            : Improved accuracy of 6502 CPU cores (DECO CPU16, M4510, M6502, M6509, M6510, M6510T, M65C02, M65SC02 and N2A03) to implement the read/write that happens on every cycle. Moved the "undocumented" instructions from the 6510 cores into the main 6502 core, since there were several other versions of the 6502 cores which have the same undocumented instructions. Removed some of the #define override magic that was going on to make the code easier to read and understand. Updated the 6510 core port_read and port_write functions to include the ddr register in the parameters [Wilbert Pol].
- 0.95u3             : Updated some M6502 variants (M65C02) in accordance with his recent M6502 changes and fixed crashes in NES games with new 6502 code [Nathan Woods].
-  5th December  2001: Zsolt Vasvari and Aaron Giles fixed a small bug in 6502/65c02 CPU cores.
-  4th May       2000: Juergen Buchmueller fixed again a bug in the 65c02 opcodes.
- 30th April     2000: Zsolt Vasvari fixed a 65c02 instruction handling bug.
- 13th April     2000: Keith Wilkins fixed PLX/PLY handling in the 65c02 emulation.
- 0.36RC1            : Added t65c02.c.
- 0.34b2             : Added m6502\tbl6502.c, tbl6510.c and tbl65c02.c. Juergen Buchmueller replaced the 6502 emulator with a new one which also supports 65C02 and 6510. Marat Fayzullin's core is no longer used.
- NOTES: The MOS Technology M65C02 has not illegal opcodes from the M65XX series, but has additional commands. So not full compatible to 6502 series.
- DRIVERS: 4roses.cpp, alvg.cpp, calomega.cpp, gts3.cpp, gts3a.cpp, rgum.cpp, seta.cpp and tceptor.cpp
- SOURCE: cpu\m6502\w65c02.cpp



2.12  R65C02

- 0.273              : Added R65C02 subtypes (Rockwell R65C102 and Rockwell R65C112). Added internal clock divider to R65C102 [hap].
- 0.213              : Added R65C02 to UNIDASM. Correct memory access patterns for read-modify-write instructions. The extra operand cycle in CMOS versions becomes a dummy read rather than a writeback, and page boundaries do not figure into cycle timings for indexed modes. Don't throw away the branch offset for BBR and BBS (m6502\om65c02.lst) [AJR].
- 0.193              : Added cpu\m6502\r65c02d.cpp/h.
- 0.147u3            : Added cpu\m6502\dr65c02.lst and r65c02.c/h. Rewrote 6502 to modern device, cycle-exact and interruptible [O. Galibert].
- NOTES: Rockwell R65C02, CMOS variant with bitwise instructions.
- PCB: R65C02P2 (royalcrd, thedeep)
- DRIVERS: funworld.cpp, gamemasters.cpp, goldnpkr.cpp, thedealr.cpp and thedeep.cpp
- SOURCE: cpu\m6502\r65c02.cpp



2.13  M65CE02

- 0.269              : Fixed stz_ce_aba and stz_ce_abx opcodes (m6502\om65ce02.lst) [Angelo Salese]. Fixed dew_zpg, phw_aba and phw_iw2 opcodes (m6502\om65ce02.lst) [smf].
- 0.223              : NMI is edge triggered, fixes (MESS) Intelligent Chess [hap].
- 0.222              : Changed description to 'CSG 65CE02' [hap].
- 0.194              : Fixed memory leak in M6502 CPU cores (M65CE02) [AJR].
- 0.193              : Added cpu\m6502\m65ce02d.cpp/h.
- 0.159              : Generalize Kale's findings (m6502\om65ce02.lst) [O. Galibert].
- 0.154              : Fixed some bit instructions in the M65CE02 core [Dirk Best].
- 0.125u7            : Atari Ace fixed a few build problems with the M65CE02 CPU core.
- 0.124u4            : Roberto Fresca fixed the 6502 family of disassemblers to show the correct bit to operate for BBR, BBS, RMB and SMB instructions (65C02/65CE02 CPUs and variants).
- 0.123u1            : Atari Ace rescued the M65CE02 core from bitrot hell.
- 0.120u1            : Added cpu\m6502\mincce02.h.
- 0.114u4            : Wilbert Pol improved accuracy of 6502 CPU cores (DECO CPU16, M4510, M6502, M6509, M6510, M6510T, M65C02, M65SC02 and N2A03) to implement the read/write that happens on every cycle. Moved the "undocumented" instructions from the 6510 cores into the main 6502 core, since there were several other versions of the 6502 cores which have the same undocumented instructions. Removed some of the #define override magic that was going on to make the code easier to read and understand. Updated the 6510 core port_read and port_write functions to include the ddr register in the parameters.
- 0.111u1            : Giuseppe Gorgoglione converted m65ce02.c to use cpuintrf_temp_str() instead of local string pools.
- 0.94u5             : Nathan Woods removed RUNTIME_LOADER cruft in cpu\m6502\m65ce02.c.
- 0.36RC1            : Changed cpu\m6502\tbl65c02.c to m65ce02.c/h, t65ce02.c, t65sc02.c and opsce02.h. Added 65sc02 and 65ce02 CPU cores [Peter Trauner].
- DRIVERS: cpu\m6502\m4510.h + bus\amiga\zorro\a2232.h
- SOURCE: cpu\m6502\m65ce02.cpp



2.14  G65SC02

- 0.273              : Changed m6502\m65sc02.cpp/h to m6502\g65sc02.cpp/h. Added G65SC02 subtypes (GTE G65SC12, GTE G65SC102 and GTE G65SC112). Correct constructor [hap]. Removed Rockwell bit opcodes (source comment appears to be mistaken). Added internal clock divider to G65SC102 [AJR].
- 0.222              : Changed description to 'GTE G65SC02' [hap].
- 0.114u4            : Wilbert Pol improved accuracy of 6502 CPU cores (DECO CPU16, M4510, M6502, M6509, M6510, M6510T, M65C02, M65SC02 and N2A03) to implement the read/write that happens on every cycle. Moved the "undocumented" instructions from the 6510 cores into the main 6502 core, since there were several other versions of the 6502 cores which have the same undocumented instructions. Removed some of the #define override magic that was going on to make the code easier to read and understand. Updated the 6510 core port_read and port_write functions to include the ddr register in the parameters.
- 0.36RC1            : Changed cpu\m6502\tbl65c02.c to m65ce02.c/h, t65ce02.c, t65sc02.c and opsce02.h. Added 65sc02 and 65ce02 CPU cores [Peter Trauner].
- NOTES: The M65sc02 is M65c02 compatible and has additional commands.
- PCB: G65SC02P (Igpoker, Jollycrd, Pool10)
- DRIVERS: funworld.cpp and snookr10.cpp
- SOURCE: cpu\m6502\g65sc02.cpp


2.15  M6503

- 0.258              : Added cpu\m6502\m6503.cpp/h. Added 'MOS Technology 6503' CPU. Changed logaddr width [hap].
- DRIVERS: gts1.cpp, gts80.cpp, gts80a.cpp, gts80b.cpp and spectra.cpp
- SOURCE: cpu\m6502\m6503.cpp


2.16  M6504

- 0.258              : Changed logaddr width [hap].
- 0.222              : Changed description to 'MOS Technology 6504' [hap].
- 0.194              : Fixed memory leak in M6502 CPU cores (M6504) [AJR].
- 0.177              : Added inderp.cpp driver.
- 0.141u1            : Added allied.c driver.
- DRIVERS: allied.cpp and inderp.cpp
- SOURCE: cpu\m6502\m6504.cpp



2.17  M6507

- 0.258              : Changed logaddr width [hap].
- 0.222              : Changed description to 'MOS Technology 6507' [hap].
- 0.205              : Added 'MOS Technology M6507' device (cpu\m6502\m6507.cpp).
- 0.194              : Fixed memory leak in M6502 CPU cores (M6507) [AJR].
- DRIVERS: (MESS) a2600.cpp
- SOURCE: cpu\m6502\m6504.cpp



2.18  M6508

- 0.210              : Added 6508 variant [AJR].
- NOTES: MOS Technology M6508
- DRIVERS: (MESS) c900.cpp
- SOURCE: cpu\m6502\m6510.cpp



2.19  M6509

- 0.194              : Fixed memory leak in M6502 CPU cores (M6509) [AJR].
- 0.193              : Added cpu\m6502\m6509d.cpp/h.
- 0.147u3            : Removed cpu\m6502\t6509.c. Added cpu\m6502\dm6509.lst and om6509.lst. M6509 "normal" read/writes happen in the fetch bank. Added virtual destructors [O. Galibert].
- 0.147u1            : Fixed EA zero page indirect + Y (post indexed) in M6509 [Curt Coder].
- 0.120u1            : Wilbert Pol fixed memory access for M6509 instructions 91 and b1.
- 0.114u4            : Wilbert Pol improved accuracy of 6502 CPU cores (DECO CPU16, M4510, M6502, M6509, M6510, M6510T, M65C02, M65SC02 and N2A03) to implement the read/write that happens on every cycle. Moved the "undocumented" instructions from the 6510 cores into the main 6502 core, since there were several other versions of the 6502 cores which have the same undocumented instructions. Removed some of the #define override magic that was going on to make the code easier to read and understand. Updated the 6510 core port_read and port_write functions to include the ddr register in the parameters.
- 0.111u5            : Nathan Woods fixed a M6509 register naming bug.
- 0.90u1             : Nathan Woods fixed the M6509 core to appease the new compiler.
- 0.79u3             : Nathan Woods updated M6509 CPU core to MAME 0.79.
- 11th February  2004: Nathan Woods updated the MESS specific CPU cores (such as I286, M4510 and M6509) with latest changes.
- 0.36RC2            : Added cpu\m6502\m6509.c/h, t6509.c and ops09.h.
- DRIVERS: (MESS) cbm2.cpp
- SOURCE: cpu\m6502\m6509.cpp



2.1A  M6510

- 0.269              : Initialize CPU port to all output [Angelo Salese].
- 0.194              : Fixed memory leak in M6502 CPU cores (M6510) [AJR].
- 0.193              : Added cpu\m6502\m6510d.cpp/h.
- 0.147u3            : Removed cpu\m6502\t6510.c. Added cpu\m6502\dm6510.lst, m6510.c/h, m6510t.c/h and om6510.lst. Added virtual destructors [O. Galibert].
- 0.114u4            : Wilbert Pol improved accuracy of 6502 CPU cores (DECO CPU16, M4510, M6502, M6509, M6510, M6510T, M65C02, M65SC02 and N2A03) to implement the read/write that happens on every cycle. Moved the "undocumented" instructions from the 6510 cores into the main 6502 core, since there were several other versions of the 6502 cores which have the same undocumented instructions. Removed some of the #define override magic that was going on to make the code easier to read and understand. Updated the 6510 core port_read and port_write functions to include the ddr register in the parameters.
- 0.101u3            : Nathan Woods updated 6502 family of disassemblers to the new disassembler style. Added internal memory maps for the m6510 and m4510 CPU cores. Updated m4510 to use address translation hooks.
- 0.36RC1            : Changed cpu\m6502\tbl6510.c to t6510.c.
- 0.34b2             : Added m6502\tbl6510.c. Juergen Buchmueller replaced the 6502 emulator with a new one which also supports 65C02 and 6510. Marat Fayzullin's core is no longer used.
- DRIVERS: (MESS) cbm2.cpp
- SOURCE: cpu\m6502\m6510.cpp



2.1B  M6510T
- SOURCE: cpu\m6502\m6502.cpp



2.1C  M4510

- 0.269              : CPU I/O port support (backport from M6510 core). Initialize CPU port to all output [Angelo Salese].
- 0.194              : Fixed memory leak in M6502 CPU cores (M4510) [AJR].
- 0.193              : Added cpu\m6502\m4510d.cpp/h.
- 0.151              : Fixed m65ce02_device typo in M4510. Added M4510 memory_translate [Wilbert Pol].
- 0.147u3            : Removed cpu\m6502\minc4510.h and ops4510.h. Added cpu\m6502\dm4510.lst and om4510.lst. Added virtual destructors [O. Galibert].
- 0.144u7            : Initialize M4510 input callback too [O. Galibert].
- 0.127u1            : M4510 core fixes [Roberto Zandona]: Banking in read and write operations. jsr and jsrx instruction. Fixed TSY instruction.
- 0.120u1            : Wilbert Pol fixed the M4510 CPU core from not updating the instruction cycle counter.
- 0.114u4            : Wilbert Pol improved accuracy of 6502 CPU cores (DECO CPU16, M4510, M6502, M6509, M6510, M6510T, M65C02, M65SC02 and N2A03) to implement the read/write that happens on every cycle. Moved the "undocumented" instructions from the 6510 cores into the main 6502 core, since there were several other versions of the 6502 cores which have the same undocumented instructions. Removed some of the #define override magic that was going on to make the code easier to read and understand. Updated the 6510 core port_read and port_write functions to include the ddr register in the parameters.
- 0.109u2            : Nathan Woods added checking for register symbol names to ensure they aren't numeric (which prevents their identification by the expression parser). Changed the M4510 CPU symbols to avoid tripping this check.
- 0.101u3            : Nathan Woods updated 6502 family of disassemblers to the new disassembler style. Added internal memory maps for the m6510 and m4510 CPU cores. Updated m4510 to use address translation hooks.
- 0.79u3             : Nathan Woods updated M4510 CPU core to MAME 0.79.
- 11th February  2004: Nathan Woods updated the MESS specific CPU cores (such as I286, M4510 and M6509) with latest changes.
- 0.37b3             : Added cpu\m6502\m4510.c/h.
- 10th May       2000: Peter Trauner added a m4510 (m6502 variant) CPU core.
- NOTES: The M4510 CPU has a integrated 20 bit memory management (map), 2 cia6526 integrated and 1 uart integrated
- DRIVERS: (MESS) c65.cpp
- SOURCE: cpu\m6502\m4510.cpp





3.    Motorola

3.1   MC6800

- 0.274              : Added dummy read to CLR opcode (m6800\6800ops.hxx) [blueonesarefaster].
- 0.273              : Random cleanup and Coverity warning fixes (m6800\m6800.cpp) [Vas Crabb].
- 0.263              : Shorthand variable types [hap].
- 0.262              : Removed ONE_MORE_INSN macro and re-added irq logmacro [hap].
- 0.258              : Use manufacturer's syntax for disassembling indexed addressing modes [AJR].
- 0.256              : Zerofill more class variables [hap].
- 0.232              : Account interrupt cycles for timer counter. Removed outdated logs [hap].
- 0.221              : Removed cpu\m6800\6800tbl.hxx. Unneeded 6800ops workaround [hap].
- 0.215              : Changed description to 'Motorola MC6800'.
- 0.193              : Added cpu\m6800\6800dasm.h.
- 0.191              : Fixed behaviour of V flag #2 in CPX (compare X) instruction (m6800\6800ops.hxx). Previous fix for CPX a year ago (MAME 0.175) was flawed and didn't handle overflow properly [Quench].
- 0.188              : Fixed MC6800 LSR/ROR/ASR instructions set overflow flag (V flag) to 'N' XOR 'C'. Document more CPU types [AJR].
- 0.186              : Fixed 6800 invalid instruction length / Program counter behavior. Fixed random crash while drawing characters at the screen borders. draw_char_40 & draw_char_80 : use of std::min. Fixed invalid instructions length. Each 6800 invalid opcodes have a different behavior. This commit fix the PC increment of each invalid opcode execution. There is three groups of invalid opcodes: One byte invalid opcodes/instructions: 00,02,03,04,05,12,13,15,18,1A,1C,1D,1E,1F,21, 38,3A,3C,3D,41,42,45,4B,4E,51,52,55,5B and 5E. Two bytes invalid opcodes/instructions: 61,62,65,6B,83,93,A3,C3,D3,DC,E3,EC and ED. Three bytes invalid opcodes/instructions: 71,72,75,7B,B3,CC,CD,F3,FC and FD. Behavior checked from the Visual 6800 and the real hardware (goupil computer) http://www.visual6502.org/JSSim/expert-6800.html. Invalid opcodes renamed [Jean-Francois DEL NERO]. Quick and dirty split of most MC6801/MC6803/HD63701 features from base M6800 class. The code remains generally archaic and awful and in need of a sweeping rewrite. At least one static variable is no more [AJR].
- 0.180              : Changed the M6800 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Added virtual for consistency [smf].
- 0.176              : Removed irq_line methods from M6800 and replace uses with DEVCB_INPUTLINE. Added several aliases for M6800_IRQ_LINE [AJR].
- 0.175              : Fixed behaviour of N and V flags in CPX (compare X) instruction (cpu\m6800\6800ops.hxx). These two flags are only affected by the data comparison of the upper 8 bits, and not the whole 16 bits [Quench].
- 0.174              : Changed cpu\m6800\6800ops.inc and 6800tbl.inc to 6800ops.hxx and 6800tbl.hxx.
- 0.156              : Fixed usage of uninitialized memory in m6800_cpu_device [Oliver Stoeneberg].
- 0.154              : Fixed usage of uninitialized members in m6800_cpu_device [Oliver Stoeneberg].
- 0.153              : Changed cpu\m6800\6800ops.c to 6800ops.inc and 6800tbl.c to 6800tbl.inc [Oliver Stoeneberg].
- 0.151              : Initialize some more M6800 variables on startup [Wilbert Pol].
- 0.150              : Modernized M6800 cpu core [Wilbert Pol]. MC6801/6803 updates [R. Belmont]: Support for timer output capture to pin P21. Support for externally-clocked serial. Added DEVCB2 hook for serial xmit to easily differentiate xmit from other Port 2 updates. Bits are still also sent to Port 2 of course.
- 0.149              : Resolved out_sc2_func for M6808/HD6301/HD63701 variants in M6800 CPU [Curt Coder].
- 0.147u3            : Workaround for Coleco Adam not booting. The free-running counter values are unacceptable, so let it read from the output compare register instead. To be fixed properly later [Curt Coder].
- 0.147u1            : Removed AS_DATA on all M6800 variants and AS_IO on CPU variants not having IO lines [Miodrag Milanovic].
- 0.146u4            : David Haywood added HD6303Y subtype to 6800 core so that I can correctly define the CPU type in the drivers (it's kinda important because the different types have different internal peripherals, so even if I don't emulate them yet we shouldn't misrepresent it in the drivers). Oliver Stoeneberg fixed assertion with new m6800 CPU types.
- 0.141u3            : Curt Coder added HD6301 subtype to the M6800 CPU core.
- 0.139u2            : Miodrag Milanovic fixed initial M6800 state of bit 7 and 6 of flag registers (according to documentation).
- 0.128u4            : Pointer-ified the 6800 CPU core [Couriersud]: Temporarily named the state var m68_state in the 68xx cores. Reorganized some code for simpler comparison of 68xx cores.
- 0.122u7            : Aaron Giles added internal divider on m680* series CPUs (except the original m6800). Updated clocks on all games using them to remove the explicit divider.
- 0.121u2            : Atari Ace fixed the m6800 cpu core so that the cpu variants can be compiled independently once again.
- 0.120u3            : Curt Coder fixed the M6800 core, which break many 6800-based games in 0120u2.
- 0.109u5            : Aaron Giles converted the m680x disassemblers to the new format and added step in/out support where it was obvious.
- 0.100u4            : Aaron Giles added missing registers to the 6800 core's save state.
-  7th February  2001: Phil Stroffolino added collision detection to Fire Truck, but it still unfortunately does not work with the C 6808/6800 core.
- 0.36RC1            : Fixes and improvements to the 6800 family emulator [Tatsuyuki Satoh].
- 10th March     2000: Tatsuyuki Satoh fixed m6800 port write functions, Namco System 1 DAC gain and also a sound stream bug.
- 0.36b8             : Tatsuyuki Satoh finally fixed the CMPX instruction in the 680x core. On the 6800 it does not affect the C flag, on the others (6803, 63701) it does.
- 15th October   1999: Tatsuyuki Satoh sent in a Namco System 1 update with a correct romset for Blazer, DAC sound fixes and some other fixes to m6800.
- 0.36b6             : Jess Askey fixed bug in the 6800 CMPX instructions.
-  7th April     1999: Nicola Salmoria has updated Pac Land and Rolling Thunder drivers to work on the new 6800 (not 68000 ;-) core, but music speed is still sometimes screwed.
- 19th March     1999: Juergen Buchmueller has fixed some bugs in the 6800 core.
-  8th February  2000: Tatsuyuki Satoh did a few bugfixes and optimized the m6800 core.
- 0.35b7             : Added cpu\m6800\m6800.c/h, 6800dasm.c and 6800ops.c.
- 0.35b2             : Brad Oliver added Sky Diver (Atari 1978 - first game uses the M6800 CPU).
- PCB: 68A00 (Sflush, Fgoal), 6800 (Triplhnt)
- DRIVERS: 8080bw.cpp, atari_s1.cpp, by17.cpp, by35.cpp, byvid.cpp, cball.cpp, destroyr.cpp, dragrace.cpp, fgoal.cpp, firetrk.cpp, lbeach.cpp, micropin.cpp, mpu1.cpp, orbit.cpp, poolshrk.cpp, s3.cpp, s4.cpp, skydiver.cpp, spirit76.cpp, sprint8.cpp, st_mp100.cpp, st_mp200.cpp, tank8.cpp, toratora.cpp, trackfld.cpp and triplhnt.cpp
- SOURCE: cpu\m6800\m6800.cpp



3.2   MC6801

- 0.278              : Correct the ICR read handlers (m6800\m6801.cpp) [m1macrophage].
- 0.265              : Fixed new regression with eat_cycles (m6800\m6801.cpp) [hap].
- 0.263              : If NVRAM it's currently not battery-backed, don't save at all. Shorthand variable types. Added input ports ddr override mask (m6800\m6801.cpp) [hap].
- 0.262              : Port data latches are not initialized at reset (m6801). Mask unused ram ctrl reg bits (m6801). DDR1/DDR3 is 1-bit (hd6301x/y). Save more internal registers to NVRAM (hd6301). Added timer output compare 2/3 regs (6801U4). Small simplification with ocr2h/l_w (6801U4) [hap]. Added Kiki KaiKai MCU (MC6801U4) program ROM dump [Madov, Raki, Travis Goodspeed]. Hook up kikikai MC6801U4 MCU [David Haywood].
- 0.261              : Added 'Motorola MC6801U4' device (cpu\m6800\m6801.cpp). Added standby pin. Save ram control reg upper bits to 'NVRAM'. Removed local implementation of m6801 standby pin and ram control reg in (MESS) Psion. Added support for canned NVRAM. Added setter for NVRAM battery status [hap]. Fixed SLP wakeup from Tin input capture event. Moved RAM, ROM and I/O areas into internal maps for all variants (including a few that lacked their own device types until now). CPU device now saves NVRAM for applicable standby areas, which only include the first part of internal RAM on NMOS variants [AJR].
- 0.222              : Clear OCF when output compare register is rewritten, not read from [AJR]. Fixed #define TOH (m6800\m6801.cpp). Removed hack, the real cause of (MESS) Coleco Adam locking up at boot was fixed recently with TCSR_OCF clear. TCSR upper 3 bits are read-only [hap].
- 0.220              : Attempt at cleaning up internal registers. Splitted the all-in-one m6801_io_r and m6801_io_w handlers into separate handlers for each register. Use m() instead of rw() to map these for now. Make all port direction registers write-only. Fixed a bug that deadlocked the emulation during WAI/SLP if a timed event had already occurred. Added DDRs as mask for port output callbacks. Added second timer output comparator [AJR].
- 0.215              : Changed description to 'Motorola MC6801'. More logging and reduced unneeded updates of Tx line [Joakim Larsson Edstrom].
- 0.210              : Fixed bug where irq is never triggered [Mike Harris].
- 0.203              : Use DEVCB for ports; removed I/O space and MCFG macros [AJR].
- 0.197              : Added configurable logging. Separated SCI Tx/Rx tick and event logging, fixed some missing save state and make order match delaration [Vas Crabb].
- 0.196              : Changed description to 'Motorola M6801'.
- 0.186              : Added cpu\m6800\m6801.cpp/h. Quick and dirty split of most MC6801/MC6803/HD63701 features from base M6800 class. The code remains generally archaic and awful and in need of a sweeping rewrite. At least one static variable is no more [AJR].
- 0.150              : Modernized M6800 cpu core [Wilbert Pol]. MC6801/6803 updates [R. Belmont]: Support for timer output capture to pin P21. Support for externally-clocked serial. Added DEVCB2 hook for serial xmit to easily differentiate xmit from other Port 2 updates. Bits are still also sent to Port 2 of course.
- 0.141u1            : M6801 changes [Curt Coder]: Added operating mode enum. Fixed port writes. Implemented SCI status follower bits. Implemented port 3 strobed mode. Fixed port writes some more.
-  5th August    2006: Nicola Salmoria - Excellent work by Trinity, the original MCU ROM has been extracted. This required removing the cover from the chip, taking photographs of it under a microscope and manually decoding the contents of the ROM bit by bit. The photo shown in the previous post confirms that it's in the 6801 class, not a 68701 however as it was conjectured, but a 6801U4. With this ROM, we finally have the final piece of the puzzle for a 100% guaranteed perfect emulation. Checking the original MCU program was very interesting. It was designed to provide many protection features that were eventually not used by the game, like: * Process coin inputs and update the credit counter * Handle the number of remaining lives for both players * Handle the current round number * Handle variable speed incrementing for four variables and * Return values from a 1280 bytes table of seemingly random data. The reasons why those features were not used are probably various. Some of them were probably awkward to use because they require to one one frame for the MCU to process the data, others weren't flexible enough like the coin input processing that wouldn't allow for coinage settings different from the ones hardcoded in the MCU (though versions of Bubble Bobble with different coinage settings don't seem to have been made anyway).
-  4th August    2006: Dave Widel - Good news for Bubble Bobble fans. It seems someone named Trinity has dumped the MCU. Apparently by decapping the chip, photographing it through a microscope and transposing the pic into binary form. Hopefully this will enable some boards to be repaired.
-  3rd August    2006: Nicola Salmoria - What's inside the TAITO JPH1011P MCU? ... It's a MC6801U4 TM7 (c) 1982. More on this later.
- 0.90               : Nicola Salmoria updated the Bubble Bobble driver. Removed the 68705 CPU emulation, since that's not what the original used, simulated the 68701 MCU (enemy movement should now be correct), fixed clock item behaviour (now enemies start moving again after 10 seconds), supported coin lockout and emulated the boblbobl protection device (getting rid of the ROM patches).
- PCB: JPH1011P protection MCU (Bublbobl)
- DRIVERS: bublbobl.cpp and kikikai.cpp
- SOURCE: cpu\m6800\m6801.cpp



3.3   MC6802

- 0.217              : Internalized internal RAM [AJR].
- 0.215              : Changed description to 'Motorola MC6802'.
- 0.148              : Fixed S11 timer IRQ to main CPU. Correct main CPU type to M6802 (fixes factory setting display on first boot).
- 0.130u3            : Track & Field cleanups [Aaron Giles]: Derived clocks where possible. Complete memory maps from the schematics. Hooked up proper sound command latching. Reimplemented 6802-based ADPCM samples for the bootlegs. Merged memory maps. Extended NVRAM to the full RAM range (according to schematics). Created common include file and modified drivers to use it instead of explicit externs.
- 0.122u7            : Aaron Giles added internal divider on m680* series CPUs (except the original m6800). Updated clocks on all games using them to remove the explicit divider.
- NOTES: M6802 almost (fully?) equal to the M6800. In Qix drives a 6802 an 8-bit DAC and according to the schematics a TMS5220 speech chip, which is never accessed.
- GAMES: Qix (Taito 1981), The Electric Yo-Yo (Taito 1982), Discs of Tron (Bally Midway 1983), Jack Rabbit (Zaccaria 1984)
- PCB: 6802 (Jackrabt), HD46802P (Spiders, R2dtank), F6802P (Poker, Sdungeon), AMI 8017Dk-S6802P (Murogem)
- DRIVERS: 8080bw.cpp, barni.cpp, bfm_blackbox.cpp, bfmsys83.cpp, by35.cpp, dmainevent.cpp, efdt.cpp, falconun.cpp, hankin.cpp, hyperspt.cpp, jvh.cpp, laserbat.cpp, ltd.cpp, mcr.cpp, murogem.cpp, nyny.cpp, pubtimed.cpp, qix.cpp, r2dtank.cpp, redalert.cpp, sXX.cpp, seicross.cpp, taito.cpp, trackfld.cpp, tubep.cpp, williams.cpp, wms_shuffle.cpp and zaccaria.cpp
- SOURCE: cpu\m6800\m6800.cpp



3.4   MC6803

- 0.261              : Moved RAM, ROM and I/O areas into internal maps for all variants (including a few that lacked their own device types until now). CPU device now saves NVRAM for applicable standby areas, which only include the first part of internal RAM on NMOS variants (m6800\m6801.cpp) [AJR].
- 0.220              : Added Motorola MC6803E type. Delete the "unused" NOP mapping from $0020 to $007F in the MC6803 internal map (datasheets make clear that external accesses can be made here) [AJR].
- 0.215              : Changed description to 'Motorola MC6803'.
- 0.203              : Fixed regressions in ddragon.cpp and ltd.cpp related to recent M6803 CPU changes [AJR].
- 0.186              : Quick and dirty split of most MC6801/MC6803/HD63701 features from base M6800 class. The code remains generally archaic and awful and in need of a sweeping rewrite. At least one static variable is no more [AJR].
- 0.150              : Modernized M6800 cpu core [Wilbert Pol]. MC6801/6803 updates [R. Belmont]: Support for timer output capture to pin P21. Support for externally-clocked serial. Added DEVCB2 hook for serial xmit to easily differentiate xmit from other Port 2 updates. Bits are still also sent to Port 2 of course.
- 0.120u2            : Curt Coder added SCI support to M6803/HD63701.
- 0.118u1            : Curt Coder added missing port 3/4 to M6803 cpu core.
- 0.88u7             : Nathan Woods modified the M6803 CPU core to use an internal memory map.
- 0.37b1             : 6803/63701 external port writes no longer set to 1 the bits that are set as inputs in the DDR register. Instead, they are set to the value returned by a read from the port [Tatsuyuki Satoh].
- 0.36b8             : Tatsuyuki Satoh finally fixed the CMPX instruction in the 680x core. On the 6800 it does not affect the C flag, on the others (6803, 63701) it does.
- 0.35b6             : Note: The CPU cores have been completely torn apart and rearranged in this release. Don't be surprised if a large number of games don't work at all. For example, Twin Cobra doesn't boot, and most (all?) of the games using a 6803 lock up (ctrl-alt-del needed).
- GAMES: Irem  - Moon Patrol (1982), Tropical Angel (1983), Spelunker (1985)
- PCB: HD6803P (Youjyudn), MC6803P (BabyPac-Man), MC6803CPD (Kidniki)
- DRIVERS: by35.cpp, by6803.cpp, by68701.cpp, byvid.cpp, ddragon.cpp, kncljoe.cpp, ltd.cpp, m52.cpp, m57.cpp, m58.cpp, m62.cpp, m62_bkungfu.cpp and travrusa.cpp
- SOURCE: cpu\m6800\m6801.cpp



3.5   M6805

- 0.273              : Added cycle tables. Don't decrement 0 cycles for illegal opcodes (m6805\m6805.cpp) [hap].
- 0.267              : Added m6805\m68hc05e1.cpp/h. Added new devices for 68HC05E1 and 68HC05E4 [R. Belmont].
- 0.258              : Use manufacturer's syntax for disassembling indexed addressing modes [AJR].
- 0.250              : Removed unnecessary comparison that can't be true from 'HC05 timer handler (m6805\m68hc05.cpp) [Vas Crabb].
- 0.230              : Use proper HC05 base cycle timings and disassembler for MC68HC05EG (m6805\m6805.cpp) [R. Belmont, Vas Crabb].
- 0.222              : Simplified handler signatures. Added MC68HC705C4A type (m6805\m68hc05.cpp) [AJR]. READ/WRITE macros removal (m6805\m68hc05.cpp) [Osso].
- 0.221              : Support M68HC705C8A internal banked RAM (cpu\m6805\m68hc05.cpp). Only reset due to NCOP when it's enabled [Dirk Best].
- 0.216              : Calculated min_cycles and max_cycles once at device_start time [AJR].
- 0.215              : Misc cleanup (m6805\m68hc05.h) [Vas Crabb].
- 0.213              : Update notes (m6805\m68hc05.cpp) [AJR].
- 0.212              : Allow vectors to be placed at an internal boundary other than the end of the address space. Eliminated the generic m6805_device type [AJR].
- 0.211              : Flag fix. CLRX doesn't clear the carry flag (m6805\6805ops.hxx) [Patrick Mackinlay].
- 0.193              : Added cpu\m6805\6805dasm.h.
- 0.214              : Added (somewhat provisional) model-specific register names to MC68HC05L9 (m6805\m68hc05.cpp) [AJR].
- 0.183              : Added cpu\m6805\m68hc05.cpp/h. Added skeleton M6805 CMOS devices: Added M146805 and M68HC05 to UNIDASM. Made opcode tables configurable in m6805_base_device, provided tables for HMOS, CMOS and HC families. Implemented MUL instruction, made unimplemented STOP and WAIT raise fatal error. Added skeleton MC68HC05C4 with RAM and ROM in correct locations in memory map. Fixed disassembly of BIT opcodes. Don't burn cycles on disabled interrupts. Added partially implemented MC68HC05C8 and MC68HC705C8A. Implemented 'HC05 digital I/O, timer/capture/compare and COP watchdogs. Probably still some bugs in 'HC05 peripherals. Implemented M68HC05 edge-sensitive external interrupts in MC68HC05. Clean up bih/bil handling [Vas Crabb].
- 0.182              : Added cpu\m6805\m6805defs.h. Fixed state of input lines being lost on reset. Reduced massive amounts of redundancy by templating opcode handlers. Replaced the epic switch statement with a dispatch table. Fixed timings for a few instructions. Turn a lot of macros into inline methods so they can be scoped down. Correct affected flags in comments on opcode handlers (actual code was correct). Removed unnecessary flag calculation tables. Added a table with CMOS instruction timings [Vas Crabb].
- 0.180              : Changed the M6805 disassembler to use 'std::ostream &' internally. Fixed a number of identifiers beginning with underscores in the M6805 disassembler. Changed m_* ==> md_* (m6805\6805dasm.cpp) [Nathan Woods].
- 0.174              : Changed cpu\m6805\6805ops.inc to 6805ops.hxx.
- 0.154              : Added missing items to M6805 save state [hap].
- 0.153              : Changed cpu\m6805\6805ops.c to 6805ops.inc [Oliver Stoeneberg].
- 0.148u2            : M6805 used CPU_DISASSEMBLE but didn't use CPU_DISASSEMBLE_NAME for calling the function (No idea why) [smf].
- 0.148              : Modernized M6805 CPU core [MooglyGuy].
- 0.144u5            : CLR instruction should not affect the carry flag in 68HC05. Verified with Freescale programmer's manual [R. Belmont].
- 0.140u1            : R. Belmont added extremely preliminary 68HC05EG support.
- 0.128u6            : Pointer-ified the M6805 CPU core [Andrew Gardner].
- 0.122u7            : Aaron Giles added internal divider on m680* series CPUs (except the original m6800). Updated clocks on all games using them to remove the explicit divider.
- 0.109u5            : Aaron Giles converted the m6805 disassemblers to the new format and added step in/out support where it was obvious.
- 0.101u5            : Ernesto Corvi fixed 6805 core so that CLRA does not modify the carry flag.
- 13th March     2002: Ernesto Corvi fixed a few bugs in the M6805 CPU core, but fortunately the bugs didn't affect anything.
- 0.31               : Added m6805\m6805.c/h, 6805ops.c and 6805dasm.c. 6805 emulator, needed by Arkanoid [Aaron Giles].
- NOTES: Motorola M6805
- DRIVERS: See MC68705 CPU #include "m6805.h"
- SOURCE: cpu\m6805\m6805.cpp and cpu\m6805\m68hc05.cpp



3.6   MC6808

- 0.215              : Changed description to 'Motorola MC6808'.
- 0.122u7            : Aaron Giles added internal divider on m680* series CPUs (except the original m6800). Updated clocks on all games using them to remove the explicit divider.
- 14th February  2001: With Nicola Salmoria's help, Juergen Buchmueller fixed some 6808 CPU core bugs that prevented Fire Truck from working.
- 0.35b10            : Removed cpu\m6800\make6808.c.
- 0.35b7             : Added cpu\m6800\make6808.c. Removed cpu\m6808\m6808.c/h, 6808dasm.c, 6808ops.c and make6808.c.
- 0.35b3             : A couple of bug fixes in the 6808 core [Brad Oliver].
- 0.33b7             : Added m6808\make6808.c. Included Neil Bradley's asm M6808 emulator. Note: You need NASM to compile (the makefile defaults to NASMW, the Win32 version) [Alex Pasadyn].
- 0.31               : Added m6808\6808ops.c. New 6808 emulator [John Butler]. Larry Bank fixed bug in the 6808 emulation of TSX and TXS. Ernesto Corvi added support for HD63701YO extra opcodes to the M6808 emulation.
- 0.30               : Added m6808\6808dasm.c.
- 0.29               : Added m6808\m6808.c/h.
- GAMES: Williams - Defender (1980), Stargate (1981), Robotron (1982), Blaster (1983), Joust2 (1986)
- DRIVERS: by35.cpp, clowndwn.cpp, de_2.cpp, de_3.cpp, mpu3.cpp, sXX.cpp, williams.cpp, wmg.cpp and wms_shuffle.cpp
- SOURCE: cpu\m6800\m6800.cpp



3.7   MC6809

- 0.278              : Use < symbol for direct addressing (m6809\6x09dasm.cpp). Don't reset physical input pins state at device_reset (m6809\m6809.cpp) [hap].
- 0.272              : Mask PCR-mode addresses in disassembly (m6809\6x09dasm.cpp). Added interrupt vector read callback. Removed fake SWI interrupt line, replacing interrupt callback with exception hook for debugging. Eliminated PC "massaging" for SYNC and similar instructions [AJR].
- 0.268              : Added sync acknowledge callback (m6809\base6x09.lst and m6809\m6809.cpp) [Sven Schnelle].
- 0.266              : Fixed invalid escape sequence warnings (m6809\m6809make.py) [Vas Crabb].
- 0.258              : Zerofill variables at device start [hap].
- 0.255              : Set V flag on XDEC (m6809\m6809.lst) [Tim Lindner].
- 0.254              : Added undocumented instructions and dissasembler (m6809\m6809.cpp, m6809\6x09dasm.cpp). Fixes incorrectly handling opcode 0x104F. Reference: https://github.com/hoglet67/6809Decoder/wiki/Undocumented-6809-Behaviours [drencorxeen, Tim Lindner]. Read reset vector during execute_run rather than device_reset to facilitate bank switching of vectoro area [AJR].
- 0.251              : Changed m6809\base6x09.ops to base6x09.lst and m6809\m6809.ops to m6809.lst. 6x09 TFR/EXG improvement: Removed tuple implementation used by the EXG and TFR instructions of the 6809, 6309 and Konami CPUs. It was unnecessary because fundamentally these are implemented with a single, 16 bit wide temporary register. Changed how the 6809 CPU processes the invalid 8 to/from 16 bit register combinations. Their behavior now matches actual hardware. I used page 66 and 138 of Darren Atkinson's 6x09 manual (https://colorcomputerarchive.com/repo/Documents/Books/Motorola%206809%20and%20Hitachi%206309%20Programming%20Reference%20%28Darren%20Atkinson%29.pdf) for reference. I also double checked with my own hardware (http://tlindner.macmess.org/?p=945). Checked for regressions using (MESS) CoCo + NitrOS-9, Aliens and 88Games [Tim Lindner].
- 0.246              : Simplify disassembly of pushes and pulls of both A and B (m6809\6x09dasm.cpp) [AJR].
- 0.245              : Added support for stepping out (m6809\6x09dasm.cpp) [AJR].
- 0.229              : Partially qualify the dummy cycles [O. Galibert]. Improved accuracy of dummy fetch patterns. Fixed regression in RTI timing (m6809\base6x09.ops) [AJR].
- 0.227              : Added M6809 support for gdb remote debugger (debugger\debuggdbstub.cpp) [Gustavo Del Dago].
- 0.223              : Fixed ASR8 and ASR16 opcodes (cpu\m6809\base6x09.ops) [hap]. Still perform an IRQ acknowledge cycle on software interrupts (cpu\m6809\base6x09.ops). Fixes (MESS) Fairlight CMI IIx memory-map diagnostics [Ryan Holtz].
- 0.217              : Get rid of deprecated universal newlines open flag in Python scripts (io module is present as of Python 2.6) (scripts\build\verinfo.py, cpu\m6809\m6809make.py) [Vas Crabb].
- 0.208              : Fixed for 6809 disassembly. Increment PC for indexed addressing with single byte offset. Indexed addressing was incorrectly labeled indirect in function name. Use labels for pc relative indexed addressing. Force extended addressing (m6809\6x09dasm.cpp/h) [tomctomc].
- 0.201              : Disassembly tweaks: Use FCB directive to represent illegal opcodes. Removed unnecessary spaces for instructions without operands (m6809\6x09dasm.cpp) [AJR].
- 0.196              : Changed description to 'Motorola MC6809'.
- 0.194              : SWI2 is not HD6309-exclusive (m6809\6x09dasm.cpp). Fixed memory leak in M6809 CPU core. Fixed disassembly of relative instructions [AJR].
- 0.193              : Added cpu\m6809\6x09dasm.h. Added 'MC6809' device. Resolved the great M6809 device type/clock divider mix-up [AJR].
- 0.191              : Fixed overflow flag problem with SBC8 and ADC8 (cpu\m6809\base6x09.ops). Credit goes to Pierre Sarrazin and Tim Lindner for investigating/finding this bug [hap].
- 0.180              : Added cpu\m6809\6x09dasm.cpp. Removed cpu\m6809\6809dasm.cpp. Merged the M6809, HD6309 and KONAMI CPU disassemblers and changed to properly use streams [Nathan Woods]. Fixed a recently introduced bug in the 6x09 disassembler that could cause asserts when hitting what would be a legal 6309 instruction when disassembling non-6309 code [Nathan Woods].
- 0.179              : Fixed disassembly if 6809 is interrupted mid-instruction (debug\debugcpu.cpp and dvdisasm.cpp). Sync pc & curpc and removed superfluous callimport()/callexport() on STATE_GENFLAGS [smf].
- 0.176              : Removed irq_line methods from M6809 and replace uses with DEVCB_INPUTLINE [AJR]. Improved debugging support for 6809/6309 CPUs [Erik G].
- 0.168              : Fixed cpu\h8\m6809make.py syntax error on Python 3 [Mike Naberezny].
- 0.160              : Removed except clause syntax not supported on Python 3. This change uses sys.exc_info()[1] instead of the "as" syntax to retain Python 2.5 compatibility (cpu\h8\m6809make.py). Removed use of has_key() for Python 3 compat [Mike Naberezny].
- 0.155              : Fixed CWAI implementation in base6x09.ops doesn't acknowledge interrupts while polling for systems using M6809 with M6809_HOLD_LINE (MT05350). Note: CPU cores *must* call standard_irq_callback() when taking an interrupt. No ifs, no buts, Not only HOLD_LINE relies on it, but more importantly run until interrupt relies on it [hap, Saurus].
- 0.154              : Added missing members to save registration and fixed typo in M6809 device_post_load(), fixing savestate regressions in many drivers that use this CPU family [Alex Jackson].
- 0.152              : "#pragma GCC diagnostic" was actually added in 4.2, fixes Intel OSX builds [R. Belmont].
- 0.149u1            : Initially M6809 setting S with a 'TFR *,S' evidently should enable NMI [jedwidz].
- 0.149              : hap break kram3 on purpose - marked it NOT_WORKING until encryption is implemented properly in qix.c (and not in the cpu core itself) (m6809\6809dasm.c, m6809.c/h, m6809.ops, drivers\qix.c and video\qix.c).
- 0.148u2            : Moved m6809\6809dasm.c,6809ops.c and 6809tbl.c/h to m6809\m6809.ops, m6809inl.h and m6809make.py. Initializing variables to zero (m6809\m6809.c). Rewrote 6809 CPU core. 6809 should be cycle exact based on the 6809 datasheet. Fixed bug in 6x09 DAA instruction; Finalizer (and probably other games) now handle score correctly (m6809\m6809inl.h). M6809 reset fix; resetting trackfld works now. M6809 CPU EXG/TFR cleanups. M6809 fix; Vectrex works now. Fixed subtle problem in 6x09 CWAI instruction (m6809\base6x09.ops); rocnrope is now fixed. Now setting the E condition code when SWI instruction is executed (m6809\base6x09.ops). Turning off LOG_INTERRUPTS [Nathan Woods]. Fixed builds on at least OSX [Wilbert Pol]. Fixed compile on older OS X tools (m6809\m6809.h) [Curt Coder]. Changed CPU_DISASSEMBLE to use cpu_device * instead of legacy_cpu_device *, so that class based cpu devices can also be passed (m6809\m6809.c and 6809dasm.c) [smf]. Get rid of the M6809 preprocessor pass, for great justice (cpu\cpu.mak and m6809\m6809make.py) [O. Galibert].
- 0.148              : Added cpu\m6809\6809tbl.h. Changed all 'M6809E' to 'M6809'. Modernized the M6809 core [MooglyGuy]. Uninitialized variable fix in M6809 [Nathan Woods].
- 0.128u4            : Pointer-ified the 6809 CPU core [Couriersud]: Temporarily named the state var m68_state in the 68xx cores. Reorganized some code for simpler comparison of 68xx cores. Nicola Salmoria added M6809 config option to control where opcodes 10 and 11 fetch the second byte. Changed 6809 disassembler to work with Kram (encrypted). Switched M6809 to new memory functions [Couriersud]: Cleaned up some macros. Aligned code a bit more. Interrupts now checked in cpu_execute instead of set_context.
- 0.122u7            : Aaron Giles added internal divider on m680* series CPUs (except the original m6800). Updated clocks on all games using them to remove the explicit divider.
- 0.116u2            : Ernesto Corvi fixed minor cycle timing issue in 6809 CPU core.
- 0.115u3            : Ernesto Corvi and Zsolt Vasvari fixed bug that failed to initialize all IRQ states in the 6809 core on a reset. Also fixed cycle timing and removed obsolete code from the core.
- 0.112u1            : Nathan Woods changed 6809/6309 CPU cores to call the MAME debugger when CWAI/SYNC is used.
- 0.111u1            : Giuseppe Gorgoglione extensively rewrote the 6809dasm.c disassembler.
- 0.110              : Aaron Giles fixed assertions in 6809 diassembler caused by stricter checking introduced in 0.109u5.
- 0.107u2            : Antoine Mine connected unimplemented opcode $01 on the 6809 core.
- 0.101u1            : Aaron Giles fixed missing save state registrations in the M6809 CPU core.
- 0.90u2             : Hans de Goede fixed 6809dasm.c compile warning.
- 0.85               : Replaced M6809 CPU1/2 with M6809E in Capcom Bowling driver.
- 0.78u3             : Changed description to 'M6809'. Aaron Giles fixed CPU_M6809E typo in cpuintf.c and fixed the hd63705_get_info in the M6809 core, it crached in 0.78u2.
- 0.78u2             : Changed description to 'M6809E'.
- 23rd July      2003: Martin Adrian submitted a bug fix for the EXG and TFR opcodes in the M6809 CPU core.
-  5th September 2002: Tim Lindner submitted a fix to the SEX instruction in the m6809 CPU core.
- 29th June      2002: Nathan Woods submitted a fix for a timing bug in the M6809 CPU core.
- 16th August    2000: Juergen Buchmueller fixed a bug in 6809 cycle counting.
- 15th June      2000: A small bug in the M6809 core was squished, fixing some CoCo 3 program bug on the MESS side.
- 0.36b8             : Cleaned up the 6809 emulations [Juergen Buchmueller].
- 25th October   1999: Juergen Buchmueller fixed some m6809 bugs and made new ones.
- 23rd September 1999: John Butler fixed an ASR bug in m6809.
- 21st September 1999: Michael Soderstrom fixed an ASR bug in m6809.
-  5th September 1999: Aaron Giles fixed a small 6809 cycle timing bug.
-  9th March     1999: Juergen Buchmueller has updated the 6809 core again.
- 0.35b6             : Added cpu\m6809\6809tbl.c.
-  2nd March     1999: Juergen Buchmueller has fixed Rolling Thunder MCU problems by simplifying the 6809 interrupt handling and correct CWAI emulation.
- 26th February  1999: Juergen Buchmueller fixed some timer system problems and worked on 6809 code.
- 0.33b6             : Mathis Rosenhauer improved cycle counting in the 6809 emulator.
- 0.33b3             : Keith Wilkins fixed bug in the 6809 disassembler.
- 0.30               : Added m6809\6809dasm.c. Removed m6809\m6809.txt.
- 0.29               : Some optimizations to the 6809 emulator [Tatsuyuki Satoh, Aaron Giles]. Modified it to always fetch opcodes directly from RAM (much faster). The Ghosts 'n Goblins, Star Wars and Williams drivers needed reworking to support that [Aaron Giles]. New memory handling functions, about 10%-30% faster than before. Moved the memory code from cpuintrf.c to memory.c. Banked ROMs can now be handled in a cleaner and faster way. Use the new MRA_BANK1... types in the memory handler arrays, and cpu_setbank() to set the current bank. The Z80 and M6809 emulators natively support bank switching. IMPORTANT: for 24 bit addressing (i.e. 68000) you cannot associate a memory handler to a single byte. You must use four consecutive bytes, longword aligned. This was done to speedup word (2 bytes) and dword (4 bytes) operations [Tatsuyuki Satoh, Aaron Giles].
- 0.28               : Added m6809\6809ops.c. John Butler provided a new 6809 emulator. It is faster than the previous one, and fixes some bugs including the ship moving in the wrong direction on the tower level of Star Wars and the bonus maze in Pac & Pal.
- 0.27               : Removed machine\wac.c.
- 0.24               : Added machine\wac.c.
- 0.23               : Modifications were done to M6809 emulator to support FIRQ.
- 0.21               : Added m6809\m6809.c/h and copying.txt. Added M6809 CPU support. Changes in CPUIntrf.c and Driver.h to accommodate the new CPU. The first driver working on this CPU is Super Pac Man. The driver is based on the super-detailed SUPERPAC.KEG file of Replay emulator by Kevin Brisley. M6809 emulator is based on L.C. Benschop's 6809 Simulator V09 (Copyright 1994,1995 L.C. Benschop, Eidnhoven The Netherlands).
- PCB: MOTOROLA M6809 DIP40 (Truco), MC6809 (Rockrage), HD6809EP (Chinagat), 68A09EP (Metrocrs), 6809EP (Csilver), MC68B09EP (Contra, Ddribble), MC68A09EP (MegaZone), MC6809EP (Sdungeon), EF68B09 (Timekill), EF68B09EP (MK), Fujitsu MBL68B09E (Lemnangl), S22GD-EF68B09EP (Mk), Hitachi HD68A09 or HD68B09 (Xsleena), HD68B09EP + MC6809P-CW38602 (Cheyenne), HD68A09EP (Junofrst), MC68B09EP/T6R8139 (Halleys)
- DRIVERS: aeroboto.cpp, alvg.cpp, arachnid.cpp, beezer.cpp, bfcobra.cpp, bfm_sc1.cpp, bfm_sc2.cpp, bfm_sc4.cpp, bfmsys85.cpp, brkthru.cpp, byvid.cpp, cgang.cpp, citycon.cpp, dangbar.cpp ... wacky_gator.cpp and xain.cpp
- SOURCE: cpu\m6809\m6809.cpp




3.8   M68000

- 0.278              : Make pc-relative disassembly a little nicer to read (m68000\m68kdasm.cpp) [O. Galibert].
- 0.276              : Fixed fmovem effective address increment bug (m68000\m68kmusashi.h) [Patrick Mackinlay].
- 0.275              : Added missing set_current_cpu function (m68000\m68000.cpp) [Patrick Mackinlay].
- 0.274              : Fixed disassembly of CAS (m68000\m68kdasm.cpp) [Doug Brown, R. Belmont].
- 0.272              : Changed name of invoked executable to bin/python3 (m68000\m68000gen.py) [AJR].
- 0.271              : Renamed m_instruction_restart to m_can_instruction_restart to clearly distinguish from m_restart_instruction [Adam Billyard].
- 0.266              : Added m68000\m68000musashi.cpp/h. Switch Sega Y-Board games back to Musashi. Fixes Power Drift and clones locks up with black screen. Added option to use Musashi for M68000 emulation [R. Belmont].
- 0.265              : Fixed pc interactions in debugger (m68000\m68000.cpp) [O. Galibert].
- 0.263              : Regenerated C++ source files [amameuser].
- 0.257              : Allow drivers and devices to use the instruction restart capability on the 020/030/040 (m68000\m68kcpu.cpp and m68000\m68kmusashi.h) [R. Belmont].
- 0.256              : Added m68000\m68000mcu-head.h and m68000\m68000mcu.cpp/h. Changed m68000\m68000-sdfm.cpp to m68000mcu-sdfm.cpp, m68000-sdpm.cpp to m68000mcu-sdpm.cpp, m68000-sifm.cpp to m68000mcu-sifm.cpp and m68000-sipm.cpp to m68000mcu-sipm.cpp. Extract m68000mcu from m68000 [O. Galibert].
- 0.254              : Some variables were missing from savestate/zerofill [hap].
- 0.253              : Added m68000\m68000-decode.cpp, m68000-head.h, m68000-sdf.cpp, m68000-sdfm.cpp, m68000-sdp.cpp, m68000-sdpm.cpp, m68000-sif.cpp, m68000-sifm.cpp, m68000-sip.cpp, m68000-sipm.cpp, m68000.lst and m68000gen.py. New implementation, generated from the micro/nanocode. Fixed byte order in movep and bit number modulo on bxxx, thanks qkumba. The ext-derived over ALU operation should clear aluo (it's actually slightly more complicated but clearing is the end result). Fixes some address calculations in div (thanks qkumba again) (m68000\m68000.h). Correct when interrupt testing happens, fixes stop. Fixed the vpa timings. Properly acknowledge interrupts when no mixer is present. Fixed the vpa wait state, make using irq 7/NMI a little more transparent. Ensure start_interrupt_vector_lookup/end_interrupt_vector_lookup are called only once per lookup (m68000\m68000*.cpp). Ensure tas rmw cycle is actually uninterruptible enough (m68000\m68000*.cpp). Move to sr/ccr must also update the internal flags (was preventing (MESS) Atari ST's 'The Union Demo' from booting). Bus and address errors do *not* disable the write part of the micro-instruction. Fixes the (MESS) Atari ST's delta force protections (Syntax Terror, Punish your machine) [O. Galibert]. Re-added debugger exception hook for interrupt/trap vectors and register IR for debug state. Ensure exception hook is called before SP is updated [AJR].
- 0.250              : Added m68000\m68kcommon.cpp and m68000\m68kmusashi.h. Added a level of transparent indirection, turn the reset output line into devcb. Musashi's BUSERROR line is edge-triggered (m68000\m68kmusashi.h) [O. Galibert]. Prevent CI/CEI bits from remaining set after MOVEC to CACR. Fixes (MESS) Macintosh LC not booting (The code tries to flush the instruction cache by adding #8 to the old value of CACR, which doesn't work if CI reads back as 1) (m68000\m68k_in.lst and m68kops.cpp) [AJR].
- 0.249              : Added cpu\m68000\m68000.cpp and m68000\m68kcommon.h. Split the header to make future semi-indenpendant implementations sane [O. Galibert].
- 0.245              : Fixed disassembly of bit field extract instructions (m68000\m68kdasm.cpp) [Vas Crabb].
- 0.242              : 68k: Support for external MMU bus error instruction restart [J Booth]. Fixed PC increment location on TRAPcc instructions (m68000\m68k_in.lst and m68kops.cpp) [Jean-Francois Fabre].
- 0.228              : Don't clear interrupt input state upon reset (m68000\m68kcpu.cpp) [AJR].
- 0.222              : Added exception hook for debugger gex command (m68000\m68kcpu.cpp) [AJR]. READ/WRITE macros removal [Osso].
- 0.221              : Pload does an explicit table walk (m68000\m68kmmu.h) [Patrick Mackinlay]. Don't iterate to save arrays. Eliminated legacy prepost registration [AJR].
- 0.219              : Allow RTE to unwind type 1000 (68010 bus error) stack frames (m68000\m68k_in.lst, m68kops.cpp) [R. Belmont].
- 0.217              : Fixed issues with Domain/OS and its installer crashing (m68000\m68kmmu.h) [Hans Ostermeyer].
- 0.216              : Added more accurate cycle counts to SCC68070 (m68000\m68kcpu.cpp), distinguished from MC68000 and MC68010 [AJR].
- 0.211              : Accurate byte-smearing write behavior for 32-bit members of the M68K family. Apply byte smearing to PMMU as well. Fixed PMMU translation error that broke (MESS) Macintosh II (m68000\m68kcpu.cpp) [AJR].
- 0.210              : Added cpu\m68000\m68kmake.py and m68kops.cpp/h. Changed m68000\m68k_in.cpp to m68k_in.lst. Removed cpu\m68000\m68kmake.cpp and m68000\makefile. Converted M680x0 code generator to python. Stop using spec_proc. Merged table and opcode body together. Changed method pointers to state IDs in the big tables. SCC68070 fixes: Added several MC68000 opcodes that were inadvertently unsupported. Changed behavior of CLR with memory operand to match MC68010 and later (datasheet makes it clear that the extra read is not performed). M68000: Read the initial SP and PC from memory after rather than during machine reset time. This removes the need for many drivers to reset the CPU an extra time to load the correct vector [O. Galibert]. Clarify that SCC68070 RTE is more like MC68010 than MC68000. Re-added a few more inadvertently illegalized opcodes (CHK, DIVS, DIVU). Show M68K_SR. Renamed ISP to SSP for pre-68020 (m68000\m68kcpu.cpp). Fixed MOVEC formatting (m68000\m68kdasm.cpp) [AJR]. Reverted the ATC calculation fix in MAME 0.209 (m68000\m68kmmu.h) which broke both Mac OS and HP-UX [R. Belmont]. Fixed the real MMU problem Domain/OS was having [Hans Ostermeyer].
- 0.209              : Rework 68000 interrupt handling: Implemented the cpu space as an address space. Make all vectored interrupts use the cpu space. Make it possible to direct the cpu space to another space, use it for amiga (which handles it as a normal AS_PROGRAM read). Make it possible to disable the priority muxer and get 3 lines instead, use it for CPS2 [O. Galibert]. Fixed build (this instruction will need further fixing) (m68000\m68k_in.cpp). Fixed vector fetch width and autovector mapping (m68000\m68kcpu.cpp). Use 8-bit handlers for 68000 vector fetches. Make the autovector abstraction a bit less leaky (m68000\m68000.h and m68kcpu.cpp) [AJR]. Fixed ATC entry calculation error that was crashing Domain/OS (m68000\m68kmmu.h) [Hans Ostermeyer].
- 0.208              : Removed MC68301 device type [AJR].
- 0.207              : Added overrideable method to signal RESET instruction to internal peripherals (m68000\m68000.h). Added this call to the non-generated file (m68000\m68k_in.cpp) [AJR].
- 0.205              : Fixed "Set B bit in ATC on buserror" (m68000\m68kmmu.h; MAME 0.204). Note: ps == 8 should be ps - 8, which cause a compiler error. However, the code doesn't work. It wasn't noticed due to the typo, so remove it for now [dxl].
- 0.204              : Fixed ptest instruction (m68000\m68kdasm.cpp). Fixed rw bit in address error frame. Note: RW bit actually means 1 = read, 0 = write. It was also not shift in m68000_base_device::set_buserror_details(). M68000 MMU: Fixed compare of SUPERVISOR_ONLY bit in 8 byte descriptors. Don't change Page table/ATC state during translations caused by debugger. Support flushing ATC by FC/EA [Sven Schnelle]. M68000 MMU: Handle RW bit in ATC cache properly. Added page table walk that result in BUSERROR to ATC. Fixed ptest instruction. Trap if PLOAD is called with MMU disabled on MC68851. Don't skip descriptor status update for page descriptors. Set address in ptest to last descriptor address. Added function code page table lookup. Fixed ptest level report in MMU SR. Fixed TT register matching (test RW bit, fix masking of bits). Decode fc field for pload instruction. Fixed decoding of pload instruction. Set B bit in ATC on buserror. Store last logical address for bus error handler [dxl].
- 0.203              : Fixed andi, ori and eori instruction. From https://github.com/kstenerud/Musashi/commit/df0fb402a8042c964a70cb987fe6f27ff96952ef and a16bd2bb289ea2cdbb1ca11a997490774eb32b5e. M68000 MMU: Added Special Status Word (SSW) to exception frames. Throw MMU configuration exception if SRP/CRP is invalid. Deduplicated code to set buserror details. Factor out ATC lookup into pmmu_atc_lookup(). Cleanups. Factor out TT register matching into pmmu_match_tt(). Simplify tt/fc matching. Removed dead code. Factor out table walking code. Replaced printf by logerror. This should be switched over to use LOG(), but can't right now because the header file is included directly in C++ classes (m68000\m68kmmu.h). Don't try to read address bits in indirect descriptors as status bits and initialize m_mmu_tmp_sr before doing a table search. With this commit, everything required to run HP-UX 9 in MAME is upstream. Tested the following machines with this mmu change: maciix with Mac OS 7, hp9k360 with HP-UX 7, HP-UX 9 and the HP-UX 9 installer [Sven Schnelle]. Support short indirect descriptors and set MMU status flags in pmmu_atc_lookup(). This makes the (MESS) HP-UX 9 installer boot. Decode ptest and pflush (m68000\m68kdasm.cpp). This adds some more decoding to some of the MMU instructions [dxl]. Improved/simplified chk2cmp2 opcode (m68000\m68k_in.cpp), fixes the helicopter in level 3 of Time Crisis can't be destoryed. Fix for chk2cmp2 unsigned compare and don't mask byte/word on address register [hap].
- 0.200              : Stop the cpu on recursive BERR (Bus error) [O. Galibert].
- 0.199              : Fixed carry flag clear in divs and divu instructions (m68000\m68k_in.cpp). Note: The HP9000/300 selftests hangs in (MESS) hp9k_3xx.cpp. The debugger shows the following code: move.l (a2)+, d0; move.l (a2)+, d1; move d6, ccr; divs.w d0,d1 and loop: bcs.s loop. Clearly this tests whether the carry flag is cleared - the Motorola Reference Manual says it's always cleared. However, in our implementation, it's not cleared on overflow. The divu instruction is always cleared, even on overflow. Fixed pack instructions (m68000\m68k_in.cpp). Note: The following test code from the 'HP9000/300 series mainframe tests' fails: lea bytes, a0; pack -(a0),-(a1), #$FEDC; move.b (a1),d0; cmbi.b #$E,d0; loop: bne.s loop and bytes: 0x41 0x42. It looks like most of the pack instructions have the byte order wrong, but the pack dx,dy variant seems to have been fixed already [Sven Schnelle].
- 0.196              : Changed description to 'Motorola MC68000'.
- 0.194              : Fixed m_cpcc in cpu\m68000\m68kdasm.cpp [O. Galibert].
- 0.193              : Added cpu\m68000\m68kdasm.h. Refactor 680x0 so that member variables aren't public. More static, less const and some irrelevant inline (cpu\m68000\m68kcpu.h) [smf].
- 0.192              : Reinstated registration of SR for debug expressions (cpu\m68000\m68kcpu.cpp) [AJR].
- 0.190              : Fixed abcd/sbcd/nbcd opcodes to pass 68k-bcd-verifier (cpu\m68000\m68k_in.cpp). FlameWing has a test that claims to exhaustively test BCD instructions: https://github.com/flamewing/68k-bcd-verifier. I've verified the test indeed passes on my MegaDrive Model1 (68000) [notaz].
- 0.185              : Workaround for multiple inclusion until SoftFloat is updated to version 3 (cpu\m68000\m68000.h) [AJR].
- 0.180              : Changed the m68k disassembler to use 'std::ostream &' internally [Nathan Woods]. Changed (MESS) drivers apollo.cpp and fccpu30.cpp from accessing has_fpu directly to use new set and get methods. FPU enable/disable methods (cpu\m68000\m68000.h).
- 0.179              : Fixed disassembly window updating when you set pc/curpc on 68000 [smf]. Added [[noreturn]] instead of ATTR_NORETURN (cpu\m68000\m68kmake.cpp) [Miodrag Milanovic].
- 0.176              : Replaced M68000 write_irq[1-7] handlers with DEVCB_INPUTLINE [AJR].
- 0.171              : Removed cpu\m68000\m68kmake.exe/o and m68kops.cpp/h. Removed generated files for m68k cpu core. Updated makefile to generate m68k files. Fix to work on OSX and Linux as well. makefile should inherit CC and GCC if set in parent makefile. Added user overridden parameters for compiling mc68k core (makefile) [Miodrag Milanovic].
- 0.169              : Fixed duplicated save state (m68000\m68kcpu.cpp) [Miodrag Milanovic].
- 0.164              : Fixed unaligned pc-relative accesses (m68000\m68kcpu.h) [O. Galibert].
- 0.161              : Added cpu\m68000\m68kops.c/h and cpu\m68000\makefile. Added generated m68kops files to tree, added makefile for developers working on core [Miodrag Milanovic]. Commented out fprintf(stderr, "Reloaded, pc=%x\n", REG_PC(m68k)) [Couriersud].
- 0.158              : Implement FTRAP instruction [R. Belmont].
- 0.157              : Disassembler support for FTRAP (cpu\m68000\m68kdasm.c). Generate the correct kind of stack frame for 68010 bus errors (m68000\m68kcpu.c) [R. Belmont].
- 0.155              : Changed overlapping memcpy() to memmove() (m68000\m68kmake.c) [Casper Ti. Vector]. Added missing save state registration (m68000\m68kcpu.c) [Alex Jackson].
- 0.154              : Added some missing save state entries (m68000\m68kcpu.c) [O. Galibert]. Update used and modified bits in the page tables and greatly improved PTEST results on 68040 (m68000\m68000.h, m68kcpu.c and m68kmmu.h) [R. Belmont]. M68000 callbacks to delegates. Implement TAS callback (currently only used by Megadrive) in a more sensible and versatile way [Miodrag Milanovic]. Smear byte writes the same as a real 68000. Fixed the debugger so watchpoints continue to work as expected [Alex Jackson]. Fixed regression caused by 68k change (drivers\cbuster.c, gstriker.c, magicard.c, mpu4vid.c, niyanpai.c, nmk16.c, segas16b.c, toaplan2.c (only Ghox), machine\bonzeadv.c, rainbow.c, video\aquarium.c, tumbleb.c) [David Haywood, Alex Jackson, James Wallace].
- 0.152              : Enhancements (cpu\m68000\m68k_in.c) [O. Galibert]. Added ability for externally-thrown bus errors to have proper details [R. Belmont].
- 0.151              : Fixed m68k->remaining_cycles, see http://mikro.naprvyraz.sk/docs/Coding/Atari/Maggie/FPU.TXT and http://www.atari-forum.com/viewtopic.php?f=68&t=1646 for table used. Atari guys seem to have them all timed out [Cowering].
- 0.150              : A regular 68000 processor will generate a read operation when using the clr.b/.w/.l opcodes, this was fixed and changed on the 020. I'm not aware of any software explicitly requiring this right now, but it would be detectable if you have read-triggered hardware and various 68k documents advise caution when using the opcodes and porting code using said opcodes to a 020 based machine for that reason. There was some private discussion with Charles before doing this, apparently it is detectable on the Genesis where a read from the VDP port will increment the internal address counter [David Haywood].
- 0.149u1            : Changed description to 'M68000'. Setjmp / longjmp doesn't play nice in 64-bit debug compiles in a modern core, so use C++ exceptions to mimic the behavior. Probably could be improved [David Haywood]. Fixed handling of double fault, not sure if this is proper or some other trap should be generated (cpu\m68000\m68kcpu.c) [Miodrag Milanovic].
- 0.145u8            : Various Clang warning cleanups in m68000\m68kcpu.h [Balrog].
- 0.145u7            : M68k improvements: Fixed BFINS, BFEXTU and BFEXTS to fetch 8-bit quantities as 8 bits (corrects Domain/OS 10.3.5 crash on page boundry). Added SoftFloat log functions and m68k FLOGNP1, FLOGN, FLOG2 and FLOG10 instructions [Hans Ostermeyer].
- 0.145u5            : Fixed SoftFloat sin/cos/tan to return correct results. Sorted out the m68k bit patterns for PFLUSHA and PFLUSHAN [Hans Ostermeyer].
- 0.145u2            : Added API to install a non-debugger instruction hook to m68k. Usage is strongly NOT recommended except for dire cases [R. Belmont]. Not checking fc in 680x0 TTx translation? That's a patchin'. Ensure fc/rw and fault address are consistant in 680x0 [O. Galibert].
- 0.145u1            : Fixed register in m68000\m68kcpu.h [O. Galibert]. Fixed FSGLMUL/FSGLDIV plus some minor MMU improvements [Hans Ostermeyer].
- 0.144u5            : Fix for M680x0 case where the MMU trashed memory [R. Belmont].
- 0.143u7            : Fix for MINGW compiler optimization for M68000. Fixed many sets using m68000-family CPU: Access Violation [Sandro Ronco]. Activate m68k trace emulation and fixed it [O. Galibert]. Avoid a m68000 case when dropping the irq mask just after taking a auto-acked interrupt would cause a spurious irq [O. Galibert]. Reset the m68000 double-bus/address-error flag where appropriate to avoid halting on consecutive but not linked exceptions [O. Galibert].
- 0.143u6            : Julian Sikorski and R. Belmont fixed another m68k buffer overflow bug.
- 0.143u4            : Improved m68k disassembly of CINV and CPUSH [R. Belmont].
- 0.143u3            : Added m68k FSIN, FCOS and FTAN using SoftFloat extensions [Stanislav Shwartsman, R. Belmont]. Fixed m68k instruction support table ("fixes" taitojc regression) [O. Galibert].
- 0.143u2            : Set m68k read/write bit properly in special status on MMU bus errors. Added bus error input line, fixed FMOVEM, fixed issues with HMMU [R. Belmont]. Generate a m68k per-cpu-type jump table. Correct linef handling makes the Atari ST less cranky [O. Galibert].
- 0.141u4            : Curt Coder exposed the M68000 supervisor flag for external MMUs to determine the current address space. Exposed the complete function code of the M68000 (instead of just FC2 as previously).
- 0.141u3            : M680x0 updates: Instruction cache emulated on '020 and later. Fixed interaction between MMU and bfextu/bfexts/bfins. Added fsgldiv, fsglmul and fscc FPU instructions. Fixed fault address in stack frame. Fixed supervisor violation bit in MMU status register. Added fmovem modes 1 and 3. Various other MMU fixes [Hans Ostermeyer].
- 0.140u2            : Many M680x0 FPU and PMMU fixes and enhancements [Hans Ostermeyer].
- 0.139u4            : Added more M68k conditionals and FGETEXP instruction [R. Belmont].
- 0.139u2            : Updated 68k core to use unaligned read/ write instead of their own stubs for handling misalinged reads [Aaron Giles].
- 0.137u2            : M680x0 FPU updates: BCD packed decimal now supported, including k-factor. Improved FSAVE/FRESTORE including FPU reset when restoring a NULL frame. FREM instruction supported. Better disassembly of FPU instructions [R. Belmont].
- 0.137u1            : 680x0 FPU updates [R. Belmont]: Rewritten to use SoftFloat instead of unportable native FP math. Support added for Motorola 96-bit extended floats. More addressing modes and conditions supported. Implemented FMOVECR. Added load extended PC relative indexed support. Cleanup some duplicated code.
- 0.137              : R. Belmont improved disassembly for various 680x0 FMOVE forms.
- 0.135u1            : MC680x0 update: Reworked PMMU/core interface so PMMU now sees all cop 0 instructions. Improved disassembly of PMMU instructions [R. Belmont].
- 0.135              : 680x0 update: Support PMOVE modes from PMMU. Allow the FPU to be used for both '030 and '040. Added byte and word FPU loads/stores. Fixed buggy FPU 64-bit stores in the (An) addressing mode [R. Belmont].
- 0.134u3            : Added cpu\m68000\m68kmmu.h. m68k updates [R. Belmont]: Throw F-line trap correctly when PMMU instructions are hit on non-equipped CPUs. Added working PMMU address translation (not feature complete, but sufficient to boot several 68030 Macs in MESS). Fixed up disassembly of some PMMU instructions. Added "68020 with 68851" CPU type.
- 0.134u2            : R. Belmont added disassemble PMOVE instruction (move to/from PMMU) to m68k. Harmony fleshed out SCC68070 definition in m68k core, for CD-i use in MESS.
- 0.134u1            : m68k (cpu\m68000\m68kcpu.h): don't save signal contexts on *BSD and Mac OS X [scarlet, R. Belmont].
- 0.133u1            : hap fixed a bug related to eating cycles during 68k cpu reset (cpu\m68000\m68kcpu.c). Previously, initial_cycles had a wrong value after reset, and if cycles were < 0, it'd always return 0. This change also happens to fix a scrolling bug in Fantasy Zone, introduced when that cycle eating thing was added.
- 0.131u3            : CPUs actually take some time to reset. Changed the 68000/68010 to eat an appropriate number of cycles after a reset [Aaron Giles].
- 0.129              : Removed cpu\m68000\m68kconf.h. Converted 68000 core to use state tables. Cleaned up cycle handling in the 68k core [Aaron Giles].
- 0.128u4            : Removed cpu\m68000\m68k.h and m68kmame.c/h. Significantly pared down the 68k core [Aaron Giles]: Merged outer MAME shell into the core proper and removed unused macros. Changed all external interfaces to pass the CPU device. Enabled 64-bit operations by default. Re-derived the interface functions to cascade and share code more aggressively. These changes also seem to have cured the taito_f3 issues as far as I can tell (at least pbobble3 seems right now). Disentangled the 68000 core [Aaron Giles]: Converting it to be much simpler and less overly abstracted. Hard-coded it for the options that are relevant and never going to change. Removed old unused CPS2 encryption junk. Changed encryption interfaces to pass the CPU core object. Switched M68000 to new memory functions [Couriersud].
- 0.128u3            : Aaron Giles began the process of pruning options from the 68000 core, hard-coding it for MAME's needs. We've hacked on it sufficiently that it is no longer generic, so this is a good opportunity to simplify the code so that it can actually be followed (still in progress). Aaron Giles converted the M680x0 cores to reference their data via pointers instead of global structs, in anticipation of future changes.
- 0.127u7            : Aaron Giles fixed a number of regressions due to recent 68000 IRQ changes.
- 0.127u6            : Aaron Giles changed 68000 interrupts to only trigger during execution. This means that multiple changes without any execution will be seen as atomic. It also means that PULSE_LINE no longer works for signalling IRQs.
- 0.127u1            : Olivier Galibert changed 68000 IRQ support so that the IRQ lines explicitly simulate a standard demux chip connected to the IRQ lines. This means that the sequence: cpunum_set_input_line(5, ASSERT_LINE); cpunum_set_input_line(3, ASSERT_LINE); and cpunum_set_input_line(3, CLEAR_LINE) now works as expected. This required fixes to several Atari and other drivers. Small optimization to memory handling for 68000 core [Christophe Jaillet].
- 0.123u5            : Aaron Giles fixed 68000 prefetching operation. Previous behavior was incorrect. Fabio Priuli fixed M68000 build logic to only include it if enabled.
- 0.117              : Zsolt Vasvari fixed ROL opcode in the 68000 emulator.
- 0.111u1            : Removed cpu\m68000\cpudefs.h. Alex Jackson fixed two bugs in the m68000 core: Fixed a miscompilation issue with GCC4 that was first noticed in Altered Beast but also affected Moonwalker, Galaxy Force 2, and probably many other games. Fixed the core's compile-time self-configuration so that it uses the same code paths on LP64 platforms (64-bit Linux, etc.) as on LLP64 (64-bit Windows) and 32-bit platforms. Giuseppe Gorgoglione removed m68000\cpudefs.h. This was used by the old assembly m68000 core. Removed from m68kmame.c and m68kmame.h as well many references to the old core (e.g A68K0, A68K2, etc.).
- 0.109u1            : Aaron Giles simplified the 68000 core generation logic to just produce one file. Hopefully this will cure some of the build issues with the core.
- 0.108u1            : David Haywood added a callback to the 68000 emulator for the TAS instruction, which allows different implementations based on external hardware.
- 0.107u1            : Charles MacDonald fixed memory write ordering bug in the 68000 core.
- 0.104u4            : Aaron Giles updated the 68000 disassembler to use the new interfaces. More global system cleanup [Aaron Giles, Atari Ace]: Moved 68000-specific build rules to cpu.mak.
- 0.102u2            : Alex Jackson tweaked the 68000 disassembler to display F-line traps in a more obvious fashion. Also changed to decorate jump targets for relative branches.
- 0.98u1             : Aaron Giles turned on address error checking in the 68000 core. This slows things down a bit but is more accurate and allows correct behavior of a couple of badly-programmed games. Fixed several issues with address error checking in the 68000 core. Fixed 68000 bug that treated 8-bit branches with $FF offsets as illegal, rather than allowing them and generating an address error.
- 30th June      2005: Jorge Cwik - I solved the undocumented timing of the 68000 DIVU/DIVS instructions: Below is attached source code for computing the exact number of cycles taken by a specific division on the Motorola 68000 CPU. As far as I know this information was not (publicly) available before. Current emulators for 68000-based machines (Amiga, Atari ST, MAC, MAME, etc) reached an amazing level of accuracy. The exact timing of the division instructions remained as one of the main inaccuracies because this is not documented in the available manuals. Hopefully, with this issue solved now, 68000 emulation can take one-step forward. The code and algorithm was only partially tested. It is not feasible to do an exhaustive test on real hardware in a single machine. The source code is available at: http://pasti.fxatari.com/docs/div68kCycleAccurate.c.
- 0.95u3             : Andrew Seed fixed cycle counts for several 68000 instructions.
- 0.92               : Removed cpu\m68000\asmintf.c and cpu\m68000\make68k.c.
- 0.87u3             : Olivier Galibert added some hooks to C 68k core in preparation for Sega decryption updates.
- 0.81               : Sebastien Volpe improved timing of several 68k instructions, these changes could do with being verified on a real 68k. m68kcpu.h, m68kcpu.c: A) scc (68000 only): CYC_SCC_R_FALSE was defined, not used, and misnamed as the extra 2 cycles happens when CC is true: now used and renamed to CYC_SCC_R_TRUE. m68kmake.c: B) add/adda/and/or/sub/suba (68000 only): the 'extra 2 cycles' cases were not handled correctly: correct to be effective on .l only, and also on register direct (previously, all sizes were affected, and only in immediate mode). C) jmp d(An,Xn) / pea (An) (68000/68010): tables correct. D) movem (68000/68010): generated basecount were incorrect in many cases, so I added a dedicated table. m68k_in.c: E) movem.l d(PC),reglist / movem.l d(PC,Xn),reglist (68000/68010): changed basecount. F) asr/asl/lsr/lsl/ror/rol/roxr/roxl (68000/68010): added '+2n' cycles where missing, as the shift/rotate memory is the only case where '+2n' does not apply, and is treated in a specific opcode handler.
- 0.79u2             : Leon van Rooij fixed a m68kdasm bug.
- 0.79               : Fixed ASM 68k core to compile again [BUT].
- 0.78u3             : Aaron Giles fixed the inability to compile with asm 68k.
- 0.72u2             : Acho A. Tang fixed a bug in the C 68000 core with the SBCD Opcode. States of the sign(N) and overflow(V) flags after SBCD, ABCD and NBCD operations are "undefined" according to Motorola. The C core randomizes the V flag and sets the N flag like signed operations. Viofight expects determinant results of the two flags from SBCD or it gets stuck in a math loop. The V flag now returns zero and the N flag mirrors carry exactly like what the ASM core does.
- 15th August    2003: Acho A. Tang fixed Viewpoint from crashing with the ASM 68k core too.
- 0.69u3             : Razoola changed MULU timing in ASM 68k core so that it matches the C ones.
- 0.69a              : C 68k core is now default, this fixes collisions in Assault.
- 26th May       2003: David Haywood forwarded the 68k CPU core select and Neo Geo save states from MAME32 Plus!
- 25th October   2002: Mike Coates fixed the LSL / LSR opcodes in the ASM 68k core.
- 11th June      2002: Karl Stenerud updated the C 68k core to emulate address error exceptions.
-  9th May       2002: Olivier Galibert fixed the reset opcode in the ASM 68k core.
- 23rd April     2002: Karl Stenerud fixed a bug in the privilege violation emulation in the C 68k core.
- 28th January   2002: Aaron Giles also fixed a crash that happened with the core changes and resetting 68k CPUs.
- 18th January   2002: Stefan Jokisch did a tiny clean-up on the ASM 68k core to make it compile with Visual C.
- 15th September 2001: Aaron Giles fixed some problems with 68k CPU interrupts.
- 23rd July      2001: Nicola Salmoria fixed a 68k disassembler bug.
- 16th May       2001: Aaron Giles fixed a small bug in the C 68k core.
- 16th April     2001: Mike Haaland fixed an ASM 68k CPU core compilation bug.
-  8th April     2001: Mike Coates changed the way in which interrupts are processed in the ASM 68k core, which should fix a few problems.
- 21st March     2001: Mike Coates fixed the Incredible Technologies 32-bit games' slowness with the ASM 68k core for good.
- 19th March     2001: Aaron Giles did a quick and dirty fix for Incredible Technologies 32-bit games' slowness with the ASM 68k core.
- 14th March     2001: Mike Coates renamed some variable names to be consistent between the ASM and C 68k cores.
-  9th March     2001: Mike Coates improved the ASM 68k core's save state support.
-  7th March     2001: Mike Coates fixed the ASM 68k core to compile properly again.
-  4th March     2001: Mike Coates fixed several bugs in the ASM 68k core.
-  4th March     2001: Nicola Salmoria improved the C 68k core so that it can use separate memory handlers for different width data, and he fixed it from crashing in many Neo Geo games.
-  2nd March     2001: Mike Coates fixed the ASM 68k core to compile on *nix.
- 20th February  2001: Karl Stenerud fixed some 68k disassembler bugs.
- 18th February  2001: E. Watanabe fixed the ASM 68k core to work with Namco System 2 and Taito F3 sound.
- 17th February  2001: Mike Coates changed the ASM 68k core to work correctly with encrypted opcodes.
- 12th February  2001: Mike Coates fixed pc-relative addressing modes in the ASM 68k core.
-  4th February  2001: Karl Stenerud added PC-relative read modes to the C 68k core but the MAME memory core has not been updated to work properly yet.
- 28th January   2001: Karl Stenerud sent in an update to the C 68k core, containing the beginnings of 68000/010 and 68020 separation.
- 27th January   2001: Mike Coates separated the 68000/010 and 68020 cores so that the ASM 68k core can be used with the C 68020 core, giving a nice speed boost to all the 68k games. Paul Leaman added Vampire: The Night Warriors to the CPS-2 driver, and like Vampire Savior, it will not work before some important 68k core changes are made.
-  5th January   2001: smf fixed encrypted opcodes handling in the C 68k core and subsequently fixed Enduro Racer again.
- 21st November  2000: Aaron Giles fixed another bug in the ASM 68k core.
- 19th November  2000: Aaron Giles fixed some more ASM 68k core bugs.
- 16th November  2000: Aaron Giles fixed some opcode bugs in the ASM 68k core.
- 13th November  2000: Aaron Giles fixed some problems in the ASM 68k core.
-  8th November  2000: Aaron Giles fixed the ASM 68k core to work with the new memory system.
-  4th September 2000: Nicola Salmoria fixed a bug in the C 68k core which affected Zwackery.
- 22nd August    2000: Nicola Salmoria fixed a 68k bug affecting Bombjack Twin.
-  2nd August    2000: Andrea Mazzoleni fixed a compilation bug in the C 68k core.
- 30th July      2000: Brad Oliver fixed a few 68k core bugs.
- 0.37b5             : Changed cpu\m68000\d68k.c/h and d68kconf.h to cpu\m68000\m68kdasm.c.
- 21st June      2000: Karl Stenerud and Mike Coates fixed some problems in the 68k cores.
-  4th April     2000: Karl Stenerud fixed the longstanding bug in C 68k core which caused Hippodrome to crash.
- 23rd March     2000: Mike Coates fixed an ASM 68k core bug which affected Super Sidekicks 4.
-  9th February  2000: Mike Coates fixed some ASM 68k core bugs.
-  7th February  2000: Aaron Giles fixed another 68k core bug.
- 0.36b15            : make68k.exe now requires as parameter the path of the comptab.asm include file (see makefile).
- 0.36b8             : Fixes to the x86 asm 68k core [Mike Coates].
- 25th October   1999: Mike Coates fixed some ASM 68k core bugs.
- 18th October   1999: Mike Coates fixed some bugs in the ASM 68k core.
- 0.36b4             : Darren Olafson fixed a 68000 "bug" (actually an undocumented feature of the cpu) that caused the timer to roll over from 00 to 99 in KOF98.
- 26th August    1999: Karl Stenerud fixed sbcd and abcd opcodes in the C 68k core.
- 22nd August    1999: Darren Olafson fixed an ASM 68k core bug which made kof98 timer incorrect.
- 0.36b3             : Karl Stenerud updated the 68000 C core.
-  8th August    1999: Mike Coates fixed PC fetch and stack in ASM 68k core.
- 20th June      1999: Mike Coates fixed ASM 68k core timings in debug mode.
- 28th May       1999: Mike Coates fixed some interrupt bugs of the asm 68k core, and now Spinmaster, Sengoku 2 and Riding Hero work on it.
- 26th May       1999: Mike Coates added support for previous PC to the asm 68k core.
- 0.35b13            : Mike Coates fixed a couple of bugs in the 68000 emulation (both asm and C). They affected Power Spikes 2 and F1 Dream.
- 12th May       1999: Mike Coates finally fixed the Power Spikes 2 and F1 Dream bugs in both asm and C 68k cores.
- 0.35b12            : Mike Coates fixed F1 Dream protection workaround (note that the game still doesn't work correctly with the 68000 C core).
- 0.35b11            : Added cpu\m6800\6800tbl.c. Major overhaul to the Atari games, and fixes to the 68000 and 6502 cores to get them going properly [Aaron Giles].
- 21st April     1999: Mike Coates fixed 68k assembler stuff so that it compiles.
- 11th April     1999: Aaron Giles has updated the 68k core for better interrupt emulation and other stuff.
- 10th April     1999: Aaron Giles fixed the C 68k core to compile on Macs.
-  9th April     1999: Nicola modified the m68k core to start faster, and the slowdown in the beginning of m68k games should be gone. He also fixed the crash if control-c was pressed during the rom load.
- 0.35b10            : Added cpu\m68000\m68k_in.c. Removed cpu\m68000\m68kops.c/h, m68kopnz.c, m68kopac.c, m68kopdm.c and readcpu.h. Please report any problem you find with the C 68000 core. There are no known bugs as of now (apart from ball movement in Power Spikes 2), if no new bugs are found we'll switch back to test the asm core.
-  5th April     1999: Juergen Buchmueller changed the DOS makefile to build the m68k core automatically, which should help ironing out the last bugs. He also fixed an opcode order problem.
-  4th April     1999: Juergen Buchmueller fixed the slow initialization of m68k (it caused small sound hiccups at the beginning of every m68k game).
- 0.35b9             : Removed cpu\m68000\m68k_in.c.
- 28th March     1999: Mike Coates implemented the STOP operation correctly in the ASM 68k core, which should help getting Indy working.
- 26th March     1999: Nicola fixed 64th Street to work with the C 68k core.
- 0.35b8             : Changed description to '68000'. Removed cpu\m68000\cycletbl.h. Most of the problems of beta 7 have been fixed, but the C 68000 core still isn't 100%.
- 23rd March     1999: Darren Olafson has updated the asm 68k core for better cycle timing.
- 0.35b7             : Removed cpu\m68000\d68000.h.
- 0.35b6             : Removed cpu\m68000\m68000.c and d68000.c.
- 0.35b5             : Added m68000\m68kcpu.c/h, m68kmake.c, m68kopac.c, m68kopdm.c, m68kopnz.c, m68kops.c/h, m68k_in.c, m68k.h and d68k.c/h.
-  1st March     1999: Tatsuyuki Satoh has sped up the C 68k core. Mike Coates has fixed several bugs with the ASM 68k core (Shock Troopers should work now).
- 21st February  1999: Karl Stenerud has sent in a newer C m68k core.
- 0.35b2             : Added m68000\m68000.c, m68kconf.h, m68kmame.c/h, d68kconf.h and d68000.c/h. Removed m68000\m68kdasm.c, mc68kmem.c, cpufunc.c, cputbl.h, opcode0.c-e.c, dis68k.c and asm.bat. New 68000 C core [Karl Stenerud]. For testing purposes, this is also being used in the DOS version instead of the asm core. Differences: 1. Faster. This code is, barring ram fetch time, almost twice as fast as the existing C core in MAME. I've done extensive speed profiling on both engines. The only problem now is the slow memory access in MAME due to bankswitching et al. 2. Emulation more correct. I found many bugs in the MAME engine (and many, many more in mine for that matter) when I pitted them head-to-head. I have run random instructions from each opcode class at least 10 million times, comparing the resultant CPU states, and have left it running random instructions for 1 billion iterations. In every case, I have adhered to the specs defined in M68000PM/AD REV.1. 3. Disassembler is correct. The current M68000 disassembler in MAME has a tendency to disassemble instructions that have an invalid EA mode. 4. Cycle counting is 99.9% correct. The only instructions which don't have  correct cycle counts are divs, divu, muls, mulu and they're not worth counting correctly. (I'm not about to waste emulation time counting 0-1 and 1-0 sequences). 5. > 32 bit friendly. I've taken care to ensure maximum portability without sacrificing speed. The result is conditional compiling dependant on your architecture. I've also implemented and tested a compatible solution for  architectures that lack 8, 16, or 32 bit signed storage types. 6. The code is carefully laid out to be readable (I beg to differ - NS).
- 0.35b1             : Added m68000\asm.bat. The 68000 based games no longer have to read and mix two 8 bit ports to get a 16 bit value [Brad Oliver].
- 0.34               : Bryan McPhail made several improvements and bug fixes to the Data East 68000 games (Midnight Resistance, Bad Dudes, Robocop, etc.).
- 0.34b6             : The x86 asm 68000 core: several bugs have been fixed (most notably, it now runs under pure DOS) but it is still not complete. For example, the two Metal Slugs hang shortly after game start. They will work if you recompile using the C core.
- 0.34b6             : Several games have experimental 68000 idle cycle skipping, for these games you should see increases of between 5% and 20%. Games currently using this method are: Puzzle De Pon, Karnov's Revenge, Wind Jammers, Street Hoops and Neo Bomberman. Note about the x86 asm 68000 core: several bugs have been fixed (most notably, it now runs under pure DOS) but it is still not complete. For example, the two Metal Slugs hang shortly after game start. They will work if you recompile using the C core.
- 0.34b5             : Added m68000\asmintf.c and make68k.c. x86 ASM 68000 core [Mike Coates, Darren Olafson]. This is a major speed improvement.
- 0.34b4             : Brad Oliver fixed bug in the 68000 interrupt handling which causes Rastan Saga to not boot correctly.
- 0.34b3             : Mike Coates fixed SBCD in M68000 disassembler.
- 0.34b2             : Nicola Salmoria fixed a bug in the 68000 BCD emulation which caused the F1 Dream timer to malfunction.
- 0.34b1             : Mike Coates fixed a bug in the NOT instruction of the 68000 core.
- 0.33b7             : Added m68000\cycletbl.h. Close to accurate 68000 instruction timing [Brian Verre]. Darren Olafson slightly improved speed of the 68000 emulator.
- 0.33b4             : The 68000 memory handlers can again be word-aligned instead of longword-aligned [Aaron Giles].
- 0.33b1             : Juergen Buchmueller improved speed of the C 68000 core (this is supposed to give a good speed increase, but I don't see any appreciable difference on my K6 - Nicola).
- 0.31               : Aaron Giles fixed 68000 emulator to properly handle interrupt priorities. Memory for the 68000 is allocated automatically. You no longer have to do it yourself. The memory interface reads/writes 16 bits at a time to improve performance. Writing a single byte is a bit tricky, because the 68000 can cause write to either the high or the low byte without affecting the other; thus the second parameter for a 16-bit write is a bit more complicated. The top 16 bits are a mask which is supposed to be ANDed with the 16-bit value already in memory; the bottom 16 bits are the actual data values, to be ORed with the result. To aid in doing these operations, use the macros READ_WORD(), WRITE_WORD(), COMBINE_WORD() and COMBINE_WORD_MEM() [Aaron Giles].
- 0.30               : Added m68000\m68kdasm.c and dis68k.c. Removed m68000\m68000.txt. Some changes to the 68000 emulator memory interface, and a new 68000 disassembler. Improved the 68000 CPU interface [Aaron Giles].
- 0.28               : Added m68000\cpudefs.h, cpufunc.c, cputbl.h, m68000.h, mc68kmem.c, opcode0.c - opcodee.c and readcpu.h. Jarek Burczynski adapted the M68000 emulator from the System 16 Arcade Emulator by Thierry Lescot. The only known problem of this emulator is that it doesn't count CPU cycles, only instructions. The first driver to use the 68000 is Rastan, also provided by Jarek.
- PCB: MC68EC000FN (Salmndr2), MC68000P10 (Cawing) = M68000 10 MHz, MC68HC000 (Bcstry), 68HC000FN10, PLCC68 (Grdnstrm), Signetics SCN68000CAN64 (Badlands, Tmnt), TM68HC000p-16 (Mcatadv), HD68000 (Hvoltage, Splndrbt), Hitachi HD68HC000PS8 (MegaPlay), 68HC000FN16 (Bang), TS 68000 (Rainbow), MC68000P12 OB26M8829  64 pin (Pntnpuzl)
- PCB: 59 <- Data East Code (Mutantf, Rohga), DATA EAST 74 - surface scratched (Sotsugyo)
- NOTES: Motorola MC68000
- SOURCE: cpu\m68000\m68000.cpp + m68000\m68kcpu.cpp



3.81  M68008

- 0.285              : Fixed crash when trying to set PC from debugger (m68000\m68000.cpp) [AJR].
- 0.256              : Added m68000\m68008-head.h, m68008-sdf8.cpp, m68008-sdp8.cpp, m68008-sif8.cpp and m68008-sip8.cpp. Extract m68000mcu from m68000. Implemented M68008 as a 68000 variant [O. Galibert]. When a SR S-flag update happens in parallel to a bus access, be careful to delay the update to after the access because it is otherwise seen too early through fc and acts on mmus&co. Fixes hp_ipc [ajrhacker, O. Galibert].
- 0.249              : Added cpu\m68000\m68008.cpp/h. Split the header to make future semi-indenpendant implementations sane [O. Galibert].
- 0.209              : Renamed device for future use (MC68008PLCC --> MC68008FN) [AJR].
- 0.141u3            : M680x0 updates [Hans Ostermeyer]: Instruction cache emulated on '020 and later. Fixed interaction between MMU and bfextu/bfexts/bfins. Added fsgldiv, fsglmul and fscc FPU instructions. Fixed fault address in stack frame. Fixed supervisor violation bit in MMU status register. Added fmovem modes 1 and 3. Various other MMU fixes.
- 0.121u2            : Curt Coder fixes the M68008 data bus to properly use 8-bit accesses.
- 0.82               : Curt Coder added MC68008 support to the MC68000 core.
- NOTES: The M68008 must use ROM_LOAD16_WORD_SWAP to load ROMs.
- SOURCE: cpu\m68000\m68008.cpp + m68000\m68kcpu.cpp



3.82  M68010

- 0.280              : Use constructor delegation (m68000\m68010.cpp) [Vas Crabb].
- 0.279              : 'ctor' accepts type param. Support being able to subclass and pass in type param (m68000\m68010.cpp) [Adam Billyard].
- 0.277              : For 68010 only, do not throw away buserr on prefetch (m68000\m68010.cpp) [Adam Billyard].
- 0.272              : Stub out the Coprocesor Interface Registers found on '010-'030 so that Mac ROMs can detect if an FPU is present [R. Belmont].
- 0.249              : Added cpu\m68000\m68010.cpp/h. Split the header to make future semi-indenpendant implementations sane [O. Galibert].
- 0.242              : Don't set SR (which may change SP to USP) until after unwinding 1000 stack exception frame (68010 RTE). Create 1000 format stack frame on bus error (68010). 68k: Support for external MMU bus error instruction restart, set fault address in 68010 and 68070 stack frames and set fc and rw in 68010 stack frame [J Booth].
- 0.241              : 68010: Create 1000 format stack frame on bus error. 68010 RTE: Don't set SR (which may change SP to USP) until after unwinding 1000 stack exception frame (m68000\m68k_in.lst, m68kcpu.cpp and m68kops.cpp) [J Booth].
- 0.221              : Correct DBcc timings. This fix prevents certain Marble Madness clones (e.g. marble2) from watchdog resetting while cheksumming the ROM (m68000\m68k_in.lst and m68kops.cpp) [AJR].
- 0.193              : Refactor 680x0 so that member variables aren't public [smf].
- 0.192              : Added support for 68010/68020/68030 bus error stack frames formats. This fixes common CPU type detection routine: http://www.easy68k.com/EASy68Kforum/viewtopic.php?p=1105#p1105 (cpu\m68000\m68kcpu.h) [Jean-Francois DEL NERO].
- 0.151              : The 68010 does not perform a read before write during a CLR instruction (m68000\m68k_in.c). This fixed wrong colors on title screen and during gameplay in all sets in Hard Drivin' driver. NOTE: "clr insns on 68000 read before writing. This isn't so on the 68010, but we have no TARGET_68010." (http://www.opensource.apple.com/source/gcc/gcc-1765/gcc/config/m68k/m68k.c). "The special thing about a CLR (on the 68000, fixed in the 68010 and onwards I believe) is, that the processor does a source read before doing a destination write." (http://www.zophar.net/fileuploads/2/10544qufns/jag68k.txt) [Phil Bennett].
- 0.149u1            : Changed description to 'M68010'.
- 0.144u5            : Fix for M680x0 case where the MMU trashed memory [R. Belmont].
- 0.141u3            : M680x0 updates [Hans Ostermeyer]: Instruction cache emulated on '020 and later. Fixed interaction between MMU and bfextu/bfexts/bfins. Added fsgldiv, fsglmul and fscc FPU instructions. Fixed fault address in stack frame. Fixed supervisor violation bit in MMU status register. Added fmovem modes 1 and 3. Various other MMU fixes.
- 0.140u2            : Many M680x0 FPU and PMMU fixes and enhancements [Hans Ostermeyer].
- 0.137u2            : M680x0 FPU updates [R. Belmont]: BCD packed decimal now supported, including k-factor. Improved FSAVE/FRESTORE including FPU reset when restoring a NULL frame. FREM instruction supported. Better disassembly of FPU instructions.
- 0.137u1            : 680x0 FPU updates [R. Belmont]: Rewritten to use SoftFloat instead of unportable native FP math. Support added for Motorola 96-bit extended floats. More addressing modes and conditions supported. Implemented FMOVECR. Added load extended PC relative indexed support. Cleanup some duplicated code.
- 0.137              : R. Belmont improved disassembly for various 680x0 FMOVE forms.
- 0.135u1            : MC680x0 update [R. Belmont]: Reworked PMMU/core interface so PMMU now sees all cop 0 instructions. Improved disassembly of PMMU instructions.
- 0.135              : 680x0 update [R. Belmont]: Support PMOVE modes from PMMU. Allow the FPU to be used for both '030 and '040. Added byte and word FPU loads/stores. Fixed buggy FPU 64-bit stores in the (An) addressing mode.
- 0.131u3            : CPUs actually take some time to reset. Changed the 68000/68010 to eat an appropriate number of cycles after a reset [Aaron Giles].
- 0.112u2            : Ernesto Corvi fixed behavior of MOVEC instruction on later 680x0 chips and in the disassembler.
- 28th January   2001: Karl Stenerud sent in an update to the C 68k core, containing the beginnings of 68000/010 and 68020 separation.
- 27th January   2001: Mike Coates separated the 68000/010 and 68020 cores so that the ASM 68k core can be used with the C 68020 core, giving a nice speed boost to all the 68k games.
- 0.36RC1            : Changed description to '68010'.
- 17th August    1999: Aaron Giles fixed an embarrassing 68010/68020 mode selection bug.
- 0.35b13            : Changed description to 'MC68010'.
- NOTES: The M68010 has extra opcodes.
- DRIVERS: atarisy1.cpp, gauntlet.cpp, harddriv.cpp, toobin.cpp and vindictr.cpp
- SOURCE: cpu\m68000\m68010.cpp + m68000\m68kcpu.cpp



3.83  M68020 / M68EC020

- 0.272              : Stub out the Coprocesor Interface Registers found on '010-'030 so that Mac ROMs can detect if an FPU is present [R. Belmont].
- 0.249              : Added cpu\m68000\m68020.cpp/h. Split the header to make future semi-indenpendant implementations sane [O. Galibert].
- 0.204              : Show PMMU registers for 68020/030/040 in debugger [Sven Schnelle].
- 0.193              : Refactor 680x0 so that member variables aren't public [smf].
- 0.192              : Added support for 68010/68020/68030 bus error stack frames formats. This fixes common CPU type detection routine: http://www.easy68k.com/EASy68Kforum/viewtopic.php?p=1105#p1105 (cpu\m68000\m68kcpu.h) [Jean-Francois DEL NERO].
- 0.181              : Respect 68020 "freeze I-cache" bit; (MESS) 'Micro 20' 68020 cache test now passes [R. Belmont].
- 0.170              : Fixed (020+) bfins results and Z flag (m68000\m68k_in.cpp) [Till Harbaum].
- 0.166              : Fixed corner case for 020+ bitfield instructions (m68000\m68k_in.c and m68kops.c). Fixed 020+ PACK/UNPK nibble ordering [Till Harbaum, R. Belmont].
- 0.164              : Fixed '020 cache emulation corner case [Hans Ostermeyer].
- 0.159              : Emulated instruction cache for 68020/68EC020 (MC68020 User's Manual, Section 4 - On-Chip Cache Memory). Drivers tested gained anywhere from 3-10% unthrottled on Taito F3 and Konami GX games, 10-12% on the Mac II and 140% on Semicom's Dream World [R. Belmont].
- 0.158              : Implement FTRAP instruction and added "68020 with FPU" CPU type [R. Belmont].
- 0.150              : A regular 68000 processor will generate a read operation when using the clr.b/.w/.l opcodes, this was fixed and changed on the 020. I'm not aware of any software explicitly requiring this right now, but it would be detectable if you have read-triggered hardware and various 68k documents advise caution when using the opcodes and porting code using said opcodes to a 020 based machine for that reason. There was some private discussion with Charles before doing this, apparently it is detectable on the Genesis where a read from the VDP port will increment the internal address counter (cpu\m68000\m68k_in.c) [David Haywood].
- 0.149u1            : Changed description from '68020' to 'M68020' and '68EC020' to 'M68EC020'.
- 0.145u5            : Allow FPU instructions on '020 (it's possible to have an external 68881/68882) and fix missing break; in the FPU [Hans Ostermeyer].
- 0.144u5            : Fix for M680x0 case where the MMU trashed memory [R. Belmont].
- 0.141u3            : M680x0 updates [Hans Ostermeyer]: Instruction cache emulated on '020 and later. Fixed interaction between MMU and bfextu/bfexts/bfins. Added fsgldiv, fsglmul and fscc FPU instructions. Fixed fault address in stack frame. Fixed supervisor violation bit in MMU status register. Added fmovem modes 1 and 3. Various other MMU fixes.
- 0.140u2            : Many M680x0 FPU and PMMU fixes and enhancements [Hans Ostermeyer].
- 0.137u2            : M680x0 FPU updates [R. Belmont]: BCD packed decimal now supported, including k-factor. Improved FSAVE/FRESTORE including FPU reset when restoring a NULL frame. FREM instruction supported. Better disassembly of FPU instructions.
- 0.137u1            : 680x0 FPU updates [R. Belmont]: Rewritten to use SoftFloat instead of unportable native FP math. Support added for Motorola 96-bit extended floats. More addressing modes and conditions supported. Implemented FMOVECR. Added load extended PC relative indexed support. Cleanup some duplicated code.
- 0.137              : R. Belmont fixed a 32-bit address displacement's upper 16-bit is desappear in the 68020 disassembler. Improved disassembly for various 680x0 FMOVE forms.
- 0.135u1            : MC680x0 update [R. Belmont]: Reworked PMMU/core interface so PMMU now sees all cop 0 instructions. Improved disassembly of PMMU instructions.
- 0.135              : 680x0 update [R. Belmont]: Support PMOVE modes from PMMU. Allow the FPU to be used for both '030 and '040. Added byte and word FPU loads/stores. Fixed buggy FPU 64-bit stores in the (An) addressing mode.
- 0.134u3            : m68k updates [R. Belmont]: Throw F-line trap correctly when PMMU instructions are hit on non-equipped CPUs. Added working PMMU address translation (not feature complete, but sufficient to boot several 68030 Macs in MESS). Fixed up disassembly of some PMMU instructions. Added "68020 with 68851" CPU type.
- 0.128u4            : Aaron Giles fixed the 68EC020 CPU, which has graphics regression / game resets in most sets using the 68EC020 CPU.
- 0.128u3            : Aaron Giles updated cpuexec to compute the "perfect" interleave value taking into account the minimum number of cycles per instruction specified by the CPU core. Fixed incorrect minimum cpi in the 68020+ cores.
- 0.112u2            : Ernesto Corvi fixed behavior of MOVEC instruction on later 680x0 chips, and in the disassembler.
- 0.110u1            : Aaron Giles fixed max instruction bytes for 68020+ CPUs to avoid assertion in new disassembler.
- 0.80u1             : Fixed the opcode view which in some cases displayed too many bytes on 32 bit CPUs such as 68020 and Hyperstone [Bryan McPhail].
- 25th November  2001: Bryan McPhail resent an old bug fix to the 68020 CPU core which fixes a crash in Under Fire.
- 16th June      2001: Aaron Giles updated the ASM 68020 core, making the itech32 games playable with it but others not yet.
-  2nd June      2001: Bryan McPhail fixed yet another 68020 core bug which made Under Fire playable.
-  1st May       2001: Bryan McPhail fixed a 68020 core bug which caused a lot of problems with the Taito F3 driver, namely a Puzzle Bobble 2 intro background graphics problem and some Bubble Memories bugs. In addition, the bugfix makes the following games fully playable: Elevator Action Returns, Darius Gaiden, Puzzle Bobble 4, Landmaker, Twin Qix and Gekirindan.
- 28th January   2001: Karl Stenerud sent in an update to the C 68k core, containing the beginnings of 68000/010 and 68020 separation.
- 27th January   2001: Mike Coates separated the 68000/010 and 68020 cores so that the ASM 68k core can be used with the C 68020 core, giving a nice speed boost to all the 68k games.
- 15th January   2001: Bryan McPhail finally submitted his Taito F3 driver, which is not graphically perfect and crashes hard sometimes but has complete ES5505 sound emulation thanks to Aaron Giles, Ian Schmidt and R. Belmont. Not all games are working due to 68020 core bugs.
- 0.37b9             : The 68EC020 core now uses 32-bit memory handlers. The Psikyo driver has been updated to use the new interface. Unfortunately, this support has yet to make it into the x86 asm 68000 core, so it is once again disabled for this build [Aaron Giles].
- 17th October   2000: Aaron Giles updated the C 68k core to support 32-bit bus width in 68020 emulation.
- 0.37b8             : The x86 asm 68000 core now has limited 68020 support and runs the Psikyo games, so is re-enabled by default [Darren Olafson].
- 30th September 2000: Darren Olafson sent in an updated ASM 68k core with support for the two Psikyo 68020 games, and fixed a bug that prevented sf2accp2 from working.
- 26th March     2000: Karl Stenerud updated the 68020 core a bit.
-  3rd March     2000: Karl Stenerud has added some more 68020 functionality to the C 68k core.
-  8th February  2000: Luca Elia fixed a 68020 bug.
-  6th February  2000: Aaron Giles improved the 68020 support a lot, and added distinction for 68EC020.
- 19th July      1999: Karl Stenerud updated the C 68k core, adding some 68020 opcodes and fixing bugs.
- 17th August    1999: Aaron Giles fixed an embarrassing 68010/68020 mode selection bug.
- PCB: MC68EC020FG16, QFP100 (Dreamwld, Elvactr), MC68EC020FG25 (Machbrkr), MC68EC020RP25 (Groundfx), TMP68EC020F (Samuraia)
- SOURCE: cpu\m68000\m68020.cpp + m68000\m68kcpu.cpp



3.84  M68030 / M68EC030

- 0.272              : Stub out the Coprocesor Interface Registers found on '010-'030 so that Mac ROMs can detect if an FPU is present [R. Belmont].
- 0.271              : Fixed disabling the FPU for the 68030 [R. Belmont]. Added gdbstub support for MC68030 [kms1212].
- 0.249              : Added cpu\m68000\m68030.cpp/h. Split the header to make future semi-indenpendant implementations sane [O. Galibert].
- 0.204              : Show PMMU registers for 68020/030/040 in debugger [Sven Schnelle].
- 0.193              : Refactor 680x0 so that member variables aren't public [smf].
- 0.192              : Added support for 68010/68020/68030 bus error stack frames formats. This fixes common CPU type detection routine: http://www.easy68k.com/EASy68Kforum/viewtopic.php?p=1105#p1105 (cpu\m68000\m68kcpu.h) [Jean-Francois DEL NERO].
- 0.159              : Emulated instruction cache for 68020/68EC020. Drivers tested gained anywhere from 3-10% unthrottled on Taito F3 and Konami GX games, 10-12% on the Mac II and 140% on Semicom's Dream World [R. Belmont].
- 0.149u1            : Changed description to 'M68EC030'.
- 22nd March     2012: R. Belmont - I worked with Hans Ostermeyer to integrate his branched Apollo workstation driver into mainline MESS; it's now in there and you can successfully install and run Domain/OS in the emulation. He fixed several issues in our 68030/68040 emulation along the way, which is good for everything.
- 0.144u5            : Fix for M680x0 case where the MMU trashed memory [R. Belmont].
- 0.143u3            : M68040 FPU opcodes are somewhat available on a 030 when the FPU is added [O. Galibert].
- 0.141u3            : M680x0 updates [Hans Ostermeyer]: Instruction cache emulated on '020 and later. Fixed interaction between MMU and bfextu/bfexts/bfins. Added fsgldiv, fsglmul and fscc FPU instructions. Fixed fault address in stack frame. Fixed supervisor violation bit in MMU status register. Added fmovem modes 1 and 3. Various other MMU fixes.
- 0.140u2            : Many M680x0 FPU and PMMU fixes and enhancements [Hans Ostermeyer].
- 0.139u4            : 68030 MMU now emulates translation cache; fixed misinterpreted MMU opcodes [R. Belmont].
- 0.137u2            : M680x0 FPU updates [R. Belmont]: BCD packed decimal now supported, including k-factor. Improved FSAVE/FRESTORE including FPU reset when restoring a NULL frame. FREM instruction supported. Better disassembly of FPU instructions.
- 0.137u1            : 680x0 FPU updates [R. Belmont]: Rewritten to use SoftFloat instead of unportable native FP math. Support added for Motorola 96-bit extended floats. More addressing modes and conditions supported. Implemented FMOVECR. Added load extended PC relative indexed support. Cleanup some duplicated code.
- 0.137              : Show FPU registers in the debugger for 68030+. Improved disassembly for various FMOVE forms [R. Belmont].
- 0.136u4            : John R. Hauser added MAME-ified version of SoftFloat library (lib\softfloat\softfloat.c). NOTE (R. Belmont): There's no portable way to use the host's FPU for high-precision floating point. GCC has extensions which map to Intel's 80-bit extended floats, but support on non-x86/x64 is sketchy and MSVC doesn't support floats > 32 bits at all. I plan to use SoftFloat for the 68030/040 FPU up front, but it will also be useful in the future for emulating the 386/486/Pentium/etc FPUs (Bochs uses it for exactly that purpose).
- 0.135u1            : MC680x0 update [R. Belmont]: Reworked PMMU/core interface so PMMU now sees all cop 0 instructions. Improved disassembly of PMMU instructions. Fixed disassembly for EC/LC variants of '030/'040.
- 0.135              : 680x0 update [R. Belmont]: Support PMOVE modes from PMMU. Allow the FPU to be used for both '030 and '040. Added byte and word FPU loads/stores. Fixed buggy FPU 64-bit stores in the (An) addressing mode.
- 0.134u3            : m68k updates [R. Belmont]: Throw F-line trap correctly when PMMU instructions are hit on non-equipped CPUs. Added working PMMU address translation (not feature complete, but sufficient to boot several 68030 Macs in MESS). Fixed up disassembly of some PMMU instructions. Added "68020 with 68851" CPU type.
- 0.134u2            : M680x0 update [R. Belmont]: Added CPU types 68EC030, 68030 and 68EC040. Start of 030/040 PMMU, including stubbed PMOVE. Added disassemble PMOVE instruction (move to/from PMMU) to m68k.
- 0.112u2            : Ernesto Corvi fixed behavior of MOVEC instruction on later 680x0 chips, and in the disassembler.
- NOTES: Supported by disassembler only.
- SOURCE: cpu\m68000\m68030.cpp + m68000\m68kcpu.cpp



3.85  M68040

- 0.271              : Don't emulate byte smearing for the 68040 [R. Belmont].
- 0.253              : Reduce error logging spam for some unemulated instructions (m68000\m68k_in.lst and m68kops.cpp) [AJR].
- 0.249              : Added cpu\m68000\m68040.cpp/h. Split the header to make future semi-indenpendant implementations sane [O. Galibert].
- 0.212              : Stop CINV DATA instruction from causing F-line exception (cpu\m68000\m68k_in.lst and m68kops.cpp) [AJR].
- 0.204              : Show PMMU registers for 68020/030/040 in debugger [Sven Schnelle].
- 0.193              : Refactor 680x0 so that member variables aren't public [smf].
- 0.154              : Update used and modified bits in the page tables and greatly improved PTEST results on 68040 (m68000\m68000.h, m68kcpu.c and m68kmmu.h) [R. Belmont]. d68040_fbcc DASM fixes (FBCC is 68040 and 68881, cpu\m68000\m68kdasm.c) [O. Galibert].
- 0.149u1            : Changed description to 'M68040'.
- 22nd March     2012: R. Belmont - I worked with Hans Ostermeyer to integrate his branched Apollo workstation driver into mainline MESS; it's now in there and you can successfully install and run Domain/OS in the emulation. He fixed several issues in our 68030/68040 emulation along the way, which is good for everything.
- 0.145u1            : 68040 MMU improvements. Teach fsave to pee on the correct side of the tree. Added correct idle frames. Show the correct virtual map [O. Galibert]. Slightly less stubby CINV (68040 logerror) [Hans Ostermeyer].
- 0.144u5            : Fix for M680x0 case where the MMU trashed memory [R. Belmont].
- 0.143u7            : Preliminary 68040 MMU implementation [R. Belmont].
- 0.141u3            : M680x0 updates [Hans Ostermeyer]: Instruction cache emulated on '020 and later. Fixed interaction between MMU and bfextu/bfexts/bfins. Added fsgldiv, fsglmul and fscc FPU instructions. Fixed fault address in stack frame. Fixed supervisor violation bit in MMU status register. Added fmovem modes 1 and 3. Various other MMU fixes.
- 0.140u2            : Many M680x0 FPU and PMMU fixes and enhancements [Hans Ostermeyer].
- 0.137u1            : 680x0 FPU updates [R. Belmont]: Rewritten to use SoftFloat instead of unportable native FP math. Support added for Motorola 96-bit extended floats. More addressing modes and conditions supported. Implemented FMOVECR. Added load extended PC relative indexed support. Cleanup some duplicated code.
- 0.137u1            : 680x0 FPU updates: Rewritten to use SoftFloat instead of unportable native FP math. Support added for Motorola 96-bit extended floats. More addressing modes and conditions supported. Implemented FMOVECR. Added load extended PC relative indexed support. Cleanup some duplicated code [R. Belmont].
- 0.137              : Show FPU registers in the debugger for 68030+. Improved disassembly for various FMOVE forms [R. Belmont].
- 0.136u4            : John R. Hauser added MAME-ified version of SoftFloat library (lib\softfloat\softfloat.c). NOTE (R. Belmont): There's no portable way to use the host's FPU for high-precision floating point. GCC has extensions which map to Intel's 80-bit extended floats, but support on non-x86/x64 is sketchy and MSVC doesn't support floats > 32 bits at all. I plan to use SoftFloat for the 68030/040 FPU up front, but it will also be useful in the future for emulating the 386/486/Pentium/etc FPUs (Bochs uses it for exactly that purpose).
- 0.135u1            : MC680x0 update [R. Belmont]: Reworked PMMU/core interface so PMMU now sees all cop 0 instructions. Improved disassembly of PMMU instructions. Preliminary 68LC040 support. Fixed disassembly for EC/LC variants of '030/'040.
- 0.135              : 680x0 update [R. Belmont]: Support PMOVE modes from PMMU. Allow the FPU to be used for both '030 and '040. Added byte and word FPU loads/stores. Fixed buggy FPU 64-bit stores in the (An) addressing mode.
- 0.112u2            : Ernesto Corvi fixed behavior of MOVEC instruction on later 680x0 chips, and in the disassembler.
- 0.106u9            : Improved M68040 FPU emulation [Ville Linde].
- 22nd June      2006: Ville Linde - I have made some major improvements to the Taito JC System driver. First I improved and fixed bugs in the M68040 FPU. Then I found the missing vertical blank interrupt, after which things really started to work. After that, I needed to figure out how the 2D graphics works. Turns out the 2D graphics chip is just a basic object processor, not too different from the one in Konami's Firebeat hardware. Landing Gear and Side by Side 2 already run through their attract modes. Densya De Go! also shows some graphics, but hangs pretty soon. Apparently it needs a bit more of the train controller emulated.
- 0.105u1            : Ville Linde added many FPU opcodes to the M68040 core.
- 10th April     2006: Ville Linde - I picked up the Taito JC System driver again in hopes of getting it to do something interesting. The two major roadblocks were the missing FPU stuff from the M68040 core and the missing TMS320C51 DSP core. The TMS DSP emulation already works well enough that the basic communication and ROM tests are already working. There's also enough of the 68040 FPU emulated that the games won't just crash when they hit FPU opcodes. None of the games still show anything interesting graphics-wise, but progress is progress nevertheless.
- 0.97u5             : Ville Linde added very basic 68040 support to the 68000 core.
-  8th April 2004: David Haywood - I don't think I'll be finishing this one myself somehow, needs a 68040 core (currently running on the 68020) and various other bits and pieces before it stands a chance of working. WIP driver should be included in the next update tho.
- PCB: MC68040RC25  PGA type (Landgear, Sidebs, Sidebs2)
- DRIVERS: taitojc.cpp
- SOURCE: cpu\m68000\m68040.cpp + m68000\m68kcpu.cpp



3.86  M68301

- 0.149u1            : Changed description to 'M68301'.
- 0.145u4            : Added 68301 aliases for better documentation [David Haywood]. Replaced 68000 CPU1 with 68301 in all Seta2 games, except Funcube 2/3/4.
- 0.122u8            : Corrects 68301 base clock as 50MHz / 3 (16.66666MHz) as all the Seta2 hardware has a 50MHz OSC. Secondary OSC are for other chips (28MHz and or 32.53047MHz) [Brian Troha].
- NOTES: See also Toshiba TMP68301
- DRIVERS: seta2.cpp
- SOURCE: cpu\m68000\m68000.cpp


3.87  MC68307

- 0.222              : READ/WRITE macros removal [Osso].
- 0.209              : Use internal map for interrupt acknowledgment (was overlooked). Disabled side effects for interrupt acknowledgment [AJR].
- 0.208              : Added override for RESET instruction [AJR].
- 0.206              : Eliminated space and mem_mask arguments from read/write handlers. More accurate emulation of internal priority interrupt controller [AJR].
- 0.201              : Removed MCFG macros and old DEVCB [Ryan Holtz].
- 0.193              : Refactor 680x0 so that member variables aren't public. Removed safe_pc() [smf].
- 0.154              : Removed machine\68307ser.c/h. Updated 68307's 68681 to an actual sub-device instead of pairing it in the game driver [David Haywood]. Using delegates for 68307 [Miodrag Milanovic].
- 0.152              : Updated BFM Fruit drivers to use the N68681 device (machine\68307.c/h and 68307ser.c/h) [Osso].
- 0.149u1            : Changed description to 'MC68307'. Added machine\68307.c/h. Moved cpu\m68000\68307bus.c/h, 68307ser.c/h, 68307sim.c/h and 68307tmu.c/h to emu\machine\. Now that we're modern treat the 68307 like other modern CPUs by using a derived type with the peripherals in emu\machine instead of being glued into the CPU core [David Haywood].
- 0.145u7            : Improved the serial emulation in 68307 and added some logging, removing the hack in bfm_sc4.c. More work on 68307's [David Haywood].
- 0.145u6            : Added m68000\68307bus.c/h, 68307ser.c/h, 68307sim.c/h and 68307tmu.c/h. Added preliminary on-board peripherals to 68307 [David Haywood].
- 0.145u4            : Added 68307 aliases for better documentation [David Haywood].
- DRIVERS: bfm_sc4h.cpp and bfm_sc45.cpp
- SOURCE: machine\68307.cpp/h


3.88  MC68328

- 0.253              : Avoid a collision between the internal status register and the interrupt status register (machine\mc68328.cpp) [O. Galibert].
- 0.251              : Changed description to 'MC68328 DragonBall Processor'. Added video\mc68328lcd.cpp/h. More cleanups. Improved LCD controller emulation. Fixed reported Coverity issues (machine\mc68328.cpp). Added a generic device to handle MC68328-style LCD output signals [Ryan Holtz].
- 0.239              : Updated logging to match handler size [Patrick Mackinlay].
- 0.238              : Cleaned up register handlers and structure. Moved #define macros into enums within the class [Ryan Holtz].
- 0.226              : Added 'MC68328 DragonBall Integrated Processor' device.
- 0.209              : Improved MC68328 integration of emulated device: Derive class from m68000_device instead of using CPU finder. Internalize read/write handlers and mapping for on-chip registers. Read video memory from cached address space instead of hardcoded RAM device in screen_update. Generate vectors upon interrupt acknowledgment instead of using set_input_line_and_vector. Mask out low 3 bits of IVR. Moved callback resolution to device_resolve_objects [AJR].
- 0.202              : De-MCFG MC68328 [Ryan Holtz].
- 0.186              : Moved static data out of devices into the device types [Vas Crabb].
- 0.166              : Moved emu\machine\mc68328.c/h to devices\machine\. Moved all devices into separate part of src tree [Miodrag Milanovic].
- 0.154              : Changed description to 'MC68328 (DragonBall) Integrated Processor'.
- 0.153              : Moved mess\machine\mc68328.c/h to emu\machine\. Moved common machine and video chips to emu [Curt Coder]. Converted MC68328 to DEVCB2 [Osso].
- 0.149              : Merged mess\video\mc68328.c/h with mess\machine\mc68328.c/h. Modernized MC68328 (DragonBall) device [Fabio Priuli].
- 0.147              : Added mess\machine\mc68328.c/h and mess\video\mc68328.c/h. Merge of MESS sources [Miodrag Milanovic].
- NOTES: Motorola 68328 ("DragonBall") System-on-a-Chip implementation
- DRIVERS: cowtipping.cpp
- SOURCE: machine\mc68328.cpp/h


3.89  MC68EZ328
- 0.275              : Fixes for MC68EZ328: Allow selection and use of Port A: On EZ and VZ, PASEL is reserved, and it was hard-coded to 0 (disabled). However, the user manual notes: "In an 8-bit-only system, you can configure these pins as a parallel I/O port by writing a 1 to the WDTH8 bit of the SCR". According to the MC68328 datasheet, something similar should be needed to activate its Port B, but that change is not included here. Its PBSEL is exposed, so there is likely no difference in emulation. Fuller implementation of timer: The existing implementation left the timer counter (TCN) at zero until the compare value (TCMP) was reached. However, some software relies on reading the TCN values to measure elapsed time. The timer counter (TCN) now increments on every timer tick (machine\mc68328.cpp) [Kirk Meyer].
- 0.251              : Improved (MESS) Palm IIIc support. Split MC68328 device into a base class with shared functionality, and derived MC68328 and MC68EZ328 models. More MC68EZ328 work for Palm m100 and IQ Unlimited. Hooked up MC68EZ328 device to VTech IQ Unlimited [Ryan Holtz].
- 11th  December 2022: Ryan Holtz - I spent the majority of this weekend refactoring the MC68328 device so that I can derive an MC68EZ328 device which uses common functionality between the two chips. There's still a bunch to be done, but the Palm IIIc - the first color PDA made by Palm, Inc. - now shows its boot screen, and can even be taken through its initial setup.
- DRIVERS: cowtipping.cpp
- SOURCE: machine\mc68328.cpp/h


3.8A  MC68340

- 0.274              : Changed description to 'MC68340 DUART'.
- 0.256              : Don't mess with devcbs in device_start [Vas Crabb].
- 0.249              : Added cpu\m68000\fscpu32.cpp/h. Split the M68000 header to make future semi-indenpendant implementations sane [O. Galibert]. Changed M68340 to 16 bit data bus instead of 32 [Paul Arnold]. Don't use lambda auto-capture (machine\68340sim.cpp) [Vas Crabb].
- 0.243              : Fixed potential crash on mode logging (machine\68340tmu.cpp) [Angelo Salese].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.211              : Fixed prescaler calculation. Handle various reset behaviors. TOUT changes recorded in status register. Better handling of COM flag and compare register being zero. Reload not immediately after reaching zero but on next cycle (machine\68340tmu.cpp) [AJR].
- 0.210              : Fixed interrupt vectoring [AJR].
- 0.207              : MCFG and MACHINE_CONFIG removals [Ryan Holtz]. Added overrideable method to signal RESET instruction to internal peripherals (m68000\m68000.h; m68k_reset_peripherals) [AJR].
- 0.206              : Eliminated space and mem_mask arguments from read/write handlers. Preliminary cleanups. 68340 Interrupt overhaul: Interrupts are now properly acknowledged and arbitrated (many remain unimplemented). Interrupts are no longer automatically cleared upon acknowledgment except for the Programmable Interrupt Timer. Timer unit clears COM and sets TC and TO in the status register on applicable conditions. Timer unit's confusion of IE0 (TC IRQ enable) with IE2 (TO IRQ enable) has been sorted out [AJR].
- 0.193              : Refactor 680x0 so that member variables aren't public. Removed safe_pc() [smf]. Fixed debug build (machine\68340dma.cpp) [AJR].
- 0.190              : Added 'MC68340 DUART Device' device. Fixed MCR register enum error and silented some logerror spam by turning them into LOGx statements (machine\68340tmu.h). Deskeletonized the serial module as a device derived from the DUART device defined in mc68681.c (machine\68340.cpp and 68340ser.cpp). Fixed SIM module read register bug and added informative chip select logic LOG messages (machine\68340sim.cpp). Fixed -validate errors and made slight cleanup. Simplified code by making the timer module implementation a device and created two independent instanses, as it should be [Joakim Larsson Edstrom].
- 0.189              : Added implementations for VCO clock synthesizer and Timer module Counters, IRQs and one operational mode [Joakim Larsson Edstrom].
- 0.188              : Added configuration macros and callbacks for 8 bit ports A and B (machine\68340.cpp). Added 8 bit ports A and B, updated LOG system (machine\68340sim.cpp) [Joakim Larsson Edstrom].
- 0.178              : Memberize public non-member function of m68340cpu_device [AJR].
- 0.154              : Should be READ32_MEMBER( m68340_internal_serial_r ), not READ32_HANDLER (machine\68340.h and 68340ser.c) [Miodrag Milanovic].
- 0.150              : Make it a bit more obvious cupidon.c is a video based system, not a screenless fruit machine one [David Haywood].
- 0.149u1            : Changed description to 'MC68340'. Moved cpu\m68000\68340dma.c/h, 68340ser.c/h, 68340sim.c/h and 68340tmu.c/h to emu\machine\. Added machine\68340.c/h. Untangle the skeleton 68340, where the code ends up is TBD. The actual core type of the 68340 is CPU32, so it is now derived from that [David Haywood].
- 0.145u8            : Misc 68340 related progress [David Haywood].
- 0.145u6            : Added 68340dma.c/h, 68340ser.c/h, 68340sim.c/h and 68340tmu.c/h. Added preliminary on-board peripherals to 68340 [David Haywood].
- 0.143u5            : Preliminary support for MC68340 (CPU32). Reorganized to facilitate C++ conversion [David Haywood]. Use 68340 instruction table for 68340, cpXXX instructions are 020/030 only, add CINV, CPUSH stubs for 040 [R. Belmont].
- NOTES: The MC68340 is a high-performance 32-bit integrated processor with direct memory access (DMA), combining an enhanced M68000-compatible processor, 32-bit DMA, and other peripheral subsystems on a single integrated circuit. The MC68340 CPU32 delivers 32-bit CISC processor performance from a lower cost 16-bit memory system. The combination of peripherals offered in the MC68340 can be found in a diverse range of microprocessor-based systems. Systems requiring very high-speed block transfers of data can benefit from the MC68340.
- NOTES: 'MC68340', 'MC68340 DUART Device', 'MC68340 Serial Module' and 'MC68340 Timer Module'
- DRIVERS: astrafr.cpp, bfm_sc4.cpp, bfm_swp.cpp, cupidon.cpp, mpu5.cpp and pluto5.cpp
- SOURCE: machine\68340.cpp, 68340ser.cpp and 68340tmu.cpp


3.9   MC68881

- 0.276              : Fixed fmovem effective address increment bug (m68000\m68kfpu.cpp) [Patrick Mackinlay].
- 0.273              : Support direct FPU moves to A registers, not just indirect (m68000\m68kfpu.cpp) [R. Belmont].
- 0.271              : Added FPU instructions 'FETOX', 'FETOXM1', 'FTWOTOX' and 'FTENTOX' (m68000\m68kfpu.cpp, softfloat3\bochs_ext\f2xm1.c, softfloat3\bochs_ext\softfloat3_ext.h) [kms1212].
- 0.268              : Fixed fmovem reads for mode=2. Note: 'Updated 680x0 FPU to Softfloat' in MAME 0.267 changed the write part, but missed to convert the read part. This fixes booting HP-UX 9 on hp9k_3xx (m68000\m68kfpu.cpp) [Sven Schnelle].
- 0.267              : Updated 680x0 FPU to Softfloat 3 from 2. Fixes Jigsaw Puzzle is glitched out in (MESS) Macintosh LC III (MT5411) and Mac 68881 Emulation returning bad results (MT8793). FREM and FMOD now generate the quotient bits in FPSR, required by Apple's SANE to do sin/cos/tan properly. FMOVE of a float to a Dx integer register generates the exception status bits, fixing square roots in SANE. Rewrote how FMOVEM instructions are decoded and executed, fixing issues including skipping too few or too many opcode bytes and causing serious weird behavior. FPU instructions all now have more realistic cycle timings for a 68881. All FPU instructions now generate exception bits in FPSR. Turn off FPU verbose logging and implemented missing FMOVE #imm32 mode. FPU now sets the NaN flag for all NaNs, not just signalling. Fixes dendego black screen in attract mode (m68000\m68kfpu.cpp) [R. Belmont].
- 0.252              : Added support for fmove.p (d16,An), Dn. Fixes frequent floating point errors running HP-UX 8 on HP9000/370 (m68000\m68kfpu.cpp) [Patrick Mackinlay].
- 0.238              : Bug fix for FMOVEM with empty register list (m68000\m68kfpu.cpp) [Patrick Mackinlay].
- 0.234              : Added 3rdparty\softfloat\fpatan.c. Implemented 68k FPU FATAN instruction (m68000\m68kfpu.cpp), because (MESS) xeyes on Apollo Domain/OS needs it [Calvin Buckley].
- 0.233              : Implemented FGETMAN and FSINCOS (m68000\m68kfpu.cpp). (MESS) Macintosh LC III with Photoshop 3.0 starts & loads pictures now. Fixed missing break statements. Support all FSINCOS encodings and fixed multiple bugs in FMOVEM (m68000\m68kfpu.cpp) [R. Belmont].
- 0.232              : Implemented FMOVEM mode 0b11. Since the two bits seem to have symmetry, it's odd this wasn't there before (m68000\m68kfpu.cpp). Should fix issues with (MESS) Domain/OS and NeXTSTEP emulation [Calvin Buckley]. Support instructions with 80-bit FP immediate values (m68000\m68kfpu.cpp). Fixes 3D Atlas launch on (MESS) Macintosh LC III [R. Belmont, Saph32, jotd666/musashi040]. Backport FPU fixes from upstream Musashi (m68000\m68kfpu.cpp) [R. Belmont, Jean-Francois Fabre].
- 0.227              : Accept addressing mode 6 for FSAVE/FRESTORE (m68000\m68kfpu.cpp) [Sergey Svishchev].
- 0.226              : Changed m68000\m68kfpu.hxx to m68kfpu.cpp. Separated FPU code from header [AJR].
- 0.223              : Eplicitly set rounding mode for FREM opcode (m68000\m68kfpu.hxx) [Patrick Mackinlay].
- 0.222              : Added FMOD instruction (m68000\m68kfpu.hxx) [Patrick Mackinlay].
- 0.210              : Normalized type names to the short versions [O. Galibert].
- 0.205              : Added (d16,An) addr mode to WRITE_EA_FPE() required by NetBSD ps command, which utilizes the FPU (m68000\m68kfpu.hxx) [Sven Schnelle].
- 0.203              : Splitted m68881_ops() into subfunctions [dxl].
- 0.174              : Changed cpu\m68000\m68kfpu.inc to m68kfpu.hxx. INC -> HXX makes editors and code analyzers see it as C++ [Miodrag Milanovic].
- 0.165              : Added M68kFPU mode 7, reg 0 (cpu\m68000\m68kfpu.inc) in advance of the (MESS) ROLM 9751 driver in development [Brandon Munger].
- 0.154              : Added one fpu case (m68000\m68kfpu.inc). Enable rounding mode (m68000\m68kfpu.inc) [O. Galibert].
- 0.153              : Changed cpu\m68000\m68kfpu.c to m68kfpu.inc [Oliver Stoeneberg].
- 0.154              : d68040_fbcc DASM fixes (FBCC is 68040 and 68881, cpu\m68000\m68kdasm.c) [O. Galibert].
- 0.151              : Added FSCALE instruction used by e.g. SimCity 2000 (cpu\m68000\m68kfpu.c) [R. Belmont]. Atari guys seem to have them all timed out. See http://mikro.naprvyraz.sk/docs/Coding/Atari/Maggie/FPU.TXT and http://www.atari-forum.com/viewtopic.php?f=68&t=1646 for table used (cpu\m68000\m68kfpu.c) [Cowering].
- 0.146u4            : Handle higher-value constants in FMOVECR (cpu\m68000\m68kfpu.c). Sync with MESS [R. Belmont].
- 0.145u7            : Added SoftFloat log functions and m68k FLOGNP1, FLOGN, FLOG2, and FLOG10 instructions [Hans Ostermeyer].
- 0.145u1            : Fixed fsave (cpu\m68000\m68kfpu.c) [O. Galibert]. Fixed FSGLMUL/FSGLDIV plus some minor MMU improvements [Hans Ostermeyer].
- 0.145u5            : Allow FPU instructions on '020 (it's possible to have an external 68881/68882) and fix missing break; in the FPU [Hans Ostermeyer].
- 0.143u7            : Activate trace emulation and fix it [O. Galibert].
- 0.143u3            : Added m68k FSIN, FCOS and FTAN using SoftFloat extensions [Stanislav Shwartsman, R. Belmont].
- 0.143u2            : Added bus error input line, fixed FMOVEM and issues with HMMU (cpu\m68000\m68kfpu.c) [R. Belmont].
- 0.141u3            : Added FSGLDIV, FSGLMUL AND FSCC FPU instructions [Hans Ostermeyer].
- 0.141u1            : Added FSAVE mode 2 support to the M68040 FPU [Barry Rodewald].
- 0.140u2            : Many M680x0 FPU and PMMU fixes and enhancements [Hans Ostermeyer].
- 0.139u4            : Added more M68k conditionals and FGETEXP instruction [R. Belmont].
- 0.137u2            : M680x0 FPU updates: BCD packed decimal now supported, including k-factor. Improved FSAVE/FRESTORE including FPU reset when restoring a NULL frame. FREM instruction supported. Better disassembly of FPU instructions [R. Belmont].
- 0.137u1            : 680x0 FPU updates: Rewritten to use SoftFloat instead of unportable native FP math. Support added for Motorola 96-bit extended floats. More addressing modes and conditions supported. Implemented FMOVECR. Added load extended PC relative indexed support. Cleanup some duplicated code [R. Belmont].
- 0.135u1            : MC680x0 update: Reworked PMMU/core interface so PMMU now sees all cop 0 instructions. Improved disassembly of PMMU instructions. Preliminary 68LC040 support. Fixed disassembly for EC/LC variants of '030/'040 [R. Belmont].
- 0.135              : 680x0 update: Support PMOVE modes from PMMU. Allow the FPU to be used for both '030 and '040. Added byte and word FPU loads/stores. Fixed buggy FPU 64-bit stores in the (An) addressing mode [R. Belmont].
- 0.129              : Cleaned up cycle handling in the 68k core (cpu\m68000\m68kfpu.c) [Aaron Giles].
- 0.105u1            : Added cpu\m68000\m68kfpu.c.
- NOTES: Motorola MC68881 floating-point coprocessor
- DRIVERS: (MESS) atarist.cpp, force68k.cpp, hk68v10.cpp, hp9k_3xx.cpp, micro20.cpp, miniforce.cpp, ql.cpp, rtpc.cpp, sun3.cpp and sun3x.cpp
- SOURCE: cpu\m68000\m68kfpu.cpp


3.91  MC68882

- 0.145u5            : Allow FPU instructions on '020 (it's possible to have an external 68881/68882) and fix missing break; in the FPU [Hans Ostermeyer].
- NOTES: Motorola MC68882 floating-point coprocessor
- DRIVERS: (MESS) fccpu30.cpp, hp9k_3xx.cpp, mvme147.cpp and sun3x.cpp
- SOURCE: cpu\m68000\m68kfpu.cpp


3.A   SCC68070

- 0.275              : Limit external memory addresses to 24 bits, fixes (MESS) cdi:zombie and clones and possibly others (m68000\scc68070.cpp) [Devin Acker].
- 0.256              : Don't mess with devcbs in device_start [Vas Crabb].
- 0.249              : Added cpu\m68000\scc68070.cpp/h. Split the header to make future semi-indenpendant implementations sane [O. Galibert].
- 0.242              : 68k: Support for external MMU bus error instruction restart and set fault address in 68010 and 68070 stack frames [J Booth].
- 0.222              : Improved UART Tx/Rx behavior, though it still functions in parallel rather than serial (machine\scc68070.cpp) [Ryan Holtz]. READ/WRITE macros removal [Osso].
- 0.217              : Modernized struct member save registration [AJR].
- 0.214              : Split up internal register block handlers. Added some RESET behavior [AJR].
- 0.212              : Moved Quizard MCU HLE from SCC68070 device to CD-I driver and converted SCC68070 to use logmacro [Ryan Holtz].
- 0.209              : Changed machine\cdi070.cpp/h to machine\scc68070.cpp/h. Merged CPU device with on-chip peripheral emulation. Added internal clock divider. Added a few crude hacks to force status bits in unemulated UART and I2C (machine\scc68070.cpp). Specified a few of the unique aspects of the SCC68070 core (m68000\m68k_in.cpp and m68kcpu.cpp/h) [AJR].
- 0.196              : Changed description to 'Philips SCC68070'.
- 0.153              : Misc cleanups (drivers\cdi.c and machine\cdi070.c/h). Fixed all Quizard games do not boot after initial startup screen and input regression [Osso].
- 0.149u1            : Added 'SCC68070' device (cpu\m68000\m68kcpu.c).
- 0.148u1            : Added 'CDI68070' device (machine\cdi070.c).
- 0.139u4            : Added machine\cdi070.c/h.
- 0.134u2            : Harmony fleshed out SCC68070 definition in m68k core, for CD-i use in MESS.
- 0.132u4            : Angelo Salese added very basic SCC68070 implementation, currently is just a basic m68k with 32-bits of address lines. The plan is to add the on-chip peripherals on the magicard.c driver then, when I get some consistency, hardwire it to the cpu core. Hooked up basic SCC68070 registers in the magicard memory map.
- NOTES: Philips SCC68070
- DRIVERS: cdi.cpp and magicard.cpp
- SOURCE: cpu\m68000\scc68070.cpp and machine\scc68070.h



3.B   DSP56000

- 0.232              : Fixed null pointer bugs in disassembler (dsp56000\dsp56000d.cpp) [AJR].
- 0.216              : Added cpu\dsp56000\dsp56000.cpp/h and dsp56000d.cpp/h. Added new Motorola DSP56000/1 CPUs and disassembler [Patrick Mackinlay].
- NOTES: Motorola DSP56000 and Motorola DSP56001
- DRIVERS: (MESS) ???
- SOURCE: cpu\dsp56000\dsp56000.cpp



3.B1  DSP56156

- 0.277              : Fixed bitwise/logical warning [Patrick Mackinlay].
- 0.276              : Fixed class memory access warnings (was nuking some memory_access::specific helpers) (dsp56156\dsp56156.cpp) [Vas Crabb].
- 0.268              : Fixed prefix header inclusion (dsp56156\inst.cpp) [Vas Crabb].
- 0.253              : Updated string formatting code (cpu\dsp56156\inst.h, opcode.cpp and pmove.h) [Erik Newton]. Removed vestigial (and excessively slow) "new" execution code (cpu\dsp56156\*). Use digit grouping in large integer literals (dsp56156\dsp56ops.hxx) [Vas Crabb].
- 0.250              : Simplify some bits of code using util::sext (dsp56156\dsp56ops.hxx) [AJR].
- 0.245              : Fixed ANDI, BFCLR errata and DEC24 not affecting flags. Fixed or added support for too many opcodes to list. Added proper devcb_write16 for Port C output (cpu\dsp56156) [Ryan Holtz].
- 0.242              : Fixed some GCC warnings (cpu\dsp56156\tables.cpp) [Vas Crabb].
- 0.222              : READ/WRITE macros removal (dsp56156\dsp56156.h and dsp56mem.cpp) [Osso].
- 0.213              : Moved DSP56156 from devices\cpu\dsp56k\ to cpu\dsp56156\. Renamed relevant classes, files and namespaces to indicate that it is a DSP56156 core, not a DSP5600x core [Ryan Holtz].
- 0.193              : Added cpu\dsp56k\dsp56dsm.h.
- 0.186              : Fixed obvious bugs found by GCC 7.1 (cpu\dsp56k\dsp56pcu.cpp) [Miodrag Milanovic].
- 0.180              : Changed the DSP56k disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\dsp56k\dsp56ops.inc to dsp56ops.hxx.
- 0.168              : Fixed Polygonet Commanders with debugger enabled and focused on dsp56k CPU core causes emulation to crash under an unknown condition [Miodrag Milanovic].
- 0.164              : Removed the not required direct update handler for DSP56k [O. Galibert].
- 0.156              : Fixed potential overrun when adding a size_t to a UINT16 (cpu\dsp56k\dsp56ops.inc) [Andrew Gardner].
- 0.155              : Added a pair of save states to the DSP56k core, fixes plygonet regression [Osso]. Modernised DSP56k cpu core [Wilbert Pol].
- 0.154              : Modernized last DIRECT_UPDATE_HANDLER user (cpu\dsp56k\dsp56k.c and memory.h) [Miodrag Milanovic].
- 0.153              : Changed cpu\dsp56k\dsp56ops.c to dsp56ops.inc [Oliver Stoeneberg]. Moved handlers to members in dsp56k [Miodrag Milanovic].
- 0.146u5            : Removed some unnecessary unsigned >= 0 checks (cpu\dsp56k\dsp56k.c) [Oliver Stoeneberg].
- 0.140              : Aaron Giles fixed custom mapping for DSP56k internal memory.
- 0.139u1            : Added cpu\dsp56k\dsp56mem.h, dsp56pcu.h, inst.c/h, opcode.c/h, pmove.c/h and tables.c/h. The DSP561xx CPU core now generates accurate disassembly for Konami Polygonet hardware (verified against Motorola's reference disassembler) [Andrew Gardner, Stiletto]. Hooked up new execution engine in DSP56k [Andrew Gardner]. Removed globals from DSP56k CPU core and updates Polygonet driver to use driver_data class [Atari Ace].
- 0.135u1            : Andrew Gardner added save state support to Polygonet driver and the DSP56156 CPU core.
- 0.135              : Changes to the DSP56156 cpu core [Andrew Gardner]: Added JF table decode function. Added ABS, IMAC, and TFR2 opcodes. Fixed various flags for TST, INC24, SUB, CMP, and CMPM. Added hack to DO function to accommodate for the CPU core's inaccurate math.
- 0.134u4            : Andrew Gardner fixed DSP56156 DO & BSCC opcode bugs.
-  6th October   2009: Andrew Gardner - Polygonz attack! The other day i figured out one of the things I was doing wrong with the dsp56156 CPU core. Adding a little logic allowed Polygonet Commanders to go "in-game." Arbee and Haze hooked up the ROZ layer, giving us a dandy little sky. Of course there isn't any 3d since that isn't emulated yet, but that's the part of MAME that i like doing. To that end, I captured a bunch of the data that the 68020 was sending across to the DSP56k. Here is the first round of polygonal uploads from the main CPU to the sub CPU.
- 0.134u2            : Hacked in the DSP56156's "Long Interrupts". Added SUB opcode. Polygonet Commanders now goes in-game! [Andrew Gardner].
- 0.134u1            : Andrew Gardner fixed various issues with the DSP56156 disassembler.
- 0.128u7            : Continued rewrite of the Motorola DSP56k CPU core [Andrew Gardner]: Fixed flag calculation and sign extension for numerous ops. Added rnd, mpysuuu and dmac ops. Fixed do loop behavior to skip empty loops. Added stack underflow exception handling. Fixed update_handler for the DSP56k and Polygonet.
- 0.128u6            : Pointer-ified the dsp56k core [Quench].
- 0.128u3            : Continued rewrite of the Motorola DSP56k CPU core [Andrew Gardner, PhilB, RBelmont]: Added proper clock speed to plygonet.c and internal divider to dsp56k.c. Fixed up disassembler add/sub, 05xx and bsr ops. Handle mysterious uuuuF instruction found in plygonet add op. Partially implemented add, sub, mac, mpy, inc, cmpm, macr, asr16, jscc, lea and movec ops. Added dual X memory read and data move with short displacement parallel moves.
- 0.128u2            : Rewrite of the Motorola DSP56k CPU core [Andrew Gardner]: Partially implemented inc24, asl4, bcc, brkcc and doForever ops. Added code for parallel address register update. Partially implemented tfr op. Polygonet now allows test mode to be run for a few seconds. Most IO is now known, though coin2 is still a mystery. Partially implemented move, asr4 and mpy ops.
- 0.128u1            : Rewrite of the Motorola DSP56k CPU core [Andrew Gardner]: Complete rewrite focusing on legibility and extensibility. 27/121 opcodes (mostly) implemented. Bugfix for reset status of interrupt priority bits. Bugfix for disassembly of register-to-register parallel data move. Added additional branch, move and bitfield ops. Polygonet Commanders now passes its memory test and uploads a new program. Implemented tst, or, jsr, rti, tst2, and 2 new movec ops. Added opbase handler to Plygonet driver.
- 0.127u6            : Andrew Gardner added additional Motorola DSP56k reset behavior.
- 0.127u5            : Rewrite of the Motorola DSP56k disassembler [Andrew Gardner]: Removes arbitrary opcode groupings in favor of flat decode model. Fixes a number of small issues with unknown opcodes. Added the final ALU parallel move ops. Fixes branch relative offset decoding.
- 0.126u4            : Andrew Gardner improved DSP56k CPU interrupt handling. Polygonet Commanders now advances past its first DSP handshake.
- 0.126u3            : Added cpu\dsp56k\dsp56pcu.c, dsp56mem.c and dsp56def.h. DSP56156 CPU Core updates [Andrew Gardner]: Rewrote core logic, communications and interfaces. Added three parallel memory moves to the disassembler. Initial interrupt logic in place.
- 0.126u2            : DSP56156 Disassembler rewrite [Andrew Gardner]: Rearranged decoding behavior. Updated code style to MAME standards. Tested each single-word opcode with custom ROMs.
- 0.110u5            : Improvements to the Polygonet Commanders driver [Andrew Gardner]: Implemented various dsp56k opcodes. Polygonet Commanders now gets past the memory tests.
- 27th November  2006: Andrew Gardner - As far as the network error (in the network) goes, it should be fairly straightforward to fix up - there remain a hearty hunk of writes that aren't going anywhere, and who knows, maybe I can convince Arbee to take another look at this'shizzle after i touch up a few more unimplemented dsp56k opcodes...
- 0.110u1            : Polygonet Commanders update [Andrew Gardner]: Added more accurate host interface to dsp56k core. Removed a bunch of hacks in plygonet.c.
- 0.106u6            : Improvements to Polygonet Commanders [R. Belmont]: Fixed Z80 IRQ/NMIs to go to the right CPU again, modernized memory map and added network status bit, so the initial test passes well enough to make the DSP56k crash on unimplemented opcodes.
- 11th June      2006: R. Belmont - Polygonet Commanders now passes POST again and now hits unimplemented opcodes in the 56156 DSP. Over to you, Andrew.
- 0.106u1            : Some improvements to the Polygonet Commanders driver [Andrew Gardner]: Adds change_PC() calls to the dsp56k core, removed hacky dsp56k initialization, enabling and disabling, added preliminary implementation of banking hardware tied to the dsp56k in Polygonet Commanders.
- 0.104u5            : Some small improvements to the Polygonet Commanders driver [Andrew Gardner]. Added DSP56156 (10MHz) CPU2 and K054539 sound.
- 0.99u6             : Renamed (dsp56kdasm.c) to (dsp56dsm.c) and (dsp56kops.c) to (dsp56ops.c).
- 0.99u3             : Added cpu\dsp56k\dsp56k.c/h, dsp56kops.c and dsp56kdasm.c. Andrew Gardner added DSP56k CPU core and hooked it up to the Polygonet Commanders driver.
- 15th July      2005: Andrew Gardner - The Motorola (now Freescale Semiconductor - Motorola owned them at the time) DSP56k series of processor is a strange beast in many ways... Nothing too crazy - variable length opcodes, strange decoding criteria, a few addressing modes, but honestly nothing to offer too much opposition for the would-be conqueror... To save you the trouble of guessing why I'd be writing a CPU core for such a thing (and why I'd mention R. Belmont and his infinite benevolence), here's the system16 link to the arcade games that use it : http://www.system16.com/konami/hrdw_polygonet.html (Konami's Polygonet Hardware). Polygonet Commanders is currently in MAME as a non-working driver and Belmont's got the sound hooked up and some hacks to get the thing to pass its memory tests. Then it stops ticking... I haven't looked at why it stops working yet, but I'm guessing it has something to do with the giant hole where a DSP56156 CPU core should be! Anyways, to my knowledge, the other game on the hardware, Poly-Net Warriors, has not been dumped (I'd be impressed if someone out there has even seen it in person), so it looks like it's just me and Polygonet. If anyone knows of any other interesting things that use a DSP56156 (so I can bug-squish the core some more) - feel free to mail me - I'll pass your knowledge on via this page and hopefully enhance the core using it... But here's the news : last night I finally managed to make the first real strides towards a truly working DSP56156 core in MAME. I removed a single memory-test hack Belmont put into the polygonet driver. Basically, the 68000 used to send a message to a nonexistent DSP56156. This message went nowhere, but Arbee knew the message was going to result in the DSP56156 filling a portion of memory with some simple values, and instead filled the proper piece of memory (using hard-coded C) with data the 68000 was expecting. Now, when the 68000 sends that message, it gets received (via a communications hack I put in :P) by the DSP56k core and it whirrs up, runs a few dozen opcodes, and fills the memory with the proper information! Now this may not seem all that interesting, and I can't show cool screen shots to back up the work, but rest assured, I'm totally stoked over the fact that my DSP56156 is running in tandem with a 68000, and they're actually getting along :)... Next on the todo list is to get the second memory test un-hacked. This is going to be a lot trickier though, as I'm going to need to do some arithmetic on the chip, and it seems to have a somewhat strange way of handling math in its 40-bit accumulator buffers.
- PCB: Motorola DSP56156FE40 or XC56156 DSP; Polygonet Commanders (Konami 1993)
- DRIVERS: plygonet.cpp
- SOURCE: cpu\dsp56156\dsp56156.cpp



3.B2  DSP56362/64

- 0.284              : Added virtual\dsp563xx.ipp, virtual\dsp563xx.lst, virtual\utdsp563xx.cpp and virtual\utdsp563xx.py. Added unit tests (virtual driver utdsp563xx). Correct a couple of dsp563xx instructions and added the opcode to the display [O. Galibert]. Fixed regression in determining operating mode (cpu\dsp563xx\dsp563xx.cpp) [AJR].
- 0.283              : Added dsp563xx\dsp56303.cpp/h, dsp563xx\dsp56311.cpp/h, dsp563xx\dsp56362.cpp/h, dsp563xx\dsp56364.cpp/h, dsp563xx\dsp563xx-make.py, dsp563xx\dsp563xx.cpp/h, dsp563xx\dsp563xx.lst, dsp563xx\dsp563xxd-tables.cpp, dsp563xx\dsp563xxd.cpp/h and dsp563xx\shi.cpp/h. New dsp563xx cpu core (start of disassembler) [O. Galibert]. Added dsp56362 and dsp56364 device stub for SHI. Implemented bset #n,r instruction for dsp563xx. Try not to crash when disassembling invalid data (dsp563xx\dsp563xxd.cpp) [AJR]. Added DSP56362 to the audio processing unit in xbox_pci.cpp as the general purpose DSP (shared\xbox_pci.cpp) [yz70s].
- NOTES: Motorola DSP56362
- DRIVERS: chihiro.cpp
- SOURCE: dsp563xx\dsp56303.cpp



3.C   ColdFire and MCF5206E

- 0.283              : Removed machine\mcf5206e.cpp/h. Added basic state viewer for Coldfire. Make MCF5206E CPU accept external interrupts, fixes CPU space (misc\gamtor.cpp cares). Provide MBAR relocation and GPIO reads, fixes Funcube 2/3/4/5 battery regression. Disallow do not use commands for monomach to send 0xaa thru the transmitter. Fixed MBUS and DMA irq routing (m68000\mcf5206e.cpp) [Angelo Salese].
- 0.279              : Added 'MCF5206e UART' device (machine\mc68681.cpp).
- 0.249              : Added cpu\m68000\mcf5206e.cpp/h. Split the header to make future semi-indenpendant implementations sane [O. Galibert].
- 0.234              : Removed some tag lookups [Miodrag Milanovic].
- 0.196              : Changed description to 'Freescale MCF5206E'.
- 0.148u5            : Coax the code into doing a little more (machine\mcf5206e.c/h). Silence some excessive logging. Slightly more realistic handling. Improved logging details [David Haywood].
- 0.148u4            : Added machine\mcf5206e.c/h. Added 'MCF5206E' and 'MCF5206E Peripheral' device.
- 0.143u7            : Preliminary support for m68k ColdFire family and MCF5206E [R. Belmont]. Replaced 68040 CPU1 with MCF5206E in Funcube 2, 3 and 4.
- DRIVERS: bfm_ad5sw.cpp, bfm_sc5sw.cpp, gamtor.cpp, jpmsys7.cpp and seta2.cpp
- SOURCE: cpu\m68000\mcf5206e.cpp



3.D   CPU16

- 0.259              : Use util::sext to sign-extend 4-bit constants (m68hc16\cpu16dasm.cpp). Added most of the MAC unit instructions (m68hc16\cpu16.cpp) [AJR].
- 0.247              : Fixed MSVC compile (m68hc16\cpu16.h) [Peter Ferrie].
- 0.245              : Updated CPU16 core. Reduced code duplication by making most loads subroutines in the state machine. Added ASLW, ASRW, LSRW, ROLW and RORW instructions to emulation. Fixed overflow flag for 16-bit shifts. Minor disassembly formatting fix for branch destinations (m68hc16\cpu16dasm.cpp) [AJR].
- 0.244              : CPU16 Disassembly fixes: Correct mnemonics for TMXED and immediate-mode SBCE. Correct addressing modes for LDHI and certain forms of BCLR and BSET. Added note about possible alternate mnemonics (m68hc16\cpu16dasm.cpp). Added preliminary execution core. Fixed shift in get_xk [AJR].
- 0.239              : Added cpu\m68hc16\cpu16.cpp/h. Added Motorola MC68HC16Z1/CPU16. Note: Currently this device is just a stub with no actual execution core [AJR].
- 0.232              : Added cpu\m68hc16\cpu16dasm.cpp/h. Added CPU16 disassembler (tools\unidasm.cpp) [AJR].
- DRIVERS: ???
- SOURCE: cpu\m68hc16\cpu16.cpp


3.D1  MC68HC16Z

- 0.245              : Added cpu\m68hc16\m68hc16z.cpp/h. Added 'Motorola MC68HC16Z1 device'. Separated source file for MCU and added numerous logging stubs [AJR].
- NOTES: Motorola M68HC16Z series modular microcontrollers: Most microcontrollers in this series include the following modules: Central Processing Unit (CPU16), System Integration Module (SIM), Standby RAM (SRAM), Analog-to-Digital Converter (ADC), Queued Serial Module (QSM) and General-Purpose Timer (GPT). MC68HC11Z4/MC68CK11Z4 uses special low-power versions of the CPU and SIM, and replaces the QSM with a simpler SCI/SPI combination (MCCI). SRAM size is 1, 2 or 4 KB, depending on the model. 8 KB of mask ROM is also provided on MC68HC11Z2 and MC68HC11Z3. Package types are 132-pin PFQP and 144-pin TQFP.
- DRIVERS: (MESS) bus\nscsi\cfp1080s.cpp
- SOURCE: cpu\m68hc16\cpu16.cpp




4.    Signetics

4.1   S2650

- 0.273              : Removed s2650\s2650cpu.h. Moved s2650cpu.h contents to s2650.cpp. Fixed issue with add/sub half carry flag. Small cleanup. Added logerror for illegal opcodes. Correct subtract overflow flag and interrupt cycles [hap]. Use util::sext rather than goofy lookup table [Vas Crabb].
- 0.242              : Fixed errors in the z80-format disassembler [Robbbert].
- 0.227              : Modernized S2650 interrupts in galaxold.cpp and scramble.cpp [AJR].
- 0.221              : Get the vector from the IRQ ack request, removed use of set_input_line_and_vector and HOLD_MODE [O. Galibert]. Fixed interrupt-related regressions in 2650-based games [AJR].
- 0.218              : Changed description to 'Signetics 2650'. Changed S2650 to big-endian [AJR].
- 0.194              : Use paged mode for disassembler (cpu\s2650\2650dasm.cpp) [AJR].
- 0.193              : Added cpu\s2650\2650dasm.h.
- 0.187              : I/O modernization. Replaced fake S2650_SENSE_PORT address with line read callback (set_input_line should also work). There are still some doubts regarding whether VBLANK should be inverted in various drivers. Replaced fake S2650_CTRL_PORT and S2650_DATA_PORT addresses with... well, these aren't dedicated parallel ports, so they actually haven't gone away. They have, however, been moved to a new 1-bit address space, since the ports share the main data bus and are distinguished from each other by an address line. Allow program counter to be properly tracked by debugger. A few small status register-related refinements [AJR].
- 0.180              : Changed the S2650 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.176              : Removed irq_line methods from S2600 and replace uses with DEVCB_INPUTLINE [AJR].
- 0.169              : Expose INTACK signal [Vas Crabb].
- 0.154              : Fixed usage of uninitialized members in s2650_device [Oliver Stoeneberg].
- 0.153              : Added write_sense to S2650 CPU and use it for Hunchback (Galaxian hardware) and (MESS) PIPBUG serial port. Replaced calls to set_input_line(1,...) in lazercmd.c and meadows.c. Replaced FLAG fake IO port with a DEVCB2 callback. Fixed placement of some MCFG_S2650_FLAG_HANDLER entries (drivers\dkong.c and zac_1/2.c) [smf]. Fixed recent S2650 regression in Galaxia driver [hap].
- 0.151              : Wilbert Pol fixed problem with S2650 uninitialized member in debug builds.
- 0.150              : Modernized S2650 cpu core [Wilbert Pol].
- 0.148u4            : Robbbert fixed a few S2650 disassemblies.
- 0.138              : S2650_SENSE_PORT is now active when data written is != 0 and inactive when data == 0. It now acts as a line in a MAME-sense [Couriersud].
- 0.134u1            : S2650 improvements [Couriersud]: Added S2650_FO_PORT fake port for flag output line. Made CHECK_IRQ_LINE an inline. Verified irq handling (with help from Quench).
- 0.128u4            : Pointer-"ified" the S2650 core [Couriersud].
- 0.122u5            : Zsolt Vasvari fixed 2650 disassembly of the sense and flag bits. Fixed incorrect argument order in OUT instruction. Correct spacing.
- 0.122u4            : Zsolt Vasvari fixed S2650 register window display.
- 0.109u5            : Aaron Giles converted the s2650 disassemblers to the new format and added step in/out support where it was obvious.
- 0.107u4            : Aaron Giles fixed overflow computation in the S2650 core.
- 0.107u1            : Minuous fixed a S2650 register overflow bug.
- 0.101u2            : Aaron Giles added save state support to the S2650 CPU.
- 0.98u3             : Improvements to the S2650 core [Manfred Schneider]: Fixed LPSU opcode. Changed cycle counts to match technical documentation.
- 0.89u6             : Juergen Buchmueller updated S2650 CPU core to count more accurate clock cycle counts.
- 10th June      2002: Aaron Giles fixed the clock speeds in some games that use the S2650 CPU.
- 31st May       2000: Mike Coates fixed the Zaccaria 2650 games to work with MAME 0.37b3.
-  5th May       2000: Mike Coates fixed some S2650 core bugs.
- 19th August    1999: Mike Coates fixed a bug in S2650 which made Hunchback miscalculate things, and sent in a driver for Hunchback running on Donkey Kong hardware.
- 0.33b6             : Added s2650\s2650.c/h, s2650cpu.h and 2650dasm.c. Signetics 2650 emulator [Juergen Buchmueller].
- GAMES: Lazer Command (Meadows Games 1976), Meadows Lanes (Meadows Games 1977), The Invaders and Super Invader Attack (Zaccaria/Zelco 197?), Dead Eye (Meadows 1978), Gypsy Juggler (Meadows 1978), Hunchback (Century 1983), Herbie at the Olympics (CVS 1984)
- PCB: 2650A (Shootgal), 2650 (Porky), MAB2650A CRG3243MOY (Hunchback)
- DRIVERS: bingo.cpp, centiped.cpp, cvs.cpp, dkong.cpp, embargo.cpp, galaxia.cpp, galaxian.cpp, galaxold.cpp, laserbat.cpp, lazercmd.cpp, malzak.cpp, meadows.cpp, pacman.cpp, quasar.cpp, quizshow.cpp, scramble.cpp, seabattl.cpp, zac_1.cpp, zac_2.cpp and zac2650.cpp
- SOURCE: cpu\s2650\s2650.cpp



5.    Cinematronics CPU

- 0.250              : Simplified code for right-shifting 12-bit values arithmetically [AJR].
- 0.243              : Fixed mistake in return statement (flagged by some versions of Clang, ccpu\ccpudasm.cpp) [AJR].
- 0.221              : Simplified some handlers [Osso].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.193              : Added cpu\ccpu\ccpudasm.h.
- 0.180              : Changed the CCPU disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.170              : Latching of external_input makes "state_string_export() const" to work by Juergen [Miodrag Milanovic].
- 0.149u1            : Changed description to 'Cinematronics CPU'. Modernized CCPU cpu core [Wilbert Pol].
- 0.128u5            : Pointer-ified the CCPU core [Aaron Giles].
- 0.123u4            : Aaron Giles fixed CCPU and QB-3 to no longer rely on cpu_scalebyfcount(). Fixed busted timing in the CCPU core. Changed watchdog to count internally rather than using external watchdog support. Altered CCPU to accept interrupt signals from the driver. Updated clocks in the cinemat driver to be derived from the clock crystal.
- 0.109u5            : Aaron Giles converted the CCPU disassemblers to the new format and added step in/out support where it was obvious.
- 0.87u3             : Removed cpu\ccpu\ccputabl.c.
- 11th October   2004: Aaron Giles - I started looking into adding QB-3 to the Cinematronics vector game driver when I realized that I was going to have to make changes to the CCPU core to actually get the game up and running.
- 0.78u4             : CPUs with an implicit address shift (e.g., the TMS34010 shifts addresses right 3 bits; the TMS32031 shifts addresses left 2 bits) now automatically get that shift applied to addresses in their memory maps and in calls to install_memory_read/write_handler(). This eliminates many ugly macros in the memory maps. Affected CPU cores are the ADSP210x, CCPU, PIC16C5x, TMS3201x, TMS3202x, TMS32031, and TMS340x0. Note that the CPU cores themselves still need to pass shifted values to the core read/write routines. All drivers using these cores have had their icky macros and bitshifts removed. * Harvard architecture CPUs now have data memory fully implemented now. Affected CPUs are the ADSP210x, TMS3201x, TMS3202x, PIC16C5x, and CCPU. All cores have been modified to fully split program and data memory. All drivers using these cores now specify explicit program and data memory maps. This also gets rid of a ton of ugly macros used in memory maps [Aaron Giles].
- 0.37b9             : The CCPU core is now a full 16-bit core. Appropriate changes to the drivers that use them have already been made. This fixes the input ports on the Cinematronics games [Aaron Giles].
-  6th September 2000: Brad Oliver fixed a small bug in the CCPU core.
- 0.35b10            : Removed cpu\ccpu\cinedbg.c.
- 0.35b9             : Removed cpu\ccpu\ccpu.new.
- 0.35b8             : Changed description to 'CCPU'. Added cpu\ccpu\ccpu.new.
- 0.35b6             : Added cpu\ccpu\ccpu.c/h, ccputabl.c, ccpudasm.c and cinedbg.c.
- NOTES: The CCPU code comes from the Retrocade emulator (1998).
- DRIVERS: cinemat.cpp
- SOURCE: cpu\ccpu\ccpu.cpp




6.    Intel

6.1   8080

- 0.250              : Removed cputype enum and possible time travel issue (i8085\i8085.cpp) [hap].
- 0.152              : Changed description to '8080'. Get rid of family name in description string [hap].
- 0.150              : Changed description to 'MCS-80 8080'. Modernized 8080 cpu core [Wilbert Pol].
- 0.137u2            : Robbbert fixed 8080/8085 CPU debugger register setting (when setting A register in 8080 CPU, it sets F register).
- 0.128u7            : Aaron Giles rewrote 8080/8085 interrupt handling so that it makes sense. Changed callbacks to be specified in a config structure. Converted core to cpu_state_table. Changed to a single HAS_808X define for both cores. Fixed several drivers that used 8080/8085 interrupts in odd ways.
- 0.128u6            : Miodrag Milanovic fixed EI handling in the 8080/85 core to have a shadow like the Z80.
- 0.128u5            : Miodrag Milanovic fixed 8080 interrupt handling: 1. Previous implementation cleared interrupt enable bit on interrupt trigger which is wrong since interrupts should stay enabled. 2. Service interrupt number was not cleared after interrupt is executed, so if same one is triggered it will not be catched.
- 0.127u5            : Miodrag Milanovic fixed all drivers using a 8080 CPU: 8080 core has problem with score/credit counts and other variables.
- 0.127u3            : 8080/8085 CPU core updates [Miodrag Milanovic]: ANA/ANI instruction, HF flag was not set right because error in calculation of it (missing brackets). 8080 have NF flag always set (it is not used flag but bit is always set). Added support for status output lines.
- 0.104u5            : Fixed incorrect flags emulation in the 8080 CMA instruction [Kopromaster].
- 0.72u2             : Changed description to '8080'. Included 8080 core updates from MESS.
- 0.62               : Changed description to 'I8080'.
- 21st July      2002: Krzysztof Strzecha fixed some problems in the I8080 CPU core.
- 17th June      2000: Juergen Buchmueller fixed the cycle counts in 8080/8085A CPU cores.
- 0.35b8             : Changed description to '8080'.
- GAMES: Midway - Gun Fight (1975), Sea Wolf (1976), Laguna Racer (1977), Space Invaders (1978)
- PCB: 8080 (Ace, Ballbomb, Berzerk, Invaders)
- SOURCE: cpu\i8085\i8085.cpp


6.11  8080A

- 0.250              : Removed cputype enum and possible time travel issue (i8085\i8085.cpp) [hap].
- 0.152              : Changed description to '8080A'. Get rid of family name in description string [hap].
- 0.150              : Changed description to 'MCS-80 8080A'. Modernized 8080 cpu core [Wilbert Pol].
- 0.141u3            : hap fixed suspiciously high CPU speed in Safari Rally. Replaced 8085A CPU1 with 8080A (1.5MHz).
- 0.133u4            : Curt Coder added 8080A variant.
- PCB: 8080A (Polaris, Sheriff, Stactics), Mitsubushi M5L8080AP (Dynadice), National Semiconductor 822-INS8080AD-C8080A (Invaders), P8080A (Ozmawars)
- SOURCE: cpu\i8085\i8085.cpp



6.2   8085A

- 0.277              : Rewrote the enhanced no documented i8085 RDEL & DSUB instructions and their own flags [Roberto Fresca]. Small cleanup. Optimized set_status by checking if devcb is unset [hap].
- 0.274              : Correct some variable types (i8085\i8085.cpp) [hap].
- 0.258              : Correct rim/sim cycles and renamed some undocumented opcodes, arhl is arithmetic shift (i8085\8085dasm.cpp) [hap]. Correct cycles for XCHG as well (i8085\i8085.cpp) [federico].
- 0.252              : Fixed problem with DAA opcode (i8085\i8085.cpp) [hap].
- 0.250              : Removed cputype enum and possible time travel issue (i8085\i8085.cpp) [hap].
- 0.227              : Fixed sta/lda instruction name (i8085\8085dasm.cpp) [smf]. Make sure SOD outputs 0 upon the first reset [AJR].
- 0.222              : Stop in debugger after an interrupt is taken, not immediately before. Interrupt updates: Eliminated special-casing and three-in-one loading of CALL (and JMP) vectors in favor of fetching each byte in succession like a normal instruction. Added INTA callback, called only when INTR (and not any other interrupt) is acknowledged. Enforce that TRAP (NMI) must be held at a high level until acknowledgment [AJR]. Removed leftover logerror() [Frank Palazzolo].
- 0.194              : Clean up state registration. SOD and SID are 8085-specific. STATUS and INTE are 8080-only outputs. Added IM register for 8085 [AJR].
- 0.193              : Added cpu\i8085\8085dasm.h. Spacing (8085dasm.cpp) [hap].
- 0.192              : Removed cpu\i8085\i8085cpu.h. Code readability (just whitespace/comments cleanup here). Moved opcode macros to main file, will convert these to functions. Moved single-use opcodes to execute function. Lowercase/Renamed some functions. Make cputype an enum, change flags and stuff to constexpr. Shorthand variable types. Changed opcode macros to functions. Cleanup [hap]. Added opcode space [AJR].
- 0.191              : Correct a few opcode names (cpu\i8085\8085dasm.cpp) [AJR].
- 0.180              : Changed the i8085 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.177              : Fixed i8080 status callbacks during push/pop (i8085\i8085cpu.h) [MetalliC].
- 0.168              : Use statusflag macro (IM_SID) [hap].
- 0.162              : Whitespace cleanup (i8085\i8085cpu.h) [hap].
- 0.152              : Changed description to '8085A'. Get rid of family name in description string [hap].
- 0.150              : Changed description to 'MCS-85 8085A'. Modernized 8085 cpu core. Removed unneeded commented members in i8085\i8085.h. Fixed i8085a initialization [Wilbert Pol]. Disabled unused private members in i8085\i8085.h [Oliver Stoeneberg].
- 0.147u2            : Fixed H flag on DCR and DAD. Fixed 8080 unused flags. 8080/8085 CPU Exerciser results now: 8080: fail: aluop ones, rest is OK and 8085: fail: aluop ones and DAA, rest is OK (cpu\i8085\i8085cpu.h). Fixed H flag on SUB/SBB/CMP [hap].
- 0.140u3            : Robbbert fixed i8085 CPU loading of reg A from debugger 'do' command.
- 0.137u2            : Robbbert fixed 8080/8085 CPU debugger register setting (when setting A register in 8080 CPU, it sets F register).
- 0.134u1            : i8085 [Curt Coder]: RIM instruction now shows the current status of RST5.5 and RST6.5 pins.
- 0.133u4            : Intel 8085 [Curt Coder]: Refactored callbacks to use DEVCB.
- 0.133u3            : 8085 changes [hap]: Fixed cycle deduction on unconditional CALL / RET, it took about half too many cycles. Added cycle tables and cleaned up source layout. This was done very carefully, it should be errorfree. Removed HLT cycle eating (earlier, HLT after EI could theoretically fail). Fixed parity flag on add/sub/cmp. Bug was caused by Z80 overflow detection accidentally left in. Renamed temp register XX to official name WZ. Renamed flags from Z80 style S Z Y H X V N C  to  S Z X5 H X3 P V C and fixed X5 / V flags where accidentally broken due to flag names confusion.
- 0.133u2            : Removed cpu\i8085\i8085daa.h. hap removed DAA tables from the 8085 and Z180 implementations in favor of just computing the values. Also fixed code in 8085 to prevent accidental multiple reads due to macro overuse.
- 0.131u1            : MooglyGuy fixed display of the i8085's SP register when in the debugger.
- 0.131              : Aaron Giles fixed XF flag in the 8085A core.
- 0.128u7            : Aaron Giles rewrote 8080/8085 interrupt handling so that it makes sense. Changed callbacks to be specified in a config structure. Converted core to cpu_state_table. Changed to a single HAS_808X define for both cores. Fixed several drivers that used 8080/8085 interrupts in odd ways. Aaron Giles added the concept of a cpu_state_table, which is supplied by the CPU cores and which describes all the register state accessible to the debugger and other subsystems. The format of the table is such that most data can be simply fetched from memory without the further involvement of the CPU core, including the display of common formats. Extensibility points are available for custom display and for importing/exporting the data to intermediate variables for more complicated scenarios. Updated the 8085 core to use this.
- 0.128u6            : Curt Coder added INTE and state word callbacks to i8085. Pointer-ified the i8085 CPU core [Aaron Giles]. Miodrag Milanovic fixed EI handling in the 8080/85 core to have a shadow like the Z80.
- 0.127u3            : 8080/8085 CPU core updates [Miodrag Milanovic]: ANA/ANI instruction, HF flag was not set right because error in calculation of it (missing brackets). 8080 have NF flag always set (it is not used flag but bit is always set). Added support for status output lines.
- 0.125u5            : Miodrag Milanovic improved 8085 timing and fixed flag calculations based on differences between it and the 8080.
- 0.123u4            : Nicola Salmoria fixed 8085 RST75 not working with PULSE_LINE. According to datasheet, RST7.5 is latched on rising edge, while the other maskable interrupts are sampled.
- 0.122u7            : i8085.c updates [Couriersud]: 8085 has an internal clock divider by 2. Changed i8085.c to reflect this for I8085. I8080 still at 1. Changed driver clocks to reflect internal clock divider. Added some FIXME: Comments where clocks for I8085 are outside specs. Zsolt Vasvari fixed saving I8085 callbacks across a reset. Added 'pull' callback for the SID pin. This is needed by the Red Alert voice board.
- 0.115u3            : John Allentown fixed bug in INR/DCR opcodes in 8085 CPU core.
- 0.111u6            : Zsolt Vasvari removed archaic i8080_EXACT flag from the 8085 core.
- 0.111u2            : Tomasz Slanina fixed SIM opcode in i8085 emulator.
- 0.109u5            : Aaron Giles converted the i8085 disassemblers to the new format and added step in/out support where it was obvious.
- 23rd September 2003: Nathan Woods forwarded a fix from MESS to the CMPSW instruction in the i86 CPU core.
-  5th September 2003: Krzysztof Strzecha add INR r, DCR r, ADD r, SUB r and CMP r. Instructions should affect parity flag. Fixed only for non x86 asm version (#define i8080_EXACT 1).
- 0.72u2             : Changed description to '8085A'. Included 8080 core updates from MESS.
- 19th August    2003: Tomasz Slanina re-submitted some old i8085 CPU core bugfixes done originally by Krzysztof Strzecha.
- 0.62               : Changed description to 'I8085A'.
-  5th March     2002: Juergen Buchmueller added the undocumented opcodes to the 8085a CPU core.
- 23rd June      2002: Acho A. Tang submitted an update to the i8085 core, fixing the interrupt system.
- 15th April     2001: Zsolt Vasvari fixed an i8085 CPU core bug which affected Meteoroids title screen.
- 17th June      2000: Juergen Buchmueller fixed the cycle counts in 8080/8085A CPU cores.
- 0.33b4             : Added i8085\i8085.c/h, i8085cpu.h, i8085daa.h and 8085dasm.c. I8085 emulator [Juergen Buchmueller].
- GAMES: Phoenix (Amstar 1980), Meteoroids (Venture Line 1981), Red Alert (Irem 1981)
- PCB: D8085A (Triv Quiz), NEC D8085AHC (Paranoia), M5L8085AP (Bullfgtr, Dwarfd), AM8085APC (Phoenix)
- DRIVERS: bingo.cpp, dwarfd.cpp, equites.cpp, kopunch.cpp, m14.cpp, paranoia.cpp, phoenix.cpp, rcorsair.cpp, redalert.cpp, rotaryf.cpp, sbugger.cpp, spcforce.cpp, statriv2.cpp, tourvis.cpp and unkhorse.cpp
- SOURCE: cpu\i8085\i8085.cpp



6.3   8086

- 0.284              : Effective address calculatation time varies greatly from one (GitHub #14632). CPU variant to the next. On the 286, it's effectively free, unless two additions are required, in which case it takes 1 cycle. On the 8088/8086 on the other hand, it can take up to 12 cycles. There needs to be a different set of timings for each CPU variant. I tested on a 286 system (att6300p) with https://thandor.net/benchmark/36 and the score went from 29 to 46 - almost a 60% speedup! Also added a few minor cycle count fixes (i86\i86.cpp) [donohoe00].
- 0.282              : Avoid clearing working registers upon device reset (i86\i86.cpp). Note: This change is required in order for BIOS for the AT&T 6300 Plus to work. The 6300 Plus has external logic to reset the 80286 via the reset pin, so that it can return to Real Mode from protected mode. Upon return to Real Mode, the BIOS code is clearly depending on the fact that SP register is preserved upon reset (the BIOS does however explicitly load the SS register after reset, before it is used). The 8086 and 80286 documentation call out which registers are to be initialized upon reset, and SS is one of them. For AX, BX, CX, DX, BP, SP, SI and DI, the behaviour is not specified. However, based on what the 6300 Plus BIOS is doing, it appears the actual hardware behaviour is to leave them untouched. Although we can only be fully confident that the real 286 behaves this way with respect to the SP register, it's likely that the other registers which do not have explicitly defined initialization behavior are also not touched during reset. Note that this observed behaviour only pertains to reset via the reset pin, and not to power-on initialization [donohoe00].
- 0.280              : Correction to idiv overflow (i86\i86.cpp) [hap].
- 0.274              : Don't clear physical irq pins state at reset (i86\i86.cpp) [hap].
- 0.269              : Make "out dx,al" output masked AX on data bus (i86\i86.cpp) [Lubomir Rintel].
- 0.241              : Wrap at end of segment not at 64k boundary (i86\i86inline.h). Fixes (MESS) VIS (Video Information System MD-2500) audio popping [Carl].
- 0.223              : Fixed old regression with Intel 8086 NEG opcode flags, fixes mysterious deaths in Krull cave scene [dink/fbneo].
- 0.222              : Don't automatically clear IRQ state upon acknowledgment. Added byte registers to debugger state and improved tracking of previous PC for debugger (i86\i86.cpp). Added exception hook for debugger gex command. Updated m_prev_ip (and therefore CURPC) after taking interrupt [AJR]. Fixed old regression with NEG opcode flags [dink/fbneo].
- 0.216              : Disabled warning when executing lock (0xf0) instruction (why warn at all?) [Joakim Larsson Edstrom]. Fixed pathological case where jumping into pages of FF-prefixed invalid opcodes could lock up MAME [AJR].
- 0.215              : Changed description to 'Intel 8086'.
- 0.211              : Delay interrupts for one instruction after sti [O. Galibert].
- 0.206              : Fixed passing of opcode address to coprocessor [AJR].
- 0.198              : Fixed HALT state [Carl].
- 0.195              : i86 memory stuff: Make read_byte/word and write_byte/word overridable virtual functions (80186 MMU probably will need to override this in the future). Make fetch_op an alias for fetch (implementations were identical already). Removed sreg argument from read_byte/word and write_byte/word (it was almost always m_easeg as set by calc_addr, sometimes with dubious evaluation order). Restrict logic for separating address spaces for CS/ES/SS accesses to 8086/8088 (later x86 models do not broadcast the descriptors). Encapsulate m_e16 within the only function that used it [AJR].
- 0.189              : Added support for IF status and segreg address spaces [Carl].
- 0.185              : Added decrypted opcodes space support [O. Galibert]. Fixed jnl flags test [htjywf2008].
- 0.184              : Removed tag() argument from logerror() calls in i86 cpu [Sergey Svishchev].
- 0.181              : Updated disassembly if IP or CS are changed in the debugger. Also update IP & CS when PC or CURPC changes (currently using a simple algorithm that may need to be improved). Added HALT to debugger state, so you can break out of a hlt instruction. Don't change CS if new PC/CURPC is within the current segment on i86/i186 [smf].
- 0.180              : Changed the x86 disassembler to use 'std::ostream &' internally. Whitespace fixes [Nathan Woods].
- 0.177              : Made common_op virtual for wip tool (cpu\i86\i86.h) [Miodrag Milanovic].
- 0.171              : Fix i86\i86.txt notes [Carl].
- 0.170              : (MESS) CPUID.ASM (Bob Smith 1985) suggests that in situations where m_no_interrupt is 1, (directly after POP SS / MOV_SREG), single step  IRQs don't fire [Karl-Ludwig Deisenhofer].
- 0.167              : Implemented 0xF1 alias for 0xF0 (LOCK). Opcode tested on reenigne's IBM XT bus sniffer and verified on real CPU [kazblox].
- 0.163              : Added very limited lock support to I86 CPU (just enough for the (MESS) Apricot actually) [Dirk Best].
- 0.157              : Fixed debugging with segment prefixes [Curt Coder].
- 0.154              : Fixed usage of uninitialized members in i8086_common_cpu_device [Oliver Stoeneberg]. Added 0x6x instruction shadows, used by (MESS) DEC Rainbow MS-DOS 2.01 (cpu\i86\i86.c) [R. Belmont, based on a patch by Bavarese]. Four new 8086 opcode aliases: 0xc0 is 0xc2; 0xc1 = 0xc3; 0xc8 = 0xca and 0xc9 = 0xcb as documented at OS 2 Museum. Added 0x60 opcode shadow, omitted in previous patch. Needed for DOS 2 [Bavarese].
- 0.153              : Fixed i86 shifts by very large (> 32) amounts (cpu\i86\i86inline.h). Fixes (MESS) IBM XT detection by the multi unique floppy controllers [Dirk Best]. Added guessed behavior + logerror instead of an assert to cpu\i86\i86.c for known index out-of-bounds access [Oliver Stoeneberg]. 8086 MOV sreg behavior confirmed on hardware, no longer a guess [Alex Jackson].
- 0.150              : Added i86\i86inline.h. Removed i86\ea.h, host.h, i86priv.h, i86time.c, instr86.c/h, modrm.h and table86.h. Make modernized i86 core endian-safe again [Alex Jackson]. Fixed i8086 i_insb -> write_byte(ea, read_port_byte(m_regs.w[DX])) [Carl].
- 0.149u1            : Changed description to 'I8086'. Don't lose save_xor on reset in i86 [R. Belmont]. Modernize 8086 [Carl, Wilbert Pol]. i86 fixes to get TX-1 and Buggy Boy working again [Phil Bennett].
- 0.148              : Fixed i86 shift timing [Carl]: (MESS) pc.c: Fixed MC1502 floppy interface. Work around pcjx BIOS bug and fix pcjr nmi. Support pcjx floppies. (MESS) pc_t1t.c: Added support for pcjx text mode and fixed pcjr 4bpp mode.
- 0.142u5            : Carl fixed i86 imul instruction. Alex Jackson fixed i86 initial CS on reset.
- 0.142u4            : Miodrag Milanovic fixed i86 shift instructions, helps detecting proper CPU. Fixed i86 handling of invalid instructions in 0x60-0x6f section. Implemented i86 POP CS and MOV CS,reg instructions that are 8086 specific.
- 0.142u3            : Miodrag Milanovic fixed i86/i386 POP SP and POP ESP thanks to bug report for Xenix boot by bs666.
- 0.139u2            : Removed cpu\i86\i86mem.c/h. Updated i86 core to use unaligned read/ write instead of their own stubs for handling misalinged reads [Aaron Giles].
- 0.129              : Aaron Giles fixed i86 core so that REP instructions with high interleave actually make forward progress.
- 0.128u7            : Cleaned up i86/i286/i386/nec/v30mz headers [Aaron Giles]: Renamed i86.h -> i86priv.h and i86intrf.h -> i86.h. Consolidate i88intrf.h, i186intf.h, i188intf.h, etc into i86.h. Aaron Giles added the concept of a cpu_state_table, which is supplied by the CPU cores and which describes all the register state accessible to the debugger and other subsystems. The format of the table is such that most data can be simply fetched from memory without the further involvement of the CPU core, including the display of common formats. Extensibility points are available for custom display and for importing/exporting the data to intermediate variables for more complicated scenarios. Updated the i86 core to use this.
- 0.128u6            : Removed i86\v30.h, v30intf.h, v20intf.h, v33intf.h, instrv30.c, instrv30.h and tablev30.h. Pointer-ified the i86 CPU core [Aaron Giles].
- 0.119u3            : Phil Bennett changed the following x86 instructions to read/write an entire word rather than two separate bytes: mov_axdisp, mov_dispax, stosw (8086 only) and rep stosw (8086 only). Also tweaked handling of x86 WAIT instruction.
- 0.118u3            : Added cpu\i86\i86mem.c/h. Changed description to '8086'. Changed I8086 CPU core to use a 16-bit data bus. Updated affected drivers: gottlieb, leland, tx1, fantland, tetriunk. Cleaned up naming of CPUs (i86 -> i8086, etc.) [Aaron Giles].
- 0.101u3            : Nathan Woods updated i86 and i286 cores to hook into the new i386 disassembler.
- 0.89u5             : Nathan Woods fixed disassembler calls, so that instructions are not falsely disassembled as 32-bit (cpu\i86\i86.c).
- 0.87u4             : Juergen Buchmueller fixed a cut+paste bug in cpu\i86\instr86.c. Changed SUBB() macro to SUBW().
- 0.87u3             : Removed cpu\i86\i86dasm.c.
- 0.75               : Nathan Woods fixed REP CMPSW so that it uses words and not bytes (cpu\i86\instr86.c).
- 0.71u3             : Nathan Woods added state saving support to the i86 and i286 CPU cores.
- 0.70u2             : Nathan Woods fixed i86 DAA opcodes and more.
- 15th June      2003: Colin Howell, Nathan Woods and Bryan McPhail fixed the DAA opcode in the i86 CPU core.
- 0.62               : Changed description to 'I8086'.
- 0.57               : Julien Frelat fixed OUTSB/OUTSW bugs in I86 emulation.
- 26th November  2001: Julien Frelat submitted a bugfix for the (REP) OUTSB and OUTSW opcodes for the i86 CPU core.
- 15th April     2001: Nicola Salmoria fixed an i8086 CPU core bug which broke the high score screen in Q*Bert.
- 0.37b10            : Added cpu\i86\i86.txt.
- 26th November  2000: Peter Trauner fixed several issues in the i86 CPU core and sent in a preliminary version of runtime driver loading support, allowing drivers and CPU and sound cores to be loaded separately from the executable when needed.
- 0.37b3             : Added cpu\i86\i86time.c and instr286.h. Removed cpu\i86\i86intrf.h, instr.h and i86.txt. Lots of changes to some CPU cores (mostly i86) [Peter Trauner, Juergen Buchmueller, Aaron Giles].
- 0.37b2             : Added cpu\i86\i86intf.h, instr86.c/h, table86.h and i86.txt. Added cpu\i86\v20intf.h, v30.h, v30intf.h, instrv30.c/h, v33intf.h and tablev30.h.
- 13th May       2000: Aaron Giles sent in another i86 core / Gottlieb drivers update fixing some bugs.
- 11th May       2000: Aaron Giles sent in some major functionality updates to the 8086, 80186 and 80286 cores.
-  2nd June      1999: Nicola sent in a preliminary Shanghai driver, but it stumbles on a bug of the i86 core.
- 0.35b1             : Juergen Buchmueller fixed several bugs in the I86 emulator.
- 0.34b5             : Added i86\i86dasm.c. I86 disassembler for the debugger, based on code by Robin Hilliard [Andrea Mazzoleni].
- 0.33b6             : Fixed bug in the I8086 emulator which caused MACH3 not to work. MACH3 now does the attract mode, but it will never be playable without the laser disc.
- 0.31               : Fabrice Frances fixed a bug in the 8086 emulator which caused unexpected deaths in Krull. Fabrice Frances cleaned up the I86 emulator, including 286 instructions (but with 8088 timing).
- 0.30               : Removed i86\i86.txt.
- 0.24               : Added i86\i86intrf.h, ea.h, host.h and modrm.h. Removed i86\i86dasm.h, mytypes.h, global.h, debugger.c/h and copyright. Fabrice Frances submitted a new faster I86 emulator. The entire I86 directory is changed, and most of Gottlieb games are now faster.
- 0.18               : Added i86\i86dasm.h and debugger.c/h. Fabrice Frances submitted a much faster version of the 8086 emulation. Q*Bert now runs at full speed with -frameskip 1 on my 486/100.
- 0.17               : Added i86\i86.c/h, instr.h, mytypes.h, global.h and copyright. Fabrice Frances submitted an 8088/8086 CPU emulator. Initial work based on David Hedley's IBM PC Emulator (pcemu).
- NOTES: Intel 8086 = 20 bit adress bus, 16 bit data bus and registers. 6 bytes prefetch queue.
- DRIVERS: tx1.cpp
- SOURCE: cpu\i86\i86.cpp



6.31  I80C86/I80C88
- NOTES: Theses are I8086/8088 CPU's and the CPU command "mov cs, " are ignored.


6.4   8088

- 0.215              : Changed description to 'Intel 8088'.
- 0.149u1            : Changed description to 'I8088'.
- 0.128u7            : Removed cpu\i86\i88intf.h.
- 0.118u3            : Changed description to '8088'.
- 0.37b2             : Added cpu\i86\i88intf.h.
- NOTES: The I8088 is a I8086 with 8 bit data bus. Prefetch queue only 4 byte, and refilled when 1 byte empty.
- PCB: P8088-1 (Hotblock), AMD P8088-2 (Borntofi), NEC D8088 (Qbert), AMD P8088 (Borntofi)
- DRIVERS: amusco.cpp, dlair2.cpp, fantland.cpp, gottlieb.cpp, gts80a.cpp, hotblock.cpp, mephistp.cpp, meyc8088.cpp, pcxt.cpp, sleic.cpp and smsmcorp.cpp
- SOURCE: cpu\i86\i86.cpp



6.5   I80130

- 0.222              : READ/WRITE macros removal [Osso].
- 0.204              : Removed PIT8253, PIT8254 and PIC8259 MCFG macros [Osso].
- 0.153              : Fixed DEVCB2 macros (machine\i80130.h) [Curt Coder].
- 0.151              : Added machine\i80130.c/h. Added i80130 OSP emulation. Refactored (MESS) Telenova Compis to use i80130, does not work yet [Curt Coder].
- NOTES: Intel 80130 iRMX Operating System Processor
- DRIVERS: (MESS) compis.cpp
- SOURCE: machine\i80130.cpp


6.6   80186

- 0.283              : Added latency when writiing DMA registers before the next DMA starts. Fixes (MESS) MPC60 crashing and the other drivers using a '186 all behave identically to 0.280 (i86\i186.cpp) [R. Belmont, Carl, Angelo Salese].
- 0.277              : Fixed cases where specific segment register settings could cause the i80186/188 peripherals to fail to be properly mapped into memory space [Carl, Lord Nightmare].
- 0.265              : Fixed DMA on timer2 and timer2 as prescaler. Fixed drq_callback case when used with timer 2. Only run timer 0,1 when not incremented via timer 2 pre-scaler (i86\i186.cpp) [Hannes Janetzek]. Removed outdated error message [Carl]. Use cycles_to_attotime and attotime_to_cycles for timer period calculation (i86\i186.cpp). Gives better timings for Am188EM-based games in Subsino2 driver [AJR].
- 0.245              : Converted i86\i186.cpp to use logmacro [Ryan Holtz]. Display and SIO wip for (MESS) Compugraphic MCS PowerView 10 [Carl].
- 0.230              : Timer updates. Implemented retrigger mode. Clean up code a little and removing redundant "active_count" flag. Modernized save state registration [AJR].
- 0.222              : Don't automatically clear IRQ state upon acknowledgment. Correct a fortuitously harmless typo in state registration (i86\i86.cpp). Added byte registers to debugger state and improved tracking of previous PC for debugger [AJR]. Initialized variable as needed to avoid timing regression in some leland.cpp games in debug DEVNOCLEAR build (i86\i186.cpp). READ/WRITE macros removal [Osso].
- 0.215              : Changed description to 'Intel 80186'.
- 0.212              : Fixed weird handle_eoi bug [O. Galibert].
- 0.210              : Peripheral register refinements. Emulated strange but documented behavior of unaligned accesses and byte writes to internal peripheral registers. Use more official register mnemonics. Use official names for DMA registers [AJR].
- 0.208              : Added interrupt controller registers to debugger state [AJR].
- 0.207              : Make DRQ level triggered [Carl].
- 0.204              : Reverted the MAME 0.203 DMA change, breaks (MESS) tandy2k and pcd [Carl].
- 0.203              : R9751: Implemented proper SMIOC emulation through new UART emulation. Enable 188 cpu to advance DMA immediatley if DRQ is held high when source synchronous DMA is started (It's not clear whether the DMA actually works this way yet) [Brandon Munger].
- 0.197              : Handle program space mapping for I/O block same as I/O space [Carl].
- 0.196              : Changed description to 'Intel I80186'.
- 0.195              : Added some internal peripheral block registers to 80186 debug state. i86 memory stuff: Make read_byte/word and write_byte/word overridable virtual functions (80186 MMU probably will need to override this in the future). Make fetch_op an alias for fetch (implementations were identical already). Removed sreg argument from read_byte/word and write_byte/word (it was almost always m_easeg as set by calc_addr, sometimes with dubious evaluation order). Restrict logic for separating address spaces for CS/ES/SS accesses to 8086/8088 (later x86 models do not broadcast the descriptors). Encapsulate m_e16 within the only function that used it [AJR].
- 0.186              : Added opcodes config stuff [Carl].
- 0.184              : Removed tag() argument from logerror() calls in I186 cpu [Sergey Svishchev].
- 0.181              : Updated disassembly if IP or CS are changed in the debugger. Also update IP & CS when PC or CURPC changes (currently using a simple algorithm that may need to be improved). Added HALT to debugger state, so you can break out of a hlt instruction. Don't change CS if new PC/CURPC is within the current segment on i86/i186 [smf].
- 0.179              : Fixed disassembly window [smf].
- 0.177              : Less errorlog spam [Curt Coder].
- 0.159              : (MESS) Siemens PC-D doesn't display anything yet but almost completes post (cpu\i86\i186.c) [Carl].
- 0.157              : Forgot to set m_intr.pending = 0 and set_input_line(0, CLEAR_LINE) [Carl].
- 0.155              : Fixed usage of uninitialized members in i80186_cpu_device [Oliver Stoeneberg]. Small cleanup [hap].
- 0.154              : Use static set irq and clean up leftovers (cpu\i86\i186.c). Fixed timer read. (MESS) RM Nimbus: Fixed and simplify more drawing code (cpu\i86\i186.c and video\rmnimbus.c). Interrupt level triggering and simplify timers [Carl]. Fixed usage of uninitialized members in i80186_cpu_device [Oliver Stoeneberg].
- 0.153              : Set m_timer[0-2].control = 0 in i186.c, this fixed (MESS) RM Nimbus palette differences between regular and debug builds [Osso].
- 0.151              : Added I186 internal clock divider [Curt Coder]. I186 timer is 1/4 internal clock, 1/8 external clock [Carl].
- 0.150              : Added cpu\i86\i186.c/h. Removed instr186.c/h and table186.h. Moved 80186 peripherals into the cpu. Finished modernizing the Leland sound and use new 80186. (MESS) Starts to read the floppies in Compis (Telenova 1985; ; fixed external interrupts in 80186) [Carl]. Fixed faulty if-condition [Oliver Stoeneberg].
- 0.149u1            : Changed description to 'I80186'. Modernize 80186 [Carl, Wilbert Pol]. "mov cs,ew" is not a valid 80186 instruction [Carl].
- 0.141u1            : Phill Harvey-Smith fixed handling 80186 instructions.
- 0.140u1            : Wilbert Pol fixed i80186/i80286 bound instruction restart when prefixed with a segment.
- 0.139u4            : Curt Coder added INT1, INT2, INT3, DRQ0, DRQ1, TMRIN0, TMRIN1 input and TMROUT0, TMROUT1 output lines to the Intel 80186 CPU interface.
- 0.128u7            : Removed cpu\i86\i186intf.h.
- 0.122u6            : Aaron Giles cleaned up leland clocks a little. Made the i186 divide-by-2 clock internal.
- 0.118u3            : Changed description to '80186'.
- 0.62               : Changed description to 'I80186'.
- 0.37b3             : I186 support [Peter Trauner, Juergen Buchmueller, Aaron Giles].
- 11th May       2000: Aaron Giles sent in some major functionality updates to the 8086, 80186 and 80286 cores.
- 0.37b2             : Added cpu\i86\i186intf.h, instr186.c/h and table186.h.
- NOTES: The I80186/I80188 has integrated pic8259, pit8253, dma8253 (but not at standard pc addresses) and additional instructions.
- DRIVERS: bingo.cpp, bingor.cpp, flashvga2.cpp, gambl186.cpp, highvdeo.cpp and leland.cpp
- SOURCE: cpu\i86\i186.cpp



6.61  80188

- 0.215              : Changed description to 'Intel 80188'.
- 0.203              : Improved the emulation of the 80188 to 87C451 MCU connection in order to reliably set a status bit disktool depends on [Stephen Stair].
- 0.149u1            : Changed description to 'I80188'.
- 0.132u3            : Dirk Best fixed an assert when using the 80188 CPU.
- 0.128u7            : Removed cpu\i86\i188intf.h.
- 0.37b2             : Added cpu\i86\i188intf.h.
- NOTES: The I80188 has a 8bit data bus.
- DRIVERS: neptunp2.cpp, strkzn.cpp, subsino2.cpp, timetrv.cpp and wms.cpp
- SOURCE: cpu\i86\i186.cpp


6.62  Am186EM

- 0.247              : Added Am186EM variant type [AJR].
- NOTES: AMD Am186EM
- DRIVERS: ???
- SOURCE: cpu\i86\i186.cpp


6.62  Am188EM

- 0.265              : Use cycles_to_attotime and attotime_to_cycles for timer period calculation (i86\i186.cpp). Gives better timings for Am188EM-based games in Subsino2 driver [AJR].
- 0.247              : Added Am188EM variant type [AJR].
- NOTES: AMD Am188EM
- PCB: AMD Am188 EM-20KC (Expcard) and AM188EM-20KC (ptrain)
- DRIVERS: subsino2.cpp
- SOURCE: cpu\i86\i186.cpp



6.62  80286

- 0.278              : Added 'Intel 80286' device. Added 'Paint 'N Puzzle Super' (Century Vending / Green Concepts International 1994) (with Intel 80286 CPU1) [Tylar R].
- 0.232              : Clear m_fire_trap before interrupt (i86\i286.cpp) [Carl].
- 0.222              : Don't automatically clear IRQ state upon acknowledgment (i86\i86.cpp). Don't clear INT state upon acknowledgment and added exception hook for debugger (i86\i286.cpp). Added byte registers to debugger state and improved tracking of previous PC for debugger. Updated m_prev_ip (and therefore CURPC) after taking interrupt [AJR].
- 0.215              : Changed description to 'Intel 80286'.
- 0.195              : Fixed default CS flags [Carl].
- 0.186              : Added opcodes config stuff [Carl].
- 0.184              : Removed tag() argument from logerror() calls in I286 cpu [Sergey Svishchev].
- 0.181              : Updated disassembly if IP or CS are changed in the debugger. Also update IP & CS when PC or CURPC changes (currently using a simple algorithm that may need to be improved). Added HALT to debugger state, so you can break out of a hlt instruction. Don't change CS if new PC/CURPC is within the current segment on i86\i186. Fixed i286 PC/CURPC in protected mode [smf].
- 0.176              : I286 hlt requires CPL == 0 independent of IOPL (nice job intel) [Carl].
- 0.154              : Fixed usage of uninitialized members in i80286_cpu_device [Oliver Stoeneberg].
- 0.153              : Added fault on invalid sreg access for i286. 80186 likely faults, 8086 unknown [Carl].
- 0.151              : Fixed I286 task state segments and trap flag [Carl].
- 0.150              : Removed instr286.c/h, modrm286.h and table286.h. Modernize I286 [Carl].
- 0.149u1            : Repurpose unneeded static config as a20 line callback in i286 [Carl].
- 0.148u4            : Make the i286 registers in the debugger follow the 386 layout. (MESS) Cleanup AT unnecessary rom entries, move the neat 386sx to ct386sx and make it boot [Carl].
- 0.148u3            : Conforming i286 code segments are always permitted in LSL and LAR (i86\instr286.c) [Carl].
- 0.146              : Fix for i286 preventing error 104 on IBM5170 [Carl].
- 0.142u6            : Fix for I286 Phar Lap and Borland 16-bit DPMI servers. Fixes the 286 DOS/16M DOS extender that comes with Lotus 123r3. Limit check of SS in push and pop instructions. Fix bunch of fault I286 restarts [Carl].
- 0.142u5            : Carl enabling 287 emulation by trapping when needed (i286.c).
- 0.142u4            : Carl added i286 LOADALL and triple fault resets. Added support for i286 16-bit protected mode far calls and segment privilege checks.
- 0.142u1            : Miodrag Milanovic fixed I286 protected mode boundary check.
- 0.140u1            : Added cpu\i86\modrm286.h. Wilbert Pol moved call of i80286_urinit to CPU_INIT. Fixed display of PC in the debugger. Fixed i80186/i80286 bound instruction restart when prefixed with a segment. Partially implemented i286 protected mode. Fixed verw, verr, lar, lsl and arpl instructions.
- 0.129              : Aaron Giles fixed cpu.mak dependencies for i286.
- 0.128u7            : Changed cpu\i86\i286intf.h to cpu\i86\i286.h. Cleaned up i86/i286/i386/nec/v30mz headers [Aaron Giles]: Renamed i86.h -> i86priv.h and i86intrf.h -> i86.h. Consolidate i88intrf.h, i186intf.h, i188intf.h, etc into i86.h.
- 0.128u6            : Pointer-ified the i286 CPU core [Aaron Giles].
- 0.125u9            : Wilbert Pol fixed POP ES in I80286 protected mode.
- 0.125u3            : Removed cpu\i86\i286.h. Wilbert Pol fixed memory access in the 80286 CPU core which made i286.h obsolete. Changed CPUINFO_INT_MAX_INSTRUCTION_BYTES to prevent crashes during disassembly.
- 0.125u2            : Wilbert Pol fixed 80286 databus widths.
- 0.110u2            : Barry Rodewald fixed flags access in the i286 core.
- 0.103              : Nathan Woods changed i286 core to use the same INPUT_LINE_A20 that the i386 core uses.
- 0.101u3            : Nathan Woods updated i86 and i286 cores to hook into the new i386 disassembler.
- 0.89u5             : Nathan Woods fixed disassembler calls, so that instructions are not falsely disassembled as 32-bit (cpu\i86\i286.c).
- 0.79u3             : Updated I286 CPU core to MAME 0.79 [Nathan Woods].
- 21st February  2004: Nathan Woods sent in another miscellaneous patch for I286 and M6502 CPU cores.
- 11th February  2004: Nathan Woods updated the MESS specific CPU cores (such as I286, M4510 and M6509) with latest changes.
- 0.71u3             : Nathan Woods added state saving support to the i86 and i286 CPU cores.
- 11th May       2000: Aaron Giles sent in some major functionality updates to the 8086, 80186 and 80286 cores.
- 0.37b2             : Added cpu\i86\i286.c/h, i286intf.h, instr286.c and table286.h.
- 0.31               : Fabrice Frances cleaned up the I86 emulator, including 286 instructions (but with 8088 timing).
- NOTES: The I80286 is a 80186 with additional instructions and 24 bit address bus
- DRIVERS: pntnpuzls.cpp
- SOURCE: cpu\i86\i286.cpp



6.63  I386

- 0.283              : Set CPl after all memory reads are done in i386_task_switch (i386\i386segs.hxx) [Carl].
- 0.280              : Throw faults from i386_trap so double and triple faults can be handled properly (i386\i386.cpp and i386\i386priv.h) [Carl].
- 0.278              : Check for fault before setting register. Check cpl in verr and verw (i386\i386.h, i386op16.hxx and i386op32.hxx) [Carl].
- 0.272              : Make the SSE opcodes generate the #NM exception used to save/restore the FPU state (i386\i386.h and i386\pentops.hxx) [yz70s].
- 0.268              : Some limit checks. Note: This a hack, only use if there are sync problems with another cpu (i386\i386.cpp). Disable logging. Fixed cycles when leaving rep when out of cycles and count == 0 (i386\i386ops.hxx) [Carl].
- 0.264              : Handle double and triple faults (i386\i386segs.hxx) [Carl].
- 0.262              : Don't handle op/addr size prefixes twice in rep (i386\i386ops.hxx) [Carl]. In the cpu state view show the flags of the x87 status words and some of CR0. Added constants for the bits in the CRx registers and start using them. Display cr0 and x87 status registers as before plus more usages for the crx bits constants [yz70s].
- 0.257              : TZCNT opcode fall back to bsf for 386 and 486 too (i386\i386ops.h) [Carl].
- 0.255              : Use logmacro.h granular logging (i386\i386.cpp) [Luigi Thirty].
- 0.252              : Added 3rdparty\softfloat\f2xm1.c. Fixed FPU log2 and atan (i386\x87ops.hxx). Don't change x87 stack pointer until after memory access in case of a page fault (i386\i386.cpp, i386\x87ops.hxx). EMMS should trap too (i386\pentops.hxx). Added fxsave and fxstor (i386\pentops.hxx) [Carl].
- 0.245              : fsave resets the FPU (i386\x87ops.hxx and machine\i8087.cpp) [Carl].
- 0.243              : Fixed multiple issues with breakpoint emulation (i386\i386.cpp, i386ops.hxx and i386segs.hxx) [Paul Arnold].
- 0.242              : Changed a couple of disassembler helpers to return std::string (i386\i386dasm.cpp) [Vas Crabb].
- 0.236              : When DEBUG_MISSING_OPCODE is defined, log a small backtrace. This way together with the full list of bytes that form the non recognized opcode there are the addresses of the previously executed instructions [yz70s].
- 0.222              : Added exception hook for debugger gex command [AJR].
- 0.221              : Added alias for fstp st(i) (cpu\i386\x87ops.hxx) [Carl].
- 0.218              : Fixed over/underflow result and zero div (i386\i386.h, x87ops.hxx). movzx r16 rm16 is an alias for mov (i386\i386ops.h) [Carl].
- 0.217              : Try the new save state possibilities (Allow saving members of structures in n-dimensional arrays) [Osso]. Show status of some cpu flags in the state debugger view. Removed some cases of visual studio warnings 4805 4389 4065 (i386\cpuidmsrs.hxx) [yz70s]. Unbreak the x87 and flesh out 486 float exceptions a bit. FPU env in v86 mode is like real mode. Set opcode and clear data ptr for instruction that don't access memory. FENI and FDISI are nops on the 387+ [Carl].
- 0.215              : Prevent (MESS) ISA-386U30 REV.2.2 from hanging MAME (i386\i386segs.hxx) [smf].
- 0.212              : Added hardware breakpoint functionality [MoochMcGee]. vm86 segment flags are 0xf3 as cs must be read/write like real mode. Use floatx80_scale for fscale [Carl].
- 0.211              : Removed some MSVC warnings [yz70s]. Fixed up some commented out testing code (i386\cache.h) [MoochMcGee].
- 0.210              : Added i386\i386segs.hxx. Improved splitting of unaligned accesses (excluding program fetches). This entails a major code reorganization just to keep the scale of it all halfway sane [AJR]. Fixed enter insn (i386\i386op16.hxx and i386op32.hxx) [Carl].
- 0.209              : Added new MAME debugger function cacheflush(x) to writeback cache: cacheflush() or cacheflush(0) writes back dirty cachelines to ram, cacheflush(1) also marks dirty cachelines as clean and cacheflush(2) or cacheflush(3) also invalidates the whole cache [yz70s].
- 0.207              : Added comments about Athlon memory type range register MSRs (i386\cpuidmsrs.hxx) [yz70s].
- 0.205              : Added cpu\i386\cpuidmsrs.hxx. Moved CPUID and MSR routines to new file cpuidmsrs.hxx [yz70s]. Added STEP OVER to REP and REPNE instructions (i386\i386dasm.cpp) [AJR]. Removed MCFG macros [Ryan Holtz]. Fixed esp after segment faults (i386\i386op16/32.hxx) [Carl].
- 0.204              : Added i386\x87priv.h. Added virtual methods for cpuid and msr instructions. Default implementations in class i386_device log an error message. Derive Pentium MMX, Pentium II, Pentium III classes from pentium_pro_device. Removed pentium_msr_* p6_msr_* piv_msr_* MSR_READ MSR_WRITE routines and call virtual methods instead. The routine pentium_rdmsr modifies the registers only if the msr is valid. Prepare to change hxx files into regular cpp files. Changed order of include files at top of i386.cpp. Moved some routines between i386.cpp and i386priv.h. Moved part of x87ops.hxx into new file x87priv.h. Now you only have to rename the hxx files to cpp and add the following at the top of each one: #include "emu.h", #include "i386.h", #include "i386priv.h", #include "x87priv.h", #include "cycles.h", #include "debugger.h", #include "debug\debugcpu.h" and #undef i386 [yz70s]. Signal a privilege change to the debugger whenever protected mode is enabled or disabled or the CS descriptor flags are changed [AJR].
- 0.201              : Fixed a bug that could cause a relatively common CPU detection check to see a 386 as a 486. Fixed a dead code bug. Added enumeration for feature information bits [MoochMcGee]. The CPUID opcode logs an error message if called with a not yet supported value in the EAX register [yz70s].
- 0.200              : Avoid some unintended undefined behavior. Spotted by cppcheck (i386\i386op32.hxx) [MoochMcGee].
- 0.197              : Fixed stack size in call and sp masking [Carl].
- 0.196              : Changed description to 'Intel I386'.
- 0.195              : Fixed default CS flags [Carl].
- 0.193              : In the poentium_smi() routine all calls to WRITE32 have the parameters swapped. Small change to enter system management mode (cpu\i386\i386.cpp). Fixed rsm instruction (cpu\i386\pentops.hxx) [yz70s]. x87 bug fixes and FERR support [Andrey Merkulov]. Correct when some opcodes were introduced (cpu\i386\i386ops.h) [MoochMcGee]. Separated i8087 FPU device and added save state. Permit lock with other prefixes [Carl].
- 0.191              : Use correct stack size in retf [Carl].
- 0.189              : Added cpu\i386\i386dasm.h. Created explicit i386dasm include for x86 DRC [AJR].
- 0.186              : Preliminary configuration of I386SX Polhemus CPU [AJR].
- 0.185              : Ignore float exceptions in debugger [Carl]. Workaround for multiple inclusion until SoftFloat is updated to version 3 (cpu\i386\i386.h) [AJR].
- 0.184              : Fixed enum range check (cpu\i386\i386ops.hxx and pentops.hxx). Save additional CPU flags (cpu\i386\i386.cpp) [Scott Percival, moralrecordings/pcfix].
- 0.182              : Logerror for invalid rep rather than fatal error (cpu\i386\i386ops.hxx) [Carl].
- 0.180              : Changed the x86 disassembler to use 'std::ostream &' internally. Whitespace fixes [Nathan Woods].
- 0.174              : Changed cpu\i386\i386op16.inc, i386op32.inc, i386ops.inc and x87ops.inc to i386op16.hxx, i386op32.hxx, i386ops.hxx and x87ops.hxx.
- 0.171              : Don't change IF when IOPL < CPL. 80386 sreg push only 16 bits and loadall. All OS/2 betas work with CGA now [Carl].
- 0.161              : Decorated 64-bit constants, fixes some 32-bit builds (i386\pentops.inc) [Vas Crabb].
- 0.160              : x87 condition code flag C1 must be 1 in case of a stack overflow, 0 in case of a stack undeflow (cpu\i386\x87ops.inc). Removed bug in x87 fsave and frstor, x87 fpatan implemented using atan2() and not atan() and new implementation of x87 opcode fprem based on intel manual since curent one gives wrong results (i386\x87ops.inc) [yz70s].
- 0.159              : Added x87 opcodes FCMOVB, FCMOVE, FCMOVBE, FCMOVU, FCMOVNB, FCMOVNE, FCMOVNBE, FCMOVNU, FCOMI, FUCOMI and FUCOMIP [yz70s]. Updates for the future and more (cpu\i386\i386.c, i386ops.h and pentops.inc) [Samuele Zannoli]: Added infrastructure to support opcodes ?? 0f 38 ?? and ?? 0f 3a ??. Added placeholders in opcode table for all instructions not yet implemented. Fixed opcode group 0f 73. Added opcode group 66 0f 73. Moved SSE opcodes movd movdqa to their own routine. Moved SSE opcodes pinsrw pextrw to ther own routine. Added opcodes SSE punpcklbw, punpcklwd, punpckldq and punpcklqdq.
- 0.158              : Store all 32-bits of gdt and idt base with 16-bit sgdt and sidt. Testing shows lgdt and lidt only load 24-bits (cpu\i386\i386op16.inc) [Carl]. Added disassembly of opcodes MOVHLPS and movLHPS. They differentiate from movlps and movhps by bits 7-6 of the modrm byte (i386\i386dasm.c) [yz70s].
- 0.156              : Added i386 lock. Some of the group opcodes need to be checked [Barry Rodewald, Carl]. Mark TSS busy. Zero descriptors and stack size. Fixed more presence checks. GP fault with softint in v86 mode when iopl < 3. Call with expand down stack [Carl]. Fixed segment present check for calls to a TSS. Moved initialisation of m_lock to i386_common_init(), so that it is always initialised [Barry Rodewald].
- 0.155              : i386: Fixed vem486. Expand down ring 0 stack [Carl].
- 0.154              : i386 cpu x87 opcodes FPREM and FPREM1 must clear status bit C2 not C0 [Samuele Zannoli]. Fixed usage of uninitialized member in i386_device [Oliver Stoeneberg].
- 0.153              : Changed cpu\i386\i386op16.c to i386op16.inc, i386op32.c to i386op32.inc, i386ops.c to i386ops.inc and x87ops.c to x87ops.inc [Oliver Stoeneberg]. Modernised I386 cpu core [Wilbert Pol].
- 0.152              : Added TZCNT instruction handling by having it fall back to use BSF, as it would on a CPU that doesn't support TZCNT (cpu\i386\i386ops.h and pentops.c). Added the ability to read and write to the Pentium and P6 event/performance counter MSRs. Nothing is actually counted, though. Also added reading and writing of the time stamp counter MSR [Barry Rodewald].
- 0.150              : Fixed undefined order of evaluation in FETCH* and READ* functions in i386\i386priv.h [Carl, Oliver Stoeneberg]. Fixed smsw undocumented behavior in cpu\i386\i386op32.c. Set int 0 when aam has a 0 radix. Use correct PL and stack address size in call gates. Fixes WIN95 hardware detection [Carl].
- 0.149u1            : Show segment register override on string insns in I386 DASM. in I386 DASM stos, scas and ins always use es. Preliminary cpu-side smi support [Carl]. Fixed validation and listxml infinite loop (CPU_GET_INFO_CALL(pentium2) -> pentium; cpu\i386\i386.c) [Miodrag Milanovic].
- 0.149              : Fixed I386 DASM improper signed display in some opcode parameters [Peter Ferrie].
- 0.148u3            : Fix up the i386 stack if a page fault occurs in a far call and clear the top of esp when loading a tss stack. Removed unused define and 386 has 16-bits of io space. i386 RPL must be not be greater than DPL in LSL and LAR [Carl].
- 0.148u2            : Fixed undefined shift behavior (i386\i386op16.c and i386ops.c). i386 int 6 on invalid LxS insn. Makes NTVDM (NT Virtual DOS Machine) happier (cpu\i386\i386op16.c). i386 popfd should trap in v86 mode. Make i386 illegal opcodes trap and logerror rather than fatalerror. i386 rep ret (seriously) (i386\i386ops.c). i386 str and sldt always write 16bits to memory (i386\i386op32.c). Split 386SX to separate cpu [Carl]. Fixed debug assert (i386\i386priv.h) [Barry Rodewald].
- 0.148u1            : Added Translation Lookaside Buffer (TLB) to cpu\i386\i386.c, i386ops.c, i386priv.h and i486ops.c. Added if(!(cpustate->cr[0] & 0x80000000)) // Some very few old OS's won't work with this (cpu\i386\i386priv.h). Improved I386 TLB performance slightly [Carl].
- 0.148              : Set some features bits for Pentium 3 CPUs in i386 [Peter Ferrie].
- 0.147u3            : Added I386 debugger helper for converting virtual to physical addresses [Carl].
- 0.147u2            : i386 DASM [Peter Ferrie]: Added numerous opcodes for newer CPUs. Added some undocumented-but-supported opcodes from old CPUs. Correct naming of two opcodes. i386 [Carl]: 486+ WP bit support. Allow wp in 32-bit mode and add newline to strings (cpu\i386\i386ops.h) [Carl]. Don't crash on REP NOP (i386\i386ops.c) [Carl, Alegend45].
- 0.147              : xlat implementation fix (cpu\i386\i386op16/32.c) [Alegend45].
- 0.146u3            : Various changes to i386 CPU core and Chihiro emulation, allowing it to show a basic logo and text [Samuele Zannoli].
- 0.146              : i386 IRET/Virtual 8086 mode fixes. Another small vm86 fix [Carl]. Removed unwanted logical AND [judge].
- 0.145u8            : Fixed for bt? instructions [Carl]. Big I386 pmode update [Carl]. Various Clang warning cleanups in i386ops [Balrog].
- 0.145u7            : Added lib\softfloat\fyl2x.c.
- 0.145u4            : Various i386 and x87 fixes [Carl]. Removed one too many ampersands [Barry Rodewald].
- 0.145u2            : One more to fix i386 cmpsb opcode (dir /s works now) and remove unused variables. Fixed Windows 95 blue screen (MESS). Prevent i386 page faults when returning to same privilege and unmapped pages are above the stack. Windows 95 boots now. LOCK prefix should depend on IOPL on 386. Windows NT beta boots [Carl]. Added 32-bit versions of LMSW, and made LMSW only change the lower 4 bits of CR0 [Barry Rodewald].
- 0.145u1            : i386 fixes for DOS4GW 1.97 (MESS). i386 Trap flag support [Carl]. Small x87 fix (i386\x87ops.c) [Carl].
- 0.145              : Fix for protection mode faults, makes 586 based things to work again by Carl [Miodrag Milanovic].
- 0.144u7            : I386 BTR and page fault fixes from Carl, and basic implementation of FIST and FBLD FPU instructions. Fixed BSR/BSF and CMPS based on test-i386 output. Fixed STR and SLDT instructions. Fixed stack segment limit checking for IRET and RETF instructions. Added segment register checks for LDS/LES/LFS/LGS instructions. Correct exception error codes that returned a segment selector to include the local/global bit. Reworked stack segment limit checks to add basic support for expand-downHEADgit-svnmaster segments, and added limit checks to PUSH and POP. Made stack limit checks better handle the difference between 16 and 32-bit stacks in IRET and RETF. Stopped IOPL from being changed by IRET when CPL is zero [Barry Rodewald]. Fix for JCXZ instruction. Fix for limit wrap and selector 0 in the LDT. Added more privileged instruction checks, divide by zero traps. Further page fault work. Windows 3.1 can now run in 386 enhanced mode (MESS) [Carl]. i386 FPU rewritten using softfloat [Carl]. Rewrote i386 x87 emulation: Use SoftFloat arithmetic functions. Implemented tag word updates. Implemented status word/exception flag updates. Implemented stack underflow/overflow behaviour. Use CRT trig functions for sin/cos/tan until I figure out why the SoftFloat functions produce daft values [Phil Bennett]. Various i386 protection mode fixes and added 32-bit operand size version of SMSW [Barry Rodewald]. Major update to i386 segment limit and protection checking [Carl].
- 0.144u6            : Made a start at Virtual 8086 Mode (i386.c). Not fully working yet, though. Fixed an issue where two address or operand size prefixes would cancel each other out. Fixed high bits in eflags register from being changed by POPF, and VM and IF flags from changing depending on privilege level. Fixed exception error codes in protected mode. Further work on virtual 8086 mode. EMM386 will now load, but will still die a few seconds later. various fixes to 486 and Pentium eflags from MESS. Reset NT flag on interrupt in V86 mode [Barry Rodewald]. Bit more progress towards getting 386 enhanced mode Windows running. Fixed setting of IF flag when interrupts are triggered in virtual 8086 mode [Barry Rodewald]. Beginning to implement page faults (i386\i386.c, i386ops.c and i386priv.h). Added i386 I/O permissions (i386\i386priv.h) [Carl]. Fix for single-precision operations (i386\x87ops.c) [Peter Ferrie].
- 0.144u5            : Angelo Salese implemented every single documented x87 co-processor opcodes in 386+ CPU cores. Barry Rodewald moved i386 stack changes to be after protection checks in RETF and IRET. Made ARPL protected mode only. Added protection checks when MOVing to a segment register.
- 0.144u2            : Samuele Zannoli added 3 opcodes (sfence, fstp and fild) to the i386 processor.
- 0.143u2            : Implemented i386 FCLEX FPU instruction [Barry Rodewald].
- 0.143u1            : Various i386 fixes [Barry Rodewald]: Load LDT before segment registers when switching tasks. Set IF after the instruction following STI. Reset IF after MOV SS or POP SS for one instruction. Fixed LSL instruction when modrm < 0xc0.
- 0.142u6            : Barry Rodewald implemented i386 task gates, call gates, and task state segments (both 286 and 386). Also implemented triple fault CPU resets (used by OS/2). x87: Basic implementation of FSTENV (used by OS/2).
- 0.142u4            : Alex Jackson fixed the disassembly of the "mov ax, mem" instructions (opcodes A0-A3) in the i386 and NEC disassemblers. The argument (the memory address) was being displayed as a signed number, which doesn't make any sense.
- 0.142u3            : Miodrag Milanovic fixed i86/i386 POP SP and POP ESP thanks to bug report for Xenix boot by bs666.
- 0.141u3            : Barry Rodewald fixed LLDT [reg], LTR and LMSW instructions, and added preliminary implementations of VERR, VERW and LAR in the i386 CPU core. Fixed for exceptions that require the return address to point to the instruction at fault. Dirk Best changed i386 READ/WRITEPORT macros to inline functions to properly support aligned vs. unaligned writes. Fixes regressions in MESS for all drivers using the PCI bus and possibly others.
- 0.139u4            : Barry Rodewald fixed unaligned 16 and 32-bit I/O accesses in i386 CPU core.
- 0.137u3            : Barry Rodewald correct i386 display of debug registers (D0-D7) in disassembly listings.
- 0.137u2            : i386+ core updates [Samuele Zannoli]: Added CR4 register. Added bswap instruction. Added support for 4MB pages. i386 disassembler updates [Alex Jackson]: Made "MOV AL, offset" etc (opcodes A0-A3) properly indicate a segment override prefix. Changed CPUINFO_INT_MAX_INSTRUCTION_BYTES on i86 from 15 to 8.
- 0.137u1            : Barry Rodewald fixed I386 unaligned memory accesses and opcode fetches when they cross a page boundary. Previously, if pages were not ordered in contiguous RAM, then a cross-boundary read or write would read partially incorrect data or write some of the data in the wrong page. Oliver Stoeneberg gave some fatalerror() calls in the i386 proper messages.
- 0.136u4            : Small fix for the i386 core, correcting the LLDT instruction. This fixed sets up the LDTR base and limit values correctly, fixing use of the LDT [Barry Rodewald]. John R. Hauser added MAME-ified version of SoftFloat library (lib\softfloat\softfloat.c). NOTE (R. Belmont): There's no portable way to use the host's FPU for high-precision floating point. GCC has extensions which map to Intel's 80-bit extended floats, but support on non-x86/x64 is sketchy and MSVC doesn't support floats > 32 bits at all. I plan to use SoftFloat for the 68030/040 FPU up front, but it will also be useful in the future for emulating the 386/486/Pentium/etc FPUs (Bochs uses it for exactly that purpose).
- 0.136u1            : Improved i386 CPU accuracy of the various emulated models, makes CPU detection programs detect the correct CPU (in MESS) [Dirk Best]: eflags mask added. Initial values for the EAX and EDX registers fixed. cpuid values improved. Feature flags improved. Initial value for the cr0 register improved. Changed 486 to not support the cpuid instruction by default. Take a trap on invalid instructions instead of throwing a fatalerror. Emulated the undefined flag behavior for the DIV/IDIV instructions on Intel CPUs.
- 0.135u4            : I386 improvements [Barry Rodewald]: Minimal implementation of the LSL protected mode instruction. Fixed the REP instruction when used with a segment prefix.
- 0.135u3            : I386 core improvements [Barry Rodewald]: Fixed EIP displacement when executing FPU instructions with no 80387 present. Added 32-bit implementations of SLDT and STR.
- 0.135u2            : Barry Rodewald fixed i386 REP prefix to use segment:SI when address size is 16-bit (ie: when using OUTSB or OUTSW).
- 0.135u1            : i386 core fixes [Barry Rodewald]: Added Nested Task flag, and I/O Privilege flags. They aren't implemented in any way, but can now be set or reset. Can be used to detect a 80386 or later CPU. Implemented ENTER instruction. Made IRQ vectors treated as 8 bytes when in protected mode, and made the addresses pushed onto the stack 32-bit if the gate descriptor used is a 386 interrupt or trap gate (also when in protected mode, will always be 16-bit if in real mode).
- 0.134u4            : Angelo Salese implemented I386 SLDT & STR opcodes.
- 0.134u1            : Gabriele Gorla improved handling of override prefixes after a i386 rep instruction.
- 0.134              : i386 fixes [Gabriele Gorla]: Added missing arpl instruction. Fixed BCD carry. Fixed disassembly of group D8 when modrm > 0xc0. Added fucompp instruction to disassembler.
- 0.133u5            : Gabriele Gorla fixed carry/borrow flag in ADC/SBB and LOOP instructions in 16-bit mode in the i386 core.
- 0.128u7            : Changed cpu\i386\i386intf.h to cpu\i386\i386priv.h. Cleaned up i86/i286/i386/nec/v30mz headers [Aaron Giles]: Renamed i86.h -> i86priv.h and i86intrf.h -> i86.h. Consolidate i88intrf.h, i186intf.h, i188intf.h, etc into i86.h.
- 0.128u6            : Pointer-ified the i386 CPU core [Aaron Giles].
- 0.126u5            : Atari Ace fixed the I386 CPU core's BSR implementation for the case where the high bit is set.
- 0.125u4            : Aaron Giles added fisttp opcode to i386 disassembler.
- 0.122u5            : Aaron Giles added support for outputting 64-bit target addresses in the i386dasm.
- 0.119u4            : Fixed several issues in the i386 core [Couriersud]: The INTR-line for i386 is a "level" line; changed interrupt handling to trigger on asserted line. In 32bit mode, determine trap/interrupt from gate-header. Interrupt line is read during two bus cycles. Adjust CYCLES accordingly.
- 0.119u1            : Aaron Giles fixed a few more 64-bit disassembler problems in i386dasm.c.
- 0.118u4            : Aaron Giles significantly improved the i386 disassembler. Changed it so that it no longer outputs 'byte ptr' except for ambiguous cases. Updated for full 64-bit disassembly support. Added support for the full IA32 opcode matrix as specified by recent Intel manuals, including all SSE opcodes and variants.
- 0.114u4            : Aaron Giles improved access to system registers in i386 core. Added explicit caching of segment data and flags. Fixed several minor issues.
- 0.114u2            : Aaron Giles added preliminary 64-bit disassembly support to i386dasm.c.
- 0.103u5            : Nathan Woods added support for the various x86 8-bit and 16-bit derived registers, as hidden registers in the i386 core. Changed several byte operands in the i386 disassembler to be diassembled as unsigned rather than signed.
- 0.103u4            : Intel i386/i486/Pentium update [Nathan Woods]: Fixed A20 mask implementation. Added A20 mask to debugger translate callback. Implemented Pentium opcode CMPXCHG8B. Fixed XADD, and added support for the 8 and 16 bit variants.
- 0.103u3            : Nathan Woods added SegBase() and SegLimit() functions to the i386 core debugger.
- 0.102u2            : Nathan Woods fixed 16-bit i386 disassembly so it stays within the current segment.
- 0.102u1            : Nathan Woods changed some i386 disassembly parameters to be unsigned.
- 0.101u3            : Aaron Giles fixed FPU decoding and a few other minor issues in the i386 disassembler.
- 0.101u2            : Aaron Giles cleaned up i386 disassembler to produce Intel-standard output.
- 0.100u4            : Added cpu\i386\cycles.h, i386ops.h, i486ops.c, pentops.c and x87ops.c. Removed cpu\i386\i386op16.h and cpu\i386\i386op32.h. Updates to the I386 core [Ville Linde]: Added i486, Pentium and Cyrix MediaGX CPUs. Replaced the opcode tables with a dynamically built one. Rewrote the cycle counting to support different CPUs. Added page translation. Tons of bugfixes. Also updated the SPI driver to work with these changes.
- 0.98u2             : Ville Linde and David Haywood fixed the i386->z80 communication in the Seibu SPI driver. This fixes the flash rom update and should also fix any remaining hangs/pauses. The flash rom update should take around 5 minutes. Now all games should have proper sample data.
- 0.91u1             : Bryan McPhail added support for encrypted opcodes in i386 disassembler (for Irem games). Added some of the NEC V series instructions into i386 disassembler.
- 0.90               : Some i386 cpu core fixes [Nathan Woods]: Fixed algorithm for identifying 32-bit segments. Near branches now won't force a segment reload. Implemented RET imm16 under 16-bit mode. Fixed SBB instruction (the borrow was deducted from the second operand, not the result). Fixed LDS, LSS, LES, LFS, LGS under 32-bit mode. Partially implemented LLDT, LTR, CLTS, WAIT and MOV dr instructions.
- 0.89u6             : Nathan Woods fixed I396 LMSW opcode and the disassembler will now list segment prefixes when appropriate.
- 0.89u5             : Nathan Woods implemented SMSW instruction (i386\i386op16.c). Marked retf instruction as DASMFLAG_STEP_OUT (i386\i386dasm.c).
- 0.89u4             : Nathan Woods added support for DASMFLAG_STEP_OVER and DASMFLAG_STEP_OUT flags in i386 core.
- 0.88u4             : Aaron Giles added a "PC" register to the I386 core so that it should work in the new debugger.
- 0.84u5             : Ville Linde improved i386 disassembly format.
- 0.84u3             : Ville Linde added some missing i386 opcodes.
- 0.82u3             : Nathan Woods revamped interrupt handling; a bonafide line is now implemented and also a IRQ callback. Fixed CALL absolute instruction under 16 bit mode. Fixed i386 interrupt call to use PULSE_LINE instead of always.
- 0.82u2             : i386 enhancements [Nathan Woods]: CALL16 opcode will now only adjust IP instead of EIP when in 16-bit mode. Minor bug fix in RETF opcode. Changed REP and REPNE opcode implementations to use the same code. INTO will now interrupt even if IF is zero.
- 0.82               : i386 improvements [Nathan Woods]: Implemented zeroing out A20 lines. Implemented state save support. Unknown instructions now disassemble as '???'. Implemented XLAT opcode. DAA fixes.
- 0.81u8             : 386 updates [Nathan Woods]: Implemented usage of segment limits (or whatever they are called). Implemented 16-bit interrupts. Initial values of IDTR are now properly specified. i386_interrupt() is no longer called when i386_set_irq_line() is called with a state of zero. Actual cycle count is now returned. Partially implemented far CALL and JMP instruction (i386op16.c). Implemented PUSH rm8 instruction (i386ops.c). Added a distinction between maskable and non maskable interrupts (like int 3, illegal instruction etc). Added a distinction between invalid and unimplemented instructions. Invalid instructions raise an interrupt, and unimplemented instructions call osd_die() for now. i386_set_irq_line() will no longer raise an interrupt when passed with state=0. Various string intructions now use SI/DI instead of ESI/EDI when in 16-bit mode. Implemented LOCK and RETF. Fixed a bug in LMSW. Minor disassembler fixes. SPI improvements [Ville Linde]: The SPI "old" video hardware (viperp1) does have 3 layers after all, but no rowscroll (fixed). Bugfixed Nathan's i386 REP.
- 0.81u7             : Added cpu\i386\i386dasm.c. Ville Linde wrote a new i386 disassembler. DASM386 wasn't always showing stuff correctly, and now the i386 core can be compiled without i86.Improved i386/z80 interleaving. This should help with the small pauses. Fixed some stuff in the i386 core. These don't seem to affect the SPI games, but should help with MESS. Improve the i386 and added DS and SS segment prefixes. renamed fs,gs -> segment_FS, segment_GS, added INTO opcode, regression tested and fixed AAS opcode (incorrect behavior in Intel docs), added AAA opcode (with correct behavior), added AAD and AAM opcodes, added CMC opcode, added SETALC opcode which is undocumented, removed a non-existing PUSH8 opcode from groupFE_8, regression tested and fixed SHLD and SHRD opcodes, fixed AF flag calculation and fixed AF flag in SUB and DEC opcodes. Nathan Woods fixed a bug in i386_set_info() when changing the EIP register (cpu\i386\i386.c). Implemented ES, BOUND, DAA, DAS, AAS, INSB, INSW, OUTSB, OUTSW, LES, LDS, HLT, LSS, LFS, LGS, IMUL with a 32 bit adjustment. Fixed some compilation errors under non-GCC compilers. Added also a check enabled when MAME_DEBUG is defined that raises an error if the CPU core executed a negative cycle count in cpuexec.c.
- 0.81u6             : Nathan Woods partially implemented i386 INT, INT3, ES segment override, an IMUL variant, LMSW, a minor 16 bit bug fix, and coprocessor escape instructions. i386 updates [Ville Linde]: Regression tested the i386 core. Found and fixed bugs in several shift/rotate instructions. This corrects the bosses in Raiden Fighters. Completely rewrote REP/REPNE prefix handling. Fixes the following: Battle Balls attract mode runs correctly now, balls no longer all the same color in-game in Battle Balls, E-Jan now coins up, and Viper Phase 1 is now playable (with encrypted gfx).
- 0.81u5             : Nathan Woods implemented i386 in/out instructions and converted printf()/exit() combination of calls to osd_die().
-  8th April     2004: Nathan Woods implements the in/out instructions in the i386 CPU core.
- 0.81u4             : SPI / i386 updates [Ville Linde]. raidnfgt now runs normally and correctly through attract mode and gameplay, modulo the encrypted graphics. Still kinda mesmerizing. viperp1 starts to boot now, but doesn't get very far.
- 0.81u3             : i386 core fixes and SPI improvements [Ville Linde]. Senkyu and E-Jan High School now do something.
- 0.81               : Added i386\i386.c/h, i386intf.h, i386op16.c/h, i386op32.c/h and i386ops.c. i386 CPU core (used by the SPI driver) [Ville Linde].
-  1st April     2004: Ville Linde sent in another update to the i386 CPU core and the Seibu SPI driver, with better 386/z80 communications (but still not correct) and some cleanup.
- 30th March     2004: Tomasz Slanina fixed a unnecessary write in the bit test opcode in the i386 CPU core.
- 28th March     2004: Ville Linde submitted an i386 CPU core and a Seibu SPI system driver supporting Senkyu / Battle Balls, Viper Phase 1, E-Jan High School, Raiden Fighters and Raiden Fighters 2 which would be playable but the graphics are encrypted, and the sound is also not emulated.
- 0.76u1             : Nathan Woods added a few macros for other miscellaneous X86 opcodes. Added a drc_dasm() call, a debug call that uses MAME's I386 disassembler to disassemble DRC'd code (didn't compile, commented out until fixed).
- PCB: Seibu SPI - Advanced Micro Devices AM386DX/DX-40, QFP132 (Rfjet), AM386DX/DXL-25, QFP132 (Rdft), Intel NG80386DX25 (Ejanhs, Viprp1)
- SOURCE: cpu\i386\i386.cpp


6.64  I486

- 0.248              : Use swapendian_int32 (i386\i486ops.hxx) [AJR].
- 0.207              : Added TODO comments to opcodes that effect the cache (i386\i486ops.hxx) [yz70s].
- 0.201              : XADD instructions must set flags based on sum result (i386\i486ops.hxx). This is required by Windows XP setup [yz70s].
- 0.200              : Avoid some unintended undefined behavior. Spotted by cppcheck (i386\i486ops.hxx) [MoochMcGee].
- 0.199              : Don't mask top 8 bits of sgdt for 486 too, fixes win32s (cpu\i386\i486ops.hxx) [Carl].
- 0.185              : Added a CPUID supporting I486DX4 [Carl].
- 0.174              : Changed cpu\i386\i486ops.inc and i486ops.hxx.
- 0.153              : Changed cpu\i386\i486ops.c to i486ops.inc [Oliver Stoeneberg].
- 0.149u1            : (MESS) PC driver cleanup: Moved the ct486 driver to its own file (mess\drivers\ct486.c), to avoid all the legacy stuff in at.c [Dirk Best]. Simplified status idehd flags & fixed ct486 booting in MESS. Fixed ct486 booting with two chd's loaded [smf].
- 0.145u2            : Added 32-bit versions of LMSW, and made LMSW only change the lower 4 bits of CR0 [Barry Rodewald].
- 0.144u5            : Implemented every single documented x87 co-processor opcodes in 386+ CPU cores [Angelo Salese].
- 0.136u4            : John R. Hauser added MAME-ified version of SoftFloat library (lib\softfloat\softfloat.c). NOTE (R. Belmont): There's no portable way to use the host's FPU for high-precision floating point. GCC has extensions which map to Intel's 80-bit extended floats, but support on non-x86/x64 is sketchy and MSVC doesn't support floats > 32 bits at all. I plan to use SoftFloat for the 68030/040 FPU up front, but it will also be useful in the future for emulating the 386/486/Pentium/etc FPUs (Bochs uses it for exactly that purpose).
- 0.136u1            : Dirk Best changed 486 to not support the cpuid instruction by default. Couriersud added BGRA support to -video soft.
- 0.103u4            : Intel i386/i486/Pentium update [Nathan Woods]: Fixed A20 mask implementation. Added A20 mask to debugger translate callback. Implemented Pentium opcode CMPXCHG8B. Fixed XADD, and added support for the 8 and 16 bit variants.
- 0.103u2            : I486 CPU patch [Nathan Woods]: Implemented XADD, INVLPG and CMPXCHG instructions. Made the opcode table const correct.
- 0.101u2            : Ville Linde fixed time stamp counter in the Pentium core.
- 0.100u4            : Updates to the I386 core [Ville Linde]: Added i486, Pentium and Cyrix MediaGX CPUs. Replaced the opcode tables with a dynamically built one. Rewrote the cycle counting to support different CPUs. Added page translation. Tons of bugfixes. Also updated the SPI driver to work with these changes.
- PCB: 80486 (Pangofun)
- SOURCE: cpu\i386\i386.cpp



6.65  i860XR

- 0.224              : Use swapendian_int16/int32 (i860\i860dec.hxx) [AJR].
- 0.201              : Hotfix for coverity issue (cpu\i860\i860dec.hxx) [Alegend45].
- 0.193              : Added cpu\i860\i860dis.h. Removed cpu\i860\i860dasm.cpp.
- 0.180              : Changed the i860 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Added virtual for consistency [smf].
- 0.178              : Fixed an issue on the i860 disassembler that could cause an undefined string to be used (i860\i860dis.cpp) [Nathan Woods].
- 0.174              : Changed cpu\i860\i860dec.inc to i860dec.hxx.
- 0.169              : Fixed MAC compile (cpu\i860\i860.cpp) [Osso].
- 0.153              : Changed cpu\i860\i860dec.c to i860dec.inc [Oliver Stoeneberg].
- 0.150              : Modernized i860 cpu core [Wilbert Pol].
- 0.148u2            : Moved CPU_DISASSEMBLE into the i860 disassembler [smf].
- 0.129u1            : Added cpu\i860\i860dec.c and i860dis.c. Changed description to 'i860XR'. Intel i860 CPU core [Jason Eckhardt].
- 0.129              : Added cpu\i860\i860.c/h and i860dasm.c. Added extremely preliminary i860 disassembler and hooked it up to the vcombat driver [Jason Eckhardt, Andrew Gardner].
- DRIVERS: vcombat.cpp
- SOURCE: cpu\i860\i860.cpp


6.66  80960KA/KB

- 0.284              : Clear burst stall on reset (fixes Sega Model 2 games hanging on soft reset) (i960\i960.cpp) [Matthew Daniels].
- 0.282              : Only trigger interrupts if the input changes to the asserted state (i960\i960.cpp). Implemented interrupt acknowledge and drop interrupts on reset (i960 IRQ; namco\namcofl.cpp). Drop interrupts on reset (i960 IRQ; sega\model2.cpp). logr and logrl use base 2 and always use correct rounding mode (i960\i960.cpp). Split check_irqs() into two separate functions, fixes "Fatal error: I960: 2f2f2f2e: Unhandled 00" during Self-Test in vf2o, overrev and sgt24h. Pending interrupts are only checked after returning from an interrupt, while executing modpc if it causes the current priority to be lowered, and after receiving a test pending interrupts IAC message. Fixed typo in ROUNDRL instruction (i960\i960.cpp). Interrupt control register only returns interrupts actively signalled to the i960; masked interrupts are not returned (sega\model2.cpp) [Matthew Daniels].
- 0.278              : Changed description to 'Intel 80960KA' and 'Intel 80960KB'. Reduced padding area size when servicing interrupt. Prevents crash due to stack overflow during ranking screen in Virtual-On (i960\i960.cpp) [Matthew Daniels]. Make shli produce identical value to shlo because later models where they may differ are unsupported. Distinguish KA and KB device types [AJR].
- 0.277              : Fixed disassembly of ADD<cc>, SUB<cc> & SEL<cc> for cc = l, ne, le, o. Enable decoding of a few more reg-type instructions. Added 0x prefix to unary branch destinations (i960\i960dis.cpp) [AJR].
- 0.273              : Fixed regression with emul opcode [hap].
- 0.272              : Use 32x32=64-bit multiply inlines (i960\i960.cpp) [AJR].
- 0.257              : Correct disassembly of dcinva instruction (i960\i960dis.cpp). 0xad should be disassembled as dcinva, not 0xac [Joshua Scoggins].
- 0.254              : Shift opcode fixes. Ensure logically correct results for shift counts >= 32. Preserve sign for shli (i960\i960.cpp) [AJR].
- 0.250              : Use rotl_32 and rotr_32 for executing rotate instructions. Simplify some bits of code using util::sext (i960\i960.cpp) [AJR].
- 0.242              : Added DMOVT opcode. Fixes activating the debug mode crashes MAME in Virtua Fighter 2 and clones. Note: The dmovt instruction moves a 32-bit word from one register to another and tests the least-significant byte of the operand to determine if it is a valid ASCII-coded decimal digit (001100002 through 001110012, corresponding to the decimal digits 0 through 9). For valid digits, the condition code (CC) is set to 000; otherwise the condition code is set to 010. Added cycle count adjustment for DMOVT instruction [Damian Rogers].
- 0.222              : Added missing opcodes. Rewrote disassembler (i960\i960dis.cpp) [SailorSat]. Added partial support for all IAC messages (i960\i960.cpp) [Damian Rogers]. Log unimplemented IACs [Vas Crabb].
- 0.218              : Fixed dissassembly format output (cpu\i960\i960dis.cpp) [MetalliC].
- 0.217              : Initialized some stuff [Osso].
- 0.210              : Implemented logr and expr opcodes (cpu\i960\i960.cpp) for Power Sled [MetalliC].
- 0.197              : Don't lose register values on read stalls [O. Galibert].
- 0.196              : Changed description to 'Intel i960KB'. Support i960KB burst stall on writes [Angelo Salese].
- 0.195              : Fixed disassembly of REG instructions [AJR]. Support for burst mode stalling save and restore. Experimental FIFO burst mechanism. Cleanups and commentary [Angelo Salese].
- 0.186              : Changed description to 'i960KB'.
- 0.181              : Added scanbyte and IP-relative lda opcodes, masked low bits of branch targets. Removed printf. Preliminary support for CALLS instruction and WIP on FAULTx instructions [R. Belmont].
- 0.180              : Changed the i960 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.170              : More potential workouts for the I960 CPU. Added IGT Game King games (gkigt.cpp) [David Haywood].
- 0.160              : Fixed cosr opcode in i960 (pretty unlikely that it uses sine) [Angelo Salese].
- 0.154              : Save some additional state [Phil Bennett].
- 0.150              : Added 'i960kb' device. Modernized i960 cpu core [Wilbert Pol].
- 0.148u3            : Added i960 opcode cvtilr needed by Zero Gunner [Kale, R. Belmont].
- 0.128u6            : Roberto Zandona fixed i960 nor opcode and added notor opcode.
- 0.128u4            : i960 core switched to pointer state access [Couriersud].
- 0.126u2            : ElSemi fixed incorrect I960 behavior when generating interrupts.
- 0.126u1            : i960 [ElSemi]: Respect the rounding mode for CVTRI.
- 0.122u6            : Ernesto Corvi, ElSemi fixed RET instruction on the i960 core.
- 0.119u1            : Ernesto Corvi fixed SCALER, SCALERL and ATANRL opcodes in the i960 core.
- 0.118u4            : Aaron Giles significantly improved the i386 disassembler. Changed it so that it no longer outputs 'byte ptr' except for ambiguous cases. Updated for full 64-bit disassembly support. Added support for the full IA32 opcode matrix as specified by recent Intel manuals, including all SSE opcodes and variants.
- 0.109u5            : Aaron Giles converted the i960 disassemblers to the new format and added step in/out support where it was obvious.
- 0.106u9            : i960 bugfixes [Ville Linde].
-  2nd June      2006: Ville Linde - One of my i960 core fixes fixed the problems Dead or Alive was having.
- 0.104u4            : Aaron Giles fixed the debugger errors out when you try to run a game using the i960 cpu core. It displays the following error "disasm_generate_bytes: unknown size = 32".)
- 0.88u1             : R. Belmont and Stephan Cecchinel fixed errors in atanr and logepr opcode.
- 0.88               : ElSemi fixed bug in movl opcode.
- 17th October   2004: R. Belmont - ElSemi found a major i960 core bug. That combined with some work I was doing to make a lot of the Model 2 games run better.
- 0.87u2             : i960 updates [R. Belmont]: Added spanbit. Fixed error noted by ElSemi in spanbit and scanbit. Added non-queued interrupts to support games with the interrupt table in ROM (this fixes the colors and hanging in Sky Target, and Pilot Kids will need it too). Added the ability for read/write handlers to declare themselves "noburst", for memory regions which don't auto-increment the address on i960 bulk transfers. General cleanup of the interrupt handling to remove duplicated code. There should be no functional difference. Hack to make Last Bronx run while I track down an i960 core bug that's haunting it.
- 0.87u1             : i960 updates [R. Belmont]. Added support for the following opcodes: nor, addc, subc, atanr, sinr, cosr, tanr, atanrl, logrl, sinrl, cosrl and tanrl. Added those and some others to the disassembler. Added parens for the compiler warning. Fixed stt to only store 3 words instead of 4. Added logepr and cvtri. Fixed cmpr and cmprl - they were comparing garbage instead of the correct registers. Added disassembly for movrl. Added scanbit. Rewrote flushreg, it was *totally* wrong before. HOTD now runs, among others. Added hack to divo so divide by zero doesn't crash MAME (some games read back 0 from the not-yet-existing DSP and do this). More disassembler improvements. Added NAND, EDIV, SCALER, SCALERL, ROUNDR, ROUNDRL, EXPRL, MOVRE, and CPYSRE opcodes. Fixed some errors in interrupt handling. Solves corrupt graphics in fvipers and crashes in fvipers, schamp and dynamcop. Added REMR opcode.
- 29th September 2004: R. Belmont - Added Sky Target (which refuses to set it's palette properly - go figure). Also fixed an i960 core bug that was causing crashes and corrupt graphics in Fighting Vipers and Sonic Championship, among other things.
- 27th September 2004: R. Belmont - A few games that needed some additional i960 core work...Daytona USA, Gunblade, Topskater, Virtual One and Desert Tank.
- 25th September 2004: R. Belmont - You have the right to remain silent! (3 "cop" themed games are now running) - Dynamite Cop, vcop. Actually, being silent is boring so I added sound to all the Model 2 games.
- 24th September 2004: R. Belmont - Even more Model 2 and i960 work... dynabb, The House of The Dead, fvipers, schamp, Zero Gunner and vf2.
- 22nd September 2004: R. Belmont - More Model 2 and i960 work (no new pictures yet, but many more games now start up - Speed Racer). A very nice side effect of the i960 work has surfaced however...
- 21st September 2004: R. Belmont - Added a bunch of i960 opcodes and started picking up one of the pieces left by Olivier Galibert's disk failure (Sega Model 2). Indy 500, Behind Enemy Lines and Virtua Striker will going to be a "Modeler" style driver until further notice. 2D layers, inputs and sound/music only, IOW.
- 0.85u1             : R. Belmont fixed debugger crash when using F10 with the i960 core.
- 0.84u2             : More i960 bugfixes [R. Belmont]: Fixed a brown-paper-bag bug where the PC and AC registers were getting swapped on return from interrupts. Rewrote the frame cache mechanism using a simple FIFO concept (Final Lap R now runs further). Aligned reads and writes now use the full-size paths through the core instead of always breaking everything down into bytes.
- 0.84u1             : R. Belmont fixed bugs in the i960 concmpo, concmpi and modi instructions. Added "text" and hex displays of the AC register for debugging. Added TESTx opcodes to the disassembler.
- 0.82               : Olivier Galibert added a bunch of i960 floating point opcodes and stylistic fixes.
- 0.81u9             : Cleanups of i960 core so the disassembler compiles [Olivier Galibert].
- 0.81u8             : Added i960\i960.c/h and i960dis.c/h. i960 cpu core / disassembler [Olivier Galibert, R. Belmont, Farfetch'd].
- 24th April     2004: R. Belmont sent in a i960 CPU core and disassembler written by him, Olivier Galibert and Farfetch'd, and a preliminary (not working) Namco System FL driver with thanks to information from ElSemi.
- 21st April     2004: R. Belmont - Olivier Galibert started writing a brand-new i960 CPU core for MAME (you get zero guesses why). I added interrupt support and several opcodes and started working on a Namco System FL driver, meaning Speed Racer.
- NOTES: The Intel I960 is a 32Bit RISC processor (QFP132). Richard Mitton wrote a core for the I960 (virtua I960).
- EMULATOR: Nebula Model 2
- PCB: NG80960KA = i960 (Speedrcr, NamcoFL-System), NG80960KB = i960 (Dead or Alive), BehindEnemyLines, ManxTT, DaytonaUSA and VirtuaCop1/2
- DRIVERS: gkigt.cpp, model2.cpp and namcofl.cpp
- SOURCE: cpu\i960\i960.cpp


6.67  Pentium

- 0.268              : Correct buggy fxsave and fxrstor opcodes and let Chihiro show 3D again (i386\pentops.hxx). Correct errors in pentops.hxx caused by bad mmxprolog routine. Currently the mmxprolog routine can raise a #NM exception. But the caller will execute the MMX opcode anyway, unfortunately by fetching the bytes from the first instruction in the exception service routine. This adds a bool return value to mmxprolog so the caller can return too without making a mess (i386\pentops.hxx). x87 stack top set to 0 when entering MMX state, generate #NM only from TS bit. MMX opcodes generate #NM only when TS is set, EM bit generates #UD. Correct various MMX and SSE opcodes in pentops.hxx. Expecially for the case when the source and destination registers are the same. Moved a couple Cyrix routines together with the other ones (i386\pentops.hxx) [yz70s].
- 0.207              : Added TODO comments to opcodes that effect the cache (i386\i486ops.hxx) [yz70s].
- 0.186              : Changed description to 'Pentium'.
- 0.174              : Changed cpu\i386\pentops.inc and pentops.hxx.
- 0.153              : Changed cpu\i386\pentops.c to pentops.inc [Oliver Stoeneberg].
- 0.152              : Added TZCNT instruction handling by having it fall back to use BSF, as it would on a CPU that doesn't support TZCNT (cpu\i386\i386ops.h and pentops.c). Added the ability to read and write to the Pentium and P6 event/performance counter MSRs. Nothing is actually counted, though. Also added reading and writing of the time stamp counter MSR [Barry Rodewald]. Permit more msrs for the pentium BIOS [Carl].
- 0.144u5            : Implemented generic functions for RDMSR and WRMSR opcodes in Pentium CPU core (i.e. no MSR is actually hooked up so far) [Angelo Salese].
- 0.136u4            : John R. Hauser added MAME-ified version of SoftFloat library (lib\softfloat\softfloat.c). NOTE (R. Belmont): There's no portable way to use the host's FPU for high-precision floating point. GCC has extensions which map to Intel's 80-bit extended floats, but support on non-x86/x64 is sketchy and MSVC doesn't support floats > 32 bits at all. I plan to use SoftFloat for the 68030/040 FPU up front, but it will also be useful in the future for emulating the 386/486/Pentium/etc FPUs (Bochs uses it for exactly that purpose).
- 0.103u4            : Intel i386/i486/Pentium update [Nathan Woods]: Fixed A20 mask implementation. Added A20 mask to debugger translate callback. Implemented Pentium opcode CMPXCHG8B. Fixed XADD, and added support for the 8 and 16 bit variants.
- 0.100u4            : Updates to the I386 core [Ville Linde]: Added i486, Pentium and Cyrix MediaGX CPUs. Replaced the opcode tables with a dynamically built one. Rewrote the cycle counting to support different CPUs. Added page translation. Tons of bugfixes. Also updated the SPI driver to work with these changes.
- NOTES: Intel Pentium
- GAMES: Psychic Force 2012 (Taito 1997)
- SOURCE: cpu\i386\i386.c + drivers\taitowlf.cpp



6.68  Pentium MMX

- 0.204              : Derive Pentium MMX, Pentium II, Pentium III classes from pentium_pro_device. Pentium MMX class derives from pentium_device [yz70s].
- 0.156              : MMX disassembly fixes (cpu\i386\i386dasm.c) [O. Galibert].
- 0.152              : Fixed P6 CMOVcc instructions, and added CMOV feature flag to Pentium Pro and Pentium II CPUs. Added MMX feature flag to Pentium MMX (cpu\i386\i386.c and pentops.c) [Barry Rodewald].
- 0.149u1            : Added lots of MMX and SSE opcodes to the i386 processor. Added the fcomip x87 opcode. Don't take an smi until current instruction is complete [Samuele Zannoli].
- 0.146u3            : Ville Linde added CPU types for Pentium MMX, Pentium Pro, Pentium II, Pentium III and Pentium 4. Firewave fixed assertion with new PENTIUM device types.
- SOURCE: cpu\i386\i386.cpp



6.69  Pentium Pro

- 0.152              : Fixed P6 CMOVcc instructions, and added CMOV feature flag to Pentium Pro and Pentium II CPUs. Added MMX feature flag to Pentium MMX (cpu\i386\i386.c and pentops.c) [Barry Rodewald].
- 0.146u3            : Ville Linde added CPU types for Pentium MMX, Pentium Pro, Pentium II, Pentium III and Pentium 4. Firewave fixed assertion with new PENTIUM device types.
- SOURCE: cpu\i386\i386.cpp



6.6A  Pentium II

- 0.204              : Derive Pentium MMX, Pentium II, Pentium III classes from pentium_pro_device [yz70s].
- 0.152              : Fixed P6 CMOVcc instructions, and added CMOV feature flag to Pentium Pro and Pentium II CPUs. Added MMX feature flag to Pentium MMX (cpu\i386\i386.c and pentops.c) [Barry Rodewald].
- 0.146u3            : Ville Linde added CPU types for Pentium MMX, Pentium Pro, Pentium II, Pentium III and Pentium 4. Firewave fixed assertion with new PENTIUM device types.
- SOURCE: cpu\i386\i386.cpp



6.6B  Pentium III

- 0.245              : Enable CMOV feature for Pentium III and 4. Added PSN stub feature for Pentium III (i386\i386.cpp) [Angelo Salese].
- 0.204              : Derive Pentium MMX, Pentium II, Pentium III classes from pentium_pro_device [yz70s].
- 0.160              : Added SSE opcodes of the form 66 0f xx and f2 0f xx [yz70s].
- 0.159              : Updates for the future and more (cpu\i386\i386.c, i386ops.h and pentops.inc) [Samuele Zannoli]: Added infrastructure to support opcodes ?? 0f 38 ?? and ?? 0f 3a ??. Added placeholders in opcode table for all instructions not yet implemented. Fixed opcode group 0f 73. Added opcode group 66 0f 73. Moved SSE opcodes movd movdqa to their own routine. Moved SSE opcodes pinsrw pextrw to ther own routine. Added opcodes SSE punpcklbw, punpcklwd, punpckldq and punpcklqdq.
- 0.158              : SSE opcodes improvements [Samuele Zannoli]: Added opcodes MOVHLPS MOVLHPS. Safer implementation of PACKUSWB PACKSSDW SHUFPS UNPCKLPS UNPCKHPS. The safer implementation is needed in cases where the source and destination registers are the same (cpu\i386\pentops.inc).
- 0.149u1            : Added lots of MMX and SSE opcodes to the i386 processor. Added the fcomip x87 opcode. Don't take an smi until current instruction is complete [Samuele Zannoli].
- 0.146u3            : Ville Linde added CPU types for Pentium MMX, Pentium Pro, Pentium II, Pentium III and Pentium 4. Correct Chihiro CPU type to Pentium III. Firewave fixed assertion with new PENTIUM device types.
- SOURCE: cpu\i386\i386.cpp



6.6C  Pentium 4

- 0.245              : Enable CMOV feature for Pentium III and 4. Added PSN stub feature for Pentium III (i386\i386.cpp) [Angelo Salese].
- 0.156              : Some Pentium stuff to make Sega Lindbergh go further. Fixed problems when a BIOS uses SSE XMM4 as call stack. More support of the magic 0x66 prefix (cpu\i386\pentops.inc) [O. Galibert].
- 0.149u1            : Added lots of MMX and SSE opcodes to the i386 processor. Added the fcomip x87 opcode. Don't take an smi until current instruction is complete [Samuele Zannoli].
- 0.146u3            : Ville Linde added CPU types for Pentium MMX, Pentium Pro, Pentium II, Pentium III and Pentium 4. Firewave fixed assertion with new PENTIUM device types.
- SOURCE: cpu\i386\i386.cpp



6.7   MediaGX

- 0.277              : Correct internal_io_map from MAME 0.276 commit [Angelo Salese].
- 0.276              : Lift cargo cult 0xe0-0xef noprw (machine\mediagx_cs5530_bridge.cpp) [Angelo Salese].
- 0.262              : Added 'MediaGX CS5530 Bridge' device.
- 0.186              : Changed description to 'Cyrix MediaGX'.
- 0.160              : Correct notes, install port handlers bridge positions taken from picture in MediaGX document from Carl (drivers\pinball2k.c). Implemented missing opcodes, but no disassembly. swe1pb (at least) boots to CMOS checksum failure prompt now [Peter Ferrie].
- 0.100u4            : Updates to the I386 core [Ville Linde]: Added i486, Pentium and Cyrix MediaGX CPUs. Replaced the opcode tables with a dynamically built one. Rewrote the cycle counting to support different CPUs. Added page translation. Tons of bugfixes. Also updated the SPI driver to work with these changes.
- NOTES: Cyrix MediaGX
- PCB: Cyrix CX5510Rev2, QFP208 (A51site4)
- DRIVERS: astropc.cpp, dawg.cpp, funkball.cpp, igspc.cpp, matrix.cpp, mediagx.cpp and pinball2k.cpp
- SOURCE: cpu\i386\i386.cpp



6.8   Athlon XP

- 0.253              : The Athlon processor has been updated to support writes in the as_opcodes space (i386\athlon.cpp) [yz70s].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.211              : Removed some MSVC warnings [yz70s].
- 0.210              : Added i386\athlon.cpp/h. Added more msrs releted to SMM to Athlon XP (i386\cpuidmsrs.hxx and i386.cpp/h). Athlon XP now supports system management mode [yz70s]. Improved splitting of unaligned accesses (excluding program fetches). This entails a major code reorganization just to keep the scale of it all halfway sane [AJR].
- 0.209              : Athlon XP updates to memory access: Now Athlon XP supports WrMem and RdMem bits in fixed range MTRRs. Accesses to the first megabyte can be directed to system memory (ram) or memory-mapped-io (mmio) (the pci bus). Above 1mb accesses below the top_mem MSR address ram the others mmio. At reset everyting is directed to mmio. Addresss spaces work in the following way. AS_PROGRAM is used for ram. AS_DATA is used for mmio. AS_OPCODES is used by the debugger disassembler and in memory views to look at the memory contents from the point of view of the microprocessor, including the cache. Also some class members have been added to the save state [yz70s].
- 0.208              : Added i386\cache.h. Added a simple cache to the Athlon XP processor. A single 64K 2-way set associative cache. Used for both instructions and data. Enabled only for addresses in the first megabyte. Works always in writeback mode. It is needed by the NVIDIA nForce motherboard BIOS that uses it to simulate a block of ram at address d0000 before ddr ram is configured (i386\i386.cpp, i386priv.h, i486ops.hxx and cpuidmsrs.hxx) [yz70s].
- 0.205              : Added placeholders for athlonxp msrs [yz70s].
- 0.201              : Added Athlon XP processor. Set correct feature flags [yz70s].
- DRIVERS: (MESS) nforcepc.cpp
- SOURCE: cpu\i386\i386.cpp



6.9   I8087 FPU

- 0.252              : Fixed FPU (machine\i8087.cpp) [Carl].
- 0.245              : fsave resets the FPU (i386\x87ops.hxx and machine\i8087.cpp) [Carl].
- 0.222              : Simplified some handlers [Osso].
- 0.221              : Added alias for fstp st(i) (machine\i8087.cpp) [Carl].
- 16th May       2005: R. Belmont - Extracting ROM constants from the 8087 math coprocessor's die (http://www.righto.com/2020/05/extracting-rom-constants-from-8087-math.html).
- 0.218              : Save pointers in env (machine\i8087.cpp) [Carl].
- 0.206              : Replaced i8087 FPU memory interface with address space finder (machine\i8087.cpp) [AJR].
- 0.193              : Added machine\i8087.cpp/h. Separated i8087 FPU device and added save state [Carl]. Fixed i8087 regression pending further investigation with (MESS) Fanuc driver [Andrey Merkulov].
- DRIVERS: (MESS) a7150.cpp, fanucspmg.cpp and mbc55x.cpp
- SOURCE: machine\i8087.cpp




7.    Texas Instruments


7.1   TMS0270

- 0.247              : Fixed problem with power off and ctl direction [hap].
- 0.208              : Moved TMS0270 DEVCB binders to base class [hap].
- 0.172              : Added cpu\tms1000\tms0270.cpp/h. Preparation for splitting tms1k source file [hap].
- DRIVERS: (MESS) tispeak.cpp and tispellb.cpp
- SOURCE: cpu\tms1000\tms0270.cpp


7.11  TP0320

- 0.172              : Added cpu\tms1000\tp0320.cpp/h. Added TP0320 CPU. Make DISASM tables human-readable. Preparation for splitting tms1k source file. Added TP0320 microinstructions decode [hap].
- 0.133u3            : Wilbert Pol added support TMS1000 family models TMS1000/1070/1100/1200/1270/1300. Added support for configuration of output PLA to the tms0980/tms1000 interface.
- NOTES: TP0320 is TI's first CMOS MCU with integrated LCD controller, the die is still very similar to TMS0980.
- DRIVERS: (MESS) hh_tms1k.cpp
- SOURCE: cpu\tms1000\tms0270.cpp


7.12  TMS0970

- 0.182              : Fixed problem with DDIG, should fixed (MESS) Comp IV LEDs [hap].
- 0.172              : Added cpu\tms1000\tms0970.cpp/h. Preparation for splitting tms1k source file [hap].
- 0.133u3            : Wilbert Pol added support TMS1000 family models TMS1000/1070/1100/1200/1270/1300. Added support for configuration of output PLA to the tms0980/tms1000 interface.
- DRIVERS: (MESS) hh_tms1k.cpp and ticalc1x.cpp
- SOURCE: cpu\tms1000\tms0970.cpp


7.13  TMS0980

- 0.172              : Added cpu\tms1000\tms0980.cpp/h. Preparation for splitting tms1k source file [hap].
- 0.169              : Use TMS0270 PLA for TMS1980 [hap].
- 0.166              : Added TMS1980 device (TMS1980 is a TMS0980 with a TMS1x00 style opla). Fixed TMS1980 TDO opcode [hap].
- 0.162              : Added pinout for TMS0980, TMS1xx0 and TMS1400 chips [hap].
- 0.159              : Mnemonics to uppercase (tms0980\tms0980d.c) [hap].
- 0.158              : Fixed s_flags[] array out of bounds access. Fixed disasm for rbit and sbit. Added (MESS) TI Language Tutor (preliminary, need to figure out why it's buggy). Preliminary support for TMS1400. Added TMS1400 callstack. TMS1400 opcode 0x09 is F_COMX8 anyway [hap].
- 0.157              : Rewrote TMS1xxx MCU core and added support for a couple of (MESS) classic Texas Instruments handheld calculators [hap, seanriddle]. Readded microinstructions info. Added tmc0270_cpu_device, preliminary. Get rid of c_output_pla warning [hap]. Small cleanup [Wilbert Pol]. Preliminary emulation of Speak & Spell hardware with TMS0980 [hap, Lord Nightmare]. Fixed status being reset too early [hap].
- 0.156              : Get rid of old TMS0980 printfs. Minor fixes. Added TMS0970 device [hap].
- 0.154              : Fixed usage of uninitialized members in tms1xxx_cpu_device [Oliver Stoeneberg].
- 0.149u1            : Modernized TMS1xxx cpu cores (TMS0980, 1000, 1070, 1200, 1270, 1100 and 1300) [Wilbert Pol].
- 0.148              : Write to the log whenever an unknown output PLA config is encountered [Wilbert Pol].
- 0.147u3            : Fixed debugger crashes on TMS1100 CPUs. Some small fixes for the TMS1100 CPUs [Wilbert Pol].
- 0.147u1            : device_func to device callback change (tms0980\tms0980.c/h) [Miodrag Milanovic].
- 0.133u3            : Wilbert Pol added support for configuration of output PLA to the TMS0980/TMS1000 interface. Added support TMS1000 family models TMS1000/1070/1100/1200/1270/1300.
- 0.132u3            : Added cpu\tms0980\tms0980.c/h and tms0980d.c. Wilbert Pol added TMS0980 cpu core.
- NOTES: This CPU core has not been thoroughly tested. Several features may still be incomplete, missing, or broken [Wilbert Pol].
- DRIVERS: (MESS) cnsector.cpp, comp4.cpp, merlin.cpp, microvsn.cpp, simon.cpp, starwbc.cpp, stopthie.cpp and ticalc1x.cpp
- SOURCE: cpu\tms1000\tms0980.cpp


7.2   TMS1000

- 0.264              : Moved opcode mnemonics enum out of header file (tms1000\tms1k_dasm.cpp) [hap].
- 0.247              : Increase R port to 32bit. Move known pinouts to device headers. Moved common memory maps to base file. Added stack levels to constructor list. Added read/write prefix to k/r/o devcb names [hap].
- 0.210              : Init lfsr pc tables in constructor [AJR].
- 0.195              : Fixed memory map override. Cleanup memmap declarations [hap].
- 0.193              : Added cpu\tms1000\tms1k_dasm.h and cpu\tms1000\tms1000c.cpp/h. Fixed 9bit branch offset (tms1k_dasm.cpp). Added halt pin to TMS1000. Split execute_run into execute_one. Added preliminary TMS1000C. Added correct TMS1000C microinstructions PLA [hap].
- 0.185              : Added Motorola MC141000 and MC141200 [hap].
- 0.180              : Changed the TMS1000 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.173              : Added TMS1700/1730 MCU types [hap].
- 0.172              : Added cpu\tms1000\tms1000.cpp/h. Preparation for splitting tms1k source file [hap].
- 0.133u3            : Wilbert Pol added support TMS1000 family models TMS1000/1070/1100/1200/1270/1300. Added support for configuration of output PLA to the tms0980/tms1000 interface.
- DRIVERS: bfm_blackbox.cpp
- SOURCE: cpu\tms1000\tms1000.cpp



7.21  TMS1100
- 0.221              : Added default TMS1100 microinstructions [hap].
- NOTES: The Texas Instruments TMS1100 is nearly the same as TMS1000, some different opcodes and with double the RAM and ROM.
- DRIVERS: (MESS) hh_tms1k.cpp and tispeak.cpp
- SOURCE: cpu\tms1000\tms1100.cpp


7.22  TMS1300
- 0.247              : Added 'Hit Parade 108 / 144 / 160' (Atari Europe 1977) with TMS1300 CPU [hap, Sean Riddle].
- 0.221              : Added default TMS1100 microinstructions [hap].
- NOTES: Texas Instruments TMS1300
- DRIVERS: hitparade.cpp
- SOURCE: cpu\tms1000\tms1100.cpp


7.23  TMS1400

- 0.247              : Added disassembler for TMS1400 [hap].
- 0.172              : Added cpu\tms1000\tms1400.cpp/h. Preparation for splitting tms1k source file [hap].
- 0.133u3            : Wilbert Pol added support TMS1000 family models TMS1000/1070/1100/1200/1270/1300. Added support for configuration of output PLA to the tms0980/tms1000 interface.
- DRIVERS: (MESS) hh_tms1k.cpp and k28m2.cpp
- SOURCE: cpu\tms1000\tms1400.cpp


7.24  TMS1475
- 0.247              : Added TMS1475 [hap].
- NOTES: Texas Instruments TMS1475, 40-pin DIP, 22 R pins.
- DRIVERS: (MESS) hh_tms1k.cpp
- SOURCE: cpu\tms1000\tms1400.cpp


7.25  TMS1600
- 0.161: Added preliminary TMS1600 [hap].
- DRIVERS: (MESS) hh_tms1k.cpp, ticalc1x.cpp, tispeak.cpp
- SOURCE: cpu\tms1000\tms1400.cpp


7.26  TMS1990
- 0.160: Added TMS1990 device. Added skeleton driver for (MESS) TI Little Professor [hap].
- DRIVERS: (MESS) ticalc1x.cpp
- SOURCE: cpu\tms1000\tms0970.cpp


7.27  TMS2100
- 0.247              : Added tms1000\tms2100.cpp/h. Added disassembler for TMS2100. Added TMS2xxx skeleton devices. Added some of the TMS2100 opcodes. Added timer interrupt, interrupt pin and event counter [hap].
- DRIVERS: ???
- SOURCE: tms1000\tms2100.cpp


7.28  TMS2400
- 0.247              : Added tms1000\tms2400.cpp/h. Added disassembler for TMS2400. Added TMS2xxx skeleton devices [hap].
- DRIVERS: (MESS) hh_tms1k.cpp
- SOURCE: tms1000\tms2400.cpp



7.3   TMS7000

- 0.282              : Clean up code in disassembler (tms7000\7000dasm.cpp) [AJR].
- 0.238              : Added sound to techno.cpp (TMS7000 CPU2) [Robbbert].
- 0.227              : Fixed JPZ mnemonic and offsets for BTJO and BTJZ (inherent) in disassembly [Tim Lindner].
- 0.222              : Show A, B and all bits of PC in debug state [AJR].
- 0.221              : Added divide-by-4 mask option for clocking [AJR]. Simplified some handlers [Osso].
- 0.211              : Apply Tim's fix for timer divider [hap].
- 0.205              : Removed MCFG [Ryan Holtz].
- 0.193              : Added cpu\tms7000\7000dasm.h.
- 0.192              : Converted I/O ports to callbacks [AJR].
- 0.187              : Fixed internal ROM region mapping. Fixed other TMS70xx internal ROM regions properly (drivers\cc40.cpp, exelv.cpp and ti74.cpp) [AJR].
- 0.180              : Changed the TMS7000 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu/tms7000/tms70op.inc to tms70op.hxx.
- 0.155              : Fixed TMS7000 sbb opcode. Fixed TMS70C46 external memory mode. Added TMS70C46 dockbus stub. Added notes [hap].
- 0.154              : Removed cpu\tms7000\tms70tb.inc. Rewrote bcd_add/sub according to official doc. Small cleanup. Added more cpu types for TMS7000 family. Rewrote most of tms7000, fixing a few issues and adding preliminary support for TMS70x1/2 family. Fixed irqline problem. Added some notes. Shut up debugger [hap]. Fixed usage of uninitialized members in tms7000_device [Oliver Stoeneberg].
- 0.153              : Changed cpu\tms7000\tms70op. to tms70op.inc and tms70tb.c to tms70tb.inc [Oliver Stoeneberg]. Modernized TMS7000 cpu core [Wilbert Pol].
- 0.140u2            : Gilles Fetis correct two TMS7000 opcodes: Typo in inv_b and JPZ was wrong in official TI document.
- 0.135u2            : Wilbert Pol fixed TMS7000 disassembly of PCREL addressing mode.
- 0.128u6            : Pointer-ified the TMS7000 CPU core [Aaron Giles].
- 0.111u2            : Added cpu\tms7000\tms7000.c/h, tms70op.c, tms70tb.c and 7000dasm.c. Added TMS7000 emulator [Tim Lindner].
- 0.81u6             : Nathan Woods added the MESS specific TMS7000 core to the list of CPU cores.
- DRIVERS: techno.cpp
- SOURCE: cpu\tms7000\tms7000.cpp


7.4   TMS99xx

- 0.209              : Changed setaddress handling for TMS99xx CPUs (write operation, including DBIN state). Added missing initialization of m_ready_bufd; modernized logging. Combined DBIN/IAQ operation with setaddress, no need for separate callbacks. Checked min/max cycles. Changed setaddress method signature to (address, buslines); treating an address as a value to be written does not work with memory maps [Michael Zapf].
- 0.153              : TMS99xx CPU family gone to DEVCB2 [Michael Zapf].
- 0.151              : Added cpu\tms9900\tms99com.h. Common parts of TMS99xx CPUs [Michael Zapf].
- 0.148u2            : Added TMS9900, TMS9980 & TMS9995 to UNIDASM. Other TMS99xx cpu cores are generated with macros, including the CPU_DISASSEMBLE [smf].
- 0.146u3            : Introduced symbolic constants for TMS99xx interrupt lines. Added a special RESET line handled by the CPU, not by the emulator core. TMS9928a/V9938: Introduced dedicated RESET line. TMS99xx status register parity bit handling was missing in some commands [Michael Zapf].
- 0.144              : Michael Zapf fixed TMS99xx STCR command.
- 0.128u6            : Pointer-ified the TMS99xx CPU core [Aaron Giles].
- 0.109u4            : Aaron Giles cleaned up TMS99xx core debugging and converted to new disassembler syntax, adding step over/out support.
- 0.96u1             : Brad Oliver fixed PPC assembly code in the TMS99xx core.
- 0.36b13            : Raphael Nabet added other members of the TMS99xx family.
- SOURCE: cpu\tms9900\tms9900.cpp, tms9980a.cpp and tms9995.cpp



7.41  TMS9900

- 0.265              : Fixed undefined behaviour when reset occurs during a data derivation sequence (tms9900\tms9900.cpp) [Michael Zapf].
- 0.238              : Fixed PC display for watchpoint hits (tms9900\tms9900.cpp) [AJR].
- 0.209              : Modernized logging, fixed LDCR/STCR handling of reg indirect/auto-inc mode (*Rx+) [Michael Zapf].
- 0.208              : CRU addressing change: Shift all CRU addresses by 1 in memory maps. This makes CRU addressing more consistent with both register values and external address lines. (CRUOUT is multiplexed with the lowest address line on the 8-bit bus versions). Addressing for CRU read accesses is now the same as it has been for CRU write accesses: one address for each bit. This simplifies the CPU cores (which were already emulating bit access times), though it means some read handlers now have to do some additional work. CRU space is now little-endian, despite the big-endian memory organization, because less significant bits correspond to lower CRU addresses. Notes on CRU addressing. The current emulation of the CRU space involves a 1-bit address shift, reflecting the one-to-one correspondence between CRU bits and words (not bytes) in the lower part of the memory space. (On the TMS9980A and TMS9995, CRUOUT is multiplexed with the least significant address line.) Thus, what TI's documentation calls the software address (the R12 base value plus the bit offset multiplied by 2) is used in address maps and CPU-side operations. MAME's memory architecture automatically translates these to right-justified hardware addresses in the process of decoding offsets for read/write handlers, which is more typical of what peripheral devices expect (Note also that address spaces do not support data widths narrower than 8 bits, so these handlers must specify 8-bit types despite only one bit being useful) [AJR]. Fixed handling of C and OV status bits for INV and SLA instructions [Michael Zapf].
- 0.193              : Added cpu\tms9900\9900dasm.h.
- 0.180              : Removed cpu\tms9900\99xxcore.h. Changed the TMS99xx disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.178              : Added save state support to TMS99xx; replaced new/delete by unique_ptr [Michael Zapf].
- 0.173              : Log output changed [Michael Zapf].
- 0.155              : Removed antiquated #include - compiles fine without [Tafoid].
- 0.154              : Fixed usage of uninitialized member in tms99xx_device. Fixed stack-buffer-overflow in tms9995_device::state_string_export() and tms99xx_device::state_string_export() [Oliver Stoeneberg]. Removed tms99xx_device spaces in state names, setting register value now possible [Miodrag Milanovic].
- 0.153              : Added cpu\tms9900\ti990_10.h. Removed cpu\tms9900\99xxstat.h, ti990_10l.c, tms9900l.c and tms9900l.h. Replacing legacy implementations in TMS99xx. Removed legacy code. Converted TMS9900 to DEVCB2 [Michael Zapf].
- 0.152              : Improved TMS9900 debugging output and cycle fine-tuning [Michael Zapf].
- 0.151              : New AM_(DEV)SETOFFSET feature for address maps (Specifies a handler for a 'set address' operation. The intended use case for this operation is to emulate a split-phase memory access: The caller (usually a CPU) sets the address bus lines using set_address. Some component may then react, for instance, by asserting a control line like WAIT before delivering the data on the data bus. The data bits are then sampled on the read operation or delivered on the write operation that must be called subsequently. It is not checked whether the address of the set_address operation matches the address of the subsequent read/write operation. The address map translates the address to a bucket and an offset, hence the name of the macro. If no handler is specified for a bucket, a set_address operation hitting that bucket returns silently). Application of the set_address (AM_SETOFFSET) feature to TMS9900 CPU. TMS9900 CPU now utilizing split addressing (setaddress ... read/write). Fixed debug memory access. Various cleanups [Michael Zapf].
- 0.150              : Force word-aligned workspace pointer and program counter [Michael Zapf].
- 0.148u2            : Fixed uninitialized variables in cpu\tms9900\tms9900.c [Oliver Stoeneberg]. Added TMS9900 to UNIDASM [smf]. Force word-aligned workspace pointer and program counter in TMS9900 [Michael Zapf].
- 0.147u3            : Michael Zapf fixed TMS9900 overflow detection in INC and DEC opcodes.
- 0.147              : Oliver Stoeneberg removed some astring::stringbuffer() usage - fixes potential missing \0 termination (cpu\tms9900\tms9900.c).
- 0.146u3            : Michael Zapf fixed TMS9900 register autoincrement for DIV operation.
- 0.146u2            : Michael Zapf fixed some issues with the TMS9900 LOAD interrupt (NMI) and an uninitialized variable. Changed tms9900.c to allow for subclassing tms9900 and tms9980a from a common parent. Fixed some issues with the LOAD interrupt (NMI) and an uninitialized variable.
- 0.146u1            : Added cpu\tms9900\tms9900l.c/h and ti990_10l.c. New TMS9900 and TMS9995 implementation with proper control line handling and wait state generation. Previous implementation has been renamed to *l.{c,h} and drivers point to the old implementation until they are adapted to the new version [Michael Zapf]. Fixed compile error [Wilbert Pol].
- 0.132u2            : Olivier Galibert fixed breakpoints in the TMS9900 CPU core.
- 0.128u4            : Aaron Giles fixed missing *_get_info functions in the TMS9900 core.
- 0.119u3            : Removed cpu\tms9900\9900stat.h.
- 0.77u3             : TMS9900 inline asm update [Brad Oliver]. The syntax for the inline PPC assembly in the TMS9900 core has changed slightly.
- 0.95u4             : Added cpu\tms9900\ti990_10.c. Raphael Nabet added several TMS9900 enhancements and variants from MESS.
-  3rd December  2003: Brad Oliver fixed the inline PPC assembly in the TMS9900 CPU core.
- 0.69               : Adds a test for the GNU C compiler to skip some POWERPC inline assembler not compatible with the GNU assembler format (cpu\tms9900\9900stat.h + 99xxstat.h) [Andrea Mazzoleni].
- 0.36b15            : Added cpu\tms9900\9900stat.h.
- 0.36b13            : Added cpu\tms9900\99xxcore.h and 99xxstat.h. Removed cpu\tms9900\9900stat.h.
- 0.36b9             : Updated the TMS9900 emulator [Raphael Nabet].
- 28th September 1999: Raphael Nabet sent in another TMS9900 update.
-  1st September 1999: Raphael Nabet sent in an update to the TMS9900 core.
- 10th May       1999: Juergen Buchmueller fixed a TMS9900 debugger bug.
- 0.35b2             : Added tms9900\9900stat.h. Removed tms9900\tms9900c.h.
- 0.34b6             : Added tms9900\tms9900.c/h, 9900dasm.c and tms9900c.h. TMS9900 emulator [Andy Jones, based on original code by Ton Brouwer].
- NOTES: This is the original processor from 1976.
- DRIVERS: getaway.cpp
- SOURCE: cpu\tms9900\tms9900.cpp


7.42  TMS9940
- NOTES: The embedded version (1979) of the TMS9900.


7.43  TMS9980A

- 0.209              : Don't completely block reads from debugger [hap].
- 0.208              : CRU addressing change: Shift all CRU addresses by 1 in memory maps. This makes CRU addressing more consistent with both register values and external address lines (CRUOUT is multiplexed with the lowest address line on the 8-bit bus versions). Addressing for CRU read accesses is now the same as it has been for CRU write accesses: one address for each bit. This simplifies the CPU cores (which were already emulating bit access times), though it means some read handlers now have to do some additional work. CRU space is now little-endian, despite the big-endian memory organization, because less significant bits correspond to lower CRU addresses [AJR].
- 0.203              : Correct endianness (tools\unidasm.cpp). Internalized clock divider [AJR].
- 0.178              : Added save state support to TMS99xx; replaced new/delete by unique_ptr [Michael Zapf].
- 0.153              : Removed cpu\tms9900\tms9980al.c. Removed some unused legacy things [Wilbert Pol]. Converted TMS9980A to DEVCB2 Michael Zapf].
- 0.152              : Improved TMS9980A debugging output, cycle fine-tuning [Michael Zapf].
- 0.151              : Changed description to 'TMS9980A'. TMS9980 CPU now utilized split addressing (setaddress ... read/write). Using new TMS9980 implementation in cosmicg, jpmsru.c, jubileep, jvh.c, looping.c, supertnk and tmspoker. Various cleanups [Michael Zapf].
- 0.148u2            : Added TMS9980 to UNIDASM [smf].
- 0.146u2            : Added cpu\tms9900\tms9980a.h. Michael Zapf added cycle-precise implementation of TMS9980a; changed TMS9900.c to allow for subclassing TMS9900 and TMS9980a from a common parent.
- 0.146u1            : Added cpu\tms9900\tms9980al.c. Changed description to 'TMS9980AL/TMS9981L'.
- 0.77u3             : TMS9900 inline asm update [Brad Oliver]. The syntax for the inline PPC assembly in the TMS9900 core has changed slightly.
- 0.36b13            : Added cpu\tms9900\tms9980a.c.
- 0.36b11            : Raphael Nabet made some changes to the TMS9900 emulation that completely screw up Cosmic Guerilla.
- 0.36b9             : Updated the TMS9900 emulator [Raphael Nabet].
- 28th September 1999: Raphael Nabet sent in another TMS9900 update.
-  1st September 1999: Raphael Nabet sent in an update to the TMS9900 core.
- 10th May       1999: Juergen Buchmueller fixed a TMS9900 debugger bug.
- 0.34b6             : TMS9900 emulator [Andy Jones, based on original code by Ton Brouwer].
- NOTES: 8-bit variant of the TMS9900. Two version: TMS9980A and TMS9981 with an extra clock and simplified power supply.
- PCB: TMS9980 (Looping, Skybump), TMS9980ANL-Y8130 (Supertnk)
- DRIVERS: cosmicg.cpp, jpmsru.cpp, jpmsru.cpp, jubilee.cpp, jvh.cpp, looping.cpp, supertnk.cpp and tmspoker.cpp
- SOURCE: cpu\tms9900\tms9980a.cpp


7.44  TMS9981
- 0.203              : Added TMS9981 type [AJR].
- NOTES: The TMS9981 is almost identical to TMS9980A except for deleting the -5V Vbb input and allowing a crystal oscillator to be connected to pins 34 and 33 (OSCOUT). The D0-D7, INT0-2 and /PHI3 pins are shifted to accommodate this feature.
- SOURCE: cpu\tms9900\tms9980a.cpp



7.45  TMS9995

- 0.244              : Byte write to the decrementer fills the other byte with the same value. Note: Tests on a real 9995 show that both bytes have the same value after a byte operation [Michael Zapf].
- 0.238              : Fixed PC not displaying when watchpoint hit [Robbbert].
- 0.229              : Fixed debugger problem when writing values into memory (MESS Myarc Geneve 9640) and added debugger method to TMS9995 [Michael Zapf].
- 0.226              : Initialized one variable which caused crashes in formula1.cpp [Osso].
- 0.222              : Fixed different behaviour of the (MESS) tutor.cpp driver in the DEVNOCLEAR branch [Osso].
- 0.217              : Make address visible on address bus during on-chip operations [Michael Zapf].
- 0.208              : CRU addressing change: Shift all CRU addresses by 1 in memory maps. This makes CRU addressing more consistent with both register values and external address lines (CRUOUT is multiplexed with the lowest address line on the 8-bit bus versions). Addressing for CRU read accesses is now the same as it has been for CRU write accesses: one address for each bit. This simplifies the CPU cores (which were already emulating bit access times), though it means some read handlers now have to do some additional work. CRU space is now little-endian, despite the big-endian memory organization, because less significant bits correspond to lower CRU addresses [AJR]. Fixed handling of C and OV status bits for INV and SLA instructions [Michael Zapf].
- 0.207              : Fixed double-triggered INT1/4 by clearing the INT1/4 latch [Michael Zapf].
- 0.203              : Correct endianness (tools\unidasm.cpp) [AJR].
- 0.198              : Fixed latching of pulsed interrupts [Michael Zapf].
- 0.193              : Fixed debugger do command (thanks to Ryan Holtz) [Robbbert]. Fixed READY check on RESET (auto-waitstate) [Michael Zapf].
- 0.178              : Added save state support to TMS99xx; replaced new/delete by unique_ptr [Michael Zapf].
- 0.173              : Logging changed. Fixed HOLD handling and added synchronous RESET. Changed method names for some input lines [Michael Zapf]. Clean up MAME drivers which needed adjustment to match changes to the TMS9995 (drivers\jpmmps.cpp, jpms80.cpp, looping.cpp, nsm.cpp, nsmpoker.cpp and pachifev.cpp) [Tafoid].
- 0.154              : Fixed usage of uninitialized member in tms9995_device [Oliver Stoeneberg].
- 0.153              : Removed cpu\tms9900\tms9995l.c. Removed some unused legacy things [Wilbert Pol]. Minor debugging stuff and using freq constant (cpu\tms9900\tms9995.c and mess\drivers\ti99_8.c). Converted TMS9995 to DEVCB2 [Michael Zapf].
- 0.151              : Changed description to 'TMS9995'. TMS9995 CPU now utilized split addressing (setaddress ... read/write). Fixed broken IDLE in TMS9995; various cleanups. Minor TMS9995 changes for better debugging. Switch firebird, jpmmps.c, jpms80.c, nsmpoker, looping.c, pachifev and nsm.c to modern TMS9995 implementation. Fixed stuck decrementer interrupt. Fixed broken MID interrupt handling. Re-fixed decrementer. Fine-tune TMS9995 cycles. Another fix for the decrementer, slowing it down. Allow debugger to see the on-chip memory. Fixed a missing address alignment for word operations [Michael Zapf].
- 0.150              : Fixed TMS9995 divide operations. Force word-aligned workspace pointer and program counter in TMS9995 [Michael Zapf].
- 0.148u2            : Fixed uninitialized members in cpu\tms9900\tms9995.c [Oliver Stoeneberg]. Added TMS9995 to UNIDASM [smf].
- 0.147u3            : Michael Zapf fixed TMS9995L overflow detection in INC and DEC opcodes.
- 0.147              : Oliver Stoeneberg removed some astring::stringbuffer() usage - fixes potential missing \0 termination (cpu\tms9900\tms9995.c).
- 0.146u1            : Added cpu\tms9900\tms9995l.c and tms9995.h. TMS9995L: New TMS9900 and TMS9995 implementation with proper control line handling and wait state generation. Previous implementation has been renamed to *l.{c,h} and drivers point to the old implementation until they are adapted to the new version [Michael Zapf].
- 0.139u4            : Roberto Fresca added new driver for NSM TMS9995 based hardware (drivers\nsmpoker.c).
- 0.37b12            : TMS9995 emulator.
- 0.36b13            : Added cpu\tms9900\tms9995.c.
- NOTES: Texas Instruments TMS9995 CPU
- DRIVERS: jpmmps.cpp, jvh.cpp, looping.cpp, nsm.cpp, nsmpoker.cpp, pachifev.cpp and triviaquiz.cpp
- SOURCE: cpu\tms9900\tms9995.cpp



7.46  TMS99100
- 0.80: Nathan Woods added an entry for the TMS99100 processor in cpuintrf.h.

7.47  TMS99105A
- NOTES: late variant, widely improved, 1981

7.48  TMS99110A
- NOTES: Same as above, with floating point support, (c) 1981



7.5   TMS320xx

7.51  TMS32020
- 0.268              : Added primary TMS32020 support. Use TMS32020 DSP instead of TMS32025 in Midnight Landing [cam900].
- DRIVERS: mlanding.cpp
- SOURCE: cpu\tms32025\tms32025.cpp


7.52  TMS32025

- 0.268              : Allow stack push/pop to be inlined [Vas Crabb].
- 0.261              : TMS32025 NEG instruction accidentally modifies the wrong status register - C_FLG is in ST1, not in ST0. Calling CLR0(C_FLG) or SET0(C_FLG) accidentally modifies ST0's INTM bit instead of ST1's C bit [codefrog2002].
- 0.253              : Replaced sprintf with type-safe equivalents (tms32025\32025dsm.cpp) [Erik Newton].
- 0.227              : Decapped TMS320C25 for Winning Run Suzuka Grand Prix [CAPS0ff, Nathan Gilbert and Guru]. TODO: Verify, hook up and check if same for all games.
- 0.222              : READ/WRITE macros removal [Osso].
- 0.203              : Updated save_item [hap].
- 0.196              : Changed description to 'Texas Instruments TMS32025'.
- 0.193              : Added cpu\tms32025\32025dsm.h. Removed cpu\tms32025\dis32025.cpp.
- 0.185              : Fixed TMS32026 status register and banking [O. Galibert].
- 0.181              : Use the standard memory interfaces [O. Galibert]. Correct space of internal data maps [AJR].
- 0.180              : Changed the TMS32025 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.175              : Fixed some cpus with virtual ports (TMS32025), mark them with +1 in any case [Olivier Galibert]. Made TMS32025 use DEVCB instead of memory map for ports [Osso].
- 0.153              : Added 'TMS32025' device. Modernized TMS32025 cpu core [Wilbert Pol].
- 0.146u4            : Fixed TMS32025 edge cases with add/sub carry and overflow flag. Fixed NORM opcode. Small cleanup. Update alu.d on lalk [hap]. Some updates [Quench].
- 0.135u3            : Mostly resolved mix of intel and motorola notation in TMS32025 disassembler [Lord Nightmare].
- 0.130u3            : Olivier Galibert reverted recent TMS32025 timing change which busted Cool Pool sound.
- 0.130u2            : TMS320C25 fixes and enhancements [Olivier Galibert]: Accept IRQs on IDLE. Actually count irq processing and instruction fetching cycles. Add support for external serial frame sync with internal triggering (aka TXM=1 and FSM=1).
- 0.128u6            : Pointer-ified the TMS32025 core [Quench].
- 0.114u1            : Aaron Giles fixed internal timer counting in the TMS32025 core. This makes the music in Cool Pool and 9 Ball Shootout bearable.
- 0.109u5            : Aaron Giles converted the tms32025 disassemblers to the new format and added step in/out support where it was obvious.
- 0.96u2             : Aaron Giles fixed bug in MAC instructions in the TMS32025 core. Fixed cycle counting problems that led to inaccurate internal timers. Added the ability to specify internal read/write handlers for CPUs so that the new debugger can view internal RAM. Hooked this up for the TMS32025 core.
- 0.86u1             : Patches to TMS32025 emulation (DSP math bugs). DSP communications RAM latch mode hooked up; fixes graphics for many Namco System 22 titles [Phil Stroffolino].
- 0.81u8             : Phil Stroffolino fixed TMS32025 lst and lst1 opcodes; the "ignore ARP" hack has been replaced with a better hack, that doesn't interfere with indirect addressing. Preliminary serial I/O support has been added, to update DRR/DXR on RINT and XINT interrupts. set_irq_line() no longer masks the lines with 0x7; this allows external triggering of RINT/XINT interrupts.
- 14th April     2004: Phil Stroffolino and Quench fixed another bug in the sblk opcode in the TMS32025 CPU core.
- 13th April     2004: Quench fixed a bug in the TMS32025 CPU core in which internal RAM was being dynamically reallocated at every call to the reset handler.
-  7th April     2004: Phil Stroffolino fixed a bug in the ldpk opcode in the TMS32025 CPU core.
- 0.63               : Added cpu\tms32025\tms32025.c/h, 32025dsm.c and dis32025.c. TMS32025 CPU core [Quench].
-  2nd January   2003: Olivier Galibert sent in a somewhat updated version of the TMS32025 CPU core together with some improvements to the Taito Air system driver, making Top Landing display some polygons but it is still far from perfect.
- 26th December  2002: Quench added timer emulation to the TMS32025 CPU core.
- 18th November  2002: Quench sent in a TMS32025 CPU core and a preliminary Taito AIR system driver, but graphics emulation is not complete so it does not work very well.
- DRIVERS: mlanding.cpp, namcos21.cpp, namcos22.cpp and taitoair.cpp
- PCB: TMS320C25 (Topland), TI320C25 DSP (printed as C71), WYBUX1G1  QCC68 = TMS320C25 int 544 word RAM, 4k ROM (Aircombj)
- SOURCE: cpu\tms32025\tms32025.cpp


7.53  TMS32026

- 0.78u4             : Aaron Giles added a TMS32026 entry and reworked the handling of internal RAM to work in the new system. This means the Taito Air system is now back to its former state.
- GAMES: Cool Pool (Catalina 1992), 9-Ball Shootout (E-Scape EnterMedia 1993)
- PCB: 320C26 (9ballsht)
- SOURCE: cpu\tms32025\tms32025.cpp



7.54  TMS32030

- 0.205              : Fixed disassembler. Confirmed radikalb still works and mk4 and drivedge no longer stack-overflow [Ryan Holtz].
- 0.198              : Added TMS320c30 and basic hold/holda support. For some reason there was no TMS320C30 device, so it's been added. Stubbed in basic HOLD/HOLDA line/callback support which is used to suspend DSP external bus access, and used by the InterPro EDGE graphics boards under development. This change doesn't actually change the 'C30 behaviour yet, but allows the external device to get an acknowledgement and proceed [Patrick Mackinlay].
- SOURCE: cpu\tms32031\tms32031.cpp


7.55  TMS32031

- 0.283              : TMS32031 ABSF opcode was mistakenly using ~man instead of -man, causing problems for MK4 which checks whether |A|+|B| == |A + B|. Fixed walking both players toward each other would result in no collision (tms32031\32031ops.hxx) [codefrog2002, Daniel Filner].
- 0.272              : Added standard IRQ callback (tms32031\tms32031.cpp) [AJR].
- 0.222              : Added/Correct notes for internal peripherals and chip family differences. Fixed chip name (no NMOS variant exists) and some descriptions. Fixed Microcomputer mode when 320C30 internal ROM is empty. Reference: TMS320C3x User's Manual [cam900]. READ/WRITE macros removal [Osso].
- 0.205              : Fixed disassembler. Removed MCFG [Ryan Holtz].
- 0.193              : Added cpu\tms32031\dis32031.h.
- 0.186              : TMS3203x RTPS should be RPTS [Philip Bennett].
- 0.184              : Removed direct update handler [O. Galibert].
- 0.180              : Changed the TMS3203x disassembler to use 'std::string get_indirect [Nathan Woods].
- 0.174              : Changed cpu\tms32031\32031ops.inc to 32031ops.hxx.
- 0.155              : Removed static configs in favor of inline config+DEVCB [Fabio Priuli].
- 0.147u4            : Added internal boot loader programs to the TMS3203x core and support a switch between microcomputer (bootloader) and microprocessor modes via the TMS3203X_MCBL input. This is required for Rise of the Robots, whose boot code jumps into the middle of the bootloader ROM. Changes tested with Primal Rage, San Francisco Rush and speedup [Phil Bennett].
- 0.146u5            : hap fixed edge cases with overflow/carry flag (cpu\tms32031\32031ops.c) and fixed warnings.
- 0.146u4            : hap fixed OR_C_ADD(a,b,r) opcode, SUB is left-to-right, ADD is equal both ways (cpu\tms32031\32031ops.c).
- 0.146u2            : Two TMS32031 fixes [Daniel Filner]: Don't set underflow when doing a floating point subtract that results in 0. Don't overwrite the exponent during a FIX operation. This fixed Off Road Challenge - Game now playable.
- 0.141u2            : Aaron Giles converted TMS3203X to a modern device.
- 0.128u4            : Pointer-ified the TMS32031 core [Aaron Giles].
- 0.125u9            : Aaron Giles fixed TMS32031 so that it doesn't call the debugger if not enabled.
- 0.122u2            : TMS3203x core updates [Aaron Giles]: Fixed interrupt handling. Added support for edge-triggered interrupts on '32. Expanded interrupt support for the '32. Updated drivers using TMS3203x core to deassert interrupts. Added externally accessible functions for converting '3x floating point format. Updated gaelco3d driver to use new functions.
- 0.120u4            : Aaron Giles fixed TMS32031 ABSF opcode to work as documented and not produce a proper negative. Fixed display of floating point TMS32031 registers in the debugger.
- 0.120u2            : Aaron Giles added NORM implementation to the TMS32031 core.
- 0.113u3            : Couriersud added save state support to TMS32031.
- 0.109u5            : Aaron Giles converted the tms32031 disassemblers to the new format and added step in/out support where it was obvious.
- 0.102u1            : Aaron Giles added new inline math functions to mamecore.h, along with mechanisms for the OSD layer to override them with platform-specific variants: count_leading_zeros, count_leading_ones, and fixed_mul_shift. Updated the TMS32031 core to make use of the first two.
-  2nd March     2004: Aaron Giles - After getting Radikal Bikers working well, I decided to figure out what was up with Surf Planet. Turns out they were relying on unspecified behavior of the TMS32031 by placing a CALL statement at the end of a repeat block. They tell you several times in the docs for the CPU never to do this, but hey, I guess if it works more power to them. With that fixed and some rendering tweaks, I'm currently getting about 30-50% of full speed on my 3GHz machine. If I turn off bilinear filtering and run at half resolution, both games are playable near 100%. Of course, I don't have the sound working yet, and that will kill the speed nicely (it's a DCS-like ADSP chip, sorry!).
- 0.79u3             : Aaron Giles fixed a TMS32031 bug that was causing some problems in Radikal Bikers.
- 24th February  2004: Aaron Giles - Fixed a subtle bug in the TMS32031 core that was causing problems with Radikal Bikers. Now at least all the geometry shows up okay. I'm still at a loss to explain alpha blending, Z buffering, or perspective correction. The incomplete driver should be in u2, so if you know some 3D math, feel free to have a look and see if you can't help me figure it out!
- 0.79u2             : Aaron Giles added support for the IACK and IDLE commands in the TMS32031 CPU core.
- 24th February  2004: Aaron Giles - Fixed a subtle bug in the TMS32031 core that was causing problems with Radikal Bikers. Now at least all the geometry shows up okay. I'm still at a loss to explain alpha blending, Z buffering, or perspective correction. The incomplete driver should be in u2, so if you know some 3D math, feel free to have a look and see if you can't help me figure it out!
- 0.78u4             : CPUs with an implicit address shift (e.g., the TMS34010 shifts addresses right 3 bits; the TMS32031 shifts addresses left 2 bits) now automatically get that shift applied to addresses in their memory maps and in calls to install_memory_read/write_handler(). This eliminates many ugly macros in the memory maps. Affected CPU cores are the ADSP210x, CCPU, PIC16C5x, TMS3201x, TMS3202x, TMS32031, and TMS340x0. Note that the CPU cores themselves still need to pass shifted values to the core read/write routines. All drivers using these cores have had their icky macros and bitshifts removed [Aaron Giles].
- 0.77               : TMS32031 fixes [Aaron Giles]: Many fixes to the TMS32031 core; Offroad Challenge is almost playable as a result, minus the fact that the clipping plane seems to like clipping out the cars during the race. But the terrain problems are fixed at least.
-  6th November  2003: Aaron Giles fixed the unmapped memory access logging to show the effective address (taking the address shift into account on CPUs like TMS34010 or TMS32031).
-  5th November  2003: Aaron Giles improved the TMS32031 core a lot, making Offroad Challenge almost playable.
-  8th December  2002: Aaron Giles fixed a lot of things in the TMS32031 CPU core.
- 0.62               : Added cpu\tms32031\tms32031.c/h and 32031ops.c and dis32031.c. TMS32031 CPU emulation [Aaron Giles].
- 28th October   2002: Aaron Giles sent in a TMS32031 CPU core and Williams V-Unit driver supporting Cruis'n USA and Cruis'n World complete with perfect sound emulation. P4 - 4 GHz or Athlon XP 4000+ recommended.
- NOTES: Texas Instruments TMS320C31 is a 32bit DSP with 33MFLOPs.
- PCB: TMS320C31PLQ50 (Crusnusa, Metalmx, Primrage), TMS32C031 (DriversEdge), Taito E07-11 TMS320C31 QFP132 (Sidebs2)
- DRIVERS: atarigt.cpp, gaelco3d.cpp, itech32.cpp, metalmx.cpp, midvunit.cpp, rastersp.cpp and seattle.cpp
- SOURCE: cpu\tms32031\tms32031.cpp


7.56  TMS32032

- 0.205              : Fixed disassembler [Ryan Holtz].
- 0.186              : TMS3203x RTPS should be RPTS [Philip Bennett].
- 0.141u2            : Aaron Giles converted TMS3203X to a modern device.
- 0.122u2            : TMS3203x core updates [Aaron Giles]: Fixed interrupt handling. Added support for edge-triggered interrupts on '32. Expanded interrupt support for the '32. Updated drivers using TMS3203x core to deassert interrupts. Added externally accessible functions for converting '3x floating point format. Updated gaelco3d driver to use new functions.
- NOTES: Texas Instruments TMS320C32
- DRIVERS: midzeus.cpp
- SOURCE: cpu\tms32031\tms32031.cpp


7.57  TMS32033

- 0.238              : Added TMS320VC33 emulation support. Added notes [cam900].
- NOTES: Texas Instruments TMS320VC33
- DRIVERS: ???
- SOURCE: cpu\tms32031\tms32031.cpp


7.58  TMS32051

- 0.235              : Fixed save states (cpu\tms32051\tms32051.cpp) [Ville Linde].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.196              : Changed description to 'Texas Instruments TMS32051'.
- 0.193              : Added cpu\tms32051\dis32051.h.
- 0.181              : Removed address_spacenum. That's an elaborate way to do a nop [O. Galibert].
- 0.180              : Changed the TMS32051 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\tms32051\32051ops.inc to 32051ops.hxx.
- 0.170              : More TMS32051 bug fixes (32051ops.inc, dis32051.cpp and tms32051.cpp/h). Fixed accumulator conditions (32051ops.inc) [Ville Linde].
- 0.169              : Added TMS32053 CPU. Hook up TMS32053 DSP to Taito Power-JC System driver. Added TMS32051 idle instruction and I/O space. TMS32051 various fixes. TMS32051 disasm fixes [Ville Linde].
- 0.155              : Poking around with Dangerous Curves (cpu\tms32051\tms32051.c). Added op_add_s16_mem and op_bldd_sbmar (tms32051\32051ops.c) [hap].
- 0.153              : Added 'TMS32051' device. Modernized TMS32051 cpu core [Wilbert Pol].
- 0.146u4            : hap fixed add/sub overflow/carry flags (tms32051\32051ops.c). OV flag is cleared on (OV-)branch-and-call instructions. On 'C2x-compatible opcodes that set treg(0), treg1/2 are set too if TRM=0. Some cleanup. Simplify add/sub a bit.
- 0.146u3            : Stack emulation is more accurate now. Make it obvious that some of the reset code is a hack cause of missing internal rom. Small optimization on condition checks [hap].
- 0.143u4            : Angelo Salese fixed TMS32051 debug memory viewer. Work-around for TMS32051 crash on Taito JC system soft reset. Fixed a debugger crash if you try to view data memory in TMS32051.
- 0.128u6            : Pointer-ified the TMS32051 CPU core [Aaron Giles].
- 0.111u2            : Taito JC driver improvements [Ville Linde]: Various bug fixes and some new opcodes to the TMS320C51 core. Moved video hardware emulation to video\taitojc.c. Implemented 3D hardware emulation.
- 25th December  2006: Ville Linde - One of the most interesting parts of the Taito 3D hardware is the math co-processor that has been integrated into one of the Taito custom chips. The coprocessor does two functions. The first function does 3D point projection to 2D, and was quite straightforward to understand from the DSP disassembly. The second function however, required a lot more head scratching. Eventually I figured out that this function is used to calculate polygon intersection calculations while clipping the polygons against the viewport. The reason why yet another math unit is needed may not be clear at first. But once you look at how the math functions work, it becomes more clear. Both of the math functions are dividing something, and a quick look at the TMS320C51 datasheet reveals that it doesn't have a division unit at all. The emulation of the math co-processor, coupled with some additional TMS320C51 bug fixes gives us almost perfectly working 3D.
- 17th December  2006: Ville Linde - I've been working on fixing bugs in the TMS320C51 core and trying to understand the 3D hardware in Taito's JC System. So far I've managed to figure out the polygon format and texture mapping. As a result Side by Side 2 already shows the road polygons and some other stuff.
- 0.107u3            : Taito JC update [Ville Linde]: Some general improvements to the driver. Added some more opcodes to the TMS320C51 core.
- 0.106u9            : Improved the TMS320C51 core [Ville Linde].
- 0.105u1            : Added cpu\tms32051\tms32051.c/h, dis32051.c and 32051ops.c/h. Added TMS320C51 cpu core [Ville Linde].
- 10th April     2006: Ville Linde - I picked up the Taito JC System driver again in hopes of getting it to do something interesting. The two major roadblocks were the missing FPU stuff from the M68040 core and the missing TMS320C51 DSP core. The TMS DSP emulation already works well enough that the basic communication and ROM tests are already working. There's also enough of the 68040 FPU emulated that the games won't just crash when they hit FPU opcodes. None of the games still show anything interesting graphics-wise, but progress is progress nevertheless.
- DRIVERS: taitojc.cpp
- SOURCE: cpu\tms32051\tms32051.cpp



7.59  TMS32053

- 0.235              : Fixed save states (cpu\tms32051\tms32051.cpp; Operation Tiger now playable) [Ville Linde].
- 0.227              : Decapped TMS320BC53PQ80 DSP [CAPS0ff, jordigahan, ClawGrip, Philip Akesson, Nathan Gilbert, James Sun].
- DRIVERS: taitopjc.cpp
- SOURCE: drivers\taitopjc.cpp



7.5A  TMS32082

- 0.237              : Rewrote the PP disassembler (tms32082\dis_pp.cpp) [Ville Linde].
- 0.236              : Various bug fixes to the TMS320C82 core. Mostly playable driver for 'ROLLing eX.tre.me' [Ville Linde].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.193              : Added cpu\tms32082\dis_mp.h and dis_pp.h.
- 0.180              : Changed the TMS32082 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.169              : TMS32082 FPU fixes + command callback. Very preliminary video emulation in ROLLing eX.tre.me [Ville Linde].
- 0.168              : Unsigned value can't be less than zero (m_tcount < 0) [Vas Crabb].
- 0.150              : Added cpu\tms32082\dis_mp.c and dis_pp.c. Removed dis32082.c. Another bunch of TMS32082 stuff. Improved vector op disasm and more disasm fixes. Added more opcodes. Added Parallel Processor + more MP opcodes. Splitted MP and PP disassembler. PP disassembler progress (tms32082\dis_pp.c). More PP disasm fixes (cpu\tms32082\dis_pp.c). MP interrupts and more PP disasm work. More MP opcodes [Ville Linde].
- 0.149u1            : Added cpu\tms32082\tms32082.c/h, dis32082.c and mp_ops.c. Groundworks for TMS320C82 core. Added internal address map and few opcodes. More improvements [Ville Linde].
- NOTES: Texas Instruments TMS3208x DSP
- DRIVERS: rollext.cpp
- SOURCE: cpu\tms32082\tms32082.cpp




7.6   TMS340xx

7.61  TMS34010

- 0.266              : Suppress side effects for debugger reads [cam900].
- 0.252              : Removed tms34010\makefile. Removed really old disassembler makefile [hap].
- 0.245              : Removed a few unimportant 64-bit functions [AJR].
- 0.238              : Clarify that not all illegal opcodes are actually trapped [AJR].
- 0.224              : Eliminated pure 8-bit read/write bus accesses (these are always read-modify-write, even if aligned) [AJR].
- 0.212              : Fixed calculation of TMS34010/020 shifted memory addresses for debug save and load commands (debug\debugcmd.cpp) [AJR]. Added CMDFLAG_CUSTOM_HELP, in order to flag custom device-specific commands that have custom help text (debug\debugcon.cpp) [Ryan Holtz].
- 0.207              : Changed description to 'Texas Instruments TMS34010'. Internalized I/O register. Removed register_postload. Added notes [cam900].
- 0.206              : Don't blow up when TMS34010 disassembler tries to read 32-bit operands (tools\unidasm.cpp) [AJR].
- 0.205              : Removed MCFG [Ryan Holtz].
- 0.193              : Added cpu\tms34010\34010dsm.h. Removed cpu\tms34010\dis34010.cpp.
- 0.186              : Fixed DASM of MOVB/MOVE absolute to absolute [Robbbert].
- 0.180              : Changed the TMS34010 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\tms34010\34010fld.inc, 34010gfx.inc, 34010ops.inc and 34010tbl.inc to 34010fld.hxx, 34010gfx.hxx, 34010ops.hxx and 34010tbl.hxx.
- 0.162              : Fixed moving TMS34010 CPU core to inline config in MAME 0.155, fixes "GSP TIME OUT ERROR" in harddriv, racedriv, steeltal, strtdriv and racedrivpan [Osso].
- 0.155              : Work around Clang shift overflow warnings (build\flags_clang.mak and 34010gfx.c) [Wilbert Pol]. Converted to use inline config, DEVCB and delegates [Osso]. Fixed compile on MSVC 2012 & 2013 (34010gfx.c) [Peter Ferrie]. Disabled -Wconstant-logical-operand again for Clang and tms34010\34010gfx.c cleanups [Oliver Stoeneberg].
- 0.154              : Fixed issue with Battletoads (cpu\tms34010\34010gfx.c), but re-break some gfx in Little Robin/Mega Phoenix in the process. Needs somebody who knows the TMS better [David Haywood]. Use the CONVSP/CONVDP registers to adjust source and destination addresses when window clipping or y-reverse is applied (cpu\tms34010\34010gfx.c). Mirrored TMS34010 RAM at 0x7fc00000 and 0xffc00000 in machine\inder_vid.c. With the previous TMS34010 change, this fixes the window clipping issues at y=0 [Phil Bennett]. Modernised TMS34010 cpu core [Wilbert Pol].
- 0.153              : Make the TMS34010 a bit safer when 8-bit writes are used (Mega Phoenix does this). I suspect Skeet Shot will need more improvements along these lines because it's hooked up to an 8-bit CPU? This at least means we don't have to overclock the 68k by a silly amount on Mega Phoenix, and fixes round 4, although it doesn't fix all the graphic corruption, of note round 6 [David Haywood].
- 0.150              : Placed some of screen update functions in TMS34010 cpu core classes as result removed some scrlegcy.h includes [Miodrag Milanovic].
- 0.148u2            : Fixed Clang warning in cpu\tms34010\34010gfx.c:1518:14: warning: shift count >=width of type [-Wshift-count-overflow] [Phil Bennett].
- 0.144u6            : Major bitmap-related changes throughout the system [Aaron Giles]. Added independent ind16 and rgb32 callbacks for TMS340x0 devices.
- 0.138u1            : Couriersud fixed TMS34010 memory window jumps to weird addresses when trying to view memory in all set of the Hard Drivin' driver.
- 0.137u2            : Alex Jackson fixed TMS34010 parameter in the Midway T-Unit driver.
- 0.128u7            : Aaron Giles added the concept of a cpu_state_table, which is supplied by the CPU cores and which describes all the register state accessible to the debugger and other subsystems. The format of the table is such that most data can be simply fetched from memory without the further involvement of the CPU core, including the display of common formats. Extensibility points are available for custom display and for importing/exporting the data to intermediate variables for more complicated scenarios. Updated the TMS340x0 core to use this.
- 0.128u6            : Atari Ace modified the tms34010.h interface to eliminate some more global Machine variables. More deprecat.h includes eliminated.
- 0.128u4            : Aaron Giles converted TMS340x0 cores to be pointer-based.
- 0.123u5            : Zsolt Vasvari changed TMS34010 to take a screen tag instead of screen number.
- 0.115u1            : Aaron Giles added support for misaligned PIXBLT operations in the TMS34010 core. The code still needs cleanup but improves the new JPM driver.
- 0.114u4            : Aaron Giles simplified register and flags management in the TMS34010 core. Reviewed all flag handling and fixed a couple of minor discrepancies.
- 0.114u2            : Aaron Giles cleaned up internal interrupt handling in the TMS34010 core.
- 0.114u1            : Aaron Giles substantially changed the TMS340x0 interfaces to allow the CPU emulator to directly manage the video screen. Glitches in several games are now fixed as a result (for example the flashing screens in NBA Jam are now gone at last).
- 0.113u3            : Phil Bennett changed the TMS340x0 core to clear the HSTCTLH NMI bit on an acknowledge. Phil Bennett fixed display of immediate word and long operands in the TMS340x0 disassembler.
- 0.113u1            : Zsolt Vasvari began converting drivers over to the new more accurate video timing functions (video_screen_* functions instead of cpu_*). This first batch includes all the games using the TMS34010 chip and the Atari games that use atarigen.c.
- 0.113              : Zsolt Vasvari removed cpu_gethorzbeampos() and replaced it with calls to video_screen_get_hpos(). Also changed TMS34010 configuration to take a screen number, and changed atarigen_get_hblank() to take a screen number as well.
- 0.109u5            : Aaron Giles converted the tms34010 disassemblers to the new format and added step in/out support where it was obvious.
- 0.96u3             : Aaron Giles fixed TMS34010 reverse blitters so they didn't perform extraneous source memory fetches.
- 0.96u2             : Aaron Giles fixed window mode 1 in the TMS34010 core, as well as bugs that prevented misaligned stack accesses from working and a bug that didn't force the PC to be 16-bit aligned.
- 0.96               : Added step in/out support to TMS34010 disassembler [Aaron Giles].
- 0.84u5             : Andrea Mazzoleni fixed memory crash in the TMS34010 core (removed an illegal free()).
-  3rd June      2004: Olivier Galibert fixed a save state crash that occurred in some games that use the TMS34010 CPU.
- 0.78u4             : CPUs with an implicit address shift (e.g., the TMS34010 shifts addresses right 3 bits; the TMS32031 shifts addresses left 2 bits) now automatically get that shift applied to addresses in their memory maps and in calls to install_memory_read/write_handler(). This eliminates many ugly macros in the memory maps. Affected CPU cores are the ADSP210x, CCPU, PIC16C5x, TMS3201x, TMS3202x, TMS32031, and TMS340x0. Note that the CPU cores themselves still need to pass shifted values to the core read/write routines. All drivers using these cores have had their icky macros and bitshifts removed [Aaron Giles].
-  6th November  2003: Aaron Giles fixed the unmapped memory access logging to show the effective address (taking the address shift into account on CPUs like TMS34010 or TMS32031).
- 0.75               : Aaron Giles removed 4x executes per loop which screwed up timing and fixed internal interrupt generation to get consistent timing results.
- 17th January   2003: Aaron Giles added refresh register emulation to the TMS34010 CPU core.
-  6th January   2003: Aaron Giles fixed some things in the TMS34010 CPU core that will be needed for the Art & Magic games.
-  3rd January   2003: Aaron Giles sent in another update that gets the 34010-based games working again after yesterday's changes, and he fixed BattleToads and Hard Drivin' to compute the VBLANK duration appropriately.
-  3rd January   2003: Aaron Giles sent in another update that gets the 34010-based games working again after yesterday's changes, and he fixed BattleToads and Hard Drivin' to compute the VBLANK duration appropriately.
-  2nd January   2003: Aaron Giles fixed VBLANK timing and display interrupt bugs in the TMS34010 CPU core and he fixed Cool Pool so that its graphics no longer flicker.
- 18th November  2002: Nathan Woods added state save support for the TMS34010 CPU core.
- 12th July      2002: Nathan Woods adding save state capability to the TMS34010 CPU core.
-  3rd December  2001: Aaron Giles fixed a few TMS34010 bugs, fixing the missing sprites in Exterminator and fixing the Hard Drivin' crashes.
- 25th September 2000: Aaron Giles fixed some internal TMS34010 bugs.
-  8th September 2000: Aaron Giles sent in a new TMS34010 core with a few bugfixes, and finally officially sent the Hard Drivin' / S.T.U.N. Runner driver.
- 17th August    2000: Aaron Giles sent in updated ADSP2100 and TMS34010 cores, fixing some bugs which affected the Atari polygon games.
- 0.37b5             : Complete rewrite of the 34010 drivers [Aaron Giles].
- 20th July      2000: Aaron Giles fixed some TMS34010 core bugs which might have caused problems with Terminator 2, and he fixed the clipping in DCS emulation.
- 28th January   2000: Zsolt Vasvari fixed speeds in some TMS34010 games and highscores now display in Trog.
-  5th December  1999: Aaron Giles fixed a fast stack code problem in the TMS34010 core.
- 0.36b9.1           : Aaron Giles fixed a few bugs in the TMS34010 games.
- 0.36b9             : Added cpu\tms34010\34010gfx.c. Several changes and improvements to the TMS34010 emulation and to the Williams games using CVSD sound [Aaron Giles].
- 14th November  1999: Aaron Giles fixed some TMS34010 graphics bugs.
- 13th November  1999: Aaron Giles sent in a TMS34010 update with accurate timing, more functionality and he also sent in a Smash TV sound hardware speedup.
- 0.36b7             : Improvements to the 34010 emulation [Aaron Giles].
- 16th October   1999: Aaron Giles sent in a TMS34010 update with a few structural changes and bugfixes.
- 0.36b6             : Added cpu\tms34010\makefile.
- 21st September 1999: Zsolt Vasvari did another TMS34010 update, and Hi Impact is now 1-2 fps faster.
- 20th September 1999: Zsolt Vasvari sent in a minor TMS34010 core update, and he also hooked up the Terminator 2 gun properly.
- 19th February  1999: Zsolt Vasvari has optimized the TMS34010 core, resulting in a 5% improvement in speed.
- 0.34b7             : Removed src\osd_cpu.h.
- 0.34b6             : Added src\msdos\osd_cpu.h.
- 0.34b5             : src\osd_cpu.h.
- 0.34b4             : Added tms34010\34010ops.h.
- 0.34b2             : Added tms34010\tms34010.c/h, 34010dsm.c, 34010fld.c, 34010ops.c, 34010tbl.c and dis34010.c. TMS34010 emulator [Alex Pasadyn, Zsolt Vasvari].
- PCB: TMS34010FNL-50 (50MHz, QCC68) (Nbajam), TMS34010FNL-40 (CheeseChase), TMS 34010 (Mk), TMS42010P (Steeltal)
- DRIVERS: artmagic.cpp, btoads.cpp, coolpool.cpp, exterm.cpp, harddriv.cpp, jpmimpct.cpp, lethalj.cpp, micro3d.cpp, midtunit.cpp, midwunit.cpp, midxunit.cpp, midyunit.cpp, potgoldu.cpp, skeetsht.cpp, skimaxx.cpp, tickee.cpp and xtheball.cpp
- SOURCE: cpu\tms34010\tms34010.cpp



7.62  TMS34020

- 0.270              : Implemented TMS34020 cvdxyl_b instruction. Used by Atronic gambling systems (tms34010\34010ops.hxx) [Priit Laes].
- 0.238              : Separated TMS34020 emulation better [AJR].
- 0.224              : Upgraded data bus to 32 bits and add preliminary masking for 16-bit operations. Eliminated pure 8-bit read/write bus accesses (these are always read-modify-write, even if aligned) [AJR].
- 0.215              : Implemented CLIP and SETCDP opcodes (tms34010\34010ops.hxx). Fixed out of bounds read, when extra logging is enabled [Priit Laes].
- 0.214              : Fixed BLMOVE aligment handling for TMS34020. BLMOVE has actually 4 different cases of execution based on two lowest bits in opcode, which were not properly handled. Fixes endless loop in atronic / atricmon [Priit Laes].
- 0.212              : Fixed calculation of TMS34010/020 shifted memory addresses for debug save and load commands (debug\debugcmd.cpp) [AJR].
- 0.207              : Changed description to 'Texas Instruments TMS34020'.
- 0.144u6            : Major bitmap-related changes throughout the system [Aaron Giles]. Added independent ind16 and rgb32 callbacks for TMS340x0 devices.
- 0.128u7            : Aaron Giles added the concept of a cpu_state_table, which is supplied by the CPU cores and which describes all the register state accessible to the debugger and other subsystems. The format of the table is such that most data can be simply fetched from memory without the further involvement of the CPU core, including the display of common formats. Extensibility points are available for custom display and for importing/exporting the data to intermediate variables for more complicated scenarios. Updated the TMS340x0 core to use this.
- 0.128u4            : Aaron Giles converted TMS340x0 cores to be pointer-based.
- 0.122u4            : TMS34020 fixes [Aaron Giles]: Allowed 32-bit pixel sizes. Fixed RPIX instruction.
- 0.114u1            : Aaron Giles substantially changed the TMS340x0 interfaces to allow the CPU emulator to directly manage the video screen. Glitches in several games are now fixed as a result (for example the flashing screens in NBA Jam are now gone at last).
- 0.113u3            : Phil Bennett changed the TMS340x0 core to clear the HSTCTLH NMI bit on an acknowledge. Phil Bennett fixed display of immediate word and long operands in the TMS340x0 disassembler.
- 18th November  2001: Aaron Giles sent in some TMS34020 CPU core changes and a driver for Revolution X.
- PCB: TMS34020-40 (Metalmx), TMS34020APCM-40 (atricmon), TMS34020AGBL-32 (atrwild)
- DRIVERS: atronic.cpp, btoads.cpp, metalmx.cpp and midxunit.cpp
- SOURCE: cpu\tms34010\tms34010.cpp



7.7   TMS57002

- 0.274              : Fixed input sample overflow [hap].
- 0.260              : Workaround compile issue with tms57002.h / tms57002.hxx [David Haywood].
- 0.235              : Genearate seaparate DASM header for TMS57002 [Miodrag Milanovic].
- 0.227              : Clear some forgotten registers [O. Galibert].
- 0.225              : Update TMS57002 sound to the new stream update callback [Aaron Giles].
- 0.217              : Get rid of deprecated universal newlines open flag in Python scripts (io module is present as of Python 2.6) (scripts\build\verinfo.py, cpu\tms57002\tmsmake.py) [Vas Crabb].
- 0.210              : Updated TMS57002 DASP. Simplified handlers. Fixed code styles and notes. Use shorter type values [cam900].
- 0.201              : Added cpu\tms57002\tmsops.cpp. Added dready callback [AJR]. Added instructions 3c/3d, make them behave as NOP as they're undocumented and not understood. Added undocumented instruction saom / raom, they set saturation mode for the ALU. Added a few unimplemented instructions. Fixes to make Taito Zoom DSP working. Implemented MACC pipeline. Added callbacks for dready, EMPTY and PC0 pins. Proper behavior of CMEM UPLOAD mode. Fixed an issue where program is not properly loaded if PLOAD is set after a program has already been written [superctr]. Trick to reduce the compiler memory usage [O. Galibert].
- 0.193              : Added cpu\tms57002\57002dsm.h.
- 0.180              : Changed the TMS57002 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.175              : Fixed internal_pgm ADDRESS_MAP range [O. Galibert].
- 0.162              : Cleanup tmsmake.py [Balrog].
- 0.160              : Removed except clause syntax not supported on Python 3. This change uses sys.exc_info()[1] instead of the "as" syntax to retain Python 2.5 compatibility (cpu\tms57002\tmsmake.py) [Mike Naberezny].
- 0.156              : Initialize TMS57002 CPU variable to fix crackling sound in debug builds for KonamiGX games [Osso].
- 0.154              : Inline xm_step_read() and xm_step_write() for free 5\% speedup [Alex Jackson].
- 0.152              : TMS57002 fixes and improvements [Phil Bennett]: Moved CA/ID post-increment outside of execution. Fixes case where dual instructions post-increment, also reduces number of generated instructions. Fixed data ordering of external memory accesses. Don't generate redundant instructions for undefined rounding modes; remap them in decode. Set XOA to 0 on reset. Use [READ|WRITE]LINE_MEMBER for I/O lines. Added PC0 line. Added registers to debugger state.
- 0.151              : Implement SFMR instruction in TMS57002 [Phil Bennett].
- 0.148u2            : TMS57002 works in UNIDASM, disassemble interface can be revisited when all cpu cores have been converted [smf].
- 0.147u4            : Removed tms57002\tmsmake.c. Added cpu\tms57002\tmsmake.py. Snakes in an emulator (Compile TMS57002 with Python) [Robert Muth, O. Galibert]. Fixed Python to use env variable as described in root makefile; fixes builds on Windows with spaces in the path [Balrog, Lord Nightmare].
- 0.146              : Don't optimize TMS57002 on OS X PowerPC builds [Couriersud].
- 0.145u5            : Removed the TMS57002 from UNIDASM until modern cores are handled sanely [O. Galibert].
- 0.145u4            : Removed cpu\tms57002\tms57kpr.h. Modernize TMS57002 [O. Galibert]. R. Belmont fixed GCC 4.6 compile (cpu\tms57002\tms57kdec.c). Olivier Galibert fixed cpu\tms57002\tms57kdec.c.
- 0.141u2            : Added cpu\tms57002\tms57kdec.c/h and tms57kpr.h. Significantly improved TMS57002 build speed on lower-end h/w [R. Belmont].
- 0.133u4            : Added cpu\tms57002\57002dsm.c.
- 0.132              : Atari Ace fixed "Error: free a non-existent block" (debug) on TMS57002 source generation.
- 0.130              : Olivier Galibert added two missing instructions to TMS57002 and hack up the coef update. The real way coefficient updates are handled is a little too complex for now, but the hack throttles the update speed to the real rate given the way konami uses it (once per sync). It's near impossible to use it in a different way anyway.
- 0.129u6            : Don't abort on unimplemented TMS57002 instructions [Olivier Galibert].
- 0.129u4            : Added cpu\tms57002\tms57002.c/h, tmsinstr.lst and tmsmake.c. TMS57002 preliminary implementation [Olivier Galibert].
- NOTES: The TI TMS57002 is a effect DSP.
- PCB: TMS57002DPHA DSP, QFP80 (G-Darius, Raystorm), TMS570020PHA (Le2, RacinForce)
- DRIVERS: konamigq.cpp, konamigx.cpp, taitogn.cpp and zn.cpp
- SOURCE: cpu\tms57002\tms57002.cpp




8.    Hitachi

8.1   HD6301

- 0.262              : Port output latches are kept intact when in standby mode, x0 does not have ddr4 (hd6301: m6800\m6801.cpp). RTI after TRAP returns to the address where the trap error occured (hd6301: m6800\6800ops.hxx). ST IMM opcodes cause a trap interrupt. Fixed timer 2 serial clock (hd6301: m6800\m6801.cpp). Fixed SLP during pending interrupt (hd6301: m6800\6800ops.hxx, m6800.cpp and m6801.cpp). Added ext irq enable mask and ext irq2 (hd6301x: m6800\m6801.cpp). Don't save internal registers to nvram when it's not battery backed (hd6301: m6800\m6801.cpp). Instead of skip, zerofill NVRAM when no battery save (hd6301: m6800\m6801.cpp). Added irq pins to p5 read (hd6301x: m6800\m6801.cpp) [hap].
- 0.261              : Fixed SLP wakeup from Tin input capture event (hd6301; m6800\m6801.cpp). Moved RAM, ROM and I/O areas into internal maps for all variants (including a few that lacked their own device types until now). CPU device now saves NVRAM for applicable standby areas, which only include the first part of internal RAM on NMOS variants (m6800\m6801.cpp) [AJR].
- 0.232              : HD6301X, HD6301Y & derivatives: Updates to internal peripheral emulation. Added Timer 2 and its associated interrupt and allow it to clock the serial port. Changed divider for external serial clock to 16. Removed timer hack in (MESS) Supremo [AJR]. Preliminary support for port 6 handshaking in HD6301Y. Added overrides for port 3 data in HD6301X [hap].
- 0.222              : Fixed lockup and added buttonpanel LEDs (hd6301x (m6800\m6801.cpp) MESS saitek_leonardo.cpp) [hap].
- 0.220              : Splitted HD6301 device into several different types (functionally identical now, but won't be compatible once accuracy improves). SLP is no longer disassembled as "illegal" on the HD6301. Tentatively start to support the extra ports of the HD6301X/HD6301Y. Implement more HD6301X weirdness. Added preliminary HD6301X internal register map. Added second timer output comparator and associated status register to the HD6301X and HD6301Y [AJR].
- 0.196              : Changed description to 'Hitachi HD6301'.
- 0.184              : Added 'HD6301' device.
- DRIVERS: (MESS)
- SOURCE: cpu\m6800\m6801.cpp


8.11  HD6303

- 0.261              : Moved RAM, ROM and I/O areas into internal maps for all variants (including a few that lacked their own device types until now). CPU device now saves NVRAM for applicable standby areas, which only include the first part of internal RAM on NMOS variants (m6800\m6801.cpp) [AJR].
- 0.255              : Fixed HD6303R to use an internal map and removed internal-only handlers from associated drivers (m6800\m6801.cpp) [Ryan Holtz].
- 0.220              : Added Hitachi HD6303X type [AJR].
- 0.196              : Changed description of 'HD6303R' to 'Hitachi HD6303R' and 'HD6303Y' to 'Hitachi HD6303Y'.
- 0.184              : Added 'HD6303R' device (cpu\m6800\m6801.cpp).
- 0.150              : Added 'HD6303Y' device (cpu\m6800\m6801.cpp).
- DRIVERS: acesp.cpp and castle.cpp
- SOURCE: cpu\m6800\m6801.cpp


8.12  HD6309

- 0.278              : Correct branch cycles in native mode (hd6309; m6809\base6x09.lst) [hap].
- 0.263              : Added missing index addressing modes. Pop CPU state if indexed addressing mode caused illegal operation trap (m6809\hd6309.lst) [Tim Lindner].
- 0.252              : Fixed STBT instruction (m6809\hd6309.lst) [Tim Lindner].
- 0.251              : Changed m6809\hd6309.ops to hd6309.lst. 6x09 TFR/EXG improvement: Removed tuple implementation used by the EXG and TFR instructions of the 6809, 6309 and Konami CPUs. It was unnecessary because fundamentally these are implemented with a single, 16 bit wide temporary register. Changed how the 6809 CPU processes the invalid 8 to/from 16 bit register combinations. Their behavior now matches actual hardware. I used page 66 and 138 of Darren Atkinson's 6x09 manual (https://colorcomputerarchive.com/repo/Documents/Books/Motorola%206809%20and%20Hitachi%206309%20Programming%20Reference%20%28Darren%20Atkinson%29.pdf) for reference. I also double checked with my own hardware (http://tlindner.macmess.org/?p=945). Checked for regressions using (MESS) CoCo + NitrOS-9, Aliens and 88Games [Tim Lindner].
- 0.223              : Fixed ASR8 and ASR16 opcodes (cpu\m6809\base6x09.ops) [hap]. Still perform an IRQ acknowledge cycle on software interrupts (cpu\m6809\base6x09.ops). Fixes (MESS) Fairlight CMI IIx memory-map diagnostics [Ryan Holtz].
- 0.222              : Removed 0x20 opcode (m6809/hd6309.ops). Note $1020 is an illegal opcode on the 6309. On the 6809 it is a rarely used form of LBRA. I tested on a real 6309 and $1020 vectors to Illegal [Tim Lindner]. Removed wrong BRA [AJR].
- 0.196              : Changed descriptions to 'Hitachi HD6309' and 'Hitachi HD6309E'.
- 0.193              : Added 'HD6309E' device. Created HD6309E variant that fixes Ajax regression [AJR].
- 0.180              : Added cpu\m6809\6x09dasm.cpp. Removed cpu\m6809\6309dasm.cpp. Merged the M6809, HD6309 and KONAMI CPU disassemblers and changed to properly use streams [Nathan Woods].
- 0.176              : Improved debugging support for 6809/6309 CPUs [Erik G].
- 0.155              : Fixed warning (this was useless anyway: m_temp is really temporary) [hap].
- 0.154              : Fixed typo in HD6309_V state_add. Added HD6309-specific pre_save() and post_load() [Alex Jackson].
- 0.150              : Fixing HD6309 MULD regression introduced in the 6x09 rewrite [Nathan Woods].
- 0.148u2            : Changed hd6309\hd6309.c/h, 6309dasm.c, 6309ops.c and 6309tbl.c to m6809\hd6309.c/h, 6309dasm.c, hd6309.ops and base6x09.ops. Added 'HD6309' device. Fixing 6309 condition code setting errors (hd6309\6309ops.c). More 6309 bug fixes identified in my rewrite; still not ready to commit my 6x09 rewrite (hd6309\6309ops.c). Rewrote 6309 CPU core. Inferred 6309 cycle exact timings. Fixed bug in konami/6309 16-bit NEG; quarth is now playable again (m6809\base6x09.ops) [Nathan Woods]. Fixed builds on at least OSX [Wilbert Pol]. Fixed compile on older OS X tools (m6809\hd6309.h) [Curt Coder]. Made 6309 compatible with UNIDASM [smf].
- 0.132u4            : Romain Tisserand fixed a HD6309 core bug/typo in the divq_im opcode.
- 0.128u4            : Pointer-ified the HD6309 CPU core [Couriersud]. Switched HD6309 to new memory functions [Couriersud]: Cleaned up some macros. Aligned code a bit more. Interrupts now checked in cpu_execute instead of set_context.
- 0.122u7            : Aaron Giles marked HD6309 as divide-by-4 internally. Updated drivers accordingly.
- 0.118u6            : More HD6309 fixes [Tim Lindner]: The SEXW instruction not longer clears the overflow flag. Now generating an illegal instruction trap if invalid registers specified for TFM.
- 0.118              : Darren Atkinson fixed a number of issues in the HD6309 core.
- 0.117u2            : Captain Ahab fixed HD6309 dissaembly of the post-byte for ,W++ and ,--W.
- 0.116u1            : Zsolt Vasvari fixed N flag setting in DIV overflow.
- 0.115u2            : Tim Lindner fixed some page 1 opencode lengths in the 6309 dissasembler.
- 0.112u1            : Nathan Woods changed 6809/6309 CPU cores to call the MAME debugger when CWAI/SYNC is used.
- 0.111u1            : Giuseppe Gorgoglione extensively rewrote the 6309dasm.c disassembler and fixed minor bugs in the hd6309 interface.
- 0.106u7            : Nicola Salmoria fixed some instruction forms in the 6309 diassembler to consume the correct number of bytes.
- 0.99u4             : Nathan Woods fixed the PULUW instruction on the 6309 disassembler.
- 0.99u2             : Tim Lindner fixed 6309 division instructions overflow behavior on the HD6309.
- 0.95u3             : Tim Lindner fixed index addressing mode disassembly for HD6309.
- 0.95u1             : Nathan Woods fixed 6309 SEXW instruction (hd6309\6309ops.c) and Cycle Counts Page (hd6309\6309tbl.c).
- 0.90               : Nathan Woods fixed the undocumented bit test opcodes in HD6309 core.
- 0.80               : Nathan Woods fixed the ABCD opcode in cpu\hd6309\6309ops.c.
- 0.79u1             : Minor HD6309 timing enhancements, and changed a few indexing modes to be illegal [Nathan Woods].
- 0.72u1             : Nathan Woods fixed 6309dasm.c disassembler for better message, when invalid opcodes are disassembled.
- 0.37b6             : True HD6309 emulation (instead of using the M6809) [Tim Lindner].
-  2nd September 2000: Nicola Salmoria fixed a 6309 bug which affected Fast Lane and Double Dragon.
- 18th August    2000: Tim Lindner submitted a HD6309 CPU core to replace the current hack of 6809 core.
- 0.36RC1            : Changed description to 'HD6309'.
- 0.37b6             : Added cpu\hd6309\hd6309.c/h, 6309tbl.c, 6309ops.c and 6309dasm.c.
- NOTES: The code was hacked out of the fully-featured 6809 disassembler by Sean Riddle and then mutliated into a 6309 disassembler by Tim Lindner.
- GAMES: Double Dragon (Technos 1987), Psycho-Nics Oscar (2x, Data East 1988), Combat School (Konami 1988)
- PCB: 63C09E (Combasc, Thehustl), HD63C09EP (Lethalen), HD63B09EP (source)
- DRIVERS: battlnts.cpp, bladestl.cpp, chinagat.cpp, combatsc.cpp, contra.cpp, ddragon.cpp, dec8.cpp, fastlane.cpp, flkatck.cpp, itech8.cpp, labyrunr.cpp, lethal.cpp, mainevt.cpp and rockrage.cpp
- SOURCE: cpu\hd6309\hd6309.cpp


8.2   HD61700

- 0.272              : Added standard IRQ callback (hd61700\hd61700.cpp) [AJR].
- 0.213              : Correct address shift for HD61700 (tools\unidasm.cpp) [AJR].
- 0.193              : Added cpu\hd61700\hd61700d.h.
- 0.180              : Changed the HD61700 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.155              : Converted to use DEVCB callbacks instead of static config, and removed a few trampolines in (MESS) Casio PB-1000 as a consequence [Fabio Priuli].
- 0.148u2            : Fixed uninitialized member in hd61700\hd61700.c [Oliver Stoeneberg].
- 0.141u1            : Added cpu\hd61700\hd61700.c/h and hd61700d.c. Added HD61700 CPU core used for emulate Casio PB-1000/PB-2000c in MESS [Sandro Ronco].
- DRIVERS: (MESS) pb1000.cpp
- SOURCE: cpu\hd61700\hd61700.cpp


8.3   HD63701

- 0.261              : Moved RAM, ROM and I/O areas into internal maps for all variants (including a few that lacked their own device types until now). CPU device now saves NVRAM for applicable standby areas, which only include the first part of internal RAM on NMOS variants (m6800\m6801.cpp) [AJR].
- 0.220              : Splitted HD63701 device into several different types (functionally identical now, but won't be compatible once accuracy improves). Replaced Super Dodge Ball protection simulation with emulation of HD63701Y0 MCU [AJR].
- 0.186              : Quick and dirty split of most MC6801/MC6803/HD63701 features from base M6800 class. The code remains generally archaic and awful and in need of a sweeping rewrite. At least one static variable is no more [AJR].
- 24th December  2010: Dr. Decapitator - The MCU (HD63701) from Double Dragon has been decapped. The readout matched the existing bootleg MCU dump in MAME, so the pirates in the 80's must have read it out correctly as opposed to coding their own. You can see a picture of it wired up for reading below.
- 11th July 2010     : Dr. Decapitator - Work has started on the 63701 that Technos used in Super Dodge Ball and Double Dragon. Below is a photo of the 63701 from Super Dodge Ball.
- 0.139              : Sandro Ronco fixed HD63701 SLP opcode.
- 0.120u2            : Curt Coder added SCI support to M6803/HD63701.
- 0.37b1             : 6803/63701 external port writes no longer set to 1 the bits that are set as inputs in the DDR register. Instead, they are set to the value returned by a read from the port [Tatsuyuki Satoh].
- 17th November  1999: Ernesto Corvi fixed sound in all the games using Namco sound system driven by a HD63701 (incl. Baraduke and Metrocross).
- 0.36b8             : Tatsuyuki Satoh finally fixed the CMPX instruction in the 680x core. On the 6800 it does not affect the C flag, on the others (6803, 63701) it does.
- 0.36b7             : Some fixes to HD63701 IRQ handling, and support for ICI (Input Capture Interrupt) [Tatsuyuki Satoh].
-  2nd March     1999: Ernesto Corvi fixed Pacland and Rolling Thunder sound by emulating two new opcodes in the 63701 core.
- 0.31               : Ernesto Corvi added support for HD63701YO extra opcodes to the M6808 emulation.
- NOTES: The HD63701 is a MCU for input, EEPROM and DAC. It's similiar to the M6800 and compatible to the M6808 with extra instructions.
- GAMES: Namco - Pac-Land (1984), Sky Kid (1985), Hopping Mappy (1986), Pac-Mania (1987), Tank Force (1991)
- PCB: HD63701YOP (Ddragon), 637B01 (Darktowr), 60A1  DIP40 (Drgnbstr, 3D Thunder Ceptor2), 64A1 (Dangseed, BoxyBoy, Splatter), 64A1 = 6809 based Namco custom CPU (Bakutotu, Berabohm), HD63701Y0P (Spdodgeb)
- DRIVERS: baraduke.cpp, ddragon.cpp, namcos1.cpp, namcos86.cpp, pacland.cpp, skykid.cpp and tceptor.cpp
- SOURCE: cpu\m6800\m6801.cpp


8.4   HD63705

- 0.282              : Use logmacro logging (m6805\hd6305.cpp) [Nigel Barnes].
- 0.273              : Added cpu\m6805\hd6305.cpp/h. Split off HD6305/63705 emulation to a separate source file [AJR]. Make code style consistent. Refresh port outputs when ddr changes, pass ddr through mem_mask. Moved common peripherals to base class. Changed port functions to templates (m6805\hd6305.cpp). Added HD6305Y0 (m6805\hd6305.cpp) [hap]. Added special function registers to hd6305y2 internal map [AJR].
- 0.272              : Put hd63705 functions in hd63705z0_device class instead of base class (m6805\m6805.cpp) [hap].
- 0.259              : Use vector_mask parameter for HD6305 variants (m6805\m6805.cpp) [AJR].
- 0.258              : Changed description to 'Hitachi HD63705Z0'. Split HD63705 into specific types. Moved on-chip memory into internal maps [AJR].
- 0.78u3             : Fixed HD63705 address bus width (namcos2 crash) [Aaron Giles].
- NOTES: The HD63705 is a IO Microcontroller for Dips/input ports.
- DRIVERS: namcos2.cpp and namcos21.cpp
- SOURCE: cpu\m6805\hd6305.cpp



8.5   HD641016

- 0.262              : Correct disassembly of SMOV and SSTR (h16\h16dasm.cpp) [Marijn van der Werf, AJR].
- 0.223              : Added cpu\h16\hd641016.cpp/h and cpu\h16\h16dasm.cpp/h. Added H16 disassembler and skeleton HD641016 CPU device [AJR]. Removed unsupported setter, emumem enforces unmapval 0 or ~0 (h16\h16dasm.cpp) [hap].
- NOTES: Hitachi HD641016 16-bit MPU
- DRIVERS: sigmab88.cpp - Cool 104 (Sigma 1997)
- SOURCE: cpu\h16\hd641016.cpp


8.6   H8

- 0.278              : Wrap channel to avoid crash if end channel gets set lower than current channel (h8\h8_adc.cpp). Fixes 'Final Furlong' crashes during attract mode [Vas Crabb].
- 0.273              : Handle forced aborts (h8\h8_dma.cpp). Fixes (MESS) microkorg quits after the red warning screen [AJR].
- 0.271              : Disable logging by default & don't log debugger reads. Only start sending data via DMA if transmitter is enabled. Clear TEND when sending data via DMA. TDRE, RDRF, ORER, PER and FER flags can be cleared to 0 only if they have first been read while set to 1. Only set TEND when there is no more data to send. Receiver is started only on high to low rxd in asynchronous mode, when receiving and sending in synchronous mode when data is sent, or continuously when receiving without sending in synchronous mode. Set rx status to idle when stopping clock in rx_async_step(). Removed double invert when calculating parity in rx_async_step(). Removed redundant check for synchronous mode in rx_async_step() (h8\h8_sci.cpp) [smf].
- 0.270              : Put register list enum under public (h8\h8.h) [hap].
- 0.268              : Added system clock getter (divided clock()) (h8\h8.h, h8\h8_sci.cpp and h8\h8_timer8.cpp). Added safety check in internal_update for possible negative ticks (h8\h8_sci.cpp) [hap].
- 0.267              : Return 0xff when reading from port DDR (eg. RMW opcodes on DDR) [hap].
- 0.265              : Correct division of negative numbers (h8\h8.lst) [O. Galibert].
- 0.264              : Split rx and tx clocks to make full duplex work. Use logmacro (h8\h8_sci.cpp) [O. Galibert]. Clock divider table was the wrong way around (h8\h8_watchdog.cpp). Don't detect an NMI at power-on when initial pin state is 'ASSERT_LINE'. Removed unneeded trampolines (maybe a leftover from the past when emumem didn't support it) (h8\h8_intc.cpp). Prevent multiple interrupts when timer wasn't clocked. Removed impossible check. Overflow only happens when m_counter_cycle is the full range. Edge case: If live counter is above m_counter_cycle, first count to 0xff instead of immediate modulo. Fixed edge with compare match if both tt and tgr are larger than counter_cycle (h8\h8_timer8.cpp and h8\h8_timer16.cpp). Removed unneeded timer_tick function (h8\h8_timer8.cpp). Fixed addx8/subx8 H flag when C=1 (h8\h8.cpp). Fixed absolute address bst/bist opcode IMM data (h8\h8.lst). h8s2329 ADCR CKS1 is on bit 3 and correct typo (h8\h8_adc.cpp). Apparently fixed Funcube watchdog reset issue. Improved overflow flag reset (h8\h8_watchdog.cpp). Fixed standby time travel problem (h8\h8*). Fixed N flag with exts opcode, regression with jsr abs8i, bst abs16 opcode and rte in normal mode (h8\h8.lst). Added internal rom to address map for some h8 devices (h8\h8*). Digital I/O ports are 8bit (probably leftover from when they were in AS_IO address map) (Misc h8 drivers: flashbeats.cpp, hrdvd.cpp, metro.cpp, namcond1.cpp, namcos10.cpp, seta2.cpp and invqix.cpp). Write hi-z output pins as 1 (h8\h8_port.cpp). Added more variables to savestate (h8\h8*). Fixed issue with multiple pending edge triggered irq (h8\h8_intc.cpp). Don't save the mode settings (h8\h8.cpp). Compare match event was off by 1 (h8\h8_timer8.cpp and h8\h8_timer16.cpp) [hap]. Entirely revise clocking. Fixed sync transmissions (h8\h8_sci.cpp). Correct typo with DASM abs16 (h8\h8d.cpp) [O. Galibert]. Suppress SCK transition at end of transmit sequence (h8\h8_sci.cpp) [AJR].
- 0.263              : Status flags are set no matter the irq enable flags (h8\h8_timer16.cpp). Fixed V flag with INC opcodes. Fixed add/sub16 H flag and rotxl2 lsb (h8\h8.cpp). Like subx, addx does not modify Z flag if result is 0. Fixed jsr abs8i return address. Added fetch_noinc for jsr opcodes and preliminary support for movfpe/movtpe (h8\h8.lst). Changed bsr rel16 fetch_noinc back to internal(1) (h8\h8.lst). Port registers are not modified at reset (h8\h8_port.cpp). Improved cycle timing for pre-h8s arch (h8\h8.cpp and h8\h8s2000.cpp). Added software standby mode and optional NVRAM (h8\h8.cpp). Fixed Yamaha MU100 regression with 16bit timer (h8\h8_timer16.cpp). Return 0xff for unconnected digital input ports (h8\h8.cpp). Fixed divide by 0 crash (h8\h8_timer8.cpp). RTE does not block interrupts (h8\h8.cpp). h8h does not have 16-bit iscr. Added support for rising edge interrupts. Base h8 does not have ISR. Don't clear irq pin inputs at reset (h8\h8_intc.cpp). Pass along ddr on write for high-impedance pins (h8\h8_port.cpp). Small correction in recalc_event (h8\h8_timer8.cpp). Shorthand variable types (h8\*.*). Appears to be better for performance without virtual calls for r/w functions (h8\h8.cpp). Set logerror verbosity to 0 (performance issue in (MESS) Kasparov GK 2000) (h8\h8_sci.cpp). Added variables to save_item (h8\h8*.*). Correct interrupt timing after software standby (h8\h8.cpp) [hap].
- 0.261              : Fixed divs (h8\h8.lst). Fixes the voice volumes in the (MESS) Yamaha MU100 [O. Galibert].
- 0.256              : Make fully wait-states compatible. Use finders for H8. Reorganized and upgrade h8\h8_dma.cpp. Converted h8_adc and h8_port I/O to devcb at cpu level. More h8 I/O simplifications. Bring h8_sci interface up in the cpu [O. Galibert]. Added PC to unhooked port logging message and notes about and slightly adjust cycle counts [AJR]. Miscellaneous cleanup [Vas Crabb].
- 0.254              : Enabled DEND interrupts (h8\h8_dma.cpp) [AJR].
- 0.253              : Made clock mode a scoped enumeration and fixed a save state issue (h8\h8_sci.cpp). Replaced sprintf with type-safe equivalents [Erik Newton].
- 0.248              : Added debugger exception hook calls [AJR].
- 0.247              : MULXS & MULXU are slower without a MAC (h8\h8.lst) [AJR].
- 0.240              : Don't set TDRE when receiving (cpu\h8\h8_sci.cpp) [Devin Acker].
- 0.231              : Fixed disassembly of abs16 (h8\h8d.cpp) [O. Galibert].
- 0.227              : Preliminary support for short address mode (h8\h8_dma.cpp) [AJR]. Fixed interpretation of IPR bits for the H8S CPUs. (MESS) PSR-340 PortaSound boots now (cpu\h8\h8_intc.cpp). Fixed race condition in SCI where a new byte was written right before the last tick and froze the transmitter (h8\h8_sci.cpp) [R. Belmont]. Fixed the watchdog read, fixes (MESS) Yamaha MU80 test mode (h8\h8_watchdog.cpp) [O. Galibert].
- 0.223              : Initialized some variables which were causing malfunctions in debug DEVNOCLEAR build (h8\h8_dma.cpp) [Osso].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.215              : Make debug PC adjustment and breakpoints actually work [AJR].
- 0.214              : Disassembly improvements: Correct sign extension for 16-bit absolute addresses. Use H' prefix for hexadecimal numbers. Restrict address length depending on model. Format arguments in separate column [AJR].
- 0.205              : Improved logerror in relation to machine().side_effects (h8\h8_watchdog.cpp). Internal MCFG elimination [AJR].
- 0.193              : Added cpu\h8\h8d.cpp/h and h8hd.cpp/h.
- 0.186              : Fixed H8 instruction eepmov.b (used r4h instead of r4l). Added support for non-autorequest DMA (DREQ edge, DREQ level) in H8. Added DMA channels and RTMCSR register to H8/3002 [BartmanAbyss].
- 0.180              : Changed the H8 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.177              : Changed endianness of H8 ADC register (cpu\h8\h8_adc.cpp). This was broken in a rewrite a long time ago, breaking the controls in some Namco System 12 (and probably 23) games. This commit improves controls in golgo13, g13knd and technodr. H8 SCI improvements. This should hopefully prevent the sub CPU from locking up (and making controls unresponsive) in technodr [superctr].
- 0.174              : Added cpu\h8\h8_dma.cpp/h, h8_dtc.cpp/h and h8_watchdog.cpp/h. Added DTC, DMA and watchdog to H8. Lot of fixes [O. Galibert].
- 0.171              : Fixed a typo in the H8 array length of the register names string [Felipe Sanches].
- 0.165              : Fixed problem with uninitialized variables in cpu\h8\h8_timer16.c, this fixes all sets in itgambl2.c and namcos23.c are crashing directly after OK [hap].
- 0.160              : Removed except clause syntax not supported on Python 3. This change uses sys.exc_info()[1] instead of the "as" syntax to retain Python 2.5 compatibility (cpu\h8\h8make.py). Removed unused "opc", fix possible undefined name "inf" (cpu\h8\h8make.py). Send error messages to stderr instead of stdout (h8\h8make.py) [Mike Naberezny].
- 0.159              : Added some more H8 state saving, fixes Last Fighting and Puzzlet (Japan) saving problems [Osso].
- 0.158              : Fixed some typos (cpu\h8\h8_sci.c) [O. Galibert]. Fixed function definition of description() (cpu\h8\h8make.py) [Mike Naberezny].
- 0.157              : Added save state support to cpu\h8\h8_intc.c. Puzzlet save state regression not totally fixed, though. Added save state support to cpu\h8\h8_timer16.c. Fixes Last Fighting save state regression [Osso]. Init order issue (cpu\h8\h8_timer16.c) [O. Galibert].
- 0.155              : Fixed recompute_bcount regression in cpu\h8\h8.c, this fixed 'SUBCPU INITIALIZE TIME OUT' in 500 GP [hap]. Avoid Clang warning in cpu\h8\h8_timer16.c [Oliver Stoeneberg].
- 0.154              : H8 compounded. Disassembly fix. Fixed missing debugger hook calls. Implement sync-start (h8\h8_sci.c). Fix problem in the sleep instruction (h8\h8make.py) [O. Galibert].
- 0.153              : Added cpu\h8\h8.c/h, h8.lst, h8_adc.c/h, h8_intc.c/h, h8_port.c/h, h8_sci.c/h, h8_timer8.c/h, h8_timer16.c/h, h8h.c/h and h8make.py. H8 rewrite. Sort out UE polarity. Fixed enable handling in timers. Prettify registers/flags in debugger. For tools\unidasm.c we need to find a H8 solution there. Get some speed back in Namco System 23 driver. Implement the 8-bits timers, Namco System 23 coins work again [O. Galibert]. H8 dec16/inc16 fix [Fabio Priuli]. Fixed H8 build [Mike Naberezny]. Fixed integer constant is too large for 'long' type" error on GCC 4.4.7 [Lord Nightmare].
- 0.84u2             : Added h8disasm.c, h8periph.c and h8priv.h.
- NOTES: H8-300 base cpu
- SOURCE: cpu\h8\h8.cpp


8.61  H8/300

- 0.263              : Correct H8/300 opcode map (i suspect H8/300H also has opcodes in the map that belong to newer arch but didnt check). Fixed mov with negative disp for H8/300 (h8\h8.lst) [hap].
- 0.236              : Fixed NMI on H8/300 (h8\h8_intc.cpp) [O. Galibert].
- 0.186              : Added support for H8/300H to h8_dma (previously only H8/300S supported) [BartmanAbyss].
- SOURCE: cpu\h8\h8.cpp


8.62  H8/325

- 0.268              : Mask unused sci register bits (h8\h8325.cpp) [hap].
- 0.264              : Mask unused iscr/ier bits (h8\h8325.cpp) [hap].
- 0.263              : Added cpu\h8\h8325.cpp/h. Added preliminary H8/325. Added md pins callback. Added h8/325 interrupt controller and 16bit timer. Use device arrays (h8\h8325.cpp) [hap].
- NOTES: Hitachi H8/3257, Hitachi H8/3256, Hitachi H8/325, Hitachi H8/324, Hitachi H8/323 and Hitachi H8/322.
- DRIVERS: (MESS) gk2000.cpp, ivant.cpp, krypton_regency.cpp, mirage.cpp, prisma.cpp, sapphire.cpp, tatrain.cpp and zircon2.cpp
- SOURCE: cpu\h8\h8325.cpp



8.63  H8/500

- 0.265              : Removed "intram" space to simplify memory interface for future emulation (h8500\h8500.cpp) [AJR].
- 0.253              : Fixed silly mistake in disassembly of illegal instructions (h8500\h8500dasm.cpp) [AJR].
- 0.244              : H8/500 disassembler updates. Added some spaces between instruction operands. Render just the first byte of any illegal instruction (cpu\h8500\h8500dasm.cpp) [AJR].
- 0.233              : Added mode control and EPROM variant types to CPU H8/5xx [AJR].
- 0.221              : Added cpu\h8500\h8500.cpp/h and h8500dasm.cpp/h. Added H8/500 disassembler and skeleton CPU device family. Fixed length calculation for indirect JMP/JSR. Fixed JMP @aa:16 decoding and use BSR mnemonic for relative calls (h8500\h8500dasm.cpp) [AJR].
- NOTES: Hitachi H8/500 Series
- DRIVERS: ???
- SOURCE: cpu\h8500\h8500.cpp


8.64  H8/510
- 0.221              : Added cpu\h8500\h8510.cpp/h. Added H8/500 disassembler and skeleton CPU device family [AJR].
- NOTES: Hitachi HD6415108 (H8/510)
- DRIVERS: ???
- SOURCE: cpu\h8500\h8510.cpp


8.65  H8/520
- 0.233              : Added 'Hitachi HD6475208 (H8/520)' device.
- 0.221              : Added cpu\h8500\h8520.cpp/h. Added 'Hitachi HD6435208 (H8/520)' device. Added H8/500 disassembler and skeleton CPU device family [AJR].
- NOTES: Hitachi HD6435208 (H8/520) and HD6475208 (H8/520)
- DRIVERS: bingoman.cpp
- SOURCE: cpu\h8500\h8520.cpp


8.66  H8/532
- 0.221              : Added cpu\h8500\h8532.cpp/h. Added H8/500 disassembler and skeleton CPU device family [AJR].
- NOTES: Hitachi HD6435328 (H8/532)
- DRIVERS: ???
- SOURCE: cpu\h8500\h8532.cpp


8.67  H8/534

- 0.233              : Added 'Hitachi HD6435348 (H8/534)' and HD6475368 (H8/536) device.
- 0.225              : Added 'Hitachi HD6435368 (H8/536)' device.
- 0.221              : Added cpu\h8500\h8534.cpp/h. Added 'Hitachi HD6475348 (H8/534)' device. Added H8/500 disassembler and skeleton CPU device family [AJR].
- NOTES: Hitachi HD6475348 (H8/534)
- DRIVERS: bingoman.cpp
- SOURCE: cpu\h8500\h8534.cpp


8.68  H8S/2xxx

- 0.264              : Changed h8\h8s2320.cpp/h to h8\h8s2329.cpp/h. Added h8\h8s2319.cpp/h. h8s2329 ADCR CKS1 is on bit 3 and correct typo (h8\h8_adc.cpp). h8s2329 does not have ICR registers (h8\h8s2329.cpp). Added h8s/2319 family. Moved mac_saturating var to H8S2600 and hook it up [hap]. The abs16/abs32 variants of the bit operations seem to have been introduced in the h8s2000 (h8\h8s2000.h) [O. Galibert].
- 0.254              : Enabled DREQ inputs and added TEND outputs (h8\h8s2320.cpp) [AJR].
- 0.230              : Added 'Hitachi H8S/2655' device.
- 0.222              : Allow ANDC, ORC and XORC operations on EXR. Correct disassembly for multiword instructions with 8-bit immediate operands (h8\h8s2000.h) [AJR].
- 0.193              : Added cpu\h8\h8s2000d.cpp/h and h8s2600d.cpp/h.
- 0.184              : Added 'H8S/2352', 'H8S/2357', 'H8S/2390', 'H8S/2392' and 'H8S/2398' device.
- 0.153              : Added cpu\h8\h8s2000.c/h, h8s2245.c/h, h8s2320.c/h, h8s2357.c/h, h8s2600.c/h and h8s2655.c/h. Added 'H8S/2394' device. H8 rewrite. Fixes invqix at least [O. Galibert].
- 0.143u3            : Added peripheral and IRQ support for H8S/2xxx CPUs [Tim Schuerewegen, R. Belmont]. Rewrote H8S/2xxx timers [Tim Schuerewegen].
- NOTES: Hitachi H8S/2xxx CPUs => H8S/2241, H8S/2242, H8S/2245, H8S/2246, H8S/2320, H8S/2321, H8S/2322, H8S/2323, H8S/2324, H8S/2326, H8S/2327, H8S/2328, H8S/2329, H8S/2394, H8S/2653 and H8S/2655
- DRIVERS: dinoking.cpp, firebeat.cpp, invqix.cpp, novadesitec_fr004.cpp, segaatom.cpp and truesys.cpp
- SOURCE: cpu\h8\h8s2357.cpp and h8s2655.cpp



8.69  H8/3xxx

- 0.186              : Fixed H8 instruction eepmov.b (used r4h instead of r4l). Added support for non-autorequest DMA (DREQ edge, DREQ level) in H8. Added DMA channels and RTMCSR register to H8/3002 [BartmanAbyss].
- 0.153              : H8 rewrite [O. Galibert].
- 0.148u2            : H8 PC and CCR are packed into one longword (cpu\h83002\h8_16.c). Fixes coinmvga games [O. Galibert, R. Belmont]. Fixed H8S regression, cybikoxt (MESS) now works again (cpu\h83002\h8speriph.c) [Sandro Ronco].
- 0.147u4            : H8 updates: [R. Belmont]: Preliminary H8S/2655 support. Fixed so RTE doesn't allow the PC to go outside the address space. Supported additional forms of BTST and BSET. Removed incorrect halt on BVC/BVS instructions. H8S analog I/O is now routed to the driver like in the original H8s (cpu\h83002\h8.h and h8speriph.c).
- 0.146u5            : Very preliminary H8S/2294 support. Fixed H8/H8S MULXS.B to select the proper source register. Fixes text in Qix section of invqix. Correct disassembly of MULXS.B and MULXS.W [R. Belmont].
- 0.143u3            : Added cpu\h83002\h8speriph.c. R. Belmont implemented H8 LDM/STM, LDC/STC, double-shift versions of SHLL/SHLR, BIT immediate, ROTR.B and .L, and ROTXR.L. Makes Epoch and Cybiko happy. Added SLEEP opcode. Added the rest of the H8S double-shifts, fixed up some bit operations and added 8-bit mulxs/divxs. Tim Schuerewegen fixed bset instruction.
- 0.141u1            : R. Belmont and Julian Sikorski fixed H8 unterminated string buffer.
- 0.140u3            : R. Belmont implemented H8 ldc #imm, ccr and rotr.w Rx for 'Mahjong Hanafuda Cosplay Tengoku 5'.
- 0.136u4            : R. Belmont fixed stack trashing when simultaneous IRQ sources asserted in the H8 series. Added bild and bist opcodes. Fixed unknown H8/3xx opcode (PC=2) 100 (motoxgo, timecrs2b).
- 0.131u3            : H8 series MCU updates [R. Belmont]: Implemented 8-bit timers and free-running counter for H8/3334. Added bld #imm, @Rd instruction. Improvements to interrupts and the serial ports.
- 0.131u1            : R. Belmont improved interrupt handling for the 8/16 bit H8s.
- 0.129u3            : Luca Elia implemented a few more H8/3xx instructions.
- 0.128u4            : Changed cpu\h83002\h83002.c/h to cpu\h83002\h8_8.c, h8_16.c, h8ops.h and h8.h. Big H8 update [R. Belmont]: Converted H8 CPUs to the new memory functions. Un-deprecat'ed the H8. Pointer-ified all H8 cores. Some cleanup and renames toward additional future work.
- 0.122u8            : Added some instructions to the H8/30xx CPU [Luca Elia]: or.l ERs, ERd; rotl/shal.l ERd; not.l/neg.l ERd; exts.w Rd; sub/or/xor.l #Imm:32, ERd;  bset/bnot/bclr.b Rn, @ERd; bst/bist.b #Imm:3, @ERd and bnot.b #Imm:3, @ERd.
- SOURCE: cpu\h83002\h8_16.cpp


8.6A  H8/3002

- 0.254              : Clean up TEND configuration (h8\h83002.cpp) [AJR].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.212              : Added configuration option to restrict address space to 20 bits [AJR].
- 0.186              : Added DMA channels and RTMCSR register to H8/3002 [BartmanAbyss].
- 0.177              : Updated H8/3002 frequency for namcos12 and namcos23. This is based on sound driver research, and comparing the H8/3002 ND-1/ND-2 programs with the System 12 and 23 programs. The figures are similar to the previously measured clock speeds so chances are the earlier values were just measurement error [superctr].
- 0.153              : Added cpu\h8\h83002.c/h. Removed cpu\h83002\h8.h, h8_16.c, h8_8.c, h8disasm.c, h8ops.h, h8ops.h, h8periph.c, h8priv.h and h8speriph.c. H8 rewrite [O. Galibert].
- 0.109u5            : Aaron Giles converted the H83002 disassemblers to the new format and added step in/out support where it was obvious.
- 0.105u1            : Tomasz Slanina added several missing H8 opcodes to the core and color DAC to Last Fighting driver.
- 0.103u3            : H8 update [R. Belmont]: Limited vector reads to 24 bits. Added SHLL.W, EXTU.L, SUBS.L #2, and SUBS.L #4 opcodes.
- 0.102u3            : Updated the H8/3002 emulation [R. Belmont]: Added more bXXX.b #imm, (@)Rn instructions. Added subtract with carry instructions.
- 0.99u1             : cync fixed several problems in the H8/3002 core. Improves sound in Namco System 12 and ND-1.
-  5th August    2005: R. Belmont - Got a nice present today from a coder who goes by cync: a set of major bugfixes to the H8/3002 CPU core. As you know, this is the "sub-CPU" in many later Namco games. So what do the fixes do? They correct most of what was wrong with the sound and music in all of the ND-1 (NCV1/NCV2) and System 12 games. All the games involved now sound way better, and of course I've already backported the fixes to ZiNc so the music's better there too. Paca Paca in ZiNc is now reasonably playable, since the music now actually sounds like music. And games that had decent sound before like Fighting Layer are pretty much perfect now. It's awesome. Thanks, cync!
- 0.95u6             : Fixed h8_group7 opcode (case 0x8) and disassembler.
- 0.86u3             : R. Belmont fixed H8/3002 btst #imm, @Rn instruction - it was giving reversed results, which crashed ncv2's MCU program.
-  2nd September 2004: R. Belmont - Fixed a bug in the H8/3002 CPU core. Got it on speaking terms with the 68000 on the Namco ND-1 hardware. Result: Namco Classics Collection volumes 1 and 2 are both fully playable with full sound and music.
- 0.86u1             : R. Belmont fixed endianness problem in H8/3002.
- 0.84u5             : R. Belmont fixed an issue in the H8/3002 core where the timer start register would mess up timers that were already running. Improves the music tempo for S12 games.
- 0.84u2             : Added cpu\h83002\h83002.c/h, h8disasm.c, h8periph.c and h8priv.h. Added a core for the Hitachi H8/3002 MCU [R. Belmont]. It was originally written by the Zinc authors The_Author & DynaChicken for Zinc. R. Belmont have fairly extensively rewritten it and adapted it to MAME semantics with their permission. Cycle counts are probably not right because the manual's a bit confusing, but they're at least ballpark.
-  8th July      2004: R. Belmont - More H8/3002 work. Rewrote the timers to use MAME's timer system so music speeds should be accurate now. Need to finish the ITU cleanup now.
-  4th July      2004: R. Belmont - The H8/3002 work continues along. I've fixed a ton of bugs that The_Author left in the original core now.
- 29th June      2004: R. Belmont - Started cleaning up ZiNc's H8/3002 core for MAME submission (this will add sound and fix protection on Namco Classics 1 & 2 and the System 12 games). Fixed some flag calculations on the ADD opcodes and some "edge cases" on the C352 to improve music in NCV1/2. Still need to fix some issues with the controls in Aqua Rush and Paca Paca.
- PCB: HD6413002F16 microcontroller, QFP100 (Ncv1, Ncv2), HD6413002F17 (TekkenTagTournament), Hitachi H8/3002 HD6413002F17 (Aquarush, 500gp)
- NOTES: Hitachi H8/3002. The H8/3000 MCU series is normally back-compatible to the 8-bit H8/300, but the 3002 does not include "emulation mode" - it always runs in full 16/32-bit ("advanced") mode. So this core is not suitable for general H8/300 emulation.
- PCB: Hitachi H8/3002 HD6413002F17 MCU (Tekkentt)
- DRIVERS: maygayep.cpp, minivideo.cpp, namcond1.cpp, namcos12.cpp and namcos23.cpp
- SOURCE: cpu\h8\h83002.cpp


8.6B  H8/3003

- 0.254              : Expose all four TEND outputs [AJR].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.212              : Added configuration option to restrict address space to 20 bits [AJR].
- 0.201              : cpu\h8\h83003.cpp/h. Added H8/3003 support [R. Belmont].
- DRIVERS: (MESS) blw700i.cpp and ymmu100.cpp
- SOURCE: cpu\h8\h83003.cpp


8.6C  H8/3006
- 0.222              : READ/WRITE macros removal [Osso].
- 0.212              : Added configuration option to restrict address space to 20 bits [AJR].
- 0.153              : Added cpu\h8\h83006.c/h. H8 rewrite [O. Galibert].
- DRIVERS: ?
- SOURCE: cpu\h8\h83006.cpp


8.6D  H8/3007

- 0.129u3            : Luca Elia implemented a few more H8/3xx instructions and added Funcube 2 + 4 to seta2.c.
- 0.128u4            : Big H8 update [R. Belmont]: Converted H8 CPUs to the new memory functions and un-deprecat'ed the H8. Pointer-ified all H8 cores. Some cleanup and renames toward additional future work.
- 0.122u8            : Added some instructions to the H8/30xx CPU [Luca Elia]: or.l ERs, ERd; rotl/shal.l ERd; not.l/neg.l ERd; exts.w Rd; sub/or/xor.l #Imm:32, ERd;  bset/bnot/bclr.b Rn, @ERd; bst/bist.b #Imm:3, @ERd and bnot.b #Imm:3, @ERd. Added H8/3007 & H8/3044 variants with their memory maps. Preliminary implementation of the H8/3007 timers.
- NOTES: Hitachi H8/3007
- DRIVERS: coinmvga.cpp, flashbeats.cpp, konendev.cpp, metro.cpp and seta2.cpp
- SOURCE: cpu\h8\h83006.cpp


8.6E  H8/3008
- 0.222              : READ/WRITE macros removal [Osso].
- 0.212              : Added configuration option to restrict address space to 20 bits [AJR].
- 0.153              : Added cpu\h8\h83008.c/h. Added H8/3008 [O. Galibert]. Added H8/3008 CPU to Bowling Try [Angelo Salese].
- NOTES: Hitachi H8/3008
- DRIVERS: bowltry.cpp
- SOURCE: cpu\h8\h83008.cpp


8.6F  H8/303x

- 0.231: Added cpu\h8\h83032.cpp/h. Added the Hitachi H8/3030, H8/3031 and H8/3032 CPUs [O. Galibert].
- NOTES: Hitachi H8/3008
- DRIVERS: ???
- SOURCE: cpu\h8\h83032.cpp



8.6G  H8/3040/3041/3042

- 0.232              : Added cpu\h8\h83042.cpp/h. Added Hitachi H8/3040, Hitachi H8/3041 and Hitachi H8/3042. Added skeleton driver for Sony/Apple CRD-254SH 4x CDROM reader with Hitachi H8/3040 CPU [O. Galibert].
- DRIVERS: (MESS) ???
- SOURCE: cpu\h8\h83042.cpp



8.6H  H8/3044

- 0.128u4            : Big H8 update [R. Belmont]: Converted H8 CPUs to the new memory functions and un-deprecat'ed the H8. Pointer-ified all H8 cores. Some cleanup and renames toward additional future work.
- 0.122u8            : Added some instructions to the H8/30xx CPU [Luca Elia]: or.l ERs, ERd; rotl/shal.l ERd; not.l/neg.l ERd; exts.w Rd; sub/or/xor.l #Imm:32, ERd;  bset/bnot/bclr.b Rn, @ERd; bst/bist.b #Imm:3, @ERd and bnot.b #Imm:3, @ERd. Added H8/3007 & H8/3044 variants with their memory maps. Preliminary implementation of the H8/3007 timers.
- 22nd April     2007: Luca Elia - I've been working on two games by Taiwanese Subsino. They use the Hitachi H8/3044 CPU, which features an undumped internal ROM, and whose emulation in MAME is somewhat incomplete. Add to that a bit of protection, and the prospects of getting the games to work were limited. Fortunately, though, it looks like the internal ROM is not critical, as I got Bishou Jan (Smiling Jan) (Subsino 1999) to work, albeit with some issues. The video hardware is tilemap based. At the moment there is no sound: the sound chip is unknown, nor do I see sound related writes. Furthermore I had to slightly patch the interrupt routines, and skip what appears to be protection checks. I also had to fix/add the emulation of several instructions in the CPU core. The other Subsino game is Last Fighting, a Bomberman clone currently in MAME as non-working. Same CPU but different, blitter based, video hardware. I'm starting to implement that and, even if much work is still needed, I'm now hopeful to get it to run.
- NOTES: The Hitachi H8/3044 is a H8/3002 with 24bit address bus and has 32k MASKROM and 2k RAM, clock input is 16.000MHz [32/2]. MD0,MD1 & MD2 are configured to MODE 6 16M-Byte Expanded Mode with the on-chip 32k MASKROM enabled.
- PCB: H8/3044 - Subsino re-badged Hitachi H8/3044 HD6433044A22F Microcontroller, QFP100 (Bishjan, Lastfght)
- DRIVERS: itgambl3.cpp, lastfght.cpp, sealy.cpp and subsino2.cpp
- SOURCE: cpu\h8\h83048.cpp


8.6I  H8/3048

- 0.222              : READ/WRITE macros removal [Osso].
- 0.212              : Added configuration option to restrict address space to 20 bits. Undo variable shadowing [AJR].
- 0.153              : Added cpu\h8\h83048.c/h. H8 rewrite [O. Galibert].
- NOTES: Hitachi H8/3048
- DRIVERS: itgamble.cpp and winbingo.cpp
- SOURCE: cpu\h8\h83048.cpp


8.6J  H8/83217
- 0.264              : Added cpu\h8\h83217.cpp/h. Added basic support for h8/3217 [hap].
- NOTES: Hitachi H8/3217, Hitachi H8/3216, Hitachi H8/3214, Hitachi H8/3212 and Hitachi H8/3202
- SOURCE: cpu\h8\h83217.cpp


8.6K  H8/3258
- PCB: Hitachi H8/325 HD6473258P10 MCU (Vgoalsoc, Les Fiches)


8.6L  H8/3334

- 0.264              : Added readback of wscr and stcr (h8\h83337.cpp) [hap].
- 0.137              : Added H8/3334 analog input ports [R. Belmont].
- 0.131u3            : H8 series MCU updates [R. Belmont]: Implemented 8-bit timers and free-running counter for H8/3334. Added bld #imm, @Rd instruction. Improvements to interrupts and the serial ports. Namco System 23 update [R. Belmont]: Changes and documentation added on how the I/O board is hooked up. The H8/3334 based TSS-I/O board sometimes handshakes successfully in Time Crisis 2 now but timing-related problems remain.
- 0.128u4            : Big H8 update [R. Belmont]: Added support for 8-bit H8 family MCUs, starting with the H8/3334. Converted H8 CPUs to the new memory functions and un-deprecat'ed the H8. Pointer-ified all H8 cores. Some cleanup and renames toward additional future work. Added extremely preliminary support for I/O boards to the Namco System 23 with the H8/3334. Added H8/3334 (14745600 Hz) CPU3 and IC3 (256k) from I/O board (HD643334 H8/3334 MCU code) to Time Crisis 2.
- GAMES: Motocross Go! and Time Crisis 2
- NOTES: Hitachi H8/3334
- DRIVERS: namcos12.cpp and namcos23.cpp
- SOURCE: cpu\h8\h83337.cpp


8.6M  H8/3337

- 0.264              : Added readback of wscr and stcr (h8\h83337.cpp) [hap].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.153              : Added cpu\h8\h83337.c/h. H8 rewrite [O. Galibert].
- PCB: Hitachi H8/3337 HD64F3337CP16 (Elvis)
- NOTES: Hitachi H8/3337
- DRIVERS: itgambl2.cpp and rallypnt.cpp
- SOURCE: cpu\h8\h83337.cpp


8.6N  Namco C77
- 0.271              : Added cpu\h8\c77.cpp/h. Added C77, custom H8 for Namco [smf].
- NOTES: Similar to H83337, but some onboard peripherals and vectors were moved. Only the peripherals used in Cyber Lead I/O boards have been mapped.
- SOURCE: cpu\h8\c77.cpp



8.7   Zilog Z180

- 0.271              : Fixed calculation of framing and parity errors (z180\z180asci.cpp) [AJR].
- 0.255              : Fixed cycle timings for branches not taken (one operand byte is always read) (z180\z180ops.h) [AJR].
- 0.253              : Added z180\z180csio.cpp/h. Added CSIO emulation [Sandro Ronco, Vas Crabb]. Fixed SLP instruction (z180\z180ops.h) [Sandro Ronco].
- 0.247              : Fixed logic errors (z180\z180asci.cpp) [Peter Ferrie].
- 0.245              : Added z180\z180asci.cpp/h. Implemented ASCI serial communication [Miodrag Milanovic].
- 0.244              : Added callbacks for tend; decrement bcr1 when DMA channel 1 is active (cpu\z180\z180.cpp) [Carl].
- 0.224              : Correct FRC counting rate and direction. Run programmable reload timer off FRC. Emulated a subtle difference from Z80 behavior in fetching opcode after DD CB or FD CB [AJR].
- 0.221              : Internalized certain registers and make clock divider software-selectable [AJR].
- 0.215              : Changed description to 'Zilog Z80180'. Splitted generic Z180 device into several subtypes (Hitachi HD64180RP, Hitachi HD647180X MCU, Zilog Z80180 and Zilog Z8S180). Added internal clock divider for Z180 family and adjust CPU clocks in many drivers to compensate. Reduced logical address width to 16 bits [AJR].
- 0.213              : Fixed verbose logging [Nigel Barnes].
- 0.211              : Separated out internal registers by function and get rid of a lot of not-so-useful macros [AJR].
- 0.201              : Added workaround for missing serial and counter emulation (CSIO flags and FRC). This is necessary for Lucky Ball 96 [Grull Osgo].
- 0.193              : Added cpu\z180\z180dasm.h. Fixed Z180_RCR_REFW and added Wait State Generator (DCNTL) support [BartmanAbyss].
- 0.186              : Added support for DREQ and TEND signals. Fixed DMA0 count and DREQ handling [BartmanAbyss]. Fixed obvious type detected by Coverity (software) [O. Galibert]. Tried to make Z180 table allocation/setup a bit safer [Vas Crabb].
- 0.184              : Correct MMOD bit for Z180 DMA [AJR]. Count of 0 means 0x10000, as with other DMA controllers. Fixed scheduling so burst mode DMA is always serviced immediately with no CPU ops interleaved [R. Belmont].
- 0.181              : Decapped, deprotected, dumped and hooked up the HD647180X MCUs for Vimana, Fire Shark and Teki Paki [CAPS0ff].
- 21st December  2016: CAPS0ff - Decapping HD647180. Includes: #19: Vimana HD647180 QFP80, #58: Teki Paki HD647180X QFP80 and #102: Fire Shark HD647180X QFP80. Decapping revealed an unknown film covering the die. Sometimes chips have polymide or silicone passivation. However, this material is white clear (not yellow polymide) and a dry film (not silicone). While decapping did not remove the film, it did loosen it. Several test chips were cleaned up by carefully pulling it off with tweezers. While this works, we were ideally looking for a solution that minimized poking near fragile bond wires. Another experiment showed that hot sulfuric acid removes the film. As the decap solution contains some sufuric acid (mostly white fuming nitric acid with a touch of sulfuric acid), it was suspected that letting it cook a bit longer would remove the film. This proved successful and we successfully cleaned a test die. Now that we finally have a clean die it was imaged for analysis. The dark area in the lower section of the die is our target: EPROM. The die image provides a good guess as to the location of the fuse lock bits. Upon closer inspection we learn the layout is similar to other previously deprotected Hitachi parts (not shown). Here it is on the HD647180. ROM is masked to protect our data, while leaving the fuse bits exposed during UV erasure. The helpful arcade community let us know someone had previously designed a breakout PCB for experimenting with HD647180 MCU. Very helpful! Success! To be sure, we masked basically everything but the suspected fuse. Which also worked. While PLCCs are great for early development (easy swap on dev board), the real chips are QFP (we don't have a socket). So basically went through the same decap process on QFP. And masked it to successfully read out the chip. After several successful QFP dumps it was time to move onto the real chips. Here's #56 decapped and masked. Deprotection succeeded, but the dumper hardware detected a continuity fault and the ROM was missing data bits D0, D1, and D3. Impedance check to ground verified we had a problem on those pins: While other D's read ~20k those were open. Closer visual inspection revealed a bond wire defect. Some gentle probing verifies D3 is in fact broken. After weighing options we repaired them with conductive epoxy. Success! We proceeded to decap and deprotect the rest of the HD647180s. Both #19 and #58 required repair. #102 failed continuity but dump seems okay. Interestingly enough, while all three Toaplan samples had serious bond wire defects, none of the test PLCC nor test QFP samples did (although harmless marks are barely visible). We suspect these defects are tooling marks from the bonding machine used to build the packages. We have been told this MCU is commonly found failed on Toaplan games, perhaps this is the reason.
- 0.180              : Changed the Z180 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\z180\z180cb.inc, z180dd.inc, z180ed.inc, z180fd.inc, z180op.inc and z180xy.inc to z180cb.hxx, z180dd.hxx, z180ed.hxx, z180fd.hxx, z180op.hxx and z180xy.hxx.
- 0.173              : Make the Z80/Z180 daisy chain an interface that interfaces with the existing interface. Z8000 has been hooked up to this as well (p8000_16 already configures it), but currently does nothing with it [AJR].
- 0.153              : Added 'Zilog Z180' device. Changed cpu\z180\z180cb.c to z180cb.inc, z180dd.c to z180dd.inc, z180ed.c toz180ed.inc, z180fd.c to z180fd.inc, z180op.c to z180op.inc and z180xy.c to z180xy.inc [Oliver Stoeneberg]. Modernized Z180 cpu core [Wilbert Pol].
-  6th January   2012: Charles MacDonald - I recently dumped the internal ROM for Wing's "7 Smash". The ROM was trojaned in a similar way to Pinkiri 8 and other Wing games that are now emulated in MAME. This board uses a HD647180 MCU (in a huge 90-pin SDIP package) with 16K of internal ROM and up to 128K of external ROM. The external ROM contains program code so it isn't particularly hard to get control of the system by inserting your own software into the ROM once you've made a NOP sled or identified the entry points. To get the internal ROM data out I used my 8-bit EPROM emulator which can also emulate RAMs. The two red wires in the picture are used to tap into the system reset signal from the MB3771 and part of the glue logic which generates a write strobe for memory locations. This allows the trojan program to write back into emulator memory to store data. Once it had copied the internal ROM to RAM (and generated a checksum) I just had to download the emulator RAM and that was it. If any more of these games come up in the future it should be fairly easy to get them dumped.
- 16th June      2010: Angelo Salese - Charles MacDonald extracted the internal ROM on the Eagle 909 HW games (Janshi, Ron Jan and Pinkiri 8). Me and Haze recently did some efforts to emulate this HW, that is a Z180 with a fancy video emulation (that isn't yet fully working). Janshi and Ron Jan have an original thought of the mahjong game, on which you can see what type of tile is with different tilesets for the back.
- 10th June      2010: Charles MacDonald - I trojaned the internal ROM from the CPU module used by "Pinkiri 8". This game uses an external program ROM that is not encrypted (like Lucky Girl was), so I used my 32K ROM emulator to run a small program that relocated to work RAM and copied the internal 16K ROM of the HD647180 CPU to the emulator RAM, and then saved that RAM to disk. The only hard part was probing around the board to find the circuit that generated the memory write strobe, and after that it was pretty easy. UPDATE: Turns out this method worked for three related boards Brian Troha sent earlier, so now those are all dumped too!
- 0.138u1            : Couriersud improved Z180 timer and HALT processing. This fixes severe slowdown after initials are entered in Ms. Pac-Man/Galaga - 20 Year Reunion. Rewrote Z180 cycle accounting to create a basis for more exact internal I/O and timer operations as well as implementing interrupt priorities. Removed unused BIG_SWITCH code as well. Improved Z180 interrupt and timer handling. Added some missing save state entries and fixed HALT.
- 0.135              : Phil Bennett fixed access violation in all drivers using Z180 CPU.
- 0.133u3            : Removed cpu\z180\z180daa.h.
- 0.133u2            : hap removed DAA tables from the 8085 and Z180 implementations in favor of just computing the values. Also fixed code in 8085 to prevent accidental multiple reads due to macro overuse.
- 0.128u7            : Aaron Giles added the concept of a cpu_state_table, which is supplied by the CPU cores and which describes all the register state accessible to the debugger and other subsystems. The format of the table is such that most data can be simply fetched from memory without the further involvement of the CPU core, including the display of common formats. Extensibility points are available for custom display and for importing/exporting the data to intermediate variables for more complicated scenarios. Updated the Z180 core to use this.
- 0.128u6            : Pointer-ified the Z180 core [Aaron Giles].
- 0.122u8            : Zsolt Vasvari fixed reset crashes in all Z180 games. Removed the various busy loop and non-exact optimzations from the Z180 core.
- 0.119u1            : Improvements to the Z180 core [Pierpaolo Prazzoli]: Added the 2 Programmable Reload Timers. Fixed the Internal I/O Registers remapping. Added logical -> physical memory translation. Disabled loops hack. Removed "extra icount". Changed interrupts handling. Now they're checked as in Z80 core. Simplified RETN and EI opcodes. Fixed PRT interrupts. Cleared both interrupts flip flops when taking any irq. Added _IFF2 = _IFF1; just before _IFF1 = 0; when taking an NMI.
- 21st September 2007: Pierpaolo Prazzoli - After having fun with a simple decryption and with  a couple of fixes to the Z180 core, I could get a first screenshot from the game. But there's something else going wrong now, that causes the game code to crash. I don't know yet if it's another cpu core bug or protection... As a bonus, with those fixes to Z180 core I could get sound working in galaga game inside 20pacgal.
- 0.109u5            : Aaron Giles converted the z180 disassemblers to the new format and added step in/out support where it was obvious.
- 0.98u2             : Rewrote the Z80/Z180 daisy chaining logic to work a little closer to the hardware [Aaron Giles].
- 27th August    2004: Guru - As an update to the previous news, there seems to be another way we can get at the data in the HD647180 MCU. Not directly, but we can side-step around it with this device (http://www.advantech.com/products/Model_Detail.asp?model_id=1-KLY4E&PD=), which allows us to snoop on what any chip is sending to any other chip, and what it receives from any other chip. It can be used to monitor and capture any data travelling to/from it's Data and Address lines. Even a Logic Analyser is no good because to capture all the data we need would require a Logic Analyser with a HUGE amount of on-board RAM (typical Analysers have only 512k or less RAM on-board which would allow capturing only a fraction of a second of data). We can't get a direct dump of the internals (we'll never get that), but the captured data will allow us to develop an accurate HLE of the chip's end functions. I believe this is similar/identical to the device that is being used to break the Hitachi FD1094's used on many Sega boards. I would guess that it can be used to snoop on many other Microcontrollers too, I'm sure. So probably this is the next gizmo we will look at buying...
- 25th August    2004: Guru - I finally located the Teki Paki board and attempted to dump it's HD647180 (QFP80) using the recently-arrived adapter. Bad news unfortunately, it's protected. So there's is virtually no hope of ever seeing sound emulated in those Toaplan games that use this chip. Adding to this dilemma, I swapped the Vimana chip with the Teki Paki one and the board had no sounds at all, which tells me the contents of each chip per game is different. Of course, when I put the chip back onto the correct PCB, it works fine :) In other (bad) news, I've also attempted a dump of the HD647180 PLCC84 chip on Gaelco's Masterboy. This is also protected. This is the main CPU code, so the game will not run at all without it. Masterboy is a pretty crap game anyway, so no loss there.
- 15th February  2004: Nicola Salmoria sent in a driver for Ms.Pac-Man/Galaga - 20 Year Reunion and fixed some bugs in the Z180 CPU core.
- 25th July      2002: Nicola Salmoria added Golden Fire II to the Mosaic driver and fixed a small bug in the Z180 CPU core MMU addressing.
- 0.57               : Z180 emulator [Juergen Buchmueller].
- 23rd December  2001: Nicola Salmoria updated the Z180 CPU core, which is used by the game Mosaic.
- 0.37b10            : Added cpu\z180\z180.c/h, z180cb.c, z180daa.h, z180dasm.c, 180dd.c, z180ed.c, z180fd.c, z180op.c, z180ops.h, z180tbl.h and z180xy.c.
- 20th September 2000: Juergen Buchmueller sent in some bugfixes to the Z180 core and for the memory interface.
- 16th September 2000: Juergen Buchmueller sent in a preliminary Z180 emulation core.
- NOTES: The Z180 (HD647180) is a sound cpu with internal rom (32k). It uses a 8-bit microprocessor (DIP64), code compatible with the Zilog Z80. The Z180 family adds higher performance and integrated peripheral functions like clock generator, 16-bit counters/timers, interrupt controller, wait-state generators, serial ports and a DMA controller. It uses separate read and write strobes, sharing similar timings with the Z80 and Intel processors. The on-chip memory management unit (MMU) has the capability of addressing up to 1 MB of memory. It is possible to configure the Z180 to operate as the Hitachi HD64180.
- SOURCE: cpu\z180\z180.cpp



8.71  Hitachi HD64180RP

- 0.215              : Added 'Hitachi HD64180RP' device [AJR].
- NOTES: The Hitachi HD64180 is a 8 bit processor, dual channel DMAC and memory mapped I/O, used for multigame link.
- PCB: HD64180RP8 (Cadash, Iqblock)
- DRIVERS: asuka.cpp, igs009.cpp, igs017.cpp, mosaic.cpp and spoker.cpp
- SOURCE: cpu\z180\z180.cpp



8.72  Hitachi HD647180X MCU

- 0.251              : Fixed typo on port E read [hap].
- 0.230              : Eliminated data space and instead map internal RAM into program space using memory view [AJR].
- 0.215              : Added cpu\z180\hd647180x.cpp/h. Added 'Hitachi HD647180X MCU' device. HD647180X now has specific device emulation for the internal PROM, RAM and parallel ports [AJR].
- NOTES: The Hitachi HD647180X MCU expandable 8-bit microcontroller architecturally extends the on-chip I/O capabilities of the Hitachi HD64180/Zilog Z80180 CPU with parallel ports and more. It also contains a 16-kilobyte internal programmable ROM (which can be disabled by strapping) and 512 bytes of internal RAM, the latter being software-remappable to the end of any 64K block. The MP pins configure the MCU for either single-chip mode, one of two expanded modes or PROM writing/verification (Hitachi also had the HD643180X, which uses a 16 KB mask ROM instead of the PROM, and HD641180X, which offers neither ROM nor PROM and therefore must be used in ROMless mode).
- PCB: Hitachi 1D2 R HD647180X0FS6 (Ghox)
- DRIVERS: luckgrln.cpp, lucky37.cpp, mastboy.cpp, pinkiri8.cpp, subsino.cpp, toaplan1.cpp and toaplan2.cpp
- SOURCE: cpu\z180\hd647180x.cpp



8.73  Zilog Z80180

- 0.215              : Added 'Zilog Z80180' device [AJR].
- 0.213              : Fixed verbose logging [Nigel Barnes].
- 0.211              : Separated out internal registers by function and get rid of a lot of not-so-useful macros [AJR].
- 0.201              : Added workaround for missing serial and counter emulation (CSIO flags and FRC). This is necessary for Lucky Ball 96 [Grull Osgo].
- 0.193              : Added cpu\z180\z180dasm.h. Fixed Z180_RCR_REFW and added Wait State Generator (DCNTL) support [BartmanAbyss].
- 0.186              : Added support for DREQ and TEND signals. Fixed DMA0 count and DREQ handling [BartmanAbyss]. Fixed obvious type detected by Coverity (software) [O. Galibert]. Tried to make Z180 table allocation/setup a bit safer [Vas Crabb].
- 0.184              : Correct MMOD bit for Z180 DMA [AJR]. Count of 0 means 0x10000, as with other DMA controllers. Fixed scheduling so burst mode DMA is always serviced immediately with no CPU ops interleaved [R. Belmont].
- 0.181              : Decapped, deprotected, dumped and hooked up the HD647180X MCUs for Vimana, Fire Shark and Teki Paki [CAPS0ff].
- 21st December  2016: CAPS0ff - Decapping HD647180. Includes: #19: Vimana HD647180 QFP80, #58: Teki Paki HD647180X QFP80 and #102: Fire Shark HD647180X QFP80. Decapping revealed an unknown film covering the die. Sometimes chips have polymide or silicone passivation. However, this material is white clear (not yellow polymide) and a dry film (not silicone). While decapping did not remove the film, it did loosen it. Several test chips were cleaned up by carefully pulling it off with tweezers. While this works, we were ideally looking for a solution that minimized poking near fragile bond wires. Another experiment showed that hot sulfuric acid removes the film. As the decap solution contains some sufuric acid (mostly white fuming nitric acid with a touch of sulfuric acid), it was suspected that letting it cook a bit longer would remove the film. This proved successful and we successfully cleaned a test die. Now that we finally have a clean die it was imaged for analysis. The dark area in the lower section of the die is our target: EPROM. The die image provides a good guess as to the location of the fuse lock bits. Upon closer inspection we learn the layout is similar to other previously deprotected Hitachi parts (not shown). Here it is on the HD647180. ROM is masked to protect our data, while leaving the fuse bits exposed during UV erasure. The helpful arcade community let us know someone had previously designed a breakout PCB for experimenting with HD647180 MCU. Very helpful! Success! To be sure, we masked basically everything but the suspected fuse. Which also worked. While PLCCs are great for early development (easy swap on dev board), the real chips are QFP (we don't have a socket). So basically went through the same decap process on QFP. And masked it to successfully read out the chip. After several successful QFP dumps it was time to move onto the real chips. Here's #56 decapped and masked. Deprotection succeeded, but the dumper hardware detected a continuity fault and the ROM was missing data bits D0, D1, and D3. Impedance check to ground verified we had a problem on those pins: While other D's read ~20k those were open. Closer visual inspection revealed a bond wire defect. Some gentle probing verifies D3 is in fact broken. After weighing options we repaired them with conductive epoxy. Success! We proceeded to decap and deprotect the rest of the HD647180s. Both #19 and #58 required repair. #102 failed continuity but dump seems okay. Interestingly enough, while all three Toaplan samples had serious bond wire defects, none of the test PLCC nor test QFP samples did (although harmless marks are barely visible). We suspect these defects are tooling marks from the bonding machine used to build the packages. We have been told this MCU is commonly found failed on Toaplan games, perhaps this is the reason.
- 0.180              : Changed the Z180 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\z180\z180cb.inc, z180dd.inc, z180ed.inc, z180fd.inc, z180op.inc and z180xy.inc to z180cb.hxx, z180dd.hxx, z180ed.hxx, z180fd.hxx, z180op.hxx and z180xy.hxx.
- 0.173              : Make the Z80/Z180 daisy chain an interface that interfaces with the existing interface. Z8000 has been hooked up to this as well (p8000_16 already configures it), but currently does nothing with it [AJR].
- 0.153              : Added 'Zilog Z180' device. Changed cpu\z180\z180cb.c to z180cb.inc, z180dd.c to z180dd.inc, z180ed.c toz180ed.inc, z180fd.c to z180fd.inc, z180op.c to z180op.inc and z180xy.c to z180xy.inc [Oliver Stoeneberg]. Modernized Z180 cpu core [Wilbert Pol].
-  6th January   2012: Charles MacDonald - I recently dumped the internal ROM for Wing's "7 Smash". The ROM was trojaned in a similar way to Pinkiri 8 and other Wing games that are now emulated in MAME. This board uses a HD647180 MCU (in a huge 90-pin SDIP package) with 16K of internal ROM and up to 128K of external ROM. The external ROM contains program code so it isn't particularly hard to get control of the system by inserting your own software into the ROM once you've made a NOP sled or identified the entry points. To get the internal ROM data out I used my 8-bit EPROM emulator which can also emulate RAMs. The two red wires in the picture are used to tap into the system reset signal from the MB3771 and part of the glue logic which generates a write strobe for memory locations. This allows the trojan program to write back into emulator memory to store data. Once it had copied the internal ROM to RAM (and generated a checksum) I just had to download the emulator RAM and that was it. If any more of these games come up in the future it should be fairly easy to get them dumped.
- 16th June      2010: Angelo Salese - Charles MacDonald extracted the internal ROM on the Eagle 909 HW games (Janshi, Ron Jan and Pinkiri 8). Me and Haze recently did some efforts to emulate this HW, that is a Z180 with a fancy video emulation (that isn't yet fully working). Janshi and Ron Jan have an original thought of the mahjong game, on which you can see what type of tile is with different tilesets for the back.
- 10th June      2010: Charles MacDonald - I trojaned the internal ROM from the CPU module used by "Pinkiri 8". This game uses an external program ROM that is not encrypted (like Lucky Girl was), so I used my 32K ROM emulator to run a small program that relocated to work RAM and copied the internal 16K ROM of the HD647180 CPU to the emulator RAM, and then saved that RAM to disk. The only hard part was probing around the board to find the circuit that generated the memory write strobe, and after that it was pretty easy. UPDATE: Turns out this method worked for three related boards Brian Troha sent earlier, so now those are all dumped too!
- 0.138u1            : Couriersud improved Z180 timer and HALT processing. This fixes severe slowdown after initials are entered in Ms. Pac-Man/Galaga - 20 Year Reunion. Rewrote Z180 cycle accounting to create a basis for more exact internal I/O and timer operations as well as implementing interrupt priorities. Removed unused BIG_SWITCH code as well. Improved Z180 interrupt and timer handling. Added some missing save state entries and fixed HALT.
- 0.135              : Phil Bennett fixed access violation in all drivers using Z180 CPU.
- 0.133u3            : Removed cpu\z180\z180daa.h.
- 0.133u2            : hap removed DAA tables from the 8085 and Z180 implementations in favor of just computing the values. Also fixed code in 8085 to prevent accidental multiple reads due to macro overuse.
- 0.128u7            : Aaron Giles added the concept of a cpu_state_table, which is supplied by the CPU cores and which describes all the register state accessible to the debugger and other subsystems. The format of the table is such that most data can be simply fetched from memory without the further involvement of the CPU core, including the display of common formats. Extensibility points are available for custom display and for importing/exporting the data to intermediate variables for more complicated scenarios. Updated the Z180 core to use this.
- 0.128u6            : Pointer-ified the Z180 core [Aaron Giles].
- 0.122u8            : Zsolt Vasvari fixed reset crashes in all Z180 games. Removed the various busy loop and non-exact optimzations from the Z180 core.
- 0.119u1            : Improvements to the Z180 core [Pierpaolo Prazzoli]: Added the 2 Programmable Reload Timers. Fixed the Internal I/O Registers remapping. Added logical -> physical memory translation. Disabled loops hack. Removed "extra icount". Changed interrupts handling. Now they're checked as in Z80 core. Simplified RETN and EI opcodes. Fixed PRT interrupts. Cleared both interrupts flip flops when taking any irq. Added _IFF2 = _IFF1; just before _IFF1 = 0; when taking an NMI.
- 21st September 2007: Pierpaolo Prazzoli - After having fun with a simple decryption and with  a couple of fixes to the Z180 core, I could get a first screenshot from the game. But there's something else going wrong now, that causes the game code to crash. I don't know yet if it's another cpu core bug or protection... As a bonus, with those fixes to Z180 core I could get sound working in galaga game inside 20pacgal.
- 0.109u5            : Aaron Giles converted the z180 disassemblers to the new format and added step in/out support where it was obvious.
- 0.98u2             : Rewrote the Z80/Z180 daisy chaining logic to work a little closer to the hardware [Aaron Giles].
- 27th August    2004: Guru - As an update to the previous news, there seems to be another way we can get at the data in the HD647180 MCU. Not directly, but we can side-step around it with this device (http://www.advantech.com/products/Model_Detail.asp?model_id=1-KLY4E&PD=), which allows us to snoop on what any chip is sending to any other chip, and what it receives from any other chip. It can be used to monitor and capture any data travelling to/from it's Data and Address lines. Even a Logic Analyser is no good because to capture all the data we need would require a Logic Analyser with a HUGE amount of on-board RAM (typical Analysers have only 512k or less RAM on-board which would allow capturing only a fraction of a second of data). We can't get a direct dump of the internals (we'll never get that), but the captured data will allow us to develop an accurate HLE of the chip's end functions. I believe this is similar/identical to the device that is being used to break the Hitachi FD1094's used on many Sega boards. I would guess that it can be used to snoop on many other Microcontrollers too, I'm sure. So probably this is the next gizmo we will look at buying...
- 25th August    2004: Guru - I finally located the Teki Paki board and attempted to dump it's HD647180 (QFP80) using the recently-arrived adapter. Bad news unfortunately, it's protected. So there's is virtually no hope of ever seeing sound emulated in those Toaplan games that use this chip. Adding to this dilemma, I swapped the Vimana chip with the Teki Paki one and the board had no sounds at all, which tells me the contents of each chip per game is different. Of course, when I put the chip back onto the correct PCB, it works fine :) In other (bad) news, I've also attempted a dump of the HD647180 PLCC84 chip on Gaelco's Masterboy. This is also protected. This is the main CPU code, so the game will not run at all without it. Masterboy is a pretty crap game anyway, so no loss there.
- 15th February  2004: Nicola Salmoria sent in a driver for Ms.Pac-Man/Galaga - 20 Year Reunion and fixed some bugs in the Z180 CPU core.
- 25th July      2002: Nicola Salmoria added Golden Fire II to the Mosaic driver and fixed a small bug in the Z180 CPU core MMU addressing.
- 0.57               : Z180 emulator [Juergen Buchmueller].
- 23rd December  2001: Nicola Salmoria updated the Z180 CPU core, which is used by the game Mosaic.
- 0.37b10            : Added cpu\z180\z180.c/h, z180cb.c, z180daa.h, z180dasm.c, 180dd.c, z180ed.c, z180fd.c, z180op.c, z180ops.h, z180tbl.h and z180xy.c.
- 20th September 2000: Juergen Buchmueller sent in some bugfixes to the Z180 core and for the memory interface.
- 16th September 2000: Juergen Buchmueller sent in a preliminary Z180 emulation core.
- NOTES: The Z180 (HD647180) is a sound cpu with internal rom (32k). It uses a 8-bit microprocessor (DIP64), code compatible with the Zilog Z80. The Z180 family adds higher performance and integrated peripheral functions like clock generator, 16-bit counters/timers, interrupt controller, wait-state generators, serial ports and a DMA controller. It uses separate read and write strobes, sharing similar timings with the Z80 and Intel processors. The on-chip memory management unit (MMU) has the capability of addressing up to 1 MB of memory. It is possible to configure the Z180 to operate as the Hitachi HD64180.
- DRIVERS: atronic.cpp, cabaret.cpp, chsuper.cpp, daryde.cp, ecoinf2.cpp, ecoinf3.cpp, luckybal.cpp, sfcbox.cpp and subsino2.cpp
- SOURCE: cpu\z180\z180.cpp



8.74  Zilog Z8S180

- 0.215: Added 'Zilog Z8S180' device [AJR].
- PCB: Z8S18020VSC (20pacgal)
- DRIVERS: 20pacgal.cpp
- SOURCE: cpu\z180\z180.cpp




8.8   FD1089

- 0.206              : Minor changes to SEGA FD1089 keys to match the format of real ones, thanks to Ed Cross [Andreas Naive].
-  9th December  2018: Smitdogg - Arcade Hacker figured out how to program security chips on Sega System 16 / 18 / 24 / X (https://arcadehacker.blogspot.com/2018/12/sega-system16-security-programming-guide.html).
- 0.186              : Changed description to 'Hitachi FD1089A Encrypted CPU' and 'FD1089B' to 'Hitachi FD1089B Encrypted CPU'.
- 21st July      2014: Charles MacDonald - I've updated the FD1089 key management tool to support a brute-force LCG seed search function for the MC8123. This was used to produce a key for Sega's Center Court that was recently dumped and added to MAME. Some plaintext must be provided to carry out the search. It only took 8 bytes of data from Passing Shot to make a match, in this case the code for the NMI handler that sends ADPCM data to the uPD7759 was used as it was the least likely to be altered in Center Court. The tool supports searching for plaintext within a range of addresses so that matches can be made if the encrypted code or data is a different location than expected.
- 0.154              : Added complete dump of the FD1089B 317-0027 key to SDI - Strategic Defense Initiative [Charles MacDonald, ShouTime, The Dumping Union]. Document the newly redumped FD1089A 317-0027 along with it's unencrypted data range [Charles MacDonald].
- 0.153              : Updated FD1089 documentation [Charles MacDonald].
- 31st December  2013: Charles MacDonald - The FD1089 key tool has been updated with a faster and more accurate method for generating keys from raw table dumps. Now it supports non-standard key data, such as the kind extracted from a FD1089 with a dead battery. I also had a chance to rewrite the control software for the 68K analyzer board and optimize the dumping functions. It can extract a complete FD1089 table set in a few hours instead of several days.
- 0.149u1            : Minor doc update [Brian Troha].
- 0.147u3            : More OO & consistent in FD1089 [smf].
- 20th October   2012: Charles MacDonald - Here's the current version of the fdtool program (http://cgfm2.emuviews.com/zip/fdtool-102012.zip) which is used to work with and manipulate FD1089 tables and key data. It has a few modes of operation: * Search through a table set to find a LCG seed that can generate the tables. If the tables are damaged or incomplete it can usually still derive a likely candidate for the seed, it just won't confirm it as being correct. * Generate a key file from a LCG seed and list of encrypted code/data memory ranges. This is for building keys where we know the seed but haven't dumped it, so the encrypted code/data ranges have to be guessed. * Generate a table set from a key file, mainly for validating keys. * Turn a directory of old-format individual table files to a single file. I've been using it to make key data for the "wb35a" ROM set in MAME and a new Fantasy Zone (317-0016) set. The original keys were made by Chris Hardy and I'm converting them to the new key format. These should be added in the near future along with the redumped sjryuko 317-5021 key. The dumping hardware design files and control program will get released next. I'm using it to get a better idea of how the 68000 runs on a cycle by cycle basis, but the hardware needs some slight modifications to fully enable this type of clock control. Once that's done and tested it will be ready for the public.
- 13th October   2012: Charles MacDonald - The FD1089 work discussed earlier is nearly done. I finished a program that can search for LCG seeds and used it to generate a complete key for 'Sukeban Jansi Ryuko', to replace the partial key we had in MAME. Together with the dumping circuit any FD1089 can be preserved now. There's a lot of partial dumps in MAME so if you can help out and loan a FD1089 to be read out, please get in touch.
- 0.146u5            : Converted FD1089/FD1094 into proper devices, derived from M68000. They now handle their own decryption and memory management, so we can remove all the calls for initialization/reset/etc. The key now lives as a 'key' subdevice under the CPU, and the FD1089/1094 are now specified just like any other CPU [Aaron Giles].
- 17th August 2012   : Charles MacDonald - While FD1094 dumping has been a plug-and-play affair, we've never had a good solution for the FD1089. We recently acquired a FD1089-based game to be redumped to complete the partial table set that's already in MAME. This was a good opportunity to approach the FD1089 again from a new perspective, given the last work I had done on it was back in 2005. Here's the dumping circuit I developed (http://cgfm2.emuviews.com/img/fdtool.png). This is a variation of the custom Z80 dumping board I made for the Free Kick-type CPU modules. There's a lot more chips underneath the top PCB, and the empty sockets were for some alternate ideas that I ended up not needing to use. The new automated dumping process works like this: * Reset CPU 256 times and present each possible value for the low and high words of the PC vector, then force a bus error during the first instruction fetch. The decrypted PC is pushed to the stack and captured. This generates encryption tables for addresses 4,6 that can be used for 0,2 and 10 through 16, which is enough to encrypt our own PC, SP, and a short fragment of code. * Cycle the stack pointer through all addresses and execute the instruction "MOVE.L (A7), (A7)". This allows two adjacent data words to be decrypted and captured, so tables for the entire data space can be dumped. * Cycle the stack pointer through all addresses and execute "MOVE.L -$12(PC,A7.L), (A7)". This allows two adjacent program words to be decrypted and captured so the entire program space can be dumped. I used the FT2232 chip in MPSSE mode to control the I/O expanders which are SPI peripherals. Even at 10 MHz it's still a little slow, but since everything works automatically I don't mind letting it run in the background for a while. Being able to control the 68000 at the bus-cycle level makes a lot of interesting behavior readily apparent. You can see the prefetch mechanism, including dummy fetches that result in unused data, and the out-of-order stack writes during exceptions. Plus a lot of invalid instruction encodings don't cause exceptions at all, which isn't what I expected. Rather than being useful undocumented instructions I think they are just aliases for other valid ones. Anyway it would be worthwhile to look into this further.
- 0.127u1            : Atari Ace moved FD1089 decryption keys to external files.
- 0.126u5            : Nicola Salmoria updated the FD1089 decryption algorythm to use the real keys generated by the LCG as found by Andreas Naive. The algorithm is more complex than it should be, but I haven't been able to simplify it more. The keys are still embedded in the source. It would now be reasonable to move them to external files; however, for several games we only have partial keys so the files would need to be BAD_DUMP.
- 0.125u4            : Added machine\fd1089.h.
- 0.92u1             : FD1089 Update [Nicola Salmoria, Charles MacDonald]. Complete table for 317-0033 (Alien Syndrome) and 317-0034 (Super Hang-On).
- 0.90u4             : FD1089 update [Nicola Salmoria, Charles MacDonald]. Improved decryption logic. Added complete table for Enduro Racer and more data to Super Hang On Table.
- 0.90u1             : Added machine\fd1089.c. FD1089 decryption [Nicola Salmoria, Charles MacDonald]. 100% accurate emulation of FD1089A, FD1089B should be considered 99% because it will have to be verified with other CPUs (it is 100% for all currently supported games). Complete tables provided by Charles MacDonald for 317-0018 (Action Fighter), 317-0022 (Dunk Shot), 317-0168 (Aurail). Partial tables derived by comparison with the unencrypted versions for Enduro Racer, Alex Kidd, 317-0024 (Time Scanner), 317-0033 (Alien Syndrome, 3 versions), 317-0027 (SDI) (actual working cpus are needed to obtain full tables).
-  3rd January   2005: Aaron Giles - A bit sooner than I expected! Nicola submitted the first pass at the FD1089A/B decryption, and it's quite impressive. There are a number of new games this enables, including Action Fighter and Dunk Shot, as well as a number of alternate versions of Alien Syndrome, Alex Kidd, SDI, Time Scanner and Aurail. Luckily, as Charles guessed, Action Fighter seems to work fine on MAME, without the graphics issues he mentioned on his site. The game appears to be something of a Spy Hunter ripoff, letting you pilot various vehicles, chasing down bad guys. Dunk Shot needed some tweaking to get working, but it's fully playable now as well, including controls for all four players. All the new variants of existing games are hooked up now and their controls are working. Hopefully I'll get the chance to finish up the sprite consolidation in the next couple of days so that I can submit this giant updated mass of goodness!
- 11th December  2004: Charles MacDonald - Got Dunk Shot fixed, works fine now. The weird thing is that it's a System 16B game but the video hardware seems to be a little different. I developed a utility to encrypt a test program for direct use on the Dunk Shot FD1089A, and have confirmed that it cannot execute unencrypted code. So patching the original game code on a per-game basis to extract data seems to still be necessary, at least for the time being. This makes the process more difficult but certainly not impossible-
-  5th December  2004: Charles MacDonald - Here's Dunk Shot (System 16B, 317-0022) decrypted and running. Thanks to Dave Widel for donating the CPU, and ShinobiZ & COY for providing the original and bootleg Dunk Shot ROM sets. This is the first FD1089A game that has been decrypted. While it it's encryption method is less complex, finding the right place to insert your own decryption routine is extremely difficult. This is because all data as well as code is encrypted (no vector table changes, hard to know where code starts/stops) and there are no direct instructions, which was the most important finding that led to the FD1094 being figured out. As eight of every 16 bits are encrypted, you have a 50/50 chance of identifying code sequences, which improves as the size of the search data increases. A disappointing aspect of the FD1094 is that you cannot easily restore a non-working game. It's possible to manually put together an unencrypted ROM set from the original data and several decrypted program ROM images (one for each state used), but it is difficult to be 100% sure the result is correct and these kinds of hacks are frowned upon. Luckily this is not the case with the FD1089A. While opcodes and data are encrypted, there is no state mechanism so the decrypted data is just two copies of the program ROM image, one decrypted as code, and the other as data. You could write these to a larger ROM and have the 68000 FC0 pin drive the high order address line to select the decrypted opcodes or decrypted data portion. What remains to be seen is how difficult it is to decrypt other FD1089A based games. I was able to make progress with Dunk Shot because I had a bootleg set and could get an idea of the what the game code did, so it could be patched. For a game with no bootleg it's trickier since you can only make guesses about the game's program flow, what instructions are used at which addresses, etc.
-  3rd December  2004: Charles MacDonald - Progress on the FD1089A/B is on hold at the moment, as I'm waiting for more CPUs to run tests on. Not a problem, just need to determine what the common points are between games rather than what's specific to Dunk Shot.
- 12th November  2004: Charles MacDonald - I've been examining a board which appears to implement the FD1089A workings using regular TTL parts and some programmable logic. It's pretty old (1985) and finding information for some of the components has been difficult. If anyone can help out, I'm looking for information (datasheets, primarily pin assignments) for the following parts: Harwin M3-7643B-5 / Intersil M37643B, Harwin M3-7649-5 / Intersil M37649, Fujitsu MB7142E and Toshiba TMM24128AP (just a 128kx8 EPROM, need a pinout though). I'm also looking for dead or unwanted FD1089A or FD1089B CPUs from any game to run tests on.
- 29th October   2004: Charles MacDonald - I've been able to decrypt a large portion of the game "Dunk Shot" which uses a FD1089A. It turns out the program ROMs from the bootleg dump (used as a reference to locate code in the encrypted ROMs) weren't completely bad, the decrypted data and opcodes are stored separately and in unusual locations within each ROM. There should probably be more data (about 1/3 of the original content is accounted for) but it was more than enough to get started with. The FD1089A is fairly interesting: both code and data are encrypted, and a wider range of address bits seem to be used for the decryption (compare to FD1094 where the encryption 'wrapped' on 16K boundaries). Everything from the program space is encrypted identically, so using an instruction with a PC-relative EA mode allows you to read the PC/SP vectors, game code, interrupt handler code, etc. Thankfully no 'states' this time to deal with, as the FD1089A is very different from the FD1094. One problem with encrypted code and data is that it's harder to determine where sections of code start and end. Also there are no 'direct' opcodes so it isn't easy to program the FD1089A at all. An advantage with Dunk Shot (and possibly other games) is that only bits $FC48 of each word are encrypted, the remaining bits are unmodified. So you can search for a sequence of data and get fairly good matches, the longer the search data is the more accurate the results are. For example longer instructions like 'move.l #imm32, $mem.w' are easier to find, and from there the unencrypted bits of the opcode can be changed to modify the EA mode to something more desirable. There's plenty of work left to be done, but some initial progress has been made.
- NOTES: The FD1089 is a 68000 with built-in encryption. It contains some battery-backed RAM, when the battery dies the CPU stops working. Both opcodes and data are encrypted, using different (but related) mappings. Decryption works on 16-bit words, but only 8 bits are affected, the other 8 are left untouched. A special value in internal RAM disables the encryption, this is necessary otherwise RAM would not work as expected (writing data and reading it back would return a different number). The FD1089A and FD1089B work in the same way, but the decryption tables are different. The internal RAM contains the 8-bit key to use at every address (only 12 bits of the address are used, so the encryption repeats). The FD1089 design is clearly derived from the MC8123. The MC8123 is a Z80 so it made sense to encrypt all 8 data bits and use 12 of the 16 address bits. It makes a lot less sense to encrypt only half of the 16 data bits; using 12 of the 24 address bits might be ok, but not in the way it was done. The choice of address bits to use was probably dictated by the need to not encrypt data in certain areas of the address space, so they had to include the top 8 bits of the address. However this means that if you pick e.g. area 000000-00FFFF, where most of the program code resides, just 4 address bits affect the encryption, making it very weak when compared to the MC8123. Out of the 16KB of internal RAM, you need less than 128 bytes to decrypt a whole game - the rest is not used. A waste of space and security. Also, since only 8 of the 16 bits are encrypted, it is very easy to use the unencrypted ones to search for known sequences of code or data. Like for the MC8123, the contents of the internal RAM were generated using a linear congruential generator, so the whole key can be generated starting from a single 24-bit seed. Note however that the "don't decrypt" data sections need special treatment so it's not possible to derive the precise key without access to the CPU.
- GAMES: Action Fighter (Sega 1986), Dunk Shot (1987)
- PCB: Hitachi FD1089A 317-0018 (Afighter)
- SOURCE: machine\fd1089.cpp


8.81  FD1094

- 0.233              : Eliminated remaining uses of auto_alloc and friends (etc\fddebug.cpp) [Aaron Giles].
- 0.230              : Renamed machine\fddebug.cpp/h to mame\etc\fddebug.cpp/h [AJR].
- 0.222              : READ/WRITE macros removal (machine\fd1094.cpp) [Osso].
-  9th December  2018: Smitdogg - Arcade Hacker figured out how to program security chips on Sega System 16 / 18 / 24 / X (https://arcadehacker.blogspot.com/2018/12/sega-system16-security-programming-guide.html).
- 0.186              : Changed description to 'Hitachi FD1094 Encrypted CPU'.
- 0.177              : Get rid of a spammy printf [hap].
- 0.166              : Make a couple of things (FD1094 decryption) more friendly to multiple instances (drivers\segahang.c, segaorun.c, segas16a.c, segas16b.c, segas18.c, segas24.c, segaxbd.c, machine\fd1094.c, video\segaic16.c and segaic16_road.c/h) [David Haywood].
- 0.154              : Reconstructed the SEGA FD1094 key for Ace Attacker (FD1094 317-0059) and clone Juuouki (set 1, Japan, FD1094 317-0065) [Chris Hardy, Andreas Naive]. Refactored FD1094's decryption code in order to make the function more amenable to inversion. FD1094's documentation updates & cleanups [Andreas Naive].
- 31st December  2013: Charles MacDonald - I've added framework for analyzing 68K behavior at a bus cycle or clock cycle level, which I used to look into a quirk of the FD1094 with more detail. Back when the inital FD1094 research was being done I noticed the FC2-0 pins didn't seem to behave normally, but didn't have a way to examine this closely. These pins are used to indicate if a memory access is for program code or data. It turns out the FD1094 drives these low at all time (which is an undefined state) and only asserts them to indicate an interrupt acknowledge cycle. This makes it harder to track what the CPU is doing. It's not really a factor in terms of emulation or extracting table data, but it's an interesting security measure added to the hardware to make things challenging for bootleggers.
- 0.146u5            : Removed machine\s16fd.c. Converted FD1089/FD1094 into proper devices, derived from m68000. They now handle their own decryption and memory management, so we can remove all the calls for initialization/reset/etc. The key now lives as a 'key' subdevice under the CPU, and the FD1089/1094 are now specified just like any other CPU. Created a helper class for managing fd1094 decryption caches. Removed the horrible s16fd and s24fd files. Good riddance [Aaron Giles].
- 17th August 2012   : Charles MacDonald - Thanks to ShouTime we finally got Last Survivor dumped and emulated. It's a good reminder that there are still working FD1094 CPUs out there, and we do need to get them dumped as soon as possible. Between this and Bullet we have had good fortune finding rare games, so who knows, maybe we'll find Charon next.
- 0.128u7            : Added machine\fddebug.h.
- 0.124u2            : Save state support for FD1094 chips [MAMEPlus].
- 29th March     2007: Aaron Giles - #1 With A...: I took a break from Excite League and decided to look at Bullet instead, mainly because it was a bigger unknown than a baseball game. After some more aggressive improvements to my analysis tools and many hours of tedium, I managed to get almost all of the code for the game successfully idenitified. Out of the 8192 key bytes, I'm down to less than 100 ambiguous cases, and have over 67% of the mystery bits in the key identified. With this work, I'm finally able to get the game up and running. It passes all tests, the attract mode runs, and the game is pretty playable, though I think there are a few minor glitches that still need to be worked out. Interestingly, it appears to be the only 3-player dual-joystick game I can think of. Haven't gotten far enough into the game to really get a feel for what it's like, but I will include the current partial key with the next MAME update so you can have a look yourself.
- 21st March     2007: Aaron Giles - FD1094 Analysis, part 3: Unfortunately, just knowing the pseudo-random number generation formula is only good enough to identify the low 6 bits in 8188 out of the 8192 bytes of the key. The top two bits aren't generated by the formula, and the first four bytes are completely independent. The first four bytes of the FD1094 key are what's known as the 'global' key. The first byte indicates which internal mode the FD1094 switches into whenever an interrupt is taken (the FD1094 has 256 different modes that it can be in, and programs can switch between them at will while running). The three bytes following affect how the bit permutations work across the entire key, which is why we generally refer to it as the 'global' key. In order to decrypt a given word of the program code, we take the 8-bit value from the key at the corresponding address, plus the 24 bits from the global key, plus the 8-bit current mode, and use those 40 bits to determine how to shuffle the bits to produce the final result. Fortunately, there are some patterns in the global key that help reduce the keyspace by a few bits (each bit that is 'locked' reduces the search space by a factor of 2, so each bit counts!), so in the end we only have to search all 8 bits of the first byte, and 16 bits over the next three bytes, so 24 bits total. Add that to the 22 bits necessary to fully describe a seed value for the random number generator, and we're up to 46 bits worth of 'root' key data necessary to generate all of the full 8192-byte key, minus the top two bits. So, what's in those top two bits of the rest of the key? Well, as I mentioned in part 1, bit $80 is set consistently at addresses from $0004-$0FFF, and bit $40 is set consistently at addresses from $1004-$1FFF. So actually, for most of the bytes, one of the two remaining bits is a constant value. It's that final bit that is the tricky part. One of the features of the FD1094 is that, after all the bit permutation has completed, certain decrypted values are thrown away and replaced by the value $FFFF. This was likely done either to prevent the use of certain opcodes, or (more likely) so that $FF fills-which are a common encryption weakness-could be encrypted in a random fashion. Regardless of the reasons, the final bit has a significant effect on this $FFFF replacement step. If the bit is 0, a certain subset of decrypted values are replaced; if the bit is 1, a more expansive set of decrypted values are replaced (including all of those that get replaced if the bit is 0). To simplify the following explanation, I'm going to break the decrypted values into 3 categories. Category A opcodes are never converted to $FFFF. Category B opcodes are always converted to $FFFF, regardless of the state of the mystery bit. And Category C opcodes are only coverted to $FFFF if the mystery bit is set to 1. Thus, at encryption time, the programmers had to be careful about what opcodes were present in the original code stream. Obviously opcodes in Category A were fine. However, opcodes in Category B are always converted to $FFFF, so they had to completely avoided; presumably there was some mechanism to avoid that problem. And for the opcodes in Category C, it had to be ensured that the mystery bit was set to 0 in the key. Now, there are several potential theories about how the mystery bit was generated for the key. One theory is that the bit comes from the random number generator, but is then modified to change the bit to 0 wherever there is an opcode from Category C in the path. Statistical analysis of all the existing keys disproves this theory: if it were true, then the mystery bit should be set to 0 consistently less than 50% of the time. In reality the mystery bit varies quite a bit; on some games it is 0 in 30% of the bytes, and on others it goes as high as 70%. A second theory is that by default the mystery bit is set to 1 everywhere except where there is an opcode from Category C. This would mean that the mystery bit is strictly determined by the original code. This theory seems more likely. A quick analysis of the simplest game (Sonic Boom) reveals that the mystery bit is only 0 if there is at least one Category C opcode present, and is 1 in all other cases. This is not definitive, but it is a good indication. So, how can we figure out what that last bit is? That's the trick, and the reason that I've been pounding away at creating some new debugger extensions. It involves a lot of tedious work, and I don't think we'll get 100% perfect results, but I'm hopeful we can get something playable at least. It essentially involves analyzing all possible decrypted combinations that you get when you decrypt the code with the mystery bit set and clear, discarding any invalid opcodes, and then manually selecting the right answer based on analysis of the code. Through this mechanism I've managed to get the title screen of Excite League to come up, and have identified over 30% of the mystery bits in Bullet.
- 0.113u3            : Added machine\fddebug.c. Aaron Giles added extensive (but still WIP) FD1094 debugging tools for help in brute force searching for keys.
- 21st March     2007: Aaron Giles - FD1094 Analysis, part 2: The next step in analyzing the FD1094 keys was to see if I couldn't replicate the pattern of the existing keys using a linear congruential generator (LCG). A LCG is typically written in the form: x' = (a * x + b) % c  which requires three constant parameters a, b and c to be determined. Assuming that this was done with 32-bit math, that would be 2^32 x 2^32 x 2^32 = 2^96 possible combinations. That's a bit much to brute-force examine. Fortunately, thanks to the fact that the bit sequences repeat at even powers of two, we can eliminate c from the equation entirely, since it is just a mask. Furthermore, a property of LCGs with even power of 2 values for c is that bit n repeats with a frequency of 2^n. Beyond these two factors, if you think about it, bits in x that sit higher than the one we are interested in don't really matter. For example, if we are interested in bit 8, and a is $7F and b is $42, then we will get the same bit sequence in bit 8 as we would if a were $F87F and b were $10442 (you may need to do the math to convince yourself - I did). Thus, only the bits below bit 8 matter when searching for a and b. Given these additional constraints, our search space got significantaly smaller. Taking, for example, a bit that repeats with a frequency of 8192 (2^13), we need only look at 2^13 values for a and 2^13 values for b, or 2^26 total possibilities. Not bad at all. Of course, for each a/b combination, we had to generate the sequence of 2^13 bits in order to compare against our existing data. After doing some searching across all the keys, eventually I found that a consistent value for a worked to generate the low six bits of all the keys, when combined with an initial seed value, one of 5 different initial values for b, and one of 6 different shift amounts (i.e., compute x', then shift right by a given amount, and mask against $3F to get the low six bits). It turned out that every single one of the existing FD1094 keys could have its low six bits generated in this fashion, and through this mechanism, I was able to fix single-bit errors in several keys. At last, the analysis was starting to pay off! Nicola noticed something odd about the values for a and b, and further reduced the equation to: t = a * x and x' = t + (t << 16). The nice thing about this equation is that it gets rid of the arbitrary shift and b values entirely, leaving only an initial seed value which is unique for each game. So, with the mystery of the low 6 bits solved, and one of the two remaining bits fixed across most of the key, all that is left is to figure out what the final bit is for each of the 8192 bytes of the key. Unfortunately, it turns out that this bit does not appear to be algorithmically generated. More on that in part 3.
- 19th March     2007: Aaron Giles - Got the 'Title Screen' of Excite League decrypted (317-0079 FD1094 CPU).
- 19th March     2007: Aaron Giles - FD1094 Analysis, part 1: As you might have noticed, there has been some good recent progress on emulating the remaining encrypted Sega games, even though we don't have the CPUs available for analysis. This has stemmed from some analysis of the keys used in the games. For the MC8123-based games, Nicola has taken the analysis to its final conclusion and successfully generated full keys. Unfortunately for the FD1094, it's not quite that simple, but progress is being made, and I'm still hopeful the game code can be decoded. Now, I'm no encryption expert (as I've said many times before), but for a while now I've had the sneaking suspicion that that keys stored in the FD1094 CPUs used by Sega were too large to be anything other than algorithmically generated. About a month ago, I posted the idea to the MAME developer list, asking if anyone else thought this might be an avenue worth pursuing, but didn't get much of a response. So I decided to start an analysis of the FD1094 keys that we currently have. I started by looking for obvious patterns. There are a couple of interesting ones. Namely: Bytes in the key at addresses $0004-0FFF all have bit $80 set. Bytes in the key at addresses $1004-1FFF all have bit $40 set. And Bits 0-5 of each key are very uniformly random (almost exactly 50/50 0's versus 1's). Armed with this knowledge, I decided to start looking for repetitions in each of the low 6 bits of all the keys we had. The theory I was going under is that some sort of pseudo-random number generator was responsible for producing these bits. At the time these devices were created, there was not a big focus on cryptographically secure random number generation, so I was hoping they used some kind of simple linear congruential generator (LCG - see http://en.wikipedia.org/wiki/Linear_congruential_generator). If they did, then eventually any sequence they generated would repeat. My initial theory was that there was one generator, and that by stringing together bits from different keys, we might be able to reconstruct the algorithm that generated them. So I wrote a program that read in all the keys and looked for sequences where the ending set of values from one key overlapped the starting set of values from another key, taking each bit independently. Sure enough, it didn't take long to discover that there were what looked to be several long sequences of bits, some of which repeated at regular intervals. The interesting thing here is that the bit sequences I was finding repeated at even power of 2 intervals, which initially made me think that perhaps the algorithm for generating the keys was more of a bit permutation than an LCG, but OG helpfully pointed out that an LCG with a modulus of an even power of 2 will repeat its bits at an even power of 2 frequency. Even more interesting was the discovery that in the cases where bit 0 of a key had a period of 2^n, bit 1 would have a period of 2^n+1, bit 2 would have a period of 2^n+2, etc. This indicated that it was quite likely the case that the low 6 bits were generated all at once with a single LCG. This was even better news than I had hoped. The next step, then, was to figure out what the parameters of the LCG were. I'll talk about that in part 2.
- 0.112u2            : Aaron Giles fixed bad bits in a couple of FD1094 keys. Added a small optimization to the FD1094 decoding step.
- 11th January   2006: Charles MacDonald - I've put together a brief tutorial on doing conversions of FD1094 based games to use decrypted ROM sets and a standard 68000. This explains the steps I went through when working on Alien Storm. I'll add more details and maybe some tools later (http://cgfm2.emuviews.com/fdconv.php).
-  2nd January   2006: Charles MacDonald - I converted a dead System 18 AliFD1094-based game (Alien Storm) to use a decrypted ROM set. It works perfectly, and can be done with a ROM replacement and a simple circuit that goes between the 68000 and program ROMs.
- 0.94u5             : Updated FD1094 documentation [Nicola Salmoria].
- 0.94u4             : Nicola Salmoria changed FD1094 state change behavior slightly to keep Gain Ground happy.
- 0.89u1             : Several FD1094 games now run with new keys [Thierry, Gerald].
- 0.88u6             : Nicola Salmoria further improved the S16 decryption code.
- 0.88u5             : Various Sega S16 decryption improvements [Nicola Salmoria, Charles MacDonald]. Several more cpus read, improvements to decryption made based on those.
- 0.88u4             : Nicola Salmoria fixed a bug in the fd1094dp.c and fd1094.c decryption to allow for Cotton to be decrypted.
- 0.88u3             : Added etc\fd1094dp.c. More FD1094 improvements [Nicola Salmoria]. A program to produce the key tables from dumped state data is now included as etc\fd1094dp.c, please note the key table format has changed slightly to reflect some new findings.
- 0.88u2             : Removed machine\fd1094ky.c. Further improvements to the FD1094 decryption, this is now almost fully understood, additional FD1094 cpus are needed to work out the remaining details. Keys are now stored in the romsets as they should be a close representation of the data stored in the FD1094 CPUs [Nicola Salmoria].
- 0.88u1             : Improvements to FD1094 emulation [Charles MacDonald, Nicola Salmoria]. More sets now run (eswatu, fpoint, goldnaxc, cltchitr).
- 0.88               : Added machine\fd1094.c/h, fd1094ky.c and s16fd.c. Removed machine\fd1094\317-0092.c. Emulation of Sega FD1094 encrypted 68k CPUs [Charles MacDonald - extracting data from CPUs, Nicola Salmoria - decryption code]. This will allow for significant progress in the emulation of the remaining encrypted Sega games. Note that we require working CPUs to extract encryption data from in order to emulate the encrypted titles, see http://cgfm2.emuviews.com/ for more details. As a result of this code several of the encrypted games will now boot (astorm, ddcrew, wb3a, wb3b, tetris, ddux, sonicbom etc.).
- 21st October   2004: Charles MacDonald - Should be a lot of FD1094's coming in the next week or two, that will make up for the lack of updates. I've still been doing plenty of tests with the FD1094 and dumping table data in the meantime, which is useful but not exactly worth discussing. I ran some tests on the System 24 hardware to see how CPU performance is affected when one CPU accesses memory or a device on the other one's bus.
- 0.87u4             : Added machine\fd1094\317-0092.c. Nicola Salmoria added code to decrypt FD1094 CPU 317-0092 in states 0x00-0xff (0x00 is reset, 0x10 is IRQ) this is the CPU used by tetris, code is not hooked up yet.
- 25th September 2004: Charles MacDonald - I wrote a new, reasonably fast version of the table dumping software. It works entirely using direct opcodes with no reliance on encrypted data, so you can start dumping tables from any FD1094 without modifying the software. It also only resets the FD1094 once and doesn't rely on double exceptions to halt it, as it's been theorized that resets or other unusual behavior may cause additional drain on the battery, possibly as a tamper-proofing feature. A 16K block is provided for any state initialization (compare instructions or to enter an interrupt) so data from any state can be retrieved. It's been optimized as much as I can and the time it takes to dump tables is fixed regardless of the amount of state setup code. I will be releasing a software package with documentation for how to build the Sega board <> PC link, which I have simplified into a USB-based two chip design. It's easy to make, cheap and all you need is a device programmer to burn some EPROMs and a PLD. I'll be including the decryption programs and other code for System 24 software development. When I have the time, I'd like to write some example programs for System 16/18/C2/Mega Play as well, to go along with the System 24 stuff.
- 18th September 2004: Charles MacDonald - Great news, I've been able to sucessfully decrypt any 16K block from D.D. Crew. It should be possible to decrypt the entire game at this point. Because D.D. Crew is so large, I'm going to work on Tetris first. The argument to the compare instruction has an effect the decryption state for all following data. Most of it's 32 bits do something, though there are plenty of settings that give the same decrypted output. All you have to do is make the FD1094 execute compare instructions as they come up in the code, and the rest of the data can be decrypted. From what I've seen the result is not cumulative, so just need to run the last compare instruction instead of all prior ones. The catch is that because the decryption state can be changed by the programmer at almost any point in the game's code, you have to trace through the code which is a tedious process. D.D. Crew changes the state a lot but only uses the same few arguments, so one solution would be to decrypt the entire ROM multiple times with different compares being used, and then patch together the correct parts. Tetris only changes the state four times in the startup code and doesn't do anything afterwards, making it a better choice to work with. What's really exciting is, assuming no other problems arise, the technique I'm using is applicable to any FD1094 module. There is no restriction on the source ROM size or the memory map (none of the original code is executed except for the compares). The only work that needs to be done for each game is to get the initial PC (which can be automated) and determine which instruction changes the decryption state, but from what I've seen in other bootlegs it's always the same one.
-  6th September 2004: Charles MacDonald - I've been getting some good tips and ideas from people. I modified the way data is captured using a shorter 'move.w #$imm, d0' instruction so data can be decrypted without needing tables for two adjacent words. Then a TRAP instruction can be placed after the test code to jump to a code fragment that stores D0 to memory. Currently the decrypting code works fairly well, and it takes about 5 minutes to get all the data from a single location. This is mainly because resetting the CPU makes it go through it's startup code each time before the first TRAP can be taken to the test code. This allows data following the first decrypted location to be decrypted too, I've done about 8 sequential positions now. At some point I'll come up against the code fragments used to do the test write and result store, but I can relocate those in the earlier decrypted range of data. The real problem is time and storage; for the first issue I can try to automate the PC-hosted program to dump data, look up the opcode from the resulting table, and proceed with the next word. The table data should amount to 1GB (table size is 128k, 8k positions to test) which is too much for me to put at my website for interested parties. :) Because the area being decrypted starts later in the ROM, you'd think the earlier data would be unrecoverable. But since the decryption wraps on 16K boundaries, I can just decrypt the first few hundred bytes of the next 16K to get the tables needed to decrypt the earlier parts. In theory, of course, as this is based on current assumptions. Stability is an issue because the FD1094 thinks it's in a System 16 environment and tries to do things that don't agree with the System 24 hardware when booting up. This can cause lock-ups, which would interrupt the process if it could be automated. On another subject, does anybody have a scan of the PCB for a Mega Play cartridge? I should be getting a Mega Play PCB soon but have no carts, and want to see what kind of differences there are between Mega Play and Genesis cartridges.
-  5th September 2004: Charles MacDonald - While comparing the Tetris data dumps, there appear to be a very specific group of values that are never generated as a result of the decryption function. These are all opcodes that access data with the PC relative addressing mode. Instructions like LEA and PEA aren't present because they only use the program counter to generate an effective address. The operands are all set to zero, since their value doesn't actually matter. It's interesting that these specific ones are omitted, in fact I haven't seen any bootlegs or unencrypted originals that have encrypted counterparts which use these types of instructions. I think the FD1094 designers prevented their use to get around having an 'easy' way to access memory in the supervisor program space. A smart move for them, but bad news for us. :) A majority of the values decrypted by the CPU have a unique output. The Tetris data shows that for the ones that don't, they nearly always map to $FFFF, $4E73, $0612, and $0404, and to a much lesser degree the values are in the 4xxx-6xxx range. It makes you wonder how (for example) an immediate operand can have all 64k possible values represented if the decrypted output has a smaller range than that. I guess I'll keep working with Tetris, for the life of me I cannot get E-Swat to behave. The bootleg code is too out of sync with the original to get an idea of what's going on. I also have a CPU for D.D. Crew but I believe that game has no bootleg for a reference. It may be possible to get tables of data from a few more locations in Tetris, but I don't think I'll bother with that unless somebody makes a request.
-  4th September 2004: Charles MacDonald - With the PC link working on my System 24 board, I have been doing tests on the Hitachi FD1094 CPU that Tetris uses (the 317-0092) because there is a very similar bootleg to it. I can also try E-Swat, but those are the only CPU modules I own that also have bootlegs. Tetris has the following instruction: 00005D0: 6945 BD0B 535B     move.w #$1111, $E0F6.w - My goal was to modify the immediate word operand and capture the decrypted value written to $FFE0F6. I modified the Tetris code to take a TRAP exception to this location, then added a RTE after it. Later in the game's code, a marker is written to RAM which is used to check when the write has occured. The other CPU can monitor this location and change the operand in a loop. Here is a table of the decrypted data: Update: I've added data from several other addresses too. This gives a better example of which values are position-independant and which ones change based on their address. Also I byteswapped all the files to be LSB first (the other one wasn't, oops) tetris-data2.zip (1.3MB) - The 5d2.tbl table above has all 64k values of the word at address $0005D2. The results are fascinating, for example many values like 0E71 are decrypted as 4E71, which was the correlation I discussed earlier between the 4xxx group of opcodes. Even more interesting, the decrypted data has a lot of duplicate results, such as many values being decrypted as $FFFF. I had assumed every input would have a unique output. Remember that the decryption hardware also takes the current address into account, so some of the values would be different for another address, except for the 'fixed' results like the 4xxx group. Anyway, while it's not much, it's a first step to understanding how the FD1094 works. If anybody has some ideas for me to try, or notices anything interesting in the data, please let me know. I'll try to get some tables of data from other locations, though there are other experiments I want to run first. Update: One other point of interest: I tried relocating code fragments at different offsets and it turns out only bits 13-0 of the address are used when decrypting. Bits 23-14 are unused. So you can position the code at any 16K boundary and it will be decrypted in the same way. This means the 5d2.tbl file of decrypted data can be used in other locations. For example, in Tetris again: 00045D2: 799D CE7F BF3F     cmpi.b #$1E ($51, a6) - The decrypted value of $799D from the table is $0C2E. And in the bootleg version: 00045D2: 0C2E 001E 0051     cmpi.b #$1E ($51, a6) - There you have it, a perfect match. Tetris is pretty small so I can't give any more examples, but I think this shows the idea.
-  2nd September 2004: Charles MacDonald - I finished the prototype of a PC communications card that fits into the 30-pin expansion connector found on many Sega arcade boards. The transfer rate is about 180K per second in either direction, which is perfectly adequate -- most of the boards I own have less than 64k of RAM for program storage anyway. The limiting factor is the how fast the 68000 (10 MHz in this case) can process data. One experiment I tried was to have my System 16 emulator upload the video RAM contents to a Shinobi board during gameplay. There is quite a lot of flicker from the color and sprite RAM writes, and it doesn't run at full speed, but was nevertheless cool to watch. I think a better application in an emulator would be to have a hotkey that uploads the video state to the target hardware when pressed, so you can compare the software rendered display to what the real one should look like. Now that the communication code is working fairly well on both ends, I'll see about adapting it to the System 18/24/C2 platforms. In theory, this will conveniently solve the problem of ROM swapping on the System 24 board (no more bent pins!) so I can get back to playing around with the FD1094 and disk controller again. I've been running low on working flash memory chips and didn't want to risk wasting any more. Apart from just loading programs, the other nice aspect is that large amounts of data can be saved to disk instead of printed on the screen. This will be handy for testing the math chips that E-Swat uses.
- 23rd June      2004: Charles MacDonald - I've found out something really interesting about the Hitachi FD1094 instruction encoding. In comparing the bootleg or unencrypted original versions of several games to their encrypted counterparts, I noticed a group of instructions have a similar encoding to the original 68000 opcodes, that are always encoded in the same way regardless of position. The operands are encrypted, however. Normally instructions are encrypted based on their value and their address, so for example two ADDX.W instructions in sequence would have two very different opcodes. But in this case, a stream of identical opcodes have the same value. The group seems to be most of the 68000 $4xxx ones, most notably LEA is absent. In the FD1094 they are replaced as $0xxx.
- NOTES: The FD1094 is a custom CPU based on the 68000, which runs encrypted code. The decryption key is stored in 8kB of battery-backed RAM; when the battery dies, the CPU can no longer decrypt the program code and the game stops working (though the CPU itself still works - it just uses a wrong decryption key). Being a 68000, the encryption works on 16-bit words. Only words fetched from program space are decrypted; words fetched from data space are not affected. The decryption can logically be split in two parts. The first part consists of a series of conditional XORs and bitswaps, controlled by the decryption key, which will be described in the next paragraph. The second part does a couple more XORs which don't depend on the key, followed by the replacement of several values with FFFF. This last step is done to prevent usage of any PC-relative opcode, which would easily allow an intruder to dump decrypted values from program space. The FFFF replacement may affect either ~300 values or ~5000, depending on the decryption key. The main part of the decryption can itself be subdivided in four consecutive steps. The first one is executed only if bit 15 of the encrypted value is 1; the second one only if bit 14 of the _current_ value is 1; the third one only if bit 13 of the current value is 1; the fourth one is always executed. The first three steps consist of a few conditional XORs and a final conditional bitswap; the fourth one consists of a fixed XOR and a few conditional bitswaps. There is, however, a special case: if bits 15, 14 and 13 of the encrypted value are all 0, none of the above steps are executed, replaced by a single fixed bitswap. In the end, the decryption of a value at a given address is controlled by 32 boolean variables; 8 of them change at every address (repeating after 0x2000 words), and constitute the main key which is stored in the battery-backed RAM; the other 24 don't change with the address, and depend solely on bytes 1, 2, and 3 of the battery-backed RAM, modified by the "state" which the CPU is in. The CPU can be in one of 256 possible states. The 8 bits of the state modify the 24 bits of the global key in a fixed way, which isn't affected by the battery-backed RAM. On reset, the CPU goes in state 0x00. The state can then be modified by the program, executing the instruction CMPI.L #$00xxFFFF, D0 where xx is the state. When an interrupt happens, the CPU enters "irq mode", forcing a specific state, which is stored in byte 0 of the battery-backed RAM. Irq mode can also be selected by the program with the instruction CMPI.L #$0200FFFF, D0. When RTE is executed, the CPU leaves irq mode, restoring the previous state. This can also be done by the program with the instruction CMPI.L #$0300FFFF, D0. Since bytes 0-3 of the battery-backed RAM are used to store the irq state and the global key, they have a double use: this one, and the normal 8-bit key that changes at every address. To prevent that double use, the CPU fetches the 8-bit key from a different place when decrypting words 0-3, but this only happens after wrapping around at least once; when decrypting the first four words of memory, which correspond the initial SP and initial PC vectors, the 8-bit key is taken from bytes 0-3 of RAM. Instead, when fetching the vectors, the global key is handled differently, to prevent double use of those bytes. But this special handling of the global key doesn't apply to normal operations: reading words 1-3 from program space results in bytes 1-3 of RAM being used both for the 8-bit key and for the 24-bit global key.
- WEB: http://unemulated.emuunlim.com/sega_security.html
- GAMES: Sega - Shinonbi (1987), Moonwalker (1990), Ryukyu (1990), Line of Fire, System24
- PCB: HITACHI FD1094 A-12 9K1 (Loffire, Qsww), FD1094 317-0058-03D (System24)
- SOURCE: machine\fd1094.cpp + machine\fddebug.cpp


   Hitachi MCU label         System24 Disc label           Game

   SEGA 317-0058-02                                        Sspirits
   SEGA 317-0058-03D                                       System24 board (MAME)
   SEGA 317-0058-06B         DS3-5000-06B                  RoughRacer
   SEGA 317-0058-08B         DS3-5000-08B                  Qsww

   NOTE: Sega uses a pattern of naming on the floppy disks (DS3-5000-xxx). The xxx is the last part of the Hitachi CPU number.



8.82  FD1149
- NOTES: The FD1149 CPU is undumpable yet!
- GAMES: Sega - Burning Rival F1 (1992), Super Visual Football (1994)
- SOURCE: drivers\segas32.cpp



8.9   SH

- 0.275              : Fixed order of operands in disassembly of MAC.L (sh\sh_dasm.cpp) [Vas Crabb].
- 0.260              : Generally cleaned up code and renamed functions/macros/variables more conventionally [Ryan Holtz, Phil Bennett]. Fixed MAC_W regression [Philip Bennett].
- 0.250              : Use rotl_32 and rotr_32 for executing rotate instructions (cpu\sh\sh.cpp) [AJR].
- 0.236              : Make debugger 'out' command step over return delay slots on SH architectures (debug\debugcpu.cpp and sh\sh_dasm.cpp) [AJR].
- 0.196              : Removed cpu\sh\sh2drc.cpp. Reduced scope of stuff with different definitions across CPUs (cpu\sh\sh.h) [Vas Crabb].
- 0.193              : Added cpu\sh\sh_dasm.h.
- 0.191              : Added cpu\sh\sh.cpp/h and sh_fe.cpp. Moved cpu\sh2\* and cpu\sh4\* to cpu\sh\. Changed cpu\sh2dasm.cpp and sh4dasm.cpp to sh_dasm.cpp. Merged Hitachi SuperH CPU cores and implemented a preliminary SH3/SH4 recompiler. Recompiler is currently enabled for Cave CV-1000 but disabled for Sega NAOMI and can more than double the benchmark speed of CV-1000 games [David Haywood].
- NOTES: Hitachi SuperH CPUs
- SOURCE: cpu\sh\sh.cpp


8.91  SH-1

- 0.262              : Removed sh1_ prefixes from Hitachi SH-1 CPU [O. Galibert].
- 0.260              : Explicitly #include prefix header (sh\sh7021.cpp). Fixes unknown type name 'offs_t' during 0.259 build on FreeBSD (GitHub #11591) [Vas Crabb]. Improved SH7021 SoC emulation. Added (rudimentary) SH7021 DMA, timers and GPIO and logging for the rest. Generally cleaned up code and renamed functions/macros/variables more conventionally [Ryan Holtz, Phil Bennett].
- 0.259              : Added sh\sh7021.cpp/h.
- 0.164              : Fixed SH-1 num of address bits, removed extra read / write memory checks, added cache data array to main SH-2. Fixed SH-1 internal mem map. Fixed number of address lines for SH-1. Fixed accessing to internal map, might need another parameter for address cache "masking" (i.e. SH-1 uses address bit 27 for cache) [Angelo Salese].
- 0.154              : Changed description to 'SH-1'.
- 0.150              : Changed description to 'SH-1 DRC'.
- 29th June      2010: Dr. Decapitator - Work has started on the HD6437034S (#63 on The Decapping Project Status Page) but it's tricky and hasn't been read out yet. Update: Here are a couple of larger size decap pictures. First is a slightly better view of the HD6437034S mentioned in the previous post.
- 0.127              : R. Belmont added SH-1 CPU support, including lower precision on MAC.W and locking out SH-2 only instructions.
- NOTES: Hitachi SH-1 (model SH7021), Hitachi SH-1 from Sega Saturn (chip has 32-bit RISC SH7034 core, 64k (E)PROM and 4k RAM)
- PCB: HD6437034S, QFP112
- DRIVERS: coolridr.cpp and (MESS) casloopy.cpp
- SOURCE: cpu\sh\sh2.cpp


8.92  SH-2

- 0.262              : Removed sh2_ prefixes from Hitachi SH-2 CPU [O. Galibert].
- 0.260              : Explicitly #include prefix header (sh\sh7032.cpp). Fixes unknown type name 'offs_t' during 0.259 build on FreeBSD (GitHub #11591) [Vas Crabb]. Fixed SH2 NMIs occurring in a delay slot when using the interpreter. Generally cleaned up code and renamed functions/macros/variables more conventionally [Ryan Holtz, Phil Bennett].
- 0.259              : Added cpu\sh\sh7014.cpp/h, sh7014_bsc.cpp/h, sh7014_dmac.cpp/h, sh\sh7014_intc.cpp/h, sh7014_mtu.cpp/h, sh7014_port.cpp/h and sh7014_sci.cpp/h and sh\sh7032.cpp/h. Removed sh\sh2comn.cpp/h. Refactored SH-2 refactored code to separate onboard peripherals from CPU core. Added SH7014 SoC [Windy Fairy].
- 0.248              : Added debugger exception hook calls [AJR].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.221              : Simplified some handlers (cpu\sh\sh7604_sci.cpp) [Osso].
- 0.217              : Initialized some stuff [Osso].
- 0.216              : Implemented watchdog timer [MetalliC].
- 0.215              : Don't emit fast RAM accesses when the debugger is enabled [Phil Bennett].
- 0.214              : Added SH2 clock multiplier logs [MetalliC].
- 0.211              : First pass over SH7604 SoC refactoring. Fixed division unit overflow flag clearance [Angelo Salese].
- 0.206              : Fixed interpreter for CPS3 [O. Galibert].
- 0.180              : Changed the SH2 disassemblers to use 'std::ostream &' internally [AJR].
- 0.179              : Added cpu\sh2\sh7604_bus.cpp/h, sh7604_sci.cpp/h and sh7604_wdt.cpp/h. Added read-back for BCR1 register, fixing missing polygons in (MESS) Daytona USA CE for Sega Saturn. Added stub bus\sci\wdt devices for SH7604, this part will require more work as H8 and SH-2 shares same chips [Angelo Salese]. Removed masking from SH-2 curpc to be consistent with old versions and the pc passed by the interpreter to the hook to be consistent with the DRC [smf].
- 0.164              : Added MCFG_FORCE_NO_DRC option (cpu\sh2\sh2drc.c) [MooglyGuy]. First step in converting SH-2 to have separate internal devices. Fixed SH-1 num of address bits, removed extra read / write memory checks, added cache data array to main SH-2. Fixed accessing to internal map, might need another parameter for address cache "masking" (i.e. SH-1 uses address bit 27 for cache). Added SH-2A flavour, which is SH-2 + SH7021 used by (MESS) Casio Loopy. Added bread-and-butter DMA CH 0 for SH7032, used by (MESS) Casio Loopy for RAM fill. Added transfer size clear for DMAs, used by Chaos Seed in SS (still randomly crashes tho) [Angelo Salese].
- 0.158              : Fixed compile? (cpu\sh2\sh2drc.c) [David Haywood].
- 0.157              : Added crude repeat key support in keyboard handling, makes typing more comfortable (machine\smpc.c and cpu\sh2\sh2comn.c). Added default SSR value, makes EGWord to boot (cpu\sh2\sh2comn.c) [Angelo Salese].
- 0.156              : Added command-line option -[no]drc_log_uml to control DRC UML disassembly logging. Allows logging of DRC UML disassembly without re-compiling / removes. DRCUML_OPTION_LOG_UML and all the core-specific LOG_UML defines (cpu\sh2\sh2.c). Added command-line option -[no]drc_log_native to control DRC native diassembly logging. Allows logging of DRC native disassembly without re-compiling, removes DRCUML_OPTION_LOG_NATIVE and all the core-specific LOG_NATIVE defines, added logging() to drcbe_interface and added logging_native() to drcuml_state [Oliver Stoeneberg].
- 0.154              : Changed description to 'SH-2'. Modernised SH-2 cpu core. Better fix for the SH-2 modernization (drivers\deco_mlc.c) [Wilbert Pol]. Converted SH-2 to use delegates, so to finally remove the remaining static variables used by (MESS) machine\mega32x.c. Fixed (MESS) Sega Saturn (sh2\sh2comn.c) [Fabio Priuli]. Fixed usage of uninitialized member in sh2_device [Oliver Stoeneberg]. Fixed and enable SH-2 memory system bypass for SH-1 & SH-2 DRC. The speedup is only really gaudy on CPS-3 where the SH-2 is a major percentage of the frame time (800% -> 1250% unthrottled). SKNS games that access spriteram a lot (Cyvern) get a decent speedup as well. Saturn/ST-V and Cool Riders are dominated by the rendering in profiles and get around 10% improvement depending on the game [R. Belmont].
- 0.153              : Some early work towards GMEN SH-2 part of Namco System 23 (cpu\sh2\sh2comn.c) [Angelo Salese].
- 0.151              : Show effective address in disassembly of PC-relative instructions (cpu\sh2\sh2dasm.c) [R. Belmont, based on a patch by Darksoft].
- 0.150              : Changed description to 'SH-2 DRC'. Made both DRC and Non-DRC compile for MIPS, RSP and SH2 core and added option to enable/disable DRC from command line (-drc -nodrc by default it's on). Added command line option to force DRC C backend (emu\emuopts.c) [Miodrag Milanovic].
- 0.149u1            : SH-2 CPU core timing changes [notaz]: JMP should be 2 cycles, according to the manual. OR #imm,R0 should be 1 cycle and OR #imm,@(R0,GBR) should be 3 to match the manual and other ops.
- 0.148u3            : Fixed labelnum usage in SLEEP. Also removed a useless branch equivalent to: if(sleep!=1) { sleep=1; } (cpu\sh2\sh2drc.c) [hap].
- 0.148u2            : Fixed SH-2 compilation without USE_SH2DRC [Oliver Stoeneberg]. Fixed SH-2 DMAC irqs, fixes at least hard-locking on Baroque (cpu\sh2\sh2comn.c and sh2drc.c). SH-2 watchdog i/f is quite exotic, implement it so it can be debugged properly. Fixed SLEEP opcode in non-DRC SH-2. Fixed endianness (sh2\sh2drc.c) [Angelo Salese].
- 0.148u1            : Some notes on SH-2 Cache functionality (cpu\sh2\sh2comn.c). Fixed SH-2 non-DRC compile. Added illegal opcode handling for SH-2 CPU (added illegal opcode exception handling, side effect of some Saturn games on loading like Feda or Falcom Classics Vol. 1 (i.e. Master CPU Incautiously transfers memory from CD to work RAM H, and wipes out Slave CPU program code too while at it)). Illegal opcode is the start of the undefined address [Angelo Salese]. Fixed cpu\sh2\sh2drc.c [R. Belmont].
- 0.143u3            : R. Belmont fixed SH2 fractional FRC increments.
- 0.139u4            : Implemented support for SH-2 cycle steal mode, used by Fever Soccer [David Haywood]. R. Belmont fixed a SH-2 with TSTM opcode. Fixed BSRF and JSR in SH2DRC so delay slot insns can trash the calculated PR if they want. Fixed PC relative MOV in SH2 delay slot. Further improvements to PC_relative loads in the delay slot.
- 0.139u2            : Phil Bennett added missing save-state registration entries to the SH-2 core.
- 0.138u4            : Atari Ace fixed SH-2 interpreter.
- 0.129u6            : Aaron Giles moved SH2 set info functions to direct calls.
- 0.129u2            : Aaron Giles tweaked a few oddities in the SH2 DRC.
- 0.128u6            : Pointer-ified the SH2 CPU core [Aaron Giles].
- 0.128u5            : Aaron Giles fixed subtle timing calculation problems that affected SH-2 timers.
- 0.128u4            : Aaron Giles removed cpu_num info from SH2 in favor of just keeping the device object.
- 0.127u8            : R. Belmont fixed SH2 DRC's handling of internally generated IRQs, and fixed compiling in interpreter mode.
- 0.127              : SH-2 DRC updates [R. Belmont]: Moved IRQ handling front-end into recompiled code. Added TSTM/ANDM/XORM instructions. Oliver Stoenberg removed more unprintable characters in SH-2 disassembler.
- 0.126u3            : SH2DRC [R. Belmont, based on an idea by Mariusz Wojcieszek]: Add PC-relative load optimization and ability to disable if necessary. SH2DRC [R. Belmont, Aaron Giles]: Add SUBV, replace ADDV with C version as a precaution (Fixes most of Bug #2026, except the part which is a separate bug). Added new implementation which uses flags directly, keeping the C versions in reserve in case they are needed. Aaron Giles simplified SH2 DRC shift/rotate instruction implementations. Oliver Stoenberg removed of unprintable chars (newlines) in SH-2 disassembler.
- 0.126u2            : R. Belmont fixed logging for the SH-2 has been left on.
- 0.126u1            : Added cpu\sh2\sh2drc.c and sh2fe.c. UDRC-based SH-2 dynamic recompiler [R. Belmont]: All games on all drivers should work as before except "colmns97" and "stress" which crash due to sound system trouble. All idle skips are still included. They are quite a bit less effective than they were on the interpreter, but they still give a boost. Fast RAM bypass is not included yet so this does not represent final performance. That said, it's consistently faster than the interpreter even now. Example: sfiii3 on 0.126 gets 609% on the interpreter and 961% on the DRC.
- 13th July      2008: R. Belmont - The initial version of the SH-2 UDRC frontend has been submitted. It's missing the *direct RAM* feature that will make it much faster, but performance is already promising. For example, a -nosound -nothrottle -str 120 run on sfiii3 gets 609% on stock 0.126 and 961% with the DRC. The results are less flashy on more intense games like diehard (230% on 0.126, 278% on the DRC), but there's still a consistent gain over the interpreter and hopefully more to come.
-  3rd July      2008: R. Belmont - The SH-2 DRC successfully got Cyvern past the on-screen POST last night, but that revealed a problem with cycle counting that was making MAME timing and interrupts work poorly at best. I fixed that, but there's now a bug where it crashes trying to resume after handling an interrupt. Never a shortage of fun with this stuff!
- 0.125u9            : Added cpu\sh2\sh2comn.c/h. SH2 core [R. Belmont]: Refactored to separate out things that aren't part of the interpreter. Converted context struct to go through a pointer.
-  2nd July      2008: R. Belmont - I've been working on a MAME UDRC frontend for the SH-2 for just under a week now. Last night it finally made it all the way through the suprnova BIOS and into the Cyvern boot code without errors (including handling interrupts). There are still several instructions left to implement before it actually shows something, but so far so good so what, right? This will speed up ST-V (and Saturn in MESS), Kaneko SuperNova, Psikyo SH-2, and CPS3. And SH-2 is a pure subset of SH-4 (aside from different boot vector semantics) so once done this frontend will make a fine starting point for an SH-4 UDRC.
- 0.109u5            : Aaron Giles converted the sh2 disassemblers to the new format and added step in/out support where it was obvious.
- 0.102u4            : Mariusz Wojcieszek introduced cpu_readop16() for opcode fetching.
- 0.99u3             : Mariusz Wojcieszek fixed 64 bit / 32 bit division in division unit and added callback called when cpu reads FTCSR register (intended for idle loop skipping for slave SH-2 CPU in ST-V).
- 0.89u5             : SH-2 bounds overflow fix [Mame32Plus].
- 0.79               : Fixed a problem with the SH2 speedup previously added [Olivier Galibert].
- 0.78u4             : Some slight SH-2 speedups [Carlos Santillan].
- 16th October   2003: David Haywood fixed a DMA problem in the SH-2 CPU core that caused broken tile graphics in Shienryu, so Shienryu is now mostly playable although some sprite colors are off.
- 15th October   2003: Olivier Galibert fixed some bugs in the SH-2 DMA thanks to information from sthief.
- 0.75u1             : Cleaned up SH-2 core a bit and added a possible kludge for Sol Divide's Music [Olivier Galibert].
- 12th October   2003: Olivier Galibert and Aaron Giles fixed more bugs in the timer system and SH-2 CPU core.
- 0.74u1             : Various SH2 fixes improving master/slave support, this improves Shienryu on ST-V but its not yet playable due to incomplete ST-V emulation) [Olivier Galibert].
- 15th September 2003: Olivier Galibert sent in fixes to the SH2 CPU core to make it work in a dual setup, and he fixed the DMA1 interrupt vector in it.
- 26th April     2003: Sthief fixed a bug in the CMPSTR instruction in the SH-2 CPU core.
-  3rd February  2003: Sthief fixed a small bug in the SH-2 CPU core but it does not seem to affect any games.
- 0.62               : Implementation of the SH7604 internal timers, giving sound to Sol Divide and the Super Kaneko Nova System games [R. Belmont].
- 22nd October   2002: Olivier Galibert updated the SH-2 CPU core with some cleanups and added mirror addresses to the division box.
- 20th October   2002: Olivier Galibert fixed a few things in the SH-2 CPU core.
- 15th September 2002: R. Belmont fixed the SH7604 internal timers so that the music in the Super Kaneko Nova System games is fixed and the controls work in the Taisen Hot Gimmick games.
- 14th September 2002: R. Belmont implemented the SH7604 internal timers which gets music and sound running in the rest of the Super Kaneko Nova System games, but the music still suddenly stops working after a while in the games. It also added sound to Sol Divide and gets the Taisen Hot Gimmick games working.
- 13th September 2002: Spice fixed a SH-2 CPU core bug which caused the freezing boss in Strikers 1945 II.
- 27th July      2002: Olivier Galibert fixed NMIs in the SH-2 CPU core.
- 0.59               : Added cpu\sh2\sh2.c/h and sh2dasm.c.
-  3rd March     2002: Olivier Galibert fixed the negc instruction in the SH-2 CPU core.
-  2nd March     2002: Olivier Galibert fixed a few bugs in the SH-2 CPU core which also fix Daraku Tenshi - The Fallen Angels.
-  1st March     2002: R. Belmont fixed a bug in the SH-2 CPU core which fixes the missing background graphics in Strikers 1945 II, although they still aren't perfect due to other unemulated features.
- 24th February  2002: Olivier Galibert fixed a bug that caused SH-2 registers fail to appear in the debug mode.
- 21st February  2002: David Haywood reported some progress in emulating Hitachi SH-2 based Psikyo games. Strikers 1945 II and Space Bomber are playable, although they miss a lot of graphics, have some wrong colors and no sound. S. Glaize reported progress on Super Kaneko Nova System which also uses the Hitachi SH-2 CPU. Gal's Panic S and Gal's Panic 4 work up to the title screen, Panic Street, Cyvern, Jan Jan Paradise, Sen-know and Tel Jan work up to the actual gameplay but crash after a while, and Puzz Loop isn't playable although the attract mode shows something.
- 0.37b14            : Removed cpu\sh2\sh2.c and sh2dasm.c.
-  7th February  2001: Sylvain Glaize fixed some bugs in the SH-2 CPU core.
- 0.37b10            : Added cpu\sh2\sh2.c, sh2.h and sah2dasm.c.
-  ???           2000: Juergen Buchmueller added the SH-2 CPU core.
- NOTES: The Hitachi SH-2 (SH7600 family) Processor is used in the Kaneko's 'SuperNova' System, Sega ST-V Titan hardware (Sega arcade hardware system based on the Saturn console) and some Psikyo games. This work is based on tiraniddo C/C++ implementation of the SH-2 CPU core and was adapted to the MAME CPU core requirements by Juergen Buchmueller for MAME. Thanks also go to Chuck Mason and Olivier Galibert.
- PCB: Hitachi SH2 HD6417604F28, QFP144 (Gnbarich, Gunbird2), HD6417095 (STV-PCB), Hitachi SH7032 HD6417032F20 (Coolridr), SH2 (Avengrgs)
- DRIVERS: coolridr.cpp, cps3.cpp, deco_mlc.cpp, feversoc.cpp, hideseek.cpp, namcos23.cpp, psikyo4.cpp, psikyosh.cpp, stv.cpp and suprnova.cpp
- SOURCE: cpu\sh\sh2.cpp


8.93  Hitachi SH-2 (SH704x)

- 0.272              : Added a forgotten update_counter() (sh\sh_mtu.cpp) [O. Galibert].
- 0.270              : MTU fix (sh\sh_mtu.cpp) [O. Galibert].
- 0.266              : Removed some debug stuff (sh\sh_adc.cpp). Stop the (MESS) Yamaha PSR540 freezing by actually running the SCI channels [O. Galibert].
- 0.266              : Added sh\sh_bsc.cpp/h, sh\sh_dmac.cpp, sh\sh_mtu.cpp/h and sh\sh_sci.cpp/h. Added dmac, mtu, adc, intc, sci and bsc. Separated A and non-A [O. Galibert].
- 0.264              : Added sh\sh_adc.cpp/h, sh\sh_cmt.cpp/h, sh\sh_intc.cpp/h and sh\sh_port.cpp/h. Enhanced the sh704x. Start introducing the interrupts [O. Galibert].
- 0.263              : Added sh\sh_dmac.h. Start fleshing 'Hitachi SH-2 (SH7042)' up [O. Galibert].
- 0.262              : Added sh\sh7042.cpp/h. Removed sh2_ prefixes from Hitachi SH-2 CPU. Added SH-2 variant Hitachi SH-2 (SH7042) to (MESS) ympsr540.cpp [O. Galibert].
- DRIVERS: palsystems_sh2.cpp
- SOURCE: sh\sh7042.cpp



8.94  Hitachi SH-2 (SH7604)

- 0.283              : Fixed BCR1/BCR2 and VCRDIV accessing (sh\sh7604.cpp) [Angelo Salese].
- 0.279              : Hookup UBC BARA/BARB r/w (sh\sh7604.cpp), fixes sound in (MESS) 32x aburner [Angelo Salese].
- 0.259              : Added sh\sh7604.cpp/h. Removed sh\sh2comn.cpp/h. Refactored SH-2 refactored code to separate onboard peripherals from CPU core [Windy Fairy].
- DRIVERS: chakumelo.cpp, coolridr.cpp, cps3.cpp, deco_mlc.cpp, feversoc.cpp, hideseek.cpp, namcos23.cpp, psikyo4.cpp, psikyosh.cpp, stv.cpp and suprnova.cpp
- SOURCE: sh\sh7604.cpp




8.95  SH-3

- 0.278              : Simulated SH-3 SCI transmitter emptying, fixes 'Muscle Ranking Kinniku Banzuke Spray Hitter' progresses past initial loading but stops at a black screen, while 'Run Run Puppy' freezes at the four blue squares. Fix for SH3/SH4 DRC regression in MAME 0.277, which prevented generate_checksum_block() being called for RAM areas [smf].
- 0.277              : Implemented specific SH3/SH4 chips & pass the required endian into the constructor, SH4 internal registers now work when using big endian. The debugger is now aware that the SH3/SH4 has an MMU. Check correct irr0 bits, after the register size was corrected [smf].
- 0.220              : Removed unnecessary SuperH 3/4 timers restarts (cpu\sh\sh4tmu.cpp) [MetalliC].
- 0.218              : Handle INTEVT register [MetalliC]. Disable timers at reset [yz70s].
- 0.192              : Added some SH3/4 recompiler changes that got lost at some point. It fixes an issue where futaribl sound would cut out if left in attract mode on first boot due to timer irq 0 being missed and then never refiring due to the way the DRC code blocks work [David Haywood]. Mark DRC cache dirty on reset [MetalliC].
- 0.153              : Changed description to 'SH-3 (big)'. Fixed descriptions/shortnames to clarify endianness for SH-3/4 [Tafoid].
- 0.143u7            : Fixed SH3/4 big-endian mode [R. Belmont].
- 0.143u4            : Added preliminary support for big-endian SH-3/SH-4 CPUs [R. Belmont].
- 0.141u1            : Cleanup and better SH4 common/interpreter separation. Port preliminary SH3 support from DRC [R. Belmont].
- 19th August    2009: R. Belmont - I'm making good progress on a dynamic recompiler for the SH-3 and SH-4 CPUs (NAOMI/Atomiswave/Dreamcast and friends, and eventually some of the later Cave games like Ibara). It helps that these processors are back compatible to the SH-2 which I previously wrote a DRC for, so that previous work serves as a well-tested base on which to add support for the newer features of the newer processors. With only 1 new instruction added the new DRC already can run the entire Atomiswave BIOS and start executing the actual cartridge (that BIOS is very minimal - it's roughly 4k of total code). No, I don't know how much the speed will improve, and there's plenty of work to go yet.
- 10th May 2009      : R. Belmont - A little more work on the SH-4 DRC (the front end "pre-scanner" is basically completed now, so it's almost time to start adding the new SH-3 and SH-4 opcodes to the actual codegen).
- DRIVERS: cv1k.cpp, konamigs.cpp and m119.cpp
- SOURCE: cpu\sh\sh4.cpp and cpu\sh\sh3comn.cpp


8.96  SH-4

- 0.277              : Implemented specific SH3/SH4 chips & pass the required endian into the constructor, SH4 internal registers now work when using big endian. The debugger is now aware that the SH3/SH4 has an MMU. Check correct irr0 bits, after the register size was corrected [smf].
- 0.240              : Streamlined logging across chips to use logmacro.h, removed popmessages and printfs in production code (sh\sh4comn.cpp) [Angelo Salese].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.220              : Removed unnecessary SuperH 3/4 timers restarts (cpu\sh\sh4tmu.cpp) [MetalliC].
- 0.218              : Disable timers at reset [yz70s].
- 0.215              : Don't emit fast RAM accesses when the debugger is enabled [Phil Bennett].
- 0.198              : UML implementations of FABS, FCMP_EQ, FCMP_GT, FLDI0, FLDI1, FLOAT, FNEG, FRCHG, FSCHG, FSTS and FTRC. Optimized some implemented UML. Fixed SR state in new CMP implementations [R. Belmont].
- 0.197              : UML implementations of FADD, FDIV, FMAC, FMUL, FSUB, LDCSPC, LDCSSR, LDSFPUL, MOVCAL, STCDBR, STCSGR, STCSPC, STCSSR, STSFPSCR and STSFPUL. Fixed possible error in previous FPU conversion [R. Belmont].
- 0.196              : Enabled SH-4 Dynamic Re-Compiling by default for naomi.cpp and segasp.cpp [MetalliC, Ryan Holtz].
- 0.192              : Added some SH3/4 recompiler changes that got lost at some point [David Haywood]. Reset DRC cache [MetalliC].
- 0.183              : Fixed FMOV* opcodes. Note: Half of FPU was not correct. Fixed formatting [MetalliC].
- 0.180              : Changed the SH4 disassemblers to use 'std::ostream &' internally [AJR]. Begin SH4 MMU improvements (with a view to seeing what Aristocrat MK6 needs). Allow table upload by LDTLB opcode in SH4MMU. Allow experimental SH4 MMU test code to be turned on / off on a per-driver basis [David Haywood].
- 0.179              : Reinstate lines removed in error [smf].
- 0.161              : Added SH-4 'fastram', disabled by default [David Haywood].
- 0.155              : Get rid of pointers to member functions [Wilbert Pol]. Fixed irqline usage in case of certain SH3 exceptions (cpu\sh4\sh4comn.c) [Oliver Stoeneberg].
- 0.154              : Moved SH-4 legacy handlers to member of cpu classes [Miodrag Milanovic]. Modernized SH-4 cpu core. Inlined some functions [Wilbert Pol].
- 0.153              : Changed description to 'SH-4 (little)'. Fixed descriptions/shortnames to clarify endianness for SH-3/4 [Tafoid]. Always set proper channel in sh4_ddt_dma (cpu\sh4\sh4dmac.c, machine\dc.c and maple-dc.c) [Oliver Stoeneberg].
- 0.150              : Added some useful fatalerrors (cpu\sh4\sh4.c) [Angelo Salese].
- 0.143u8            : Optimzied SH4 core by using a single opcode jump table instead of nested switch statements [David Haywood].
- 0.143u7            : Added cpu\sh4\sh4dmac.c/h, sh4tmu.c/h and sh3comn.c/h. Fixed SH3/4 big-endian mode [R. Belmont].
- 0.143u4            : Added preliminary support for big-endian SH-3/SH-4 CPUs [R. Belmont].
- 0.143u1            : Added support for DMA transfers between the processor and external devices in SH-4 CPU core [Samuele Zannoli]. Preliminary work for ATV Track, in order to get the second SH-4 into business [Samuele Zannoli].
- 0.143              : Misc SH-4 cleanups [O. Galibert, Deunan Knute, R. Belmont]: Added support for VERSION register. NAOMI rev H BIOS now boots games.
- 0.141u1            : Cleanup and better SH4 common/interpreter separation. Port preliminary SH3 support from DRC [R. Belmont].
- 19th August    2009: R. Belmont - I'm making good progress on a dynamic recompiler for the SH-3 and SH-4 CPUs (NAOMI/Atomiswave/Dreamcast and friends, and eventually some of the later Cave games like Ibara). It helps that these processors are back compatible to the SH-2 which I previously wrote a DRC for, so that previous work serves as a well-tested base on which to add support for the newer features of the newer processors. With only 1 new instruction added the new DRC already can run the entire Atomiswave BIOS and start executing the actual cartridge (that BIOS is very minimal - it's roughly 4k of total code). No, I don't know how much the speed will improve, and there's plenty of work to go yet.
- 0.131u2            : Angelo Salese added a work-around for the UART FIFO read only status register on the SH-4 to make Tetris Kiwamemichi happy to boot. It crashes shortly after that like La Keyboard though (jumps to an unmapped address).
- 10th May 2009      : R. Belmont - A little more work on the SH-4 DRC (the front end "pre-scanner" is basically completed now, so it's almost time to start adding the new SH-3 and SH-4 opcodes to the actual codegen).
- 0.130u3            : ElSemi and Angelo Salese added direct mode JVS command, used by the I/O for the later NAOMI games.
- 0.128u6            : Pointer-ified the SH4 CPU core [Aaron Giles].
- 0.127u1            : SH4, NAOMI and Hikaru updates [Samuele Zannoli]: Fixed SH-4 core to support multiple SH-4s. Fixed LDCSR instruction. Fixed SH-4 I/O ports. Skeleton Hikaru driver with memory maps and both SH-4s. Fixed JVS/Maple translation so NAOMI 2 BIOS runs.
- 0.127              : Added cpu\sh4\sh4comn.c/h. R. Belmont split out SH-4 non-interpreter-specific stuff to sh4comn.c.
- 0.126u1            : SH-4 update [Samuele Zannoli]: Fixed TRAPA and some versions of FMOV. Improved disassembly for MOV.W, MOVA, MOV.L, FIPR and FSCA.
-  2nd July      2008: R. Belmont - I've been working on a MAME UDRC frontend for the SH-2 for just under a week now. Last night it finally made it all the way through the suprnova BIOS and into the Cyvern boot code without errors (including handling interrupts). There are still several instructions left to implement before it actually shows something, but so far so good so what, right? This will speed up ST-V (and Saturn in MESS), Kaneko SuperNova, Psikyo SH-2, and CPS3. And SH-2 is a pure subset of SH-4 (aside from different boot vector semantics) so once done this frontend will make a fine starting point for an SH-4 UDRC.
- 0.123u6            : Oliver Stoenberg fixed "garbage" (newlines) in the debugger window when debugging the SH-4 CPU.
- 0.123u4            : R. Belmont fixed SH4 refresh ticks value of 0, makes awbios not blow up the timer system.
- 0.123u2            : Samuele Zannoli added missing SH4 instructions and bugfixed the FPU. Improved NAOMI I/O board emulation and added working controls.
- 0.122u2            : Samuele Zannoli added initial FPU support to the SH4 core.
- 0.120u3            : Samuele Zannoli correct some errors in the SH4 core and implemented store queues and the basics of DMA. Added a call to simulate DMA transfers with external devices.
- 0.117u2            : More SH-4 core improvements [Samuele Zannoli]: Fixes some problems in the disassembly and instruction execution from the previous patch. Adds interrupt management. Implements register bank switching. Adds RTC timer counters. Adds memory refresh timer. Adds three timers of the TMU. Adds a configuration structure that specifies the processor mode pin settings. Internal processor clock frequencies calculated from mode pins and cpu clock. Systems using the sh4 processor secify its configuration structure.
- 0.116u1            : Added cpu\sh4\sh4regs.h. SH4 CPU core improvements [Samuele Zannoli]. Correct opcode decoding and decodes all opcodes of SH4. Correct disassembly and added support for all instruction of SH4 not in SH2. Now disassembles all fpu instructions. Changed cpu to little-endian (SH4 can be either big or little). Correct which data is read and written from memory. Added registers fpul and dbr. Added (non-fpu) instructions of SH4 non present in SH2. Added four fpu instructions. Modified memory-mapped internal register management so that all internal registers can be actually used. Added file sh4regs.h with defines for all sh7750 internal registers. Implemented internal registers for memory refresh. Removed some internal registers of sh2 not present in SH4. Added preliminary support for internal cache used as ram.
- 0.114u1            : Added cpu\sh4\sh4.c/h and sh4dasm.c. R. Belmont added very preliminary SH4 CPU core.
- NOTES: Hitachi SH-4 (SH7750 family)
- PCB: Hitachi SH4 CPU (BGAxxx, with heatsink and fan) (NAOMI-BIOS)
- DRIVERS: alien.cpp, aristmk6.cpp, atvtrack.cpp, hikaru.cpp, chihiro.cpp, cougar.cpp, dc_atomiswave.cpp, hikaru.cpp, naomi.cpp, segasp.cpp, triforce.cpp and winclub.cpp
- SOURCE: cpu\sh\sh4.cpp


8.A   HCD62121

- 0.274              : Added missing save items (hcd62121\hcd62121.cpp) [qufb].
- 0.264              : Implemented missing mov instructions and timer wait (hcd62121\hcd62121.cpp) [qufb, George Stagg]. Fixed register accesses from the debugger. Implemented the TIME register. Implemented more instructions tested on hardware. Fixed swap flags - they are always cleared regardless of values. Fixed timer so that it expires on KO enabled key input. Added an infinite timer variant, (seems to be used with the low power-variant of timer_wait) [qufb].
- 0.215              : Added xor instruction with indirect addressing (needed for zoom menu in graph mode to work) [Ricardo Barreira].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.193              : Added cpu\hcd62121\hcd62121d.h.
- 0.192              : Fixes to HCD62121 CPU emulation based on experiments with the actual hardware (using a CFX-9850G). With these fixes, the CFX-9850G is emulated just accurately enough for most of the RUN mode to work well. Further reverse-engineering is ongoing. Added some more unknown instructions. Small fixes to get GRAPH mode working [Ricardo Barreira].
- 0.186              : Improved rotate and shift instructions. Identified COM and PORT registers. Fixed UNIDASM config [Wilbert Pol].
- 0.182              : Removed hcd62121_ops.h. Several small cleanups [Wilbert Pol].
- 0.180              : Changed the HCD62121 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.157              : Fixed Visual Studio compilation of HCD62121 [Oliver Stoeneberg].
- 0.154              : Fixed usage of uninitialized members in hcd62121_cpu_device [Oliver Stoeneberg].
- 0.150              : Removed some unused device_irq_acknowledge_callback occurrances (hcd62121\hcd62121.c) [Oliver Stoeneberg].
- 0.149u1            : Modernized HCD62121 cpu core [Wilbert Pol].
- 0.147u4            : HCD62121 doc update [Wilbert Pol].
- 0.139u2            : Added cpu\hcd62121\hcd62121.c/h, hcd62121d.c and hcd62121_ops.h. Imported the Hitachi HCD62121 CPU core from MESS [Curt Coder].
- NOTES: The Hitachi HCD62121 is the custom cpu which was used in the Casio CFX-9850
- DRIVERS: (MESS) cfx9850.cpp
- SOURCE: cpu\hcd62121\hcd62121.cpp





9.    NEC


9.1   D70008

- NOTES: The NEC D70008 is a Z80A compatible processor for program and sound.
- GAMES: Tecmo - Tecmo Bowl (1987), Silkworm (1988), World Cup'90 (1989) and Dyna Blaster (Irem 1992)
- PCB: NEC D70008AC-8 (Silkworm, Tbowl, Wc90), D70008 (Dynablst)


9.2   uPD7725 / uPD96050

- 0.277              : Improved host interface and suppress side effects for debugger reads. Split host interface into separate data_r, data_w and status_r. Added access mask for uPD96050 data RAM write and simplified downstream code that uses it (upd7725\upd7725.cpp) [cam900].
- 0.275              : Prevent out-of-bounds reads in the uPD7725 cpu core [Lord Nightmare].
- 0.266              : Mask address for data RAM accesses (upd7725\upd7725.cpp) [dink].
- 0.211              : Correct address shifts for upd7725 [AJR].
- 0.205              : Removed MCFG [Ryan Holtz].
- 0.197              : Fixed disassembly (upd7725\dasm7725.cpp) [AJR].
- 0.196              : Changed description to 'NEC uPD7725'.
- 0.193              : Added cpu\upd7725\dasm7725.h.
- 0.190              : Updated OV1 and S1 flag calculation to be correct based on AWJ's NESdev forums post and the original datasheets [AWJ, Lord Nightmare]. DPL bits of the instruction field are ignored if DP is the destination register of the current opcode. Similarly, RPDCR bit is ignored if RP is the destination register of the current opcode [Jonas Quinn].
- 0.184              : Added 'uPD7725' device (cpu\upd7725\upd7725.cpp). Fixed uPD7725 disassembly [smf]. Added Air Rescue's uPD7725 DSP and load its roms. Disabled for now, since the uPD7725 CPU core will need some features added before this can work. Added preliminary IRQ support. Handle the LSB-first load from SI properly, for when SI gets hooked up in the future. Added siack and soack registers and their requisite jumps, not used yet. Fixed missing si register and flags registers savestate registration. Fixed an off-by-one error when loading uPD96050 roms for SNES games (bus\snes\upd.cpp). Fixed LSB-first bit ordering for SO reg, not used yet. Use accessors to access the SR p0 and p1 bits, rather than masking. Correct which registers are actually reset by /RESET and fixed/updated IRQ system, should behave more properly now [Lord Nightmare].
- 0.180              : Changed the uPD7725 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.154              : Converted NEC DSP to DEVCB2 [Osso].
- 0.148u2            : Fixed initialization of necdsp_device when no static_config is provided (cpu\upd7725\upd7725.c) [Oliver Stoeneberg].
- 0.147              : Oliver Stoeneberg fixed some printf format string warnings reported by Cppcheck (cpu\upd7725\upd7725.c).
- 0.143u1            : Update NEC DSP core to correctly generate the ov1 and s1 alu flags (and hence, SGN register contents) [Lord Nightmare, Segher, BYUU, Cydrak]. Further upd7725 fixes, new code might actually work properly now, fixed uninitialized variables [Lord Nightmare, Wilbert Pol].
- 0.142u1            : Implementation of uPD7725 p0 and p1 output bits as device lines; preliminary implementation of INT input line [Lord Nightmare].
- 0.141u2            : Hook up uPD96050 (ST-010) math/protection DSP to the SSV driver [R. Belmont].
- 0.141u1            : Added cpu\upd7725\upd7725.c/h and dasm7725.c. Added uPD7725 16-bit DSP core and hookups for SNES hardware [BYUU, R. Belmont]. NEC DSP updates [R. Belmont, BYUU, Dr. Decapitator]: Now supports uPD96050. Hooked up SNES common code to use uPD96050 for ST-010/011. Removed ST-010 HLE simulation.
-  2nd January   2011: R. Belmont - Dr. Decapitator recently read out the internal ROMs for the Super NES "DSP-1", "DSP-2", "DSP-3" and "DSP-4" chips. These are all fairly low-powered NEC uPD7725 16-bit DSPs used to offload 3D trig calculations in games like Pilotwings and Super Mario Kart. BYUU wrote an emulation core for this chip for BSNES and kindly donated it to MAME/MESS so now SNES in MESS has perfect math on games using the DSP as well. And the great thing is the previous HLE simulation code used for these games was larger than both the 7725 core and the ROMs. So you save a little compile time and memory and get guaranteed perfect results. I love it!
- NOTES: NEC uPD7725/uPD96050 DSP
- DRIVERS: segas32.cpp (Air Rescue)
- SOURCE: cpu\upd7725\upd7725.cpp



9.3   uPD7751

- 0.269              : Renamed n7751 to upd7751 [hap].
- 0.249              : Hook up upd7751c sample player to Othello [hap].
- 0.35b2             : Mike Balfour added support for the 7751 sound chip in Monster Bash. Two samples are still needed (discrete circuits).
- NOTES: The NEC uPD7751 is a 8048 CPU derivative (clone). Emulation based on Monster Bash code.
- GAMES: Monster Bash (Sega 1982), Major League (Sega 1985), Quartet (Sega 1986), Alex Kidd (Sega 1986), Body Slam (Sega 1986), Shinobi (Sega 1987)
- PCB: NEC uPD7751, NEC D7751C (Bodyslam), NEC7751 (source)
- DRIVERS: othello.cpp, segag80r.cpp and segas16a.cpp
- SOURCE: cpu\mcs48\mcs48.cpp


9.4   uPD780C

- NOTES: The NEC D780C is a Z80A compatible processor for program and sound.
- PCB: D780 (Buckrog), NEC D780C-1 (Flstory), D780C (Devstors), 8421X5 + 8329X5 (Kchamp)


9.41  uPD7801

- 0.272              : Improved uPD7801 Mode C handling. Fixes banking in (MESS) SCV Star Speeder [Wilbert Pol].
- 0.271              : Reduced prescaling of timer value when loaded by STM. Fixes speed issues in various SCV games [AJR].
- 0.220              : Divide internal clock by 2 or 3 [AJR].
- 0.188              : Fixed uPD7801 and uPD78C05 internal ram size. Fixes (MESS) Casio FP-1100 regression [smf].
- 0.142u5            : Angelo Salese added SKIT_F0 opcode to the uPD7801/uPD7810 CPU core.
- 0.136u1            : uPD7801 core changes [Wilbert Pol]: Fixed incorrect disassembly of some instructions. Updated the handling of interrupts to match the documentation. Implemented uPD7801 timers. Configured port A on the uPD7801 to an output port.
- 0.123u3            : Wilbert Pol added basic support for the NEC uPD7801, uPD78C05 and uPD78C06 CPUs to the uPD7810 CPU core.
- DRIVERS: (MESS) fp1100.cpp and scv.cpp
- SOURCE: cpu\upd7810\upd7810.cpp


9.42  uPD78C06

- 0.248              : uPD78C06 has internal rom [hap].
- 0.129u2            : Wilbert Pol fixed cpu reset for upd78c06.
- 0.123u3            : Wilbert Pol added basic support for the NEC uPD7801, uPD78C05 and uPD78C06 CPUs to the uPD7810 CPU core.
- DRIVERS: (MESS) gamepock.cpp
- SOURCE: cpu\upd7810\upd7810.cpp


9.43  uPD7807

- 0.249              : Adjusted instruction clock counts to match the UPD78[C]1x datasheet; also applied similar fixes to the upd7807 when instructions matched and timing otherwise was identical to the upd7810, or when the timing was documented elsewhere. Made some minor fixes to debug information for certain illegal opcodes (upd7810\upd7810_table.cpp) [Lord Nightmare].
- 0.220              : Divide internal clock by 2 or 3 [AJR].
- 0.210              : Added opcode MOV_MT_A (port T input threshold level; uPD7807 only) [AJR].
- 0.183              : Replaced fake I/O space with callbacks. Preparing for future use [AJR].
- 0.64               : Support for uPD7807. Nicola Salmoria added sound in Reikai Doushi. Added uPD7807 (8MHz) and DAC sound.
- 13th January   2003: Nicola Salmoria replaced the MCU simulation hacks with full emulation of the uPD7807 CPU in the Home Data driver, also making the sound emulation work fine.
- GAMES: Home Data - Reikai Doushi (1988), Mahjong Lemon Angel (1990)
- PCB: uPD7807CW (Mjikaga, Mjkinjas, Vitaminc)
- DRIVERS: homedata.cpp
- SOURCE: cpu\upd7810\upd7810.cpp


9.44  uPD78C10

- 0.282              : Added internal layout and complete driver implementation for (MESS) Roland PG-1000 (upd7810\upd7810.cpp, roland\roland_pg1000.cpp) [Felipe Sanches].
- 0.262              : Added support for internal RAM (upd7810\upd7810.cpp and upd7810\upd7810_opcodes.cpp) [Devin Acker]. Set MM RAE to 1 at power on (datasheet says it's undefined at reset) (upd7810\upd7810.cpp) [hap].
- 0.255              : Added support for externally clocked serial mode (upd7810\upd7810.cpp) [Devin Acker].
- 0.252              : Fixed upd7810 serial input failing to detect the start bit of the next byte if there are zero serial idle state bits sent between the serial bytes to the upd7810 receive line [Lord Nightmare]. Fixed Clang error: Shifting a negative signed value is undefined [-Werror,-Wshift-negative-value] (upd7810\upd7810.cpp) [AJR].
- 0.249              : Adjusted instruction clock counts to match the UPD78[C]1x datasheet; also applied similar fixes to the upd7807 when instructions matched and timing otherwise was identical to the upd7810, or when the timing was documented elsewhere. Made some minor fixes to debug information for certain illegal opcodes (upd7810\upd7810_table.cpp) [Lord Nightmare]. Fixed serial input/output [Dirk Best].
- 0.248              : Don't change carry flag with inr/dcr opcodes. Still affect HC flag. Refresh port C on MCC related output changes. Some variables were missing from savestates [hap].
- 0.240              : Fixed LDAX and STAX tables to match proper instruction size (upd7810\upd7810_table.cpp) [Golden Child].
- 0.224              : UPD7810 analog fixes (conversion registers, scan mode) [Golden Child]. Fixed upd7810 semantics of SKIT NMI and SKNIT NMI. Simplified analog input code [AJR].
- 0.221              : Added 'NEC uPD78C10' device. Nominally distinguish NMOS and CMOS device types [AJR]. Simplified some handlers [Osso].
- 0.220              : Divide internal clock by 2 or 3. Make internal timers run at former speed and A/D timer at former rate relative to CPU states. Interrupt-related fixes: Prevent NMI from being masked out. Make EI take effect only after the following instruction. Inhibit clearing of interrupt flag upon acknowledgment when another interrupt with the same priority is also enabled. Added a crude start bit check to asynchronous serial mode. Fixed random hanging in Gun Master and probably other games with uPD7810 sound by not syncing on each shift (drivers\metro.cpp). Added configuration option to disable port pullups for output. Refresh PA/PB/PC/PF outputs upon mode change. Fixed loss of sound in games with uPD7810s other than Daitoride, Pururun and Gun Master (drivers\metro.cpp) [AJR].
- 0.215              : Fixed problem with first INTF2 being ignored [Robbbert].
- 0.213              : Fixed breakpoints. Added notes [AJR].
- 0.200              : Removed MCFG macros [Vas Crabb].
- 0.196              : uPD7810 DASM fix (cpu\upd7810\upd7810_dasm.cpp) [O. Galibert].
- 0.193              : Added cpu\upd7810\upd7810_dasm.h.
- 0.188              : Created C-Chip device with correct CPU type in it and a bunch of notes (pinout etc.). Use internal ROM map for other uPD78C10 chips as it's always present [David Haywood].
- 0.183              : Replaced fake I/O space with callbacks. Preparing for future use [AJR].
- 0.180              : Changed the uPD7810 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.156              : Fixed ADC output register range. ADC functions should return bytes. Sample and hold ADC value at start of conversion process. Clear sample and hold on ADC reset. Removed removed code duplication in timers 0 and 1 and in ETIMER. Set ETIMER interrupts. Removed gamemaster hack for INTFE1. The extended timer has been properly implemented in upd7810. Tested with (MESS) Continental Galaxy 2020. Treat NMI like other interrupts. Correctly deal with external interrupts. Return meaningful value when PC3 is in control mode. When PC3 is in control mode, it acts as INT2 and external Timer Input. INT2 may be set by connected devices through set_input_line(), so its value can be used when reading or writing to PC3. There is currently no code to support external timer input. Fixed bug introduced in extended timer simplification. ECNT clear control happens after capture control. Fixed, export and improved timer/event counter output. The timer/event counter outputs (CO0 and CO1) are set differently when EOM changes and when a timer update occurs. Most EOM values are cleared on use. The document at [0] is confusing regarding these bits. An older document [1], easier to understand, was used instead. [0] NEC Electronics User's Manual, April 1987. [1] NEC uCOM-87AD Family 8-Bit Microcomputers uPD78C1X Users Manual. Use intermediate flip flops for extended timer/event counter. The extended timer/event counter uses intermediate flip flops (LV0 and LV1) before writing the output to CO0 and CO1. The introduction of LV0/LV1 addresses three issues: Level inversion occurs after the flip flop is output, not before. The intermediate flip flop can be altered without affecting the output of CO0/CO1. upd7810_write_EOM() didn't work properly when the level inversion bit was set along other bits [Ramiro Polla]. Some uPD7810 fixes and code simplification. Interrupt-related fixes. Fixed and improved timer/event counter [Miodrag Milanovic]. Fixed uPD7810 sound/hang regressions in some MAME drivers. Fixed Puzzli sound [Alex Jackson].
- 0.154              : Added cpu\upd7810\upd7810_macros.h. Changed cpu\upd7810\upd7810_dasm.c, upd7810_opcodes.c and upd7810_table.c to 7810dasm.c, 7810dasm.c and 7810tbl.inc. Reorganize uPD7810, compile source files seperately instead of including them into the main source [Dirk Best].
- 0.153              : Changed cpu\upd7810\7810ops.c to 7810ops.inc and 7810tbl.c to 7810tbl.inc [Oliver Stoeneberg]. Modernized uPD7810 cpu core [Wilbert Pol]. Added ADC support [Ramiro Polla].
- 0.149              : Removed a no longer needed hack [Wilbert Pol].
- 0.146u2            : Fixed uPD7810 setting of flags in the ACI_[VABCDEHL]_xx functions. Fixed handling of Carry flag in the DAA instruction [Wilbert Pol].
- 0.142u5            : Angelo Salese added SKIT_F0 opcode to the uPD7801/uPD7810 CPU core.
- 0.128u6            : Pointer-ified the uPD7810 CPU core [Aaron Giles].
- 0.123u3            : Wilbert Pol added basic support for the NEC uPD7801, uPD78C05 and uPD78C06 CPUs to the uPD7810 CPU core.
- 0.109u5            : Aaron Giles converted the upd7810 disassemblers to the new format and added step in/out support where it was obvious.
- 0.82u3             : Eisuke Watanabe fixed the upd7810 gta, gti and dgt, working reg opcodes and SIO input. Added sound support to the Metro driver.
- 20th March     2002: Peter Trauner submitted an update to the NEC uPD7810 CPU core, fixing a lot of bugs.
- 11th March     2001: Juergen Buchmueller fixed some compilation problems in the NEC uPD7810 CPU core.
- 0.37b13            : Added cpu\upd7810\upd7810.c/h, 7810ops.c, 7810tbl.c and 7810dasm.c. NEC UPD7810 CPU emulation [Juergen Buchmueller].
-  6th March     2001: Juergen Buchmueller updated the NEC uPD7810 CPU core again.
-  5th March     2001: Juergen Buchmueller sent in another NEC uPD7810 CPU core update with some bugfixes.
-  4th March     2001: Juergen Buchmueller added some more functionality to the NEC uPD7810 CPU core.
-  3rd March     2001: Juergen Buchmueller fixed a few bugs in the NEC uPD7810 CPU core.
-  1st March     2001: Juergen Buchmueller wrote a CPU core for NEC uPD7810, but it still lacks some features.
- NOTES: NEC uPD7810. The work based on the NEC Electronics User's Manual, April 1987.
- PCB: NEC D78C10ACW (Lastfreo, Lastfort), NEC D78C10ACN (Karatour), NEC78C10 (Dharma)
- DRIVERS: fitfight.cpp and metro.cpp
- SOURCE: cpu\upd7810\upd7810.cpp


9.45  uPD78C11

- 0.263              : Removed upd7810\upd7811.cpp/h. Moved near empty upd7811 file to upd7810 [hap].
- 0.221              : Nominally distinguish NMOS and CMOS device types [AJR].
- 0.220              : Divide internal clock by 2 or 3 [AJR].
- 0.196              : Changed description to 'NEC uPD78C11'.
- 0.188              : Added cpu\upd7810\upd7811.cpp/h. Added 'uPD78C11' device. Created C-Chip device with correct CPU type in it and a bunch of notes (pinout etc.). Created a uPD78C11 derived CPU type for this purpose, with internal ROM map [David Haywood].
- DRIVERS: asuka.cpp, opwolf.cpp, rbisland.cpp, taito_f2.cpp and volfied.cpp
- SOURCE: cpu\upd7810\upd7810.cpp


9.45  uPD78C14
- 0.277              : (MESS) Added 'Oldsmobile Driver Information System (version 2.2 CH)' [Devin Acker].
- NOTES: NEC uPD78C14
- DRIVERS: (MESS) omdisv22.cpp
- SOURCE: cpu\upd7810\upd7810.cpp


9.46  uPD78053

- 0.245              : Replaced BYTE_XOR_LE with new casting helper (upd78k\upd78k0.cpp) [AJR].
- 0.219              : Added cpu\upd78k\upd78k0.cpp/h and upd78k0d.cpp/h. Added disassembler for NEC 78K/0 architecture [AJR].
- DRIVERS: (MESS)
- SOURCE: cpu\upd78k\upd78k0.cpp


9.47  uPD78213

- 0.245              : Replaced BYTE_XOR_LE with new casting helper (upd78k\upd78k2.cpp) [AJR].
- 0.219              : Added cpu\upd78k\upd78k2.cpp/h. Make "Gun Sense" board a separate device. Added disassemblers for NEC 78K/II MCU types [AJR].
- NOTES: NEC uPD78213 - NEC 78K/II series 8-bit single-chip microcontrollers
- DRIVERS: (MESS) gunsense.cpp and roland_r8.cpp
- SOURCE: cpu\upd78k\upd78k2.cpp


9.48  uPD78312

- 0.219              : Added cpu\upd78k\upd78k3.cpp/h and upd78k3d.cpp/h. Added disassembler for NEC 78K/III architecture [AJR].
- NOTES: NEC uPD78312 - NEC 78K/III series 16/8-bit single-chip microcontrollers
- DRIVERS: (MESS) roland_d50.cpp
- SOURCE: cpu\upd78k\upd78k3.cpp


9.49  uPD784031

- 0.245              : Replaced BYTE_XOR_LE with new casting helper (upd78k\upd78k4.cpp) [AJR].
- 0.240              : Added cpu\upd78k\upd78k4.cpp/h and upd78k4d.cpp/h. Added skeleton CPU device and disassembler for NEC 78K/IV (uPD784XXX) architecture [AJR].
- NOTES: NEC uPD784031; NEC 78K/IV series 16/8-bit single-chip microcontrollers
- DRIVERS: viper.cpp
- SOURCE: cpu\upd78k\upd78k4.cpp



9.5   MC-8123

- 0.186              : Make MC-8123 into a device (chinsan.cpp, freekick.cpp, ninjakd2.cpp, segae.cpp, segas16b.cpp and system1.cpp). Fixed IRQ-related regression in Gigas (freekick.cpp) [AJR].
- 0.183              : Make MC8123 a bit more readable [Vas Crabb].
- 0.176              : Minor doc update [Brian Troha].
- 0.122u4            : "Simplified" MC8123 decryption, though it's still more complicated than I'd like it to be [Nicola Salmoria].
- 0.113u3            : Added machine\mc8123.h. Nicola Salmoria added proper MC8123 decryption code. Hooked up a number of games that were using the chip, making many of them playable.
- 16th March     2007: David Haywood - Now that the MC8123 it's been decrypted I've gone back to looking at Ganbare Chinsan Ooshoubu. The hardware seems quite simple. Fixed colors. And the final previously unemulated game that Nicola's MC8123 work allows to be emulated is DakkoChan House, another Mahjong title, this one running in the system1.c driver. In order to work properly it needs the mahjong control panel emulating correctly (otherwise it hangs when booting) I've started looking at this.
- 15th March     2007: David Haywood - Nicola found a weakness in the way Sega generated their keys for the M8123 which made decrypting Fantasy Zone 2 and Opa Opa much easier than anybody had expected. Both games (running on the System E arcade platform) work fine with the SMS emulation from HazeMD. I need to port this over to MAME so that they work properly in MAME too. Aaron should be thanked too for noticing that the FD1094 keys were generated by a Psuedo-Random number generator rather than actually being Random, this was also found to apply to the MC8123 and was the basis of Nicola's work.
- 14th March     2007: R. Belmont - Nicola has fully cracked the Sega MC8123 encrypted CPU. This means, among other things, that games like Opa Opa and Fantasy Zone 2 now run. MAMEdev was afraid those games might be lost forever, since no working examples were known, but now they'll be back to life.
- 0.112              : Nicola Salmoria improved decryption of MC8123-0054 based on a new dump.
- 0.93               : Pierpaolo Prazzoli and Nicola Salmoria added MC8123 317-0064 decryption table to Ufo Senshi Yohko Chan.
- 0.89u6             : MC8123 update [Nicola Salmoria]. Expanded the decryption tables, they change when bit 15 of the address is set. Table for 317-0066 (Altered Beast) almost complete, but there are still some uncertain values for opcodes above 8000 (not actually needed). Incomplete table for 317-0054 (Shinobi). Still not enough to decrypt the program. Tables for 317-0043 (wbml) and ninjakd2 derived by comparison of the original with the decrypted bootleg. They are incomplete but enough to fully decrypt the program. Unfortunately Block Gal and Perfect Billiards cannot be done in the same way because encrypted and decrypted programs are different versions.
- 0.89u3             : Added machine\mc8123.c. Decryption of MC-8123B 317-0066 encrypted Z80 used by altbeas2 [Nicola Salmoria, Dave Widel].
- NOTES: The NEC MC-8123 is a Z80 with built-in encryption. It contains some battery-backed RAM, when the battery dies the CPU stops working. It was used in a few games; for now, only 317-0066 has been decrypted. It is still not know how much the encryption can vary from one CPU to the other. I've assumed that the encryption tables are hardcoded, and the internal RAM only contains the code of the table to use.
- PCB: NEC MC8123B 651 (Blockgal, Shinobi), MC-8123A 317-5012 (Chinsan)
- SOURCE: machine\mc8123.cpp



9.6   NEC Vxx

- 0.280              : Correction to idiv overflow (nec\necmacro.h). Updated MUL/DIV cycles (nec\necinstr.hxx). Small cleanup to spacing [hap].
- 0.279              : REP opcodes are interruptable. Fixed issue with prefetch (can't do prev_icount - m_icount to determine opcode cycles since m_icount can be cleared externally) (nec\nec.cpp). Fixes incorrectly effects in 'Ninja Baseball Bat Man' and the status bar in Battle Chopper and clone appear twice [hap].
- 0.270              : Don't log message on bus lock by default (nec\nec.cpp) [Devin Acker].
- 0.253              : Implemented bitfield instructions INS and EXT (nec\necinstr.hxx) [Nigel Barnes].
- 0.252              : Removed logerror on HLT opcode (nec\nec80inst.hxx and necinstr.hxx) [hap].
- 0.249              : Fixed crash on encountering invalid LDEA (nec\necinstr.hxx) [AJR].
- 0.244              : Added support for EXT reg,imm4 and INS reg,imm4 (nec\necinstr.hxx) [Wilbert Pol].
- 0.224              : Renmaed nec\necpriv.h to necpriv.ipp. Use anonymous namespaces to avoid ODR violations with enums [Vas Crabb].
- 0.222              : Added byte registers to debugger state. Improved tracking of previous PC for debugger. Use more NEC register names [AJR].
- 0.221              : Added cpu\nec\nec80inst.hxx. Added 8080 mode [Carl].
- 0.193              : Added cpu\nec\necdasm.h. Removed cpu\nec\nec_common.h.
- 0.180              : Added cpu\nec\nec_common.h. Changed the NEC disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\nec\necinstr.inc to necinstr.hxx.
- 0.160              : Some cleanup to (MESS) PasoGo. Fixed 0xd8 opcode (cpu\nec\necinstr.inc) [Carl].
- 0.154              : Fixed usage of uninitialized members in nec_common_device [Oliver Stoeneberg]. Added missing items to save state [Alex Jackson].
- 0.153              : Changed cpu\nec\necinstr.c to necinstr.inc [Oliver Stoeneberg].
- 0.151              : Modernized NEC Vxx cpu cores [Wilbert Pol].
- 0.148u2            : Reduced some duplication in the NEC disassembler interface [smf].
- 0.146u5            : Removed cpu\v30mz\nec.h, necea.h, necinstr.h and necmodrm.h.
- 0.143u1            : Implemented halt instruction in the NEC CPU core [Wilbert Pol, Alex Jackson].
- 0.142u5            : Only display "byte/word ptr" in the NEC disassembler when it's actually needed to resolve ambiguity (same as the i386 disassembler) [Alex Jackson].
- 0.142u4            : Alex Jackson fixed the disassembly of the "mov ax, mem" instructions (opcodes A0-A3) in the i386 and NEC disassemblers. The argument (the memory address) was being displayed as a signed number, which doesn't make any sense.
- 0.141u1            : Removed cpu\nec\nechost.h.
- 0.138u1            : Alex Jackson removed all references to the nonexistent "premov" instruction from the NEC-V core.
- 0.137u2            : NEC disassembler updates [Alex Jackson]: Made "MOV AL, offset" etc (opcodes A0-A3) properly indicate a segment override prefix. Correct the disassembly of various NEC-only instructions (mainly V25/V35-only instructions). Changed CPUINFO_INT_MAX_INSTRUCTION_BYTES on NEC from 15 to 8.
- 0.128u7            : Changed cpu\nec\necintrf.h to cpu\nec\necpriv.h. Cleaned up i86/i286/i386/nec/v30mz headers [Aaron Giles]: Renamed i86.h -> i86priv.h and i86intrf.h -> i86.h. Consolidate i88intrf.h, i186intf.h, i188intf.h, etc into i86.h.
- 0.128u2            : NEC CPU core improvements [Couriersud]: Removed another speed hack in the NEC core. Renamed "FETCH" to "FETCH()" (macros used as functions should look like functions). Preparation for opcode prefetch timing. Improved prefetch timing calculation. Prefetch timing now also used by V20 and V33. Moved some static variables into cpu context. nec_reset now explicitly clears context variables. All cpus now share nec_execute.
- 0.118u3            : Added cpu\nec\necdasm.c.
- 0.91u1             : Bryan McPhail added support for encrypted opcodes in i386 disassembler (for Irem games). Added some of the NEC V series instructions into i386 disassembler.
- 0.90               : Fixed a disassembler bug with the NEC cpu core [Angelo Salese].
- 0.88u2             : Bryan McPhail fixed NMI handling in the NEC V20/V30/V33 cores.
- 0.87u3             : Removed cpu\nec\necdasm.c.
- 0.37b8             : Rewritten the NEC CPU core, with correct timing and support for encryption [Bryan McPhail].
- 0.36b7             : Changed cpu\nec\ea.h, host.h, instr.h and modrm.h to cpu\nec\necea.h, nechost.h, necinstr.h and necmodrm.h.
- 0.36b6             : Added cpu\nec\nec.c/h, necdasm.c, necintrf.h, instr.h, host.h, ea.h and modrm.h.
- SOURCE: cpu\nec\nec.cpp



9.61  V20

- 0.222              : Added exception hook for debugger gex command [AJR].
- 0.142u5            : Fixed POP, POPF, PUSHF and flags for V20 core [Carl, Alex Jackson].
- 0.128u2            : NEC CPU core improvements [Couriersud]: Removed another speed hack in the NEC core. Renamed "FETCH" to "FETCH()" (macros used as functions should look like functions). Preparation for opcode prefetch timing. Improved prefetch timing calculation. Prefetch timing now also used by V20 and V33. Moved some static variables into cpu context. nec_reset now explicitly clears context variables. All cpus now share nec_execute.
- 0.90               : Fixed a disassembler bug with the NEC cpu core [Angelo Salese].
- 0.88u2             : Bryan McPhail fixed NMI handling in the NEC V20/V30/V33 cores.
- 22nd February  2003: Bryan McPhail sent in a better version of the V20/V30/V33 CPU core fix and he also fixed the cycle counts in it.
- 21st February  2003: Angelo Salese fixed a V20/V30/V33 CPU core bug that caused problems with the timer in Gunforce 2 / Geostorm.
- 24th November  2001: Bart T. submitted a small bugfix to the NEC disassembler.
- 23rd July      2001: Bryan McPhail fixed a bug in the NEC disassembler.
- 29th July      2001: Stefan Jokisch fixed some NEC CPU core bugs.
- 26th July      2001: Nicola Salmoria fixed a NEC CPU core bug which caused sporadic tempo in the Irem games' sound.
- 25th July      2001: Nicola Salmoria improved the Irem sound CPU emulation, which allows R-Type Leo to work without kludges, and he decrypted Hook and Mystic Riders.
- 24th July      2001: Nicola Salmoria yet improved the Irem CPU decryption tables, and got sound working in Undercover Cops and R-Type Leo.
- 18th July      2001: Nicola Salmoria fixed several NEC CPU core bugs and errors in the Irem CPU decryption tables, and got sound working in Gunforce.
- 13th May       2001: Bryan McPhail finally fixed the V20 / V30 cycle count bug which affected the speed in Raiden, R-Type and more.
- 0.37b8             : Rewritten the NEC CPU core, with correct timing and support for encryption [Bryan McPhail].
- 11th September 2000: Bryan McPhail sent in a huge Irem games update with a rewritten NEC core, fixing many bugs. R-Type Leo title screen was fixed as well as preliminary Irem GA20 custom sample player support was added.
- 0.36b9             : Fixed a few bugs in the NEC CPU core that caused problems in Hook, Gunforce, Lethal Thunder and maybe others [Bryan McPhail, Nao].
- 10th November  1999: With help from Nao, Bryan McPhail fixed NEC core problems and now Hook and Dream Soccer 94 are fully playable.
- 0.36b6             : New NEC CPU cores [Oliver Bergmann].
- 24th September 1999: Oliver Bergmann sent in a NEC V20, V30, V33 cpu core.
- NOTES: The NEC CPU core based code on the i286 emulator by Fabrice Frances which had initial work based on David Hedley's pcemu(!). This new core features 99% accurate cycle counts for each processor, there are still some complex situations where cycle counts are wrong, typically where a few instructions have differing counts for odd/even source and odd/even destination memory operands.
- PCB: D70108C-8 (Borntofi)
- DRIVERS: fantland.cpp, panicr.cpp and tatsumi.cpp
- SOURCE: cpu\nec\nec.cpp



9.62  V25

- 0.273              : Improved peripheral emulation. Added preliminary DMA controller (capable of doing burst memory transfers). Make timer 1 cause two different interrupts. Added kludge for one timer edge case. Correct mistaken idea about DMA [AJR].
- 0.272              : Fixed BRG logging message (nec\v25sfr.cpp) [AJR].
- 0.271              : Added stubs for serial interface registers (nec\v25.cpp). Logging fixes (nec\v25sfr.cpp) [AJR].
- 0.270              : Don't log message on bus lock by default (nec\v25.cpp) [Devin Acker].
- 0.257              : Added address translation for IDB window [AJR].
- 0.249              : Call exception hook on bankswitch interrupt (nec\v25.cpp) [AJR].
- 0.224              : Renmaed nec\v25priv.h to v25priv.ipp. Use anonymous namespaces to avoid ODR violations with enums [Vas Crabb].
- 0.222              : Added exception hook for debugger gex command. Added byte registers to debugger state. Improved tracking of previous PC for debugger. Use more NEC register names [AJR].
- 0.213              : Added more interrupt SFRs, including underpinnings for macro service [AJR].
- 0.204              : Added address space for internal data area and SFRs [AJR].
- 0.196              : Changed description to 'NEC V25'.
- 0.189              : Make IDB register state visible to debugger [AJR].
- 0.175              : Fixed some cpus with virtual ports (NEC V25), mark them with +1 in any case [Olivier Galibert]. Made V25 use DEVCB instead of a memory map for the ports [Osso].
- 0.174              : Changed cpu\nec\v25instr.inc to v25instr.hxx.
- 0.154              : Implemented programmable clock divider in V25 core via execute_clocks_to_cycles() instead of set_clock_scale(). Properly restore the clock divider on state load. Initialized clock divider in constructor, since execute_clocks_to_cycles() gets called before device_start(). Added missing items to save state [Alex Jackson].
- 0.153              : Changed cpu\nec\necinstr.c to necinstr.inc and v25instr.c to v25instr.inc [Oliver Stoeneberg].
- 0.151              : Added cpu\nec\v25.h. Modernized NEC V25 cpu core [Wilbert Pol]. Fixed NEC V25/V35 internal clock divider which was missed during modernization. Fixed register view in V25 [Alex Jackson].
- 0.141u1            : Added cpu\nec\necmacro.h. Alex Jackson added a mostly complete NEC V25/V35 CPU core, added working sound to Batsugun and hooked up proper V35-controlled interrupts in Cosmic Cop / Gallop and Kengo. R. Belmont fixed V25 false warnings from some GCC versions.
- 0.140u3            : Added cpu\nec\necinstr.c, v25.c, v25instr.c/h, v25priv.h and v25sfr.c. Alex Jackson implemented a preliminary V25/V35 CPU core.
- NOTES: NEC V25
- DRIVERS: batsugun.cpp, dogyuun.cpp, dt7.cpp, fixeight.cpp, kbash.cpp, segas32.cpp, tvcobrasd.cpp and vfive.cpp
- SOURCE: cpu\nec\v25.cpp



9.63  TS-001/2/4/7

- 0.283              : Correct G_59 opcode for DT7 sound CPU (toaplan\toaplan_v25_tables.h) [David Haywood].
- 0.273              : Added toaplan\toaplan_v25_tables.h. Split Toaplan2 driver into smaller per-board parts. Moved some common logic to a device. Improved text layer handling (adds rowselect, fixes DT7 course select screen) [David Haywood].
-  1st June      2008: Charles MacDonald - V25 research: There are a number of instructions which delay interrupt and exception processing, allowing one more instruction to be executed before the interrupt is taken. For the prefixes, this prevents an interrupt from being taken after the prefix byte has been fetched but before the instruction it applies to has been executed. Likewise for segment register loads, if an interrupt occurred after SS was changed, SP would be invalid. By delaying interrupts the following types of sequences become uninterruptible. It seems less important to have DS and ES register loads delay interrupts as well, I did not expect this behavior. I have been looking at the MCU code for other games and it seems that they use similar, if not identical instruction encodings, despite using differently labeled MCUs. V-Five in particular seems to match the Knuckle Bash opcodes quite closely, and when/if I can get Knuckle Bash decrypted, I'll see how much of V-Five can be decrypted.
- 0.124u3            : David Haywood made some changes to the 'V25' code in toaplan2.c. Batsugun does upload what looks to be the entire program, unencrypted. If enabled it runs to the point of waiting for interrupts, however, for those it looks like it needs a real V25 core with register banks etc.
- 12th April     2008: Charles MacDonald - I recently acquired a Toaplan "Knuckle Bash" PCB. It's a fairly impressive system, based around a custom graphics chip which displays three tiled background layers and two 512x512 12-bit framebuffers for double buffered sprites. It has a 68HC000 running at 16 MHz that handles all the game related tasks, and a V25S MCU that manages inputs, sound effects, and music playback. The music for this game is quite good and definitely a notch above the rest. A lot of other Toaplan games use the same graphics chip, so I'm intending to run tests on it and get all the timing and other details worked out. The V25S microcontroller is a 80186 clone manufactured by NEC. Unlike the V25 it has no usable internal ROM and no 8080 emulation mode, the latter of which has been modified to add a new 'secure' operating mode. In secure mode a lookup table translates opcodes fetched from memory with their V25S equivalents. This allows the opcode-to-instruction mapping to be changed as the customer (Toaplan) sees fit, making the program code unusable unless the table contents are known. Luckily operands and data are not encrypted, and examination of the operands such as the ModR/M byte can reveal what category of instructions a particular opcode might fit in to. NEC intended for the V25S to be used as a drop-in replacement for the V25, to accomplish this it uses one of the unused V25 pins as a mode select input. When tied high or floating (due to an internal pull-up resistor) the CPU runs in normal mode, where the lookup table is bypassed and opcodes are processed normally. When tied low, the CPU is in secure mode and the lookup table is utilized. This pin is sampled during a reset, interrupt, or exception, and bit 15 of the PSW can be modified through select instructions to change the operating mode regardless of the pin state as well. These features allow a V25S to start in normal mode and selectively execute encrypted programs while still interacting with a unencrypted BIOS, operating system, and device drivers, or vice-versa. I modified the Knuckle Bash board to start the V25S in normal mode, and developed a program that sets the MCU to a known state and enters secure mode with the instruction trap feature enabled. This forces just one encrypted instruction to be executed before control is passed back to my unencrypted code, at which point the potentially modified state of the MCU is saved and examined. The behavior of all encrypted opcodes (except BRKS which sets up an unrecoverable state) can therefore be examined. I can see things like what data was pushed or popped from the stack, which registers were loaded, exchanged, or modified, and which instructions triggered an I/O or floating point exception. A lot of information can be gathered about the encrypted instructions, which narrows down or completely identifies which unencrypted instructions they map to. Best of all this technique should work for any V25S based system, such as the other Toaplan games. I'm looking forward to trying it on my Golden Axe 2 security board to see how effective it is after finishing with Knuckle Bash, though right now it's too early to give any indication of progress. Toaplan did an excellent job with the protection. The program ROM is filled with valid Z80 code and garbage data to throw off statistical analysis of the ROM, such as observing the frequency of occurence for particular bytes and byte sequences. The MCU has no manufacturer marking and has ambiguous names printed on it like "NITRO" and "DASH". Furthermore, the lookup table maps many opcodes to the same instructions so certain easily identifiable instructions can simply never be executed, increasing the number of potential matches any encrypted instruction might have. If this technique is applicable to the V35S, we'll have to see what Irem did with their games.
- 0.88               : Added MSM6295 sound via command tables in Batsugun and Knuckle Bash.
- NOTES:

  TS-001-TURBO    Fixeight                                 QFP94, PQFP94
  TS-002-MACH     Dogyuun                                  PLCC94
  TS-004-DASH     Knuckle Bash                             PLCC94
  TS-007-SPY      Batsugun, Dt7, Grind Stormer, VFive      PLCC94

  The Toaplan TS-001-Turbo is a NEC V25+ with some internal rom code and controls the YM2151 and OKI M6295 sound on some boards.
  The Toaplan TS-002-MACH is a NEC V25 (PLCC94) with encrypted program uploaded by main CPU.

- DRIVERS: dogyuun.cpp, dt7.cpp, fixeight.cpp, kbash.cpp and vfive.cpp
- SOURCE: toaplan\toaplan_v25_tables.h



9.64  V30

- 0.222              : Added exception hook for debugger gex command [AJR].
- 0.151              : Fixed register view in V30 [Angelo Salese].
- 0.128u4            : Pointer-ified NEC V30 CPU [Couriersud].
- 0.127u7            : Angelo Salese fixed old regression bug in Sengoku Mahjong that made the controls not work when the V30 CPU core was converted to 16-bit. Specifically, the game accesses the multiplexer with a word write instead of a byte write.
- 0.124u2            : Roberto Zandona fixed NEC V30 DASM when a "real-time encrypted CPU" is used. Also fixed execution clocks for add, addc and, or, xor, cmp, sub and subc instructions.
- 0.118u3            : Changed NEC V30 CPU core to use a 16-bit data bus. Updated affected drivers: raiden, raiden2, m72, m90, m92, m107, segas32, hng64, deadang, dynduke, sengokmj, shanghai, lockon, tatsumi, fantland, twins, gunpey and ttchamp. Separated V-series disassembler from the i386 disassembler and updated it to use proper register and opcode terminology [Aaron Giles, Phil Bennett, Pierpaolo Prazzoli].
- 0.118u2            : Aaron Giles fixed disassembly of V30 bit instructions.
- 0.90               : Fixed a disassembler bug with the NEC cpu core [Angelo Salese].
- 0.88u2             : Bryan McPhail fixed NMI handling in the NEC V20/V30/V33 cores.
- 0.66               : Bryan McPhail fixed some bugs in the NEC CPU emulation. This includes raster effect problems in Geostorm and the 99 credits bug in Lethal Thunder.
- 22nd February  2003: Bryan McPhail sent in a better version of the V20/V30/V33 CPU core fix and he also fixed the cycle counts in it.
- 21st February  2003: Angelo Salese fixed a V20/V30/V33 CPU core bug that caused problems with the timer in Gunforce 2 / Geostorm.
- 0.57               : Fixed a bug in the NEC V30 disassembler [Bart].
-  5th December  2001: Bart T. submitted another NEC V30 disassembler bugfix.
- 13th May       2001: Bryan McPhail finally fixed the V20 / V30 cycle count bug which affected the speed in Raiden, R-Type and more.
- 14th November  2000: Bryan McPhail fixed a bug in the NEC CPU core which affected scoring in Bomberman World (NEC V30).
- 24th September 1999: Oliver Bergmann sent in a NEC V20, V30, V33 cpu core.
- GAMES: R-Type (Irem 1987), Shanghai (Sunsoft 1988), Bomberman (Irem 1992)
- PCB: D70116C (Bchopper), uPD70116C (Sengoku Mahjong), D70116HG-16 (Raiden2, Raidndx), Sony 8623h9 CXQ70116D-8 DIP40 (Kyuukyoku no Othello, PanicRoad), NEC 8948NP V30 (Roundup)
- DRIVERS: deadang.cpp, dynduke.cpp, goodejan.cpp, gunpey.cpp, highvdeo.cpp, lockon.cpp, m72.cpp, m90.cpp, raiden.cpp, raiden2.cpp, sengokmj.cpp, shanghai.cpp, tatsumi.cpp, ttchamp.cpp and twins.cpp
- SOURCE: cpu\nec\nec.cpp



9.65  V30MZ

- 0.154              : Fixed usage of uninitialized member in v30mz_cpu_device [Oliver Stoeneberg].
- 0.148u2            : Fixed uninitialized members in cpu\v30mz\v30mz.c [Oliver Stoeneberg]. Reduced some duplication in the NEC V30MZ disassembler interface [smf].
- 0.148u1            : No need for usign device_irq_acknowledge_callback in modern V30MZ CPU [Miodrag Milanovic].
- 0.146u5            : Converted V30MZ to C++. Fixed disasm_max_opcode_bytes(). Make GCC behave like Clang (cpu\v30mz\v30mz.c) [Wilbert Pol].
- 0.146u4            : Removed cpu\v30mz\nechost.h. Wilbert Pol removed unneeded header file cpu\v30mz\nechost.h. Getting rid of some typedefs and cleaning up a few things (v30mz\v30mz.c).
- 0.136u4            : Fixed debugger access violation with V30MZ CPU (MESS: wswan, wscolor).
- 0.128u7            : Changed cpu\v30mz\necintrf.h to cpu\v30mz\nec.h. Cleaned up i86/i286/i386/nec/v30mz headers [Aaron Giles]: Renamed i86.h -> i86priv.h and i86intrf.h -> i86.h. Consolidate i88intrf.h, i186intf.h, i188intf.h, etc into i86.h.
- 0.128u6            : Pointer-ified the V30MZ core [Aaron Giles].
- 0.111u2            : Added cpu\v30mz\v30mz.c/h, necmodrm.h, necintrf.h, necinstr.h, nechost.h and necea.h. Added V30MZ emulator [Bryan McPhail]. Based on code by Oliver Bergmann (Raul_Bloodworth@hotmail.com) who based code on the i286 emulator by Fabrice Frances which had initial work based on David Hedley's PCEMU(!).
- NOTES: The V30MZ CPU is only used in MESS by the Wonderswan driver.
- DRIVERS: (MESS) wswan.cpp
- SOURCE: cpu\v30mz\v30mz.cpp



9.66  V33

- 0.280              : DIV/DIVU does store a result on V33 [hap, Martin Donlon].
- 0.201              : Emulated V33/V53 expanded addressing mode, including BRKXA and RETXA instructions. Start pushing down V33/V53-specific memory stuff into a new base class [AJR].
- 0.128u6            : Couriersud fixed raster effects in Ninja Baseball Batman by altering the V33 prefetch timing (just a guess as no documentation has been found).
- 0.128u2            : NEC CPU core improvements [Couriersud]: Removed another speed hack in the NEC core. Renamed "FETCH" to "FETCH()" (macros used as functions should look like functions). Preparation for opcode prefetch timing. Improved prefetch timing calculation. Prefetch timing now also used by V20 and V33. Moved some static variables into cpu context. nec_reset now explicitly clears context variables. All cpus now share nec_execute.
- 0.90               : Fixed a disassembler bug with the NEC cpu core [Angelo Salese].
- 0.88u2             : Bryan McPhail fixed NMI handling in the NEC V20/V30/V33 cores.
- 0.66               : Bryan McPhail fixed some bugs in the NEC CPU emulation. This includes raster effect problems in Geostorm and the 99 credits bug in Lethal Thunder.
- 22nd February  2003: Bryan McPhail sent in a better version of the V20/V30/V33 CPU core fix and he also fixed the cycle counts in it.
- 21st February  2003: Angelo Salese fixed a V20/V30/V33 CPU core bug that caused problems with the timer in Gunforce 2 / Geostorm.
- 29th April     2000: Bryan McPhail added the USA romset of In The Hunt to the M92 driver, and he fixed the slowdowns in V33 games.
- 24th September 1999: Oliver Bergmann sent in a NEC V20, V30, V33 cpu core.
- NOTES: V33 is a super version of the V30 that separates address bus and data bus, executes all instrucitons with wired logic, not micro-codes. Therefore, V33 is two times faster than V30 at same clock frequency. V33 has the parformance equivalent to i80286.
- PCB: D70136L-10  = V33 with 10 MHz (Rtypeleo), uPD70136L (Majtitl2), NEC D71036L V33 (Gunforce)
- DRIVERS: m107.cpp, m92.cpp and r2dx_v33.cpp
- SOURCE: cpu\nec\nec.cpp



9.67  V35

- 0.151              : Fixed NEC V25/V35 internal clock divider which was missed during modernization [Alex Jackson].
- 0.141u1            : Alex Jackson added a mostly complete NEC V25/V35 CPU core, added working sound to Batsugun and hooked up proper V35-controlled interrupts in Cosmic Cop / Gallop and Kengo.
- 0.140u3            : Alex Jackson implemented a preliminary V25/V35 CPU core.
- DRIVERS: cb2001.cpp, m107.cpp, m72.cpp, m90.cpp, m92.cpp and m107.cpp
- SOURCE: cpu\nec\v25.cpp



9.68  V40

- 0.228              : Allow configuration registers to be read back [AJR].
- 0.227              : Enabled a few OPCN-related internal connections [AJR].
- 0.216              : Added timer 2 control input (nec\v5x.h). Emulated internal/external timer clock input selection. Internalized CPU clock divider for V40/V50 [AJR].
- 0.215              : Added V40 type for future use [AJR].
- NOTES: The NEC D70208L-10 (NEC V40) CPU is a V20 with 8251, 8253 and 8255 included.
- DRIVERS: (MESS) Ziatech ZT-8802
- SOURCE: cpu\nec\v5x.cpp



9.69  V50

- 0.278              : Implemented internal serial interrupt for V50 [Devin Acker].
- 0.251              : Added ICU slave ack readback (nec\v5x.cpp) [Angelo Salese].
- 0.228              : Allow configuration registers to be read back [AJR].
- 0.216              : Moved remappable IO handler into seperated space. Fixed remapping IO behavior (nec\v5x.cpp) [cam900]. Added timer 2 control input (nec\v5x.h). Emulated internal/external timer clock input selection. Internalized CPU clock divider for V40/V50 [AJR].
- 0.215              : Separate V50/V53 common peripherals and former device from V33 base [AJR].
- 0.212              : Removed v33_internal_port_map() (derives from v30 not v33) [Patrick Mackinlay].
- 0.204              : Changed cpu\nec\v53.cpp/h to cpu\nec\v5x.cpp/h. Added the NEC V50 to the existing V53/V53A devices [Patrick Mackinlay].
- DRIVERS: (MESS)
- SOURCE: cpu\nec\v5x.cpp



9.6A  V53

- 0.284              : Fixed SCU clock selection on V53 and emulated the baud rate generator (nec\v5x.cpp) [R. Belmont]. Clear m_brc_enable in constructor (nec\v5x.cpp) [Carl].
- 0.283              : Hook up V53 timer 1 routing to the SCU and made more SCU-related pins accessible to V53 users (nec\v5x.cpp) [R. Belmont].
- 0.244              : Optionally resynchronize to the implicit clock domain on clock frequency change (emu\device.cpp and emu\diexec.cpp; cpu\nec\v5x.cpp) [O. Galibert].
- 0.228              : Allow configuration registers to be read back [AJR].
- 0.216              : Moved remappable IO handler into seperated space. Fixed remapping IO behavior (nec\v5x.cpp) [cam900]. Added timer 2 control input (nec\v5x.h). Emulated internal/external timer clock input selection. Internalized CPU clock divider for V40/V50 [AJR].
- 0.215              : Separate V50/V53 common peripherals and former device from V33 base [AJR].
- 0.204              : Changed cpu\nec\v53.cpp/h to cpu\nec\v5x.cpp/h. Refactored code to better align with current best practices. Added 16-bit transfer support to DMAU. Cleaned up SCU implementation [Patrick Mackinlay].
- 0.201              : Emulated V33/V53 expanded addressing mode, including BRKXA and RETXA instructions. Start pushing down V33/V53-specific memory stuff into a new base class. Added 8-bit mappings to V53 for internal peripherals and save associated registers [AJR].
- 0.200              : Removed MCFG macros [Vas Crabb].
- 0.196              : Changed description to 'NEC V53A'.
- 0.161              : Fixed PIT timers, makes BGMs to sound better [Angelo Salese].
- 0.160              : Added cpu\nec\v53.c/h. Added 'V53A' device. Start an internal map for the V53. Few bits of V53 stuff, start dynamic peripheral mapping, attempts to set up timers at least. Timer Unit is functionally identical to uPD71054 (which in turn is said to be the same as a pit8253) so give the V53 one of those other peripherals aren't quite identical, just close to other devices (often missing modes or with other limitations). Don't crash V53 on garbage values Roads Edge/Samurai Shodown 64 write on startup. Couple of notes about what the various NEC chips in V53 seem to be cloned from thanks to Carl and R. Belmont, added them for now, will try to hook them up and see how things align in a bit. The V53 SCU is a i8251 clone, but with the command / mode registers separated, and only Asynchronous transfer mode available, this splits the function into something we can use for that purpose. Exposed V53 device callbacks to users. Provided access to the interrupt V53 lines. Hooked V53 irq ack callback so that it can get the correct vector from the controller [David Haywood].
- 0.146u1            : David Haywood added some bits to get the V53 (V33 core) running at least some sane sound code for hng64.c There is no sound yet tho, and the banking mechanism will need hooking up but the initial banks should be correct.
- NOTES: V53 and V53A (V53 below) are one of the NEC V series micrcontrollers. These are microcontroller that integrated some peripherals with V33 cored. Its peripherals are equivalent to V50's peripherals, so that V53 is a microcontroller that replaced V50's core-processor from V30 to V33. And V33 core-processor has compatible instruction set as Intel 8086/80186 microprocessor. Difference between V53 and V53A: It is difference on the core-processor V33 and V33A. At the V33, some intrurupt vector number such as undefined instruction fault are differnt to intel i80X86. At the V33A, these number are re-defined same as intel i80X86 prcessors.
- NOTES: Core-Processor: V33 compatible. Serial I/F: 1 channel (8251 compatible). Timer/Counter: 3 channels (8254 compatible). DMA: 4 channels (8237/8271 compatible). Intrerupt Controller: 8 lines (8259 compatible). BUS I/F: Address: 24bit (selectable address expantion capability like an EMS), Data: 8/16bit (Dynamic bus sizing), Address and Data bus are separated. Minimum two clocks/access, Programmable wait controller (0-7 wait) and DRAM refresh controll. Package: 132pin PGA, QFP120. Operating conditions: Operating Frequency: 2-20MHz and Power consumption: 900mW (@16MHz)
- PCB: NEC D70236AGJ-16 V53A  QFP120 (HyperNeoGeo64), uPD70236
- DRIVERS: hng64.cpp
- SOURCE: cpu\nec\v5x.cpp



9.6B  V60

- 0.277              : Fixed issue with CVTSW overflow flag after rounding (v60\op2.hxx) [hap].
- 0.276              : Improved CVTSW flags and fixed issue with float-to-u32 cast [hap]. Implemented correct rounding mode when converting float to integer (v60\op2.hxx) [Matthew Daniels].
- 0.272              : Use 32x32=64-bit multiply inlines. Simplify operation of DIVX, DIVUX, MOVD, RVBIT and RVBYTE (v60\op12.hxx) [AJR].
- 0.239              : Code cleanup. Removed #ifdefs and use attributes instead. Removed "never reached" return statements [AJR].
- 0.218              : V60 updates: Fixed XOR instructions to not change the carry flag. Added friendlier flags display in the debugger [R. Belmont, Tahg]. Fixed AND and OR instructions to also not change the carry flag. NEG instructions should set or clear carry based on non-zero or zero results, not based on borrow [Ryan Holtz]. Sign-extend displacements for various addressing modes and DB/TB instructions. This seems to have regressed with the great disassembler refactoring [AJR, Tahg].
- 0.198              : Fixed disassembly of branch opcodes (displacement is signed) [Dirk Best].
- 0.193              : Added cpu\v60\v60d.h.
- 0.180              : Changed the V60 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\v60\am.inc, am1.inc, am2.inc, am3.inc, op12.inc, op2.inc, op2.inc, op3.inc, op4.inc, op5.inc, op6.inc, op7a.inc and optable.inc to am.hxx, am1.hxx, am2.hxx, am3.hxx, op12.hxx, op2.hxx, op3.hxx, op4.hxx, op5.hxx, op6.hxx, op7a.hxx and optable.hxx. Reverted Clang compile warning fix (MAME 0.169) that broke conditional compile, added var to save_item to prevent that warning [hap].
- 0.165              : Added 'NEC Semiconductor Selection Guide Book' comments [Stiletto].
- 0.153              : Changed cpu\v60\am1.c to am1.inc, am2.c to am2.inc, am3.c to am3.inc, am.c to am.inc, op12.c to op12.inc, op2.c to op2.inc, op3.c to op3.inc, op4.c to op4.inc, op5.c to op5.inc, op6.c to op6.inc, op7a.c to op7a.inc and optable.c to optable.inc [Oliver Stoeneberg]. Modernized V60 cpu core [Wilbert Pol].
- 0.139u2            : Removed cpu\v60\v60mem.c. Updated V60 core to use unaligned read/ write instead of their own stubs for handling misalinged reads [Aaron Giles].
- 0.128u6            : Pointer-ified the V60 core [Aaron Giles].
- 0.113u4            : Ernesto Corvi added v60_stall mechanism to allow for synchronization between the V60 core and an external CPU.
- 0.109u5            : Aaron Giles converted the v60 disassemblers to the new format and added step in/out support where it was obvious.
- 0.106u6            : R. Belmont added workaround to make the V60 core work properly on GCC 4.x (tested on 4.1.1).
- 0.97u4             : Aaron Giles fixed V60 SBR handling to ignore the low 12 bits. This allows the hack in clone Tetris Plus 2 (MegaSystem 32 Version) to be removed.
-  2nd July      2005: Luca Elia - I sent a fix for the V60 CPU that stopped Eagle Shot Golf from crashing later in game, and got Mobil Suit Gundam Final Shooting (1995) to boot.
- 0.97u3             : Aaron Giles fixed exception handling and task switching in the V60 core.
- 24th June      2005: Luca Elia - Eagle Shot Golf has been in the ssv.c driver for quite some time now, hanging at the boot and just showing a black screen. After much investigation of its stack handling during the boot process, I was able to nail down the problem: the emulation of the TRAP and STTASK instructions of the V60 CPU. A change there got the game past the boot...
- 0.97u2             : Aaron Giles added step in/out support to the V60 disassembler.
- 0.97u1             : Aaron Giles changed V60 CPU to clock multiple cycles per instruction instead of requiring every driver to divide the clock; updated all drivers to use the correct clock speed.
- 0.96               : Brad Oliver removed abort() calls from V60 CPU driver.
- 0.95u4             : David Haywood added hack to V60 for Super Real Mahjong P7, though this needs a real fix eventually.
- 0.95u1             : Sebastien Chevalier fixed V60 DIVFS opcode.
- 30th March     2004: Olivier Galibert fixed a slight bug in the V60 CPU core where it didn't have I/O address space.
- 0.77u2             : Olivier Galibert fixed a few V60 floating point opcodes.
- 24th November  2003: Olivier Galibert fixed the negf and absf opcodes in the V60 CPU core.
- 22nd November  2003: Olivier Galibert fixed the sclf opcode in the V60 CPU core.
- 0.76u1             : V60 improvements (LDTASK, STTASK, ABSF and some missing \n.) [Olivier Galibert].
- 19th October   2003: Olivier Galibert added LDTASK, STTASK and ABSF opcodes to the V60 CPU core.
-  8th October   2003: Kobat fixed another bug that was in the V60 CPU core.
-  7th October   2003: Aaron Giles fixed the V60 CPU core that was causing problems in Outrunners and other games.
- 0.75               : Aaron Giles fixed bug in the time accounting for the V60 which was causing Outrunners to run with flickering sprites and slow music. Kobat and Olivier Galibert fixes another V60 bug introduced in 0.74u2 which broke the v70 games (and further broke Outrunners).
- 0.74u2             : Olivier Galibert fixed some V60 floating point operations and made core exit on unhandled opcodes, note UltraX doesn't work again.
- 29th September 2003: Olivier Galibert fixed the interrupt stack, some floating point operations and added the NEGF opcode to the V60 CPU core.
- 0.74               : Workaround for a V60 crash causing Ultra X not to run on some systems [Tomasz Slanina].
-  5th September 2003: Tomasz Slanina sent in a quick and dirty fix for the LDPR opcode crash in the V60 CPU core.
- 29th August    2003: Tomasz Slanina fixed the interrupts and register layout in the V60 CPU core, making Ultra X Weapons run (with graphics glitches) along with Twin Eagle 2 (unplayable due to unemulated protection).
- 0.69b              : Aaron Giles fixed a bug in the V60 CPU core causing it to break with the new timer system.
- 31st May       2003: Aaron Giles fixed a problem in the V60 CPU core unearthed by the timer code updates.
- 0.65               : Added cpu\v60\v60mem.c. Optimized V60/V70 memory access [Aaron Giles].
- 10th February  2003: Aaron Giles changed the V60 CPU core to fetch opcodes directly rather than through the memory handlers, making it somewhat faster.
-  6th January   2003: Olivier Galibert added V60/V70 state saving support.
- 30th September 2002: Olivier Galibert fixed some V60 CPU core bugs which caused jerky scrolling in Change Air Blade.
- 21st May       2002: An anonymous contributor sent in a fix for the V60 core which makes Super Real Mahjong Part 4 and 7 playable.
-  4th May       2002: Nicola Salmoria fixed the V60 CPU core bug which broke the SSV system games.
- 20th February  2002: Brad Oliver fixed a V60 CPU core memory bug that occurred on the Mac side.
- 0.56               : Added cpu\v60\v60.c/h, v60d.c, optable.c, am.c, am1-3.c, op12.c, op2-6.c and op7a.c. V60 cpu core [Farfetch'd, R. Belmont].
- 26th October   2001: Olivier Galibert fixed a bug which caused the debugger to crash when using the V60 CPU core.
- 20th October   2001: Olivier Galibert fixed a bug which caused the debugger to show wrong values with the V60 CPU core.
-  3rd October   2001: Olivier Galibert ported the V60 CPU core originally made by Farfetch'd and R. Belmont to MAME.
- NOTES: V60 coding by Farfetch'd. The V60 CPU has a 32 bit RISC architecture and runs at 16MHz with 2.5 MIPS.
- PCB: NEC D70616R-16 16MHz (RadRally), NEC D70615GD-16-S  QFP120 (Drifto94, Vasara2, Model1)
- DRIVERS: model1.cpp, segas32.cpp and ssv.cpp
- SOURCE: cpu\v60\v60.cpp



9.6C  V70

- 0.65               : Optimized V60/V70 memory access [Aaron Giles].
-  6th January   2003: Olivier Galibert added V60/V70 state saving support.
- 0.62               : V70 CPU support [Olivier Galibert].
- 23rd September 2002: Olivier Galibert fixed the debugger and -listinfo with V70.
- 22nd September 2002: Olivier Galibert added V70 support to the V60 core.
- PCB: NEC D70632GD-20 (Bbbxing, Desertwr, P47aces), NEC D70632R-20 9314X9 V70 (Titlef)
- DRIVERS: ms32.cpp and segas32.cpp
- SOURCE: cpu\v60\v60.cpp



9.6D  V810

- 0.254              : Make opcode timings a bit more faithful to reality. Separate irqs into individual lines as a PoC. Allows (MESS) NEC PC-FX to detect a CD as Audio (needs TOC/Mode Select (10) fixes for actual PC-FX detection, uses t10mmc.c under the hood). Fixed device_reset behaviour. Fixed MPYHW opcode, makes (MESS) Red Alert (Nihon Telenet 1989) not to crash on attract/gameplay [Angelo Salese]. Suppress I/O space properly when it has no configured map [Vas Crabb].
- 0.220              : Simplified some handlers [Osso].
- 0.193              : Added cpu\v810\v810dasm.h.
- 0.180              : Changed the V810 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.154              : Fixed usage of uninitialized member in v810_device [Oliver Stoeneberg].
- 0.153              : Modernized V810 cpu core [Wilbert Pol].
- 0.148u1            : Fixed Virtual Boy (MESS) from crashing (V810 CPU => cpustate->icount-= OpCodeTable[op>>10](cpustate,op)) [David Haywood].
- 0.147              : Fixed a sign bug with CVT.WS opcode in V810 CPU core. Force srcbit and dstbit to be always under 32 bytes. Fixed SETFi opcode, fixes Vertical Force booting. Some other small clean-ups. Implemented remaining BSU opcodes in V810 CPU core [Angelo Salese].
- 0.146u5            : Preliminary implementation of the MOVBSU opcode in V810 CPU core. Added ANDNBSU and ORBSU opcodes in V810 CPU core. Various VB specific opcodes [Angelo Salese].
- 0.140u2            : Miodrag Milanovic added bare bones irq support to V810 CPU, fixed interrupt handing in V810 core and flag position in PCW.
- 0.128u6            : Pointer-ified the V810 core [Aaron Giles].
- 0.111u1            : Giuseppe Gorgoglione fixed minor bugs in the V810 interface.
- 0.109u5            : Aaron Giles converted the v810 disassemblers to the new format and added step in/out support where it was obvious.
- 0.103u1            : Atari Ace fixed out-of-bounds array writes in the V810 core.
- 0.84u5             : cpu\v810\v810.c/h and v810dasm.c. Preliminary NEC V810 core (needed for mayjinsen, mayjinsen2 and jsk) [Thomasz Slanina].
- 19th July      2004: Tomasz Slanina - Finished NEC V810 cpu core. Mayjinsen 2 (ST-0016 hw) is playable, Mayjinsen (ST-0016 hw) has gfx glitches but it's playable and Joryuu Syougi Kyoushitsu (SSV hw) - dump is incomplete, main cpu (v60?) roms are missing.
- 24th October   2003: Tomasz Slanina - NEC V810 CPU core (for MAME (Mayjinsen, Mayjinsen II, Joryuu Syougi Kyoushitsu) and MESS).
- NOTES: NEC V810 (upd70732) core
- PCB: UPD70732-25 V810 (Mayjinsn), NEC JAPAN D70732GD-25 (C)NEC1991 V810 9651MK007 (Jsk)
- DRIVERS: simple_st0016.cpp and ssv.cpp
- SOURCE: cpu\v810\v810.cpp



9.7   D80000

- 0.189              : Added some infos about the Superior Soldiers sound CPU (machine\irem_cpu.cpp; Irem D8000022A1 025 9342NK002) [Caius].
- 0.124u5            : Roberto Zandona fixed another opcode in Match It II and verified a "not sure" opcode in clone Bomber Man.
- 0.123u3            : Another Risky Challenge opcode to fix a sprite bug and a general clean up of the remarks in the driver [Roberto Zandona].
- 0.123u2            : David Haywood and Roberto Zandona changed IREM CPU decryption to be 'real-time' (it's a feature of the CPU). Moved decryption table setup to 'config' struct for the CPU. Added latest tables from Roberto Zandona, making Risky Challenge playable, promoted it to working. Told CPU core to not decrypt code after brkn instruction, enabling it again on iret, allowing me to remove several 'don't decrypt range' hacks in the code. Updated all drivers accordingly. Currently the disassembly is a bit weird now, this will need looking at.
- 0.123u1            : Several more Risky Challenge opcodes. You can now see "gameplay" [Roberto Zandona].
- 0.122u8            : More opcode improvements to Risky Challenge [Roberto Zandona].
- 0.122u7            : Roberto Zandona added further unencrypted opcodes to Risky Challenge. The game now boots with the intro animation.
- 0.119u3            : Several more opcode fixes for Risky Challenge [Roberto Zandona].
- 0.119u1            : Roberto Zandona identified a number of additional new opcodes for Risky Challenge/Gussun.
- 0.117u1            : Roberto Zandona added more opcode decryption to Gussun Oyoyo.
- 0.117              : Roberto Zandona reduced a few more opcodes for Gussun Oyoyo. The game now boots and you can coin up.
- 0.116u4            : Roberto Zandona found a number of additional encrypted opcodes for clone Gussun Oyoyo.
- 0.116u3            : Populated several more Irem CPU opcodes for Gussun Oyoyo [Roberto Zandona].
- 0.116u2            : Roberto Zandona fixed a couple more Irem CPU opcodes to improve Match It 2.
- 0.116u1            : Roberto Zandona fixed another IREM opcode, now Match It II is fully playable.
- 0.115u3            : Roberto Zandona fixed several more opcodes in the encrypted Irem Custom V30 CPU.
- 0.115u2            : Pierpaolo Prazzoli added a new IREM D80000 opcode for Match It II. There still are 4 unknown opcodes and the "no tiles" bug before it will be promoted to working status.
- 0.115u1            : Pierpaolo Prazzoli identified a couple of new opcodes in the Irem V30 CPU which improves Match It II.
- 20th January   2005: Pierpaolo Prazzoli - It tooks 2 weeks and 120 opcodes to see Shisensho II booting...
- 31st July      2003: Angelo Salese improved the decryption in Risky Challenge / Gussun Oyoyo, but it still doesn't work perfectly.
- 27th July      2001: Nicola Salmoria decrypted the sound CPU in 'In the Hunt', Major Title 2 and Perfect Soldiers. He also fixed the colors in Major Title 2.
- 25th July      2001: Nicola Salmoria improved the IREM sound CPU emulation, which allows R-Type Leo to work without kludges, and he decrypted Hook and Mystic Riders.
- 19th July      2001: Nicola Salmoria decrypted the sound CPU in Blade Master and Lethal Thunder.
- 18th July      2001: Nicola Salmoria fixed several NEC CPU core bugs and errors in the IREM CPU decryption tables, and got sound working in Gunforce.
- 0.37b8             : Added machine\irem_cpu.c/h.
- 11th September 2000: Bomberman / Dynablaster and Bomberman World / Atomic Punk were decrypted and added by Bryan.
- NOTES: The Irem D80000 is a custom V30 CPU for program and sound. It uses a simple opcode lookup encryption.
- PCB: D8000010A1 019 9243NK700               Fire Barrel
       D8000011A1 020                         In The Hunt
       D8000019A1 022 9331NK700               Risky Challenge/Gussun Oyoyo
       D8000020A1 023 9320NK700               Match It II/Shisensho II
       D8000021A1 019 9242NK700               R-Type Leo
       D8000021A1 024 9335NK700               Ninja Baseball Batman
       D8000021A1 024 9335NK701               World PK Soccer/Kick for the Goal
       D8000022A1 025 9342NK002               Superior Soldiers/Perfect Soldiers
       D8000023A1 026 9433NK700               Dream Soccer '94
- SOURCE: machine\irem_cpu.cpp



9.8   DYNA CPU91A

- 0.129u2            : Roberto Zandona mapped two more opcodes for Cherry Bonus 2001.
- 0.129              : Roberto Zandona discovered numerous new opcodes for Cherry Bonus 2001.
- NOTES: The CPU91A is a encrypted NEC V35 used in some IREM game.
- PCB: DYNA CPU91A-011-0016JK004, QFP84 (cb2001)
- SOURCE: drivers\cb2001.cpp



9.9   NANAO 08J27291

- 0.153              : Document the Air Assault encrypted sound CPU (NANAO 08J27261A1). IE: Confirms it's the same as Gunforce [Brian Troha].
- 0.141u2            : Roberto Zandona added opcodes for Quiz F1 (machine\irem_cpu.c).
- 0.124u4            : Roberto Zandona fixed 2 opcodes for Quiz F-1, now the little machines move correctly.
- 0.124u3            : Roberto Zandona fixed an opcode in Quiz F-1. Fixed encrypted disassembly for bp+ix+offset8 and bp+it+offset8.
- NOTES: The NANAO 08J27291 is a custom V30 CPU like the D80000. It uses a simple opcode lookup encryption.
- PCB: 08J27261A1 011 9108KK700    PLCC84     (Gunforce, Hasamu)
       08J27261A1 012 9123KK200               (Bombrman)
       08J27291A4 014 9147KK700    PLCC84     (Gunforc2, Quizf1)
       08J27291A5                             (Uccops)
       08J27291A6                             (Nbbatman) V30?
       08J27291A7                  PLCC84     (Majtitl2)
- SOURCE: machine\irem_cpu.cpp







10.    Data East

10.1   DECO CPU-6

- 0.148              : Added machine\decocpu6.c/h. Replaced M6502 CPU1/2 with M6502 (500000 Hz) CPU1 and DECO CPU-6 (1.5MHz) CPU2 in clone 18 Holes Pro Golf (set 2) [David Haywood].
- NOTES: Apparently Deco CPU-6 used by ProGolf just seems to be a bitswap on the opcodes like 222, but not the same one not a complex scheme like CPU-7?
- GAMES: Data East - 18 Holes Pro Golf (set 2)
- SOURCE: machine\decocpu6.cpp/h


10.2   DECO CPU-7

- 0.148              : Added machine\decocpu7.c/h [David Haywood].
- GAMES: btime.cpp
- SOURCE: machine\decocpu7.cpp/h



10.3   DECO16

- 0.278              : Turn off verbose log flag [hap].
- 0.196              : Changed description to 'Data East DECO16'.
- 0.193              : Added cpu\m6502\deco16d.cpp/h.
- 0.147u3            : Changed description to 'DECO16'. Replaced tdeco16.c with ddeco16.lst and deco16.c/h. Rewrote 6502 to modern device, cycle-exact and interruptible. IRQ fixes. DECO16 vectors are non-standard [O. Galibert].
- 0.132u1            : Angelo Salese fixed a DECO16 CPU core bug that was causing issues with Pro Bowling part of Pro Sports and implemented a new DECO CPU-16 opcode, used by Express Raider for V-BLANK bit and a bunch of liberate.c games for TILT bit. Converted Express Raider to use the DECO CPU-16 core instead of the plain M6502.
- 0.114u4            : Wilbert Pol improved accuracy of 6502 CPU cores (DECO CPU16, M4510, M6502, M6509, M6510, M6510T, M65C02, M65SC02 and N2A03) to implement the read/write that happens on every cycle. Moved the "undocumented" instructions from the 6510 cores into the main 6502 core, since there were several other versions of the 6502 cores which have the same undocumented instructions. Removed some of the #define override magic that was going on to make the code easier to read and understand. Updated the 6510 core port_read and port_write functions to include the ddr register in the parameters.
- 0.94u1             : Changed description to 'DECO CPU16'.
- 0.63               : Added cpu\m6502\tdeco16.c. DECO16 CPU support.
-  5th January   2003: Bryan McPhail submitted the DECO16 CPU core and a driver for Boomer Rang'r / Genesis, Kamikaze Cabbie and Liberation.
- NOTES: Data East's DECO CPU16 is a an encypted 6502 custom CPU with additional custom opcodes.
- GAMES: Data East - Boomer Rang'r (1983), Kamikaze Cabbie/Yellow Cab (1984), Liberation (1984), Battle Wings/B-Wings (84), Zaviga (1984)
- PCB: DECO CPU16 M1018 2Z43 (Liberate, Prosoccr), CPU CPU16 - PGA package (Kamikcab), CPU 16 (Kamikcab)
- DRIVERS: bwing.cpp, exprraid.cpp and liberate.cpp
- SOURCE: cpu\m6502\deco16.cpp



10.4   DECO 45 / HuC6280

- 0.221              : Simplified some handlers [Osso].
- 0.220              : Simplified some handlers [Osso].
- 0.214              : Added workaround to HuC6280 core to fix music speed in Crude Buster, Dark Seal and Vapor Trail. Use official names for banking registers. Reduced logical width of address space [AJR].
- 0.213              : Fixed unintended behaviour on timer value latch [Angelo Salese].
- 0.201              : Internalized peripherals and sound [cam900].
- 0.193              : Added cpu\h6280\6280dasm.h.
- 0.192              : Fixed brk logerror in HuC6280 [Angelo Salese].
- 0.186              : Changed description to 'HuC6280'.
- 0.180              : Changed the H6280 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 14th November  2014: Charles MacDonald - PC Engine FPGA development board: Back in May I designed a development board for the PC-Engine that plugs into the expansion port instead of the card slot. The extra hardware will automatically disable itself when a HuCard is inserted so the console still functions like normal. The new functionality added is as follows: 512K boot ROM (Flash), 1MB SRAM for loading games and programs, High speed USB interface, Stereo audio and RGB video outputs, Nexys2 FPGA development board connector and Reset and IRQ2-triggering buttons. The digital video bus of the PC-Engine is routed to the FPGA connector, allowing the video signals to be processed externally. I'm using it to implement an all-digital line doubler that outputs 31 kHz VGA video. It works by snooping the VCE bus to keep track of color table access and duplicating that information internally, and then performing the raw pixel to color look-up while scanning out the video that was captured. This approach gives one scanline worth of lag from the input to the output, so you don't get the noticable 16ms delay that framebuffer based scan-doublers often have. While the Nexys2 VGA output is slightly limited (having one less bit of blue color resolution than the PC-Engine has) the results look fantastic. What turned out to be troublesome was handling the different pixel clocks the VCE can generate but there are a fixed number of those to deal with at least. Eventually I'd like to make a dedicated scan-doubling card with a pass-through connector so CD games can still be used. It should be possible to make it significantly more compact once the development functions are removed, and with a custom board the video output can be correct to match the actual VCE color depth.
- 0.153              : Removed h6280\h6280ops.h and tblh6280.inc. Moved contents of .inc into .c to removed #define pollution when including h6280.h. Replaced #defines with inline functions. Renamed functions with upper case names to lower case to avoid #define collisions [smf].
- 0.149u1            : Changed cpu\h6280\tblh6280.c to cpu\h6280\tblh6280.inc.
- 0.148u2            : H6280 used CPU_DISASSEMBLE but didn't use CPU_DISASSEMBLE_NAME for calling the function (No idea why) [smf].
- 0.148              : Changed description to 'H6280'. Modernized the H6280 core. Uninitialized variable fix (m_icount=0). Fixed compile error on some compilers. Should hopefully improved PCE, SGX etc. as well [MooglyGuy]. Fixed H6280 disassembler hookup. Removed H6280 extraneous colons from register names, makes debugger syntax to set them less Pascal-y [R. Belmont]. Some information for PoP (cpu\h6280\h6280ops.h) [Angelo Salese].
- 0.139u3            : Angelo Salese fixed a bogus Hu6280 CPU core bug with timer latch division values readings. Angelo Salese and Charles MacDonald fixed sprite OV flag behaviour in PC Engine VDC emulation. Angelo Salese fixed missing VRAM > VRAM DMA flag clearance in PC Engine emulation.
- 0.128u6            : Pointer-ified the H6280 CPU core [Andrew Gardner].
- 0.122u6            : Charles MacDonald fixed HuC6280 low-speed mode so it uses 4 cycles instead of 3.
- 0.122u5            : Added machine\pcecommn.c/h. Mariusz Wojcieszek added MESS PC-Engine emulatation system.
- 0.121u3            : Wilbert Pol fixed uninitialized variable in H6280 core.
- 0.119u2            : Wilbert Pol fixed NMI handling in H6280 CPU core.
- 0.119u1            : Fixed a number of issues in the H6280 CPU core [Wilbert Pol]: Taking of interrupts is delayed to respect a pending instruction already in the instruction pipeline. Added 1 cycle for decimal mode ADC and SBC instructions. Changed cycle counts for CSH and CSL instructions to 3. Added T flag support to the SBC instruction. Fixed ADC T flag to set the Z flag based on the value read. Added 3 cycle penalty to ADC, AND, EOR, ORA, and SBC instructions when the T flag is set. Fixed cycle count and support for 65536 byte blocks for the TAI, TDD, TIA, TII and TIN instructions. Fixed RDWORD macro in the disassembler. Fixed setting of N and V flags in the TST instructions. Removed unneeded debug_mmr code. Fixed TSB and TRB instructions. Added 1 delay when accessing the VDC or VCE areas. Implemented low and high speed cpu modes.
- 0.109u5            : Aaron Giles converted the H6280 disassemblers to the new format and added step in/out support where it was obvious.
- 0.104u1            : Buddabing added save state support to the Hu6280 CPU core.
- 0.103u2            : H6280 updates [Rob Bohms]: Added T-flag emulation. Fixed read calls (cpu\h6280\h6280.c and sound\c6280.c).
- 0.103u1            : Many H6280/PCE fixes [Rob Bohms, Charles MacDonald]: Fixed cases where sprites could render outside of the buffer. Added VRAM to VRAM DMA (Charles). Multiple h6280 fixes (Charles). Provided functions to correctly handle VRAM accesses for the entire 128K range (Charles). Added some of the I/O buffer bits from the hardware page. Fixed h6280 IRQ ranges to support proper mirroring. Hooked up h6280 IRQs to the PC Engine. Correct sprite-to-sprite rendering priorities. Partially enforce 16 sprite limit.
-  8th November  2005: Charles MacDonald - Changed timer implementation, no longer single shot and reading the timer registers returns the count only. Fixes the following: Mesopotamia: Music tempo & in-game timer, Dragon Saber: DDA effects, Magical Chase: Music tempo and speed regulation, Cadash: Allows the first level to start and Turrican: Allows the game to start. Changed PLX and PLY to set NZ flags. Fixes: Afterburner: Graphics unpacking and Aoi Blink: Collision detection with background. Fixed the decimal version of ADC/SBC to *not* update the V flag, only the binary ones do. Fixed B flag handling so it is always set outside of an interrupt; even after being set by PLP and RTI. Fixed P state after reset to set I and B, leaving T, D cleared and NVZC randomized (cleared in this case). Fixed interrupt processing order (Timer has highest priority followed by IRQ1 and finally IRQ2).
- 0.101u4            : Aaron Giles updated the H6280 CPU to use the new address translation system.
- 20th February  2005: Charles MacDonald - The PCBs for my PC Engine development board arrived last week and I've been working on debugging them since. Most of the problems seemed to be about how the HuC6280 handles a bus transaction when reading or writing memory, it's not nearly as simple as the patents would lead you to believe. The glue logic was implemented on a GAL22V10, which was a good choice as I've been reprogramming it a lot to tweak the design. Once the hardware bugs are resolved, I'm hoping to do some serious work on TGEmu and my PC Engine documentation. I may release the design to the public domain if there is sufficient interest, though it's not that much cheaper compared to Tototek's PCE-PRO 32M Flash Cart. But a DIY project is always rewarding, I was pretty excited when I had Blazing Lazers running for the first time.
- 31st January   2005: Charles MacDonald - I've been finalizing the design for a TurboGrafx-16 / PC Engine development board. It provides a USB interface to a PC to transfer programs, has 512k of flash memory, and 512k of NVRAM. The addressing decoding is flexible so programs can be stored in either or both memories, and "split" HuCard images can be executed out of NVRAM (up to 256k+256k max). I built a simpler prototype on a breadboard that worked fine, the next step is to get some PCBs manufactured after the board layout is verified.
- 17th March     2004: Bryan McPhail fixed a hard crash that occurred when trying to debug HuC6280 code.
-  3rd September 2000: Bryan McPhail fixed an internal timer bug in the Hu6280 core.
- 0.37b2             : Bryan McPhail fixed Hu6280 emulation bugs which caused missing levels in Trio the Punch.
-  4th April     2000: Karl Stenerud fixed a 6280 disassembler bug.
- 0.36b13            : Changed description to 'HuC6280'.
- 25th December  1999: Bryan McPhail sent in a big update to Data East games with fully correct sound frequencies and with a few Hu6280 fixes.
- 14th June      1999: Bryan McPhail fixed Hu6280 communications in Caveman Ninja sound system.
- 23rd April     1999: Bryan McPhail updated the Hu6280 core and the Hippodrome & Fighting Fantasy drivers. Those two games now work fully.
- 0.35b5             : Added cpu\h6280\h6280.c/h, h6280ops.h, 6280dasm.c and tblh6280.c. H6280 emulator, used by several DECO games [Bryan McPhail].
-  1st March     1999: Bryan McPhail has sent in his dec0 driver, with Boulder Dash support added and Sly Spy and Midnight Resistance now have full sound and music. All this was possible to do because he also added support for the Hu6280 CPU into MAME.
- NOTES: Remember (!) there is also the HuC6280 sound chip in MAME. The CPU source code based on the 6502 emulator by Juergen Buchmueller. The code is around 99% complete!  Several things are unimplemented (like csh, csl opcodes are not supported and set opcode and T flag behaviour).
- PCB: Hudson Soft Hu6280A (Dragngun), Hu C6280, Hu6280 (Mutantf), Data East custom chip 45 - 80 pins (Funkyjet, Mutantf, Rohga, Tumblep), DEC-01 (Battlera, Robocop) = Hudson HuC6280 6502-based CPU with in-built Programmable Sound Generator used as the main CPU.
- DRIVERS: actfancr.cpp, battlera.cpp, boogwing.cpp, cbuster.cpp, cninja.cpp, darkseal.cpp, dec0.cpp, deco32.cpp, dietgo.cpp, funkyjet.cpp, ggconnie.cpp, madmotor.cpp, paranoia.cpp, rohga.cpp, supbtime.cpp, uapce.cpp and vaportra.cpp
- SOURCE: cpu\h6280\h6280.cpp



10.5   DECO 59

- NOTES: The DECO Custom Chip 59 is a M68000 CPU.
- PCB: DECO Custom Chip 59, PQFP64 (Funkyjet, Mutantf, Rohga, Wizdfire)
- SOURCE: darkseal.c, madmotor.c and vaportra.cpp



10.6   DECO 101 / ARM

- 0.261              : Fixed register-counted shifts in disassembly (arm\armdasm.cpp). Use util::sext in execution of branch instructions (arm\arm.cpp) [AJR].
- 0.250              : Use rotr_32 for handling unaligned reads [AJR].
- 0.249              : Changed description to 'ARM'. Removed 'ARM (big)' device. Eliminated big-endian bus variant not actually implemented until ARM6 (which is also not emulated here) (arm\arm.cpp) [AJR].
- 0.241              : Disassembly improvements (arm\armdasm.cpp): Correct mnemonic suffixes for LDM and STM. Correctly distinguish between pre-indexed and post-indexed modes of LDR and STR. Use shorter syntax for R15-relative LDR or STR. Disassemble R15-relative ADD and SUB as ADR. Identified RRX shift type and P modes of test instructions. Changed hexadecimal prefix to &. Make ! and ^ suffixes for operands, not mnemonics. Many minor syntax corrections. Fixed PC display for watchpoint hit message [AJR].
- 0.228              : Fixed carry flag in ADC instruction (cpu\arm\arm.cpp) [Sandro Ronco].
- 0.211              : Use standard_irq_callback, fixes (MESS) ChessMachine ISA card lockup [hap].
- 0.197              : Eliminated spurious LSL #32 shifts from disassembly. Calculated R15-relative offsets in disassembly (cpu\arm\armdasm.cpp). Fixed erroneous identification of S field in data processing opcodes. Calculated result of ADD/SUB Rn, R15, #imm (cpu\arm\armdasm.cpp) [AJR].
- 0.193              : Added cpu\arm\armdasm.h.
- 0.186              : Changed description of 'ARM' to 'ARM (little)' and 'ARM (big endian)' to 'ARM (big)'.
- 0.184              : Added 'ARM (big endian)' device (cpu\arm\arm.cpp).
- 0.181              : Fixed STR! with rd == rn [Sandro Ronco].
- 0.180              : Implemented Transfers to User Bank in LDM/STM and fixed flags corruption in branch opcodes. Fixed register-base shift with a value >= 32, this fixes the RISC OS graphics issues. Fixed carry for ROR and preserve IRQ_MASK in LDR R15,*** [Sandro Ronco]. Changed the ARM disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.154              : Added Co-Processor sub-types to ARM CPU, hooking a special case for VL86C020 used by Acorn Archimedes [Angelo Salese]. Fixed usage of uninitialized member in arm_cpu_device [Oliver Stoeneberg]. Converted ARM CPU to use inline configs [Fabio Priuli].
- 0.149u1            : Modernized ARM cpu core. Removed useless branches. Fixed display of flags register [Wilbert Pol].
- 0.148u2            : Tiny fix for undefined shift behavior (cpu\arm\armdasm.c) [Wilbert Pol].
- 0.141              : Tim Schuerewegen fixed LDM opcode register writeback in ARM CPU core. And fixed an ARM CPU core bug with pre-indexed addressing opcodes, that was preventing Poizone to boot.
- 0.139              : Wilbert Pol added big endian mode support to the LDRB and STRB instructions of arm.c, fixed word reading from non-aligned address in big endian mode and added a big endian version of the ARM2/3/6 CPU core and cleaned up the little/big endian handling.
- 0.132u4            : R. Belmont changed ARM (26-bit) TST/TEQ opcode to only update flags. This eliminates the need for patches in poizone/ertictac, all Deco32 games still run (including Heavy Smash DECO156), and it better matches the documentation.
- 0.128u6            : Pointer-ified the ARM CPU core [Andrew Gardner].
- 30th May 2007      : R. Belmont - More ARM7 fixes (including several that were backported to the original ARM core - could someone check if it's now possible in 0.115u2 to beat the end boss on Dragon Gun?), so of course I have a few new GBA screens.
- 0.115u1            : R. Belmont and Ryan Holtz fixed carry flag calculation for SUB/SBC/CMP family instructions in the ARM core.
- 0.111u2            : Aaron Giles improved cycle timings in the ARM CPU core. Altered the deco32 CPU clocks to be more realistic.
- 0.109u5            : Aaron Giles converted the ARM disassemblers to the new format and added step in/out support where it was obvious.
- 0.103u3            : Bryan McPhail fixed an ARM interrupt bug. David Haywood added BCD multiply to ARM coprocessor to fix World Cup Volley '95.
- 0.103u2            : Cleanups to the ARM core [Bryan McPhail]. Tomasz Slanina modified ARM CPU core to allow World Cup Volley '95 to start.
- 0.103u1            : Updates for the ARM core [Bryan McPhail]: Fixed software interrupts. Fixed several mode change bugs. Preliminary coprocessor support.
- 0.99               : Backed out some of the ARM core changes which broke several games.
- 0.98u4             : Bryan McPhail fixed several bugs in the ARM core which break Captain America but fix some other issues. Tomasz Slanina fixed unaligned 32-bit reads in the ARM core.
-  1st August    2005: Tomasz Slanina - Fixed a bug in the ARM CPU core, which in turn fixed the colours in Osman.
- 0.58               : Added cpu\arm\arm.c/h and armdasm.c. ARM CPU emulation [Bryan McPhail, Phil Stroffolino].
-  3rd February  2002: Bryan McPhail submitted the Captain America driver and ARM CPU core written by him and Phil Stroffolino. Captain America is almost perfect and includes sound, but the other games in that driver don't work - Fighter's History uses a protection chip, Dragon Gun and Locked 'N Loaded use a different sprite RAM format which is not yet emulated, and Tattoo Assassins works with sound, but lacks the graphics ROMs.
- 0.37b14            : Removed cpu\arm\arm.c and dasm.c.
- 0.37b5             : Added cpu\arm\arm.c/h and dasm.c.
- 20th July      2000: Juergen Buchmueller submitted a preliminary ARM cpu core.
- NOTES: ARM 2/3/6 Emulation (26 bit address bus).
- GAMES: Captain America (Data East 1991)
- PCB: ARM DE101 (Lockload), 101 (Dragngun)
- DRIVERS: aristmk5.cpp, backfire.cpp, deco156.cpp, deco32.cpp, deco_mlc.cpp, ertictac.cpp and simpl156.cpp
- SOURCE: cpu\arm\arm.cpp


10.7   DECO 102

- 0.174              : Fixed DECO 102 crypt separate compile [Miodrag Milanovic].
- 0.95u6             : Added machine\deco102.c.
- 0.95u5             : Nicola Salmoria figured out decryption of remaining DECO102 games.
- 0.95u4             : Nicola Salmoria added preliminary decryption to DECO 102 games.
- 22nd April     2005: Nicola Salmoria - Bryan noticed that changing a single value in the Pocket Gal Deluxe decryption (related to the address scrambling) revealed some clear text in Diet Go Go. THis means that the encryption key is almost hardcoded as I expected, but with some minor variation (maybe externally to the DE102 iself). I have isolated the variations in just two numbers, a 16-bit one for the address scrambling and an 8-bit one (or two 4-bit ones) for the data bits permutation and xor. Fine tuning the values to correctly decrypt data in Diet Go Go was easy enough. Double Wings required a little more works, but it was still easy. I just needed to brute force the 16-bit parameter. Doing that was easy because I just had to decrypt the ROM using each possible value for the parameter, and count how many zeros were in the decrypted data. When their number rised from a couple of thousands to tens of thousand, I had a "good enough" value for the parameter, which I could later tweak by hand. So, data was decrypted in all four games (the other one is Boogie Wings which decrypted with the same parameters as Pocket Gal Deluxe), but opcodes were still encrypted. However, most of the work was already done. Even if the opcodes are encrypted differently from data, the address scrambling must of course be the same, otherwise there wouldn't be a 1:1 correlation between logical address and physical address. Therefore, only the data bits permutation and xor changes. The obvious candidate for that variation was the 8-bit parameter. A brute force search was even easier in this case. I just had to try all possible values and count how many times 4E75 (the opcode for RTS) appeared. When it increased from a couple of times to several hundreds, I had the key. So all four known games using this CPU (Pocket Gal Deluxe, Diet Go Go, Double Wings and Boogie Wings) should now be fully decrypted. Non of them is working; for that, the driver will have to be finished, and possibly some more protection worked around. But the first hurdle has been overcome.
- 20th April     2005: Nicola Salmoria - The recent discovery of a decrypted bootleg of Pocket Gal Deluxe was a pleasant surprise. This is one of a handful of games that use the same encrypted custom CPU - called DE102. It is now confirmed that the CPU is a 68000. Thanks to the bootleg, I was able to figure out the decryption algorithm. It is quite straightforward, and it involves: (1) Address scrambling. When the CPU wants to read a word from logical address N, it fetches it from ROM space at address N'. The scrambling of the address requires 16 conditional XORs with 16-bit values. (2) Data bits permutation. After reading the word from ROM, the order of its bits is altered. There are 16 possible permutations; which one to use depends trivially on the logical address and (3) Data XOR. After changing the bit order, the value is XORed with one of 16 other values. Which one to use depends trivially on the logical address. While working on Pcket Gal Deluxe, I was hoping that the DE102 would use a fixed key, which would have emant free decryption of a few other games. Unfortunately, this turned out to not be the case. The algorithm surely is the same, but the key is different. Determining the key without having a decrypted version to compare with is a lot more difficult, as you can imagine. Also, it seems that at least one of the other games encrypts data and opcodes differently, which makes things a lot more complicated. In the next days, I'll see if I can find a way to break the key somehow.
- NOTES: Encrypted M68000 main CPU (QFP128) in Diet Go Go, Boogie Wings, Double Wings and Pocket Gal DX
- PCB: DE102 (Pktgaldx, Boogwing)
- SOURCE: machine\deco102.cpp



10.8   DECO 156

- 0.174              : Fixed DECO 156 crypt separate compile [Miodrag Milanovic].
- 0.132u4            : R. Belmont fixed ARM (26-bit) TST/TEQ should only update flags. This eliminates the need for patches in poizone/ertictac, all Deco32 games still run (including Heavy Smash DECO156), and it better matches the documentation.
- 0.103u2            : David Haywood added BCD opcodes to 156 / ARM co-processor.
- 31st December  2005: Bryan McPhail - Due to pressing deadlines in 'real' work, this took somewhat longer than I thought to finish off. Unfortunately, although all Deco156 games now boot in MAME, only Night Slashers and Heavy Smash are properly playable. All the other games make use of a math co-processor which is not yet understood. Of the broken games Skull Fang works the most - the attract mode is fully correct, and it's playable up to the first boss. The other games mostly have serious gameplay errors (eg, AI players do not respond correctly in Hoops). Sound is also bust in all of the new games.
-  1st August    2005: David Haywood - Shortly after the release of u3 I made some further improvements to the 156 emulation, removing a kludge (allowing the Eeproms to work) and fixing the music.
- 0.98u3             : Fully emulated DECO 156 encryption [David Haywood, Nicola Salmoria, Olivier Galibert, Bryan McPhail].
- 31st July      2005: David Haywood - Final 156 update for tonight... General: Added Sprites, EEPROM settings don't work on any game and No Sound. Magical Drop / Magical Drop Plus / Chain Reaction: This is highly unstable and prone to crashing, I'm not too sure if its due to protection or CPU bugs, none of the other games behave this badly. Gameplay is also very sluggish. Osman / Cannon Dancer: Still doesn't boot without going into the debugger. Has problems with Sprite colours (16-bit ram on 32-bit bus maybe?) and tile banking. Also tilemaps don't seem large enough at the moment. Party Time: Seems quite playable, some tile bank problems. Charlie Ninja: Tilemaps aren't big enough, sprites are a bad dump, some scrolling problems on title screen (i'm sure it was ok before). Joe And Mac Returns: Playable, although I can set it to either a very fast speed, or a very sluggish speed depending on Vblank, I'm not sure which is correct... Completed a few levels and it didn't crash so it seems ok.
- 30th July      2005: David Haywood - 3 Weeks of staring at numbers solid until 4am, a bit of teamwork with key developers, and we have our first results... (Magical Drop (Deco 156) shows the message: WARNING - GAME MODE SETTING ERROR). Its not much, but maybe a sign of things to come. Update: I moved from Magical Drop to Joe and Mac Returns. Note that the tile roms on both sets are bad dumps, hence the corruption in the screenshots. Sprites haven't been added. Fixed the tile banking for the platforms. 2nd Update: Found a way to get Osman to boot via the debugger and it appears we can fix the Joe & Mac Returns tile rom by using bits from each of the bad dumps. None of these will be playable until the protection has been worked out however.
- 0.98u2             : Some progress on the Deco 156 encryption [David Haywood].
- NOTES: Data East MLC Hardware uses an encrypted CPU labelled 156, which is completely unknown. The encryption is likely very complex because the files in the archive that are encrypted don't compress at all. The decryption is internal to the chip which makes trojaning the board or manual decryption very difficult.
- NOTES: The Data East chip 156 is an encrypted ARM processor.
- PCB: DE156, QFP100 (Skullfng), 156  932EV 301801 (Nslasher), 156 (Backfire, Charlien, Osman, Stadhr96)
- SOURCE: machine\deco156.cpp



10.9   ARM7

- 0.281              : Removed cpu\arm7\arm7drc.hxx, arm7fe.hxx and arm7tdrc.hxx. Removed the recompiler that had never been completed (arm7\arm7.cpp) [Vas Crabb].
- 0.275              : Added Intel StrongARM SA-1100 variant (arm7\arm7.cpp) [Nigel Barnes].
- 0.270              : Added interrupt helpers, hid details from most clients. Moved input line and state item numbers into class declaration so most users don't need the internal header. Added callbacks so run to next interrupt works in the debugger. Added helpers for SoCs that generate effective FIQ/IRQ signals with and onboard interrupt controller [Vas Crabb].
- 0.261              : Correct DASM of register shift op2 (arm7\arm7dasm.cpp) [O. Galibert]. Use util::sext in execution of branch instructions (arm\arm7ops.cpp) [AJR].
- 0.253              : Clean up various code using util::sext and multiply inlines (arm7\arm7*.cpp) [AJR].
- 0.242              : Added debugger privilege callback for 26/32, A/T and user mode changes (arm7\arm7.cpp). Disassembly improvements: Correct formatting of LDR and STR pre-indexed writeback modes. Correct opcode suffixes for LDM and STM in ARM mode. Correct LDRSH mnemonic in Thumb mode. Omit destination register for data processing instructions when Rd = Rs. Recognize RRX shift mode. Disassemble immediate ADD or SUB from R15 as ADR in both ARM and Thumb modes. Use ARM-preferred LSL, LSR, ASR, ROR and RRX mnemonics for shifted MOV operations. Fully disassemble flag field for MSR [CS]PSR. Use 0x as hexadecimal prefix except for small constants. Make output in Thumb mode prettier. Recognize a few more ARMv5/v5TE instructions. Added STEP_OUT debugging flag to a few more instructions commonly used for exits. Regularize a lot of sloppy formatting. Somewhat reduce code duplication in Thumb disassembler (arm7\arm7dasm.cpp) [AJR].
- 0.239              : Fixed TLB Flush behavior: Support for the "Flush single unified TLB entry" coprocessor operation. Fixed bugged "Flush single DTLB entry" operation and "Flush single ITLB entry" was equally nonexistent [Ryan Holtz].
- 0.228              : Added cpu\arm7\cecalls.hxx. Added optional logging for Windows CE calls (arm7\arm7.cpp and cecalls.hxx) [Ryan Holtz].
- 0.227              : Fixed interaction between instruction prefetching with the MMU enabled (arm7\arm7.cpp). Added rudimentary TLB support. Allows (MESS) HP Jornada 720 to boot further (arm7\arm7.cpp) [Ryan Holtz]. Removed an auto_alloc (arm7\arm7drc.hxx) [Vas Crabb].
- 0.224              : Fixed THUMB ROR behavior for shift values of 0 or >= 32. All tests in FuzzARM (CPU test for Game Boy Advance) now pass (arm7\arm7thmb.cpp) [Ryan Holtz, MetalliC]
- 0.222              : READ/WRITE macros removal [Osso].
- 0.218              : Added ARM710T variant subclass for (MESS) Psion 5mx. Switched to using logmacro and disabled logging by default. Added debug print ability for Happy Fish (V2 PCB, 302-in-1) [Ryan Holtz].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.194              : Added cpu\arm7\arm7fe.hxx. Reverted ROR cases in arm7\arm7thmb.cpp, explicit masking and rotating was unneeded (except for POP {Rlist} which is correct), handle v5 behavior (LSB address bit is ignored in 16bit loads) in arm946es_cpu_device::arm7_cpu_read16 instead, manually handle v4 and v5 difference for LDRSH signed halfword load. NOTE: It looks like all? v5 cores ignore least significant address bit during 16bit loads, so we should add something like virtual uint32_t arm7_cpu_read16(uint32_t addr) override { return base_class::arm7_cpu_read16(addr & ~1)}; into theirs class declaration [MetalliC]. Added front-end for ARM7 DRC (arm7\arm7fe.hxx) [endrift, Ryan Holtz].
- 0.193              : Added cpu\arm7\arm7dasm.h. Fixed misaligned 16-bit loads (thanks to MoochMcGee for report). Protect trampoline constructors (cpu\arm7\arm7.h) [Vas Crabb]. Made LDMIA/STMIA align to 32-bit boundary (cpu\arm7\arm7thmb.cpp) [Endrift, R. Belmont]. Only define LSL, LSR, ROL & ROR when building the cpu core (cpu\arm7\arm7core.h) [smf]. Mask address LSB during 16/32 bit memory access, as per ARMv5/ARM9 behavior. Handle 2 magical ROR cases. This needed to be changed or split when we will be emulate ARMv6/ARM11 (cpu\arm7\arm7thmb.cpp) [MetalliC].
- 0.192              : Added rudimentary instruction prefetch buffer. Fixes (MESS) GBA NES Classics games. Fixed ARM7_BE and ARM7 MMU regressions [Ryan Holtz]. Added 32- and 64-bit population count utilities. Only used in ARM7 core for now. Requires -msse4.2 or -mpopcnt to use CPU feature on x86 and -mpopcntb to use CPU feature on POWER (cpu\arm7\arm7ops.cpp and osd\eminline.h) [Vas Crabb]. Derived IGS036 type in ARM7/9 core, because it seems like MMU could be different and there are probably other internal devices. Fixed (?) BLX (LO) thumb opcode in ARM7/9 core, was storing a return address that skipped the following opcode. There might still be ARM9 issues [David Haywood]. LDR/LDRM switch to Thumb mode on ARMv5T (cpu\arm7\arm7ops.cpp) [David Haywood, MetalliC]. Added ARM v5/9 check. Handle DP-commands ROR <Rs> case where Rs=32/64, removed few outdated comments [MetalliC]. Added support for high vector option, fixed v5 BLX to save the return address in R14 [R. Belmont].
- 0.190              : Various changes. Added ARM946ES variant. Fixed up CPU ID values [Ryan Holtz].
- 0.186              : Changed description to 'ARM7 (little)' and 'ARM7 (big endian)' to 'ARM7 (big)'.
- 0.184              : Repair broken ARM (arm7\arm7ops.cpp) [Peter Ferrie].
- 0.183              : ARMv5 additions to ARM7. Added support for the second BLX form for ARMv5, and fix behavior of second BLX form in THUMB. Further fixes for ARM [trap15].
- 0.180              : Changed the ARM7 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Performed some minor optimization. (MESS) Game Boy Advance fix, added update_irq_state to ARM7 on places missing [Ryan Holtz].
- 0.174              : Changed cpu\arm7\arm7core.inc, arm7drc.inc and arm7tdrc.inc to arm7core.hxx, arm7drc.hxx and arm7tdrc.hxx.
- 0.163              : ARM7 also use DRC code (scripts\src\cpu.lua) [Miodrag Milanovic].
- 0.161              : STM decrementing mode actually writes in incrementing mode on real h/w (arm7\arm7ops.c). Used heavily by GBA "Classic NES" carts [R. Belmont, endrift].
- 0.156              : Added command-line option -[no]drc_log_uml to control DRC UML disassembly logging. Allows logging of DRC UML disassembly without re-compiling / removes. DRCUML_OPTION_LOG_UML and all the core-specific LOG_UML defines (cpu\arm7\arm7drc.inc). Added command-line option -[no]drc_log_native to control DRC native diassembly logging. Allows logging of DRC native disassembly without re-compiling, removes DRCUML_OPTION_LOG_NATIVE and all the core-specific LOG_NATIVE defines, added logging() to drcbe_interface and added logging_native() to drcuml_state [Oliver Stoeneberg].
- 0.154              : Fixed usage of uninitialized members in arm7_cpu_device [Oliver Stoeneberg]. Added Thumb version of BLX (arm7\arm7dasm.c and arm7thmb.c) [R. Belmont].
- 0.153              : Changed cpu\arm7\arm7core.c to arm7core.inc, arm7drc.c to arm7drc.inc and arm7tdrc.c to arm7tdrc.inc [Oliver Stoeneberg]. Fixed (MESS) Nintendo Game Boy Advance games 'River City Ransom EX' and 'Downtown - Nekketsu Monogatari EX' freezes right after menu (cpu\arm7\arm7.c) [Wilbert Pol]. Removed left-over legacy_cpu_device usage from arm7\arm7core.h [Oliver Stoeneberg].
- 0.149u1            : Removed cpu\arm7\arm7exec.c, arm7ops.h and arm7thmb.h. Modernized ARM7 cpu core [Wilbert Pol]. Fixed compile (0xffffffff80000000L -> U64(0xffffffff80000000); cpu\arm7\arm7drc.c) [Angelo Salese]. Do not use space in shortnames (arm7\arm7.c) [Miodrag Milanovic].
- 0.148u2            : Tiny fix for undefined shift behavior (cpu\arm7\arm7dasm.c) [Wilbert Pol].
- 0.148u1            : Added cpu\arm7\arm7drc.c and arm7tdrc.c. ARM7 checkpoint. Added fine page table lvl2 lookup, fixes Lucky Drink (Belatra 2004) fatalerror. Fixed behavior of SMLAxy opcode (cpu\arm7\arm7drc.c). Not sure if this is correct, but it looks a lot more correct than before. I'm not actually sure what we have in MAME or MESS that uses ARMv5 opcodes. Fixed SMLAL opcode (looks like another dodgy one), SMULW and SMLAW opcodes [MooglyGuy].
- 0.145u5            : For v5 and later, Thumb POP can return to ARM mode in ARM7 (cpu\arm7\arm7thmb.c) [R. Belmont].
- 0.144u6            : Added cpu\arm7\arm7ops.c/h, arm7thmb.c/h and arm7help.h. Some ARM7 code reorganization, used a jump table for a small speedup. Gave ARM mode its own file & cleaned up formatting/indenting [David Haywood].
- 0.144u5            : Tim Schuerewegen implemented ARM7 MMU permission faults. Return correct MMU ID Code register values for ARM920T/ARM7500. Fixed 39-in-1 booting.
- 0.141u2            : ARM7 update [Tim Schuerewegen]: Fix for ARM7 "MOV LR, Rx" (where Rx bit 0 = 1) + "F800" situation. This fixes the lockup in GBA "Golden Sun: The Lost Age". Improved LDM/STM unaligned word access in THUMB mode. Fixed LDM unaligned read in THUMB mode. Fixed an LDM base register write-back bug.
- 0.141u1            : ARM7 updates [Tim Schuerewegen]: Various ARM7+ cycle timing fixups. ARM7 fix for "39in1" (MAME) and removed a duplicate line. Fix to work with newer ARM7 cores. Disable 26-bit back compatibility for ARM7 variants other than ARM7500. Fix carry flag issue on add/subtract in ARM mode. Fixed "MOV x, R15, LSL #y" form as tested by ARMWrestler. Added unimplemented Thumb MOV variant used by GBA Moto GP.
- 0.141              : ARM7+ updates [Tim Schuerewegen]: Enhanced MMU with page fault support. Preliminary 26-bit mode support. Fixed bugs with S-flag operations on R15. Fixed STRH involving R15. Support for ARM models 7500 and 920T.
- 0.136u2            : ARM: Preliminary SA-1110 support (Interrupt Controller) [R. Belmont].
- 0.134u1            : Harmony fixed disassembly of NEG Rd, Rs instruction in ARM7TDMI Thumb mode.
- 0.133              : ARM7 improvements [R. Belmont]: Added ARMv5+ CLZ instruction. Added ARMv5TE instructions: QADD, QDADD, QSUB, QDSUB, SMLAxy, SMLALxy, SMULxy, SMULWy and SMLAWy. Fixed disassembly of CLZ.
- 0.132u5            : ARM7 updates [R. Belmont, Ryan Holtz]: Prepped to support multiple architecture versions. Added ARM9 CPU type (ARMv5TE). Added mostly-stubbed system coprocessor/MMU support.
- 0.123u2            : R. Belmont fixed unaligned 32-bit reads in the ARM7 core.
- 0.131u3            : Fixed compilation with ARM7_DEBUG_CORE enabled [Reijo Tomperi, Oliver Stoeneberg].
- 0.129u1            : Rewrote some abuses of the ARM7 core HANDLER macros to use _func types instead [Atari Ace].
- 0.128u5            : ARM7 updates [R. Belmont]: Pointer-ified ARM7 core. Added disassembler and execution support for ARMv5 LDRD/STRD instructions. 39in1 now makes it until it needs the MMU.
- 0.127u2            : R. Belmont removed unnecessary ARM7 hooks so MRC and MCR disassemble properly.
- 0.123u1            : ARM7 updates [Anonymous]: Correct mode at reset (it's always 0b1...). HandlePSRTransfer: Remove wrong code, correct detection of privileged mode. Correct carry output for ROR. Thumb ASR Rd,Rs: correct carry computation. Thumb ldmia/stmia: correct value for writeback when the writeback reg is in the list. ARM ldm/stm ignore lower bits of the address. Most of the exceptions force the I bit. Ignore some flag bits in the CPSR.
- 0.123              : R. Belmont fixed PSR transfers in the ARM7 core.
- 0.122u7            : SGINut added support for the BLX opcode in ARM7 THUMB mode.
- 0.119u1            : ARM7 core fixes [R. Belmont]: Fixed unaligned reads/writes (again). Fixed minimum instruction bytes to account for Thumb mode. Fixed missing dependency in ARM7 build rule. Fixed Thumb mode ASR instruction.
- 0.118u1            : ARM7 core fixes [R. Belmont, Ryan Holtz]: Fixed behavior when R15 is the source of a MOV. Fixed flags calc for ADC/SBC. Fixed flags calc for NEG. Fixed flags calc for CMP. Fixed time running backwards on Thumb instructions. Fixed some ARM instructions doing indiscriminate change_pc()s.
-  9th August 2007   : R. Belmont - DisARMing: Another day, another bunch of dead ARM7 bugs. Good stuff from this batch includes both Metroid games (GBA) now being playable and improved music quality in some games. Cheat sheet on the MAME significance: A good-running ARM7 core will be necessary for future PGM games (as their protection programs are trojaned or decapped) and sound in NAOMI games if/when those are supported. It's much easier to test the core with GBA games though.
-  7th August 2007   : R. Belmont - Ryan and I fixed several more ARM7 core bugs and a few GBA hardware emulation issues, and now many more games boot or are playable that weren't before.
- 0.115u3            : More ARM wrestling: [R. Belmont]: Fixed error in carry propagation on ALU opcodes of the form ALU r1, r2, r3 SHIFTEROP #imm. Fixed Thumb ADD instructions where the PC is involved. Fixed LDMIA to mask off bits 0 and 1 of the destination address. MSR instruction now properly respects processor mode and field code flags.
- 30th May 2007      : R. Belmont - More ARM7 fixes (including several that were backported to the original ARM core - could someone check if it's now possible in 0.115u2 to beat the end boss on Dragon Gun?), so of course I have a few new GBA screens.
- 0.115u1            : Improvements to the ARM7 core [R. Belmont, Ryan Holtz]: Fixed 32-bit unaligned reads to "scramble" properly. Fixed carry flag calc for SUB/SBC/CMP family instructions. Fixed multiply-and-accumulate instructions. Added more instructions to the disassembler. Fixed logical and arithmetic shifts. Added more Thumb instructions. Fixed relative loads and stores. Fixed LSL/LSR with zero shift values. Fixed the disassembly of CMN. Verified behavior when ADD destination is the PC on real h/w.
- 13th May       2007: R. Belmont - More work on the ARM7 SUB/SBC/CMP in Thumb mode were miscalculating the carry flag, and I also improved a few more GBA hardware bits. More games are showing their faces and/or playing better music and/or showing better graphics.
- 0.115              : Additional ARM7 core fixes [R. Belmont]: Fixed SWI instruction in Thumb mode. Rewrote SWP instruction to work properly. Added some missing change_pc()s.
-  5th May       2007: R. Belmont - ARMed and dangerous: MooglyGuy and I shook the ARM7 core and some more bugs fell out, with these results. Keep in mind the GBA video emulation in the driver is extremely simplistic right now, so it's amazing the GBA stuff shows as well as it does. You can't tell here, but all the sound hardware is present and rockin' in most of these games too.
- 0.114u4            : Significant ARM7 update [R. Belmont]: Cleaned up disassembly. Added support for many more Thumb instructions. Removed unnecessary logging. Unaligned reads/writes are supported.
-  1st May       2007: R. Belmont - MAME/MESS's ARM7 core was misinterpreting the very important Thumb version of SWI (SoftWare Interrupt, used on GBA to call the very useful BIOS routines) as 'branch always'. Fixed that, and all sorts of things lit up.
- 0.111u6            : MooglyGuy fixed the disassembly, operation and cycle timing of many Thumb instructions in the ARM7 core.
- 0.109u5            : Aaron Giles converted the ARM7 disassemblers to the new format and added step in/out support where it was obvious.
- 0.105u4            : MooglyGuy improved ARM7 thumb mode disassembler. Big pile of updates/improvements to the ARM7 core thumb mode and the PGM drivers [David Haywood, ElSemi].
-  1st May       2005: David Haywood - Been doing some work with ElSemi updating the Thumb support in the ARM core based on the Nebula code. As a result these are improved (but don't work properly due to various core bugs.) They also run at about 25% speed because the ARM emulation is very demanding. Thanks to Mooglyguy for the original Thumb support.
- 0.104u5            : Preliminary Thumb implementation for the ARM7 core. Many opcodes present, but there are definite sign problems [Ryan Holtz]. Hooked up ARM7 protection CPU in KOV2. Boots but does not run or play due to the Thumb sign problems [R. Belmont].
- 0.91u1             : Trailing comma at the end of an enum (arm7\arm7core.h) [Lawrence Gold].
- 0.90u2             : Added cpu\arm7\arm7.c/h, arm7core.c/h, arm7dasm.c and arm7exec.c. ARM7 CPU core [Steve Ellenoff].
- PCB: Cirrus Logic CL-PS7500FE-56QC-A 84903-951BD ARM 9843J, ARM710C, QFP240 (Ssfindo), CL-PS7500 84877-951BD ARM 9843J (Ppcar), ARM 312 SAMSUNG S3C2410 (Bballoon)
- DRIVERS: 3do.cpp, belatra.cpp, igs_fear.cpp, igs_m027.cpp, igs_m036.cpp, naomi.cpp, pgm.cpp, sam.cpp, sanremmg.cpp, segasp.cpp and ssfindo.cpp
- SOURCE: cpu\arm7\arm7.cpp



10.A   ARM9

- 0.194              : Ensure savestates work from commandline (eg launching with -state 0) tag driver as supporting states (cpu\arm7\arm7.cpp and drivers\pgm2.cpp) [David Haywood].
- 0.193              : IGS036 seems to be derived from a ARM946ES type core based on using MPU not MMU, change it to be such (cpu\arm7\arm7.cpp) [David Haywood].
- 0.192              : Derived IGS036 type in ARM7/9 core, because it seems like MMU could be different and there are probably other internal devices. Fixed (?) BLX (LO) thumb opcode in ARM7/9 core, was storing a return address that skipped the following opcode. There might still be ARM9 issues [David Haywood]. Added ARM v5/9 check. Handle DP-commands ROR <Rs> case where Rs=32/64, removed few outdated comments [MetalliC]. Implement BLX Rn instruction for ARM9. (MESS) Nintendo DS ARM9 BIOS gets to the first checkpoint. Flesh out ARM946ES, added movable DTCM and ITCM support [R. Belmont].
- 0.132u5            : ARM7 updates [R. Belmont, Ryan Holtz]: Prepped to support multiple architecture versions. Added ARM9 CPU type (ARMv5TE). Added mostly-stubbed system coprocessor/MMU support.
- DRIVERS: ghosteo.cpp, hapyfish.cpp and pgm3.cpp
- SOURCE: cpu\arm7\arm7.cpp



10.B   DECO ???
- 0.129u4: Christophe Jaillet removed some unused code from deco_mlc.c.
- NOTES: The SH-2 CPU is placed on the Game side of the Data East MLC cart.
- PCB: SH-2 CPU, surface scratched, QFP144 (Avengrgs)
- SOURCE: drivers\deco_mlc.cpp



10.C   DECO 222

- 0.148              : Added machine\deco222.c/h. Make the DECO222 handling in decocass transparent to the driver [David Haywood].
- 0.147u3            : Rewritten DECO222 encryption for The Real Ghostbusters, Psycho-Nics Oscar and Super Real Darwin to use the new model [Olivier Galibert]. Replaced M6502 CPU with DECO 222.
- NOTES: The DECO 222 or C10707 CPU is a custom 6502. Decrypt CPU1 or CPU2 (audio) roms - see driver btime.c or dec8.cpp
- PCB: C10707-1 (Boomrang, Kamikcab, Oscar, ProSoccer and Sdtennis), unknown 8303 C10707-1 in Shootout
       (Note in drivers\deco8.c) Ghostbusters, Darwin, Oscar use a "Deco 222" custom 6502 for sound
       C10707-2: (Note in drivers\decocass.c) One DE-0096C-0 DSP-8 board with a 'DECO 222' custom on it (labeled '8049 // C10707-2') which appears to really be a 'cleverly' disguised 6502, and two proms, plus 4K of sram, and three hm2511-1 1kx1 srams (main processor and graphics).
- SOURCE: mame\machine\deco222.cpp


10.D   Samsung S3C24xx

- 0.276              : Fixed Clang 20.1.0 erroring due to using memset on non-trivial objects (devices\machine\s3cXXXX.cpp) [Osso]. Got rid of a layer of indirection on LCD bitmaps (machine\s3c24xx.hxx) [Vas Crabb].
- 0.270              : Workaround for array out of bounds compiler warning (machine\s3c24xx.hxx) [hap].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.219              : Replaced get_read_ptr with memory_access_cache in s3c24xx and s3c44b0 [AJR].
- 0.218              : Converted S3C24xx to use logmacro. Removed redundant accessors [Ryan Holtz].
- 0.196              : Removed first_screen usage from machine\s3c2400.cpp, s3c2410.cpp, s3c2440.cpp and s3c24xx.hxx [Ryan Holtz].
- 0.186              : Added machine\s3c24xx.cpp/h.
- 0.174              : Changed machine\s3c24xx.inc to s3c24xx.hxx.
- 0.155              : Added assert for index out-of-bounds access with (MESS) Gizmondo (machine\s3c24xx.inc) [Oliver Stoeneberg].
- 0.154              : Converted S3C24xx to DEVCB2 [Osso, Miodrag Milanovic]. Isolated the callback that resists DEVCB2 conversion [Osso].
- 0.153              : Changed machine\s3c24xx.c to s3c24xx.inc [Oliver Stoeneberg]. Modernized S3C24xx [Miodrag Milanovic].
- 0.148u4            : s2c24xxx cleanup and modernization of devices using it [Miodrag Milanovic].
- 0.147              : Placed s3c24xx video start and screen update into device [Angelo Salese]. Converted remaining legacy_device_base users (machine\s3c24xx.c) [Miodrag Milanovic].
- 0.144u5            : Lots of s3c24xx changes for future Happy Fish 302-in-1 and Palm Z22 (MESS) drivers [Tim Schuerewegen].
- 0.141              : Some s3c24xx improvements and fixes [Tim Schuerewegen].
- 0.140u3            : Added machine\s3c2400.c/h, s3c2410.c/h, s3c2440.c/h and s3c24xx.c.
- NOTES: Samsung S3C2400 / S3C2410 / S3C2440 ARM Microcontroller
- DRIVERS: ghosteo.cpp and hapyfish.cpp
- SOURCE: machine\s3c2400.c, machine\s3c2410.c, machine\s3c2440.cpp and machine\s3c44b0.cpp


10.E   Intel XScale

10.E1  PXA250
- 0.223              : Added placeholder devices for PXA250 [Ryan Holtz].
- DRIVERS: ???
- SOURCE: cpu\arm7\arm7.cpp


10.E2  PXA255

- 0.272              : Added basic screen visible area configuration [Angelo Salese].
- 0.262              : Removed machine\pxa255defs.h. Cleaned up peripheral emulation code. Implemented free-running timer. Eliminated internal header in favor of scoped enums. Eliminated double-dispatch switch/case in handlers, in favor of individual register handlers. Reworked GPIO handling for correctness (machine\pxa255.cpp) [Ryan Holtz].
- 0.245              : Simplified DMA transfer code (machine\pxa255.cpp) [Ryan Holtz].
- 0.223              : Added preliminary support for RTC, clock and power management registers. Correct PXA255 CPU ID [Ryan Holtz].
- 0.222              : READ/WRITE macros removal (machine\pxa255.cpp) [Osso].
- 0.186              : Changed description to 'Intel XScale PXA255'.
- 0.149u1            : Added 'PXA255' device (cpu\arm7\arm7.c).
- 0.133u1            : Added machine\pxa255.h. ARM7 updates [R. Belmont]: Preliminary PXA255 support, including Intel-specific CP14. Hooked up TLB. 39in1 improvements [MooglyGuy, R. Belmont]: Fleshed out some Intel PXA255 peripherals. Improved PXA255 DMA controller emulation. Fixed FBARx register accesses to wait until the current DMA transfer has completed before triggering another interrupt. Hooked up 93C66 EEPROM. Fixed LCD DMA behavior. Fixed EEPROM byte order. Video, inputs and flash data ROM hooked up. Improved PXA255 LCDC, DMA and I2S emulation. Working but not great CPLD protection simulation.
- NOTES: Intel XScale PXA255
- DRIVERS: 39in1.cpp
- SOURCE: cpu\arm7\arm7.cpp and machine\pxa255.cpp


10.E3  PXA270
- 0.223              : Added placeholder devices for PXA270 [Ryan Holtz].
- DRIVERS: ???
- SOURCE: cpu\arm7\arm7.cpp



11.    Nintendo

11.1   Ricoh RP2A03

- 0.251              : Don't read from unmapped apu regs (m6502\rp2a03.cpp) [hap].
- 0.248              : Added earliest hardware variant of 2A03 APU (found in punchout, spnchout, dkong3, VS. systems and some early Famicoms). It's estimated that these letterless CPU versions are in the first two million or so Famicoms (about 10% of Famicoms sold). There are games developed on the RP2A03 that have sound glitches on later, more common Famicoms. For instance, the very last note in the game over melody in Balloon Fight rings out with a loud buzz on later machines. The new famicomo driver plays it as the developers must have intended [kmg].
- NOTES: Ricoh RP2A03
- DRIVERS: dkong.cpp, punchout.cpp and vsnes.cpp
- SOURCE: cpu\m6502\rp2a03.cpp


11.12  Ricoh N2A03G

- 0.251              : Don't read from unmapped apu regs (m6502\rp2a03.cpp) [hap].
- 0.248              : Changed description to 'Ricoh N2A03G'. Changed cpu\m6502\dn2a03.lst to cpu\m6502\drp2a03.lst, cpu\m6502\n2a03.cpp/h to cpu\m6502\rp2a03.cpp/h, cpu\m6502\on2a03.lst to cpu\m6502\orp2a03.lst and cpu\m6502\n2a03d.cpp/h to cpu\m6502\rp2a03d.cpp/h.
- 0.227              : Added "n2a03" (6502 CPU clone) to gdbstub for NES, and swapped 6502 PC/SP to SP/PC (debugger\debuggdbstub.cpp) [Lucien Murray-Pitts].
- 0.222              : READ/WRITE macros removal (m6502\n2a03.cpp) [Osso].
- 0.209              : Added device_mixer_interface instead hardcoded tags [cam900].
- 0.201              : Removed device_start() and device_clock_changed(). None of these are necessary as the APU is an internal device with a DERIVED_CLOCK [smf].
- 0.196              : Changed description to 'Ricoh N2A03'.
- 0.193              : Added cpu\m6502\n2a03d.cpp/h and or65c02.lst.
- 0.188              : Fixed cpu\m6502\n2a03.cpp/h [O. Galibert].
- 0.184              : Refactored clock definitions (includes other drivers using the N2A03) [kazblox].
- 0.147u3            : Removed cpu\m6502\opsn2a03.h and tn2a03.c. Added cpu\m6502\dn2a03.lst, n2a03.c/h and on2a03.lst. Rewrote M6502 to modern device, cycle-exact and interruptible. Put a second irq line logically-ored with the normal one in N2A03. Added virtual destructors [O. Galibert].
- 0.129u2            : Wilbert Pol improved implementations for undocumented instructions 63, 67, 6f, 73, 77, 7b, 7f, 9c, 9e, ab, e3, e7, ef, f3, f7, fb and ff in the n2a3 cpu core.
- 0.114u4            : Wilbert Pol improved accuracy of 6502 CPU cores (DECO CPU16, M4510, M6502, M6509, M6510, M6510T, M65C02, M65SC02 and N2A03) to implement the read/write that happens on every cycle. Moved the "undocumented" instructions from the 6510 cores into the main 6502 core, since there were several other versions of the 6502 cores which have the same undocumented instructions. Removed some of the #define override magic that was going on to make the code easier to read and understand. Updated the 6510 core port_read and port_write functions to include the ddr register in the parameters.
- 0.108u5            : Wilbert Pol updated the TN2A03 CPU to match the proper cycle timings and unsupported opcodes revealed by Blargg's NES chip test.
- 0.102u5            : Changed description to 'N2A03'.
- 0.102u4            : Rob Bohms fixed one invalid N2A03 opcode.
- 0.102u3            : Rob Bohms implemented some N2A03 undocumented opcodes.
- 0.36RC1            : Changed cpu\m6502\tbln2a03.c to tn2a03.c.
-  9th September 1999: Juergen Buchmueller added the Nintendo 2A03 CPU to the 6502 core.
- NOTES: The Ricoh N2A03G is a modified 6502 with built-in input ports and two (analog?) outputs. There is also the N2A03 sound CPU.
- DRIVERS: cham24.cpp, famibox.cpp, multigam.cpp, nes_arcade_bl.cpp and playch10.cpp
- SOURCE: cpu\m6502\rp2a03.cpp


11.2   G65C816 / 5A22

- 0.282              : Fixed status flag display in emulation mode. In emulation mode, "MX" are " B". Both bits are always 1, only the semantic meaning changes: " " doesn't exist, and "B" is only meaningful when pushed during an IRQ/NMI, to distinguish from BRK (g65816\g65816.cpp). Fixed IRQ to be level triggered. Followup b3f2535: stop clearing LINE_IRQ when jumping to the IRQ vector. Properly written IRQ handlers won't notice any difference, but this fixes the behavior for software which (possibly intentionally) fails to clear an IRQ source; in that case the IRQ should continue to trigger (probably leading to a system hang). LINE_SO is generally not hooked up, but if it is, it doesn't raise IRQ. Also delete unused G65816_INT_* macros [arekkusu42].
- 0.264              : Changed g65816\g65816op.h to g65816\g65816op.ipp. Fixed wraparound in (stack,S),Y addressing mode. Emulated (direct,X) emulation mode wraparound bug and fixed handling of direct page accesses in emulation mode. Ignore emulation mode for 24-bit pointer reads/writes. Force usage of native 16-bit stack handling for 65816-exclusive stack instructions. PEI also forces native 16-bit direct page handling. PLB reads from ($200) instead of ($100) when S=$1FF in emulation mode (g65816\g65816.cpp/h, g65816\g65816op.h) [Adrian Siekierka].
- 0.261              : Use properly sized types for registers, fixes SNES-Test wanting execution to wrap within the same bank (g65816\g65816.h) [R. Belmont].
- 0.243              : Fixed JSR being a cycle short (g65816\g65816op.h). Properly calculate page crossing penalty cycle for Y addressing modes (g65816\g65816.cpp) [R. Belmont, O. Galibert].
- 0.240              : Make absolute indexed indirect JMP/JSR fetch destination addresses from program memory instead of data memory when the two are separated. Removed some not-useful definitions (g65816\g65816op.h) [AJR].
- 0.239              : Replaced #ifdef UNUSED_FUNCTION with [[maybe_unused]] to deter code rot [AJR].
- 0.222              : Added preliminary WDC W65C802 [hap].
- 0.221              : Simplified some handlers [Osso].
- 0.214              : Fixed 5a22 clock cycles. Fixes (MESS) snes jdredd stops working after title screen and snes firemenu has black screen [AmatCoder].
- 0.208              : Fixed build (cpu\g65816\g65816.h) [AJR].
- 0.207              : WDM is a 2-byte opcode per WDC docs, added WDM callback (cpu\g65816\g65816.cpp/h) [R. Belmont].
- 0.196              : Allow use of separate address spaces for program, data, opcodes and/or vectors [AJR].
- 0.185              : Removed a few legacy type macros (cpu\g65816\g65816cm.h). Eliminated uint type properly [AJR].
- 0.180              : Changed the G65816 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.175              : Fixed back N5A22 clock steps (cpu\g65816\g65816cm.h; timing bug that was lingering for a while, no idea about what it fixes / breaks for SNES but it doesn't seem harmful from a quick random test) [Angelo Salese].
- 0.154              : Modernised G65C816 cpu core. Fixed SNES regression from modernization (cpu\g65816\g65816.c) [Wilbert Pol]. Fixed usage of uninitialized member in g65816_device [Oliver Stoeneberg].
- 0.153              : Converted legacy handlers to modern (cpu\g65816\g65816.c) [Miodrag Milanovic].
- 0.148u2            : Fixed issue with overwriting internal address map for snes. This should be made device_address_map in future but cpu core needs first to be converted to C++ (cpu\g65816\g65816.c and mess\drivers\snes.c) [Miodrag Milanovic]. Added missing mirror of the 5A22 regs (cpu\g65816\g65816.c) [Fabio Priuli].
- 0.147u2            : Changed space_func to delegate (cpu\g65816\g65816.c) [Miodrag Milanovic].
- 0.147              : Removed emu\cothread.c/h and lib\cothread\amd64.c, fiber.c... (18 files). Rewritten cycle steal code for SNES from scratch and nailed it directly in the G65816 CPU core [Angelo Salese, byuu]. Hooked up fastROM setting in the CPU core and FastROM resets at boot. Fixed a major bug with 5A22 timings, that was incorrectly taking extra steals at every read, write and rmw types of opcode. Moved multiplication and division operation from SNES to 5A22 CPU core file. Small clean-up. Moved MEMSEL as well [Angelo Salese].
- 0.145u7            : Stephane Humbert fixed dipswitches and coin inputs in SNESb driver (after verification of the 5A22 code).
- 0.141u2            : Fixed G65816 operation on PowerPC Linux where char is unsigned [R. Belmont, billb].
- 0.137u3            : Angelo Salese fixed RTL opcode in-bank issue in the G65816 CPU core.
- 0.137u2            : Replaced G65C816 CPU1 with 5A22 in nss.c and snesb.c. Angelo Salese added boundary checks for MVN and MVP opcodes when in M mode in the G65816 CPU core.
- 0.137u1            : Fixed 65816 decimal mode ADC/SBC behavior [blargg, BYUU, R. Belmont].
- 0.134              : Angelo Salese fixed a G65816 bug with SBC opcode N flag behaviour in Decimal Mode.
- 0.133u2            : Angelo Salese fixed buggy breakpoints in the G65816 CPU core.
- 0.128u5            : Pointer-ified the 65816 core [R. Belmont].
- 0.127u5            : 65816/377xx update [ShimaPong]: Fixed disassembly of BRL.
- 0.127              : R. Belmont added save states to 65816 CPU.
- 0.113u4            : G65816/M37710 CPU core updates [R. Belmont]: Fixed a race condition in the WAI instruction where the CPU could get stuck. (MESS bug #661, may have caused intermittent issues with Namco games in MAME too). Fixed block transfer instructions when the accumulator is in short mode. (Fixes some SNES games not booting, notably Final Fantasy Mystic Quest).
- 0.109u5            : Aaron Giles converted the G65816 disassemblers to the new format and added step in/out support where it was obvious.
- 0.107u3            : 65816/377xx update [R. Belmont]: Made block transfer instructions interruptable as they are on both actual chips (previously a single opcode could eat >400,000 cycles with obvious consequences for interrupt timing). Fixed M377xx block transfers (move one less byte than the 65816).
- 0.102u3            : Rob Bohms fixed the ADC and SBC opcodes in G65816 (for BCD math).
- 0.100u4            : Updated 65816 and 37710 cores [R. Belmont]: Fixed both CPUs to set the data bank register to the destination on an MVN/MVP. Some minor tweeks so the debugger works properly when the 65816 is executing out of a read handler (as it always is for the SNES).
- 0.94u2             : Patched G65816 [Nathan Woods]: Fixes a bug whereby the CPU could switch modes without entering the set of functions for that mode. Specifically, if a mode change occurs it will break out of the execute function and reenter the correct function.
- 0.93               : G65816 disassembler changes [Nathan Woods]. program_read_byte() is no longer used for disassembling and also the core now reports the PC as being the full PB or with PC.
- 0.92               : Nathan Woods added a hook that allows a driver to install a custom read handler for reading interrupt vectors (the 65816 has a signal that is asserted when reading a vector and certain hardware needs to reroute the read).
- 0.90u4             : Nathan Woods fixed 65816 DASM error.
- 0.90u2             : Nathan Woods cleaned up the G65816 CPU code a bit; make some functions static and added step over/out support to the disassembler.
- 0.71u3             : Angelo Salese fixed the BCD conversion when using the Decimal Flag in ADC and SBC opcodes in the G65816 CPU core. This fixes at least the Act Raiser timer/score bugs.
- 0.71u2             : Added cpu\g65816\g65816.c/h, g65816cm.h, g65816ds.c/h, g65816o0-4.c and g65816op.h.
- 0.37b14            : Removed cpu\g65816\g65816.c, g65816ds.c and g65816o0-4.c.
- 0.37b6             : Added cpu\g65816\g65816.c/h, g65816ds.c/h, g65816cm.h, g65816op.h and g65816o0-4.c.
- 28th May       2000: Karl Stenerud updated the G65C816 CPU core.
- 22nd May       2000: Lee Hammerton fixed yet some more G65C816 core bugs.
- 20th May       2000: Lee Hammerton fixed a G65C816 core disassembly bug.
- 18th May       2000: Karl Stenerud sent in a preliminary G65C816 CPU core.
- NOTES: The Nintendo SNES G65C816 or GTE65816 CPU is a C64/C128 upgrade CPU. Has 16 bit wide registers, 24 bit address space, 65c02? compatible mode and additional commands.
- DRIVERS: nss.cpp, sfcbox.cpp, snesb.cpp and snesb51.cpp (includes\snes.h)
- SOURCE: cpu\g65816\g65816.cpp


11.3   SPC700

- 0.234              : Use int8_t instead of old MAKE_INT_8 macro (MAKE_INT_8 fails on GCC/ARM) (cpu\spc700\spc700.cpp) [David Viens].
- 0.219              : Added fix for opcodes TCLR1 and TSET1 (https://mametesters.org/view.php?id=5409). This makes Blargg's CPU_tset_tclr pass (from spc_smp.sfc). Removed page crossing penalty on EA_DIY. Doing so allowed some of our internal S-SMP/S-DSP tests to pass [jwdonal, David Viens].
- 0.214              : Fixed spc700 clock cycles. Fixes (MESS) snes jdredd stops working after title screen and snes firemenu has black screen [AmatCoder].
- 0.194              : All SNES APU docs I can find claims that SPC700 runs at 2.048 MHz and there's no mention about an internal divider (which should belong to the CPU core while fixing the opcode cycles anyway) [Angelo Salese].
- 0.186              : Fixed obvious bugs found by GCC 7.1 (cpu\spc700\spc700.cpp) [Miodrag Milanovic]. Get rid of unneeded shifts. Fixed N flag in OP_LSRM [hap].
- 0.180              : Changed the SPC700 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.154              : Fixed usage of uninitialized members in spc700_device [Oliver Stoeneberg].
- 0.153              : Modernized SPC700 cpu core [Wilbert Pol].
- 0.152              : Fixed SNES: SPC-700 sets B flag when pushing PS register to the stack during execution of the BRK instruction [Alex Jackson].
- 0.151              : Fixed disassembly of BRK opcode, memory-to-memory and immediate-to-memory instructions (cpu\spc700\spc700ds.c) [Alex Jackson].
- 0.147              : Improved SPC700 cycle opcode timings [Angelo Salese, byuu].
- 0.144u5            : Fix four SPC700 opcodes which didn't disassemble correctly [kevtris].
- 0.137u1            : Fabio Priuli added save states to the SPC700 core.
- 0.129u1            : Atari Ace removed the interface declarations and functions in the SPC700 core. Most of it is handled by CPU_GET_INFO, some of it was no longer implemented, and since pointerization it wasn't possible to call it externally anyhow.
- 0.128u5            : Pointer-ified the SPC700 core [R. Belmont].
- 0.102u5            : Rob Bohms fixed the SUBW H flag in the SPC700 core.
- 0.102u3            : Fixed several bugs in the SPC700 core [R. Belmont]: Fixed carry usage in ADC/SBC. Fixed overflow flag in ADDW/SUBW (I think). BRK now modifies the status register properly. Fixed DAA/DAS edge case.
- 0.100u4            : R. Belmont fixed operand order for SBC to memory.
- 0.100u3            : R. Belmont fixed bugs in SPC700 ADC, SBC, ADDW, SUBW, MUL, DIV and CLRV opcodes.
- 0.100u2            : Small NSS update [R. Belmont]: R. Belmont fixed disassembly of 2 SPC700 instructions. Fixed behavior of the APU port clear flag to not clobber the output ports - games now can boot and run without the "APU skipper". Fixed SPC700 CMP instruction flags.
- 0.71u2             : Added cpu\spc700\spc700.c/h and spc700ds.c/h.
- 0.37b14            : Removed cpu\spc700\spc700.c and spc700ds.c.
- 0.37b7             : Added cpu\spc700\spc700.c/h and spc700ds.c/h.
- 28th May       2000: Karl Stenerud sent in a new SPC700 CPU core.
- NOTES: The Sony/Nintendo SPC700 CPU is 6502-based at heart but contains a lot of the extended opcodes of the Mitsubishi 770 and 7700 series 65xxx-based MCUs, plus a few special twists borrowed from the 68000. It was designed by Sony's Ken Kutaragi, later the "father of the PlayStation". Original emulation by Anthony Kruize and Lee Hammerton. Thanks to Anonymous, TRAC, Brad Martin, anomie, Blargg, and everyone else on ZSNES Technical for probing the darker corners of the SNES with test programs so we have a chance at getting things accurate.
- DRIVERS: nss.cpp, sfcbox.cpp and snesb.cpp
- SOURCE: cpu\spc700\spc700.cpp


11.31  SPC7110

- 0.186              : Refactored the SPC7110 bit table generator loop to make it more readable [Vas Crabb].
- 0.148u2            : Moved machine\snes7110.c to src\mess.
- 0.148u1            : Refactored SPC7110 and SDD1 implementations to be more class-friendly and not to use running_machine to access the ROM data [Fabio Priuli].
- 0.137u2            : Fabio Priuli fixed a bug in SPC7110 handlers (now Tengai Makyou Zero test reaches RTC tests and fails them, instead of getting stuck at MUL/DIV tests).
- 0.134u1            : Added machine\snes7110.c. Harmony ported SPC7110 support from BSNES.
- DRIVERS: snes.cpp
- SOURCE: machine\snes7110.cpp


11.4   DSP-1

- 0.141u1            : Removed machine\snesdsp1.c.
-  2nd January   2011: R. Belmont - Dr. Decapitator recently read out the internal ROMs for the Super NES "DSP-1", "DSP-2", "DSP-3" and "DSP-4" chips. These are all fairly low-powered NEC uPD7725 16-bit DSPs used to offload 3D trig calculations in games like Pilotwings and Super Mario Kart. BYUU wrote an emulation core for this chip for BSNES and kindly donated it to MAME/MESS so now SNES in MESS has perfect math on games using the DSP as well. And the great thing is the previous HLE simulation code used for these games was larger than both the 7725 core and the ROMs. So you save a little compile time and memory and get guaranteed perfect results. I love it!
- 16th December  2010: Dr. Decapitator - SNES DSP1B: The data was extracted by laser-cutting the top two ROM bits from the actual CPU logic (so it would read all opcodes as OP(00) or LD(11) opcodes depending on whether lines were pulled high or low, and neither OP nor LD can branch address), then microprobing, 8 bits at a time, the ROM outputs from before the cut. The program counter was also monitored to ensure that the data read started at 0x000 and didn't jump anywhere. The images included are: 24_bits_11addr.jpg: An overview of the program ROM showing the data bits and the program counter outputs. d77c25_sp_pc_20x.jpg: A closer view of the program counter showing most of the 4-bit parallel stack that is next to it. Thanks to Lord_Nightmare and BYUU+friends for their help with this.
- 0.134u1            : Fabio Priuli fixed a bug in SNES DSP1 emulation. Super Mario Kart can be played again in MESS.
- 0.129u1            : All SNES obc1_, DSP1_ and DSP2_ exports were made static [Atari Ace].
- 0.122u3            : Improves accuracy and documentation of NSS/SNES DSP-1 [Andreas Naive, R. Belmont].
- 0.102u3            : Added machine\snesdsp1.c. DSP-1 support (including all subtypes) [R. Belmont].
- NOTES: SNES "DSP-1" add-on chip. Code from http://users.tpg.com.au/trauma/dsp/dsp1.html. By The Dumper (Electrical Engineering), Neviksti (Physics), Overload (Computer Science), Andreas Naive (Mathematics)
- SOURCE: machine\snesdsp1.cpp


11.5   DSP-2

- 0.148u2            : Moved machine\snesobc1.c to src\mess.
- 0.141u1            : Removed machine\snesdsp2.c.
- 0.129u1            : All SNES obc1_, DSP1_ and DSP2_ exports were made static [Atari Ace].
- 0.127u7            : Added machine\snesdsp2.c and snesobc1.c. Fabio Priuli and BYUU added emulation for SNES special chips DSP-2 & OBC-1: Added sources snesdsp2.c & snesobc1.c. Removed special chips detection from MAME. Modified memory handlers to account for the new chips.
- NOTES: SNES "DSP-2" add-on chip. Original C++ code by BYUU, based on research by Overload. MAME/MESS C conversion by etabeta.
- SOURCE: machine\snesdsp2.cpp


11.6   DSP-3
- 0.141u1            : Removed machine\snesdsp3.c.
- 0.134              : Added machine\snesdsp3.c and snesdsp4.c/h. ZSNES Team and Fabio Priuli added emulation for the SNES DSP-3 and DSP-4 add-on chips, based on latest ZSNES.
- SOURCE: machine\snesdsp3.c, snesdsp4.cpp/h


11.7   DSP-4
- 0.141u1            : Removed machine\snesdsp4.c/h.
- 0.134              : Added machine\snesdsp3.c, snesdsp4.c/h. ZSNES Team and Fabio Priuli added emulation for the SNES DSP-3 and DSP-4 add-on chips, based on latest ZSNES.
- SOURCE: machine\snesdsp3.c, snesdsp4.cpp/h



11.8   RSP

- 0.278              : Added preliminary savestates (rsp\rsp.cpp) [hap].
- 0.277              : MIPS disassembler refinements (rsp): Changed hexadecimal prefix from $ to 0x ($ means something else in MIPS assembler syntax) and omit for small numbers (rsp\rsp_dasm.cpp) [AJR].
- 0.235              : Removed cpu\rsp\clamp.h, rspcp2.cpp/h, rspcp2d.cpp/h, rspdrc.cpp, rspfe.cpp/h, vabs.h, vadd.h, vaddc.h, vand.h, vch.h, vcl.h, vcmp.h, vcr.h, vdivh.h, vldst.h, vmac.h, vmov.h, vmrg.h, vmudh.h, vmul.h, vmulh.h, vmull.h, vmulm.h, vmuln.h, vor.h, vrcpsq.h, vrsq.h, vsub.h, vsubc.h and vxor.h. N64 RSP: Fixed LWV and VMOV behavior. Added reserved instructions V056, V057, V073 and VNULL. Removed unused DRC and SIMD support. General code cleanup [Ryan Holtz, krom].
- 0.216              : Added 32-bit opcode alignment for disassembly [AJR].
- 0.196              : Changed description to 'Nintendo & SGI Reality Signal Processor RSP'.
- 0.193              : Added cpu\rsp\rsp_dasm.h.
- 0.186              : Wrap PC to 12 bits in a few more places (cpu\rsp\rspdrc.cpp and rspfe.cpp) [Happy].
- 0.184              : Let debugger disassembly windows track RSP PC. Flush RSP drc cache when SP DMA changes IMEM (machine\n64.cpp). Make element selection in vector load/store DRC C functions consistent with other implementations (cpu\rsp\rspcp2d.cpp) [Happy].
- 0.180              : Moved the declaration of rsp_dasm_one() to a header file. Changed the RSP disassembler to use 'std::ostream &' internally. Eliminated 'rsp_dasm_one(std::string &string,...' trampoline [Nathan Woods].
- 0.164              : Removed cpu\rsp\rspcp2s.c/h. Added cpu\rsp\clamp.h, vabs.h, vadd.h, vaddc.h, vand.h, vch.h, vcl.h, vcmp.h, vcr.h, vdivh.h, vldst.h, vmac.h, vmov.h, vmrg.h, vmudh.h, vmul.h, vmulh.h, vmull.h, vmulm.h, vmuln.h, vor.h, vrcpsq.h, vrsq.h, vsub.h, vsubc.h and vxor.h. Removed RSP SIMD version. Merging in direct RSP vector opcodes from CEN64. Fixed remaining N64 issues on 32-bit (video\rgbgen.h). Added MCFG_FORCE_NO_DRC option (cpu\rsp\rspdrc.c). Clamp DMEM fetches to 4kb (cpu\rsp\rspcp2.h and vldst.h). Fixed CTC2 and VCH opcodes in RSP SIMD code (cpu\rsp\rspcp2.c) [MooglyGuy]. Make the align declarations GCC-compatible (cpu\rsp\rspcp2.h) [O. Galibert].
- 0.163              : Moved m_op member into a struct so it can be allocated in the DRC cache (cpu\rsp\rspcp2.c). Fixes MT05953: Crash/segmentation fault when running DRC (Linux only) [Wilbert Pol].
- 0.156              : Added cpu\rsp\rspcp2.c/h, rspcp2d.c/h and rspcp2s.c/h. Added destination address support to the BREAK opcode (cpu\rsp\rspfe.c). Abort MIPS timeslice when unhalting RSP. Fixes many RSP tests. Avoid setting the DP_FREEZE bit, gets Banjo-Kazooie to boot (machine\n64.c). Added VNOP, VNULL and VRSQ instructions (cpu\rsp\rspdrc.c). Fixed up how negative values are handled in VRSQL/VRCPL (cpu\rsp\rspdrc.c). Fixed left-shift-of-signed-value issues (cpu\rsp\rspfe.c). Added undocumented ops VADDB, VACCB, VSUBB and VSUCB (cpu\rsp\rspdrc.c). Made the RSP interpreter core functional again. Splitted RSP vector opcodes into separate files for interpreter, DRC and DRC + SIMD. Breaks interpreter mode for reasons yet unknown. Fixed RSP interpreter. Removed timeslice yielding when un-halting RSP, is causing hangs in various N64 games. Optimized accumulator access in multiply instructions (cpu\rsp\rsp.c and rspcp2d.c) [MooglyGuy]. Fixed crash on Linux when recompiling BREAK opcode (cpu\rsp\rspdrc.c) [MooglyGuy, Firewave]. Added command-line option -[no]drc_log_uml to control DRC UML disassembly logging. Allows logging of DRC UML disassembly without re-compiling / removes. DRCUML_OPTION_LOG_UML and all the core-specific LOG_UML defines (cpu\rsp\rsp.c). Added command-line option -[no]drc_log_native to control DRC native diassembly logging. Allows logging of DRC native disassembly without re-compiling, removes DRCUML_OPTION_LOG_NATIVE and all the core-specific LOG_NATIVE defines, added logging() to drcbe_interface and added logging_native() to drcuml_state. Added assert for e.g. n64 -cart waveracej crash in rsp_device::generate_checksum_block() (cpu\rsp\rspdrc.c). Fixed compiling with old (MESS) Apple GCC (hs and hl are unsigned int, and therefore cannot be < 0) (cpu\rsp\rspdrc.c). Fixed Visual Studio warnings about truncated constant and fixed Clang warning (cpu\rsp\rsp.c). Fixed "unresolved external symbol" with RSP during linking with Visual Studio [Oliver Stoeneberg]. Fix for compile on GCC 4.4.7 (cpu\rsp\rspcp2d.c) [Lord Nightmare].
- 0.155              : Added 'RSP' device. Modernised RSP cpu core [Wilbert Pol]. Fixed "error: zero-length gnu_printf format string" compile issue [Tafoid].
- 0.154              : Moved RSP to use DEVCB2 [Miodrag Milanovic].
- 0.153              : Silence excessive printf spam in RSP core with -nodrc [Justin Kerk]. Temporarily split all RSP functions into SIMD and scalar versions so that they can more easily be run alongside each other for the purposes of regression testing. Currently SIMD ops introduce some lighting issues, but only when a light and model are axis-aligned, which makes it remarkably difficult to track down based solely on comprehensive logging, so this will eventually allow for running the scalar version of the opcode after the SIMD one in order to deduce exactly which SIMD opcode is divergent. N64 RSP changes [MooglyGuy]: * Added SIMUL_SIMD flag for easy finding of bugs in SIMD opcodes. * Fixed SIMD versions of SSV, SLV, SDV, STV, VSUB, VADDC, VSUBC, and VGE. * Removed SIMD optimizations from VMACF, VMADL, VMADN, as they were provided by the CEN64 author but do not appear to have the same results as MESS's scalar implementations, and so are not trustworthy [MooglyGuy]. Compile fix since not all have SSE3 enabled [Miodrag Milanovic].
- 0.151              : RSP SIMD changes [MooglyGuy, Marathon Man]: * Converted high and middle accumulator slices into SIMD vectors. * Converted flag registers into SIMD vectors. * Fixed unaligned accesses in CFC2 opcode. * Added SCALAR_GET_VS1, SCALAR_GET_VS2, and SET_ACCUM_H/M/L to act as a passthrough to either the non-SIMD implementation or individual element insert/extract ops in order to minimize #if USE_SIMD all over the place. * Ported SIMD implementations of VMUDL, VMUDM, VMUDN, VMUDH, VMACF, VMACU, VMADL, VMADM, VMADN, and VMADH from CEN64 with permission. * Resulted in an overall speedup of approximately 50% for RSP-bound scenes on a 2.5GHz i5 [MooglyGuy, Marathon Man]. Fixed non-SIMD mode (cpu\rsp\rspdrc.c). Refactored N64 RDP blender to use function arrays in order to flatten inner-loop branch structures for potential performance. Broke blender steps into individual #defines in order to make the functional differences between RDP modes more apparent [MooglyGuy]. N64 RDP and RSP improvements [MooglyGuy, Marathon Man]: * Fixed an RSP DMA edge case when transfer count is greater than 1. * Refactored the RDP blender implementation to use function pointers rather than deep if/else structures in order to reduce branch prediction penalties in the inner software rasterizer loop. * Reduced the likelihood that bad triangle commands due to an RSP crash will crash MESS.
- 0.150              : Changed description to 'RSP DRC'. Made both DRC and Non-DRC compile for MIPS, RSP and SH2 core and added option to enable/disable DRC from command line (-drc -nodrc by default it's on). Added command line option to force DRC C backend (emu\emuopts.c) [Miodrag Milanovic].
- 0.149u1            : RSP SSE optimizations/changes [MooglyGuy]: Fixed load/store opcodes. Added SSE versions of the following opcodes: VMADH, VADD, VSUB, VADDC, VSUBC, VCH, VCR, VMRG, VAND, VNAND, VOR, VNOR, VXOR and VNXOR.
- 0.149              : Added USE_SIMD flag to RSP headers and began converting some opcodes to use SSE* intrinsics. Current plan is to target SSSE3-capable hardware (Core2 and up), with the resulting speedup theorized to be on the order of 5-10x when conversion is complete, though this applies only to situations where the emulation is heavily bottlenecked by the RSP. Turn off USE_SIMD. Added SIMD code for the rest of the RSP vector load instructions. Removed tmmintrin.h include from cpu\rsp\rspdrc.c [MooglyGuy].
- 0.147u2            : Made RSP core use callbacks (cpu\rsp\rsp.c, rspdrc.c and machine\n64.c) [Miodrag Milanovic].
- 0.145              : N64 DMA / RSP / RDP optimization and documentation [MooglyGuy]: Start of mass variable renaming / documentation in the RDP core. RSP Opt: Shunt around the core memory system for RSP instruction / data fetches. DMA Opt: Shunt around the core memory system for SP and PI DMA transfers. RDP Opt: Replace 2D switch statement with function table for texel fetching. Replace 3x array lookup for 16-to-32 pixel expansion with 64K LUT. Remove setters / getters in favor of direct member access. Mario 64 saw a speedup from 34.96% to 51.80% in -str 60 -mt on my 3.2GHz i7 and Tetrisphere from 30.75% to 43.05%; global speedup of 1.4x to 1.5x is expected.
- 0.141u1            : Harmony removed fast IMEM and DMEM handlers from the RSP DRC in favor of the core memory system; fixes RSP DRC on 32-bit targets. Fixed RSP core VRSQL implementation.
- 0.141              : Added cpu\rsp\rspdiv.h. Updated the RSP and RDP implementations to be largely bit-perfect and pixel-accurate [Angrylion, Harmony].
- 0.138u4            : Angrylion fixed RSP sign issue in VCL opcode. Allow the non-DRC RSP core to build again (controlled by a #define like the SH-2 core) [Atari Ace].
- 0.137u2            : Harmony reworked the entire Nintendo 64 renderer to be class-based. More cleanup to follow. Harmony disabled DRC versions of certain vector load/store operations in the RSP core in order to avoid geometry issues.
- 0.137              : Harmony performed an initial code cleanup pass on the N64 rendering code to make use of booleans and inline variable instantiation, and removed a number of unused variables that were exposed as a result of the latter.
- 0.136u1            : RSP DRC changes [Aaron Giles]: Fixed misaligned 32-bit accesses. Disabled DRC_SQV implementation as it breaks music in Magical Tetris Challenge. Converted RSP callbacks into device callbacks. Removed a ton of tag-based queries in favor of using the device passed. Added profiler_mark() calls around rdp_process_list() so that the RDP time is separated from the RSP time.
- 0.136              : Harmony converted a number of vector opcodes to the RSP DRC core, unrolled and optimized a number of vector opcodes in the interpreter RSP core and fixed a few DRC-ized vector load/store opcodes in the RSP core. Aaron Giles re-implemented misaligned memory handling in the RSP DRC as before and explicitly sign-extend 32-bit indexes for load/loads/store on 64-bit machines to prevent overflow issues. Fixes DRC crash in 'Magical Tetris Challenge'.
- 0.135u4            : Added cpu\rsp\rspdrc.c and rspfe.c/h. Preliminary RSP recompiler, with all vector ops stubbed out to C functions for now [Harmony]. RSP recompiler improvements / optimizations [Harmony]: Split SATURATE_ACCUM into a signed and unsigned version to reduce stack usage. Correct an issue with the 0h variants of VMRG, VAND, VNAND, VOR, VNOR, VXOR and VNXOR. Slightly optimized unaligned reads and writes. Optimized unaligned dword reads. Correct an issue where badly-written RSP programs could jump to invalid addresses.
- 0.135u1            : Angrylion added missing BLTZAL opcode to the RSP core.
- 18th February  2009: MooglyGuy - I've decided to take a short break from working on renderer issues, insofar as pretty much every single game that doesn't run into some sort of bug lurking in machine\n64.c or some sort of MIPS CPU bug has largely correct graphics. The few games that do run up to a machine\n64.c-related bug or MIPS CPU bug also have largely correct graphics. Barring a few exceptional cases, these games would be playable if not for the aforementioned bugs and/or performance. Since I am not quite familiar enough with the N64's non-graphical functions to be comfortable bug-hunting in those realms, for now I'm going to concentrate on performance. Using MAME's built-in profiler to determine CPU load distributions across the main CPU, RSP, and everything else (mainly the RDP), I can break the games down into four categories: * Untestably broken: These games include Indiana Jones, Battle for Naboo, Conker's Bad Fur Day, Banjo-Kazooie, Banjo-Tooie, Donkey Kong 64, Mario Party 3, Paper Mario, Perfect Dark, Goldeneye, Yoshi's Story, Gauntlet Legends, Turok - Rage Wars, and I'm sure plenty of others. Games that don't show a single thing in MESS before running off into the weeds. * 2D Games: These games largely only use the RSP for audio processing, and limit their use of the RDP to things like Textured Rectangle commands. As a result, performance data indicates the RDP as being the main bottleneck for them. These games include Bust-A-Move 2: Arcade Edition and Bust-A-Move '99. * 3D Games: These games use the RSP to do a whole bunch of vector calculations, and use the RDP as much as they want. These are the majority of games, and include Super Mario 64, Mario Kart 64, Army Men: Sarge's Heroes, Tetrisphere, The Legend of Zelda: Ocarina of Time, Kirby 64: The Crystal Shards, Madden 64, and Aidyn Chronicles: The First Mage. * Namco Museum 64: This game is Namco Museum 64. It does not use the RSP at all and does not use the RDP at all. It shoves PCM data out the stereo DAC by way of the main CPU, and it uses the N64's entire video system for nothing other than a framebuffer. As a result, it runs at around 160% when unthrottled, compare with 10% unthrottled for most 3D games and 25% unthrottled for most 2D games. It is the only game of its kind that I know of. In order to more accurately nail down the performance of 3D games, I've run a profile on three games: Castlevania, Tom & Jerry: Fists of Furry, and Super Mario 64. Unsurprisingly, due to the immensely small number of different microcodes that were ever used on the N64, the code profiles look largely the same. The percentages listed are the percentage of execution time spent in each function, not including children. As I see it, the first priority is to convert the RSP core over to use MAME's DRC system. Unfortunately, I'm not quite sure what sort of performance increase will be seen by DRC-ifying the RSP. The VMAC* and VMUD* opcodes have a rather large amount of code associated with them, and not only that, they loop 8 times across 8 elements. This was probably accomplished in parallel on the real RSP. Another piece of low-hanging fruit is the fact that around 10% of the execution time is taken up by memory accessors thanks to the RSP's less-than-optimal IMEM and DMEM implementation. The RSP has to hit the memory system for every single read and write that it does. However, in reality IMEM and DMEM are accessed far, far less often by the main CPU than they are by the RSP itself. It therefore makes better performance sense to have two 4kbyte arrays central to the RSP core itself, which it will access directly rather than going through MAME's core memory accessors. The main CPU will be able to access these memory spaces by querying the RSP core, and any RSP DMA accesses can be done by simply grabbing a pointer into the RSP's IMEM or DMEM arrays, just like it works now. Lastly, the plan is to wire the RDP emulation up to MAME's "work unit" system, which will allow it to distribute drawing commands across multiple CPU cores when available. Unfortunately, the RDP being as slow as it is, it will likely not have too terribly much of a performance impact on my laptop, but it might improve in the situation of a quad-core CPU. Anyway, that's the main plan. Here's hoping I can stick to it.
- 31st January   2009: MooglyGuy - I finally decided to figure out why the scene geometry in The Legend of Zelda: Ocarina of Time is so screwed up. As it turns out, RSP DMA transfers should have their length rounded up to the next 8 bytes, not the next 4. Since it's kind of hard to get the dramatic change across with still shots, I broke out the -aviwrite parameter and uploaded a couple of videos to YouTube.
- 0.128u6            : Pointer-ified the RSP CPU core [Aaron Giles].
- 0.122u7            : RSP Changes [SGINut, Nicola Salmoria, Ville Linde]: Initialize RSP registers to 0 in lieu of mame_rand. Re-fix RSP single-stepping mode when set by another CPU. Reading the RSP PC returns only the least significant 12 bits. Fixed flag behavior when read out via CFC2. Fixed RSP VRCP instruction to match the real hardware results. Correct VRCP element lookup. Correct unaligned DMA behavior.
- 16th January   2008: MooglyGuy - One Step Forward and No Steps Back. A couple new discoveries: * The RSP's registers power up to a random state, excluding accumulators, which are initialized to zero. * The RSP executes exactly one instruction before kicking into single-step mode, rather than immediately changing modes. What's next? Who knows!
- 0.122u6            : Minor RSP fixes [SGINut]: Fixed accumulator state on powerup by testing against real hardware. Fixed single-step behavior by testing against real hardware.
- 0.121u2            : More formally separated the RSP core from the N64 driver [Atari Ace].
- 26th August    2007: MooglyGuy - Making progress on the RSP probe. Over the past few days I've been putting the polishing touches on the user interface for the RSP Probe section of the test suite; the only remaining task is to write the actual probe code itself. This isn't as absurd as it sounds; in fact, the probe code will be rather elementary, as I've already written standalone versions to test individual opcodes, and by and large it'll be a copy/paste job. The most difficult issue so far has been how to present the appropriate amount of data to the user for tweakage. The main issue with regards to the interface was how to deal with series of flag-affecting opcodes. I hadn't thought of this until I looked at opcodes on an individual basis, but there are some ops where the behavior is dependent on the compare, carry, or zero flags when entering the instruction, and can subsequently modify those flags for further use. As it turns out, the maximum number of chained instructions is around three, so it was a simple matter of having three opcode selectors that are enabled and disabled when the appropriate opcode is selected in the selector before it.
-  6th July      2007: MooglyGuy - I've started to work on RSP Probing. This is somewhat of a challenge from a user interface standpoint; previously, any testing was done by me hand-assembling RSP instructions and surrounding them with the appropriate MTC2, ADDI (to tweak the numeric parameters) and branch opcodes, converting the resulting binary into a header file containing an array of 4096 pre-defined bytes, and then recompiling the probe. In this case, I have to find some way of encapsulating that behavior into a pretty interface so that the end user doesn't have to recompile the probe every time he or she wishes to test a new opcode. My current plan of action is to let the user select the following parameters: 1. Opcode to test. 2. Vector parameter increment values for parameters 0 through 7. 3. Start and end values. 4. Load address and load values (for vector-load opcodes). 5. Store address (for vector-store opcodes). One issue to which I am acquainted is the fact that some vector opcodes use one vector as an input parameter, whereas others use two vectors. Some opcodes load a vector's parameters from DMEM, others store the parameters into DMEM. What I'm considering is having the probe simply fill the secondary input vector with parameters in the reverse order as the primary input vector in the case of opcodes that have two input vectors. The planned method for handling load and store opcodes is to have the necessary additional user-tweakable parameters appear when the user selects the relevant opcodes on the opcode toggle. This is going to be a bit of a pain, in that it will tax the UI framework that I've put together for the probe, but it shouldn't be anything that I can't handle.
-  5th July      2007: MooglyGuy - I've drawn up a basic block diagram of the N64's architecture. 1. RCP - Reality Central Processor. MIPS chip model R4300. Clocked at approximately 94MHz, with 16kbytes of instruction cache and 8kbytes of data cache (though the listed cache sizes are questionable). Integrates standard COP0 (MMU) and COP1 (FPU) modules. 2. RDRAM - The Nintendo 64's base configuration contains 4Mbytes of RDRAM located at the expected place in KUSEG, KSEG0 and KSEG1. An additional 4Mbytes is mapped directly after the first 4Mbytes if the user has a memory expansion pack inserted into the memory expansion slot. 3. RSP - Reality Signal Processor. Depending on how you look at it, it's either a standard MIPS chip on testosterone or a standard MIPS chip on an antiandrogen. It was designed specifically to handle display lists and audio lists. Its status is partially accessible by the RCP as COP2. The RSP has no MMU or FPU; COP0 access maps to the RDP (4)'s status and command buffer, COP1 does not exist, and COP2 maps to a custom vector instruction set designed specifically for the Nintendo 64, though it is rumored that the instruction set is the predecessor to the VICE multimedia extensions found in the Silicon Graphics O2 workstation. The RSP's vector extensions give the RSP an additional 32 vector registers; each register is 128 bits wide, made up of eight 16-bit fixed-point values that are accessible in various combinations based on bitfields present in the vector-specific instructions. The vector registers can also be accessed manually via MFC2 and MTC2 instructions. In addition, there are eight 64-bit-wide accumulator registers that are accessible only through individual vector-related instructions. To call the RSP's memory architecture bizarre would be an understatement; its instruction cache (8kbytes) and data cache (8kbytes) have been repurposed into the only memory accessible to the RSP. Furthermore, the RSP uses Harvard architecture, limiting data fetches to DMEM and instruction fetches to IMEM. Both IMEM and DMEM are mapped into the RCP's memory space; both the RCP and RSP may initiate DMA transfers to and from RDRAM, and the RCP can manually access the RSP's memory area, though manual access is subject to caching. In both this respect and the additional vector instructions, the RSP can be likened to one of the Playstation 2's VU1 or one of the Playstation 3's SPUs. I could provide more information, but this entry is already quite long, so if any further information is desired, drop me a line at my above-listed locations. 4. RDP - Reality Display Processor. This is what handles most - not all - graphical capabilities for the Nintendo 64 (more on that in a moment). It pulls 64-bit-wide command packets from either RDRAM or RSP DMEM depending on a bit in its status register. Command packets can range from a single 64-bit word (Full Sync, Sync Pipe, Set Color Image, Load TLUT, et cetera) to 22 words (Triangle with Gouraud, Texture and Z-Buffering). While it is not as fast in terms of fill rate as the Playstation 1's GPU, it makes up for it in feature richness. It supports significantly more texture formats than either the Sega Saturn (which is ostensibly not a 3D system, anyway) or the Playstation, including YUV16, Intensity (grayscale texture tinted by a specified primitive color, useful for particle effects) and Intensity with Alpha. It features a four-parameter color combiner which implements the equation (A - B) * C + D separately for both RGB and Alpha, as well as four-parameter blending with optional two-cycle mode (with the expected throughput penalty, of course); in fact, the Color Combiner is sufficiently advanced that outside of software rasterization, one needs full pixel shader support in order to fully emulate its features. The RDP's framebuffer and Z buffer are stored directly in RDRAM. 5. VI - Video Interface. It's fairly unremarkable, as it is designed to be. It handles low-level signal generation, allowing framebuffer origin, color burst, horizontal sync, vertical sync, and other signal-related parameters to be tweaked to the engineer's liking. More usefully, it is worth noting that since the framebuffer is memory-mapped instead of being in a separate CPU-inaccessible region of memory as with the Playstation 1, framebuffer effects are a cinch. 6. Cartridge Memory - This is worth noting, as the cartridge is mapped at 0xb0000000, not 0xbfc00000. In fact, a cartridge is not bootable. The Nintendo 64's Peripheral Interface contains four kbytes of embedded ROM which is initially mapped into memory, but becomes invisible after a certain (as yet unknown) number of cycles. Its job is to perform initial handshaking with the security IC on a cartridge, then subsequently perform a DMA transfer to move a specific portion of the cartridge's memory into KSEG0, at which point the RCP jumps to 0x80000400. While the RCP can access cartridge memory directly, it is much more efficient to simply perform a DMA transfer as necessary. 7. RSP Access - This is labeled simply because of the multitude of ways that the RCP and RSP can communicate. First and foremost, the RCP can read and write the RSP's status registers - including PC. The main status register for the RSP has eight semaphores that serve specifically as a way to communicate without having to yank a full interrupt on the RCP. As mentioned in section (3), the RSP's IMEM and DMEM ranges are accessible from the RCP as well, but are subject to caching. Lastly, both the RCP and RSP can initiate a DMA transfer of IMEM, DMEM or both ranges. Hopefully this provides some insight into the strange, convoluted world that is the Nintendo 64.
- 0.116u3            : Christophe Jaillet fixed type in BLENDER2_32 function in the N64 video code.
- 0.115u1            : Some RSP opcodes bugfixed plus should work on big-endian targets [Ryan Holtz].
-  4th May       2007: MooglyGuy - I've been thinking of writing a complete test tool for the Nintendo 64 hardware. As it is currently planned, the test tool will have the following features: 1. Memory Probe: View memory (U8 / U16 / U32 / S8 / S16 / S32 / Float), Write memory (U8 only) and Memory Playback - build a list of addresses and values that will be written to in one go. Useful for triggering a DMA transfer or other event that requires multiple register accesses acros a short period of time. 2. RSP Probe: Harness for hooking up a C-based RSP core for parallel testing. Pull register contents into main memory for viewing. Direct read/write access into IMEM and DMEM via the Memory Probe. Manual single-step and Program Counter control. 3. RDP Probe: RDP packet constructor. Choose packet type from a verbal list. Set named parameters rather than arbitrary 32-bit words. RDP packet playback; playback a sequence of packets transcribed by MAME, or your own emulator if you conform to the same specification.
-  6th April     2007: MooglyGuy - She'll Dance: At first, I was under the impression that it would take a prohibitive amount of time to comprehensively test the reciprocal and reciprocal square-root functions due to the fact that VRCPH/L and VRSQH/L operate on 32-bit operands, and it takes long enough to do a test run of a standard single-element opcode. Initial estimates based on 8 hours for a 2^14-iteration test on a given opcode resulted in a rough guesstimate of approximately 60 years(!) to run through all possible values for both VRCPH/L and VRSQH/L. However, whilst daydreaming at work today, I hit upon the notion that it might enter the realm of feasibility if I were to cut out the main two bottlenecks - most notably the full register mirroring, opcode-level interleave, and general emulation of the full RSP. With that in mind, I went about writing a very short function to populate the entirety of DMEM with a given span of 0x800 reciprocal values, and a custom function to calculate what the emulator would generate based on simply copy/pasting the single opcode's source into a for loop. Amazingly, this managed to reduce the time domain from taking on the order of 32 hours to test all 2^16 input values for an opcode to two seconds. At this point, it appears that a conservative estimate would be approximately 24 to 48 hours to test all possible values of VRCPH and VRCPL. Since I do not currently have a DexDrive or memory pack, I will be dumping all discrepant values to the screen and transcribing them - not anywhere near as Sisyphean a task as transcribing all values in their entirety. With that, I leave you with a snapshot of the first page of values for me to transcribe.
-  5th April     2007: MooglyGuy - Theatre of the Macabre: Several points to touch upon: As it turns out, the massive geometry corruption in the Zelda games as well as Diddy Kong Racing and Mickey's Speedway is due to unaligned DMA. Apparently this is causing trashed display lists to be sent, which is naturally a bad thing. This is likely due to a CPU core bug, though I will be writing a separate probe program to test behavior when performing unaligned DMA anyway. As it turns out, my initial fix to VRCP was only a fix for the gross inaccuracy in looking up the appropriate element. After extended testing, it has been discovered that some values will occasionally generate a result that is very slightly different between the N64 and emulated RSP, for no apparent reason. For a solution, see the point below. An anonymous contributor has suggested simply dumping out full tables for all values that VRCP, VRCPH/VRCPL, VRSQH and VRSQL can generate, storing the results on a memory pack which can then be read on the PC via a DexDrive. However, one point I failed to note during the discussion was that while VRCP works with a single 16-bit element, VRCPH/L and VRSQH/L utilize two 16-bit elements to form a 32-bit value. Hence, full tables would be prohibitive in size. However, a viable alternative is to store a table (presumably much smaller) of only those values that differ between cores. It's a hack, granted, but it still results in the proper effect.
- 31st March     2007: MooglyGuy - New Math: A few new test items this afternoon: Opcode / Description / Status: VADD - Vector - Add Pass (tentative); VSUB - Vector Subtract -> Pass (tentative); VABS - Vector Absolute Value -> Pass (tentative); VADDC - Vector Add w/ Carry -> Pass (tentative); VSUBC - Vector Subtract w/ Carry -> Pass (tentative) and VRCP - Vector Reciprocal -> Fixed. I'm tentatively marking VADD*/VABS/VSUB* as passing - it's run through about 4% of the test suite values right now, but typically if it hasn't failed by now it's not going to. Addendum: It just occurred to me that I should probably mark VSAW (Vector Store Accumulator Word) as passing as well. I use it to transfer the accumulators into a vector, which I then write to DMEM, in the register-transfer function of the RSP probe. Since the transfer function works on both the N64 and MESS, it's an incidental test, so it's obviously fine.
- 31st March     2007: MooglyGuy - Shave and a Haircut: The clipping operations seem to check out: Opcode - Description - Status: VCL - Vector Clip -> Low Pass; VCH - Vector Clip High -> Pass and VCR - Vector Clip Reverse -> Pass. Also, it would appear that there's some confusion with regards to what I'm currently doing, due to an update that I failed to post: I found out what was preventing the patched core from working, so I am now back to testing individual opcodes against the Nintendo 64 itself.
- 30th March     2007: MooglyGuy - Discordianism: A hodge-podge of opcode updates: Opcode - Description - Status; VAND - Vector AND -> Pass; VNAND - Vector Not AND -> Pass; VOR - Vector OR -> Pass; VNOR - Vector Not OR -> Pass; VXOR - Vector Exclusive OR -> Pass; VNXOR - Vector Not Exclusive OR -> Pass; VCL - Vector Clip Low -> Pass; VCH - Vector Clip High -> Pass and VCR - Vector Clip Reverse -> Pass.
- 30th March     2007: MooglyGuy - The Programmer's Stone: Latest opcodes to undergo testing: VRSQL / VRSQH: Vector Reciprocal Square-root Low/High. First verified inaccuracy. Shouldn't subtract the destination element off of 7 when looking up the destination element, just use the value encoded in the opcode. VRCPL / VRCPH: Vector Reciprocal Low/High. Same issue.
- 24th March     2007: MooglyGuy - Wonder Twins: I probably should have done this after first applying it, but I have discovered that the patch that made the RSP core endian-independent also managed to prevent any games from working now. With that in mind, I am currently bolting the original, endian-dependent RSP core onto the new, endian-independent RSP core, without actually making it a separate CPU core. Before each opcode is executed, it will synchronize the bolted-on RSP's data memory (hacked into a separate array) with the main RSP data memory, and after each opcode, it will compare the separate fake DMEM and register state with the endian-independent RSP's DMEM and register state. If there's a desync, it will fatalerror, and inform me of the current Program Counter so that I can see what opcode I need to fix in the endian-independent core. Simple, right?
- 24th March     2007: MooglyGuy - Irrational Exuberance => VMULF: Pass
- 24th March     2007: MooglyGuy - Electric Avenue: At the moment, VMULF is undergoing unit testing. It consists of loading s0 with a value, then loading it into each of the elements in v1 and v2, then executing VMULF v0, v1, v2. This will load v0 with v1 * v2 * 2. The current test harness loads s0 with 0 and subsequently adds 0x0011 to s0 with each iteration. This strikes me as a fair enough balance between comprehensiveness, given that running 65536 iterations would be prohibitive, whereas 3855 iterations (0xFFFF / 0x0011 = 0x0F0F) is comprehensive enough, ensures that the elusive 0xFFFF edge case will be tested, and is still quick enough to be able to run to completion through the night. As I type up this entry, it's up to 0x2222. Hopefully, by tomorrow morning, it will still be running, and will have rolled over!
- 18th March     2007: MooglyGuy - 1 In 10 Will Enjoy It: Well, the RSP probe seems to be working. Hooray! I've highlighted the registers and their corresponding positions in vector register 0. It'd reflect the lower 16 bits of r16 through r23, but as you can see, the registers were in the middle of updating when I snapped the picture. I ended up having to implement a couple of workarounds. First, you'll notice that there appears to be a lot of strange contents in the registers. That's because the RSP's registers are in a randomized state on powerup. For what it's worth, though, they appear to be in the same random state every powerup, so theoretically it would be a trivial matter to emulate them with such values. For now, though, I put in a workaround such that it first copies the real registers into the emulated registers so as to not throw a spurious mismatch. Secondly, single-stepping mode does not handle jumps gracefully, and so I've made it so that the prober does not attempt to run the register-copy function if the RSP is in the middle of a jump. Anyway, now it's pretty much on the eminent Ville Linde to write the proper probe code rather than the rudimentary test data that I'm using. Still, good stuff all around.
- 16th March     2007: MooglyGuy - Alas, Poor Yorick: Well, the Doctor V64 arrived, and it works perfectly. The RSP probe, on the other hand, does not. I've commented out everything that tries to touch the RSP directly, leaving it just emulating the RSP and updating the display on-screen, but even then it just gives me a black screen. I'll be damned if anything is occurring to me immediately offhand as to what the problem could be, given that the demonstration program that hcs includes with alt-libn64 works fine, and I've made only minimal modifications to its functionality. Ah well, I'll take a look at it after a touch of WoW. Yeah, I know.
-  9th March     2007: MooglyGuy - Highway To Hell: Actually, it's faux-failure - I intentionally induced an error in the CPU core to make it fail. It will automatically dump out any mismatching GPRs, vector registers and accumulators that do not match, as well as their previous states (which is admittedly redundant to display twice) and the twin program counters (emulated and real) onto the screen for easy debugging. The next step, as I wait for the Doctor V64 to arrive from the UK, is to add other functionality such as being able to page through a display of the entire register set after a mismatch. In addition, yesterday I found the first - arguably most important for the trojaning effort - thing to figure out about the N64's hardware: how the RSP handles setting the program counter while handling a branch in single-step mode. Think about it: The RSP single-steps through a branch, but there is still another instruction to be executed immediately after. While the RSP is halted, you set the PC to be elsewhere. What happens? We shall see.
-  6th March     2007: MooglyGuy - That's A Big Twinkie: What is shown in that picture is an emulated N64 displaying the register contents of an emulated RSP being emulated on that emulated N64, the RSP having just run a short bit of code. For all intents and purposes, I now have a program which can conceivably run test code on a real Nintendo 64. I expect once the Doctor V64 is in my possession that it won't run on a real Nintendo 64, because that's how my luck has been. However, for now, take comfort in the thought that perfect RSP emulation may soon be a reality.
-  3rd March     2007: MooglyGuy - The Late Night Double-Feature Picture Show: I managed to optimize the register usage of the RSP register-transfer function. My original plan was to limit unit testing to vector operations only, but in the event that a full test is ever desired, it should now be possible to test all instructions' effects on all general-purpose registers except one (t0) now. I've hard-coded the register-display function to show "0xdeadbeef" for registers that can't be tested. I suppose marking r0 as untestable is a bit unfair, but there's just not a whole hell of a lot to test.
-  3rd March     2007: MooglyGuy - Baby Steps: A couple new developments. First of all, thanks to an anonymous donator, I will soon be in the possession of a Doctor V64 unit with which I can run test code on a real N64 - this is when the magic starts to happen. The current plan of attack for probing the behavior of the RSP is to directly port MAME's current RSP core to the N64 itself, and to run the emulated RSP in lockstep with the real RSP, verifying the vector register contents after each instruction (it can be safely assumed that non-special opcodes are in good condition already). According to documentation, the RSP has facilities for running in single-stepping mode such that it will automatically halt after executing one instruction, though I have not heard any verification as to whether or not this works as expected. Second of all, the prober is slowly starting to take shape. The first step, getting a C compiler running that can cross-compile for the N64, has taken place. Currently all the test code does is pull values from the area of RSP DMEM that I have reserved for the RSP-side code to copy the vector registers, but the hard part (getting a viable C compiling environment and the ability to display text on-screen) is done. The next step, over the next day or two, will be for me to graft MAME's RSP core into this new codebase, but that should be reasonably simple.
- 24th February  2007: MooglyGuy - Jiggery-Pokery: First up, thanks to some help from pinchy, the N64 driver in MESS 0.113 should boot via a proper PIF ROM dump rather than the faking it (and most N64 emulators) currently use. Apparently it's been floating around for a while now, but nobody knew how to hook it up right. If you don't understand what I just said, then you are probably the same kind of person who loves UltraHLE and drove an emulation-savvy acquaintance of mine into hiding, so go do some Googling, then come back. After making a particular opcode, 0x7C1C97C0, recompile as a NOP rather than not recompile at all, Legend of Zelda: Ocarina of Time boots right up and looks ugly as sin. Legend of Zelda: Majora's Mask also boots right up. However, I think that this is an incorrectly-named dump. It is, in fact, a dump of "The Adventures of Link in Bizarro RSP Land and the Quest to Buy MooglyGuy a Doctor V64 so that He and Ville Can Fix the Damn Thing". Diddy Kong Racing boots, but dies on an unaligned RSP DMA: sp_dma (RSP): sp_dram_addr unaligned: 0021DB86. Jet Force Gemini runs through its initial loading screens, and then is polite enough to inform me that the RSP has managed to crash. As for the rest of the CIC-6105 games that I know of offhand, Donkey Kong 64, Perfect Dark and Banjo-Tooie simply do nothing. Conker's Bad Fur Day, in keeping with its bad-boy reputation, feels the obligation to make MESS segfault. Mickey's Speedway USA, as if anyone needed any more proof that it's based on the Diddy Kong Racing engine, also dies with an unaligned RSP DMA: sp_dma (RSP): sp_dram_addr unaligned: 002A7DBA. If anyone wishes to see snappier progress on the N64, I would highly advise purchasing a Doctor V64, V64jr, or CD64 unit for myself, Ville Linde, or both of us. Or you could keep waiting around for Project 64 1.7, which will be out shortly after I have grown old and died.
- 0.109u5            : Aaron Giles converted the RSP disassemblers to the new format and added step in/out support where it was obvious.
- 0.105u4            : Nintendo 64 system improvements [Ville Linde, Ryan Holtz]: Fixed a major bug in the RSP core. Rewrote the PIF handling. Slightly improved triangle rendering.
- 0.105u1            : R. Belmont split out some of the Nintendo 64 core pieces into MESS-shareable modules.
- 0.104u6            : Added cpu\rsp\rsp.c/h and rsp_dasm.c. RSP CPU core [Ville Linde]: Major update to the Aleck64 driver. Still not fully working yet.
- NOTES: The Nintendo/SGI Reality Signal Processor (RSP) is depending on how you look at it, it's either a standard MIPS chip on testosterone or a standard MIPS chip on an antiandrogen. It was designed specifically to handle display lists and audio lists. Its status is partially accessible by the RCP as COP2. The RSP has no MMU or FPU; COP0 access maps to the RDP (4)'s status and command buffer, COP1 does not exist, and COP2 maps to a custom vector instruction set designed specifically for the Nintendo 64, though it is rumored that the instruction set is the predecessor to the VICE multimedia extensions found in the Silicon Graphics O2 workstation. The RSP's vector extensions give the RSP an additional 32 vector registers; each register is 128 bits wide, made up of eight 16-bit fixed-point values that are accessible in various combinations based on bitfields present in the vector-specific instructions. The vector registers can also be accessed manually via MFC2 and MTC2 instructions. In addition, there are eight 64-bit-wide accumulator registers that are accessible only through individual vector-related instructions. To call the RSP's memory architecture bizarre would be an understatement; its instruction cache (8kbytes) and data cache (8kbytes) have been repurposed into the only memory accessible to the RSP. Furthermore, the RSP uses Harvard architecture, limiting data fetches to DMEM and instruction fetches to IMEM. Both IMEM and DMEM are mapped into the RCP's memory space; both the RCP and RSP may initiate DMA transfers to and from RDRAM, and the RCP can manually access the RSP's memory area, though manual access is subject to caching. In both this respect and the additional vector instructions, the RSP can be likened to one of the Playstation 2's VU1 or one of the Playstation 3's SPUs. I could provide more information, but this entry is already quite long, so if any further information is desired, drop me a line at my above-listed locations.
- DRIVERS: aleck64.cpp
- SOURCE: cpu\rsp\rsp.cpp



11.9   RCP
- 18th January   2008: MooglyGuy - I seem to have discovered a fairly major issue in the way MAME indexes the elements in the VRCP opcode versus the way the real N64 indexes them. Running a very simple test on VRCP with 0001 as the first word in V[0] and 0000 as the remaining words, here are the results of various combinations of element parameters and VS1REG parameters in MAME (see http://www.moogle-tech.com/smf/index.php?topic=4.0). Quite a bit different. For what it's worth, I'm pretty sure that this can be fixed by replacing the assignment of sel in VRCP, VRCPH and VRCPL simply with "EL & 7" rather than the convoluted "VEC_EL_2(EL, del)". The only testing I did was to make that modification in MAME and then run Mario 64 and Mario Kart 64; neither was broken any worse than before, but neither was fixed any more than before either - I'd do more comprehensive testing, but I'm heading to bed immediately after posting this because I'm fricking exhausted.
- NOTES: The Reality Central Processor (RCP) is a MIPS chip model R4300. Clocked at approximately 94MHz, with 16kbytes of instruction cache and 8kbytes of data cache (though the listed cache sizes are questionable). Integrates standard COP0 (MMU) and COP1 (FPU) modules.



11.A   RDP

- 0.253              : Simplified N64 RDP disassembler. Removed all snprintf and reduced duplication (nintendo\n64_v.cpp) [Erik Newton]. More const [Vas Crabb]. Made out-of-range shift deterministic. Matches the SSE and VMX implementation. Fixes obvious rendering artefacts with the N64 RDP on AArch64 targets (emu\video\rgbgen.h and emu\validity.cpp) [Invertego].
- 0.235              : N64 RDP: Fixed incorrect channel swapping on 32-bit resampled framebuffers. Temporarily adjusted framebuffer resampling to not exceed screen bounds in some games [Ryan Holtz].
- 0.184              : Added short delay between RDP full sync and DP interrupt, allowing RSP IRQ to arrive first. Fixed a minor issue with RDP disassembly listing for Load Block (video\n64.cpp) [Happy].
- 0.183              : Added video\pin64.cpp/h. Added PIN64 logger class. Make N64 RDP use uint64_t types for commands [Ryan Holtz].
- 0.174              : Changed video\rdpfiltr.inc to rdpfiltr.hxx.
- 0.165              : Make video\rdptpipe.c slightly more efficient [MooglyGuy, Andrew Gardner].
- 0.164              : Merged video\rdpspn16.c with video\n64.c. Fixed most N64 visual bugs from new RDP SSE code (video\rgbgen.h, rgbsse.h, rgbvmx.h) [MooglyGuy].
- 0.163              : Fixed graphical bugs with recent N64 opts. Work on making blending and combining use color_t instead of UINT8 pointesr (video\n64.c, rdpblend.c and rdptpipe.c) [MooglyGuy].
- 0.162              : 50% RDP speedup on an i7-5930K (video\n64.c and rdpspn16.c). Improved blender performance (video\rdpblend.c). Make code style consistent and make mostly const-correct. Improved RDP speed by eliminating some unneeded code. Removed threaded waits to increase performance (video\rdpspn16.c). Improved texture filtering performance in the RDP [MooglyGuy].
- 0.156              : Do LOD calculation even in 1-cycle mode. Fixes many tests (video\rdptpipe.c) [MooglyGuy]. Added fatalerror for unsupported FBSize in RDP (video\rdpspn16.c). Happens with e.g. (MESS) n64 -cart blastcrpu1. Enabled the RDP range checks by default for now (video\n64.h). This reports some out-of-bounds accesses only ubsan would report otherwise - happens with e.g. (MESS) n64 -cart nbaliv99u. Added another check for unsupported FBSize. Happens with (MESS) n64 -cart sbowlingj (video\rdpspn16.c). Added assert for usage of uninitialized stack memory in n64_rdp::SpanDraw1Cycle(). Happens with e.g. n64 -cart vprowrs2 - it actually already goes out of bounds in poly_manager::render_triangle_custom() but since that code is generic it's hard to add an assert there / also added another FBSize check (video\n64.c and rdpspn16.c) [Oliver Stoeneberg].
- 0.151              : Added video\rdpbhelp.h. N64 RDP and RSP improvements [MooglyGuy, Marathon Man]: * Fixed an RSP DMA edge case when transfer count is greater than 1. * Refactored the RDP blender implementation to use function pointers rather than deep if/else structures in order to reduce branch prediction penalties in the inner software rasterizer loop. * Reduced the likelihood that bad triangle commands due to an RSP crash will crash MESS.
- 0.148u2            : Fixed uninitialized memory in mame\video\n64.h [Oliver Stoeneberg].
- 0.145u1            : Removed video\rdpfb.c/h, rdpspn16.h and rdptri.h. Ryan Holtz added polynew.h multithreaded-render support to N64 RDP emulation. Speedup ratios of 1.6x to 2.8x observed. Note: For those interested in that sort of thing, I'm achieving thread safety using the slow-but-sure method: Mirror all main-thread-mutable and render-thread-readable data into a per-span structure. If anyone has any suggestions on how better to sync per-scanline state than what I'm currently doing, I'd be all ears. The renderer is now pretty darn fast, but every little bit counts.
- 0.145              : N64 DMA / RSP / RDP optimization and documentation [MooglyGuy]: Start of mass variable renaming / documentation in the RDP core. RSP Opt: Shunt around the core memory system for RSP instruction / data fetches. DMA Opt: Shunt around the core memory system for SP and PI DMA transfers. RDP Opt: Replace 2D switch statement with function table for texel fetching. Replace 3x array lookup for 16-to-32 pixel expansion with 64K LUT. Remove setters / getters in favor of direct member access. Mario 64 saw a speedup from 34.96% to 51.80% in -str 60 -mt on my 3.2GHz i7 and Tetrisphere from 30.75% to 43.05%; global speedup of 1.4x to 1.5x is expected. R. Belmont fixed memory stomp in latest N64 video (video\n64.c and rdpspn16.h) and DK64 crash (video\rdpspn16.c). R. Belmont fixed memory stomp in latest N64 video (video\n64.c and rdpspn16.h) and DK64 crash (video\rdpspn16.c).
- 0.141              : Harmony fixed alpha compare in the N64 RDP implementation. Updated the RSP and RDP implementations to be largely bit-perfect and pixel-accurate [Angrylion, Harmony].
- 0.137u2            : Removed rdpacomp.c/h, rdpacvg.c/h, rdpcc.c/h, rdpclamp.c/h, rdpmask.c/h, rdpshift.c/h, rdpzcomp.c/h, rdptri.c and rdpupd16.c. Harmony fixed some massive texturing issues in the new Nintendo 64 / RDP renderer. Improved Rectangle drawing in the RDP core.
- 0.136              : Added rdpcc.c/h, rdpclamp.c/h, rdpfrect.c/h, rdpmask.c/h, rdpshift.c/h, rdpupd16.h and rdpzcomp.c/h. Harmony optimized RDP implementation further with more flattened branches.
- 0.135u4            : Added video\rdpacomp.c/h, rdpacvg.c/h, rdpfb.c/h, rdpfetch.c/h, rdpspn16.c/h, rdptpipe.c/h and rdptrect.c/h. Optimized N64 RDP renderer by using function pointers to function variants that eliminate costly branches [Harmony].
- 0.135u2            : Angrylion fixed RDP TMEM size, removed separate tlut and fixed tlut uploads.
- 0.135u1            : Many N64 RDP fixes [Angrylion, Ziggy, Gonetz, Orkin, DrgnMndd and Harmony].
- 25th September 2008: MooglyGuy - After making the decision to remove my original alpha-rejection code as it was causing more bugs than it was fixing, I began the arduous process of tracking down the multitude of ways in which the Nintendo 64 can handle textures that need an alpha border to be cut out. First, I ran across Quake 64, which uses the RDP's Alpha Compare functionality to cut out its font. Alpha Compare is relatively simple - it takes place after the Color Combiner stage and before the Blender stage. If the alpha value of the color output by the Color Combiner is less than or equal to the alpha value specified in the Blend Color register, the RDP will not pass that pixel into the Blender. If the combined alpha is greater than the alpha value specified in the Blend Color register, the RDP will rasterize the pixel through the Blender. Next, I finally came to the realization that there is no other form of automatic pixel rejection based on an alpha value, thanks to a tip from a fellow who goes by the nickname of 'Happy'. He put forth the idea that the N64 only supports Alpha Compare and no other method for automatic pixel rejection, which caused me to look a bit closer at things like the karts in Mario Kart 64 and the trees in Super Mario 64. Sure enough, it turns out that I had to emulate the effects of the "Coverage Times Alpha" bit in the Set Other Modes command. I was only emulating the "Use Coverage As Alpha" bit, and since the transparent pixels were fully covered, they were being rasterized due to their coverage being non-zero. However, the pixel alpha value was, in fact, zero, so multiplying the coverage value by zero resulted in a final blended alpha of zero! Brilliant!  Mario Kart 64 and Super Mario 64 now look much better. I then turned to Space Station: Silicon Valley, wherein the Take 2 logo was completely black. It turns out that if both alpha values of the second Blend cycle are zero, the pixel does not become zero - in fact, the cycle is then just ignored. A quick fix later and the logo sprang to life. Lastly is a personally controversial fix in that it wasn't until this blog post that I realized that the fix I came up with causes problems in other games. In Bust-A-Move 2, there is an animated ground plane that is drawn line-by-line down the screen. The topmost line of the plane actually has a T coordinate of 160.0, and as a result the Set Tile Size command sets the tile's T base to be 160.0. However, the S and T mask bits were set to 7, which results in the coordinates mirroring from 0 to 127 and back. Since the texture coordinates were being adjusted by the values in the Set Tile Size command after mirroring, and the mirroring was affecting the coordinates, they were not remaining at the appropriate position.Before my modification to the order of coordinate adjustment, the ground plane looked like this. Unfortunately, I discovered when writing this blog post that the same change seems to affect the text in some games, so it will need further examination. Still, I feel I'm on the right track.
- 26th April     2008: MooglyGuy - I found that the N64 silently treats such textures as 4-bit Color Indexed (palettized) or 8-bit Color Indexed. In addition, the current RDP implementation in MESS fails to emulate the fact that a 4-bit CI texture can select which of 16 different palettes to use; it's hard-coded to index 0. After fixing this functionality, Madden 64 was fixed.
- 20th April     2008: MooglyGuy - Two-cycle texture lookups are completely wrong in MESS. Big shock, right? The whole principle behind two-cycle texturing is that you can look up texels from independent textures in order to do clever things like masking, or not having to upload textures quite as often (upload two textures one time, then just change the combiner mode to switch textures). With the current implementation, we just copy the value of texel0 into texel1. Yeah, that's kind of wrong. I fixed it. This gets us from the current jumbled mish-mash for menu backgrounds in Paper Mario.
- 13th April     2008: MooglyGuy - I decided to look into yet another long-standing bug in MESS's RDP emulation, which is that two-cycle blending is, in a word, screwed up. Two things are wrong with the current implementation: First, two-cycle blending simply takes the output of the second color-combiner cycle as the blended color and calls it a night. This is because of numerous blending issues caused by not having that hack in there. However, it would appear that the majority of the aforementioned issues are caused by the fact that the "inverse pixel alpha" blender input is not quite so. In fact, the inverse-alpha blender input is the inverse of the A-line multiplexer. It is not a constant inverse of the color combiner alpha, as once thought. With that fixed, a number of other things fall in line, including: Ships, planets and asteroids in Asteroids Hyper 64 are no longer overly dark. The UI in Bio F.R.E.A.K.S. is no longer almost entirely black, and there aren't characters that randomly have black polygons. Clouds are no longer white blocks in the background of Dr. Mario 64's main menu...
- 11th April     2008: MooglyGuy - Rejection Correction: A number of months ago I submitted what I thought was a fix for alpha rejection. In case you're unfamiliar with it, MESS currently has issues with textures that are bordered with an alpha of zero - the completely transparent pixels still write to the Z buffer. The end result can be seen the most readily in Mario Kart 64, where all of the karts have a box around them that obscures karts in front of them. As you can see, it's impossible to see the karts in front of Yoshi despite the fact that you should be able to. This is because Yoshi's sprite is drawn first, and even the transparent pixels surrounding the sprite write to the Z buffer. The end result is that when the game attempts to draw a sprite that's farther out in front of Yoshi's sprite, the pixels are Z-rejected when they should be visible without issue. My original fix was to reject pixels if the color-combined color had an alpha of zero, but unfortunately this caused issues in a number of other games. As it turns out, the N64 rejects pixels that have an alpha of zero when the texel itself is fetched, before any color combine or blend operations even take place. With that in, things look much better.
-  9th April     2008: MooglyGuy - I tacked Z-buffer viewing onto the PIN64 Viewer. It shows what I'd already guessed, which is that the N64 has some way of aborting Z-buffer writes for texels that have an alpha of 0. However, it also shows something that I wasn't expecting, which was that the N64 seems to have a different Z-buffer format than what we're emulating. It would appear that Z values are biased upwards as they get further away from the far plane - note the shift towards red at the end of the track on real hardware versus green in MESS. I'm not quite sure what this ultimately means, as MESS currently writes the Z value of a pixel into the Z buffer, which is what would make the most sense for a real N64 as well. Oh well, once I can hand-construct commands, it shouldn't be too difficult to figure out. The RDP can be coaxed into drawing a trapezoid with a single triangle command if you pass in degenerate Middle-X-Start and High-X-Start values (click for big). It's kind of hard to see, but that little red blob has four sides. Fun!
-  8th April     2008: MooglyGuy - In renderer news, it would appear that I've found the source of the cracks between triangles in MESS. Anyone who has attempted to run Mario Kart 64 in MESS has noticed the seams that are present in almost every scene. The reason for this behavior is that the software rasterizer originally written by Ville Linde (currently MIA) does not handle fractional coordinates. At all. The end result of this is that triangles have their Y coordinates "snapped" to a full-pixel boundary, while the X coordinates remain the same, resulting in uneven boundaries between triangles that would otherwise be aligned. This can only happen because of the funky way in which the N64 stores its coordinates. As opposed to virtually any rational system such as the Playstation or any modern 3D hardware, the N64 specifies its vertices in low edge / middle edge / high edge / slope form. This was clearly done to save processing time, as the edge-walking hardware on the RDP can take in the data virtually unmodified, but it can easily cause rasterization glitches if a person isn't careful. The RDP's edge-walking hardware very likely operates in the following sequence: 1. Load High-X and Middle-X into XLeft and XRight, 2. Load High-Slope and Middle-Slope into StepLeft and StepRight, 3. Load High-Y into Y index, 4. Rasterize 0.25-pixel scanline from XLeft to XRight, 5. Add 0.25*StepLeft to XLeft, 6. Add 0.25*StepRight to XEnd, 7. Increment Y index by 0.25, 8. If Y is less than Middle-Y, go to Step 4, 9. Load Low-X into XRight, 10. Load Low-Slope into StepRight, 11. Rasterize 0.25-pixel scanline from XLeft to XRight, 12. Add 0.25*StepLeft to XLeft, 13. Add 0.25*StepRight to XEnd, 14. Increment Y index by 0.25, 15. If Y is less than Low-Y, go to Step 11 and 16. Done. It's a fairly long list of steps, but it's also fairly simple. Pretty much any software rasterizer functions that way, it usually translates X/Y triplets into that format. With a quick-and-dirty fix that is going to need some massaging to get into a state that can be submitted, we now get these pretty screenshots. If you look closely, you'll notice that alpha-blended triangles are overly "bold". This is an outgrowth of the fact that each scanline is redrawn up to four times. A proper fix for this will be to emulate coverage, which is a bit of a daunting task.
-  7th April     2008: MooglyGuy - Thanks to a few additions to the PIN64 Viewer, I've achieved a considerable speedup. The new additions are: * Moving texture descriptors out of cartridge space and into RAM, * Transferring textures using Cart -> RAM DMA rather than memcpy and * Not flushing the data cache after the texture data copy (it was redundant once memcpy went away). Rendering a frame of Mario Kart 64 now takes less than one second rather than anywhere from 5 to 10. With this in mind, I've managed to narrow down the source of the geometry corruption, though I haven't quite found the cause. For some as-yet unknown reason, sometimes a triangle command will cause the triangle before it to become corrupt. No idea why. Observe (all images link to larger versions). Ultimately, I'm not sure what's causing this. The relevant textures are all the same, so it can't be the texture cache being overwritten. The data itself is not changing, so that's not it. It's not a matter of flushing the command data, as that's already being flushed out of the cache. Weirder still, it would appear that direct framebuffer writes can go a bit wonky when they're done after the RDP is finished with its own rendering. Eagle-eyed readers will notice some of the tiles of the TLUT - all of which are supposed to be precisely 8x8 pixels, which I'm manually rendering by writing to the framebuffer - are running into their neighboring areas, and are sometimes being overwritten by neighboring areas. Funky! I have no idea what's causing this, possibly something to do with coverage, possibly not.
-  6th April     2008: MooglyGuy - I've finally managed to get my N64 development environment up and working again. Apparently the time off did my mind some good, as within about an hour and a half I fixed the texture byteswapping issue that had me stumped for several weeks. Previously, text at the top and bottom of the screen was corrupt in the race introduction sequence in Mario Kart 64, and there was significant graphical corruption in Dr. Mario 64's main menu to the point of causing a system hang when run on real hardware. With proper byteswapping, we now get. Eagle-eyed readers will notice that there are some geometry issues in Mario Kart 64. I'm not quite sure what's causing that, as the rest of the scene geometry is largely unaffected. I'll have to look into it once I've optimized the viewer - rendering a capture takes upwards of 5 to 10 seconds, so it's impractical to page through a capture's commands in order to isolate the ones with issues. In other news, Adam Gashlin (hcs, of Neon64 and USF fame) has managed to mostly fix N64 audio output in MESS. There appears to be some sort of issue with the DMA DAC audio device in MAME / MESS, however, as the stream written by -wavwrite shows odd glitches that aren't present if the raw audio stream is dumped out to a file. That's been submitted to MAME along with a DMA fix by Ville Linde. Edit: As there seems to be some confusion, the above screenshots are of the PIN64 Viewer running on a real N64, taken with a video capture card. I'm sick of having to buy a new 4-pack of AA batteries nearly every week for my crappy digital camera, so this is going to be the new means of taking real-hardware screenshots going forward.
-  5th March     2008: MooglyGuy - A couple bits of miscellany: TLUT (Texel Look-Up Table) viewing support, an update to my frame-merge tool, pin64merge, to support my most recent modifications to the capture format, and a minor PIN64 Viewer bugfix. Yes, the PIN64 Player still has some texture issues to work out, which will pretty much be my text task.
-  7th January   2008: MooglyGuy - ColourBorrower showed me them. In case anyone feels like comparing against reference material, the good ColourBorrower provided me with a link to various Pokemon Puzzle League videos, found here. The strange corruption in the collage on 1/6/2008, "My Pokemans", seems to be caused when the game attempts to draw the borders around the playfield and meters. Now I just need to figure out why. In other news, Ziggy's Z64 plugin is great, I'm sure, but it rewrites a fairly substantial amount of MESS's RDP functionality in order to get hardware acceleration working. I can't make heads or tails of what the changes were under the hood versus MESS's behavior, so I've put in a request for the man to summarize the changes he made. Here's hoping it works. Looks like we've got a bit of work to do. In addition, if it appears that MESS is a bit darker than my TV, it's because it is; not because my TV is increasing the gamma level, but because gamma correction is turned on in the VI by default and MESS doesn't emulate it.
-  6th January   2008: MooglyGuy - I finally got into the swing of writing test code for the N64 again, and decided to tackle the fact that the behavior of DMA transfers when the Count and Skip fields were non-zero was unknown. A couple hours later, I have a fix for almost any game in MESS that previously died with a non-zero dma_count or dma_skip assertion. Wonder of wonders, Pokemon Puzzle League now fires right up and is fully playable. Yesterday I fixed texture loading and texel fetching for 32-bit RGBA textures, which fixes Mario Kart 64's title logo. Last but not least, I was able to re-enable texture clamping. It was previously disabled because enabling it broke Rampage: World Tour, but it was able to be re-enabled once I discovered the reason. If you're curious, apparently texture coordinates should be recentered on 0,0 for the sake of texel lookup after coordinate clamping and mirroring, not before.
- 29th December  2007: MooglyGuy - (2) I know that there's something wrong with the way MESS handles edges. But nobody can give me a clear, plain English answer as to WHAT is wrong. All I've been able to gather is that inconsistencies and inaccuracies are creeping in due to the fact that when it comes to X coordinates, MESS performs a wholesale truncation of Everyone who has an inkling as to what is wrong seems insistent on describing it in the most arcane methods possible, and when I ask for a more concise summary as to what's wrong, I'm given a link that attempts to describe polygon edge rasterization in an even more crepuscular manner than to what I'm already being subjected. That's not to sound ungrateful for the help that people have tried to provide, it's just that as yet I've failed to understand any explanations given. I know that the problem is the truncation that MESS performs; in MESS, if X is 0.0 to 0.9999, it's truncated to 0, 1.0 -> 1.9999 = 1, 2.0 -> 2.9999 = 2, and so on. But... how's it supposed to be? 0.0 -> 0.4999 = 0, 0.5 -> 1.4999 = 1, and so on? Or what? Just saying that the Nintendo 64 handles coordinates with quarter-pixel accuracy doesn't help me at all, I need to know how to go from those fixed-point values to integer values so that I can actually draw pixels into the framebuffer! After all, it's not like the Nintendo 64 has some huge internal framebuffer that renders at four times the X and Y resolution and then downsamples when storing it to RAM, there's obviously some very simple rounding that it performs in order to obtain whole pixels plus a given coverage (CVG) value. Everyone has yet to tell me what the form is that that rounding takes. RDP is similar to OpenGL? Okay, but that doesn't quite help, the OpenGL spec is huge and I don't know where to begin looking! Argh! The only person who reasonably COULD figure out what is wrong is addicted to WoW, and I don't see that changing anytime soon.
- 29th December  2007: MooglyGuy - Triangles (Even Pink Ones): Today was a pretty productive day, adding support for the following commands: Triangle (all modes), Set Scissor, Set Fill Color, Set Fog Color, Set Blend Color and Set Env. Color. With the triangle and color editing, we can send Mario on our very own LSD trip. he Set Scissor command, as the name implies, affects the scissor box for polygon drawing. The remaining commands that I need to support are as follows: Set Key GB, Set Key R, Set Convert, Set Prim Depth, Set Other Modes, Load TLUT, Set Tile Size, Load Block, Load Tile, Set Tile, Fill Rectangle, Set Prim Color, Set Texture Image, Set Z Image and Set Color Image. Some of these probably don't actually need to be edited - for instance, I hear that color keying is actually broken in production N64 units. Who knew?
- 28th December  2007: MooglyGuy - Hack 'n Slash: Well, that ended up being a lot easier than I thought it would be, though I'm not 100% sure it's accurate to the hardware. I put in a specific check to disable writing the pixel to the framebuffer and Z-buffer if the alpha of the pixel, post-color-combine, is zero. Surprisingly, it didn't seem to adversely affect things.
- 27th December  2007: MooglyGuy - The Freeman's Nemesis: The first command-editing screen is now in, it allows you to edit the "Set Combine" command. To do so, I had to create a new part, the UIDropdown class. When you have a Set Combine command selected in the main event list, pressing 'E' will bring up the command edtior screen for the command, if one is relevant. Once you press 'D' (Done) the editor screen will go away and return you to the main event list. As a demonstration, I edited most of the Set Combine events to use the following equation for texture color: ( C_ZERO - C_ZERO ) * C_ZERO + C_TEX0. Which results in the following scene (see screenshot). Update: Now we go into the realm of 2D, with the ability to edit Textured Rectangle commands. After some jiggery-pokery to support non-fullsreen UIScreen instances, we have a handy editor for the aforementioned commands: After some fooling around, we can enhance Super Mario 64 for the visually impaired! Not sure what command I'm going to support next. Update (2): Curse the N64. Damn the N64 to hell. I'm inches away from just throwing in the towel. I took a break from PIN64 to try to track down a genuine rendering bug, which is that textures with an alpha border always write to Z, even when fully transparent. For a real example of this, look at the screenshot I posted in "Retro-Active" with the trees in it; you can see that the upper-left tree has a border of transparent pixels around it, and you can actually see the castle through the tree behind it. This is caused by the fact that the frontmost tree is drawn before the rearmost tree, but the tree's entire triangles write to the Z buffer, rather than just the opaque pixels. Thus when the tree behind the frontmost tree is drawn, pixels that should appear do not, as there's an invisible border out to the edges of the frontmost tree's triangles that's written into the Z-buffer. Normally, 3D hardware provides a facility called an "alpha compare" function, which will selectively reject pixels as they're being rendered if their alpha values fall below a given threshold value. In fact, the N64 provides just such a feature. The problem? The Set Other Modes command that comes down the pipe most recently before the trees does not, in fact, enable alpha comparison. I've yet to figure out how the hell, then, the N64 knows to reject the relevant pixels and prevent them from writing to the Z buffer. What's annoying me so much, though, is the fact that everyone seems convinced that it should be really easy to track down, but nobody has offered any convincing explanations as to why it happens.
- 24th December  2007: MooglyGuy - Differently Abled: I've put the ability to disable events in PIN64. Observe the scene with the water polys enabled in Mario64. Update: I've added another UIList to the upper-right pane in the window so that you can see additional info on the command that you have selected. In doing so, PIN64 has made its first true step towards usefulness. For instance, it seemed to me that the bottom face of the first billboard you encounter in Mario 64 was being drawn incorrectly. Now that I have the ability to get a proper interactive view of the commands being sent to the RDP, I can see that the errant drawing is not due to an RDP implementaton bug, but is in fact probably due to an RSP core bug.
- 19th December  2007: MooglyGuy - I've brought the PIN64 UITextQueue class up to date, and am now keeping a list of the events that are queued.
- 16th December  2007: MooglyGuy - PEBKAC: Over the past two weeks I've been overhauling PIN64 under the hood to use proper classes and singletons rather than make everything an ungodly mess of global functions and typedefs. I've done a first pass at converting the UI system found in NUTS - I now have the UITextField class converted over and I've created a new UIRect class to encapsulate colored tiles of arbitrary size in order to get filled window backgrounds and such. It's very rudimentary, but the following demonstrates one UIRect instance and two UITextField instances contained within a single UIScreen instance inside the UI singleton. Also note that I've added the ability to highlight the currently-selected triangle event with a white line around the edges.
- 29th November  2007: MooglyGuy - Making A Pass: I've nearly perfected texture support in PIN64. I had a lingering issue that I didn't figure out until this evening, which is that some captures seemed to be lacking around half the polygons that should have been there. It wasn't until I considered the relative lack of power that the N64 has that it dawned on me: Most N64 games do not, in fact, run at 60 frames per second. With that in mind, I added a #define to my output routines in MESS to output five sequential frames' worth of captures to separately-named files. My hunch was right, and it turns out that a number of games draw half of the geometry in one pass, then the rest of the geometry in a second. I threw together a program to merge together two or more individual frame captures, and lo and behold, it worked perfectly. What follows is a series of screenshots from my current working version. I've also implemented the ability to cycle the event display index. This is the same capture as the merged in-game captures, but with the event display index set to stop halfway through rendering the castle. The next step for PIN64 is to give it some sort of keyboard-controlled user interface for viewing the current state of registers, and possibly manually modifying registers. In addition, I plan to add playback support on real hardware.
- 25th November  2007: MooglyGuy - While NUTS provides a reasonably decent method for detecting errors in MESS's RSP implementation, there's currently no good way to test the RDP implementation. Certainly, NUTS has a rudimentary method for sending packets to the RDP manually, but there's no in-depth tool. With that in mind, I'm now working on a program tentatively called PIN64 - Polygon Inspector for N64. The current plan is to add functionality to MESS that will allow the user to capture all of the commands sent to the RDP over the course of a given frame, then load that capture in a separate program in order to externally analyze the RDP behavior. The analysis tool will allow the user to see a rendering of all or some of the packets sent to the RDP over the course of the frame, view the state of the RDP after each packet, and possibly modify the RDP state somewhat as well. This has the distinct advantage of being able to capture a single frame from MESS, then iterate on MESS's RDP emulation without having to re-run the game each time. Yesterday and today I threw together some initial work. PIN64, in its current state, can either dump the command stream as text or render the command stream on-screen. As I have not yet added support to MESS for saving the textures when they're loaded, the captures lack textures. Nonetheless, it's working decently thus far (see screenshots).
- NOTES: The SGI/Nintendo Reality Display Processor (RDP) handles most - not all - graphical capabilities for the Nintendo 64 (more on that in a moment). It pulls 64-bit-wide command packets from either RDRAM or RSP DMEM depending on a bit in its status register. Command packets can range from a single 64-bit word (Full Sync, Sync Pipe, Set Color Image, Load TLUT, et cetera) to 22 words (Triangle with Gouraud, Texture and Z-Buffering). While it is not as fast in terms of fill rate as the Playstation 1's GPU, it makes up for it in feature richness. It supports significantly more texture formats than either the Sega Saturn (which is ostensibly not a 3D system, anyway) or the Playstation, including YUV16, Intensity (grayscale texture tinted by a specified primitive color, useful for particle effects) and Intensity with Alpha. It features a four-parameter color combiner which implements the equation (A - B) * C + D separately for both RGB and Alpha, as well as four-parameter blending with optional two-cycle mode (with the expected throughput penalty, of course); in fact, the Color Combiner is sufficiently advanced that outside of software rasterization, one needs full pixel shader support in order to fully emulate its features. The RDP's framebuffer and Z buffer are stored directly in RDRAM.
- NOTES: http://moogle-tech.com/blog/  PIN64 = Polygon Inspector for N64
- DRIVERS: aleck64.cpp and (MESS) n64.cpp
- SOURCE: video\rdpbhelp.h, rdpblend.c, rdpfiltr.inc, rdpspn16.c and rdptpipe.cpp



11.B   Minx

- 0.278              : Added savestates. Added SAVE_UNSUPPORTED flag [hap].
- 0.221              : Fixed disassembly of jump and call instructions. Added notes [Robbbert].
- 0.193              : Added cpu\minx\minxd.h.
- 0.180              : Changed the Minx disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.154              : Get rid of pointers to member functions [Wilbert Pol].
- 0.151              : Clang fix (this also looks like a possible real bug?) (cpu\minx\minxopcf.h) [R. Belmont].
- 0.150              : Modernized Minx cpu core [Wilbert Pol].
- 0.132u1            : Pointer-ified the Minx CPU core [Atari Ace].
- 0.125u5            : Wilbert Pol fixed handling of the U register in the RET instructions and when taking an interrupt in the Nintendo Minx CPU core.
- 0.125u4            : Some Nintendo Minx CPU core updates [Wilbert Pol]: Styling changes. Added instruction cycle counts. Added interrupt support. Added HALT support. Fixed INT instruction. Added incomplete support for DIV and MUL instructions. Fixed MOV [#nnnn],BA and MOV [#nnnn],HL instructions. Fixed interrupt handling. Fixed opcodes 45, 4D, 55, 5D, B5, B6, B7, FC, FD and CF 70-7F. Fixed flag results for INC, DEC, AND, OR and XOR instructions.
- 0.116u4            : Updates to the Minx CPU core [Wilbert Pol]: Fixed TEST (94,95,96, and 97) instructions. Fixed 2 MOV instructions (BE and BF). Fixed one AND instruction (DC).
- 0.114u4            : Added cpu\minx\minx.c/h, minxd.c, minxfunc.h, minxopce.h, minxopcf.h and minxops.h. Wilbert Pol added a CPU core for a CPU nicknamed Minx. This CPU core is used to emulate the cpu in the nintendo pokemon mini handheld console.
- NOTES: Nintendo Minx CPU
- DRIVERS: (MESS) pokemini.cpp
- SOURCE: cpu\minx\minx.cpp




12.    Atari

12.1   DEC T11

- 0.283              : Cleaned up code (cpu\t11\t11ops.hxx) [Vas Crabb].
- 0.282              : Handle unaligned accesses to I/O page. Certain devices on bk, uknc require this, as they do not handle the WTBT bus signal and always decode full address. Improved interrupt handling in K1801VM1 CPU core. Added interrupt processing and EIS instructions to K1801VM2 core (t11\t11.cpp) [Sergey Svishchev].
- 0.274              : Improved DL11 emulation (maintenance mode, break rx/tx) and added support for 1801VP1-065 variant. Passes ZDLDH0 test and works with TU58 driver (DD.SYS) (machine\dl11.cpp) [Sergey Svishchev].
- 0.271              : VM1 does not use RMW bus transaction for MOV and MOVB insns (fixes writing to floppy) (cpu\t11\t11ops.hxx) [Sergey Svishchev].
- 0.269              : Improved interrupt handling on K1801VM1 CPU, misc fixes. Allows bus error handlers on (MESS) Elektronika BK to deal with interrupt from STOP key (causes a HALT-mode IRQ and triggers access to unmapped region at 177674). Changed PC display to octal. Made clear_virq/raise_virq safer (machine\pdp11.h) [Sergey Svishchev].
- 0.266              : Reuse z80_daisy_chain for QBus vectored interrupts and forward INIT signal to all cards on QBus [Sergey Svishchev].
- 0.264              : Improved trace trap processing (t11\t11.cpp) and added basic interrupt processing to the (MESS) K1801VM1 CPU [Sergey Svishchev].
- 0.263              : Improved accuracy: Ignore least significant bit of PC when fetching opcodes. Correct MTPS and MFPS to be byte-wide. Reject instructions not implemented by each variant. Added basic support for the (MESS) K1801VM1 [Sergey Svishchev].
- 0.242              : Jumps to register cause trap to 4 [Sergey Svishchev].
- 0.239              : Added machine\dl11.cpp/h. Added DEC DL11-type serial line unit for (MESS) pdp11.cpp [Sergey Svishchev]. Power fail trap is NMI. Added bus error trap [hap].
- 0.225              : Disassembly updates: Correct mnemonics for CLC, CLV, CLZ and CLN. Added MFPT mnemonic. Renamed JSR/RTS short forms to CALL and RETURN. Eliminated alternate PUSH and POP mnemonics. Added notes on instructions not implemented on T-11 [AJR].
- 0.222              : More accurate emulation of interrupt acknowledgment. Added PF and HLT interrupts. This is accurate behavior for the T11, but it makes some of the driver changes a bit more awkward than they probably should be, given that one device is standing in for every CPU vaguely related to the PDP-11 family. Galaxy Game obviously wasn't written for a T11, and the BK-0010's K1801VM1 doesn't look like a lot like the T11 either. Changed default interrupt vector [AJR].
- 0.218              : Use octal for debug register state and disassembly. Fixed disassembly of SOB instruction. Fixed empty disassembler output for some invalid opcodes [AJR].
- 0.216              : Increased the maximum number of cycles to take interrupt acknowledgment into account. Changed do { ... } while to while { ... } because interrupt acknowledgment can devour lots of cycles before this. Removed the probably mistaken recursive call in t11_check_irqs [AJR].
- 0.212              : Switch to MACRO-11 syntax, decode deferred addressing modes (cpu\t11\t11dasm.cpp) [Sergey Svishchev].
- 0.196              : Changed description to 'DEC T11'.
- 0.193              : Added cpu\t11\t11dasm.h.
- 0.184              : Emulated MFPT instruction. MOV, CLR and SXT read memory before writing to it (Page B-8 of User's Manual) [Sergey Svishchev].
- 0.183              : HALT opcode jumps to fixed restart address with PSW=0340 (cpu\t11\t11ops.hxx) [Sergey Svishchev].
- 0.180              : Changed the T11 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.177              : Fixed IRQs. This fixed Atari's APB police car graphics problem at the point you drive away from your starting square [Carl].
- 0.176              : Added reset output line [Carl].
- 0.175              : Fixed MARK insn (not supported by actual T11) (cpu\t11\t11ops.hxx) [Sergey Svishchev]. Fixed all irqs [Carl].
- 0.174              : Changed cpu\t11\t11ops.inc and t11table.inc to t11ops.hxx and t11table.hxx.
- 0.154              : Fixed usage of uninitialized members in t11_device [Oliver Stoeneberg].
- 0.153              : Changed cpu\t11\t11ops.c to t11ops.inc and t11table.c to t11table.inc [Oliver Stoeneberg].
- 0.152              : Added 'T11' device. Modernized T-11 cpu core [Wilbert Pol].
- 0.128u5            : Pointer-ified the T-11 core [Aaron Giles].
- 0.124u4            : DEC T-11 CPU improvements [Miodrag Milanovic]: HALT - now calls interrupt vector. ILLEGAL - had PC=0 at the end which makes code not run fine. MARK - now it is implemented.
- 0.124u3            : Aaron Giles removed ancient 720 kludge in the T-11 core. Also added support in the T-11 core for an external vector via irq_callback. Apparently the hardware actually did support this and it is necessary for emulating the BK 0010/11 computer in MESS.
- 0.111u1            : Giuseppe Gorgoglione converted t11dasm.c to use cpuintrf_temp_str() instead of local string pools.
- 0.109u5            : Aaron Giles converted the T-11 disassemblers to the new format and added step in/out support where it was obvious.
- 0.104u1            : Buddabing added save state support to the T-11 CPU core.
- 0.101u2            : Aaron Giles got rid of gross banking hack in the T11 core. Updated Atari System 2 driver to accommodate the lack of the hack.
- 0.36b2             : Aaron Giles fixed a bug in the T-11 emulation which caused APB not to work and the end of race results in Super Sprint to contain garbage.
-  3rd August    1999: Aaron Giles fixed a bug in T11 opcodes and APB started working, but it has some sprite priority problems.
- 16th June      1999: Aaron Giles did a small T-11 cpu core fix, but it doesn't help any of the games.
- 0.33b4             : Added cpu\t11\t11.c/h, t11ops.c, t11table.c and t11dasm.c. T11 CPU emulator [Aaron Giles]. This is used by the Atari System 2 drivers.
- DRIVERS: atarisy2.cpp and galgame.cpp
- SOURCE: cpu\t11\t11.cpp



12.2   ADSP21xx

- 0.240              : Added partially support for PMOVLAY register. Allow PMOVLAY and DMOVLAY register reading on opcodes and debugger states. Added device_post_load for restore external space overlay state.
- 0.194              : Fixed m_pcbucket log typo for ADSP-21xx CPUs [Ted Green].
- 0.154              : Converted ADSP21xx to DEVCB2 [Osso].
- 0.141u4            : Fixed long-standing bug in ABS flags in ADSP21xx core [Christophe Jaillet].
- 0.139u3            : Converted ADSP21xx core to a modern CPU device [Aaron Giles].
- 0.128u7            : Changed ADSP21xx cores to accept a configuration struct instead of using set_info to specify serial port callbacks. Simplified the ADSP21xx get/set info significantly. Removed support for only including certain variants of the chips; they are now either all supported or all unsupported. Added the concept of a cpu_state_table, which is supplied by the CPU cores and which describes all the register state accessible to the debugger and other subsystems. The format of the table is such that most data can be simply fetched from memory without the further involvement of the CPU core, including the display of common formats. Extensibility points are available for custom display and for importing/exporting the data to intermediate variables for more complicated scenarios. Updated the ADSP21xx core to use this [Aaron Giles].
- 0.128u6            : Added wrappers for ADSP21xx callbacks. Added device parameters to them. Updated IRQ setters to use generic_pulse_irq_line() [Aaron Giles].
- 0.128u4            : Switched ADSP21xx to new memory functions [Couriersud].
- 0.109u5            : Converted the ADSP21xx disassemblers to the new format and added step in/out support where it was obvious [Aaron Giles].
- 0.104u1            : Added save state support to the ADSP-21xx CPUs core [Buddabing].
- 0.103u3            : Added timer support to the ADSP cores and hooked it up for the DCS games [Aaron Giles].
- 0.103              : Did some cleanup in the ADSP-21xx core to support program memory more correctly and support execution from multiple banks [Aaron Giles].
- 0.78u4             : CPUs with an implicit address shift (e.g., the TMS34010 shifts addresses right 3 bits; the TMS32031 shifts addresses left 2 bits) now automatically get that shift applied to addresses in their memory maps and in calls to install_memory_read/write_handler(). This eliminates many ugly macros in the memory maps. Affected CPU cores are the ADSP210x, CCPU, PIC16C5x, TMS3201x, TMS3202x, TMS32031, and TMS340x0. Note that the CPU cores themselves still need to pass shifted values to the core read/write routines. All drivers using these cores have had their icky macros and bitshifts removed. * Harvard architecture CPUs now have data memory fully implemented now. Affected CPUs are the ADSP210x, TMS3201x, TMS3202x, PIC16C5x, and CCPU. All cores have been modified to fully split program and data memory. All drivers using these cores now specify explicit program and data memory maps. This also gets rid of a ton of ugly macros used in memory maps [Aaron Giles].
- 21st March     2003: Brad Oliver fixed a problem in the ADSP-210x CPU core that occurred in MacMAME.



12.21  ADSP-2100

- 0.260              : Use count_leading_ones_32 where it's simple rather than inverting and counting leading zeroes (adsp2100\2100ops.hxx) [Vas Crabb].
- 0.259              : Code cleanup: Use BIT helpers for unpacking and disassembling opcodes. Use count_leading_zeros_32 for "detect exponent" operations rather than shift loops. Convert comments to C++ single line style and some constant macros to unscoped enums. Deobfuscate bit manipulation in the "mode control" instruction. Fixed more comments in disassembler (adsp2100\2100dasm.cpp). Fixed a couple of disassembly regressions (adsp2100\2100dasm.cpp). Fixed one operation (adsp2100\adsp2100.cpp) [AJR].
- 0.253              : Fixed regression with ABS opcode S flag (adsp2100\2100ops.hxx) [mjrgh].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.196              : Changed description to 'Analog Devices ADSP-2100'.
- 0.193              : Added cpu\adsp2100\2100dasm.h.
- 0.187              : Make HALT_LINE halt the cpu and added function for get base address of circular buffer [Ted Green].
- 0.179              : Changed the ADSP-21xx disassembler to use std::ostream internally (cpu\adsp2100\2100dasm.cpp) [Nathan Woods]. Sync pc/curpc [smf].
- 0.175              : Added more info for invalid register accesses (cpu\adsp2100\2100ops.hxx). Added callback for dmovlay instruction [Ted Green].
- 0.174              : Changed cpu\adsp2100\2100ops.inc to 2100ops.hxx.
- 0.154              : Updated ADSP-2100 so I can do DCS audio changes [Miodrag Milanovic].
- 0.153              : Changed cpu\adsp2100\2100ops.c to 2100ops.inc [Oliver Stoeneberg].
- 0.150              : Fixed duplicate shortnames to allow XML to show device (cpu\adsp2100\adsp2100.c) [Tafoid].
- 0.139u3            : Added 'ADSP-2100' device.
- 0.128u3            : Aaron Giles converted the ADSP2100 core to reference their data via pointers instead of global structs, in anticipation of future changes.
- 0.125u9            : Aaron Giles split ADSP2100 execution loop between debug/non-debug.
- 0.120u1            : Aaron Giles fixed some incorrect code in the ADSP2100 external flag handling.
- 0.94               : ADSP2100 big endian fix [Alex Eddy].
- 0.77u3             : Aaron Giles fixed ROM loading code in the ADSP2100 core.
- 0.76u2             : Aaron Giles fixed loading of 0 counters so they don't execute infinitely and fixed initial state of the SSTAT register in the ADSP2100.
-  8th December  2002: Aaron Giles added ADSP-2115 support to the ADSP-2100 CPU core and fixed various bugs in it.
-  2nd January   2001: Jarek Burczynski optimized the ADSP2100 core a bit, resulting in a 7 % speed gain on some platforms.
- 17th August    2000: Aaron Giles sent in updated ADSP2100 and TMS34010 cores, fixing some bugs which affected the Atari polygon games.
- 28th July      2000: Michael Soderstrom fixed an ADSP-2100 core crash.
- 22nd July      2000: Juergen Buchmueller optimized the ADSP2100 core a bit, but with no visible speed gain.
-  9th July      2000: Ernesto Corvi fixed a debugger bug affecting ADSP2100.
- 0.36b12            : Added cpu\adsp2100\adsp2100.c/h, 2100ops.c and 2100dasm.c.
-  6th December  1999: Aaron Giles sent in a preliminary ADSP-2100 core.
- NOTES: ADSP2100 is a Analog Device Single Processor.
- DRIVERS: harddriv.cpp
- SOURCE: cpu\adsp2100\adsp2100.cpp



12.22  ADSP-2101

- GAMES: Atari - Steel Talons (1991), Hard Drivin's Airborne (1993)
- DRIVERS: harddriv.cpp
- SOURCE: cpu\adsp2100\adsp2100.cpp



12.23  ADSP-2104

- 0.139u3            : Changed description to 'ADSP-2104'.
- 0.77u3             : Aaron Giles added the ADSP2104 variant to the ADSP2100 core, fixed ROM loading code in the ADSP2100 core and changed the mechanism for DCS to report buffer full/empty states. Added IOASIC support for buffer full/buffer empty interrupts from DCS. Added preliminary DCS support for ADSP-2104-based sound.
- 12th December  2003: Aaron Giles - Gauntlet: Dark Legacy and War: Final Assault work with the new ADSP-2104-based DCS sound core, the others fall over at the moment unless I help them along.
-  7th December  2003: Aaron Giles added the ADSP2104 variant to the ADSP2100 CPU core.
- PCB: ADSP-2104 (Gauntdl), ADSP2104 Gauntleg
- DRIVERS: midzeus.cpp and vegas.cpp
- SOURCE: cpu\adsp2100\adsp2100.cpp



12.24  ADSP-2105

- 0.253              : Fixed regression with ABS opcode S flag (adsp2100\2100ops.hxx). Fixes Fight End/Game Over tone fade-in issue in Killer Instinct and Killer Instinct 2 [mjrgh].
- 0.196              : Changed description to 'Analog Devices ADSP-2105'.
- 0.142u3            : Added 'ADSP-2105' device.
- 0.139u3            : Changed description to 'ADSP-2105'.
- 30th November  2000: Ernesto Corvi fixed a bug in the 2105 interrupt model.
- 0.37b5             : ADSP2105 CPU emulation, used by Mortal Kombat 2 sound [Ernesto Corvi].
- GAMES: Midway - MK II (1993), MK III (1993), WWF: Wrestlemania (1995), Rampage: World Tour (1997)
- PCB: ADSP-2105, PLCC68 (Kinst2), ADSP-2105-KP40, QCC68 (Nbajam)
- DRIVERS: harddriv.cpp, kinst.cpp, metalmx.cpp, midtunit.cpp, midvunit.cpp, midwunit.cpp, midxunit.cpp, wms.cpp, wpc_95.cpp, wpc_dcs.cpp and wpc_s.cpp
- SOURCE: cpu\adsp2100\adsp2100.cpp



12.25  ADSP21062 / SHARC

- 0.278              : Correctly align 32-bit data transfers using PM bus. Fixes glitchy characters in Fighting Vipers and Sonic the Fighters. Use mask for 32-bit writes over PM bus (sharc\sharcmem.hxx) [Matthew Daniels].
- 0.272              : Use 32x32=64-bit multiply inlines (sharc\compute.hxx) [AJR].
- 0.267              : Got rid of some sprintf and strcat (generates warnings on macOS) (sharc\sharc.cpp) [Vas Crabb].
- 0.250              : Use util::sext and other bit utility functions (sharc\sharc.cpp). Be a bit more paranoid about extreme values of bit6 and len6 (non-DRC). Use rot[lr]_32 some more (sharc\sharcops.hxx) [AJR].
- 0.233              : Cycle-based DMA. Added support for write stalling. Re-enable SHARC recompiler for Gradius IV [Ville Linde].
- 0.222              : Fixed DRC crashes in DEVNOCLEAR debug builds. READ/WRITE macros removal [Osso].
- 0.210              : Added compute_fcopysign [MetalliC].
- 0.196              : Changed description to 'Analog Devices ADSP21062 "SHARC"'. Added Rn = Rn FDEP Rx BY <bit6>:<len6> opcode used by Last Bronx for a vital geometrizer function (sharc\sharcops.hxx). Added fmul abs multi opcode (used by Gunblade NY) (sharc\compute.hxx, sharc.h and sharcops.hxx). Added SET_UREG case $67 (Zero Gunner 2B) (sharc\sharcops.hxx). Fixed LSHIFT negative operations to not extend the sign on result, fixes Last Bronx frame flickering (sharc\sharcops.hxx) [Angelo Salese].
- 0.195              : Disabled fatalerror on debugger data area access [Angelo Salese].
- 0.190              : Removed leftover debug code [Angelo Salese].
- 0.186              : Fixed SHARC disassembly in debug build (cpu\sharc\sharc.h) [AJR].
- 0.181              : Use standard memory maps [O. Galibert].
- 0.180              : Changed the SHARC disassembler to use 'std::ostream &' internally. Changed std::stringstream to std::ostringstream in sharcops.hxx [Nathan Woods].
- 0.179              : Fixed disassembly window [smf].
- 0.176              : Fixed Linux crash (cpu\sharc\sharcdrc.cpp) [Ville Linde].
- 0.175              : Added cpu\sharc\sharcdrc.cpp and sharcfe.cpp/h. Added highly experimental SHARC recompiler. Runtime enable for sharcdrc. Added Model 2 and Zero Gunner compatibility [Ville Linde].
- 0.174              : Changed cpu\sharc\compute.inc, sharcdma.inc, sharcmem.inc and sharcops.inc to compute.hxx, sharcdma.hxx, sharcmem.hxx and sharcops.hxx.
- 0.160              : Avoid ADSP21062 stack overflow when device is reset while inside interrupt handler (fixes Gradius 4) [Peter Ferrie].
- 0.154              : Attempt to fix Last Bronx booting, still uses a shitload of unsupported opcodes (cpu\sharc\sharc.c). Simplified Last Bronx fix, however it's confirmed to set dst address to 0, Ville? Added ALU opcode 0x89 (FAVG), Last Bronx shows background scene in attract then asserts [Angelo Salese]. Initialize DMA6 registers in host booting mode (cpu\sharc\sharc.c). DMA internal index registers are only 17 bits long [Ville Linde].
- 0.153              : Changed cpu\sharc\compute.c to compute.inc, sharcdma.c to sharcdma.inc, sharcmem.c to sharcmem.inc and sharcops.c to sharcops.inc [Oliver Stoeneberg]. Added 'ADSP21062' device. Modernized SHARC cpu core [Wilbert Pol].
- 0.148u1            : SHARC Disassembler update (cpu\sharc\sharcdsm.c) [Pavel Semerad]: Added omitted direction flags in instruction using both PM() and DM(). In instruction with 6bit immediate data, this data is signed value. It would be better to show this sign because it is confusing to see for example 0x3F which actually means -1 (32bit immed data are not confusing as that big values are easy to recognize).
- 0.147              : Minor optimizations (cpu\sharc\sharc.c and cpu\sharc\sharcops.c). Changed delayed IOP writes to use timers (cpu\sharc\sharc.c). Rewrote DMA handling to use timers [Ville Linde].
- 0.143u3            : Fixed SHARC CPU in UNIDASM [trap15].
- 0.128u6            : Pointer-ified the SHARC core [Atari Ace].
- 0.125u7            : Aaron Giles added save state support to the SHARC CPU core.
-  8th April     2007: Ville Linde - I fixed some multi-processor issues in the SHARC core, and some Voodoo-related issues in the NWK-TR/Hang Pilot graphics board emulation. As a result, Hang Pilot sprung to life in its whole 3D glory. There seems to be some texture problems still to be fixed though.
-  5th April     2007: Ville Linde - Racing Jam and Hang Pilot are finally starting to show something. I had to force the SHARC not to execute the display list because of some weird bugs, so no 3D graphics yet.
- 0.113u3            : Ville Linde fixed several SHARC opcodes where data transfer was done regardless of the condition. This fixes many things, like the upside-down geometry in Model 2B games. And also, probably all the remaining clipping issues in Gradius 4. At least the planet zooming out in the intro works now. Fixed an interrupt delay slot problem in the SHARC core.
- 18th March     2007: Ville Linde - I was finally able to find and fix the SHARC bugs that were causing Solar Assault and GTI Club to crash. After that I went to improve the Konami 3D graphics chip emulation. Now both games are starting look quite good. Neither game is playable yet, though. Solar Assault is currenly missing the analog controls, and GTI Club still has some problems with the network chip.
- 0.109u5            : Aaron Giles converted the sharc disassemblers to the new format and added step in/out support where it was obvious.
- 0.109u3            : Removed cpu\sharc\sharcdtb.c. Added cpu\sharc\sharcdma.c and sharcmem.c. Major rewrite of the SHARC core [Ville Linde]: Bit-accurate reciprocals. More accurate pipeline emulation. Fixed the problems with operation latencies. Regression tested a few floating-point operations for bit-accurate results. Improved DMA emulation. This update will fix most (but not all) of the clipping problems in Gradius 4 and NBA Play by Play.
- 0.106u9            : SHARC improvements and bugfixes [Ville Linde].
- 0.106u2            : Ville Linde added support for circular buffering in the SHARC core, and fixed several minor bugs.
- 0.104u1            : GTI Club updates [Ville Linde]: Added some more SHARC opcodes.
- 0.102              : Many fixes to the SHARC core and Konami PPC drivers [Ville Linde].
-  9th November  2005: Ville Linde - Fixed a DMA latency issue in the SHARC core. The graphics problems in Gradius 4 are now fixed.
-  7th November  2005: Ville Linde - Fixed another bunch of SHARC bugs and added a few more opcodes. Most of the missing graphics are now showing in Gradius 4, but they are still rather broken, probably due to some more SHARC bugs.
- 30th October   2005: Ville Linde - I've continued to add features and fix bugs in the SHARC core. Now the SHARC is sending the first triangle commands to the Voodoo. For now it's limited to some non-textured triangles in the color test screen and the stars in the background of the first level.
- 24th October   2005: Ville Linde - Fixed some stupid mistakes and added a few more SHARC opcodes and now Gradius 4 gets ingame. Most of the graphics are still missing as they are done with the 3dfx chips.
- 0.99u2             : SHARC/Model 2 updates [Ville Linde]: Reworked the SHARC internal ram implementation so that multiple instances of the core work. Added data address space. Added coprocessor input and output FIFO's to Model 2. Updated Konami zr107, gticlub, nwk-tr, hornet to work with the SHARC changes.
- 0.97u2             : Improvements to the SHARC CPU core [Ville Linde]: Correct IRQ handling. Added many more opcodes, including floating-point.
- 0.97u1             : Added cpu\sharc\sharc.c/h, sharcdsm.c/h, sharcdtb.c, sharcops.c/h and compute.c. Ville Linde added ADSP-21062 core and partially hooked it up for the Model 2B games and Konami PowerPC based 3D games.
- 25th May       2005: Ville Linde - I've continued my progress on my Analog Devices ADSP-2106x SHARC core. The results are finally starting to show. Gradius IV already passes all of its bootup tests. The 3Dfx chips have also been hooked up already. Unfortunately the game is protected, like all the other Hornet games. Silent Scope currently passes all the tests on the first graphics board. The second board isn't emulated yet. Midnight Run and GTI Club pass all the tests, except one FIFO test, which fails on both boards.
- NOTES: Portions of the code based on ElSemi's SHARC emulator
- PCB: ADSP 21062, ADSP-21062 (labelled KS160X2 HD/C13327.00-2.0 SHARC) (GTIClub, Gradius4), ADSP-21062 "SHARC" EDC35181A-3.0 (Sscope), SHARC ADSP 512k flash Konami no. 022M16C (Sscope2)
- DRIVERS: gticlub.cpp, hornet.cpp, model2.cpp, nwk-tr.cpp and zr107.cpp
- SOURCE: cpu\sharc\sharc.cpp



12.26  ADSP2112
- PCB: Speed Up (Gaelco 1996)



12.27  ADSP-2115

- 0.139u3            : Changed description to 'ADSP-2115'.
- 0.63               : ADSP-2115 CPU support [Aaron Giles].
- GAMES: Midway - War Gods (1996)



12.28  ADSP-2181

- 0.149u1            : Basic hook-up of ADSP-2181 sound CPU used in Batman Forever [Angelo Salese].
- 0.139u3            : Changed description to 'ADSP-2181'.
- 0.103              : Did some cleanup in the ADSP-21xx core to support program memory more correctly and support execution from multiple banks [Aaron Giles].
- 0.102u5            : Implemented some more functionality of the ADSP-2181 needed for Road Burners [Aaron Giles].
- 0.84               : Added ADSP2181 variant to the ADSP21xx CPU cores [Aaron Giles].
- PCB: ADSP-2181, QFP128 (NBAJamExtreme), ADSP2181 (Batmanfr)
- DRIVERS: atlantis.cpp, magictg.cpp, stv.cpp, vegas.cpp and zn.cpp
- SOURCE: cpu\dsp32\dsp32.cpp


12.3   DSP32C

- 0.250              : Simplify int24 operator logic (dsp32\dsp32ops.hxx) [AJR].
- 0.196              : Changed description to 'AT&T DSP32C'.
- 0.193              : Added cpu\dsp32\dsp32dis.h.
- 0.180              : Changed the DSP32C disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\dsp32\dsp32ops.inc to dsp32ops.hxx.
- 0.155              : Removed unneeded define (dsp32\dsp32.h) [Fabio Priuli].
- 0.153              : Changed cpu\dsp32\dsp32ops.c to dsp32ops.inc [Oliver Stoeneberg]. Converted DSP32 to DEVCB2 [Miodrag Milanovic].
- 0.146u4            : DSP32C changes [Phil Bennett]: Set the PCR to 1 on reset. Update the PDF/PIF output pin states only when reading/writing the PDR/PIR registers. Implemented the goto_pde, goto_pdf, goto_pif and goto_pdf instructions.
- 0.141u2            : Added 'DSP32C' device. Modernized the DSP32 core [Aaron Giles].
- 0.137u4            : Fabio Priuli added save states to the DSP32 CPU.
- 0.128u6            : Pointer-ified the DSP32 core [Aaron Giles].
- 0.109u5            : Aaron Giles converted the DSP32C disassemblers to the new format and added step in/out support where it was obvious.
- 0.62               : Added cpu\dsp32\dsp32.c/h, dsp32dis.c and dsp32ops.c. DSP32 CPU emulation [Aaron Giles].
- 26th October   2002: Aaron Giles fixed a bug in the DSP32C core that caused random airborne objects in Hard Drivin's Airborne.
- NOTES: AT&T DSP32C
- DRIVERS: harddriv.cpp and metalmx.cpp
- SOURCE: cpu\dsp32\dsp32.cpp


12.4   ASAP

- 0.193              : Added cpu\asap\asapdasm.h.
- 0.180              : Changed the ASAP disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.139u3            : Aaron Giles converted ASAP CPU core from a legacy CPU core to a modern device.
- 0.137u4            : Fabio Priuli added save states to the ASAP CPU.
- 0.128u4            : Pointer-ified the ASAP core [Aaron Giles].
- 0.109u5            : Aaron Giles converted the ASAP disassemblers to the new format and added step in/out support where it was obvious.
- 0.37b10            : Added cpu\asap\asap.c/h and asapdasm.c. Added ASAP CPU [Written by Aaron Giles].
- 17th November  2000: Aaron Giles sent in a driver for an Atari prototype game called BeatHead.
- NOTES: ASAP = Atari Simplified Architecture Processor
- DRIVERS: beathead.cpp
- SOURCE: cpu\asap\asap.cpp


12.5   Jaguar GPU

- 0.222              : Added notes of debugging feature. GPU code can be executed out of external RAM. Reference: Midsummer Technical Reference Manual [cam900]. READ/WRITE macros removal [Osso].
- 0.219              : Fixed Jaguar GPU (Tom)/DSP (Jerry) movei disassembly, previously the immediate value included two bytes of the following instruction (cpu\jaguar\jagdasm.cpp) [ElectronAsh].
- 0.211              : Simplified handlers. Reduced defines and unnecessary lines. Use shorter/correct type values. Removed register_postload. Added notes [cam900]. Fixed Clang error: unused variable 'DMAFLAG' [-Werror,-Wunused-const-variable] [AJR].
- 0.193              : Added cpu\jaguar\jagdasm.h.
- 0.180              : Changed the Jaguar disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Added virtual for consistency [smf].
- 0.151              : Fixed detection of busy loops (cpu\jaguar\jaguar.c) [Wilbert Pol]. Hooked up DSP/GPU interrupt to tom that was missed when modernizing Jaguar core in MAME 0.150. Fixes Area 51 issue mentioned in mametesters 05256, but 0.149u1 was released before the modernizing and maxf_ng still has the problem mentioned in the bug report [smf].
- 0.150              : Modernized Jaguar cpu core [Wilbert Pol].
- 0.148u2            : Fixed ADDC opcode (cpu\jaguar\jaguar.c) [Ville Linde].
- 0.133u5            : Jaguar updates [Robbbert]: Added RGB 24-bit pixels (for Iron Soldier). Added depth 0 and 1 to scaled bitmaps (for Val Disere Skiing). Preliminary work on PIT support.
- 0.129u1            : Nathan Woods fixed multisession bug in the Jaguar implementation.
- 0.128u4            : Pointer-ified the Jaguar CPU core [Aaron Giles].
- 0.109u5            : Aaron Giles converted the jaguar disassemblers to the new format and added step in/out support where it was obvious.
- 0.94u1             : Changed description to 'Jaguar GPU'.
- 0.79u3             : Adding a missing case to jaguargpu_get_info() [Nathan Woods].
- 0.72u1             : Nathan Woods fixed a bug in the NORMI opcode (cpu\jaguar\jaguar.c).
- 0.71u2             : Nathan Woods get_jaguar_memory() now based on memory_get_read_ptr(). Jaguar blitter won't crash if it is instructed to blit to a weird address.
- 0.70u5             : Nathan Woods fixed a potential crash in jaguar_tom_regs_w() (vidhrdw\jaguar.c), while this crash doesn't occur under normal execution of the cojag games though, it can occur if modified ROMs are being used.
- 0.62               : Added cpu\jaguar\jaguar.c/h and jagdasm.c.
- 30th October   2002: Aaron Giles sent in the long-delayed Cojag driver, supporting Area 51, Maximum Force and Vicious Circle complete with perfect sound emulation.
- GAMES: Atari - Area 51 (1995), Maximum Force (1996), Vicious Circle (1996 prototype)
- PCB: Jaguar CPU V1.0 6sc880hf106 (Area51, Maxforce)
- SOURCE: cpu\jaguar\jaguar.cpp


12.6   Jaguar DSP

- 0.211              : Simplified handlers. Reduced defines and unnecessary lines. Use shorter/correct type values. Removed register_postload. Added notes [cam900]. Fixed Clang error: unused variable 'DMAFLAG' [-Werror,-Wunused-const-variable] [AJR].
- 0.94u1             : Changed description to 'Jaguar DSP'.
- 0.72u1             : Nathan Woods fixed a bug in the NORMI opcode.
- 30th October   2002: Aaron Giles sent in the long-delayed Cojag driver, supporting Area 51, Maximum Force and Vicious Circle complete with perfect sound emulation.
- GAMES: Atari - Area 51 (1995), Maximum Force (1996), Vicious Circle (1996 prototype)
- PCB: Jaguar DSP V1.0 sc414201ft (has Motorolla logo) (Area51)
- SOURCE: cpu\jaguar\jaguar.cpp




13.    Toshiba

13.1   T5182

- 0.267              : Removed hardcoded tags. Cleanups (seibu\t5182.cpp) [cam900].
- 0.246              : Changed driver to seibu\t5182.cpp/h.
- 0.221              : Simplified some handlers (audio\t5182.cpp) [Osso].
- 0.174              : Preliminary T5182 hookup in Metal Freezer, not yet working [Angelo Salese].
- 0.159              : Moved T5182 internal ROM in the device, instead of having it in the games' romsets. General cleanups to bring the device closer to modern MAME [Osso].
- 0.150              : Added 'T5182 MCU' device. Converted the T5182 to a device [Osso].
- 0.128u5            : Updated T5182 memory mapping a bit to properly handle mirrored areas. Added comments about how shared ram works [Lord Nightmare].
- 0.127              : Lord Nightmare updated the T5182 documentation/pinout.
- 0.112u4            : Added audio\t5182.c/h. Added T5182 support, which gives sound to darkmist, mustache and panicr [Nicola Salmora, Lord Nightmare, Ernesto Corvi].
- 28th February  2007: R. Belmont - Nicola submitted the completely reconstructed internal ROM of the Toshiba T5182 custom cpu and an updated driver so all 3 games (Darkmist, Mustache Boy and Panic Road) using it have full sound and music.
- NOTES: The Toshiba T5182 is an encrypted custom Z80 cpu.
- PCB: Toshiba T5182 MCU, NDIP50
- DRIVERS: darkmist.cpp, metlfrzr.cpp, mustache.cpp and panicr.cpp
- SOURCE: seibu\t5182.cpp


13.2   TMP8039
- NOTES: See I8039.
- PCB: TMP8039P-6 (Megazone)


13.3   TMP8085
- NOTES: See I8085.
- PCB: TMP8085AP (Hvoltage, Splndrbt)



13.4   TLCS-Z80

13.41  TMPZ84C011

- 0.196              : Changed description to 'Toshiba TMPZ84C011'.
- 0.155              : Small cleanup [hap].
- 0.154              : Added cpu\z80\tmpz84c011.c/h. Added 'TMPZ84C011' device. Start to make the TMPZ84C011 a proper CPU type, migrate code from niyanpai to the cpu. Spent most of the day (many hours) trying to work out why this was hanging with my changes only to find out the 68k change broke the driver (it's still broken, i don't have time to fix it). csplayh5.c, kenseim.c, nbmj9195 and niyanpai.c now uses the TMPZ84C011 core with callbacks. Moved tmpz84c011 specifics to its own files, make z80ctc a subdevice rather than adding it separately it in each driver using a tmpz84c011 [David Haywood]. Small cleanup. NOTE: If you want a handler for logging unmapped read/write, put it in the driver machine config, like we do with 8255, for example: MCFG_I8255_OUT_PORTB_CB(LOGGER("PPI8255 - unmapped write port B", 0)). Got rid of TMPZ84C011_Z80CTC trampolines. Daisy chain config is on TMPZ84C011 external pins. Made TMPZ84C011 pins external instead of making drivers having to interface with its internal peripherals. Looks like unmapped output bits are 0 [hap].
- PCB: DIP40 - TMPZ84C00AP (Tkdensho), TMPZ84C011AF (Bakuhatu), TMPZ84C011BF (Mjegolf), TMPZ84C015BF (Hanakanz, Quizchq)
- NOTES: Toshiba TMPZ84C011, MPUZ80/TLCS-Z80 ASSP Family => Z80 CPU, CTC, CGC and I/O8x5
- DRIVERS: csplayh5.cpp, kenseim.cpp, nbmj9195.cpp and niyanpai.cpp
- SOURCE: cpu\z80\tmpz84c011.cpp


13.42  TMPZ84C015

- 0.277              : Isolated cpu-specific memory translate functions (z80\z84c015.cpp) [holub].
- 0.227              : Added WDT emulation [AJR].
- 0.196              : Changed description to 'Toshiba TMPZ84C015'.
- 0.198              : Added missing callback for CTC ZC3 [Dirk Best].
- 0.197              : Changed main CPU type to TMPZ84C015 for most Z80-based games of ddenlovr.cpp. Changed CPU type to TMPZ84C015 in some dynax.cpp games [AJR].
- 0.189              : Added 'TMPZ84C015' device. Changed CPU type to TMPZ84C015 in Janputer '96/Janputer Special (Japan) and drive interrupts through internal CTC [AJR].
- 0.173              : Make the Z80/Z180 daisy chain an interface that interfaces with the existing interface. Prevent tmpz84c015_device::irq_priority_w from crashing or corrupting the daisy chain. Eliminate the need for TMPZ84C015_DAISY_INTERNAL by not overwriting elements in the daisy list (z80\tmpz84c015.h; drivers\pve500.cpp) [AJR].
- 0.154              : Removed cpu\z80\tlcs_z80.c. Added cpu\z80\tmpz84c015.c/h. Added preliminary tmpz84c015 (for Sony PVE-500), stupid daisy chain. Added savestate [hap].
- 0.153              : Added cpu\z80\tlcs_z80.c. New Z80 CPU derivate Toshiba TLCS-Z80. Improving emulation of (MESS) SONY PVE-500 video editing station [Felipe Sanches].
- NOTES: Toshiba TMPZ84C015, MPUZ80/TLCS-Z80 ASSP Family => Z80 CPU, SIO, CTC, CGC, PIO and WDT
- DRIVERS: ddenlovr.cpp, dynax.cpp, model1.cpp, model2.cpp and royalmah.cpp
- SOURCE: cpu\z80\tmpz84c015.cpp



13.5   TLCS-90

- 0.270              : Small spacing cleanup and removed execute_burn altogether (renamed but keeping it in z180 after seeing TODO note) (tlcs90\tlcs90.cpp). Moved too generic irq enum to class (tlcs90\tlcs90.h) [hap].
- 0.261              : Added I/O ports and halt support (tlcs90\tlcs90.cpp) [David Haywood].
- 0.220              : Split up the t90_internal_registers_r/w handlers. This work anticipates modifying the internal register map for TMP90PH44 and other incompatible model. First draft of 90844 register map and improved logging for unemulated registers [AJR].
- 0.215              : Separated TMP90840 and TMP90844 disassemblers (cpu\tlcs90\tlcs90.cpp) [AJR].
- 0.196              : Separated TLCS-90 external IRQ line state from internal request register (fixes Mahjong Tenkaigen slowdowns) [AJR].
- 0.193              : Added cpu\tlcs90\tlcs90d.cpp/h.
- 0.192              : First step towards modernization of internal peripherals (cpu\tlcs90\tlcs90.cpp) [AJR].
- 0.187              : Replaced fake TLCS-90 I/O space with callbacks (cpu\tlcs90\tlcs90.cpp, drivers\dynax.cpp, royalmah.cpp and machine\nmk004.c). Forwarding and some other stuff (cpu\tlcs90\tlcs90.h) [AJR].
- 0.185              : Added TMP90PH44 device type for Sega 837-13551 I/O Board [AJR].
- 0.180              : Changed the TLCS-90 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.177              : Fixed a nonsense check [hap].
- 0.162              : Fixed TRUN bit masking (timers start/stop) [Rainer Keuchel].
- 0.155              : Fixed TLCS90 16-bit timers & support NMI in the core [trap15].
- 0.153              : Modernized TLCS-90 cpu core [Wilbert Pol].
- 0.137u1            : Fabio Priuli added save states to the TLCS-90 CPU core.
- 0.130u2            : Fixed pending IRQs handling in the TLCS-90 CPU core [Luca Elia].
- 0.128u6            : Pointer-ified the TLCS-90 core [Atari Ace].
- 0.111u1            : Added cpu\tlcs90\tlcs90.c/h. Luca Elia added new Toshiba TMP90840/TMP91640 CPU core.
- 10th December  2006: Luca Elia - More TLCS-90 games work: A few more games powered by the TMP91C640 CPU now work, like the much requested Mahjong Tenkaigen. These screenshots are actually from one of several bootlegs that where dumped, the original is protected and does not work yet. Another one running on pretty much the same hardware, dynax.c, is Mahjong Reach. This is a bootleg as well, and the only dumped version.
-  3rd December  2006: Luca Elia - I've emulated the TMP90C840/TMP91C640 microcontrollers, some of the few CPU's still unsupported in MAME. They belong to the TLCS-90 family, introduced by Toshiba in the early nineties, the ancestor of the TLCS-900 that powers the Neo Geo Pocket. This 8-bit CPU is essentially a Z80 on steroids: different binary encoding, 20 bit address bus, more opcodes and addressing modes, interrupt controller, 6 timers, A/D conversion, serial interface, 53 I/O lines, 48 internal registers plus optional internal RAM and ROM. The TMP90C841 (ROM-less '840), with external program rom, drives the music in Rapid Hero, which is no longer silent. The TMP91C640 was used in a number of Dynax mahjong games of that era, like Mahjong If (1990) and Mahjong Tensinhai (1995). There are a couple more mahjong games for which the internal rom has been dumped, through an expensive adapter, that I'm now working on, as well as a few bugs to fix before I'm done with this.
- 22nd June      2005: Tomasz Slanina - Working again on TLCS-90 core.
- NOTES: The Toshiba TLCS-90 is similar to the Z80 but with different opcodes.
- PCB: Toshiba TMP91P640N-10 Microcontroller with 16k internal ROM and TLCS-90 core (SDIP64). The NMK004 is a TLCS90-based Toshiba TMP91P640F-10 MCU with 16K internal OTP PROM and the internal ROM is secured (QFP64).
- DRIVERS: chihiro.cpp, dynax.cpp, naomi.cpp, nmk16.cpp, nmkmedal.cpp, royalmah.cpp and taitotz.cpp
- SOURCE: cpu\tlcs90\tlcs90.cpp


13.51  TMP90840

- 0.196              : Changed description to 'Toshiba TMP90840'.
- 0.153              : Added 'TMP90840' device.
- 0.111u1            : Added cpu\tlcs90\tlcs90.c/h. Luca Elia added new Toshiba TMP90840/TMP91640 CPU core.
- DRIVERS: nmk16.cpp and royalmah.cpp
- SOURCE: cpu\tlcs90\tlcs90.cpp


13.52  TMP90841

- 0.196              : Changed description to 'Toshiba TMP90841'.
- 0.153              : Added 'TMP90841' device.
- 0.111u1            : Added cpu\tlcs90\tlcs90.c/h. Luca Elia added new Toshiba TMP90840/TMP91640 CPU core.
- PCB: TMP90C841, SDIP64 (Raphero, Cafedoll)
- DRIVERS: dynax.cpp, nmk16.cpp, nmkmedal.cpp and royalmah.cpp
- SOURCE: cpu\tlcs90\tlcs90.cpp


13.53  TMP90PH44

- 0.220              : Split up the t90_internal_registers_r/w handlers. This work anticipates modifying the internal register map for TMP90PH44 and other incompatible model. First draft of 90844 register map and improved logging for unemulated registers [AJR].
- 0.196              : Changed description to 'Toshiba TMP90PH44'.
- 0.185              : Added 'TMP90PH44' device (cpu\tlcs90\tlcs90.cpp). Added TMP90PH44 device type for Sega 837-13551 I/O Board. Removed identical second halves of overdumped MCU PROMs (machine\jvs13551.cpp) [AJR].
- 0.111u1            : Added cpu\tlcs90\tlcs90.c/h. Luca Elia added new Toshiba TMP90840/TMP91640 CPU core.
- PCB: TMP90PH44 (hikaru.cpp), TMP90PH44 QFP64 (naomi.cpp)
- DRIVERS: chihiro.cpp and naomi.cpp
- SOURCE: cpu\tlcs90\tlcs90.cpp


13.54  TMP90C051
- 0.220              : Added TMP90C051 disassembler (only accessible through unidasm for now) [AJR].
- DRIVERS: ???
- SOURCE: cpu\tlcs90\tlcs90d.cpp


13.55  TMP91640

- 0.261              : Dumped I/O microcontroller (TMP91640 internal code) [Sergio Galiano].
- 0.196              : Changed description to 'Toshiba TMP91640'.
- 0.153              : Added 'TMP91640' device.
- 0.111u1            : Luca Elia added new Toshiba TMP90840/TMP91640 CPU core.
-  3rd December  2006: Luca Elia - I've emulated the TMP90C840/TMP91C640 microcontrollers, some of the few CPU's still unsupported in MAME. They belong to the TLCS-90 family, introduced by Toshiba in the early nineties, the ancestor of the TLCS-900 that powers the Neo Geo Pocket. This 8-bit CPU is essentially a Z80 on steroids: different binary encoding, 20 bit address bus, more opcodes and addressing modes, interrupt controller, 6 timers, A/D conversion, serial interface, 53 I/O lines, 48 internal registers plus optional internal RAM and ROM. The TMP90C841 (ROM-less '840), with external program rom, drives the music in Rapid Hero, which is no longer silent. The TMP91C640 was used in a number of Dynax mahjong games of that era, like Mahjong If (1990) and Mahjong Tensinhai (1995). There are a couple more mahjong games for which the internal rom has been dumped, through an expensive adapter, that I'm now working on, as well as a few bugs to fix before I'm done with this.
- 16th July      2005: Luca Elia - Mahjong Chuukanejyo is the first game dumped from the box that bnathan sent to Guru. A 1998 Mahjong game by Dynax, running on ddenlovr.c hardware. The CPU is a Z80. Most games from that box use a currently unemulated Toshiba processor (TMP91P640N) instead.
- PCB: TMP91P640N-10 running at 10.7375MHz (Tenkai), TMP91C640N, Toshiba TMP90C840AF in QFP64 package with 8Kbyte internal ROM
- DRIVERS: dynax.cpp
- SOURCE: cpu\tlcs90\tlcs90.cpp



13.6   TMP68HC000

- NOTES: See M68000.
- PCB: TMP68HC000N, DIP64 (Bbakraid, Rezon), TMP68HC000P (Tetrisp2), TMP68H000P (Mouja), TMP68000 (Kickoff))


13.61  TMP68301

- 0.263              : Added parity tx support (m68000\tmp68301.cpp) [O. Galibert].
- 0.261              : Downshift timer irqs by one (m68000\tmp68301.cpp), fixes Poker Spirit input reading [Angelo Salese].
- 0.255              : Make driver a little les chatty (m68000\tmp68301.cpp) [O. Galibert].
- 0.254              : Changed machine\tmp68301.cpp/h to cpu\m68000\tmp68301.cpp/h. Reimplement TMP68301 in the new68k framework. Added timers and fixed interrupts (thanks 'Guardians / Denjin Makai II' for the test cases). Removed leftover debug break and reduce log spam [O. Galibert]. Fixed confusion between internal copy of SR and interrupt in-service register (m68000\tmp68301.cpp) [AJR].
- 0.222              : READ/WRITE macros removal (machine\tmp68301.cpp) [Osso].
- 0.209              : Disabled side effects for interrupt acknowledgment [AJR].
- 0.208              : Merged TMP68301 on-chip peripheral emulation with CPU device [AJR].
- 0.205              : More accurate registration and acknowledgment of pending interrupts within TMP68301 interrupt controller [AJR].
- 0.190              : Replaced bogus "kiwame_nvram" with TMP68301 parallel interface in seta.cpp driver [AJR].
- 0.188              : Interrupt cleanups [Angelo Salese].
- 0.186              : Changed description to 'Toshiba TMP68301'.
- 0.165              : Fixed TMP68301 masking of parallel data register [Luca Elia].
- 0.160              : Initialized TMP68301 variables [Osso].
- 0.153              : Updated TMP68301 device to use DEVCB2 [Osso]. Added mem_mask [Alex Jackson].
- 0.152              : Removed machine\m68kfmly.c/h. Fixed long standing regression bug with Real Break flipscreen (machine\tmp68301.c and drivers\realbrk.c). Death to m68kfmly.c/h, hooked parallel port to TMP68301 in Niyanpai driver (very preliminary). Added TMP68301 pdir register [Angelo Salese].
- 0.149u1            : Added 'TMP68301' device. Converted TMP68301 to a device [Osso].
- 0.68               : Added machine\tmp68301.c/h.
- 0.37b12            : Added machine\m68kfmly.c/h.
- NOTES: The Toshiba TMP68301 is a 68HC000 + serial I/O, parallel I/O, 3 timers, address decoder, wait generator, interrupt controller and all integrated in a single chip.
- PCB: TMP68301AF (Grdians, Kiwame, Niyanpai), TMP68301 (Penbros, Pzlbowl)
- DRIVERS: bingowav.cpp, hrdvd.cpp, joystand.cpp, kiwame.cpp, niyanpai.cpp, realbrk.cpp and seta2.cpp
- SOURCE: m68000\tmp68301.cpp


13.62  TMP68303

- 0.261              : Added stub for TMP68303 [Angelo Salese].
- NOTES: Toshiba TMP68303
- PCB: TMP68303F-16
- DRIVERS: bingowav.cpp, joystand.cpp and pkspirit.cpp
- SOURCE: m68000\tmp68301.cpp


13.7   TLCS-870 / TMP87PH40AN

- 0.221              : Simplified some handlers [Osso].
- 0.201              : Added cpu\tlcs870\tlcs870_ops.cpp, tlcs870_ops_dst.cpp, tlcs870_ops_helper.cpp, tlcs870_ops_reg.cpp and tlcs870_ops_src.cpp. Flesh out TLCS870 core. This added opcode execution for all TLCS870 opcodes that I previously wrote a skeleton of for the Hyper Neogeo 64 IO MCU, refactoring and cleaning code along the way. Flags still need verifying (and in some cases adding), CPU cycles for timing still need adding. TMP87PH40 specific peripherals (including interrupt handling) etc. still need adding. Overall this should move things forward and make it easier to work with tho, obviously with the goal of finishing it off and seeing if the dumped HNG64 IO MCU is suitable for all board types or not. ALU flags, passes internal RAM check. Interrupt wait loop depends on JF always getting set. Takes first interrupt. Bit of port interface guessing to pass port based shared RAM check. Added analog ports, fixed some TLCS870 exec issues. Start adding stubs for various tlcs870 features. Fake timer to push it along [David Haywood].
- 0.196              : Changed description to 'Toshiba TMP87PH40AN'.
- 0.193              : Added cpu\tlcs870\tlcs870d.cpp/h.
- 0.185              : Moved macros into source file for now to avoid potential naming conflicts [AJR].
- 0.183              : Added cpu\tlcs870\tlcs870.cpp/h. Added 'TMP87PH40AN' device. Added preliminary TLCS-870 disassembler - Work in Progress [ghost, David Haywood].
- NOTES: Toshiba TLCS-870 Series MCUs. The TLCS-870/X expands on this instruction set using the same base encoding. The TLCS-870/C appears to have a completely different encoding.
- DRIVERS: hng64.cpp
- SOURCE: cpu\tlcs870\tlcs870.cpp




13.8   TLCS-900

- 0.282              : Fixed uninitialised members. Also got a lot of stuff out of the header that doesn't need to be there (tlcs900\dasm900.cpp) [Vas Crabb].
- 0.281              : DASM: SFR symbol names (tlcs900\dasm900.cpp, tlcs900\tmp94c241.cpp) [Felipe Sanches].
- 0.228              : Fixed disassembly of PC-relative addressing (tlcs900\dasm900.cpp) [AJR].
- SOURCE: cpu\tlcs900\dasm900.cpp


13.81  TMP94C241

- 0.282              : Show SFR symbols in disassembled code for names for TMP96C141 [Felipe Sanches].
- 0.281              : DASM: SFR symbol names (tlcs900\dasm900.cpp, tlcs900\tmp94c241.cpp) [Felipe Sanches].
- 0.275              : Added tlcs900\tmp94c241.cpp/h. Added the TMP94C241 variant. Use TMP94C241 CPU for (MESS) Technics SX-KN5000, hooked up I/O to onboard CPU peripherals [Felipe Sanches].
- DRIVERS: (MESS) kn5000.cpp
- SOURCE: cpu\tlcs900\tmp94c241.cpp


13.82  TMP95C061

- 0.282              : Show SFR symbols in disassembled code for names for TMP95C061 [Felipe Sanches].
- 0.270              : Replaced a number of preprocessor macro constants with enum and constexpr. Use callback arrays and member function templates to simplify I/O port handling (tlcs900\tlcs900.cpp) [Felipe Sanches].
- 0.265              : Fixed setting programcounter in debugger (tlcs900\tlcs900.cpp) [hap].
- 0.254              : Added basic ADC support (based on TMP95C063) [Windy Fairy].
- 0.242              : Check timer enable before clocking chained timer, this improves (MESS NeoGeo Pocket Color) ngpc svccard2. Fixed LCDF16, ANDCF16, ORCF16 and XORCF16 opcodes (cpu\tlcs900\900tbl.hxx and tlcs900.h) [dink].
- 0.222              : Added cpu\tlcs900\900htbl.hxx and tmp95c061.cpp/h. Splitted derived types into separate files. No need for separate 8-bit and 16-bit maps now. Break up the register blocks. Correct cycle counts for TLCS-900/H CPU core. Prepare to add support for original TLCS-900 devices [AJR].
- 0.196              : Changed descriptions to 'Toshiba TMP95C061'.
- 0.184              : Added 'TMP95C061' device (cpu\tlcs900\tlcs900.cpp).
- NOTES: Toshiba TMP95C061
- PCB: Toshiba TMP95C061AF TLCS90/900 compatible 16-bit Micro-Controller (TQFP100) (wanganmd, rrvac), Toshiba TMP95C061BFG MCU (Anpanman2)
- DRIVERS: namcos10.cpp
- SOURCE: cpu\tlcs900\tmp95c061.cpp


13.83  TMP95C063

- 0.282              : Show SFR symbols in disassembled code for names for TMP95C063 [Felipe Sanches].
- 0.272              : Correct typo from MAME 0.270 commit (tlcs900\tmp95c063.cpp) [Hydreigon, hap].
- 0.270              : Replaced a number of preprocessor macro constants with enum and constexpr. Use callback arrays and member function templates to simplify I/O port handling (tlcs900\tlcs900.cpp) [Felipe Sanches]. Fixed inadvertenty duplicated lines [Vas Crabb].
- 0.223              : Fixed MAX instruction (tlcs900\900tbl.hxx) [AJR].
- 0.222              : Added cpu\tlcs900\900htbl.hxx and tmp95c063.cpp/h. Splitted derived types into separate files. No need for separate 8-bit and 16-bit maps now. Break up the register blocks. Correct cycle counts for TLCS-900/H CPU core. Prepare to add support for original TLCS-900 devices [AJR].
- 0.221              : Simplified some handlers [Osso].
- 0.196              : Changed descriptions to 'Toshiba TMP95C063'.
- 0.193              : Added cpu\tlcs900\dasm900.h.
- 0.180              : Changed the TLCS900 disassembler to use 'std::ostream &' internally. Further cleanups to the TLCS900 disassemlber. Fixed spacing issues, converted a char[] buffer to std::string [Nathan Woods].
- 0.174              : Changed cpu\tlcs900\900tbl.inc to 900tbl.hxx.
- 0.170              : Added analog inputs to TMP95C063 [Ville Linde].
- 0.169              : Fixed duplicate tags in TLCS900 [Ville Linde].
- 0.154              : Fixed usage of uninitialized members in tlcs900h_device [Oliver Stoeneberg]. Added int6 to TMP95C063 [Ville Linde].
- 0.153              : Changed cpu\tlcs900\900tbl.c to 900tbl.inc [Oliver Stoeneberg].
- 0.150              : Added 'TMP95C063' device. Modernized TLCS-900 cpu core [Wilbert Pol]. Moved the I/O handling into it's own class & hooked up TO1/TO3 to output on Port A. A hack is needed because ngpc doesn't set PACR/PAFC, which may be because it's a custom part. Changed Taito PJC driver (Operation Tiger) to use TMP95C063 CPU. Separated I/O Ports on both CPU's so you can apply the DEVCB2 callbacks individually. Added 8/16 bit data bus configuration to TLCS900H. Default is 16bit, (MESS) NeoGeo Pocket is 8 bit [smf].
- 0.148u2            : Made the drivers a bit more user friendly (cpu\tlcs900\tlcs900.c) [Wilbert Pol].
- 0.148u1            : Fake 'done serial sending' IRQ in TLCS-900/H. Fixes SNK Gals' Fighter in the (MESS) ngp.c driver. Fixed BIT operation on bytes for bit numbers > 7 [Wilbert Pol].
- 0.147u2            : Implemented TLCS-900/H 4-byte prefetch queue [Wilbert Pol].
- 0.146u4            : Added support for TMP95C063 CPU [Ville Linde]. Major Taito Type-Zero driver update [Ville Linde]: Added support for TMP95C063 CPU. Modernized address maps. Improved 2D rendering. Hooked up IO CPU comms (TMP95C063). Hooked up IDE controller. Basic 3D graphics emulation.
- 0.131u1            : TLCS-900/H CPU core fixes [Wilbert Pol]: Reimplemented hdma. Fixed bugs in the EX (mem), R instructions.
- 0.131              : Added cpu\tlcs900\tlcs900.c/h, 900tbl.c and dasm900.c. Added Toshiba TLCS-900/H CPU core [Wilbert Pol].
- PCB: Toshiba TMP95C063F (Landhigh)
- DRIVERS: taitopjc.cpp and taitotz.cpp
- SOURCE: cpu\tlcs900\tmp95c063.cpp




14.    Konami

14.1   KONAMI-1

- 0.213              : Decrypt KONAMI1 opcodes in the debugger [smf].
- 0.164              : Replaced M6809 CPU1 with KONAMI-1 in Juno First, Mega Zone, Gyruss, Track & Field, Roc'n Rope, Circus Charlie, Hyper Sports, Super Basketball, Road Fighter, Jail Break and Finalizer - Super Transformation.
- 0.125u4            : Changed machine\konami.c to machine\konami1.c/h.
- 0.30               : Added machine\konami.c.
- NOTES: The Konami_1 CPU is a 6809 with opcodes scrambled.
- PCB: Konami custom chip, DIP42 or DIL42, Fujitsu fab., A072 (Megazone), A082 (Jailbrek) and A087 (Finalizr)
- DRIVERS: circusc.cpp, finalizr.cpp, gyruss.cpp, hyperspt.cpp, jailbrek.cpp, junofrst.cpp, megazone.cpp, rocnrope.cpp, sbasketb.cpp and trackfld.cpp
- SOURCE: machine\konami1.cpp


14.2   KONAMI CPU

- 0.277              : Corrections to EXG/TFR opcode (GitHub #13544; m6809\konami.cpp) [hap, Jim Westfall]. Set EXG/TFR reg A high byte to 0x10 [hap].
- 0.263              : Removed TODO note: What happens with block/shift opcodes when count is 0? maybe a full loop? Parodius does an indexed LSRD and checks for A==0 to jump over the opcode). Looped opcodes make more sense like this (m6809\konami.cpp). Be consistent with uppercase data and reg names and renamed some opcodes (m6809\6x09dasm.cpp and m6809\konami.lst) [hap]. Shift amount for the extra shift opcodes is 4-bit (m6809\konami.lst) [Jim Westfall].
- 0.251              : Changed m6809\konami.ops to konami.lst. 6x09 TFR/EXG improvement: Removed tuple implementation used by the EXG and TFR instructions of the 6809, 6309 and Konami CPUs. It was unnecessary because fundamentally these are implemented with a single, 16 bit wide temporary register. Changed how the 6809 CPU processes the invalid 8 to/from 16 bit register combinations. Their behavior now matches actual hardware. I used page 66 and 138 of Darren Atkinson's 6x09 manual (https://colorcomputerarchive.com/repo/Documents/Books/Motorola%206809%20and%20Hitachi%206309%20Programming%20Reference%20%28Darren%20Atkinson%29.pdf) for reference. I also double checked with my own hardware (http://tlindner.macmess.org/?p=945). Checked for regressions using (MESS) CoCo + NitrOS-9, Aliens and 88Games [Tim Lindner]. CPU has internal /4 divider. Enable 'hd6309 native mode' (m6809\konami.cpp/h). Match indexed opcode timing with hd6309 and fixed carry flag on LSRD & ASRD. Fixed looped shift opcodes indexed mode (m6809\konami.lst), fixes Parodius DA! background in Level 7 & 9 does not move. Don't use m_opcode as a temp variable and no need for those safe_shift functions (m6809\konami.cpp). Added IMM_IM from hd6309 [hap].
- 0.223              : Fixed ASR8 and ASR16 opcodes (cpu\m6809\base6x09.ops) [hap]. Still perform an IRQ acknowledge cycle on software interrupts (cpu\m6809\base6x09.ops). Fixes (MESS) Fairlight CMI IIx memory-map diagnostics [Ryan Holtz].
- 0.222              : Fixed broken ROLD/RORD opcodes (m6809\konami.ops) [RndMnkIII].
- 0.203              : Konami CPU is big-endian (tools\unidasm.cpp) [AJR].
- 0.180              : Added cpu\m6809\6x09dasm.cpp. Removed cpu\m6809\knmidasm.cpp. Merged the M6809, HD6309 and KONAMI CPU disassemblers and changed to properly use streams [Nathan Woods].
- 0.162              : Removed cpu\konami\konamops.c and konamtbl.c.
- 0.154              : Changed description to 'KONAMI CPU'. Converted KONAMI CPU to use delegates. DEVCB WRITE8 was in fact enough (thanks AWJ for noticing) [Fabio Priuli]. Added missing members to save registration and fixed typo in M6809 device_post_load(), fixing savestate regressions in many drivers that use this CPU family (like failing save states in Haunted Castle MT05616) [Alex Jackson].
- 0.149u1            : Added 'KONAMI' device.
- 0.148u2            : Added cpu\m6809\konami.ops. Moved konami\konami.c/h and knmidasm.c to m6809\konami.c/h and knmidasm.c. Rewrote KONAMI CPU core. Not sure about the Konami timings; they are definitly different from the previous core but the previous timings were a guess. KONAMI CPU fixes; Simpsons gets further now. Konami CPU EXG bug fix. Konami CPU fix, Parodius works now. Konami CPU fix, doesn't seem to help with anything (m6809\konami.ops). Fixed PC relative addressing on konamicpu; Super Contra and Thunder Cross work now (m6809\konami.ops) [Nathan Woods]. Fixed builds on at least OSX [Wilbert Pol]. Fixed compile on older OS X tools (m6809\konami.ops) [Curt Coder]. Made 6309 compatible with UNIDASM [smf]. Looked through m6809 ops and fixed what i noticed (improves Rollergames) (m6809\base6x09.ops and konami.ops). Changed KONAMI's exchange mask globally to 7 (m6809\konami.c and konami.ops) [hap]. Fixed compile problems on some OS X versions (m6809\konami.c/h and konami.ops) [R. Belmont].
- 0.128u6            : Changed Konami setlines callback to pass a device. Updated all drivers accordingly [Aaron Giles, Atari Ace]. Pointer-ified the Konami core [Aaron Giles].
- 0.126u1            : Nicola Salmoria added save state suport to Konami CPU & Aliens.
- 0.101u4            : Aaron Giles updated the KONAMI disassembler to new format.
- 0.99u7             : Aaron Giles fixed all Konami CPU games crashed.
- 0.36b8             : Cleaned up the Konami-2 emulations [Juergen Buchmueller].
- 23rd October   1999: Juergen Buchmueller did some Konami CPU fixes.
- 0.36b4             : Ernesto Corvi fixed a Konami CPU bug which caused problems with Parodius' dancer level.
- 12th August    1999: Ernesto Corvi added more addressing modes to the Konami CPU.
- 11th August    1999: Nicola sent in a driver for Parodius and added two new opcodes to the Konami CPU (needed for Parodius).
- 0.36b2             : Added cpu\konami\konami.c/h, konamops.c, konamtbl.c and knmidasm.c. Konami 052001/053248 CPU emulation, used by many games [Ernesto Corvi, Manuel Abadia].
- NOTES: The KONAMI CPU based on the M6809 CPU core.
- GAMES: Konami - Ajax (1987), Thunder Cross (1988), Gang Busters (1988)
- PCB: 053248 CPU (Parodius, Surpratk), 52001 CPU (88games), 052526 (Blockhl)
- DRIVERS: 88games.cpp, ajax.cpp, aliens.cpp, blockhl.cpp, chqflag.cpp, crimfght.cpp, gbusters.cpp, hcastle.cpp, parodius.cpp, rollerg.cpp, simpsons.cpp, surpratk.cpp, thunderx.cpp and vendetta.cpp
- SOURCE: cpu\m6809\konami.cpp





15.    MIPS CPUs

- 0.210              : Preserve upper 32 bits for single-precision fp operations. While this behaviour is undefined according to the MIPS R4000 Microprocessor User's Manual, various factors point toward it most likely being correct, including: 1. The fact MIPS-I exposes 16x64-bit floating-point registers, but internally implements them as pairs of 32-bit registers (with only the even-numbered pairs being valid for arithmetic operations), making it somewhat likely MOV.S, like LWC1 and SWC1, can access either half. 2. Explicit mention in IDT documentation and "See MIPS Run", i.e. "The odd-numbered registers can be accessed by move and load/store instructions", and other commentary. 3. The presence of paired-single operations in later MIPS32/64 specifications, which operate on independent single-precision values stored in each of the lower and upper halves of a single floating-point register [Patrick Mackinlay].
- 0.179              : Fixed disassembly window [smf].
- 0.173              : Fixed behavior for 32/64 bit mode floating point register aliasing [R. Belmont]. Branch and Link instructions unconditionally set return address register [Happy].
- 0.164              : Minor MIPS fixups. Fixed drc bug [Ted Green].
- 0.163              : Make fast RAM handling faster by caching certain values [MooglyGuy].
- 0.155              : Made badcop exception handling cleaner [MooglyGuy].
- 0.154              : The official MIPS ABI doesn't have $ in front of the software names for the integer registers http://math-atlas.sourceforge.net/devel/assembly/007-2816-005.pdf & the debugger thinks you're entering a hex number when you're trying to use them. I've left the disassembler, but the official ABI doesn't use them in source either (the only supporting evidence I found for them is the Linux ABI). I also removed the space padding which hasn't had the intended effect since the new debugger was introduced [smf].
- 0.150              : Made both DRC and Non-DRC compile for MIPS, RSP and SH2 core and added option to enable/disable DRC from command line (-drc -nodrc by default it's on). Added command line option to force DRC C backend (emu\emuopts.c) [Miodrag Milanovic].
- 0.148u1            : Added direct dynamic entry load to virtual TLB (cpu\vtlb.c). vtlb_fill doesn't appear to provide an easy way to determine whether a failure is due to a presence or permission error also entries need to be marked dirty or the performance improvement is minimal [Carl].
- 0.141u1            : Make MIPS DRC selectable by #ifdef [R. Belmont].
- 0.135u4            : Enhanced the UML opcodes for LOAD, LOADS and STORE to support arbitrary scaling factors. Previously, specifying a size implied a scaling factor equal to the size (i.e., specifying DWORD meant the index was scaled by 4). This is still the default. However, now you can specify the scale explicitly for other cases. For example, you can specify DWORD_x1 to fetch a DWORD but don't scale the index at all, or BYTE_x8 to fetch a BYTE while scaling the index by 8. Updated all backends to make this work [Aaron Giles].
- 0.133u5            : Enabled alternate register naming in the MIPS core [Harmony].
- 0.125u7            : Correct the dependencies for the MIPS core [Atari Ace].
- 0.125u5            : MIPS recompiler update: Updated to no longer explicitly specify flags. Tweaked register tracking to match new DRC frontend system. Updated UML logging to output new frontend statistics. Fixed left/right accesses to work with recent memory handler changes [Aaron Giles].
- 0.125u1            : Removed cpu\mips\mdrc64.c and mdrcold.c.
- 0.124u4            : Inverted the sense of the memory mask that is passed to read/write handlers. Previously, the mask indicated which bits were NOT requested to be read/written. Now, the mask indicates which bits ARE to be read/written, which is more logical. Updated a number of drivers and the MIPS CPU cores to comply [Aaron Giles].
- 0.122u5            : Fixed bug where the 64-bit DRC was not saving rbp [Aaron Giles].
- 0.119u4            : Fixed 64-bit DRC bug that broke kinst in the previous release. Added code to detect potential hotspots in the 64-bit DRC. Added hotspots to all the seattle.c games and several of the vegas.c games [Aaron Giles].
- 0.119u3            : Fixed several more bugs in the 64-bit MIPS recompiler. It is now capable of running the Seattle games and the 3D Gauntlets [Aaron Giles].
- 0.118u6            : Made a cleanup pass through the new x86emit.h code emitters, changing the way memory is referenced and replacing macros with inline functions. Updated MIPS and PowerPC drc cores to use the new emitters. Removed the old macro-based ones in x86drc.h [Aaron Giles].
- 0.118u4            : Added new functions to the memory system to support CPU cores explicitly specifying the access mask on 32-bit and 64-bit data bus systems. This enables the MIPS core to handle SWL/SWR and SDL/SDR without a read/modify/write cycle. Updated the C and DRC MIPS cores to use this new mechanism. Fixed recently introduced bug in the mips3 core that caused the C core to launch off into nowhere after the first instruction [Aaron Giles].
- 0.118u3            : Consolidate common code between drc and non-drc MIPS cores [Aaron Giles].
- 21st December  2005: Aaron Giles - Figure out why Tenth Degree no longer worked. It used to, and I was sure it was due to the Voodoo rewrite. I spent quite a bit of time looking into that, assuming I was returning an incorrect value from the status register or something. Turns out I was completely wrong. Instead, an "optimization" I had made to the MIPS dynarec core a while back had a subtle side effect. The problem was literally with the particular opcode: slti r2,r3,$1. In the old dynarec core, that was translated as: mov eax,[r3.lo]; mov edx,[r3.hi]; sub eax,1; sbb edx,0; shr edx,31; mov [r2.hi],0 and mov [r2.lo],edx. The optimization I added was to convert code that subtracted 1 from a register to use the dec opcode instead, since it is more compact. So the new code was: mov eax,[r3.lo]; mov edx,[r3.hi]; dec eax; sbb edx,0; shr edx,31; mov [r2.hi],0 and mov [r2.lo],edx. Which is 4 bytes smaller, taking up less instruction/trace cache space. Multiply this over a lot of generated code and it has an impact. The problem is that dec eax is not quite the same as sub eax,1. Specifically, dec does not set the carry flag, meaning that the sbb instruction that followed would never "borrow" from the high word, messing up the math. So with that, Tenth Degree is working again, and better than ever. One thing I discovered in my recent research is that if certain values (red, green, blue, alpha, Z, and W) overflow during triangle rasterization, they are allowed to wrap in a slightly odd fashion. For example, if the red component increases from $FF to $100 to $101 over the course of several pixels, you would expect it to wrap from $FF to $00 to $01. But the internal microcode in the Voodoo actually checks explicitly for $100 and clamps it to $FF, while allowing $101 to wrap to $01. So what you actually get is a transition from $FF to $FF to $01. Why is this important? Well, let's say you are drawing a triangle such that the leftmost pixel has a red value of 0.0 and the rightmost pixel has a red value of 1.0. Converting these values to integers between 0-255 means the left value is $00 and the right value is $100. If the Voodoo allowed simple wrapping, that last pixel would be drawn as $00, showing up as an ugly black pixel right next to a bright red one. The simple clamping logic allows for a bit of slop of 1 on either the high or low side without producing artifacts. The upshot is that if you run an old build of MAME and look at Tenth Degree, you'll see lots of artifacts - unsightly black or white pixels that shouldn't be there. Implementing this clamping logic turns out to fix these problems. Mace: The Dark Age also suffered from the same problem to a lesser degree. I bet the Tenth Degree engine was based off of the Mace engine.
- 0.96u3             : Added better debugging support to the MIPS core [Nathan Woods].
- 0.96u2             : Modified the MIPS DRC core to disable optimizations when mame_debug is on. This makes it easier to run comparative traces when running both with and without MIPS DRC enabled (cpu\mips\mdrcold.c) [Nathan Woods].
- 0.84u3             : Fixed crash in the MIPS core introduced with the 0.84u2 changes [Aaron Giles].
- 0.82u2             : Added cpu\mips\mdrcold.c. Added support for the Config register and for new variants: R4700, QED5271 and RM7000. Fixed bug in LWXC1/LDXC1/SWXC1/SDXC1 instructions. Extracted core codegen portion into new #include file mdrcold.c (mips3drc.c) [Aaron Giles].
-  8th May       2004: Aaron Giles - So I spent about half the week trying to rewrite the MIPS recompiler from scratch, and then remembered what an awful lot of work it was. So I went back to the existing one, which works, and decided to start applying most of the optimizations there. The final result won't be as substantially faster as I would have liked, but I hope I can get a good chunk of the speedups in. So far so good on about half of them, but the most recent one (register allocation of floating point registers and using SSE math throughout) is causing me fits like the off-kilter NFL Blitz image. The games boot now, but their geometry is seriously screwed.
- 28th April     2004: Aaron Giles - I have about 1/4 of the instructions rewritten, as well as the core control flow analysis. I still need to finish up the instructions, write the final register allocator, and then get it working, so I think it will be a few weeks before I have anything to show for it. I'm currently guessing it will be about 2x as efficient as the old one. I'm also restructuring it a bit so that it will be possible to add an x86-64 backend eventually.
- 28th February  2004: Aaron Giles - MIPS recompiler rewrite: I have about 1/4 of the instructions rewritten, as well as the core control flow analysis. I still need to finish up the instructions, write the final register allocator, and then get it working, so I think it will be a few weeks before I have anything to show for it. I'm currently guessing it will be about 2x as efficient as the old one. I'm also restructuring it a bit so that it will be possible to add an x86-64 backend eventually.
- 0.81u6             : MIPS software interrupt fix [Aaron Giles].
- 0.81u5             : MIPS core interrupt fixes and MIPS core MIPS3DRC_FLUSH_PC option for accurate PC handling when debugging. Fixed MIPS bug when directly accessing 2-byte values in big endian mode [Aaron Giles].
- 12th April     2004: Fixed a bug in the MIPS CPU core where software interrupts were masked by the global IE flag [Aaron Giles].
- 0.79u2             : Removed cpu\mips\dismips32.mak.
- 19th February  2004: smf fixed the standalone MIPS disassembler.
- 0.78               : Fixed handling of condition codes so they are stored in CCR31 now and handling of CCR31 so that rounding modes are set correctly (in the DRC only) (cpu\mips\mipsdasm.c) [Aaron Giles].
- 0.76u1             : Changed cpu\mips\mips.c/h to psx.c/h.
- 0.75               : Replaced instances of "inline", "static inline", and "static __inline" with "INLINE". This fixes some build problems with xmame and makes things more consistent [Lawrence Gold].
- 0.72u1             : Removed use of the GCC specific varargs on macros feature in mips.c [Nathan Woods].
- 0.71               : Added cpu\mips\dismips.mak.
- 0.37b3             : Added cpu\mips\mips.c/h, mipsdasm.c, dismips32.mak and dismips.c. Preliminary MIPS CPU emulation [smf].
- NOTES: The only type of processor currently emulated is the one from the PSX. This is a custom r3000a by LSI Logic with a geometry transform engine, no mmu & disabled data cache.


15.1   MIPS-I

- 0.277              : MIPS disassembler refinements (mips1): Changed hexadecimal prefix from $ to 0x ($ means something else in MIPS assembler syntax) and omit for small numbers. Use shorthand mnemonics bal, beqz(l), bnez(l), li, move, neg, negu, not where applicable. Added delay slot to jr ra for stepping out. Removed invalid instructions from other MIPS cores and use .word syntax for invalid instructions (mips\mips1dsm.cpp) [AJR].
- 0.276              : Removed embedded syscall logging (mips\mips1.cpp) [Patrick Mackinlay].
- 0.259              : Cache diagnostic fixes. Implemented cvt.w.fmt infinity/NaN exception (mips\mips1.cpp) [Patrick Mackinlay].
- 0.258              : Improved cache logic for partial word store (mips\mips1.cpp) [Patrick Mackinlay].
- 0.257              : Emulated instruction and data caches. Fixed swl/swr cache logic (mips\mips1.cpp) [Patrick Mackinlay].
- 0.255              : Fixed address translation (mips\mips1.cpp) [Patrick Mackinlay].
- 0.218              : Alignment checking/exceptions (mips\mips1.cpp) [Patrick Mackinlay].
- 0.214              : Added undocumented behaviour of REGIMM opcode (mips\mips1.cpp) [Patrick Mackinlay].
- 0.213              : Address is only 26 bits (mips\mips1dsm.cpp). Clear softfloat exceptions (mips\mips1.cpp). Rework interrupts. This fixes a bug causing (MESS) IRIX to crash on 4D/20. Specifically, IRIX doesn't handle the case where the pc is pointing to an unmapped address when an interrupt occurs; presumably on real hardware this doesn't happen because the instruction fetch happens before interrupts are tested (or the pc isn't updated until after), and the fetch exception is prioritised over the incoming interrupt (mips\mips1.cpp) [Patrick Mackinlay].
- 0.212              : Added bus error line (cpu\mips\mips1.cpp). Diagnostic fixes. Some fixes identified by MIPS Rx3230 diagnostics: Assert/clear irq based on fpu exception state and mask entryhi/lo reserved bits (mips\mips1.cpp) [Patrick Mackinlay].
- 0.208              : FPU emulation. Code refactoring makes the changes hard to isolate, but the main improvements are: Implemented fpu instructions and exceptions. Correct swl/swr implementation. TLB MRU lookup optimization. Interrupt and privilege debugger breakpoints (mips\mips1.cpp). BC2/BC3 always work. BCzF/BCzT can be used (by reading input lines) when coprocessor 2 or 3 are enabled, even when there's no real coprocessor hardware (mips\mips1.cpp) [Patrick Mackinlay].
- 0.206              : Fixed stupid tlb error (mips\mips1.cpp). Fixed coprocessor exceptions: Set the coprocessor error number in the cause register. Correct side-effect handling in address translation. Added logging for RISC/OS system calls (mips\mips1.cpp). Magic number removal and more logging (mips\mips1.cpp) [Patrick Mackinlay].
- 0.205              : Added FPA imp/revision numbers (mips\mips1.h). Handle exceptions in delay slot instructions. I introduced this error when adding tlb support and modifying the exception code previously. This resolves the error, cleans up delayed branch handling and fixes a panic in the mips rx2030 and rx3230 driver (mips\mips1.cpp). Make sure the exception target address isn't incremented (mips\mips1.cpp). TLB fixes: Correct cop0 context register encoding. Correct invalid tlb entry exception vector. Improved logging (mips\mips1.cpp). RX3230 SCSI DMA (machine\mips_rambo.cpp) [Patrick Mackinlay].
- 0.204              : Changed mips\r3000.cpp/h to mips1.cpp/h and mips\r3kdasm.cpp/h to mips1dsm.cpp/h. Fixed overflow logic (mips\mips1.cpp). Handle no cache (mips\mips1.cpp) [Patrick Mackinlay].
- NOTES: MIPS-I = MIPS R2000/A, MIPS R3000/A, IDT R3041, IDT R3051, IDT R3052/E, IDT R3071, IDT R3081 and 'Sony Playstation 2 IOP'
- SOURCE: cpu\mips\mips1.cpp


15.11  R2000

- 0.265              : Avoid (MESS) SGI 4d1-3b panic. Bump R2000 processor revision to avoid emulating a tlb bug (mips\mips1.cpp) [Patrick Mackinlay].
- 0.211              : MIPS Computer Systems machines promoted to working. While still requiring a few workarounds, RC2030/RS2030 can now be considered to be working, RC3230/RS3230 will hopefully follow shortly. A first draft of instructions for use are here: https://wiki.mamedev.org/index.php/Driver:MIPS [Patrick Mackinlay].
- 0.204              : Added R2000A, R3000 and R3000A device types. Configurable cache sizing and FPU. Improved device type and CPU/FPU id logic [Patrick Mackinlay].
- 0.203              : New skeleton driver for machines made by MIPS Computer Systems, which used MIPS R2000, R3000 and R6000 CPUs and ran RISC/os (a port of UNIX System V Release 3). Initial focus is the RC2030 headless workstation. As of this commit, it gets part-way through its I/O processor diagnostics with output to a serial terminal [Patrick Mackinlay].
- NOTES: MIPS R2000
- DRIVERS: (MESS) mips.cpp
- SOURCE: cpu\mips\mips1.cpp


15.12  R3000

- 0.204              : Changed mips\r3000.cpp/h to mips1.cpp/h and mips\r3kdasm.cpp/h to mips1dsm.cpp/h. Modernized R30xx core. Replaced memory accessors. Implemented TLB and address translation. Correct exception vector logic. Improved cache isolation behaviour. Added comments/formatting [Patrick Mackinlay].
- 0.200              : Fixed some R3000 bugs, started fleshing out IOP devices in (MESS) Sony PS2 [Ryan Holtz].
- 0.193              : Added cpu\mips\r3kdasm.h.
- 0.180              : Changed the R3000 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : R3000 is separate CPU, helps building some drivers with SOURCES (scripts\src\cpu.lua) [Miodrag Milanovic].
- 0.148u1            : Modernised the R3000 core: The following variants are supported: R3041, R3051, R3052, R3071 and R3081. Endianness is now specified by MCFG_R3000_ENDIANNESS() (default is big-endian). Removed configuration struct. Cache sizes and FPU availability are now determined from the CPU type. Added state saving. Added BrCond (conditional branch) input callbacks. (MESS) Update sgi_ip6.c following r3000 changes. Fixed compilation under MSVC2008 (cpu\mips\r3000.c) [Phil Bennett].
- 0.129u4            : Improved disassembly of R3000 code that uses the TLB or FPU [R. Belmont].
- 0.128u3            : Converted the R3000 core to reference their data via pointers instead of global structs, in anticipation of future changes [Aaron Giles].
- 0.101u4            : Updated R3000 core to the new disassembler interfaces. Updated R3000 disassemblers to new format [Aaron Giles].
- 0.59               : Added cpu\mips\r3000.c/h.
-  3rd March     2002: Fixed a bug in the swl/swr instructions in the R3000 CPU core [Aaron Giles].
- 0.55               : Added cpu\mips\r3kdasm.c.
- DRIVERS:
- SOURCE: cpu\mips\mips1.cpp


15.13  R3041

- 0.217              : COP0 initialization for R3041 [Patrick Mackinlay].
- 0.204              : Changed mips\r3000.cpp/h to mips1.cpp/h and mips\r3kdasm.cpp/h to mips1dsm.cpp/h. Modernized R30xx core. Replaced memory accessors. Implemented TLB and address translation. Correct exception vector logic. Improved cache isolation behaviour. Added comments/formatting [Patrick Mackinlay].
- 0.148u1            : Changed description to 'R3041' and 'R3041 (big)' to 'R3041'. Modernised the R3000 core: The following variants are supported: R3041, R3051, R3052, R3071 and R3081. Endianness is now specified by MCFG_R3000_ENDIANNESS() (default is big-endian). Removed configuration struct. Cache sizes and FPU availability are now determined from the CPU type. Added state saving. Added BrCond (conditional branch) input callbacks. (MESS) Update sgi_ip6.c following r3000 changes [Phil Bennett].
- 0.122u6            : Splitted 'R3000 (big)' into 'R3000 (big)' and 'R3041 (big)'.
- 0.94u1             : Changed description to 'R3000 (big)'.
- 0.78u2             : Changed description to 'R3000__big_'.
- 0.76u2             : Fixed R3000 instruction timings for MULT/DIV [Aaron Giles].
- 0.75u1             : Fixed the speedup for R3000 version of Area 51 / Max. Force Duo [Aaron Giles].
- 0.59               : Added cpu\mips\r3000.c/h.
- PCB: IDT 79R3041-25J XB9647P, SDT 79R3041 (Policetr), IDT79R3041 (Sshooter, Maxforce) and sdt79r3041 (Area51)
- DRIVERS: jaguar.cpp, policetr.cpp and turrett.cpp
- SOURCE: cpu\mips\mips1.cpp


15.14  R3051

- 0.204              : Changed mips\r3000.cpp/h to mips1.cpp/h and mips\r3kdasm.cpp/h to mips1dsm.cpp/h. Modernized R30xx core. Replaced memory accessors. Implemented TLB and address translation. Correct exception vector logic. Improved cache isolation behaviour. Added comments/formatting [Patrick Mackinlay].
- 0.148u1            : Changed description to 'R3051'. Modernised the R3000 core [Phil Bennett]: The following variants are supported: R3041, R3051, R3052, R3071 and R3081. Endianness is now specified by MCFG_R3000_ENDIANNESS() (default is big-endian). Removed configuration struct. Cache sizes and FPU availability are now determined from the CPU type. Added state saving. Added BrCond (conditional branch) input callbacks. (MESS) Update sgi_ip6.c following r3000 changes [Phil Bennett].
- 0.118u5            : Splitted 'R3000 (big)' into 'R3000 (little)' and 'R3000 (big)'.
- 0.76u2             : Fixed R3000 instruction timings for MULT/DIV [Aaron Giles].
- 0.59               : Added cpu\mips\r3000.c/h.
- PCB: IDT79R3051-25J 9407C (SuperEagleShot)
- SOURCE: cpu\mips\mips1.cpp


15.15  R3560
- NOTES: Super Real Mahjong P5 uses in MAME the R3000 (little) CPU instead of the R3560.
- PCB: R3560 (Srmp5)




15.2   MIPS-III/IV

- 0.277              : MIPS disassembler refinements (mips3): Changed hexadecimal prefix from $ to 0x ($ means something else in MIPS assembler syntax) and omit for small numbers. Use shorthand mnemonics bal, beqz(l), bnez(l), li, move, neg, negu, not where applicable. Added delay slot to jr ra for stepping out. Removed invalid instructions from other MIPS cores and use .word syntax for invalid instructions. Fixed field spacing for some instructions (mips\mips3dsm.cpp) [AJR].
- 0.276              : Don't start a new block for every callable helper (mips\mips3drc.cpp) [Vas Crabb].
- 0.275              : Removed static address space accessors. All they were doing was hurting performance (mips\mips3.cpp) [Vas Crabb].
- 0.272              : Fixes for IDT-specific instructions (mips\mips3.cpp and mips3dsm.cpp) [Ryan Holtz]. Use 32x32=64-bit multiply inlines (mips\mips3.cpp) [AJR].
- 0.262              : Use multibyte.h helpers (mips\o2dprintf.hxx). Reduced amount of code hidden behind preprocessor #ifs (mips\mips3.cpp) [AJR].
- 0.257              : Reverted mistaken change in MAME 0.256 (mips\mips3drc.cpp). Fixes warfa and sf2049 no longer starts [Patrick Mackinlay].
- 0.256              : Removed stray printf (mips\mips3.cpp) [hap]. Fixed tlb modify exception registers (mips\mips3com.cpp and mips\mips3drc.cpp) [Patrick Mackinlay].
- 0.255              : Fixed MIPS3 PRID. Report proper fcr0 PRID (same as CPU PRID in most cases) [Jiaxun Yang].
- 0.254              : Sign-extend result of COP0 LL instruction. Ported COP0 Random implementation from new R4000 interpreter (mips\mips3.cpp) [Jiaxun Yang].
- 0.243              : Added new DRC option to added extra validation to hash jumps (mips\mips3drc.cpp) [Ted Green]. Moved unchanging conditionals outside for loop in generate_checksum_block; 7% faster [Ryan Holtz].
- 0.241              : Replaced a std::function with a marginally more efficient delegate (cpu\mips\mips3.cpp) [Vas Crabb]. Fixed some bugs [Patrick Mackinlay].
- 0.231              : Ensure there is at least 1 cycle to be counted after reading Count. Without this, some timing loops won't exit to the scheduler until they complete (mips\mips3drc.cpp) [Aaron Giles].
- 0.223              : Removed depricated DRC flag and added a flag to disable intrablock branching (cpu\mips\mips3.h, mips3drc.cpp) [Ted Green].
- 0.215              : Log a message if a "fast" register is set via the debugger (mips\mips3.cpp) [Vas Crabb].
- 0.210              : Use sequence generator for random tlb indices so that DRC and non-DRC code sequences match. Fixed tlbmiss in delay slot (mips\mips3drc.cpp) [Ted Green].
- 0.209              : Added divide by zero floating point exception. Clean up LL/SC instructions and add debug break to DRC. Always set BadVaddr on TLB miss. The TLB handler needs this to fill in the table (mips\mips3drc.cpp). Don't adjust EPC to pc-4 when not backing up (mips\mips3.cpp) [Ted Green].
- 0.207              : Use the new 64x64 multiply helpers. Make sure unordered exceptions are generated by abs.fmt. Correct an unimportant drc flag (mips\mips3.cpp and mips3fe.cpp) [Patrick Mackinlay].
- 0.206              : Fixed fastram accesses and COP0 exception handling. Fixed block checksumming. Fixes IRIX installer hang on (MESS) ip225015 (mips\mips3drc.cpp) [Ryan Holtz]. Added minimal support for revealing the Secondary Cache Line size in the Status Register [tyfighter]. Added debugger exception hook [Patrick Mackinlay].
- 0.204              : Added cpu\mips\o2dprintf.hxx. Various changes: Added an #ifdef to display DPRINTF calls from the SGI O2 PROM. Switched R4000BE/LE, R4400BE, R4600BE and R5000BE to 64-bit data bus. Fixed a bug that caused a crash with 64-bit data bus and the DRC. Started laying the groundwork for cache support. Added logging of cache opcodes [Ryan Holtz]. Added secondary cache instruction decoding (mips\mips3dsm.cpp) [Happy].
- 0.203              : MIPS3 exception handling fixes: Nested exceptions shouldn't overwrite the EPC. Nested tlb exceptions go to the general exception vector. Removed breakpoint for tlb exceptions and branch to proper vector [Patrick Mackinlay].
- 0.202              : Implemented DMULT and DMULTU [Bryan Perris].
- 0.193              : Added cpu\mips\mips3dsm.h.
- 0.192              : Minor MIPS DRC fastram optimization and simplification (cpu\mips\mips3drc.cpp) [Ted Green].
- 0.184              : Retry fixing FPU register aliasing (mips\mips3.cpp and mips3drc.cpp). This fixed 3D graphic objects in Hyperdrive. Make sure branch delay slot instruction is not virtual instruction before trying to generate code to add it to the block checksum (mips\mips3drc.cpp) [Happy].
- 0.180              : Moved the declaration for dasmmips3() to a header file. Changed the MIPS3 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.175              : Updated rom naming/mapping and changed ram instantiation (mips\mips3drc.cpp and machine\vrc4373.cpp) [Ted Green].
- 0.173              : Fixed DMULT and DMULTU in both interpreter and DRC modes (mips\mips3.cpp) [marathonman]. Port Happy's branch-and-link fix from mips3 interpreter to DRC and PPC aliasing fix to the MIPS3 DRC (mips\mips3drc.cpp). Fixed interpreter bug where BADCOP exceptions would execute the faulting opcode twice [MooglyGuy].
- 0.172              : Fixed for MIPS3 compare timer (mips\mips3com.cpp) [Happy].
- 0.168              : N64 simulation of cpu cycles from the skipped RDRAM initialization. This allows later SI initialization to see something closer to an expected value for the system uptime (cpu\mips\mips3.c and machine\n64.c) [Happy].
- 0.167              : Fix to allow mips3 exceptions to detect branch delay slots for settings. Correction to handle the pathological, yet possible, case of an exception triggering an exception (cpu\mips\mips3.c) [Happy].
- 0.166              : N64 driver improvements: Added coprocessor unusable exceptions for LWC1/SWC1/LDC1/SDC1 (cpu\mips\mips3.c). Changed PI DMA granularity from eight bytes to two bytes. Added delay timer for SI DMA. Changed behavior for interlaced video to be more useful, but still needing revision. Simplify/removed some AI DMA interrupt signals. Removed line that cleared EEPROM contents with every machine reset (warm or cold). Added cache operation descriptions to MIPS disassembly (cpu\mips\mips3dsm.c). Stop ERET instruction spamming the error log [Happy].
- 0.164              : Added MCFG_FORCE_NO_DRC option (cpu\mips\mips3drc.c) [MooglyGuy].
- 0.162              : Added routine for clearing fastram region so that dynamic ram allocation can be mapped to fastram (cpu\mips\mips3.h and mips3drc.c) [Ted Green].
- 0.161              : Added integer divide-by-zero handling to MIPS III cores. Made fast RAM option common to both interpreter and DRC [MooglyGuy].
- 0.156              : Do not overwrite the opcode_desc.delay vptr in drc_frontend::describe_one() (cpu\drcfe.c). Added command-line option -[no]drc_log_uml to control DRC UML disassembly logging. Allows logging of DRC UML disassembly without re-compiling / removes. DRCUML_OPTION_LOG_UML and all the core-specific LOG_UML defines (cpu\mips\mips3.c). Added command-line option -[no]drc_log_native to control DRC native diassembly logging. Allows logging of DRC native disassembly without re-compiling, removes DRCUML_OPTION_LOG_NATIVE and all the core-specific LOG_NATIVE defines, added logging() to drcbe_interface and added logging_native() to drcuml_state. Added asserts for (MESS) n64 -cart conker crash in mips3_device::generate_checksum_block() (cpu\mips\mips3drc.c) [Oliver Stoeneberg]. Sign-extend ROUND.L, TRUNC.L, CEIL.L and FLOOR.L (cpu\mips\mips3drc.c). Generate -0.0 for NEG.S/D of 0.0 as FNEG does not on x86 (cpu\mips\mips3drc.c). Fixed left-shift-of-signed-value issues (cpu\mips\mips3drc.c) [MooglyGuy]. Fixed compilation with GCC 4.4.7 (cpu\mips\mips3drc.c) [Lord Nightmare]. Fixed Killer Instinct DRC regression (cpu\drcfe.c) [Osso].
- 0.155              : Throw badcop exceptions on COP1 accesses while the COP1 status bit is not enabled (mips\mips3drc.c) [MarathonMan].
- 0.154              : Modernised MIPS3 cpu core [Wilbert Pol].
- 0.147u2            : hap fixed compile on mips3 C core.
- 0.145u2            : Checksum the delay slot in single-instruction blocks in the MIPS3 and RSP DRCs [Ryan Holtz].
- 0.141u1            : Fixed BADCOP exception handling in the MIPS III interpreter [MooglyGuy]. Fixed Compare interrupts in the MIPS III interpreter core. Aleck 64 games can now run under the MIPS III interpreter. Implemented proper TLB handling in the MIPS III interpreter [Harmony]. Fixed MIPS3 DRC case where branch delay slot straddles a page boundary and the page check confirms that the block is paged in. Include MIPS3 DRC delay slots in checksum calculations. Simplified UML parameters, as follows: Immediates can be passed raw, no IMM() wrapper required (and it's gone now). Fixed integer registers now use constants I0,I1,I2,etc instead of IREG(0),... Same for float registers F0,F1,F2,etc instead of FREG(0). Dynamic integer/float regs use inline functions ireg(),freg(). MEM macro is now a lower-case inline function mem() [Aaron Giles].
- 0.141              : MooglyGuy fixed writes in the MIPS III interpreter.
- 0.135u1            : MIPS3 TLB fixes: Now properly generating TLB fill exceptions under correct circumstances. TLB exceptions no longer trash low 4 bits of Context. Exceptions with the EXL bit set always go to vector 0x180. Fixed bug in vtlb code that caused us to lose track of previously registered fixed page ranges. Fixed MIPS3 behavior that would not clear out invalid page ranges from the VTLB under certain circumstances. Added support for TLB sizes less than 48 entries. Fixed TLBMOD exceptions so they also properly set BadVAddr [Aaron Giles].
- 0.130u1            : Update RA in MIPS III before executing the delay slot [R. Belmont].
- 0.130              : Added function calls to replace the MIPS3 and PowerPC DRC's various CPU_SET_INFO bits [Aaron Giles].
- 0.128u6            : Pointer-ified the MIPS 3 core [Aaron Giles].
- 0.125u9            : MIPS3 recompiler [Aaron Giles]: Don't generate compare interrupts unless the compare register was written to; fixes hangs in blitz, calspeed and others. Stash jump target address before executing delay slot; also, don't update link register until delay slot has finished executing; fixes hang in gauntleg. Marked IDT instructions for R4650 only. Accounted for time taken in throwaway likely branch slots. Fixed jalr to respect the correct link register. Fixed c.eq, c.lt, c.le to fail if unordered. Fixed swxc1, sdxc1 to use the correct source register (fixes many Gauntlet problems). Fixed CCR31 display in debugger. Fixed LWXC1/LDXC1; corrects gauntleg camera.
- 0.125u7            : Added save state support to the MIPS3 recompiler and virtual TLB system [Aaron Giles].
- 0.125u6            : Added cpu\vtlb.c/h. MIPS3 recompiler: Added UML comments for common state variables. Removed some unused fields. Implemented LL/LLD/SC/SCD (only works single-processor for now). Created common virtual TLB managment module. Updated MIPS and PowerPC code to make use of it [Aaron Giles].
- 0.125u4            : Removed cpu\x86drc.c/h and x64drc.c/h. MIPS3 dynamic recompiler: Fixed Cause register for bad COP instructions. Updated to use new/changed opcode forms. Changed context switch so that it only swaps a single pointer [Aaron Giles].
- 0.125u3            : MIPS core changes: Renamed struct mips3_config -> mips3_config. Updated all drivers to the new names. Removed MIPS3DRC_STRICT_COP0 flag, which is no longer used. A few minor cleanups. Moved implementation-specific state into a pointer hanging off of the core MIPS3 state. Removed large context in favor of a pointer to the large context to help improve context switch times [Aaron Giles].
- 0.119u2            : Added cpu\drcfe.c/h. Fixed MIPS3 disassembly of j/jal instructions. Created new generic x86/x64 logging system x86log, and updated both MIPS3 DRC cores to use it. Aaron Giles created new generic DRC frontend management. Future work involves retooling the MIPS3 frontend around this new architecture. Aaron Giles switched MIPS3 64-bit DRC over to new system that is more aggressive about register allocation and mapping. Sadly, there is little to no obvious performance benefit, but the resulting code is better organized. Aaron Giles created new generic x86/x64 logging system x86log, and updated both MIPS3 DRC cores to use it. Aaron Giles created new generic DRC frontend management. Future work involves retooling the MIPS3 frontend around this new architecture [Aaron Giles].
- 0.119u1            : Added cpu\mips\mdrc64.c, mips3fe.c/h and cpu\x64drc.c/h. Added preliminary attempt at a new x64 dynamic recompiler for the MIPS 3/4 CPUs. The current version works enough to run a few basic games (kinst, carnevil), but many others fail. Furthermore, this version is already being supplanted by a more advanced version that does register allocation and constant folding. For now it is disabled by default. Fixed several 64-bit errors in the code generators in x86emit.h [Aaron Giles].
- 0.118u3            : Added cpu\mips\mips3com.c/h. Consolidate common code between drc and non-drc MIPS cores [Aaron Giles].
- 0.114u4            : Updated the MIPS3 DRC to align the stack to sixteen-byte boundaries at the point of calls, as required by Mac OS X calling conventions. It doesn't break compatibility with Windows or Linux calling conventions. This fixes crashes in MIPS3 games when running on OS X for Intel [Vas Crabb].
- 0.104u3            : Added support for IDT-specific MIPS MUL instruction in the MIPS3 core, recompiler and disassembler [R. Belmont, Aaron Giles].
- 0.102u5            : Fixed subtle bug in the MIPS3 recompiler that prevented Tenth Degree from working [Aaron Giles].
- 0.102              : Fixed handling of the FR bit in the Status register on MIPS3. This fixes a few problems in CarnEvil, and probably affects a few other games as well. Also fixed bug where TLB exceptions were not filling in the Context and EntryHi registers correctly [Aaron Giles].
- 0.101u4            : Added missing SC/LL opcodes to the MIPS3 interpreter [R. Belmont].
- 0.101u3            : Added MMU support to the MIPS3 dynamic recompiler. Re-enabled it by default. Added direct fast RAM access to the dynamic recompiler, as well as optional hotspot optimizations. Most games should show a net speedup over the pre-MMU compiler.
- 0.101u2            : Added MMU support to the non-drc MIPS3 emulator. Converted the Killer Instinct, Seattle, Vegas, and Hyper Neo-Geo 64 drivers to a proper physical memory layout. Disabled the drc MIPS3 core until MMU support is added there as well [Aaron Giles].
- 0.84u2             : Added support for non-integral clock multipliers in the MIPS3 core [Aaron Giles].
- 0.76u2             : Fixed MIPS3DRC FP rounding glitches and now actually respecting the global FP rounding mode [Aaron Giles].
- 0.69a              : Few tweaks/minor optimizations to MIPS3 Dynacrec [Aaron Giles].
- 0.67               : Added cpu\mips\mips3drc.c.
- 0.63               : Added cpu\mips\mips3.c/h and mips3dsm.c. IPS III/IV CPU cores [Aaron Giles].
-  8th December  2002: Aaron Giles added CPU cores for MIPS III/IV architectures.
- NOTES: MIPS-III/IV = R4000, VR4300, VR4310, R4400, R4600, R4650, R4700, TX4925, R5000, QED5271, VR5500 and RM7000
- DRIVERS: aleck64.cpp, atlantis.cpp, caprcyc.cpp, hng64.cpp, iteagle.cpp, kinst.cpp, kpython.cpp, kpython2.cpp, magictg.cpp, namcops2.cpp, namcos23.cpp, seattle.cpp, vegas.cpp and vp101.cpp
- SOURCE: cpu\mips\mips3.cpp


15.21  R4000

- 0.258              : Intention is no longer a mask (mips\r4000.cpp) [Patrick Mackinlay].
- 0.245              : Partially implement secondary cache tag manipulation (mips\r4000.cpp) [Brice Onken].
- 0.244              : Added TimerIntDis mux to IPEX5 (mips\r4000.cpp) [Brice Onken].
- 0.242              : Set TLB global bit in EntryLo0/1 on TLBR instruction (mips\r4000.cpp) [Brice Onken].
- 0.231              : Timing improvements: External clock is doubled internally. Consume additional cycles for integer multiply/divide. Streamline memory access. Physical address space is 36 bits. Simplified branch state [Patrick Mackinlay].
- 0.229              : Save exception pc on reset [Patrick Mackinlay].
- 0.228              : Fixed several genuine issues found by Coverity (software) [Patrick Mackinlay].
- 0.220              : Initialized one variable to fixed problem in DEVNOCLEAR build [Osso].
- 0.219              : Cosmetic change [Patrick Mackinlay].
- 0.218              : Fixed bad virtual address for [ls][dw][lr] exceptions. Get rid of _t type name suffixes. Improved logging. Identified soft reset [Patrick Mackinlay].
- 0.214              : Report the correct sub-revision for the R4600, and allow specific R4x00 types to specify the FPU ID as well [Ryan Holtz].
- 0.213              : Mask cp0 registers. Rework interrupt handling to address two issues: Clean up software interrupt detection. Prioritize instruction fetch tlb miss exceptions over interrupts when interrupt occurs while PC is unmapped. The second issue is speculative but reasonably likely, and brings r4000 into line with mips1, where the need for this logic was discovered [Patrick Mackinlay].
- 0.210              : Preserve upper 32 bits for single-precision fp operations. While this behaviour is undefined according to the MIPS R4000 Microprocessor User's Manual, various factors point toward it most likely being correct, including: 1. The fact MIPS-I exposes 16x64-bit floating-point registers, but internally implements them as pairs of 32-bit registers (with only the even-numbered pairs being valid for arithmetic operations), making it somewhat likely MOV.S, like LWC1 and SWC1, can access either half. 2. Explicit mention in IDT documentation and "See MIPS Run", i.e. "The odd-numbered registers can be accessed by move and load/store instructions", and other commentary. 3. The presence of paired-single operations in later MIPS32/64 specifications, which operate on independent single-precision values stored in each of the lower and upper halves of a single floating-point register. Relaxed address validity checks in 32-bit mode allowing simplified base + offset computation. Removed inaccurate/partial cycle counting. Slight adjustment to ll/sc logic. Correct address alignment exception type. SGI IDE fixes. Corrects some TLB diagnostic errors (remaining ones require implementing a data cache) and the FPU "underflow" test (really an unimplemented instruction exception, not an underflow) by checking for denormalized or quiet NaN operands for all floating point arithmetic instructions [Patrick Mackinlay]. Changed LL/SC behaviour to not use a write tap. Possibly incorrect behaviour, but IRIX 6.5 installer doesn't hang anymore on miniroot creation. Added bus error functionality [Ryan Holtz].
- 0.207              : Added cpu\mips\r4000.cpp/h. Experimental R4000 mips3 implementation. Tweak address calculation. Added a primitive MRU scheme for tlb searches, resulting in an average of ~1.5 iterations per scan and 2-3% speedup in one test case. Also removed the confusing reverse-endian logic from lwl/lwr and friends because apparently no commercial software implementation has ever used it (and wasn't supported in any of the other instructions anyway). Paranoid approach for 64-bit mode check. Sign extension bugs. Signed multiply bug [Patrick Mackinlay]. Added the ability to CTC and CFC from unknown fpr30, which IRIX does often. Fixed ABS.S and ABS.D. Fixes X server crashing in IRIX [Ryan Holtz].
- 0.204              : Switched R4000BE/LE, R4400BE, R4600BE and R5000BE to 64-bit data bus [Ryan Holtz].
- 0.202              : Implemented DMULT and DMULTU [Bryan Perris]. Added R4000 and R4400 variants [Patrick Mackinlay].
- NOTES: MIPS R4000
- DRIVERS: (MESS) ews4800.cpp, indigo.cpp and jazz.cpp
- SOURCE: cpu\mips\r4000.cpp


15.22  VR4300

- 0.154              : Changed description to 'VR4300 (big)'.
- 0.150              : Changed description to 'VR4300 (big) DRC'.
- 0.130u1            : R. Belmont added specific support for NEC VR4300/4310 CPUs.
- NOTES: MAME uses for Eleven Beat or Magical Tetris Challenge the R4600 (big) CPU instead of the R4300.
- PCB: NEC D30200GD-100 VR4300, QFP120 (NeoGeoHyper64), CPU-NUS A (11beat, Mtetrisc)
- SOURCE: cpu\mips\mips3.cpp


15.23  VR4310

- 0.154              : Changed description to 'VR4310 (little)'.
- 0.150              : Changed description to 'VR4310 (little) DRC'.
- 0.130u1: R. Belmont added specific support for NEC VR4300/4310 CPUs.
- SOURCE: cpu\mips\mips3.cpp


15.24  R4400

- 0.204              : Switched R4000BE/LE, R4400BE, R4600BE and R5000BE to 64-bit data bus [Ryan Holtz].
- 0.202              : Implemented DMULT and DMULTU [Bryan Perris]. Added R4000 and R4400 variants [Patrick Mackinlay].
- SOURCE: cpu\mips\mips3.cpp


15.25  R4600

- 0.255              : Bumped major rev of R4600 PRID to 2 (original R4600 was too problematic so almost all systems are shipped with R4600 rev 2.0) (mips\mips3com.cpp) [Jiaxun Yang].
- 0.204              : Switched R4000BE/LE, R4400BE, R4600BE and R5000BE to 64-bit data bus [Ryan Holtz].
- 0.154              : Changed description to 'R4600 (little)'.
- 0.94u1             : Changed description to 'R4600 (little)' and 'R4600__big_' to 'R4600 (big)'.
- 0.78u2             : Changed description to 'R4600__little_' or 'R4600__big_'.
- 0.78               : Aaron Giles fixed handling of condition codes so they are stored in CCR31 now and handling of CCR31 so that rounding modes are set correctly (in the DRC only).
- 16th December  2003: Aaron Giles sent in a small fix to the MIPS3 dynarec core that caused problems in Vegas hardware games.
- PCB: SDT79R4600-100MS <50MHz (Kinst)
- DRIVERS: kinst.cpp
- SOURCE: cpu\mips\mips3.cpp


15.26  IDT R4650 (big)

- 0.254              : Fixed memory access handling in the IDT MIPS R4650 core. Note: The IDT MIPS-series manual is rather explicit about the R4650 lacking TLB entirely. Instead, COP0 registers 0 through 3 are occupied by Instruction Base/Bound and Data Base/Bound pairs, with the CPU throwing an address error if a user-mode memory access exceeds that bound, and adding the Base register to the user-mode access's virtual address if it's in-range. This fixes an assortment of crashes in at least rapidrvr, rapidrvrp, finfurl, motoxgo, timecrs2 and 500gp due to Namco's own program code accessing null or near-null addresses, as all games run in Kernel mode, meaning there is no address translation nor bounds-checking. Correctly support the R4650's lack of TLB [Ryan Holtz].
- 0.154              : Changed description to 'IDT R4650 (big)'.
- 0.150              : Changed description to 'IDT R4650 (big) DRC'.
- 0.104u4            : Hooked up the R4650 properly in the MIPS recompiler [R. Belmont].
- PCB: NKK NR4650-167, QFP208 = R4600-based 64bit RISC CPU (Gp500)
- DRIVERS: namcos23.cpp
- SOURCE: cpu\mips\mips3.cpp


15.27  R4700

- 0.154              : Changed description to 'R4700 (little)'.
- 0.150              : Changed description to 'R4700 (little) DRC'.
- 0.94u1             : Changed description to 'R4700 (little)'.
- 0.82u2             : Aaron Giles added support for the Config register and for new variants: R4700, QED5271, RM7000 and fixed bug in LWXC1/LDXC1/SWXC1/SDXC1 instructions and extracted core codegen portion into new #include file mdrcold.c (mips3drc.c).
- DRIVERS: seattle.cpp
- SOURCE: cpu\mips\mips3.cpp


15.28  TX4925

- 0.192              : Cleanup TX4925 implementation [Ted Green].
- 0.184              : Initial support for TX4925 CPU. Added TX4925 (big) and TX4925 (little) [R. Belmont].
- DRIVERS: vp101.cpp
- SOURCE: cpu\mips\mips3.cpp


15.29  R5000

- 0.220              : Added basic R5000 support. FCR31 now supports 8 condition flags. Added MOVF/MOVT support. Fixed MOVZ/MOVN ops [Ryan Holtz].
- 0.204              : Switched R4000BE/LE, R4400BE, R4600BE and R5000BE to 64-bit data bus [Ryan Holtz].
- 0.154              : Changed description to 'R5000 (little)' and 'R5000 (big) DRC' to 'R5000 (big)'.
- 0.150              : Changed description to 'R5000 (little) DRC' and 'R5000 (big)' to 'R5000 (big) DRC'.
- 0.143u8            : Various improvements to Magic the Gathering: Armageddon [Phil Bennett]. Replaced R4600 (big) CPU1 with R5000 (big) (150MHz).
- 0.94u1             : Changed description to 'R5000 (little)'.
- 0.78u2             : Changed description to 'R5000__little_'.
- 19th December  2003: Aaron Giles - Wow, that was a tricky bug. Turns out nobody was ever saving the FPU condition codes in the R5000 core, so if you took an interrupt between a compare and a branch on the result of that compare, you would hose the compare. This led to all kinds of nasty.
- 0.77               : Added seattle.c driver with R5000 CPU1 (144MHz) (blitz99, calspeed, carnevil, mace, sfrush and wg3dh).
- 0.76u2             : Aaron Giles fixed MIPS3 timer handling so we don't set a timer too far in advance and changed timer handling so that the default Compare value doesn't trigger timers, fixed cycle chomping to make sure we don't go over an interrupt boundary, added correct cycle times for MULT/DIV instructions and fixed display of the Count reigster in the debugger. Also added better support for tweaking the X86DRC FP rounding modes.
- 29th March     2003: Aaron Giles added MIPS 4 (R5000) support to the MIPS 3 (R4600) CPU core and he added dynamic recompiling to both of them.
- PCB: IDT 79RV5000 64-bit Processor (Gauntleg)
- PCB: R5000 (Blitz99)
- DRIVERS: magictg.cpp, namcops2.cpp, seattle.cpp and vegas.cpp
- SOURCE: cpu\mips\r4000.cpp and cpu\mips\mips3.cpp


15.2A  QED5271

- 0.204              : Added correct R5271 processor ID [Ted Green].
- 0.82u2             : Aaron Giles added support for the Config register and for new variants: R4700, QED5271, RM7000 and fixed bug in LWXC1/LDXC1/SWXC1/SDXC1 instructions and extracted core codegen portion into new #include file mdrcold.c (mips3drc.c).
- PCB: RM5271 (Gauntdl)
- DRIVERS: vegas.cpp
- SOURCE: cpu\mips\mips3.cpp


15.2B  VR5500
- 0.184              : Initial support for VR5500 CPU [R. Belmont].
- SOURCE: cpu\mips\mips3.cpp


15.2C  R5900
- 0.222              : READ/WRITE macros removal (machine\iopdma.cpp, iopintc.cpp, iopsio2.cpp, ioptimer.cpp, ps2dma.cpp, ps2intc.cpp, ps2sif.cpp, ps2timer.cpp, mips\ps2vif1.cpp and ps2vu.cpp) [Osso].
- 0.200              : Added cpu\mips\ps2vif1.cpp/h, ps2vu.cpp/h and vudasm.cpp/h. Added basic Emotion Engine support (MESS) PS2. Added S bit to TLB mapping. Added support for VSUB, VIADD, VSQI, VISWR, VOR, LQ, SQ, MFSA, MTSA, MFHI1, MFLO1, MULT1, DIV1, DIVU1, PEXTLW, PADDUW, PMFHI, PMFLO, PCPYLD, PCPYUD, SQC2 and LQC2 opcodes [Ryan Holtz].
- 0.199              : Added disassembler for Emotion Engine core opcodes (R5900LE) to cpu\mips\mips3.cpp (MESS PS2). VU macro ops are still to-do. Added VU0 macro-instructions to R5900 disassembler, pending split into separate device [Ryan Holtz].
- SOURCE: cpu\mips\mips3.cpp


15.2D  RM7000

- 0.154              : Changed description to 'RM7000 (little)'.
- 0.150              : Changed description to 'RM7000 (little) DRC'.
- 0.94u1             : Changed description to 'RM7000 (little)'.
- 0.82u2             : Aaron Giles added support for the Config register and for new variants: R4700, QED5271, RM7000 and fixed bug in LWXC1/LDXC1/SWXC1/SDXC1 instructions and extracted core codegen portion into new #include file mdrcold.c (mips3drc.c).



15.3   PSX CPU

- 0.277              : MIPS disassembler refinements (psx): Changed hexadecimal prefix from $ to 0x ($ means something else in MIPS assembler syntax) and omit for small numbers. Use shorthand mnemonics bal, beqz(l), bnez(l), li, move, neg, negu, not where applicable. Added delay slot to jr ra for stepping out (psx\psxdasm.cpp) [AJR].
- 0.275              : Added a delay after SPU DMA is triggered to prevent a lock up in Primal Rage II test mode & improved logging (psx\dma.cpp). Fixed regression in Pocket Racer (psx\dma.cpp) [smf].
- 0.254              : Implemented reached 0xFFFF and reached target bits in counter mode register (psx\rcnt.cpp) [Windy Fairy]. Suppress side effects [Vas Crabb].
- 0.253              : Modernized logging in subdevices (cpu\psx\*) [AJR].
- 0.248              : Initialise some DMA channel registers on reset, fixes (MESS) PlayStation Game Booster port peripheral no longer functions (cpu\psx\dma.cpp). Without this, booting a parallel port device jumps into the weeds. Actual DMA channel state on reset needs to be investigated [Vas Crabb].
- 0.245              : Removed a few unimportant 64-bit functions [AJR].
- 0.243              : Init cleanups [O. Galibert].
- 0.222              : Switched PlayStation CPU over to memory_access_specific [smf]. READ/WRITE macros removal (psx\psx.cpp) [Osso].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.203              : Use count_leading_zeros() & count_leading_ones() instead of counting manually (PSX GTE; cpu\psx\gte.cpp) [smf].
- 0.202              : Converted PSX SIO to DEVCB3 [smf].
- 0.201              : Hookup debugger_exception_hook and debugger_interrupt_hook [smf].
- 0.194              : Improved psx state saving [smf].
- 0.193              : Added cpu\psx\psxdasm.h. Removed cpu\psx\dismips.cpp and dismips.mak.
- 0.190              : Implemented program counter break point to PlayStation CPU & re-added PlayStation EXE, CPE & PSF loading [smf].
- 0.186              : Added cpu\psx\psxdefs.h.
- 0.180              : Changed the PSXCPU disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.178              : Fixed buffer overflow when debugging (cpu\psx\psxdasm.cpp) [smf].
- 0.157              : Changed clocks to rising edge (bus\psx\memcard.h and multitap.c) [Carl].
- 0.156              : Removed cpu\psx\siodev.c/h. Changed mess\machine\psxanalog.c/h, psxcard.c/h, psxcport.c/h and psxmultitap.c/h to bus\psx\analogue.c/h, ctlrport.c/h, memcard.c/h and multitap.c/h. Renamed PSX controller and memory card files. Converted PSX SIO to use DEVCB [smf].
- 0.153              : Use an interface for passing state to the disassembler instead of copying it into a structure for every line. Fixed lui/ori and lui/addi constant calculation by pretending instructions can be 8 bytes long [smf].
- 0.152              : Made dismips build again, need to move functionality to UNIDASM (cpu\psx\dismips.c and dismips.mak) [smf].
- 0.151              : Stopped div 0x80000000 in PSXCPU, 0xffffffff from causing an overflow exception. All loads cancel an outstanding load to the same register, not just lwl/lwr. Fix for "Complete a line of animals in Zooo (V2.01J) and the game will reset" by defaulting PSXCPU ram to 0. I don't know whether this is guaranteed or whether it's a game or emulation bug. Also tidied up a few things and added a couple of comments [smf].
- 0.150              : Removed some left-over TIMER_CALLBACK_MEMBER declarations (psx\dma.h and rcnt.h) [Oliver Stoeneberg]. Added undocumented opcode that behaves like DPCL (cpu\psx\gte.c and psxdasm.c) [smf].
- 0.149u1            : Don't clear m_berr on every instruction in PSXCPU [smf].
- 0.149              : Added a check for a bus error when fetching an instruction, the bus error condition is cleared before the fetch so bus errors in the debugger don't cause an exception to be triggered. Fixed GTE FLAG register calculation on MSVC builds (psx\gte.c). Slightly more defensive ram & rom mapping (cpu\psx\psx.c). Updated comment (psx\dma.c) [smf].
- 0.148u5            : Don't set E flag if the result rounds up to 2, just limit the result. PSX BIOS rom memory map is now handled by the CPU core as the size is controlled by an internal register. Simplified System 12 protection hack so that it doesn't involve remapping the bios rom area, which also allows the default value for ram to be removed. Use device timers instead of TIMER_CALLBACK_MEMBER (cpu\psx\dma.c/h and rcnt.c/h). Changed I/O to 16 bits and don't install memory handlers at run time (cpu\psx\psx.c). Removed unused variable. Don't map more than 4MB of rom as it will overwrite ram. Only causes a problem for mrdrilr2 because the bios is part of a much larger rom, none of the other drivers have a region large enough to cause a problem (cpu\psx\psx.c) [smf]. Work around MSVC2008/2010 warning (C4701: potentially uninitialized local variable 'h_over_sz3' used) [Phil Bennett].
- 0.148u4            : Brought disassembler up to date (psx\psxdasm.c). Removed some unused #defines & whitespace changes (psx\gte.c). Improved FLAG calculation in NCDS, CDP, NCDT, NCCS, CC, NCS, NCT & NCCT by checking for overflow after each addition (psx\gte.c). Fixed MVMVA flag calculation & replicate the bugs when mx is set to 3 or cv is set to 2 (psx\gte.c). Fixed RTPS flags and calculation. Fixed RTPT flags calculation & added a new divide implementation that uses a much smaller table (psx\gte.c). Removed comment as the divider is new (psx\gte.h). Partial support for setting the RAM size, if the size is set larger than the actual memory then RAM is repeated. As a result the RAM is no longer included in the drivers memory map, you have to specify the size in the machine (psx\dma.c/h, psx.c/h, drivers\konamigq.c, konamigv.c, ksys573.c, namcos10.c, namcos11.c, namcos12.c, taitogn.c, twinkle.c, zn.c and psx.c). Added a temporary way to get to the PSX RAM as a couple of share1 lookups remained. Renamed the gte acc class to int44 to better describe what it is & uses the register names instead of the array index in a couple of places. Make it clearer that you can't write to LZCR (psx\gte.c). Changed loop detection hack to use address mask to stop it crashing, NFS Vrally 2 doesn't crash straight away but it's graphics are completely corrupt (psx\dma.c). PSX CPU creates a ram device, this has exposed a problem with not removing the child devices from the hash map when removing replacing devices. At the moment I have changed device.c so that when any device is removed the hash maps are reset. Changed default value of ram to zero. Some of the system 12 games compared ram that hasn't been written to with the result from what we think is the keycus [smf]. Don't clear busy status until done and skip padding. This fixes the RE3 opening (psx\mdec.c). Be a bit more permissive with allowed transfer types from the CDROM (psx\dma.c) [Carl].
- 0.148u3            : Correct PSXCPU lwr mem_mask. Fixed a few comments (cpu\psx\psx.c). Reduced time before DMA interrupt is fired, as it stops incorrect textures being displayed in a few games and the PSE BIOS v2.2 (cpu\psx\dma.c). Added a note about how the time hack breaks other things. Fixed GTE A1/A1/A3 flag calculation when the result exceeds the maximum bounds. GPF & DPCT work with all values of sf & lm (cpu\psx\gte.c). Changed dcpl to dpcl to match official documentation, updated disassembly to match emulation (cpu\psx\gte.c and psxdasm.c). Update RGB FIFO 4 bytes at a time (psx\gte.c). Fixed GTE GPL & DCPL opcodes by porting over some changes from an old tree. Simplified MAC handling in GTE and fixed some incorrectly calculated values. Assumed flag register always gets cleared (psx\gte.c). Added comment to GTE_OP() that it's not used. This and the other two #defines that are marked as not used are probably not used on the real hardware either [smf].
- 0.148u2            : Fixed uninitialized members in cpu\psx\psx.c, rcnt.c and siodev.c [Oliver Stoeneberg].
- 0.148u1            : Uses a DEVCB2 for CPU to CD controller communication, the address decoding is internal to the CPU & the CD controller is on it's own 8 bit bus. Use DEVCB2 for CPU to CPU hookup as it's on it's own 16 bit bus. Removed the SPU hookup in TaitoGN at 0x1fa51c00 as it doesn't make sense, will wait for bug reports before investigating further [smf]. Force controller reset with SIO reset (cpu\psx\sio.c) [Carl].
- 0.148              : Removed machine\psx.c and includes\psx.h. Removed psx_state, all code shared between MAME and MESS is now in src\emu [smf].
- 0.147u4            : Preliminary DCPL GTE opcode (cpu\psx\gte.c) [smf].
- 0.147u3            : Added cpu\psx\siodev.c/h. Fixed CD & root counter irq's (cpu\psx\irq.c). Use DEVCB2 for hooking up irq controller to cpu core [smf]. Turned ZN security into a device (cpu\psx\sio.h). Split PSX SIO into two devices. Replaced usage of psx_sio_install_handler & psx_sio_input with devices [smf].
- 0.147u2            : Removed some legacy code (cpu\psx\psx.c, video\psx.h, includes\psx.h and machine\psx.c). Hooked up PSX IRQ's using DEVCB2 [smf].
- 0.142u4            : Added cpu\psx\irq.c/h, mdec.c/h, rcnt.c/h and sio.c/h. Various changes for PSX HW [smf]: Modernised internal memory map. MDEC is now an internal device of the PlayStation CPU. Root counter & Serial I/O converted to internal CPU devices. Moved PlayStation IRQ code to sub device of the CPU.
- 0.142u3            : Moved dismips.c, dismips.mak, psx.c/h and psxdasm.c from cpu\mips\ to cpu\psx\. Added cpu\psx\dma.c/h and gte.c/h. smf converted PlayStation DMA to an internal device to the CPU core. DMA to external devices can be set in the machine config, the old calls are still there until the rest of the code is converted.
- 0.141u4            : Changed description to 'PSXCPU'. smf converted PSX CPU core to C++.
- 0.135u1            : Harmony removed some magic numbers from machine\psx.c, replaced with #defines.
- 0.130              : smf fixed PSX CPU disassembly of -$8000, it was showing up as -$0.
- 0.129              : smf implemented GTE divider using reciprocal table derived by pSXAuthor, this should allow the results to be calculated as inaccurately as the real hardware.
-  3rd January   2009: smf - Last, but by no means least is pSXAuthor's investigation into the GTE divider. It has been known for a while that emulation of the divider is too accurate. I spent a little time looking at it last year & hypothisized that it multiplied using a reciprocal table. Independently pSXAuthor actually did the hard work of reverse engineering it & has kindly donated his discoveries. So everyone can enjoy innaccurate divisions. I doubt it has a major effect on anything, but it makes it easier to compare GTE results from the emulator to be compared to the results on a PlayStation. I plan on restarting the work to improve MAME's GTE, I have some fixes from last year but so much has changed since then that it's not just a copy & paste. BTW I think I introduced a bug in the division but it probably won't have a visible effect, but if you're thinking of taking the code for another emulator it might be worth waiting a while.
- 0.128u4            : Changed cpu\mips\mipsdasm.c to psxdasm.c. Pointerified the PSX CPU core and switched it to the new memory functions. Changed some MIPS_* to PSXCPU_* [smf].
- 0.124u3            : PSX core updates [smf]: Removed casts and removed unnecessary decoding from NCLIP. Added signed values to PAIR & PAIR64. Renamed PAIR64.lw to PAIR64.q. Tidied up DPCS, improved flag calculation and added support for lm/sf fields. Added sf/lm support to INTPL, improved flag calculation & calculates correct RGB. Fixed calculation of bit 31 of GTE FLAG register, when writing to it directly. Added lm mode to OP and fixed the calculation. Added lm mode to SQR.
- 0.124u2            : PSX updates [smf]: Fixed the SR masks for MTC0. Added ability to test the instruction/data cache ram. The scratchpad and BIU register are now handled internally to the CPU. All writes are performed with masks. SWL/SWR used to be implemented with two writes ( one byte and one word ) when writing three bytes, now it only ever performs one. Byte and Word writes use masks as they leave the rest of the register on the bus, which can be picked up by larger registers. The read/write functions to use are cached when the SR bits are updated, as are the bad address masks. Added coprocessor 1 & 3 support, though they don't do anything useful. All loads now go through the delay pipeline, a lwl/lwr will grab the value out of the pipeline if it's updating the same register. Added undocumented behaviour of BLEZ/BGTZ. The comparison for zero can be changed by specifying an alternate register in the RT field ( the documentation says you should always use register 0 ). Restricted to 16 COP0 registers & generate an exception if any of the 5 for the MMU are used. Added BCF/BCT instructions, although I have found no conditions that affect them yet. Generates an exception if any MMU instructions are executed. Sets the CE instruction for all exceptions, not just those involving a coprocessor. The bits of the opcode that specify the coprocessor are grabbed no matter what the instruction. Added TAR register and BT bit in SR. When an exception occurs during a branch, BT determines whether it was taken or not. The TAR register gets set to the destination of the branch. Fixed the BD bit when you are in a branch delay slot and you didn't take the branch, this shows up in the pipeline as !pc. Fixed branches within a branch delay slot. Multiply & divide instructions can be aborted if you write to HI/LO before reading the result. Added data breakpoints, you don't appear to be able to set breakpoints on any of the addresses internal to the CPU. Multiply/divide/GTE instructions can execute when an exception is taken, although the EPC indicates that it hasn't. The BIOS avoids rerunning GTE instructions as they are destructive, so you have to make sure they run. Added bus error handling, PSXCPU is limited to 8MB of ram & any access outside this range will trigger an exception. I believe this is to be an internal limit. Added CXD8661R as a specific CPU type, System 12 appears to allow more than 8MB of ram & it's possible that this is different. Mapped out all instructions to either generate an exception or ignore bits. Updated the disassembler to match the decoding. Fixed disassembling of branch instructions in a branch delay slot. Lui checks for a ori/addiu following and will show you the result. Added step over/out support. Fixed standalone disassembler. Fixed SZ0 truncation. Fixed IRGB truncation and conversion to IR1/IR2/IR3. Added IR1/IR2/IR3 saturation when calculating ORGB. Fixed OTZ sign extension. Fixed reading from SXYP. Fixed reading from IRGB. Fixed writing to LZCR. Fixed sign extension of GTE control registers. Fixed writing to FLAG. Fixed flag calculation in F macro and fixed avsz3 & avsz4 flag & otz calculation.
-  8th April     2008: smf - 1 on 1 Government Revisited: Most of my work recently has been to improve the accuracy of the PlayStation CPU emulation. This hasn't made much of a difference to any games, though if you write your own code and it runs on the emulator then it's more likely to run on the real thing. I've now moved onto writing GTE unit tests, there were a couple of games with geometry issues & I wanted to have some visible sign of progress. This is the result of improving the data transfer between the CPU and the GTE. There are a few GPU issues, but I'll get to them some other time. Someone will need to write a cheat for this though, or explain to me how to beat the computer.
- 0.122u6            : First pass at fixing the CPU clock speeds on the Playstation based hardware. The internal divide in the CPU core has been set to 4 as we have no wait states, incorrect DMA timing, no gpu timing, no DMA bus stealing and no gte timing [smf]. Changed PSX CPU clock speed to 67737600 Hz.
- 16th January   2008: smf - The clockspeed of the PSX based games in MAME has always been a little on the low side. Mainly to make up for the lack of cache emulation and bus contention, also partly because the GTE timing isn't emulated yet. Due to the recent attention to crystals, there has been some investigation as to what the real clock speed should be. Thanks to Guru's probing we are able to say for definate what is going on. The CPU has an internal divider and on the majority of boards is fed a 67.7376MHz clock. I have currently got MAME to report this frequency, with an internal divider of 4 to keep it roughly the same as before ( it should be 2 but I'll leave that until the rest of the timing issues are sorted ). Some information has been floating around for a while that has never been confirmed & now seems to be a good time. The 67MHz clock doesn't appear on the namco system 12 or the later system 10 boards. It appears they have their own higher rated part. System 12 runs on a 100MHz clock, while system 10 runs on a 101.4912MHz clock. So system 12 being faster has been elevated from rumour, to probable. The GPU clock is the same across all hardware. I'd have thought they'd have done something about that, especially as all the system 12 games like to run in interlace. Maybe it's more efficient or has faster ram, we'll leave that one for another day.
- 0.110              : smf and Aaron Giles fixed crash when resetting PSX games.
- 25th August 2006   : smf - As Ian guessed the answer for real hardware is 0x1234def0. Currently MAME ignores the byte write completely and gives 0x12345678. This is because when it's testing which half of the register is being accessed, it only considers word or dword writes. That should be easy to sort out, it just needs a different check for the mem_mask. The real problem comes because the program_write_byte_32le call only takes a byte, so there is no way to pass the extra bits. I have coded some alternate memory handlers that allow you to specify a mem_mask value & then the shifting can be handled by the cpu core. This is slower when accessing RAM though as instead of a byte write it's performing a read, two ands, a not and then a write. I could change the data type for program_write_byte_32le, but that's a bit hacky. Passing the mem_mask in would also allow lwl/lwr/swl/swr to be emulated correctly when it's accessing three bytes ( there is no program_write_triple_32lw, yet...). Progress has been stalled after I upgraded to 0.108 to start work on the memory handlers, but then the debug build of mess locked up and the non-debug build displayed the screen in kaleidoscope-vision. I fixed both problems & then found that the lockup was fixed in 0.108u1 when Aaron changed timer.c. So, back to more interesting things...
-  1st August 2006   : smf - Olivier Galibert gets one of the four points, the question was... What are the possible effects? & both b and d are possible. B will occur when ra is in the range 0-7fffffff, the relative branch is affected by being in a branch delay slot (the clue was in the title of the post). Disassembling branch instructions becomes a bit more complex, lets hope nobody ever uses this. (1 point) D will occur when ra is in the range 80000000-ffffffff, which is the most likely as most software runs in kernel space on the PlayStation. (1 point). If an interrupt occurs when the pc is 8001f6e4 then B will happen whatever value ra is as the nop is in the delay slot of the bgez and the PlayStation always subtracts 4 from the PC when restarting after an exception (1 point). Last of all is a bonus point because the bgez instruction encoding is non standard, but the PlayStation ignores the extra bits that are set ( the standard encoding would be ff ff e1 07 ). Nobody else scored a point because the explanation was just as important as picking one of the answers ( or you could have just said a, b, c & d ). If I'd thought about it more I'd have used bgezal ra, I'll try to prepare more next time.
- 0.102u4            : smf fixed branch target address disassembly in the PSX disassembler.
- 0.102              : Olivier Galibert fixed bug in PSX GTE flag settings.
- 0.101u4            : smf updated PSX core to new save state and disassembler interfaces. Updated dismips to handle the new disassemblers.
- 0.97u3             : Improvements to the PSX CPU core [smf]: Correct behaviour for a branch in a delay slot. Added BIOS and syscall logging of all known functions & their parameters (writing to file descriptor 1 or putchar will output to the console). Fixed disassembly of gte instructions. Fixed dismips.mak.
- 0.94u1             : Changed description to 'PSX CPU'.
- 0.92               : PSX based driver improvments [smf]: Improved root counter emulation and DMA acknowledge emulation. Changed visible area immediately instead of during video update. New board notes from Guru.
- 0.88u4             : smf updated PSX core to show more registers.
- 0.84u3             : smf fixed the PSX SIO timer so that it only fires when there is data to send & processes one bit per tick.
- 0.84               : smf improved PSX root counters. Darkcoder fixed the Speaker Puncturing Unit in the PSX games. R. Belmont and smf fixed several endian issues in the PSX-related drivers.
- 0.82u1             : smf fixed PSX SIO bug.
- 0.82               : PSX SIO improvements [smf].
- 26th April     2004: smf sent in an update to the PSX hardware improving the SIO ports.
- 15th April     2004: smf fixed the GPL12 opcode in the PSX GTE which caused problems with the ground graphics in Cool Boarders Arcade Jam.
-  1st March     2004: Carlos Santillan submitted some speedups to the PSX hardware drivers.
- 0.79u3             : Misc PSX cleanups [smf].
- 0.79u1             : Various PSX file updates / cleanups [smf].
- 30th January   2004: smf fixed a few more problems in the PSX driver uncovered by the memory system changes.
- 28th January   2004: Aaron Giles fixed the PSX driver, both broken by the memory system.
- 0.78               : PSX core improvements [smf]: Fixed MVMVA disassembly. SWC bit in SR is ignored. Fixed MVMVA with LM bit set. Added SQR & CC opcodes. Added preliminary looped DMA detection. Improved root counter emulation. Improved SIO emulation. Preliminary SPU emulation. Preliminary screen flipping / blanking support. Added GPU packet 41, 52 & 77. Supports uploading 1024 pixel wide textures. Resetting GPU sets default texture window.
- 0.71               : Added Star Sweep to MAME.
- NOTES: The PSXCPU is from Sony Playstation. The PSX hardware are in Namco System 11 and Sony ZN1/ZN2 games. The PSX CPU is a custom R3000A with a built in geometry transform engine, no mmu & no data cache.
- PCB: Sony CXD8530AQ, CXD8530BQ, CXD8530CQ, CXD8661R and CXD8606BQ CPUs
- DRIVERS: konamigq.cpp, konamigv.cpp, ksys573.cpp, namcos10.cpp, namcos11.cpp, namcos12.cpp, taitogn.cpp, twinkle.cpp and zn.cpp
- SOURCE: cpu\psx\psx.cpp


15.31  CXD8661R
- 0.124u2            : PSX updates [smf]: Added CXD8661R as a specific CPU type, System 12 appears to allow more than 8MB of ram & it's possible that this is different. Fixed the SR masks for MTC0. Added ability to test the instruction/data cache ram. The scratchpad and BIU register are now handled internally to the CPU. All writes are performed with masks. SWL/SWR used to be implemented with two writes ( one byte and one word ) when writing three bytes, now it only ever performs one. Byte and Word writes use masks as they leave the rest of the register on the bus, which can be picked up by larger registers. The read/write functions to use are cached when the SR bits are updated, as are the bad address masks. Added coprocessor 1 & 3 support, though they don't do anything useful. All loads now go through the delay pipeline, a lwl/lwr will grab the value out of the pipeline if it's updating the same register. Added undocumented behaviour of BLEZ/BGTZ. The comparison for zero can be changed by specifying an alternate register in the RT field ( the documentation says you should always use register 0 ). Restricted to 16 COP0 registers & generate an exception if any of the 5 for the MMU are used. Added BCF/BCT instructions, although I have found no conditions that affect them yet. Generates an exception if any MMU instructions are executed. Sets the CE instruction for all exceptions, not just those involving a coprocessor. The bits of the opcode that specify the coprocessor are grabbed no matter what the instruction. Added TAR register and BT bit in SR. When an exception occurs during a branch, BT determines whether it was taken or not. The TAR register gets set to the destination of the branch. Fixed the BD bit when you are in a branch delay slot and you didn't take the branch, this shows up in the pipeline as !pc. Fixed branches within a branch delay slot. Multiply & divide instructions can be aborted if you write to HI/LO before reading the result. Added data breakpoints, you don't appear to be able to set breakpoints on any of the addresses internal to the CPU. Multiply/divide/GTE instructions can execute when an exception is taken, although the EPC indicates that it hasn't. The BIOS avoids rerunning GTE instructions as they are destructive, so you have to make sure they run. Added bus error handling, PSXCPU is limited to 8MB of ram & any access outside this range will trigger an exception. I believe this is to be an internal limit. Mapped out all instructions to either generate an exception or ignore bits. Updated the disassembler to match the decoding. Fixed disassembling of branch instructions in a branch delay slot. Lui checks for a ori/addiu following and will show you the result. Added step over/out support. Fixed standalone disassembler. Fixed SZ0 truncation. Fixed IRGB truncation and conversion to IR1/IR2/IR3. Added IR1/IR2/IR3 saturation when calculating ORGB. Fixed OTZ sign extension. Fixed reading from SXYP. Fixed reading from IRGB. Fixed writing to LZCR. Fixed sign extension of GTE control registers. Fixed writing to FLAG. Fixed flag calculation in F macro and fixed avsz3 & avsz4 flag & otz calculation.
- PCB: SONY CXD8661R L9A0088 WE19960 NNM 9738, QFP208 (Soulclbr, Tektagt)
- DRIVERS: namcos12.cpp, taitogn.cpp and zn.cpp
- SOURCE: cpu\psx\psx.cpp




16.    AMD

16.1   AMD 2901

- NOTES: The Vertigo vector CPU (Exidy Vertigo hardware) consists of four AMD 2901 bit slice processors. The microcode for these CPUs is stored in 13 bipolar proms for a total of 512 52 bit wide micro instructions. The microcode not only crontrols the 2901s but also loading and storing of operands and results, program flow control and vector generation.
- GAMES: Top Gunner (Exidy 1986)
- SOURCE: video\vertigo.cpp


16.2   Am29000

- 0.239              : Simplify shift calculation for multiply and divide steps, eliminating unnecessary 64-bit intermediary variables (am29000\am29ops.h) [AJR].
- 0.193              : Added cpu\am29000\am29dasm.h.
- 0.186              : Changed description to 'AMC Am29000'.
- 0.179              : Changed the AM29000 disassembler to use std::ostream internally (cpu\am29000\am29dasm.cpp) [Nathan Woods]. Removed unnecessary formatstr() & fixed setting PC [smf].
- 0.149u1            : Added 'AMD Am29000' device. Changed description to 'AMD Am29000'. Modernized Am29000 cpu core. Moved added initialization to constructor [Wilbert Pol].
- 0.136u3            : R. Belmont fixed am29k PPC GCC compile error.
- 0.136u2            : Added cpu\am29000\am29000.c/h, am29dasm.c and am29ops.h. Added AM29000 CPU core [Phil Bennett].
- 16th Janary    2010: Phil Bennett - I finally wrote the Am29000 CPU core needed by F-15 Strike Eagle, Battle of the Solar System and Tank Battle. Emulation of the math unit and 3D hardware soon followed. The 3D performance of the system is a step above Hard Drivin' and co given that the 3D pipeline is implemented mostly in hardware. The average framerate is ~30fps as opposed to 15. Worth mentioning is the extra sound hardware that is used to generate LOUD explosions. It's like something from an analog synthesiser - there's two channels of white with pink noise passed through an SSM2047 VCF. I've included a slightly fudged but reasonable sounding simulation of it. F-15 and BOTSS play ok but they're shameless quarter suckers, regularly pestering the player to pump in more credits to buy weapons, repairs, fuel etc. Tank Battle (aka Super Tank Attack and Tank 3D) is a prototype game. It supports two players via split-screen. I can't find a way to disable the split-screen for single player though.
- 16th May       2004: Phil Bennett - With a reasonable amount of free-time on my hands I've resumed work on the Am29000 core. Most of the instructions are implemented, but it's not quite up to the job yet...
- 30th March     2004: Phil Bennett - Working on F-15 Strike Eagle for the past few weeks. Currently, the 68000 and TMS34010 are hooked up. The game starts with a bit of high kludgery, but without an Am29000 core (a 32-bit RISC CPU responsible for generating the 3D objects) it's far from playable. In addition, an 80C31 MCU core is needed for sound emulation. Battle of the Solar System and Super Tank Attack run on similar hardware, but there's not a lot to show from them at the moment. I've began writing an Am29000 core (it disassembles code at the moment), but with the sheer amount of academic work I'm lumbered with at the moment progress will be slow.
- PCB: AM29000-16, 32bit RISC microprocessor, 4 stage pipeline (Botss, F15se)
- DRIVERS: micro3d.cpp
- SOURCE: cpu\am29000\am29000.cpp


16.3   AM29116 / ESRIP

- 0.222              : READ/WRITE macros removal (esrip\esrip.cpp) [Osso].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.196              : Removed first_screen usage from 'Entertainment Sciences RIP' CPU [Ryan Holtz].
- 0.193              : Added cpu\esrip\esripdsm.h.
- 0.186              : Changed description to 'Entertainment Sciences RIP'.
- 0.180              : Changed the ESRIP disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.153              : Coverted ESRIP to use DEVCB2 and delegates [Miodrag Milanovic].
- 0.148u2            : Fixed stack overflow in ESRIP disasm_disassemble [smf].
- 0.148              : Changed description to 'ESRIP'. Modernized Entertainment Sciences Real Time Image Processor (ESRIP) core. Uninitialized variable fix (m_icount=0) [MooglyGuy].
- 0.144u6            : Keep Clang happy while removing any ambiguity [Phil Bennett].
- 0.133u4            : Added cpu\esrip\esripdsm.c.
- 0.129              : Added cpu\esrip\esrip.c/h.
- NOTES: Entertainment Sciences AM29116-based Real Time Image Processor http://www.bitsavers.org/pdf/amd/_dataSheets/29116_dataSheet_Mar86.pdf
- PCB: AM29116DC = 16-bit bipolar microprocessor (Turbosub)
- DRIVERS: esripsys.cpp
- SOURCE: cpu\esrip\esrip.cpp


16.4   AM29323

- NOTES: Co-processor for AM29000
- PCB: AM29C323 = 32 x 32bit parallel floating point multiplie (Botss, F15se)
- SOURCE: drivers\micro3d.cpp


16.5   CUBEQCPU (Rotate/Line/Sound CPU)

- 0.258              : Removed obsolete _BIT macro (cubeqcpu\cubeqcpu.cpp) [hap].
- 0.210              : Updated CUBEQCPU. Simplified handlers. Use correct/shorter type values. Fixed spacings [cam900].
- 0.193              : Added cpu\cubeqcpu\cubedasm.h.
- 0.180              : Changed the Cube Quest disassemblers to use 'std::ostream &' internally [Nathan Woods].
- 0.150              : Modernized CUBEQCPU core [Wilbert Pol]. Disabled unused private members (cubeqcpu.h). Fixed uninitialized member in cquestsnd_cpu_device (fixes potential cubeqst crash) [Oliver Stoeneberg]. Fixed compiler warning (cubeqcpu.c) [hap]. Changed description from 'Rotate CPU' to 'Cube Quest Rotate CPU', 'Line CPU' to 'Cube Quest Line CPU' and 'Sound CPU' to 'Cube Quest Sound CPU'.
- 0.133u4            : Added cpu\cubeqcpu\cubedasm.c.
- 0.128u6            : Pointer-ified the Cube Quest CPUs cores [Aaron Giles].
- 0.127u4            : Aaron Giles fixed Cube Quest overlay scaling to cover the whole screen. Converted Simutrek-hacked laserdisc emulation to using the actual MCU from the game, which in turn hands off commands to the PR-8210 MCU. This is still not 100% but is pretty close at this point and achieves the correct behaviors in most cases.
- 0.127              : Added cpu\cubeqcpu\cubeqcpu.c/h. Phil Bennett, Joe Magiera and Warren Ondras added new driver for Cube Quest. This includes CPU cores for the three bitslice processors, as well as laserdisc support for the hacked laserdisc that was used to drive the games.
- NOTES: Implementation of the Simutrek Cube Quest bit-sliced CPU (AM2901-based).
- DRIVERS: cubeqst.cpp
- SOURCE: cpu\cubeqcpu\cubeqcpu.cpp



17.    Hyperstone

- 0.283              : Use bit field extract instructions (e132xs\e132xsdrc_ops.hxx) [Vas Crabb].
- 0.282              : Optimised generated code for multiplication and DSP instructions a little. Fixed recompiler not sign-extending EHMAC inputs (interpreter was correct) (e132xs\e132xs.h, e132xs\e132xsdrc_ops.hxx) [Vas Crabb].
- 0.277              : Don't generate code to handle a delayed branch inline. Also avoid an redundant load when checking if trace is active. Reduces generated native instruction count by about 24% on x86-64 and gives an overall performance improvement of about 3.5% in -bench scores (e132xs\e132xs.cpp). Implemented supervisor and trace modes as recompiler modes. This eliminates or simplifies a lot of run-time checks. In particular, the trace checks on every instruction are not generated when not tracing, and simplified to just checking the P bit when tracing. Optimised code generation for RET, avoid a redundant load when checking for an overflow trap, use the exception parameter for exception codes rather than generating one function for each possible code. Also simplified interpreter code for RET. Implemented SUMS for the recompiler. Implemented privilege check for setting L (interrupt lockout) for recompiler. Not implemented for interpreter. Partially fixed tracing. P flag should be set by all instructions except RET. Trace exceptions are not triggered for branches when using the recompiler. Fixed ILC being set incorrectly for RET. Removed leftover block end from a function that no longer generates a standalone block (e132xs\e132xs.cpp). Optimised recompiled FRAME instruction. Also added some more constants so there are a few less magic literals (e132xs\32xsdefs.h, e132xs\e132xsdrc.cpp). Fixed XM (index move) instructions failing to update the destination register on range error for interpreter and recompiler. Fixed double-word stores when the source indicates SR (both stored words are zero) for interpreter and recompiler. Fixed recompiler failing to set ILC and P on range error and frame error exceptions. Optimised recompiled code for word size shifts. Pushed more recompiler logic from run-time to code generation time and simplified delay slot PC check and trace check logic. Use MOV rather than LOAD where possible in recompiler to improve code generation performance and symbolic memory locatin names in disassembled UML. Updated TODO list in header comment, reduced copy/paste some more. Moved interrupt check to the beginning of instruction execution. Fixes interrupts not being serviced while tracing. Further improves recompiler performance. Fixes recompiler interrupt check function calling itself recursively. Also added debugger exception hook calls to interpreter and recompiler. Call debugger exception hook for TRAP instructions. Also made cycle counts a bit more consistent between interpreter and recompiler for exceptions and traps (e132xs\e132xs.cpp, e132xs\e132xsdrc.cpp). Made debugging Hyperstone E1 software less painful. Fixed local register display in debugger (this never worked). Made disassembler show local register indices (e132xs\32xsdasm.cpp, e132xs\e132xs.cpp). Fixed double-counting bug in exception dispatch. Fixed unsigned comparison of signed values in MUL cycles calculation (e132xs\e132xsdrc_ops.hxx). Fixed failing to call the debugger instruction hook for the first instruction following an interrupt, exception or trap. Use UML branches to emulate non-delayed intra-block branches, avoiding the expensive "hash jump". Re-worked the instruction description code: Calculate static branch targets for more instructions. Flag instructions that may cause mode changes. Don't be so eager to end an instruction sequence. Removed the local register input/output flags - FP may no be the same when executing the code as when describing instructions. Fixed interpreter incorrectly setting ILC when an interrupt immediately follows a RET instruction. Fixed recompiler flag calculation regressions and optimised a little (e132xs\e132xs.cpp, e132xs\e132xs*). Disabled single-instruction-per-block mode. Don't bother with delay slot checks where it's unnecessary. Try to generate a speicalised copy of the delay slot instruction followed by a direct branch of possible. Use the pre-decoded instruction length for updating the PC. Specialised versions of the CHK instruction that always or never raise exceptions (e132xs\e132xs.cpp, e132xs\e132xsdrc.cpp). More recompiler optimisation: Optimised double word shifts. Optimised the most common PC-relative operations to treat PC as constant when possible, including: addi PC,imm (long relative branch), add PC,Rs (computed goto), sum Rd,PC,imm (calculate PC-relative address), add Rd,PC (calculate PC-relative address), ldw.d PC,Rs,imm (PC-relative load) and stw.d PC,Rs,imm (PC-relative store). Changed template parameters to LlamaCase to make them more visible different to constants/macros (e132xs\e132xsdrc.cpp). General cleanup and usability improvements: Aligned the operand field in disassembly. Calculate results of immediate values against the PC to make position-independent code easier to read  without constantly using a calculator (e.g. this shows destinations for call Rd, PC, imm). Added more symbols to the UML helper to make logged generated code more readable. Made single-instruction-per-sequence mode configurable rather than a compile-time option. Got rid of a criminal amount of copy/paste in the disassembler and got rid of all the deprecated strcpy calls. Got rid of some duplicated constants, changed some constants from macros to enumerated values or constexpr globals. Reduced the amound of stuff in headers that doesn't need to be there (e132xs\32xsdasm.cpp). Implemented pointer error exceptions on attempting to use a zero address register (other than SR) in the recompiler. Also optimised load/store instructions a bit and reduced copy/paste. Fixed a couple of disassembler issues (e132xs\e132xs.cpp). Emulate pointer error exception on load/store and range error exception on store signed byte/half-word. Further optimised code generation for MOV and MOVI. These are very hot, so this alone gains a further 2% performance or so in the dgPIX games. Also some other miscellaneous cleanup (e132xs\e132xs.cpp). Improved exception emulation: Fixed behaviour of exceptions in delay slots and fixed recompiler not updating ILC and P for some exceptions. Implemented privilege error exception on setting L in user mode for interpreter (e132xs\e132xs.cpp). Log bus control and memory control setup. Miscellaneous fixes/optimisation: Fixed behaviour of delayed branches, trace exceptions, and saved PC calculation for error exceptions in delay slots for the interpreter. All instructions in delay slots, branching instructions that can raise exceptions and tracing shoud now (mis)behave properly for the interpreter, including things the manual says you shouldn't do. Fixed and optimised flag updates for left shifts for the recompiler. Optimised ROL instruction for the recompiler and made flag calculation equivalent to the interpreter both with and without the "Missioncraft flags" compile-time option. Only block interrupts for one instruction following a delayed branch. Optimised the SOFTWARE instruction a little for the recompiler. Added more SDRAM configuration logging and cleaned up code a bit. Got rid of "Mission Craft flags" compile time option. Assume ROL sets the V and C flags the same way as SHL and MOVI clears the V flag. Untangled device types. Got package option (T, N or B suffix) out of device type. Enabled 4x PLL clock multiplier for GMS30C2216/GMS30C2232. Implemented entering power down mode via MCR for E1 and E1-X cores. Marginally better code generation for a few instructions. Log available bus/memory configuration options for different cores. Added post load handler for E1-XS and E1-XSR cores to install SDRAM mode/configuration handlers if necessary. Improved comment about different Hynix and Hyperstone CPU models. It's rather important to initialise DRC handle pointers. Improved comment about model differences. Fixed I/O for models with 16-bit external bus. Only a single I/O access is generated for an I/O word read/write. The upper half just disappears if the pins aren't present. This fixes "phantom" I/O accesses, allowing address maps to be cleaned up a bit. Reduced I/O address width for models with 16-bit external bus to match hardware. Made addressing consistent between interpreter and recompiler for I/O double-word accesses. Implemented power down via internal I/O write for E1-X and later cores (none of the games I tested actually use it). Changed STBS and STHS to do an unsigned range check. Fixes vamphalf storage test. Also fixed IO3 wake from power down. Use word addressing for I/O. There are no byte enable or write strobe signals for I/O, and there's only a single operand size, so word addresses make more sense. Also changed STBS/STWS to allow any valid signed or unsigned value of the applicable size. This allows vamphalf attract mode to work as well as the storage test (e132xs\e132xs.cpp). Use the CARRY instruction rather than a right shift to set up carry in (e132xs\e132xsdrc_ops.hxx). Added named input line number constants (e132xs\e132xs.cpp). Cleaned up disassembler a bit, disassemble most invalid instructions as D.HU (e132xs\32xsdasm.cpp) [Vas Crabb].
- 0.276              : Use osd_printf_error for diagnositc output and make more local variables const. Get rid of a redundant TEST - ROLAND can set the Z flag (e132xs\e132xs.h and e132xs\e132xsdrc_ops.hxx). Refactored code generation to improve performance and fixed some issues: Moved a considerable amound of logic from execution time to code generation time. Fixed some cases where add/subtract carry was being interpreted incorrectly. Fixed a case where a load double intruction was incorrectly writing the same register twice. Use UML flags to generate condition codes for addition/subtraction. Use UML carry flag for carry-/borrow-in. Reduced UML register pressure (improves performance for hosts with fewer callee-saved CPU registers). Moved more logic to helper functions to simplify maintenance (e132xs\e132xs.h and e132xs\e132xsdrc_ops.hxx). Cleaned up and commented code for generating an exception, reducing about nine memory accesses to update SR to two. Implemented NEGS and fixed ADDS and SUBS not setting excption handler address. Optimised code to update Z flag on logic operations to avoid branches. Reduced copy/paste a bit more. Made interrupt check function generate far more compact code (about 85% reduction in number of native instructions on x86-64). Optimised out-of-cycles check. Applied prior optimisation for trap/interrupt checks to static exception checks as well (code is still copy/pasted) (e132xs\e132xs.h, e132xs\e132xsdrc.cpp and e132xs\e132xsdrc_ops.hxx). Fixed IO2 interrupt check in recompiler. Also further reduced conditional branches and logic operations in interrupt check. Fixed regression in exceptions (e132xs\e132xsdrc.cpp). Fixed a flags issue in the recompiler (e132xs\e132xsdrc_ops.hxx) [Vas Crabb].
- 0.274              : Removed workarounds for recompiler backends not clearing upper half of I0-I3 on 32-bit load (e132xs\e132xsdrc_ops.hxx) [Vas Crabb].
- 0.273              : Sign-extend the divisor in DIVS instructions (cpu\e132xs\e132xsdrc_ops.hxx). Fixes 'Cool Minigame Collection' don't work properly/softlock [Ryan Holtz].
- 0.250              : Provide new helper functions for extracting signed 16-bit halves (e132xs\e132xs.h) [AJR]. Fixed missing bit mask causing UBSAN warnings (e132xs\e132xsfe.cpp) [Ryan Holtz].
- 0.245              : Cleanups: Added helper functions for double-word register accesses and multiplication. Make 16-bit multiplications signed for EHCMULD and EHCMACD. Correct typo in comments (e132xs\e132xs.h and e132xsop.hxx) [AJR].
- 0.222              : Fixed DRC crashes in DEVNOCLEAR debug builds (e132xs\e132xs.cpp) [Osso].
- 0.214              : Removed unwanted newline in disassembly (e132xs\32xsdasm.cpp) [AJR].
- 0.206              : Removed unused member [Ryan Holtz].
- 0.205              : Re-enabled DRC now that the apparent source of hang issues has been fixed. Fixed CMPB opcode comparing source register against source register (e132xs\e132xsdrc_ops.hxx). Fixes Land Breaker shows only black screen in service mode (MT06985). Fixed SUBC flag calculation for DRC and instruction length flags. Fixes hang in DRC (worldadv randomly freezes and luplup and poosho freeze after about 36 minutes) [Ryan Holtz].
- 0.204              : Temporarily disabled Hyperstone DRC (e132xs\e132xs.h) [Ryan Holtz].
- 0.196              : Reduced scope of stuff with different definitions across CPUs (cpu\e132xs\e132xs.h) [Vas Crabb].
- 0.194              : Added Dynamic Re-Compiling. Added subs to DRC, fixes Hidden Catch fatalerror when selecting a difference. Allocated core from DRC cache. Potentially fix drc crash on Linux and OSX. Fixed some 32-bit DRC issues and address Coverity concerns (cpu\e132xs\e132xsdrc_ops.hxx and e132xsfe.cpp) [Ryan Holtz]. Use e132xs state enum in vamphalf.cpp instead of magic numbers [smf].
- 0.193              : Added cpu\e132xs\32xsdasm.h.
- 0.192              : Some optimization (cpu\e132xs\e132xs.cpp), Elfin (dgPIX Entertainment Inc. 1999) benches roughly faster. Removed unnecessary full reinit of regs_decode struct (cpu\e132xs\e132xs.cpp). Reworked all opcodes, now considerably faster. Fixed ldxx2 local,local case. Simplified set opcode, removed some needless use of set_global_register to get some speed back [Ryan Holtz]. Templated all opcodes to reduce code duplication and fixed a few oversights. Added template check, index move, mask and sum handlers. sum Rd,C,const was incorrectly using the whole SR rather than just the carry value; sums with local register as destination was not burning cycles; negs doesn't need explicit guard against trapping when source is SR as carry flag alone can never cause an overflow. Template register-register mov and correct trap behaviour privilege trap should prevent user state code from writing high global registers; also change DEBUG_PRINTF to standard logmacro.h stuff [Vas Crabb, Ryan Holtz].
- 0.186              : Added cpu\e132xs\32xsdefs.h.
- 0.185              : Moved memory macros out of header file to help prevent naming conflicts (cpu\e132xs\e132xs.cpp) [AJR].
- 0.180              : Changed the Hyperstone disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\e132xs\e132xsop.inc to e132xsop.hxx.
- 0.157              : Added missing save states to cpu\e132xs\e132xs.c [Osso].
- 0.155              : Fixed do xx= in debugger (cpu\e132xs\e132xs.c) [David Haywood].
- 0.153              : Changed cpu\e132xs\e132xsop.c to e132xsop.inc [Oliver Stoeneberg].
- 0.148              : Modernized Hyperstone CPU core [MooglyGuy]: Korean bootlegs all work now, tested with: mosaicf2, vamphalf, dynabomb, gstream, pasha2, mrdig and boonggab.
- 0.134u4            : Christophe Jaillet minor speed improvement to the e132xs core - don't pass opcode parameter when calling instruction handlers.
- 0.128u5            : Pointer-ified the Hyperstone core and removed all activecpu refs [Aaron Giles].
- 0.122u3            : Pierpaolo Prazzoli fixed typo for IO1 irq callback in hyperstone core.
- 0.121u1            : Added cpu\e132xs\e132xsop.c. Aaron Giles optimized the hyperstone core, gaining ~50% speed improvement in most games. Implemented clock prescaling and correct interrupt priority handling. Then fixed the clock speeds on the most of the games and killed most of the speed gains in quite a number of them (Sorry!).
- 0.118u6            : Aaron Giles fixed stack buffer overrun in install_mem_handler() that broke the Hyperstone-based games under GCC 4.2.1.
- 0.114              : David Haywood avoided a memset in the Hyperstone core to give ~4% speedup in Hidden Catch.
- 0.109u5            : Aaron Giles converted the e132xs disassemblers to the new format and added step in/out support where it was obvious.
- 0.104u3            : Pierpaolo Prazzoli fixed typo in Hyperstone core that led to false positive warning popups.
- 0.103u5            : Updates to the Hyperstone core [Pierpaolo Prazzoli]: Removed nested delays. Added better delay branch support. Fixed PC seen by a delay instruction, because a delay instruction should use the delayed PC (thus allowing the execution of software opcodes too).
- 0.103u4            : Fixes to the Hyperstone core [Pierpaolo Prazzoli]: Removed nested delays. Don't allow software opcodes to be executed in a delay slot.
- 30th January   2006: Working hard on Eolith games. This time I could make Hidden Catch - (c)1998 Eolith to work. It suffered from a nasty bug in the Hyperstone cpu core, because it used a memory instruction which reads data from the memory address stored in the source register, writes the data read in the destination register and then increments the source register by 4, but... if source and destination registers are the same? Well, it only incremented the register instead of reading the data from memory without incrementing it. This is strange because they could have used a normal instruction which does the same but doesn't increment the source register, but anyway... probably the compiler was a bit crap.
- 0.92               : Pierpaolo Prazzoli fixed Hyperstone Iram mirroring and Tomasz Slanina improved the Hyperstone based drivers.
- 0.90               : Pierpaolo Prazzoli fixed Hyperstone timer and removed the hack. Tomasz Slanina fixed delayed branching for delay instructions longer than 2 bytes.
-  1st January   2005: Tomasz Slanina - Fixed nasty bug in hyperstone core and made few changes to dgPix driver - X-files (or rather 'xxx-files') partially works, but is not playable.
- 0.89u1             : Workaround for excessive RAM use in Hyperstone based games [Pierpaolo Prazzoli].
- 0.88u5             : Brad Oliver fixed Hyperstone compile error.
- 0.88u4             : Pierpaolo Prazzoli added other Hyperstone models to the core, converted vamphalf driver to use 16-bit version.
- 0.88u3             : Tomasz Slanina fixed addc, subc, mulu and muls opcodes in the Hyperstone core. This fixes title screen objects in Super Lup Lup Puzzle and bullets in Mission Craft. Pierpaolo Prazzoli fixed software opcodes when used as delay instructions and added nested delays.
- 0.88u2             : Some hyperstone debugger cleanups [Pierpaolo Prazzoli].
- 0.87u1             : Pierpaolo Prazzoli fixed the I/O addresses in Hyperstone and so removed the hack from vamphalf driver.
- 0.87               : Tomasz Slanina added "undefined" C flag to shift left instructions. Pierpaolo Prazzoli added interrupts-block for delay instructions. Fixed get_emu_code_addr. Added LDW.S and STW.S instructions. Fixed floating point opcodes.
- 17th September     : Kale - Made some improvements to the Hyperstone driver and Vamp 1/2 is 'playable', but has a large number of graphical glitches and locks up after a short time of playing.
- 0.86               : Hyperstone CPU Core improvements [Tomasz Slanina, Pierpaolo Prazzoli]. Tomasz Slanina: Interrupts after call and before frame are prohibited now. Emulation of FCR register. Floating point opcodes (preliminary). Fixed stack addressing in RET/FRAME opcodes. Fixed bug in SET_RS macro. Fixed bug in return opcode (S flag). Added C/N flags calculation in add/adc/addi/adds/addsi and some shift opcodes. Added writeback to ROL. Fixed ROL/SAR/SARD/SHR/SHRD/SHL/SHLD opcode decoding (Local/Global regs). Fixed I and T flag in RET opcode. Fixed XX/XM opcodes. Fixed MOV opcode, when RD = PC. Fixed execute_trap(). Fixed ST opcodes, when when RS = SR. Added interrupts. Fixed I/O addressing. Pierpaolo Prazzoli fixed fetch. Fixed decode of e132xs_xm opcode. Fixed 7 bits difference number in FRAME / RET instructions. Some debbugger fixes. Added generic registers decode function. Some other little fixes.
-  7th July      2004: Tomasz Slanina - Fixing bugs in Hyperstone core.
- 0.81u6             : Hyperstone fixes [Pierpaolo Prazzoli]: Added h flag handling in the DASM. Fixed wrong interpretation of some opcode bits in the DASM. Fixed Frame instruction when d-code was 0. Always set the new entry table.
- 0.81u4             : Hyperstone CPU core fixes [Pierpaolo Prazzoli]: Added addressing of next byte if in load / store instructions using Displacement Address Mode PC is used as register destination. Added local registers wrap around modulo 64. Added trap instructions to the DASM. Added some debug info when high global registers are written. Fixed some wrong format in the DASM. Changed reset to act as an exception, as the doc claims (before it crashed if reset was used as an exception).
- 0.81u1             : Pierpaolo Prazzoli fixed another Hyperstone bug.
-  1st April     2004: Pierpaolo Prazzoli sent in another small fix to the Hyperstone CPU core, fixing a bug where some instructions could have used a wrong value for the PC.
- 31st March     2004: Pierpaolo Prazzoli fixed the display of branch addresses in the Hyperstone CPU core.
- 29th March     2004: MooglyGuy fixed the immediate and const values in the Hyperstone CPU core.
- 0.80u1             : Hyperstone Cleanups [Pierpaolo Prazzoli]. Fixed the opcode view which in some cases displayed too many bytes on 32 bit CPUs such as 68020 and Hyperstone [Bryan McPhail].
- 10th March     2004: Pierpaolo Prazzoli cleaned up the register get/set functions in the Hyperstone CPU core.
- 0.80               : Various Hyperstone core improvements [Pierpaolo Prazzoli].
- 28th February  2004: Pierpaolo Prazzoli sent in some fixes to the Hyperstone CPU core.
- 0.76u2             : Some Hyperstone fixes/improvements [Mooglyguy, Pierpaolo Prazzoli].
- 26th October   2003: Pierpaolo Prazzoli and MooglyGuy fixed some problems in the Hyperstone CPU core.
- 0.72u2             : Preliminary Hyperstone Core, not yet working well enough to run anything [Pierpaolo Prazzoli].
- 16th August    2003: Pierpaolo Prazzoli did some fixes to the Hyperstone CPU core.
- 14th August    2003: Pierpaolo Prazzoli sent in a very preliminary Hyperstone CPU core.


17.1   E1-16T

- 0.148              : Modernized Hyperstone CPU core [MooglyGuy].
- 0.76u2             : Some Hyperstone fixes / improvements [Mooglyguy, Pierpaolo Prazzoli].
- 0.72u2             : Added cpu\e132xs\e132xs.c/h and 32xsdasm.c.
- NOTES: 16bit Hyperstone model. MAME emulates the E1-16T, E1-16XT, E1-16XS and E1-16XSR
- DRIVERS: eolith.cpp and vamphalf.cpp
- SOURCE: cpu\e132xs\e132xs.cpp


17.11  E1-16XT

- NOTES: 16bit Hyperstone model. MAME emulates the E1-16T, E1-16XT, E1-16XS and E1-16XSR
- DRIVERS: pasha2.cpp
- SOURCE: cpu\e132xs\e132xs.cpp


17.12  E1-32N

- 0.148              : Modernized Hyperstone CPU core [MooglyGuy].
- 0.76u2             : Some Hyperstone fixes / improvements [Mooglyguy, Pierpaolo Prazzoli].
- 0.72u2             : Added cpu\e132xs\e132xs.c/h and 32xsdasm.c.
- NOTES: 32bit Hyperstone model
- DRIVERS: eolith.cpp
- SOURCE: cpu\e132xs\e132xs.cpp


17.13  E1-32T
- DRIVERS: vamphalf.cpp
- SOURCE: cpu\e132xs\e132xs.cpp


17.14  E1-32XN

- 0.236              : Fixed issues with SARDI instruction (e132xs\e132xsdrc_ops.hxx and e132xsop.hxx), fixes Mosaic (F2 System) [Ryan Holtz].
- DRIVERS: f-32.cpp, limenko.cpp and vamphalf.cpp
- SOURCE: cpu\e132xs\e132xs.cpp


17.15  E1-32XS

- 0.250              : Provide new helper functions for extracting signed 16-bit halves (e132xs\e132xs.h) [AJR]. Fixed missing bit mask causing UBSAN warnings (e132xs\e132xsfe.cpp) [Ryan Holtz].
- 0.248              : E132XS cleanups: Use count_leading_zeros_32 instead of loop for TESTLZ. Simplify overflow mask calculation for SHL(I) [AJR].
- DRIVERS: ?
- SOURCE: cpu\e132xs\e132xs.cpp


17.16  E1-32XT

- 0.148              : Modernized Hyperstone CPU core [MooglyGuy].
- 0.76u2             : Some Hyperstone fixes / improvements [Mooglyguy, Pierpaolo Prazzoli].
- 0.72u2             : Added cpu\e132xs\e132xs.c/h and 32xsdasm.c.
- NOTES: 32bit Hyperstone model. The MAME E1-32XS cpu emulator is compatible with: E1-32, E1-16, E1-32X, E1-16X, E1-32XN, E1-32XT, E1-16XT, E1-32XS, E1-16XS, E1-32XP (ever released?), E1-32XSB (compatible?), E1-16XSB (compatible?)
- PCB: Hyperstone E1-32XN (Mosaicf2)
- DRIVERS: dgpix.cpp, gstream.cpp and mjsenpu.cpp
- SOURCE: cpu\e132xs\e132xs.cpp



17.2   Hynix

17.21  GMS30C2116

- 0.148              : Modernized Hyperstone CPU core [MooglyGuy].
- 0.82               : Guru added Mission Craft (Sun 2000). Needs more work on Hyperstone core.
- 0.76u2             : Some Hyperstone fixes / improvements [Mooglyguy, Pierpaolo Prazzoli].
- 0.72u2             : Added cpu\e132xs\e132xs.c/h and 32xsdasm.c.
- NOTES: 16bit Hynix model
- PCB: GMS 30C2116 based on Hyperstone technology (Misncrft)
- SOURCE: cpu\e132xs\e132xs.cpp


17.22  GMS30C2132

- 0.148              : Modernized Hyperstone CPU core [MooglyGuy].
- 0.114u1            : Replaced E1-32XT CPU1 with GMS30C2232.
- 0.112u3            : Pierpaolo Prazzoli added Crazy War (Eolith 2002).
- 18th February 2007: Pierpaolo Prazzoli - Added a new driver for Crazy War (Eolith 2002).
- 0.76u2             : Some Hyperstone fixes / improvements [Mooglyguy, Pierpaolo Prazzoli].
- 0.72u2             : Added cpu\e132xs\e132xs.c/h and 32xsdasm.c.
- NOTES: 32bit Hynix model
- GAMES: Crazy War (Eolith 2002)
- SOURCE: cpu\e132xs\e132xs.cpp


17.23  GMS30C2216

- 0.148              : Modernized Hyperstone CPU core [MooglyGuy].
- 0.76u2             : Some Hyperstone fixes / improvements [Mooglyguy, Pierpaolo Prazzoli].
- 0.72u2             : Added cpu\e132xs\e132xs.c/h and 32xsdasm.c.
- NOTES: 16bit Hynix model
- SOURCE: cpu\e132xs\e132xs.cpp


17.24  GMS30C2232

- 0.148              : Modernized Hyperstone CPU core [MooglyGuy].
- 0.114u1            : Replaced E1-32XT CPU1 with GMS30C2232.
- 0.113u4            : David Haywood added Spotty (Ver. 2.0.2) (Prince Co. 2001).
- 0.76u2             : Some Hyperstone fixes / improvements [Mooglyguy, Pierpaolo Prazzoli].
- 0.72u2             : Added cpu\e132xs\e132xs.c/h and 32xsdasm.c.
- NOTES: 32bit Hynix model
- PCB: Hyundia GMS30C2232 (Spotty)
- SOURCE: cpu\e132xs\e132xs.cpp





18.    Fujitsu

18.1   MB86233

- 0.279              : Sort out register update priority (mb86233\mb86233.cpp) [Matthew Daniels].
- 0.277              : Added /3 clock divider (mb86233\mb86233.cpp) [hap].
- 0.276              : Write the results of an ALU operation before writing to register/memory. Sega Rally has an instruction that calculates d += p and loads a value into d at the same time; it is the loaded value that should be used, not the result of the ALU operation. Also only test the d register when performing an ALU operation (mb86233\mb86233.cpp) [Matthew Daniels].
- 0.261              : Use util::sext for sign extension [AJR].
- 0.234              : Fixed MB86233 TGP flags behaviour on -0, seems to fix Virtua Fighter and Motor Raid. Refined the patch to only do FP-type flag setting on FP operations (mb86233\mb86233.cpp) [Ryan Holtz].
- 0.215              : TGP interface fixes for Model1 [O. Galibert].
- 0.197              : Added machine\gen_fifo.cpp/h. Changed description to 'Fujitsu MB86233 (TGP)'. Rewrote MB86233/4 CPU cores [O. Galibert].
- 0.196              : Changed description to 'Fujitsu MB86233 "TGP"'. Some DASM changes in TGP [O. Galibert].
- 0.193              : Added cpu\mb86233\mb86233d.h.
- 0.184              : Massive MB86233 disassembler overhaul [O. Galibert].
- 0.180              : Changed the MB86233 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Added virtual for consistency [smf].
- 0.154              : Added a bunch of unhandled MB86233 opcodes for TGP, this apparently fixed Virtua Cop 2 geometry. Used a new opcode, from VF2. Stupid mistake from my part in TGP undocumented opcode, fixes character appearing/logic in Virtua Cop 2. Fixed Indirect Mode addressing in TGP (cpu\mb86233\mb86233.c), fixes Manx TT crash on gameplay (bikes are invisible tho, Z sort issue?). Also added most inputs for Manx TT minus gear shifts. Fixed for External->Reg opcode in TGP, VF2 now boots then dies a bunch of seconds later in gameplay/attract. Updated VF2 opcodes, and fixed Sky Target 3D display. Fixed TGP area access in Sky Target. Some changes to TGP with no noticeable effect. Bunch of TGP opcodes used by VF2 [Angelo Salese].
- 0.150              : Added 'MB86233' device, Modernized MB86233 cpu core [Wilbert Pol].
- 0.128u6            : Pointer-ified the MB86233 CPU core [Aaron Giles].
- 0.126u2            : TGP / Model 2 fixes [ElSemi]: TGP now correctly uses table roms (model1/2 updated accordingly). Removed FIFO hack on srallyc (game now runs). Added analog ports reading for model 2A/B/C. Fixed some loading instructions in the TGP. that fixes srallyc automatic transmission bug.
- 0.119u4            : El Semi added the repeat count register (reg 0x34) access and immediate value load to the MB86233 core (needed by Pilot Kids).
- 0.119u1            : Synchronized the MB86233 core with ElSemi's, fixing a few bugs along the way [Ernesto Corvi].
- 0.119              : Aaron Giles fixed recent changes to the MB86233 core that broke Virtua Racing.
- 0.118u6            : MB86233 core changes [ElSemi]: Fixed a double move opcode. Added a previously unknown double move opcode.
- 0.113u4            : Ernesto Corvi and ElSemi added more recently discovered opcodes to the MB86233 core and disassembler.
- 0.113u3            : Added cpu\mb86233\mb86233.c/h and mb86233d.c. Ernesto Corvi added a preliminary MB86233 CPU core. Still needs to be hooked up to the Sega Model 2 driver.
- 12th October 2005: Charles MacDonald - I acquired a Virtua Fighter boardset a while ago and am tracing out the board connections to figure out how everything works. Eventually I'd like to get my own code running on the system to investigate TGP functions and to document the Model 1 hardware, but in the meantime just figuring out the organization of everything is important. I ended up removing the V60 from a spare System 32 board to figure out the pin assignments for the QFP-variety V60 within a reasonable time frame, necessary for Model 1 work. The board is still functional, just needs a CPU now.
- NOTES: The Fujitsu TGP chip MB86233 is a coprocessor (aparently part of the Sparc/SparcLite family of processors) and is used extensively to create the 3D objects. It's a 32-bit Co-Processors and supports Floating Point, Stem Rotate, and 3D Matrix operations. Capable of 16 MFlops.
- PCB: 315-5571 and 315-5572 (Model1)
- DRIVERS: model1.cpp and model2.cpp
- SOURCE: cpu\mb86233\mb86233.cpp



18.2   MB86234

- 0.234              : Fixed MB86234 TGP flags behaviour on -0, seems to fix Virtua Fighter and Motor Raid. Refined the patch to only do FP-type flag setting on FP operations (mb86233\mb86233.cpp) [Ryan Holtz].
- 0.197              : Added machine\gen_fifo.cpp/h. MB86233/4 rewrite. Added missing lab and notd mode to MB86233 used by Virtua Fighter 2 in-game and collision [O. Galibert].
- DRIVERS: model1.cpp and model2.cpp
- SOURCE: cpu\mb86233\mb86233.cpp



18.3   MB86235

- 0.282              : Use separate memory spaces for data A and external. Fixes enemy car collision detection in stcc. Added EBU to address for extended A bus accesses (mb86235\mb86235.cpp) [Matthew Daniels]. Cleaned up (mb86235\mb86235ops.cpp) [Vas Crabb].
- 0.278              : Improved TGPx4 interpreter. Most Sega Model 2C-CRX games are now working with 3D graphics (mb86235\mb86235.cpp) [Matthew Daniels].
- 0.253              : One more use of util::sext (mb86235\mb86235drc.cpp) [AJR].
- 0.250              : Use util::sext and other bit utility functions [AJR].
- 0.196              : Added cpu\mb86235\mb86235ops.cpp. Make TGPx4 to be debuggable even in non-DRC mode (cpu\mb86235\mb86235.cpp). generate_reg_read and generate_ea fixes. Added ALU OR / XOR (cpu\mb86235\mb86235drc.cpp). Wrote a preliminary TGPx4 interpreter core. Misc fixing (floating point conversions, broken REP opcode and support for rascot2 MOV2 int->ext opcode) [Angelo Salese].
- 0.193              : Added cpu\mb86235\mb86235d.h.
- 0.186              : Added cpu\mb86235\mb86235defs.h.
- 0.181              : Added cpu\mb86235\mb86235drc.cpp and mb86235fe.cpp/h. Added preliminary MB86235 recompiler, disable for now. Fixed PR updates [Ville Linde].
- 0.180              : Changed the MB86235 disassembler to use 'std::ostream &' internally [Nathan Woods]. Eliminate static char[] buffers in the MB86235 disassembler [AJR].
- 0.175              : Finish the MB86235 disassembler [Ville Linde]. Fixed 4 compile errors (cpu\mb86235\mb86235d.cpp) [Robbbert].
- 0.154              : Added cpu\mb86235\mb86235.c/h and mb86235d.c. Added TGPx4 CPU core for Model 2C [Angelo Salese].
-  7th October   2004: R. Belmont - src\cpu\mb86235 almost compiles now (it's down to 1 screen full of errors, from several dozen earlier today). I realize that's not real exciting, but emulation's like that sometimes.
- DRIVERS: model2.cpp
- SOURCE: cpu\mb86235\mb86235.cpp




19.    IBM

19.1   PowerPC 4xx/6xx

- 0.272              : Fixed several things using memset on non-trivial objects. In particular, this fixes a delegate getting nuked in cpu\powerpc [Vas Crabb].
- 0.271              : Fixed QNan check. a) All constants were one digit too short. b) The payload was always expected to be 0 (which is just a special case qnan (Real Indefinite) though) (powerpc\ppccom.cpp) [toxie].
- 0.261              : Use util::sext for sign extension in disassembler (powerpc\ppc_dasm.cpp) [AJR].
- 0.255              : Added 740 and 750 models to give the correct IDs. The 740/750 extended TLB is not yet supported (powerpc\ppc.h and ppccom.cpp) [R. Belmont].
- 0.254              : Minor disassembly improvements: Support over & out debugging flags for a few more instructions. Provide special operand format for POWER svc instruction (powerpc\ppc_dasm.cpp) [AJR].
- 0.246              : Added debugging flags to disassembly for simplified forms of branch instructions (powerpc\ppc_dasm.cpp) [AJR].
- 0.238              : Added Power family disassembly (tools\unidasm.cpp). Reduced enum scope (powerpc\ppc_dasm.cpp) [Patrick Mackinlay].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.221              : Simplified some handlers [Osso].
- 0.197              : Hopefully purge references to emu_fatalerror from ppc_dasm.o (cpu\powerpc\ppc_dasm.cpp and ppccom.h) [Vas Crabb].
- 0.196              : Clean up a bit of macro hell in PowerPC core [Vas Crabb].
- 0.193              : Added cpu\powerpc\ppc_dasm.h.
- 0.182              : Clear two LSBs of the branch target address. This is what a real CPU does in order to prevent branching to an invalid address [Maxim Poliakovski].
- 0.181              : Set DSISR to the DSI flags rather than the address on data access faults [R. Belmont, Maximumspatium]. Fixed DSI flag bits. Alignment exceptions will need more complex mask/shift depending on the instruction's addressing mode, but that's a job for another time; at any rate it uses the LSBs of the DSISR register [Vas Crabb, Maximumspatium].
- 0.180              : Moved the declaration for ppc_dasm_one() to a header file. Changed the PowerPC disassembler to use 'std::ostream &' internally. Eliminated 'ppc_dasm_one(std::string &string,...' trampoline. Removed 'ppc_dasm_one(std::string &string,...' declaration and updated caller. Changed buffer.vec() to &buffer.vec()[0] [Nathan Woods].
- 0.174              : Fixed PPC targets (video\rgbvmx.h) [Vas Crabb].
- 0.169              : Removed dead PPC code (cpu\powerpc\drc_ops.cpp/h, ppc.cpp, ppc403.inc, ppc602.inc, ppc603.inc, ppc_mem.inc, ppc_ops.h/inc and ppc_ops.inc) [Miodrag Milanovic].
- 0.158              : Fixed unterminated strings in powerpc debugger (cpu\powerpc\ppccom.c) [Oliver Stoeneberg].
- 0.156              : Converted remaining PPC callbacks to delegates [Osso]. Fixed line endings [Carl, MetalliC]. Added command-line option -[no]drc_log_uml to control DRC UML disassembly logging. Allows logging of DRC UML disassembly without re-compiling / removes. DRCUML_OPTION_LOG_UML and all the core-specific LOG_UML defines (cpu\powerpc\ppccom.c). Added command-line option -[no]drc_log_native to control DRC native diassembly logging. Allows logging of DRC native disassembly without re-compiling, removes DRCUML_OPTION_LOG_NATIVE and all the core-specific LOG_NATIVE defines, added logging() to drcbe_interface and added logging_native() to drcuml_state [Oliver Stoeneberg].
- 0.154              : Moved emu\eigccppc.h and eigccx86.h to src\osd\. Moved PowerPC legacy handlers to member of cpu classes [Miodrag Milanovic]. Modernised PowerPC cpu core [Wilbert Pol].
- 0.153              : Changed cpu\powerpc\ppc_ops.c to ppc_ops.inc [Oliver Stoeneberg]. Using delegates instead of read/write_device_func in ppc core [Miodrag Milanovic].
- 0.150              : Made both DRC and Non-DRC compile for MIPS, RSP and SH2 core and added option to enable/disable DRC from command line (-drc -nodrc by default it's on). Added command line option to force DRC C backend (emu\emuopts.c) [Miodrag Milanovic].
- 0.148u1            : Added direct dynamic entry load to virtual TLB (cpu\vtlb.c). vtlb_fill doesn't appear to provide an easy way to determine whether a failure is due to a presence or permission error also entries need to be marked dirty or the performance improvement is minimal [Carl].
- 0.147              : Fixed 601-type BAT processing (cpu\powerpc\ppccom.c) [R. Belmont].
- 0.146u5            : Added callbacks for buffered external DMAs (ppc.h + ppccom.c/h) [Ville Linde].
- 0.146u4            : Added optional PPC callback for explicit data cache stores. Hooked up data cache store callback to Konami Cobra driver. Exposed segment registers to the debugger (ppc.h + ppccom.c). Changed cap flags to UINT32 for future additions [Ville Linde].
- 0.146              : Added PPC405GP to PPC cpu core [Lukasz Markowski]. Added custom DCR read/write handlers to PPC cpu core. Cleanup powerpc\ppc.c and ppccom.c [Miodrag Milanovic].
- 0.145u5            : Further DIVW improvements. More flags work. All integer divide instructions now 100% pass PPCTorture. Improved corner case behavior of SLW/SRW [R. Belmont].
- 22nd March     2012: R. Belmont - Been working on debugging MAME/MESS's PowerPC core - this should improve our Sega Model 3 compatibility as well as make some stuff in MESS run better. This work has also exposed some issues in MAME's recompiler framework that could improve issues with games using other DRC-based CPU cores once solved.
- 0.138u4            : Atari Ace fixed overlapping data buffers in the PowerPC core.
- 0.138u3            : Aaron Giles fixed performance regression for PowerPC games. The timing made heavy use of cpu_get_total_cycles() which is now slow. Better to use the legacy_cpu_device directly and call device->total_cycles() which avoids the dynamic_cast to find the execute interface from a generic device.
- 0.133              : Aaron Giles added FP registers to PPC debugger interface. Fixed bugs in the x64 back-end that prevented proper 3D rendering for Model 3 games.
- 0.130              : Aaron Giles added function calls to replace the MIPS3 and PowerPC DRC's various CPU_SET_INFO bits.
- 0.129              : Aaron Giles removed HAS_PPC* in favor of a single HAS_POWERPC, and a single definition in cpu.mak for all PowerPC variants.
- 0.128u6            : Pointer-ified the PowerPC core [Aaron Giles].
- 0.125u7            : Aaron Giles changed DRC frontend to pass a pointer to the previous instruction when describing. Updated PowerPC frontend to approximately take into account branch and CR logic folding in timing computations. Aaron Giles added save state support to the MIPS3 recompiler and virtual TLB system.
- 0.125u6            : Added cpu\vtlb.c/h. Created common virtual TLB managment module. Updated MIPS and PowerPC code to make use of it [Aaron Giles].
- 0.121u3            : Ville Linde added PowerPC 604 processor support. Moved PowerPC opcode tables to the CPU context to allow multiple simultaneous processors with different opcode tables.
- 0.120u3            : Vas Crabb cleaned up the inline assembly for both x86 and PPC, enabled the mul32 family assembly stuff on 32-bit x86, and fixed some compiler warnings on 64-bit GCC. In addition: * Provided single-precision reciprocal approximation code for PowerPC and x86 with SSE2. * Filled in all other TBD functions in eigccx86.h for completeness. * Conditionalised some code in eigccppc.h so that it isn't used when the compiler has 64-bit instructions available.
- 0.120u2            : Added emu\eigccppc.h.
- 0.118u6            : Aaron Giles made a cleanup pass through the new x86emit.h code emitters, changing the way memory is referenced and replacing macros with inline functions. Updated MIPS and PowerPC drc cores to use the new emitters. Removed the old macro-based ones in x86drc.h.
- 0.115u1            : Ville Linde added lswx and stswx opcodes to the PowerPC core.
- 0.114u3            : Made the PowerPC dynarec options runtime configurable [Ville Linde].
- 0.101u3            : Nathan Woods updated PowerPC core to use new disassembler style.
- 0.99u3             : Ville Linde fixed PowerPC recompiler so that Scud Race works again.
- 0.98u2             : More PowerPC updates [Nathan Woods]: Moved update_counters() to be executed after the DRC epilogue code is appended; now behaves more like the non-DRC core. Fixed some bugs in DRC exeception handling (SRR1 was not being set up properly, and not all MSR flags were being cleared). Refactored DRC core to call MMU hooks. ISI exceptions will now be thrown if the MMU hooks report an unexecutable address in the DRC core. Fixed a rounding error in the decrementer. Added support for decrementer exceptions when the DEC register is written to in both cores. Added support for ISI/DSI exceptions with setjmp()/longjmp() in the non-DRC core.
- 0.98u1             : PowerPC core update [Nathan Woods]: Added infrastructure to generate DSI and ISI exceptions. Made the lbz/lbzu/lbzux/lbzx instructions properly clear out the high 24 bits in the results. Added SRR0 and SRR1 to the debug view.
- 0.97u4             : Added cpu\powerpc\ppc_mem.c. More PowerPC improvements [Nathan Woods]: Fixed exception handling; previously the MSR register was stored in EDX, and EDX is not preserved across the call to ppc_set_msr(). Implemented recompile_fcmpo(). Fixed certain rules in rules.mak (some said drc_ops.h instead of drc_ops.c). Commented the MSR_* values. Moved BAT registers into their own structure. Added DSI and ISI exceptions (non-DRC core only for now). Moved READ*/WRITE* functions into ppc_mem.c. Changed memory handling so that reading and writing are done through function pointers that can be changed at runtime (which would be useful if, say a MMU was implemented in the future). Yet another fix to the PowerPC counters, reimplementing them from scratch [Ville Linde].
- 0.97u3             : Improvements to the PowerPC cores [Ville Linde]: Rewrote the interrupt handling in the interpreter core so it matches the DRC core. Fixed MCRXR instruction. Foxe some timebase problems, so LeMans 24 is now working. Made the DRC PowerPC core compilable when HAS_PPC403 is 0 [Nathan Woods].
- 0.97u2             : Nathan Woods implemented the MCRXR instruction in the PowerPC core and fixed usage of change_pc().
- 0.97u1             : Additional progress on the PowerPC DRC (faster), support for more exceptions, better support for the PPC internal serial ports [Ville Linde]. Nathan Woods added debugger support for the decrementer register in the PowerPC core.
- 0.96u4             : Nathan Woods implemented the SMI input line in the PowerPC core and added a placeholder for the TLBISYNC input line (doesn't do anything yet).
- 0.96u3             : Nathan Woods added better debugging support to the MIPS and PPC cores.
- 0.96u2             : Nathan Woods patched the non-DRC PPC core to compile properly when not all PPC cores (403, 602, 603) are enabled. Implemented fcmpo instruction.
- 0.96u1             : Brad Oliver fixed big endian issues in the PPC core.
- 0.91u1             : Trailing comma at the end of an enum (powerpc\ppc.h) [Lawrence Gold].
- 0.90u3             : Lawrence Gold fixed some PPC core compiler warnings.
- 0.90u2             : PowerPC core Update [Ville Linde]: Better interrupt handling. Nested interrupts work properly. Some support for PPC602. Major bugfixes. Added some unimplemented opcodes.
- 0.86               : Added cpu\powerpc\ppc.c/h, ppc403.c, ppc_dasm.c and ppc_ops.c/h. Added IBM/Motorola PowerPC 4xx/6xx emulator [Ville Linde, Bart Trzynadlowski, Stefano Teso].
- DRIVERS: cobra.cpp, firebeat.cpp, gticlub.cpp, hornet.cpp, konamim2.cpp, konendev.cpp, model3.cpp, nwk-tr.cpp, taitopjc.cpp, taitotz.cpp, triforce.cpp, ultrsprt.cpp, viper.cpp and zr107.cpp
- SOURCE: cpu\powerpc\ppc.cpp and ppccom.cpp



19.11  PowerPC 403GA

- 0.250              : Made PPC400 series external serial clock configurable. Also use actual configured system clock for serial timer when selected rather than hard-coded number [Windy Fairy].
- 0.196              : Changed description to 'IBM PowerPC 403GA'.
- 0.154              : Added 'PowerPC 403GA' device.
- 0.153              : Changed cpu\powerpc\ppc403.c to ppc403.inc [Oliver Stoeneberg].
- 0.151              : Fixed and simplify PPC4xx DMA interrupt logic. Fixes goal animations in Five a Side Soccer [Phil Bennett].
- 0.147              : Implemented PPC403 DMA chaining [Ville Linde].
- 0.125u5            : Nathan Woods fixed compilation error when neither HAS_PPC403GA nor HAS_PPC403GCX are defined.
- 0.125u4            : Changed description to 'PowerPC 403GAX'.
- 0.110u1            : Ville Linde added support for Fixed Interval Timer to the PPC403 core.
- 0.86               : Added cpu\powerpc\ppc403.c. PowerPC 403 core [Ville Linde, Bart Trzynadlowski, Stefano Teso]. This is basically SuperModel (Sega Model 3 emu)'s PPC core minus the FPU and 6xx-series specific instructions (that stuff isn't ported to MAME yet). As such, it's passed all manner of synthetic PPC torture tests and should be quite reliable for any PPC403-based hardware.
- 21st August    2004: Ville Linde - Submitted a MAME version of SuperModel's PowerPC core plus the WIP Konami PPC drivers.
- NOTES: Originally written by Bart Trzynadlowski for Supermodel project. PowerPC 403 opcodes and MAME conversion by Ville Linde.
- PCB: IBM PowerPC 403GA (Gticlub), PPC403GA-JC33C1 (Gradius4, Sscope/2)
- DRIVERS: cobra.cpp, gticlub.cpp, hornet.cpp, nwk-tr.cpp, ultrsprt.cpp, zr107.cpp
- SOURCE: cpu\powerpc\ppc403.cpp



19.12  PowerPC 403GCX

- 0.250              : Made PPC400 series external serial clock configurable. Also use actual configured system clock for serial timer when selected rather than hard-coded number [Windy Fairy].
- 0.196              : Changed description to 'IBM PowerPC 403GCX'.
- 0.154              : Added 'PowerPC 403GCX' device.
- 0.152              : Correct CPU type (PPC403GCX) in konendev.c driver and added some hardware notes [Phil Bennett].
- 0.151              : Fixed and simplify PPC4xx DMA interrupt logic [Phil Bennett].
- 0.147              : Implemented PPC403 DMA chaining [Ville Linde].
- 0.125u5            : Nathan Woods fixed compilation error when neither HAS_PPC403GA nor HAS_PPC403GCX are defined.
- 0.125u4            : Changed description to 'PowerPC 403GCX'.
- 0.110u1            : Ville Linde added support for Fixed Interval Timer to the PPC403 core.
- 0.86               : Added cpu\powerpc\ppc403.c. PowerPC 403 core [Ville Linde, Bart Trzynadlowski, Stefano Teso]. This is basically SuperModel (Sega Model 3 emu)'s PPC core minus the FPU and 6xx-series specific instructions (that stuff isn't ported to MAME yet). As such, it's passed all manner of synthetic PPC torture tests and should be quite reliable for any PPC403-based hardware.
- NOTES: Originally written by Bart Trzynadlowski for Supermodel project. PowerPC 403 opcodes and MAME conversion by Ville Linde.
- DRIVERS: firebeat.cpp and konendev.cpp
- SOURCE: cpu\powerpc\ppc.cpp



19.13  PowerPC 405GP

- 0.250              : Made PPC400 series external serial clock configurable. Also use actual configured system clock for serial timer when selected rather than hard-coded number [Windy Fairy].
- 0.196              : Changed description to 'IBM PowerPC 405GP'.
- 0.184              : Added 'PowerPC 405GP' device.
- DRIVERS: vp101.cpp and (MESS) dm7000.cpp
- SOURCE: cpu\powerpc\ppc.cpp



19.14  PowerPC 601

- 0.274              : PowerPC 601 has POWER and PowerPC instructions, allow both in disassembly. Strip the debug info (powerpc\ppc.h, ppc_dasm.h and ppccom.cpp). More support for the 601's POWER/PPC dual nature, including several POWER instructions (powerpc\ppc*) [R. Belmont].
- 0.143u2            : Implemented correct BATs for PPC 601 and memory-forced I/O controller interface accesses [R. Belmont].
- 0.118u5            : Ville Linde added support for the PowerPC 601.
- SOURCE: cpu\powerpc\ppc.cpp



19.15  PowerPC 602

- 0.153              : Changed cpu\powerpc\ppc602.c to ppc602.inc [Oliver Stoeneberg].
- 0.129              : Aaron Giles hooked up DSA/ESA instructions for PowerPC 602 (as no-ops for now). Also hooked up PPC602 IBR. 'Tobe! Polystars' gets a little farther but crashes due to a TLB issue.
- 0.125u4            : Changed description to 'PowerPC 602'.
- 0.123u4            : Rewrote some potentially compiler specific code [Couriersud]: Added ATTR_FORCE_INLINE to osdcomm.h. Added ATTR_NONNULL. Moved U64 S64 fram mamecore.h to osdcomm.h. Define SETJMP_GNUC_PROTECT() in osdcomm.h for use in ppc602 and ppc603.
- 0.107u1            : Ville Linde added some PPC602 specific opcodes and registers.
- 0.91               : Added cpu\powerpc\ppc602.c. Improvements to PPC core / Model 3 driver [Ville Linde]. Some step 2.0 games now show something.
- 0.90u2             : Support for PPC602 [Ville Linde].
- PCB: EMPPC602FB66 (Heatof11), IBM POWERPC 602 (Heatof11)
- DRIVERS: konamim2.cpp
- SOURCE: cpu\powerpc\ppc602.inc



19.16  PowerPC 603

- 0.196              : Changed descriptions to 'IBM PowerPC 603', 'IBM PowerPC 603E' and 'IBM PowerPC 603R'.
- 0.186              : Changed description to 'PowerPC 603E'.
- 0.154              : Added 'PowerPC 603', 'PowerPC 603e' and 'PowerPC 603R' devices.
- 0.153              : Changed cpu\powerpc\ppc603.c to ppc603.inc [Oliver Stoeneberg].
- 0.135u1            : Aaron Giles fixed PowerPC 603 translation so it doesn't get stuck in an infinite loop after the first fixup.
- 0.130              : Aaron Giles fixed bug that caused 64-bit PowerPC systems to fetch opcodes in the wrong order.
- 0.125u4            : Changed description to 'PowerPC 603e' and 'PowerPC 603R'.
- 0.123u4            : Rewrote some potentially compiler specific code [Couriersud]: Added ATTR_FORCE_INLINE to osdcomm.h. Added ATTR_NONNULL. Moved U64 S64 fram mamecore.h to osdcomm.h. Define SETJMP_GNUC_PROTECT() in osdcomm.h for use in ppc602 and ppc603.
- 0.97u3             : Ville Linde did another overhaul on the PPC603 counters (timebase should increment once every four core clock cycles and decrementer should decrement once every four bus cycles).
- 0.96u4             : Nathan Woods implemented the TBU special variable on the 603.
- 0.90u2             : Model 3 Update [Ville Linde]. Better interrupt handling. Nested interrupts work properly. Major bugfixes. Added some unimplemented opcodes.
- 12th December  2004: Ville Linde - Fixed a ton of bugs in the PPC603 core and fixed the EEPROM among other things. Scud Race now runs normally through the attract mode (without 3D graphics of course).
- 0.89u4             : Additional 64-bit integer related cleanups in Model3 / PPC [Lawrence Gold].
- 0.89u3             : Major bugfixes to the PPC603 emulation, especially the FPU [Ville Linde]. Lawrence Gold fixed some compiler related issues with >32-bit integers in PPC / Model 3.
- 0.89u1             : Added cpu\powerpc\ppc603.c. PPC core improvements (603 support) for Sega Model 3 [Ville Linde].
- 25th November  2004: R. Belmont - Added with Andrew Gardiner and Ville Linde the 64-bit PowerPC 603 core and a skeleton Sega Model 3 driver (no video emulation, most games barely boot).
- PCB: PowerPC603ev, QFP240  HEATSINKED (Harley)
- DRIVERS: cobra.cpp, dkmb.cpp, model3.cpp, taitopjc.cpp, taitotz.cpp, triforce.cpp and tvcapcom.cpp
- SOURCE: cpu\powerpc\ppc603.inc



19.17  PowerPC 604

- 0.121u3            : Ville Linde added PowerPC 604 processor support. Moved PowerPC opcode tables to the CPU context to allow multiple simultaneous processors with different opcode tables.
- DRIVERS: cobra.cpp
- SOURCE: cpu\powerpc\ppc.cpp



19.18  PowerPC MPC8240

- 0.145u2            : Enabled MMU on MPC8240 [Ville Linde].
- 0.125u4            : Changed description to 'PowerPC MPC8240'.
- 0.112u1            : Ville Linde added support for the Motorola MPC8240 to the PowerPC core.
- SOURCE: cpu\powerpc\ppc.c + drivers\viper.cpp



19.19  Konami PowerPC Common Functions

- 0.274              : Initialized some variables [Osso].
- 0.222              : Removed 7seg LED hack (machine\konppc.cpp) [hap].
- 0.198              : Use device finders and eliminated machine().device(tag) [AJR].
- 0.136              : Splitted ADC1038, Konami 033906 and Konami 056230 emulation from gticlub.c and konppc.c. Also converted them to be devices and updated PPC Konami games to use the new code [Fabio Priuli].
- 0.125u7            : Added save state support to konppc module. Cleaned up system register access in Konami PowerPC games. Connected EEPROM in hornet driver (doesn't seem to affect much). Altered network IRQ timing to fix several problems. Most games are back to their previous "working" states [Aaron Giles]. Added more complete README's for Konami PowerPC games [Guru].
- 0.125u5            : Konami PowerPC drivers: Designated fast RAM accesses for work RAM. Removed unnecessary mirroring [Aaron Giles].
- 0.124              : Got most of the Konami PPC games running again [R. Belmont].
- 0.114u2            : Removed all the timing kludges from machine\konppc.c. GTI Club is kind of playable now. You can finish a lap or two, but eventually it will hang on network error [Ville Linde].
-  7th December  2005: Ville Linde - I'm slowly starting to understand how the custom Konami 3D chipset works. Now I'm getting some simple polygon stuff showing, the most complex one being the Konami logo in Operation Thunder Hurricane.
- 0.102              : Many fixes to the Konami PPC drivers [Ville Linde].
- 0.97u2             : Improvements to the Konami PPC games: Fixed Gradius 4 data ROM mapping. Fixed PPC/SHARC communications. Fixed NVRAM protection on some games. Stubbed out LAN interface [Ville Linde].
- 0.97u1             : Added machine\konppc.c/h. Progress on the Konami PowerPC drivers: Cleaned up and consolidate common hardware. Hooked up ADSP-21062 and 3dfx chips. Initial reverse-engineering work on the K001005 custom 3D chipset in GTI Club. Initial NVRAM values plugged in for many games (they're used as a crude protection, similar to the EEPROM on GV System). No games are playable or even show much yet, but nearly all of them do pass POST now [Ville Linde].
- 21st August    2004: Ville Linde - Submitted a MAME version of SuperModel's PowerPC core plus the WIP Konami PPC drivers.
- NOTES: Konami PowerPC Common Functions
- DRIVERS: gticlub.cpp, hornet.cpp, nwk-tr.cpp and zr107.cpp
- SOURCE: machine\konppc.cpp




19.2   PowerPC Dynamic Recompiler (PPCDRC)

- 0.282              : Generate a simpler multiplication opcode for MULLI (powerpc\ppcdrc.cpp) [Vas Crabb].
- 0.277              : Fixed issues in POWER div (signed divide) instruction causing GitHub #13329. 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 (powerpc\ppcdrc.cpp) [Vas Crabb].
- 0.276              : Realigned some comments that had drifted (powerpc\ppcdrc.cpp) [Vas Crabb].
- 0.274              : Implemented MULLWx and MULLWOx using the new MULSLW opcode (powerpc\ppcdrc.cpp) [Windy Fairy].
- 0.261              : Don't generalte illegal instruction exception for LMW invalid forms (powerpc\ppcdrc.cpp and ppcfe.cpp). Fixes Landing High Japan, Densha de GO 3 and possibly all games in the driver stuck at TLCS900 initialize screen (MT08791) [Windy Fairy].
- 0.259              : Don't overwrite RA in lmw instruction. For 4xx series and 601, skip over the register update. For any other flavor, raise an illegal instruction exception (powerpc\ppcdrc.cpp) [Windy Fairy].
- 0.230              : Fixed MCRXR UML, UM for lswx and stswx. Fixed MMU/exceptions debug messages (powerpc\ppcdrc.cpp) [O. Galibert].
- 0.215              : Fixed debug flag test causing fast RAM accesses to be erroneously emitted (powerpc\ppcdrc.cpp). Hopefully fixes unusual breakpoint/watchpoint behaviour [Phil Bennett].
- 0.192              : Attempt at fixing PPC DRC scheduling (cpu\powerpc\ppcdrc.cpp). This fixed black screen on launch in Scud Race Twin [AJR].
- 0.173              : Use the new instructions for FPU loads and stores (cpu\powerpc\ppcdrc.cpp). Map some FPU registers to physical registers. Optimized powerpc\ppcdrc.cpp [Ville Linde].
- 0.172              : Handle divide by zero (cpu\powerpc\ppcdrc.cpp) [Ville Linde].
- 0.155              : Fixed wrong condition register in stwcx (powerpc\ppcdrc.c). Fixed unaligned 64-bit accesses [Ville Linde].
- 0.147              : 100% pass of integer portion of PPCTorture on all DRC backends (cpu\powerpc\ppcdrc.c) [R. Belmont].
- 0.146u5            : Fixed SRAW behavior with C backend. x86/x64 BEs need work to pass (powerpc\ppcdrc.c) [R. Belmont].
- 0.146u4            : Split up dword-aligned 64-bit accesses to 32-bits. Better fix for dword aligned 64-bit accesses [Ville Linde]. Fixed PowerPC CMP/CMPI instructions; they were behaving as CMPL/CMPLI and generating wrong flags [R. Belmont].
- 0.146u3            : PPC4xx supports EIEIO (cpu\powerpc\ppcfe.c) [Ville Linde].
- 0.146              : Cleanup ppcdrc.c [Miodrag Milanovic].
- 0.145u4            : Properly mirror SO bit from XER into CR0 in powerpc\ppcdrc.c. Correct DIVW divide-by-zero crashes, flags and corner-case results [R. Belmont].
- 0.141u1            : Improved TLB mismatch handling in PPC DRC, so that if we fill from an empty entry, we re-dispatch to previously compiled code instead of always recompiling the target. This greatly reduces the DRC overhead on 603-based games [Aaron Giles].
- 0.136u1            : Aaron Giles fixed x86 DRC backend codegen bug that broke Killer Instinct.
- 0.132u3            : R. Belmont fixed PPCDRC flags on STWCX and FMULS to use the correct registers. Generate some FPSCR flags.
- 0.132u2            : Phil Bennett and R Belmont fixed PPCDRC incorrect instruction checksum order.
- 0.125u9            : Aaron Giles fixed 64-bit writes in UML C back-end.
- 0.125u7            : Aaron Giles added save state support to the PowerPC recompiler.
- 0.125u5            : PowerPC recompiler [Aaron Giles]: Fixed bug where a branch and link to the link register would overwrite the link register before fetching the target address. Updated to no longer explicitly specify flags. Added symbols for most common variables. Fixed bug in handling XER carry flag for subo forms. Simplified flag insertion logic for opcodeo forms. Rewrote lswi/stswi as subroutines. Made accesses to tempdata explicitly dword or qword. Fixed SRR0 when generating a syscall. Removed no longer necessary TESTs on extsb/w, rlwinm, rlwnm, rlwimi and cntlzw. Fixed bug where the SO flag was not being computed for compares. Fixed flag computations for mulhw/mulhwu/mullw. Fixed subtlety of shifts between 32 and 63 in srw/sraw. Fixed mffs/mtfsf to use FP registers. Fixed mtfsfi to use the immediate value properly. Now marking terminal count bit in DMA status register. Added support for 4xx protection registers via the MMU. Added TLBH, TLBU, and DEC to the list of registers in the debugger. Turned off "end of transfer" DMA signals in favor of "transfer count 0" signals; fixes memory-to-memory DMA in fiveside. Minor flags optimizations: * Broke CR into several individual bits of state and * Extracted the SO bit from XER into its own state. Cleaned up register tracking implementation. Fixed numerous errors and shortcomings in the tracking. Added support for removing unnecessary XER CA and CR0 computations. Updated UML logging to output new frontend statistics. Added basic cycle counts for longer instructions. Added penalty for polling timebase and decrementer registers. Fixed dependencies in cpu.mak. Reduced address bus width of 4xx series to 31 bits per the documentation. Fixed bug that would jump to incorrect PC after filling the TLB during a mismatch event. Added explicit address truncation to 31 bits for 4xx series. Added new PPCDRC_ACCURATE_SINGLES option, which removes the excessive (and very likely unecessary) extra rounding when performing the "fast" single-precision floating point ops. Fixed TLB filling for 4XX protection ranges. Fixed parameter ordering for masked reads/writes. Added detection of MMU enablement in 403GCX case. Fixed bug in protection bounds violation detection for 4XX. Changed SPU receive model to a push model; updated drivers accordingly. Added macros for setting the SPU transmit handler and sending bytes. Cleaned up ppc.h. Fixed lmw/stmw if rA is one of the loaded/stored registers. Removed unnecessary variables & structure members. Optimized for the XER and CR0 case where XER doesn't need an overflow calculation.
- 0.125u4            : Changed cpu\powerpc\ppcdrco.c to cpu\powerpc\ppccom.c/h. Added cpu\powerpc\ppcdrc.c and ppcfe.c/h. Universal recompiler: * Fixed frontend to handle opcode widths different from bus width. * Added several new opcodes: (D)GETFLGS - copies the UML flags to a destination operand and FDRNDS - rounds a double precision value to single precision. * Renamed several opcodes: (SETC   -> CARRY), (XTRACT -> ROLAND) and (INSERT -> ROLINS). * Consolidate the following opcodes: (LOAD?U -> LOAD), (LOAD?S -> LOADS), (STORE? -> STORE), (READ?U -> READ), (READ?M -> READM), (WRITE? -> WRITE), (WRITM? -> WRITEM), (SEXT?  -> SEXT), (FTOI?? -> FTOINT), (FFRI?  -> FFRINT) and (FFRF?  -> FFRFLT). * Removed some opcodes: FLAGS (can be done with GETFLGS/LOAD4/ROLINS), ZEXT (can be achieved with AND) and READ?S (can be achieved with READ/SEXT). * Updated C, x86, and x64 back-ends to support these opcode changes. * Updated disassembler to support these opcode changes. PowerPC dynamic recompiler [Aaron Giles]: Rewrote PowerPC implementation as a dynamic recompiler on top of the universal recompiler engine. * Wrote a front-end to analyze PowerPC code paths and register usage. * Wrote a common shared module with C implementations of tricky CPU behaviors. * Added separate CPU types for the variants supported, instead of relying on a hidden model enum. * Rewrote the serial port emulation for the 4xx series to be more accurate and not rely on separate DMA handlers. * Rewrote the MMU handling to implement a software TLB that faults in pages and handles changed bits appropriately. * Implemented emulation of the PowerPC 603's software TLB, which allows the model 3 games to run without a hack to disable the MMU. Aaron Giles updated the PowerPC disassembler to share constants with the rest of the core, and to more aggressively use simplified mnemonics, especially for branches.
- 0.125u2            : Changed cpu\powerpc\ppcdrc.c to cpu\powerpc\ppcdrco.c.
- 0.125              : Aaron Giles added xchg and a few other missing opcodes to x86emit.h.
- 0.120u3            : Vas Crabb cleaned up the inline assembly for both x86 and PPC, enabled the mul32 family assembly stuff on 32-bit x86, and fixed some compiler warnings on 64-bit GCC. In addition: * Provided single-precision reciprocal approximation code for PowerPC and x86 with SSE2. * Filled in all other TBD functions in eigccx86.h for completeness. * Conditionalised some code in eigccppc.h so that it isn't used when the compiler has 64-bit instructions available.
- 0.120u2            : Added emu\eigccx86.h.
- 0.119u2            : Added cpu\x86log.c/h. Aaron Giles fixed nasty x86emit bug involving 16-bit opcodes on 64-bit systems.
- 0.118u6            : Aaron Giles made a cleanup pass through the new x86emit.h code emitters, changing the way memory is referenced and replacing macros with inline functions.
- 0.96u1             : Added cpu\powerpc\ppcdrc.c and drc_ops.c/h. Added dynamic recompiler for PowerPC cores (cpu\powerpc\ppcdrc.c) [Ville Linde].
- 0.89u5             : Nathan Woods added macros for pushfd() and popfd() to src\x86drc.h.
- 0.84               : Aaron Giles added support for many more instruction forms in x86drc.h.
- 0.82u2             : Aaron Giles fleshed out SSE support, made it optional for recompilers to keep the PC/ICount in registers and made append_verify_code work for sizes > 4.
- 0.81u4             : MIPS DRC fixes [Aaron Giles]: Fixes an edge case where a memory access like: lw  r3,$0(r0). Would leave the stack in a funny state and lead to a crash. Instructions of the form: ld   r10,0(r10). Would load the low word into r10 first, and then use the modified r10 (plus 4) as the address of the high word. Fixes the sky graphics in several of the kinst2 levels.
- 0.78u1             : Nathan Woods added a few more instruction declarations and a call to retrieve CPU feature flags from CPUID (src\x86drc.c).
- 0.76u2             : Aaron Giles added better support for tweaking the FP rounding modes (X86DRC).
- 0.76u1             : Nathan Woods added a few macros for other miscellaneous X86 opcodes. Added a drc_dasm() call, a debug call that uses MAME's I386 disassembler to disassemble DRC'd code (didn't compile, commented out until fixed).
- 29th May       2003: Aaron Giles did some minor tweaks and optimizations to the MIPS3 dynarec core.
- 0.69               : Fixes some macros with arguments not used. Otherwise it doesn't compile with GCC 2.95.3. (src\x86drc.h) [Andrea Mazzoleni].
- 0.67               : Added src\x86drc.c/h. MIPS 3/4 x86 dynamic recompiling core [Aaron Giles].
- 29th March     2003: Aaron Giles added MIPS 4 (R5000) support to the MIPS 3 (R4600) CPU core and he added dynamic recompiling to both of them.
- SOURCE: cpu\powerpc\ppcdrc.c + cpu\powerpc\ppcfe.cpp



19.3   DRC - Dynamic Re-Compiling

- 0.283              : Added UML bit field extract instructions (cpu\uml.cpp). Added LZCNT implementation using x86 LZCNT instruction and optimised the BSR-based implementation (cpu\drcbex64.cpp) [Vas Crabb].
- 0.282              : Use bfxil to save an instruction for smae cases of CARRY and ROLINS (cpu\drcbearm64.cpp). Fixed code for ROLC that played fast and loose with integer promotion, producing incorrect results for some compilers/targets (cpu\drcbec.cpp). Truncate immediate operands for CARRY (cpu\uml.cpp). Documented the last of the UML instructions (docs\source\techspecs\uml_instructions.rst). Marked BREAK as clobbering all flags and marked LOAD, LOADS, STORE, SET, FLOAD and FSTORE as not modifying flags. CPUs already depend on SET not modifying flags (cpu\uml.cpp). Clear the zero and carry flags for unordered floating point comparisons for consistency with the documentation and the other back-ends (cpu\drcbex86.cpp, cpu\drcbex64.cpp). Slightly optimised flag calculation for some shifts and rotates (cpu\drcbex64.cpp). Simplified and ptimised flag calculations for rotate instructions (cpu\drcbex64.cpp). Mask flags when setting via SETFLGS or RESTORE to avoid possible buffer overrun, slightly optimised SETFLGS with an immediate operand. Optimised FCMP when only the unordered flags is required (cpu\drcbex86.cpp, cpu\drcbex64.cpp). Fixed default floating point rounding mode not applying after RESTORE (cpu\drcbearm64.cpp, cpu\drcbec.cpp). Optimised generated code for SETFLGS a little (cpu\drcbearm64.cpp). Optimised GETFLGS: LEA to avoid the need to save/restore flags for more flag combinations, choose registers more wisely to avoid unnecessary copies and reduce REX prefixes, use more efficient strategy to save and restore flags (cpu\drcbex86.cpp). Save an instruction when calculating carry flag for shifts with immediate count (cpu\drcbearm64.cpp). Avoid slow microcoded pushfq/popfq altogether. Also avoid some false dependencies and reduce near cache usage by almost 4KiB (cpu\drcbex64.cpp). Optimised a couple more cases of GETFLGS and replaced a few magic numbers with constants. Use 2-operand and 3-operand forms of imul. Also changed scratch register use a bit (cpu\drcbex64.cpp). Optimised MULU/MULS flag calculation (cpu\drcbearm64.cpp, cpu\drcbex64.cpp). Handle degenerate forms of ROLAND/ROLINS when simplifier is disabled (cpu\drcbearm64.cpp). Removed assert that made SETFLGS impossible to use in debug builds (cpu\drcbearm64.cpp, cpu\drcbex64.cpp, cpu\drcbex86.cpp). Further optimised 32-bit multiplication and flag calculation for all multiplication instructions. Fixed 32-bit SEXT sign extending to 64 bits (cpu\drcbearm64.cpp). Encapsulated as a class, don't use unsafe sprintf, optimised a little, made comments and data ranges vectors (cpu\x86log.cpp). Removed casts that are no longer necessary (cpu\drcbearm64.cpp, cpu\drcbex64.cpp and cpu\drcbex86.cpp). Don't try to get offset of unbound labels even if it won't be used (cpu\drcbearm64.cpp) [Vas Crabb].
- 0.281              : Added missing source load for optimised ROLINS case. Fixes bad ROLINS results in some cases where the result is in memory. Hopefully fixes Hyperstone E1 systems corrupting SR on absolute jumps (e.g. kdynastg failing to boot) (cpu\drcbearm64.cpp). Added a couple of simplification rules. ADDC's inputs are commutative and TEST with an immediate zero operand effectively ignores the other operand. Got rid of a redundant assignment (cpu\uml.cpp). Documented the most common DRC UML integer arithmetic and logical instructions. Documented some UML floating point arithmetic instructions. Also replaced mathematical symbols for Boolean algebra with less desirable C operators as they were upsetting pdflatex (docs\source\techspecs\uml_instructions.rst). Removed helpers for generating the unimplemented JMPH instrcution. Trying to use it would cause a compile error (cpu\drcumlsh.h). Optimised shift and rotate operations. Don't calculate carry flag when not requested. Don't calculate zero and sign flags when only carry is requested. Avoid branches when calculating carry, optimise for non-zero shift. Improved strategy for selecting working registers (cpu\drcbearm64.cpp). Documented more DRC UML floating point instructions (docs\source\techspecs\uml_instructions.rst). Added simplification rules for FFRINT and FFRFLT (cpu\uml.cpp). Use "src" rather than "src1" if there's only one source operand (cpu\drcumlsh.h). Implemented float-to-int conversion using rounding mode. Also optimised code generation for UML ROL (rotate left) and slightly optimised carry flag calculation for left shift (save one instruction) (cpu\drcbearm64.cpp). Improved behaviour for float-to-int conversion (cpu\drcbec.cpp). Documented several DRC UML shift/rotate instructions (docs\source\techspecs\uml_instructions.rst). Added a simplification rule for pathological cases of SEXT (cpu\uml.cpp). Documented the DRC UML SEXT instruction (docs\source\techspecs\uml_instructions.rst). Added some simplification rules for multiply and divide (cpu\uml.cpp). Slightly optimised flag calculation for some variants of the multiply instructions (cpu\drcbex64.cpp). Documented the DRC UML integer multiplication and division instructions (docs\source\techspecs\uml_instructions.rst). Added NEON vector register assignments to the header comment (cpu\drcbearm64.cpp). Fixed some cases of 32-bit operations not clearing the upper bits of a UML register (there are still a few remaining). Optimised unordered flag test - only the V bit needs to be tested. Fixed rounding mode dispatch for FTOINT (cpu\drcbearm64.cpp). Fixed some cases where GETFLGS would produce incorrect results when the destination is not a UML register permanently assigned to a host register (cpu\drcbex64.cpp). Apply floating point rounding mode to arithmetic (cpu\drcbearm64.cpp and cpu\drcbex64.cpp). i686 has no red zone (cpu\drcbex86.cpp). Improved code generation a bit: Avoid unnecessary operand loads for add/subtract operations where both sources are identical. Improved code generation for rotate through carry with immediate shift count and/or immediate zero source (cpu\drcbearm64.cpp). Fixed potential assertion failure when a degenerate rotate through carry is converted to a move (cpu\uml.cpp). Documented DRC UML rotate through carry instructions (docs\source\techspecs\uml_instructions.rst). Improved emulated memory access code. Generate optimised code for reads narrower than native width. Mask returned value to access size - the upper bits may not be cleared (fixes Hyperstone E1 misbehaving on Windows arm64). Don't save emulated flags across CALLC - flags are clobbered anyway (cpu\drcbearm64.cpp). A few more optimisations: Avoid some unnecessary register copies for the displacement in LOAD/STORE when the scale is 1. Avoid unnecessary register copies for ROLAND when the source is a UML register kept in a host register. Avoid an unnecessary register copy for ROLINS when inserting a left-aligned field (cpu\drcbearm64.cpp) [Vas Crabb].
- 0.280              : Not nuking the destination register on 64-bit rotate is important (fixes broken collision detection in Poosho Poosho with drcbex86), also slight optimisations (cpu\drcbex86.cpp). Don't sign extend word register loads into upper 32 bits of host register (cpu\drcbearm64.cpp) [Vas Crabb].
- 0.277              : Added techspecs\uml_instructions.rst. Avoid unnecessary expensive operations when a shift operation request the zero and/or sign flags but not the carry flag. Avoid some more unnecessary register copies for ROLAND. Don't construct std::function objects during code generation - they require allocation. Avoid more conditional branches on conditional MOV. Optimise SUB x,0,y to a NEG instruction (gets down to one instruction from two or three a lot of the time). This had been a TODO comment for ages. Removed code for special-casing some situations the simplifier can now take care of consistently. Fixed a bug causing some shifts to be treated as a no-op when the destination and source are not the same. Added a special case for comparing something to itself. Removed code for another special case of ROLAND that the simplifier deals with. Removed more speical cases for things the simplifier deals with. Fixed some cases where a ROLC/RORC with zero shift count could incorrectly clear the carry flag. Greatly reduced copy/paste in the code generation for multiply instructions. Interpret index operand for floating point load/store as a signed 32-bit value for consistency with integer load/store. Guard against any possibility of load and store instructions altering the flags. Reduced copy/paste in floating point load/store instructions. Cleaned up some casts between integer types with differing size and signedness. Don't special-case SEXT with an immediate source - the simplifier takes care of this. Fixed another bug uncovered after fixing a bug in the DRC tester. Optimised shift operations slightly. Optimised shift operations slightly. Simplified code generation for CARRY. I have no idea why it was preserving RAX at all - it always uses RAX as a scratch register. Always keep UML floating point registers in memory for SysV ABI. This was changed in MAME 0.181 ("Fixed XMM usage on x64 ABI, restores debugger functionality on Mac/Linux for DRC drivers.") 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 (cpu\drcbex64.cpp). Simplified logic for choosing optimal AND strategy and apply the change to OR and XOR instructions as well and fix some cases where a 32-bit logical operation would fail to clear the upper bits of a register. Don't update flags that aren't requested in a few places. Removed code for special-casing some situations the simplifier can now take care of consistently. Added a special case for comparing something to itself. Removed more speical cases for things the simplifier deals with. Don't clear carry for ROLC/RORC with zero shift count. 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. Use and/orr to set carry flag directly rahter than using an intermediate register when both operands of a CARRY instruction are immediates. Fixed incorrect operand type assertion for FREAD. Use less verbose asmjit helper functions for shift operations and addressing modes. Fixed ROLAND, ROLINS and CARRY clobbering the shift input when it's a a register. Added minimal operand swizzling to allow AND, OR and XOR to work without the simplifier. Removed some special cases for situations the simplifier deals with for ROLAND and ROLINS. 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. Fixed more cases where ROLAND clobbered source registers. 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 (cpu\drcbearm64.cpp). Got rid of unnecessary std::function use. This substantially reduces the code size and reduces allocations during code generation. Don't clear carry flag on a word-sized zero-bit rotate through carry (64-bit case is more involved). Made 64-bit ROLC/RORC with zero bit count preserve the carry flag. Fixed flags for 64-bit multiply instructions. Templated 64-bit multiplication helpers on the zero/sign flag source, cleaned up casting pointers to integers. Be explicit about preserving flags in load/store instructions. Fixed DROLINS clobbering source in I0 and miscalculating flags when destination is I0 (cpu\drcbex86.cpp). Got rid of the intermediate tables in favour of bit switch statements. This improves startup time, reduces code size, and gives the compiler more optimisation opportunities. Got rid of asmjit namespace qualifiers left over from when the class declarations were in headers and hence outside the scope of the using namespace statements (cpu\drcbearm64.cpp, cpu\drcbex64.cpp and cpu\drcbex86.cpp). Rewrote the UML simplification code. 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. Fixed assertion failures when simplification reduces operand count. Also added a few more simplifications. Fixed some cases where simplifying multiplication instructons incorrectly changed output flags. Started moving UML instruction reference to main documentation. Truncate immediates to size for a few more instructions. Added SPACE_OPCODES since it's a well-known address space now. Removed SCALE_DEFAULT. It's unimplemented by back-ends and unused by front-ends (cpu\uml.cpp). Less confusing names for parameters to read and write instruction generators (cpu\uml.h and cpu\drcumlsh.h). Removed assertion that's no longer valid (cpu\uml.h). 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\uml.cpp and cpu\drcuml.cpp). Removed woefully inadequate and badly rotted "backend validation" code (cpu\drcuml.cpp). Don't clear carry flag on a zero-bit rotate through carry. Fixed FSMOV/FDMOV turning things that look like signalling NaNs into quiet NaNs on i686. Interpret index operand for load/store instructions as a signed value for consistency with other back-ends. Honour alignment rules when packing immediate values. Added stub implementations for TEST with no flag outputs to allow running with simplifier disabled. Implemented DREADM/DWRITEM with byte size access. Store pointer to address space directly in instruction stream. Added some actual detail to error messages on encountering unexpected instructions (cpu\drcbec.cpp). Added reference for UML flow control, data movement and emulated memory access instructions. Added a couple more UML data movement instructions (techspecs\uml_instructions.rst) [Vas Crabb]. Fixed bitwise/logical warning (cpu\drcbex64.cpp) [Patrick Mackinlay].
- 0.276              : Added some glue for supporting memory access optimisations. Emit optimised code for native-width reads and writes no larger than native width. Added disassembled UML comments to logged native assembly language. Correctly identify valid immediate constants for add/sub/cmp (it was too conservative). Don't unnecessarily copy UML register values kept in host registers for CMP. Fixed detection of TST against immediate zero and optimised generated code. Optimised TST against immediate with all bits set. Fixed issues with and optimise ADD[C]/SUB[B] code generation. Fixed potential crash on generating code for UML ADDC or SUBB with immediate operands (GitHub #13475). Optimised generated code for various degenerate cases and cases where register loads can be avoided. General cleanup. Minor fixes and optimisations: Clear V/Z/S bits in flags register after SETFLGS or RESTORE. These flags are kept in the native NZCV register and SAVE assumes the corresponding bits in the flags register are clear. Don't use an extra temporary register for SETFMOD with operand loaded from memory. It doesn't allow additional parallelism anyway. Slightly optimised generated code for GETFLGS. Avoid a redundant TST when flags are requested for the non-optimised ROLAND case. Also avoid unnecessarily updating flags when not requested. Don't update flags for ADD/ADDC/SUB/SUBB/AND if not requested. Slightly reduces pressure on the NZCV register. Added TODO notes for opportunities to use CSEL/FCSEL rather than conditional branches. Optimised conditional operations using carry flag. Track the state of the native carry flag to avoid unnecessarily manipulating the native NZCV register. If the native carry flag does nnot correspond to the UML carry flag, test the bit in the flags register nfor the C and NC conditions. Use condition select instructions to implement conditional forms of MOV and FMOV when advantageous. Fixed EXIT with C/NC/A/BE condition not working properly if it doesn't immediately follow a CMP or SUB. Extended reach of conditional EXIT to +/-128MiB (was +/-1MiB for conditions other than U/NU). Moved code to set up skipping conditional instructions to a common function. mUse TBZ/TBNZ for short backward jumps with U/NU/C/NC conditions to save one instruction and a temporary register. Simplified/optimised ADD[C]/SUB[B] code generation - avoids an unnecessary register copy when one operand is in memory and the other is a small immediate value. Also fixed another unnecessary register copy for SUB[B] when an operand is kept in a host register. Slightly optimised generated code for AND immediate. Reduced number of temporary registers used for AND with some operand combinations. Don't emit code for UML NOP - the simplifier litters the code with these for elided operations. Fixed some cases where a conditional MOV could unexpectedly clear the upper bits of the destination. Attempt more optimisation on one more load immediate operation (cpu\drcbearm64.cpp). Align HANDLE entry point to 16-byte boundary. Fixed a number of cases where 4-byte operations wouldn't clear the upper half of the destination (there are plenty more of these caused by the simplifier that will be harder to fix). Improved code generation for various arithmetic and logical operations. More AND/OR/XOR/ADD/ADDC operand combinations are optimised. Special cases of ROLAND/ROLINS are optimised. Don't treat operands to FADD/FMUL as commutative. This isn't true when one is a NaN. Avoid a lot of unnecessary flag manipulation on shift/rotate operations. Don't calculate flags when not requested. Don't preserve carry in for operations that don't use it as an input. Avoid loading CL when ECX can be used. Loading CL doesn't clear the upper bits, so it depends on the previous value of RCX, causing pipeline dependencies. Loading ECX can grab a fresh rename register. Fixed upper bits of UML registers being cleared when used as address offset for LOAD/STORE. Don't do expensive zero/sign flag update for shift operations if only carry flag will be used. Reduced copy/paste in READ[M]/WRITE[M] generators (cpu\drcbex64.cpp). Print an error message and abort when running off the end of a generated code block (cpu\drcbe*.cpp). Be explicit about turning nullptr into a pointer to data (util\mfpresolve.h). Handle some more cases where ROLAND can be turned into AND in the simplifier (cpu\uml.cpp) [Vas Crabb].
- 0.275              : Optimised load/store and call generation. Removed fallback to static address space accessors. Removed static trampoline fallbacks for get map variable value and debugger instrcution hook functions. Added scaffolding for directly dispatching memory accesses. Optimised immediate value generation. Detect immediates that can be generated with a single movz/movn/orr. Prefer adr over add to base register (no register dependency). Don't bother trying to load base register value from memory. Got rid of loop in check for contiguous mask values. Slightly optimised generation of ROLAND/ROLINS shift counts. Further optimisation: Recognise immediate values that can be generated using a movn with shift 16 or an orr immediate into a W register. Recognise repeating patterns that can be represented as a bitmask immediate value. Slightly optimised generated code for UML AND when at least one argument is immediate zero. Added optimised UML AND code when the instruction size is 8 but the second argument is a valid 32-bit bitmask immediate. Shuffled RECOVER instructions a bit to be nicer to the CPU's scheduler (cpu\drcbearm64.cpp). Don't use static address space accessors. This gives a big performance improvement. Removed static trampolines for get map variable value and debugger instrcution hook functions (cpu\drcbex86.cpp). Made failure to resolve address space accessors fatal. Removed static address space accessors. Don't allocate from the DRC cache unnecessarily. Allocate label helpers and map variable changes from the process heap. They're only used during code generation and have no business being in the DRC cache. Keep map variable changes contiguous, don't deallocate label helpers and map variable changes on completing a block. Got rid of simple_list, more const, tidied a little (cpu\drcbeut.cpp). Don't use goofy X64_WINDOWS_ABI macro, just check _WIN32. The only other environment that uses the Windows calling convention is (U)EFI, and we can move feature detection to util\abi.h if we ever need to care about it. Removed fallback to static address space accessors. Fixed regression in FWRITE. Removed static trampoline fallbacks for get map variable value and debugger instrcution hook functions. Correct stack diagram in comment. Directly dispatch memory accesses no larger than native width to specific handlers. Fixed handling of address map global mask. Fixed Final Furlong failing to boot. Slightly optimised some degenerate cases for memory accesses. This gives a very small improvement for systems with 32 address lines and no global address mask (e.g. pmac6100, sf2049 or coolmini). Shuffled RECOVER instructions a bit to be nicer to the CPU's scheduler (cpu\drcbex64.cpp). Moved some member function pointer manipulation stuff into the library. Gives another slight reduction in the size of libemu (util\mfpresolve.cpp). Moved DRC backend declarations out of headers and into anonymous namespaces [Vas Crabb].
- 0.274              : Added cpu\drcbearm64.cpp/h. Fixed various recompiler issues and added functionality: Added BREAK, SETFLGS, MULSLW and MULULW opcodes. Limit range of immediate shift count arguments for consistency. Fixed simplification of multiplication and division operations (cpu\uml.cpp). Added more methods of accessing OP_CARRY. Fixed flag calculation for BSWAP and MULS opcodes. Made calculation for shift and rotation opcodes consistent. Return mapvar register ID instead of value for mapvars (cpu\drcbec.cpp). Fixed bugs in various opcodes to make them behave like the C backend (cpu\drcbex86.cpp and cpu\drcbex64.cpp). Fixed SAVE, RESTORE and SETFMOD (cpu\drcbex64.cpp). Fixed more recompiler backend issues: Clear top half of iregs on loads to I0-I3, fixed LOADS sign extension and fixed FLOAD/FSTORE data size (cpu\drcbex86.cpp). Use appropriate register size for LOAD (cpu\drcbex64.cpp). Fixed parameter sizes for READM/WRITEM and clear upper half of registers after 32-bit operations (cpu\drcbec.cpp). Fixed definition for FSREAD/FSWRITE, FDREAD/FDWRITE and READM/WRITEM simplification (cpu\uml.cpp) [Windy Fairy]. Make uml::instruction::is_param_out a member function and really fix build error (cpu\uml.h) [AJR]. Added helper for getting CPU cache line size (cpu\drcbex86.cpp and drcbex64.cpp). Moved member function resolution code to a common location (util\mfpresolve.cpp). Use common member function resolution code (util\delegate.cpp, cpu\drcbex64.cpp and cpu\drcbearm64.cpp). Moved some stuff to anonymous namespaces (cpu\drcbex86.cpp, cpu\drcbex64.cpp and cpu\drcbearm64.cpp). Defer allocating labels if they aren't always needed (cpu\drcbex86.cpp and cpu\drcbex64.cpp). Be nicer to the return address predictor (cpu\drcbex64.cpp). Give hints to use short displacements for jumps to local unbound labels (cpu\drcbex86.cpp). Use references for some things that must not be null pointers (util\mfpresolve.h). Use saved return address from stack for op_recover. Handle landing pads save the LR/FP pair, so the return address for the first level of callh, exh or "no code" handler can be recovered from below the base frame pointer (cpu\drcbearm64.cpp). Added write byte with explicit mask. This wasn't added to the DRC implementations when it was added to the address space classes (cpu\drcbe*.cpp). Slight DRC code generation optimisation: Consider a RIP-relative LEA for generating 64-bit values (7-byte instruction versus a 10-byte MOV instruction). Seems to work pretty well for heap pointers (cpu\drcbex64.cpp). Changed the near cache base pointer offset from 0x80 to 0x100. The value 0x80 was copied from the x86-64 back-end where it was choses to allow an 8-bit signed displacement to reach as much of the top of the near cache as possible. However, AArch64 use 9-bit signed displacements, so a quarter of the range was being wasted. cpu\drcbearm64.cpp: Consider an adrp/add sequence for generating immediate values as well as memory references (cpu\drcbex64.cpp). Fixed off-by-one errors in map variable handling (cpu\drcbearm64.cpp and cpu\drcbec.cpp). Tidy up some stuff (cpu\drcbearm64.cpp) [Vas Crabb]. Added a 64-bit ARMv8 (AArch64) DRC back-end (cpu\drcbearm64.cpp). Removed unused vector type (cpu\uml.cpp). Updated AsmJit to latest upstream (3rdparty\asmjit). Fixed crash with LOG_HASHJMPS enabled (stack needs to be 16-byte aligned before calling debug_log_hashjmp_fail) (cpu\drcbex64.cpp). Calculate NZ flags for shifts/rotates by 0 bits (cpu\drcbec.cpp, cpu\drcbearm64.cpp, cpu\drcbex64.cpp and cpu\drcbex86.cpp). Fixed flag calculation for 64-bit multiplication when result is zero (cpu\drcbex86.cpp). Fixed ADRP usage. ADRP output must always be an X register [Windy Fairy]. DRC cleanup and minor optimisation: Build all native back-ends if any native back-end is enabled so errors caused by changing interfaces can be found faster. Moved resolved member function stuff to a place where it can be shared by back-ends (cpu\drcbeut.cpp). Use ubfx instruction to extract unordered flag (cpu\drcbearm64.cpp). Bypass trampolines when calling get map variable value and debugger instruction hook functions (cpu\drcbearm64.cpp, cpu\drcbex64.cpp). Moved some internal helpers that don't need to be members to anonymous namespace (cpu\drcbearm64.cpp). Added a comment with some info to help when debugging generated code (cpu\drcbearm64.cpp). Put code in the drc namespace (cpu\drcbec.cpp) [Windy Fairy, Vas Crabb]. Fixed various drivers hang at black screen with 32bit build (MT08233) [???].
- 0.272              : Use 32x32=64-bit multiply inlines (cpu\drcbec.cpp) [AJR].
- 0.265              : Avoid deprecated functions (drcbex86.cpp\drcbex64.cpp) [Patrick Mackinlay].
- 0.244              : Sync AsmJit with upstream [Patrick Mackinlay].
- 0.243              : Fixed assert in debug build with some CPUs (PowerPC, SH) (cpu\drcbex64.cpp) [AJR].
- 0.241              : Sync AsmJit library with upstream (3rdparty\asmjit). MAME integration (cpu\drcbex64.cpp and drcbex86.cpp) [Patrick Mackinlay].
- 0.240              : Fixed 64-bit OP_TEST UML instruction for C backend (cpu\drcbec.cpp) [balr0g].
- 0.236              : Proof-of-concept for optimisation of calling out. Resolve address space virtual member function addresses on constrcution and call them directly. Provides a small but measurable improvement to performance in drivers that use the recompiler and access the memory system a lot (cpu\drcbex64.cpp) [Vas Crabb].
- 0.228              : Allow recompilers to work with W^X policy. Slightly reduce the number of page protection state changes (cpu\drcbex64.cpp\drcbex86.cpp). Added compile-time option to disable recompiler W^X mode. Detect whether RWX pages are supported (cpu\drccache.cpp) [Vas Crabb].
- 0.227              : Don't leak using namespace from the header (cpu\drcbex86.cpp and cpu\drcbex64.cpp) [Vas Crabb].
- 0.223              : Removed cpu\x86emit.h. Implemented asmjit emitter (cpu\drcbex86.cpp and drcbex64.cpp). Consolidate many helpers. Correct previously reported bugs (cpu\drcbex64.cpp). Fixed logging problem (cpu\drcbex86.cpp and drcbex64.cpp) [Patrick Mackinlay].
- 0.222              : New AsmJit library (https://asmjit.com) [Patrick Mackinlay].
- 0.205              : Fixed failure to construct/destruct non-trivial objects that caused crashes when using DRC back-ends (cpu\drcbeut.cpp) [Vas Crabb].
- 0.196              : Make UML shorthand a bit easier to use without using namespace everywhere. Modernised cpu\drcuml.cpp [Vas Crabb].
- 0.194              : Fixed an 'optimization' which was actually a random bug inducer (cpu\drcbex86.cpp) [Ryan Holtz, smf].
- 0.191              : Changed SSE control to not use Denormals-Are-Zero. Allows MIPs DRC to function correctly and fixes mismatch between MIPs DRC and non-DRC modes (cpu\drcbex64.cpp). Fixes various effects in Gauntlet Legends and Gauntlet Dark Legacy cause more damage than they probably should (64-bit only) [Ted Green]. Fixed compile due to unused variable (cpu\uml.cpp) [hap].
- 0.189              : Created explicit i386dasm include for x86 DRC [AJR].
- 0.185              : Added case for parameter PTYPE_CODE_LABEL in UML instruction disassembly (cpu\uml.cpp) [Happy].
- 0.184              : Fixed MAME crashed running scud with -bench 90 (cpu\drccache.cpp). Fixed regression on OS X [Phil Bennett].
- 0.183              : Fixed long-standing copy/paste error (cpu\drcbec.cpp) [R. Belmont].
- 0.181              : Fixed XMM usage on x64 ABI, restores debugger functionality on Mac/Linux for DRC drivers (cpu\drcbex64.cpp) [maximumspatium, R. Belmont, Ville Linde].
- 0.175              : Fixed x64 compile (cpu\drcuml.cpp) [Vas Crabb]. Modified branch in delay slot to match non-drc behaviour for non-dynamic branch targets (cpu\drcfe.cpp) [Ted Green].
- 0.174              : Some micro-optimizations and special case for 'and' and 'add' (cpu\drcbex64.cpp). Added TZCNT instruction (Trailing Zero Count) (cpu\drcbec.cpp). Added emitters for movdqa/movdqu to cpu\x86emit.h [Ville Linde].
- 0.173              : SSE prefix comes before REX on MOVQ and fixed REX order with all SSE prefixes (cpu\x86emit.h). Added FCOPYI and ICOPYF instructions to pass raw data between integer and floating-point registers. Map F0-F3 to SSE registers and optimized FMOV (cpu\drcbex64.cpp) [Ville Linde].
- 0.169              : Modernized x86log.h and x86log.cpp: Use variadic template functions instead of 'va_list' in 'x86log_mark_as_data' and 'x86log_printf'. Added 'noexcept' where appropriate/safe. Use 'constexpr std::size_t' instead of macros for constants. Nest 'nullptr' check to prevent useless check, added assertion in 'x86log_printf'. Moved definitions of 'log_comment', 'data_range_t', 'x86log_context' to 'x86_log.h' from 'x86_log.cpp'. Adapt usages of 'x86log_printf' in 'drcbex64.cpp' and 'drcbex86.cpp' [Vittorio Romeo]. Fixed exiting drivers with DRC cores [Miodrag Milanovic].
- 0.156              : Flush drcuml.asm log (cpu\drcuml.c). Added command-line option -[no]drc_log_uml to control DRC UML disassembly logging. Allows logging of DRC UML disassembly without re-compiling / removes. DRCUML_OPTION_LOG_UML and all the core-specific LOG_UML defines (cpu\drcuml.cc) Added command-line option -[no]drc_log_native to control DRC native diassembly logging. Allows logging of DRC native disassembly without re-compiling, removes DRCUML_OPTION_LOG_NATIVE and all the core-specific LOG_NATIVE defines, added logging() to drcbe_interface and added logging_native() to drcuml_state. Added device shortname to DRC UML log for systems with multiple DRCs e.g. N64 [Oliver Stoeneberg].
- 0.150              : Added command line option to force DRC C backend (emu\emuopts.c) [Miodrag Milanovic].
- 0.149u1            : Fixed drcbex{64|86}.c compilation [Oliver Stoeneberg].
- 0.149              : Phil Bennett fixed an assertion in the DRC C back-end (cpu\drcbec.c).
- 0.147u1            : Removed some expressions which are always true (cpu\drcbex64.h and drcbex86.h) [Oliver Stoeneberg].
- 0.147              : Give C backend x86/x64 shift=0 behavior for consistency (cpu\drcbec.c) [R. Belmont].
- 0.146u5            : Computed flags correctly for ADDC/SUBB (cpu\drcbec.c). Calculate NZ flags properly for 32x32=32 form of MULS (cpu\drcbec.c) [R. Belmont].
- 0.142u3            : O. Galibert fixed op_debug implementation (drcbex64).
- 0.141u2            : Fix compile on systems that use the C backend (cpu\drcuml.h) [R. Belmont].
- 0.141u1            : Added cpu\drcbec.h, drcbex64.h, drcbex86.h and uml.c/h. Redo most of the DRC/backend support as C++. Yes, it is intentional that the x86/x64 backends compile everywhere. Backends are now derived from drcbe_interface and implement several required overrides. x86emit.h now uses namespaces so that the x86/x64 emitters can co-exist. New file uml.h/uml.c actually describes the UML language, separating out several concepts from drcuml.c [Aaron Giles].
- 0.135u4            : Minor DRC improvments [Aaron Giles]: Simplified RSP's misaligned memory accesses. Removed now-unnecessary shifts from direct memory accesses in mips3/powerpc drcs. Optimized AND with 0xff/0xffff/0xffffffff cases for x86/x64. Added rudimentary memory/register tracking in x86 backend to remove redundant loads. Aaron Giles added new profiler bucket for DRC recompilation.
- 0.135u1            : Aaron Giles fixed broken DRC logging.
- 0.129u2            : DRC frontends must now do their own opcode fetching unfortunately. Updated all DRC cores to do this. Also tweaked a few oddities in the SH2 DRC [Aaron Giles].
- 0.126u5            : R. Belmont fixed Cool Riders crash with DRC, now hangs waiting for impossible conditions again.
- 0.126u1            : Aaron Giles fixed edge case in the DRC front-end that would incorrectly tag the end of a sequence as "return to start" even if the last instruction did not abet the starting instruction.
- 0.125u7            : DRC fixes [Aaron Giles]: Fixed WRITEM opcode on 64-bit to call through memory instead of directly. Solves assertions with GCC 4.3 and 64-bit Linux. Fixed DCMP opcode on the 32-bit back-end. Fixed LZCNT opcode in x86 and x64 back-ends. Added support for flags in LZCNT and BSWAP opcodes on x86 and x64 back-ends. Aaron Giles changed DRC frontend to pass a pointer to the previous instruction when describing. Updated PowerPC frontend to approximately take into account branch and CR logic folding in timing computations.
- 0.125u6            : UML [Aaron Giles]: Reactivated back-end validation mechanism. Added back-end validation for ADD/SUB/MUL/DIV/CMP forms. Fixed several errors in dealing with more obscure flag combinations.
- 0.125u5            : Removed cpu\drcumld.c/h. DRC UML changes [Aaron Giles]: Separated conditions and flags into two separate fields. Added more extensive per-opcode information. Made validation more thorough using the extended information. Disabled back-end validation for now until it can be revisited using the new tables. Changed GETFLGS encoding so that the mask is in parameter 2 instead of the flags field. Wrote new disassembler based on enhanced opcode info structure. Moved disassembler into drcuml.c and removed old code. Extended disassembler buffer sizes to at least 256 bytes. Removed explicit flag requests from the shorthand opcodes. Added optimization function to drcuml which is called at block end. Added logic to compute the necessary flags based on upcoming opcodes and only select those flags which are required. Added NOP opcode. Added logic to simplify opcodes as much as possible at the UML layer. Removed similar logic in the x86 and x64 back-ends. Added stricter parameter validation for registers and mapvars. Improved disassembly output. Added simple symbol table to the UML for improved disassembly. Changed optional disassembler cache parameter to a drcuml object. Fixed STORE opcode description to allow immediate source operands. DRC frontend changes [Aaron Giles]: Changed from tracking "live" registers to tracking "necessary" registers. Genericized register tracking to be more flexible. Added previous instruction pointer to opcode descriptions.
- 0.125u3            : DRC frontend changes [Aaron Giles]: Fixed bug in handling edge case with the PC near the 0 or ~0. Added new flag to tag privileged instructions. UML updates [Aaron Giles]: Added new opcode SETC to set the carry flag from a source bit. Added new opcode BSWAP to swap bytes within a value. Updated C, x86, x64 back-ends to support the new opcodes. Updated disassembler to support the new opcodes.
- 0.125u2            : Universal DRC system updates and improvements [Aaron Giles]: UML: * Added back-end validation mechanism, and a handful of tests as examples. This will be expanded in the future. * Added several new opcodes: SAVE dumps the entire virtual machine state to a struct, RESTORE applies the data in a struct to the live state, LZCNT counts leading zeros in an operand, XTRACT extracts a bitfield to another register (rlwinm) and INSERT inserts a bitfield into a register (rlwimi). * Added new back-end function get_info() which returns information from the back-end about how many actual registers will be mapped. x86 back-end: * Implemented all new opcodes. * Implemented get_info() function. * Fixed several bugs relating to shifts/rotates and optimizing out cases incorrectly. x64 back-end: * Implemented all new opcodes. * Implemented get_info() function. * Added defines for new Penryn opcodes to x86emit.h. * Added support for ROUNDSS and ROUNDSD on Penryn architectures. This hasn't been tested. If you have a Penryn-based system, give it a try. * Fixed several bugs relating to shifts/rotates and optimizing out cases incorrectly. C back-end: * Implemented all new opcodes. * Implemented get_info() function. * Cleaned up operand sizing. * Fixed several errors that made it not work on bigendian systems. MIPS DRC: * Added some instrumentation for the MMU. To enable it, turn on PRINTF_MMU at the top of the file. * Fixed front-end so that virtual no-op instructions are still targeted as branch targets. * Fixed front-end to mark the beginning of each sequence as needing TLB validation, since any sequence can be jumped to from anywhere. * Redid the MIPS3 TLB implementation. Fixed the exception vector and type handling. Changed the bitfields to directly map from the MIPS TLB format. Added distinction between TLB fill and TLB valid/modified exceptions. * Added separate modes for user, supervisor and kernel modes. Each mode does proper verification of addresses now and generates address errors for invalid accesses. * Fixed several bugs in the TLB implementation; not everything works yet but it's a lot closer. * Made COP0 access checking mandatory in non-kernel modes. * Fixed several crashes when recompiling virtual no-ops. * Fixed TLB bug where entries for virtual address 0 were present by default. * Fixed bug in the map variable implementation that would sometimes result in incorrectly recovered values.* Implemented IDT instructions. All invalid instruction asserts are now runtime-only. * Added support to map a few common registers to machine registers if the machine supports it. Currently only x64 on Windows has enough free registers to do so, though PowerPC will almost certainly be able to take advantage of this. Gives a minor speedup. * Updated to use INSERT and XTRACT where appropriate. * Cleaned up register usage to free up one machine register for x64 on Linux.
- 0.125u1            : Added cpu\drcbec.c, drcbeut.c/h, drcbex64.c, drcbex86.c, drccache.c/h, drcuml.c/h, drcumld.c/h and drcumlsh.h. New universal dynamic recompiler system [Aaron Giles]: The central module is drcuml.c, which defines a universal machine language syntax that can be generated by a frontend recompiler and then retargeted via a generic backend interface to any of a number of different architectures. A disassembler for the UML is also included to allow examination of the generated UML code. Currently supported backend architectures include 32-bit x86, 64-bit x86, and a platform-neutral interpreted C backend that can be used as a fallback for platforms without native support. The C backend also performs additional validation to ensure assumptions are met. Along with the new architecture is a new MIPS III/IV recompiler frontend. This frontend has been rewritten from the old x64-specific recompiler to generate UML opcodes instead. This means that the single recompiler can be used to target multiple backend architectures and should in theory produce identical results across all of them. The old 32-bit and 64-bit MIPS recompilers are now officially retired. The new system provides similar performance (within 5% generally) to the old system and has similar compatibility. The only currently known issues are some problems with the two Gauntlet 3D games.
- 0.118u5            : Aaron Giles added more opcode emitters to x86emit.h.
- 0.118u4            : Added cpu\x86emit.h. Aaron Giles updated the x86 drc helper code to support externally-allocated cache. Also added support for allocating data structures out of the cache. Modified initialization so that it does not immediately generate code but rather waits for a reset to do that. Fixed code generation bug when generating [reg*scale] modrm forms. Aaron Giles added new module x86emit.h which supports dynamic code generation for both x86 and x64 systems. This new system is a far more complete solution, though not all opcodes are defined yet. The interface for this is also cleaner than the previous one defined in x86drc.h. Existing DRC cores are still using the old interface, but the new one is preferred for new development.
- 0.105u5            : Improvements to the x86 DRC engine and the Windows blitters: Blitter CPUID features now accessed by drc_x86_get_features() call. Added win_blit_init(), to initialize the blitter. Changes to DRC to support usage for things other than CPU cores. Fixed drc_dasm() so it works once again. Added macros for a number of MMX/SSE instructions. Added a number of MMX/SSE instructions to the i386 disassembler.


19.31  x86/x64
- 0.136              : Fixed x86 HLT instruction handling. Aaron Giles fixed error in codegen for drol/dror opcodes in the x86 back-end [Phill Harvey-Smith].
- 0.125u9            : Fixed incorrect assumption in the x86/x64 implementation of HASHJMP that the base table for a mode will always be allocated when a fixed mode is first used [Aaron Giles].
- 0.125u5            : x86/x64 back-ends: Added flag support to SEXT, ROLAND, ROLINS, LZCNT opcodes. Fixed bug where sometimes the flags would be corrupted; in particular, we always clobbered the flags for the subfze instruction, which broke the nbapbp camera and some other things. Fixed DIVS/DIVU opcode so they properly compute SZ flags when requested; fixes camera wackiness in nbapbp. Added a "hop" around the prolog of the HANDLE opcode to allow fall-through. Redesigned x86 stack management to keep the stack at the same 16-byte alignment. Fixed adc/sbb so that they don't optimize out ever. Fixed detection of special and/or/xor cases. Fixed GETFLGS opcode so that it doesn't return anything other than requested flags. Changed LZCNT/BSWAP to be more flexible in register selection [Aaron Giles].



19.4   PowerPC MMU

- 0.153              : Changed cpu\powerpc\ppc_mem.c to ppc_mem.inc [Oliver Stoeneberg].
- 0.123u5            : Nathan Woods changed how the PowerPC MMU is enabled at compile time, to cut down on the amount of unused functions in MAME.
- 0.103u1            : Nathan Woods added PowerPC MMU code, but enabled only for MESS due to breakage of the Model 3 games.
- 0.97u5             : Nathan Woods added hooks to support a future MMU in the PowerPC core.
- SOURCE: cpu\powerpc\ppc_mem.cpp


19.5   PowerPC FPU

- 0.105u2            : Ville Linde fixed floating point rounding error in the PowerPC FPU.
- 0.89u3             : Ville Linde major bugfixes to the PPC603 emulation, especially the FPU. Lawrence Gold fixed some compiler related issues with >32-bit integers in PPC / Model 3.




20.    SE3208

- 0.284              : Cleaned up code in VRender0-related drivers and devices: Suppress side effects for debugger reads. Use snake_case names, use abbreviated integer types and use lowercase hexadecimal digits. Improved logging. Avoid reserved name for type (cpu\se3208\se3208.cpp and se3208dis.cpp) [cam900].
- 0.254              : Removed hack to ignore misaligned memory accesses (se3208\se3208.cpp) [David Haywood].
- 0.252              : Execution code cleanup. Removed most macros, replacing a few important ones with coretmpl inlines. Eliminated some unnecessary operand masking (cpu\se3208\se3208.cpp) [AJR].
- 0.251              : Added exception hook callback [AJR].
- 0.221              : Use callbacks for interrupt acknowledgment [AJR].
- 0.214              : Clean up disassembler and remove unwanted newline [AJR].
- 0.196              : Changed description to 'ADChips SE3208'.
- 0.193              : Added cpu\se3208\se3208dis.h.
- 0.180              : Changed the SE3208 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.168              : Make sure the SE3208 low bits of the stack pointer are always 0 [Luca Elia]. Disallow unaligned accesses [David Haywood].
- 0.153              : Added 'SE3208' device. Modernized SE3208 cpu core [Wilbert Pol].
- 0.136u1            : Fixed multi-session/static issue in SE3208 CPU core. Fixed with r7990. Fixed by anomymous [Tourniquet].
- 0.128u4            : Pointer work on SE3208 [David Haywood].
- 0.109u5            : Aaron Giles converted the se3208 disassemblers to the new format and added step in/out support where it was obvious.
- 0.103              : Brad Oliver fixed several endian issues with the SE3208 core and the Crystal System driver.
- 0.90               : Added cpu\se3208\se3208.c/h and se3208dis.c. SE3208 CPU core emulation [ElSemi].
- NOTES: ADChips SE3208 - The CRYSTAL SYSTEM using a VRender0 System on a Chip. The chip contains: CPU Core SE3208 (info at www.adc.co.kr) @ 43MHz, 2 DMA chans, 4 Timers, 32 PIO pins, PWM output, 32 channels wavetable synth (8bit linear, 16bit linear and 8bit ulaw sample format) and Custom 2D video rendering device (texture mapping, alphablend, roz)
- DRIVERS: crospuzl.cpp, crystal.cpp, ddz.cpp, menghong.cpp, psattack.cpp, trivrus.cpp and v0bowl.cpp
- SOURCE: cpu\se3208\se3208.cpp




21.    Others

21.1   APEXC

- 0.221              : Simplified some handlers [Osso].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.194              : Replaced single-location tape I/O space with callbacks [AJR].
- 0.193              : Added cpu\apexc\apexcdsm.h.
- 0.180              : Sync pc/curpc/ml/ws. Increased WS state mask to 4 bits, to match what the emulation does. Fixed ML state mask [smf]. Changed the APEXC disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Fixed disassembly window [smf].
- 0.154              : Fixed usage of uninitialized members in apexc_cpu_device [Oliver Stoeneberg].
- 0.149u1            : Modernized APEXC cpu core [Wilbert Pol].
- 0.137u4            : Fabio Priuli added save states to the APEXC CPU.
- 0.136u3            : Robbbert fixed disassembly of APEXC: 1. Added pseudo PC register for the debugger, it will now highlight the next instruction to be executed. 2. Added "normal" addresses to disassembler output, so anyone can see the program flow.
- 0.128u6            : Pointer-ified the APEXC CPU core [Aaron Giles].
- 0.111u2            : cpu\apexc\apexc.c/h and apexcdsm.c. Added APE(X)C CPU emulation [Raphael Nabet].
- 0.37b14            : Removed cpu\apexc\apexc.c and apexcdsm.c.
- 0.37b13            : Added cpu\apexc\apexc.c/h and apexcdsm.c.
- NOTES: APE(X)C (All Purpose Electronic X-ray Computer) was a computer built by Andrew D. Booth and others for the Birkbeck College, in London, which was used to compute cristal structure using X-ray diffraction. It was one of the APEC series of computer, which were simple electronic computers built in the early 1950s for various British Universities. Known members of this series are: * APE(X)C: Birkbeck College, London (before 1953 (1951?)). * APE(N)C: Board of Mathematical Machines, Oslo. * APE(H)C: British Tabulating Machine Company. * APE(R)C: British Rayon Research Association. * UCC: University College, London (circa january 1956). * MAC (Magnetic Automatic Calculator): "built by Wharf Engineering Laboratories" (february 1955), which used some germanium diodes. * The HEC (built by the British Tabulating Machine Company), a commercial machine sold in two models at least (HEC 2M and HEC 4) (before 1955)
- DRIVERS: (MESS) apexc.cpp
- SOURCE: cpu\apexc\apexc.cpp



21.2   GenSync

- 0.36RC1            : Removed Pong, gensync\gensync.c and gensyncd.c/h from MAME. Nicola wrote: Pong was too much of a simulation and too little of an emulation. It didn't really fit into MAME's architecture which is CPU-based and targeted at accurately reproducing the gameplay of the original.
- 0.36b10            : Added cpu\gensync\gensync.c/h and gensyncd.c. Juergen Buchmueller added Pong (this game has no ROMs).
- NOTES: GenSync = Generic Video Synchronization CPU replacement for non-CPU games
- GAMES: Pong (Atari 1972)



21.3   CP1610

- 0.223              : Ensure SDBD operations set correct condition flags. Use a 16 bit temp variable so the high 8 bits from the second read are discarded and can't affect the COV calculation [Andrew Green].
- 0.221              : Fixed pulse_input_line stack overflow error and boolify a few variables. More cleanups: Added IAB callback and use it to vector everything (including reset). Eliminated set_input_line_vector and register hackery from CP1610-based drivers. Eliminated CP1610_RESET. Added INTAK callback for the sake of completeness [AJR].
- 0.193              : Added cpu\cp1610\1610dasm.h.
- 0.180              : Changed the CP1610 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Added virtual for consistency [smf].
- 0.163              : Whitespace cleanup, no functional change [hap].
- 0.156              : Support for the BEXT instruction. The BEXT instruction is needed for the Unisonic Champion driver which I'm building. The Intellivision doesn't need it since its EBCA0, EBCA1, EBCA2 and EBCA3 pins are grounded. The method used was a suggestion from RB (cpu\cp1610\cp1610.h) [David Viens].
- 0.154              : Fixed usage of uninitialized members in cp1610_cpu_device [Oliver Stoeneberg].
- 0.149u1            : Modernized CP1610 cpu core.
- 0.143u1            : Maskable CP1610 interrupts do not latch [H@P]: Maskable interrupts that trigger while interrupts are disabled are not latched. Fixed Activision's Dreadnaught Factor (intv driver in MESS).
- 0.137u4            : Fabio Priuli added save states to the CP1610 CPU.
- 0.135u3            : Robbbert fixed CP1610 disassembler.
- 0.128u6            : Pointer-ified the CP1610 CPU core [Aaron Giles].
- 0.111u2            : Added cpu\cp1610\cp1610.c/h and 1610dasm.c.
- 0.79u2             : Nathan Woods fixed the CP1610 core and the declaration of activecpu_set_irq_callback() (src\cpuintrf.c).
- 0.79u1             : Renamed CPU_CP1600 to CPU_CP1610 [Nathan Woods].
- 0.37b14            : Removed cpu\cp1600\cp1600.c and 1600dasm.c.
- 0.37b7             : Added cpu\cp1600\cp1600.c/h and 1600dasm.c.
- NOTES: General Instrument CP1600 emulator by Frank Palazzolo.
- DRIVERS: (MESS) intv.cpp and unichamp.cpp
- SOURCE: cpu\cp1610\cp1610.cpp



21.31  SSP1601

- 0.231              : Adding technical details on the SVP chip internal ROM and fixing start address (bus\megadrive\svp.cpp) [Javier de Siloniz Sandino].
- 0.230              : Dumped internal ROM for SSP1601 (megadrive\svp.cpp) [Javier de Siloniz Sandino, krom / Peter Lemon].
- 0.193              : Added cpu\ssp1601\ssp1601d.h.
- 0.180              : Changed the SSP1601 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.153              : Modernized SSP1601 cpu core [Wilbert Pol].
- 0.152              : Fixed SSP1601 entries [Vito].
- 0.147u3            : Removed #define for SSP1601 cpu name [smf].
- 0.128u4            : Converted SSP1601 to pointers (still works, tested virtua racing genesis) [Curt Coder].
- 0.123u5            : Changed cpu\ssp1610\ssp1610.c/h and ssp1610d.c to ssp1601.c/h and ssp1601d.c. Grazvydas Ignotas (notaz) added support for Sega Virtua Processor, to run Genesis/MegaDrive version of Virtua Racing, intended to be used by MESS. It consists of a CPU core SSP1601, and updates in megadriv.c. SSP1601 replaces SSP1610, as it has been confirmed that SVP actually contains SSP1601. The current SSP1610 is only a placeholder (nearly completely unimplemented) anyway. Changed megadriv.c add a new driver for Genesis/MegaDrive+SVP combination, also add SVP memory controller logic and memory map.
- 0.113u2            : Added cpu\ssp1610\ssp1610.c/h and ssp1610d.c. Pierpaolo Prazzoli added very preliminary SSP1610 CPU core.
- NOTES: Samsung SSP1601 DSP. Not everything is implemented, but it is accurate enough to properly emulate Virtua Racing for Genesis/MegaDrive.
- DRIVERS: (MESS) bus\megadrive\svp.cpp
- SOURCE: cpu\ssp1601\ssp1601.cpp


21.4   RCA COSMAC

21.41  CDP1801

- 0.275              : Added pull callbacks for int/dmain/out (cosmac\cosmac.cpp) [hap].
- 0.274              : Fixed load init phase (cosmac\cosmac.cpp) [Robbbert].
- 0.213              : Removed single-use (and savestate unsafe) rand_memory function (util\coreutil.cpp and cpu\cosmac\cosmac.cpp) [hap]. Use conventional decimal numbering for registers. Attach following byte to disassembly of OUT instruction when P = X [AJR].
- 0.210              : Fixed long branch instruction timing [Curt Coder].
- 0.200              : Implemented a few CDP1801 differences [AJR].
- 0.186              : Changed description to 'RCA CDP1801'.
- 0.184              : Added 'CDP1801' device (cpu\cosmac\cosmac.cpp).
- 0.148u5            : Added the original CDP1801 CPU variant and rewrote the disassembler [Curt Coder].
- SOURCE: cpu\cosmac\cosmac.cpp


21.42  CDP1802

- 0.263              : Fixed disassembly of LBNQ, LBNZ and LBNF (cosmac\cosdasm.cpp) [AJR].
- 0.213              : Removed single-use (and savestate unsafe) rand_memory function (util\coreutil.cpp and cpu\cosmac\cosmac.cpp) [hap]. Use conventional decimal numbering for registers. Attach following byte to disassembly of OUT instruction when P = X [AJR].
- 0.210              : Fixed long branch instruction timing [Curt Coder].
- 0.207              : Don't skip over instructions in debugger after DMA cycles. This does nothing to fix MT07232 (Unable to successfully boot a cartridge game (MESS) RCA Studio II), but could make the problem easier to debug [AJR].
- 0.201              : Eliminated DEVCB2 MCFG macros [AJR].
- 0.200              : Fixed disassembly (cosmac\cosdasm.cpp). Added helper functions. Minor cleanup. Interface overhaul: Splitted execution of long branch/long skip instructions into two separate states. Eliminated reset state. Sample pushed EF lines at the right time. Implemented a few CDP1801 differences. Correct disassembly of destinations for skip instructions. SC callback also includes state of N lines for I/O instructions. TPB callback added (not used yet). Callbacks can be configured through DEVCB3 bindings [AJR].
- 0.193              : Added cpu\cosmac\cosdasm.h.
- 0.192              : Added WAIT/CLEAR input lines [Curt Coder].
- 0.186              : Changed description to 'RCA CDP1802'.
- 0.180              : Changed the Cosmac disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.154              : Fixed usage of uninitialized member and heap-buffer-overflow in cosmac_device [Oliver Stoeneberg].
- 0.153              : DEVCB for the state codes in CDP1802. Converted CDP1802 to DEVCB2. Added write line members for the input lines (cpu\cosmac\cosmac.h) [Curt Coder].
- 0.148u5            : Changed description to 'CDP1802'.
- 0.148u2            : Fixed uninitialized variables and members in cosmac\cosmac.c. R registers are supposed to contain random data on start-up [Oliver Stoeneberg].
- 0.147u4            : (MESS) comx35: FDC WIP. Changed EF[i] = 0 to EF[i] = CLEAR_LINE in cpu\cosmac\cosmac.c [Curt Coder].
- 0.147u3            : Added missing IRQ acknowledges in COSMAC [Curt Coder].
- 0.143u1            : Curt Coder fixed COSMAC CPU debugger PC.
- 0.140              : Changed cpu\cdp1802\1802dasm.c and cdp1802.c/h to cosdasm.c and cosmac.c/h. Changed description to 'COSMAC'. Curt Coder converted the RCA CDP1802 CPU into a C++ device. Refactored cidelsa.c to use the new RCA COSMAC CPU.
- 0.133              : CDP1802 [Curt Coder]: Refactored the Q and DMA callbacks to use DEVCB. Fixed state code output and load mode.
- 0.129u1            : CDP1802 CPU core [Curt Coder]: Improved register layout. Randomized register contents on initialization. Converted the CDP1802 CPU core to use a state table.
- 0.128u5            : Curt Coder normalized CDP1802 state variables to 'cpustate'.
- 0.128u4            : Pointerized CDP1802 core. Refactored the CDP1802 core to use the new memory functions [Curt Coder].
- 0.125u1            : Curt Coder added memory address parameter to CDP1802 DMA callbacks and a macro for the CPU interface.
- 0.124u3            : Curt Coder added machine parameter and macros for the CDP1802 callback functions. This seems to have fixed the player sprite flashing in Destroyer/Altair/Draco [Curt Coder].
- 0.116u1            : Curt Coder fixed the reset mode in CDP1802.
- 0.114u3            : Additional CDP1802 updates, taken from MESS [Curt Coder].
- 0.114u2            : Curt Coder fixed CDP1802 DMA emulation.
- 0.112u2            : Removed cpu\cdp1802\1802tbl.c. Rewrote the CDP1802 cpu emulation as a state machine [Curt Coder].
- 0.112u1            : Improvements to the Cidelsa driver [Curt Coder]: Fixed the disassembly of CDP1802 opcode LSKP. Changed the CDP1802 opcode OUT to increment R(X) after calling the write handler.
- 0.109u5            : Aaron Giles converted the CDP1802 disassemblers to the new format and added step in/out support where it was obvious.
- 0.109u2            : Added cdp1802\cdp1802.c/h, 1802dasm.c and 1802tbl.c. Added support for Cosmac RCA CDP1802 [Peter Trauner].
- 0.37b14            : Removed cpu\cdp1802\cdp1802.c, 1802dasm.c and 1802tbl.c.
- 0.37b11            : Renamed cpu\cdp1802\disasm.c to 1802dasm.c and table.c to 1802tbl.c.
- 0.37b7             : Added cpu\cdp1802\cdp1802.c/h, disasm.c and table.c.
- 23rd August    2000: Peter Trauner added a Cosmac CDP1802 CPU core.
- NOTES: RCA CDP1802
- DRIVERS: cidelsa.cpp, nightmare.cpp, play_1.cpp, play_2.cpp and play_3.cpp
- SOURCE: cpu\cosmac\cosmac.cpp



21.43  CDP1804/5/6

- 0.246              : Added 1804 counter timer [hap].
- 0.213              : Added disassembler support for CDP1805 with extended instruction set [AJR]. Added very preliminary 1804/5/6 CPUs [hap].
- DRIVERS: (MESS) mephisto_brikett.cpp and mephisto_mm1.cpp
- SOURCE: cpu\cosmac\cosmac.cpp



21.5   F8

- 0.238              : Added callback for overriding the normal reset address [AJR].
- 0.229              : Use CLR instead of LIS H'00' as disassembly of opcode 0x70 (f8\f8dasm.cpp) [AJR].
- 0.226              : Adjust disassembly format to better match Fairchild listings (f8\f8dasm.cpp) [AJR].
- 0.216              : Use address space for internal scratchpad register memory. Use memory_access_cache for register space access [AJR].
- 0.208              : Small cleanup and fix reset pin [hap].
- 0.205              : Fixed LNK opcode by preserving carry flag before clearing flags [AJR].
- 0.201              : F8 documentation correction and improvement. Fixed formatting glitch with disassembly of invalid instructions [AJR].
- 0.193              : Added cpu\f8\f8dasm.h. Fixed garbage %02X recent regression. Fixed min/max cycles. Changed flag helper macros to inline functions, remove some unneeded commentary. Moved constructor and device/reset to top of file. Changed to shorthand variable types. Make it clearer that m_pc(now m_debug_pc) is not related to device emulation. Fixed overflow flag problem for ci/cm, rename SET_OC to do_add [hap].
- 0.180              : Changed the F8 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.154              : Fixed usage of uninitialized members in f8_cpu_device [Oliver Stoeneberg].
- 0.150              : Modernized F8 cpu core [Wilbert Pol]. Disabled unused private members (cpu\f8\f8.h) [Oliver Stoeneberg].
- 0.146u4            : Sean Riddle fixed AMD/ASD opcodes in the F8 CPU core. Status flags are set before the decimal correction factor is added, so only the carry flag is significant after a decimal addition opcode.
- 0.141u2            : Sandro Ronco fixed interrupt vector in F8 CPU core.
- 0.139u4            : Curt Coder fixed Fairchild F8 CPU interrupt handling.
- 0.137u4            : Fabio Priuli added save states to the F8 CPU.
- 0.137u3            : F8 CPU disassembler improvements [Curt Coder]: Fixed branch target PC. Added BP, BC, BZ, BR, BM, BNC, BNZ and BNO mnemonics. Removed extraneous $ from 2 byte hex values.
- 0.128u6            : Pointer-ified the F8 core [Atari Ace].
- 0.118u3            : Wilbert Pol fixed F8 CPU core to not clobbert the irq_callback on a reset.
- 0.111u2            : Re-added cpu\f8\f8.c/h and f8dasm.c. Added F8 emulator [Juergen Buchmueller].
- 0.37b14            : Removed cpu\f8\f8.c and f8dasm.c.
- 0.37b6             : Added cpu\f8\f8.c/h and f8dasm.c.
- NOTES: Fairchild F8: This work is based on Frank Palazzolo's F8 emulation in a standalone Fairchild Channel F emulator and the 'Fairchild F3850 CPU' data sheets.
- DRIVERS: (MESS) chesstrv.cpp, mk1.cpp and novagf8.cpp
- SOURCE: cpu\f8\f8.cpp



21.6   KABUKI

- 0.148u1            : Added machine\kabuki.h. Splitted kabuki from cps1.h [Robbbert].
- 0.35b4             : Added machine\kabuki.c.
- NOTES: The "Kabuki" is a custom Z80 module which runs encrypted code and manufactured by VLSI. The encryption key is stored in some battery-backed RAM.
- PCB: KABUKI, BUNRAKU and SHARAKU (Capcom/Mitchell games), DL-030P (CPS2)
- SOURCE: machine\kabuki.cpp



21.7   ST0016

- 0.282              : Moved ROM banking from drivers into device. External ROM is now read through an address space. Also reduced literal tags, suppress side effects for debugger reads and cleaned up code [cam900].
- 0.278              : Adjusted some visible areas and added some notes [Osso].
- 0.266              : Improved documentation comments based on PR#7786 [cam900].
- 0.246              : Changed sourcefile to seta\st0016.cpp.
- 0.237              : Use seperated address space for character RAM space. Use device_video_interface for screen finder. Use device_mixer_interface for sound output instead preinstalled speaker device. Fixed spacing. Added notes. Use shorter/correct type values [cam900].
- 0.225              : Update ST0016 sound to new stream callbacks [Aaron Giles].
- 0.221              : Simplified some handlers (machine\st0016.cpp) [Osso].
- 0.195              : Added object finder m_rom instead memregion(":maincpu") [cam900].
- 0.155              : Added machine\st0016.c/h. Added 'ST0016' device. Begin ST-0016 reorganization. Untangle some drivers from st0016_state now that it's a device [David Haywood]. Removed static config from ST0016 [Fabio Priuli].
- 0.127u7            : Aaron Giles optimized ST-0016 RAM tile behavior to lazy decode the graphics, giving a big speed boost to some of the mahjong games.
- 0.105u5            : Improvements to the MACS driver [Tomasz Slanina]: Fixed a couple of gfx bugs in st0016 video emulation, added hacks to allow MACS games to boot and removed REGION_DISPOSE flag from srmp5 and speaglsht (no more crashes).
- 0.92               : Tomasz Slanina improved the MACS driver. Now using ST0016 Video, however emulation is still incomplete so it doesn't do much more yet.
- 19th July      2004: Tomasz Slanina - Added BG tilemap support (4/8 bpp) to ST-0016 emulation.
- NOTES: Seta ST-0016 custom chip is a all in one Z80, gfx and sound chip (http://www.slanina.pl/arc.html)
- PCB: SETA ST-0016 TC6187AF JAPAN 9348YAA, QFP208 (Speglsht)
- DRIVERS: jclub2.cpp, macs.cpp, simple_st0016.cpp, speglsht.cpp and srmp5.cpp
- SOURCE: seta\st0016.cpp



21.8   SCUDSP

- 0.283              : Changed machine\sega_scu.cpp/h to sega\saturn_scu.cpp/h.
- 0.250              : Simplify some bits of code using util::sext (scudsp\scudsp.cpp) [AJR].
- 0.245              : Removed a few unimportant 64-bit functions [AJR].
- 0.222              : READ/WRITE macros removal (machine\sega_scu.cpp) [Osso].
- 0.213              : Added address shift for SCUDSP to unidasm [AJR].
- 0.193              : Added cpu\scudsp\scudspdasm.h.
- 0.192              : Moved internal SCUDSP program/data maps (machine\sega_scu.cpp) into CPU core [Angelo Salese].
- 0.191              : Added machine\sega_scu.cpp/h. Fixed register state for debugger [AJR]. Moved SCU related functions inside a device (machine\sega_scu.cpp) [Angelo Salese].
- 0.186              : Changed description to 'Sega SCUDSP'.
- 0.180              : Changed the SCUDSP disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Added virtual for consistency [smf].
- 0.154              : Converted SCUDSP to DEVCB2 [Osso]. Fixed usage of uninitialized members in scudsp_cpu_device [Oliver Stoeneberg].
- 0.152              : Fixed SCUDSP entries [Vito].
- 0.151              : Moved machine\scudsp.c/h to cpu\scudsp\. Added mame\etc\template_cpu.c/h. Modernized Sega Saturn cpu core. Prevent out of array access (scudspdasm.c) [Wilbert Pol]. Added a bare bones SCUDSP core, to be improved. Fixed cpu\scudsp\scudspdasm.c DASM. Hooked SCUDSP to machine struct. More progresses, (MESS) Magical Hoppers boots. Fixed SH-2->DSP DMA operation, new core doesn't fart anymore (scudsp.c). Hacked SCU DSP DMA execution and fixes some other minor things, makes (MESS) Croc to work again. Fixed ENDI status flag. Removed old SCUDSP, not worth it anyway [Angelo Salese]. Fixed Clang compile (scudsp.h) [R. Belmont].
- 0.148u2            : Actually fixed Sign flag in OR opcode (machine\scudsp.c) [Angelo Salese]. Added SCUDSP cpu type, though it currently only has a disassembler [smf].
- 0.148u1            : SCU logging fix (drivers\saturn.c). Made SCU DMAs to be relative to master SH-2 cycles and indirect DMA, improves timing in most FMVs (drivers\saturn.c and video\stvvdp2.c). Fixed input regression with (MESS) Bug 2 (cpu\scudsp\scudspdasm.c, drivers\saturn.c and video\stvvdp1.c) [Angelo Salese].
- 0.143u6            : Added cpu\scudsp\scudspdasm.c.
- 0.143u3            : Angelo Salese fixed DMA add values and a MVI condition shift flag bug in SCU DSP core. Fixed SCU DSP PC reads from SH-2 side.
- 0.143u2            : Angelo Salese added DSP end IRQ event in Sega Saturn / ST-V SCU DSP core.
- 0.142u5            : Angelo Salese fixed a rather silly bug with SCU DSP execute flag.
- 27th May       2011: Angelo Salese - Fixed a SCU DSP bogus bug with flags, fixed SMPC intback command, moved it inside a command and hooked up the SMPC direct mode inputs. This allows the Sega Saturn console (SEGA 1994/5 Ver 1.01) to boot. The diagnostic cart (SEGA v0.5 1994) is now operational too, and it really shows how bad is our current Saturn emulation (and some very lovely Engrish as well.
- 29th November  2005: Mariusz Wojcieszek - Fixed parallel instructions which increment CT registers to update CT register only once, after dsp operation is finished. This fixes instructions like MOV MC0,X MOV MC0,Y used by vfremix. Changed ALU 32bit instructions to not sign extend their result when loaded to ALU. This matches Sega's dspsim behaviour. Changed DMA addnumber handling to match Sega's dspsim.
- 0.99u3             : Mariusz Wojcieszek fixed add number in DSP DMA.
- 13th August    2005: Mariusz Wojcieszek - Fixed add number in DSP DMA.
- 0.96               : Angelo Salese fixed the T0F behaviour in the DMA operation, it was causing an hang in Treasure Hunt due of that and removed the dsp.log file creation when you are not using the debug build.
- 12th April     2005: Angelo Salese - Fixed the T0F behaviour in the DMA operation,it was causing an hang in Treasure Hunt due of that. Removed the dsp.log file creation when you are not using the debug build.
- 0.88u5             : SCU DSP update [Angelo Salese]: Finished flags in ALU opcodes and SR opcode: MSB does not change.
- 14th November  2004: Angelo Salese - Finished flags in ALU opcodes. SR opcode: MSB does not change.
- 28th March     2004: Mariusz Wojcieszek rewrote ALU and MUL operations using signed arithmetics, improved DMA and fixed MOV ALH,x.
- 0.79               : Unaligned SCU direct mode DMA fix [R. Belmont].
- 0.77u3             : Added machine\scudsp.c/h.
- 11th December  2003: Mariusz Wojcieszek submitted an improvement to the SCU DSP emulation in the ST-V driver, but Virtua Fighter Remix still doesn't work properly.
- 11th December  2003: Mariusz Wojcieszek - Result of ALU command is stored into ALU register. X-Bus command: MOV [s],X can be executed in parallel to other X-Bus commands. Y-Bus command: MOV [s],Y can be executed in parallel to other Y-Bus commands. Jump and LPS/BTM support: jump addresses are absolute, prefetched instructions are executed before jump is taken, after each instruction, X and Y is multiplied and contents are loaded into MUL register. Fixed RL8, fixed MVI, flags computation in MVI and JMP is partly guessed (because of errors in docs), added reading DSP mem from SH2 side and overworked disassembler.
- NOTES: Virtua Fighter Remix (Sega 1995) is the only STV game that needs the SCU DSP.
- DRIVERS: stv.cpp
- SOURCE: cpu\scudsp\scudsp.cpp



21.9   M7700

- 0.85u2             : Added m7700ds.c/h. R. Belmont added a WIP Mitsu M7700 series CPU core, specifically targeting the M37710.
- SOURCE: cpu\m37710\m7700ds.cpp



21.91  M37702S1

- 0.222              : Renamed some registers to agree with Mitsubishi documentation [AJR].
- 0.216              : More accurate mapping of port and interrupt registers. De-duplicate address maps [AJR].
- 0.196              : Changed description to 'Mitsubishi M37702M2'.
- 0.184              : Added 'M37702M2' device (cpu\m37710\m37710.cpp).
- 0.155              : Changed description to 'M37702S1'. Memory system and Namco improvements [Alex Jackson]: Explicit regions in address maps (AM_REGION) are now looked up relative to the device rather than as siblings when in an internal address map (similar to devices and shared pointers)  Besides being more orthogonal than before, this allows internal ROMs of MCUs and similar devices to be hooked up in a nicer and more foolproof way. Updated the m37710 and m5074x (m6502 derivative) to take advantage of this. Divided the M37702/M37710 into specific models, with each model having its own internal address map containing the correct amounts of internal RAM and ROM. M37702 MCUs found on various Namco PCBs are now all unique devices and have their respective internal ROMs loaded as device ROMs. Also did some spring (fall) cleaning in addrmap.c/memory.c/dimemory.c. m_devbase (the base device used for tagmap lookup when late-binding handlers and finding memory regions and shares) is now a reference rather than a pointer, since we know what it is when the address_map_entry is constructed and it doesn't change (it depends solely on whether it's an entry in an MCFG-provided address map or an internal one) And for the same reason, there's now only one m_devbase per address_map_entry rather than individual copies for read/write/setoffset/sharedptr. Removed mysterious unused address_map_entry member "m_region_string", along with a silly assert probably left over from when Aaron was replacing AM_BASE with AM_SHARE years ago. Added a comment noting that "make sure all devices exist" in device_memory_interface::interface_validity_check() actually does nothing, like the proverbial goggles. The reason there's just a comment and not a fix is I haven't figured out how to fix it yet (is it possible to extract the original device tag that was given to a proto-delegate? [Alex Jackson].
- 0.147u3            : Changed M37702 to help Tafoid's source file detection [smf].
- 0.143u5            : M377xx improvements: Respect the restored mode bits for PUL [hap, R. Belmont]. Proper cycle counts for PSH/PUL [R. Belmont]. Fixed flags for multiply/division and divide by 0 interrupt [hap]. Pass program bank to debugger hook so breakpoints work outside of bank 0 [R. Belmont]. Fixed interrupt flags for internal peripherals, correct BBC/BBS when running outside of bank 0 [R. Belmont]. Several other interrupt timing and priority fixes [hap].
- 0.133u5            : R. Belmont fixed M377xx CLB/SEB when not in bank 0.
- 0.128u4            : Pointer-ified the M377xx [R. Belmont].
- 0.127u2            : M377xx [R. Belmont]: 8-bit I/O port reads no longer cause bogus reads of neighboring ports.
- 0.107u3            : 65816/377xx update [R. Belmont]: Made block transfer instructions interruptable as they are on both actual chips (previously a single opcode could eat >400,000 cycles with obvious consequences for interrupt timing). Fixed M377xx block transfers (move one less byte than the 65816).
- 0.104u2            : Updates to the M37710 core [R. Belmont]: Fixed LDM behavior when executing outside of bank 0. Fixed various global bugs when executing outside of bank 0. Fixed so top 8 bits of X & Y are preserved when in 8-bit index mode. Fixed some disassembly errors. Added save state support. Added M37702 alias for documentation purposes.
- 17th January   2006: R. Belmont - Phil Stroffolino was able to trojan and dump the BIOSes from the C71 3D math engine (actually a TMS32c025) and the C74 sound/inputs MCU (actually an M37702). He's already flying high with the C71 - using that code many long-standing graphics problems are now gone and several games that didn't work properly now work 100% (such as Ace Driver: Victory Lap).
- 11th January   2006: Charles MacDonald - I recently purchased two Suzuka 8 Hours PCBs (Namco System 2) and will see what can be done about trojaning the M37702-based C68 custom chip used on it. This would be helpful for System 2 and System 21 games. Also I'd like to take a closer look at the alternate type of video hardware this game has, since there seem to be some minor emulation issues in MAME.
-  4th January   2006: Charles MacDonald - Some information is needed about the M37702 MCUs used in various Namco games. If anyone can help, the following needs to be determined: Which games use the C71, C72, or C73 chips. Which games use the C77 (or higher numbered) chip. What we know so far is: C68  = System 2 (Final Lap 3, Suzuka 8 Hours) + System 21, C69  = NA-1 (World Court Tennis), C70  = NA-2 (Quiztou, Numan Athletics), C71  = System 22 (Master TMS32025 DSP BIOS), C72  = ?, C73  = Found on a test board, but used in any games?, C74  = System 22, C75  = NB-1 (Nebulas Ray) + NB-2 (Out Foxies) + System FL and C76  = System 11 (Xevious 3D/G). In the interim I've been examining the BIOS and working on a better trojan as well as figuring out how hardware on the MCU side works. So far adapting the NA-1 trojan for the C70 chip has not worked, but given the many similarities to C69 I feel a solution is not far off. It looks like all the System 2 games that have C68 do not use the external program ROM socket. Do any System 21 games use it, if such a socket is present? Updated the chip list based on information from Justin (thanks for the PCB pic!), Kayama, Fujix, Oliver, Guru and R. Belmont.
-  3rd January   2006: R. Belmont - Charles MacDonald has trojaned the MCU BIOS for Namco NA-1. Primarily this means correct emulated sound and music as opposed to the current (very good) simulation. I'm working on hooking everything up in MAME properly right now. And yes, this can also be considered proof of concept for trojaning other troublesome Namco MCUs (including System 11, 22, NB-1/NB-2, and FL) although the specific method won't quite apply.
-  2nd January   2006: Charles MacDonald - I've been running tests on the Namco NA-1 hardware over the last few days, and figured out how to dump the internal ROM of the M37702 MCU used in Super World Court. The BIOS has a function where code can be copied from the 68000 side over to MCU RAM and executed, making it quite insecure. I wrote a program that copies a portion of the M37702 memory to shared RAM, and the 68000 can change and run the program in a loop to read any part of the MCU address space. I think the same technique will work for other NA-1 games; at least what I've seen in MAME is that a number of them also upload code fragments for the MCU to use. For other types of Namco hardware that use the M37702, it's highly dependant on what services the MCU makes available. Also, now that the BIOS can be examined and user code can be executed on the MCU side for testing, maybe the NA-1 sound hardware (integrated in the multiple purpose 219 chip) will get figured out. Though the existing simulation of the NA-1 sound hardware is remarkably good.
- NOTES: The Mitsubishi M37702 (printed as C74) is a sound MCU with mask ROM
- DRIVERS: globalfr.cpp
- SOURCE: cpu\m37710\m37710.cpp



21.92  M37710S4

- 0.262              : Removed obsolete UCHAR_MAX check (m37710\m37710cm.h). Clean up include guards (m37710\*) [hap].
- 0.222              : Rename some registers to agree with Mitsubishi documentation [AJR]. NOP unused SFR area. Actually SFR area 2-9 is external on some chips [hap].
- 0.214              : Internalized timing for A-D converter [AJR].
- 0.212              : Kill the unnecessary set_line indirection. Break up m37710_internal_r/w and m_m37710_regs block. Fixed interrupt-related regression. Added internal clock divider. Fixed Alpine Racer regression (port writes are blocked when direction register = 0, not FF). Fixed UART control register 1 writes and raveracw regression. More UART register adjustments [AJR].
- 0.210              : Replaced I/O space with callbacks [AJR].
- 0.204              : Added basic support for up-down count on timers in event counter mode [hap].
- 0.196              : Changed description to 'Mitsubishi M37710S4'.
- 0.180              : Changed the M37710 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.155              : Added 'M37710S4' device. Memory system and Namco improvements [Alex Jackson]: Explicit regions in address maps (AM_REGION) are now looked up relative to the device rather than as siblings when in an internal address map (similar to devices and shared pointers)  Besides being more orthogonal than before, this allows internal ROMs of MCUs and similar devices to be hooked up in a nicer and more foolproof way. Updated the m37710 and m5074x (m6502 derivative) to take advantage of this. Divided the M37702/M37710 into specific models, with each model having its own internal address map containing the correct amounts of internal RAM and ROM. M37702 MCUs found on various Namco PCBs are now all unique devices and have their respective internal ROMs loaded as device ROMs. Also did some spring (fall) cleaning in addrmap.c/memory.c/dimemory.c. m_devbase (the base device used for tagmap lookup when late-binding handlers and finding memory regions and shares) is now a reference rather than a pointer, since we know what it is when the address_map_entry is constructed and it doesn't change (it depends solely on whether it's an entry in an MCFG-provided address map or an internal one) And for the same reason, there's now only one m_devbase per address_map_entry rather than individual copies for read/write/setoffset/sharedptr. Removed mysterious unused address_map_entry member "m_region_string", along with a silly assert probably left over from when Aaron was replacing AM_BASE with AM_SHARE years ago. Added a comment noting that "make sure all devices exist" in device_memory_interface::interface_validity_check() actually does nothing, like the proverbial goggles. The reason there's just a comment and not a fix is I haven't figured out how to fix it yet (is it possible to extract the original device tag that was given to a proto-delegate? Typos in unused macros [Alex Jackson].
- 0.154              : Added cpu\m37710\m37710il.h. Support direct read. Make memory helpers inline; remove more obsolete cruft [Alex Jackson].
- 0.150              : Modernized M37710 cpu core [Wilbert Pol].
- 0.143u5            : M377xx improvements: Respect the restored mode bits for PUL [hap, R. Belmont]. Proper cycle counts for PSH/PUL [R. Belmont]. Fixed flags for multiply/division and divide by 0 interrupt [hap]. Pass program bank to debugger hook so breakpoints work outside of bank 0 [R. Belmont]. Fixed interrupt flags for internal peripherals, correct BBC/BBS when running outside of bank 0 [R. Belmont]. Several other interrupt timing and priority fixes [hap].
- 0.133u5            : R. Belmont fixed M377xx CLB/SEB when not in bank 0.
- 0.129u1            : Atari Ace removed some long dead state save functions in M37710 core.
- 0.128u4            : Pointer-ified the M377xx [R. Belmont].
- 0.127u2            : M377xx [R. Belmont]: 8-bit I/O port reads no longer cause bogus reads of neighboring ports.
- 0.121u4            : Phillip Bennett changed M37710 CPU to use the CPU clock for its internal timer rather than a hard-coded value. Fixes tempo in Namco NA-1 games.
- 0.113u4            : G65816/M37710 CPU core updates [R. Belmont]: Fixed a race condition in the WAI instruction where the CPU could get stuck. (MESS bug #661, may have caused intermittent issues with Namco games in MAME too). Fixed block transfer instructions when the accumulator is in short mode. (Fixes some SNES games not booting, notably Final Fantasy Mystic Quest).
- 0.109u5            : Aaron Giles converted the m37710 disassemblers to the new format and added step in/out support where it was obvious.
- 0.107u3            : 65816/377xx update [R. Belmont]: Made block transfer instructions interruptable as they are on both actual chips (previously a single opcode could eat >400,000 cycles with obvious consequences for interrupt timing). Fixed M377xx block transfers (move one less byte than the 65816).
- 0.104u2            : Updates to the M37710 core [R. Belmont]: Fixed LDM behavior when executing outside of bank 0. Fixed various global bugs when executing outside of bank 0. Fixed so top 8 bits of X & Y are preserved when in 8-bit index mode. Fixed some disassembly errors. Added save state support. Added M37702 alias for documentation purposes.
- 12th February  2006: R. Belmont - I found the remaining M377xx core bug that was preventing System 22 games from using the dumped C74 BIOS. It's actually a difference from the 65C816: for anyone who's done any SNES hacking, you might find this interesting. Or not. Take this assembly program, which is the same on both processors (except the 7700 doesn't need the first two instructions - it has no 6502 emulation mode): CLC, XCE ; make sure we're in native mode - 65816 only, REP #$30 ; all registers to 16 bits, LDA #$0123, LDX #$4567, LDY #$89AB, SEP #$30 ; all registers to 8 bits and REP #$30 ; back to 16 again. Now, what are the 16-bit values of A, X, and Y at that point? On a real 65C816 (tested on an Apple IIgs) A is 0123, X is 0067, and Y is 00AB. On the M377xx (I can't test on one, but there's a routine at C881 in the C74 BIOS that makes this behavior extremely clear) A is 0123, X is 4567, and Y is 89AB. The upshot is that with this and some other fixes, the System 22 games (including Ace Driver!) now play music using their own real correct BIOSes. No more BAD DUMP and PR1DATA.8K tomfoolery.
-  4th February  2006: R. Belmont - The C74 BIOS for Namco's System 22 games is fun. And by 'fun' I mean (insert the Howard Dean scream here). It's found a few more lingering bugs in the M377xx core though, so that's always useful.
- 0.103u2            : M37710 fixes [R.Belmont]: Added another addressing mode for SBCB opcade. Fixed MPY to clear the carry flag.
- 0.101u1            : Some improvements to M37710 [cync].
- 0.100u4            : Updated 65816 and 37710 cores [R. Belmont]: Fixed both CPUs to set the data bank register to the destination on an MVN/MVP. Some minor tweeks so the debugger works properly when the 65816 is executing out of a read handler (as it always is for the SNES).
- 0.99u10            : Aaron Giles fixed interrupt problem in the M37710 core that caused problems with the recent Namco update.
- 0.99u9             : Major Namco sound improvements [R. Belmont]: Speed-cheated all instances of the M37710/C352 sound system so CPU requirements don't go up much. This also helped back off the requirements a hair for Prop Cycle and Time Crisis.
- 0.99u7             : Cync fixed several bugs in the Namco System 22 sound system (fixed interrupt update).
- 0.92               : R. Belmont fixed bug in M37710 cpu core.
- 26th January   2005: R. Belmont - Finishing the first pass of the Namco Super System 22 MCU integration, where the M37710 reads the controls.
- 0.86u4             : R. Belmont added support for M37710 externally-pulsed timers (Prop Cycle uses this to read the pedals).
- 0.86u2             : R. Belmont added M37710 analog and digital I/O port support (anyone know how to control PC case fans from software?  Prop Cycle's "fan" output is bit 1 of 37710 port 5). Added LDB absolute and DIV direct opcodes. Rewrote the RLA instruction. Pretty much everything was wrong with it including the result, flags and cycle count. Fixed disassembly for RLA.
- 0.86u1             : R. Belmont added M37710 opcodes ROR B, LDB direct indexed, MPY stack relative and DIV direct.
- 25th August    2004: R. Belmont - Got the M37710 talking to the 68020 in the Super System 22 games, so e.g. Prop Cycle now has music and sound effects. Now working out how the MCU reads the controls to eliminate more HLE hacks...
- 0.86               : M37710 improvements [R. Belmont]: Data bus is actually 16 bit, not 8. Fixed saving of status register on interrupts. Fixed errors in PHB, PHT, PLT, and ANDB opcodes. Added XAB, PLB, and ROLB opcodes. Fixed IRQ dispatch errors. Various get_info fixes.
- 21st August    2004: R. Belmont - Fixed a ton more bugs in the M37710 and submitted it.
- 19th August    2004: R. Belmont - Even more work on the M37710. Fixed a bunch of bugs and added 2 more opcodes so Prop Cycle is now happy, but Time Crisis is angry now instead.
- 18th August    2004: R. Belmont - Continued work on the M37710. Fixed data bus width to 16-bit (oops), added timer support, and fixed some obscure IRQ handling bugs. Result? It crashes when Prop Cycle tries to play a sound (grumble), but I do have some leads to chase when I'm less tired.
- 0.85u2             : Added m37710\m37710.c/h, m37710cm.h, m37710o0-3.c and m37710op.h. R. Belmont updated the Namco Super System 22 driver to use preliminary M37710 core, but it doesn't do anything useful yet.
- NOTES: Mitsubishi M37710 is based on the WDC 65C816 core, with the following notable changes: Second accumulator called "B" (on the 65816, "A" and "B" were the two 8-bit halves of the 16-bit "C" accumulator). 6502 emulation mode and XCE instruction are not present. No NMI line. BRK and the watchdog interrupt are non-maskable, but there is no provision for the traditional 6502/65816 NMI line. 3-bit interrupt priority levels like the 68000. Interrupts in general are very different from the 65816. New single-instruction immediate-to-memory move instructions (LDM) replaces STZ. CLM and SEM (clear and set "M" status bit) replace CLD/SED. Decimal mode is still available via REP/SEP instructions. INC and DEC (0x1A and 0x3A) switch places for no particular reason. The microcode bug that caused MVN/NVP to take 2 extra cycles per byte on the 65816 seems to have been fixed. The WDM (0x42) and BIT immediate (0x89) instructions are now prefixes. 0x42 when used before an instruction involving the A accumulator makes it use the B accumulator instead. 0x89 adds multiply and divide opcodes, which the real 65816 doesn't have. The various 7700 series models differ primarily by their on board peripherals. The 7750 and later models do include some additional instructions, vs. the 770x/1x/2x, notably signed multiply/divide and sign extension opcodes. Peripherals common across the 7700 series include: programmable timers, digital I/O ports, and analog to digital converters.
- PCB: M37710S4BFP, QFP80 (Airco22b, Alpinerc, Propcycl)
- DRIVERS: namcos22.cpp
- SOURCE: cpu\m37710\m37710.cpp



21.93  M37720S1

- 0.188              : Preliminary M37720 support [R. Belmont].
- DRIVERS: (MESS) fontwriter.cpp
- SOURCE: cpu\m37710\m37710.cpp


21.94  M16C

- 0.276              : Fixed disassembly syntax for adjnz/sbjnz (m16c\m16cdasm.cpp) [AJR].
- 0.258              : Added cpu\m16c\m16cdasm.cpp/h. Added disassembler for Mitsubishi/Renesas M16C architecture. Disassemble 8-bit offsets as unsigned except for FP and SP (and PC) (m16c\m16cdasm.cpp) [AJR].
- NOTES: Mitsubishi/Renesas M16C
- DRIVERS: itgambl3.cpp
- SOURCE: cpu\m16c\m16cdasm.cpp



21.A   MN1020012A

- 0.243              : Init cleanups [O. Galibert].
- 0.221              : Simplified some handlers [Osso].
- 0.193              : Added cpu\mn10200\mn102dis.h.
- 0.190              : Fixed savestate issue [hap].
- 0.180              : Changed the MN10200 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.163              : Made branch condition and add/sub carry param optional. Changed MN10200 fake I/O memmap to callbacks [hap].
- 0.153              : Changed description to 'MN1020012A'. Some MN10200 opcode fixes. Documented flags and fixed flags in add/sub. Add/sub carry was still wrong. Renamed read/write functions. Readability cleanup in opcode table. Simplify branch code. Mem16/24bit accesses are word-aligned (not counting opcode args of course). More whitespace readability stuff. Cleanup and improved irqs. Added missing opcodes and 'illegal opcode'. Improved 8bit timers. Small update while trying to find a suspected opcode bug. Fixed addc subc zeroflag. Sort source layout. Fixed emulated cpu crash being able to crash MAME with wrt irq recursion. Small disasm fix. Improved I/O port skeleton stuff, TaitoFX1b (zn.c) sounds ok now [hap].
- 0.150              : Modernized MN10200 cpu core [Wilbert Pol].
- 0.137u1            : MN10200 updates [R. Belmont]: Better IRQ generation and hookup to MAME IRQ system. Preliminary 8-bit timer hookup including prescalers and IRQs. Fixed issue with debugger not showing registers correctly.
- 0.136u3            : Added cpu\mn10200\mn10200.c/h and mn102dis.c. Preliminary Panasonic MN10200 CPU core [Olivier Galibert].
- 31st January   2010: R. Belmont - I picked up Olivier Galibert's in-progress Panasonic MN10200 CPU core and am adapting it for MAME (he was debugging it in a standalone M1-like program). This is used to drive the music in Taito games such as Raystorm and Ray Crisis. WARNING: This does not mean there will be music in those games any time soon. The CPU core is not fully operational (interrupts are ad-hoc at best, the timers are not emulated, and there are probably buggy opcodes) and the ZOOM wavetable playback chip is not emulated. So all this is going to do near-term is make those games slower. This *is* MAME.
- PCB: Panasonic MN1020012A sound CPU, QFP128 (Taito GNET-System, Ftimpacta, Gdarius, Raystorm)
- DRIVERS: taitogn.cpp, taitopjc.cpp, zn.cpp and audio\taito_zm.cpp
- SOURCE: cpu\mn10200\mn10200.cpp


21.A1  MN10300

- 0.277              : Added cpu\mn10300\mn103dasm.cpp/h. Added Panasonic MN10300 disassembler. Fixed disassembly of some move instruction modes. Re-add missing LSR and ASR modes. Fixed disassembly of ADD Dm, Dn (mn10300\mn103dasm.cpp) [AJR].
- DRIVERS: ???
- SOURCE: cpu\mn10300\mn103dasm.cpp



21.B   CY7C9101
- PCB: CY7C9101 16-Bit Arithmetic Logic Unit (ALU) (Primrage, TMek), CYC9101 (Guardian)



21.C   SC61860

- 0.276              : Fixing cpu for missing opcode (sc61860\sc*.*) [ffxx68].
- 0.193              : Added cpu\sc61860\scdasm.h.
- 0.186              : Removed timer_pulse [Osso].
- 0.180              : Changed the SC61860 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\sc61860\scops.inc and sctable.inc to scops.hxx and sctable.hxx.
- 0.154              : Fixed usage of uninitialized members in sc61860_device [Oliver Stoeneberg].
- 0.153              : Changed cpu\sc61860\scops.c to scops.inc and sctable.c to sctable.inc [Oliver Stoeneberg]. Removed cpu\sc61860\sc.h. Modernized SC61860 cpu core [Wilbert Pol].
- 0.142u1            : Fix for SC61860 CPU crash and cleanup, replace for internal ram accesses with function calls to help further debug the core in the future [Atari Ace].
- 0.128u6            : Pointer-ified the SC61860 CPU core [Aaron Giles].
- 0.117u2            : Nathan Woods fixed up SC61860 core to work with new timing code.
- 0.111u5            : Nathan Woods fixed a size bug in the SC61860 disassembler.
- 0.111u2            : Re-added cpu\sc61860\sc61860.c/h, scdasm.c, scops.c, sctable.c, sc.h and readpc.c. Added Sharp 61860 emulator [Peter Trauner].
- 0.37b14            : Removed cpu\sc61860\sc61860.c, scdasm.c, scops.c, sctable.c, sc.h and readpc.c.
- 0.37b11            : Renamed cpu\sc61860\disasm.c to scdasm.c, ops.c to scops.c and table.c to sctable.c.
- 0.37b4             : Added cpu\sc61860\sc61860.c/h, disasm.c, ops.c, readpc.c, sc.h and table.c.
- NOTES: The Sharp SC61860 is a CPU Sharp in pocket computers
- DRIVERS: (MESS) pocketc.cpp
- SOURCE: cpu\sc61860\sc61860.cpp



21.D   LH5801

- 0.272              : Don't add PC value twice when disassembling relative addressing modes [Golden Child].
- 0.220              : Added VEJ f8-fe [hap].
- 0.218              : Internalized clock divider [AJR].
- 0.193              : Added cpu\lh5801\5801dasm.h.
- 0.180              : Changed the LH5801 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\lh5801\5801tbl.inc to 5801tbl.hxx.
- 0.153              : Changed cpu\lh5801\5801tbl.c to 5801tbl.inc [Oliver Stoeneberg].
- 0.150              : Modernized LH5801 cpu core [Wilbert Pol].
- 0.141u3            : Updated LH5801 CPU core [Sandro Ronco]: Added IO_SPACE and updated all access in ME1 memory for use it. Implemented interrupts. Fixed the flags in the ROL/ROR/SHL/SHR opcodes. Fixed decimal add/sub opcodes.
- 0.128u6            : Pointer-ified the LH5801 CPU core [Aaron Giles].
- 0.111u2            : Re-added cpu\lh5801\lh5801.c/h, 5801dasm.c and 5801tbl.c. Added Sharp LH5801 CPU [Peter Trauner].
- 0.37b14            : Removed cpu\lh5801\lh5801.c, 5801dasm.c and 5801tbl.c.
- 0.37b13            : Added cpu\lh5801\lh5801.c/h, 5801dasm.c and 5801tbl.c.
- NOTES: Based on info found on an artikel for the Tandy TRS80 PC2.
- DRIVERS: (MESS) pc1500.cpp
- SOURCE: cpu\lh5801\lh5801.cpp



21.E   SM8500

- 0.203              : Improved logging of unknown opcodes [Robbbert].
- 0.193              : Added cpu\sm8500\sm8500d.h.
- 0.180              : Changed the sm8500 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.156              : Fixed (MESS) Tiger Game.com calculator. Fixed timer in solitaire. Centipede is somewhat playable (cpu\sm8500\sm85ops.h) [Robbbert].
- 0.148u2            : Fixed uninitialized members in cpu\sm8500\sm8500.c [Oliver Stoeneberg].
- 0.148u1            : Converted SM8500 to C++ [Wilbert Pol]. Compile fix for MESS (sm8500.h) [Tafoid].
- 0.139u2            : Various SM8500 CPU core fixes [Robbbert].
- 0.137u3            : Oliver Stoeneberg fixed SM8500 disassembly of extended instructions (1A, 1B, 4F).
- 0.122u7            : Atari Ace added a missing case statement in sm8500d.c, noticed while reviewing dead code warnings.
- 0.111u2            : Added cpu\sm8500\sm8500.c/h, sm8500d.c and sm85ops.h. Added Sharp SM8500 CPU [Wilbert Pol].
- DRIVERS: (MESS) gamecom.cpp
- SOURCE: cpu\sm8500\sm8500.cpp



21.F   HP Saturn

- 0.216              : Changed cpu\saturn\satops.hxx to satops.ipp and cpu\saturn\sattable.hxx to sattable.ipp. Clean up a little [Vas Crabb].
- 0.193              : Added cpu\saturn\saturnds.h.
- 0.188              : Stricter bounds checking (cpu\saturn\satops.hxx) [Peter Ferrie].
- 0.180              : Changed the Saturn disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\saturn\satops.inc and sattable.inc to satops.hxx and sattable.hxx.
- 0.153              : Changed cpu\saturn\satops.c to satops.inc and sattable.c to sattable.inc [Oliver Stoeneberg]. Fixed Saturn CPU. This fixed debug shows corrupt graphics in (MESS) HP49G when compared to regular compile [Osso].
- 0.151              : Fixed an uninitialized variable (cpu\saturn\saturn.c) [Wilbert Pol].
- 0.128u6            : Pointer-ified the Saturn CPU core [Aaron Giles].
- 0.125u2            : Removed cpu\saturn\sat.h. Antoine Mine correct several bugs in the emulation of the Saturn CPU. These corrections are needed to make new HP48 drivers (to be submitted to MESS imminently) work.
- 0.118u2            : Wilbert Pol fixed HP Saturn CPU core disassembler.
- 0.111u2            : Re-added cpu\saturn\saturn.c/h, satops.c, sattable.c, saturnds.c and sat.h. Added Saturn CPU [Peter Trauner] for HP calculators.
- 0.37b14            : Removed cpu\saturn\saturn.c/h, saturnds.c, satops.c and sattable.c.
- 0.37b13            : Added cpu\saturn\saturn.c, saturnds.c, satops.c and sattable.c.
- DRIVERS: (MESS) hp48.cpp
- SOURCE: cpu\saturn\saturn.cpp



21.G   PDP1

- 0.278              : Added savestates (pdp1\pdp1.cpp) [hap].
- 0.256              : Minor adjustments to OPR disassembly (tx0\tx0dasm.cpp) [AJR].
- 0.245              : Update OPR disassembly for older versions. Added notes (tx0\tx0dasm.cpp) [AJR].
- 0.236              : Added notes on OPRs for reference (tx0\tx0dasm.cpp). Resolved confusion between SHR and CYR semantics (these were incorrectly swapped) (cpu\tx0\tx0.cpp) [AJR]. Turn RIM logging back off (cpu\tx0\tx0.cpp) [AJR].
- 0.235              : Various tx0_64kw fixes: Make IOS actually wait for I/O when used more than once. Removed break statement that disabled half the OPRs. Don't normalize minus zero sums (also applies to tx0_8kw). tx0_8kw IOS fix. Fixes and improvements for tx0_64kw and tx0_8kw: Complete rewrite of disassemblers, using standard names for OPRs. Clear MBR in cycle 1 when AMB is not specified. Perform AMB before COM (tx0_64kw). Fixed characters printed on Flexowriter (bit order was incorrectly reversed). Modernized logging in CPU device. Only call the debugger hook once per instruction cycle [AJR].
- 0.227              : Separated TX-0 from PDP-1 and from some SoC types in build [AJR].
- 0.225              : Clean up callbacks and start encapsulating peripherals. Apply word shift to address spaces for pdp1. Fixed CPU address calculation (cpu\pdp1\tx0.cpp) [AJR].
- 0.193              : Added cpu\pdp1\pdp1dasm.h and tx0dasm.h.
- 0.185              : Make opcodes an internal enum [AJR].
- 0.184              : Print octal addresses in the trace if CPU is octal (debug\debugcpu.cpp) [Sergey Svishchev].
- 0.180              : Changed the PDP1 and TX0 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.154              : Fixed usage of uninitialized members in tx0_device [Oliver Stoeneberg].
- 0.153              : Removed some unused defines (pdp1\pdp1.h and tx0.h). Modernized TX0 cpu core. Also copied over the support for octal in debugger state from the alto2 branch. Modernized PDP1 cpu core [Wilbert Pol].
- 0.149u1            : (MESS) PDP1: Fixed loading of paper tape, (MESS) Spacewar works again (cpu\pdp1\pdp1.c and mess\drivers\pdp1.c). TX0: Fixed paper tape reader (cpu\pdp1\tx0.c and mess\drivers\tx0.c). Since this system is very much like the PDP1, it is assumed the same mods are needed. However there is no software available in the required format to test with [Robbbert].
- 0.136u3            : Robbbert fixed disassembly of PDP1 and TX0. PDP1 display the PC in hex as well as octal.
- 0.128u6            : Pointer-ified the PDP1/TX0 CPU cores [Wilbert Pol].
- 0.111u2            : Re-added cpu\pdp1\pdp1.c/h, pdp1dasm.c, tx0.c/h and tx0dasm.c. Added PDP1 CPU [Barry Silverman, Vadim Gerasimov]. The Programmed Data Processor (PDP-1) is a high speed, solid state digital computer designed to operate with many types of input-output devices with no internal machine changes. It is a single address, single instruction, stored program computer with powerful program features. Five-megacycle circuits, a magnetic core memory and fully parallel processing make possible a computation rate of 100,000 additions per second. The PDP-1 is unusually versatile. It is easy to install, operate and maintain. Conventional 110-volt power is used, neither air conditioning nor floor reinforcement is necessary, and preventive maintenance is provided for by built-in marginal checking circuits. PDP-1 circuits are based on the designs of DEC's highly successful and reliable System Modules. Flip-flops and most switches use saturating transistors. Primary active elements are Micro-Alloy-Diffused transistors. The entire computer occupies only 17 square feet of floor space. It consists of four equipment frames, one of which is used as the operating station. The Central Processor contains the control, arithmetic and memory addressing elements, and the memory buffer register. The word length is 18 binary digits. Instructions are performed in multiples of the memory cycle time of five microseconds. Add, subtract, deposit and load, for example, are two-cycle instructions requiring 10 microseconds. Multiplication requires and average of 20 microseconds. Program features include: single address instructions, multiple step indirect addressing and logical arithmetic commands. Console features include: flip-flop indicators grouped for convenient octal reading, six program flags for automatic setting and computer sensing, and six sense switches for manual setting and computer sensing. The coincident-current, magnetic core memory of a standard PDP-1 holds 4096 words of 18 bits each. Memory capacity may be readily expanded, in increments of 4096 words, to a maximum of 65,536 words. The read-rewrite time of the memory is five microseconds, the basic computer rate. Driving currents are automatically adjusted to compensate for temperature variations between 50 and 110 degrees Fahrenheit. The core memory storage may be supplemented by up to 24 magnetic tape transports. PDP-1 is designed to operate a variety of buffered input-output devices. Standard equipment consistes of a perforated tape reader with a read speed of 400 lines per second, and alphanuermic typewriter for on-line operation in both input and output, and a perforated tape punch (alphanumeric or binary) with a speed of 63 lines per second. A variety of optional equipment is available.
- 0.37b14            : Removed cpu\pdp1\pdp1.c and pdp1dasm.c.
- 0.36b4             : Added cpu\pdp1\pdp1.c/h and pdp1dasm.c.
- DRIVERS: (MESS) pdp1.cpp and tx0.cpp
- SOURCE: cpu\pdp1\pdp1.c and tx0\tx0.cpp


21.G1  PDP8

- 0.245              : Have disassembler comment on instructions using memory reference instructions using current page mode in page zero (pdp8\pdp8dasm.cpp) [AJR].
- 0.237              : IAC also complements LINK on carry out. Improved sequencing for OPR group 1 (pdp8\hd6120.cpp) [AJR].
- 0.236              : Fixed effect of TAD on LINK flag (pdp8\hd6120.cpp) [AJR].
- 0.235              : Minor fix for weird OPRs [AJR].
- 0.232              : Make this skeleton CPU file buildable. Rewrite disassembler and added alternate disassembly for HD-6120 (pdp8\pdp8dasm.cpp) [AJR].
- 0.225              : Apply word shift to address spaces for pdp8 [AJR].
- 0.193              : Added cpu\pdp8\pdp8dasm.h.
- 0.187              : Fixed PDP8 device type [AJR].
- 0.179              : Fixed disassembly window [smf].
- 0.165              : Added skeleton and disassembler for DEC PDP-8 CPU [MooglyGuy].
- DRIVERS: ???
- SOURCE: cpu\pdp8\pdp8.cpp



21.H   Sharp LR35902

- 0.256              : Skip byte following STOP (0) opcode [Vas Crabb].
- 0.194              : Fixed disassembly [AJR].
- 0.193              : Added cpu\lr35902\lr35902d.h.
- 0.180              : Changed the LR35902 disassembler to use 'std::ostream &' internally. Fixing spacing [Nathan Woods].
- 0.174              : Changed cpu\lr35902\opc_cb.inc and opc_main.inc to opc_cb.hxx and opc_main.hxx.
- 0.154              : Changed cpu\lr35902\opc_cb.h and opc_main.h to cpu\lr35902\opc_cb.inc and opc_main.inc. Renamed LR35902_FLAG_x to FLAG_x. Log illegal ops. Removed MCFG_LR35902_RESET_VALUES. Added macro and callback for 16bit inc/dec [hap].
- 0.149u1            : Fixed LR35902 CPU [Miodrag Milanovic]. Renamed FLAG_C/H/N/Z to LR35902_FLAG_C/H/N/Z to avoid clash against G65816 flags with same name [Fabio Priuli].
- 0.148u2            : Fixed uninitialized members in cpu\lr35902\lr35902.c [Oliver Stoeneberg].
- 0.148u1            : Changed LR35902 configuration and tagmap lookup reduction for (MESS) Gameboy (drivers\gb.c) [Wilbert Pol].
- 0.146u5            : Removed 2 unneeded assignments (cpu\lr35902\lr35902.c) [Wilbert Pol].
- 0.145u4            : Converted LR35902 CPU core to C++ [Wilbert Pol].
- 0.145u2            : Started splitting up the LR35902 instructions into sub-cycles. Refactored a bit and got rid of the union magic [Wilbert Pol].
- 0.138u4            : Sandro Ronco added speed register to the LR35902 register list to allow it to be changed and retrieved again.
- 0.137u3            : Oliver Stoeneberg fixed possible LR35902 issue when checking for enabled irqs.
- 0.134u1            : LR35902 CPU core changes [Wilbert Pol]: Improved handling of the DI+HALT bug. Do not clear the interrupt flag when the cpu is halted and no interrupt is taken.
- 0.128u6            : Pointer-ified the LR35902 CPU core [Aaron Giles].
- 0.125u6            : Changed cpu\z80gb\z80gb.c/h, z80gbd.c, opc_cb.h and opc_main.h to cpu\lr35902\lr35902.c/h, lr35902d.c, opc_cb.h and opc_main.h. Wilbert Pol renamed "Nintendo z80gb" CPU core to "Sharp LR35902".
- 0.119u4            : Removed cpu\z80gb\daa_tab.h. Bug fixes for the Z80GB cpu core [Wilbert Pol]: Fixed cycle count for taking an interrupt. Fixed cycle count for BIT X,(HL) instructions. Fixed flags in RRCA instruction. Fixed DAA instruction. Fixed flags in ADD SP,n8 instruction. Fixed flags in LD HL,SP+n8 instruction.
- 0.116u4            : Wilbert Pol simplified interrupt handling in the Z80GB core.
- 0.111u6            : Nathan Woods and Wilbert Pol incorporated changes to MESS CPU cores to fix asserts and improve Z80GB emulation.
- 0.111u2            : Re-added cpu\z80gb\z80gb.c/h, z80gbd.c, opc_main.h, opc_cb.h and daa_tab.h. Added Z80 GameBoy CPU(cpu\z80gb\z80gb.c) [Wilbert Pol]. The GameBoy version differs from the Z80 in many ways.
- 0.37b14            : Removed cpu\z80gb\z80gb.c, z80gbd.c and daa_tab.h.
- 0.36b14            : Added cpu\z80gb\z80gb.c/h, z80gbd.c, opc_main.h, opc_cb.h and daa_tab.h.
- DRIVERS: (MESS) bus\snes\sgb.cpp and gb.cpp
- SOURCE: cpu\lr35902\lr35902.cpp


21.I   SSEM

- 0.193              : Added cpu\ssem\ssemdasm.h.
- 0.180              : Changed the SSEM disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.148u2            : Fixed stack overflow in SSEM disasm_disassemble [smf].
- 0.148              : Modernized the SSEM core. Fixed SSEM compile issue [MooglyGuy].
- 0.137u1            : Oliver Stoeneberg fixed compilation of SSEM core with SSEM_DISASM_ON_UNIMPL.
- 0.132              : MooglyGuy fixed a minor typo in the SSEM debugging features.
- 0.131u4            : Added cpu\ssem\ssem.c/h and ssemdasm.c. MooglyGuy added CPU core for the Manchester Small-Scale Experimental Machine (SSEM) from 1948.
-  1st June      2009: MooglyGuy - If anyone wants to try it out, I just committed my CPU core and driver for the Manchester Small-Scale Experimental Machine (SSEM), or "Baby", to the MESS SVN depot. It currently runs all known SSEM programs bundled with David Sharp's SSEM simulator, available here (http://www.davidsharp.com/baby/). I am not entirely happy with the fact that it is compatible with all of the programs, though. Certain programs in particular, i.e. "nightmare.snp", would not run on the SSEM had it ever been extended to the full 8192 words of storage space of which it was theoretically capable (per some SSEM history sites), as they pad out the unused 8 address bits with pretty patterns.
- 15th April     2009: MooglyGuy - I was rather intrigued by David Link's project (http://www.alpha60.de/research/muc/) to resurrect the Manchester Mark I, and commenced digging up more info about the Manchester Mark I and its predecessor, the Manchester Small Scale Experimental Machine, or "Baby". As it turns out, there's already a Java-based emulator out there. Inspiration struck, and I decided to see how easy it would be to emulate the SSEM in MESS. It was, historically, the first electronic stored-program computer (if I read my sources right), so it seems like a prime candidate for support in MESS. Without further ado, here is the Manchester Small Scale Experimental Machine displaying the results of Tom Kilburn's "Highest Common Factor for 989" program, including the correct answer (43). Chances are good I'll be able to get clearance to add this to MESS. Fingers crossed!
- DRIVERS: (MESS) ssem.cpp
- SOURCE: cpu\ssem\ssem.cpp



21.J   Atmel 8-bit AVR

- 0.277              : Fixed program address masks for word addressing. Fixed PC shift in state string export (avr8\avr8.cpp) [cam900].
- 0.265              : Correct copy paste error on some gpio_out_cb [hap].
- 0.264              : Some registers were missing from addressmap. Fixed regression with C flag on SBIW opcode, V flag on DEC/SBIW opcodes, SBIW V flag once more and port D bit 7 toggle on timer2 [hap].
- 0.261              : Optimized timers (roughly 1.5x speedup) [Ryan Holtz].
- 0.251              : Added minimal ADC support (in particular, ADC interrupts are not implemented). Mask ADC samples to ten bits on acquisition [Vas Crabb].
- 0.242              : Added some instruction-type debugging flags to disassemblers [AJR].
- 0.229              : Fixed issues detected by Coverity Static Analysis (software) [Robbbert].
- 0.227              : Converted from using an IO address space to devcb for GPIO I/O [Ryan Holtz]. Fixed crash with pensebem/timer1 crash [Felipe Sanches].
- 0.223              : Fixed assorted Timer 0 and Timer 1 bugs (avr8\avr8.cpp). Fixed erroneous disassembly of CBI, SBI, SBIS and SBIC opcodes (avr8\avr8dasm.cpp). Added support for Timer 1 'Fast PWM with ICR' mode [Ryan Holtz].
- 0.222              : Added a preliminary support for Arduino UNO booting by avr8. Added ATMega328 support. Fixed m_pc to be initialized correctly when in the boot loader section. Fixed bootloader size based on BOOTSZ specification [hiromasa].
- 0.221              : Simplified some handlers [Osso].
- 0.220              : Added cpu\avr8\avr8ops.hxx. Fixed formatting. Switched to logmacro. Fixed spacing. Added more state saving. Hooked up OCR1A/B for Fast PWM mode 15. Removed hacky get_elapsed_cycles accessor. Slightly improved tick_timer1 performance. Miscellaneous optimizations [Ryan Holtz].
- 0.193              : Added cpu\avr8\avr8dasm.h.
- 0.180              : Changed the AVR8 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.164              : Fixed the implementation of the AVR8 EIJMP instruction [Felipe Sanches].
- 0.162              : Fixed AVR8 I/O register constant enumeration [Vas Crabb]. Avoid log message flood in Replicator 1 driver [Felipe Sanches].
- 0.155              : Optimized interrupt code in cpu\avr8\avr8.c a bit [Oliver Stoeneberg]. Removed static config from avr8 [Fabio Priuli].
- 0.153              : AVR8 improvements [Felipe Sanches]: Added ELPM instructions. Added fuse bits macros. Added reset logic to decide initial program counter based on fuse bits configuration. Added initial support for ATMEGA1280 and ATMEGA2560. Use register names in the disassembly of IN and OUT instructions. AVR8 CPU changes [Felipe Sanches]: Timers WIP. Added TIMSK* reads - Refactor timer_tick calls. Removed all redundant register init statements. We simply set all 0x200 registers to zero. Debugging timers. Better syntax for disassembly of RJMP destination address. Use register names in disasm of CBI, SBI, SBIC, SBIS instructions. Use register bit names in disasm of instructions SBI, SBIS, SBIC and CBI. WIP on avr8 EEPROM read/write support [Felipe Sanches]. Turn off spam while running Craft [Robbbert].
- 0.148              : AVR8 core updates [Sandro Ronco]: Added CPSE, LD Z+, ST -Z/-Y/-X and ICALL opcodes. Added ATMEGA644 interrupt vectors. Fixed Z flag in CPC, SBC and SBCI opcodes. Fixed V and C flags in SBIW opcode. Fixed pop/push order in CALL, RCALL, RET and RETI opcodes. Fixed Timer 1 CTC mode.
- 0.147u3            : Added FMUL, FMULS and FMULSU opcodes. Fixed incorrect N flag calculation in ROR opcode. Fixed incorrect bit testing in SBIC/SBIS opcodes. Converted AVR8 CPU to modern CPU device. Renamed I/O map to data map, routed ports through io map. Implemented ST Z+ and SBIW opcodes [MooglyGuy].
- 0.147u2            : MooglyGuy added opcodes to Atmel AVR core: OR, SBCI, ORI, ST Y+ and ADIW. Fixed functional issues in Atmel AVR opcodes: COM, NEG, LSR. Added basic Timer 1 support to Craft driver and hooked up the DAC, currently plays only a buzzing noise due to lacking EEPROM support. Implemented AVR8 MULS, ANDI, STD Z+, LD -Z, LD Y+, LD -Y, LD -X, SWAP, ASR, ROR, and SBIS opcodes. Moved AVR8 Timer 0-2 into the CPU core itself, 30x driver speedup. Added LD Rd,Z+q opcode. Correct cycle counts for LD and ST opcodes. Fixed a bug where a 2-cycle or 3-cycle opcode encountered during a time slice were causing all subsequent 1-cycle opcodes to deduct 2 or 3 cycles for the remainder of the time slice instead [MooglyGuy]. Fixed register indexing for MULSU opcode. Fixed register writeback for LD -Z and LD -Y opcodes [MooglyGuy].
- 0.137u4            : Fabio Priuli added save states to the AVR8 CPU.
- 0.137              : Harmony slightly fixed interrupt handling and added SBIC and MUL opcodes to the Atmel AVR8 core.
- 0.133u5            : Harmony fixed numerous opcodes in the AVR8 core.
- 0.132u2            : Added cpu\avr8\avr8.c/h and avr8dasm.c. MooglyGuy added extremely rudimentary Atmel 8-bit AVR CPU core, missing most opcodes and any attempt at proper cycle counts.
- DRIVERS: venteta.cpp
- SOURCE: cpu\avr8\avr8.cpp



21.K   SuperFX

- 0.215              : Differentiated between SuperFX 1 and SuperFX 2. Fixes game speed in Star Fox, Stunt Race FX, Vortex and others [Ryan Holtz].
- 0.193              : Added cpu\superfx\sfx_dasm.h.
- 0.180              : Changed the SuperFX disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.154              : Fixed usage of uninitialized members in superfx_device [Oliver Stoeneberg].
- 0.153              : Modernized SuperFX cpu core [Wilbert Pol].
- 0.148u2            : Moved machine\snesrtc.c and snessdd1.c to src\mess. Temp fixed regression in SuperFX. The code is not optimal but it's going to be rewritten soon anyway [Fabio Priuli]. Picked up a couple of copy & paste bugs with the pbr register in the SuperFX CPU [smf].
- 0.137u2            : Fabio Priuli added save states to the SuperFX CPU.
- 0.134u1            : Harmony fixed S-DD1 support in SNES driver; Street Fighter Alpha 2 is playable, Star Ocean shows decompressed graphics before hanging.
- 0.133u5            : Added machine\snesrtc.c and snessdd1.c. SNES updates [R. Belmont, Harmony]: Correct ROM loading behavior for SuperFX games. Added more ROM mirroring needed by certain SuperFX 2 games. Correct the behavior of certain bit-restricted SuperFX registers. Doom, Yoshi's Island, Dirt Trax FX and Voxel Demo show things now. Improved S-DD1 emulation, neither game using S-DD1 boots yet. SuperFX updates [Harmony]: Inlined a number of functions for possible speed increase. Removed some memory buffering cruft, to be re-added later. Fixed behavior of ASR opcode. With additional MESS-side changes, Stunt Race FX is playable, and Vortex shows much more. Hooked up RAM and ROM buffering. Inlined several more functions. Removed debug spew. Added the ability to define an external IRQ line callback, and hooked it up to the 65C816. Fixed flag calculation for HIB opcode. Hooked SuperFX chip up to the SNES machine driver. Fixed carry handling in ADC, ADCI, SBC and SBCI opcodes. Fixes many SNES SuperFX bugs. Made numerous corrections to SNES S-DD1 chip emulation, SFA2 and Star Ocean still do not boot. SuperFX updates [Anonymous]: Fixed disassembly of LMULT/FMULT ops. Fixed reads using LDW/LDB. Fixed writes using STW/STB. Fixed SBC carry behavior. Fixed GETC ROM access behavior. Some SuperFX games begin to show things in MESS. At least partly fixed PLOT and RPIX behavior. This fixes many gfxs in Star Fox and Vortex, but no polys yet.
- 0.133u4            : Added cpu\superfx\superfx.c/h and sfx_dasm.c. Argonaut SuperFX core improvements [Anonymous]: Hooked up Branch instructions. Fixed numerous SuperFX core bugs. Improved disassembler to more gracefully handle ALT* opcode effects. Correct instruction behaviors: STOP, SUB, SBC, SUBI and CMP. Added LSR and ROL opcodes. Updated instructions to use the safer superfx_gpr_write: LOOP, PLOT, INC and DEC. Added missing register writeback to LMS. Correct carry flag behavior in ROL opcode. Correct BRA target address calculation (maybe still wrong). Correct LOOP target address calculation. Made sure that FROM sets cpustate->sreg_idx. Disabled RAM/ROM clocking, going with instant transfer for now. Understood and re-enabled pipelined instruction architecture, Star Fox runs farther. Fixed a ridiculous typo in ROL instruction. Fixed overflow flag calculation on ADDI / ADCI. Fixed lack of register reset after ADD / ADC / ADDI / ADCI.
- DRIVERS            : (MESS) snes.cpp
- SOURCE: cpu\superfx\superfx.cpp



21.L   INS 8050 SC/MP

- 0.252              : Changed description to 'National Semiconductor ISP-8A/500D SC/MP' [AJR].
- 0.250              : Fixed unreliable order of execution in JMP instruction [AJR].
- 0.242              : Format as(ptr) directly into output stream and avoid formatting it when not necessary (scmp\scmpdasm.cpp) [Vas Crabb].
- 0.222              : Correct cpu type [Osso].
- 0.196              : Changed description to 'National Semiconductor INS 8050 SC/MP'.
- 0.193              : Added cpu\scmp\scmpdasm.h.
- 0.180              : Changed the scmp disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Added virtual for consistency [smf].
- 0.153              : Added 'INS 8050 SC/MP' device. Modernized SC/MP cpu core [Wilbert Pol].
- 0.141u1            : Added PinMAME games Ski Jump, Space City and Strike (Zaccaria 1978) with INS 8050 SC/MP CPU.
- 0.135u2            : Added cpu\scmp\scmp.c/h and scmpdasm.c. Miodrag Milanovic added National Semiconductor SC/MP CPU cores. INS 8060 SC/MP II support (using clock divider 2), main model renamed to INS 8050 SC/MP.
- DRIVERS            : (MESS) Chess.cpp
- SOURCE: cpu\scmp\scmp.cpp



21.L1  INS 8060 SC/MP II

- 0.252              : Rewrote disassembler. Changed CPU endianness (cpu\scmp\scmp.cpp) [AJR].
- 0.196              : Changed description to 'National Semiconductor INS 8060 SC/MP II'.
- 0.155              : Replaced 'INS 8050 SC/MP' CPU1 with 'INS 8060 SC/MP II' (2MHz) in skijump and spacecty.
- 0.153              : Added 'INS 8060 SC/MP II' device.
- DRIVERS: sshot.cpp and zac_proto.cpp
- SOURCE: cpu\scmp\scmp.cpp



21.M   PPS4

- 0.266              : Reverted incorrect ADSK change that was originated from a bad dump [Osso].
- 0.262              : Fixed comment that incorrectly described iTM [Arcade Hacker].
- 0.245              : Fixed 2 PPS4 CPU bugs, gts1.cpp games are mostly playable. Fixed bug with lb/lbl commands [Robbbert].
- 0.236              : Various fixes. Still not working though [Robbbert].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.193              : Added cpu\pps4\pps4dasm.h.
- 0.182              : PPS-4 refinements and modernization [AJR]: Split PPS-4 and PPS-4/2 device types; better explain and properly implement the difference. Use callbacks for discrete input/output ports instead of fake memory addresses. A17xx reads the address bus directly during I/O accesses. Misc chip documentation.
- 0.180              : Changed the PPS4 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.175              : Fixed some cpus with virtual ports (PPS4), mark them with +1 in any case [Olivier Galibert].
- 0.157              : Rewrote Rockwell PPS-4 CPU core based on bitsavers.org documents. Introduced m_Skip to skip ops. Clean up and fixes. Fixed cut&paste, typos and some implementation bugs. Added chip pinouts for 10660 and 11660 PPS-4 versions. Fixed previous opcode detection for LB and LBL. Fixed disassembler for LBL. BU is always 0000 in LBL (pps4\pps4dasm.c). Fixed the TM disassembly. Don't set m_I in ROP() and don't set m_I2 in ARG(). Cleanup and fix comments [Juergen Buchmueller].
- 0.155              : Added PPS4 (gts1.c) notes [Robbbert].
- 0.150              : Modernized PPS4 cpu core [Wilbert Pol].
- 0.141u1            : Added cpu\pps4\pps4.c/h and pps4dasm.c. Added Rockwell PPS4 CPU core (not finished) [Miodrag Milanovic].
- NOTES: Rockwell PPS-4 CPU. PinMAME games.
- DRIVERS: gts1.cpp and recel.cpp
- SOURCE: cpu\pps4\pps4.cpp



21.N   15IE-00-013

- 0.265              : Fixed a class memory access warning (machine\ie15.cpp) [Vas Crabb].
- 0.227              : Updated logging, use device_matrix_keyboard_interface [Sergey Svishchev].
- 0.222              : READ/WRITE macros removal (machine\ie15.cpp). READ/WRITE macros removal [Osso].
- 0.215              : IE15 terminal: Rework the RS232 interfaces. The RS232 port has been moved out of the ie15 device. It is only needed in stand alone operation, and not when connected to the rs232 bus, it was odd leaving it in there, odd to still have an rs232 port slot option when running stand alone. The IE15 UART implementation has been removed from the rs232 bus code and back into the ie15 device code. This leaves the rs232 bus code dealing with only serial data, and not the parallel data, and that should make it easier in future to have a common interface to RS232 terminals. Resolve all rs232 handlers, even unused [68bit].
- 0.207              : MCFG and MACHINE_CONFIG removals [Ryan Holtz].
- 0.196              : Fixed shortname conflict [Vas Crabb].
- 0.193              : Added cpu\ie15\ie15dasm.h.
- 0.184              : Added bus\rs232\ie15.cpp/h and machine\ie15.cpp/h. Converted IE15 to a device with frontends (standalone driver and rs232 slot device) (take 2) [Sergey Svishchev].
- 0.180              : Changed the ie15 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.148u5            : Added cpu\ie15\ie15.c/h and ie15dasm.c. 15IE-00-013 serial terminal [Sergey Svishchev].
- DRIVERS: (MESS) ie15.cpp
- SOURCE: cpu\ie15\ie15.cpp



21.O   NEC uCOM-4

- 0.264              : Moved opcode mnemonics enum out of header file (ucom4\ucom4d.cpp) [hap].
- 0.232              : Changed to PAGED 8bits [hap].
- 0.205              : Removed MCFG [Ryan Holtz].
- 0.193              : Added cpu\ucom4\ucom4d.h.
- 0.185              : Added D546 to NEC uCOM-4. Fixed (MESS) efball old regression [hap].
- 0.180              : Changed the UCOM4 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.162              : Exit execute loop if it ran out of icount after an interrupt [hap].
- 0.161              : Accuracy fix for integer division loses fraction (attotime::from_hz -> attotime::from_ticks) [hap].
- 0.159              : Added cpu\ucom4\ucom4.c/h, ucom4d.c and ucom4op.inc. Added NEC uCOM-4 MCU core and disassembler [hap].
- DRIVERS: (MESS) tmtennis.cpp
- SOURCE: cpu\ucom4\ucom4.cpp



21.O1  AMI S2000

- 0.264              : Moved opcode mnemonics enum out of header file (amis2000\amis2000d.cpp) [hap].
- 0.193              : Added cpu\amis2000\amis2000d.h.
- 0.180              : Changed the AMIS2000 disassembler to use 'std::ostream &' internally [Nathan Woods]. Added boilerplate comments & removed unnecessary formatstr() [smf].
- 0.164              : Changed amis2000op.inc to amis2000op.c.
- 0.161              : Accuracy fix for integer division loses fraction (attotime::from_hz -> attotime::from_ticks) [hap].
- 0.159              : Added cpu\amis2000\amis2000.c/h, amis2000d.c and amis2000op.inc. Added AMI S2000 CPU and DISASM. Added S2000 opcode handlers, most opcodes and some I/O opcodes. Improved d-latch [hap].
- NOTES: Overall functionality of AMI S2000 is similar to and probably derived from NEC uCOM-4.
- DRIVERS: (MESS) hh_amis2k.cpp
- SOURCE: cpu\amis2000\amis2000.cpp



21.P   ARCompact

- 0.252              : Rewrote core. Split into files by opcode encode type/group. Refactored out macros. Added additional opcodes. Added interrupt logic. Added stub handlers for used but unknown opcodes [David Haywood]. Cleanup: Moved common instruction field accessors used by the CPU core and disassembler to a shared base class and made them constexpr. Got the inline member functions bodies file out of the public CPU header so they aren't pulled in by everything using it. Got most of the disassembler handler declarations out of the public header so they can be changed withut excessive recompiling [Vas Crabb].
- 0.213              : Removed arcompact\arcompact_make.py.
- 0.193              : Added cpu\arcompact\arcompactdasm.h. Removed cpu\arcompact\arcompact_common.cpp/h, arcompactdasm_dispatch.h and arcompactdasm_ops.h.
- 0.187              : Attempt at fixing I/O space [AJR].
- 0.180              : Changed the ARCompact disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.168              : Fixed typo (cpu\arcompact\arcompact_execute.c) [Miodrag Milanovic].
- 0.160              : Removed except clause syntax not supported on Python 3. This change uses sys.exc_info()[1] instead of the "as" syntax to retain Python 2.5 compatibility (cpu\arcompact\arcompact_make.py) [Mike Naberezny].
- 0.158              : ARCompact WIP [David Haywood].
- 0.157              : Added cpu\arcompact\arcompact.c/h and arcompactdasm.c. We're definitely ARCompact based, it's a different instruction set. DASM of push/pop instructions show we're on the right track, you can see the start/end of functions in the code. Fixed some limm decoding, confirm that leapster CPU type uses the extended registers for multiply results. Start making an actual CPU core out of the arcompact disassembler, executes the first few jumps. It's actually executing code in cartridge space now [David Haywood].
- DRIVERS: (MESS) leapster.cpp
- SOURCE: cpu\arcompact\arcompact.cpp



21.Q  KL5C80A12

- 0.245              : Added cpu\z80\kp64.cpp/h. Added KP64 timer/counter units to emulation [AJR].
- 0.229              : Emulated on-chip parallel ports [AJR].
- 0.223              : Changed description to 'Kawasaki Steel KL5C80A12'. Emulated MMU within CPU device. Internalized internal RAM and clock divider. Updated notes [AJR].
- 0.211              : Correct CPU type for ddenlovr.cpp games (Z80 CPU1 -> KL5C80A12 in hanakanz, hkagerou, jongtei, kotbinsp, kotbinyo, mjgnight and mjreach1) [cam900].
- 0.196              : Changed description to 'Kawasaki LSI KL5C80A12'.
- 0.160              : Added 'KL5C80A12' device.
- 0.159              : Added cpu\z80\kl5c80a12.c/h. Shuffled more HNG64 stuff around, added stub Kawasaki KL5C80A12 CPU classes for the different CPU types it uses so that we can start implementing the peripherals properly rather than hacking them into the driver [David Haywood].
- NOTES: Kawasaki LSI KL5C80A12 CPU. Binary compatible with Z80, significantly faster opcode timings, operating at up to 10MHz. Timers/Counters, Parallel/Serial ports/MMU and Interrupt Controller.
- DRIVERS: ddenlovr.cpp, hng64.cpp and sigmab98.cpp
- SOURCE: cpu\z80\kl5c80a12.cpp


21.Q1  KL5C80A16
- 0.229              : Emulated on-chip parallel ports [AJR].
- 0.224              : Added cpu\z80\kl5c80a16.cpp/h. Added 'Kawasaki Steel KL5C80A16' device. Added KL5C80A16 I/O CPU to clone Get Bass configuration [AJR].
- DRIVERS: model3.cpp
- SOURCE: cpu\z80\kl5c80a16.cpp


21.Q2  KP63
- 0.225              : Added cpu\z80\kp63.cpp/h. Added 'Kawasaki Steel KP63 Timer/Counter (3 channels)' and 'Kawasaki Steel KP63A Timer/Counter' device. Added emulation of KP63(A) Timer/Counter unit. This improves timings in the sigmab98.cpp games animalc, haekaka, pyenaget and tdoboon [AJR].
- SOURCE: cpu\z80\kp63.cpp


21.Q3  KP69
- 0.225              : Modernized state_add syntax for KP69 [AJR].
- 0.224              : Added cpu\z80\kp69.cpp/h. Added 'Kawasaki Steel KP69 Interrupt Controller' device. Emulated KP69 interrupt controller. Clean up KP69 code a bit. Don't latch masked-out requests. Prepare for device variant [AJR].
- SOURCE: cpu\z80\kp69.cp


21.Q4  Taxan KY-80
- 0.245              : Documentation update [AJR].
- 0.224              : Added cpu\z80\ky80.cpp/h. Added 'Taxan KY-80' device (cpu\z80\ky80.cpp). Replaced Z80 CPU1 with new KC82-derived type 'Taxan KY-80' for sigmab98.cpp games b3rinsya, dashhero, dodghero, gegege, lufykzku, pepsiman, sushimar, tbeastw2 and ucytokyu [AJR].
- DRIVERS: sigmab98.cpp
- SOURCE: cpu\z80\ky80.cpp


21.Q5  KC82
- 0.225              : Modernized state_add syntax for KC82 [AJR].
- 0.224              : Added cpu\z80\kc82.cpp/h. Log kc82 MMU changes [AJR].
- SOURCE: cpu\z80\kc82.cpp



21.R   STmicro ST6228

- 0.227              : Various changes: Fixed RETI and LD rr,A opcodes. Optimized internal register handling. Converted to use logmacro. Added initial timer support [Ryan Holtz].
- 0.221              : Simplified some handlers [Osso].
- 0.205              : Fixed JRR and JRS opcodes [Ryan Holtz].
- 0.203              : Added STmicro ST6228 to UNIDASM [AJR].
- 0.201              : Added cpu\st62xx\st62xx.cpp/h and st62xx_dasm.cpp/h. Added 'STmicro ST6228' device. Added a skeleton driver for the STmicro ST6 series of microcontrollers. Init peripheral registers to the correct values on reset. Reworked stack display in the debugger. Hooked up data RAM. Hooked up ROM and RAM banking. Added named registers to the disassembler. Made banking functional through a hack; bank finders in internal maps do not seem to work. Added preliminary, untested GPIO support. Fixed INC rr opcode. Fixed disassembly of JRR, JRS, RES, SET opcodes, and added name for A register [Ryan Holtz].
- NOTES: STmicro STmicro ST6228 microcontroller
- DRIVERS: cwheel.cpp and twinbskt.cpp
- SOURCE: cpu\st62xx\st62xx.cpp


21.S   3DO DSPP

- 0.278              : Various fixes: Register STATE_GENPCBASE so debugger will recognize CPU. Limit ACC to 20 bits in debugger state display. Use util::sext for sign extension in non-DRC paths. Note that this changes behavior because positive values were sometimes not truncated to 20 bits previously. Make disassembly slightly less broken, though still very much a stub. Added a real disassembler. Tweak mnemonics in disassembler (dspp\dspp.cpp and dspp\dsppdasm.cpp) [AJR].
- 0.227              : Fixed erroneous fallthroughs (dspp\dsppfe.cpp) [Ryan Holtz].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.217              : Try the new save state possibilities (Allow saving members of structures in n-dimensional arrays) [Osso].
- 0.206              : Preliminary DRC. Still disabled by default (cpu\dspp\dspp.cpp). Removed no longer use MCFG macros in DSPP core [Ryan Holtz].
- 0.205              : Added cpu\dspp\dspp.cpp/h, dsppdasm.cpp/h, dsppdrc.cpp and dsppfe.cpp/h. Massive Konami M2 update [Phil Bennett, Ryan Holtz].
- NOTES: DSPP = Don's Super Performing Processor
- DRIVERS: konamim2.cpp
- SOURCE: cpu\dspp\dspp.cpp


21.T   National Semiconductor

21.T1  HPC46003

- 0.224              : Use swapendian_int16/int32 (hpc\hpcdasm.cpp) [AJR].
- 0.208              : Added cpu\hpc\hpc.cpp/h and hpcdasm.cpp/h. Added HPC46003 type for future use. Further bit instruction disassembly adjustments [AJR].
- NOTES: National Semiconductor High-Performance microController (HPC)
- DRIVERS: ?
- SOURCE: cpu\hpc\hpc.cpp


21.T2  HPC46104
- 0.208              : Added cpu\hpc\hpc.cpp/h and hpcdasm.cpp/h. Added skeleton CPU device and disassembler for HPC architecture. Correct disassembly of B&X mode bit instructions (cpu\hpc\hpcdasm.cpp) [AJR].
- NOTES: National Semiconductor High-Performance microController (HPC)
- DRIVERS: drivers\age_candy.cpp
- SOURCE: cpu\hpc\hpc.cpp


21.U   Sharp SM59x
- 0.242              : Added 'Sharp SM590', 'Sharp SM591' and 'Sharp SM595' devices. Added I/O ports to SM590 [hap].
- DRIVERS: ???
- SOURCE: cpu\sm510\sm590.cpp


21.V   Altera Nios II Processor

- 0.252              : Fixed execution of 'or' instruction (cpu\nios2\nios2.cpp) [AJR].
- 0.250              : Preliminary execution core and gdb support (nios2\nios2.cpp) [AJR].
- 0.249              : Added cpu\nios2\nios2.cpp/h and nios2dasm.cpp. Added Nios II disassembler. Hook up new skeleton CPU device to 'unknown game on TrueSys hardware'. Misc. disassembler fixes [AJR].
- DRIVERS: truesys.cpp
- SOURCE: cpu\nios2\nios2.cpp




22.    Sound Communication

22.1   Konami K054986
- GAMES: Konami - Lethal Enforcers (1992), X-Men (1992), Martial Champion (1993), Polygonet Commanders (1993), Violent Storm (1993)
- PCB: 054986A (Viostorm, Xmen)


22.2   Data East Pinball CPU boards

- 0.241              : Added outputs and removed unused switch (machine\decopincpu.cpp) [Robbbert].
- 0.221              : Simplified handlers (machine\decopincpu.cpp) [Osso].
- 0.197              : Get rid of more uses of inefficient output methods (machine\decopincpu.h) [Vas Crabb].
- 0.149u1            : Added machine\decopincpu.c/h. Made CPU board a device, and hooked it up to all drivers in de_2.c [Barry Rodewald].
- NOTES: Data East Pinball CPU boards: Type 1: Based on Williams System 11 CPU boards, but without the generic pinball audio hardware. Type 2: RAM increased from 2kB to 8kB. Type 3: Adds CPU controlled solenoids and Type 3b: Adds printer option.
- SOURCE: machine\decopincpu.cpp



23.    Discrete Netlist

- 0.277              : Implemented audio potentiometer law. Used it in oberheim\dmx.cpp and linn\linndrum.cpp. Function should not be a constexpr. Also avoiding pow in constexpr constants (machine\rescap.h) [m1macrophage].
- 0.263              : Removed duplicate $(OBJ)/devices from object directories in netlist\build\makefile [amameuser].
- 0.262              : Added 74147, 74148, 74151 and 74368 chips to netlist devices (macro\nlm_ttl74xx_lib.cpp). Changed times to the typical of the fast type instead of the max of the worst type (macro\nlm_ttl74xx_lib.cpp) [stonedDiscord].
- 0.261              : Report line number when an exception occurs. Break up resistor arrays into individual resistors (tools\nl_convert.cpp) [stonedDiscord]. nltool counting lines from 1 rather than zero to match text editors (tools\nl_convert.cpp) [Vas Crabb]. Maximum count for 9310 is 9, not 10 (netlist\devices\nld_9316_base.hxx). Fixes scores over 200 break the score counter in Breakout [TTL] [Robbbert].
- 0.252              : Added netlist sound to (MESS) Sound FX Phasor and Electronic Battleship. Updated static solvers (generated\static_solvers.cpp) [hap]. Stop using deprecated std::iterator template (netlist\plib\plists.h) [Miodrag Milanovic].
- 0.246              : Added RS mode to netlist 9314 (devices\nld_dm9314.cpp). Fixed TTL_74157_GATE (netlist\macro\nlm_ttl74xx_lib.cpp) [Golden Child]. Fixed regression: Code was parsing lib\netlist\macros instead of using compiled version. Include file work. Moved code to more appropriate locations. Apply Clang-format to modified files. Fixed some cspell errors. Applied emu.h rule [Couriersud].
- 0.245              : Added netlist\build\.clang-format. Changed machine\nl_pongf.cpp/h to machine\nl_pong.cpp/h. Added html\nltool.html, nlwav.html, netlist\build\man\nltool.1, nlwav.1, netlist\tests\test_penum.cpp. Added cstddef to includes in ppmf.h. More explicit comments in ppmf.h. Fixed more typos and improved readiability. Fixed aligned_alloc. Netlist plib\palloc.h now uses C++17 alignment aware operator new. Added more documentation to palloc.h. Made the use of allocation arenas more transparent throughout code. palloc now uses C++17 alignment aware operator new. This required further changes to the arena_deleter object to track alignment and size of allocated objects to avoid the use of alignment and size of base classes in case a unique_ptr was cast to a unique_ptr of the base class. Abbreviate one more type trait in palloc.h. Static solver work and improve code readability. Added support for building individual static solver files (nltool). Added pre-built documentation files for nltool and nlwav. Extended typed_version to have patchlevel as well (netlist\plib). Compile more of ppmf.h with nvcc (netlist\plib). Added include guards to the generated files (create_devinc.py). Recreate generated files when python code has changed (build\makefile). Reduced nld_base.h usage in the core. Moved extern template class declarations to where they belong. Generally improved code readability and fixed a lot of issues cspell reported. Fixed bugs and more cpp instead of macros: C-style comments converted to C++. Fixed crash in state saving code when an abort queue processing event is pending. Fixed a bug where a net could be twice in the queue. Converted more macros to C++. Fixed SUBTARGET=nl build. Fixed potential bugs which would allow a terminal to belong to more than one net. This is not possible even for a short time. Moved some member function definitions out-of-class. Moved code out-of-class. Added constexpr where appropriate. Fixed mamenl build. Cleanup and indentation. Fixed a bug where a net processing error may trigger a nullptr access. Applied some clang-tidy recommendations. Added no_return to plib::terminate. Properly encapsulate dynamic_cast usage. More review of noexcept. Added a clang-format file. Over time, all source files will be processed with clang-format. Used clang format on a number of files. Rewrote 74174. All device constructors now use a struct to pass data on to base classes. Neither netlist state nor the name are intended to be used in a constructor. After the base class was constructed, they can be accessed by state() and name(). The device construction macros can now be removed. Changes to the core will not need to be reflected in constructors. Changed truth table macros so that going forward NETLIST_END and TRUTH_TABLE_END can be replaced by a closing curly brace. netlists can than use curly braces enclosed blocks. More clang-format. Removed some macros completely. All derived classes from base_device_t now don't use macros any longer. As a result, delegator_t was removed. This class was only used to support macros [Couriersud]. Make plib\ptypes.h noexcept issue workaround trigger for Clang 8 or Apple Clang 11.0.0 [Vas Crabb].
- 0.244              : Added lib\netlist\FAQ.md and netlist\plib\ppmf.cpp. Netlist lint, first version of a FAQ and small code changes. Added a first version of a FAQ. Use better error messages in pfunction. Made member functions static where appropriate in nld_solver. Reduced the use of macros by converting defines into C++ constants. More minor code clean up. Standalone makefile and prototype modifications. Updated netlist makefile to more recent compilers. Prototypes for NETLISTs in macros are now created create_devinc.py. Apply ctidy recommendations. Python None in create_device.py. Use templates to compile with NETLIST_CREATE_CSV=1 (machine\netlist.cpp). Fixed standalone nltool building with NVCC (NVIDIA CUDA Compiler). NVCC 11.3 (latest Cuda tools) has an issue with some auto x (some variable) declarations. Improved PPMF target support and test coverage. This addresses most of the issues described in #8590. Fixed standalone Visual Studio 2019 builds, including support for Clang toolchain. Added static stub to PMF to support MSVC ABI. Better aligned ppmf syntax with MAME's delegate syntax. Added tests\test_ppmf*.cpp testing examples given in #8590. Also worked around issues some versions of Apple Clang have with 'Standalone makefile and prototype modifications'. Pointer to member function code. Fixes to address PR #9752 and issue #8590 / EMSCRIPTEN (#9773). Changed comments in ppmf.h. Added support for function desciptors (IA64). sizeof(size_t) may be different on build targets make plib::hash use uint64 to ensure consistent static solver hashes across platforms (EMSCRIPTEN). Moved constructor and member functions outside the class declaration with the exception of "call" member functions. Updated comment on accessing RDX. Added more test cases. Removed execution bit on certain files. I have separated out the raw processing code into 'ppmf.cpp'. I have also taken first steps to clean the abi identification. The code submitted now supports: a) The unknown virtual inheritance case with specific code for MSVC for simple (i.e. scalar, void, reference, pointer) return types using the optimized code. This is the test case only supported under MSVC and which should return 7. Please have a look at the code. Basically m_vptr_offset is an index into a pointer table. It needs to be multiplied by 'sizeof(void *)'. b) If you enable PPMF_EXPERIMENTAL complex return type member functions for MSVC will also use the optimized code path. This is explained in detail in the code in ppmf, including caveats and possible solutions. c) Enabling PPMF_USE_MAME_DELEGATES will use 'src\lib\util\delegate.h' as a replacement for 'ppmf.h'. This allows to run the same tests ('nltool -c tests' from standalone build) as for the ppmf code. d) The code now also supports 'Clang-CL'. e) sizeof(size_t) may be different on build targets. Make plib::hash use uint64 to ensure consistent static solver hashes across platforms. This fixes loading static solvers (if enabled) on EMSCRIPTEN. More C++ and less macros: Significantly reduced the use of unused_var and replaced it with [[maybe_unused]]. Use enum class in ppmf.h. Changes to testing code in ptest.h: Catch exceptions in more places. The verbosity of the output can now be controlled. Display of test stats totals. Added support for cspell. Fixed various typos. Fixed SUBTARGET=nl build. Fixed more file permissions. srcclean and add fix_permissions target to netlist makefile [Couriersud]. Fixed detection of Clang versions with noexcept issue and added feature constants for C++ standard library version (netlist\plib\pmatrix2d.h and ptypes.h) [Vas Crabb].
- 0.235              : Fixed a duplicate #include (plib\pfunction.cpp) [Vas Crabb].
- 0.233              : Fixed sound_assert in debug builds (machine\netlist.cpp) [AJR].
- 0.230              : Relicensing of the GPL code to BSD-3 with the blessing of the copyright owners. Much thanks for that Couriersud, the main creatorand contributor, but also to Jonathan Gevaryahu and Sergey Svishchev. There are small remnants in machine\NL_*, specifially Breakout, Pong Doubles and Rebound that are also copyrighted by the DICE team, whoever that means. They're not critical since they only concern these drivers and not an important core subsystem [O. Galibert].
- 0.227              : Give devices the C++17 namespace treatment [Vas Crabb].
- 0.226              : Fixed Astro Blaster sonar sound and two singular matrices being created. Fixed slowdown, a connection error and order of PARAM overwrite (static_solvers.cpp and audio\nl_astrob.cpp). Removed "extended validation mode". No longer added value. Implemented stricter validation. Devices like BJTs and FETs which are defined but not used will now cause an error. An unused device will create an additional solver with a singular matrix. This is adding unnecessary performance overhead. It complicates debugging because the unused device will cause an arithmetic signal if used with --fperr (nltool). Fixed all validation errors. Applied some Clang tidy recommendations. Rewrote frontier documentation. Also includes a small optimization for FP signal code. Fixed a net splitting issue with four term devices. Under cirtum circumstances the splitter would create "ghost" solvers consisting of terminals already used in another and complete solver. This may impact all netlist which use opamps and thus is committed early in the cycle. This commit adds functionality to instruct the splitter code to include terminals which will not create matrix elements into the parsing of net groups for solvers. Added parse optimization to pfunction: * "(1 + 2)*a" now during parse step will be rewritten to "3*a". Moved core_terms to netlist_state. These are used during creation and reset only. No need to maintain them on net_t level. Simplified code. Reverted changes intended to make the code work on OSX 10.10 (plib\pmatrix2d.h and pmatrix_cr.h). Catch parenthesis count mismatch in formulas. Fixed error in formula in audio\nl_boxingb.cpp. Explicitly trim connection names [Couriersud]. Use C++ std::vector and range-based for sound\discrete.cpp. Use constexpr where it won't change semantics. The other function-like macros will invoke type decay or promotion depending on what the argument expressions evaluate to, so chaning them to constepr functions could change semantics (machine\rescap.h) [Vas Crabb]. Fixed build on old compilers not compliant with retroactive C++11 revisions (sound\discrete.h) [AJR]. Hook up netlist for Borderline [beta-tester]. Hook up netlist for Tranquillizer Gun. Added static solver, using dynamic timestep and update driver flags (audio\nl_brdrline.cpp). Added Frogs netlist. Added AFUNC frontiers to improve performance. Added LM348, CD4071 and CD4081 devices [Aaron Giles].
- 0.225              : Moved devices\nld_devinc.h to generated\. Changed netlist\plib\mat_cr.h to netlist\plib\pmatrix_cr.h. Added netlist\build\adding_devices.md, create_devinc.py, create_lib_entries.py, create_modules.py, nlwav.help2man, netlist\devices\nld_4029.cpp, nld_4042.cpp, nld_4076.cpp, generated\nlm_modules_lib.cpp and macro\modules\nlmod_RTEST.cpp. Removed netlist\analog\nld_bjt.h, nld_fourterm.h, nld_mosfet.h, nld_opamps.h, nld_switches.h, nld_twoterm.h, devices\nld_2102A.h, nld_4006.h, nld_4013.h, nld_4017.h, nld_4020.h, nld_4053.h, nld_4066.h, nld_4316.h, nld_74107.h, nld_74113.h, nld_74123.h, nld_74125.h, nld_74153.h, nld_74164.h, nld_74165.h, nld_74166.h, nld_74174.h, nld_74175.h, nld_74192.h, nld_74193.h, nld_74194.h, nld_74365.h, nld_74377.h, nld_74393.h, nld_7448.h, nld_7450.h, nld_7473.h, nld_7474.h, nld_7475.h, nld_7483.h, nld_7485.h, nld_7490.h, nld_7492.h, nld_7493.h, nld_7497.h, nld_74ls629.h, nld_8277.h, nld_82S115.h, nld_82S16.h, nld_9316.h, nld_9321.h, nld_9322.h, nld_am2847.h, nld_dm9314.h, nld_dm9334.h, nld_legacy.h, nld_log.h, nld_mm5837.h, nld_ne555.h, nld_r2r_dac.h, nld_roms.h, nld_schmitt.h, nld_system.h, nld_tms4800.h, nld_tristate.h, macro\nlm_base_lib.h, nlm_cd4xxx_lib.h, nlm_opamp_lib.h, nlm_otheric_lib.h, nlm_roms_lib.h, nlm_ttl74xx_lib.h, netlist\macro\modules\nlmod_ICL8038_DIP.cpp and nlmod_NE556_DIP.cpp. Use macro DIP definitons for 8277, 9314, 9334, AM2847, MM5837 and TMS4800. Templatize 74107 and code maintenance. Removed some dead friend declarations. Optimized template times_ns2. Fixed visibility in some devices (private rules). References to subdevices should be symbolic: Exposing sub-device members is not best practice. The need for sub-devices is a clear indication that a netlist language implementation would be a better solution. In devices folder all DIP devices were removed. NE555 and MC1455P were the last devices with DIP definitions in devices. Build system improvements. Medium term this will significantly ease adding devices to netlist. Clang tidy include order fixes. More standalone makefile changes: On windows a simple make is now enough to build. Devices, macro and tests folders now included with wildcard. No more makefile changes if a device is added. Moved nld_devinc.h to generated folder. Added to python scripts to create nld_devinc.h and lib_entries.hxx. TEST MODE: these two files are created automatically but are not used currently. Once I get feedback that the python scripts work in different environments I will remove header files from devices and macro and start using these files in production. Fixed various issues around include directories: Removed include directory src\lib\netlist from various genie files to avoid potential issues. Code using netlist should use #include "netlist/*". Updated includes. Fixed standalone makefile depend target to properly deal with relative paths. Various minor adjustments based on PR comments. Standalone makefile support for OSX. Truth tables are now standalone objects. Added TRUTHTABLE_ENTRY to netlist language. Please see nlm_ttl74xx for reference implementation. Fixed processing of TRUTHTABLES for generated files. Also made nld_devinc.h srcclean friendly. nld_devinc.h and lib_entries.hxx are currently not used. You can try the automated build by changing NL_AUTO_DEVICES in setup.h to 1. Code maintenance and performance optimizations. Renamed some misleading type names. Removed callback_t and replace by better scalable approach. Hide implementations details. Moved sources classes from putil.h to psources.h. Reduced code complexity. Improved parsing performance, parsing netlists now is twice as fast. Fixed issues around multi-byte string support. Moved psplit into pstrutil.h. Fixed multi byte string issues. Implemented voltage dependent timing for CD4006. Added listmodels command to nltool. Moved netlist to generated header and link support files files. Removed device and macro header files. All of those can be generated automatically so going forward there is no need for these any longer. Introduced the modules concept. Modules are netlists for which automatic lib entries are generated. Going forward you just store them in macro/modules and they will be automatically registered as device elements. You need to do a "make generated" is src\lib\netlist\build. Some_device.cpp still needs to be added to netlist.lua. Added documentation on how to add devices to netlist. Please refer to adding_devices.md for more information. Moved selected NET_MODELS into the core. Moved ICL8038_DIP and NE556_DIP to core. Removed code duplication. Optimized headers. Where possible rely on forward declarations to optimize compile time. Emscripten can not use specialization efficiently. Consequently prefer to save on compile time and size. Code refactoring. Optimization to the gmres solver. Simplifcation of vector operation code. Significant performance increase. Uses all 4 Sonar oscillators. Uses randomized resistor values (5% range). Uses frontiers to separate oscillators. Improves performance to 340% locally (netlist\generated\static_solvers.cpp and audio\nl_astrob.cpp). Use default move and copy constructors. Various minor edits like adding noexcept. Removed a lot of inline keywords. Improved queue handling documentation in code. Documented that for performance reasons pushes to queue are allowed even if they may not change state and are filtered out during process. Provide alternative code path. This is currently not used. Fixed 128 bit integer support. Clear identify void * casts. Make pstring length/size use consistent. Length reports the number of character codes in the string. Size reports the size in memory units. Reminder: Set PSTRING_USE_STD_STRING to 1 in pstring.h and get native std::string. pstrings are compatible to std::string but only support a limited subset of functionality. By default (always like this) utf8 is supported and thus length reports the number of multi-byte characters. Added a number of minor fixes leading to an increase of 570% to 588% on pongf. Admittedly micro optimization. Includes some comments why certain decisions have been taken [Couriersud]. Added 7417, 7438, 74290 and 74293 devices. Fixed PROM DIPs. Update Netlist sound to the new stream update callback [Aaron Giles]. Added netlist devices for MCM14524, CD4029, CD4030, CD4042, CD4049 and CD4076 [Lord Nightmare].
- 0.224              : Added netlist\build\nltool.help2man, core\analog.h, core\core_device.h, core\device_macros.h, core\devices.h, core\exec.h, device.h, logic.h, netlist_state.h, object_array.h, queue.h, devices\nld_4017.cpp/h, nld_4053.cpp/h, nld_8277.cpp/h, nld_9321.cpp/h and examples\lostfound.cpp. Removed devices\nld_7442.cpp/h. Renamed nlm_base.cpp/h to macro\nlm_base_lib.cpp/h, macro\nlm_cd4xxx_lib.cpp/h to nlm_cd4xxx.cpp/h, nlm_opamp.cpp/h to macro\nlm_opamp_lib.cpp/h, nlm_other.cpp/h to macro\nlm_otheric_lib.cpp/h, nlm_roms.cpp/h to macro\nlm_roms_lib.cpp/h, nlm_ttl74xx.cpp/h to macro\nlm_ttl74xx_lib.cpp/h. Added netlist sound to Destroyer. Added netlist for Tank/Tank Cocktail [TTL]. Currently runs at about 0.005% of full speed, unsure why. Regenerated static solvers and fixed errors preventing static solvers from generating. Properly fixed 74165 implementation. Fixed MK28000 address latching [Ryan Holtz]. Added netlist sound to Fire One [Ryan Holtz, Colin Howell, Couriersud]. Added netlist sound to Flyball [Ryan Holtz, Osso]. Added netlist sound to Fire One [Ryan Holtz, Colin Howell, Couriersud]. Added netlist sound to Star Cruiser and Star Fire [Ryan Holtz, Colin Howell, Aaron Giles]. Fixed building with GCC-10.1 on MinGW32 (machine\nl_palestra.cpp). Removed test code from nld_74125.cpp. Further nl_base.h splitting into headers in core subdir. Fixed a crash if an exception happened during validation (machine\netlist.cpp). Fixed a bug in preprocessor if and elif parsing. Added a missing directive to the file parser. Necessary changes towards runtime processing of macro directory. Source stream refactoring. This is an infrastructure change to enable better error reporting including file/source and line numbers in the future. Fixed 4011 implementation. Fixed an issue during proxy hookup. Added cd4053 to netlist.lua. Recreated nld_devinc.h. Fixed 74ls629 implementation and some cherry-picking issues. Disabled dangerous optimization. This was an over-aggressive optimization. Now prints an info and recommends to comment out if appropriate. Fixed 7492 and roms include bug (devices\nld_7492.cpp and macro\nlm_roms.h). Moved documentation from header to cpp file. Moved documentation from header to cpp file: Header files will disappear and only nld_devinc.h which is can be created by nltool will stay. These commits ensure that the documentation is preserved when the header files are deleted at some point in the future. Added example documentation to SN74LS629_DIP (macro\nlm_ttl74xx.cpp). Refactored pokenizer. Separated tokenizing and reading of tokens. This enables caching of parsing results on the token level. Implemented caching of token stream. Overall this significantly improves parsing performance (~10x). Next step towards a bare-bone nltool which does not depend on macro devices. Added man target to netlist makefile (help2man). Header file separation. Fixed creation of static solvers. Fixed line-number tracking when at end of line. Align naming of files within the macro folder. Use a consistent naming scheme. Improved parsing performance. Preparational work for easier device addition. More include untangling. nl_base.h now basically only includes files from core. All headers in core compile on their own. Untangle sound and cpu devices. Member variables are now where they belong. Avoid over/underclocking of netlist sound devices. Make streams accept logic parameters as well (netlist\nl_interface.h). Added machine.time() rules. Avoid overshooting sound devices, i.e. advancing past machine.time(). Fixed elif processing (plib\ppreprocessor.cpp). Fixed elif processing. Removed printf debugging (netlist\nl_parser.cpp and nl_setup.cpp). Also raises error if during parsing a local source is not found (netlist\nl_errstr.h). buffered_param_setter refactoring: Each parameter to set now has a dedicated buffered_param_setter device. This allows different sample times per device. Updated netlist.cpp for new approach. buffered_param_setter is a template. The template parameter is a class which is expected to support the [] operator. The value passed to [] operator is the requested sample number. Moved dead code into examples\lostfound.cpp. This work didn't improve performance but still may serve as examples for complex truth table implementations. Optimized 74165. Added AN6551 opamp. Added NETLIB_DELEGATE_NOOP(). This should be used for inputs which do not need a handler. Examples are data inputs which are only accessed on a clock change. Removed duplicate device definitions. Use macro DIP definitons for 74175, 74192, 74193, 74194 and 74365 [Couriersud]. Added CD4011, CD4024, 7407 and CD4053 devices. Converted CD4013 DIP to macro. Device refactoring: Moved DIPs for 82S16, 82S115 and 2102A devices into nlm_proms. Moved 7448 DIP to a macro. Replaced 7442 with truthtable and macro. Moved 74LS629 DIP into macro. Expand truthtable to handle 10 outputs. Updated 7450, 7473/7473A, 7474, 7475/7477 devices to use DIP macros instead of C++ DIPs. Reworked 7475/7477 more in the style of 7474, leveraging system signal activation and edge detection. Fixed incorrect sense in warning (analog\nld_mosfet.cpp). Added CD4017/4022 devices. Macro-ized 7483, 7485, 7490, 7492, 7493, 7497, 9310, 9316, 9322, 74107, 74113, 74153, 74161, 74163, 74164, 74165, 74166, 74174, 74393 and CD4006 DIPs. Minor optimization to remove sqrt from inner loop (solver\nld_matrix_solver_ext.h). Added documentation for devices in nlm_ttl74xxx.cpp. Documentation for all devices in nlm_ttl74xxx now is available in the doxygen documentation. Renamed DM9312 to TTL_9312 for consistency. Added THRESH parameter to AFUNC (devices\nlid_system.h). Added compile-time option to record nltool-compatible CSV files. Improved CD4020 implementation. Fixed CD4053 behavior. Added 74139 device. Added TL082 device [Aaron Giles]. Silence indentation warning in 3rdparty/ under Emscripten [Justin Kerk]. New netlist audio implementation to Super Speed Race. The netlist-based audio implementation derived from Midway audio schematics, and based on that used for 280-ZZZAP and Laguna Racer. The biggest difference is the use of a linear feedback shift register for noise generation [Colin Howell]. Use posix_memalign with ANDROID (netlist\plib\palloc.h) [Tiago Pierezan Camargo].
- 0.223              : Added netlist\core\base_objects.h, logic_family.h, nets.h, param.h, setup.h and state_var.h, devices\nld_74113.cpp/h, plib\ptests.h and tests\test_pfunction.cpp. Code maintenance. Decreased use of reinterpret_cast. Changed some defaults for better TTL game optimization. Various code cleanup. Include file refactoring. The purpose of this ongoing exercise is to remove unnecessary dependencies in header files. Netlist implementations should only have access to what they need. The same applies to device implementations. Core stuff will be moved to the core subdirectory going forward. Fixed 74377 pin assignment. Fixed parameter value resolution on rom devices. Also simplifiy a return. Documented parameter value resolution. Fixed static_assert warnings at the origin (plib\palloc.h and pmatrix2d.h). Rework hints to broaden their use and fix NC hint. Use NC hint for 74377. Fixed debugging in MSVC (plists.h). Moved everything not needed by netlists from nl_setup.h into core\setup.h. Fixed some Clang tidy warnings. Added comparison operators to plib\pfunction.cpp. Comparison operators evaluate either into 0.0 or 1.0. Thus they can be used like "(a==1)*(b==2)" which will only result in 1.0 if a equal 1 and b equal 1. Added more constructors and () operator to plib\pfunction.h. Added progress indicator to nltool. When running a netlist "--progress" may be used to display a progress indicator. Fixed pfunction if. The if postfix evaluation corrupted the stack. Fixed polarity of 74LS125 tristate input. Added basic unit testing support. Added google test syntax compatible unit testing support. This is a very limited subset of the google test framework and not intended ever to be a replacement. Adding a dependency to google test for the functionality required was considered to be an overkill. nltool -c tests runs unit tests if linked in. This is *not* the case for the version of nltool compiled with TOOLS=1. Added unit tests for plib::pfunction. Removed soft reset support. Electronic circuits and base components like resistors or capacitors do not have a reset line. You can use them to create reset circuits. There is thus no point to support soft reset, the equivalent to pressing the reset button. Fixed some bugs around reset and start up logic. This also fixes the "scramble F3" crash. The pfunction now supports unary minus operators. Updated documenation on noise sources. The pfunction supports unary minus and removed duplicate code. Removed some warning suppression from netlist\build\makefile. Fixed signedness warnings in ptime.h. Unit test macros now have a "P" prefix. Will allow to use both googletest and Catch frameworks. On unexpected std::exception include what() in error message. Added 74121 device and refactor 74123 code. Migrated DIP devices to netlist devices. Refactor code to be based on device description structs. Improved dealing with non-convergence situations. No changes for well-behaved netlists. Netlists reporting "newton loops exceeded" messages should now report a lot less of these messages. In case newton-raphson does not converge, netlist will reset the state back to the beginning of the timestep. It will than use a number of very small timesteps to hopefully deal with the non-convergence due to a too big timesteps. Afterwards solving continues using dynamic timestepping until the time-slice is complete. This is a lot better than the previous approach. This is meant as a performance optimization helper. Ideally, your netlists never produce "newton loops exceeded" messages. Any events for connected analog and digital inputs will happen after the timeslice is complete. Thus this approach - as the previous one - are not suited for high-frequency (such as video outputs) situations. In these case, only dynamic timestepping or reducing the fixed timestep are a suitable solution. Use threads on netlist logs. This significantly increases the performance of output/terminal logs. Added a psemaphore class to pmulti_threading.h. Fixed power pin names for CMOS devices. For truthtable cmos devices the power pin names will now be set according to the logic family. Fixed some issues for CD4538. Changed "already connected" warning to info level. Some ICs (CD4538) connect pins internally to GND and the schematics again externally. This will cause this info to be printed. The warning now is a lot more verbose. All inputs now explicitly specify a signal handler: Currently devices use the "update" function if no handler is given for an input. For this to work the update function has to be virtual. This will cause issues on shared execution schemes like CPU/GPU using NVCC. This is the first batch of changes to ensure that handler resolution is static. Emit a warning every 100 invocations of Newton Raphson resolution (solver\nld_matrix_solver.cpp). Always take power pin names from logic family. Default NMOS power pins to VCC and GND. MOS uses VDD/VSS - update gamemachine netlist. Reduced overshoot impact on NE555 astable frequency: If TRIG and TRESH are connected overshoot compensation will be enabled. The approach is raw but delivers results (at 5 to 10 steps per discharge/charge) within a couple of percent. Please take into account that any datasheet formulas are idealistic. Neither capacitor, resistor, internal resistor tolerances are taken into account. Nor are ambient temperature and chip temperature. Fixed Inductor state saving (analog\nlid_twoterm.cpp). Code maintenance: More handler alignment. Dead code removal. Removed update calls which do nothing. Comment out empty reset and update calls. Avoid NE555 oscillation due to overshoot compensation. Fixed Clang error: No matching constructor for initialization of 'analog::nld_twoterm' (devices\nld_4066.cpp). Prepare road towards trapezoidal integration. This is a long term transition goal. Documented in source (see NL_USE_BACKWARD_EULER). Potential regression trigger: Removed update and NETLIB_UPDATE completely. Startup initialization order may change. This may cause regression tests to trigger. This is expected. Logic TTL devices do not have a defined power-up state. That's why reset circuits exist which create a reset signal *after* all power supply lines are stable. Include timestamp in newton-raphson loop warnings (solver\nld_matrix_solver.cpp). Fixed logging of final timestamp (devices\nld_log.cpp). nld_matrix_solver is now owned by nld_solver. Added frontier documentation (devices\nlid_system.h). Rewrote scheduler scheduling: All solver scheduling is now handled by nld_solver. Previously, for dynamic timestepping the sub solvers would be responsible for their scheduling themselves. This prevented any attemps to use parallel execution of solvers. Now the route is free towards experiments to use parallel execution of solvers. Uses ptimed_queue_linear in solver scheduling. Improved netlist queue implementation (template now). Added const delegates and subsolver stats. Removed dead code. Separated nl_base.h into separate header files. This clean-up exercise will hopefully make it easier to navigate the core code. Another long term goal is to further straighten the object model. Include GMRES solver in build. The GMRES solver for larger matrices (>>100) can outperform Gaussian elimination. Including it so it gets wider attention. As far as I know netlist is the only SPICE-like circuit simulation providing a GMRES solver. Sub solvers now have their own parameter set. Example: PARAM(Solver.Solver_0.METHOD, "GMRES"). Will use the GMRES solver instead of the default MAT_CR solver. Same applies to all Solver parameters. Please use with care. If you change your netlist (e.g. using frontiers) the allocation of nets to solvers and the number of solvers may change. Thus this type of tweaking should only be used after the netlist completely works [Couriersud]. Added hints for outputs not connected. Logic and analogue outputs can now be flagged as "NC" (not connected). Example: "HINT(IC13.4, NC)". This will suppress info messages to be logged. The HINT must apply to an existing terminal. HINTs for non-existing terminals are treated as fatal errors. Terminals and logic inputs not connected are still treated as warnings. These need though and a proper fix. Added netlist simulations for the following games: Armor Attack, Barrier, Boxing Bugs, Rip Off, Solar Quest, Space Wars, Speed Freak, Star Castle, Star Hawk, Sundance, Tail Gunner, War of the Worlds and Warrior. Removed previous samples-based sound [Couriersud, Aaron Giles]. Fixed crash on Windows when freeing netlist objects (plib\palloc.h). Added log() to plib\pfunction.cpp. Added parameter to varclock (devices\nlid_system.h). Align design VARCLOCK to AFUNC (devices\nld_system.cpp). Added 74113 and 74157 devices. Fixed 74121 clocking logic. Modernized 74164 and 74393 netlist TTL devices [Aaron Giles].
- 0.222              : Added lib\netlist\.clang-tidy, nl_interface.h, devices\nld_4013.cpp/h, nld_74125.cpp/h, nld_74161.cpp, nld_74163.cpp, nld_74377.cpp/h, nld_74393.cpp/h, nld_9310.cpp, nld_9316_base.hxx, nld_ne566.cpp/h, nld_roms.cpp/h, macro\nlm_roms.cpp/h, plib\penum.h, plib\pgsl.h, pmulti_threading.h, prandom.h, ptimed_queue.h, buildVS\nlwav.vcxproj, buildVS\nlwav.vcxproj.filters, solver\nld_matrix_solver_ext.h and examples\74125.cpp, nld_74393_test.c and zdiode.cpp. Removed netlist\buildVS\netlistlib.vcxproj.user, netlist\devices\nld_2716.cpp/h, nld_82S123.cpp/h, nld_82S126.cpp/h, examples\breakout.c, kidniki.c and vs.c. Fixed Clang-tidy warnings. Fixed some windows build issues in build\makefile. Added 74163 4-bit counter. Improved const-awareness and tidy changes. Identified a number of code locations which could accept const arguments. More code maintenance. Make some calls private which were public before. Eliminated functions which would be executed only once. Make terminal reference functions in twoterm.h return const. Clearly identify the use cases which need a non-const ref to terminals. Fixed "--cmd=listdevices". Broken for quite a while this is now working again (prg\nltool.cpp). Fixed documentation build on windows in makefile. Documentation should be created on Windows using make MinGW PARAMS=doc. Admittedly this is ugly and the makefile needs to be changed to use something like "make HOSTOS=windows doc". Fixed some edge cases in static compile. Comes with a new version of static_solvers.cpp. Added NE566 to netlist.lua. Added the NE566 as a macro device. The device can be found in nlm_other.cpp. Removed nld_ne566.*. Added SYS_SW, SYS_SW2 and SYS_COMP. These are single switch, alternating switch and a analog comparator with digital outputs. Renamed RES_SWITCH to SYS_SW. Added example ne566.cpp in netlist/examples. nld_log now writes out last value at end of run. Unknown parameters really should be fatal. Unknown parameters like Solver.ABCD now will cause a fatal error to be generated. Fixed unknown parameter on ne566 and VS 2019 build. Fixed a long standing bug in proxy/family code. This never materialized because proxies were always connected to GND in existing netlists (netlist\nl_base.h). Added simple ZDIODE model. The model is driven by three additional model parameters: NBV, IBV, BV. Example code how to define a typical 7.5V Zener diode: ZDIODE(ZD, "D(BV=7.5 IBV=0.01 NBV=3)") or NET_MODEL("A1234 D(BV=7.5 IBV=0.01 NBV=3)") ZDIODE(ZD, "A1234"). Changed license for netlists in examples to CC0 (public domain). Adding prandom.h (PseudoRandom Number Generator (Mersenne Twister)). Moving over to Clang-tidy-11 and enabling more warnings. Simplified pfunction state handling. Removed dependency on pstate.h. Added two noise sources. The two sources act as voltage sources, though noise may also be injected as conductivy or current noise. SYS_NOISE_MT_U: Mersenne Twister uniform noise and SYS_NOISE_MT_N: Mersenne Twister normal noise. nld_sys_noise is templated: Using NETLIB_NAME(sys_noise_mt_u) = NETLIB_NAME(sys_noise)<plib::mt19937_64, plib::uniform_distribution_t>;. Thus the approach is scalable. The implementation is state save aware, and thus reproducible results are guaranteed. An example use case is provided as well, see examples\noise.cpp. Restructered the save state system. This change makes state saving contract based. Objects which need to save state need to have the following template member: template <typename ST> void save_state(ST &st) { /* Example */ st.save_item(m_p, "m_p"); st.save_item(m_buf, "m_buf"); }. This member function is called when the object is passed to the state manager save function. Fixed two nlwav bugs. First one corrupted wav files produced on windows. The second one produced wrong sample integration results. New nlwav functionality: nlwav now supports 16 and 32 bit integer format (wav16s, wav32s) as well as 32 bit float format (wav32f). The "wav" format is no longer supported. Added support for high and low pass filtering the wav output. Dynamic volume adjustment (use "-a 0") --hpboost can suppress spikes at the beginning of the file (<10ms). The addition of the float format simplifies debugging significantly since it covers the whole dynamic format. Added nlwav to the local VS 2019 build. Added elif processing to preprocessor (plib\ppreprocessor.cpp). Moved nld_power_pins to nl_base.h. This removes a large number of dependencies on nlid_system.h. Reduced the usage of NETLIB_CONSTRUCTOR_DERIVED to implement dip package objects. This aligns the programmatic approach with the approach used in the macro folder, i.e. using netlists. Untangle model definition and interpretation as well. This changes are a first step in aligning models and families and thus simplify the source further. Fixed VCCS definition (netlist\analog\nld_fourterm.h). Removed family_setter. Naming alignment and family becomes model. Architecture cleanups. Reviewed reset logic. Pass truthtable family as string to factory. This is another set of changes on the path to align logic families and models. As a side effect, the object model now makes a clear distinction between analog models and logic models. The number of macros in nl_base.h has decreased significantly due to these changes. Provided more information for warning on connecting two terminals already on the same net. Logic devices now support model parameter. This a big forward to allow reuse of code. Still a longer way to go but the foundation there. Also brings quite a number of simplifications and dead code removal. Fixed output stage on NE566. Extended functionality and code cleanup: Working macro level parameters. Simplified code significantly. Fixed a number of hidden issue. Dead code removal. It is now possible to define netlist level parameters (see example). The code also has been prepared to allow something along the lines of LIBENTRY_MODEL(DM74LS00_DIP, DM7400_DIP, "LS74XX") to define a LS version on top of an DM7400_DIP bare TTL implementation. This however will need more efforts to existing devices to honour some timing adjustment in the model definition. It will already honour different output specifications between LS series and bare TTL if connected to analog components. Code cleanup to better separate the following stages: Parsing, setup and run. In addition preliminary native tristate support was added. Not yet production ready, please don't use it. Rewrote rom devices from scratch. This is a rewrite from scratch for rom devices. It uses a generic template to implement rom devices which is used together with a description struct to define a rom device. This leads to highly efficient code since all information is available at compile time. This is also a step forward to support tristate outputs. All rom devices covered by this approach have tristate or open collector outputs and thus all code changes to support tristate outputs can now be made consistently in one file. Added working 74125 and 74126 implementations. These tristate buffers natively support tristate outputs. For use cases with fixed enable inputs the devices support a parameter FORCE_TRISTATE_LOGIC which if being set to 1 makes the device behave like a logic output. Added additional syntax and consistency checks for tristate outputs. Updated the example and added dip implementations including documentation. Improved typesafety for source locations. During object creation netlist tracks the source files which provide object creation. This is later used e.g. by nltool to create documentation from source. Improved timing accuracy for sound devices. Better alignment between netlist_time and attotime. Simplified factory call structure. This change will make it a lot easier to add enhanced functionality to the factory infrastructure. Using integral constants also improves linking stability. Improved syntax of generic device descriptors. Added tristate support for rom devices. Rom and prom devices now properly support tristate outputs. Native OC output still on the todo list. In addition this commit fixes a number of bugs around dealing with macro level parameters and improves documentation by adding a parameter table. Also srcclean. Consolidate 9316-type counters. This needs more attention since for certain compilers there is a considerable performance degregation. It looks like this is only triggered if too many variants are declared in one cpp file and the compiler stops inlining (machine\xbox.cpp). Fixed performance issues and VC2019. For reasons unknown to me compile optimizations do not behave for template code. If the implementation is in separate compile units, the code compiles and performs. Better integretation of INT128. Also some minor optimisations bringing pong and breakout to previous performance. Moved penum into own header file (netlist\plib\penum.h). Pong (Rev E) [TTL] now peaks at 589% compared to 570% before. Amongst a number of improvements in nl_base.h and the 7493 was touched. Also has some code cleanup and hopefully faster compilation due to extern template declarations. Moved configuration entries into netlist namespace and netlist parsing where it belongs. Memory system cleanup. Fixed NVCC compile for 10.2. plists.h was splitted into plists.h, pmulti_threading.h and ptimed_queue.h. In addition removed plists.h from a number of files it wasn't used in. Certain minor adjustment needed to be made for CUDA toolkit 10.1 and 10.2. Refactored ppmf.h. Make more use of C++. Prepare coexistence of different delegate types. Untangle code. Reduced macro usage. Changed use of NETLIB_DELEGATE macro. The macro now has only one parameter, the local name of the delegate. Use callbacks to access terminals (debugger). Device factory enhancements. Factory elements can now pass additional parameters to device constructors. This makes the design of interface objects like analog callbacks easier. The change also allowed to remove some "deep" calls into the core from the MAME interface in netlist.h. Drop C++11 support. This wasn't working since the last factory changes. Removed it. Basically replace C14CONSTEXPR with constexpr. Moved multiparameter streaming into nl_interface.h. Clang-tidy, header order fixes. Enabled UTF7 filenames on windows. Fixed visibility of classes in nlid_system.h and tidy warning for penum. Reduced macro usage and make use of pstring UTF8. Fixed win float exceptions. More C++14, use enable_if_t instead of enable_if. Cleaned up the use of memory allocation arenas. Reduced MACRO usage, use std::conditional where possible. ppmf simplification. Arena code maintenance. Fixed MSVC build. MSVC has an issue with SFINAE and overloading resolution. A discussion can be found here: https://stackoverflow.com/questions/31062892/overloading-on-static-in-conjunction-with-sfinae. The previous code compiled with GCC and Clang on all platforms and compilers apart from MSVC. Replaced with double template specialization. Allow selection of base arena for pmempool_arena. Further optimize ppmf.h: Moved towards a pure c++ constexpr solution to derive the optimal pointer to member function solution. All the macro madness is centralized to a compile_info struct with static members. For the time being the evaluation result is compared against the previous approach. Going forward this will be dropped as well as the support for MINGW with GCC <= 4.6. Prepare path to non-virtual update functions. Fixed win32 compile and all targets without INT128 support. Improved static solver performance by 5%. Use a more condensed matrix format for go, gt and Id matrices. In addition, optimize the static compilation code. Make fostrm actually write to file. Performance improvement and refactoring: Kid Niki now achieves up to 910% when run with static solvers and with nltool. That is significant better than the 860% we have seen previously. This increase is driven by using a global memory pool in the solver code. In addition the following refactoring and code maintenance work is included. Please excuse the large commit, some of this took interfered with other work and the detail development steps were ugly. GSL support: This commit adds pgsl.h which implements a very limited number of the functionality of the gsl header described in the C++ core guidelines. Clang-tidy fixes. A significant refactoring of palloc.h. Aligned hints were removed, they added complexity without a significant performance gain. Vector operations should better be done on special spans/views. The code has been tested on linux with G++-7, G++-9, Clang-11. On Windows MinGW-10, VS2019 and OSX Clang-11. Fixed for some compilers not being CWG 1579 compliant (netlist\nl_setup.cpp) [Couriersud]. Faster LM3900 model (macro\nlm_opamp.cpp) [Colin Howell]. Fixed polarity issue in CCCS device. Note: This affects all use cases of CCCS [Colin Howell, Couriersud]. Stub implementation of 566 VCO. Added undef support to the preprocessor. Added support for empty #defines to preprocessor. Added detection and reporting of re-definitions (netlist\plib\ppreprocessor.cpp). Added 74377/74378/74379 devices to netlist. Re-do the 74377/8/9 as macros. Added missing TTL_74125 definition (netlist\macro\nlm_ttl74xx.h). Added 7421 device. Added 74393 device and unit test [Aaron Giles]. Added devices CD4013, CD4069 and CD4070 [Frank Palazzolo]. Fixed copy elusion bug on OSX and Clang < 8. Solution discussed with AJR in chat (machine\netlist.cpp and nl_setup.cpp) [AJR, Couriersud]. Fixed nltool build on CWG 1579-noncompliant compilers [AJR].
- 0.221              : Fixed netlist syntax errors (machine\nl_dpatrol.cpp). Fixed parsing of netlists by nltool. Reduced memory allocation calls in non-core code. Performance improvement. Fixed standalone build and doxygen mainpage (netlist\build\makefile and netlist\documentation\mainpage.dox.h). Improved performance up to 65% on audio netlists. This commit introduces precompiled static solver code. Due to additional optimizations the compiler can use because the detail calculation steps for the solution are known e.g. the kidniki netlist sees a 100% speed increase. In all environments (windows/*nix/osx) the source for the static solver code can be created using bash lib\netlist\nl_create_mame_solvers.sh. This will create lib\netlist\generated\static_solvers.cpp which is compiled into the MAME binary. The script is just a temporary workaround. The intention is that nltool whill be able to create this file with one call. There are other improvements in this commit speeding up the processing of timestep and dynamic calculations. Documented alternative approach to CD4016. The CD4016 is an analog switch IC. Document an experimental approach to implement the analog switch as a 3 terminal element which is completely being dealt with as part as the linear system. The intention was to improve convergence when the switch is in a feedback loop. One example are two-opamp tridiagonal wave generators. Unfortunately the approach did not work out and in addition was performing far worse than the net-separating original code. Also updated comment in nld_generic_models.h. Fixed linking order of netlist. Moved netlist between DASM and utils, expat,... link statements. This fixes the resolution of symbols in netlist code which may be used in machine\netlist.cpp. Changed tested on Ubuntu, Windows and MacOSX. Removed a FIXME in plib\pmain.cpp. Added parameter to split_paragraphs to allow passing in a custom line end string (plib\poptions.cpp). Basename function now accepts a suffix to remove (plib\putil.cpp). Move macros where they belong. Fixed a macro expansion bug. Fixed alternative LM3900 implementations (macro\nlm_opamp.cpp). nltool usage and static compile changes. This commit simplifies the creation of static solvers. For this to happen the following changes were made: nltool does no longer support the "-f netlist_file.cpp" option. All parts of netlist which used the option now expect the file to be specified after all other options. The static compile command now supports an "--output" option to specify the file to be created and accepts multiple input files. To be create the static solver file for MAME use the script provided or: nltool --cmd static --output=src\lib\netlist\generated\static_solvers.cpp. Updated documentation and examples provided by nltool --help. Removed code duplication. Clang-tidy, srcclean and pedantic warnings fixed. Code maintenance on plib\pfunction.cpp. Compile time improvement and code maintenance. Added a define NL_USE_ACADEMIC_SOLVERS and disabled it in the build. This will not compile in solvers which are either illustrative or only perform for large sparse matrices like GMRES. Simplified object structure a bit. Code maintenance and edge case fixes. "Edge cases" are compiles were the floting point type used for the core may be different from the one used by solvers, e.g. double/float. This does not happen in MAME, here currently this is always double/double. Since floats are better suited for GPUs whose double performance is limited it was time to review the code. This commit fixes warnings about type conversions and precision loss. In addition there is better support for INT128 and FLOAT128. The MAT solver has seen some minor performance increases. Fixed a segfault happening only under for certain netlists (netlist\nl_setup.cpp). This seems to be a compiler/standard library issues. Documentation update (netlist\documentation\mainpage.dox.h, primer_1.dox.h and test1-50r.svg). Documented trapezoidal capacitor integration (netlist\analog\nld_generic_models.h). Improved readability. The purpose is to make clear what is actually done and to reduce usage of calls to update. Unify solver calls. Calls to the solver used different paths. These changes unify these calls and provide a common call for discontinuous state changes on analog components (change_state) [Couriersud].
- 0.220              : Added netlist\examples\turkey_shoot.cpp and turkey_shoot.csv. Use initializer_list in object_array_t. Added constructor which accepts a format string for object names. Started work on logic_input8 which provides 8 logic outputs. Added sampled output format to netlist\prg\nlwav.cpp. Using this output format nlwav will pick point samples at regular intervals from log files. This can be used to e.g. calculate RGB output levels with netlist. Use netlist to calculate RGB values for Turkey Shoot. This example shows how the netlist tools can be used to derive RGB tables from a schematic. All steps are given in netlist\examples\turkey_shoot.cpp. Fixed inductor calculation. Updated turkey shoot example to skip start-up swinging of L1/C60 LC circuit. Recording now starts at 1ms. Document linearized diode model in the range exceeding maximum dissipation (netlist\analog\nld_generic_models.h). The intention is to have a faster convergence but this yet not really is observable. Changed MB3614 outout impedance (netlist\macro\nlm_opamp.cpp). Documented alternative opamp output stage (netlist\analog\nld_opamps.cpp) [Couriersud].
- 0.219              : Minor update to audio\nl_zac1b11142.cpp. Fixed issues with parsing netlists (solver\nld_solver.cpp), CMOS switches (4066/4016) and inactive code-path (macro\nlm_opamp.cpp). Added current controlled voltage source (CCVS). Fixed/Extended SPICE format conversion. "nltool -c convert -f UA741.mod" now runs without errors. UA741.mod is the official TI SPICE subckt for the 741 opamp. This commit fixes a number of issues and adds linear POLY support for E/F SPICE models. Fixed some Clang lint warnings. Removed dead code. Experimental parser code to allow calculations in parameter value. This already works for compiled netlists. These changes are currently disabled. Updated Pong netlist to work with this new code. Make gain parameter mandatory for controoled sources. Fixed crash in infix function evaluation. Fixed parameter update recalculation. Parameters evaluated when netlist is created. Parameters are now passed to the netlist core as strings. During netlist creation they are evaluated as functions. This opens the path to parameters on subdevice level. Examples: PARAM(device.XY, (1+2*0.005)); RES(R1, 2.05*RES_K(1)+1). In addition the commit contains dead code removal. Changed ptime operators to align with C++ textbooks. Code symplification and bugfixes. Fixes performance regression and net_splitter struct and nltool time measurements. pstream simplification. Spice-to-netlist conversion sync with MAME/discrete. This is work in progress. The aim is to remove all hacks in netlist conversion going forward. Align nltool -c convert with mame\discrete\README.md. Removed dead code. Fixed lint warnings. Make spice netlist conversion more flexible. Implemented changes to controlled sources. Added support for pots to spice conversion (tools\nl_convert.cpp). Added min and max to netlist\plib\pfunction.cpp. Turn off alignas for -Wattributes on ARM. Changed output impedance to more realistic values (netlist\nl_base.cpp). Fixed log file option in nltool. Updated VS files for standalone build [Couriersud]. Fixed plib\pstring.h VISUAL C++ compiling [StephanTLavavej].
- 0.218              : Added audio\nl_konami.cpp/h and devices\nld_4006.cpp/h. Removed netlist\devices\nlid_cmos.h. Force invalidation of save states. Added netlist version information. This is used to enforce the invalidation of save states when the major/minor netlist version changes. This catches edge cases for which neither the size or names of saved items changes during releases. Dead code removal. Code maintenance. Introduced an additional absolute time type netlist_time_ext to identify whether absolute or relative time is used in the netlist code. Extend ptime code to allow operations between ptime derived types with different internal types. In addition rewrote main queue serve loops. Adds a very small performance increase. Make sure diodes step enough (netlist\analog\nld_generic_models.h). The diode model uses log-stepping as proposed in "Circuit Simulation" (Farid N. Najm) page 183. If the previous voltage was sufficiently negative the new voltage after a log step could not have increased enough to alter matrix and rhs vector. This bug surfaced in stuntcyc video signal mixing which uses a diode for the composite signal. Moved some functions to pmath. Increased the time resolution from 1 nano second to 100 pico seconds. Make sure that icount and netlist internal time are better synched by tracking the remainder of the division. Fixed the netlist sound device. There is a one sample overflow every 13 seconds at 48000 Hz due to integer truncation which is now ignored. Added more doxygen documentation. Fixed overclocking and building with 128bit integers. Checked and fixed conditional compile paths. Simplified memory allocation. Generalized signal handling. Fixed 741 opamp representation. Implemented KONAMI filters using netlist into galaxian.cpp. This change improves accuracy and scalability. Added some notes about M51516L amplifier. Removed pthrow trampline as proposed by Vas. Identified throwing code by adding noexcept(false). Moved "connected term" information to setup code. Added CD4006 and CD4070 devices. Added TL084 opamp model. Clock now supports proxies, i.e. can be connected to analog devices. Fixed netlists using CLOCK. Added some comments. Fixed prg\nlwav.cpp [Couriersud]. Workaround for a bug in MSVC (https://github.com/mamedev/mame/issues/6106). __VA_ARGS__ are expanded to a single token in MSVC, all other compilers expand to a list of tokens (netlist\plib\putil.h) [Couriersud, Firewave].
- 0.217              : Moved nl_examples folder to src\lib\netlist\examples. Changed visibility to private for some members. Interesting observation to note: Since MAME 0.208 bench 30 results for pongf increased from 450% to 580% [Couriersud].
- 0.216              : Added netlist\devices\nld_7492.cpp/h and nld_7442.cpp/h. Changed netlist\plib\pparser.cpp/h to ppreprocessor.cpp/h and ptokenizer.cpp/h. Preprocessor enhancements. The builtin preprocessor now behaves closer to CPP: Supports macro parameters (i.e. define x(a) a), stringification (i.e. define x(a) #a) and concatenation (i.e. define x(a) a ## _ext). In addition, error reporting now provides a source context including the include history. Code maintenance. Removed code no longer used. Added noexcept where appropriate. Splitted pparser.[c|h] into ppreprocessor and ptokenizer. Smaller optimizations, e.g. use of std::size_t. Fixed lint warnings. Improved localized storage. Removed some trampolines. Fixed some bad design in netlist solvers. Moved solver stuff into separate namespace. New namespace "solver". Minor ptime modifications. Align matrix population along the various solvers and deleted dead code. Added ability to compile using float instead of double. Specifically the solver as well as the infrastructure now can have their own floating point type. Currently this is only an academic exercise since numerically demanding circuits like kidniki only work with double/double support. Using float here is pushing numerical stability over the limits. The long term design goal is too have the matrix type (double/float) being a parameter. Converted constexpr constants into constexpr inline functions. Fixed a bug in the parray constructor. Replaced NL_NOEXCEPT with noexcept where appropriate. Support for float, double and long double solvers. Added new solver parameter FPTYPE. This determines in which floating point domain the linear system is solved. May be one of "FLOAT", "DOUBLE" or "LONGDOUBLE". Added option "--fperr" to nltool. This enables floating point exceptions. This helps debugging the code under gdb. The purpose of this going forward is to have more choice in optimization. Non-dynamic systems should be just fine in the float domain. Dynamic systems (i.e. diodes, bjts, mosfets) should in general work with double. Certain edge cases may require long double resolution. Added RELTOL/VNTOL solver parameters. Type safety. The newly added RELTOL and VNTOL parameters implement Newton convergence checks comparable following other SPICE implementations. The ACCURACY solver parameter now is only used for convergence checks in iterative solvers. In addition, type safety was significantly improved and a lot of "magic" numbers are identifiable now. Improved readability. Renamed cast member of the constants struct to magic to clearly identify magic numbers. Introduced nlconst struct inheriting from plib::constants<nl_fptype> to make code better understandable. Added __float128 support. float128 is a GNU extension delivering true 128 bit floating point support. Separates code out into pmath.h and pstonum.h. Optimized pfmtlog.h a bit. Switched nl_pongf and nl_rebound to dynamic timestepping. Pong (Rev E) and Rebound (Rev B) now runs about 20% faster than previously. Explicitly raise exceptions instead of leaving this to log.fatal(). Correct a number of cppcheck findings. "nltool -c docheader" now scans sources and creates usage focussed doxy documentation for devices. Very early stage, but works. For an example, please see ne555 source. Started migrating to pure C++, i.e. "//" comments. Added cppcheck configuration to netlist/build. Switch to VS 2019 community and fix standalone build. First steps on the way to calculated parameters. This commit is a first step towards using formulas in parameters, i.e. MAINCLOCK(clock, 20 * 30). The intention is to improve readability and scalability. Since device registration already provides all necessary information about parameters, the code to create an include file for all devices has been improved. Long term, this will remove the need for device specific header files. In addition going forward devices will accept either no connections or all specified connections, i.e. TTL_7400_NAND(name, chip1.2, chip2.3) or TTL_7400_NAND(name)NET_C(...)NET_C(...). This will allow to remove all duplicate definitions which are currently necessary, i.e. TTL_7400_NAND/TTL_7400_GATE. Moved memory pool to netlist_state_t. Added memory allocation stats to verbose output. nl_assert no longer throws, first step to remove NL_EXCEPT macro. Fixed a code in the netlist creation which caused multiple proxies to be created for output->terminal connections. A nice side effect of this fix is a performance increase ~9% for kidniki and ~4% for pong. Speaking about pong ... maximum is 490%. Dice is running at 280 FPS/60 FPS = 466%, however without any analog emulation. Replaced NL_NOEXCEPT with noexcept. assert is now exception-free. Proxy and power terminal hack removal: Devices ttlhigh and ttlhow are no longer automatically created. All logic input devices (e.g. TTL_INPUT, LOGIC_INPUT) now need to have their power terminals (VCC, GND) connected. This opens the route for more appropriate proxy devices but comes at a cost. If the connections are omitted your circuit will not work as expected. Example: LOGIC_INPUT(I_SD0, 1, "AY8910PORT")  NET_C(VCC, I_SD0.VCC)  NET_C(GND, I_SD0.GND). Removed proxy information from terminal objects. This was replaced by a lookup hash whose life-span does not exceed netlest setup. These changes enable the removal of a number of hacks from the source going forward. Removed DUMMY_INPUT. NC (not connected) pins should now use NC_PIN. If a NC_PIN is actually connected, an error will be logged and validation will fail. Enabled "extended" validation. This will catch now if power terminals are not connected. Added const and noexcept where appropriate. Fixed the 7414 Schmitt-Trigger device to use nld_power_pins. Added VECTOR support: Fixfreq now supports VECTOR screens automatically. For now the default remains to be RASTER since BGFX does not support VECTOR screens. Nevertheless please expect changes in the video output. Video output is now collected timing-exact, i.e. with subpixel accuracy. Only during screen_update this is converted and scaled to the bitmap. There may be changes due to rounding in comparison to current rendering [Couriersud]. Added 7492 Divide-by-12 Counter and 7442 4-Line BCD to 10-Line Decimal Decoder [Ryan Holtz].
- 0.215              : Added plib\pstrutil.h. Moved nl_lists.h classes to plists.h. Removed netlist\plib\pchrono.cpp, pstate.cpp and pstream.cpp. Changed machine\nl_pongd.cpp/h to nl_pongdoubles.cpp/h and nl_pong.cpp/h to nl_pongf.cpp/h. Switch to C++ streams. Removed the home-brew implementation pstreams and replaced those with C++ streams. Fixed a number of minor issues and warnings. Removed const on return types. Moved more code in headers and deleted some cpp files. Code simplification. Fixed SUBMODEL. Moved to strongly typed matrix sort constant. Extend maximum matrix size to 512x512. Optionally do parallel processing based on total operations. Templatize GMRES solver loops. Avoid duplication in solver parameter code. Matrix sort type is now a parameter. Use unique_ptr where possible. GMRES update and new preconditioner. Maintenance and lint fixes. Improved code readability and simplifications. kidniki uses frontiers again (speed improvement). Separated solving linear systems from underlying matrix (netlist\plib\mat_cr.h). Moved netlists out of driver code into audio\ or machine\ as nl_xxx.cpp files. Identified and documented extended validation. Optimized the core queue dispatching logic. Minor performance increase. Fixed a number of bugs in parray. Now parray<double, 0> will be purely dynamic allocation with the number of elements passed in the constructor. Added noexpr where appropriate. Simplified the queue. After the recent string of updates pongf performance increased again. Some fixes for the aligned memory operations. Solver now uses dynamic allocation on systems larger than 512x512. Added support for line markers to the preprocessor and parser and for include processing to the preprocessor. Moved sources base type to plib to be used for preprocessor includes. This enables to include e.g. from rom memory regions [Couriersud]. Fixed a compilation bug under Clang-CL (netlist\plib\putil.h) [Nathan Woods]. Fixed std::array initialisation with GCC5 in netlist\prg\nlwav.cpp, stop suppressing -Wterminate now that asserts are really asserts [Vas Crabb].
- 0.214              : Added nl_examples\7414.cpp, cccs.c, cs.cpp and vs.c. Added simple oscillator with 74LS14 and voltage and current source test. Removed a lot of C library use and instead use C++. Improved pstring compatibility to std::string. Prepare removal of pstream. Prepare move to C++ streams and later std::string. Fixed more lint and Clang pedantic warnings/errors. Fixed some bugs [Couriersud].
- 0.210              : More structure for caches. Added power terminals to most logic devices. This fixes an over simplification. Logic devices implicitly assumed that GND/VDD actually is connected to GND(i.e. 0V). There is no immediate benefit from this change. It is a preparation for the future scalability. Now all power terminals (typically 7/14, 8/16) have to be explicitly connected to the supply rails. Also added a validation mode to the netlist core. This is not intended for running, but solely to better indentify pins which are not properly connected. Bug fixes and nltool validation. nltool now supports a validate command which acts similar to MAME's validation. Use A,B,C,... for packaged components. Runtime performance statistics can now be enabled with nltool option "-s". To enable those with MAME you need to run NL_STATS=1 ./mamenl64 -v -oslog game. Minor optimization (netlist\nl_base.h and plib\pconfig.h). All pstonum calls now need to specify if they want local locale or the "classic" "C" locale. Fixes MAME exception with -debug on Linux with some non-C locales. Fixed memory leak when exception is thrown in constructor (plib\palloc.h and pmempool.h). Fixed Clang build (Clang treats -Wswitch-bool as error) (netlist\nl_base.h). rotected defines in nl_config.h with ifdefs. Added a define to disable queue statistics during compile. This is only needed during development. Documented performance improvement efforts so I don't try this again. Moved truth table implementation of 7448 in macro. At the same time added power terminals and update game netlists accordingly. Converted NL_MAX_LINK_RESOLVE_LOOPS into a netlist parameter. Reduced potential bit-rot. nltool -v --version now displays values of all compile time defines. There are still far too many compile time defines. However, most of them ensure and test future scalability. Only print queue stats if they are enabled (netlist\nl_base.cpp). Fixed SLOW_BUT_ACCURATE mode (machine\nl_breakout.cpp) in Breakout [TTL]. Fixed include order and logging queue stats. OMP defines belong into pconfig.h since pomp.h - used by netlist - depends on them. Provided example for state in truthtable. The truthtable implementation of 74107 (JK-Flipflop) is included for educational purposes to demonstrate how to implement state holding devices as truthtables. It will completely nuke performance for pong and therefore is disabled. Switch to output array in devices\nld_9316.cpp. Fixed a warning in plib\ppmf.h. Fixed CMOS 40xx and 4316 power pins and GCC-9 error. Removed base_dummy class and fixed CD4020 VCC/VDD. netlist_time array -> std::array (devices\nld_74161.c and nld_7474.c) [Couriersud]. Don't assume constructors will only throw things derived from std::exception (plib\palloc.h) [Vas Crabb].
- 0.209              : Added nl_examples\cmos_inverter.cpp, nmos_fet.cpp, LM3900_test.cpp, netlist\analog\nld_generic_models.h and nld_mosfet.cpp/h. Added MOSFET model. Currently capacitances are not modelled. This is a 3-pin model (bulk connected to Source) with provisions to extend it to 4-pin at a later stage. Added a capacitor generic model which is charge conserving. Switch netlist to use this model instead of constant capacity model. Start putting constants into a central place. Note: Please expect minor timing differences due to a different numerical path. The cmos inverter example illustrates the analog implementation of a cmos inverter gate. These were used a lot back in the 70s/80s to generate sinus waves. The model should also be able to better emulate 4066 analog switches. The addition of a relatively simple capacitor model is planned at a later stage. Expect everything from the MOSFET model at the current stage. Wrong results as well as convergence issues and crashes. Improved MOS transistor model. This is a significant improvement to the MOS transistor model. It added modelling of the Meyer capacitance model. This is a somewhat academic addition since the effects occur on a nanosecond time scale and have a huge impact on performance. I plan to make the capacitance model selectable. Both on a model level as well as by introducing a global solver parameter. The model delivers comparable results to LTSpice. Timing bug fix. Affects regression tests. This fixes a rounding issue in the ptime code. This bug surfaced when I tested netlist with picosecond resolution in ptime. This will have a small impact on every driver using netlist. Forbreakout, it required to adjust the color overlay. Added global parameter to disable semi-conductor capacitance modelling. Added global NETLIST.DEFAULT_MOS_CAPMODEL parameter. Setting this to zero disables using capitance modelling in mos models. On a per mos device basis this can be achieved by adding CAPMODEL=0 to the model definition, e.g. MOSFET(X, "NMOS(CAPMODEL=0)"). Improved MOSFET convergence by using log-stepping. Refactored model code. Move generic models into nld_generic_models. Added nld_generic_models.h to netlist.lua. TYPE=2 opamp model and MB3614 fixes: Untie diode code. Fixed some typos. Added TYPE=2 opamp model which omits output voltage limitation. Useful for determining causes of non-convergence. Fixed MB3614 opamp parameters to match datasheet. MB3614 function controlled VARCLOCK and other improvements: Fixed MB3614 parameter. Added VARCLOCK which derives step size from function. Optimized function handling in CS and VS. Fixed a bug in ppreprocessor. Added trunc to pfunction. Added opamp_amplification_curve to derive characteristic amplification curve. Added LM2902. LM3900: Align LM3900 pin names with other opamps. Added a better voltage clamping model. Added high precision model (disabled due to performance). Adjusted LM3900 model, fixed clipping in Zaccaria. Added more SPICE elements to the conversion code. Improved and fast LM3900 model: LM3900 model 3 only has half the number of BJTs compared to model 1. But delivers comparable results for Money Money. Model 3 follows the datasheet. I left code for Model 0 and 2 in for educational reasons. Fixed Mario Bros LM3900 regression (audio\nl_mario.cpp). Added frontiers to netlist audio and fixed AY8910 interfacing. The setup needs AY8910_RESISTOR_OUTPUT. Frontiers boosted performance (audio\nl_zac1b11142.cpp and zaccaria.cpp). Clang lint fixes and pedantic warning fixes. Bug fixing: Fixed sound route dependency. Added "K" as a valid Kilo multiplier. Fixed current source parameter update. Modernized interface. Added palestra, testpat and cocoloco to mamenl subtarget (scripts\target\mame\nl.lua and mame\nl.lst). Improved netlist initialization in drivers. Added skeleton drivers to mamenl build (a1supply.cpp, aleisttl.cpp, bailey.cpp, chicago.cpp, electra.cpp, exidyttl.cpp, fungames.cpp, meadwttl.cpp, monacogp.cpp, pse.cpp, ramtek.cpp, segattl.cpp, taitottl.cpp and usbilliards.cpp). Added validation support to netlist device. MAME -validate now also checks all netlist devices. It does this by constructing a temporary netlist. This commit also fixes some memory leaks and a bad bug which surfaced in validation. Improved validation code. Adjusted warning levels and fixed a number of topics identified. Scalable error messages. This approach uses functors for logging messages [Couriersud]. NET_C(GND, CASSA) no longer relevant now that LM3900 saturates (audio\nl_zac1b11142.cpp) [Vas Crabb].
- 0.208              : Added nl_examples\2N6027.cpp. Prepare further optimization. Moved fillmatrix to matrix solver base class. More alignment related refactoring. Tidy changes and better constexpr support for ptime class. Analog readability refactoring. Changed the sign of go (or in other terms a12 and a21 matrix stencil elements). This should make further optimization of matrix population easier. In addition hopefully improve the readability of the code by sacrifying overloads for more verbose member names. Cosmetic changes (mostly indentation). Improved readability. Memory code refactoring. Fixed running any machine using netlist components back to back from UI will cause fatal error. Fixed reset bug in 555 device (nld_ne555.cpp). Added reverse parameter to 3-pin-potentiometer (nlid_twoterm.cpp). Fixed Breakout [TTL] paddle regression. The interesting parts in datasheets are always those which are not mentioned. Migrated Rebound [TTL] from DICE. Added all missing elements, discrete startup logic, credit LED, missing start and coin discrete elements and missing paddle elements. Fixed bugs in start and coin logic and ensured it matches schematics. Replaced HLE by discrete elements. Documented PCB connector [Couriersud]. Note: DICE Project: http://sourceforge.net/projects/dice/ and Rebound manual https://archive.org/details/ArcadeGameManualRebound. Fixed artificial clicks in streaming sound device (machine\netlist.cpp). Fixed bug in LOGIC_INPUT devices (devices\nlid_system.h). Now 'FAMILY' parameter is actually used. Also fixed bugs in code using this device (audio\nl_kidniki.cpp and nl_zac1b11142.cpp). Added output resistance to NE555 (devices\nld_ne555.cpp). This is a first-order approximation of the output driving stage. A logic output with appropriate family may be better but would add more complexity. Added MC1455P as device. Fixed formatting bug. Added UJT example for 2N6027 (Programmable Unijunction Transistor; nl_examples\2N6027.cpp). Added B-E and B-C capacitance to EB model. Despite the overhead - two devices more per transistor - this addition significantly reduces computing time on switching conditions by reducing the needed Newton-Raphson loops dramatically. Refactor model code [Couriersud].
- 0.207              : Added netlist\plib\gmres.h. Moved plib\mat_cr.h to solver\. Removed solver\vector_base.h. Changed plib\palloc.cpp to lib\pmempool.h. Refactoring and some innovations. Still some work ahead to separate interface from execution. This is a preparation to switch to another sparse matrix format easily which may be better suited for parallel processing. On the linear algebra side there are some nice additions: Two additional sort modes: One tries to obtain a upper left identity matrix, the other prefers a diagonal band matrix structure. Both deliver slightly better performance than just sorting. Parallel execution analysis for Gaussian elimination and LU solve. This determines which operations may be done independently. All of this is not really useful right now. The matrix sizes are below 100 nets. I estimate that we at least need four times more so that CPU parallel processing overhead pays off. For GPU, add another order. But it's nice to have code which may scale. Code maintenance and fixing Kid Niki to run at acceptable speed again. Removed trampoline code. All devices now specify parameters in factory constructor. This previously was part of net_lib.cpp and repeatedly caused bugs. Refactoring and some functionality enhancements. Removed dead code. nltool now adds a define NLTOOL_VERSION. This can be tested in netlists. It is used in kidniki to ensure I stop committing debug parameters. Optimized the proposal for no-deactivate hints. Documented in breakout that hints were manually optimized. Minor optimizations in the order of 2% enhancement. Aligned solver calls (netlist\devices\nld_4066.cpp, nld_4316.cpp, nld_mm5837.cpp, nld_schmitt.cpp, nld_system.cpp and nlid_proxy.cpp). Optionally store input values instead of referencing them. Useful for debugging purposes in the end - but not performance. Store input values in logic_terminal_t: Set to 1 to store values in logic_terminal_t instead of accessing them indirectly by pointer from logic_net_t. This approach is stricter and should identify bugs in the netlist core faster. By default it is disabled since it is not as fast as the default approach. Refactoring after adding Clang-tidy support to netlist makefile: Converted macros to C++ code. Order of device creation should not depend on std lib. Some state saving cleanup. Added support for Clang-tidy to makefile. Modifications triggered by Clang-tidy-9. More CPP core guidelines work. Make constants struct members constexpr const. Enabled GCC diagnostics in vector ops for GCC 7 again. Use forwarding in vector_ops. Added parameter STARTUP_STRATEGY to switch between startup strategies. This determines the order of device triggering: 0: Full - trigger all delegates. Next all devices not touched, 1: Backwards - trigger all devices backwards (only update delegate) and 2: Forward - trigger all devices forward (only update delegate). Fixed crashes on certain hardware/library combos. At least on MacOSX memory used by an object seems to be invalidated before the dtor is executed. This of course is deadly for child objects with references to the parent-in-deletion which may call back into the parent. One of the worst issues I had to fix. Ever. Lesson learnt: No tricks in dtors. Never. Indentation cleanup (plib\palloc.h). Memory allocation clean-up. Memory pool now supports aligned storage. Set USE_MEMPOOL to 1 to try this (max 5% performance increase). For MinGW, there is no alignment support. This triggers -Wattribute errors which due to -Werror crash the build. Separation of duties. Make it clearer what is used during parsing a netlist, "compiling" a netlist and execution of a netlist. Refactoring startup process and array usage. Removed locked-in context from sources. Fixed access specifiers. Memory management in plib is now alignment-aware. All allocations respect C++11 alignas. Selected classes like parray and aligned_vector also provide hints (__builtin_assume_aligned) to G++ and Clang. The alignment optimizations have little impact on the current use cases. They only become effective on bigger data processing. What has a measurable impact is memory pooling. This speeds up netlist games like Breakout and Pong by about 5%. Tested with Linux, MacOSX and Windows cross builds. All features are disabled since I can not rule out they may temporarily break more exotic builds. Fixed visibility issues and more issues reported by tidy. Fixed some more exotic compile options. 128bit integers on kaby lake are not that much slower than 64bit. This may be an option for MAME's attotime as well. Moved ptime struct into plib namespace and fixed relative includes [Couriersud].
- 0.206              : Added lib\netlist\.gitignore, plib\parray.h and devices\nld_7497.cpp/h. Fixed incorrect order of constructor parameters in netlist_mame_int_input_device (machine\netlist.h). Fixes audio in Mario Bros., probably others too [Ryan Holtz]. Added gitignore to lib\netlist. Also clean up doxygen genereated files in netlist makefile (netlist\build\makefile). Improved readability (machine\netlist.cpp). Code maintenance and fixed "pure virtual call" error. More C++ alignment. pstring now behaves like std::string. This change removes all string extensions like trim, rpad, left and right from pstring and replaces them by function templates. This aligns a lot better with the intentions of the standard library (machine\netlist.cpp, nl_base.cpp, nl_parser.cpp, plib\pfmtlog.cpp and nltool.cpp). Rewrote and simplified tiny bits. Fixed inappropriate use of netlist_sig_t for non-boolean values (nld_7474.c, nld_7483.cpp, nld_7493.cpp, nlid_truthtable.h, nl_base.cpp/h and nl_config.h). Added 7497 netlist device. The 7497 device should now work as described in the TI datasheet. This datasheet contains an internal schematic with details on gates and D flip-flops used [shattered, Couriersud]. Fixed TP1983 and 7497 and added 7497 DIP version. The schematic for the TP1983 contains an error. R19 is connected to GND. This will never work since when Q goes low, the reset pulse will dead lock Q to low. R19 needs to be connected to VCC (5V). This will generate the proper high-pass filtered pulse. Further fixes for the 7497 as well. C++ and minor performance optimizations. Improved type safety on string->numeric conversions. 5% performance improvement for Breakout [TTL] from a single device (devices\nld_82S16.cpp). Moved mainclock code from nl_base into header of nlid_system. Also moved some simple functions from nl_base.cpp into header. Improved dealing ownership in pstreams. Replaced ATTR_UNUSED by C++ template. Re-enabled LOG_STATS. Added && and || operators to preprocessor expressions. Fixed logging during object construction. Improved type safety for parameters. Replaced downcast with static_cast to avoid errors. Refactored netlist creation. This is an effort to separate netlist creation from netlist execution. The primary target is to avoid that code which will only run during execution is able to call setup code and thus create ugly hacks. More run/setup separation. Still some distance ahead in properly separating execution and setup. Added NVCCBUILD support to netlist makefile. Also converted some by-ref calls to pass by value. Removed const on return types and non-necessary ref-by. pstream and ppreprocessor (now a pistream) refactoring. nlwav now also converts log files to VCD format. Please refer to nlwav --help for examples. There is also an example how to create multi-channel wav files. Added comment processing to preprocessor. Comments are now processed in the preprocessor. Previously directives in multiline comments were processed. Refactor code for better scalability and flexibility. These changes aim to remove some of the duplication of code in the various solvers. Tested with GVV-7 Clang-8 and nvcc-9.2 [Couriersud].
- 0.201              : Added netlist\devices\nld_dm9314.cpp/h and nld_tms4800.cpp/h. Added netlist for a large portion of Atari Gran Trak 10 schematics (1974) - still not working [Felipe Sanches].
- 0.196              : Fixed issue causing drivers using netlists to fail on the Emscripten target (netlist\plib\pdynlib.cpp). Disable multithreading on the Emscripten target as it is not currently supported. Fixes e.g. drivers using discrete audio components (scripts\src\main.lua and osd\osdsync.cpp) [Justin Kerk].
- 0.195              : Fixed assertion when debugging in Visual Studio (netlist\plib\pstring.cpp). Fixed is_set() when generic_function is an int array (netlist\plib\ppmf.h) [smf]. Disabled netlist statistic logging on shutdown, because it triggers a use after free in void device_debug::errorlog_write_line(const char *line) & fixed the copy & pasted comment (netlist\solver\nld_solver.h).
- 0.187              : Added Zaccaria driver to mamenl build [Couriersud].
- 0.186              : Added netlist\plib\pomp.h and netlist\devices\nld_schmitt.cpp/h. Changed Solver.PARALLEL parameter logic: 0 = Parallel processing of solvers disabled. 1 = One processor parallel processing. Can be used to measure OPENMP overhead. >1 = Solve n analog subnets in parallel. Previously, all available processors were used which caused performance to degrade on hyperthreading. Netlist refactoring: OPENMP refactored. All OPENMP operations are now templatized in pomp.h. We don't need thread-safe priority queue. Event code updating analog outputs now runs outside the parallel code. Reordered members to be more cache friendly (devices\nld_7493.cpp and nld_9316.cpp). Cleanup of solver code. Various code alignments across solvers. Added Cheeky Mouse to mamenl build. Fixed state saving for pfunction lfsr. Fixed debug assert in many drivers using netlist (netlist\nl_setup.cpp; atarittl.cpp, hazeltin.cpp, m62.cpp, mario.cpp and pong.cpp) [Couriersud].
- 0.185              : Turn psring iterator into a real forward iterator that works with standard algorithms. There are a few changes to achieve this: * Renamed to const_iterator since it's immutable. * Typedef iterator to const_iterator for now as there's no mutable iterator. * Added default constrcutor and operator-> required by concept, const-qualify operators. * Removed operator+ and operator+= since it's not a random-access iterator (use std::next and std::advance instead). * Return reference/pointer to a proxy rather than a code_t value from opertator*/operator->. The final change is required to meet the requirement that operator* for two equivalent forward iterators return an equivalent reference. The pstring doesn't actually contain a sequence of code_t, so there's no way to return a reference to code_t directly. Instead, a reference to a proxy object aliased on the string storage is returned. The proxy is implicitly convertible to code_t. The most noticeable side effect is that auto c = *s.begin() or for (auto c : s) won't work. You need to do for (auto &c : s) or for (code_t c : s) instead [Vas Crabb]. Changed pstring to use std::string as storage container. This removes all allocation code from pstring. const_iterator is consequently now based on pstring::const_iterator. Removed pstring_buffer. This was class wasn't a good idea. Vas was right: This change did not impact runtime performance. Startup performance (string intensive) increased. Use char32_t were appropriate. Fixed pedantic Clang warnings. pstring, pdynlib, pfmtlog refactoring: pstring: Added support for UTF16LE to pstring. Renamed size() to mem_t_size(). Renmaed len() to length(). Added size() == length(). Added empty(). Added simple compare(). pfmtlog: Simplified pfmtlog, added more C++. pdynlib: Added a dynproc type to dynlib to wrap dynamic library calls. Various: Fixed two coverty scan issue. Various Clang warnings fixed. Netlist code refactoring: More use of C++ features. Some CRTP in pfmtlog. Demangled code for truthtables. Use more constexpr. Rewrote main loop. Use default constructors and assignment operators were applicable. Optimized 7448 and 9316. All of this has decreased startup time by approx. 25% to 30%. Complex netlists like pong or kidniki are parsed, analyzed and constructed in around 15 ms. Run performance has increased by about 5%. All in all not to bad. A game like pong uses a clock of 7 MHz (after division by 2). that's 14 MHz clock invocations. Running at over 200%, 28MHz. On a 3.9 GHz Machine about 140 cycles/clock change. Refactored 74715 to one device layout. Removed subdevice. Parametrized device activation in truthtables and minor optimization (devices\nlid_truthtable.h) [Couriersud].
- 0.184              : Slightly improved event timing if state changes. Also introduce a push_force call to reschedule already pending events if the state will not change. Clean up net_t interface and increase readability. Improved readability. Added more C++11 noexcept and swap semantics. Also fixed Clang-5 warnings and VS2015 compile. Added a heap priority queue to the netlist source. This is currently not used since performance drops by about 40%. The typical use case would be circuits a lot more complex than those we currently emulate where the 2*log(n) advantage really applies. Fixed netlist stats collection. Code refactoring: Small improvement for 7493. Converted 9316 from subdevice to delegate. Converted 74107 from subdevice style to delegate. Also refactored inconsistencies in other parts of the code. Netlist refactoring: Align timed_queue closer to std::priority_queue. Use uint8_t in extended clock for better memory usage. Minor changes to nl_breakout.cpp. Fixed some Cppcheck and Clang warnings. Fixed -Winconsistent-missing-destructor-override warnings. Made some constructors of template classes and classes with virtual .. = 0 methods protected. Fixed openmp compile (solver\nld_solver.cpp) [Couriersud].
- 0.183              : Added netlist\analog\nlid_fourterm.h, nlid_twoterm.h, netlist\buildVS\netlist.sln, netlistlib.vcxproj, netlistlib.vcxproj.filters, netlistlib.vcxproj.user, nltool.vcxproj, nltool.vcxproj.filters, netlist\netlist_types.h, nld_74164.cpp/h, machine\nl_prodigy.cpp/h and layout\prodigy.lay. Changed nld_fourterm.cpp to nlid_fourterm.cpp, nld_twoterm.cpp to nlid_twoterm.cpp, and nld_truthtable.cpp/h to nlid_truthtable.cpp/h. Added infix notation parsing to the function parser. Netlist refactoring: Refactored netlist pmf code. Small optimization for diode calculations. Minor refactoring across the board. Removed virtual from some destructors and make them protected. Various cleanups. Small performance improvement. Fixed some inconsistencies. More C++ refactoring. Fixed netlist code generation. Fixed compile on some unknown compiler (netlist\plib\pstring.cpp) and Visual Studio (plib\pfunction.cpp). Cleanup of includes. Fixed warning about non existing memory space when netlist is used as an additional cpu. Fixed bug which caused (MESS) Hazeltine 1500 to crash. Reduced overhead to load data (roms) in netlist significantly. The previous solution involved a significant amount of redundant replication of information and objects. Now, a rom name specified as SOMEROM(x21, "romlabel") will automatically be loaded from region "netlisttag:romlabel". Examples are (MESS) Hazeltine 1500 and Stunt Cycle [TTL]. Fixed a hidden bug in the GMRES solver and more optimization. Logging enhancement: For netlist device debugging one can now use #define LOG(...) log().info(__VA_ARGS__) to use debugging and the known #define LOG(...) do {} while (0) do disable debugging on device level. To avoid bitrot one could as well use #define LOG(...) log().info.log<true>(__VA_ARGS__) and #define LOG(...) log().info.log<false>(__VA_ARGS__). The later disables debugging. If the compiler can assume that there are no side effects from e.g. using foo(a/b), 'LOG("abc {1:04x}", foo(a/b));' should be completely optimized away. Log channels available are info, verbose, warning, error and fatal. Don't use debug, it is enabled only on specific debug builds. Use would be e.g. LOG("abc {1:04x}", 2); The format specifier in the string are enclosed in "{}". "{2}" is the second parameter after the format string. Types are determined automatically. "{3:04x}" would format a number as a hexadecimal with 4 leading zeros. Rewrote mat_cr_t to include data as well. Fixed some bitrot in other parts. Simplified solver creation. Separated include file usage for netlist. Device implementations (all cpp files in netlist/devices) now should only include nl_base.h. Netlist implementation sources should only include "net_lib.h". Refactored netlist.h and netlist.cpp to avoid namespace congestion in netlist.h. Fixed VC2015 build. Fixed crashes on terminals without nets (i.e. connected to a rail). Reviewed "FIXMEs" and correct some minor ones. Made m_cur_analog protected. Fixed pmf delegates to work with MSVC. More optimizations to the solver code. Started work on a better signal pipeline in nlwav. Only generate documentation for entities which are documented. Some documentation work. Set default models for devices missing them. Fixed standalone makefile to work in MinGW environment. Doxygen work. Added constexpr and noexcept. Fixed 9322. It is now possible to have multiple handlers per device for updates. This will make device implementation more flexible and faster. A nice side-effect is that there was some minor (<5%) performance increase already. Each input is now assigned a notification handler. Currently this is update, but going forward this may be a custom handler. In addition: Fixed MEMPOOL on OSX. Removed dead code. Avoid bit-rot. Added delegate support for emscripten and arm processors. Added delegate support for VS 2015 x64. Make sure netlist includes are not found directly on include path. Instead, they have to be prefixed by "netlist/". Removed unneeded link librariers for nltool and nlwav along the way. Make windows builds of nltool and nlwav understand unicode. nltool and nlwav now use wmain, i.e. UNICODE main on windows. Reorder include order to comply with best practices. Added state saving and loading to nltool. Save states are needed for regression tests going forward. Added standalone VC2015 build file in lib\netlist\build. This was the last platform without standalone compile. Sure needs more attention, grateful for any help. Moved inline constructors from header to cpp. Moved from <cstring> to std::copy and friends. Optimized 7493 device. Gives some 5 to 10% improvement to Pong. 7493 also is an example on how to use multiple handlers on a device makes design easier. Reworked Netlist truthtables: Moved 9312 and 74279 to TTL macro library. Renamed TTL_9312_* to DM9312. This is more appropriate. Fixed a number of warnings from latest Ubuntu Clang-5.0 [Couriersud]. Explicitly #include C++ headers for features use [h3xx, Vas Crabb]. Added 74164 (8bit parallel output serial shift register). Added BCD display netlist for (MESS) Prodigy chess computer [Joakim Larsson Edstrom].
- 0.182              : Added netlist\devices\nlid_proxy.cpp/h, macro\nlm_base.cpp/h, plib\pexception.cpp/h, plib\pfunction.cpp/h, solver\nld_matrix_solver.cpp and netlist\nl_errstr.h. Added LM747, LM747A and 2N2565 [Vas Crabb]. Roms now specify an identifier in the netlist. The identifier is used to load data from a source_t implementation. This allos a consistent approach in netlists independent of netlist implementation. Both sources code and parameter code needed quite some rewrite to support this. Fixed nullptr exception and loading roms in two devices. Added "-r" option to nltool to pass path to a folder containing rom files. Multiple "-r" options may be given. Zip files are not supported, just individual files. Fixed bug in 74123. Make Mario Bros. sound netlist compiling again. Fixed 74629 and some internals. Moved proxy code into separate file. Some preparation for future changes on proxies and chip families. Analog to digital proxy rework. Properly handle connected inputs when creating a-d proxy. Aligned a-d proxy to d-a proxy class structure. Align noexcept usage. Rename register_con to add_terminal for clearity. Changed cstr() ==> c_str(). Hook up Luigi walking sound in netlist mario sound implementation. Mario driver now uses netlist audio implementation instead of discrete implementation. The previous discrete sound emulation has not been removed yet because it still contains a lot of documentation. Simplify code. Introduced consistent approach to loading macro devices. Changed nltool "listdevices" command accordingly. Fixed some bugs which surfaced by this exercise. Refactored factory. Use namespace "factory" instead of prefix factory_ all over the place. Fixed parsing of macro devices. Update to input definition file (nl_examples\congo_bongo.csv): Create congo bongo sounds with ./nltool -c run -t 10 -i nl_examples/congo_bongo.csv -f nl_examples/congo_bongo.c -l RO.1 and convert to wav with ./nlwav -i log_RO.1.log -o t.wav. Sounds played are: GORILLA, BASS_DRUM,CONGA_H, CONGA_L, RIM0 and again GORILLA. Added FREQ parameter to MM5837 noise generator. Specs in datasheet range from 24000 Hz to 56000 Hz. Properly use VDD for output reference voltage. Fixed pin assignment 4001. Added SIGFPE enabling code to plib\pexception.*. Moved plib exceptions into these files as well. The code uses <cfenv> which is part of C++11 standard. Non-standard glib extensions are currently only used on linux and (i386 or x86_64). Fixed some pedantic Clang warnings. Fixed Clang "-Wno-weak-vtables" warnings in netlist source. Refactored code along the way. Make destructors virtual on base classes. intX_fast_t may depend on compiler implementation and thus is not suited for save states. Fixed startup when there are no timestep devices present, i.e. capacitors or inductors. Removed parameter GS_THRESHOLD and misleading solver parameters. It is now outdated. Make stop be called again. Fixed METHOD parameter. No need for a virtual stop which is needed only by the solver. Reduced memory footprint for parameters. Moved netlists into macro folder. nlwav now accepts stdin and stdout: cat log_RO.1.log | ./nlwav | play -. Removed gnd() method. Fixed potential reset and initialization issues. Fixed timing issue in CD4538. Added "pow" (power) to the function model. Added code to remove devices connected only to rail terminals. Prepare source for consistent error message usage. Introduce a more structured approach to models. Added more documentation to diode and bjt model. Moved analog devices into "netlist::analog" namespace. Added documentation to opamp model. Preparation work for automatically generated include file for devices. nltool now is able to create all defines from the factory definitions. This will reduce the number of places needed to touch when adding devices and always ensure that the parser and statically compiled netlist code use the same syntax. This will enable us to delete most device include files, e.g. nld_74107.h. Netlist usage to create this header file: ./nltool -c header > src\lib\netlist\devices\nld_devinc.h. This is not yet used in production. It will be enabled after additional tests. Keep track were registry elements are created. Register all devices using NETLIB_DEVICE_IMPL. Fixed encoding issue. Refactored reverse polish notation evaluator into own source files. Added function parameter to current and voltage sources VS and CS. You can now use those to e.g. produce a sine wave. Changed code to allow devices to optionally be treated as dynamic or timestepping devices. Converted warnings and fatal log messages to constants. Also refactored some code to ease the exercise. Default argument on plib::environment now optional. Assume string literals are UTF8 in netlist code. At the same time, any char pointer has to be explicitly converted to pstring by specifying an encoding. Not yet optimal, but certainly better than what was there before. Removed unneeded methods from pstring. Make streams provide binary access only. Use putf8_reader and putf8_writer to actually access streams. Replace some char * parameters with pstring where appropriate. Minor code refactoring and move functionality were it belongs [Couriersud]. Added skeleton drivers to nl.lst (commented out) [Stiletto].
- 0.181              : Added netlist\devices\nld_2102A.cpp/h, nld_2716.cpp/h, nld_4316.cpp/h, nld_74161.cpp/h, nld_74165.cpp/h, nld_74166.cpp/h, nld_74174.cpp/h, nld_74194.cpp/h, nld_74365.cpp/h, nld_7473.cpp/h, nld_7475.cpp/h, nld_7485.cpp/h, nld_82S115.cpp/h, nld_82S123.cpp/h, nld_82S126.cpp/h, nld_9322.cpp/h, nld_am2847.cpp/h, nld_dm9334.cpp/h, nld_tristate.cpp/h, nl_examples\diode.c, norton_opamp.c, rc.c and rl.c. Added simple ROM hookup capability. Device additions: 74161 Synchronous 4-Bit Binary Counter with Clock. 7473 Dual Master-Slave J-K Flip-Flops with Clear and Complementary Outputs. Am2847 Quad 80-bit Static Shift Register. DM9334 8-bit Addressable Latch. 82S126 1K-bit bipolar PROM device. 74174 Hex D-Type Flip-Flop with Clear. 2716 16 Kbit (2048x8) UV EPROM. 74166 Parallel-Load 8-Bit Shift Register device. 74260 Dual 5-Input NOR Gate device. Intel 2102A 1Kbit (1024 x 1) Static RAM. 74365 Hex Bus Driver with 3-State Outputs. Generic 2- and 3-terminal Tristate device. Note: Tristate device and 74365 do not actually tristate, they are simply a way of combining multiple outputs + chip enables. Added shared RAM pointer, for use by netlist RAM devices which need updating by non-netlist driver code. Various fixes: 7473: Made device only transition on a falling clock. 74161: Inverted Clear and Clock inputs to match datasheet. 74260: Fixed number of inputs. Am2847: Fixed shift register size (was 160 bits, should have been 80 bits). DM9334: Inverted C and E inputs to match datasheet. Added netlist-based video board emulation to (MESS) Hazeltine 1500. Added 74165, 74194, 7475, 7485 and DM9322 devices. Added 82S126 4kbit (512x8) TTL bipolar PROM. Added 82S123 256-bit (32x8) TTL bipolar PROM [Ryan Holtz]. Added uA741 in 8-, 10- and 14-pin DIP variants (netlist\macro\nlm_opamp.cpp). Added 4316 bilateral switch pack [Vas Crabb]. Added inductor to netlist and some files to nl_examples. Fixed 74107 and 74107A timings to typical values. Leave more comments on differences between 74107 and 74107A. Added proper connection information for a number of chips to net_lib.cpp. This allows to parse and run (MESS) nl_hazelvid.cpp using nltool: nltool -t 1 -f nl_hazelvid.cpp [Couriersud].
- 0.180              : Fix up pstring code: Instantiate static constant members for ODR context. Declare static members of template classes properly. Declare external template instantiations. Fixed blind use of autocomplete ("treats" really?). Fixed ptype_traits on platforms where char is unsigned. Signed char is never an alias for char even if char is signed. Even if eclipse doesn't like using type, surely it supports typedef [Vas Crabb].
- 0.177              : Minor include cleanup. Fixed a memory hole caused by assign operators. More C++. Added doc target to netlist makefile. Removed old style cast. Use noexcept in netlist code where appropriate. Use macro NL_NOEXCEPT if debug builds would throw an exception (e.g. by using nl_assert). This is not entirely safe. Going forward, nl_assert should call log first and than throw. Fixed noexcept and NL_NOEXCEPT to pass G++ 6.x builds. Added target MinGW to standalone netlist makefile. Added a preliminary parser for RINF netlist format [Couriersud].
- 0.176              : Added netlist\build\doxygen.conf, netlist\documentation/doc.css, mainpage.dox.h, primer_1.dox.h, structure.dox.h and test1-50r.svg. nltool now accepts -Ddefine=value to pass on to netlists. Improved option handling and added "dummy" options to add grouping and examples in help output. Improved --cmd=listdevices output. Fixed dynamic timestepping. This will work with breakout using real capacitor modelling instead of delay devices. Really slow, but very useful to calibrate timings. Fixed an awful bug in timing for delay devices. Switched to Clang 3.8 and made code compile with -Weverything -Werror -Wno-old-style-cast -Wno-padded -Wno-weak-vtables. -Wno-missing-variable-declarations -Wno-conversion -Wno-c++98-compat. -Wno-float-equal -Wno-cast-align -Wno-global-constructors. -Wno-c++98-compat-pedantic -Wno-exit-time-destructors. -Wno-format-nonliteral -Wno-weak-template-vtables. This was a helpful exercise since it brought forward some serious issues with implicit constructors. Added more RAII and improved exceptions. Fixed some bugs in parser code. Removed trampolines (OUTLOGIC, INPLOGIC and friends). Started using doxygen comment and documentation style. Added doxygen files to documentation folder. Refactored code triggered by doxygen output. Moved internal and support classes into namespace detail. Use an anordered map in parser. -Wconversion fixes - All done now. Fixed -Wold-style-cast warnings in netlist code. Added iterators to pstring. Moved two macros, added more RAII and improved exceptions. Fixed some bugs in parser code. Fixed a number of bugs in parser code and exception handling [Couriersud]. Fix for netlist library when built for WINDOWS with UNICODE defined (netlist\plib\pdynlib.cpp). When UNICODE is defined LoadLibrary is redefined to LoadLibraryW which expects a widechar string as library name, while libname is always UTF8. Fixed copying TCHAR conversion code from strconv.cpp since netlist is meant to be also a stand-alone library [Giuseppe Gorgoglione].
- 0.175              : Added netlist\devices\nlid_cmos.h, nlid_system.h and netlist\plib\putil.cpp/h. Removed netlist\nl_util.h and netlist\devices\nld_cmos.h. Moved all parameter definitions in constructors. Make netlist compile with C++11, use own implementation of make_unique to avoid C++14. Removed dependency on osd_ticks. Converted palloc and friends into templates. Moved code into separate plib namespace. Stop using underscore _names, they're reserved for compiler/system. Minor cosmetic refactoring. Added a "uninitialised array" template to allow in-place creation (for increased locality) of netlist classes. Main use is in truthtable class. Removed PLIB_NAMESPACE macros. Removed namespace macros. Use explicit namespace declarations. Moved device definitions into cpp files. Moved more device definitions into cpp files. New prefix "nlid" for include files flags purely internal include files not to be leaked into userland. Fixed factory code. Added constructors to prepare to move terminal setup into constructor. Reworked twoterm setup. Fixed some timebombs along the way. Fixed r2r dac. Remove dead code. analog_outputs now created in constructor. Moved analog_input creation into constructor. Moved logic output creation to constructor. Moved all logic inputs into constructor. Completely removed init_object - finally. More code cleanup: Dead code removal and minor refactoring. Simplify. Align naming with stl. Fix somed pedantic warnings. More STL compatibility. Removed ATTR_HOT and ATTR_COLD. Refactored netlist_time. Fixed long standing workaround which would ignore policy of change-only" propagation. Rewrote for loops to use auto : semantics. Truthtable cleanup. Get rid of nl_math. Remove nl_util.h and moved contents to plib\putil.h. Fixed standalone build. Refactor ptypes.h. Merged netlist_dev branch, all code_refactoring: Object model optimisation. Merged remote-tracking branch 'origin/master' into netlist_dev. Default PHAS_PMF_INTERNAL=0 for 32bit windows MinGW. Changed UINT8 to uint_[fast|least|8_t. Moved state_var so it can be used by base devices as well. Removed last traces of ATTR_ALIGN. Refactored netlist_time into a template. Removed implicit double assignment to netlist. Doomed to produce bugs. Instead, use netlist_time::from_double. Switch to using proper (i.e. bool type) param_logic_t. Formally differentiate between logic inputs (e.g. switches) and int inputs (e.g. resistor ladders or selection switches). Added parameter USE_DEACTIVATE to truthtable devices. Added more constexpr to netlist_time. Fixed some ifdef code paths. More C++. Simplify main processing loop. As a nice side-effect that squeezed out some cycles. More cycle squeezing. Removed pvector_t. Use std::sort. Refactored netlist state manager. Introduction of state_var object template to be used on device state members. Changed remaining save occurrences to state_var. Rewrote nltool's listdevices command. This allowed removal of one member from devices which served solely for listdevices. Remove hashmap_t. Fixed kidniki regression. Replaced shared_ptr by unique_ptr. Better seperation of setup_t and netlist_t. Fixed bugs in rdtsc code. Refactored timer code. Simplify conditional activation/deactivation. Introduced HINT(device, hint) to clarify that hints are inheritent and not specific to devices. Added improved profiling support to netlist. Statistics output now proposes devices for which whole device activation/deactivation be disabled. No significant improvement for pong, but breakout experiences a 10% improvement. Moved options code from include to cpp file. Minor modifications to 7493 and 9316. Introduced perftime_t and perfcount_t for gathering statistics. These templates do not create any code if statistics are not kept. Make help2man ./nltool produce usuable output. More truthtable refactoring. Removed half-finished code for internal state support. As implemented, this would have had no support for timing delays. Added explicit to constructors to avoid bad surprises later. Srcclean on netlist files. Avoid the merge massacre [Couriersud].
- 0.174              : Removed netlist\devices\nld_7402.cpp/h, nld_7404.cpp/h, nld_7408.cpp/h, nld_7410.cpp/h, nld_7411.cpp/h, nld_7420.cpp/h, nld_7430.cpp/h, nld_7425.cpp/h, nld_7427.cpp/h, nld_7432.cpp/h, nld_7437.cpp/h, nld_7486.cpp/h and nld_signal.h. Converted most subdevices to unique_ptr. This is a temporary measure until the device initialisation is moved into the constructor. Started converting constructors of devices to be passed name and netlist. Implemented 7402, 7404, 7408, 7410, 7411, 7420, 7425, 7427, 7430, 7432, 7437 and 7486 as macro device. Removed nld_signal.h since netlist devices no longer use it. Some minor changes towards C++11. Simplify object model by removing default_logic_family(). Added Mario Bros. to MAMENL target (mame\nl.lst). Renamed connect_direct to connect_post_start to reflect usage. Align object registration syntax. A step towards late creation of devices. Code simplification. Don't include netlist name in device names (netlist\nl_setup.cpp). Devices are now created after the netlist was parsed. This enables us going forward to move everything in start() into the constructor and get a much cleaner object model. Some use of share_ptr to ease memory management. More automatic memory handling. Continuing work to move object initialization from start to constructor. Removed family_t. All of this can be determined at runtime from object as well. As part of this, the "template" to write devices has changed. Converted a number of devices to use the new template. Improved memory handling in factories. More memory timebombs removed. All netlist devices now follow new syntax. Removed dead code. All sub devices are now forced to be initialized in the constructor. Device setup now completely in constructor. Removed start call [Couriersud].
- 0.173              : Added netlist\plib\pdynlib.cpp/h and netlist\solver\nld_ms_gcr.h. Visual Studio 2015 netlist fix (src\netlist.lua and solver\nld_ms_w.h) [dankan1890]. Added m62(kidniki) to nl.lua. Started some experiments around parallel solving of linear equations. This code is not active. Fixed Kid Niki audio performance. Minor changes, mostly signed comparisons and adding includes for dependency documentation. Solver model simplification. Use C++11 features to use more templates. Use templates in nl_math. Replaced macros with templates (netlist\nl_base.h and plib\pstate.h). Get rid of some init_object calls. netlist_t no longer descends from netlist::object_t. Moved solver members to proper place. Minor code changes. Recover from creating solvers by copy paste. Significant speed improvement: Added a new solver using compressed row format. Fixed sorting. As a result, netlist performance on kidniki nearly doubled. The performance increase is mainly due to the fact that sorting decreases the number of operations for gaussian elimination of the kidniki matrix from ~7800 to 707. In addition, compressed row format improves L1 usage. Simplify solver infrastructure. Implemented dynamic loading of precompiled solver code [Couriersud]. Fixed type mismatch in netlist\solver\nld_solver.cpp. This fixed OpenMP-enabled builds fail to compile MT06170 [Jindrich Makovicka].
- 0.172              : Added netlist\solver\nld_ms_sm.h and solver\nld_ms_w.h. First steps to move towards C++11. Base plist on std::vector. Replaced pstack with std::stack. Removed pnamed_list. Use c++ "for each" in a number of places. Fixed two "time bombs". Removed GCC pragmas. These caused problems with MS compiler. Renamed plist_t to pvector_t to clarify origin. Some code simplification. Netlist code maintenance: Renamed netlist_analog_t to analog_t. Straighten object model. Reduced access to member variables. Use pvector<analog_net_t::list_t> for groups. Simple Coverity (software) fixes. Prepared code so that matrices can be allocated in one chunk of memory. Fixed Kid Niki sound speed. Make more class members private. Simply solver code. Removed ATTR_HOT from solver code. Make virtual members protected. More code optimization. Hide matrix_solver_t implementation. Use netlist_time for time deltas. Fixed pivoting and float usage. First version of Sherman-Morrison solver + some notes. Fixed crash in stat output when no calculations were run. Added Woodbury solver. Removed sorting from Sherman-Morrison solver. It doesn't help [Couriersud]. Use std::atomic in netlist\nl_lists.h with OpenMP [Vas Crabb].
- 0.171              : Added a BC548 transistor model (netlist\devices\net_lib.cpp). Make Zaccaria 1B11142 sound board a device in preparation for netlist sound. Moved Zaccaria 1B11107 board into audio\zaccaria.cpp so it can share common stuff with 1B11142 [Vas Crabb].
- 0.169              : Made netlist compile as separate without C++11 or higher deps requested by Couriersud [Miodrag Milanovic].
- 0.168              : Fixed typo in scripts\src\netlist.lua [Miodrag Milanovic].
- 0.166              : Added netlist\plib\pfmtlog.c/h and ptypes.h. Some pedantic netlist changes. Moved netlist from emu to lib. Removed last traces of printf from plib. Reorganized some code [Couriersud].
- 0.165              : Added netlist\build\makefile and netlist\plib\pstream.c/h. Improved MB3614 parameters. Changed some opamps to type "idealized" (type 1) in Congo Bongo netlist and got 50% speed improvement. Added simple stream classes to netlist code. Added emu\netlist to include dirs to avoid relative paths in netlist include files. Removed relative paths in include statements. More usage of streams and aligned exception use. UTF8 support for pstring. Opted for a scalable solution which should be easily extensible to UTF16 and UTF32 as well. All position related operations now operate on char code positions instead of byte positions. Make netlist more typesafe. Added a pformat class to reduce sprintf usage. The approach is also suitable for translated strings with arbitrary positioning of parameters. Removed vsscanf from netlist. Changed default format for double to "g". Changed UINT16 - UINT64 to generic types in pformat. Some netlist_time maintenance. Straightened code using it and added support for 128 bit resolution on systems supporting it. This is however disabled since all platforms I know don't have native support but emulate 128 bit. Converted USE_PIVOT into runtime option PIVOT. Fixed some issues for nl_double == float. Increase performance from 53% to 69% for matrix size around 30x30. These matrices are e.g. used in Congo Bongo without optimisation. Created a separate logging class. Netlist code should now be at least 98% type safe. No more fuzzing around with SIZEFMT and friends. Changed formatting to use python style format strings. Moved nltool.c and nlwav.c into netlist\prg. Added netlist\build\makefile. This allows netlist to be ripped out of the tree and to compile it standalone [Couriersud].
- 0.164              : Added netlist\devices\nld_mm5837.c/h, netlist\macro\nlm_cd4xxx.c/h, nlm_other.c/h, nlm_opamp.c/h, nlm_ttl74xx.c/h, nl_examples\congo_bongo.c, congo_bongo.csv, mm5837_noise.c, vs_cs.c and tools\nlwav.c. Code maintenance. In addition, added a parameter to select iterative solver. Fixed UTF-8 conversion (netlist\solver\mat_cr.h and netlist\tools\nl_convert.c). Disable "-Wmaybe-unitialized" warnings (netlist\solver\vector_base.h). Improved Kid Niki sound quality while maintaining speed by adding more frontiers. Added LOGIC_INPUT to netlist which allows to specify a logic family, i.e. output characterics. Used this for improved AY8910 port modeling. Netlist now compiles with -std=c++98 -Wall -Wpedantic -Wextra -Wno-long-long -Wno-variadic-macros and -std=c++11 -Wall -Wpedantic -Wextra. Added Voltage source and Current source to netlist. Added macro object registration and dynamic includes to netlist. This allows the creation of macro libraries going forward. Any IC which can be described by a truthtable and a package wrapper can now be entirely described in netlist syntax. Identify size_t usage in printf by enclosing the argument in SIZET_PRINTF(). This is typesafe, can be identified and allows to use proper 64bit computing with compilers up to it. Added CD4538. Added MM5837 Noise Generator used by Congo Bongo (nl_examples\congo_bongo.c and mm5837_noise.c). Fixed issues with GCC4.0 mentioned by Barry. Added two more models to netlist: OPAMP: Generic opamp model. This does all the annoying calculations. Just pass the datasheet values. LVCCS: A limited current voltage control current source. This will allow slew rate limiting going forward. Added a (small) parallel conductance to all capacitors to improve convergence. Some initial work to use "long double". Created macro libraries for CD4XXX and 74XX chip families. Going forward, these will contain all devices which can be described using truthtables and DIPPINS. Align naming conventions of CD4XXX series. Moved CD4000/CD4020 DIP definitions to macro lib. Added macro library for opamp models. Added a phashmap_t object for faster lookups. Aligned builtin device identification with parser device identification. Changed phashmap_t to dynamically resize hash table. Use hashmap for factory searches. Changed case for parameter "model" to uppercase to align with rest of code. Added quiet flag to nltool. More phashmap_t usage. Quite some nice effect on larger netlist startup time. Hash objects can now deal with arbitrary hash width. Consolidate the scattered model parsing code. Now models support recursive models, e.g. DIODE("1N914(IS=1e-15)"). Removed ".model" from model definitions. Added nlwav to tools. nlwav converts netlist logs into wav files. Example usage: "nlwav -i netlist.log_RO.1.log -o tt.wav" and "nlwav -h". Added a input control file for Congo Bongo netlist. This file is a standard csv file specifing times and values of parameter modifications for specified devices. This file triggers the various sound inputs using a 10ms impulse. Use "nltool -f nl_examples/congo_bongo.c -t 8 -l RO.1 -i nl_examples/congo_bongo.csv" to create a netlist log file of the Congo Bongo mixer stage. Use "nlwav -i netlist.log_RO.1.log -o tt.wav -a 17000" to create a wav file tt.wav from the log file using an amplification factor of 17000. Moved MC14584B to netlist\macro\nlm_other.c/h. Added macro models of LM324 and LM358. Made Kid Niki use those (audio\irem.c). Fixed a buffer overflow in sound\discrete.c [Couriersud]. Fixed build without OpenMP (netlist\solver\vector_base.h) [Balrog]. Fixed GCC 4.6 compile (solver\vector_base.h) [Dirk Best].
- 0.163              : Added netlist\solver\mat_cr.h, nld_ms_gmres.h, vector_base.h, netlist\tools\nl_convert.h and nl_examples\kidniki.c. Removed netlist\analog\nld_ms_jakobi.h. Moved all files in src\emu\netlist starting with p into plib folder. This is a first step to ease synchronisation with a stand alone, e.g. outside mame, netlist implementation. More signed/unsigned cleanups and started work on generic truthtable devices. Introduced user definable truth tables: This enables the addition of devices without changing the netlist source code and allows the creation of libraries. Used pong.c as a proof of concept for the time being. Got truthtable parsing working in the parser. The plib preprocessor now defines __PLIB_PREPROCESSOR__. This can be checked in netlist code and allows even more sharing code between compiled (embedded) netlists and external netlists. Use netlist().log() for logging instead of printf. This avoids the printf issue with I64u (aka SIZETFMT) on win builds. Added first version of a eagle to netlist converter. Commit omitted nl_convert.h. Renamed "find" to find_by_name inH pnamed_list for clarity. Fixed OpenMP by using spinlocks in push_to_queue. However no observable performance improvement. Without OpenMP, locks will not be compiled. Removed a couple of inlines and added consts were appropriate. Netlist now uses the same approach as delegate.h to derive member function pointers. If the platform doesn't support this approach, virtual function calls will be used. In addition, this commit contains modifications for standalone compile. delegate.h now supports MinGW 32 bit builds with INTERNAL configuration. Member functions are called in this case using __thiscall ABI. Code maintenance. Removed commented out directives. Fixed save states in netlist. Converted netlist into a library. Moved most code from nl_convert.h to nl_convert.c. Targets using netlist must now specify this explicitly with MACHINES["NETLIST"] = true. Added subtarget "nl" which only contains games with netlist elements. Found some cycles by removing static declarations in some functions. Changed the way NETLIST_START(NAME) is located and called. This is done now solely by using a netlist_sources_t class. Netlist users just register sources like memregions, hardcoded strings, compiled netlists. Going forward this enables to eventually put macro model librariers into roms. The improvement comes with a price. Compiled netlists to be included must now be registered using LOCAL_SOURCE. Fixed proxy savestates, solver savestates, 7490 both counts firing at the same time and changed timed list to be resizable. Fixed bugs in the spice(Kicad) conversion. Fixes submodel difference between inline and parsed netlist. Added truthtable 7404 and 7486 models. Aligned input and output naming for truthtable and specialised 74xx models. Made it more convenient to add frontiers (impedance barriers). These - at the right place - enable netlist to split a netlist into multiple smaller netlists. Side mark: The "old" discrete system assumed such a device in every node. From 45% to 60% to 99%. That's the improvement achieved for a 89x89 audio matrix mostly solved by elimination. Cleaned up some code as well. Fixed a bug in the SOR solvers. Added a GMRES solver to netlist. The generalized minimal residual method ist certainly more modern than Gaussian elimination and Gauss-Seidel. However, more the current maximum matrix (KidNiki, 89x89) a combination of Gauss-Seidel to solve for maximum one step to catch quasi-stable conditions and fall-back to optimized Gaussian elimination (for sparse matrix) outperforms GMRES by up to 100%. Netlist code now uses "namespace netlist". At the same time, moved all devices int netlist::devices namespace. Completely integrated the GMRES solver into netlist solver templates and recoded it from scratch. GMRES now runs at 122% (kidniki), that's a real improement from 60% before. AT the same time, the code should be easier to read and closer to the GMRES algorithm. Ultimately, kidniki will not use this solver but instead use some frontiers to keep it playable. But going forward, for larger matrices this solver is an opton. Moved solver code into own folder. Fixed reset for proxy devices. In addition, documented how to achieve a reliable voltage stop criteria in gmres solver [Couriersud]. Fixed compile on MSVC (struct and string in struct had same name) (tools\nl_convert.c) [Peter Ferrie]. Added Kid Niki sound board netlist to nl_examples. Currently the netlist boils down to a 87x87 matrix. This is due to a total of 6 opamps which all are submodels and thus add their own internal nets. Gauss Seidel iterative solving comes to it's limits. nltool runs this at about 50% speed on my machine. Given the complexity this is quite good. Yet, any M62 game currently will not be playable [Andrew Gardner, Couriersud].
- 0.162              : Added devices\nld_truthtable.c, netlist\analog\nld_ms_jakobi.h, nld_ms_sor.h and nld_ms_sor_mat.h. Removed nld_ms_gauss_seidel.h. Don't call outside of netlist in case of noise introduced by solver. Optimized nld_74175.c, nld_82S16.c and nld_9316.c netlist devices. Added LED models. Fixed a bug in the solver code (netlist\analog\nld_solver.c). Minor speed improvements and some timing adjustments (devices\nld_74175.c, nld_74192.c, nld_82S16.c, nld_9310.c, nld_9316.c and drivers\nl_breakout.c). Some class structure cleanup (devices\nld_system.h, nl_base.c/h and nl_setup.c). Improved 9312 device ==> 20% speed increase. Removed netlist_state_t ==> no added value. Removed dead code in solver. Various minor modifications. Performance monitoring now also displays stats for subdevices. Fixed save-state issues and save state in 9312. Added EXTCLOCK which can generate arbitrary timing patterns. Use two EXTCLOCKs to replace timing circuit (9316) in Breakout. This gives a speed increase from 60% to 75%. Cleanup of the solver system. Moved all experimental stuff into nld_ms_sor_mat.h to have a production solver. Renamed Gauss-Seidel to SOR since it is actually a SOR with omega = 1. Separated matrix and right-hand-side calculation. Aligned register_sub to follow the same calling convention as other register_* calls. Aligned logic_family usage across objects. Fixed timing of DICE compatibility capacitor delay (netlist\nl_dice_compat.h). Removed netlist_ttl_input_t and netlist_ttl_output_t. The logic family is governed by the chip and defaults to TTL. However individual devices may change the logic family of their inputs and outputs as well. Implementing special output/input characteristics of "S", "LS", "HC", ... you name it, devices is now pretty easy. Theoretically e.g. a "LS_HighPrecision" proxy could be used to model the output down to the transistor level. Introduced a nl_math static class to have all math related functions in one place. This is a portability exercise, e.g. log1p is not supported on all platforms. Fixed recursive call in nl_math. Straightened some code. Fixed soft reset due to wild BJT_SW oscillations Downsized nld_signal.h to one template. Some minor changes improving performance by some notches. Always compile nl_asserts to avoid bit rot. Adjusted monitor gain for Breakout. Fixed SOR criteria. Finally got USE_DEACTIVE_DEVICE to work with Breakout as well. This adds about 10% to 20% performance. In addition, increased timing accuracy for deactivated devices. However still, there may be timing inaccuracies which certain circuits may not tolerate. Disabled for now. Added netlist-level parameter NETLIST.USE_DEACTIVATE. Device deactivation optimisations can now be enabled within the netlist provided the circuit can deal with them. Fixed TTL output levels. The old ones assumed maximum currents. This fixes latch operation in Breakout. Added truthtable implementations to a number of devices. The combination of device activation, usage of GCC PMF extensions and truthtables brings breakout to 95% speed up from about 75%. Fixed NE555 initial state. Avoid header file congestion and prepare for external generic truthtables. Added device deactivation for 7486 and truthtables for 7437. Truthtables in the 7448 don't work with Pong if device de/activation is enabled. Savestate works. Truthtable device deactivation fixed. Truthtable ignore mask is now determined by a better approach identifying more ignore possibilities. Removed c99-type usage of non-const arrays. Attempt to fix warning reported by Cowering (devices\nld_9316.c). Made netlist code compile with "-Wextra -Wdouble-promotion -Wno-unused-parameter". Rewrote nl_dice_compat.h so that it can be used to support DICE to netlist syntax conversions. Example script included in the header. Started working on SPICE to netlist conversion. nltool can now convert simple SPICE netlists e.g. from LTSpice to netlist format. Added a parameter to various calls to indicate we are doing a newton-raphson. Added parray_t. Added stop virtual method to devices to be able to log statistics outside of destructors. In addition replaced printf by netlist().log(...). Removed netlist_input_t and net_output_t. Instead introduced netlist_logic_t and netlist_analog_t. Afterwards refactored proxies. This enabled more flexible connection parsing. In addition, connections between two inputs are now parked and retried after all connections were made. The netlist code now correctly parses. Fixed netlist crash on i386 32bit platforms (netlist\nl_config.h). Cleanup includes in header files, reworked memory allocation and header optimisation. Fixed a number of -Wpedantic messages in netlist. The netlist code and nltool can now be again compiled without MAME. Added a simple options class for this purpose. Only use _mm_malloc when compiling netlist standalone. Added a simple preprocessor to the netlist parsing pipeline. This prepropcessor understands defines and nested if/else/endif without removing preprocessor elements first. This does not work with netlist originating from DICE currently. These have to be converted first. In addition, cleaned up __attribute__ madness in the code. Specifically removed ATTR_COLD from virtual definitions to avoid the vtable being declared as. Fixed some netlist issues the valgrind tool pointed me too. In addition, added a strinb buffer class. Changed plist_t to be closer to vector. Commented out tons of inlines without any impact on performance. Added #ifndef, #ifdef to netlist preprocessor and implemented == operator. Fixed more -Wextra warnings, mostly int==>std::size_t and signed comparisons [Couriersud]. Fixed compile on MSVC2012 (analog\nld_twoterm.h and nl_util.h) [Peter Ferrie].
- 0.161              : Added nl_examples\9602_mstable.c, netlist\devices\nld_74175.c/h, nld_74192.c/h, nld_74193.c/h, nld_74193.h, nld_74279.c/h, nld_82S16.c/h, nld_9310.c/h and nld_9312.c/h. Added rtrim, ltrim and trim to pstring. Improved truthtable handling in netlist. Prepare per-game setting of USE_DEACTIVE_DEVICE. Added 9602 one-shot and 9312/DM9312. Document more work on breakout. Further additions to nl_dice_compat.h. Added 74192, 9316, 9310 and 74193 devices to netlist. Added 74175 and 82S16 devices to netlist. nl_breakout now compiles. Fixed 7432 and 74279 devices. Make logic signal outputs default to low at startup (devices\nld_signal.h). Always connect to the first element in NET_C (netlist\nl_setup.c). NE555 now supports reset. Various bugfixes for netlist code and improvements for breakout [Couriersud].
- 0.158              : Added netlist\nl_factory.c/h. Netlist update: Most prominent one is a "frontier" element which on a low to high impedance node will, no other connections provided. Let the system create two matrices. Fixed Visual Studio source analysis warnings (devices\nld_9316.c). Fixed bug highlighted by Visual Studio Code Analysis (netlist\nl_setup.c). Removed dependencies on MAME headers in netlist code. Fixed memory allocation in netlist code. This caused a number of memory leaks to disappear. Introduced an nl_double type. This will be followed by an nl_float type for certain components (mostly matrix and vector). Fixed crash caused by 4066 DIP device. Fixed nltool "-ld" listdevices. More netlist code reschuffle to separate setup from run. Fixed Clang (most likely > 3.4) compile (tools\nltool.c) [Couriersud].
- 0.155              : Unreachable code warning fixes for tools (tools\nltool.c) [Oliver Stoeneberg].
- 0.154              : Added nl_examples\74123_mstable.c, breakout.c, cdelay.c, netlist\plists.h, analog\nld_ms_direct.h, nld_ms_direct1, nld_ms_direct2.h, nld_ms_gauss_seidel.h, nld_opamps.c/h, devices\nld_4020.c/h, nld_7408.c/h, nld_7411.c/h, nld_7432.c/h, nld_7437.c/h, nld_74123.c/h, nld_cmos.h, nld_r2r_dac.c/h and nld_truthtable.h. All analysis is now based on an immutable list of terminals. The dynamic list now is only used in the "hot" core. This is the base for possible further optimizations using multiple lists; e.g. a high-low transition list and a low-high transition list. Simplified netlist code. It now always provides a stable solution instead of rescheduling the solver. - fixed a bug in which the fallback solver was called instead of gauss - seidel. Matrix solvers are now subdevices of the solver devices. Matrix solvers can now be scheduled independently. Renamed RESCHED_LOOPS to GS_LOOPS (Gauss Seidel). Added paragmenter NR_LOOPS (Newton Raphson). Changed gauss seidel solver to be a subclass of direct solver and got rid of ugly fallback solution. As a result, popeye is now 45% faster in comparison to 0.153. Removed dead code in analog\nld_solver.c. Fixed a timing bug in netlist 7474. Pong Doubles now working. Thanks a lot to Adam Bousley for dual licensing DICE netlists. Hooked up player inputs. Minor performance tweaks. Separated game netlists from driver. DICE is making extensive use of macros which may conflict if these are in one source file. Added some rescap.h macros to netlist. Allow connecting a net to itself, fixed typo and be more explicit on error. Added first draft of 74123 to netlist code. Fixed gate timing (devices\nld_signal.h). Added 7408, 7411, 7432 and 7437 to netlist. Changes core_device constructor (netlist\nl_base.c). Fixed assert in netlist (netlist\nl_base.c). Analog output is always immediate. Minor changes to proxy (devices\nld_system.c). Analog input updates now send to queue. Reduces risk of stack overflows. Fixed a bug which caused NAND astable multivibrator to oscillate. 74123 improvements. Preliminary support for LTE dynamic time-stepping based on Local truncation error. This enables the possibility to connect a capacitor between ground and a TTL output and get a e.g. 100 ns delay with a 1nF capacitor. Added an example circuit (cdelay.c). Changed the log device to support nano-second granularity. LTE is not yet enabled due to it's ugly test-state. Introduced netlist_analog_net_t and netlist_logic_net_t to untangle code a bit. Fixed a bug with saving state. In addition, some minor code changes. Make recent additions (timing, local truncation error based timestep) the default. As a consequence, the solver frequency is just an indication, the timestep used can be anything between 2ns and 100 * 1/Frequency depending on the second derivative. A fixed timestep can be forced by setting DYNAMICTS to 0. For an example how this works on delaying signals using capacitors see nl_examples\cdelay.c. Straightened the timing code. With solver parameter DYNAMIC_TS=1 the system now steps each analog subnet individually by using a LTE approach. With DYNAMIC_TS=0 pure fixed timestepping is used. Reworked some code (mostly in nl_base.h) to shift variables into the private space. Netlist codebase now also compiles outside the MAME environment. Replaced tagmap with a very simple class to make it happen. Linear searches, slow, but only used during analysis. Various minor changes and some more logging. Some improvements to analog\nld_solver.c code. Renamed auxiliary types to move them into the "p" namespace (plinearlist_t, pstack_t, ...). Performance related changes. Mostly from analyzing auto-vectorization. Further simplification and clean up around the linear system solvers. Netlist updates and bugfixes: Improved convergence code (max(epsilon) instead of sum(epsilon)). Identified needless updates. Changed NE555 discharge current to a value in the order of the datasheet and improved dynamic time-stepping. Dynamic time-stepping is not used by any current implementation right now since any fast discharge will be resolved to mV levels imposing nano-second timesteps. Great and exact but deadly for performance. Resize should never have been public in netlist\plists.h. Further work on vectorization. Netlist changes: * Reworked the analog storage model to better support the compiler. This will most likely only pay off on larger matrices than currently used. Investment for future platforms with larger vectors. * Added parameter "GS_THRESHOLD" to select the minimum matrix size for Gauss-Seidel solver. * pstate: Pointer will be resolved late, i.e. after all initialization is finished. State is registered during start, but some pointers are only set during post_load in the solver. Document & save work. Pretty convoluted code now. I'd really miss the good old Cray C90. Clean Fortran code, seamless vectorization and parallelization. That's now 20 years ago and I am fighting with cryptic vectorization compiler messages today. Quite a number of changes: * Templates to provide operations for fixed matrix sizes. * Sorting of nets to increase convergence. * Successive over relaxation - for popeye a parameter of 1.05 works best. * The code commented out may provide benefits on different architectures like true vector architectures. Popeye run peaks at 1800% (up 20%) and pong has a slight performance increase as well. Disabled printf logging of stats (nld_solver.c). Removed m_new_Analog. Did some tests using linear prediction. This is not used since the savings are about the same size as the effort. Optimized netlist proxies. Small but measurable performance increase for pongf and Pong Doubles. In addition, moved some code between classes and sorted code in nl_base.c. Removed m_last_analog. Moved solver templates into separate header files. Removed a number of "uninitialized member" warnings by using a template wrapper around those members. More cleanup and some development: Removed dead code from nld_signal.h. Removed m_last_Q and all callers; if a device depends on state let it maintain it. Added development on a generic device based on truthtables. Align naming convention to be the same for nld_signal and nld_truthtable. Added CD4020 device. Device definitions now can specify the logic family (i.e. TTL, CD4000). Fixed timing on 4020. Added more device to netlist: R2R resistor network DAC. Dummy input device. This is used so that devices can exhibit terminals not yet used such as V+ for opamps. Added a very basic macro model for norton opamps (LM3900). Added a current controlled current source (CCCS) [Couriersud]. Correct some device shortname/longname conflicts that had surfaced [Tafoid]. Experimental fix for building with MSVC 2012 (it might fix ICC too); Either works for MSVC 2012 & MinGW, someone needs to test with ICC (netlist\nl_dice_compat.h) [smf].
- 0.153              : Added netlist\nl_dice_compat.h, netlist\analog\nld_bjt.c/h, nld_fourterm.c/h, nld_switches.c/h, netlist\devices\nld_4066.c/h, nld_7400.c, nld_7402.c, nld_7410.c, nld_7420.c, nld_7425.c, nld_7427.c, nld_7430.c, nld_7448.c/h, nld_7450.c/h, nld_74107.c/h, nld_74153.c/h, nld_74ls629.c/h, nl_examples\7400_astable.c, bjt.c, bjt_eb.c, bjt_eb_pnp.c, cd4066.c, msx_mixer_stage.c, ne555_astable.c, opamp.c, sn74ls629_osc.c, tdice.c, test.c, todo.c, vccs.c and vccs1.c. Moved analog stuff netlist\devices\nld_solver.c/h, nld_switches.c/h and nld_twoterm.c/h to netlist\analog. Added missing interfaces to netlist. MAME -debug pongf now does not crash any longer and displays some state. Still more work needed. Further improved the netlist state saving. Fixed Clang compile (netlist\nl_base.h and pstate.h), hopefully this works on OSX as well. Removed legacy code in netlist and separated out 74153 and 74107(A). Alignment of netlist with MAME standards. Inputs to netlist are now registered using by MCFG_* as MAME subdevices and exhibit the usual writeXX/readXX methods including a PORT_CHANGED method. This allows direct linking to inputs. Make some class variables protected. Split netlist_mame_device_t into a core device and a "cpu" device. Further untangled nl_base.c/h and mame-specific netlist.c. Enhanced the netlist parser and cleaned pong.c. Also added a folder nl_examples which contains standalone netlist examples. The examples have a ".c" suffix. In eclipse, I get automatic syntax parsing and error notifications. The parser treats "#" preprocessor defines/includes just as comments. All of these examples can be run through nltool: ./nltool -f nl_examples/opamp.c -t 1 -l OUT. Runs the opamp example for 1 second of emulation time and logs the terminal named "OUT" to "netlist_log_OUT.log". I'll post a simple script to the list to visualize those logs using gnuplot. Fixed PNP model and added test netlist (bjt.c). Pong now has complete emulation of discrete logic for runQ and SRST signals. Rewrote switch2 device to be based on resistances as well. Netlist: Fixed 7474 save state. Removed a printf. Simplified netlist_list_t. Increased reschedule count to 15 - diodes are dog-slow. Made reschedule count a solver parameter. Simplified solver code. Solver time now also resets. Netlist: Added missing parameter to analog input device. Parser now parses NET_MODEL (netlist\nl_parser.c). Fixed a bug in switching bjt implementation. Added Ebers-Moll BJT model. Currently only for NPN. Fixed convergence issue in the solver. Accuracy for Ebers-Moll must be better than 1e-5 to not generate nano-second spikes. Typical sound applications should be able to run with less since the spikes are not audible. Added a "-listdevices" option to nltool to list all available devices. Simplified code. Quite a number of simplifications for netlist. Also tested some parallel processing using OpenMP (disabled). Removed pointless "...->object()->" usage and fixed some issues in debug build. Implemented an improved solving scheme into netlist. This improves performance for Pong. Also set Pong frequency to NETLIST_CLOCK. This is necessary to avoid issues with time conversion into attotime and consequently rounding issues in fixfreq. Implemented near-to-proper reset for all netlist devices. Reset now works for improved matrix solving. Removed two duplicate devices in netlist. Removed some dead code and ambiguous functions in the netlist code. An output should have at most one d-to-a proxy connected to it. Made GND a device of it's own (actually a terminal container). Introduced the concept of "logic families". Currently, standard devices default to TTL. Going forward, this enables the family type (e.g. LS, S, HCT, ...) to be a device parameter. Created a MAME sound device for netlist. Fixed an issue causing wild oscillations. Currently, pong has sample code for using the sound device. Uncomment "test_sound" in pong.c to hear a constant sound from a 7400 multivibrator. Sound is still WIP, but the proof of concept has been done. Working Ebers Moll model. That's a significant step ahead. Simple 2x2|RHS SPICE stamps now supported by two terminal devices. This was implicitly contained in the design, but set_mat now shows how a two-terminal device fits into a SPICE approach. Introduced direct solvers for net groups with 1 or 2 nets. Introduced specialized solvers for N=1,2,3,4,5 by using templates. Nice performance increase for BJTs. Removed dead code and simplified matrix solvers. Fixed direct solver bug. Using direct solver up to matrices of 4x4 now. for bigger matrices gauss-seidel is used. Major renaming of netlist device macros, like NETDEV_ALIAS ==> ALIAS, NETDEV_R ==> RES and NETDEV_C ==> CAP. Added some pin assignment devices (*_dip). DICE connects package pins, not logical entities. Added DIP package pinouts to 7474 and 9316. Fixed reported memory leak in debug build (netlist\pstring.c/h). Minor bugfixes + parser is now based on tokens. Should ease reading other netlist formats significantly. Removed dead code in nL_parser.c. Added pin-outs to a number of devices. Fixed minor bugs and removed a hack in 7490 code. Documented two more devices (7448 and 7450), more pin-outs. Correct some pin names so they match datasheets better. Bugfixes and more pin-outs for netlist devices. Also contains preparation for inclusion of "pong doubles". Fix a bug in connecting nets. This bug surfaced during introduction of a "closer to reality" TTL output proxy. Created a better logic-to-analog proxy approximating output impedance. This revealed some bugs in the code which have been fixed. Basically, borderline schematics like TTL_7404_INVERT(c9f, c9c.Q), TTL_7404_INVERT(c9c, c9f.Q), SWITCH2(coinsw), NET_C(c9c.Q, coinsw.1) and NET_C(c9f.Q, coinsw.2) in which the switch connects TTL-Outputs to ground now work. In this case, the addition of an analog device (switch) cause the netlist code to treat the TTL outputs as "analog" and (re)connect all existing and future connected terminals to the analog output. The downside is a slight performance penalty. This penalty may be mitigated going forward by introducing "proxy-hints" for selected outputs. Fixed a nasty issue around convergence by defaulting to Gaussian elemination for 5x5 and 6x6 matrices. This prevented pong from starting. In addition, removed a number of hacks around start-up conditions. All nets are now defaulted to "0" at startup. Much cleaner. Added a 74LS629 device which yet needs to be enabled. Implemented a fallback to Gaussian elimination if Gauss-Seidel exceeds a certain number of iterations. Netlist bugfixes: Fixed completely broken parser. Fixed reset (consistent again). Added "warning" and "log" to "error". "-oslog" now displays some information. Fixed an issue causing prolonged instability in 7400 oscillators. Added route-inputs to netlist sound device. Currently this is WIP and needs some polishing, however proof-of-concept exists now. Example usage can be enabled in pong by uncommenting test_sound. Some bug fixes for sound device routing. Pong Doubles (yet to be committed) starts up again. Added a parameter "MULT" for output multiplication to NETDEV_Sound_OUT. Added a safety check to resistor device to avoid divide by zeros. Only update parameters if they have changed. All MAME <-> Netlist interfacing is now done in the machine device driver. This a) ensures, that the interface logic is in one place and easy to understand b) ensures, that netlists represent the hardware and not what has to be done to hook the hardware up in MAME. The interface part is considered to be relatively stable. Netlist code maintenance work. Made device startup cleaner. Netlist maintenance: Made frequency a obligatory parameter for CLOCK, MAINCLOCK and SOLVER. Fixed a bad memory corruption. Added "owner" to save states. This allows to remove objects after they registered state. Fixed VCCS and VCVS. Commit current state of netlist examples. Later, these are intended as a basis for regression tests. Netlist maintenance: Netlist construction now is relying on fully qualified names, i.e. the name of a netlist object now starts with the netlist name. This is a first step towards supporting netlist models, i.e. netlists which can be used as a macro model. Very handy for opamps. Changed log file filename format. Support analog net groups of up to 256 nets (i.e. Voltages). Call netlist().error if more than 64 nets are found (analog\nld_solver.c). Preparation to cope with multiple netlists from single source. Netlist can now be included as sub-circuits. That's the same approach SPICE uses. The implementation also supports nesting. Opamp emulation now is as easy as. The missing bit now is a central submodel repository. nl_examples/opamp.c is an example of a impedance changer stage followed by a 1:2 amplifier stage. System size (= number of voltage levels to be calculated) is between 20 - 30. Using a simple, yet better opamp model than usually implemented in the old discrete core, I get ./nltool -f nl_examples/opamp.c -t 30 startup time ==> 0.002 runnning. 30.000000 seconds emulation took 0.438599 real time ==> 6839.96%. Which leaves quite some buffer to emulate even complex mixing and filtering stages in real-time. Abstracted netlist sources. This is a first step to support libraries (e.g. for opamps). Fixed nltool -listdevices. Thanks Oliver. Minor netlist updates with focus on performance. Also added 16bit int to pstate. Fixed fatalerror if we are trying to connect two railnets (nl_setup.c). Fixed netlist examples. Fixed a netlist crash on Clang due to ATTR_NORETURN. Also fixed some debug statements. Fixed Visual-C build (nld_system.h). NPN BJT now working. NET_C now accepts more than two terminals. Fixed handling of input/output offsets. Moved device models for diodes and bjts into net_lib.c. Implemented CD4066 device (Quad Bilateral Switch). Use C99 variadic syntax (..., __VA_ARGS). Renamed a member in nld_4066 as well. Removed hybrid_t usage in netlist. Made GMIN a solver parameter. All users now use this value. Nice performance increase by removing logic terminals from net if they are inactive. Introduced a linked-list class to abstract linked-lists. Fixed deactivating devices. You have to enable this because it is not guaranteed to be timing-exact. Fixed issues introduced lately around DICE compatibility [Couriersud]. Fixed building with standard development tools (netlist\nl_config.h). Visual studio 2012 compilation fix (netlist\nl_parser.h) [smf].
- 0.152              : Removed netlist\devices\nld_7400.c. Added netlist\nl_util.h, pstring.c/h. devices\nld_7402.h, nld_7404.c/h, nld_7410.h, nld_7420.h, nld_7425.h, nld_7427.h, nld_7430.h, nld_7474.c/h, nld_7483.c/h, nld_7486.c/h, nld_7490.c/h, nld_7493.c/h, nld_9316.c/h, nld_legacy.c/h, nld_log.c/h, nld_NE555.c/h, nld_solver.c/h, nld_system.c/h, nld_twoterm.c/h, pstate.c/h and tools\nltool.c. Moved 7402 and 7410 into separate files. Moved 7420 into its own header file, optimzed some memory ops. Removed hardcoded maximum net size. Separated and documented a couple more devices out of net_lib.c. Outputs now drive nets and inputs access nets. Moved more stuff to net_terminal. Added some documentation to nl_base.h. Cleared namespace - all classes now have prefix netlist_. Working voltage divider. Added capacitor. At 50kHz, calculating a resistor net and a cap doesn't hit performance. Added large signal diode model (things like astable NAND Multivibrator) and fixed a number of bugs. Every object has a name. Reworked object model a bit. There is a slight performance drop (7%). Memory allocation order seems to be an issue here. Added pascal like strings (pstring) class. These use only size(void *) in objects. Uses reference counter to share identical string between various pstrings. In addition, fixed some bugs and added auto-sizing to netlist_list_t. There shouldn't be memory holes left now, apart from memory allocated in a static class factory. Documented 7430 & 7486. Fixed crash when using analog chips. Did some preparation work to generalize internal links. Singled out and documented 7404 and 7474. Introducing type safe parameters. Pretend accuracy by specifying tons of parameters for diode model of which only two are used. Speed comes at a price. Now, even a CVD (Constant voltage drop) diode model with series resistor can benefit from these parameters by using them to estimate a typical operating point and thus dynamic resistance when the model is setup. Fixed design weakness. Subdevices now register their terminals. Devices can alias those terminals. Now, e.g. a 7400 gate many be grouped into a Quad NAND package. This also enables using internal resistors and capacitors. Pong: Pure analog video mixing. Only in pongf currently. Once code stabilizes, the netlist parser will be updated as well. Code clean-up. Implemented a generic NE555 model. Period accuracy for astable operation is within 2% of the TI datasheet for astable operation. Fixed an issue in the object model as well and made the code distinguish between a core terminal and analog terminals. Logs now write to individual log files. Fixed Windows build (netlist\pstring.c)(Windows std dev tools use GCC 4.6.3. This version seems to be to broken to deal with "new" in static initialization. GCC 4.6.4 compiles this on Linux without causing any issues). Class factory is now initialized dynamically. Fixed a memory leak. Documented 7493. Added a simplified BJT Switch Model. This should be sufficient for audio purposes in >> 90% of all cases I have seen so far. The performance of the analog subsystem has quite some room for improvement. Boils analog subsystem down to (G - D) * V = I with G being the conductance matrix, D a diagonal matrix with total conductance on the diagonal elements, V the net voltage vector and I the current vector. By using solely two terminal devices, we can simplify the whole calculation significantly. A BJT now is a four terminal device with two terminals being connected internally. The system is solved using an iterative approach: G * V - D * V = I, assuming V=Vn=Vo and Vn = D-1 * (I - G * Vo). The above was already used in the code. However, with a pure two terminal device approach going forward we can e.g. further optimize. G typically is a sparse matrix. First steps at taking advantage of sparse matrix properties. The code now identifies net groups. A net group contains nets which depend on each other. Purely conductive nets can going forward be updated solely if one of the rail nets they are connected to changes. Changed netlist_matrix_solver to be a class. Rewrote the "switch" BJT implementation. Minor bugfixes. Added VCCS and VCVS components. Added over-relaxation on demand to the iterative solver. Added a slightly more complex opamp model example to Pong (commented out). Logs on demand (NL_LOGS=EBUF.OP:4V; mame64 -np 4 pongf). pongf now runs 4 analog NE555s and video mixing (performance down by 20% abs on my machine - 155% to 135%). Minor bugfixes. Pong still running, pongf still (though analog) still faster. Separated MAME specific code into netlist.h. Diode model now uses a fast exp function which is approx. 3x faster than build-in at the expense of reduced accuracy. We are emulating real device with tolerances, so this is not an issue. Update the parser code. The "rom" netlist and preprocessor netlist are now aligned again. Got rid of fatalerror in netlist\* code. Implementing applications have to implement fatalerror in a derived class from netlist_base_t now. Hopefully fixed "red lines". Improved 9316 code. General code maintenance. Started work on netlist audio device support. Improved netlist parser. Pong update: Based on feedback from IRC hopefully fixed issues like "jumping". Adjusted VR1 and VR2 to 50%. Disabled all printf output. Introduced more consistent and general state saving. Useful for regression tests going forward [Couriersud]. Fixed debug build; someone please review these changes (netlist\nl_base.h) [Wilbert Pol]. Fixed linking with visual studio (netlist\nl_base.c) and compiling (netlist\pstring.c). Fix for MSVC, I provided the wrong version number to couriers (Visual Studio 2013 is 1800 & I believe that supports log1p but I haven't tested it yet) (netlist\devices\nld_twoterm.h) [smf]. Reinstated functionality in pstring. This should now be compatible with MSVC [Couriersud].
- 0.151              : Added netlist\devices\nld_7400.c/h, devices\nld_signal.h, devices\nld_system.h, netlist\netlist.mak, nl_base.c/h, nl_config.h, nl_lists.h, nl_parser.c/h, nl_setup.c/h and nl_time.h. Moved machine\net_lib.c/h to netlist\devices. Fixed a bug in netlib's NE555 emulation. Optimized some netlist code by inlining clock device. This improves pongf performance by approx. 10%. Fixed a small but important bug in netlist code. In addition, some more performance improvements. More netlist cleanups. All netlist device setup now takes place in constructors. Slightly improved performance on netlist components. Minor code clean-up in netlist devices. Fix to work with MSVC 2012, the second NETLIB_DEVICE parameter is a list of the protected variables and MSVC doesn't like #if within the parameters to a macro. Fixed an Netlist issue with 7493 and other minor fixes. Netlist cleanup: Simplified classes and separated logic and analog inputs/outputs. Moved device setup out of constructor (again). This wasn't a good idea because some more advanced stuff like virtual function address caching doesn't work in constructors. Some hand-crafted optimizations. GCC seems to like ugly pointer C more than using readable arrays. Netlist now uses astring instead of char *. Makes memory management a lot easier. Fixed a number of memory leaks as well. Driver reset now works. Created folder emu\netlist and moved net_lib.* over. Updated makefiles (netlist\netlist.mak). Split the netlist code up into functional pieces like parser, setup and execution. This looks a lot more structured now and highlighted some issue already [Couriersud]. Fixed for empty controlled statement with MSVC 2012. Fixed linking with MSVC 2012. Moved netdev_mainclock update & update_param from netlist.c to net_lib.c to fix linking error in MSVC and still have it link with MSVC [smf].
- 0.148u4            : Fix for GCC prior to 4.3 (machine\netlist.h) [Federico Schwindt].
- 0.147u3            : Symbols starting with _ are reserved in many BSD-derived environments (machine\netlist.h) [Robert Muth].
- 0.147              : Updated netlist implementation: Now supports any resolution fitting reasonably into a UINT64. Execution now uses a list sorted by execution time. Implementation now supports analog and digital inputs / outputs. First step in a move to "terminals" being both input / output. Improved object model. Pong: Rewrote video code, now emulates a monitor by analyzing the analog video signal and identifying vsync and hysnc pulses. Removed all hacks. Overall performance increase of about 10% over the previous "pongf" implementation [Couriersud]. Pass some parameters in netlist.h by reference for consistency [Oliver Stoeneberg]. Netlist memory leak fix [Miodrag Milanovic].
- 0.146u4            : Added emu\machine\netlist.c/h and net_lib.c/h. Implemented a generic implementation to model discrete net lists [Couriersud]: Based on timeslot modelling, the implementation models gate delays in logic chips. Design ready to be split into a generic and a MAME implementation part. Design prepared to merge in discrete components from discrete. Supports code based as well as external net list parsing. Ultimately, net lists and discrete emulation should share one code base. The class design was set up to accomplish this. There is no point in having multiple 555, 7474 implementations around. Most of the code will be moved to lib\netlist going forward to allow usage in other projects. Pong now uses netlist.h. This implementation reproduces all gate timing and 555 related effects as described by Dr. H. Holden in his 2012 publication "ATARI PONG E CIRCUIT ANALYSIS & LAWN TENNIS". There are now two game entries: a) pongf: This illustrates how a workaround has to be used in the absence of gate timing. The game uses a code based netlist. b) pong: This uses gate timing at a resolution of approx. 140 MHz. The netlist itself is read from the rom region. Phill W. fixed constant overflow, 64 bit constants require U64() macro (machine\netlist.c).
- 20th July      2012: AdamB - After more than 4 years since the last release of DICE, a new version emerges (v0.3 with Pong, Rebound, Gotcha and Spacerace).
- 0.146u1            : Couriersud re-added Pong (Rev E) (Atari 1972). Work in progress. The games is playable and has sound, however I suspect some minor bugs due to the order of expression evaluation. I commit this mainly for documentation purposes. The modelling of the TTL circuits will change to a device/connection class infrastructure updating inputs immediately if they changed going forward.
- 10th February  2008: AdamB - Dice 0.2 has been released. Now supports 3 games, sound and more. What's New: 2 new games are supported: Atari Rebound and Atari Gotcha (driver written by Dan Boris). Preliminary Sound support. Optimization: Pong runs about 30% faster than previous versions. Fullscreen Mode: Add the command line option -fullscreen to run in full screen mode. Mouse Support: Add the command line option -mouse to use the mouse for Player 1.
-  6th January   2008: AdamB - Finally got around to releasing the first version of my Discrete Integrated Circuit Emulator, DICE. This is a very early release and hasn't been tested fully, so there may be some bugs still. So far only Pong is supported, hopefully more games will be added in the future.
- 25th February  2007: Mr. Do - You can grab Pong artwork, vectored by Jcroach, on loan from Vintage Arcade Superstore.
- 0.36RC1            : This game was removed from MAME. Nicola wrote: Pong was too much of a simulation and too little of an emulation. It didn't really fit into MAME's architecture which is CPU-based and targeted at accurately reproducing the gameplay of the original.
- 0.36b10            : Juergen Buchmueller added Pong! (Atari 1972). This game has no roms.
- GAMES: Pong (Atari 1972)
- SOURCE: machine\netlist.cpp



==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


SOUND / AUDIO

  1.    MAME Sound Interface
  1.11  CoreAudio
  1.12  DirectSound
  1.13  PortAudio
  1.14  SDL
  1.15  WASAPI
  1.16  XAudio2
  1.2   Streams
  1.3   Mixer
  1.4   Sound filter
  1.41  Biquad Filter
  1.42  Filtered DAC
  1.5   Speaker
  1.6   Beep
  1.7   Samples
  1.8   Netlist Sound Device
  1.81  Custom
  1.9   ADPCM
  1.91  IMA ADPCM

  2.    Digital Analog Converter
  2.1   DAC
  2.11  PMI DAC-76 COMDAC
  2.12  DMA-driven DAC
  2.2   AMD
  2.21  DAC08
  2.22  DAC0800
  2.23  DAC0807
  2.24  DAC0832
  2.25  DAC1200
  2.3   Analog Devices
  2.31  AD557
  2.32  AD558
  2.33  AD561
  2.34  AD706
  2.35  AD1847
  2.36  AD1848
  2.37  AD1851
  2.38  AD1866
  2.39  AD1868
  2.3A  AD7224
  2.3B  AD7521
  2.3C  AD7523
  2.3D  AD7524
  2.3E  AD7528
  2.3F  AD7533
  2.3G  AD7541
  2.3H  AM6012
  2.4   Asahi Kasei Microsystems
  2.41  AK4309
  2.42  AK4310
  2.43  AK4316
  2.5   NEC
  2.51  MC1408
  2.52  MC3408
  2.53  MC14016
  2.53  MC3410
  2.54  D6376
  2.55  D6379
  2.6   Philips
  2.61  TDA1004
  2.62  TDA1010
  2.63  TDA1311
  2.64  TDA1386
  2.65  TDA1543
  2.66  TDA1545
  2.7   Sanyo
  2.71  LC7528
  2.72  LC7881
  2.73  LC78815
  2.74  LC78820
  2.75  LC78832
  2.76  LC78836
  2.8   Zarlink
  2.81  ZN425e
  2.82  ZN426e
  2.83  ZN428e
  2.84  ZN429e
  2.9   Other
  2.91  BU9480
  2.92  CS4334 DAC
  2.93  D49307
  2.94  MB88347
  2.95  MP1210
  2.96  PCM54HP
  2.97  SND01
  2.98  UDA1341TS

  3.    Texas Instruments
  3.1   SN76477
  3.2   SN76489
  3.21  SN76489A
  3.22  Sega VDP PSG
  3.23  T6W28
  3.24  U8106
  3.25  Y2404
  3.3   SN76496
  3.4   TMS36XX
  3.41  TMS3615

  4.    Atari
  4.1   TIA
  4.2   POKEY
  4.3   Atari "JSA" Audio Board
  4.4   Jaguar

  5.    Yamaha
  5.1   FM Sound Core
  5.11  Yamaha DELTA-T ADPCM
  5.2   YM2148
  5.21  YM2149
  5.22  YM2151
  5.23  YM2154
  5.24  YM2164
  5.25  YM2203
  5.26  YM2413
  5.27  YM2414
  5.28  YM2423
  5.29  YM2608
  5.2A  YM2610
  5.2B  YM2610B
  5.2C  YM2612
  5.3   YM3012
  5.31  YM3014
  5.32  YM3016
  5.33  YM3438
  5.34  YM3526
  5.35  YM3528
  5.36  YM3533
  5.37  YM3806
  5.38  YM3812
  5.39  Y8950
  5.4   YMF262
  5.41  YMF268-F
  5.42  YMF271
  5.43  YMF276
  5.44  YMF278B
  5.45  YMF281
  5.46  YMF286-K
  5.47  YMF292-F SCSP
  5.48  AICA
  5.5   YMZ280B
  5.51  YMZ284
  5.52  YMZ770
  5.53  YMZ774
  5.6   AY-3-8910A
  5.61  AY-3-8912A
  5.62  AY-3-8913
  5.63  AY-3-8914
  5.64  AY8930
  5.65  KC89C72
  5.7   YAC513
  5.71  YAC515
  5.72  YAC516
  5.8   XT446
  5.9   SW1000XG

  6.    Bally/Midway/Sente
  6.1   Astrocade
  6.2   CEM3394

  7.    Exidy SFX
  7.1   Exidy 440

  8.    Namco
  8.1   Namco sound
  8.2   Namco 06xx
  8.21  Namco 15XX
  8.22  Namco 50XX
  8.23  Namco 51XX
  8.24  Namco 52XX
  8.25  Namco 53XX
  8.26  Namco 54XX
  8.27  Namco 56XX
  8.28  Namco 58XX
  8.29  Namco 59xx
  8.2A  Namco 62xx
  8.3   Namco CUS30
  8.4   Namco 63701X
  8.5   Namco System 1
  8.6   Namco NA
  8.7   Namco 163
  8.8   C140
  8.9   C219
  8.A   C352

  9.    OKI
  9.1   MSM5205
  9.2   MSM5232
  9.21  MSM5253
  9.22  MSM5295
  9.3   OKI6258
  9.4   OKI6295
  9.41  TT5665
  9.5   OKI6376
  9.6   MSM6585
  9.61  MSM6588
  9.7   MSM6650
  9.8   OKI9810
  9.9   OKI ADCPM

 10.    Nintendo
 10.1   RP2A03 APU
 10.12  RP2A0X APU
 10.2   SNES Custom DSP (SPC700)
 10.3   S-DSP
 10.4   S-SMP

 12.    Konami
 12.1   K005289
 12.2   K007232
 12.3   K051649
 12.4   K053260
 12.5   K054539
 12.6   K054544
 12.7   K056800
 12.8   Time Pilot Audio
 12.9   Track And Field Audio

 13.    Sega
 13.1   Sega PCM
 13.2   RF5C68
 13.3   RF5C164
 13.4   RF5C320
 13.5   RF5C400
 13.6   Yamaha YMW-258-F
 13.7   Sega Z80-based Digital Sound Board
 13.8   Sega 68k-based Digital Sound Board 2

 14.    Seta
 14.1   X1-010
 14.2   ST0016 (Audio)
 14.3   ST0026
 14.4   ST0032

 15.    Hudson Soft
 15.1   Hudson HuC6230
 15.2   Hudson HuC6280

 16.    Philips
 16.1   SAA1099
 16.2   SAA71111

 17.    Capcom
 17.1   QSound
 17.2   DSP16

 18.    Nanao
 18.1   GA20

 19.    Ensoniq
 19.1   ES5503
 19.2   ES5505
 19.3   ES5506
 19.4   ES5510
 19.5   ES5701
 19.6   SUPER GLU
 19.7   Ensoniq ASR
 19.8   ES1373

 20.    Brian Schmidt Music Technology
 20.1   BSMT2000
 20.2   Data East Pinball BSMT2000 sound board

 21.    Gaelco
 21.1   Gaelco GAE1
 21.2   Gaelco CG1V

 22.    Sony
 22.1   SPU

 23.    Excellent Systems
 23.1   ES8712

 24.    Sound Systems
 24.1   Bally
 24.11  Bally AS2888 Sound Board
 24.12  Bally AS3022 Sound Board
 24.13  Bally Sounds Plus w/ Vocalizer Board
 24.14  Bally Cheap Squeak Board
 24.15  Bally Squawk & Talk Board
 24.16  Bally Squawk & Talk w/ AY8910 Board
 24.2   Midway
 24.21  Midway Squawk 'n' Talk Sound Board
 24.22  Midway Cheap Squeak Deluxe Sound Board
 24.23  Midway Turbo Cheap Squeak Sound Board
 24.24  Midway Sounds Good Sound Board
 24.25  Midway SSIO Sound Board
 24.26  Midway DCS Audio Board
 24.3   Williams
 24.31  Williams Audio Boards
 24.32  Williams ADPCM Sound Board
 24.33  Williams CVSD Sound Board
 24.34  Williams NARC Sound Board
 24.35  Williams WPC Sound
 24.36  Williams Pin Sound '88 Audio Board
 24.37  Williams System 4 Sound Board
 24.38  Williams System 6 Sound Board
 24.39  Williams System 9 Sound Board
 24.3A  Williams System 11 Sound Board
 24.3B  Gottlieb Multi-mode Sound Board
 24.3C  Gottlieb Sound pin./rev.
 24.4   Sega
 24.41  Sega Universal Sound Board
 24.42  Sega Speech Sound Board
 24.5   Leland
 24.6   CAGE
 24.7   Seibu Sound System
 24.8   Vegas sound system
 24.9   Data East Pinball soundboard
 24.A   Taito Soundboard
 24.A1  Taito Ensoniq Sound System
 24.A2  Taito Zoom Sound System
 24.B   SNK
 24.B1  SNK6502
 24.B2  SNK Wave
 24.C   IREM
 24.C1  Irem Audio
 24.C2  Irem M72 Audio
 24.D   NEC C1891
 24.E   Game Blaster
 24.F   Sound Blaster
 24.G   Gravis Ultrasound
 24.H   ATI Stereo F/X
 24.I   MPEG
 24.J   Acclaim RAX Sound Board
 24.K   MSX AUDIO
 24.L   86C617
 24.M   Emagic Audiowerk2
 24.N   ESS Solo-1/Maestro
 24.O   AdLib Music Synthesizer Card

 25.    Synthesizer / MIDI
 25.1   MIDI
 25.2   MPU-401
 25.3   SAM9773
 25.31  SAM448
 25.4   ICS2115
 25.5   QS1000
 25.6   KS0164
 25.7   MagicEyes VRender0 Sound Engine
 25.8   Music Quest
 26.    Speech processors
 26.1   DAC Speech
 26.2   Texas Instruments
 26.21  TMS0285
 26.22  TMS5100
 26.23  TMS5110
 26.24  TMS5200
 26.25  TMS5220
 26.26  TMS5220C
 26.27  EFO Sound-3 board
 26.28  CD2501E/CD2501ECD
 26.29  SPEECHROM
 26.3   Mitsubishi
 26.31  M58817
 26.32  M58819S
 26.4   Votrax SC-01
 26.41  Votrax SC-02
 26.5   S14001A
 26.6   GI
 26.61  SP0250
 26.62  SP0256
 26.7   Hitachi HD38880 and HD38882
 26.8   HC-55516
 26.81  HC-55532
 26.9   VLM5030
 26.A   NEC
 26.A1  uPD7752
 26.A2  uPD7756
 26.A3  uPD7759
 26.B   MSM5218
 26.C   Alpha 88
 26.D   Digitalker
 26.E   TC8830F
 26.F   MEA 8000

 27.    Other
 27.1   Melody Generator
 27.11  Epson 7910
 27.2   Waveform Generator
 27.21  S2688
 27.3   Noise Generator
 27.31  MM5437
 27.32  MM5837
 27.33  RCA CDP1863
 27.34  RCA CDP1864
 27.35  RCA CDP1869
 27.4   TIA-MC1
 27.5   DSP
 27.51  ZOOM ZSG-1
 27.52  ZOOM ZSG-2
 27.6   MAS 3507D
 27.7   Computer sound cores
 27.71  Wave
 27.72  SID
 27.73  Apple Sound Chip
 27.74  LMC1992
 27.75  Imagetek I5000
 27.76  AN7395
 27.77  uPD934G
 27.78  MP3

 28.    Extern
 28.1   Cassette Tape
 28.11  Clarion 809
 28.2   CD Audio

 29.    Extra
 29.1   MB87078
 29.2   Toshiba
 29.21  TC9176
 29.22  TC9185
 29.3   AN5836
 29.4   BA3121
 29.5   SSM2047
 29.51  SSM2300
 29.6   TEA6320
 29.7   09R81P

 30.    Audio Amplifier
 30.1   Fujitsu
 30.2   Hitachi
 30.3   Japan Radio Co.
 30.4   Mitsubishi M51516
 30.5   National Semiconductor
 30.6   NEC
 30.7   NJMxxxx
 30.8   Other
 30.9   Philips
 30.A   Sanyo
 30.B   Toshiba
 30.C   TL0xx

 31.    Potentiometers
 31.1   VR
 31.2   RV
 31.3   DS1267

..................................................................................................................................................................................................................................



S1.    MAME Sound Interface

- 0.284              : Sync the speaker streams, fixes the crashing after ~24hours at 48Khz when there is a resampler just before the speaker. Fixed fatalerror when trying to change the sample rate while in stream_update (emu\sound.cpp). Note: Kills g13jnr. Added error for problematic initial sample rates (emu\sound.cpp) [O. Galibert].
- 0.280              : Don't apply gain if value didn't change, also use u32 instead of int for io_connection index (emu\sound.cpp) [hap].
- 0.279              : Added full/channel route via menu instead of f/c keys (ui\audiomix.cpp). Moved notch filter check to ui (audio_effects\filter.cpp and ui\audio_effect_filter.cpp). Put devtag in add ful/channel menu entry. Added not initialzed message when entering menu too early (eg. pressing tab on the red warning screen) (ui\audiomix.cpp). Clamp final output to -32768, 32767 (emu\resampler.cpp). Don't repeat default settings at several places and removed unneeded float<->double conversions (emu\sound.cpp). Round default q down instead of up (probably has no audible effect) (audio_effects\eq.h). Fixed initial -volume setting (emu\sound.cpp). Use emplace instead of emplace_back when reconfiguring mapping (emu\sound.cpp), fixes cursor highlight issue in Audio Mixer menu. Finer control over HQ resampler settings (keeping max settings same as before) (emu\resampler.cpp and ui\audioeffects.cpp). Safety check for filter len (emu\resampler.cpp). Correction to input gain calc. Increase max input db so input gain won't distort the signal. Re-added infinite release option and also infinite ratio. Added a header to advanced settings (audio_effects\compressor.cpp) [hap]. Fixed problem when default devices are missing (emu\sound.cpp), fixes Portaudio error when WASAPI is enabled with no audio input devices in the OS. Misc sound fixes (emu\sound.cpp) [O. Galibert].
- 0.278              : Added audio_effects\aeffect.cpp/h, audio_effects\compressor.cpp/h, audio_effects\eq.cpp/h, audio_effects\filter.cpp/h, audio_effects\reverb.cpp/h, emu\resampler.cpp/h and osd\interface\audio.cpp/h. Added ui\audio_effect_eq.cpp/h, ui\audio_effect_filter.cpp/h, ui\audioeffects.cpp/h, ui\audiomix.cpp/h and ui\audio_effect_reverb.cpp/h. Added docs\source\techspecs\audio_effects.rst, device_sound_interface.rst and osd_audio.rst. Added osd\modules\sound\pipewire_sound.cpp and osd\modules\sound\sound_module.cpp. New sound infrastructure. Make AVI able to do more than stereo (util\aviio.cpp). Added a much faster LoFi resampler and resampler configuration saving and documentation (emu\resampler.cpp, emu\sound.cpp, ui\audioeffects.cpp and usingmame\mamemenus.rst). Fixed resampler config interaction with reset and history sizes to take desynchronization into account (emu\sound.cpp, sound\pulse_sound.cpp and emu\resampler.cpp). Fixed streamed inputs (sound\disc_cls.h, disc_inp.hxx and discrete.cpp). Ensure correct input of non-audio data (machine\netlist.cpp). Recompute filters after loading the configuration (audio_effects\eq.cpp and filter.cpp). Better step precision to avoid crackling (resampler_lofi; emu\resampler.cpp). Do not block on shift-f3 (sound\pipewire_sound.cpp). Removed obsolete options (compressor will be in effects, speaker report should go into a LUA plugin) (emu\emuopts.cpp and ui\sndmenu.cpp). Rework a case where the sound defaults are not put in place in correct order (when starting a system with mandatory cart without one) (emu\sound.cpp). Added a compressor. May need some tuning (ui\audio_effect_compressor.cpp/h). Better decoupling of the effects thread. Fixed incorrect detection of config loading when the driver file was not yet created. Fixed synchronous streams (emu\sound.cpp). Detect EQ when not actually used (audio_effects\eq.cpp). Do not interpolate when not changing rate, fixes pbobble2 and gunlock (emu\sound.cpp). Correct subtle timing issues, added -sound support and resampling at the edge (emu\sound.cpp). Allow positioning unknown and don't map (emu\speaker.h). Fixed mistake on microphone channel mapping (ui\audiomix.cpp). Better handling of -sound none. Correct handling of streams closed on the OSD side (emu\sound.cpp and ui\mainmenu.cpp). Allow seperate display and configuration names for sound nodes. Fixed typo on mono channels. Tell the OSD about the update (emu\sound.cpp). Allow to compile without threads, by defining SOUND_DISABLE_THREADING. Fixed sync issue when starting a stream that was stopped. Fixed extremely subtle and rare problem that could happen when changing stream frequency (emu\sound.cpp). Moved positions to osd interface. Added special-casing for LFE and reverb (currently too subtle, need to find out why). Removed the hard cutoff ceiling at 20K. It was an initial way to limit the number of phases and filter length, and that is done explicitely now. Plus, who knows, maybe someone will want to run ar 192KHz some day (emu\resampler.cpp). Fixed reverb decays and disable by default reverb and compressor (audio_effects\compressor.cpp and reverb.cpp) [O. Galibert]. Make sure m_samples_to_update is 0 when returning from update() (emu\sound.cpp). Added sync time to savestates (emu\sound.cpp). Prevent stream buffer overflow after detecting it (machine\netlist.cpp). Like with the rest of the UI, press Del to set resampler settings to default. Gray out hq resampler settings if resampler is not hq (ui\audioeffects.cpp). Merged a number of speakers. Re-added support for -volume option (works same as before sound rewrite) (emu\sound.cpp and emu\emuopts.cpp). Fixed range checker with negative values (emu\emuopts.cpp and util\options.cpp). No need to save master volume of 0. Disable error.log "Sound reset" message by default (emu\sound.cpp). Updated mapping when changing audio mixer configuration (fixes issues in audio mixer menu, like randomly adding new entries when pressing l/r, cursor randomly moving to 1st entry when pressing l/r, and portaudio errors when switching devices) (emu\sound.cpp). Removed obsolete wave (cassette sound) device (sound\wave.cpp). Fixed rounding issue with db adjust (ui\audiomix.cpp). Print verbose message if module doesn't support audio_latency option. Changed audio_latency meaning similar to what it was before (20ms steps for portaudio, xaudio2, wasapi), old mame.ini default setting of 2 should work fine. Correct stream_sink_update function (sound\js_sound.cpp). Set rate to SAMPLE_RATE_OUTPUT_ADAPTIVE (highest samplerate of device it outputs to) (emu\disound.cpp). Fixed default.cfg load not applying default effects and rename default.cfg default_audio_effects to audio_effects (same as system.cfg, there's no clash). Fixed crash after loadstate with different resampler setting (emu\sound.cpp). Detect preset when entering menu (audio_effects\reverb.cpp). Don't try to filter above nyquist freq (or slightly below it) (audio_effects\filter.cpp and reverb.cpp). Improved control over audio filter cutoff freq. Don't repeat min/max freq values in multiple places. Allow finer control of frequency with shift+alt (ui\audio_effect_filter.cpp). Changed freq to u32 and apply same nyquist freq fix (audio_effects\eq.cpp). Changed channel link range to 0-1 and most floats to 2-decimals (audio_effects\compressor.cpp). Added reset_all for resetting all variable settings (emu\audio_effects\*). Added LR_REPEAT flag when cursor is on db (ui\audiomix.cpp). Do limit rounding with roundf instead of manually (ui\audio_effect_eq.cpp and audio_effect_filter.cpp). Changed default bands to 100,330,1k,3,3k,10k. Check band mask instead of db when building filter (audio_effects\eq.cpp). Initialize channel positions in header file (prevents channel_position constructor initializing after initializing array of channel_position in sound backends) (osd\interface\audio.cpp) [hap]. Suppress some warnings [Patrick Mackinlay]. Avoid unnecessary float/double conversions (osd\interface\audio.h). Implemented movable and swappable patterns (reduces allocation and copying) (osd\interface\audio.h). Moved default implementation stuff out of the header, use algorithm library in place of memcpy (sound\sound_module.cpp). Added missing header for Clang (interface\audio.h). Fixed GCC uninitialised local variable warnings in sound_manager::run_effects() (emu\sound.cpp). Recirculate buffers rather than removing them to reduces allocations. Scale the number of samples to skip on overrun according to the packet size (sound\sound_module.cpp). Removed DirectSound sound module. The new menus were unusable with a touchscreen, and not conducive to localisation. It's still not possible to add sound routes with a touchscreen, but at least it's possible to configure routes that exist (mame\ui\*). Fixed localisation issues and less temporary objects (emu\sound.cpp and emu\audio_effects). Avoid anything that could possibly depend on static initialisation order across transaltion units. Allow speaker position names to be localised (modules\sound). Don't pretend it can create output streams (sound\none.cpp). Blind attempt at updating for base class changes (sound\js_sound.cpp) [Vas Crabb]. Set SOUND_DISABLE_THREADING for Emscripten target (scripts\genie.lua) [Justin Kerk].
- 0.262              : Removed cfg defvol/newvol (was already deprecated) (emu\sound.cpp).
- 0.255              : Made -volume in source file INI or higher priority context take precedence over volume read from CFG file (emu\sound.cpp). This matches behaviour of -bgfx_screen_chains [Vas Crabb].
- 0.250              : Don't force lower samplerate for dummy sound output module (emu\sound.cpp). When using LUA instead of OSD to obtain samples, we don't need sound output, but we need decent sample rate [feos].
- 0.249              : Save cfg master volume when non-default (emu\sound.cpp) [hap].
- 0.245              : Fixed missed samples due to state save. Use "stream.sound_stream" as module name for save_item. Use presave handler to store end_time() (emu\sound.cpp). Note: A save state may occur between time slices. Sound devices through sound.cpp are updated during a timer call every 20ms. When the state is saved, these devices are not updated to the current machine time. Consequently after a state load the devices have have a "time lag" since in postload buffer end time is forced to machine time. This change will save the last buffer end time so that all outstanding samples are processed. This is a core change. I tested it on some drivers. This needs a very thorough review and I post the PR primarily to document a possible solution [Couriersud].
- 0.239              : Suppress sound_assert errors for fill and copy-type operations when start index is out of range (emu\sound.h) [AJR].
- 0.236              : Added compile-time option to show visible annoying red border when sound is overdriven. Leaving it on for a bit at the start of the cycle so that devs might identify and fix some of these cases (emu\sound.h and ui\ui.cpp). Fixed overdriven sound in various Atari games (atarig1.cpp, atarig42.cpp, atarigx2.cpp, beathead.cpp, cybstorm.cpp, eprom.cpp, harddriv.cpp, skullxbo.cpp and thunderj.cpp). Reduced overdriven audio volumes in 20pacgal.cpp, alpha68k_n.cpp, cvs.cpp, dkong.cpp, equites.cpp (audio\ad_sound.cpp), hng64.cpp, kaneko16.cpp, lethalj.cpp, mcr68.cpp, meritm.cpp, stellafr.cpp, tank8.cpp and audio\decobsmt.cpp (deco32.cpp, de_3.cpp, de_3b.cpp and whitestar.cpp) [Aaron Giles]. Clip less in xexex.cpp [O. Galibert]. Rebalance audio levels in most seta.cpp games [AJR]. Make the compressor optional (clamp overdrive to -1.0-1.0 when off) (emu\sound.cpp). Note: The audio compressor temporarily reduces the overall volume when the audio output is overdriven. The default is ON (\-compressor) [hap].
- 0.232              : PulseAudio interface: Updated build requirements for Ubuntu (docs\source\initialsetup\compilingmame.rst) [Henrik Algestam].
- 0.231              : New BSD-licensed OPL/OPLL (YM3526, YM3812, YM2413, Y8950, YMF262, etc) core. OPL preparation: Define FAMILY constant in register classes, and use that instead of template specialization for family-specific behaviors. Expand channel masks to 32 bits. Added is_keyon() helper. * Made FM channel and operator mapping more flexible. Operators are now owned by the engine and can be dynamically assigned to channels. Register classes now provide a mapping between a linear set of operators and channels. The register data array is now a regular array instead of a vector. * Introduce OPL registers and create a ymopl_engine. Added support for sustain-less notes and the OPL envelope clocks (which does not divide by 3). * Moved keycode calculations into register class. Removed unnecessary recalc in phase generator. Lined up OPL frequency, feedback, algorithm and total level. * Implemented key scale level and OPL-specific LFO and phase handling. * Created new YM3526 device based on new OPL. Fixed keyon and sustain behaviors. * Fixed weird OPL multiple values. Clean up and further document OPL LFO. * No busy flag on OPL, so no need to do the work. Added a right shift of 1 to the output stage to line up volume with old implementation. * More compact way of representing key scale level values. * Moved the KSL bitswap into the registers since it's apparently fixed in OPLL and perhaps others. * Added support for ryhthm generation in OPL. Changed compute_volume to take a phase value directly, and expose operator phase. * Fixec OPL timers. * Start LFSR with a non-zero value to ensure it actually starts generating for OPL. * Fixed silly bug in sustain logic for OPL. Fixes a lot of previously missing sounds. * Create OPL2 engine. Added waveform support for OPL2/3 waveforms. * Wire up YM3812 to the new OPL2 engine. * Reset OPL timers when the mask is written as well. * Managed rhythm key ons separately. Fixes Wardner awfulness. * Explicitly make channel logic handle 0, 2 or 4 operators rather than checking each one for null. Also simplify the combining logic for the 2 operator case. * Reverse bit order of LFSRs to make things a little simpler. Fixed OPL LFSR so that it has its full 23-bit period. * Changed outputs along the path to arrays rather than stereo items. This allows for four channel output. Also added a constant for the number of outputs to the register class. * Moved status register bit definitions to the registers class. Generically support the IRQ bit. * Create shared helpers for FP encode/decode/roundtrip and use them throughout. Also update TMNT to use the FP decoder. * No need to clamp when using the roundtrip. * Clear the EOS flag when execute is turned off on ADPCM-B. Fixed combine_status in YM2608 to ignore previously set flags. * Added missing note_select in base class. Don't add 1 to the OPL release rate. * Moved Y8950 over to new OPL engine. * Removed old y8950, along with FMOPL and YM DELTA-T. * Added updates prior to status reads for ADPCM systems. * Added status_mask and irq_reset logic into the core. Clean up documentation on family-specific registers. Includes some temporary gross debugging stuff. * Made debugging less gross by giving operators and channels a reference back to their owner. * Fixed status port address in OPL chips. Reduce ADPCM volume to match previous implementation. * Fixed Y8950 ADPCM start. Return masked status properly. * Initial cut at OPLL mapping. * Added YM2413 support based on YMFM. Added YM2423 and YMF281 variants as well. Instrument data is now loaded via external ROMs. Added 'depress' envelope support to the core engine. Fixed a number of issues in the ymopll_engine. Documented hard-coded values. Moved register clear into register-specific reset. * Added missing identifier. * Y8950 is OPL not OPL2. * Some documentation cleanup. Consistency fixes in the register classes. * Consolidate large comments. Added support for delayed modulators for OPL. Broke out 2-op and 4-op cases to help simplify logic. Fixed overflow handling in fp encoding. * Changed operator assignment mechanism to be more readable. Added prepare method to be called at the start of sound update. Added ALL_CHANNELS constant to register files. Updated all consumers to call prepare and use constants where applicable. * Moved YMF262 and YMF278B to use new FM engine for OPL3/4. Fixed several issues in OPL3 logic, which now seems to work ok. * Minor fixes. More documentation. * Added caching of data to prepare methods to improved performance. Moved non-register decoding logic out of the .h file and into .cpp file. Moved phase_step calculation into register class. * More notes. Removed keycode from cache. Splitted 2/4-operator outputs into separate functions. Changed OPN/OPL to use templates for variants. Added channel/operator_offset helpers. * Fairly substantial overhaul of register interface. Register interface is now stateless and contains family-specific state. Channel and operator accessors are prefixed by ch_/op_ now and require an offset to the specific channel or operator. Moved LFO/noise generation into register class, along with keyon logging. * Added noise back to OPL/OPLL. * Added early-out for low envelope. Moved waveform logic out into family-specific code. General clean up of ordering. Reduced family base class to minimal needed. * More aggressively track active channels to help performance. * Use only summing outputs for consideration of active channels. Centralized the logic of determined 4-op vs 2-op. * More conservative channel deactivation. * Added helper to compute the sample rate and use it in all implementations. Removed unneeded chnum/opnum members. * Fixed error in YM2612 that caused crashes. * Switching parameters and locals to 32-bit values gives a noticeable performance boost. * Ensure SSG inverted flag is only tested on systems with SSG support in the innermost loops. * Make most constants 32-bit as well. Expose some constants via the engine class. * Expand waveforms ahead of time. Optimized the attenuation lookup a bit. * If volume is low, don't erase output, just leave it alone. Fixes missing sound in raimais. * Replaces a couple of magic numbers with constants. * Normalization of FM engine usage across consumers. * Removed explicit external prepare() call; this logic is now automatically done after writes and periodically. Changed OPL/OPLL to use native formats for block/fnum. Fixed waveform generation. Fixed PM and AM depth on OPL/OPLL. * Cache multiple value. Clean up output handling a bit. * Moves multiple caching ahead of phase step caching. * Fully split OPLL from OPL. Removes many hacks now that OPLL registers can have state. Created shared helpers between OPL/OPLL. Removed more aggressive channel disables since it was not rhythm friendly and didn't really buy much. * Removed bad write in OPL mode case. Fixes fsoccer intro. Only call set_reset_status() once per mode call. * Removed FM output boost in YM2608/2610. Better matches previous volume now. * Make AM/PM logging less confusing. * Let's actually set DYNAMIC_OPS properly. * Improved logging. * Comment cleanups. Added constant for dynamic phase. Pre-shift sustain level. Srcclean. * Fixed memory regions on YM2608 games. * Clean up YMADPCM to line up with recent YMFM changes. * ym2413, ym3526/ym3812 and y8950: Reshuffled read/write handlers. Rename them to less confusing names. * ymf262: Match read/write details to datasheet and previous tests. * Use a constexpr function instead of macro for packing operator numbers. Pre-compute OPM LFO waveforms. * Generated OPL4 engine to support the proper clock divider and new flags. Update YMF278B to use FM timers and status rather than replicating the logic. * Fixed 4-operator enable on new OPL4 instance. * Fixed FM downsampling and adjust balance in YM278B. Fixed wrapping bug when using fill/copy/bulk-add on write_stream_views (emu\sound.h) [Aaron Giles]. Pulseaudio support (sound\pulse_sound.cpp). Don't go down to the OSD on redundant mute calls (like VGMPlay's 44100 times per second) (emu\sound.cpp) [O. Galibert].
- 0.226              : Complete sound modernization of remaining devices. Removed legacy stream support and stream_sample_t [Aaron Giles]. Reserved space before taking addresses of new vector items. This code is still unsafe, 16 just happens to be enough for the systems in MAME (The old vector_t implicitly reserved space for 16 items on construction) (sound\discrete.cpp). Fixed more crashes and modernise a little. Reserved some space in another vector that it takes addresses to members of (fixes lack of sound in dkong and dkongjr). Removed dependence on auto_alloc and friends. There's one more problematic make_unique_clear now, but there are several fewer auto_alloc family calls (sound\discrete.cpp). Get rid of vtables in factories. This speeds up compilation (sound\discrete.cpp) [Vas Crabb]. Created m_specified_inputs_mask to track which inputs have been specified (emu\disound.cpp). Sample rate now saved as part of the stream (emu\sound.cpp). Fixes distorted sound in sfrush and sfrushrk when loading from save state. Fixed bug where gain was doubly-applied in some cases (emu\sound.cpp) [Aaron Giles].
- 0.225              : Drive updates more sensibly from the sound manager, fixing some asserts (emu\sound.cpp). Fixed edge case where pending sample rate matches output (emu\sound.cpp). Some optimizations for common cases. Reuse resamplers if routing the same output to multiple targets at the same rate. Avoid copying when there's only one stream going through a mixer (emu\disound.cpp and emu\sound.cpp). Fixed asserts due to sample-rate ping-pong in (MESS) esq5505 driver (emu\sound.cpp). Fixed some crackling when upsampling (emu\sound.cpp). Added a few new helpers to write_stream_view: put_clamp - clamps the input value before writing, put_int - takes an integer and coverts it to float, put_int_clamp - converts and clamps an integer and add_int - converts an int and adds to the current sample (emu\sound.h). Fixed assertion when loading save state from command line (emu\sound.cpp) [Aaron Giles]. Changed some sound devices back to using std::unique_ptr<T []> for things that don't need to change size (sound\k005289.c, k054539.c and mos6560.cpp). Using a std::vector has additional overhead for keeping the size and allocated size, and it means you can inadvertently resize it. Also, if you register one for save state then cause it to reallocate, very bad things happen. Disable SOUND_DEBUG for non-debug builds [Vas Crabb].
- 0.217              : Use fill_n and resize to zero memory instead of memset (emu\disound.cpp and sound.cpp) [AJR].
- 0.204              : Added getters for input/output gain (emu\disound.cpp) [hap].
- 0.201              : sound_stream::sample_rate() was broken since adding support for setting a zero rate, nothing appears to rely on it (emu\sound.h) [smf].
- 0.198              : Route sound relative to current device. Slot card additions run in the context of the slot itself, which isn't entirely intuitive. Slot configuration needs a bunch of other cleanup anyway (emu\disound.cpp) [Vas Crabb]. If stream->update() is done going back in time (originating from different devices at a different execution point), don't try to generate a negative number of samples (emu\sound.cpp) [O. Galibert].
- 0.189              : Fixed CPU communication issue that sometimes caused sound to disappear entirely (m_soundlatch; drivers\flstory.cpp) [AJR].
- 0.188              : Make a few more methods const (emu\disound.cpp) [AJR].
- 0.186              : Updated mame\audio and devices\sound devices to use device_add_mconfig insted of device_mconfig_additions [Osso].
- 0.182              : New callback for generic_latch_8/16_device: Added MCFG_GENERIC_LATCH_DATA_PENDING_CB to raise and lower a line automatically as the latch is written and read. This should make sound IRQs easier to deliver and reduce the incidence of HOLD_LINE in drivers. Updated a few drivers to use this new callback (dec0.cpp and discoboy.cpp). Invert logic (latch_read -> latch_written). Also fixes initial callback after start [AJR].
- 0.175              : Second-to-last gen_latch.cpp update. Removed the old soundlatch methods (emu\driver.cpp). Sound trampolines removal from various drivers [Osso].
- 0.174              : Updated drivers to use the new gen_latch.cpp, which should substitute the soundlatch_* methods in driver_device [Osso].
- 0.173              : Added machine\gen_latch.cpp/h. Added generic latch to replace soundlatch in driver_device and additional members for compatibility [Miodrag Milanovic].
- 0.171              : Don't crash on state load when the mixer is disabled by lack of inputs (misconfiguration or missing samples) (emu\disound.cpp) [O. Galibert].
- 0.170              : Have sound_stream::input_name return the std::string it constructs (emu\sound.cpp) [AJR].
- 0.161              : Preventing asserting on vector item access (emu\sound.c) [Miodrag Milanovic].
- 0.159              : Removed lots of useless sound IRQ trampolines leftover from the Pre-DEVCB era (drivers\backfire.c, bfm_sc4h.c, bfm_sc5.c, bfm_swp.c, bishi.c, cabal.c, deco156.c, gunpey.c, maygayep.c, midas.c, nmk16.c, powerins.h, quizpani.h, shanghai.c, toaplan2.c and zn.c) [Alex Jackson].
- 0.158              : Removed lots of useless sound IRQ trampolines leftover from the Pre-DEVCB era (drivers\actfancr.c, aerofgt.c, alpha68k.c, crospang.c, dec8.c, deniam.c, fuukifg2.c, fuukifg3.c, galspnbl.c, hcastle.c, itech8.c, lordgun.c, metro.c, midtunit.c, nemesis.c, nmg5.c, oneshot.c, onetwo.c, prehisle.c, psikyo.c, psikyo4.c, psikyosh.c, stadhero.c, snk68.c, snowbros.c, spbactn.c, spdodgeb.c, spy.c, suna8.c, tbowl.c, tecmo.c, toaplan1.c, toaplan2.c, twincobr.c, wardner.c and yunsun16.) [Alex Jackson].
- 0.154              : Changed remaining references to -nosound to -sound none in code and docs; moved description of -sound option to OSD-specific doc files to be orthogonal to -video [Alex Jackson]. USE 64bit intermediary results in sound_stream::generate_resampled_data (emu\sound.c). This will allow sound drivers (see AY-3-8910) to make use of the full width of stream_sample_t [Couriersud].
- 0.153              : Added savestate registration for the generic soundlatches, which seemed like a good idea. Any particular reason why these weren't being saved? [Alex Jackson].
- 0.151              : Removed SOUND_START legacy MACRO. Added SOUND_START_MEMBER and SOUND_RESET_MEMBER macros (emu\driver.h, emu\drivlgcy.h, mame\audio\cchasm.c, mame\audio\cinemat.c, mame\audio\dkong.c, mame\audio\jedi.c, mame\audio\mario.c, mame\audio\mw8080bw.c, mame\audio\n8080.c, mame\audio\redalert.c, mame\audio\scramble.c, mame\audio\segag80r.c, mame\drivers\cchasm.c, mame\drivers\dkong.c, mame\drivers\equites.c, mame\drivers\jangou.c, mame\drivers\lucky74.c, mame\drivers\mirax.c, mame\drivers\n8080.c, mame\drivers\segag80r.c and mame\includes\lucky74.h). Removed SOUND_RESET legacy MACRO (emu\driver.h, audio\cinemat.c, includes\cchasm.h) [Osso].
- 0.148u4            : Made m_audiocpu, m_subcpu and m_soundcpu optional for those drivers setting value on null, rest will need to be catch with automated tests (includes\aerofgt.h, bishi.h, btime.h, cave.h, champbas.h, cps1.h, cvs.h, dec8.h, dynax.h, f1gp.h, fromanc2.h, gaelco.h, gameplan.h, homedata.h, marineb.h, mexico86.h, moo.h, pgm.h, psikyo.h, system16.h, taito_l.h, taito_z.h, tmnt.h, tnzs.h, tumbleb.h and yunsun16.h). Changed machine().device("soundcpu") with m_soundcpu. Same for "sub" and "subcpu" [Miodrag Milanovic].
- 0.147u1            : Removed some expressions which are always true (emu\sound.c) [Oliver Stoeneberg].
- 0.146u4            : hap fixed soundlatch warning (emu\driver.c).
- 0.145u8            : Fixed sound code dependency, this fixes linking of tiny build (sound\sound.mak) [Miodrag Milanovic]. Separated user gain from input gain. Added more functions to map inputs and devices to outputs in sound streams. Some general cleanups in the sound/streaming code [Aaron Giles].
- 0.145u7            : Removed audio\generic.c/h and emu\watchdog.c/h. Enhanced the mixer interface support to allow for more than one output line. To use this you need to use the MCFG_MIXER_ROUTE macro instead of MCFG_SOUND_ROUTE so that the mixer output index can be specified. See midway_ssio_device for an example (emu\disound.c). Moved soundlatch helpers into driver.c. Normalized soundlatch helper function names. Created delegates for machine / sound / video_start / reset callbacks and added necessary infrastructure to use them going forward [Aaron Giles]. Non device audio board modernization [Miodrag Milanovic].
- 0.145u6            : Moved all drivers to using the audio/watchdog helpers defined in the driver_device base class [Miodrag Milanovic].
- 0.145u4            : Make all items connected to mixer inputs available in the UI, not just items connected to speakers [Aaron Giles].
- 0.145u2            : Create a new device_mixer_interface, derived from device_sound_interface, which mixes all its inputs to a single output stream. Redefined the SPEAKER device to use this and remove the duplicate underlying logic. The main purpose of this new interface is to allow device-ification of an entire sound board, which can itself become a mixer of all of its sound components to a single output stream. This stream can then be routed by the device's owner to the appropriate speakers. A real-life example will show up soon [Aaron Giles].
- 0.141u2            : Removed emu\streams.c/h. C++-ified the sound and streams interfaces. Combined sound.c and streams.c into one file, and separated the speaker device into its own file. Generalized the concept of dynamically assigned inputs and re-wired the speaker to work this way, so it is now treated just like any other sound device. Added methods to the device_sound_interface for controlling output gain and mapping device inputs/outputs to stream inputs/outputs. Also made the sound_stream_update() method pure virtual, so all modern sound devices must use the new mechanism for stream updates [Aaron Giles]. Curt Coder added all CPU and sound devices in emu folder to the MAME build.
- 0.141u1            : Added a virtual stream update function to the device sound interface. Added a new stream_create that takes fewer parameters and calls the device's stream update. Removed the stream update stub template. Updated BSMT2000 and OKIM6295 to use the new interface for their streams [Aaron Giles].
- 0.139u4            : Atari Ace updated driver-specific sound devices to use tokens and store their state like other devices.
- 0.139u3            : Atari Ace removed artificial SOUND_ prefix from sound device names. Aaron Giles moved sound routing for non-speaker devices over to the sound interface's post-start method. Routing from one sound device to another was broken when sound_init() was moved ahead of device startup.
- 0.138u2            : Added emu\disound.c/h.
- 0.136u1            : Removed sndintrf.h. Aaron Giles removed the various HAS_xxxx for sound cores. To select sound cores, just choose them in the make system. Further granularity is not necessary. This also means that the samples core is always required.
- 0.135u1            : Aaron Giles expanded some sound chip tags to specifically indicate they are sound chips (generally, "ay" becomes "aysnd", "fm" becomes "fmsnd", etc).
- 0.134u4            : Dirk Best changed device callback system to look up devices owned by the same parent if a child device references another device.
- 0.133u5            : Atari Ace de-globalified sound.c.
- 0.131u1            : Deprecated device_set_info. Almost all devices had a NULL or empty function here. Remaining devices have been converted to have device-specific functions to do the same thing with proper type checking. CPUs still have a set_info function but it is CPU-specific now and no longer piggybacks on the general device function [Aaron Giles].
- 0.129u4            : Removed emu\sndintrf.c. WARNING: This build has a major change in it (sound chips are now devices) that may lead to some unexpected errors or sound problems. Please report any issues you find over at http://mametesters.org/mantis. Aaron Giles converted all sound chips into proper devices. Merged the sound chip interface into the device interface, removing any differences (such as the whole ALIASing concept). Aaron Giles modified every sound chip in the following ways: Updated to match the device interface. Reduced read/write handlers down to the minimal number. Added the use of get_safe_token() for ensuring correctness. Other minor cleanup. Aaron Giles vastly simplified the sound interfaces, removing the ghastly sndti_* business and moving everyone over to using tags for sound identity. sndintrf, like cpuintrf, is now just a header file with no implementation. Modified each and every driver that references a sound chip [Aaron Giles]: All memory maps explicitly reference the targeted device via AM_DEVREAD/AM_DEVWRITE/AM_DEVREADWRITE. 16-bit and 32-bit accesses to 8-bit chips no longer use trampoline functions but instead use the 8-bit AM_DEVREAD/WRITE macros. All references to sound chips are now done via tags. Note that these changes are brute force, not optimal; in many cases drivers should grab pointers to devices in MACHINE_START and stash them away. Aaron Giles added the ability for devices to have their own custom inline config management. This was primarily added to allow for sound routes to be supported in a way that is compatible with the current driver structure. A device can now define a DEVICE_CUSTOM_CONFIG callback which is called whenever one of the MCONFIG_TOKEN_DEVICE_CONFIG_CUSTOM_* tokens is encountered. A special token MCONFIG_TOKEN_DEVICE_CONFIG_CUSTOM_FREE is defined to clean up memory allocated and/or reset the custom configuration, and is called when the device is torn down to allow for memory cleanup.
- 0.129u2            : Sound cores no longer allocate their own tokens. Instead they return a new integer value indicating the size of token they want, and the core allocates it for them. This mirrors the standard device behavior [Aaron Giles]. Aaron Giles removed redundant config parameter from SND_START.
- 0.129u1            : Atari Ace removed the sndindex parameter from SND_START, in favor of using the device pointer or tag as appropriate. Atari Ace made the treatment of SOUND_xxx the same as that of CPU_xxx. That is, they are function pointers to the SND_GET_INFO routine for the sound. Dirk Best removed several useless occurrences of "#define INLINE" in CPU and sound cores.
- 0.129              : Atari Ace updated all the sound core header files to declare their SND_GET_INFO functions, which will be needed once the sound cores become proper devices. It also makes a handful of other header declaration fixes in emu\sound, and makes one SND_RESET routine static. Note: votrax.h is a new include file altogether. Aaron Giles changed all CPU and sound cores to use memory_find_address_space() instead of cpu_get_address_space(). The former is reliable even during early initialization when the CPU cores generally need it.
- 0.128u7            : Aaron Giles cleaned up device and sound interfaces to match the CPU interfaces when handling strings. Namely, the generic get_info functions allocate a temporary string and the device in question copies its string to the target, instead of assigning a const char *. Updated all device and sound cores to operate this way.
- 0.128u6            : Atari Ace removed remaining deprecat.h references from the sound cores.
- 0.128u5            : Atari Ace furthered the process of aligning the sound cores with the recent cpu core changes. Added a fake device implementation similar to the one the cpu cores are using. Made some interface adjustments aligned to 128u4 (i.e. adding snd_class_header, adding get_ to various getter functions). The primary benefit of this change is the removal of "deprecat.h" from 23 sound cores. Also adjusted ui.c to stop calling sndnum_clock and access the clock data similarly to how it does the cpu clock data. Note from Aaron: Further changes to the sound interfaces will be kept to a minimum until the CPUs are sorted out. Aaron Giles extended the fake sound devices to have more populated fields. Modified sound cores to use tags from the devices and simplified the start function. Aaron Giles renumbered CPU and sound get/set info constants to align with the device constants, and shared values where they were perfectly aligned. Aaron Giles set the type field in the fake device_configs for CPU and sound chips to a get_info stub which calls through to the CPU and sound specific get_info functions. This means the device_get_info() functions work for CPU and sound cores, even in their fake state. Aaron Giles changed device information getters from device_info() to device_get_info() to match the CPU and sound macros.
- 0.128u4            : Defined macros for standard sound core functions and updated all sound cores to use them [Atari Ace].
- 0.127u3            : CPUs, sound chips, devices and ROM-regions which are specified by devices now have their tags auto-prefixed with the device's tag. This allows for multiple instances to be present. For example, the PR-8210 laserdisc player has a CPU with a tag of "pr8210". When it is included as a device by a driver, the driver may tag the device "laserdisc". The resulting final CPU tag name will be "laserdisc:pr8210". Also updated the debugger expression engine to support names with embedded colons [Aaron Giles]. Aaron Giles added checks to ensure that tags used for CPUs, sound chips, regions and devices follow some basic rules: they should be less than 15 characters long, be all lower-case, and only contain letters, numbers, underscores, or dots (no spaces). This is to ensure that they can be used properly in debugger expressions and don't get too long or unwieldy to type (even 15 chars is rather long). Fixed up all tags in the system that failed these checks.
- 0.127u2            : Aaron Giles changed refreshspeed target to 0.25Hz below rate provided, in order to guarantee that inexact timings do not lead to sound stuttering.
- 0.127              : Oliver Stoenberg removed duplicated TMS5110 entry in sound.mak.
- 0.126u5            : Oliver Stoeneberg cleaned up and grouped the sound chip entries based on sound.mak. Derrick Renaud updated structure and naming conventions of sound and CPU cores to match core conventions.
- 0.126u3            : Aaron Giles introduced a new auto-binding mechanism for sound cores. This works similarly to the CPU binding. Each sound core that requires a memory region now auto-binds to the region with the same tag as the sound core. In almost all cases, this allowed for the removal of the explicit region item in the sound configuration, which in turn allowed for many sound configurations to removed altogether.
- 0.126u2            : Aaron Giles removed MDRV_SOUND_ADD. Renamed MDRV_SOUND_ADD_TAG to MDRV_SOUND_ADD. All sound chips must now include a tag. Changed all existing drivers to define a unique tag for each sound chip.
- 0.124a             : Aaron Giles fixed major regression in 0.124 which caused many sound routes to be applied incorrectly (emu\mconfig.c).
- 0.123u5            : Fixed loading mixer settings when the driver default value is calculated (emu\sound.c) [Nicola Salmoria].
- 0.123u2            : Atari Ace added some missing cores to sndintrf.c.
- 0.122u7            : Couriersud added MDRV_SOUND_ROUTE_EX to specify target input channel. Added input ID to route struct (emu\driver.h).
- 0.121u3            : Aaron Giles added an assert to ensure that the sound clear latch value is only set at init time, since its value is not saved.
- 0.120u3            : Some build-related improvements to the sound cores [Atari Ace]: The WAVE dependency on MESS code was made explicit, so it can be built independentally of MESS.
- 0.120u1            : Atari Ace defined strict types for CPU and sound chips.
- 0.118u5            : Atari Ace changed all comparison for CPU and sound chip types to compare against CPU_DUMMY or SOUND_DUMMY instead of 0. Also updated usages of sndti_to_sndnum() so that they use sndti_exists() where appropriate.
- 0.116u3            : Zsolt Vasvari updated all sound cores to use mame_time instead of double.
- 0.116              : Atari Ace improved independence of CPU and sound core variants in order to make them more properly separated by the existing compile-time flags.
- 0.114u3            : Added support for aliasing sound types. This allows minor variants in sound cores to share the same fundamental "type" so that the same sndti_* functions can be used regardless of the subtype [Aaron Giles].
- 0.112u4            : Aaron Giles changed most sound cores to generate audio at their internal clock rates (or some multiple/divisor of them) rather than at the user specified output rate. This completes the second step of decoupling audio emulation from the user's sample rate choice.
- 0.112u1            : Aaron Giles added new function sound_find_sndnum_by_tag() to look up a sound index by its tag.
- 0.111u1            : Nathan Woods adding remaining MESS sound cores (sound\sid.c, sid6581.c, sidenvel.c, sp0256.c ...) to the core MAME sources.
- 0.108u5            : Nathan Woods fixed crash in Windows code if we are unable to create sound buffers (windows\sound.c).
- 0.108u3            : David Haywood added workaround for crash in the sound code under some edge cases.
- 0.104u5            : Atari Ace and Aaron Giles cleaned up include files in CPU/sound cores. CPU cores should generally only need to include cpuintrf.h. Sound cores should generally only need to include sndintrf.h.
- 0.104u4            : Splitted sndintrf.c into src\sound.c/h, sndintrf.c and sndhrdw\generic.c/h [Aaron Giles].
- 0.103u5            : Added sound\sound.mak.
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call, and converted the TMS5110, TMS5220, ES5505/6, BSMT2000, AY8910, POKEY, TIA, Sega PCM/Multi-PCM, SN76496, OKIM6295, and YMZ280B sound cores to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.102              : Aaron Giles removed ROMREGION_SOUNDONLY. Since -nosound no longer disables sound CPUs or sound cores (and hasn't for a while), failing to load sound ROMs was only leading to crashes.
- 0.99u9             : Aaron Giles fixed bug that caused the sound cores to keep running while paused.
- 0.94u2             : Aaron Giles removed some unwanted clamping code from sound core. Nathan Woods added entries for two MESS specific sound cores (C64/128) in src\sndintrf.c.
- 0.93u1             : Aaron Giles fixed running with -nosound.
- 0.93               : Removed sound\mixer.c/h. Everything is handled by the streams or by sndintrf.c directly. Mixing is performed by code in sndintrf.c which creates a stream to do the final mixing [Aaron Giles]. Sound System update (sndintrf.c): Sound cores are now hooked up very much like CPU cores. There is a single get_info function that is public for each core; all other functions and data are retrieved through it. Similar to CPU cores, you can call sndtype_xxx() to query/set values for a specific sound chip type; you can also call sndnum_xxx() to query/set values for an indexed sound chip in the Machine->drv->sound array; finally, you can call sndti_xxx() to query/set values for the nth instance of any give sound chip type (sndti = sound type+index). At startup, all sound cores/filters are created. Then all the speakers are created. Finally, everything is wired up together. There are new consistency checks to make sure you don't do anything wildly bad. sndintrf.c calls the OSD layer now, and always requests stereo output. It also does a final downmix from the various speaker streams into left/right streams based on the X coordinate of the speaker. sndintrf.h: We now no longer #include every sound core's header. You have to include them yourself in your driver [Aaron Giles].
- 0.85u2             : Fixed bug that prevented the mixer from loading data unless all channels had been modified [Aaron Giles].
- 0.84u5             : Fixed the mixer code so it doesn't crash if the OSD layer returns an error [Andrea Mazzoleni].
- 0.76u2             : Nathan Woods removed the update procedure in a MESS specific sound core.
- 0.76u1             : Nathan Woods removed wave_sh_stop() call from the MESS specific WAVE sound interface (it is extraneous now).
-  7th March     2001: Andrea Mazzoleni improved the mixer system to include an adjustable low pass filter, which will be used with the Darius 2 driver.
- 19th December  2000: Hiromitsu Shioya added some expanded volume setting functions to the mixer system.
- 0.37b7             : Important for porters: The HAS_XXX constants for cpu and sound emulation are no longer #defined in cpuintrf.h if they were not already defined. They are set by the makefile (rules.mak). If you are not using that in your port, you'll have to make sure that all constants are initialized somewhere.
- 0.36b16            : mixer.c now does all sound mixing, generating one single sample stream, played using the new osd_XXX_audio_stream() functions. All other OS dependant sample functions (osd_play_sample() etc.) have been removed. This should standardize the sound output across ports, and allow porters to write much cleaner sound code [Aaron Giles].
- 0.36b15            : Source: Added gain support to mixer.c, through the new MIXERG() macro (extension of MIXER()). Removed the gain filed from AY8910, YM2203, YM2610 structures.
- 0.35b13            : Added sound\mixer.c/h. Moved mixer control out of streams.c and into the new mixer.c. Now the On Screen Display can be used to change the volume of any channel, not just ones handled by streams.c. The configuration is also saved on exit and is automatically reloaded the next time you start the game [Nicola Salmoria]. struct GameSample no longer has a volume field (since it is not stored in .wav files), to replace that struct Samplesinterface has an additional volume field which affects all samples played. Replaced osd_adjust_sample() with osd_set_sample_freq() and osd_set_sample_volume(), and the OSD_PAN_xxx macros with MIXER_PAN_xxx [Nicola Salmoria].
- 0.35b10            : Reorganized the sound subsystems, hopefully I didn't break anything in the process [Nicola Salmoria].
- 0.35b9             : Changed sndhrdw\generic.c/h to src\sndintrf.c/h.
- 0.31               : Removed sndhrdw\waveform.c/h. Better handling of sound susbsystems, thanks to new fields in the MachineDriver structure. You can now use several susbystems at the same time, without any problem and without having to write sh_start(), sh_stop() and sh_update() functions. Samples have a better interface too.
- 0.30               : Added sndhrdw\waveform.c/h. New command line options, -sr N, where N is the required audio sample rate, and -sb N, where N is the number of sample bits (8 or 16). For example, MAME gyruss -sr 22050 -sb 16 will use a 22kHz sample rate and 16 bits. The -sb option currently doesn't change anything because none of the audio subsystems support 16 bit samples [Nicola Salmoria].
- 0.27               : Fixes to the audio code which should fix crashes on some games and compatibility problems with GUS and AWE 32 [Nicola Salmoria]. However let me stress once again that if you have an AWE 32 you should use the plain SoundBlaster driver. The AWE 32 driver sounds NOTHING like the original (and is slower). Increased the maximum number of digital audio channels from 8 to 16, so there are no more missing voices in the Mr. Do! games (Castle, Unicorns, Wild Ride, Run Run, and Kick Rider) [Nicola Salmoria].
- 0.20               : Nicola Salmoria changed GENERIC.C to add sound_command_latch_r(): this always return the last command, instead of 0, if there are no more pending commands. This was required by 1942.
- 0.08               : Better error checking in the sound initialization routines. It still sucks, but at least will notify of problems instead of locking up the emulation. The "0. Silence" driver also works. Removed the "-nosound" command line switch, replaced it with "-soundcard n" which allows to bypass the audio driver selection menu. Use "-soundcard 0" to turn off sound.
- 0.01               : Allegro library by Shawn Hargreaves, 1994/96 SEAL Synthetic Audio Library API Interface Copyright (C) 1995, 1996 Carlos Hasan. All Rights Reserved.
- SOURCE: emu\sound.cpp and emu\disound.cpp




S1.11  CoreAudio

- 0.279              : __MAC_12_0 is 120000 (AvailabilityVersions.h) [ksherlock].
- 0.278              : Changed audio_latency duration option to milliseconds (lib\osdobj_common.cpp, sound\coreaudio_sound.cpp). Changed audio_latency to seconds (float), so people with existing mame.ini won't get broken sound (lib\osdobj_common.cpp, sound\coreaudio_sound.cpp) [hap]. Preliminary revised macOS CoreAudio backend. Supports multiple input and output streams to multple devices simultaneously. audio_latency now is a floating-point number of 50 Hz audio frames. 0 is valid now. Channel layouts are determined when available (many devices don't support them). External effects support removed; it may return later. Rebuild the device list when the default devices change, fixes a crash when a new default device is connected. Added a callback for each active device to see if it becomes unavailable. Moved default device change check to get_generation so it happens regularly. Use property listeners to determine configuration changes instead of polling. Device additions are now tracked in addition to removals. Changing channel configuration in Audio/MIDI Setup is now tracked. Channel layout tag is a bitfield, not an enum (sound\coreaudio_sound.cpp) [R. Belmont]. Got rid of dependencies on emu and frontend. We're working to reduce circular dependencies. Adding more is a regression (sound\coreaudio_sound.cpp) [Vas Crabb].
- 0.267              : Fixed various warnings and simplify sound\coreaudio_sound.cpp [Vas Crabb].
- 0.216              : Get rid of global_alloc/global_free (sound\coreaudio_sound.cpp) [Vas Crabb].
- 0.196              : Added missing override (sound\coreaudio_sound.cpp) [smf].
- 0.161              : Added modules\sound\coreaudio_sound.c. Added CoreAudio sound output module. Advantages over SDL sound output are simpler code and lower latency. Added utility for editing AU effect presets (sdl\aueffectutil-Info.plist and sdl\aueffectutil.m). Converted CoreAudio output to use AUGraph in preparation for effects. Added AudioUnit effect support to MAME. Improvements to CoreAudio output: Clean up CoreAudio module, break up big functions, re-use more code. A little cleanup in AUEffectUtil. AUEffectUtil sizes windows automatically. Proper handling of unsaved changes in AUEffectUtil. Added save all menu item to AUEffectUtil [Vas Crabb].
- NOTES: CoreAudio backend for MAME
- SOURCE: osd\modules\sound\coreaudio_sound.cpp



S1.11  DirectSound

- 0.278              : Removed sound\direct_sound.cpp. Changed audio_latency duration option to milliseconds (lib\osdobj_common.cpp, sound\direct_sound.cpp). Changed audio_latency to seconds (float), so people with existing mame.ini won't get broken sound (sound\direct_sound.cpp) [hap]. Removed DirectSound sound module [Vas Crabb].
- 0.245              : Cleaned up logging in DirectSound module. Fixed building the DirectSound sound output module with the SDL OSD on Windows - the Windows headers are sensitive to include order [Vas Crabb].
- 0.161              : Proper C++ for DirectSound module, get rid of all static variables, some encapsulation (modules\sound\direct_sound.c) [Vas Crabb].
- 0.158              : Removed modules\sound\direct_sound.h. Converted sound modules to be osd_modules [Couriersud].
- 0.155              : Allow -sound dsound on SDL Windows builds. Fixes to try and make direct_sound work minus WinOSD. More dsound adaptation and attempts. -sound dsound now works with SDL. Fixed Windows builds with SDL 1.2 (sound\direct_sound.c) [R. Belmont].
- 0.154              : Changed osd\windows\sound.c to osd\modules\sound\direct_sound.c. Added modules\sound\direct_sound.h.
- 0.114              : Fixed DirectSound error if soundcard is disabled or not installed [Aaron Giles].
- NOTES: Win32 implementation of MAME sound routines
- SOURCE: osd\modules\sound\direct_sound.cpp



S1.12  PortAudio

- 0.279              : Re-add printf list of found devices with -verbose and added a check for duplicate device names. Can use unordered_map instead of map (sound\pa_sound.cpp) [hap].
- 0.278              : Enhance portaudio support. Sadly, portaudio is limited to the worst case of all OSes audio supports (and ALSA est rather bad) and does not yet handle hotplug. So the result is quite limited. Also, the devices when running portaudio over emulated alsa over pulseaudio are quite ugly. Still works though. Do not mess up on shift-f3 [O. Galibert]. Fixed a non-const global that should be const. Got rid of dependencies on emu and frontend. We're working to reduce circular dependencies. Adding more is a regression (sound\pa_sound.cpp) [Vas Crabb]. Added support for audio latency and samplerate options. Lower latency interval steps. Changed audio_latency duration option to milliseconds (lib\osdobj_common.cpp, sound\pa_sound.cpp). Added api info to device names (sound\pa_sound.cpp). Changed audio_latency to seconds (float), so people with existing mame.ini won't get broken sound (sound\pa_sound.cpp). Added error messages (+device name). Popmessage instead of printf if there's a device conflict while fiddling in the audio mixer menu (sound\pa_sound.cpp) [hap].
- 0.260              : Updated PortAudio to latest upstream version. Resolves issues building with Visual Studio. Enabled PortAudio when building with Visual Studio and Clang-CL. Removed note about duplicate GUID symbols in PortAudio when built with MSVC [Invertego].
- 0.254              : Sync PortAudio to upstream: Tested and works on Windows, macOS and Linux. Fixes compatibility with macOS Ventura and bugfixes WASAPI and WDM-KS on Windows (3rdparty\portaudio\*) [R. Belmont, PortAudio team].
- 0.215              : vs2019_clang builds and links with portaudio disabled [smf].
- 0.212              : Suggestion for very-low-latency mode on PortAudio. Needed to keep audio in sync when playing rhythm game machines such as Konami System 573. This is because the lowest audio_latency currently supported (audio_latency 1) introduces at least 10 ms of variable latency. I am unsure how to go about this without breaking backward compatibility so I set it to work only when audio_latency is 0 (which was previously ignored by MAME itself and was treated equivalent to audio_latency 1). I am aware that setting audio_latency to 0 is not supported by many MAME frontends, but this change seems natural. Otherwise, would it be better to add a new mame.ini option, or to automatically enable this low-latency mode when pa_latency is set lower than, say, 0.01 (10ms), which would break people's configurations if they already rely on the old behavior? (sound\pa_sound.cpp) [Eric Vidal].
- 0.196              : Added missing override (sound\pa_sound.cpp) [smf].
- 0.183              : Fixed PortAudio issues on 32-bit builds and clamp latency [intealls]. Minimal PortAudio const-correctness [Olivier Galibert].
- 0.182              : Added sound\pa_sound.cpp. PortAudio library update and backend. Fixed memory leak and log error checking (sound\pa_sound.cpp). Fixed PortAudio MinGW cross-compilation (3rdparty\portaudio\src\hostapi\wasapi\pa_win_wasapi.c). Fixed allowed latency range in PortAudio. Simplify the audio buffer and fix a wrap-around issue [intealls].
- 0.164              : Added ability to use system PortAudio [Julian Sikorski].
- 0.163              : Added portaudio library and library for supporting unit tests with some initial tests. Added LUA script/makefile changes to support building tests and portaudio (scripts\src\tests.lua) [Miodrag Milanovic].
- NOTES: PortAudio interface
- SOURCE: osd\modules\sound\pa_sound.cpp


S1.13  SDL

- 0.279              : Fall back to 2 channels if 0 channels are detected on a device (sound\sdl_sound.cpp) [Manuel Alfayate Corchete].
- 0.278              : Make system default work (sound\sdl_sound.cpp). Rework a case where the sound defaults are not put in place in correct order (when starting a system with mandatory cart without one) (emu\sound.cpp and sound\sdl_sound.cpp) [O. Galibert]. Don't try to call SDL_GetDefaultAudioInfo for SDL older than 2.24.0 [AJR]. Allow MAME to be built with SDL 2.0.14 or 2.0.15 with limited functionality. Correct SDL verson detection macro (sound\sdl_sound.cpp) [Vas Crabb].
- 0.274              : Added missing standard library headers (util\corestr.cpp and sound\sdl_sound.cpp) [Julian Sikorski].
- 0.239              : Fixed Coverity errors (sound\sdl_sound.cpp) [Vas Crabb].
- 0.207              : Removed leftover variable (sound\sdl_sound.cpp) [Enik Land].
- 0.206              : Clean up sdl_sound a bit (sound\sdl_sound.cpp) [Vas Crabb].
- 0.205              : Rework the circular buffer (sound\sdl_sound.cpp). Previous code had several oddities. Like checks against buffer overflows/underflows done at several places in the code, usage of a spinlock, unnecessary use of "volatile" qualifier, redundant informations about the circular buffer and exposed details about the split nature of ranges in the buffer. This lead to an unlikely deadlock once in a great while [Celelibi].
- 0.158              : Removed sdl_sound.h.
- 0.156              : SDL2 is now the default except for OS/2 builds. Tell SDL to stop sound when volume is set to max attenuation (sound\sdl_sound.c). Experimental rework of SDL buffer size calculation (sound\sdl_sound.c) [R. Belmont].
- 0.154              : Changed sdl\sound.c to osd\modules\sound\sdl_sound.c. Added modules\sound\sdl_sound.h and js_sound.c/h.
- 0.153              : Fixed for stream_buffer free (sdl\sound.c) [Miodrag Milanovic].
- 0.147              : Fixed for an SDL sound bug surrounding use of -speed and pausing frequently causing corrupt sound (sdl\sound.c) [Antonio Giner].
- 0.142u4            : Changed default value/maximum setting for audio_latency in SDL to match that of baseline (sdl\sound.c) [Tafoid].
- 0.136u1            : Added osd\sdl\sound.c. SDLMAME initial import [R. Belmont, Couriersud].
- NOTES: SDL implementation of MAME sound routines
- SOURCE: osd\modules\sound\sdl_sound.cpp



S1.14  WASAPI

- 0.278              : Added sound\wasapi_sound.cpp. Added preliminary WASAPI sound module (not enabled yet). Improved error handling and buffer management (sound\wasapi_sound.cpp). Made WASAPI sound the default on Windows and made DirectSound lower priority than XAudio2 (lib\osdobj_common.cpp). Deal with resetting per-app device to default in Windows mixer controls. Don't print an error message on a "not found" error getting default devices - this happens when there are no active devices. Changed logging back to display names. Repeat the channel mask from the mix format back when initialising the audio client. Got rid of dependencies on emu and frontend. We're working to reduce circular dependencies. Adding more is a regression. Avoid another potential deadlock. It's possible for a device format property update to block an activate call. There's still a race condition in that if streams get device invalidated errors before the property update arrives, the core may try and fail to create replacement streams. This at least stops it from causing a deadlock, at worst you lose sound. Handle someone messing with the mixdown format right as MAME exits (sound\wasapi_sound.cpp) [Vas Crabb].
- NOTES: WASAPI implementation of MAME sound routines
- SOURCE: osd\modules\sound\wasapi_sound.cpp



S1.15  XAudio2

- 0.278              : Added sound\mmdevice_helpers.cpp/h. Changed audio_latency duration option to milliseconds (lib\osdobj_common.cpp, xaudio2_sound.cpp). Changed audio_latency to seconds (float), so people with existing mame.ini won't get broken sound (xaudio2_sound.cpp) [hap]. Initial support for new sound system features (sound\mmdevice_helpers.cpp). Setting the default latency to the target buffer submission frequency is a bad idea. Changed total buffer size to actually match specified latency (calculation didn't conside sample size or channel count). Smarter buffer submission algorithm. Listen for critical engine errors and more Clang warnings. More paranoid cleanup: This hopefully fixes the freezes on exit when changing the sample rate underneath it. Sound may or may not work after you do this until you restart MAME due to race conditions. Better handling of critical errors and more verbose logging. More fixes: Fixed a couple more potential deadlocks when handling critical engine errors. Better tracking of the default device when devices are reconfigured. Bump node number on critical XAudio2 engine errors. The sound manager bug that this was triggering has been fixed. Sound now recovers reliably after changing the mixdown format. Hide endpoint devices in "unplugged" state. Deal with resetting per-app device to default in Windows mixer controls. Actually commit correction to autocomplete gone wrong. Fixed some stuff not getting reset on exit()/init(). Don't print an error message on a "not found" error getting default devices - this happens when there are no active devices. Use more fine-grained locking in voice callbacks, simplified further simplified buffer queueing. Changed logging back to display names. Changed logging back to display names. Don't request sample rate conversion if stream sample rate matches mixdown sample rate. Changed buffering strategy for output streams. This should work better with output devices like Bluetooth speakers and should be a bit smoother in general. Got rid of dependencies on emu and frontend. We're working to reduce circular dependencies. Adding more is a regression. Use abuffer for bufferring input. This simplifies the code somewhat and gives a bit more consistency across modules. XAudio2 sound will ignore the audio latency setting for now - properly synchronising streams, etc. requires more work (sound\xaudio2_sound.cpp) [Vas Crabb].
- 0.245              : Removed 3rdparty\compat\mingw\xaudio2.h. Removed local copy of MinGW xaudio2.h as it's now included in the MSYS2 package [Vas Crabb].
- 0.231              : Changed audio_latency valid range from 1-5 to 0-5 (sound\direct_sound.cpp and xaudio2_sound.cpp) [Windy Fairy].
- 0.205              : Fixed wrong dll loaded in XAudio2 module since MAME 0.180 (sound\xaudio2_sound.cpp) [Moe, hap]. Make DirectSound default over XAudio2 (lib\osdobj_common.cpp). Note: XAudio2 module was completely disabled for over 2 years and unmaintained. Using "auto", MAME actually chose dsound as default. Plus it seem to be getting random buffer underflows/overflows with it, it needs to be more stable before it can be default [hap].
- 0.179              : Fixed two leaks (sound\xaudio2_sound.cpp) [Brad Hughes].
- 0.177              : Fixed audio distortion with -refreshspeed and -sound xaudio2. Try to fix audio delay regression caused when fixing -refreshspeed for -sound xaudio2 [Antonio Giner]. Minor XAudio2 tweak to not always submit buffers if not needed [Brad Hughes].
- 0.175              : Ensure XAudio2 doesn't crash when no sound card present (sound\xaudio2_sound.cpp). Added XAudio2 init time logging [Brad Hughes]. Added WINAPI to other needed functions for stdcall calling convention on 32-bit (sound\xaudio2_sound.cpp).
- 0.174              : Fixed init of XAudio2 when there is no window active [Miodrag Milanovic].
- 0.173              : Use XAudio2 by default if available (lib\osdobj_common.cpp) [Brad Hughes].
- 0.172              : Changed 3rdparty\win81sdk\Include\um\xaudio2.h to 3rdparty\compat\mingw\xaudio2.h. Added missing XAudio2 header from WINE that is free to use. Make XAudio2 available in all Windows OSD builds, plus use 2.9 if available and code cleanup [Brad Hughes].
- 0.170              : Added 3rdparty\win81sdk\Include\um\xaudio2.h and sound\xaudio2_sound.cpp. XAudio2 support. Update XAudio2 support to handle overflow, underflow and audio_latency properly [Brad Hughes].
- NOTES: XAudio2 implementation of MAME sound routines
- SOURCE: osd\modules\sound\xaudio2_sound.cpp





S1.2   Streams

- 0.229              : Use std::clamp in various core functions (emu\sound.h) [AJR].
- 0.225              : Significant internal changes to sound streams: Abstracted buffers of sound data into an internal stream_buffer class, with helper classes read_stream_view and write_stream_view which offer readable/writable "views" into the buffers. Internal sound calculations are all done using stream_buffer::sample_t, which is a 32-bit float; existing callbacks are supported through an adapter that converts to/from signed 32-bit integers. Improved behavior of dynamic stream sample rate changes to resample a short runway of data to preserve continuity across transitions. Created a new stream update callback which passes a std::vector of read_stream_views for inputs, and a std::vector of write_stream_views for outputs. Updated core mixer and speaker devices to the new stream update callback. Changed existing stream update callback to make inputs explicitly const and the output pointers const as well, since they are re-used across calls; fixed several engines that violated this rule. Sound_manager::stream_alloc can no longer automatically connect to a device's sound_stream_update callback; instead, the stream_alloc() on the sound_device_interface should be called; updated many violators of this rule. Streams can be created with SAMPLE_RATE_OUTPUT_ADAPTIVE, which dynamically tracks the sample rate of its first downstream output, or with SAMPLE_RATE_INPUT_ADAPTIVE, which tracks the sample rate of its first input. Changed resampling to be a separate sound_stream that is invoked as needed, opening the path for selectable resampling implementations. Added a flags parameter to the new stream allocation method that allows you to specify a that input streams should not be resampled. Exposed stream_input and stream_output classes directly, simplifying access to user gains and stream names. Added a simple dynamic compressor to sound_manager to provide nicer results when overdriven sound happens; compression does not affect speaker_report results. Improved verbose speaker_report to print a graph of peaks over time. More aggressive debugging enabled for now even in release builds (should be disabled prior to next release) via SOUND_DEBUG define in sound.h; report any assertions for fixing [Aaron Giles]. Updated the following sound cores to the new stream update callback: aica, asc, astrocde, awacs, ay8910, beep, bsmt2000, c140, c352, c6280, cdda, cdp1863, cdp1864, cdp1869, cem3394, dac, dac76, digitalk, discrete, dmadac, es1373, es5503, es5506, esqpump, rf5c400, rf5c68, flt_rc, flt_vol, gaelco, hc55516, i5000, ics2115, iremga20, k005289, k007232, k051649, k053260, k054539, ks0164, mas3507d, mea8000, mos6560, msm5205, msm5232, multipcm, namco, nes_apu, netlist, nile, okim6295, okim6376, okim9810, pokey, qs1000, qsound, s_dsp, saa1099, samples, scsp, segapcm, sn76477, sn76496, snkwave, sp0250, sp0256, spkrdev, spu, st0016, t6w28, tc8830f, tia, tms36xx, tms5110, tms5220, tms57002, upd7752, upd7759, upd934g, vgm_visualizer, vlm5030, volt_reg, votrax.vrender0, x1_010, ym2203, ym2608, ym2610, ym2612, ymf262, ym3526, ym3812, y8950, ym2413, ymf271, ymf278b, ymz280b, ymz770 and zsg2 [Aaron Giles, AJR].
- 0.154              : Removed not needed parameter from stream_alloc. It is set to same value in sound.c. Got rid of legacy STREAM_UPDATE, created stream_update_delegate and now stub is no longer needed, also made easy to have stream with different update call [Miodrag Milanovic].
- 0.153              : Flagged STREAM_UPDATE as legacy (emu\sound.h) [Oliver Stoeneberg].
- 0.147u3            : Added more comment to lessen confusion regarding sound_stream::generate_resampled_data (emu\sound.c) [Anders Hallstrom].
- 0.141u2            : Merged emu\streams.c into emu\sound.c. C++-ified the sound and streams interfaces. Combined sound.c and streams.c into one file, and separated the speaker device into its own file. Generalized the concept of dynamically assigned inputs and re-wired the speaker to work this way, so it is now treated just like any other sound device. Added methods to the device_sound_interface for controlling output gain and mapping device inputs/outputs to stream inputs/outputs. Also made the sound_stream_update() method pure virtual, so all modern sound devices must use the new mechanism for stream updates [Aaron Giles].
- 0.135u2            : Aaron Giles switched from linear interpolation to antialiased point sampling when upconverting low-frequency sound streams. This should de-muffle low-frequency streams, treating them has having hard edges at sample boundaries.
- 0.128u7            : Atari Ace modified the parameters of the stream_update_func callback. As part of this work, macro-ized all the callbacks to STREAM_UPDATE, and added the sound device as a parameter.
- 0.128u6            : Atari Ace added the sound device to the parameters passed to stream_create so that the global Machine can be removed from streams.c.
- 0.124u2            : Aaron Giles fixed stereo output, sound comes mainly from right channel, left channel is barely audible.
- 0.112u4            : Aaron Giles fixed a number of issues related to the new streaming engine and sound code. Fixed crash when restoring from a save state. Fixed crash when running with -nosound. Fixed loud looping when halted in the debugger. Fixed crash when changing sample rates (YM2203 mainly). Fixed crash in K054539 sound core.
- 0.112u3            : Added osd\windows\sound.h. Aaron Giles simplified the OSD interface for sound. Removed osd_start_audio_stream and osd_stop_audio_stream; OSD initialization code is now responsible for initialization. Removed osd_get_mastervolume and osd_sound_enable, keeping management of the main volume in emu\sound.c. Changed sound streaming engine to be emulated time based instead of sample based. This means that emulation behavior is independent of the user-specified sample rate (except that some sound cores still use this value; to fixed in a future update). Also separated sound generation from video frame rate. Sound is now pushed to the OSD layer at a fixed rate of 50 updates per emulated second. This entailed a change in the way sound is handed to the OSD layer. Instead of the OSD layer requesting arbitrary numbers of samples each frame, the core now pushes the appropriate number of samples based on the emulated time. Simplified the OSD interface for sound. Removed osd_start_audio_stream and osd_stop_audio_stream; OSD initialization code is now responsible for initialization. Removed osd_get_mastervolume and osd_sound_enable, keeping management of the main volume in emu\sound.c.
- 0.112u1            : Moved src\streams.c/h to src\emu\.
- 0.110u3            : Aaron Giles removed obsolete timing parameter from stream_update().
- 0.104              : Moved src\sound\streams.c/h to src\.
- 0.101u1            : Aaron Giles added save state information for streams so that dynamic volume changes get properly restored. Unfortunately this breaks all existing save states.
- 0.100              : Aaron Giles fixed crash in some games when using a low sample rate or -nosound.
- 0.94               : Aaron Giles removed extraneous clipping when passing streams from one output to the next input.
- 0.93u1             : Sound system update fixes. Added streams engine oversamples by averaging now. Removed some obsolete code from the streams code. Removed obsolete macro in sound\streams.c [Aaron Giles].
- 0.93               : Sound System update (sound\streams.c): Added a new type defined in sound\streams.h: stream_sample_t, which is used to represent a sample as used by the stream system. It is typedef'd to an INT32. Regardless of the size of stream_sample_t, all streams should be generated as if 16 bits were the maximum. The extra bits give us headroom to overdrive things if we want. All streams have the same format callback, with support for multiple inputs and outputs. Each stream has a sample rate; inputs to that stream will be down/upsampled to that rate; outputs will be down/upsampled as necessary to connect to the input of the next stream/speaker in line. Each input to a stream has its own gain, and each output has a gain as well. These can be controlled while things are running to provide some extra volume knobs. I haven't done much in the way of optimizations in order to keep things simple and working. Once things are back to normal, I may consider some additional optimizations [Aaron Giles].
- 0.36b15            : stream_init() and stream_init_multi() no longer have a sample_bits parameter. Sound emulators are required to generate 16-bit samples. Also removed osd_play_streamed_sample() and mixer_play_streamed_sample(): only the 16-bit version is available now.
- 0.35b6             : New option -volume n to set the startup volume. The volume is an attenuation in dB, e. g. "-volume -12" will start with a -12dB attenuation [Nicola Salmoria].
- 0.34b4             : Added sndhrdw\streams.c/h. Merged sndhrdw\rcfilter.c with streams.c. New streams.c to abstract audio streams. This makes them easier to use and more efficient. osd_play_streamed_sample() should now be considered a private function and should not be used in new code [Nicola Salmoria].
- 0.34b3             : Added sndhrdw\rcfilter.c. Added RC filter emulation to Gyruss. This improves some sound effects, e.g. the force field noise [Francesco Caporali].
- 0.01               : SEAL Synthetic Audio Library API Interface Copyright (C) 1995, 1996 Carlos Hasan.
- SOURCE: emu\sound.cpp



S1.3   Mixer

- 0.233              : Added sound\mixer.cpp/h. Created new mixer device in devices\sound\mixer.cpp [Aaron Giles].
- 0.93               : Removed sound\mixer.c/h. Everything is handled by the streams or by sndintrf.c directly. Mixing is performed by code in sndintrf.c which creates a stream to do the final mixing [Aaron Giles].
- 0.85u2             : Fixed bug that prevented the mixer from loading data unless all channels had been modified [Aaron Giles].
- 0.84u5             : Fixed the mixer code so it doesn't crash if the OSD layer returns an error [Andrea Mazzoleni].
-  7th March     2001: Andrea Mazzoleni improved the mixer system to include an adjustable low pass filter, which will be used with the Darius 2 driver.
- 19th December  2000: Hiromitsu Shioya added some expanded volume setting functions to the mixer system.
- 0.36b16            : mixer.c now does all sound mixing, generating one single sample stream, played using the new osd_XXX_audio_stream() functions. All other OS dependant sample functions (osd_play_sample() etc.) have been removed. This should standardize the sound output across ports, and allow porters to write much cleaner sound code [Aaron Giles].
- 0.36b15            : Source: Added gain support to mixer.c, through the new MIXERG() macro (extension of MIXER()). Removed the gain filed from AY8910, YM2203 and YM2610 structures.
- 0.35b13            : Added sound\mixer.c/h. Moved mixer control out of streams.c and into the new mixer.c [Nicola Salmoria].
- NOTES: Generic Audio Mixer
- SOURCE: sound\mixer.cpp



S1.4   Sound filter

- 0.262              : Renamed flt_volume_set_volume to set_gain. Added getter for gain (sound\flt_vol.cpp) [hap].
- 0.245              : Fixed regressions, apply_gain takes effect too early so do it it in a loop like how it was before. Use default variable type for m_gain (sound\flt_vol.cpp) [hap].
- 0.234              : Renamed the filter types to be more consistent with regards to behavior: old LOWPASS_2C is now LOWPASS (to match the behavior of HIGHPASS); old LOWPASS is now LOWPASS_3R [Lord Nightmare].
- 0.225              : Update flt_rc and flt_vol to new stream callbacks [Aaron Giles].
- 0.179              : Update stream before setting the new gain (sound\flt_vol.cpp) [smf].
- 0.155              : Removed static config in RC filter and small cleanup (sound\flt_rc.c) [Miodrag Milanovic].
- 0.148u1            : Modernize the Volume and RC filter sound devices (emu\sound\flt_rc.c/h, flt_vol.c/h, audio\scramble.c, timeplt.c, drivers\darius.c, ddribble.c, galaxold.c, junofrst.c, lockon.c, megazone.c, ninjaw.c, othunder.c, scramble.c, taito_z.c, tp84.c, warriorb.c, xexex.c, includes\darius.h, lockon.h, ninjaw.h, othunder.h, warriorb.h, xexex.h) [Andrew Gardner].
- 0.147              : Added 'RC Filter' and 'Volume Filter' devices.
- 0.93               : Added sound\flt_rc.c/h and flt_vol.c/h. Filter (volume) this is a new very simple filter that can be used to control the volume of a stream if you need an extra knob. Filter (RC) -- this is a new filter that replaces the old RC filter that was in the streams code. Eventually, this could get replaced by some simple discrete logic [Aaron Giles].
-  8th March     2001: David Graves adjusted the Darius 2 and Ninja Warriors drivers to include support for the low pass filter.
-  7th March     2001: Andrea Mazzoleni improved the mixer system to include an adjustable low pass filter, which will be used with the Darius 2 driver.
- 14th February  2001: Andrea Mazzoleni added a nice filtering sound resampling algorithm for the driver that do not produce sound at the requested sample rate.
- 28th June      1999: Tatsuyuki Satoh fixed the VLM5030 and RC filter interface in Double Dribble. Nicola Salmoria fixed the filter interface in Time Pilot 84.
- 30th March     1999: Tatsuyuki Satoh modified the RC filter to be external and separated it from streams system.
- 0.35b8             : Zsolt Vasvari implemented the RC filters in early Konami games (Time Pilot, Pooyan, etc.).
- 18th March     1999: Zsolt Vasvari has added RC filter functions to all the games which use the Time Pilot sound board.
- DRIVERS: astrocde.cpp, bladestl.cpp, by35.cpp, ddribble.cpp, junofrst.cpp, mcr.cpp, megazone.cpp, mgavegas.cpp, nemesis.cpp, pooyan.cpp, rallyx.cpp, rocnrope.cpp, timeplt.cpp, tp84.cpp and tutankhm.cpp
- SOURCE: sound\flt_rc.cpp and sound\flt_vol.cpp



S1.41  Biquad Filter

- 0.279              : Added calculator functions for RC-based band-pass filters (sound\flt_biquad.cpp) [m1macrophage].
- 0.277              : Added HIGHPASS1P1Z implementation and used in the (MESS) LinnDrum (sound\flt_biquad.cpp) [m1macrophage].
- 0.268              : Added protection against Biquad Filters producing aliased output or other noise if the stream sample rate is below the cutoff of the filter. Converted to use logmacro.h and added some additional optional log messages. Fixed some incorrect calculations for the MFB band-pass filter parameters (sound\flt_biquad.cpp) [Lord Nightmare].
- 0.249              : Added the ability to define a biquad filter using raw parameters, instead of only by using component values or by type/cutoff/bandwidth/gain. Fixed some of the issues with the Multiple Feedback Bandpass filter (sound\flt_biquad.cpp) [Lord Nightmare].
- 0.234              : Added a differentiator bandpass filter primitive to flt_biquad.cpp [Lord Nightmare].
- 0.231              : Emulated the lowpass audio filter for (MESS) Mac 128/512/Plus/SE and fixed the volume control so it correctly gets louder when the slider is raised in control panel instead of quieter (sound\flt_biquad.cpp) [Lord Nightmare].
- 0.227              : Allow recalculating the filter values at runtime if a component value can be altered or changed through some means [Lord Nightmare].
- 0.226              : Added sound\flt_biquad.cpp/h. Added 'Biquad Filter' device. Added a biquad-based 2nd order filter emulation for an audio stream (to go along with flt_rc 1st order filter emulation) and hooked it to 'Mouse Trap' (MC3417) and williams drivers (HC55516) following the original schematics. For HC55516 this is necessary as the original chip produces a very pronounced audible 16khz 'carrier' in its output audio even on the real chip, and these filters suppress this. This also happens to a lesser extent with the 8khz quieting waveform noise on both MC3417 and HC55516 [Lord Nightmare].
- NOTES: This is an implementation of a Direct-form II digital biquad filter, intended for use in audio paths for filtering audio to or from other stream devices. It has a number of constructor-helpers for automatically generating a biquad filter equivalent to the filter response of a few standard analog second order filter topographies.
- DRIVERS: armedf.cpp, exidy.cpp, galivan.cpp, magmax.cpp, mcr.cpp, mcr3.cpp, mcr68.cpp, s11.cpp, s11a.cpp, s11b.cpp, s11c.cpp, terracre.cpp, williams.cpp and wpc_an.cpp
- SOURCE: sound\flt_biquad.cpp



S1.42  Filtered DAC

- 0.232              : Changed device description to 'Filtered DAC', it's not 1bit (sound\spkrdev.cpp). Note: The default is 1-bit, but can be customized with set_levels [hap].
- 0.231              : Fixed regression with filtering (sound\spkrdev.cpp) [hap].
- 0.226              : Fixed sample volume averaging [AJR].
- 0.225              : Update spkrdev sound to new stream callbacks [Aaron Giles].
- 0.206              : Removed MCFG macros (sound\spkrdev.h) [Ryan Holtz].
- 0.202              : Eliminated register_postload [AJR].
- 0.184              : Changed sound\speaker.cpp to sound\spkrdev.cpp.
- 0.155              : Removed static_config from speaker (sound\speaker.c) [Miodrag Milanovic].
- 0.152              : Added a simple DC blocker filter to the speaker toggle device (sound\speaker.c) [R. Belmont].
- 0.149              : Modernized speaker device and added save state (sound\speaker.c/h, audio\8080bw.c, drivers\maxaflex.c, pcxt.c, photon.c and photon2.c) [Fabio Priuli].
- 0.148u5            : Changed 'Speaker' sound to 'Filtered 1-bit DAC'. Attempt at a better name for what this actually is (sound\speaker.c) [smf]. See desterth, grescue, lrescue, lrescuem, maxaflex.c, mlander, pcxt.c, photon.c, photon2.c, schasercv, spacewr3 and spcewars.
- 0.141u2            : C++-ified the sound and streams interfaces. Combined sound.c and streams.c into one file, and separated the speaker device into its own file. Generalized the concept of dynamically assigned inputs and re-wired the speaker to work this way, so it is now treated just like any other sound device. Added methods to the device_sound_interface for controlling output gain and mapping device inputs/outputs to stream inputs/outputs. Also made the sound_stream_update() method pure virtual, so all modern sound devices must use the new mechanism for stream updates [Aaron Giles].
- 0.135u2            : Actually use the speaker interface if provided (sound\speaker.c) [Curt Coder].
- 0.133u2            : Improved speaker-toggle emulation with alias filter (sound\speaker.c) [Anders Hallstroem].
- 0.108u4            : Added sound\speaker.c/h.
- 0.37b14            : Moved sound\speaker.c to mess\sound\.
- 0.36RC1            : Added sound\speaker.c/h.
- NOTES: Sound driver to emulate a simple speaker, driven by one or more output bits.
- DRIVERS: 8080bw.cpp, arachnid.cpp, astropc.cpp, bfm_blackbox.cpp, comebaby.cpp, dawg.cpp, dlair.cpp, ez2d.cpp, gammagic.cpp, gfamily.cpp, ltd.cpp, matrix.cpp, maxaflex.cpp, midqslvr.cpp, mtouchxl.cpp, odyssey.cpp, pcxt.cpp, photon.cpp, photon2.cpp, photoply.cpp, play_1.cpp, polyplay.cpp, przone.cpp, quakeat.cpp, silverball.cpp, sis630.cpp, superga2.cpp, taitowlf.cpp, tetrisp2.cpp, tiamc1.cpp, unkhorse.cpp, xtom3d.cpp, zac_1.cpp, zac_proto.cpp and zerohour.cpp
- SOURCE: sound\spkrdev.cpp



S1.5   Speaker

- 0.278              : Allow positioning unknown and don't map (emu\speaker.h) [O. Galibert].
- 0.259              : Added configurable speaker panning. Set pan range to -1 to 1 (emu\speaker.cpp). Show channel volume in percentage and increase maximum to 400% (ui\ui.cpp) [hap].
- 0.224              : Added new option -speaker_report <n> to report clipping and other statistics after each session. This replaces the previous compile-time define and offers more detail [Aaron Giles].
- 0.223              : Changed speaker maximum sample tracking to be based on new compile-time define SPEAKER_TRACK_MAX_SAMPLE instead of MAME_DEBUG (emu\speaker.cpp) [Aaron Giles].
- 0.217              : Use fill_n and resize to zero memory instead of memset (emu\speaker.cpp) [AJR].
- 0.215              : Added position description to 'subwoofer' (emu\speaker.h) [Vas Crabb].
- 0.141u2            : Splitted emu\speaker.c/h from emu\sound.c. C++-ified the sound and streams interfaces. Combined sound.c and streams.c into one file, and separated the speaker device into its own file. Generalized the concept of dynamically assigned inputs and re-wired the speaker to work this way, so it is now treated just like any other sound device. Added methods to the device_sound_interface for controlling output gain and mapping device inputs/outputs to stream inputs/outputs. Also made the sound_stream_update() method pure virtual, so all modern sound devices must use the new mechanism for stream updates [Aaron Giles].
- 0.123u3            : Converted speakers into devices. Machine->config no longer houses an array of speakers; instead they are iterated through using the new macros (defined in sound.h) speaker_output_first() and speaker_output_next(). Updated all relevant code to do this [Aaron Giles].
- 0.112u1            : Moved src\sound.c to emu\sound.c.
- 0.104u4            : Splitted src\sound.c/h from src\sndintrf.c/h [Aaron Giles].
- 0.94u2             : Derrick Renaud fixed some speaker settings.
- 0.35b9             : Changed sndhrdw\generic.c/h to src\sndintrf.c/h.
- NOTES: Loud speaker output sound device.
- SOURCE: emu\speaker.cpp



S1.6   Beep

- 0.268              : Increased sample rate in favor of better resample quality. Small cleanup. Added note about buffer size (sound\beep.cpp) [hap].
- 0.225              : Update Beep sound to new stream callbacks [Aaron Giles].
- 0.219              : Added (MESS) Conchess. Changed BEEP_RATE to 384000 [AJR].
- 0.170              : BEEP device clock() added, instead of default frequency of 3250. Removed set_volume [hap].
- 0.148u4            : Made BEEP device initialize in constructor of driver classes (sound\beep.h, drivers\deshoros.c and dlair.c) [Miodrag Milanovic].
- 0.148u2            : Modernized the Beep device (deshoros.c, dlair.c and pcxt.c) [Andrew Gardner].
- 0.147              : Added 'Beep' device.
- 0.129u1            : Added Beep sound to Tetris (bootleg of Mirrorsoft PC-XT Tetris version).
- 0.111u1            : Added sound\beep.c/h.
- 0.37b14            : Removed sound\beep.c.
- 0.37b7             : Added sound\beep.c/h.
- DRIVERS: bfm_blackbox.cpp, byvid.cpp, cothello.cpp, deshoros.cpp, esh.cpp, funkball.cpp, gts1.cpp, miconkit.cpp, micropin.cpp, shtzone.cpp and video21.cpp
- SOURCE: sound\beep.cpp



S1.7   Samples

- 0.278              : Set stream samplerate to sample samplerate. Fixed off by 1 error when interpolating. Fixed new regression with start_raw at very low samplerate. Updated notes (sound\samples.cpp). Removed unneeded samples_start callback [hap].
- 0.265              : Fixed a class memory access warning (formats\wavfile.cpp) [Vas Crabb].
- 0.259              : Moved interface variables to protected (sound\samples.cpp) [hap].
- 0.258              : Added getters for num channels and loaded samples (sound\samples.h) [hap].
- 0.239              : Patched up code that was rotting behind UNUSED_FUNCTION and switched to [[maybe_unused]] attribute (formats\wavfile.cpp) [Vas Crabb].
- 0.225              : Update Samples sound to the new stream update callback [Aaron Giles].
- 0.168              : Fixed error in sample device [Miodrag Milanovic].
- 0.155              : Converted samples_device to use inline config and delegates [Osso].
- 0.153              : Fixed listsamples and one other potential problematic place [Miodrag Milanovic]. Added a missing warning to sample loading code [Oliver Stoeneberg].
- 0.148u4            : Samples change to find in constructor (drivers\8080bw.c, aristmk4.c, astinvad.c, astrof.c, circus.c, cosmic.c, gotya.c, m10.c, m63.c, rallyx.c, safarir.c, tmnt.c, includes\mw8080bw.h and machine\mw8080bw.c). "samples" lookup tag removal (audio\blockade.c, gorf.c, meadows.c, polyplay.c, segag80r.c, segag80v.c, spacefb.c, suna8.c, turbo.c, zaxxon.c, drivers\astrocde.c, dai3wksi.c, equites.c, mcr.c, superqix.c, tankbatt.c, thief.c, tnzs.c, triplhnt.c, includes\galaga.h, machine\gaplus.c, xevious.c, video\starcrus.c) [Miodrag Milanovic].
- 0.148              : Adapted error messages from lib\util\chdcd.c for emu\sound\samples.c [Oliver Stoeneberg].
- 0.145u2            : Aaron Giles fixed 8-bit sample reading was broken. This fixed certain games with the new SAMPLE coding do not load and cause a crash in MAME. Expose a static interface for using the sample loader, for any other sound chips which may need to fetch samples.
- 0.145u1            : Rewrote SAMPLES as a modern device [Aaron Giles]. Updated all callers. FLAC reading is now done using the FLAC wrapper. There is now a samples_iterator class to centralize the logic for handling the sample list walking. Also redid the cheesy half-baked votrax device since it relied on some old samples-based handling. Until we have a real implementation, it would be good to route the various clients through the current one to at least wire it up properly, even if it just plays samples in the end. Will look into that shortly.
- 0.145              : Various wav/flac sample changes [David Haywood]: Remove hardcoded ".wav" sample extensions from within drivers. Update samples.c to check for both .flac and .wav extensions when loading a sample. Made sample loading failure a bit more verbose (various zips contained 0 byte samples, I assume to keep clrmame happy or something). Fixed memory allocation with 8-bit flac samples. WAV is not (yet) deprecated, rm warning that made it sound like it is [hap]. David Haywood fixed -verifysamples.
- 0.142u3            : Moved emu\imagedev\wavfile.c/h to lib\formats\.
- 0.141u1            : Added emu\imagedev\wavfile.c/h.
- 0.133u2            : Tafoid added GAME_IMPERFECT_SOUND flag to all sets that use external samples which were not already flagged for sound.
- 0.128u6            : Introduced function macros for SAMPLES_START. Pushed the running_machine * passing through these functions. In other locations added "running_machine *machine = Machine" to the top of functions to isolate the dependencies [Atari Ace].
- 0.122u8            : Aaron Giles added stream_get_sample_rate(), stream_get_time(), and stream_get_sample_period(). These functions are not really tested yet -- make sure they give reasonable results when first used! Updated streams.h header to latest core style.
- 0.120u2            : Atari Ace fixed several misnamed sound samples interfaces.
- 0.111u2            : Zsolt Vasvari added support for multiple instances of the samples sound system.
- 0.108              : Aaron Giles added sample_get_base_freq() to allow for querying to the base frequency of samples.
- 0.107u3            : Aaron Giles fixed bug that caused the sound sampling code to not track changes in the refresh rate.
- 0.107u1            : Andrew Gardner removed hard core dependency on samples.
- 0.104u2            : Aaron Giles removed a ton of hacks that were checking for Machine->sample_rate==0, which is now guaranteed to never be true.
- 0.98u4             : Aaron Giles added pause/resume support for sample playback.
- 0.98u3             : Roman Scherzer fixed crash in MAME if 0-length data block was found in a WAV file.
- 0.94u2             : Aaron Giles fixed sample playback glitch.
- 0.93               : There is now a start function that allows you to create your own custom samples if you want. This allows us to replace "custom" drivers with "samples" in several cases. There is a new call sample_start_raw() which lets you play a raw sample from a pointer to INT16 data [Aaron Giles].
- 0.79u2             : Support for Tailgunner samples recorded by Zonn Moore.
-  4th January   2004: Chris Hardy added sound support to Space Firebird with samples.
- 29th October   2003: Tim Cottrill added sample support to Armor Attack and Sundance.
- 17th November  2002: Stefan Jokisch added support for sound samples in Subroc-3D.
- 0.36               : "-listsamples" and "-verifysamples" will not work correctly for some games. This is a known problem which will be fixed in future releases by getting rid of the samples altogether (replacing them with emulated sound).
- 25th September 1999: Mike Coates added samples to Space Panic.
- 21st September 1999: Zsolt Vasvari sent in a vicdual update which supports samples for Pulsar and Invinco.
-  3rd September 1999: Zsolt Vasvari sent in a nice update to the Vicdual driver, for example Depth Charge now has samples.
- 30th June      1999: Mathis Rosenhauer added samples for Rip Off and Solar Quest.
- 0.36b11            : Rewritten the sample listing routines for -listsamples, -listsamdir, -verifysamples and -listinfo [Juergen Buchmueller].
- 0.36b10            : Removed samplenames from stuct GameDriver. It is now in struct SamplesInterface, and some drivers load the samples directly without using that structure. Due to this change, -listsamples and -verifysamples, and the samples information in -listinfo, are no longer available. Actually, samples might not be working at all - I haven't tested them [Nicola Salmoria].
- 0.35b13            : Source: struct GameSample no longer has a volume field (since it is not stored in .wav files), to replace that struct Samplesinterface has an additional volume field which affects all samples played [Nicola Salmoria]. Replaced osd_adjust_sample() with osd_set_sample_freq() and osd_set_sample_volume(), and the OSD_PAN_xxx macros with MIXER_PAN_xxx.
- 0.35b11            : Aaron Giles added support for .wav samples. The custom .sam samples are no longer supported (you can use the sam2wav converter to convert them).
- 0.35b8             : Switches -noartwork and -nosamples to turn off artwork or sample loading [Valerio Verrando].
- 0.35b3             : Mike Coates support samples in Cosmic Guerilla.
- 0.34RC1            : Zsolt Vasvari support samples in Astro Fighter. The sound library took a lot of work. Two boardsets made this possible.
- 0.33b7             : Support for 16 bit samples in sndhrdw\samples.c [Peter Clare]. IMPORTANT NOTE FOR PORTERS: For consistency with the sound libraries, osd_play_sample_16() and osd_play_streamed_sample_16() now want the length in _bytes_ of the array, instead of the length in _shorts_ as it was before.
- 0.31               : Added sndhrdw\samples.c/h. Howie Cohen added support for missing samples to Donkey Kong Jr.
- 0.30               : Samples can be loaded from a common directory for variations of the same hardware. For example, all Space Invaders clones will load samples from the invaders directory [Valerio Verrando]. Nicola Salmoria removed samples field from the MachineDriver structure; added sound_prom field to the GameDriver structure.
- 0.29               : Brad Oliver and Shane Monroe supported partial sound (through samples) in Mario Bros.
- 0.27               : Al Kossow and Brad Oliver provided drivers for the Sega vector games (Eliminator, Space Fury, Star Trek, Tac-Scan, Zektor). Partial sound support (speech) is available through samples for some of them. Mike Coates added partial sound support (through samples) to the Carnival driver.
- 0.21               : Changes in COMMON.H for the sample structure. Now it has infos on replayrate, resolution and volume of the sample to be played. BE SURE TO DOWNLOAD THE NEW SET OF SAMPLES, OR THE "MAMESAM" CONVERTER OR YOU WILL GET NO SOUND FOR SAMPLE BASED GAMES!!
- 0.20               : Ron Fries created a new set of Donkey Kong samples, using Mike Cuddy's 8039 emulator.
- 0.18               : Samples are now loaded by the main engine, not the single drivers [Nicola Salmoria]. This is done via the new field samplenames in the GameDriver structure. Samples can then be retrieved by the drivers in Machine->samples.
- SOURCE: sound\samples.cpp



S1.8   Netlist Sound Device

- 0.263              : Use appropriate memory barriers for task synchronisation (sound\discrete.cpp) [Vas Crabb].
- 0.243              : Explicitly initialise members of discrete "devices" to zero (sound\discrete.h). Note: I don't see a way around doing this in headers due to the macro soup used to build the constructors [Vas Crabb]. Initialized some variables which were causing problems [Osso].
- 0.236              : Use std::clamp for clamping (sound\disc_sys.hxx) [AJR].
- 0.225              : Update 'Discrete Sound' to new stream callbacks [Aaron Giles].
- 0.221              : Documented DISCRETE_FILTER1 and DISCRETE_FILTER2 better (sound\disc_flt.hxx) [Frank Palazzolo].
- 0.218              : Changed description to 'Netlist Sound Device'. Added audio\nl_konami.cpp/h. Implemented KONAMI filters using netlist into Galaxian driver. This change improves accuracy and scalability [Couriersud].
- 0.204              : Eliminated unnecessary address space argument from handlers (sound\discrete.cpp) [AJR].
- 0.201              : Fixed DISC_555_TRIGGER_DISCHARGES_CAP option in DISCRETE_555_MSTABLE. This fixes the sound in Amazing Maze so that it plays for more then 30s. Fixed filenames in DISCRETE_CSVLOGx and DISCRETE_WAVLOGx making them function again and use device->basetag() (sound\disc_dev.hxx and disc_sys.hxx) [Derrick Renaud].
- 0.186              : Changed description to 'Discrete Sound'.
- 0.180              : Use osd_getenv instead of getenv (sound\discrete.cpp) [Miodrag Milanovic].
- 0.174              : Changed sound\disc_dev.inc, disc_flt.inc, disc_inp.inc, disc_mth.inc, disc_sys.inc and disc_wav.inc to disc_dev.hxx, disc_flt.hxx, disc_inp.hxx, disc_mth.hxx, disc_sys.hxx and disc_wav.hxx.
- 0.170              : Getting rid of global_alloc_array_clear at least, clearing is essential to objects in vector_t so that is why previous attempt did not work (sound\discrete.h) [Miodrag Milanovic].
- 0.155              : Removed static config for discrete (MCFG_SOUND_CONFIG_DISCRETE() --> MCFG_DISCRETE_INTF()) [Miodrag Milanovic].
- 0.153              : Changed sound\disc_dev.c to disc_dev.inc, disc_flt.c to disc_flt.inc, disc_inp.c to disc_inp.inc, disc_mth.c to disc_mth.inc, disc_sys.c to disc_sys.inc and disc_wav.c to disc_wav.inc [Oliver Stoeneberg]. discrete_sound_w and discrete_sound_r not used any more since discrete_device is modern one [Miodrag Milanovic].
- 0.152              : No more dynamic allocations in static constructors in discrete audio [Couriersud].
- 0.150              : Small DEVICE_STOP, DEVICE_RESET and DEVICE_START cleanup in sound\discrete.c [Oliver Stoeneberg].
- 0.149u1            : Fixed number of active inputs in several discrete macros. Added missing node in DISCRETE_INVERTER_OSC. Some whitespace change [Oliver Stoeneberg].
- 0.148u4            : Discrete lookups removal (atarifb.c, cliffhgr.c, firetrk.c, goldnpkr.c, grchamp.c, hitme.c, madalien.c, mw8080bw.c, norautp.c, skydiver.c, sprint2.c, sprint4.c, starshp1.c, subs.c, tank8.c, triplhnt.c, uapce.c, ultratnk.c, videopin.c and wiz) [Miodrag Milanovic].
- 0.141u2            : Derrick Renaud fixed DISCRETE_WAVLOG & DISCRETE_RCFILTER fixing dkongjr and likely other sounds.
- 0.141u1            : Added 'DISCRETE' device. Added emu\sound\disc_cls.h, disc_dev.h, disc_flt.h, disc_mth.h and disc_wav.h. Changed description to 'DISCRETE'. Discrete sound system [Couriersud]: All nodes are now class based. Removed all support for "legacy", i.e. procedural node functions. Nodes are created using a class factory whose instances are set up in discrete blocks. There is no separation of node vs. module any longer. Custom modules are now just implemented like "normal" nodes. Converted all custom modules. Context variables can now be migrated to be private class members. All list handling now based on dynamic_array_t (discrete.h). More code rewrite to get rid of fixed allocations. Performance about the same as 0.140. Start moving the discrete subsystem towards C++. Changed some structs to classes and most of the list processing now uses a linked list template which is type-safe. Changed the discrete sound system to be class based: Former modules are now classes being derived from discrete_base_node. Moved all context variables to be private class members. For "standard nodes", DISCRETE_CLASS_STEP_RESET provides a simple way to implement a node. All information around a node (additional info struct, constants and input mappings may be defined on a class level centralizing all information. An example is dss_inverter_osc. Significantly simplified the task handling. Fixed a bug which would not buffer secondary outputs. All lists in sound\disc_* are now based on dynamic_array_t (discrete.h). Changed all drivers to reflect the changes. Custom modules are now just another node class. No performance hit observed due to these changes. Couriersud optimized RC_INTEGRATE and TRANSFORM. Nice improvement. Couriersud changed all "output[0] = ..." into "set_output(0, ..)" calls. Rewrote modules using "output[0]" as a latch as well. The purpose is to decouple nodes from the discrete infrastructure implementation. Discrete subsystem now uses the sound_device stream_update function. Carved out a discrete_sound_device from discrete_device. This now has all the stream related code. discrete_device thus now contains all the generic code and may be used going forward to implement not sound related use cases.
- 0.140u1            : Derrick Renaud added DISCRETE_XTIME_xxx logic modules. These allow you to do logic operations on nodes that use x_time anti-alias info. Added the ability to decode x_time to the DISCRETE_BIT_DECODE module. This means you can have an oscillator pass x_time onto a counter, get the counter bits decoded, pass that through the new logic modules and also have them convert the x_time to energy/anti-alaised voltage. Updated Donkey Kong Jr. to use these new modules. Discrete Updates [Derrick Renaud]: Removed old DISCRETE_74LS624 code and replaced it with new 74LS629 based code. Updated Mario to use new DISCRETE_74LS624 and DISCRETE_XTIME_logic modules. Derrick Renaud optimized speed of DISCRETE_DAC_R1. Derrick Renaud fixed operation of DISCRETE_COUNTER_7492.
- 0.136u4            : MASH fixed a bug in emu\sound\disc_mth.c. This affected spiders.c fire sound.
- 0.135u4            : Aaron Giles removed old index-based DISCRETE_ADJUSTMENT and then renamed the newer DISCRETE_ADJUSTMENT_TAG to replace it. Updated all callers.
- 0.134u4            : Discrete sound improvements [Couriersud]: DSS_INVERTER_OSC optimizations. OSD_PROFILING is now an environment variable. No more recompiling to turn profiling on. Added two asserts to task processing. Derrick Renaud converted final mixing stage to DISCRETE_MIXER. This adds the missing filtering on the Mario Bros walking sounds. Derrick Renaud promoted DISCRETE_RC_CIRCUIT_1 for Sky Raider custom charge to it's own module so it could be used with the same circuit in Battlezone. Derrick Renaud added DISCRETE_COUNTER MIN parameter and optimized speed.
- 0.134u3            : Discrete update [Couriersud]: Fixed some "const" weirdness I introduced. Fixed VREF in CRFILTER_VREF and RCFILTER_VREF. VREF never got used since it was only a static parameter. Removed enable from CR_FILTER* and RC_FILTER*. Updated drivers accordingly. Added EXPECTED macro to complement the already existing UNEXPECTED macro. Use EXPECTED/UNEXPECTED macros to help the compiler. DISCRETE_CRFILTER, DISCRETE_RCFILTER updates [Derrick Renaud]: Revert vref change from rev 6979. Added capability for all values to be nodes. Better task processing for discrete sounds [Couriersud]: Tasks are now processed according to their dependency lists. Tasks can now start early and will only process samples which are already available. This has most impact on drivers which have significant variance in the run-time of individual tasks. Tasks now process samples in slices, currently max 240 samples / slice. TASK_GROUP is now obsolete - Will update drivers at a later stage. Step function pointer now back in node, modules may register optimized step functions. Profiling code now always compiled, introduced static int "profiling = ...". Some more EXPECTED/UNEXPECTED usage.
- 0.134u2            : discrete_sound_r now can inquiry any node [Couriersud]: The return type is UINT8, consequently the designer needs to ensure that the node delivers adequately scaled data. Input nodes allow the input data to be scaled. The return value is the node value *after* scaling. DISCRETE_74LS624 - optimized for some more speed [Derrick Renaud]. Derrick Renaud started making a more accurate simulation of the DISCRETE_566 based on testing of a real IC. This makes the rest of Sky Raider sounds work. DISCRETE_555_MSTABLE - optimized speed and added new operating modes [Derrick Renaud]. Implemented m:n logic for buffered task nodes in discrete sound [Couriersud]: Preparation work so that a task node output buffer may be read by more than one following task. target: implementation of task groups: tasks in a task group run parallel, task groups serial. The current main task may than just be task (in the last task group). exp is slow, but pow is even slower (sound\disc_dev.c) [Couriersud]: More LS624 optimization, replace pow(10, x) by pow10(x). Mixer loop optimizations. Discrete task groups [Couriersud]: DISCRETE_TASK_START now requires a parameter TASK_GROUP (>=0, <=9). Tasks are scheduled in the order of their task group. Nodes are automatically buffered between task groups. Discrete core determines nodes which need buffering to minimize overhead (information in DISCRETE_LOG). A discrete block list now must put each stepped node into a task if it uses tasks. Drivers not using tasks will get one task allocated automatically. Updated drivers accordingly. Some more constification.
- 0.134u1            : Couriersud and Derrick Renaud removed Enable Input from a number of discrete sound modules. Discrete Updates [Derrick Renaud]: Added DISCRETE_LOGIC_SHIFT - generic shift register. Fixed DISCRETE_BIT_DECODE to apply proper voltage instead of clipping to INT. Optimized DISCRETE_74LS624 making dkongjr and mario faster [Derrick Renaud].
- 0.133u5            : Added sound\disc_sys.c. Discrete sound updates [Couriersud]: Fixed comments for DISCRETE_TRANSFORM. FatalError if formula is bad. Fixed two bugs in DISCRETE_RCDISC3. Fixed some ugly bugs around DISCRETE_FILTER_SW: No more iterations. The CD4066 internal resistance largely determines sound amplitude. This may vary significantly depending on VCC and type (74HC, 74HCV, CD4066, ...). The current choice makes scramble sound "about right". Added some profiling code for discrete tasks. Added DISCRETE_INPUT_BUFFER to use a stream to buffer an input node. For input nodes with a lot of writes this prevents a stream_update on the whole discrete module which is very ineffective. Instead, the data is buffered and the discrete emulation can process a lot of samples in one go later. Added disc_syc.c as a container for core modules (output, task). Discrete wav and csv logs now are treated as nodes. Added DISCRETE_START and DISCRETE_STOP functions to be called at device start/stop. As a side effect, profiling measures log overhead as well. DSO_TASK_END now builds it's own dependence list - now simply DSO_TASK_END() ends a task. Added node parameter to RC_(DIS)CHARGE_EXP. Added const where appropriate. Removed some dead code.
- 0.133u4            : Discrete sound improvements [Couriersud]: DISCRETE_RCDISC3: Added diode junction voltage; junction voltage also indicates polarity. DISCRETE_OPAMP_FILTER: Added type DISC_OP_AMP_FILTER_IS_LOW_PASS_1M; INP2 takes role of v_ref in this type. DISCRETE_OPAMP: Fixed a bug (possible divide by 0). DISCRETE_LFSR: Fixed bug preventing output of shift reg to sub node 1. Discrete work [Couriersud]: Change the way custom modules are handled. Updated drivers mario and dkong accordingly. Minor change to stream input handling. No more linear lists for nodes. All node processing switched to linked lists. Module step and reset now only get a node pointer passed. Added discrete_info * pointer to node. Only nodes with a step routine actually get processed. Fixed discrete logs did not work since some time bug. Preliminary parallel task constants; depending on results these may vanish again. Overall slight performance increase. dkong 940% to 960% and galaxian 740% to 790%. Discrete sound parallel tasks support [Couriersud]: Introduced DISCRETE_TASK_START and DISCRETE_TASK_END. DISCRETE_TASK_START: Start a new task. A task is a set of nodes which only depend on input nodes and nodes in the set. DISCRETE_TASK_END(task_output_node): Marks the end of the task. task_output_node is the node whose output over time should be preserved. This node can be accessed by nodes in the main thread. Illustrated the concept in the dkong discrete emulation. This also has been enhanced to buffer DAC output. Discrete tasks now support multiple task output nodes. Further discrete changes [Couriersud]: DISCRETE_OUTPUT now is a stepping node. DISCRETE_STREAM_INPUT now advances input pointer in step. More linked_list usage. Continued discrete sound system "list-ification" [Couriersud]: No more constraints on number of input and output nodes. Input nodes now make use of a context.
- 0.133u3            : Discrete sound update [Couriersud]: Removed global variable discrete_current_context. Discrete_info is now passed instead of device, we may get device by using disc_info->device. Added DISCRETE_IMPORT(*block): Imports another discrete block. Added DISCRETE_REMOVE(node1, node2): Removes a range of nodes. Added DISCRETE_REPLACE: Next node replaces existing node, thus preserving run order. Added DISCRETE_NOP(node): Does nothing, to be replaced. Added a prescanning stage to build final block list after execution of the above. The additions provide an easy way to document subtle difference between boards. Please see audio\galaxian.c for an example. DSS_COUNTER updates [Couriersud]: Clock_node no longer needs to be static for DISC_CLK_IS_FREQ. Rewrote inc/dec logic to avoid loop. Added DISCRETE_BIT(S)_DECODE [Couriersud]: Decodes individual bits from input values. Updated drivers which had macro DISCRETE_BITSET (which was a bit misleading). This should be slightly faster than using DISCRETE_TRANSROM. Discrete sound enhancements [Couriersud]: Put some life into RCDISC5 enable mode. This now acts as a switch between R and C. Capacitor voltage will be preserved if disabled. Made galaxian use the above. Saved 2 nodes and increased accuracy. Added DISC_LFSR_FLAG_OUTPUT_SR_SN1 flag to shift register noise generator. This will output the value of the shift register to sub-node 1. This is needed for future bzone discrete sound emulation. BTW: RCDISC5 will be used as well. Left a note on RCDISC3 on what is needed to be implemented for bzone. Optimized the LFSR a bit. LFSRs running at high frequency (> sample_freq) should benefit. Galaxian sound updates [Couriersud]: Moon Cresta and Galaxian now have their respective schematics emulated, i.e. Moon Cresta has a slightly different mixing stage. Cleaned up driver, added some section titles and comments, removed old code. Removed emu_timer, this was causing a stream of stream_updates only updating 3 samples. Replaced with discrete timer module DSS_TIMER now. Use DISCRETE_NOTE for pitch generation; it is more accurate (within the one ms where the pitch changes) and saves a node. Use DISCRETE_BITS_DECODE and save 2 nodes.
- 0.133u2            : Discrete sound update [Couriersud]: Added "abs" function to DISCRETE_TRANSFORM. Fixed a bug in DISCRETE_RCDISC5.
- 0.129u3            : Several discrete sound refinements, mainly targeted at Mario Bros [Couriersud]: Use formula derived from figures 2 and 3 in LS624 datasheet. Coefficients were calculated using least square approximation. This approach gives a bit better audible results compared to the prior approach. Fixed energy calculation for LS624. Use energy values as input for XOR. This seems to better reflect the superimposition of the two signals. On the long term, both LS629 and the XOR need to be converted into a custom module to properly model mixing if the two frequencies are close to each other. Adjusted C41 to 60% for skid sound.
- 0.128u4            : abc_step and abc_reset now declared as DISCRETE_STEP( abc ) and DISCRETE_RESET( abc ) [Couriersud]. Fixed state save in discrete sound [Couriersud]: sndindex now considered as well in state save. Expose discrete_sound_n_r(void *chip, ...) to enable accessing multiple discrete sound cores.
- 0.128u2            : More Discrete module optimizations [Derrick Renaud]: Added optimized custom mixer to Donkey Kong. R. Belmont fixed GCC 4.3 "array bounds exceeded" error in disc_flt.c.
- 0.127u2            : Optimized DISCRETE_RCDISC_MODULATED. Added X_TALs to circus. Optimized DISCRETE_RCINTEGRATE and DISCRETE_555_ASTABLE. Optimized DISCRETE_555_ASTABLE_CV and DISCRETE_MIXER. Optimized DISCRETE_555_CC. The 555 and mixer changes also speed up just about every current discrete game [Derrick Renaud]. Derrick Renaud started removing extraneous enable lines from the discrete modules. Most modules are always enabled anyways.
- 0.127u1            : Derrick Renaud cleaned up the discrete code and fixed discrete logging.
- 0.126u5            : Changed includes\rescap.h to machine\rescap.h.
- 0.126u4            : Minor optimization to the DISCRETE_INPUT modules. The node output is now calculated when a discrete_sound_w() is called instead of each step in the simulation. Also removed the Enable line from the DISCRETE_ADJUSTMENT modules. They should never be disabled [Derrick Renaud]. Discrete sound core optimizations [Couriersud]: Moved a couple of exp(x) from _step into _reset where appropriate. Use tabulated function values for the transfer function in DSS_INVERTER_OSC. Couriersud added module profiling to discrete sound core: Added DISCRETE_PROFILING macro to discrete.h. Upon discrete_stop, the worst performing modules will be listed.
- 0.125u4            : Discrete sound update [Couriersud]: Added NODE_RELATIVE(NODE, offset) macro to discrete.h. Fixed asteroid.c, canyon.c, skydiver.c and tank8.c to use this macro instead of adding directly to the node.
- 0.124u5            : Couriersud added DISCRETE_KEY_SALLEN_FILTER to discrete sound system.
- 0.124u4            : Couriersud fixed a bug in disc_flt.c (konami filters). Fixed discrete sound and konami filter addressing in galaxian driver.
- 0.124u1            : Discrete sound system improvements [Couriersud]: Added DISCRETE_RCFILTER_SW to discrete sound. This implements multiple RC networks with CD4066 switches to connect/disconnect capacitor. Implemented discrete mixing in circusc using DISCRETE_RCFILTER_SW and sound routing to route 76416 output to discrete logic. Added discrete filtering and mixing to galaxian.c games using konami_sound. Fixed timing of stream_update in discrete_sound_w. All sound cores update before processing changed data. Added stream_update to discrete_sound_r. Now supports multiple output nodes per module. In this case, NODE_XXX is the default output. Alternative outputs may be accessed by using NODE_XXX_YY where 00<Y<08. You may also access nodes with macros: NODE_XXX = NODE_SUB(XXX, 0), NODE_XXX = NODE(XXX) and NODE_XXX_YY = NODE_SUB(XXX, YY) with YY != 00. This should e.g. make discrete sound emulation easier when dealing with e.g. flip flops (Q & QQ) and binary counters. Added sanity checks to check consistency issues introduced by this change. Modules specify number of outputs ==> Certain special modules (WAVELOG) may no longer be used as input nodes. Removed explicit (NODE_XX + expr) from a couple of drivers.
- 0.122u7            : Couriersud fixed DISCRETE_INPUT_STREAM and added input channel # to DISCRETE_INPUT_STREAM.
- 0.119u2            : Atari Ace added macros to clean up definitions of the discrete sound interfaces. At the same time, made them all const.
- 0.117u1            : Couriersud added two inverter oscillators supporting enable and mixing in signals to discrete.h / disc_wav.c.
- 0.116u3            : Couriersud extended the flt_rc filter to support highpass filtering. Fixed the lowpass filter to actually do a lowpass filter. Hooked up the filter to King & Balloon and updated several other drivers to the new interface.
- 0.116              : Added new components to the discrete sound system [Couriersud]: Added a "inverter oscillator" component. This can also be used as a raw sine generator - needed by radarscp. Added a "integration circuit" based on transistor and RC. Added a "modulated RC discharge" component.
- 0.113              : Derrick Renaud fixed regressions in 3 of the discrete games from 0.112u4.
- 0.112u4            : New DISCRETE_ADJUSTMENT_TAG module that uses tags instead of port numbers. Updated all games to use it, because it is now the preferred method. Added Discrete sound to Checkmate [Derrick Renaud].
- 0.112u3            : Derrick Renaud updated the DISCRETE_OP_AMP_OSCILLATOR circuit to get it ready for a future driver. It allows the DISC_OP_AMP_OSCILLATOR_1 | DISC_OP_AMP_IS_NORTON oscillator to use nodes to adjust the resistance values instead of only being static values. Derrick also added discrete sound for Amazing Maze. And added new Discrete modules: DISCRETE_LOOKUP_TABLE & DISCRETE_LOGIC_JKFLIPFLOP.
- 0.106u2            : Discrete sound updates [Derrick Renaud]: Typedef'ed external discrete sound structures to follow current structure use. Statically defined their use in most drivers to stop name pollution. Created new DISCRETE_555_VCO1 module. This is the 555&Op-amp oscillator circuit used by Borderline.
-  8th May 2006      : Frank Palazzolo - For a while now, I've been wanting to experiment with new methods of high-speed circuit simulation. The idea would be to prototype some discrete-audio stuff, possibly for MAME, using something like Python. After looking into the requirements, I realized that I needed to handle polynomials with a single variable, and ratios of these polynomials. Also, I needed to be able to handle real or complex variables. I looked around on the web, and I found that SciPy (http://www.scipy.org/) is finally coming along nicely on Windows. However, I wasn't entirely happy with the root finder they use. Along the way, I also found the ratfun (http://calcrpnpy.sourceforge.net/ratfunManual.html) package, which looked perfect, but was unsupported on Windows. I dug in and in a couple weekends, got it building under Windows. I think I'll be using it for the experiments, whenever I get back to it.
- 0.103u5            : Changed includes\rc.h to includes\rescap.h. Discrete sound updates [Derrick Renaud]: Added new DISCRETE_CSVLOG module that lets you log discrete nodes as CSV (comma separated values) data. Modified discrete core to use the clock specified in the MDRV_SOUND_ADD line. If the clock is specified as 0, then the discrete emulation will default to the audio sample rate clock. Tweaked Phoenix Effect 2 sound to be more accurate matching oscilliscope data. Changed the Phoenix discrete clock rate to a fixed rate of 120000 allowing the simulation to be more accurate with less alaising noise at the cost of speed. Fixed the bug in the DISCRETE_NOTE module that produced notes 1 count off.
- 0.103u4            : Derrick Renaud added/changed the following discrete modules: DISCRETE_WAVELOG - Easy way to log discrete nodes as a .wav file to compare against scope waveforms. DISCRETE_OUTPUT - Added a final gain parameter to get it to 16 bit wav level (the old VOL setting was disabled after the last sound re-write).
- 0.102u5            : Frank Palazzolo fixed bug in discrete filtering code.
- 0.99u6             : Discrete sound update: Added DST_RCDISC5 (Diode in series with R/C), added DST_ASWITCH (analog switch), added LFSR functions DISC_LFSR_XOR_INV_IN0 and DISC_LFSR_XOR_INV_IN1 and fixed DSD_555_ASTBL__R2.
- 0.99u2             : Derrick Renaud fixed the discrete sound 555 timer modules when using actual DC mode.
- 0.94u1             : Changed description to 'RC Filter' and 'Volume_Filter' to 'Volume Filter'. Discrete sound updates [Derrick Renaud]. Added DSS_INPUT_STREAM (Connects external streams to the discrete system). Added magnitude conversions macro (includes\rc.h).
- 0.93u1             : Discrete Sound Update [Derrick Renaud]: Various tweaks to the discrete modules and updated all drivers to use new code. DISCRETE_COUNTER, DISCRETE_LFSR_NOISE, DISCRETE_NOTE - added different clocking types to be more flexable. DISCRETE_COUNTER_FIX - removed and merged with DISCRETE_COUNTER. New Discrete Modules: DISCRETE_DIODE_MIXERx - Mixes signals through diodes. DISCRETE_MULTIPLEXx - 1 of 2/4/8 signal multiplexer. DISCRETE_RCDISC4 - Various charge/discharge circuits.
- 0.93               : Changed description to 'Discrete'.
- 0.90u2             : New Sound Functionality [Derrick Renaud]. Took Frank Palazzolo's DISCRETE_FILTER2 code and made it work outside of the discrete system (see sound\filter.h for new functions).
- 0.90               : New Discrete Sound Functionality [Derrick Renaud, Frank Palazzolo]. Properly emulated DISC_OP_AMP_FILTER_IS_BAND_PASS_1M type filter used by many games ( see http://home.cogeco.ca/~derrickmame/galaga/Galaga_filters.html). Re-wrote atarifb and abaseb to use component value only code and new filter.
- 0.89               : Discrete Sound Update [Derrick Renaud]. Modified Discrete core node inputs to use pointers to the data, instead of moving the data into the inputs at each step. This speeds up discrete emulation. Modified all current modules and drivers to use new code. Added new Discrete Modules: DISCRETE_555_ASTABL has been modified to remove control voltage support and DISCRETE_555_ASTABL_CV has been added if control voltage is used.
- 0.88u4             : Discrete Sound Update [Derrick Renaud]: * Removed the memory mapping system from the discrete inputs. It served no purpose and was never functional. It only added a layer of confusion to the code by forcing it's use on all current drivers that do not need it. If memory mapped inputs are needed in the future (not likely), then they can be added with a DISCRETE_INPUT_MAP function. * Now the discrete inputs are written to by their node name only, eg: discrete_sound_w(NODE_xx, data). * DISCRETE_INPUT and DISCRETE_INPUTX have been removed in favour of new easier to use input modules. * Modified all current drivers to use new code. * Moved discrete sound code from drivers and put in sndhrdw\. New Discrete Modules: * DISCRETE_INPUT_DATA(node)  - accepts 8-bit data from discrete_sound_w. Output at reset is 0. * DISCRETE_INPUT_LOGIC(node) - 0 if data=0; 1 if data=!0. Output at reset is 0. * DISCRETE_INPUT_NOT(node)   - 0 if data=!0; 1 if data=0. Output at reset is 1. * DISCRETE_INPUTX_DATA(node, gain, offset, init). * DISCRETE_INPUTX_LOGIC(node, gain, offset, init) and * DISCRETE_INPUTX_NOT(node, gain, offset, init) - same as above, but will modify the output by the given GAIN and OFFSET. At reset the output will be INIT modified by GAIN and OFFSET.
- 0.88u2             : Brad Oliver fixed bug in discrete code. Derrick Renaud added an option to DISCRETE_555_ASTABLE to use quick charge diode (will be needed for Frogs) and an option to disable oscillation if R1 (charge) is out of circuit (will be needed by Invaders). Modified DISCRETE_555_CC to discharge cap due to natural losses if there is no charging current (needed by Frogs). This makes it more accurate then the current perfect cap that will retain a charge forever. Modified all current drivers to use new code. Added the new discrete module DISCRETE_555_MSTABLE (555 monostable simulation).
- 0.88               : Discrete Sound System update [Derrick Renaud]. Continued cleanup of code to make it more readable. New Discrete Modules: DISCRETE_NOTE - counter circuit used to create tones/music, DISCRETE_INTEGRATE - various op amp integration (ramp) circuits and DISCRETE_OP_AMP_TRIG_VCA - Did not know what to call this ( Basically it is a programable voltage controlled amp. But uses only an on/off trigger. It has resistors to select the rise/fall times. Also it is not a true VCA. It actually adjusts amplitude by clipping more/less off the bottom of the input signal. But it is a common circuit.).
- 0.80u2             : Removed sound\disc_out.c. Discrete Sound System updates [Aaron Giles, Derrick Renaud]. Aaron Giles: Major internal cleanup and reworking of how nodes are created. Fixed bug in 555 timer that led to whiny noise in Hit Me. Added new input port type for analog adjuster. Changed OSD interface for discrete sound adjusters to use the new input port type. Changed NODE_ADJUSTMENT to get its value from an input port. Adjuster values are now saved in the config file. Cchanged all games using adjusters to use the new system. Derrick Renaud: Discrete Sound Changes: Continued cleanup of code to make it more readable. New Discrete modules added: DISCRETE_OP_AMP_OSCILLATOR - various op amp oscillator circuits that are entered using component values. DISCRETE_OP_AMP_VCO - various op amp voltage controlled oscillator circuits that are entered using component values. Game Driver Changes: Finished updating games to use Aaron's DISCRETE_ADJUSTMENT changes.
- 17th March     2004: Aaron Giles - I've been doing some internal cleanup of the discrete sound system, and have modified the way analog adjusters are handled so that they are saved in the .cfg file.
- 0.80u1             : Improved Discrete Sound System [Aaron Giles]: New node type DISCRETE_LOGIC_DFLIPFLOP. Changed the way multichannel output is done; affects some existing drivers. Support for up to 16 channels of sound. Discrete sound support for Hit Me.
- 0.80               : Discrete sound updates [Derrick Renaud]: Fixed/added more documentation of functions at top of discrete.h, DISCRETE_555_ASTABLE - changed to use common options with DISCRETE_555_CC and DISCRETE_TRANSFORMx - fixed bug that preformed math in the wrong order. Also added more math functions. New Discrete Modules Added: DISCRETE_555_CC - Constant Current based 555 VCO with 8 main configurations, that automatically configure from components used, DISCRETE_566 - NE566 simulation, DISCRETE_COMP_ADDER - Multiple parallel capacitor/resistor circuit, DISCRETE_DAC_R1 - R1 Ladder DAC that automatically configures from components used, DISCRETE_MIXERx - Resistor/Op Amp mixer stage with filtering that calulates proper gains & filtering. It automatically configure from components used and DISCRETE_SCHMITT_OSCILLATOR - VCO based on a Schmitt Inverter. Game Driver Changes: poolshrk - Converted to new component value only code, firetrk, montecar, superbug - Converted to new component value only code. Pulled discrete code out and put in sndhrdw\ataridis.c. montecar still needs filtering on crash sound, atarifb, canyon & skydiver - minor changes to work with new code and triplhnt - added component value discrete sound, but have not figured out Shot and Bear Roar video memory locations. These are needed to make sound effects work.
- 0.78u5             : Discrete sound system updates [Derrick Renaud]: Fixed/added more documentation of functions at top of discrete.h. Fixed bug that allowed DISCRETE_RCFILTER module to use nodes not available to it. Added new Discrete modules: High pass R/C filter (DISCRETE_CRFILTER), presettable up/down counter with external clock and selectable count edge (DISCRETE_COUNTER), presettable up/down counter with bult-in frequency generator (DISCRETE_COUNTER_FIX), selectable edge trigger / re-trigger / output active state (DISCRETE_ONESHOT) and the same with reset (DISCRETE_ONESHOTR). R. Belmont fixed discrete sound system crash with -nosound.
- 0.69               : Fixed the 'no stereo' bug in src\sound\discrete.c [BUT]. Derrick Renaud fixed a minor bug in src\sound\discrete.h causing DISCRETE_LOGIC_INVERT not to work. Substitutes the _HUGE macro with the standard DBL_MAX value (sound\disc_mth.c) [Andrea Mazzoleni].
- 22nd May       2003: Derrick Renaud sent in another update to the discrete sound system, fixing a few bugs and adding sounds to Drag Race, Night Driver and Orbit.
- 0.68               : Discrete sound system update [Keith Wilkins, Derrick Renaud and Frank Palazzolo]: DISCRETE_MULTADD (Multiply followed by add), DISCRETE_TRANSFORM (Multiple math functions), DISCRETE_ADSR (structure in place - no code yet), DISCRETE_555_AST (555 astable generator with squarewave or cap charge out), DISCRETE_SQUAREWFIX (same as DISCRETE_SQUAREWAVE but not accurate during freq/duty changes - extremely fast), DISCRETE_SQUAREWAVE2 (squarewave defined by Off/On time periods), DISCRETE_FILTER1 and DISCRETE_FILTER2 (High order filter implementation), forced clipping of output values to max +32767/-32768 in disc_out.c, LFSR 48kHz bug fixed + code speedup and faster then sample rate frequency support, bugfix to discrete_sound_start system initialisation for unitialised nodes, _kill for made common code for all modules with context except for input functions and rewrite/restructure of discrete.c & discrete.h to allow fully flexible number of inputs on a node.
- 14th May       2003: Derrick Renaud changed the Atari sports games to use the discrete sound system, adding all sounds to them.
-  8th May       2003: Derrick Renaud did some improvements in the discrete sound system, fixing a few sounds and making it faster.
- 0.66               : Major update to the discrete sound system. This includes adjustable parameters controls in the UI, fixes to existing games, and new sound support in canyon, polaris, sprint and ultratnk [Derrick Renaud & Keith Wilkins].
-  1st March     2003: Keith Wilkins and Derrick Renaud submitted a large update to the discrete sound system, adding discrete sound to Canyon Bomber, Polaris, Sprint, Sprint 2, Ultra Tank and samples to Circus, Clowns and Sea Wolf.
- 22nd February  2003: Acho A. Tang submitted a very basic implementation of the discrete sounds in Stinger.
-  8th February  2003: Keith Wilkins sent in a preliminary update to the discrete sound system with a few new functions and bug fixes.
- 31st January   2003: Aaron Giles forwarded Derrick Renaud's improvements to the discrete sound in Fire Truck, Super Bug and Monte Carlo.
- 21st January   2003: Derrick Renaud adding preliminary discrete sounds and fixing controls in Polaris.
-  3rd August    2002: Ken Reneris submitted another small improvement to the Asteroids discrete sound emulation and added phosphorescent persistence emulation to the vector graphics drawing code, possibly improving the look & feel of vector games.
- 24th July      2002: Ken Reneris and Keith Wilkins both submitted improvements to the discrete sound system in Asteroids.
- 13th June      2001: Frank Palazzolo optimized the discrete sound system a little.
-  4th March     2001: Keith Wilkins added discrete sound support to Fire Truck and fixed a few other bugs in the discrete sound engine.
- 0.37b11            : Added sound\discrete.c/h, disc_dev.c, disc_flt.c, disc_inp.c, disc_mth.c, disc_out.c and disc_wav.c.
- 17th January   2001: Bernd Wiebelt fixed a bug causing static in the discrete sound functions.
- 0.37b11            : Some support for discrete component sound emulation [Keith Wilkins]. Changed description to 'Discrete_Components'.
- 28th November  2000: Keith Wilkins sent in a discrete sound system update, fixing some sounds in Asteroids.
- 20th November  2000: Keith Wilkins sent in an update to the discrete sound system, fixing some sound problems in Asteroids and Lunar Lander.
- 16th November  2000: Keith Wilkins updated the discrete sound system again and added support for Asteroids and Asteroids Deluxe.
- 11th November  2000: Keith Wilkins updated the discrete sound system emulation to support Lunar Lander.
-  7th November  2000: Keith Wilkins sent in a preliminary version of discrete sound system emulation, not supporting any game yet.
- 23rd August    2000: Juergen Buchmueller added preliminary analog sound emulation to Pulsar.
-  9th March     2000: Juergen Buchmueller sent a preliminary Phoenix analog sound driver.
- 13th February  2000: Juergen Buchmueller added preliminary analog sound simulation to Asteroids.
- 12th February  2000: Juergen Buchmueller added preliminary analog sound simulation to Battle Zone and Red Baron.
- 20th November  1998: Zaxxon uses discrete sound circuitry that cannot be emulated. I got lucky and found some sound boards that still had some power in them. Most Zaxxon boards the capacitors are all dried up so a lot of the sound disappear. Stuff to do: Zaxxon has 5 flight sound variations.
- 0.30               : 8039 emulator, and _emulated_ sound in Donkey Kong, Donkey Kong Jr. and Mario Bros. Since the boards also use discrete circuits to generate sound, some samples are still needed to get complete sound support. Also partial sound in Radarscope [Ron Fries, Dan Boris, Mirko Buffoni].
- GAMES: Atari - Super Bug (1977), Fire Truck (1978), Asteroids (1979), Lunar Lander (1979)
- NOTES: The Sega G-80 Raster board uses discrete sound circuitry (Games: Sega - Astro Blaster (1981), 005 (1981), Space Odyssey (1981), Monster Bash (1982), Pig Newton (1983) and Sindbad Mystery (1983))
- SOURCE: sound\discrete.cpp



S1.81  Custom

- 0.154              : Changed '005 Custom' to 'Sega 005 Audio Custom'.
- 0.149u1            : Modernized 'Phoenix Custom' sound device [Osso].
- 0.129u4            : Removed sound\custom.c/h. Aaron Giles removed the custom sound device. The additional work to just make custom sound cases into full devices is minimal, so Aaron just converted them all over to be actual devices. Changed 'Custom' sound to '005 Custom', 'Amiga Custom', 'Attack Ufo Custom', 'Battlezone Engine', 'Buggy Boy Custom', 'CPS3 Custom', 'Custom ADPCM', 'Exidy 440 CVSD', 'Exidy SFX', 'Exidy SFX+PSG', 'Exidy SFX+PSG+Speech', 'Flower Custom', 'Gee Bee Custom', 'Gomoku Custom', 'Gridlee Custom', 'Laserdisc Analog', 'Leland 80186 DAC', 'Leland DAC', 'Naughty Boy Custom', 'Phoenix Custom', 'Pleiads Custom', 'Pole Position Custom', 'Pop Flamer Custom', 'Red Baron Custom', 'Redline Racer 80186 DAC', 'Renegade Custom ADPCM', 'Rockola Custom', 'Sega Universal Sound Board', 'SNES Custom', 'TIA-MC1 Custom', 'TX-1 Custom', 'Warp Warp Custom' and 'Wiping Custom'.
- 0.128u6            : Introduced function macros for CUSTOM_{START,STOP,RESET}. Pushed the running_machine * passing through these functions. In other locations added "running_machine *machine = Machine" to the top of functions to isolate the dependencies [Atari Ace].
- 0.93               : Added sound\custom.c/h. Many drivers using "custom" drivers were just using hard-coded samples and playing them with the (now-defunct) mixer. This is not "custom", it is "samples". They have been converted over to samples [Aaron Giles].
- SOURCE: sound\custom.cpp



S1.9   ADPCM

- 0.150              : Modernized mjkjidai_adpcm and renegade_adpcm devices [Osso].
- 0.142u3            : R. Belmont fixed second ADPCM player in games using SEIBU_ADPCM.
- 0.142              : Aaron Giles fixed missing ADPCM sound in Dead Angle and clones.
- 0.93               : Removed sound\adpcm.c/h.
-  1st November  2003: R. Belmont fixed the ADPCM functions so that games can have both MSM6295 sound chips and plain ADPCM at the same time, and he added complete sound emulation to Grand Cross Pinball.
- 31st October   2003: R. Belmont allow a driver to use both MSM6295s and "raw" ADPCM voices (gcpinbal). Also added some error trapping for MAME_DEBUG builds.
- 30th October   2003: R. Belmont added ADPCM sounds to Cabal and Dead Angle / Gang Hunter, with thanks to Jarek Burczynski for decrypting the sample ROMs.
-  2nd April     2001: Jarek Burczynski added state saving support to ADPCM and OKIM6295 sound emulation cores.
- 14th February  2001: Andrea Mazzoleni added a nice filtering sound resampling algorithm for the driver that do not produce sound at the requested sample rate.
- 29th August    2000: Nicola Salmoria added correct Z80 ADPCM emulation to the Legendary Wings / Trojan driver.
- 12th July      2000: Nicola Salmoria fixed the ADPCM sound frequency in Double Dragon and did some general cleanup in the driver.
-  2nd July      2000: CAB fixed the ADPCM frequency in the Tecmo16 driver.
- 25th June      2000: E. Watanabe fixed the ADPCM sound in the Tecmo16 driver.
- 18th August    1999: Phil Stroffolino sent in an update to the Samurai driver, with ADPCM sound and a lot of other fixes.
-  7th August    1999: Andrew Prime added PCM sound to System 18 and 3D games (using Hiromitsu Shioya's PCM code).
- 24th June      1999: Steve Ellenoff fixed Gladiator ADPCM sample pitch.
- 0.35RC1            : Sound in Great Swordsman. Tatsuyuki Satoh fixed ADPCM playback in Great Swordsman and Gladiator.
-  1st June      1999: Tatsuyuki Satoh fixed the ADPCM hack in Gladiator driver. Nicola worked on the Great Swordsman ADPCM sound.
- 31st May       1999: Aaron Giles sent in an update to the ADPCM core, to support better the newer Atari games.
- 30th April     1999: Phil Stroffolino sent in updates to many things: the SNK drivers have mostly working ADPCM sound and Cabal bootleg has ADPCM sound.
- 24th April     1999: Nicola modified the ADPCM sounds of Klax to change volume as the pieces come closer.
- 0.35b11            : Bryan McPhail added ADPCM samples to Mad Gear.
- 0.35b1             : Jarek Parchanski added PCM samples to Ninja Kid II.
- 0.34               : David Winter added Hyper Olympic (bootleg using ADPCM samples).
- 0.34b3             : Juergen Buchmueller added smoothing to ADPCM playback. Phil Stroffolino added ADPCM sounds to Renegade. Nicola Salmoria added ADPCM sample playback to the bootleg Hyper Olympic.
- 0.33b5             : Nicola Salmoria fixed bug in ADPCM sample playback. Many games are affected, e.g. Robocop and Bad Dudes.
- 0.31               : Aaron Giles improved ADPCM support. Jarek Burczynski fixed ADPCM sample support in Rastan.
- 0.24               : Added sndhrdw\adpcm.c/h. Mirko Buffoni finally fixed problems with ADPCM decoding, so now Kung Fu Master doesn't need separate samples anymore (he didn't distribute them because of copyright on sounds). The samples are now calculated during bootstrap of the game.
- GAMES: Taito - Rastan (1987), Cadash (1987), Maze of Flott (1989)


S1.91  IMA ADPCM
- 0.268              : Added sound\imaadpcm.cpp/h. Added new IMA ADPCM implementation class. Switch ADPCM algorithm to IMA ADPCM (machine\spg2xx_audio.cpp) [Simon Eriksson].
- DRIVERS: (MESS)
- SOURCE: sound\imaadpcm.cpp







S2.    Digital Analog Converter

S2.1   DAC

- 0.268              : Increased sample rate in favor of better resample quality. Added note about buffer size (sound\dac.cpp) [hap].
- 0.253              : Added generic 5bit DAC (sound\dac.h) [hap].
- 0.252              : Added '3-Bit R-2R DAC' [hap, =CO=Windler].
- 0.251              : Added AD7520 DAC (sound\dac.h) [Dirk Best].
- 0.246              : Removed dac_4bit_binary_weighted_sign_magnitude_longcat_device (sound\dac.cpp). Removed "are these real" section, move 2bit 1s complement DAC to the others (it's not r2r or binary weighted, but simply connects one output to (+) speaker lead, one output to (-) speaker lead) [hap].
- 0.226              : Improved performance. Modified DAC to accept streams of any input rate to avoid resampling. Modified DAC to assume input voltage streams are constant by only grabbing the first input sample. Restructure the DAC sound devices a bit. Centralized implementation based on lookup tables. Added set_constant_vref() method for the common case where references are constant, thus avoiding the need for voltage regulator devices. Converted williams.cpp to using this new method as a test. Various improvements: Default to output range -1..1, by far the most common case. Detect if inputs are specified and use those for output range. Make default range for 1-bit DACs 0-1 instead of -1-1 [Aaron Giles].
- 0.225              : Update DAC sound to the new stream update callback [Aaron Giles].
- 0.223              : Added ZN426E device (sound\dac.h) [Dirk Best].
- 0.222              : Simplified some handlers [Osso].
- 0.207              : Default input clocks to zero (sound\dac.h) [hap].
- 0.182              : More DAC identification and Namco sound research (sound\dac.h, namco.cpp, drivers\byvid.cpp, galaxian.cpp, junofrst.cpp, mappy.cpp and namcos1.cpp) [AJR]. Replaced '4-Bit R-2R DAC' sound with '4-Bit Binary Weighted DAC' in Grobda.
- 0.179              : DAC WIP, started documenting the DACs in use [smf]. Added devices 1-Bit DAC, 10-Bit R-2R DAC, 12-Bit R-2R DAC, 12-Bit R-2R Twos Complement DAC, 16-Bit R-2R DAC, 16-Bit R-2R Twos Complement DAC, 2-Bit R-2R DAC, 3-Bit Binary Weighted DAC, 4-Bit Binary Weighted DAC, 4-Bit R-2R DAC, 6-Bit R-2R DAC, 8-Bit Binary Weighted DAC, 8-Bit R-2R DAC, 8-Bit R-2R Twos Complement DAC, AD7521, AD7524, AD7528, AD7533, AM6012, MC1408, MC3408, MC3410 and Voltage Regulator.
- 0.146u5            : Aaron Giles converted dac.c to a modern sound device. Update all callers. It is quite clear nobody understands how the dac device works. unsigned_write8 (formerly dac_data_w) accepts a value from 0..255 and scales it to 0..32768. signed_write8 (formated dac_signed_data_w) accepts a value from 0..255 and scales it to -32767..32768. So signed/unsigned applies to the output. The input values are always full-range unsigned data. Same goes for 16-bit variants.
- 0.129u5            : Nathan Woods added ATTR_NOTNULL to DAC sound calls.
- 0.104u6            : Aaron Giles added 4x oversampling support to the DAC sound system.
- 14th May       2001: Stefan Jokisch fixed the DAC sound in Atari Basketball.
- 25th February  2000: Vernon C. Brooks fixed Namco System 1 DAC.
-  9th February  2000: Tatsuyuki Satoh fixed some DAC problems in Namco System 1 games.
- 13th December  1999: Nicola Salmoria added preliminary DAC sound to Finalizer.
-  7th October   1999: Tatsuyuki Satoh added DAC sounds to Namco System 1 driver.
-  1st October   1999: Aaron Giles added 16-bit interfaces to the DAC routines.
- 29th August    1999: Phil Stroffolino hooked up DACs properly in Samurai (Taito) and added the missing ROM.
- 11th June      1999: Paul Leaman and Nicola added one of the DACs to the Leland driver.
- 30th April     1999: Chris Hardy added the DAC sound to Megazone.
- 0.31               : Tatsuyuki Satoh improved YM2203 and YM2151 emulator, and DAC interface, with 16 bit samples support (use -sb 16 to turn on 16 bit samples).
- 0.30               : Added sndhrdw\dac.c/h. Source: Tatsuyuki Satoh centralized dac.c for dac sound emulation. Several drivers use it.
- 0.29               : Nicola Salmoria add digital audio (DAC) in the Taito games (used for some sound effects, most notably Tarzan's yell in Jungle King). Also, music plays in Jungle King. All the Williams games. Samples are no longer needed and may be deleted [Steven Hugg, Mirko Buffoni, Nicola Salmoria].
- 0.28               : Fabrice Frances added *emulated* sound to Q*Bert, Reactor, Krull and Mad Planets. The samples are no longer needed and may be removed. Q*Bert Qubes would work as well, if we had the sound ROM ;-( Speech is not emulated... yet!
- DEVICES: 1-Bit DAC, 10-Bit R-2R DAC, 12-Bit R-2R DAC, 12-Bit R-2R Twos Complement DAC, 16-Bit R-2R DAC, 16-Bit R-2R Twos Complement DAC, 2-Bit Binary Weighted DAC, 2-Bit Ones Complement DAC, 2-Bit R-2R DAC, 3-Bit Binary Weighted DAC, 3-Bit R-2R DAC, 4-Bit Binary Weighted DAC, 4-Bit R-2R DAC, 5-Bit Binary Weighted DAC, 5-Bit R-2R DAC, 6-Bit Binary Weighted DAC, 6-Bit R-2R DAC, 8-Bit Binary Weighted DAC, 8-Bit PWM DAC, 8-Bit R-2R DAC, 8-Bit R-2R Twos Complement DAC, AD557 DAC, AD558 DAC, AD7224 DAC, AD7520 DAC, AD7521 DAC, AD7523 DAC, AD7524 DAC, AD7528 DAC, AD7533 DAC, AD7541 DAC, AM6012 DAC, DAC08 DAC, DAC0800 DAC, DAC0832 DAC, DAC1200 DAC, MC1408 DAC, MC3408 DAC, MC3410 DAC, MP1210 DAC, PCM54HP DAC, UDA1341TS DAC, ZN425E DAC, ZN426E-8 DAC, ZN428E-8 DAC and ZN429E-8 DAC
- SOURCE: sound\dac.cpp


S2.11  PMI DAC-76 COMDAC

- 0.278              : Cleaned up various things (sound\dac76.cpp) [Vas Crabb]. Automatically detecting streaming. Removed dac76::configure_streming_iref() (sound\dac76.cpp) [m1macrophage].
- 0.277              : Emulating multiplying capability. Added support for reference current (multiplying capability), voltage output and streaming reference current. Used those capabilities in (MESS) oberheim\dmx.cpp and linn\linndrum.cpp (sound\dac76.cpp) [m1macrophage].
- 0.274              : Documenting equivalence to AM6070. Fixing pin locations (sound\dac76.h) [m1macrophage].
- 0.225              : Update DAC-76 sound to new stream callbacks [Aaron Giles].
- 0.186              : Changed description to 'PMI DAC-76 COMDAC'.
- 0.181              : Added sound\dac76.cpp/h. Replaced 'beezer SFX' device with 'DAC-76 COMDAC'. New DAC-76 DAC sound for Beezer [Dirk Best].
- 0.149u1            : Added 'beezer SFX' device (audio\beezer.c).
- NOTES: PMI DAC-76 COMDAC Companding D/A Converter
- PCB: DAC76 (Beezer)
- DEVICES: beezer.cpp
- SOURCE: sound\dac76.cpp


S2.12  DMA-driven DAC

- 0.225              : Update DMADAC sound to new stream callbacks [Aaron Giles].
- 0.187              : Check if list item exists before calling member function [Ted Green].
- 0.153              : Removed legacy code from DMADAC. Initialize DMADAC, fixes regressions [Miodrag Milanovic].
- 0.147              : Added 'DMA-driven DAC' device.
- 0.135u3            : Fixed DMADAC wrapping behavior [Tim Schuerewegen].
- 0.113u3            : Added save state support to DMA-driven DAC [Couriersud].
- 0.112u4            : Removed a big pile of goofiness from the DMA-driven DAC driver now that it is no longer necessary [Aaron Giles].
- 0.94u1             : Changed description to 'DMA-driven DAC'.
- 0.80               : Fixed a small typo in the DMADAC interface line in sndintrf.c [Nathan Woods].
- 0.79u2             : Added sound\dmadac.c/h.
- 19th February  2004: Aaron Giles added support for a DMA-driven DAC sound device.
- DRIVERS: 39in1.cpp, aleck64.cpp, atarigt.cpp, atlantis.cpp, cdi.cpp, cobra.cpp, gaelco3d.cpp, kinst.cpp, magictg.cpp, mediagx.cpp, metalmx.cpp, midtunit.cpp, midvunit.cpp, midwunit.cpp, midxunit.cpp, midzeus.cpp, seattle.cpp, stv.cpp, vegas.cpp, viper.cpp, wpc_95.cpp, wpc_dcs.cpp, wpc_s.cpp and zn.cpp
- SOURCE: sound\dmadac.cpp



S2.2   AMD

S2.21  DAC08
- 0.226              : Changed description to 'DAC08 DAC'.
- 0.183              : Added 'DAC08' device (sound\dac.h).
- PCB: AMD DAC-08CQ (Cntsteer)
- SOURCE: sound\dac.h


S2.22  DAC0800
- 0.226              : Changed description to 'DAC0800 DAC'.
- 0.184              : Added 'DAC0800' device (sound\dac.h).
- PCB: DAC0800LCN (Turbo)
- SOURCE: sound\dac.h


S2.23  DAC0807
- PCB: DAC0807LCN (Mplanets)


S2.24  DAC0832
- 0.226              : Changed description to 'DAC0832 DAC'.
- 0.183              : Added 'DAC0832' device (sound\dac.h).
- SOURCE: sound\dac.h


S2.25  DAC1200
- 0.226              : Changed description to 'DAC1200 DAC'.
- 0.184              : Added 'DAC1200' device (sound\dac.h).
- DRIVERS: (MESS) notetaker.cpp
- SOURCE: sound\dac.h




S2.3   Analog Devices

S2.31  AD557
- 0.226              : Changed description to 'AD557 DAC'.
- 0.184              : Work out several device hookups in Wild Poker driver. Added AD557 sound to 'Royal Poker V 1.85' [AJR].
- DRIVERS: wildpkr.cpp
- SOURCE: sound\dac.h


S2.32  AD558
- 0.226              : Changed description to 'AD558 DAC'.
- 0.211              : Added 'AD558' device (sound\dac.h).
- PCB: AD558JN (Showdown)
- DRIVERS: by35.cpp and mcr.cpp
- SOURCE: sound\dac.h


S2.33  AD561
- PCB: AD561 DAC (Omegrace)

S2.34  AD706
- PCB: AD706, SOIC8, DAC? (A51site4)

S2.35  AD1847
- PCB: ANALOG DEVICES AD1847JP 'SOUNDPORT', PLCC44, surface mounted (A51site4)


S2.36  AD1848

- 0.273              : Added support for auto-calibration (sound\ad1848.cpp) [Dirk Best].
- 0.220              : Simplified some handlers [Osso].
- 0.199              : Changed description to 'AD1848 16-bit SoundPort Stereo Codec'. Swapped the crystals so it's playing at 32Khz instead of 22.05 [Carl].
- 0.186              : Changed description to 'Analog Device AD1848'.
- 0.185              : Updated AD1848. Added save state [Carl].
- 0.172              : Added sound\ad1848.cpp/h. Added 'Analog Devices AD1848' device. Added sound and mark Tournament Solitaire working [Carl].
- NOTES: Analog Devices AD1848, main codec in Windows Sound System adapters.
- DRIVERS: mtouchxl.cpp and pcat_dyn.cpp
- SOURCE: sound\ad1848.cpp


S2.37  AD1851
- PCB: D/A converter, 16bit, 0.008% THD (Nbajam, MK3)

S2.38  AD1866
- PCB: AD1866R Analog Devices dual 16-bit audio DAC (Gauntleg, Nbajamex, Blitz99)

S2.39  AD1868
- PCB: The Konami custom chips 054544/054986A have a Analog Devices AD1868R inside.


S2.3A  AD7224
- 0.226              : Changed description to 'AD7224 DAC'.
- 0.182              : Added 'AD7224' device (sound\dac.h).
- SOURCE: sound\dac.h


S2.3B  AD7521
- 0.226              : Changed description to 'AD7521 DAC'.
- 0.179              : Added 'AD7521' device (sound\dac.h).
- SOURCE: sound\dac.h


S2.3C  AD7523
- 0.226              : Changed description to 'AD7523 DAC'.
- 0.185              : Added 'AD7523' device (sound\dac.h).
- SOURCE: sound\dac.h

S2.3D  AD7524
- 0.226              : Changed description to 'AD7524 DAC'.
- 0.182              : Replaced '8-Bit R-2R DAC' sound with AD7524 in jdreddp, mk, narc, nbajam, nbajamte, term2, totcarn, wpc_an.cpp, wpc_dot.cpp, wpc_flip1.cpp and wpc_flip2.cpp.
- 0.179              : Added 'AD7524' device. Replaced DAC sound with AD7524 in leland.cpp.
- SOURCE: sound\dac.h


S2.3E  AD7528
- 0.226              : Changed description to 'AD7528 DAC'.
- 0.179              : Added 'AD7528' device (sound\dac.h).
- SOURCE: sound\dac.h


S2.3F  AD7533
- 0.226              : Changed description to 'AD7533 DAC'.
- 0.179              : Added 'AD7533' device (sound\dac.h).
- SOURCE: sound\dac.h


S2.3G  AD7541
- 0.226              : Changed description to 'AD7541 DAC'.
- 0.184              : Added 'AD7541' device (sound\dac.h).
- SOURCE: sound\dac.h


S2.3H  AM6012
- 0.226              : Changed description to 'AM6012 DAC'.
- 0.179              : Added 'AM6012' device (sound\dac.h).
- SOURCE: sound\dac.h


S2.4   Asahi Kasei Microsystems

S2.41  AK4309
- PCB: Asahi Kasei AK4309-VM Digital to Analog Audio Converter, SOIC24 (Heatof11, Polystar)

S2.42  AK4310
- PCB: AKM_AK4310VM DAC Audio Converter, 16Bit Resolution, Single DAC, Serial Digital Interfaces (Beastrzr, Area51, Sfex2, Brvblade, Raystorm, Taito GNET-System)

S2.43  AK4316
- PCB: Asahi Kasei AK4316-VS (MetalManiax)



S2.5   NEC

S2.51  MC1408

- 0.226              : Changed description to 'MC1408 DAC'.
- 0.182              : Replaced '8-Bit R-2R DAC' sound with MC1408 in archrivl, hiimpact, joust2, pigskin, shimpact, smashtv, trisport, trog, s3.cpp, s4.cpp, s6.cpp, s6a.cpp, s7.cpp, s8.cpp, s8a.cpp, s9.cpp, s11.cpp, s11a.cpp, s11b.cpp and s11c.cpp.
- 0.179              : Added 'MC1408' device. Replaced DAC sound with MC1408 in williams.cpp, wmg.cpp and zaccaria.cpp.
- PCB: 10 bit DAC (Trog), AM1408 (Vsgongf)
- SOURCE: sound\dac.h


S2.52  MC3408
- 0.226              : Changed description to 'MC3408 DAC'.
- 0.179              : Added 'MC3408' device (sound\dac.h).
- DRIVERS: esripsys.cpp
- SOURCE: sound\dac.h


S2.53  MC3410
- 0.226              : Changed description to 'MC3410 DAC'.
- 0.179              : Added 'MC3410' device (sound\dac.h).
- DRIVERS: esripsys.cpp
- SOURCE: sound\dac.h


S2.53  MC14016
- GAMES: Rock Climber (Taito 1981)
- SOURCE: drivers\rockclim.cpp
- PCB: MC14016BCP (Jungler)


S2.54  D6376
- PCB: NEC D6376 Audio 2-channel 16-Bit D/A Converter, SOIC16 (NintendoSuperSystem, SegaModel3, Scud, Speglsht), UPD6376 (Renju)

S2.55  D6379
- PCB: NEC uPD6379 Audio 2-channel 16-bit D/A converter 10mW, SOIC8 (PGM-System), D6379GR (Capcom-ZN1/2, Taito GNET-System)



S2.6   Philips

S2.61  TDA1004
- PCB: (Sprint1)

S2.62  TDA1010
- PCB: (Scorpion, Armada)

S2.63  TDA1311
- PCB: Philips DA1311A DAC  SOIC8 (Crysking (DA1133A ?), Misncrft, PPCar)

S2.64  TDA1386
- PCB: Philips TDA1306T Noise Shaping Filter DAC, SOIC24 (CPS3), TDA1386T (Sega Model3, Bel, Harley)

S2.65  TDA1543
- NOTES: Philips Dual 16-bit DAC
- GAMES: Ground Effects (Taito 1992), Alligator Hunt (Gaelco 1994), Gallop Racer (Tecmo 1996), Radikal Bikers (Gaelco 1998)

S2.66  TDA1545
- PCB: DA1545A (Xfiles)



S2.7   Sanyo

S2.71  LC7528
- PCB: LC7528CN (Botss, F15se)

S2.72  LC7881
- PCB: Sanyo LC7881 16bit DAC, SOIC20 (Luckywld, Gollygho, BackFire, Wcvol95)

S2.73  LC78815
- PCB: LC78815  2-Channel 16-Bit D/A Converter, SOIC20 (NamcoSystem11, Ncv1/2)

S2.74  LC78820
- NOTES: Sanyo LC78820 2-channel 18-bit D/A Converter, DIP20
- PCB: LC78820 (Titlef, Model1)

S2.75  LC78832
- PCB: LC78832M  2-Channel 16-Bit D/A Converter LSI with 2 On-Chip Digital Filters, SOIC20 (NamcoSystem12, GP500)

S2.76  LC78836
- 0.259: Added sound\lc78836m.cpp/h. Added 'Sanyo LC78836M Digital Audio 16-bit D/A Converter' device. Emulated Sanyo LC78836M audio DAC [Windy Fairy].
- NOTES: Sanyo LC78836M Digital Audio 16-bit D/A Converter with On-Chip Digital Filters
- PCB: LC78836M (Truck Kyosokyoku)
- SOURCE: sound\lc78836m.cpp



S2.8   Zarlink

S2.81  ZN425e
- 0.226              : Changed description to 'ZN425E DAC'.
- 0.184: Added 'ZN425E' device (sound\dac.h).
- DRIVERS: ???
- SOURCE: sound\dac.h

S2.82  ZN426e
- 0.226              : Changed description to 'ZN426E-8 DAC'.
- 0.223              : Added 'ZN426E-8' device (sound\dac.h).
- DRIVERS: ???
- SOURCE: sound\dac.h

S2.83  ZN428e
- 0.226              : Changed description to 'ZN428E-8 DAC'.
- 0.198              : Added 'ZN428E-8' device (sound\dac.h).
- DRIVERS: xtheball.cpp
- SOURCE: sound\dac.h

S2.84  ZN429e
- 0.226              : Changed description to 'ZN429E-8 DAC'.
- 0.182              : Added 'ZN429E-8' device. Identified unknown DAC in byvid.cpp (ZN429E) [AJR].
- PCB: ZN429E-8
- DRIVERS: by35.cpp and byvid.cpp
- SOURCE: sound\dac.h



S2.9   Other

S2.91  BU9480
- PCB: Rohm BU9480F, 16-bit stereo D/A converter for audio application SOP8, Tape and Reel (11beat, Mtetrisc)

S2.92  CS4334 DAC
- 0.279              : Added 'CS4334 DAC' device (sound\dac.h).
- DRIVERS: pluto6.cpp (machine\pl6_fpga.cpp)
- SOURCE: sound\dac.h

S2.93  D49307
- PCB: HITACHI DF1 D49307, Three-Channel 8-bit D/A Converter (SuperKaneko-NovaSystem)

S2.94  MB88347
- PCB: Fujitsu MB88347 8bit 8 channel D/A converter with OP AMP output buffers, SOIC16 (Gp500, NamcoSystem12)

S2.95  MP1210
- 0.226              : Changed description to 'MP1210 DAC'.
- 0.202              : Added 'MP1210' device (sound\dac.h).
- NOTES: Micro Power Systems MP1210, MP1210RD/883, 12-Bit Digital-to-Analog Converter, Double-Buffered
- PCB: MP1210HN (9ballsht)
- DRIVERS: coolpool.cpp
- SOURCE: sound\dac.h

S2.96  PCM54HP
- 0.226              : Changed description to 'PCM54HP DAC'.
- 0.184              : Added 'PCM54HP' device (sound\dac.h).
- SOURCE: sound\dac.h

S2.97  SND01
- PCB: Konami SND01 715-057P 842200, DIP40 (Finalizr)

S2.98  UDA1341TS
- 0.226              : Changed description to 'UDA1341TS DAC'.
- 0.184              : Added 'UDA1341TS' device (sound\dac.h).
- SOURCE: sound\dac.h



S3.    Texas Instruments

S3.1   SN76477

- 0.254              : Make it less verbose (sound\sn76477.cpp) [Curt Coder].
- 0.225              : Update SN76477 sound to new stream callbacks [Aaron Giles].
- 0.216              : Replaced the char array with a std::string in sn76477_device::open_wav_file to override possible buffer overrun. Minor cosmetic change in a boolean expression in sn76477_device::sound_stream_update. Fixed LOG_WAV_ENABLED_ONLY (m_enable has to be checked only if LOG_WAV_ENABLED_ONLY is set). Added log data to the right channel of the wave, accordingly to the definition declared in LOG_WAV_VALUE_R. Fixed an error with tag() returning a ':' and generating a filename not valid in Windows environment [Janniz].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- xxth May       2018: Ken Shirriff - Inside the 76477 Space Invaders sound effect chip: digital logic implemented with I2L (http://www.righto.com/2018/05/inside-76477-space-invaders-sound.html)
- 0.186              : Changed description to 'TI SN76477 CSG'. Unconnected SN76477 resistor treated as invalid even though it's the initial value [Robbbert].
- xxth April     2017: Ken Shirriff - Reverse engineering the 76477 "Space Invaders" sound effect chip from die photos (see http://www.righto.com/2017/04/reverse-engineering-76477-space.html).
- 0.169              : Notes, typo and RES_INF for default open circuit [Vas Crabb].
- 0.156              : Converted SN76477 to use inline config [Fabio Priuli].
- 0.152              : Modernized the SN76477 sound device (sound\sn76477.c, drivers\8080bw.c, astrof.c, crbaloon.c, dai3wksi.c, laserbat.c, rotaryf.c, route16.c, snk6502.c, spectra.c, toratora.c, audio\mw8080bw.c and n8080.c) [Osso].
- 0.147              : Added 'SN76477' device (sound\sn76477.c).
- 0.144u4            : Improved SN76477 interface [Curt Coder].
- 0.112u4            : Added SN76477 noise RNG (random number generator) polynomial [Zsolt Vasvari, Derrick Renaud, Jarek Burczynski].
- 0.111u6            : Zsolt Vasvari and Derrick Renaud rewrote the SN76477 emulator from scratch. The main difference between the old one and the new one is that it is based on measurements from a real chip. Also the emulator is fully analog, meaning that timings/frequencies, etc. are based on voltage levels. This gives a much more true-to-life emulation where the weird behavior of the real chip comes emulated for free. The code itself is also a lot simpler and more understandable.
- 0.111u3            : Zsolt Vasvari added the remaining input pins to the SN76477 Interface. If these pins are constant, they can now be defined in the structure as opposed to having to call functions in an init routine. Modified all the drivers that use a 76477.
- 0.104u4            : Adam Bousley added save state support to the SN76477 sound chip.
- 0.94u2             : Derrick Renaud fixed SN76477 emulation bug where gain was 3x more then it should be, causing effects to clip for 2/3rds of the time. Fixed the SN76477 attack time for one-shot envelope mode.
-  8th April     2000: Zsolt Vasvari fixed a bug in the SN76477 emulator and got the explosion sound working in Space Chaser.
-  5th April     2000: Zsolt Vasvari added cocktail mode support and some SN76477 sound support to Space Chaser.
- 22nd March     2000: Zsolt Vasvari added SN76477 support to Space Invaders.
- 20th March     2000: Juergen Buchmueller fixed some SN76477 and Phoenix sound bugs.
- 0.36RC1            : Added sound\sn76477.c/h. Preliminary SN76477 emulation [Juergen Buchmueller].
- 16th February  2000: Zsolt Vasvari and Juergen Buchmueller added preliminary DAC and SN76477 sound to Bandido. Juergen Buchmueller fixed Asteroids Deluxe explosion sound.
- 14th February  2000: Juergen Buchmueller fixed some bugs in the SN76477 sound core, and added support for it to Crazy Balloon.
- 11th February  2000: Juergen Buchmueller added preliminary SN76477 analog/digital sound chip emulation to Stratovox / Speak & Rescue.
- NOTES: Inside the 76477 Space Invaders sound: http://www.righto.com/2018/05/inside-76477-space-invaders-sound.html
- PCB: TMS SN76477N (Laserbat), SN76477N (Laserbat), TI76477 (Speakres), SN76477 DIP28 (Malzak), 76477 (Clayshoo)
- DRIVERS: 8080bw.cpp, astrof.cpp, crbaloon.cpp, gp_1.cpp,laserbat.cpp, malzak.cpp, mw8080bw.cpp, n8080.cpp, rotaryf.cpp, route16.cpp, scyclone.cpp, snk6502.cpp, spaceg.cpp, spectra.cpp and toratora.cpp
- SOURCE: sound\sn76477.cpp



S3.2   SN76489

- 0.281              : m_sega_style_psg was wrong way around. Fixed recent regression with initial period. Fixes megatech.cpp games have a loud noise in one of the sound outputs. Whitespace cleanup. 'ready state' variable was missing from savestates. Initial volume is 0xf on Sega PSG. No need to savestate volume table. Only write ready pin devcb if ready pin changed, no need for in_noise_mode function and added pinout diagram to h file (sound\sn76496.cpp) [hap].
- 0.267              : Fixed log neutrality violation [Angelo Salese].
- 0.220              : Fixed ready_r handling [Michael Zapf].
- 0.217              : Use an emu_timer to control the READY line [Michael Zapf].
- 0.202              : Renamed NCR7496 to NCR8496 for Tandy 1000TX and similar machines based on PCB pictures and service manual parts list. Added support for PSSJ-3 ASIC used in later Tandy 1000 machines. Fixed noise generatior behavior in NCR8496 and PSSJ-3 to match hardware tests [Lord Nightmare, Qbix, ValleyBell, NewRisingSun].
- 0.166              : Fixed PSG chips to have volume reg inited on reset to 0x0 based on tests by ValleyBell. Made Sega PSG chips start up with register 0x3 selected (volume for channel 2) based on hardware tests by Nemesis [Lord Nightmare, ValleyBell, Nemesis].
- 0.163              : Removed old kludge (sound\sn76496.c) [hap].
- 0.147              : Continuing new device implementation for SN76489 and clones (drivers\goldstar.c, guab.c, lasso.c, mrjong.c, qix.c, sbasketb.c, sbugger.c, sg1000a.c and sprcros2.c) [Osso, David Haywood]. (MESS) Converted mess\drivers\crvision.c to use new sn76494_device [Curt Coder].
- 0.146u2            : Modern class implementation to SN76489, appended to legacy code [Michael Zapf].
- 0.136u4            : Fixed TI PSG (SN76489 and friends) noise and square-wave period to be maximum length when period register is set to 0. Fixed white-noise phase/XOR issue: got rid of noise XOR/XNOR select, as all chips seem to use XOR [Lord Nightmare, Michael Zapf, David Viens]. Minor fix to SN76489: SN76489 wasn't using the correct noise taps (now matches SN94624, still need to test a real chip). Removed a piece of useless code, and fixed a comment [Lord Nightmare].
- 0.136u1            : Lord Nightmare, Kold666 and David Viens fixed period for both SN76489 and SN76489A periodic noise; fixes pitch in 'smooth criminal' demo for colecovision and fixes pitch (but not the waveform, which will require more work) of music in Do! Run Run. More work is required before the code will be bit accurate due to the way the real LFSR and periodic generator work.
- 0.135u4            : Lord Nightmare and DFJustin fixed Megadrive emulation to use the SMSIII version of the SN76489 sound chip.
- 0.135u1            : Lord Nightmare and David Viens updated SN76489/A to have correct PRNG waveforms (a 0 bit was missing at the beginning, and beginning of SN76489 waveform was all 1s instead of 0s as measured on hardware). Added SN94624 (same as SN76489). Lord Nightmare trashed the old pre-accurate-clocking STEP based sample averaging scheme from SN76489 and friends, vastly simplifying the code. Made the output bipolar rather than only above the 0 line. Added missing statement to the get_safe_token function for the recently added SN94624.
- 0.116u2            : Justin Kerk and Lord Nightmare updated a number of games to correctly use the SN76489 instead of the SN76496, which was a later design.
- 0.115u4            : Lord Nightmare fixed a number of games to explicitly use the SN76489 now that it behaves differently from the SN76496.
- 0.114u3            : Improved noise emulation in the SN76496 emulator. Added several variants which differ based on the noise generator and other parameters [Lord Nightmare].
- 21st March     2002: Olivier Galibert found the correct shift register operations for noise generators for both SN76489 and YM3812.
- GAMES: Chameleon (Jaleco 1983), Van-Van Car (1983), Time Pilot'84 (Konami 1984), Finalizer (Konami 1985), Super Cross 2 (1986)
- NOTES: The SN76489 noise generator uses a 15-bit shift register with taps on bits D and E, output on /E. It uses a 15-bit ring buffer for periodic noise/arbitrary duty cycle.
- PCB: TI SN76489 PSGs (Chameleo), SN76489AN (Myhero), SN-76489 (Appoooh), 76489 (Chboxing, Sbugger), Texas J327A-SN76489AN (Ufosensi)
- DRIVERS: amusco.cpp, appoooh.cpp, atetris.cpp, bankp.cpp, cops.cpp, ecoinf3.cpp, exedexes.cpp, goldstar.cpp, guab.cpp, inder.cpp, jpmmps.cpp, kncljoe.cpp, ladybug.cpp, lasso.cpp, lucky74.cpp, mjkjidai.cpp, mrjong.cpp, qix.cpp, sbasketb.cpp, sbugger.cpp, sg1000a.cpp and sprcros2.cpp
- SOURCE: sound\sn76496.cpp



S3.21  SN76489A

- 0.147              : Continuing new device implementation for SN76489A and clones (drivers\finalizr.c, gberet.c, homedata.c, shaolins.c, system1.c and yiear.c) [Osso, David Haywood].
- 0.136u4            : Fixed TI PSG (SN76489 and friends) noise and square-wave period to be maximum length when period register is set to 0. Fixed white-noise phase/XOR issue: got rid of noise XOR/XNOR select, as all chips seem to use XOR [Lord Nightmare, Michael Zapf, David Viens].
- 0.136u2            : Lord Nightmare, David Viens and Kold666 fixed SN76489a periodic noise once again (and simplified a bit of code), now should be closer to or match real chips as sampled. Added true clock divider emulation, so emulation may be a bit slower.
- 0.136u1            : Lord Nightmare, Kold666 and David Viens fixed period for both SN76489 and SN76489A periodic noise; fixes pitch in 'smooth criminal' demo for colecovision and fixes pitch (but not the waveform, which will require more work) of music in Do! Run Run. More work is required before the code will be bit accurate due to the way the real LFSR and periodic generator work.
- 0.114u3            : Improved noise emulation in the SN76496 emulator. Added several variants which differ based on the noise generator and other parameters [Lord Nightmare].
- NOTES: The SN76489A noise generator uses a 16-bit shift register with taps on bits D and F, output on F. It uses a 16-bit ring buffer for periodic noise/arbitrary duty cycle.
- SOURCE: sound\sn76496.cpp



S3.22  Sega VDP PSG

- 0.186              : Changed description to 'Sega VDP PSG'.
- 0.142u5            : Changed description to 'SEGA VDP PSG'. Lord Nightmare changed name of SN76489 variant used in Sega Master System and Megadrive/Genesis from SMSIII to the more technically accurate SEGAPSG, as the PSG in question was not only used on the mark 3 units. Switch SEGA System E to use the SEGAPSG SN764xx variant, as it uses two SEGA 315-5124 VDPs which have the SEGAPSG integrated. Should slightly improve sound.
- 0.135u4            : Lord Nightmare and DFJustin fixed megadrive emulation to use the SMSIII version of the SN76489 sound chip.
- SOURCE: sound\sn76496.c, drivers\megadriv.c + segae.cpp


S3.23  T6W28
- 0.225              : Update T6W28 sound to new stream callbacks [Aaron Giles].
- 0.147u2            : Converted T6W28 to C++. Implemented disabling the T6W28 output [Wilbert Pol].
- 0.131              : Added emu\sound\t6w28.c/h. Added T6W28 sound core (SNK(?) custom SN76489A clone) [Wilbert Pol].
- SOURCE: sound\t6w28.cpp


S3.24  U8106
- 0.147u1            : Changed description to 'U8106'.
- 0.147              : Changed description to 'U8106_NEW'.
- 0.144u6            : Changed description to 'U8106'.
- 0.144u4            : Added, and made Mr. Do! use the U8106 soundchip, which as far as I can tell is 100% identical to the SN76489 non-a, pending further testing [Lord Nightmare, David Viens].


S3.25  Y2404
- 0.147u1            : Changed description to 'Y2404'.
- 0.147              : Changed description to 'Y2404_NEW'.
- 0.144u6            : hap added TI Y2404, for now assuming it's identical to SN76489A.



S3.3   SN76496

- 0.280              : Tone frequencies and volume are non-zero at startup (gives (MESS) BBC Micro boo-bip startup tones) (sound\sn76496.cpp) [Nigel Barnes].
- 0.225              : Removed u8106 alias. Note: Sound chips have custom label "U8106". Or "8106" or unlabeled with the original label scratched off. They are presumedly SN76489. Note that Lady Bug's PCB S/N is also 8106 and has the same sound chips [hap]. Update SN76496 sound to the new stream update callback [Aaron Giles].
- 0.207              : Removed unnecessary handler. Removed unnecessary arguments in stereo_w. write8smo handler is already exists [cam900].
- 0.201              : Added device_clock_changed [smf].
- 0.163              : Added ready read (sound\sn76496.h) [Dirk Best].
- 0.153              : Fixed crash at startup. Converted SN76496 ready to DEVCB2 [smf].
- 0.147u1            : hap removed SN76496 legacy device.
- 0.147              : Continuing new device implementation for SN76496 and clones (drivers\circusc.c, galaxold.c, hyperspt.c, pacman.c, pingpong.c, retofinv.c, segag80r.c, senjyo.c, strnskil.c, superdq.c, suprloco.c, trackfld.c, xyonix.c and zaxxon.c) [Osso, David Haywood].
- 0.146u5            : Updated some drivers to use the new SN76496 device implementation. Update: Reverted original SN76496N patch and applied newer patch containing a change to 'SN76496_NEW' to avoid confusion [Osso].
- 0.135u1            : Lord Nightmare and Justin Kerk got rid of SN76496's R->OldNoise since it causes problems for gamegear/sms. Changed noise taps accordingly. Redid change to gamegear/sms for XOR vs XNOR, now verified by Justin Kerk. Verified gamegear noise taps thanks to sample provided by Justin Kerk. Add stereo sound support to sn76496.c for gamegear. Lord Nightmare added NCR7496 variant to sn76496.c. Updated comments to show which chips are currently verified. Cleaned up comments.
- 0.131u1            : Lord Nightmare added READY line readback to the SN76496 core, cleaned up the structs a bit, cleaned up comments, added more TODOs and fixed some unsaved savestate related stuff. Angelo Salese added SN76496 ready line hook-up for spcforce.c, doesn't make a difference since it's not actually used.
- 0.125u5            : Additional documentation in the SN76496 core [Lord Nightmare].
- 0.114u3            : Improved noise emulation in the SN76496 emulator. Added several variants which differ based on the noise generator and other parameters [Lord Nightmare].
- 0.104u8            : Chris Law and Aaron Giles fixed second SN76496 on Congo Bongo to have the correct frequency.
- 0.104u4            : Adam Bousley added save states to the SN76496 sound chip for Sega System 1 games.
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the SN76496 sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.95u2             : Sebastien Chevalier updated the SN76496 Write functions (according to the SN76489 document found on SMSPower).
- 0.36b15            : Removed sound\sn76496u.c.
- 0.34b4             : Added sndhrdw\sn76496u.c.
- 0.34b3             : Rewritten the SN76496 emulator [Nicola Salmoria]. This fixes speech in Choplifter.
- 0.31               : SN76496 support 16 bit samples as well [Tatsuyuki Satoh]. Nicola Salmoria fixed sound in Exed Exes; it has one 8910 and two 76496, not two 8910.
- 0.30               : Tatsuyuki Satoh and Nicola Salmoria cleaned up the SN76496 emulation, now it is similar to the 8910 one and all games use Tatsuyuki's code. This affects several games, most notably the Mr. Do! series.
- 0.27               : Changes in SN76496 emulation (added SN76496UpdateB function to emulate 2 chips on 8 channel PCM sound cards) [Tatsuyuki Satoh].
- 0.18               : Added sndhrdw\sn76496.c/h. Nicola Salmoria finally added some lousy, very inaccurate, noise to the 76496 emulator. This affects Lady Bug and Green Beret.
- NOTES: The SN76494 and SN76496 noise generator are probably identical in operation to the SN76489A. They have an audio input line which is mixed with the 4 channels of output.
- DRIVERS: centiped.cpp, dkong.cpp, drmicro.cpp, freekick.cpp, galaxold.cpp, konblands.cpp, markham.cpp, pacman.cpp, segag80r.cpp, spcforce.cpp, superdq.cpp and xyonix.cpp
- SOURCE: sound\sn76496.cpp



S3.4   TMS36XX

- 0.225              : Update TMS36XX sound to new stream callbacks [Aaron Giles].
- 0.222              : Fixed log messages and only log error by default (sound\tms36xx.cpp and audio\pleiads.cpp) [Frank Palazzolo].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.154              : Converted TMS36xx to use inline configs [Fabio Priuli].
- 0.148u2            : Modernize TMS36xx sound device [Andrew Gardner].
- 0.147              : Added 'TMS36XX' device (sound\tms36xx.c).
- 15th March     2000: Juergen Buchmueller sent in yet another TMS36xx sound core update with some bugfixes and adjustments.
- 13th March     2000: Juergen Buchmueller fixed some problems in the TMS36xx sound core.
- 0.36RC2            : Added sound\tms36xx.c/h. TMS36XX emulation [Juergen Buchmueller]. Juergen rewritten sound emulation in Phoenix, samples are no longer used.
- 12th March     2000: Juergen Buchmueller sent in a sound core for TMS36xx sound chips, and modified Phoenix, Pleiads, Naughty Boy and Monster Bash to use it.
- NOTES: The TMS36XX core support the MM6221AA (Phoenix - 1980), TMS3615 (Naughty Boy - 1982) and TMS3617 (Monster Bash - 1982).
- GAMES: Phoenix (Amstar 1980), Pleiads (Tehkan 1981), Monster Bash (Sega 1982)
- SOURCE: sound\tms36xx.cpp



S3.41  TMS3615

- 0.179              : Use new deprecated attribute [Miodrag Milanovic].
- 0.153              : Deprecated TMS3615 [Oliver Stoeneberg].
- 0.148u2            : Modernized TMS3615 sound device [Andrew Gardner].
- 0.107u2            : Added sound\tms3615.c/h.
- GAMES: Laser Battle (Zaccaria 1981)
- SOURCE: sound\tms3615.cpp
- PCB: TMS3615-25 (Naughtyb), TMS 3615NS-28 (Laserbat)




S4.    Atari

S4.1   TIA

- 0.226              : Use some vaguely C++-like code internally (sound\tiasound.cpp) [Vas Crabb].
- 0.220              : Simplified some handlers [Osso].
- 0.186              : Changed description to 'Atari TIA (Sound)'.
- 0.158              : Added save state support [Osso].
- 0.149u1            : Added 'TIA' device (sound\tiaintf.c).
- 0.148u1            : Modernized TIA sound device (sound\tiaintf.c/h) [Andrew Gardner].
- 0.111u2            : Nathan Woods changed TIA code to only allow initialization at init time.
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the TIA sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.68               : Added sound\tiasound.c/h and tiaintf.c/h.
-  3rd April     2003: Stefan Jokisch sent in a driver for Tournament Table (Hardware is identical to the VCS2600 except for an extra 6532 chip).
- 28th July      2001: Added support for sample rates > TIA clock rate, through oversampling.
- 0.37b14            : Removed sound\tiasound.c and tiaintf.c.
- 0.35b10            : Added sound\tiasound.c/h and tiaintf.c/h.
- 30th October   1998: Modified for use in MESS by Dan Boris.
- 14th January   1997: Cleaned up sound output by eliminating counter reset.
- 10th September 1996: Atari TIA sound emulator [Ron Fries].
- DRIVERS: tourtabl.cpp
- SOURCE: sound\tiaintf.cpp



S4.2   POKEY

- 0.279              : Synchronize on SOD output transitions during serial transmission. Disable logging again (sound\pokey.cpp) [AJR].
- 0.278              : Replaced fake serial port emulation with timer-driven line-level interface, most (MESS) Acid800 serial tests pass now. Emulated two-tone and force break serial output modes. Fixed logging message (sound\pokey.cpp) [AJR].
- 0.260              : Double-check to make sure timer IRQs are enabled before raising them. Latch current value of keyboard count when registering presses in non-debounce mode. Fixes start button not responding in (MESS) a5200:pitfall (sound\pokey.cpp) [AJR].
- 0.253              : Improved some subtle aspects of keyboard handling [AJR].
- 0.250              : Removed m_SKCTL assignment hack in device_start and issue a potgo at device_reset instead, fixes (MESS) Atari 1200XL booting to self-test no matter J1 setting [Angelo Salese].
- 0.249              : Use logmacro.h instead of custom macros for debug logging and add IRQ logging type. Include the machine context in logging messages rather than the device tag (which gets prepended automatically now). Replaced custom IRQ callback with line handler and allow the output to be cleared properly without HOLD_LINE [AJR]. Acknowledge SEROC in progress flag, make (MESS) Atari 800 Telelink II to boot [Angelo Salese].
- 0.247              : Improved accuracy of POKEY emulation. The implementation changes come from the A7800 project (https://github.com/7800-devtools/a7800). Fixes bass voice missing in (MESS) Atari 800XL "Zybex" game music, broken POKEY Join Mode, inaccurate distortion playback and incorrect firing sound in Centipede [Mike Saarna, Andrew Green]. Minor cleanup and got rid of an unnecessary member in channel structures (only used in inline member functions) [Vas Crabb].
- 0.225              : Update POKEY sound to the new stream update callback [Aaron Giles].
- 0.222              : Removed #include "machine\rescap.h" (sound\pokey.h, audio\jedi.cpp, drivers\asteroid.cpp, ccastles.cpp, centiped.cpp, cloak.cpp, liberatr.cpp, maxaflex.cpp, mhavoc.cpp, missile.cpp, tempest.cpp and tunhunt.cpp) [AJR].
- 0.221              : Modernized struct saving [AJR].
- 0.208              : Performance optimization by not using modulus [Andreas Mueller, hap]. Pokey performance II: Renamed pokey_device::m_output -> pokey_device::m_out_raw. Note: There is a variable pokey_device::pokey_channel::m_output. Two variables with same name in close context but complete different maning are not exactly helpful to understand the code. Renaming pokey_device::pokey_channel::m_output was not an option because this would damage stored machine states. Rework for performance enhancements: Profiling with valgrind pointed (pokey_device::step_one_clock()). Rework prescaler handling: CLK_1 does not have a prescaler so there is no need to increment and reset m_clock_cnt[CLK_1]. Unroll other prescalers. It gives performance win and reading is easier. step_pot is called from step_one_clock only and just in case Pokey is not in reset state -> No need to check reset state again. In case there were no bits in 'upd' latched to one, there is no need to call synchronize(SYNC_POT, 0) because m_ALLPOT won't change. Force recalculation of raw sound output after reset [Andreas Mueller].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.203              : Return most recent m_ALLPOT during SK_RESET. Don't count POT counters as long as SK_RESET is applied, i.e. bit #0 and bit #1 of SKCTL are both clear. Remember m_allpot_r_cb() value [Juergen Buchmueller].
- 0.195              : Removed check_debugger [smf].
- 0.186              : Changed description to 'Atari C012294 POKEY'.
- 0.158              : Fixed (MESS) Acid5200 pokey_default test. Make Acid5200 pokey_seroc test pass (http://www.virtualdub.org/altirra.html) [Wilbert Pol].
- 0.156              : Updated Pokey to use delegates for its callbacks. Fixed Pokey mapping in the (MESS) Atari 7800 carts [Fabio Priuli].
- 0.154              : Converted pokey_device to DEVCB2 [Osso].
- 0.148u4            : Correct bit for POK_KEY_BREAK which now allows colon/semi-colon [:;] key to work properly (atari_a800_keyboard: machine\atari.c) [Tom Clayton].
- 0.148u2            : Fixed uninitialized variables in sound\pokey.c [Oliver Stoeneberg].
- 0.147u1            : Moved handling of quad Pokey into drivers as asked (drivers\irobot.c, mhavoc.c and starwars.c) [Miodrag Milanovic].
- 0.146u2            : Comment out error.log flooder [hap].
- 0.146u1            : Couriersud added device_execute_interface to POKEY and moved interrupt handling into the clock stepping routine. Nice step forward. The code is now a lot easier to understand and interrupts and sound generation are no longer disjunct. Added cycle exact potentiometer and keyboard support to Pokey device. The keyboard changes may break some MESS drivers. Please have a look at atari.c and bartop52.c for an example how the new implementation works. Fixed compile error and added preliminary debugger state support. Cool, really cool, and all the devices_interfaces work. "Analog" Pokey Update [Couriersud]: Derived internal resistance calculation from Pokey documentation. This is a 4-bit parallel resistor (High-Z mos "devices") network to ground. The result is a non-linear resistance function. Added low-pass filter support and opamp/resistor stages to the Pokey driver. This is not as good as complete discrete emulation, but a lot better than the linear approximation we had before. Changed a couple of drivers to use the new output volume calculation. Added device configuration macros. Made all drivers use them. Added POKEY filter stages to a couple of more games. Note: Most Atari games have additional filters. At some stage, discrete processing needs to be added. The Quad Pokey needs to become a device to properly and efficiently emulate outputs being tied together. This will trigger some changes to the Pokey device, namely the introduction of a base device. Added POKEY filter stage to Tunnel Hunt. Removed class members no longer needed from POKEY. hap fixed Couriersud's pokepokeyproblem.
- 0.146              : Couriersud improved sound emulation for POKEY chip. Changed audio emulation to emulate borrow 3 clock delay and proper channel reset. New frequency only becomes effective after the counter hits 0. Emulation also treats counters as 8 bit counters which are linked now instead of monolytic 16 bit counters. Fixed high pass filters for POKEY. Added POKEYN device based on modern device. Fixed random lfsr generation. Consolidate polynom code. Removed legacy left overs from Pokey code. Added a internal pokey_channel class. This fixed Liberator resets on the planet screen if any wave above 16 (19 or 22) was selected and imperfect sound play in Missile Command for UFO and bomber attack. Convert all remaining drivers to use the modern Pokey device. Fixed debug build for pokey.c. Fixed no sound in debug build. First try at adding a device_execute_interface to pokeyn_device. This looks promising. Currently commented out. If this works, this will significantly simplify the driver and make most timers in pokey.c disappear.
- 0.145u8            : Various Clang warning cleanups in sound\pokey.c [Balrog].
- 0.104u2            : Aaron Giles added save state support to the POKEY emulator.
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the POKEY sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.93               : Changed description to 'POKEY'.
- 0.89u3             : Juergen Buchmueller attempted to make Pokey random number generator work better with recordings (not verified to improve things yet).
- 0.84u5             : MikeJ fixed subtle behavior in the ALLPOT handlers for the POKEY when held in reset.
- 0.37b7             : Juergen Buchmueller fixed the Pokey emulation so that the Tempest reset bug is fixed, this time for real and forever.
- 28th August    2000: Juergen Buchmueller modified the Pokey RNG functions to finally work as they would in real hardware.
- 25th June      2000: Juergen Buchmueller fixed the Pokey sound core, and Tempest sounds a bit better now.
- 0.36RC1            : Rewritten the Pokey emulator for greater accuracy [Juergen Buchmueller].
- 10th February  2000: Juergen Buchmueller fixed yet more stuff in the Pokey core.
-  5th February  2000: Juergen Buchmueller made some speedups to the Pokey core.
-  3rd February  2000: Juergen Buchmueller rewrote the Pokey code.
- 21st December  1999: Juergen Buchmueller fixed games using Pokey from crashing when run without sound.
- 17th December  1999: Juergen Buchmueller fixed the Pokey POT emulation.
- 0.36b12            : The hangs in Tempest caused by the Pokey protection should now be fixed once and for all [Juergen Buchmueller].
- 0.35b2             : Zsolt Vasvari added Centipede (bootleg with AY8910 instead of Pokey).
- 0.34b8             : Removed sndhrdw\pokyintf.c/h. Juergen Buchmueller improved the Pokey emulation.
- 0.30               : Removed sndhrdw\8910intf.c. Aaron Giles changed the way POKEY sound/interface is updated: There's no longer a fixed "updates per frame" value defined in the driver, instead the audio is stream is generated whenever a chip register is written to (and at every vblank). This improves sound quality in several games.
- 0.29               : Brad Oliver updated pokyintf.c to be more like 8910intf.c. Variable clock frequency, port callbacks, a clipping parameter, variable updates per frame. Most noticeably, Tempest has much improved sound with more frequent updates.
- 0.27               : Added sndhrdw\pokyintf.c/h. Thanks to the precious information on the Pokey random number generator provided by Eric Smith, Hedley Rainnie and Sean Trowbridge, some problems with Centipede (start with 18 credits) and Tempest (hang after level 13) are now solved. Brad Oliver wrote the new sndhrdw\pokyintf.c file. It handles most of the Pokey interface to pokey.c. Rather than call milliped_sh_start() or whatever, call pokeyx_sh_start(), where x is the number of pokeys. It will keep track of the Pokey count and use the appropriate clipping. I'm not sure 3 pokeys is a possible combination so there is no such pokey3_sh_start() routine.
- 0.16               : Added sndhrdw\8910intf.c/h. Brad Oliver modified pokey.c and pokey.h to make them more portable.
- 0.14               : Ron Fries provided a new version of his Pokey emulator which fixes problems in the interface with the SEAL audio library (signed vs. unsigned samples).
- 0.12               : Added sndhrdw\pokey.c/h and pokey.txt. POKEY emulator by Ron Fries. Sound in Centipede, through Ron Fries' POKEY emulator. The biggest difference between the emulator and the original hardware is that the emulator emulates an 'ideal' POKEY chip. All output from the emulator is a based on a precise square wave, whereas the output from the original chip has decay. Though the output is slightly different, I don't believe this difference is easily discernible. Another slight difference is the 17-bit/9-bit poly. Since the polynomial is large (2^17 bits), I choose to create the sample using a random number generator rather than a table. I don't believe this difference is significant. There are also a few differences which are introduced by aliasing. This is a direct result of using an output sampling rate which is not identical to the original sound rate. It is most evident with high frequencies. A final difference is the lack of support for the High-Pass Filter functionality. I plan to add this in a future release if necessary.
- NOTES: Based on original info found in Ron Fries' Pokey emulator, with additions by Brad Oliver, Eric Smith and Juergen Buchmueller, paddle (a/d conversion) details from the Atari 400/800 Hardware Manual. Polynome algorithms according to info supplied by Perry McFarlane.
- POKEY chip emulator
  rev 4.5: Changed the 9/17 bit polynomial formulas such that the values required for the Tempest Pokey protection will be found. Tempest expects the upper 4 bits of the RNG to appear in the lower 4 bits after four cycles, so there has to be a shift of 1 per cycle (which was not the case before). Bits #6-#13 of the new RNG give this expected result now, bits #0-7 of the 9 bit poly. Reading the RNG returns the shift register contents ^ 0xff. That way resetting the Pokey with SKCTL (which resets the polynome shifters to 0) returns the expected 0xff value.
      4.4: Reversed sample values to make OFF channels produce a zero signal. Actually de-reversed them; don't remember that I reversed them.
      4.3: For POT inputs returning zero, immediately assert the ALLPOT bit after POTGO is written, otherwise start trigger timer depending on SK_PADDLE mode, either 1-228 scanlines or 1-2 scanlines, depending on the SK_PADDLE bit of SKCTL.
      4.2: Half volume for channels which are inaudible (this should be close to the real thing).
      4.1: Default gain increased to closely match the old code. Random numbers repeat rate depends on POLY9 flag too! Verified sound output with many, many Atari 800 games, including the SUPPRESS_INAUDIBLE optimizations.
      4.0: MAME - Rewritten from scratch. 16bit stream interface. Serout ready/complete delayed interrupts. Reworked pot analog/digital conversion timing. Optional non-indexing Pokey update functions.
      2.0: (31st Jan 1997 - Ron Fries) Support for multiple POKEY chips. The maximum supported is configured at compile time. An adjustable gain. The previous releases had a built-in gain of 64. A clipping option. Depending on the number of chips emulated and the configured gain, it is possible for the output to exceed 8-bits. Clipping can be enabled to prevent this, though it does increase the processing time.
- DRIVERS: akkaarrh.cpp, asteroid.cpp, atarisy1.cpp, atarisy2.cpp, atetris.cpp, bartop52.cpp, bwidow.cpp, bzone.cpp, ccastles.cpp, centiped.cpp, cloak.cpp, cloud9.cpp, firefox.cpp, foodf.cpp, gauntlet.cpp, irobot.cpp, jedi.cpp, liberatr.cpp, maxaflex.cpp, mhavoc.cpp, missile.cpp, quantum.cpp, runaway.cpp, starwars.cpp, tempest.cpp, tomcat.cpp, toobin.cpp, tunhunt.cpp and vindictr.cpp
- SOURCE: sound\pokey.cpp



S4.3   Atari "JSA" Audio Board

- 0.245              : Removed stray "private:" [hap].
- 0.204              : Removed M6502, OKIM6295 and YM2151 MCFG macros (audio\atarijsa.cpp) [Osso].
- 0.172              : SOUNDCPU rom loading cleanups in various Atari drivers [Osso].
- 0.149u1            : Convert Atari JSA sound boards to their own devices, and replumb them through the Atari games that used them (drivers\atarig1.c, atarig42.c, atarigx2.c, batman.c, beathead.c, blstroid.c, cyberbal.c, eprom.c, harddriv.c, offtwall.c, skullxbo.c, thunderj.c, toobin.c, vindictr.c and xybots.c). Move Atari drivers to using ioport callbacks for sound communication stuff. Added HBLANK to standard screen ports. Consolidate duplicate functions [Aaron Giles].
- 0.137u3            : Lord Nightmare further refining of the Atari JSA speech and audio modifications. Hooked up the reset line for the YM2151. Partly implemented 'stereo' gating (using YM2151 ctX lines) to POKEY and TMS5220 on Atari JSA-i sound board. Currently it is just 'mono' gating. Added TODOs for complete stereo gating and for the low-pass filter.
- 0.132u4            : Aaron Giles updated the atarijsa code to use a custom address space for its okim6295 accesses (which are banked on the first half and static on the second half), as an example of configuring a device with a custom address space. For now, attempts to use okim6295_set_bank_base() will still work, though banking for the okim chips should be moved to custom address maps in the drivers eventually. The first time okim6295_set_bank_base() is called, it will install a banked memory handler over the region and use memory_set_bankptr() to change the base on subsequent bank switches.
- 0.131u2            : Phil Bennett fixed incorrectly pitched audio samples in games using atarijsa.c.
- 0.114              : Couriersud added general save state support to the atarijsa and atarigen modules.
- 0.97u4             : David Haywood fixed Atari Audio Board II (sndhrdw\atarijsa.c) for games without OKI6295 sound.
- 0.95u3             : Sebastien Volpe cleaned up error.log messages in atarijsa.c, while displaying sound chip info.
- 0.89u5             : atarijsa memcpy fix [Mame32Plus].
- 27th April     2001: Aaron Giles fixed Atari JSA sound boards' CPU and sound chip frequency calculation.
- 0.36b1             : Changed sndhrdw\ataraud2.c/h to sndhrdw\atarijsa.c/h.
- 0.35b11            : Added sndhrdw\ataraud2.c/h.
- NOTES: Atari "JSA" audio boards (JSA I (stereo), JSA II (mono), JSA III (mono) and JSA IIIs (stereo))
- PCB: JSA Audio II PCB (Hydra), External sound board JSA III PCB with YM2151 and 6502A CPU (Roadriot)
- DRIVERS: atarig1.cpp, atarig42.cpp, atarigx2.cpp, batman.cpp, beathead.cpp, blstroid.cpp, cyberbal.cpp, eprom.cpp, harddriv.cpp, offtwall.cpp, skullxbo.cpp, thunderj.cpp, toobin.cpp, vindictr.cpp and xybots.cpp
- SOURCE: audio\atarijsa.cpp


S4.4   Jaguar

- 0.150              : Modernized Jaguar cpu core (audio\jaguar.c) [Wilbert Pol].
- 0.72u1             : Nathan Woods changed one of the #include paths in sndhrdw\jaguar.c (due to ProjectBuilder on Mac issues).
- GAMES: Atari CoJag hardware - Fishin' Frenzy (Warner 1995), Area 51 (Atari 1996), Maximum Force Duo v2.0 (Atari 1998)
- DRIVERS: jaguar.cpp
- SOURCE: audio\jaguar.cpp



S5.    Yamaha

S5.1   FM Sound Core

- 0.284              : Extend at_end FN by 1. Note: (MESS) pc98:metlfrce wants this to detect the speakboard, cfr. note in header card (3rdparty\ymfm\src\ymfm_adpcm.h) [Angelo Salese]. ADPCM updates from https://github.com/aaronsgiles/ymfm/pull/40 [Aaron Giles]. Fixed endianness and alignment issues when writing WAV files (ymfm\src\ymfm.h) [Vas Crabb].
- 0.277              : Removed YM2608/2610 SSG gain workaround (sound\ymfm_mame.h) [hap].
- 0.275              : Added 3rdparty\ymfm\src\ymfm_opx.h. Changed 3rdparty\ymfm\buildall.cpp to 3rdparty\ymfm\examples\buildall\buildall.cpp. Sync to latest (3rdparty\ymfm) [Angelo Salese]. Apparently there is no internal flag when latch was written. OPNA does not have 4 latches (3rdparty\ymfm\src\ymfm_opn.cpp). Actually emulate opl2 waveform enable bit. No need to check for IsOpl2Plus here (3rdparty\ymfm\src\ymfm_opl.h) [hap].
- 0.250              : Updated 3rdparty\ymfm to latest. Fixed uninitialized member causing slight jitter in timing (GitHub #10414: -wavwrite output seems to differ on each run), OPNA behavior when LFO is disabled and a PCM playback wraparound bug due to incorrect auto-incrementing [Aaron Giles].
- 0.246              : Updated YMFM library to latest version (https://github.com/aaronsgiles/ymfm). Fixed incorrect operator volumes in some cases for OPL. Fixed PCM playback to cut off previous notes when new waveforms are selected (see dragnblz). Fixed reversed OPM noise frequency. Fixed bug preventing CSM key ons from being noticed. Fixed bug where SSG EG envelope could be left in inverted state. Fixed SSG envelope handling when tone and noise are off. Increased strength of DAC discontinuity in YM2612. Improved latching logic for fnums in OPN. Increased envelope suppression threshold so some effects don't get prematurely muted. Improved ADPCM-B behavior at stop/limit addresses (more thorough rewrite here coming later) [Aaron Giles, hyano].
- 0.239              : Correct for free-running timer B multipler (ymfm\src\ymfm_fm.ipp) [Aaron Giles].
- 0.234              : Save busy end time (sound\ymfm_mame.h). Fixes music stucks in all games/systems using OPM/N FM. Removed dead code in MAME interface. Removed ay8910.h include from sound\ymfm_mame.h and added it to places that still need it. Sync with upstream (3rdparty\ymfm\*). Fixed LFO disable on YM2151. Fixed swapped lower nibbles for 12-bit PCM on OPL4. Return masked status from set/reset function (ymfm\src\ymfm_fm.h). Fixes missing voice samples in Fighting Soccer [Aaron Giles].
- 0.233              : Added 3rdparty\ymfm\src\ymfm_misc.cpp/h and ymfm\buildall.cpp. Some progress on OPZ (ymfm_opz.cpp). Fixed OPZ fine tuning and envelope shift (ymfm_fm.ipp). Now pretty much all the (MESS) TX81Z built-in instruments sound reasonable. Improved OPQ behavior for timers and register access (ymfm_opq.cpp). Don't mask off top bit of octave for OPQ (ymfm_opq.h). Match OPN LFO frequencies to hardware measurements (ymfm_opn.cpp). Improved OPQ detune, reverb and KSR (ymfm_opq.cpp). Fixed panning calculations in YMF278B OPL4 (ymfm_pcm.cpp). Make OPQ reverb less ridiculous (ymfm_opq.cpp). Fixed reporting of ADPCM-B end-of-sample (ymfm_opn.cpp). Seems to fix background music has missing parts in Metal Slug; hopefully will fixed other NeoGeo issues as well. Play ADPCM-A samples through the end of the end block inclusive (ymfm_adpcm.cpp) [Aaron Giles].
- 0.232              : Added sound\ymopl.cpp/h, sound\ymopm.cpp/h, sound\ymopn.cpp/h, sound\ymopq.cpp/h and sound\ymopz.cpp/h. Splitted sound\ymfm.cpp/h into sound\ymfm_mame.h and 3rdparty\ymfm\src\ymfm.h, ymfm_fm.h, ymfm_fm.ipp, ymfm_opl.cpp/h, ymfm_opm.cpp, ymfm_opm.h, ymfm_opn.cpp/h, ymfm_opq.cpp/h, ymfm_opz.cpp/h, ymfm_pcm.cpp/h and ymfm_ssg.cpp/h. Refactor new FM engine into a 3rdparty library: Moved ymfm core implementation to 3rdparty/ymfm. Split out each family (OPM/OPN/OPL/etc) into its own source file. Added preliminary OPQ and OPZ support, still WIP. Put all 3rdparty code into its own namespace ymfm. Fixed various bugs reported in https://github.com/mamedev/mame/issues/8042. Created interface class for communication between the 3rdparty engine and the emulator. Standardized MAME implementation of all Yamaha devices based on a template class. Created standard base class ym_generic that can be used when multiple YM chips are swapped in. Changed YM2203/2608/2610 to embed a YM2149 as a subdevice instead of deriving from ay8910_device. Also provided compile-time option to use a simplified built-in SSG rather than using MAME's at all (currently off). Consolidate MAME header files from one-per-chip (ym2151.h, ym2203.h, etc) to one-per-family (ymopm.h, ymopn.h, etc). Switch to internal SSG for YM2203/2608/2610. Clean up code to determine the number of SSG outputs. Fixed binding errors due to usage of class names that are no longer derived from related classes (2mindril.cpp, cpzodiac.cpp, fb01.cpp, slapshot.cpp, warriorb.cpp and zn.cpp). I/O callbacks are now consolidated into a single read callback and a single write callback, with an access type specifier. Fixed envelope rate computation. Renamed ymfm_interface::external_type to access_class and clean up the fallout. Re-evaluted envelope calculations and 2x works better than the weird 15/8 before. Also changed the way FM resampling is computed to be more precise (and simpler). Turned off extraneous debugging. Start of/reset to a null state with no loaded waveforms. Boost ADPCM-B volume by a factor of 2 to more closely match previous levels (ymfm_opn.cpp), fixes lower volume on parts of music in the NeoGeo games mslug, mslugx and garou. Fixed OPL3 waveform 7 to better match hardware (ymfm_opl.cpp) [Aaron Giles].
- 0.231              : Removed sound\fmopl.cpp/h. Made FM channel and operator mapping more flexible. Operators are now owned by the engine and can be dynamically assigned to channels. Register classes now provide a mapping between a linear set of operators and channels. The register data array is now a regular array instead of a vector. Don't pre-mask status bits with the status mask, apply instead at time of consumption (sound\ymfm.cpp). Fixes missing music in Kick Ball. Mark the system modified when the mode register is written as well (sound\ymfm.cpp). Fixes (MESS) Streets of Rage II punch sound on Megadrive. Check for decay->sustain transitions even if we just transitioned from attack->decay. Affects the cymbal sounds in Shinobi (sound\ymfm.cpp) [Aaron Giles].
- 0.230              : Changed sound\fm.cpp/h to sound\ymfm.cpp/h. New BSD-licensed implementation of Yamaha OPN and OPM FM audio chips, along with new device drivers for YM2203, YM2608, YM2610, YM2610B, YM2612, YM3438 and YM2151 based upon these. Schedule all interrupt changes via timers to ensure proper ordering. Fixes the seibu sound issue in a more generic fashion (sound\ymfm.cpp). Explicitly sync writes to the mode register to ensure timer control bits are handled in sync (sound\ymfm.cpp). Improved LFO noise behavior. Added logging (under verbose) when LFO noise sounds are played to help ID cases for further study. This will be removed prior to release (sound\ymfm.cpp). Backport active channel detection to help improve performance. Further performance improvements will come in the next cycle, but require more extensive changes (sound\ymfm.cpp). Turn off VERBOSE (sound\ymfm.cpp) [Aaron Giles].
- 0.225              : Minor cleanups [Aaron Giles].
- 0.193              : Turn a bit more of fmopl into something resembling C++ [Vas Crabb].
- 0.149u1            : Fixed Yamaha OPLx key scale level order [Alexey, Phil Bennett].
- 0.141u3            : Added specific support for the fact that setting frequency to 0 does not behave as if frequency was set to 0x400 on the Sega-manufactured PSG clone chips, whereas it does on the original TI-made ones. Fixes Sega Master System 'Vigilante' music [Lord Nightmare, Enik].
- 0.140u3            : Atari Ace removed static variables in FM sound cores.
- 0.126u5            : More FM OPN fixes [Eke, R. Belmont]: Pass chip type around and restore Jarek's original behavior for YM2203/YM2610. Always recalculate attack rate in set_ar_ksr, fixes Megadrive/Genesis "Batman & Robin".
- 0.126u4            : Backported a bunch of FM OPN (YM2608/2612) fixes from Genesis Plus GX. All of this was verified on real hardware [Eke-Eke, Nemesis, Alone Coder, AamirM]: Implemented PG overflow, aka "detune bug" (Ariel, Comix Zone, Shaq Fu, Spiderman...). Fixed SSG-EG support. Modified EG rates and frequency. Fixed EG attenuation level on KEY ON (Ecco 2 splash sound). Fixed LFO phase update for CH3 special mode (Warlock, Alladin).
- 0.116u3            : Zsolt Vasvari updated FM emulator to use mame_time instead of double. Removed old NeoGeo hack from FM code as it appears to no longer be necessary.
- 0.99u8             : Fixed pointer of FM channels and FM basic status.
- 0.99u7             : Aaron Giles removed gross cur_chip hack from the OPN emulator.
- 0.76u2             : Fixes to the ymdeltat module. Generally - even more flags work correctly now. These changes are necessary for the MSX sound emulation (Y8950) and were tested in nlmsx emulator by Frits Hilderink [Jarek Burczynski].
-  3rd August    2003: Jarek Burczynski fixed YM2608 initial values (after the reset), fixed flag and irqmask handling (YM2608) and fixed BUFRDY flag handling (YM2608).
- 0.70u5             : Nathan Woods added #if/#endif pair to sound\fmopl.c.
- 16th June      2003: Jarek Burczynski improved various things in the FM core, including support of the ymdeltat module, x1bit/x8bit DRAM usage for ADPCM samples, memory read/write via deltat and ADPCM synthesis in slave mode.
- 14th June      2003: Jarek Burczynski implemented all of the YM2608 status register flags, implemented support for external memory read/write via YM2608 and implemented support for deltat memory limit register in YM2608 emulation.
- 22nd May       2003: Jarek Burczynski fixed LFO PM calculations (copy&paste bugfix).
-  8th May       2003: Jarek Burczynski fixed SSG support.
- 22nd April     2003: Jarek Burczynski implemented 100% correct LFO generator (verified on real YM2610 and YM2608).
- 15th April     2003: Jarek Burczynski added support for YM2608's register 0x110 - status mask.
- 12th December  2002: smf fixed a minor logging problem in the FM core.
-  1st December  2002: Jarek Burczynski fixed register addressing in YM2608, YM2610, YM2610B chips. (verified on real YM2608). The addressing patch used for early Neo-Geo games can be removed now.
- 26th November  2002: Jarek Burczynski and Nicola Salmoria recreated YM2608 ADPCM ROM using data from real YM2608's output. Added emulation of YM2608 drums. Output of YM2608 is two times lower now - same as YM2610 (verified on real YM2608).
- 16th August    2002: Jarek Burczynski binary exact Envelope Generator (verified on real YM2203); identical to YM2151, correct 'off by one' error in feedback calculations (when feedback is off), correct connection (algorithm) calculation (verified on real YM2203 and YM2610).
-  8th February  2002: Aaron Giles fixed the bug in FM timers which affected Final Fight and lots of other games.
- 18th December  2001: Jarek Burczynski added SSG-EG support (verified on real YM2203).
- 14th August    2001: Jarek Burczynski greatly improved the accuracy of the various FM sound chip emulators.
- 12th August    2001: Jarek Burczynski correct sin_tab and tl_tab data (verified on real chip), feedback calculations (verified on real chip), phase generator calculations (verified on real chip), envelope generator calculations (verified on real chip) and FM volume level (YM2610 and YM2610B). Changed YMxxxUpdateOne() functions (YM2203, YM2608, YM2610, YM2610B, YM2612), this was needed to calculate YM2610 FM channels output correctly. (Each FM channel is calculated as in other chips, but the output of the channel gets shifted right by one *before* sending to accumulator. That was impossible to do with previous implementation).
- 23rd July      2001: Jarek Burczynski and Nicola Salmoria correct YM2610 ADPCM type A algorithm and tables (verified on real chip).
- 11th June      2001: Jarek Burczynski correct end of sample bug in ADPCMA_calc_cha(). Real YM2610 checks for equality between current and end addresses (only 20 LSB bits).
- 28th May       2001: Tatsuyuki Satoh fixed the bad sound frequency in games which use the Yamaha sound chips.
- 31st May       2001: Tatsuyuki Satoh added state saving support to the FM sound core.
- 24th May       2001: Jarek Burczynski re-submitted an update to the FM sound core.
- 0.36b13            : Removed sound\fmext.c.
- 0.36b7             : Several improvements to FM sound emulators. This also fixes crashes in some Jaleco Mega System 1 games [Tatsuyuki Satoh].
-  4th October   1999: Tatsuyuki Satoh sent in an update to his FM core with still incomplete LFO support (intro of Rock 'n Rage needs this) and some other bugfixes.
- 0.36b1             : Added sound\fmopl.c/h.
- 12th April     1999: Tatsuyuki Satoh has updated the FM engine, adding preliminary support for YM-2608.
- 23rd February  1999: Tatsuyuki Satoh has updated the FM sound engine, mainly speeding up YM-2610 and fixing things.
-  9th December  1998: Hiro-shi changed ADPCM volume (8->16, 48->64), replaced ym2610 ch0/3 (YM-2610B), init cur_chip (restart bug fix), changed ADPCM_SHIFT (10->8) missing bank change 0x4000-0xffff, added ADPCM_SHIFT_MASK and changed ADPCMA_DECODE_MIN/MAX.
-  8th December  1998: Hiro-shi renamed ADPCMA -> ADPCMB, ADPCMB -> ADPCMA, moved ROM limit check.(CALC_CH? -> 2610Write1/2), tested program (ADPCMB_TEST), moved ADPCM A/B end check, ADPCMB repeat flag(no check), changed ADPCM volume rate (8->16) (32->48).
- 0.34b6             : [DOS] Nicola replaced the -fm option with -ym2203opl. Added -noym3812opl to use the digital emulation of the YM3812 instead of the SoundBlaster OPL chip. Note that with -noym3812opl you also need external drum samples. FULL sound support in the NeoGeo games, FM synth and ADPCM samples, on 90% of games using the YM2610 emulator.
- 0.34b2             : Added sndhrdw\fmext.c. Tatsuyuki Satoh updated the FM emulation and the way the 8910 updates its buffers. FM also has support for YM2608 and YM2612, though they are not compiled in.
- 0.30               : Added sndhrdw\fm.c/h. YM2203 emulation not using the SoundBlaster OPL3 chip. This is more accurate than the previous one, which used the SoundBlaster OPL chip, however it is also slower. You can still revert to the old behaviour using the -fm command line option [Tatsuyuki Satoh]. Nicola Salmoria added partial emulated sound in Bubble Bobble (only the YM2203 chip, therefore only some sound effects - no music).
- 0.23               : "And there was MUSIC!" [Mirko Buffoni]. Thanks to Ishmair's YM-2203 FM engine, music is supported in Commando, Ghosts 'n Goblins, Diamonds. Since the synthesis is based on FM generation via OPL, you must have a SoundBlaster, Adlib, or compatible to get the music. However I heavily dislike this approach and I'm looking for documentation on FM generation. If anyone want to join to the party forward me a mail!
- 0.22               : Nicola added COMMANDO. Original Sound is done by YM2203 (FM synthesis) while now is done by 8910 (no FM). So music is not present.
- SOURCE: sound\ymopl.cpp/h and sound\ymopn.cpp/h



S5.11  Yamaha DELTA-T ADPCM

- 0.231              : Removed sound\ymdeltat.cpp/h.
- 0.186              : Tidy up some code (sound\ymdeltat.cpp) [Vas Crabb].
- 0.76u2             : Fixes to the ymdeltat module. Generally even more flags work correctly now. These changes are necessary for the msx sound emulation (Y8950) and were tested in nlmsx emulator by Frits Hilderink [Jarek Burczynski].
-  3rd August    2003: Jarek Burczynski - Fixed BRDY flag implementation.
- 24th July      2003: Jarek Burczynski, Frits Hilderink - Fixed delault value for control2 in YM_DELTAT_ADPCM_Reset.
- 22nd July      2003: Jarek Burczynski, Frits Hilderink - Fixed external memory support.
- 15th June      2003: Jarek Burczynski - Implemented CPU -> AUDIO ADPCM synthesis (via writes to the ADPCM data reg $08). Implemented support for the Limit address register. Supported two bits from the control register 2 ($01): RAM TYPE (x1 bit/x8 bit), ROM/RAM. Implemented external memory access (read/write) via the ADPCM data reg reads/writes. Thanks go to Frits Hilderink for the example code.
- 14th June      2003: Jarek Burczynski - Various fixes to enable proper support for status register flags: BSRDY, PCM BSY, ZERO. Modified EOS handling.
-  5th April     2003: Jarek Burczynski - Implemented partial support for external/processor memory on sample replay.
-  1st December  2002: Jarek Burczynski - Fixed first missing sound in gigandes thanks to previous fix (interpolator) by ElSemi. Renamed/removed some YM_DELTAT struct fields.
- 28th December  2001: Acho A. Tang - Added EOS status report on ADPCM playback.
-  5th August    2001: Jarek Burczynski- now_step is initialized with 0 at the start of play.
- 12th June      2001: Jarek Burczynski - Correct end of sample bug in YM_DELTAT_ADPCM_CALC. Checked on real YM2610 chip - address register is 24 bits wide. Thanks go to Stefan Jokisch (stefan.jokisch@gmx.de) for tracking down the problem.
- 0.36b11            : Added sound\ymdeltat.c/h.
- NOTES: YAMAHA DELTA-T ADPCM sound emulation is used by fmopl.c (Y8950) and fm.c (YM2608 and YM2610/B). Base program is YM2610 emulator by Hiromitsu Shioya.
- SOURCE: ???



S5.2   YM2148

- 0.208              : Simplified read/write handlers [AJR].
- 0.206              : Flag framing errors. Added error reset command. Misc small changes [AJR].
- 0.166              : Moved emu\machine\ym2148.c/h to devices\machine\ym2148.c/h.
- 0.154              : Added emu\machine\ym2148.c/h. Added MIDI in support to Yamaha SFG01/SFG05 expansions [Wilbert Pol].
- DRIVERS: (MESS) Yamaha SFG05
- SOURCE: machine\ym2148.cpp



S5.21  YM2149

- 0.233              : Added 3rdparty\ymfm\src\ymfm_misc.cpp/h. Note: YM2149 is just an SSG with no FM part, but we expose FM-like parts so that it integrates smoothly with everything else; they just don't do anything [Aaron Giles].
- 0.187              : Changed description to 'YM2149 SSG'.
- 0.136u1            : Changed berlwall, arkanoid, bakubrkr and mgcrystl to use YM2149 [Corrado Tomaselli].
- 0.124u5            : Couriersud fixed AY-3-8910/YM2149 and derivatives envelope handling.
- NOTES: The Yamaha YM-2149 is a noise and square wave generator and is compatible (?) to the AY-3-8910. MAME uses the compatible AY-8910. The YM2149 has twice as many envelope steps (slightly higher quality), but MAME emulates the AY-8910 with the 2149's added quality so there's no difference.
- PCB: KC89C72 YM2149F (Ampoker2, Monglfir, Pool10, Soccernw), AM2149F (Tehkanwc), Yamaha YM2149F Qty 2 (Slapfigh), WB 5300 (American Poker), WB5300 (Cherry Master), Winbond WF19054 (Bmcbowl, Cherry Master II, Paranoia)
- DRIVERS: 40love.cpp, adp.cpp, arkanoid.cpp, artmagic.cpp, big10.cpp, bigevglf.cpp, bigevglf.cpp, bogeyman.cpp, buggychl.cpp, calorie.cpp, cchance.cpp, ddenlovr.cpp, dominob.cpp, fcombat.cpp, flstory.cpp, fromance.cpp, ginganin.cpp, goldngam.cpp, goldstar.cpp, halleys.cpp, hitpoker.cpp, hotblock.cpp, ichiban.cpp, kaneko16.cpp, kurukuru.cpp, lsasquad.cpp, maygay1b.hxx, ojankohs.cpp, shangha3.cpp, ssozumo.cpp, tehkanwc.cpp, thedealr.cpp, tickee.cpp, tonton.cpp, tx1.cpp, vroulet.cpp and wyvernf0.cpp
- SOURCE: sound\ay8910.cpp


S5.22  YM2151

- 0.232              : Merged sound\ym2151.cpp/h with sound\ymopm.cpp/h.
- 0.230              : Changed description to 'YM2151 OPM'. New BSD-licensed implementation of Yamaha OPN and OPM FM audio chips, along with new device drivers for YM2151 [Aaron Giles].
- 0.223              : Fixed noise behavior (sound\ym2151.cpp) [cam900].
- 0.221              : Modernized struct saving [AJR].
- 0.217              : Initialized one variable more [Osso].
- 0.214              : Fixed reset behavior [cam900].
- 0.189              : Emulate reset line [AJR].
- 0.188              : Support dynamic changes to clock frequency [AJR].
- 0.186              : Changed description to 'Yamaha YM2151 OPM'.
- 0.176              : Merged sound\2151intf.cpp/h with sound\ym2151.cpp/h. Isolate YM2151 interface, objectify and integrate [O. Galibert].
- 0.147u2            : Rewrote the YM2151 interface to be fully modernized, and removed the ym2151_interface struct in favor of inline configs using the new DEVCB2 mechanism. In many cases, removed no longer needed trampolines, instead taking advantage of direct support for input line writes [Aaron Giles].
- 0.145u7            : Added device_t::subbank("tag") to return a bank that is owned by the given device. Switched YM2151 interfaces over to DEVCB callbacks. Created proper sound devices for the Williams NARC, CVSD and ADPCM sound boards. Updated midyunit, midtunit, williams(joust2), and mcr68(archrivl/pigskin/trisport) to use the new devices [Aaron Giles].
- 0.129u5            : Phil Bennett fixed distorted YM2151 sound.
- 0.126u4            : Jarek Burczynski forced synchronization (stream_update()) before the YM2151 status is actually read.
- 0.112u4            : Changed the YM2151 to prevent timer problems [Nicola Salmora, Lord Nightmare, Ernesto Corvi].
- 0.94u4             : Fix crash games using FM sound chips when you load state [BUT] (sound\2151intf.c, 2203intf.c, 2608intf.c, 2610intf.c and 2612intf.c).
- 0.93               : Aaron Giles removed the YM2151 alternate version and kept only Jarek's around. Having two cores was confusing and caused problems.
- 0.89u1             : Temporarily disabled YM2151 save states until someone find out why its crashing in debug/symbol/map builds.
- 30th April     2002: Jarek Burczynski sent in significant improvements to both the YM3812 and YM2151 cores.
- 18th July      2002: Jarek Burczynski updated the YM2151 sound core, fixing a bug that caused corrupt sound when hitting the robot at the end of the first level in TMNT.
- 12th May       2002: Jarek Burczynski fixed a few inaccuracies in the YM2151 sound chip emulator.
- 20th February  2002: Jarek Burczynski sent in an improvement to the YM2151 sound emulation's LFO noise generator which makes the YM2151 emulation almost exactly sample-accurate to the original.
- 13th February  2002: Jarek Burczynski added oversampling to the YM2151 interface.
- 0.55               : Changed description to 'YM2151'. Fixed YM2151 sound in asterix, gijoe and xmen.
- 29th August    2001: Jarek Burczysnki improved the YM2151 LFO emulation.
- 0.54               : Fixes to the YM2610 and YM2151 emulation, verified on the real chip [Jarek Burczynski].
- 20th August    2001: Jarek Burczynski further improved the accuracy of the YM2151 LFO emulation.
- 0.37b14            : Added sound\ym2151.txt.
-  3rd April     2001: Jarek Burczynski added state saving support to the YM2151 sound core.
- 28th December  2000: Yochizo fixed YM2151 frequency in the Toaplan2 driver.
-  9th October   2000: Yochizo re-applied the Toaplan2 driver updates, and fixed the YM2151 interface to be 16-bit.
- 15th July      2000: Juergen Buchmueller fixed a YM2151 bug affecting Shisen / Sichuan II.
- 20th June      2000: Bryan McPhail fixed some YM2151/OKIM6295 sound balance problems in several drivers.
- 20th May       2000: Jarek Burczynski fixed some YM2151 bugs.
- 0.36RC1            : Changed description to 'YM-2151'. Improvements to the YM2151 emulator [Jarek Burczynski]. Only one of the two YM2151 emulators is linked, this is determined at compile time. The default is Jarek's, which is more accurate though a little slower. It can be replaced with Tatsuyuki's changing the makefile.
- 0.36b12            : Tatsuyuki Satoh fixed OPN and OPM output level. Unfortunately this means that all games using YM2203, YM2151 etc. need to be rebalanced.
-  6th December  1999: Jarek Burczynski rebalanced the YM2151 core.
- 14th November  1999: Tatsuyuki Satoh fixed LFO in YM-2151.
-  5th November  1999: Jarek Burczynski fixed a small bug in YM2151.
- 24th October   1999: Bryan McPhail added an original Tumblepop romset (with correct YM2151 sounds) to the driver.
- 0.36b7             : Aaron Giles fixed YM2151 sound board support for Joust 2. Improvements to the YM2151 emulator [Jarek Burczynski].
- 0.35b12            : Major improvements to Atari sound (e.g. speech in Toobin') [Aaron Giles].
- 12th February  1999: Nicola added YM2151 support for Street Fighter 1, but samples are still missing.
- 0.34b8             : Support for stereo output. This is implelemented in the YM2610 and in Tatsuyuki's YM2151. It can be used by other games, for example the Atari System 2 games (Paper Boy etc.) have two Pokeys, one per channel [Nicola Salmoria]. DOS: Stereo sound support. It is a little slower than mono, to turn it off use -nostereo. Stereo is enabled only for YM2610 and YM2151 games. The others always use mono.
- 0.31               : Added sndhrdw\ym2151.c/h. New YM2151 emulator, used by Rastan and others [Jarek Burczynski]. Tatsuyuki Satoh improved YM2203 and YM2151 emulator, and DAC interface, with 16 bit samples support (Use -sb 16 to turn on 16 bit samples).
- 0.30               : Added sndhrdw\2151intf.c/h. YM2151 emulation [Tatsuyuki Satoh].
- NOTES: The YM2151 has a CMS speech mode with internal timer.
- PCB: BS901, DIP24 (RShark, Grdnstrm, Rapidfire), K-666 (Rbmk, Wbbc97), CA5101 (Finalttr), CA101 (Metlsavr), KA51 c9235 (28 pin IC - in 24 pin socket (2 legs outside socket on each side !!!)) (Hyperpac, 3in1, Suplup), 3569 9142s 827620r (Drgnbowl)
- DRIVERS: 88games.cpp, airraid.cpp, ajax.cpp, aliens.cpp, amspdwy.cpp, aquarium.cpp, asterix.cpp, asuka.cpp, atarig1.cpp, atarig42.cpp, atarigx2.cpp, atarisy1.cpp, atarisy2.cpp, badlands.cpp, batman.cpp, beathead.cpp, bingoc.cpp, bionicc.cpp, blockhl.cpp, blockout.cpp... xybots.cpp
- SOURCE: sound\ymopm.cpp




S5.23  YM2154

- 0.233              : Added 'YM2154 (RYP4)' device. Document/flesh in the YM2154 rompler and the DRVIF chip. Rhythms now tick away and trigger samples, though we will have to wait for a ROM dump to hear them. Figured out more YM2154 including start/end and more realistic timer computations. Splitted YM2154 into a separate device. Created fake YM2154 ROMs as placeholders. Connected YM2154 and (MESS) BBD devices (sound\bbd.cpp). Decode real YM2154 sample data, which is ulaw-ish [Aaron Giles].
- DRIVERS: (MESS) ympsr60.cpp
- SOURCE: sound\ym2154.cpp



S5.24  YM2164
- 0.230              : Changed description to 'YM2164 OPP'.
- 0.220              : Added YM2164 variant and emulate some known differences [AJR].
- DRIVERS: (MESS) MSX
- SOURCE: sound\ymopm.cpp



S5.25  YM2203

- 0.232              : Merged sound\ym2203.cpp/h with sound\ymopn.cpp/h.
- 0.230              : Changed sound\2203intf.cpp/h to sound\ym2203.cpp/h. New BSD-licensed implementation of Yamaha OPN and OPM FM audio chips, along with new device drivers for YM2203 [Aaron Giles].
- 0.225              : Update YM2203 sound to new stream callbacks [Aaron Giles].
- 0.206              : Removed MCFG macro (sound\2203intf.h) [Ryan Holtz].
- 0.195              : Handle interrupt output as instant timer to prevent synchronization glitches (sound\2203intf.cpp) [AJR].
- 0.186              : Changed description to 'YM2203 OPN'. Fixed crash on fatal errors (sound\2203intf.cpp) [Dirk Best].
- 0.148u5            : Modernised YM2203. Clears variables to avoid random crashing. Removed unnecessary #includes [smf].
- 0.146u5            : Changed YM2203 IRQ callback to a DEVCB-style callback [Aaron Giles].
- 0.126u5            : More FM OPN fixes [Eke, R. Belmont]: Pass chip type around and restore Jarek's original behavior for YM2203/YM2610. Always recalculate attack rate in set_ar_ksr, fixes Megadrive/Genesis "Batman & Robin".
- 0.112u4            : Aaron Giles fixed crash when changing sample rates (YM2203 mainly).
- 0.94u4             : BUT fix crash games using FM sound chips when you load state (sound\2151intf.c, 2203intf.c, 2608intf.c, 2610intf.c and 2612intf.c).
- 0.93               : The YM2203/2608/2610 chips now pass a set of functions into the FM core with pointers to all the AY8910-compatibility routines, rather than relying on global pointers [Aaron Giles].
-  8th May       2003: Jarek Burczynski fixed a bug in the YM2203 core that caused a stuck tone in Desert Assault.
- 12th December  2002: Jarek Burczynski sent in an update to the FM sound chip emulators with support for YM2608 drums, perfect envelope generator in YM2203, YM2610, YM2608 and YM2612 and other small fixes.
- 16th August    2002: Jarek Burczynski - Binary exact Envelope Generator (verified on real YM2203); it is identical to YM2151. Correct 'off by one' error in feedback calculations (when feedback is off). Correct connection (algorithm) calculation (verified on real YM2203 and YM2610).
- 0.57               : Jarek Burczynski did SSG EG type support added to YM2203 emulation (which is now complete). This fixes hbarrel wave sound on start of level 1, and some sound effects in other games (e.g. Dark Seal).
- 21st December  2001: Jarek Burczynski added SSG EG type support to the YM2203 emulation, which fixes sounds in Heavy Barrel and Dark Seal.
- 30th November  2001: Aaron Giles improved the handling of AY8910 and YM2203 simultaneously.
- 0.55               : Changed description to 'YM2203'. Tatsuyuki Satoh added support for using AY8910 and YM2203 at the same time, fixing sound in City Connection.
- 28th May       2001: Tatsuyuki Satoh fixed the bad sound frequency in games which use the Yamaha sound chips.
- 26th February  2001: Tatsuyuki Satoh sent in an update to the YM-2203 emulator, correcting a few parameters.
- 13th December  2000: Jarek Burczynski fixed YM2203 frequency calculation and added sound to Drive Out.
- 0.36b15            : Source: Added gain support to mixer.c, through the new MIXERG() macro (extension of MIXER()). Removed the gain filed from AY8910, YM2203, YM2610 structures.
- 0.36b12            : Tatsuyuki Satoh fixed OPN and OPM output level. Unfortunately this means that all games using YM2203, YM2151 etc. need to be rebalanced.
- 17th June      1999: Brad Oliver fixed YM2203 core to be multi-session friendly.
- 0.35b11            : Added sound\2203intf.h. Removed sound\psgintf.h.
- 0.35b9             : Removed sndhrdw\2203intf.h.
- 0.35b6             : Removed sndhrdw\psgintf.c.
- 0.35b5             : Added sndhrdw\2203intf.c.
- 0.35b2             : Removed src\msdos\ym2203.h. Bryan McPhail fixed the YM2203 in Ghost Busters.
- 0.35b1             : Partial sound in The Real Ghostbusters. The YM2203 doesn't seem to work correctly [Nicola Salmoria].
- 0.34b6             : [DOS] Nicola replaced the -fm option with -ym2203opl. Added -noym3812opl to use the digital emulation of the YM3812 instead of the SoundBlaster OPL chip. Note that with -noym3812opl you also need external drum samples.
- 0.31               : Tatsuyuki Satoh improved YM2203 and YM2151 emulator, and DAC interface, with 16 bit samples support.
- 0.30               : Added sndhrdw\2203intf.h and psgintf.c/h. Tatsuyuki Satoh added YM2203 emulation not using the SoundBlaster OPL3 chip. This is more accurate than the previous one, which used the SoundBlaster OPL chip, however it is also slower. You can still revert to the old behavior using the -fm command line option. Nicola added partial emulated sound in Bubble Bobble (only the YM2203 chip, therefore only some sound effects - no music).
- 0.25               : Moved sndhrdw\ym2203.h to msdos\.
- 0.23               : Added sndhrdw\ym2203.h. "And there was MUSIC!". Thanks to Ishmair's YM-2203 FM engine, music is supported in Commando, Ghosts 'n Goblins, Diamonds. Since the synthesis is based on FM generation via OPL, you must have a SoundBlaster, Adlib, or compatible to get the music.
- 0.22               : Nicola added COMMANDO. Original Sound is done by YM2203 (FM synthesis) while now is done by 8910 (no FM). So music is not present.
- NOTES: Yamaha FM Synthesis Sound Processor. Emulator JFF emulates the YM2203 chip via OPL3 chip (most Sound Blasters and clones are equipped with it. OPL3 can't really emulate the YM2203 chip, but by some fiddling one can get reasonable sound out of it.)
- PCB: YM2203, YM 2203, YM2203C DIP40 (Xsleena), YM2203CX (Bublbobl), TM2203 (Empcity, Shootout)
- DRIVERS: 1943.cpp, actfancr.cpp, airbustr.cpp, alpha68k.cpp, argus.cpp, ashnojoe.cpp, battlera.cpp, bladestl.cpp, blktiger.cpp, brkthru.cpp, bublbobl.cpp, capbowl.cpp, capr1.cpp, cave.cpp, cbuster.cpp, chanbara.cpp, chinsan.cpp, citycon.cpp, cninja.cpp, combatsc.cpp, commando.cpp, cyclemb.cpp, darius.cpp, darkseal.cpp, dassault.cpp, ddealer.cpp, ddribble.cpp, deadang.cpp, dec0.cpp... xxmissio.cpp
- SOURCE: sound\ymopn.cpp



S5.26  YM2413

- 0.232              : Merged sound\ym2413.cpp/h with sound\ymopl.cpp/h.
- 0.231              : New BSD-licensed YM2413 OPL/OPLL core. Added YM2413 support based on YMFM. Instrument data is now loaded via external ROMs. Added 'depress' envelope support to the core engine. Fixed a number of issues in the ymopll_engine. Documented hard-coded values. Moved register clear into register-specific reset. Reshuffled read/write handlers. Rename them to less confusing names [Aaron Giles].
- 0.225              : Update YM2413 sound to new stream callbacks [Aaron Giles].
- 0.217              : Initialized stuff in the constructor [Osso].
- 0.208              : Implemented instrument table for VRC7 (Konami VRC-7 cartridge). Added notes [cam900]. Added the debug-dumped set of VRC7 drum patches, to go along with the dumped VRC7 instrument patches [nukeykt]. Replaced the inaccurate YM2413(OPLL) drum patches with the ones dumped from the VRC7, and noted that these still need to be verified from hardware [Lord Nightmare].
- 0.186              : Changed description to 'Yamaha YM2413 OPLL'.
- 0.176              : Removed sound\2413intf.cpp/h. Isolate YM2413 interface, objectify and integrate (sound\2413intf.h -> sound\ym2413.h) [O. Galibert].
- 0.154              : (MESS) Internal YM2413s don't need the unlock sequence (bus\msx_slot\music.c) [Wilbert Pol].
- 0.150              : Reverted KSL value order to 0, 1.5, 3.0, 6.0dB/oct after testing with a real YM2413 [Wouter Vermaelen].
- 0.149u1            : Fixed OPLx key scale level order [Alexey, Phil Bennett].
- 0.148u5            : Modernised YM2413 [smf].
- 0.146u1            : Impossible compare fix [Darq].
- 0.122u4            : Atari updates [Aaron Giles]: Added save state support to YM2413.
- 0.94u5             : Angelo Salese added two new functions to the YM2413 sound chip: YM2413_register_port_0_msb_w() and YM2413_data_port_0_msb_w(), they are used by pkgnsh.
-  3rd March     2003: Jarek Burczynski sent in an update to the YM3812 sound core, fixing the same copy & paste bug that haunted the YM2413 core and another problem that occurred if the Y8950 support wasn't compiled in.
- 27th February  2003: Jarek Burczynski fixed a small copy & paste bug in the YM2413 sound core.
- 0.63               : All new, much better, YM2413 emulation [Jarek Burczynski].
- 18th November  2002: Jarek Burczynski sent in a massively improved YM2413 sound chip emulation.
- 0.61               : New YM-2413 emulator [Fabio R. Schmidlin, Charles Mac Donald].
- 13th June      2002: Sean Young submitted Fabio R. Schmidlin's improved YM2413 sound chip emulator.
- 0.37b12            : Added sound\ym2413.h and 2413intf.c. Standalone YM2413 emulator, giving much better sound in e.g. Pang [Mitsutaka Okazaki, Sean Young].
-  1st February  2001: Sean Young integrated Mitsutaka Okazaki's YM2413 emulator (http://www.angel.ne.jp/~okazaki/ym2413/) into MAME, and all the games utilizing it sound much better now.
- 16th July      2000: Brad Oliver adapted Charles MacDonald's YM2413 emulation into MAME, though its accuracy is not yet known, so it might or might not replace the current emulation.
- 0.37b4             : Improved YM2413 emulation [Paul Leaman].
-  7th June      2000: Paul Leaman sent in a YM2413 update with proper frequency calculations.
- 19th May       1999: Paul Leaman did a bit of cleanup on the YM-2413 code.
- 0.34b5             : Added sndhrdw\ym2413.c and 2413intf.h. A beginning for a YM2413 emulator [Paul Leaman, Ernesto Corvi]. It pushes data through the YM3812.
- GAMES: Pang (Mitchell 1989), Buster Bros (Capcom 1989), Rampart (Atari 1990)
- PCB: YM2413  DIL18 (Ddenlovr), YM2413 DAC (Btlfield, Timesold), KB89C67 (Koftball), UM3567 9323-AM (Cabaret), UM3567 compatible with YM2413 (Grndtour), U3567 (Iqblock), 6868A DIP18 (Mjchuuka)
- SOURCE: sound\ymopl.cpp



S5.27  YM2414

- 0.230              : Changed description to 'YM2414 OPZ'.
- 0.221              : Added YM2414 as alias (no attempt at emulating distinctive features at the moment) [AJR].
- DRIVERS: (MESS) korgz3.cpp
- SOURCE: sound\ymopz.cpp



S5.28  YM2423

- 0.231              : Added YM2423 variant [Aaron Giles].
- NOTES: YM2423 OPLL-X
- SOURCE: sound\ymopl.cpp



S5.29  YM2608

- 0.246              : Updated YMFM library to latest version. Improved ADPCM-B behavior at stop/limit addresses (more thorough rewrite here coming later) [Aaron Giles, hyano].
- 0.233              : Play ADPCM-A samples through the end of the end block inclusive (ymfm_adpcm.cpp) [Aaron Giles].
- 0.232              : Merged sound\ym2608.cpp/h with sound\ymopn.cpp/h. Changed sound\ymadpcm.cpp/h to 3rdparty\ymfm\src\ymfm_adpcm.cpp. Fixed YM2608 I/O ports. Added missing clamp in YM2608 [Aaron Giles].
- 0.231              : Clear the EOS flag when execute is turned off on ADPCM-B. Fixed combine_status in YM2608 to ignore previously set flags. Removed FM output boost in YM2608. Better matches previous volume now. Initialized ADPCM-A pans and instrument volume (sound\ymadpcm.cpp). Fixed coverity issue, documented differences between YM2608/10 and Y8950 DAC formats (sound\ymadpcm.cpp). Fixed missing samples in 'Twinkle Star Sprites' by masking the ADPCM-A end address properly (sound\ymadpcm.cpp) [Aaron Giles].
- 0.230              : Added sound\ymadpcm.cpp/h. Changed sound\2608intf.cpp/h to sound\ym2608.cpp/h. New BSD-licensed implementation of Yamaha OPN and OPM FM audio chips, along with new device drivers for YM2608. Removed FM output boost. Matches previous core's volume better [Aaron Giles].
- 0.225              : Update YM2608 sound to new stream callbacks [Aaron Giles].
- 0.209              : Fixed 12-bit wrapping behavior in YM2608/2610 ADPCM_A decoding, fixes some glitches in certain samples in the metal slug series and likely other games [Lord Nightmare, madbr].
- 0.206              : Removed MCFG macros (sound\2608intf.h) [Ryan Holtz].
- 0.201              : Added DEVCB3 accessors (sound\2608intf.h) [Ryan Holtz].
- 0.186              : Changed description to 'YM2608 OPNA'.
- 0.170              : Null pointer bad (YM2608 YM_DELTAT_ADPCM_Reset; sound\fm.cpp) [Carl].
- 0.151              : Removed 8 kilobytes of internal ROM sample data from MAME's YM2608 emulation, it's been there for ~11 years. After getting legal advice over some recent happenings this was highlighted as a clear infringement of Yamaha's copyright within the MAME code, and in need of urgent addressing, distributing any builds / source trees with this present is inadvisable [David Haywood]. Un-marked the 2608 rom as bad, since AFAIK Jarek did test this dump as an external rom and it completely matched the internal rom when played back, digitally compared at the DAC input. Also re-added comments from the original fm.c version. It would be best if we can find a 2608 to decap eventually, though [Lord Nightmare].
- 0.148u5            : Modernized the YM2608 (sound\2608intf.c/h, drivers\bbusters.c, itech8.c, pipedrm.c, tail2nos.c and wc90.c). Removed fm.h and few changes for consistency (sound\2608intf.c/h). Clears variables to avoid random crashing. Removed unnecessary #includes [smf].
- 0.128u2            : YM2608/2612 update [Eke-Eke, Nemesis]: Applied latest fixes/discoveries.
- 0.126u4            : Backported a bunch of FM OPN (YM2608/2612) fixes from Genesis Plus GX. All of this was verified on real hardware [Eke-Eke, Nemesis, Alone Coder, AamirM]: Implemented PG overflow, aka "detune bug" (Ariel, Comix Zone, Shaq Fu, Spiderman...). Fixed SSG-EG support. Modified EG rates and frequency. Fixed EG attenuation level on KEY ON (Ecco 2 splash sound). Fixed LFO phase update for CH3 special mode (Warlock, Alladin).
- 0.94u4             : BUT fix crash games using FM sound chips when you load state (sound\2151intf.c, 2203intf.c, 2608intf.c, 2610intf.c and 2612intf.c).
- 0.93               : The YM2203/2608/2610 chips now pass a set of functions into the FM core with pointers to all the AY8910-compatibility routines, rather than relying on global pointers [Aaron Giles].
- 0.70u2             : Jarek Burczynski makes various sound improvements to YM2610, YM2608 and Y8950, inspired by Frits Hilderink (NLMSX emulator author). Inspired by Frits Hilderink (NLMSX emulator author) Jarek attempted to improve support of the ymdeltat module for the status registers (YM2610,YM2608,Y8950), implement x1bit/x8bit DRAM usage for the ADPCM samples, implement memory read/write via deltat (Y8950 and YM2608) and ADPCM synthesis in 'slave' mode (CPU controlled, instead of memory based). Made some tests but the changes are quite big so please test them before including. I'm sure the Y8950 will be tested by NLMSX authors too.
- 29th April     2003: Jarek Burczynski sent in a fix to the DELTA-T decoding in the YM2608 sound core, fixing the bad sounds in Mechanized Attack, and he fixed the LFO emulation in all of the FM chips.
- 0.63               : Jarek Burczynski added drum support in YM2608 emulation (check e.g. Tail 2 Nose).
- 12th December  2002: Jarek Burczynski sent in an update to the FM sound chip emulators with support for YM2608 drums, perfect envelope generator in YM2203, YM2610, YM2608 and YM2612 and other small fixes.
-  1st December  2002: Jarek Burczynski - Fixed register addressing in YM2608, YM2610 and YM2610B chips (verified on real YM2608). The addressing patch used for early Neo-Geo games can be removed now.
- 26th November  2002: Jarek Burczynski and Nicola Salmoria - Recreated YM2608 ADPCM ROM using data from real YM2608's output which leads to added emulation of YM2608 drums. Output of YM2608 is two times lower now, same as YM2610 (verified on real YM2608).
- 0.37b3             : Aaron Giles fixed YM2608 ADPCM support.
- 22nd May       2000: Aaron Giles fixed some YM2608 core bugs.
- 0.35b11            : Added sound\2608intf.c/h. Removed sound\psgintf.h.
- 12th April     1999: Tatsuyuki Satoh has updated the FM engine, adding preliminary support for YM-2608.
- 0.35b6             : Removed sndhrdw\psgintf.c.
- 0.34b2             : Tatsuyuki Satoh updated the FM emulation and the way the 8910 updates its buffers. FM also has support for YM2608 and YM2612, though they are not compiled in.
- PCB: YM2608B (Mechatt, Tail2nos)
- DRIVERS: itech8.cpp, mechatt.cpp, pipedrm.cpp, tail2nos.cpp and wc90.cpp
- SOURCE: sound\ymopn.cpp




S5.2A  YM2610

- 0.246              : Updated YMFM library to latest version. Improved ADPCM-B behavior at stop/limit addresses (more thorough rewrite here coming later) [Aaron Giles, hyano].
- 0.233              : Play ADPCM-A samples through the end of the end block inclusive (ymfm_adpcm.cpp) [Aaron Giles].
- 0.232              : Merged sound\ym2610.cpp/h with sound\ymopn.cpp/h. Changed sound\ymadpcm.cpp/h to 3rdparty\ymfm\src\ymfm_adpcm.cpp.
- 0.231              : Removed FM output boost in YM2610. Better matches previous volume now. Initialized ADPCM-A pans and instrument volume (sound\ymadpcm.cpp). Fixes some homebrew NeoGeo sounds. Fixed coverity issue, documented differences between YM2608/10 and Y8950 DAC formats (sound\ymadpcm.cpp). Fixed missing samples in 'Twinkle Star Sprites' by masking the ADPCM-A end address properly (sound\ymadpcm.cpp) [Aaron Giles].
- 0.230              : Added sound\ymadpcm.cpp/h. New BSD-licensed implementation of Yamaha OPN and OPM FM audio chips, along with new device drivers for YM2610. Fixed ADPCM-B processing logic. Force external mode on for YM2610. Fixes Neogeo sound playback. If volume is low, don't erase output, just leave it alone (sound\ymadpcm.cpp). Fixes missing sound in Raimais. Removed YM2610 FM output boost to match previous volume better [Aaron Giles]. Correct some ymsnd regions that had been overlooked [Robbbert].
- 0.225              : Update YM2610 sound to new stream callbacks [Aaron Giles].
- 0.209              : Fixed 12-bit wrapping behavior in YM2608/2610 ADPCM_A decoding, fixes some glitches in certain samples in the metal slug series and likely other games [Lord Nightmare, madbr].
- 0.206              : Removed MCFG macros (sound\2610intf.h) [Ryan Holtz].
- 0.186              : Changed description to 'YM2610 OPNB'.
- 0.149              : Fixed anything using YM2610 and allowing save will crash upon reloading a saved state [?].
- 0.148u5            : Modernised the YM2610 interface. Fixed debug build (sound\2610intf.c/h, drivers\2mindril.c, aerofgt.c, asuka.c, bbusters.c, crshrace.c, f1gp.c, fromanc2.c, gstriker.c, inufuku.c, mcatadv.c, metro.c, neogeo.c, neoprint.c, ninjaw.c, othunder.c, pipedrm.c, psikyo.c, slapshot.c, suprslam.c, taito_b.c, taito_f2.c, taito_h.c, taito_l.c, taito_x.c, taito_z.c, taitoair.c, taotaido.c, warriorb.c, welltris.c, wgp.c and zn.c). Removed unnecessary #includes [smf].
- 0.138u2            : A small update for the YM2610 core, which resets the PCM and Delta-T memory regions when the chip is reset. This is needed for MESS, where being able to change the size and existence of the sample regions on the Neo Geo AES is necessary for the sound to work right, especially for games that don't have a specific Delta-T region [Barry Rodewald].
- 0.135u2            : Phil Bennett fixed missing sounds in sets/drivers using the YM2610.
- 0.126u5            : More FM OPN fixes [Eke, R. Belmont]: Pass chip type around and restore Jarek's original behavior for YM2203/YM2610. Always recalculate attack rate in set_ar_ksr, fixes Megadrive/Genesis "Batman & Robin".
- 0.125              : Couriersud fixed YM2610 SSG volume more than 1.0 causes no audio output.
- 0.122u1            : Phil Bennett fixed a YM2610 regression: Changed 'void refresh_fc_eg_chan(FM_CH *CH )' from INLINE to static to work around GCC 4.2.1 codegen bug (sound\fm.c).
- 0.94u4             : BUT fix crash games using FM sound chips when you load state (sound\2151intf.c, 2203intf.c, 2608intf.c, 2610intf.c and 2612intf.c).
- 0.93               : The YM2203/2608/2610 chips now pass a set of functions into the FM core with pointers to all the AY8910-compatibility routines, rather than relying on global pointers [Aaron Giles].
- 0.84               : Blip fixed save/restore crash in the YM2610 emulation (sound\fm.c).
- 0.77u2             : Leon van Rooij fixed the state saving support in the YM2610 sound core.
- 0.70u2             : Jarek Burczynski makes various sound improvements to YM2610, YM2608 and Y8950, inspired by Frits Hilderink (NLMSX emulator author). Inspired by Frits Hilderink (NLMSX emulator author) Jarek attempted to improve support of the ymdeltat module for the status registers (YM2610,YM2608,Y8950), implement x1bit/x8bit DRAM usage for the ADPCM samples, implement memory read/write via deltat (Y8950 and YM2608) and ADPCM synthesis in 'slave' mode (CPU controlled, instead of memory based). Made some tests but the changes are quite big so please test them before including. I'm sure the Y8950 will be tested by NLMSX authors too.
- 0.69b              : Aaron Giles fixed a problem which caused sound to break in games using a YM2610 using the new timer system.
-  2nd June      2003: Aaron Giles fixed a bug in the YM2610 timers.
- 22nd May       2003: Jarek Burczynski fixed a bug in the YM2610 sound chip emulator that caused problems in the Magician Lord intro for example.
- 14th April     2003: Jarek Burczynski fixed LFO support in an YM2610-only compilation.
- 12th December  2002: Jarek Burczynski sent in an update to the FM sound chip emulators with support for YM2608 drums, perfect envelope generator in YM2203, YM2610, YM2608 and YM2612 and other small fixes.
-  1st December  2002: Jarek Burczynski - Fixed register addressing in YM2608, YM2610 and YM2610B chips (verified on real YM2608). The addressing patch used for early Neo-Geo games can be removed now.
- 0.55               : Changed description to 'YM2610'.
-  2nd September 2002: ElSemi submitted a fix for the YM2610 Delta-T samples which fixes the sound in the KOF99 how to play screen and in the Shock Troopers intro.
-  7th December  2001: Paul Hampson submitted a modification that allows the YM2610 sound chip to be compiled without needing YM2610B as well.
-  2nd October   2001: Stefan Jokisch fixed a bug in the YM2610 sound chip emulation which caused missing sounds in Chase H.Q.
- 0.54               : Jarek Burczynski fixes to the YM2610 and YM2151 emulation, verified on the real chip.
- 17th July      2001: Nicola Salmoria improved the YM2610 ADPCM algorithm.
- 16th September 2000: David Graves abstracted the Taito YM2610 sound interface.
- 0.36b15            : Source: Added gain support to mixer.c, through the new MIXERG() macro (extension of MIXER()). Removed the gain filed from AY8910, YM2203, YM2610 structures.
- 0.35b13            : Removed sound\exvolume.c/h.
- 0.35b11            : Removed sound\ym2610.h.
- 0.35b6             : Added sndhrdw\exvolume.c/h. Improvements to the YM2610 timers, added an interface for external volume control [Tatsuyuki Satoh].
- 0.35b4             : Improved the YM2610 emulation [Tatsuyuki Satoh].
- 23rd February  1999: Tatsuyuki Satoh has updated the FM sound engine, mainly speeding up YM-2610 and fixing things.
- 0.34b8             : Removed sndhrdw\ym2610.c. Support for stereo output. This is implelemented in the YM2610 and in Tatsuyuki's YM2151. It is a little slower than mono, to turn it off use -nostereo.
- 0.34b6             : Added sndhrdw\2610intf.c/h and ym2610.c/h. YM2610 emulator [Hiromitsu Shioya]. This is used by the NeoGeo games. Ernesto Corvi support sound in Super Space Invaders (YM-2610). FULL sound support in the NeoGeo games, FM synth and ADPCM samples, on 90% of games using the YM2610 emulator.
- DRIVERS: aerofgt.cpp, asuka.cpp, bbusters.cpp, bingowav.cpp, crshrace.cpp, f1gp.cpp, fromanc2.cpp, gstriker.cpp, inufuku.cpp, mcatadv.cpp, metro.cpp, neogeo.cpp, neoprint.cpp, ninjaw.cpp, othunder.cpp, pipedrm.cpp, psikyo.cpp, suprslam.cpp, taito_b.cpp, taito_f2.cpp, taito_h.cpp, taito_l.cpp, taito_x.cpp, taito_z.cpp, taitoair.cpp, taotaido.cpp, welltris.cpp, wgp.cpp and yuvomz80.cpp
- SOURCE: sound\ymopn.cpp



S5.2B  YM2610B

- 0.230              : Changed description to 'YM2610 OPNB2'. New BSD-licensed implementation of Yamaha OPN and OPM FM audio chips, along with new device drivers for YM2610B. Fixed ADPCM-B processing logic. Force external mode on for YM2610. Fixes Neogeo sound playback [Aaron Giles].
- 0.186              : Changed description to 'YM2610B OPNB'.
-  1st December  2002: Jarek Burczynski - Fixed register addressing in YM2608, YM2610 and YM2610B chips (verified on real YM2608). The addressing patch used for early Neo-Geo games can be removed now.
-  7th December  2001: Paul Hampson submitted a modification that allows the YM2610 sound chip to be compiled without needing YM2610B as well.
- 0.34b6             : Added sndhrdw\ym2610.c/h.
- Games: Taito - Sonic Blast (1990), Puzzle Bobble (1994), Magical Date (1996)
- PCB: YM2610B (Pbobble, Sbm, Silentd, Warriorb)
- SOURCE: sound\ymopn.cpp



S5.2C  YM2612

- 0.246              : Increased strength of DAC discontinuity in YM2612 [Aaron Giles, hyano].
- 0.232              : Merged sound\ym2612.cpp/h with sound\ymopn.cpp/h.
- 0.231              : Fixed error in YM2612 that caused crashes [Aaron Giles].
- 0.230              : Changed sound\2612intf.cpp/h to sound\ym2612.cpp/h. New BSD-licensed implementation of Yamaha OPN and OPM FM audio chips, along with new device drivers for YM2612 [Aaron Giles].
- 0.225              : Update YM2612 sound to new stream callbacks [Aaron Giles].
- 0.221              : Eliminated pulse_input_line_and_vector (cvs.cpp, galaxold.cpp, scramble.cpp and zac_2.cpp) [AJR].
- 0.218              : Fixed output bits (sound\2612intf.cpp). Added output bit variation (sound\fm2612.cpp) [cam900].
- 0.217              : Added wrapper for using STRUCT_MEMBER with an indeterminate length array (emu\diexec.cpp). Examples in YM2612 family. Also used STRUCT_MEMBER to reduce clutter in diexec save state registration [Vas Crabb].
- 0.206              : Removed MCFG macros (sound\2612intf.h) [Ryan Holtz].
- 0.186              : Changed description to 'YM2612 OPN2'.
- 0.155              : Fixed missing DAC channel on savestate load (sound\fm2612.c) [dink (FB Alpha project)].
- 0.154              : Sync timer fixes from GenPlus-GX (sound\fm2612.c). This fixed some of the sound effects in MegaDrive are wrong compared to the console/cartridge. Several emulators do it correctly, like Kega and GenPlus-GX. GenPlus-GX source may be useful in this case, since it shares cores with MESS/MAME. This fixed also the broken SFX in Streets of Rage II (Mega Play) [Enik Land]. Sega System C2 didn't entirely like the changes, update sound\fm2612.c code [R. Belmont].
- 0.148u5            : Temporarily limit table lookup ranges (sound\fm2612.c) [R. Belmont]. Removed unnecessary #includes [smf].
- 0.147u2            : Fixed LFO AM waveform [Eke-Eke, R. Belmont].
-  9th April     2012: HardWareMan - YM2612 decapped (http://gendev.spritesmind.net/forum/viewtopic.php?p=14976#14976): I've finished it. This is my first experience of gluing pictures, so do not kick me. So, this picture 24516x21770 pixels and 116MBytes. It's too big for FileDen, and all pichostings, so I placed it on filesharing service. Someone of you can rehost it to better place. 1. DAC is 8bit, not 9bit. 2. DAC seems to be one not only for 6 channels, but for left/right output too. But I don't get it: oscilloscope shows channel synchronization. Perhaps they used the capacitance to store the current signal level. DAC place at upper right corner on picture. All analog pins can easily be traced to him. The first step is to identify all the blocks in the picture. Interestingly, below the center at right side there are some matrixes, perhaps this is the operator unit and the calculation tables for the level of the envelope and sine. And they're seems 14-bit. On the left side above the middle is likely array of registers.
- 0.136u1            : More accurate YM2612 LFO implementation and channel clipping [Eke-Eke, Nemesis, R. Belmont].
- 0.134u1            : YM2612/3834 updates to track latest knowledge [Eke-Eke, Nemesis]: Moved LFO vars inside the chip struct. Changed SSG-EG to update before channel calcs.
- 0.133u3            : Added sound\fm2612.c. YM2612/3834 updates [Eke-Eke, Nemesis]: Split YM2612/3834 to a separate file to avoid disturbing other OPN chips. SSG-EG, envelope, LFO and CSM behavior all improved to better match tested behavior on real YM2612 chips.
- 0.128u2            : YM2608/2612 update [Eke-Eke, Nemesis]: Applied latest fixes/discoveries.
- 0.127              : R. Belmont reduced YM2612 DAC level relative to FM. This better matches real hardware.
- 0.126u4            : Backported a bunch of FM OPN (YM2608/2612) fixes from Genesis Plus GX. All of this was verified on real hardware [Eke-Eke, Nemesis, Alone Coder, AamirM]: Implemented PG overflow, aka "detune bug" (Ariel, Comix Zone, Shaq Fu, Spiderman...). Fixed SSG-EG support. Modified EG rates and frequency. Fixed EG attenuation level on KEY ON (Ecco 2 splash sound). Fixed LFO phase update for CH3 special mode (Warlock, Alladin).
- 0.120u3            : Some build-related improvements to the sound cores [Atari Ace]: The YM2612 core now can be built without including the YM3438 core.
- 0.107u3            : David Haywood adjusted the DAC sound level on the 2612 to something more reasonable (sound\fm.c).
- 0.94u4             : BUT fix crash games using FM sound chips when you load state (sound\2151intf.c, 2203intf.c, 2608intf.c, 2610intf.c and 2612intf.c).
- 12th December  2002: Jarek Burczynski sent in an update to the FM sound chip emulators with support for YM2608 drums, perfect envelope generator in YM2203, YM2610, YM2608 and YM2612 and other small fixes.
- 20th August    1999: Jim Hernandez fixed System18 sound chip frequency.
-  7th August    1999: Andrew Prime added PCM sound to System 18 and 3D games (using Hiromitsu Shioya's PCM code).
- 0.35b11            : Removed sound\psgintf.h.
- 0.35b6             : Added sndhrdw\2612intf.c/h. Removed sndhrdw\psgintf.c.
- 10th March     1999: Tatsuyuki Satoh has sent in an interface for YM-2612 (System18 games use this sound chip).
- 0.34b2             : Tatsuyuki Satoh updated the FM emulation and the way the 8910 updates its buffers. FM also has support for YM2608 and YM2612, though they are not compiled in.
- DRIVERS: hshavoc.cpp, megadriv_acbl.cpp, megaplay.cpp, megatech.cpp and puckpkmn.cpp
- SOURCE: sound\ymopn.cpp



S5.3   YM3012

-  2nd June      1999: Nicola fixed Street Fighter ADPCM sound and added the second channel for the YM3012 chip.
- NOTES: Yamaha YM3012 16bit serial DAC/Volume control chip (DIP8)
- GAMES: Gryzor (Konami 1987), Rainbow (Taito 1987)
- PCB: YM3012 (Archrivl, Pururun, Silkroad), YM3012A (SF2), Cypress CY5002 (Metmqstr), Cypress CY5001 (Gotcha), CA5102  DIP16 (RapidFire, Gotcha), BS902 (Bubl2000)
- SOURCE: ???



S5.31  YM3014

- NOTES: D/A converter, serial input, 16bit D/range
- GAMES: Iron Horse (Konami 1986), Bubble Bobble (Taito 1986 - 2xYM-3014), Teenage Mutant Ninja Turtles (Konami 1989)
- PCB: YM3014 DIP8 (GulfWar2), Y30148 (Csilver, Passsht, Shanghai), U6614 (Multchmp), U6614B (Svolley), K-664 (Rbmk, Wbbc97), KS8002 (Magicbub), KA12 = Compatible to Y3012 or Y3014 (Vamphalf, 3in1semi), ka12 c9235 (3in1semi)
- SOURCE: ???



S5.32  YM3016

- NOTES: Like YM3012 a volume control chip.
- GAMES: Dynamite League (Taito 1990), Sel Feena (East Technology 1991), Turbo Force (Video System Co. 1991), Welltris (Video System Co. 1991)
- PCB: Y3016-F (Nost), YM3016D (Turbofrc), YM3016F (Aquajack)
- SOURCE: ???



S5.33  YM3438

- 0.230              : New BSD-licensed implementation of Yamaha OPN and OPM FM audio chips, along with new device drivers for YM3438 [Aaron Giles].
- 0.186              : Changed description to 'YM3438 OPN2C'.
- 0.148u5            : Modernised YM3438 (sound\2612intf.c/h, drivers\model1.c, model2.c, segac2.c, segas18.c, segas32.c, seta.c, shangha3.c and system16.c) [smf].
- 0.55               : Changed description to 'YM3438'.
- NOTES: The YM-3438 emulation comes from Li Jih Hwa and Thierry Lescot System 16 emulator and YM3438 information are from Hiromitsu Shioya and Jim Hernandez.
- NOTES: The Sega C/C2 system uses a YM3438 (compatible with the YM2612) for FM based music generation.
- GAMES: Shadow Dancer (Sega 1989), Alien Storm (Sega 1990), Blocken (Visco 1994)
- SOURCE: sound\ymopn.cpp


S5.34  YM3526

- 0.232              : Merged sound\ym3526.cpp/h with sound\ymopl.cpp/h.
- 0.231              : Changed sound\3526intf.cpp/h to sound\ym3526.cpp/h. New BSD-licensed YM3526 OPL core. Created new YM3526 device based on new OPL. Fixed keyon and sustain behaviors. Reshuffled read/write handlers. Rename them to less confusing names [Aaron Giles].
- 0.225              : Update YM3526 sound to new stream callbacks [Aaron Giles].
- 0.206              : Removed MCFG macro (sound\3526intf.h) [AJR].
- 0.186              : Changed description to 'YM3526 OPL'.
- 0.149u1            : Added a missing dependency for YM3526 (sound\sound.mak) [Mamesick].
- 0.148u5            : Modernised the YM3526, which also required adding write lines to the 6502, 6809 and Z80. Standardised on #include format. Removed unnecessary #includes [smf].
- 0.145u4            : Curt Coder refactored YM3526 to use DEVCB (affected drivers are battlane.c, brkthru.c, dec8.c, exprraid.c, fantland.c, karnov.c, matmania.c, metlclsh.c, missb2.c, renegade.c, sidepckt.c, snk.c and suna16.c).
- 0.129u4            : Added sound\3526intf.c/h.
- 0.108u4            : Vas Crabb added save state support for YM3526.
- 0.60               : Complete rewrite of YM3526 emulation, verified on the real chip [Jarek Burczynski].
- 0.55               : Changed description to 'YM3526'.
- 0.36b1             : New digital YM3812/YM3526 emulator (in the DOS version, use -noym3812opl to enable it). It doesn't support the rhythm section yet, but is overall better than the old one [Tatsuyuki Satoh].
- 0.34b5             : YM3812 and YM3526 software emulator [Carl-Henrik Skarstedt]. In the DOS version it is disabled because we are using the 100% compatible SoundBlaster OPL chip. A beginning for a YM2413 emulator. It pushes data through the YM3812 [Paul Leaman, Ernesto Corvi].
- GAMES: SNK - ASO (1985), Athena (1986), Bermuda Triangle (1987)
- SOURCE: sound\ymopl.cpp


S5.35  YM3528
- NOTES: MAME uses the YM3526 instead of the YM3528.
- Games: Bubble Bobble (Taito 1986), Sei Senshi Amatelass (Nichibutsu 1986) and Western Express (Data East 1986)
- SOURCE: ???


S5.36  YM3533
- 0.233              : Added 'YM3533 OPQ' device and use that instead of YM3806 [Aaron Giles].
- NOTES: YM3533 OPQ
- SOURCE: sound\ymopq.cpp


S5.37  YM3806
- 0.233              : Changed description to 'YM3806 OPQ'. Added YM3533 device and use that instead of YM3806 [Aaron Giles].
- 0.232              : Added 'YM3806 OPN' device. Hooked up YM3806 to (MESS) Yamaha PSR-60 PortaSound [R. Belmont].
- NOTES: YM3806 OPQ
- SOURCE: sound\ymopq.cpp



S5.38  YM3812

- 0.246              : Updated YMFM library to latest version. Fixed incorrect operator volumes in some cases for OPL. Fixes YM3812 music sounds different from Truxton PCB [Aaron Giles, hyano].
- 0.232              : Merged sound\ym3812.cpp/h with sound\ymopl.cpp/h.
- 0.231              : Removed sound\3812intf.cpp/h. Added sound\ym3812.cpp/h. New BSD-licensed YM3812 OPL core. Created OPL2 engine. Added waveform support for OPL2/3 waveforms. Wire up YM3812 to the new OPL2 engine. Managed rhythm key ons separately. Fixes Wardner awfulness. Reshuffled read/write handlers. Rename them to less confusing names [Aaron Giles].
- 0.225              : Update YM3812 sound to new stream callbacks [Aaron Giles].
- 0.206              : Removed MCFG macro (sound\3812intf.h) [Ryan Holtz].
- 0.200              : Synchronized IRQ outputs to prevent lossage [AJR].
- 0.186              : Changed description to 'YM3812 OPL2'.
- 0.148u5            : Modernised YM3812 [smf].
- 0.120u3            : Some build-related improvements to the sound cores [Atari Ace]: BUILD_ instead of HAS_ macros are used in 3812intf.c for consistency with the other fm cores. Unnecessary uses of BUILD_ and HAS_ macros have been removed.
- 0.108u4            : Vas Crabb added save state support for YM3812.
-  3rd March     2003: Jarek Burczynski sent in an update to the YM3812 sound core, fixing the same copy & paste bug that haunted the YM2413 core and another problem that occurred if the Y8950 support wasn't compiled in.
- 20th July      2002: Jarek Burczynski fixed another small bug in the YM3812 sound chip emulation.
- 0.60               : Complete rewrite of YM3812 emulation, verified on the real chip [Jarek Burczynski].
- 30th April     2002: Jarek Burczynski sent in significant improvements to both the YM3812 and YM2151 cores. YM3812: Fixed simultaneous usage of all three different chip types. Used real sample rate when resample filter is active.
- 26th March     2002: Jarek Burczynski did a major improvement on the YM3812 sound chip emulation, making it much more accurate than before by comparing its output with the real chip.
- 21st March     2002: Olivier Galibert found the correct shift register operations for noise generators for both SN76489 and YM3812.
- 0.55               : Changed description to 'YM3812'.
- 21st September 2000: Tatsuyuki Satoh fixed some YM3812 bugs which affected Mahjong Club 90's.
- 0.36b13            : Removed sound\ym3812.c/h.
- 0.36b2             : Tatsuyuki Satoh further improved the YM3812 emulator, especially the rhythm section (check Snow Bros!). DOS -noym3812opl is now the default (this won't have effect unless you delete mame.cfg) [Nicola Salmoria].
- 30th July      1999: Tatsuyuki Satoh updated his YM-3812 core yet again, fixing crashes.
- 23rd July      1999: Tatsuyuki Satoh fixed yet another YM-3812 emulator bug and fixed rhythm sound handling in the YM-3812 emulator.
- 22nd July      1999: Tatsuyuki Satoh added dual chip support to the YM-3812 emulator, and fixed some crashes.
- 21st July      1999: Tatsuyuki Satoh fixed some YM-3812 IRQ problems, for example with Raiden.
- 0.36b1             : New digital YM3812/YM3526 emulator (in the DOS version, use -noym3812opl to enable it). It doesn't support the rhythm section yet, but is overall better than the old one [Tatsuyuki Satoh].
- 16th July      1999: Tatsuyuki Satoh fixed Toki YM-3812 sound.
- 14th July      1999: Tatsuyuki Satoh sent in a totally new YM-3812 emulator which sounds a lot better than the old one.
-  2nd June      1999: Nicola fixed Street Fighter ADPCM sound and added the second channel for the YM3812 chip.
- 0.34RC1            : When using the SoundBlaster OPL chip, YM3812 commands are converted to play at the correct frequency [Carl-Henrik Skarstedt].
- 0.34b6             : [DOS] Nicola replaced the -fm option with -ym2203opl. Added -noym3812opl to use the digital emulation of the YM3812 instead of the SoundBlaster OPL chip. Note that with -noym3812opl you also need external drum samples.
- 0.34b5             : Added sndhrdw\ym3812.h and 3812intf.c. YM3812 and YM3526 software emulator [Carl-Henrik Skarstedt]. In the DOS version it is disabled because we are using the 100% compatible SoundBlaster OPL chip. A beginning for a YM2413 emulator. It pushes data through the YM3812 [Paul Leaman, Ernesto Corvi].
- 0.33b7             : The YM3812 emulator still passes commands to the Sound Blaster OPL chip, but it handles timers in software. osd_ym3812_status and osd_ym3812_read removed [Aaron Giles].
- 0.31               : Added sndhrdw\ym3812.c and 3812intf.h.
- PCB: YM3812 (OPL2) (Ikari3, Prehisle), YM 3812 (Ghostb, Gondo), U6612 (Crospang, Multchmp), 6564L (SOP24)(Chindrag, Drgnwrld), KS8001 (Nmg5, Magicbub)
- DRIVERS: actfancr.cpp, aerofgt.cpp, alpha68k.cpp, amaticmg.cpp, armedf.cpp, battlnts.cpp, bloodbro.cpp, crospang.cpp, csplayh5.cpp, dcon.cpp, dec0.cpp, deniam.cpp, discoboy.cpp, dynduke.cpp, esd16.cpp, fruitpc.cpp, fuukifg2.cpp... yunsung8.cpp
- SOURCE: sound\ymopl.cpp




S5.39  Y8950

- 0.246              : Updated YMFM library to latest version. Improved ADPCM-B behavior at stop/limit addresses (more thorough rewrite here coming later) [Aaron Giles, hyano].
- 0.233              : Play ADPCM-A samples through the end of the end block inclusive (ymfm_adpcm.cpp) [Aaron Giles].
- 0.232              : Merged sound\y8950.cpp/h with sound\ymopl.cpp/h. Changed sound\ymadpcm.cpp/h to 3rdparty\ymfm\src\ymfm_adpcm.cpp.
- 0.231              : Changed sound\8950intf.cpp/h to sound\y8950.cpp/h. New BSD-licensed Y8950 OPL2 core. Moved Y8950 over to new OPL engine. Removed old y8950, along with fmopl and ymdeltat. Fixed Y8950 ADPCM start. Return masked status properly. Reshuffled read/write handlers. Rename them to less confusing names. Initialized ADPCM-A pans and instrument volume (sound\ymadpcm.cpp). Fixed coverity issue, documented differences between YM2608/10 and Y8950 DAC formats (sound\ymadpcm.cpp). Fixed missing samples in 'Twinkle Star Sprites' by masking the ADPCM-A end address properly (sound\ymadpcm.cpp) [Aaron Giles].
- 0.225              : Update Y8950 sound to new stream callbacks [Aaron Giles].
- 0.186              : Changed description to 'Y8950 MSX-Audio'.
- 0.148u5            : Modernised Y8950 (sound\8950intf.c/h, drivers\cybertnk.c, ginganin.c and snk.c) [smf].
- 0.147u1            : Fix for Ginga NinkyouDen regression (sound\8950intf.c) [Miodrag Milanovic].
- 0.129u4            : Added sound\8950intf.c/h.
- 0.108u4            : Vas Crabb added partial save state support for the Y8950 sound chip.
- 0.76u2             : Fixes to the ymdeltat module. Generally - even more flags work correctly now. These changes are necessary for the MSX sound emulation (Y8950) and were tested in nlmsx emulator by Frits Hilderink [Jarek Burczynski].
- 0.70u2             : Jarek Burczynski makes various sound improvements to YM2610, YM2608 and Y8950, inspired by Frits Hilderink (NLMSX emulator author). Inspired by Frits Hilderink (NLMSX emulator author) Jarek attempted to improve support of the ymdeltat module for the status registers (YM2610,YM2608,Y8950), implement x1bit/x8bit DRAM usage for the ADPCM samples, implement memory read/write via deltat (Y8950 and YM2608) and ADPCM synthesis in 'slave' mode (CPU controlled, instead of memory based). Made some tests but the changes are quite big so please test them before including. I'm sure the Y8950 will be tested by NLMSX authors too.
-  3rd March     2003: Jarek Burczynski sent in an update to the YM3812 sound core, fixing the same copy & paste bug that haunted the YM2413 core and another problem that occurred if the Y8950 support wasn't compiled in.
- 0.61               : Fixed Y8950 confincting with YM3812/YM3526 in some SNK games [Jarek Burczynski].
- 0.60               : Fixes to Y8950 sample playback [Acho A. Tang]. Complete rewrite of Y8950 emulation, verified on the real chip [Jarek Burczynski].
- 0.36b11            : Y8950 emulator, used by Ginga NinkyouDen [Tatsuyuki Satoh].
- 20th November  1999: Tatsuyuki Satoh added support for Delta-T ADPCM of Y8950, and he modified Ginga Ninkyouden driver to use it.
- NOTES: The Y8950 is basically a YM3526 with ADPCM built in.
- GAMES: SNK - Victory Road (1986), Guerrilla War (1987), Chopper I (1988), Jaleco - Ginga NinkyouDen (1987)
- SOURCE: sound\ymopl.cpp



S5.4   YMF262

- 0.232              : Merged sound\ymf262.cpp/h with sound\ymopl.cpp/h.
- 0.231              : Removed sound\262intf.cpp/h. New BSD-licensed YMF262 OPL core. Moved YMF262 to use new FM engine for OPL3/4. Fixed several issues in OPL3 logic, which now seems to work ok. Match read/write details to datasheet and previous tests [Aaron Giles].
- 0.227              : Fixed off-by-one error in OPL3_SLOT_CONNECT [Scott Percival].
- 0.225              : Update YMF262 sound to new stream callbacks [Aaron Giles].
- 0.219              : Support clock divider difference [cam900].
- 0.206              : Fixed save states [dink]. Removed MCFG macros (sound\262intf.h) [Ryan Holtz].
- 0.201              : Added device_clock_changed [smf].
- 0.186              : Changed description to 'YMF262 OPL3'.
- 0.185              : Added save state support to YMF262, slot pointer checks [Scott Percival].
- 0.149u1            : Fixed OPLx key scale level order [Alexey, Phil Bennett].
- 0.148u5            : Modernised the YMF262 (sound\262intf.c/h, audio\t5182.h, drivers\fuukifg3.c and tecmosys.c) [smf].
- 0.143u3            : hap re-added YMF262 to the FuukiFG3 driver, used in the music for FM channels.
- 23rd April     2003: Jarek Burczynski sent in some minor fixes to the YMF262 sound core.
- 0.66               : Added sound\ymf262.c/h and 262intf.c/h. First version of YMF262 emulator [Jarek Burczynski].
-  3rd March     2003: Jarek Burczynski submitted the first version of the YMF262 emulator and Tecmo System driver with a debug function that was used to test it. Thanks to Olivier Galibert and Chris Hardy for YMF262 and YAC512 chips and to Stiletto for the datasheets.
- NOTES: The soundblaster cards used the YMF262 for MIDI (OPL3).
- DRIVERS: savquest.cpp and tecmosys.cpp
- SOURCE: sound\ymopl.cpp



S5.41  YMF268-F
- NOTES: MAME uses the YMF278B instead of the YMF268-F.
- GAMES: Psikyo - Sol Divide (1997), Taisen Hot Gimmick (1997)
- SOURCE: ???



S5.42  YMF271

- 0.281              : Update stream before reading status registers and fixed a performance regression (sound\ymf271.cpp). Note: Performance regression was from MAME 0.195 (Allow 4 channel output...). It was clearing the complete mix buffer at each stream_update, instead of only clearing amount of samples, making seibuspi boot-up sequence about 2.5 times slower [hap].
- 0.241              : Fixed timer A period and added notes for timer [cam900].
- 0.225              : Update YMF271 sound to new stream callbacks [Aaron Giles]. Modernized save state registration and allow disabling of side effects for reading [AJR].
- 0.219              : Correct envelope release time [cam900].
- 0.206              : Removed MCFG macros (sound\ymf271.h) [Ryan Holtz].
- 0.195              : Allow 4 channel output. Converted external memory handler to address space. Moved global imperfect_sound tags to device imperfect_features. Added notes [cam900].
- 0.190              : Added slot end status bits, fixes at least missing shots samples for Desert War [Angelo Salese].
- 0.188              : Changed description to 'Yamaha YMF271 OPX'. Support dynamic changes to clock frequency [AJR].
- 0.186              : Changed description to 'Yamaha YMF271'.
- 0.155              : Fixed crash possibility [hap].
- 0.149u1            : Fixed possible buffer overflow. Some cleanup and an optimization. Added logerror info. Removed crash-prone malloc. Noticed some inconsistencies with variable types (helps with big endian?). Improved adsr timing a bit, attack rate was too slow. Moved tables to classroom. Show popmessage in these cases. PCM looping fix. Fixed possible envelope volume clipping. Simplified fm code to understand the "Acc" bit, but didn't get much out of that and scrapped it. On the plus side, the refactor did fix a couple of small bugs with feedback/modulation [hap].
- 0.149              : Sync YMF271 stream before write. Addresses are 23-bit, and added alternate loop bit but can't find any game that uses it. Get rid of timerA madness (m_timerA Val |= 0x300;) and (if( address < 0x800000) was useless). Accurate timer/irq emulation. Disregard timer A upper bits after all (aka |= 0x300). Correct YMF271 external memory handling. protip: don't exit MAME during flashing the game [hap].
- 0.148u5            : Modernised YMF271 (drivers\ms32.c, seibuspi.c and zn.c). Clears variables to avoid random crashing. Fixed memset size [smf].
- 0.145u6            : Sonikos fixed YMF271 core timer allowing for greater accuracy. Also fixed music in the boss levels of Raiden Fighters and Raiden Fighters 2 play (Mission 1-3, 2-3) slower than the original.
- 0.145u4            : YMF271 timer setup fix [trap15].
- 0.135u1            : Brian Troha and Nicola Salmoria updated LFO information in YMF271 core.
- 0.134u1            : hap fixed GCC warning for src\emu\sound\ymf271.c with OPTIMIZE=3 on openSUSE 11.1 x86.
- 0.131u3            : Brian Troha and Roman Scherzer correct the 202 entry in the LFO frequency table (and comments for it) for the YMF271 based on a formula by Olivier Galibert.
- 0.104u2            : Nathan Woods added state save support to the Jaleco MegaSystem 32 and YMF271 sound core.
- 0.99u3             : Ville Linde fixed all the volume table calculations in the YMF271 core.
- 0.99u2             : Fixed more YMF271 issues [Ville Linde]: The mix buffer pointer was not being reset between two 2-operator FM sounds, causing missing sounds. Fixed some bugs in the phase modulation of FM sounds and added low-frequency oscillator (LFO).
- 0.99u1             : Major improvement to the YMF271 sound core [Ville Linde]: Fixed timer A calculation. Fixed note pitch calculation. Added envelope generator. Added stereo panning and fixed other volume calculations. Added FM sound generation.
- 0.84u3             : Ville Linde added support for external read/write handlers to the YMF271 (required for SPI flash ROM updating mode).
- 0.84               : Toshiaki Nijiura improved YMF271C sound quality.
- 0.81u8             : Ville Linde fixed YMF271 pitch, this improves music in Brave Blade.
- 0.77u3             : Added sound\ymf271.c/h. YMF271 sound core plus very preliminary hook up in ms32.c (only Desert War makes any sound at all and it doesn't really seem to be anything like correct, this is probably due to a combination of Z80 communication and banking issues) [R. Belmont].
- 12th December  2003: R. Belmont sent in a YMF271 sound core and added it to the Jaleco Mega System 32 driver, but sound doesn't work in it yet.
- NOTES: The Yamaha YMF271-F "OPX" emulator based in part on YMF278B emulator by R. Belmont and O. Galibert.
- PCB: YMF271-F, QFP128 (Beastrzr, Rfjet), YMF-271-F (F1superb)
- DRIVERS: bnstars.cpp, ms32.cpp, seibuspi.cpp and zn.cpp
- SOURCE: sound\ymf271.cpp


S5.43  YMF276

- 0.218              : Added YMF276 device [cam900].
- DRIVERS: (MESS)
- SOURCE: sound\ymopn.cpp


S5.44  YMF278B

- 0.246              : Updated YMFM library to latest version. Fixed PCM playback to cut off previous notes when new waveforms are selected (see Dragon Blaze YMF278B). Improved ADPCM-B behavior at stop/limit addresses (more thorough rewrite here coming later) [Aaron Giles, hyano].
- 0.234              : Allow PCM writes if new2flag is set, even if newflag is not (YMF278B; ymfm\src\ymfm_opl.cpp). Fixes no background music in Alien Challenge during gameplay [Aaron Giles].
- 0.233              : Fixed panning calculations in YMF278B OPL4 (ymfm_pcm.cpp). Make OPQ reverb less ridiculous [Aaron Giles].
- 0.232              : Changed description to 'YMF278B OPL4'. Merged sound\ymf278b.cpp/h with ymopl.cpp/h. Added complete YMF278B support. Implemented YM278B vibrato and status register flags. Formally replace the old YMF278B engine with the one from YMFM. Rotated YMF278B outputs into a more logical order [Aaron Giles].
- 0.231              : Moved YMF278B to use new FM engine for OPL3/4. Fixed several issues in OPL3 logic, which now seems to work ok. Generated OPL4 engine to support the proper clock divider and new flags. Updated YMF278B to use FM timers and status rather than replicating the logic. Fixed FM downsampling and adjust balance in YM278B. Fixed YMF278B ID register implementation, fixes several Metro games that were hanging [Aaron Giles].
- 0.227              : Fixed the OPL4 low byte order in 12bits so that it matches the datasheet and the multipcm (GEW8) [O. Galibert].
- 0.225              : Update YMF278B sound to new stream callbacks [Aaron Giles].
- 0.219              : Fixed output rate and clock divider of FM part and mixing behavior [cam900].
- 0.215              : Allow scaling for FM DO2 output [cam900].
- 0.211              : Eliminated clock macro [AJR].
- 0.209              : Fixed sync. Added DO1/2 output. Fixed timer/buffer when clock is changed [cam900].
- 0.201              : Added device_post_load for FM part and device_clock_changed [cam900].
- 0.186              : Changed description to 'Yamaha YMF278B OPL4'.
- 0.164              : Added simple FM reg read back. Added (MESS) moonsound FM part (integrated YMF262 to YMF278) [Wilbert Pol].
- 0.155              : Use the memory system to access YMF278B wavetable data. This should make it possible to hook up RAM as well as ROM to the device, e.g. for computer sound cards in MESS. I'm using the multipcm workaround for default address maps for now. The core change I discussed will go in a separate commit, in case it causes more problems than anticipated [Alex Jackson].
- 0.153              : Loop overflow happens on the real chip. Small cleanup [hap].
- 0.149u1            : Some optimization [hap].
- 0.149              : hap fixed YMF278B irq regression.
- 0.148u5            : Modernised YMF278B (sound\ymf278b.c/h, drivers\fuukifg3.c, lordgun.c, metro.c, psikyo.c, psikyo4.c and psikyosh.c) [smf].
- 0.147              : Added 'YMF278B' device.
- 0.143u3            : YMF278b.c improvements [hap]: Added status register BUSY and LD bits. Accurate timers (same as ymf262.c). Added envelope attack rate. Added damping and pseudo reverb. Misc fixes/cleanups.
- 0.139u2            : Phil Bennett added save-state support to the YMF278B core.
- 0.79               : YMF278b update, improving sound in Asura Blade [R. Belmont].
- 0.69u3             : Bug fix to loop addressing on YMF278B which helps stablise the tuning on looped samples (noticable in parts of s1945 at least) [OpenMSX].
-  4th June      2003: R. Belmont forwarded a OpenMSX guys' fix for the loop addressing in the YMF278B sound chip emulation, improving some parts of Strikers 1945 music.
- 15th January   2003: R. Belmont fixed the pitch problem in the YMF278B sound chip, noticeable in the Strikers 1945 II coin input sound.
- 0.63               : R. Belmont fixed YMF278B emulation.
- 12th December  2002: R. Belmont fixed the YMF278B sound frequency in the Psikyo SH-2 systems and fixed a bug in it that caused missing sounds in Hot Debut.
- 0.62               : Added sound\ymf278b.c/h. Preliminary YMF278B emulation (missing FM support) [R. Belmont].
-  8th September 2002: R. Belmont fixed the missing bass and drum sounds in the YMF278B sound chip emulation.
- 18th August    2002: Olivier Galibert added preliminary envelope support to the YMF278B sound chip emulation and fixed the endlessly looping sounds. Sixtoe fixed the pitch in the YMF278B core.
- 12th August    2002: Olivier Galibert fixed the sample pitch in the YMF278B emulation, but some samples are still erroneously looping over and over.
- 11th August    2002: Olivier Galibert integrated R. Belmont's YMF278B sound chip emulation (FM not emulated yet) and Paul Priest's graphics fixes to the Psikyo driver, and Strikers 1945 is now playable with sound, though the sound is not entirely correct. Sound was also added to the Psikyo SH-2 driver, and sprite zoom in Aero Fighters was fixed.
- NOTES: The Yamaha OPL4 (YMF-278B), which is an OPL3 with a very powerful PCM section added. It's nothing at all like the YMZ-280, which is a very bare-bones ADPCM chip. The Yamaha 2MB YRW801 rom has the samples for the OPL4 (YMF-278B).
- PCB: YMF278B-F, QFP80 (Bangball, Gunbird), YMF278 OPL4, QFP80 (Asurabld, Sbomberb)
- DRIVERS: fuukifg3.cpp, lordgun.cpp, metro.cpp, psikyo.cpp, psikyo4.cpp and psikyosh.cpp
- SOURCE: sound\ymopl.cpp


S5.45  YMF281

- 0.231              : Added YMF281 variant [Aaron Giles].
- NOTES: YMF281 OPLLP
- SOURCE: sound\ymopl.cpp


S5.46  YMF286-K

- NOTES: The Yamaha YMF286-K is compatible to YM2610 (see psikyo.c) and not yet emulated by MAME.
- GAMES: Psikyo - Gun Bird (1994), Battle K-Road (1994)
- PCB: YMF286-K (Btlkroad, Gunbird, Nost, S1945), YMF286K (Blzntrnd), YMF 286-K (Mcatadv)
- DRIVERS: mcatadv.cpp, metro.cpp and psikyo.cpp
- SOURCE: ???


S5.47  YMF292-F SCSP

- 0.277              : Improved handling of MIDI interrupts (sound\scsp.cpp) [Matthew Daniels].
- 0.268              : Use util::sext for sign extension and use lowercase hexadecimal literals (sound\scspdsp.cpp) [cam900].
- 0.235              : Use std::clamp in more source files (sound\scsp.cpp and scspdsp.cpp) [AJR].
- 0.225              : Update SCSP sound to new stream callbacks [Aaron Giles].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.209              : Use shorter type values. Removed hardcoded tags and unnecessary values. Added notes (sound\scsp.cpp and scspdsp.cpp) [cam900].
- 0.205              : Changed description to 'Yamaha YMF292-F SCSP'. Implemented EXTS mixing and DAC18B. Removed MCFGs. Reduced machine().device. Added save states, correct bool and fixed postload functions. Correct SSCTL and initial RBL. Code style fixes. Cleanup unused / duplicates. Added notes (sound\scsp.cpp and sound\scspdsp.cpp) [cam900].
- 0.201              : Added SCSP support (drivers\vgmplay.cpp). Added device_clock_changed, support device_rom_interface, use correct clock frequency, "space" removal and fixed some endian issues (sound\scspdsp.cpp) [smf].
- 0.186              : Changed description to 'YMF292-F SCSP'. Fixed SCSP UNPACK sign extension (sound\scspdsp.cpp) [Vas Crabb].
- 0.170              : Make ST-V not crash. coolridr defines a region for the RAM, stv driver doesn't. Uses set_ram_base instead, which seems to be more correct anyway (sound\scsp.c) [David Haywood].
- 0.168              : Renamed sound\scsp.c and sound\scspdsp.c to sound\scsp.cpp and sound\scspdsp.cpp [Miodrag Milanovic].
- 0.164              : MSLC port in SCSP writes seems to mask with 0xf800 according to Jikkyou Oshaberi Parodius [Angelo Salese].
- 0.153              : Removed sound\scsplfo.c. Fixed SCSP array out of bounds access [R. Belmont]. Rewrite SCSP to modern device [Osso, Miodrag Milanovic].
- 0.151              : Improved DMA in SCSP and fixed triggering from SH-2 side [Angelo Salese].
- 0.150              : Hooked up DGATE functionality for DMA in SCSP. Fixed DMA when SH-2 enables it [Angelo Salese].
- 0.148u2            : Changed a log around (sound\scsp.c). Hooked up internal SCSP DSP registers, Kyuutenkai (MESS) needs them for booting. Added snippet. Added SCSP sound clear. Added SCSP timer A irq for Main CPU, fixes a booting bug in Jikkyou Oshaberi Parodius (game still not working due of timing bugs) [Angelo Salese].
- 0.148u1            : Made a more sane Sound->Main IRQ behaviour in SCSP. SCSP: Made MSLC register to be write only, fixes (MESS) Deka Yonku ~Tough the Truck~ hang on Human logo. Added SCSP DSP registers read-back, fixes booting in (MESS) Tunnel B1 / Finalist. Fixed SCIEB not updating irqs, fixes (MESS) Alien Trilogy booting [Angelo Salese].
- 0.145              : R. Belmont fixed master SCSP detection. This fixed all sets in the ST-V driver do not start or play correctly.
- 0.143u4            : Angelo Salese added MVOL to the SCSP core, used for sound fade in/out effects.
- 0.142u5            : Angelo Salese moved SCSP to main irq function into an external write line function, fixes sound regression in Groove on Fight and Intro Don Don.
- 0.137u4            : SCSP updates [PluginNinja]: Improved slot monitor function. Various cleanups.
- 0.128u6            : R. Belmont re-ordered SCSP init to fix crash.
- 0.125              : Kingshriek fixed an envelope corner case in the SCSP.
- 0.124u1            : Fixed encoding/decoding of negative denormal floats in the AICA/SCSP DSP. Shouldn't actually affect any games [kingshriek, Deunan Knute].
- 0.122u8            : Further improvements to SCSP FM [kingshriek].
- 0.122u7            : Preserve fractional part of sample offset when looping in SCSP. Fixes remaining pitch stability problems. Fixed minor issue with timers B&C expiring [kingshriek, R. Belmont].
- 0.122u6            : Kingshriek removed unnecessary check that could cause SCSP hangs in Guardian Force.
- 0.122u4            : Implemented decent-sounding FM in SCSP [kingshriek].
- 0.122              : More major SCSP fixes [kingshriek]: Rewrote much of the interpolation code. Improved key-rate scaling calculation. Fixed playback of non-looping samples with a zero loop-end address. Fixed backwards looping mode so that it initially reads forward until encountering the loop-start address. Preliminary but reasonable-sounding FM support. Fixed overflow in frequency calculation. Improved FM, but it's disabled for now because it doesn't sound right yet. Improved DSP wet/dry mix (should be correct now). Fixed a minor LPSLNK problem.
- 0.121u4            : SCSP updates [kingshriek]: Added effect-in mixer. Added DSP floating-point support. Added bounds check to the DECAY1 EG output. Fixed the saw PLFO waveform. Fixed loop points so loops no longer go out of tune/include garbage samples.
- 0.121u3            : SCSP improvements [kingshriek]: Added logarithmic envelope table. Set envelope level to start at 0x17f in the ATTACK state (0x3ff-0x280) as per Neill's notes. Changed EG_SHIFT from 8 to 16 - more precision is needed to differentiate the longer decay envelope times. In the DECAY1-->DECAY2 transition, changed the "<=" to "<". Decreased the output of the effect out mixer a bit. Fixed unaligned 16-bit samples. Prevented keyoffs from killing slots when already in the release state. Envelope steps in the attack state are apparently exponential. To account for this, I change the envelope output to linear for attacks. Change the release rate calculation to use the decay table instead of the attack one.
- 0.120u4            : SCSP fixes [kingshriek]: Fixed DECAY1 envelope state to not exit immediately. Improved support for LPSLNK and SBCTL. Fixed panning calculation bug. Fixed case where key-rate scaling is off.
- 0.120u3            : Some build-related improvements to the sound cores [Atari Ace]: The SCSP dependency on mame\drivers\saturn.c was removed allowing it to built independent of the driver.
- 0.120u1            : R. Belmont fixed a corner case in the SCSP involving timers which are polled with their IRQ enable shut off.
- 0.119u4            : More SCSP improvements [El Semi]: Fixed endianness issue on 8-bit samples and added interpolation. Disabled modulation attempt (should fix the crash problems). Tweeked pitch calculation.
- 0.119u3            : R. Belmont fixed broken SCSP from last update.
- 0.119u2            : SCSP improvements [R. Belmont, ElSemi]: Fixed issue with changing the pitch of an active voice set to backwards or bidirectional loop. Removed fake reverb. Fixed internal DSP to operate properly. Rewrote timers and interrupt handling. Fixed operation when 2 SCSPs are present.
- 25th September 2007: R. Belmont - ElSemi and I have been fixing up the SCSP emulation in MAME lately due to the emergence of .SSF (Saturn/ST-V) music rips. He's still working out why samples in Radient Silvergun get overdriven all to heck, but in the meantime I've done the following: * Fixed the effects DSP to work properly in MAME - the kick drum in Shienryu now has the proper reverb applied, and this fixes missing sounds/instruments in several ST-V games. It also fixed a Saturn Qsound demo disc that boots over in MESS. * Rewrote the timers to use MAME timers. This fixes missing sound in a few ST-V games and gives Die Hard Arcade correct tempo. It also eliminates the IRQ storms you may have seen running ST-V games with -oslog. * Fixed some IRQ trouble. This got sound working again in Model 2A games, like Dead or Alive.
- 0.119u1            : SCSP fixes [R. Belmont]: Fix writes to the hole in the SCSP address space (0x430 to 0x5ff) to not trash global registers. Fixed SCSP DMA to not read random memory for its' registers.
- 0.113u4            : R. Belmont fixed crashes in some games using the SCSP.
- 0.113u3            : David Haywood fixed crashing bugs in SCSP emulation.
- 0.112              : R. Belmont fixed SCSP DSP RAM initialization.
- 0.111u6            : Added sound\scspdsp.c/h. ElSemi added preliminary support for the built-in effects DSP in the SCSP, which lots of games use for reverb, QSound and other effects.
- 0.97u1             : Ville Linde fixed a minor bug in the SCSP timer handling.
- 0.93               : Changed description to 'SCSP'.
- 0.88               : Fixed undersized array causing stack trashing in YMF292-F SCSP (thanks to Mame32Plus).
- 0.81u9             : SCSP Update [ElSemi]: Fixed envelope rates to be correct. Added key rate scaling support. Added ringbuffer support.
- 0.77u3             : SCSP updates [Elsemi, R. Belmont].
-  3rd December  2003: ElSemi added support for per-voice gain parameters in the SCSP sound core, improving the sound balance.
- 0.77u2             : SCSP fixes (improves music in some games a little) [ElSemi / R. Belmont].
- 27th November  2003: ElSemi fixed the erratic static sounds in the SCSP sound core.
- 26th November  2003: R. Belmont and ElSemi fixed various bugs in the SCSP sound core, improving the sound greatly in the ST-V driver.
- 0.76u2             : R. Belmont fixed SCSP crash with -nosound.
- 0.76u1             : Added sound\scsp.c/h and sound\scsplfo.c. Ported ElSemi's SCSP core, this gives preliminary sound in the ST-V games, however at the moment most of them play static, Shienryu is mostly correct [R. Belmont].
- 25th October   2003: R. Belmont added ElSemi's SCSP sound chip emulator to the ST-V driver, but the sound and music only works properly in Shienryu.
- NOTES: SCSP = Saturn Custom Sound Processor. This chip has 32 voices. Each voice can play a sample or be part of an FM construct. Unlike traditional Yamaha FM chips, the base waveform for the FM still comes from the wavetable RAM. Unsupported: FM mode (no known Model 2/3, Saturn, or ST-V game uses it) and on-board programmable DSP and related functionality.
- PCB: 315-5687, QFP128   YMF292-F LAKE (DeadOrAlive, Harley)
- DRIVERS: coolridr.cpp, flashbeats.cpp, model2.cpp, model3.cpp and stv.cpp
- SOURCE: sound\scsp.cpp + sound\scspdsp.cpp



S5.48  AICA

- 0.255              : Fixed EXTS[1] routing (sound\aica.cpp) [Angelo Salese].
- 0.240              : $2814 CA reads doesn't need shifting, fixes ADX repeating sample/hang bugs in many entries [Angelo Salese, MetalliC]. Streamlined logging across chips to use logmacro.h, removed popmessages and printfs in production code (sound\aica.cpp) [Angelo Salese].
- 0.239              : Removed code smell on LP flag read [Angelo Salese]. Patched up code that was rotting behind UNUSED_FUNCTION and switched to [[maybe_unused]] attribute (sound\aica.cpp) [Vas Crabb].
- 0.225              : Converted AICA sound device to new callbacks [Aaron Giles].
- 0.209              : Minor correction. Added notes. Removed some unused/unnecessary values. Implemented 18bit output [AJR]. Converted PCM/DSP memory access to device_rom_interface. Fixed code styles and some namings. Reduced unnecessary lines and unused values. Use shorter/correct type values. Simplified handlers (AICA and AICADSP). Added save state. device_memory_interface'd memory handlers. Reduced memset [cam900].
- 0.201              : Changed description to 'Yamaha AICA'. Added input clock related to sample rate. Implemented MONO/MVOL and EXTS mixing [cam900].
- 0.198              : Changed register names to match development manual, documented unimplemented registers and flagged imperfect features [cam900].
- 0.177              : Added ADPCM diff value clamp based on encoder research [kode54, MetalliC].
- 0.161              : ADPCM looping (DC swirl sound) and address masking (Red Dog) fixes (sound\aica.c) [MetalliC, Wind].
- 0.153              : Removed sound\aicalfo.c. EFREG is mapped every other word, not every word (sound\aica.c). Fixes memory trashing in all NAOMI/DC/AW games [O. Galibert, R. Belmont]. Rewrite AICA to modern device [Miodrag Milanovic].
- 0.150              : Added machine\aicartc.c/h. Small DEVICE_STOP cleanup in sound\aica.c [Oliver Stoeneberg]. Implemented DMA. Hooked up AICA-to-SH-4 irqs. Device-ized AICA RTC device, passes RW comp test, doesn't pass clock test. Fixed AICA DSP. Fixed ARMRST behaviour. Fixed ARMRST behaviour (machine\dc.c) [Angelo Salese].
- 0.141u3            : Correct AICA slotmon readback. Streaming sounds now advance in e.g. capsnk [R. Belmont].
- 0.137u4            : AICA updates: [PluginNinja]: Implemented slot monitor. Improved ADPCM looping. General cleanup.
- 0.131u2            : Angelo Salese improved the debugging on the NAOMI Wave DMA handler and commented out the ACIA irq, was causing missing bgms in Street Fighter Zero 3 Upper.
- 0.128u3            : AICA update [R. Belmont, Deunan Knute, kingshriek]: Fixed missing instruments in DTPK driver games. NAOMI update [R. Belmont]: Unmapped words in the AICA address range must read as zero.
- 0.128u1            : Kingshriek fixed AICA sample addressing for the full 8 MB.
- 0.126u3            : AICA updates [Deunan Knute, ajax16384, R. Belmont]: Fixed ADPCM decoder to remove bad optimization and match YMZ280B. DC offset is fixed and output quality is higher. Improved handling of slot monitor and timers B and C. Simplified interpolation code.
- 0.125              : Kingshriek fixed an envelope corner case in the AICA.
- 0.124u1            : Fixed encoding/decoding of negative denormal floats in the AICA/SCSP DSP. Shouldn't actually affect any games [kingshriek, Deunan Knute].
- 0.123u6            : Zsolt Vasvari fixed AICA memory leak.
- 0.123u2            : Added sound\aica.c/h, aicadsp.c/h and aicalfo.c. Added and hooked up AICA (NAOMI sound chip). NAOMI boot sounds now play. Since it's an SCSPx2 with ADPCM instead of FM it's already feature-complete except filter envelopes. A bug in the ARM7 core causes incorrect pan/level values to be computed in e.g. the NAOMI SOUND TEST menu. This is not a defect in the AICA [ElSemi, Deunan Knute, kingshriek, R. Belmont].
- 20th February  2008: R. Belmont - Samuele Zannoli is at it again. Here's a few SH-4 bugfixes and NAOMI I/O board improvements later... I've also further improved the NAOMI audio emulation. No new samples this time, sorry.
- 17th February  2008: R. Belmont - A couple of nice coincidences linked together today. First up, I submitted the AICA core to MAME so NAOMI now has sound. Secondly, MAME Italia dumped the NAOMI game Toy Fighter, which successfully gets into it's test mode (gameplay doesn't work). Test mode includes the sound test, and here's what it sounds like (http://rbelmont.mameworld.info/naomi.mp3), with the "load times" cut out to make things managable. The first thing you hear is the NAOMI boot chimes - they're supposed to not be very loud, so do not crank your volume when you hear them. After that is song #1 in Toy Fighter's sound test.
-  8th February  2008: R. Belmont - I'm working on emulation of the AICA (the Dreamcast/NAOMI/Hikaru sound chip) behind the scenes with kingshriek and Deunan Knute (the Makaron author). Since AICA is basically an SCSP with double the voices and a few feature tweaks the obvious basis was MAME's now reference-quality SCSP emulation. That's allowed us to get to a pretty good state in a short amount of time. The ADPCM sample type isn't quite right yet, but the basic functionality and effects DSP are working. You can take a listen to the current code playing a piece from Sakura Taisen 4 right here (http://rbelmont.mameworld.info/sakutai4.mp3). Note: This is via a DSF rip, it doesn't mean Dreamcast works in MESS.
- NOTES: The AICA (NAOMI sound chip) is effectively a 64-voice SCSP, with the following differences: No FM mode. A third sample format (ADPCM) has been added. Some minor other tweeks (no EGHOLD, slighly more capable DSP).
- DRIVERS: hikaru.cpp, mosaic.cpp and naomi.cpp
- SOURCE: sound\aica.cpp



S5.5   YMZ280B

- 0.245              : Removed C89-style variable declarations in sound\ymz280b.cpp when noticed [Ryan Holtz].
- 0.227              : Fixed major mixer overdriving [R. Belmont]. Rebalance sound after YMZ280B change (drivers\firebeat.cpp, gunpey.cpp, konamim2.cpp, realbrk.cpp, tecmosys.cpp, vgmplay.cpp and zn.cpp) [David Haywood].
- 0.225              : Update YMZ280B sound to new stream callbacks [Aaron Giles].
- 0.223              : Modernized save state. Fixed frequency calculation. Allow side effects. Reduced unnecessary defines. Use shorter/correct type names. Fixed spacings. Added notes [cam900]. Fixed YMZ280 breakage [MetalliC]. Better fix for signed arithmetic issue [AJR].
- 0.207              : Removed unnecessary arguments in handlers [cam900].
- 0.206              : Reduced logging spam [AJR].
- 0.195              : Added device_rom_interface to YMZ280B instead external memory handlers [cam900].
- 0.188              : Implemented device_clock_changed [AJR].
- 0.186              : Changed description to 'Yamaha YMZ280B PCMD8'.
- 0.153              : Make special case voice-stop return value clearer [hap].
- 0.151              : Preliminary YMZ280B master volume control for DECO MLC HW [Angelo Salese].
- 0.149u1            : hap fixed Scorpion 4 sound regression and updated note (sound\ymz280b.c).
- 0.149              : Clear variables to avoid random crashing. Fixed YMZ280B irq timer regression. Better safe than sowwy (irq_state_timer). Added YMZ280b readlatch (dummy read is documented by Yamaha). Fixed YMZ280B compile error regarding reordering variables. Had to changed 16bit PCM again after removing firebeat hack. Small fix with ext mem write (no game uses it tho) [hap]. Added YMZ280 sound emulation to Heaven's Gate [smf, hap].
- 0.148u5            : Modernised YMZ280B. Overides device_post_load instead of post_load (sound\ymz280b.c/h, drivers\backfire.c, bfm_sc4h.c, bfm_sc5.c, bfm_swp.c, bishi.c, cave.c, coinmvga.c, deco156.c, deco_mlc.c, firebeat.c, galpani3.c, gunpey.c, jchan.c, maygayep.c, midas.c, realbrk.c, seibuspi.c, sigmab98.c, suprnova.c, tecmosys.c, tetrisp2.c, toaplan2.c and zn.c). Clears variables to avoid random crashing [smf].
- 0.147u4            : hap improved external memory handling (firebeat still needs that hack tho) (sound\ymz280b.c).
- 0.147u3            : Quick fix for clone 'ParaParaParadise 1st Mix Plus' static YMZ280B sound. Get rid of "YMZ280B 16-bit PCM contact MAMEDEV" popmessage [hap].
- 0.143u4            : Several minor YMZ280B fixes [hap], including the issue that caused glitched sfx in tecmosys.c tkdensho and deroon.
- 0.130u2            : Cs9ph7Rg0 added ymz280b_r to E-Jan Sakurasou memory map to prevent musics to stop while playing.
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the YMZ280B sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.102u4            : Ville Linde added external ram read and write handlers and data read port to YMZ280B.
- 0.99u2             : R. Belmont added support for "external memory address" registers on the YMZ280B, which can be used to read the contents of attached ROM or RAM.
- 0.93               : Sound System update: This code is just terrible now compared to when I first wrote it! [Aaron Giles].
- 17th April     2004: R. Belmont cleaned up Shiriru's YMZ280B update which has a little more accurate sound generation, fixing a music looping bug in the Super Kaneko Nova System driver.
- 12th December  2001: Aaron Giles fixed the crackling sounds in the YMZ280B sound chip emulation.
- 0.37b11            : Some fixes to YMZ280B emulation [Shiriru].
- 12th December  2000: Shiriru submitted a few more fixes to the YMZ280B sound core.
-  6th December  2000: Shiriru submitted yet another Cave update with it's own sprite drawing functions and a fix to the YMZ280B sound core.
- 0.37b10            : Bernd Wiebelt fixed a YMZ280B bug that caused bad sound in the Cave games.
- 23rd November  2000: Bernd Wiebelt and Aaron Giles fixed several problems in the YMZ280B sound core.
- 0.37b5             : Added sound\ymz280b.c/h. YMZ280B sound emulation, used by the Cave games [Aaron Giles].
- 27th June      2000: Aaron Giles sent in an update to the YMZ280B sound core with much better sound output.
- 22nd June      2000: Aaron Giles sent in a preliminary YMZ280B sound core, adding sound to Dangun Feveron, ESP Ra.De. and Uo Poko.
- NOTES: YMZ280B is a 8 Channel PCM/ADPCM decoder
- PCB: YMZ280B-F, QFP64 (Bbakraid), YMZ280B  MONAURAL OUTPUT (Bishi), YMZ 280 B-F (Tetrisp2)
- DRIVERS: backfire.cpp, bfm_sc4.cpp, bfm_sc5sw.hxx, bfm_swp.cpp, bishi.cpp, calcune.cpp, cave.cpp, coinmvga.cpp, deco156.cpp, deco_mlc.cpp, firebeat.cpp, galpani3.cpp, gkigt.cpp, gunpey.cpp, jchan.cpp, konendev.cpp, konmedal68k.cpp, maygayep.cpp, midas.cpp, realbrk.cpp, seibucats.cpp, sigmab98.cpp, suprnova.cpp, tecmosys.cpp, tecmosys.cpp, toaplan2.cpp, yuvomz80.cpp and zn.cpp
- SOURCE: sound\ymz280b.cpp



S5.51  YMZ284

- 0.187              : Changed description to 'YMZ284 SSGL'.
- 0.183              : Replaced AY-3-8910A sound with YMZ284 in Double Crown [AJR].
- 0.114u4            : Aaron Giles added several AY8910 variants (AY8912, AY8913, AY8930, YM2149, YM3439, YMZ284 and YMZ294) so we can better specify the use of compatible but slightly different chips.
- NOTES: This chip is in place where a 40 pin chip is marked on PCB, possibly a replacement for some other 40 pin YM chip or a dummy chip?  MAME uses in Don Den Lover a AY-3-8910 for it !?
- PCB: YMZ284-D, DIL16 (Ddenlovr)
- DRIVERS: dblcrown.cpp
- SOURCE: sound\ay8910.cpp



S5.52  YMZ770

- 0.266              : Added decode of "AMMSL" type sample for YMZ770B [MetalliC].
- 0.236              : Use std::clamp for clamping (sound\ymz770.cpp) [AJR].
- 0.225              : Update YMZ770 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.217              : Initialized stuff in sound\ymz770.cpp [Osso].
- 0.194              : Updated documentation and tidied up [MetalliC].
- 0.193              : Implemented CHAN/SEQ "keep playing" command, document other known SPU in this series [MetalliC].
- 0.192              : Changed description to 'Yamaha YMZ770C-F AMMS-A'. Added pan, main volume level and clip limit control. Added 2nd volume control and notes [MetalliC]. Renamed "elem" for readability [hap].
- 0.186              : Changed description to 'Yamaha YMZ770 AMMS-A'.
- 0.152              : Fixed YMZ770 cur_reg being overwritten. This chip is write-only. Document global regs. Fixed possible lockup. Added notes. Stop channel decoder when stopping playback. Finish block before stopping channel playback [hap].
- 0.148              : Splitted AMM decoder from YMZ770 and added MPEG layer 1/2 support [O. Galibert].
- 0.143u8            : Added sound\ymz770.c/h. Preliminary emulation of the YMZ770 sound chip [R. Belmont, O. Galibert, MetalliC].
- 10th May       2011: MetalliC - Demul WIP: After few weeks of hard reverse engineering we finally got fully working Yamaha AMM codec, so Cave CV1000 games emulated now with sound and music - Deathsmiles (Cave 2007) and Mushihime-sama Futari (Cave 2006).
- NOTES: Yamaha AMusement Machine compression (AMM) is a proprietary compressed music format. AMM is common on modern pachinko machines and stuff. The most common chip used for AMM playback is the Yamaha YMZ770C. Cave SH3 games have AMM music and use this chip for playback.
- DRIVERS: alien.cpp, cv1k.cpp, segaatom.cpp and winclub.cpp
- SOURCE: sound\ymz770.cpp


S5.53  YMZ774

- 0.209              : Calculate volume table [MetalliC].
- 0.193              : Added sequencer, blind work based on KOF98UM rom data, not tested at all. Assume each sequencer have its own current bank. Implemented SQC thing on top of sequencers, fix sequencers timers setup. When SQC stopped stop SEQ too, make SEQ/SQC save state-friendly and cleanup. Added volume delayed transition and handle CHAN/SEQ pause/resume [MetalliC].
- 0.192              : Preliminary Yamaha YMZ774 emulation [MetalliC].
- NOTES: Yamaha YMZ774-S AMMS2
- DRIVERS: pgm2.cpp
- SOURCE: sound\ymz770.cpp



S5.6   AY-3-8910A

- 0.278              : Removed unneeded set_volume (update the few drivers that use it to set_output_gain) (sound\ay8910.cpp; cinematronics\cinemat_a.cpp, midway\midway.cpp, pinball\icecold.cpp, shared\ballysound.cpp and zaccaria\zaccaria_a.cpp) [hap].
- 0.272              : Pass outputs high-impedance state with mem_mask [hap].
- 0.265              : Suppress configuration warnings [AJR].
- 0.258              : Reorder documentation [hap].
- 0.251              : Added machine().describe_context() to some logerror [hap].
- 0.227              : Removed old printf msg [hap].
- 0.225              : Update AY8910 sound to the new stream update callback [Aaron Giles]. Reduced performance when expanded mode is enable and fixed noise rate regression [cam900].
- 0.217              : Modernized struct member save state registration [AJR].
- 0.214              : Added feature value for chip specific features. Added runtime pin26 handler. Use struct for tone and envelope. Reduced defines and unnecessary lines. Fixed naming and spacings. Added notes. Reduced performance issue [cam900]. Don't play fast and loose with register initialization; some builds warn about that [AJR].
- 0.207              : Use shorter/correct type values. Removed unnecessary arguments in handlers [cam900].
- 0.188              : Improved -romident performance by dynamically allocating large arrays at device_start time (sound\ay8910.cpp) [Phil Bennett].
- 0.187              : Changed description to 'AY-3-8910A PSG'. Added pinout and removed outdated comments from .h. Updated/fixed documentation and comments and added additional pinouts and links to decaps and documentation [Lord Nightmare, AJR]. Fixed device_clock_changed to respect the YM2149_PIN26_LOW flag. Fixes sound pitch is too high in Arkanoid, clones and Tournament Arkanoid [Lord Nightmare]. Document device names [AJR].
- 0.184              : Added a AY-3-8910 write handler for the case of bc1=a0 and bc2=a1. Fixed audio hookup in Popper (BC1 is hooked up to A0 on the host and BC2 is hooked up to A1) [Dirk Best]. Added guide to bus control signals [AJR]. Overrided device method to support changing clock frequencies in the AY8910. Added virtual keyword to declaration [Tim Lindner].
- 0.179              : Mention the OKI M5255, Winbond WF19054, JFC 95101, File KC89C72 and Toshiba T7766A as compatible / clone (sound\ay8910.h) [Osso]. Implement upper address check, not configurable at present but chips could be ordered from the factory with ID's other than 0. Allowing you to chain multiple chips without adding extra address lines. Don't hardcode AY8910 into logerror, using name() instead [smf].
- 0.178              : Slight improvements to AY8910 error logging, with some messages now disabled by default [AJR].
- 0.175              : Use osd_printf_verbose instead of popmessage in AY-3-8910 [AJR].
- 0.163              : Left a comment in sound\ay8910.c about I/O ports A and B. The I/O ports are designed as open collector outputs. Bits 7 and 8 of AY_ENABLE only enable (low) or disable (high) the pull up resistors. The YM2149 datasheet specifies those pull up resistors as 60k to 600k (min / max). We do need a callback for those two flags. Kid Niki (Irem M62) is one such case were it makes a difference in comparison to a standard TTL output [Couriersud].
- 0.156              : Fixed undefined behavior in AY-3-8910 initialization. Try zero-initializing dynamic array. Only build the table that will be actually used (per-channel or pre-mixed) [Alex Jackson].
- 0.154              : Cleanup of AY8910 this makes move to DEVCB2 possible, also now have better idea how to solve legacy STREAM_UPDATE [Miodrag Milanovic]. Converted ay8910_device and extended family to DEVCB2 [Osso]. Provide chip-specific details (number of outputs, number of usable IO ports) in constructor for each variant. AY8910 uses m_zero_is_off(1) constructor [Alex Jackson]. For AY891X emulate vol-0 resistor as infinite. Document recent measurements done on the AY8910. Updated information about measurements and model derived from those. AY8910_RESISTOR_OUTPUT now selects resistance calculation by simple saturation MOSFET model in ay8910.c. Currently only 1942 and Popeye use this. USE 64bit intermediary results in sound_stream::generate_resampled_data. This will allow sound drivers to make use of the full width of stream_sample_t (emu\sound.c). Adjusted maximum value suitable for streaming and removed some dead code (sound\ay8910.c) [Couriersud]. Silence compiler warning (sound\ay8910.c) [Wilbert Pol].
- 0.153              : Fixed noise period on AY8910 (see http://privatfrickler.de/blick-auf-den-chip-soundchip-general-instruments-ay-3-8910/) [Dr. Venom, Couriersud]. Added option AY8910_RESISTOR_OUTPUT to AY8910. This will output internal resistor values instead of computed voltages. To be used with netlist output stages [Couriersud].
- 0.150              : Setname corrections to further expand XML device coverage (sound\ay8910.c) [Tafoid].
- 0.148u5            : Modernised the AY8910. Simplified ay8910_start_ym now that all sound chips that use it are devices (sound\2203intf.c, 2608intf.c, 2610intf.c, ay8910.c/h) [smf].
- 0.144u3            : Added ay8910_reset_w() function, used by Joyful Road / Munch Mobile for resetting the AYs on-the-fly. Fixes substained sounds in the aforementioned game [Lord Nightmare, Angelo Salese].
- 0.141              : AY-3-8910 unused bits in registers read back as 0.
- 0.130u1            : AY-3-8910 improvements [Couriersud]: Fixed Gyruss audio regression. Measured RU and RD on AY-3-8910. Modelled ZX Spectrum audio circuit in SwitcherCAD and derived resistor values for AY-3-8910. Fixed any game that uses AY-3-8910: Envelope Fix causes notes tones to be played back incorrectly.
- 0.128u5            : Aaron Giles fixed wrong audio tempo in some drivers with Z80/AY8910.
- 0.127u5            : Couriersud fixed Leland AY8910/12 output combining.
- 0.124u5            : Couriersud fixed AY-3-8910/YM2149 and derivatives envelope handling.
- 0.124u4            : AY-3-8910 rewrite [Couriersud]: Added a model to calculate mixing of channels with different resistance loads. Based on above, each channel may be assigned a different load in individual case, i.e. channels not tied together. Rewrote ay8910.c to make emulation simpler. Changed the config structure to include a flag field and output resistor loads. Updated all drivers affected. Added some "Todos" related to stuff I discovered when reading datasheets. Fixed a bug in disc_flt.c (konami filters). Fixed discrete sound and konami filter addressing in galaxian driver. Also changed addressing of AY-3-8910 to be in line with schematics.
- 0.114u4            : Changed description to 'AY-3-8910A'. Aaron Giles added several AY8910 variants (AY8912, AY8913, AY8930, YM2149, YM3439, YMZ284 and YMZ294) so we can better specify the use of compatible but slightly different chips.
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the AY8910 sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.93u1             : AY8910 no longer attempts to free memory allocated with auto_malloc [Aaron Giles].
- 0.93               : Changed description to 'AY8910'. Aaron Giles cleaned up the AY8910 interface for the YM chips to access this.
- 0.88               : Added save state support for AY8910 (thanks to Mame32Plus).
- 0.71               : Jarek Burczynski improved AY8910 noise generator.
- 30th June      2003: Jarek Burczynski and Olivier Galibert fixed the AY-3-8910 noise generator.
- 0.62               : Changed description to 'AY-3-8910'.
- 26th May       2002: Nicola Salmoria added a resample filter to the AY8910 emulator, but there isn't much of a quality improvement.
-  5th May       2002: Nicola Salmoria fixed the AY8910 emulator which caused missing sounds in some Irem M-62 system games.
- 30th November  2001: Aaron Giles improved the handling of AY8910 and YM2203 simultaneously.
- 0.55               : Tatsuyuki Satoh added support for using AY8910 and YM2203 at the same time, fixing sound in City Connection.
- 16th August    2001: Zsolt Vasvari fixed AY8910's behaviour with Lock'n'Chase.
- 0.36b15            : Removed sound\ay8910u.c. Source: Added gain support to mixer.c, through the new MIXERG() macro (extension of MIXER()). Removed the gain filed from AY8910, YM2203, YM2610 structures.
- 0.35b9             : Removed sndhrdw\8910intf.h.
- 0.35b2             : Zsolt Vasvari added Centipede (bootleg with AY8910 instead of Pokey).
- 0.34b4             : Changed sndhrdw\psg.c/h and psg.txt to sndhrdw\ay8910.c/h and ay8910u.c.
- 0.34b2             : Tatsuyuki Satoh updated the FM emulation and the way the 8910 updates its buffers.
- 0.33b7             : Nicola Salmoria changed the AY8910 emulation to generate three separate audio streams for the three channels instead of premixing them. This improves audio quality, increases the volume, and doesn't seem to affect performance too much.
- 0.31               : AY8910 support 16 bit samples as well [Tatsuyuki Satoh].
- 0.30               : Tatsuyuki Satoh, Fabrice Frances, Nicola Salmoria and Pete Ground completely rewritten the 8910 emulator and interface. This affects a lot of games, but the one which benefits more is Gyruss: it now plays many sound effects which were missing. Nicola Salmoria changed the way 8910 sound is updated: There's no longer a fixed "updates per frame" value defined in the driver, instead the audio is stream is generated whenever a chip register is written to (and at every vblank). This improves sound quality in several games.
- 0.27               : Changed the 8910 sound chip emulation interface to allow updates more frequent than 60 per second [Nicola Salmoria]. I also increased the sampling frequency to 44.1kHz. These changes provide dramatic improvements in sound quality, which you can appreciate in e.g. Gyruss and Pooyan. The price to pay is slower execution. To make things worse, I had to (hopefully temporarily) remove some optimizations, so the above games will probably not run as well as before on slower systems.
- 0.20               : Changed 8910intf to support 5 PSGs (Gyruss have them!). 8910_sh_update() doesn't emulate the 8910 audio if sound is disabled [Nicola Salmoria] (the I/O ports of the chip are still emulated, since some games use them for input).
- 0.18               : Nicola Salmoria fixed bug in the 8910 emulation which caused noise to be played in Crazy Kong when you jumped over a barrel.
- 0.16               : Nicola Salmoria wrote some general purpose routines to simplify interface with the AY8910. They are in 8910intf.c. See the existing drivers for usage examples.
- 0.13               : Nicola Salmoria modified the 8910 emulator to set the clock frequency at run time, so sound in Crazy Climber and Crazy Kong is now back as normal.
- 0.12               : Since the 8910 emulator doesn't allow to set the clock frequency at runtime [Nicola Salmoria], I temporarily switched to using the default one. This affects sound in Crazy Climber, Crazy Kong and Bagman. Let me know whether it's better or worse than before.
- 0.05               : By popular demand, reverted to the old AY-3-8910 emulation code [Nicola Salmoria].
- 0.04               : New experimental AY-3-8910 sound emulation code provided by Andy Milne. This sounds better in some places and worse in others. It is used by Crazy Climber, Crazy Kong and Bagman.
- 0.02               : AY-3-8910 emulation by Ville Hallik and Michael Cuddy. Based on Sound.c from Marat Fayzullin's fMSX distribution, original source by Ville Hallik 1996. Michael Cuddy working on emulator for the classic video game Gyruss. Gyruss, along with many other video games of the early to mid 1980's (the golden age of video games, IMHO), used a programmable sound generator (PSG) chip from General Instruments called the AY-3-8910. The 8910 PSG is capable of generating three voices, with limited envelope control as well as a random "noise" channel. The 8910 also has two 8-bit I/O ports which could be read under program control. There were two other chips in the family, the AY-3-8911, and AY-3-8912. Both of these chips are identical to the 8910 from the programmers perspective, with the exception that the 8911 only had 1 I/O port and the 8912 had none. The 8910 (the real one), maintains a set of 15 registers internally. Programming these registers is done through two or three memory mapped or I/O mapped locations. The first location (Base+0x00) is a latch into which a register number is written. The second location (Base+0x01) can then be written to update the value of a register. The third location (Base+0x02) can be read to fetch the value of a register. Some hardware implementations will map the second two locations onto the same address so that a read or a write to a single locations "does the right thing". The actual values that should be programmed into these registers is beyond the scope of this document. Datasheets are available from Jameco Electronics (which also still stocks this part -- although the part is out of production: ones that I bought on 12/1996 were made in mid 1984 so Jameco may not have them for long. I have a copy of the datasheet, and I might put it up on my web site if my scanner decides to cooperate. If you are writing an emulator (and you probably are, since this code is of limited use to anyone else), you need to study the schematic or ROMS of the machine that you are trying to emulate to determine which memory address or I/O port the PSG(s) are mapped to.
- GAMES: Crazy Climber (Nichibutsu 1980), Moon Patrol (Irem 1982), Hole Land (Tecfri 1984)
- PCB: AY8910, AY-8910, AY3-8910, AY-3-8910A, AY-3-8912 (Bcruzm12, Boomrang, Offroad, Skylancr), AY38910/P (Fortecar), GI AY-3-8910 (Wtennis), GI AY-3-8913 (Mach3), GI8910 (Speakres), 8910/8912 combo (Carnival), AY3-8912 (Quizmstr)
- PCB: AY-3-8910 compatible ==> Winbond 95101 DIP40 (Mjchuuka, Mjdchuka), OKI M5255 9203 (Ampoker2)
- DRIVERS: 1942.cpp, 40love.cpp, 4enlinea.cpp, 4roses.cpp, 5clown.cpp, 8080bw.cpp, aces1.cpp ...
- SOURCE: sound\ay8910.cpp



S5.61  AY-3-8912A

- 0.207              : Use shorter/correct type values. Removed unnecessary arguments in handlers [cam900].
- 0.187              : Changed description to 'AY-3-8912A PSG'.
- 0.154              : AY8912 is AY8910-based, not YM2149-based [Alex Jackson]. For AY891X emulate vol-0 resistor as infinite [Couriersud].
- 0.114u4            : Aaron Giles added several AY8910 variants (AY8912, AY8913, AY8930, YM2149, YM3439, YMZ284 and YMZ294) so we can better specify the use of compatible but slightly different chips.
- NOTES: D-Day (Olympia 1982) uses two GI 8912  -> MAME uses two AY-8910.
- DRIVERS: ambush.cpp, astrocde.cpp, bfm_sc1.cpp, bfmsys85.cpp, calomega.cpp, corona.cpp, drw80pkr.cpp, fireball.cpp, kingpin.cpp, nsm.cpp, omegrace.cpp, peplus.cpp, splus.cpp, tugboat.cpp, vectrex.cpp, vicdual.cpp, vlc.cpp and wink.cpp
- SOURCE: sound\ay8910.cpp


S5.62  AY-3-8913

- 0.207              : Use shorter/correct type values. Removed unnecessary arguments in handlers [cam900].
- 0.187              : Changed description to 'AY-3-8913 PSG'. Added AY-3-8913 diagram [Lord Nightmare].
- 0.154              : AY8913 is AY8910-based, not YM2149-based [Alex Jackson]. For AY891X emulate vol-0 resistor as infinite [Couriersud].
- 0.115u1            : James Wallace correct the pulse shape of the timer output in the MPU4 driver, and also correctly identified the AY sound chip as an AY8913.
- DRIVERS: gottlieb.cpp, mpu4.cpp, mpu4avan.cpp, mpu4crystal.cpp, mpu4mdm.cpp, mpu4mod2sw.cpp, mpu4plasma.cpp, mpu4sw.cpp, mpu4union.cpp and mpu4vid.cpp
- SOURCE: sound\ay8910.cpp


S5.63  AY-3-8914

- 0.207              : Use shorter/correct type values. Removed unnecessary arguments in handlers [cam900].
- 0.187              : Changed description to 'AY-3-8914A PSG'.
- 0.178              : Implement register readback masking for AY-3-8914 as used on (MESS) Intellivision [Lord Nightmare, Joe Zbiciak].
- 0.154              : For AY891X emulate vol-0 resistor as infinite [Couriersud].
- 0.143u7: Fix incorrect masking of register writes on AY-3-8914, fixes wrong envelope amplitude on games which use hardware enveloping on Intellivision (Thunder Castle, etc) [Huygens].
- DRIVERS: (MESS) intv.cpp
- SOURCE: sound\ay8910.cpp


S5.64  AY8930

- 0.237              : Improved AY8930 noise algorithm and simplify some logic [cam900].
- 0.214              : Implemented ay8930 expanded mode [cam900].
- 0.207              : Added notes for AY8930 expanded mode. Added mode register for debugging. Additional logs. Use shorter/correct type values. Removed unnecessary arguments in handlers (sound\ay8910.cpp) [cam900].
- 0.187              : Changed description to 'AY8930 EPSG'.
- 0.186              : Changed description to 'AY-3-8930A'.
- 0.171              : Replaced AY-3-8910A sound in MeritM driver with AY8930. Doesn't use AY8930 expanded mode [hap].
- DRIVERS: goldstar.cpp, meritm.cpp and wildpkr.cpp
- SOURCE: sound\ay8910.cpp


S5.65  KC89C72
- NOTES: Asian version of the integrated circuit AY-3-8910, unknown "File"/"Sile" manufacturer - http://www.007swz.cn/cpimg/diandongwanjuIC/LevK91DRsF_1252619119.jpg
- PCB: KC89C72 (Monglfir, Pool10, Soccernw)



S5.7   YAC513
- NOTES: The Yamaha YAC513-M is a Audio Digital to Analog (D/A) converter.
- GAMES: Desert War (Jaleco 1995), Strikers 1945 II (Psikyo 1997), Gunbird 2 (Psikyo 1998) and the Jaleco MegaSystem 32.
- PCB: YAC513-M  SOIC16 (Cbaj, Rdft)



S5.71  YAC515
- GAMES: GunBarich (Psikyo 2001)
- PCB: YAC515-M (Gnbarich)



S5.72  YAC516
- NOTES: The Yamaha YAC516 is a Audio Digital to Analog converter.
- GAMES: Billiard Academy Real Break (1998), Battle Bakraid (8ing 1999), Gaia Crusaders (Noise Factory 1999)
- PCB: YAC516-E  SSOP24 (Bbakraid), YAC 516-E (Brvblade), YAC516-M DAC  SOIC16 (Rfjet)



S5.8   XT446

- 0.284              : Added the SWP30 to the list of drc-using CPUs (scripts\src\cpu.lua) [O. Galibert].
- 0.282              : Removed sound\swp30d.cpp/h. Overhaul. Use util::sext and explicit specializations for std::clamp and std::min (sound\swp30.cpp) [O. Galibert]. Removed crashing debug fopen/fprinf and srcclean (sound\swp30.cpp) [R. Belmont].
- 0.272              : Added missing #pragma once (sound\xt446.h) [hap].
- 0.266              : Improved DPCM sample decompression (sound\swp30.cpp) [Theo Niessink].
- 0.263              : Readded the scount increment (sound\swp30.cpp) [O. Galibert].
- 0.262              : Tighten the wires that went loose (Pitch conversion table; sound\swp30.cpp). More routing (sound\swp30.cpp) [O. Galibert].
- 0.261              : Changed sound\megd.cpp/h to sound\swp30d.cpp/h. Use natural addresses, reorganized the meg and make envelopes and keyoff a little better. Corretly decompress the samples. Added lfo, correct issue in state readback making the program lose track of some samples. Added mixer, fixed a number of things and reverb (sound\swp30.cpp). Some fixes (sound\xt446.cpp). Small advances to the disassembler (sound\swp30d.cpp) [O. Galibert]. Assign address maps to correct space numbers (fixes validation errors) (sound\xt446.cpp) [AJR].
- 0.255              : Fixed typo (ADC_1 --> ADC_3) [O. Galibert].
- 0.241              : Added waverom reading to Yamaha SWP30 (sound\swp30.cpp) [O. Galibert].
- 0.234              : Start implementing something remotely looking like envelopes (sound\swp30.cpp) [O. Galibert].
- 0.231              : Make the stream synchronous, added dummy-ish internal register read and more logging (sound\swp30.cpp) [O. Galibert].
- 0.230              : Added sound\xt446.cpp/h. Added 'Yamaha XT446 synth (embedded MU100B)' device. Interface with the Yamaha XT446 (Embedded version of the MU-100B) to Keyboardmania [O. Galibert].
- 0.208              : Added sound\meg.cpp/h and sound\megd.cpp/h. Start adding the MEG to (MESS) ymmu100.cpp [O. Galibert].
- 0.205              : Added missing roms, also some WIP (MESS ymmu100.cpp) [Guru, O. Galibert]. Complete the MIDI ports and removed the gross hacks [O. Galibert].
- 0.204              : Added sound\swp30.cpp. Make some noise with mu100 (MESS ymmu100.cpp). Two sample roms are missing, sad. Volume is not taken into account yet (because the registers are not yet understood), pan is though. Don't even think about reverb or effects. Current code plays a scale in a loop. Comment the timer alloc in machine_reset to kill that. Demo song (missing lots of sounds, because roms): U then > until demo then ENTER ENTER [O. Galibert].
- NOTES: Yamaha SWP30 sound chip  +   Yamaha XT446 = 32-voice polyphonic/multitimbral General MIDI/GS/XG tone modules
- DRIVERS: firebeat.cpp
- SOURCE: sound\xt446.cpp + sound\swp30.cpp


S5.9   SW1000XG

- 0.263              : Added the very first firmware version (BIOS 1.00) [O. Galibert].
- 0.262              : Added pci\sw1000xg.cpp/h. Added a very temporary placeholder [O. Galibert].
- NOTES: Yamaha SW1000XG
- SOURCE: pci\sw1000xg.cpp



S6.    Bally/Midway/Sente

S6.1   Astrocade

- 0.225              : Converted Astrocade sound device to new callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.198              : Changed description to 'Astrocade Custom I/O'.
- 0.148u2            : Modernized Astrocade sound device [Andrew Gardner].
- 0.147              : Added 'Astrocade' device.
- 14th April     1999: Juergen Buchmueller fixed a Z80 bug which affected Astrocade emulation (on the MESS side).
- 0.34b4             : Added sndhrdw\astrocde.c/h. Emulation of the Astrocade sound chip (Extra Bases, Gorf, Robby Roto, Space Zap and Wizard of Wor) [Frank Palazzolo].
- NOTES: Driver by Frank Palazzolo. Portions copied from the Pokey emulator by Ron Fries
- SOURCE: sound\astrocde.cpp
- GAMES: Midway - Wizard of Wor (1980), Extra Bases (1980), Gorf (1981)


S6.2   CEM3394

- 0.284              : Allow self-oscillation when no waveforms are enabled (sound\cem3394.cpp) [m1macrophage].
- 0.283              : Improved CEM3394 and adapted sente6vb to the changes. Added and improved CEM3394 functionality relevant to the 'sixtrak' while working on audio for that. Sending as a separate PR to keep the scope manageable, given there are also changes to 'sente6vb'. Incidental improvements to 'sente6vb': "unlocked" some sounds. An obvious one is the post-tuning chirp for each voice during boot. Centered audio around 0. CEM3394 changes: Made VCO output range [-1, 1], instead of [0, 1]. Added pulse-width dependent DC level of pulse waveform, as described in the datasheet. Waveform selection logic now works for voltages outside the bounds provided in the datasheet. Both the sixtrak and sente6vb will some times use voltages outside those ranges. Added AC coupling between VCF output and VCA input. Forcing parameter computation in device_start(). Added ability to stream voltage inputs. The sixtrak needs that for the VCA gain and VCF frequency. New configuration interface: New configure() method computes VCO and VCF zero frequencies based on the attached passive components. Exposed method for enabling pulse-width limiting for drivers that need it. Now disabled by default. Fixed compilation for FILTER_TYPE_ESQ1. sente6vb changes: Using new CEM3394 configuration interface. Verified that it produces almost the same VCO and VCF zero frequencies. Reduced CEM3394->speaker gain to compensate for increased loudness of CEM3394. Old range: [0, 1]. New range: [-1, 1]. Added AC coupling to noise output. Also changed the noise->CEM3394 gain from 0.5 to 1.0, so that the relative loudness remains the same. Old range: [0, 1] x 0.5 = [0, 0.5]. New range: [-0.5, 0.5] x 1. Fixed "FREQENCY" typo and updated comments (sound\cem3394.cpp) [m1macrophage].
- 0.225              : Major rework. Updated CEM3394 sound to new stream callback. All calculations are now doing in floating point. External input is now done via an input stream. Switch CEM3394 to alternate filter that is more stable [Aaron Giles].
- 0.199              : Changed description to 'CEM3394 Synthesizer Voice'.
- 0.154              : Updated CEM3394 to use delegates and inline configs [Fabio Priuli].
- 0.148u2            : Modernized CEM3394 sound device [Andrew Gardner].
- 0.147              : Added 'CEM3394' device.
- 0.104u3            : Added oversampling and save state support to the CEM3394 emulator [Aaron Giles].
- 27th September 1999: Aaron Giles sent in a Bally/Sente driver update with Name That Tune and several Trivial Pursuit versions.
- 0.36b5             : Added sound\cem3394.c/h.
- 12th September 1999: Aaron Giles sent in a fairly minor update to the Bally/Sente driver, with 8-bit sound fix.
- NOTES: Curtis Electromusic Specialties CEM3394 uP-Controllable Synthesizer Voice
- DRIVERS: balsente.cpp
- SOURCE: sound\cem3394.cpp





S7.    Exidy SFX

- 0.277              : Use real 8253 PIT device rather than a local implementation, fixed class memory access error, cleaned up code to use virtual member functions idiomatically (shared\exidysound.cpp) [Vas Crabb].
- 0.257              : Clean up shared\exidysound.cpp. Replaced riot6532_device with mos6532_new_device and untangle exidy_sh8253_sound_device a bit [hap].
- 0.246              : Changed sourcefile to shared\exidysound.cpp.
- 0.226              : Update audio\exidy.cpp to new stream callbacks [Aaron Giles].
- 0.202              : Removed TMS5220 read/write handler trampolines (audio\exidy.cpp) [smf]. Get rid of double TMS5220 device read [hap].
- 0.199              : Added 'Exidy SFX+PSG+CVSD' device.
- 0.198              : Better split of state classes. Added device finders and input merger. General cleanup (audio\exidy.cpp) [AJR].
- 0.150              : Modernized the Exidy sound devices [Osso].
- 0.149u1            : Added 'Exidy SFX', 'Exidy SFX+PSG' and 'Exidy SFX+PSG+Speech' device.
- 0.141u3            : Added audio\exidy.h. Split part of the driver include into a separate multi-driver include file (audio\exidy.h) [Atari Ace].
- 0.117              : Zsolt Vasvari fixed regression in Exidy sounds.
- 0.112u1            : Lord Nightmare fixed the Exidy/Stern-SB1000 6840-based sound hardware to use what is believed (based on the schematic) to be the proper LFSR/PRNG waveform for its secondary clock source.
- 0.112              : Proper implementation of noise generator in the Exidy/Berzerk sound circuit [Lord Nightmare].
- 0.104u6            : Aaron Giles added oversampling support to the Exidy custom sound.
- 30th December  2002: Jim Hernandez fixed the noise emulation in the Exidy sound system.
-  2nd June      2000: Aaron Giles sent in a Star Fire / Fire One update, fixing more of the graphics glitches, and he sent in an Exidy sound system update.
- 22nd May       2000: Aaron Giles improved the Exidy sound system.
- 0.35b2             : Dan Boris made good progress in sound emulation of the Exidy games (Venture, Pepper 2, etc.).
- 0.34RC1            : Preliminary sound support in the Exidy games [Dan Boris].
- NOTES: Exidy SFX, Exidy SFX+PSG, Exidy SFX+PSG+CVSD and Exidy SFX+PSG+Speech
- DRIVERS: berzerk.cpp, exidy.cpp and victory.cpp
- SOURCE: shared\exidysound.cpp



S7.1   Exidy 440

- 0.233              : Eliminated remaining uses of auto_alloc and friends (audio\exidy440.cpp) [Aaron Giles].
- 0.226              : Update audio\exidy440.cpp to new stream callbacks [Aaron Giles].
- 0.150              : Oliver Stoeneberg removed some legacy interrupt trampolines (audio\exidy440.c). Disabled some more unused private members (audio\exidy440.h).
- 0.149u1            : Modernized Exidy 440 CVSD audio device [Osso].
- 0.141u3            : Added audio\exidy440.h. Split part of the driver include into a separate multi-driver include file (audio\exidy440.h) [Atari Ace].
- 0.123u6            : Zsolt Vasvari changed exidy440_sound_command back to "UINT8." Since it's used by both 8-bit and 16-bit systems, the automatic allocation is not worth it if you need an ugly UINT16 ** cast. Removed deprecat.h from some of the exidy files.
- 0.123u1            : Further altered the Exidy 440 code in preparation for moving to proper sound chip emulation [Zsolt Vasvari].
- 10th July      2003: Aaron Giles fixed the timer bugs that caused the exidy440 games to fail.
-  7th September 1999: Aaron Giles made the Exidy 440 sound output much clearer.
- 0.36b5             : Aaron Giles improved sound in the Exidy 440 games.
- 0.35b4             : Added exidy440.c driver and sndhrdw\exidy440.c.
- NOTES: The Exidy 440 sound system based on the Retrocade CVSD decoder by Zonn Moore and Neil Bradley.
- SOURCE: audio\exidy440.c (drivers\exidy440.c and vertigo.c)
- GAMES: Exidy - Crossbow (1983), Cheyenne (1984), Combat (1985), Top Gunner (Exidy) (1986) and Who Dunit (1988)





S8.    Namco

S8.1   Namco sound

- 0.276              : m_voices is a configuration parameter, so it shouldn't be part of the save state [AJR].
- 0.229              : Allow channels to still play with a frequency of 0 and allow writes to manipulate the counter directly for Namco 15xx (sound\namco.cpp) [AJR].
- 0.226              : Eliminated auto_alloc [AJR].
- 0.225              : Update Namco sound to the new stream update callback [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.154              : Converted Namco sound to use inline config [Fabio Priuli]. Fixed names and device_types of Namco WSG devices [Alex Jackson].
- 0.149u1            : Modernized the Namco sound device [Osso].
- 0.147              : Added 'Namco' device.
- 0.131u4            : Aaron Giles cleaned up Namco 5xxx docs, listing both MB88xx pin IDs and Namco custom IDs where appropriate.
- 0.131u3            : Removed includes\nam_cust.h.
- 0.119u3            : Added includes\nam_cust.h.
- 0.93u1             : Sound system update fixes. As an experiment, removed oversampling from namco.c now that the sound core will do it for you [Aaron Giles].
- 0.77u3             : Improved Namco Sound core [BUT].
-  3rd December  2003: BUT sent in an update to the Namco WSG sound core with better sound generation.
- 12th February  2002: 'BUT' submitted an improved version of the Namco sound core, which allows for cleaner sound.
- 0.36b14            : Takahiro Nogi added noise generator to the Namco sound emulation.
- 0.36b11            : Juergen Buchmueller and Tatsuyuki Satoh improved emulation of the Galaxians sound subsystem. Samples are no longer used.
-  1st July      1999: Tatsuyuki Satoh fixed some small things in Namco sound system emulation.
- 13th March     1999: Nicola Salmoria updated the Namco sound driver to support dynamic changes to the waveform data.
- 0.35b5             : Changed description to 'Namco'. Merged the old and new Namco sound subssytem, and added support for stereo output [Aaron Giles].
- 0.31               : Added sndhrdw\namco.c/h.
- 0.30               : Completely rewritten the Namco waveform audio subsystem [Nicola Salmoria, Aaron Giles]. This gets rid of some artefacts in pacMan (eating a ghost) and Ms Pac Man (eating dots while a fruit is bouncing). Better emulation of the custom I/O chip in the Namco games [Aaron Giles].
- 0.19               : Added partial sound support to RallyX (no explosions yet). Thankx to Ron Fries.
- NOTES: The driver handles the four known types of NAMCO wavetable sounds: 3-voice mono (PROM-based design: Pac-Man, Pengo, Dig Dug, etc), 8-voice quadrophonic (Pole Position 1, Pole Position 2), 8-voice mono (custom 15XX: Mappy, Dig Dug 2, etc) and 8-voice stereo (System 1)
- DRIVERS: galaga.cpp, jrpacman.cpp, pacman.cpp, pengo.cpp, polepos.cpp and rallyx.cpp
- SOURCE: sound\namco.cpp



S8.2   Namco 06xx

- 0.254              : Quantise timer to clock frequency (namco\namco06.cpp). Fixes inserting coin in clone Super Xevious (Japan) automatically start 2 player game with issues [Mike Harris].
- 0.240              : Synchronize data writes. Improved NMI delay (machine\namco06.cpp) [Mike Harris].
- 0.221              : Simplified some handlers (machine\namco06.cpp) [Osso]. Wire up reset lines. Emulated Namco 06xx the NMI and chip select lines more accurately. Three control bits are used for the clock divider. Clarify timer delay is zero [Mike Harris].
- 0.153              : Converted Namco 06xx to modern device and DEVCB2 [Miodrag Milanovic].
- 0.131u4            : Aaron Giles added clocks to the Namco 06xx in anticipation of improved device interconnection.
- 0.131u3            : Added machine\namco06.c/h. Aaron Giles converted the Namco 06xx into proper devices.
- NOTES: This chip is used as an interface to up to 4 other custom chips (example 5xXX). It signals IRQs to the custom MCUs when writes happen, and generates NMIs to the controlling CPU to drive reads based on a clock. SD0-SD7 are data I/O lines connecting to the controlling CPU SEL selects either control (1) or data (0), usually connected to an address line of the controlling CPU/NMI is an NMI signal line for the controlling CPU
- DRIVERS: galaga.cpp and polepos.cpp
- SOURCE: machine\namco06.cpp



S8.21  Namco 15XX

- 0.186              : Changed description to 'Namco 15xx'.
- 0.154              : Changed 'Namco' sound to 'Namco 15XX'.
- 0.149u1            : Changed 'Namco 15XX' sound to 'Namco'.
- 0.94u1             : Changed description to 'Namco 15XX'.
- 0.79u1             : Nicola Salmoria added three new sound chips: NAMCO_15XX, NAMCO_52XX, NAMCO_54XX, and changed drivers to use them (NAMCO_54XX is just a placeholder playing samples, until the chip is reverse engineered). Also correct handling of 52XX sample start/end pointers in ROM.
- PCB: 1502 Sound Generator (Grobda)
- DRIVERS: gaplus.cpp, mappy.cpp and toypop.cpp
- SOURCE: sound\namco.cpp



S8.22  Namco 50XX

- 0.240              : Use chip select lines and synchronize writes (machine\namco50.cpp) [Mike Harris].
- 0.222              : set_input_line is synced, don't need extra synchronize [hap].
- 0.221              : Simplified some handlers (machine\namco50.cpp) [Osso]. Removed unused variable [smf]. Wire up reset lines [Mike Harris].
- 0.201              : Removed timer_set() [Osso].
- 0.153              : Converted Namco 50XX to modern device and DEVCB2 [Miodrag Milanovic].
- 0.136u4            : Couriersud fixed save state support in custom NAMCO devices (50,51,53) and Galaga driver.
- 0.131u3            : Aaron Giles converted the Namco 50xx into proper devices.
- 0.114u1            : Added machine\namco50.c/h. Nicola Salmoria added actual emulation of the microcontroller used for the Namco 50xx chip as found in Bosconian and Xevious.
- 27th March     2007: Guru - Here's the next chip we've decapped in a little more detail (50XX). This shows the full chip die at approx 20X magnification (reduced to minimise the file size, the real image is 5X bigger) and is roughly pasted together from 6 separate images for your viewing pleasure.
- 0.79u1             : Better emulation of 50XX custom, no more need for hacks in Bosconian [Nicola Salmoria].
- NOTES: The Namco 50XX chip is a Fujitsu MB8842, which has twice the ROM and RAM of the 54xx chip. It is used for Player score control (only used as protection check).
- GAMES: Bosconian, Xevious (DIP28)
- DRIVERS: galaga.cpp
- SOURCE: machine\namco50.cpp


S8.23  Namco 51XX

- 0.240              : Use chip select lines and synchronize writes (machine\namco51.cpp) [Mike Harris].
- 0.225              : Reimplement outputs that were accidentally disabled when device switched to using low-level emulation. This restores start LEDs and coin lockouts for various games in galaga.cpp and polepos.cpp [AJR].
- 0.222              : set_input_line is synced, don't need extra synchronize [hap].
- 0.221              : Simplified some handlers (machine\namco51.cpp) [Osso]. Wire up reset lines. Emulated Namco 51xx via low level cpu. Previously, this was using high-level emulation. This had some game-specific hacks [Mike Harris].
- 0.196              : Removed first_screen usage from Namco 51XX device [Ryan Holtz].
- 0.154              : Zerofill machine\namco51.c at init [hap].
- 0.153              : Converted Namco 51XX to modern device and DEVCB2 [Miodrag Milanovic].
- 0.136u4            : Couriersud fixed save state support in custom NAMCO devices (50,51,53) and Galaga driver.
- 0.131u3            : Added machine\namco51.c/h. Aaron Giles converted the Namco 51xx into proper devices.
- NOTES: This custom chip is a Fujitsu MB8843 MCU programmed to act as an I/O device with built-in coin management, protection device. It keeps track of the players scores, and checks if a high score has been obtained or bonus lives should be awarded. The main CPU has a range of commands to increment/decrement the score by various fixed amounts. The device is used to its full potential only by Bosconian; Xevious uses it too, but only to do a protection check on startup: CMD = command from main CPU and ANS = answer to main CPU. The chip reads/writes the I/O ports when the /IRQ is pulled down. Pin 21 determines whether a read or write should happen (1=R, 0=W).
- DRIVERS: galaga.cpp, polepos.cpp
- SOURCE: machine\namco51.cpp



S8.24  Namco 52XX

- 0.240              : Use chip select lines and synchronize writes (audio\namco52.cpp) [Mike Harris].
- 0.222              : set_input_line is synced, don't need extra synchronize [hap].
- 0.221              : Simplified some handlers (audio\namco52.cpp) [Osso]. Wire up reset lines [Mike Harris].
- 0.186              : Removed timer_pulse [Osso].
- 0.154              : Zerofill audio\namco52.c at init [hap].
- 0.153              : Converted Namco 52XX to modern device and DEVCB2 [Miodrag Milanovic].
- 0.131u3            : Moved sound\namco52.c/h to audio\namco52.c/h. Aaron Giles converted the Namco 52xx into proper devices. Changed the Namco 52xx and 53xx devices to run the actual MCU instead of simulating the behavior. Hooked them up properly in bosco, digdug and polepos.
- 0.112u2            : Derrick Renaud implemented filters for the 52xx sound effects in preparation for future changes.
- 0.94u1             : Changed description to 'Namco 52XX'.
- 14th January   2005: Derrick Renaud added filtering circuit to sound\namco52.c and converted it to stream based. Added proper filters to the Namco52 sample player of Bosconian, Galaga, Pole Position and Xevious. Adjusted relative effect volumes per schematics.
- 0.79u1             : Added sound\namco52.c/h. Nicola Salmoria added three new sound chips: NAMCO_15XX, NAMCO_52XX, NAMCO_54XX, and changed drivers to use them (NAMCO_54XX is just a placeholder playing samples, until the chip is reverse engineered). Also correct handling of 52XX sample start/end pointers in ROM.
- 0.30               : Martin Scragg fixed Bosconian crashing: This was the speech processor being used for a protection check.
- NOTES: This instance of the Fujitsu MB8843 MCU is programmed to act as a sample player. It is used by just two games: Bosconian and Pole Position.
- GAMES: Bosconian (1981), Pole Position (1982)
- DRIVERS: cswat.cpp, galaga.cpp, polepos.cpp
- SOURCE: audio\namco52.cpp


S8.25  Namco 53XX

- 0.222              : set_input_line is synced, don't need extra synchronize [hap].
- 0.221              : Simplified some handlers (machine\namco53.cpp) [Osso]. Wire up reset lines [Mike Harris].
- 0.201              : Removed timer_set() [Osso].
- 0.153              : Converted Namco 53XX to modern device and DEVCB2 [Miodrag Milanovic].
- 0.136u4            : Couriersud fixed save state support in custom NAMCO devices (50,51,53) and Galaga driver.
- 0.131u3            : Added machine\namco53.c/h. Aaron Giles converted the Namco 53xx into proper devices. Changed the Namco 52xx and 53xx devices to run the actual MCU instead of simulating the behavior. Hooked them up properly in bosco, digdug and polepos.
- NOTES: This instance of the Fujitsu MB8843 MCU is programmed to act as an I/O device. It is used by just two games: Dig Dug and Pole Position.
- DRIVERS: galaga.cpp, polepos.cpp
- SOURCE: machine\namco53.cpp



S8.26  Namco 54XX

- 0.240              : Use chip select lines and synchronize writes (audio\namco54.cpp) [Mike Harris].
- 0.222              : Increase the length of the Namco 54XX IRQ to fix Bosconian shot sound regression. set_input_line is synced, don't need extra synchronize [hap].
- 0.221              : Simplified some handlers (audio\namco54.cpp) [Osso]. Wire up reset lines [Mike Harris].
- 0.154              : Zerofill audio\namco54.c at init [hap].
- 0.153              : Converted Namco 54XX to modern device and DEVCB2 [Miodrag Milanovic].
- 0.131u3            : Aaron Giles converted the Namco 54xx into proper devices.
- 0.112u2            : Derrick Renaud added discrete filters to the new Namco 54xx sound effects.
- 0.112u1            : Replaced implementation of Namco 54xx sound chip with new MB8844 CPU core running the original embedded ROM code. Removed old sound core. Pole Position and Bosconian no longer require samples as a result [Nicola Salmora, Ernesto Corvi, Guru].
- 0.94u1             : Changed description to 'Namco 54XX'.
- 0.93               : Derrick Renaud swapped Namco 54xx filters on Port A & C. Fixes Xevious sound.
- 0.90u2             : Derrick Renaud added op-amp bandpass filtering circuit to sound\namco54.c. Added proper filters to new Namco54 noise source. Added R/C values to Bosconian, Galaga, Pole Position and Xevious.
- 0.90               : Kenneth Miller fixed namco54 sound driver compiling in VisualC++.
- 0.89u5             : Improvements to Namco 54xx Noise Generator [Jarek Burczynski]. Type A and B emulated, type C algo still unknown.
- 0.79u1             : Added sound\namco54.c/h. Nicola Salmoria added three new sound chips: NAMCO_15XX, NAMCO_52XX, NAMCO_54XX, and changed drivers to use them (NAMCO_54XX is just a placeholder playing samples, until the chip is reverse engineered). Also correct handling of 52XX sample start/end pointers in ROM.
- NOTES: This custom chip is a Fujitsu MB8844 MCU programmed to act as a noise generator. It is used for explosions, the shoot sound in Bosconian, and the tire screech sound in Pole Position.
- DRIVERS: galaga.cpp, polepos.cpp
- SOURCE: audio\namco54.cpp



S8.27  Namco 56XX

- 0.149              : Modernized 56xx Namco I/O device. In order to avoid as much as possible duplicated code, I've split machine configs for each device pairing (56+56, 56+58, 58+58, etc.) in mappy.c. I've also considered splitting the driver class in multiple subclasses but then I saw no way to avoid the need of other 6 address maps in the driver [Osso, Fabio Priuli].
- 0.136              : Fabio Priuli converted Namco IO chips 56xx, 58xx and 59xx to be devices and converted gaplus.c, mappy.c and toypop.c to use the new code.
- 0.78u4             : Added machine\namcoio.c/h. Nicola Salmoria implements the 56XX and 58XX I/O custom chips (machine\namcoio.c) used by all the games. The I/O chips are now accurately simulated, fixing subtle nuances during normal operation and not-so-subtle ones in test mode; e.g. you can now scroll the grid in Mappy's test mode.
- NOTES: I/O (coin management built-in), DIP42
- GAMES: Dig Dug II, Gaplus, Grobda, Libble Rabble, Motos, Pac & Pal, Pacman & Chomp Chomp, Phozon, Super Pacman, Tower Of Druaga, Toy Pop
- SOURCE: namco\namcoio.cpp



S8.28  Namco 58XX

- 0.149              : Modernized 58xx Namco I/O device. In order to avoid as much as possible duplicated code, I've split machine configs for each device pairing (56+56, 56+58, 58+58, etc.) in mappy.c. I've also considered splitting the driver class in multiple subclasses but then I saw no way to avoid the need of other 6 address maps in the driver [Osso, Fabio Priuli].
- 0.136              : Fabio Priuli converted Namco IO chips 56xx, 58xx and 59xx to be devices and converted gaplus.c, mappy.c and toypop.c to use the new code.
- 0.78u4             : Added machine\namcoio.c/h. Nicola Salmoria implements the 56XX and 58XX I/O custom chips (machine\namcoio.c) used by all the games. The I/O chips are now accurately simulated, fixing subtle nuances during normal operation and not-so-subtle ones in test mode; e.g. you can now scroll the grid in Mappy's test mode.
- NOTES: I/O (coin management built-in), DIP42
- GAMES: Dig Dug II, Gaplus, Grobda, Libble Rabble, Mappy, Phozon, Super Pacman, Tower Of Druaga, Toy Pop
- SOURCE: namco\namcoio.cpp



S8.29  Namco 59xx
- 0.149              : Modernized 59xx Namco I/O device. In order to avoid as much as possible duplicated code, I've split machine configs for each device pairing (56+56, 56+58, 58+58, etc.) in mappy.c. I've also considered splitting the driver class in multiple subclasses but then I saw no way to avoid the need of other 6 address maps in the driver [Osso, Fabio Priuli].
- 0.136              : Fabio Priuli converted Namco IO chips 56xx, 58xx and 59xx to be devices and converted gaplus.c, mappy.c and toypop.c to use the new code.
- SOURCE: namco\namcoio.cpp



S8.2A  Namco 62xx
- 0.153              : Converted Namco 62XX to modern device and DEVCB2 [Miodrag Milanovic].
- 0.150              : Modernized the skeleton namco62.c device [Osso].
- 0.141u1            : Added machine\namco62.c/h. New Namco 62xx device with internal ROM [Dr. Decapitator, Phil Bennett, Andrew Gardner].
- DRIVERS: gaplus.cpp
- SOURCE: machine\namco62.cpp



S8.3   Namco CUS30

- 0.273              : Added waveform counter readback [hap].
- 0.188              : Support dynamic changes to clock frequency [AJR].
- 0.154              : Changed 'Namco' sound to 'Namco CUS30'.
- 0.149u1            : Changed 'Namco CUS30' sound to 'Namco'.
- 0.147              : Added 'Namco CUS30' device (sound\namco.c).
- 0.99u2             : BUT adjusted Namco CUS30 noise frequency.
- 0.94u1             : Changed description to 'Namco CUS30'.
- 0.89               : Namco System 1 update [Nicola Salmoria]. Cleaned up the CUS30 wavedata/sound command/RAM interface, put it all in a single function.
- 0.80               : Nicola Salmoria added SOUND_NAMCO_CUS30 for better documentation (alias for the standard SOUND_NAMCO).
- DRIVERS: 20pacgal.cpp, baraduke.cpp, namcos1.cpp, namcos86.cpp, pacland.cpp, skykid.cpp and tceptor.cpp
- SOURCE: sound\namco.cpp



S8.4   Namco 63701X

- 0.220              : Simplified some handlers [Osso].
- 0.148u1            : Modernized Namco 63701X sound device. Fixed namcos86.c regression [Andrew Gardner].
- 0.94u1             : Changed description to 'Namco 63701X'.
- 0.80               : Added sound\n63701x.c/h. Nicola Salmoria totally rewritten the 63701X emulation and moved it to a separate module. Fixed silence compression, this improves quality in some samples; supported volume control.
- NOTES: An Hitachi HD637A01X0 MCU programmed to act as a sample player. Used by some Namco System 86 games. The MCU has internal ROM which hasn't been dumped, so here we simulate its simple functions. The chip can address ROM space up to 8 block of 0x10000 bytes. At the beginning of each block there's a table listing the start offset of each sample. Samples are 8 bit unsigned, 0xff marks the end of the sample. 0x00 is used for silence compression: '00 nn' must be replaced by nn+1 times '80'.
- SOURCE: sound\n63701x.cpp
- GAMES: Namco - Genpei ToumaDen (1986), Rolling Thunder (1986), Wonder Momo (1987)



S8.5   Namco System 1

-  1st March     1999: Aaron Giles has updated the Namco System 1 sound system, merging it with the other Namco system. He also added 16-bit sampling support for it.
- 0.35b1             : Added sndhrdw\namcos1.c/h. Support for the Namco System 1 sound system [Ernesto Corvi].
- NOTES: The Namco System 1 is a custom 8 channel 16-bit stereo PSG for sound effects.
- GAMES: Namco - Pac-Mania (1987), Galaga '88 (1987), Dangerous Seed (1989), Tank Force (1991)



S8.6   Namco NA

- 0.101u5            : cync implemented several missing features in the Namco NA sound emulator.
- 0.101u1            : Some improvements to NamcoNA sound [cync].
- 0.94u1             : Changed description to 'Namco NA'.
- 27th February  2003: Phil Stroffolino did some further improvements on the NamcoNA sound emulation.
- 26th February  2003: cync submitted a major improvement to the NamcoNA sound emulation.
- 0.63               : Added sound\namcona.c/h. Preliminary Namco NA sound support [Phil Stroffolino].
- NOTES: The Namco NA1/2 Sound hardware use PCM samples and sound sequencing metadata are written by the main CPU to shared RAM. The sound CPU's type is unknown, though it appears to be little endian. It has an internal BIOS.
- SOURCE: sound\namcona.cpp
- GAMES: Namco - Exvania (1992), Knuckle Heads (1992), Tinkle Pit (1993)



S8.7   Namco 163

- 0.281              : Changed ui().popup_time warning message to logerror (bus\nes\namcot.cpp) [hap].
- 0.242              : Fixed side effects issue in reading. Use constant value here [cam900].
- 0.225              : Update Namco 163 sound to new stream callbacks [Aaron Giles]. Changed Namco 163 to have registers as an array in the device, since there aren't many of them, and also restored zeroing them on start [Vas Crabb].
- 0.210              : Added sound\namco_163.cpp/h. Added Namco 163 sound emulation, used by some Famicom cartridges [cam900]. Changing a few double constants to explicitly be float, appease MSVC (bus\nes\namcot.cpp) [Nathan Woods].
- NOTES: Namco 163 (Sound) internal sound emulation. 4 bit wavetable (variable length) and 1-8 channels (https://wiki.nesdev.com/w/index.php/Namco_163_audio).
- DRIVERS: (MESS) bus\nes\namcot.cpp
- SOURCE: sound\namco_163.cpp



S8.8   C140

- 0.263              : Timer reload value = written reg data + 1, fixes music tempo in Dragon Saber (sound\c140.cpp) [hap].
- 0.233              : Fixed regression with NamcoSystem 2 Assault engine noise (sound\c140.cpp) [hap]. Correct offset range when reading keyon status (sound\c140.cpp) [dink].
- 0.232              : Added Namco C140 sample status readback, fixes engine sound in Suzuka 8 Hours, Final Lap and Four Trax game series. And fixes machine gun samples do not seem to play ingame in Steel Gunner 2 [Angelo Salese].
- 0.227              : Reduced duplication in fetching sample [cam900].
- 0.225              : Update Namco C140 sound to new stream callbacks [Aaron Giles].
- 0.222              : Updated data bus behavior and support 12 bit PCM. Verified from Assault (namcos2.c) schematics. Added/Updated notes. Use shorter/correct type values. Fixed address/data bus bits and modernized save states. Fixed spacing. Reduced unnecessary lines and duplicates. Moved little endian interface in c140.h. Moved bankswitch behaviors in each drivers. Reduced noisy sound regression in previous commit remain in vgmplay for compatiblity. Implemented some features from QuattroPlay by superctr. Splitted sound stream update and host interface [cam900, superctr]. Fixed C140 input clock source according to crystal for gal3.cpp and namcos21*.cpp. Added notes [cam900].
- 0.214              : Added timing output to trigger periodic FIRQ [AJR].
- 0.207              : Remove unnecessary arguments in C140 handlers [cam900].
- 0.200              : Removed MCFG macros [cam900].
- 0.186              : Changed description to 'Namco C140'.
- 0.154              : Converted C140 to use inline config [Fabio Priuli].
- 0.148u2            : Modernized C140 sound device [Andrew Gardner].
- 0.146u4            : hap correct C140 interface for winrun, aircomb and aircombj.
- 0.122u1            : Phil Bennett fixed C219 sample read order and implemented sign+magnitude format (sound\c140.c). Removed GAME_IMPERFECT_SOUND flag from all Namco NA-1 games.
- 0.95u4             : Mamesick fixed C140 sound routing in the Namco games (namcos2.c and namcos21.c).
- 20th July      2002: R. Belmont submitted an update to the Namco C140 sound chip emulation, improving Cybersled and others though they aren't yet really playable.
- 0.37b5             : Support for compressed PCM playback in the C140 emulator [CAB].
- 26th June      2000: CAB added compressed PCM playback to the C140 core and did some cleanups.
- 18th November  1999: CAB fixed bad noise in 8-bit emulation of C140.
- 12th November  1999: CAB fixed some C140 and Namco System 2 sound related problems.
-  5th November  1999: CAB fixed quite some C140 problems.
- 0.36b8             : Added sound\c140.c/h. C140 emulation [Phil Stroffolino].
- 22nd October   1999: Keith Wilkins finally added the C140 sound core (done by Phil Stroffolino with help from CAB) to the Namco System 2 driver.
-  2nd March     1999: Juergen Buchmueller has fixed Rolling Thunder MCU problems by simplifying the 6809 interrupt handling and correct CWAI emulation.
- NOTES: The Namco C140 is a 24 Channel Stereo PCM Sample player.
- PCB: C140 (120 PIN QFP)
- DRIVERS: dangbar.cpp, gal3.cpp, namcos2.cpp, namcos21.cpp, namcos21_c67.cpp and namcos21_de.cpp
- SOURCE: sound\c140.cpp


S8.9   C219

- 0.233              : Namco C219 has less voice regs, don't call c140_r [hap].
- 0.222              : Added 'Namco C219' device (sound\c140.cpp). Split C219 subclass [cam900, superctr]. Replaced Namco C140 sound with C219 in all Namco NA-1 games.
- 0.122u1            : Fixed C219 sample read order and implemented sign+magnitude format. Removed GAME_IMPERFECT_SOUND flag from all Namco NA-1 games [Phil Bennett].
- DRIVERS: namcona1.cpp
- SOURCE: sound\c140.cpp



S8.A   C352

- 0.225              : Update Namco C352 sound to new stream callbacks [Aaron Giles].
- 0.222              : Allow byte accessing. Modernized save states. Added notes. Use shorter/correct type/argument values [cam900]. READ/WRITE macros removal [Osso].
- 0.216              : Added optional compile-time PCM logging and cleaned up some code [Ryan Holtz].
- 0.199              : Eliminated customized MCFG_C352_ADD macros [Ryan Holtz].
- 0.196              : Improved Namco C352 emulation: Changed mu-law algorithm to match Namco's WII VC emulator. This appears to be the original algorithm used in the hardware. Fixed static noise between fights in Tekken 3. Fixed the order of the phase inversion flags [superctr].
- 0.186              : Changed description to 'Namco C352'.
- 0.183              : Implemented volume ramping behavior and confirmed with recording of real hardware (Tekken 3). Rewrote mulaw algorithm. This is not quite perfect yet but is closer to recordings and sounds a bit clearer (example: Time Crisis). Use word swap macro for C352 sound rom in Armadillo Racing and Prime Goal EX [superctr].
- 0.177              : Replaced C352 core. The new core has working noise generator and sample interpolation. Rearrange C352 channels, removed rear channels for systems without second DAC. Rearrangement speakers for Namco NB2. Removed MACHINE_IMPERFECT_SOUND flags for C352 games [superctr].
- 0.166              : The C352 clock divider appears to be configurable for each system (228 = Namcos System 11, 288 = System 22/Super 22/NB-12/ND-12/FL, 296 = System 23/Super 23 and 332 = System 12). Changed enum format. Fixed C352 clock divider in namcos23.c [superctr].
- 0.163              : Added configurable clock dividers for Namco C352 [superctr].
- 0.143u5            : Don't try to play zero-length samples in C352 [Phil Bennett].
- 0.143              : R. Belmont converted Namco C352 to modern C++ device.
- 0.127u3            : C352 cleanup [Olivier Galibert]: Removed an unused volume table dating from before the volume was (correctly) implemented as linear.
- 0.112u1            : Improvements to C352 sound emulator [cync, hoot development team]. Rewrote loop and flag handling, added support for global key-on register. Fixed state saving.
- 0.101u5            : Several fixes and improvements to the C352 sound emulator [hoot development team].
- 0.101u1            : Some improvements to C352 sound [cync].
- 0.99u9             : Major Namco sound improvements [R. Belmont]: C352 now sets output pitch correctly by input clock. Added emulated sound and music to all NB-1, NB-2 and System 11 games, using Prop Cycle's BIOS as a substitute until the original can be trojaned or otherwise obtained. Hooked it up for plain System 22 games as well, but they're not interested in passing down proper commands for some reason. Speed-cheated all instances of the M37710/C352 sound system so CPU requirements don't go up much. This also helped back off the requirements a hair for Prop Cycle and Time Crisis.
- 0.87u2             : C352 Pitch adjustment [R. Belmont, Cap].
- 0.86u3             : Namco C352 update [R. Belmont]. Many many fixes to wave start/end/bank handling plus added chain mode support. Thanks to cap @ VivaNonno for the tips.
- 0.86               : R. Belmont removed C352 debug printf that accidentally snuck in.
- 0.84u2             : Added sound\c352.c/h. R. Belmont added a preliminary core for the Namco C352 PCM chip. It was originally written by the Zinc authors for Zinc and has been adapted for MAME by R. Belmont with their permission. It's not sounding real great yet on music, although it's better than the Zinc original.
- 10th July      2004: R. Belmont - Added save states and a log-scale volume curve to the C352, which improves the music in a lot of games.
- 29th June      2004: R. Belmont - Started cleaning up ZiNc's H8/3002 core for MAME submission (this will add sound and fix protection on Namco Classics 1 & 2 and the System 12 games). Fixed some flag calculations on the ADD opcodes and some "edge cases" on the C352 to improve music in NCV1/2. Still need to fix some issues with the controls in Aqua Rush and Paca Paca.
- NOTES: Namco C352 custom PCM chip with 32 voices, supports 8-bit linear and 8-bit muLaw samples and Output: digital, 16 bit, 4 channels
- PCB: C352, QFP100 (Ncv1/2)
- DRIVERS: namcofl.cpp, namconb1.cpp, namcond1.cpp, namcos11.cpp, namcos12.cpp, namcos22.cpp and namcos23.cpp
- SOURCE: sound\c352.cpp




S9.    OKI

S9.1   MSM5205

- 0.225              : Update MSM5205 sound to the new stream update callback [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.219              : Changed description to 'OKI MSM5205 ADPCM'. Added DAC output bit difference. Make Data capture timing related to input clock. Added notes for MSM5205 can be usable with 768kHz input clock (from official document) and Cutoff Frequency [cam900].
- 0.189              : Delay data capture timing for MSM5205 (should help with synchronization later). VCK modernization (sound\msm5205.cpp and audio\irem.cpp) [AJR].
- 0.187              : New callback implements accurate VCK timing. The old "VCLK" method with no duty cycle is now deprecated [AJR].
- 0.186              : Use clocks_to_attotime [AJR].
- 0.182              : Use s32 instead of int32_t for consistency. Architectural cleanups [AJR].
- 0.180              : Removed MSM5205 volume trampoline [smf].
- 0.154              : Fixed usage of uninitialized members in msm5205_device [Oliver Stoeneberg].
- 0.153              : Converted MSM5205 device to DEVCB2 [Osso].
- 0.149              : Modernized MSM5205 device (sound\msm5205.c/h, audio\hyprolyb.c, irem.c, drivers\appoooh.c, ashnojoe.c, asuka.c, battlera.c, cabal.c, chinagat.c, chinsan.c, combatsc.c, cps1.c, crgolf.c, dacholer.c, darius.c, ddragon.c, de_2.c, dec0.c, dec8.c, discoboy.c, docastle.c, drmicro.c, dynax.c, fantland.c, fcrash.c, firetrap.c, fromance.c, gcpinbal.c, gladiatr.c, goal92.c, gsword.c, hnayayoi.c, jangou.c, jantotsu.c, kchamp.c, kungfur.c, kurukuru.c, lucky74.c, lwings.c, mastboy.c, mermaid.c, mitchell.c, mlanding.c, ojankohs.c, opwolf.c, pachifev.c, pcktgal.c, rastan.c, rmhaihai.c, sf.c, sothello.c, spdodgeb.c, splash.c, srmp2.c, suprgolf.c, system16.c, taito_l.c, tbowl.c, tecmo.c, tehkanwc.c, tigeroad.c, toki.c, topspeed.c, tubep.c, wc90b.c, yunsung8.c and machine\stfight.c) [Fabio Priuli].
- 0.148u4            : MSM5205 ADPCM lookup tag removal (drivers\40love.c, appoooh.c, ashnojoe.c, asuka.c, battlera.c, cabal.c, chinagat.c, chinsan.c, combatsc.c, crgolf.c, dacholer.c, darius.c, ddragon.c, dec0.c, dec8.c, discoboy.c, docastle.c, drmicro.c, dynax.c, fantland.c, firetrap.c, flstory.c, fromance.c, gcpinbal.c, gladiatr.c, goal92.c, gsword.c, hnayayoi.c, jangou.c, jantotsu.c, kchamp.c, kungfur.c, kurukuru.c, lucky74.c, maygay1b.c, mastboy.c, mermaid.c, mitchell.c, mlanding.c, msisaac.c, ojankohs.c, opwolf.c, pachifev.c, pcktgal.c, rastan.c, rmhaihai.c, sf.c, sothello.c, spdodgeb.c, splash.c, srmp2.c, suprgolf.c, taito_l.c, tbowl.c, tecmo.c, tehkanwc.c, tigeroad.c, toki.c, topspeed.c, tubep.c, wc90b.c, yunsung8.c and machine\stfight.c) [Miodrag Milanovic].
- 0.147              : Fixed Grand Cross crash before OK (sound\msm5205.c) [Robbbert].
- 0.139u3            : Added a function to change the MSM5205 frequency dynamically [Angelo Salese].
- 0.128u2            : Fixed MSM5205 ADPCM and sound communications in Ashita no Joe/Success Joe [Phil Bennett].
- 0.111u1            : Fixed copy/paste bug in the Irem sound hardware dealing with MSM5205 chips (audio\irem.c) [Mamesick].
- 0.106u9            : Nicola Salmoria changed the MSM5205 ADPCM decoder to no longer perform bounds checking to prevent the signal from overflowing. The MSM5205 data sheet clearly states that this isn't the case, and there is no overflow protection in the chip. Also, the chip's internal DA converter is just 10-bit, even if the processed signal is 12-bit.
- 0.93               : Aaron Giles removed ADPCM entirely and wired up dummy MSM5205s to most of the drivers still using it; these need to be revisited and fixed.
- 18th February  2003: Nicola Salmoria fixed an interrupt callback problem in the MSM5205 sound chip emulation.
- 0.37b13            : Nicola Salmoria added Speech in Champion Wrestler.
- 24th March     2000: Manuel Abadia added MSM5205 sound to Splash!
- 0.35RC1            : Added sound\msm5205.c/h. Added support for slave mode to the MSM5205 emulation [Tatsuyuki Satoh].
-  2nd June      1999: Tatsuyuki Satoh totally rebuilt the MSM5205 emulator and it's a lot better now.
- 0.35b12            : Added sndhrdw\irem.h.
- GAMES: Moon Patrol (Irem 1982), Tropical Angel (Irem 1983), Kung Fu Master (Irem 1984), Silkworm (Tecmo 1988)
- PCB: MSM5205 (Appoooh), M5205 (Funystrp, Splash), OKI M5205 ADPCM (Empcity)
- DRIVERS: appoooh.cpp, ashnojoe.cpp, asuka.cpp, battlera.cpp, cabal.cpp, cedar_magnet.cpp, chinagat.cpp, chinsan.cpp, combatsc.cpp, crgolf.cpp, dacholer.cpp, darius.cpp, ddragon.cpp, de_2.cpp, dec0.cpp, dec8.cpp, discoboy.cpp, docastle.cpp, drmicro.cpp, dynax.cpp, fantland.cpp, fcrash.cpp, fromance.cpp, gladiatr.cpp, goal92.cpp, gsword.cpp, hnayayoi.cpp...
- SOURCE: sound\msm5205.cpp


S9.2   MSM5232

- 0.275              : Cleaned up some inconsistent formatting (sound\msm5232.cpp) [Vas Crabb].
- 0.255              : Revise caps and resistors values [Yaei, TremiRodomi]. Use correct attack/decay time nominal value when the lower 3 bits of attack/decay time data are 0x6 or 0x7 (sound\msm5232.cpp) [eito].
- 0.226              : Fixed behaviour when the 'ARM' flag set while envelope generator is on a decay state. MSM5232, a tone generator chip which is used by some early TAITO and Alpha Denshi arcade PCBs, has 'ARM' flag that alters behavoiur of envelope generation. Basically, the 'ARM' flag turns Attack-Decay-Release envelope generation to simpler ON/OFF states. If the 'ARM' flag set, the transition from Attack to Decay doesn't occur unless explicitly indicated. On current implement, when this 'ARM' flag is set on a channel which is on a Decay state, the Decay state continues. It seems that, the state should be turned into a Attack state in this situation [eito].
- 0.225              : Update MSM5232 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.206              : Removed MCFG macros (sound\msm5232.h) [Ryan Holtz].
- 0.202              : Eliminated register_postload [AJR].
- 0.153              : Converted MSM5232 to DEVCB2 [Osso].
- 0.149u1            : Modernized MSM5232 device (drivers\40love.c, bigevglf.c, buggychl.c, equites.c, flstory.c, ladyfrog.c, msisaac.c and nycaptor.c) [Osso].
- 0.147              : Added 'MSM5232' device (sound\msm5232.c).
- 0.141u2            : Made changes to the PORT_ADJUSTER values for MSM5232 clocks in all games in drivers to best match PCB recordings [Fujix, Tafoid].
- 0.139u2            : Phil Bennett added save-state support to the MSM5232 sound core.
- 0.124              : Nicola Salmoria added Noise Output to the MSM5232 emulation.
- 0.123u6            : Nicola Salmoria fixed MSM5232 noise LFSR formula (done by Jarek Burczynski; thanks to Corrado Tomaselli for samples). Changed MSM5232 emulator to output channels separately. Added output of SOLO channels to MSM5232 emulator.
- 0.57               : Added sound\msm5232.c/h. MSM5232 sound emulator [Jarek Burczynski, Hiromitsu Shioya]. Jarek Burczynski support MSM5232 in Fairy Land Story and Buggy Challenge.
- 21st October   2001: Jarek Burczynski sent in a MSM5232 sound chip emulator (thanks to CAB), adding music to Fairy Land Story and adding one missing sound effect to Buggy Challenge.
- NOTES: MSM5232 is a 8-Channel Tone Generator by OKI.
- PCB: MSM5232RS (Fieldday, Onna34ro), MSM5332 (Nycaptor), OKI M5232 (Splndrbt), M3M5232RS (Kouyakyu)
- DRIVERS: 40love.cpp, bigevglf.cpp, buggychl.cpp, equites.cpp, flstory.cpp, ladyfrog.cpp, lkage.cpp, msisaac.cpp, nycaptor.cpp, splendor.cpp and wyvernf0.cpp
- SOURCE: sound\msm5232.cpp


S9.21  MSM5253
- NOTES: Bronx (Cycle Shooting bootleg) and Colt (NY Captor bootleg) uses the M5253 sound chip (MAME uses the MSM5232).
- PCB: M5253 (Cyclshtg, NYcaptor)


S9.22  MSM5295
- NOTES: I/O chip? or =>OKI6295
- SOURCE: drivers\rampart.c, relief.c, shuuz.cpp
- PCB: M5295 (Urashima)


S9.3   OKI6258

- 0.264              : Small cleanup [hap].
- 0.225              : Update OKI6258 sound to new stream callbacks [Aaron Giles].
- 0.221              : Fixed crashes in debug builds [Osso].
- 0.188              : Replaced custom handlers with device_clock_changed [AJR].
- 0.154              : Converted HuC6280 to use inline config [Fabio Priuli].
- 0.148u2            : Modernized OKI MSM6258 device [Andrew Gardner].
- 0.128u4            : Added sound\okim6258.c/h. Added Oki MSM6258 sound core [Barry Rodewald].
- DRIVERS: (MESS) x68k.cpp
- SOURCE: sound\okim6258.cpp


S9.4   OKI6295

- 0.236              : Explicitly clamp output streams to within range (sound\okim6295.cpp) [AJR].
- 0.225              : Update MSM6295 sound to the new stream update callback [Aaron Giles].
- 0.187              : Simplify logerror messages [AJR].
- 0.186              : Changed description to 'OKI MSM6295 ADPCM'.
- 0.179              : Directly use set_rom_bank [O. Galibert].
- 0.177              : Added emu\dirom.cpp/h. Added device_rom_interface for sound chips with rom/memory map alternative. OKI6295 dirom fix [Olivier Galibert]. Fix for save state reloading for many machines using OKI6295 [Osso].
- 0.148u4            : OKI6295 cleanup (drivers\aerofgt.c, astrocorp.c, bestleag.c, cps1.c, ddragon3.c, deniam.c, diverboy.c, drtomy.c, funybubl.c, fuukifg2.c, galpanic.c, gotcha.c, igs011.c, kaneko16.c, kickgoal.c, legionna.c, lordgun.c, m92.c, metro.c, midyunit.c, moo.c, nmg5.c, oneshot.c, othldrby.c, playmark.c, pzletime.c, rampart.c, seta2.c, shadfrce.c, snowbros.c, speedspn.c, sslam.c, stlforce.c, subsino2.c, tickee.c, tmaster.c, toaplan2.c, tumbleb.c, unico.c, vamphalf.c, wwfwfest.c, includes\tatsumi.h, machine\tatsumi.c). OKI6295 tag lookup removal (cischeat.c, deco156.c, galpani2.c, highvdeo.c, kaneko16.c, megasys1.c, mwarr.c, nmk16.c, paradise.c, pasha2.c, pktgaldx.c, toaplan2.c and vamphalf.c). More oki changes (drivers\30test.c, acommand.c, aquarium.c, arcadecl.c, artmagic.c, cischeat.c, deco32.c, deniam.c, egghunt.c, feversoc.c, igs011.c, igs017.c, limenko.c, pirates.c, playmark.c, powerbal.c, psikyo.c, relief.c, seibuspi.c, shangha3.c, silkroad.c, snowbros.c, spool99.c, sslam.c, taito_f3.c, toaplan2.c, tumbleb.c and machine\atarigen.c/h) [Miodrag Milanovic].
- 0.145u7            : Check if OKI6295 voice is playing *before* possibly starting an invalid sample [hap].
- 0.144u7            : Don't refresh the stream during post_load, that makes the core die. Don't save-state the "was bank installed" flag and everything Just Works [R. Belmont]. This fixed use of save states in all sets using OKI6295 eventually crashes MAME upon loading.
- 0.141u1            : Added a virtual stream update function to the device sound interface. Added a new stream_create that takes fewer parameters and calls the device's stream update. Removed the stream update stub template. Updated BSMT2000 and OKIM6295 to use the new interface for their streams [Aaron Giles].
- 0.139u3            : Bulk converted all okim6295_r/okim6295_w references in the address maps to call to the modern member functions [Aaron Giles]. Added read_status() and write_command() methods to the okim6295_device for the common case where these are done outside the context of a read or write handler (it was annoying to pass in the fake address space for these cases) [Aaron Giles]. Replaced all remaining calls to okim6295_r/okim6295_w with calls to the new methods, and removed the static functions [Aaron Giles].
- 0.139u1            : Aaron Giles fixed all sets and drivers using OKI6295 audio. Eventual crash using Save States.
- 0.138u2            : Aaron Giles converted the OKI M6295 and EEPROM devices to the new model. These were necessary because they both require multiple interfaces to operate and it didn't make sense to create legacy device templates for these single cases (okim6295 needs the sound interface and the memory interface, while EEPROM requires both the NVRAM and memory interfaces).
- 0.132u4            : Aaron Giles converted the okim6295 sound driver to use address maps for access. By default, it defines a ROM address map that overlays its full region. As a result, the validity checks require all okim6295 regions to be at least 256k, unless you provide your own address map. Updated all regions to meet this requirement. Updated the atarijsa code to use a custom address space for its okim6295 accesses (which are banked on the first half and static on the second half), as an example of configuring a device with a custom address space. For now, attempts to use okim6295_set_bank_base() will still work, though banking for the okim chips should be moved to custom address maps in the drivers eventually. The first time okim6295_set_bank_base() is called, it will install a banked memory handler over the region and use memory_set_bankptr() to change the base on subsequent bank switches.
- 0.129u6            : Aaron Giles fixed noticeable static in OKI6295 audio.
- 0.129u1            : Phil Bennett updated OKIM6295 volume table to reflect actual chip behaviour. Removed "contact MAMEDEV" message.
- 0.128u6            : Relaxed the OKI 6295 command validity check [Nicola Salmoria].
- 0.128u5            : Nicola Salmoria changed OKI6295 to use a reasonable volume table derived from the manual. Added popmessages to notify of invalid commands so we can investigate them if some game uses them. It should also be noted that many games using this chip are clipping at the moment. This is something that might date back to when sound mixing was upgraded to 32-bit. It is sensible for the 6295 emulator to output at this level because it ensures that bits of precision are not lost, so the mixing levels in the drivers should be adjusted to avoid clipping.
- 0.111u6            : David Haywood fixed a couple of errors introduced in the OKI6295 pin shuffling.
- 0.111u3            : David Haywood moved OKIM6295 pin 7 state (internal divider) to internal structure. Updated all drivers to specify pin state when setting the interface. Added comments for all cases where the original frequency wasn't / 132 or /165 as the real pin state is unknown.
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the OKIM6295 sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.96u1             : Aaron Giles added ADPCM utilities to OKIM6295.c and used those to hook up sound once again in the Seibu games.
- 0.93u1             : Aaron Giles fixed several issues with banking and playback in the OKI6295.
- 0.93               : Added sound\okim6295.c/h.
- 0.77               : R. Belmont fixed a driver to allow to have MSM6295s and plain ADPCM voices coexist (required for gcpinbal).
-  1st November  2003: R. Belmont fixed the ADPCM functions so that games can have both MSM6295 sound chips and plain ADPCM at the same time, and he added complete sound emulation to Grand Cross Pinball.
- 0.63               : Changed description to 'MSM6295'.
- 17th December  2002: Nicola Salmoria fixed a bug in the OKIM6295 sound chip emulation that caused samples being played erroneously in Got-cha and Steel Force, and he sent in a driver for Got-cha.
- 29th August    2001: Lax fixed some M6295 sound chip frequencies.
- 11th July      2001: Luca Elia fixed OKI m6295 emulation from crashing with sound disabled.
-  2nd April     2001: Jarek Burczynski added state saving support to ADPCM and OKIM6295 sound emulation cores.
- 23rd October   2000: Takahiro Nogi added bank switching function for M6295 samples and tweaked playback frequency in the Toaplan2 driver.
- 20th June      2000: Bryan McPhail fixed some YM2151/OKIM6295 sound balance problems in several drivers.
- 23rd July      1999: Jim Hernandez fixed Vapor Trail sound with the new OKI6295 interface.
- 22nd July      1999: Bryan McPhail sent in a driver for Crude Buster, and modified OKI6295 core to support different frequencies.
- 24th April     1999: Nicola modified the ADPCM sounds of Klax to change volume as the pieces come closer.
-  8th February  1999: Bryan McPhail made the ADPCM code support two OKI 6295 chips with samples in different memory regions.
- 0.31               : Aaron Giles improved ADPCM support, plus support for the OKIM6295 ADPCM chip. Several drivers use these.
- NOTES: OKI Semiconductor produced the OKI6295 chip in two package variants. The 44-pin QFP version, MSM6295GS, is the original one and by far the more common of the two. The 42-pin DIP version, MSM6295VRS, omits A17 and RD, which limits its ROM addressing to one megabit instead of two.
- SOURCE: sound\okim6295.cpp
- GAMES: Forgotten Worlds (Capcom 1988), Pang (Mitchell 1989), Mad Gear (Capcom 1989), 1941 (Capcom 1990)
- PCB: M6295GS (Naname), M6296 (Hotdogst, Tumblep, CycleWarriors), U6295 (Suprpool), AD-65 QFP44 (Bmcbowl, Grdnstrm), AD65 (Egghunt, Popspops), AR17961 QFP44 (Chindrag, Paradise, Pwrinst2), K-665-9249 (Powerins), K-665 9546 (blktiger.c), K668 (Sdmg2, Slqz2), MK28 (Bmcbowl), M28 (QFP44)(SuperMoto), 6606 (QFP44) (Mjchuuka), SMS6295 (Riot), AC0A26 (Drgnwrld), M6395 (Dharma)


S9.41  TT5665

- 0.237              : Added support for separate voice commands per output channel [cam900].
- 0.226              : Added sound\tt5665.cpp/h. Added 'Tontek TT5665 ADPCM Voice Synthesis LSI' device. Implemented TT5665 emulation. Similar as OKIM6295, but with support more ROM capacity and phrase spaces, 2 sound outputs. Used in Bowling Try! and igs_m036 (for some hardwares with TT5665, ex: cjddzsp). Use put_int for update samples [cam900].
- NOTES: 'Tontek TT5665 ADPCM Voice Synthesis LSI' sound chip. Base code by OKI MSM6295 ADPCM emulation.
- DRIVERS: bowltry.cpp
- SOURCE: sound\tt5665.cpp


S9.5   OKI6376

- 0.278              : Fixed regression and small cleanup (sound\okim6376.cpp) [hap].
- 0.236              : Explicitly clamp output streams to within range (sound\okim6376.cpp) [AJR].
- 0.225              : Update OKI6376 sound to new stream callbacks [Aaron Giles].
- 0.213              : Use device_rom_interface and converted logging calls to logmacro.h [AJR].
- 0.202              : Eliminated register_postload [AJR].
- 0.188              : Replaced custom handlers with device_clock_changed [AJR].
- 0.186              : Changed description to 'OKI MSM6376 ADPCM'.
- 0.150              : Modernized OKIM6376 device [Osso].
- 0.147              : Added 'OKI6376' device (sound\okim6376.c).
- 0.143u4            : James Wallace fixed independent channel volumes in OKIM6376 sound chip, used by the games from the Road Hog era of MPU4.
- 0.143              : James Wallace fixed state saving for OKIM6376 (hopefully).
- 0.142u6            : James Wallace added proper channel 2 support, and logging capabilities to OKIM6376. Correct divider behaviour of OKIM6376 - needs ROM analysis to be complete, but all supported programs only use the default mode. Fixed NAR timing in OKIM6376 to match datasheet figures. Fixed behaviour for OKIM6376 samples latched while their respective channel is playing (fixes missing audio in New Magic Card 'Skill Game' when won on first loop), and MPU4 sound test.
- 0.142u5            : James Wallace added echo emulation to the OKIM6376 sound chip.
- 0.129u2            : Mirko Buffoni fixed clamping to 12 bit range to OKIM6376 and adjusted volume attenuation accordingly.
- 0.129u1            : Added sound\okim6376.c/h. Added OKIM6376 emulation ADPCM speech synthesizer [Mirko Buffoni, Phil Bennett]. Added OKIM6376 sound emulation to High Video games [Mirko Buffoni]: Removed GAME_NO_SOUND from newmcard, brasil and fashion. Sound frequency may be incorrect.
- NOTES: The MSM6376 is a ADPCM sample player.
- PCB: Oki MSM6376 on soundboard (MPU4VideoSystem)
- DRIVERS: amerihok.cpp, highvdeo.cpp, maygay1b.hxx, mpu4.hxx, mpu4avan.hxx, mpu4bwb.hxx, mpu4concept.hxx, mpu4crystal.hxx, mpu4empire.hxx, mpu4mdm.hxx, mpu4misc.hxx, mpu4sw.hxx, mpu4union.hxx, mmpu4vid.cpp and nmkmedal.cpp
- SOURCE: sound\okim6376.cpp


S9.6   MSM6585

- 0.219              : Changed description to 'OKI MSM6585 ADPCM'. Correct MSM6585 timing note from official document [cam900].
- 0.206              : Removed MCFG and unused MCFG_MSM6585 macros (sound\msm5205.h) [Ryan Holtz].
- 0.189              : Delay data capture timing for MSM6585 (should help with synchronization later) [AJR].
- 0.146u4            : hap added minimal support for MSM6585 sound to Grand Cross. Where does the M6585 in Varia Metal hook up to? Preserve the documentation differences between MSM6585 & MSM5205 now that support has been added.
- 0.77               : R. Belmont added full sound / music in Grand Cross and fixed the drivers to allow to have MSM6295s and plain ADPCM voices coexist (required for gcpinbal). Added ADPCM sound chip and set sound to mono.
- NOTES: The MSM6585 is a version-up to the previous M5205 with some additional capabilies and improvements. It plays ADPCM samples. The emulation comes from RAINE.
- PCB: M6585 DIP18 (Gcpinbal, Vmetal)
- DRIVERS: gcpinbal.cpp, lastbank.cpp, metro.cpp and spinb.cpp
- SOURCE: sound\msm5205.cpp


S9.61  MSM6588
- 0.264              : Added sound\okim6588.cpp/h. Added preliminary OKI MSM6588 ADPCM Recorder device. Small cleanup [hap].
- NOTES: OKI MSM6588 ADPCM Recorder
- DRIVERS: (MESS) chessac.cpp
- SOURCE: sound\okim6588.cpp


S9.7   MSM6650

- 0.213              : Added preliminary MSM6650 device and some test inputs for Trocana [AJR].
- NOTES: OKI MSM6650 ADPCM
- DRIVERS: maygaysw.cpp and nmkmedal.cpp
- SOURCE: sound\okim6376.cpp


S9.8   OKI9810

- 0.266              : Implemented sequencer [MetalliC].
- 0.236              : Explicitly clamp output streams to within range (sound\okim6376.cpp) [AJR].
- 0.225              : Update OKI9810 sound to new stream callbacks [Aaron Giles]. Make address space big-endian [AJR].
- 0.223              : Modernized logging [AJR].
- 0.220              : Simplified some handlers [Osso].
- 0.195              : Correct sample rate divider table. Added support for clock changes. Implemented DADR, serial interface and added notes [cam900].
- 0.186              : Changed description to 'OKI MSM9810 ADPCM'.
- 0.177              : Added device_rom_interface for sound chips with rom/memory map alternative [Olivier Galibert].
- 0.141u3            : Added sound\okim9810.c/h. OKI MSM9810 sound device [Andrew Gardner]: Added and hooked up volume table. Added sub-table lookups. Added OPT command. Implemented on-chip interpolation & status read. Implemented PAN command and stereo mixing. Andrew Gardner and Lord Nightmare added preliminary ADPCM2 support.
- NOTES: OKI MSM9810 ADCPM(2) sound chip
- DRIVERS: amuzy.cpp, cosmos_playc8f.cpp, dinoking.cpp, invqix.cpp, quickncrash.cpp, seta2.cpp, sigmab98.cpp and sweetland4.cpp
- SOURCE: sound\okim9810.cpp


S9.9   OKI ADCPM

- 0.222              : Added looped sample support. Allow reading current output without decoding. Fixed initial values and descriptions [cam900].
- 0.174              : Allow separate OKI ADCPM driver building [Miodrag Milanovic].
- 0.145u8            : okiadpcm.o is also used by Imagetek I5000 sound [hap].
- 0.141u3            : Added sound\okiadpcm.c/h.
- SOURCE: sound\okiadpcm.cpp




S10.    Nintendo

S10.1   RP2A03 APU

- 0.251              : Updated stream before reading statusreg (sound\nes_apu.cpp), fixes (MESS) nes [summer92] drum sounds play wrongly. Removed wrongly placed dpcm irq clear [hap]. Added RP2A03 soundcpu bus conflict to Donkey Kong 3 [hap]. Can no longer read from anything but status register. Implemented frame counter interrupt. Fixes (MESS) nes [ajyureir] and nes [portopia] have no sound and nes [dquest and doordoor] locks up [kmg].
- 0.248              : Added 'RP2A03 APU' device. Added earliest hardware variant of 2A03 APU. It's estimated that these letterless CPU versions are in the first two million or so Famicoms (about 10% of Famicoms sold). There are games developed on the RP2A03 that have sound glitches on later, more common Famicoms. For instance, the very last note in the game over melody in Balloon Fight rings out with a loud buzz on later machines. The new famicomo driver plays it as the developers must have intended [kmg].
- NOTES: RP2A03 APU
- DRIVERS: dkong.cpp, punchout.cpp and vsnes.cpp
- SOURCE: sound\nes_apu.cpp


S10.12  RP2A0X APU

- 0.251              : Updated stream before reading statusreg (sound\nes_apu.cpp), fixes (MESS) nes [summer92] drum sounds play wrongly. Removed wrongly placed dpcm irq clear [hap]. Can no longer read from anything but status register. Implemented frame counter interrupt. Fixes (MESS) nes [ajyureir] and nes [portopia] have no sound and nes [dquest and doordoor] locks up [kmg].
- 0.248              : Changed description to 'RP2A0X APU'.
- 0.242              : Fixed a DPCM table entry that was off by one (sound\nes_defs.h). Removed old, unused or redundant code variables and comments. Removed array used for reading back registers. APU registers cannot be read. Updated length counter table to match hardware counts. Consolidate some functions. Don't zero DPCM channel's output. Fixes some audio popping (sound\nes_apu.cpp) [kmg].
- 0.241              : Added noise channel period table for PAL systems. Fixed a value in the parallel NTSC table for the largest period (lowest freq) and a value in the counter length table (for all channels but DMC) (sound\nes_apu.cpp and nes_defs.h). Improvements for triangle channel: Don't set output level to zero, it is always determined by sequencer, which cannot be reset. This eliminates most of the popping, hopefully. Raised artificial frequency cutoff to about 18KHz instead of 11KHz. Added linear counter reload flag [kmg]. Implemented non linear mixer output, some misc fixes and improvements (sound\nes_apu.cpp). Fixed Pulse channel duty behavior, triangle output behavior, noise output behavior and DMC output and clamp behavior. Now DMC output is affects triangle and noise volume. Reduced unnecessary variables. Split channel update function and output variable. Reference: https://wiki.nesdev.org/w/index.php?title=APU [cam900].
- 0.240              : Added missing DPCM period table for PAL. Fixes pitch being flat for DPCM sounds for (MESS) nespal and m82p. This is most apparent in Mr. Gimmick (1993) game, though it affects all software that use the DPCM channel (sound\nes_apu.cpp and nes_defs.h) [kmg].
- 0.225              : Update NES APU sound to new stream callbacks (sound\nes_apu.cpp) [Aaron Giles].
- 0.222              : Correct noise algorithm [cam900].
- 0.202              : Removed read/write trampolines and zero $4015 at reset https://wiki.nesdev.com/w/index.php/CPU_power_up_state [smf].
- 0.196              : Derive frame counter from clock input [O. Galibert]. Removed first_screen usage from sound\nes_apu.cpp [Ryan Holtz, O. Galibert].
- 0.180              : Fixed crash because nes_apu was always binding to root_device() before the n2a03 took over [smf].
- 0.168              : Make the NES APU device get added with the N2A03 CPU rather than needing to be added in every driver I believe this to be correct, it's internal to the CPU?. Notes: DERIVED_CLOCK doesn't work in cases where MCFG_CPU_MODIFY is used to modify the clock, so I've had to use MCFG_CPU_REPLACE in those cases instead. Sound routing seems a bit messy, but this seems a general MAME thing, we still have an issue where if you add too many devices with their own speaker/sound additions things you get sound overflows, in this case all drivers except NES were set to a 0.50 sound level output, NES was set to 0.90, I see no clean way to do this with the sound chip inside the CPU? [David Haywood].
- 0.154              : Converted NES APU to use inline config [Fabio Priuli].
- 0.153              : Assert fix (APU registers; sound\nes_defs.h) [Fabio Priuli].
- 0.152              : Modernize nes_apu device. Needs merging with N2A03 cpu core. Fixed compiling problems (sound\nes_apu.c and nes_defs.h) [Osso]. Fixed compile error (GCC 4.6) in nes_defs.h [Couriersud].
- 0.149u1            : Changed description to 'N2A03 APU'.
- 0.147u3            : Rewrote M6502 to modern device, cycle-exact and interruptible (sound\nes_apu.c) [O. Galibert].
- 0.133u2            : More NES work: Fixed bug in nes_apu that caused errors reading $4015. Added length counter status bits to $4015 [Robert Bohms].
- 0.128u2            : Wilbert Pol updated NES PCM DMA to read data through the CPU address map. Aaron Giles fixed NES APU to work with high sample rates (don't know the bug #).
- 0.113              : Aaron Giles fixed regression in Nintendo games that did not specify a clock for the NES APU.
- 0.104u3            : Aaron Giles added save state support to the NES APU sound chip.
- 0.102u5            : Changed description to 'N2A03'. R. Belmont hooked up the same NES APU implementation in both MAME and MESS. Also correctd the memory mapping of the APU in the Playchoice 10 driver.
- 0.93               : Changed description to 'NES'. Aaron Giles changed the way the NES APU worked so that it used streams properly instead of an update function.
- 0.80               : Oliver Achten improved the NES APU emulation: Various bugs concerning the DPCM channel fixed and fixed $4015 read behaviour.
-  2nd March     2004: Oliver Achten fixed the NES APU sound core, especially the broken DPCM audio channel.
- 13th September 2000: Juergen Buchmueller fixed some bugs in the new NES sound core.
- 12th September 2000: Matt Conte submitted a NES sound core update, and it definitely sounds better now.
-  4th July      2000: Matthew Conte improved the NES sound engine yet again.
- 0.36b13            : Changed sound\nes.c/h and nesintf.c/h to nes_apu.c/h and nes_defs.h. New NES sound emulation for Punch Out and Donkey Kong 3 [Matthew Conte, wwtk@mail.com].
- 26th December  1999: wwtk@mail.com and Matthew Conte contributed a new NES sound driver.
- 0.36b5             : Added cpu\m6502\tbln2a03.c.
- 0.31               : Added sndhrdw\nes.c/h and nesintf.c/h.
- 0.21               : Removed m6502\dasm.
- 0.20               : Added m6502\dasm.
- NOTES: RP2A0X APU. Based on the Nofrendo/Nosefart NES N2A03 sound emulation core written by Matthew Conte and redesigned for use in MAME/MESS. There is also the N2A03 CPU !!!
- DRIVERS: cham24.cpp, famibox.cpp, multigam.cpp, nes_arcade_bl.cpp and playch10.cpp
- SOURCE: sound\nes_apu.cpp



S10.2   SNES Custom DSP (SPC700)

- 0.147              : Added sound mute in SPC700 then hooked up for NSS [Angelo Salese]. Improved SPC700 cycle opcode timings [Angelo Salese, byuu].
- 0.137u1            : Changed 'SNES Custom' sound to 'SNES Custom DSP (SPC700)'.
- 0.133u2            : SNES fixes (mostly MESS specific) [Angelo Salese]: Fixed Super Kick Boxing booting and sound (audio\snes.c). Preliminary open bus emulation for allowing Shien's Revenge / Shien the Blade Chaser to boot. Fixed mode 5/6 bg drawing cutted in half bug. Fixed (presumably) broken gfxs in nss_sten. More accurate behaviour of the last scroll register. Improved mode 5/6 gfxs when tile size = 16x16. Fixed rowscroll line bugs in many games. Made the unsupported reads on I/O open bus, fixed a layer enable in Super Kick Boxing. Fixed vram size when in hires mode. Hooked up interlace mode. Fixed doubled y-axis sprites when in interlace mode. Improved window effects when in H-512 mode. Removed a kludge with color windows. Fixed buggy layer clearance when in H-512 modes. Fixed the x scrolling wrap around bug when hscroll == 0. Fixed a bug that were causing a row of corrupted tiles during scrolling situations. Fixed irq ack and fixed TIMEUP register open bus behaviour. Even more aggressive open bus fixes. Fixed a partial update bug when the screen is in interlace mode. Fixed 8bpp layer colors.
- NOTES: Based on the original MESS driver by Lee Hammerton. The Custom sound module of the Nintendo Super System hardware contains the chips: S-SMP - Stamped 'Nintendo S-SMP (M) SONY (C) Nintendo '89' custom sound chip (QFP80) and S-DSP - Stamped 'Nintendo S-DSP (M) (C) SONY '89' custom sound DSP (QFP80).
- DRIVERS: nss.cpp
- SOURCE: audio\snes.cpp



S10.3   S-DSP
- PCB: Nintendo S-DSP (M) (C) SONY '89' custom sound DSP, QFP80 (NintendoSuperSystem)

S10.4   S-SMP
- PCB: Nintendo S-SMP (M) SONY (C) Nintendo '89' custom sound chip, QFP80 (NintendoSuperSystem)



S12.    Konami

S12.1   K005289

- 0.279              : Changed description to 'Konami 005289 SCC'.
- 0.257              : Fixed off by 1 error. Fixes sound regression in Nemesis. Pre instead of postincrement voice counter to prevent confusion [hap].
- 0.242              : Minor cleanups. Use struct for voices [cam900].
- 0.225              : Update K005289 sound to new stream callbacks [Aaron Giles]. Changed K005289 sound device back to using std::unique_ptr<T []> for things that don't need to change size [Vas Crabb].
- 0.220              : Simplified some handlers [Osso].
- 0.155              : Fixed K005289 off-by-one frequency; adds missing detune effect to Nemesis bg music [Ace, Alex Jackson].
- 0.154              : Changed description to 'K005289 SCC'.
- 0.153              : Correct K005289 comments, name functions after pin names on schematic [Alex Jackson].
- 0.152              : Refactored and removed redundant K005289 state variables and unneccessary floating point math, added savestate support [Alex Jackson].
- 0.148u1            : Modernized K005289 sound device [Andrew Gardner].
- 0.93               : Changed description to 'K005289'.
-  7th December  1999: CAB and Bryan McPhail fixed some problems with 005289/051649 sound chip emulators.
- 0.36b11            : Added sound\k005289.c/h. Taken the 005289 emulation out of namco.c [Bryan McPhail].
- 29th November  1999: Bryan McPhail added correct implementation of the 005289 sound chip to Nemesis.
- NOTES: The 005289 is a 2 channel sound generator, each channel gets it's waveform from a prom (4 bits wide). The 005289 has no data bus, so data values written don't matter. From Nemesis schematics the address lines A0-A4 of the prom run to the 005289, giving 32 bytes per waveform. Address lines A5-A7 of the prom run to PA5-PA7 of the AY8910 control port A, giving 8 different waveforms. PA0-PA3 of the AY8910 control volume.
- GAMES: Konami - Nemesis (1985), Konami GT (1985), Galactic Warriors (1985), TwinBee (1985)
- DRIVERS: nemesis.cpp
- SOURCE: sound\k005289.cpp


S12.2   K007232

- 0.279              : Changed description to 'Konami 007232 PCM Controller'.
- 0.278              : Log wav data at keyon instead of at every stream update. Removed really old changelog (sound\k007232.cpp) [hap].
- 0.277              : Suppress side effects for debugger reads and cleaned up code. Use references rather than pointers where appropriate, made some variables const. Made parameter names match in header and source and reformatted code (sound\k007232.cpp) [cam900].
- 0.242              : Fixed frequency bits (based on reverse engineering https://github.com/furrtek/VGChips/tree/master/Konami/007232) [cam900].
- 0.225              : Update K007232 sound to new stream callbacks [Aaron Giles].
- 0.223              : Updates and cleanup. Use device_memory_interface for fetching sample. Fixed frequency behavior. Allow dynamic clock changes. Use shorter/correct type values. Simplify update routine [cam900].
- 0.220              : Simplified some handlers [Osso].
- 0.216              : Added optional WAV logging of PCM samples [Ryan Holtz].
- 0.155              : Improved K007232 volume/pan controls, still largely guesswork to chqflag.c. Added missing K007232 volume callback to wecleman.c [Alex Jackson].
- 0.154              : Changed description to 'K007232 PCM Controller'.
- 0.153              : Converted K007232 to DEVCB2 [Osso].
- 0.149u1            : Modernized Konami 007232 sound device. Removed the chip from bishi_state class, since it seems that the driver does not use this device at all (drivers\ajax.c, aliens.c, bottom9.c, chqflag.c, crimfght.c, fastlane.c, flkatck.c, gbusters.c, gradius3.c, hcastle.c, mainevt.c, nemesis.c, spy.c, thunderx.c, tmnt.c, twin16.c and wecleman.c) [Osso].
- 0.129u5            : Phil Bennett fixed K007232 garbled music.
- 0.115              : Aaron Giles fixed K007232 sounds very roughly in many Konami games since the sound core update in 0.112u4.
- 0.93               : Changed description to 'K007232'.
- 10th May       2002: Hiromitsu Shioya improved the K007232 sound chip emulation.
- 0.36b3             : Nicola Salmoria added support for external volume control to the K007232 and fixed Aliens, Ajax etc.
-  6th August    1999: Hiromitsu Shioya sent a 007232 update, which sounds a lot better.
-  3rd August    1999: Bryan McPhail sent in a 007232 update which added bankswitching to the samples, necessary for Main Event.
-  3rd March     1999: Hiromitsu Shioya sent in a newer version of the K007232 sound chip emulation which now supports stereo output.
- 0.35b1             : Added sndhrdw\k007232.c/h. Konami 007232 sound chip emulator [Hiromitsu Shioya]. This is used by TMNT. Howie Cohen added the 007232 to TMNT.
- NOTES: K007232 PCM Controller
- DRIVERS: ajax.cpp, aliens.cpp, bottom9.cpp, chqflag.cpp, crimfght.cpp, fastlane.cpp, flkatck.cpp, gradius3.cpp, hcastle.cpp, mainevt.cpp, nemesis.cpp, spy.cpp, thunderx.cpp, tmnt.cpp, twin16.cpp and wecleman.cpp
- SOURCE: sound\k007232.cpp


S12.3   K051649

- 0.279              : Changed description to 'Konami 051649 SCC1'.
- 0.258              : Added note about bus conflicts [hap].
- 0.257              : Pre instead of postincrement voice counter to prevent confusion. Fixed possible array overflow when reading voice counter. Added more logical channel halt. Fixed issue with sample reload, fixes Konami SCC sample reload is wrong in (MESS) MSX1 driver [hap].
- 0.242              : Fixed input clock. Simplified some routines. Reduced unnecessary variables. Minor cleanups [cam900].
- 0.225              : Update K051649 sound to new stream callbacks [Aaron Giles].
- 0.223              : Fixed frequency behavior. Modernized save state. Correct type values (sound\k051649.cpp) [cam900].
- 0.214              : Fixed mirroring in address map. Added save states. Fixed spacing. Reduced unnecessary lines. Use shorter/correct type values [cam900].
- 0.208              : Simplified read/write handlers [AJR].
- 0.196              : Added scc_map to reduce duplication in driver memory maps [cam900].
- 0.195              : Added clock change support to K051649. Added K051649 support to VGM player [cam900].
- 0.154              : Changed description to 'K051649 SCC1'.
- 0.148u2            : Modernized K051649 sound device [Andrew Gardner].
- 0.147              : Added 'K051649 SCC1' device.
- 0.136u4            : Fabio Priuli fixed bogus for loop in K051649 device reset.
- 0.93               : Changed description to 'K051649'.
- 0.79u1             : Timing enhancements to the K051649 sound system [Nathan Woods].
- 30th January   2004: Nathan Woods sent in minor timing enhancements to the K051649 sound core.
- 18th April     2001: Sean Young fixed a frequency calculation bug in the K051649 (SCC) sound core.
- 14th November  2000: Bryan McPhail fixed K051649 sound problems in Haunted Castle.
-  7th December  1999: CAB and Bryan McPhail fixed some problems with 005289/051649 sound chip emulators.
- 0.36b11            : Added sound\k051649.c/h. 051649 emulation, used in Haunted Castle [CAB, Bryan McPhail].
- 30th November  1999: Bryan McPhail added 051649 sound chip emulation to Haunted Castle, which now has fully emulated sound.
- NOTES: The K051649 SCC1 is a 5 channel sound generator, each channel gets it's waveform from RAM (32 bytes per waveform, 8 bit signed data). This sound chip is the same as the sound chip in some Konami megaROM cartridges for the MSX. It is actually well researched and documented: http://www.msxnet.org/tech/scc. K052539 is equivalent to the K051649 chip except channel 5 does not share waveforms with channel 4.
- PCB: 051649(SCC) (Hexion)
- DRIVERS: hcastle.cpp, hexion.cpp, konmedal.cpp, nemesis.cpp and quickpick5.cpp
- SOURCE: sound\k051649.cpp


S12.4   K053260

- 0.281              : Added TODO about reverse-engineered pan LUT. The pan LUT is mentioned in the reverse-engineered based on work by Furrtek: https://github.com/furrtek/SiliconRE/blob/master/Konami/053260/k053260_schematics.PDF [cam900].
- 0.280              : Uses K053260's TIM2 output as interrupt source (sound\k053260.cpp) [Jose Tejada]. Small optimization to devcb [hap].
- 0.279              : Changed description to 'Konami 053260 KDSC'.
- 0.254              : Added sample reverse flag. Allow to change rev flag on the fly (sound\k053260.cpp) [hap].
- 0.246              : Updated K053260 sound NMI implementation for asterix, parodius, rollerg and vendetta [hap].
- 0.225              : Update K053260 sound to new stream callbacks [Aaron Giles].
- 0.223              : Allow side effects [cam900].
- 0.222              : Fixed K053260 panning, interrupts and general volume for The Simpsons [O. Galibert, P. Bennett].
- 0.209              : Simplified handlers. Use std::s. Shorter type values. Fixed spacings [cam900].
- 0.201              : Added device_clock_changed [smf].
- 0.155              : Changed description to 'K053260 KDSC'. K053260 Delta PCM decoding rolls over instead of clipping; fixes some 'The Simpsons' in-game samples such as "Maggie" and "That's my sister mister" sound bad. Rewrite K053260 sound device [Alex Jackson]. MSVC compile fix [hap].
- 0.154              : Changed description to 'K053260 PCM'. Converted K053260 to use inline config [Fabio Priuli].
- 0.148u3            : Modernized K053260 device [Andrew Gardner].
- 0.139u2            : Phil Bennett added save-state support to the K053260 sound core.
- 0.129u1            : R. Belmont fixed 64-bit issue in the K053260 emulation.
- 0.93               : Changed description to 'K053260'.
- 0.80               : Improved K053260 emulation [Oliver Achten].
-  1st March     2004: Oliver Achten fixed the PPCM (Packed PCM) decoding in the K053260 sound chip emulation, improving samples in Asterix, The Simpsons, TMNT 2 and others.
-  8th March     2001: Ernesto Corvi and Nicola Salmoria added support for dual K053260 sound chips, fixing sound in Over Drive.
- 0.37b2             : Ernesto Corvi fixed ADPCM decoding in the K053260, this improves several Konami games.
- 16th April     2000: Ernesto Corvi updated the K053260 ADPCM decoding to use a better algorithm, and the sound is much better.
- 31st August    1999: Ernesto Corvi sent in a K053260 update with a lot better digital sound because the samples were just normal PCM after all.
- 23rd August    1999: Ernesto Corvi sent in a K053260 update with misc fixes.
- 12th August    1999: Ernesto Corvi sent in another K053260 update with stereo channels in correct order.
-  9th August    1999: Ernesto Corvi sent in a K053260 update, with fixes to ADPCM decoding.
- 0.36b2             : Added sound\k053260.c/h. Konami 053260 sound chip emulation [Ernesto Corvi]. Ernesto Corvi added 053260 emulation to Punk Shot.
- DRIVERS: asterix.cpp, overdriv.cpp, parodius.cpp, rollerg.cpp, simpsons.cpp, tmnt.cpp and vendetta.cpp
- SOURCE: sound\k053260.cpp


S12.5   K054539

- 0.280              : Fixed regression with K054539 L/R speakers. Small cleanup. Update stream before writes. Added m_ prefix to class variables. Also update stream before init_flags [hap].
- 0.279              : Changed description to 'Konami 054539 ADPCM'.
- 0.271              : Correct reverb RAM size and addressing. Top address bit for the 32K RAM is bit 16, rather than the intuitive bit 14 [Jose Tejada].
- 0.246              : Revert K054539 cubic interpolation in MAME 0.245 (causes regression with reverb and hardware realtime cubic interpolation did not exist yet) [AJR].
- 0.245              : Fixed DPCM table and added cubic interpolation. Using powers of 2 rather than squares for the DPCM table fixes DC offsets for 4-bit sample playback [Tony Konzel].
- 0.225              : Update K054539 sound to the new stream update callback [Aaron Giles]. Changed K054539 sound device back to using std::unique_ptr<T []> for things that don't need to change size [Vas Crabb].
- 0.224              : Allow side effects. Added imperfect_features related to unverified/unemulated effects and some registers [cam900].
- 0.207              : Reduced unnecessary arguments in K054539 handlers [cam900].
- 0.204              : Swapped left/right K054539 channels in gijoe.cpp, lethal.cpp, moo.cpp, mystwarr.cpp, rungun.cpp, xexex.cpp and xmen.cpp, also removed setting REVERSE_STEREO (H054539 doesn't implement it at all, maybe it did ages ago) [hap].
- 0.201              : Added device_clock_changed [smf].
- 0.194              : Moved sample RAM to K054539 address map [cam900].
- 0.181              : Fixed sound CPU hanging on state load [Scott Percival].
- 0.154              : Changed description to 'K054539 ADPCM'. Converted K054539 to use inline configs and delegates [Fabio Priuli].
- 0.152              : Fixed K054539 input clock rate and implemented programmable timer based on hardware measurements [Phil Bennett, Stefan Lindberg]. Hooked up K054539 timer interrupt in Polygonet driver, removed non-existent second K054539 and fixed EEPROM regression [Phil Bennett].
- 0.149              : Use device_post_load() instead of register_postload() [smf].
- 0.145u4            : Modernized K054539. Uncross the streams [O. Galibert].
- 0.121u3            : BUT fixed buffer overflow in K054539.
- 0.112u4            : Fixed crash in k054539 sound core [Aaron Giles].
- 0.112u3            : Changed K054539 to run at native sample rate [Aaron Giles].
- 0.93               : Changed description to 'K054539'.
- 0.69b              : Fixed bug in K054539 causing bad vocals in Dadandarn [R. Belmont].
-  1st June      2003: Fixed the K054539 sound chip emulation to ignore writes to an active voice's position register, fixing the vocals in Kyukyoku Sentai Dadandarn [R. Belmont].
- 16th April     2003: Improved the panning and volume adjustment in the K054539 sound core [Minachun].
- 21st January   2003: Fixed reversed stereo in some games that use the K054539 sound chip [Acho A. Tang].
- 0.57               : Added reverb to the 054539, improving sound in Xexex and Twinbee Yahhoo [O. Galibert].
- 14th August    2001: Fixed a bug with 16-bit samples in the K054539 sound chip emulation [O. Galibert].
- 0.37b12            : 054539 sound emulation, used in X-Men, Xexex and GI Joe [O. Galibert].
- 14th February  2001: Fixed a small bug in the K054539 sound chip emulation that caused a few missing sounds in X-Men [O. Galibert].
- 29th January   2001: Wrote 054539 sound chip emulation (thanks to CAB), and now Xexex and X-Men have sound [O. Galibert].
- 0.37b8             : Added sound\k054539.c/h.
- NOTES: Konami 054539 (TOP) PCM Sound Chip. The eight PCM channels of a K054539 do not have seperate volume controls.
- PCB: 054539, QFP160 (Mmaulers)
- DRIVERS: djmain.cpp, gijoe.cpp, konamigq.cpp, konamigx.cpp, kongs470.cpp, kpontoon.cpp, lethal.cpp, moo.cpp, mystwarr.cpp, piratesh.cpp, plygonet.cpp, qdrmfgp.cpp, rungun.cpp, tmnt.cpp, ultrsprt.cpp, xexex.cpp, xmen.cpp and zr107.cpp
- SOURCE: sound\k054539.cpp


S12.6   K054544
- NOTES: The Konami Custom 054544 is exactly the same as a 054986A and has the Analog Devices AD1868R inside. The 054544 is capable of 16-bit sound. Compression format for certain sounds is unknown.
- PCB: 054544 (Xmen)


S12.7   K056800

- 0.279              : Changed description to 'Konami 056800 MIRAC'.
- 0.220              : Simplified some handlers [Osso].
- 0.181              : Fixed sound CPU hanging on state load [Scott Percival].
- 0.152              : Rewrote Konami 056800 (MIRAC) [Phil Bennett]: Implemented as an 8-bit device. Fixed address mapping. Removed bogus timer interrupt. Fixed interrupt handling.
- 0.149u1            : Modernized Konami 056800 sound device [Osso].
- 0.148u1            : Fixed K056800 sound clocking to match PCB READMEs [RetroRepair].
- 0.135u4            : Fabio Priuli moved K056800 sound device from machine\konamiic.c to emu\sound and removed the old code. Updated gticlub.c, hornet.c, nwk-tr.c, ultrsprt.c and zr107.c to use this implementation.
- 0.125u7            : Aaron Giles added save state support to K056800 host controller.
- 0.110u3            : Ville Linde consolidate K056800 (MIRAC) sound system interface emulation (machine\konamiic.c).
- PCB: K056800 (MIRAC) (Gticlub), 056800 Konami Custom, 80 pin PQFP (Sscope2)
- DRIVERS: gticlub.cpp, hornet.cpp, konamigx.cpp, nwk-tr.cpp, ultrsprt.cpp, zr107.cpp
- SOURCE: sound\k056800.cpp


S12.8   Time Pilot Audio

- 0.149u1            : Modernized timeplt audio device [Osso].
- 0.140u2            : Added 'Time Pilot Audio' sound. Take some driver_device classes of junofrst/pooyan/rallyx/rocnrope/timeplt/tutankhm (common code in audio\timeplt.c) that cover multiple drivers and split them so that each driver gets their own driver_device class. In most cases, these drivers got entangled because of audio/mcu code that was shared between multiple drivers [Atari Ace].
- 0.35b8             : Added sndhrdw\timeplt.c.
- 0.31               : Removed sndhrdw\timeplt.c.
- 0.22               : Added sndhrdw\timeplt.c.
- GAMES: pooyan.c, rallyx.c, rocnrope.c, timeplt.c and tutankhm.cpp
- SOURCE: audio\timeplt.cpp


S12.9   Track And Field Audio

- 0.149u1            : Modernized trackfld audio device [Osso].
- 0.140u2            : Added 'Track And Field Audio' sound. Take some driver_device classes of hyperspt/sbasketb/trackfld/yiear (common code in audio\trackfld.c and audio\hyprolyb.c) that cover multiple drivers and split them so that each driver gets their own driver_device class. In most cases, these drivers got entangled because of audio/mcu code that was shared between multiple drivers [Atari Ace].
- 0.30               : Added sndhrdw\trackfld.c.
- GAMES: hyperspt.c, sbasketb.c, trackfld.c and yiear.cpp
- SOURCE: audio\trackfld.cpp



S13.    Sega

S13.1   Sega PCM

- 0.225              : Update SegaPCM sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.196              : De-staticify initializations. Added device_clock_changed. Minor cleanup [cam900].
- 0.161              : Fixed SegaPCM volume register overflow [superctr].
- 0.154              : Converted Sega PCM to use inline config [Fabio Priuli].
- 0.148              : Modernize the SegaPCM sound device [Andrew Gardner].
- 0.141u1            : Fixed loop address in segapcm.c, Hang-On engine sounds better now. Also included documentation in source of known register functions [hap].
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the Sega PCM/Multi-PCM sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.94u1             : Changed description to 'Sega PCM'.
- 0.94               : SegaPCM now does stream_update on reads/writes for slightly better accuracy [Aaron Giles].
- 0.76u1             : SegaPCM fixes [Olivier Galibert]: Fixed the pitch (the 15800Hz value was wrong, it should have been the main 4MHz clock divived by 256) and also makes the code ultra-paranoid when it comes to out-of-range accesses in the sample roms. Power Drift's sound code sometimes puts semirandom values for the first handful of keyons on song transitions.
- 25th October   2003: Olivier Galibert fixed the pitch (again) in the SegaPCM sound core and fixed some bug that was triggered by Power Drift trying to play out-of-range samples.
- 0.74u2             : Various SegaPCM fixes [Olivier Galibert].
- 30th September 2003: Olivier Galibert fixed another bug in the SegaPCM sound core.
- 29th September 2003: Olivier Galibert fixed the looping samples in the SegaPCM sound core.
- 28th September 2003: Tatsumaki fixed a small typo in the SegaPCM sound core that resulted in slightly wrong pitch of the samples.
- 0.74u1             : Olivier Galibert fixed SegaPCM bug.
- 15th September 2003: Olivier Galibert sent in another fix to the SegaPCM sound chip emulation.
- 0.74               : SegaPCM cleanups / fixes [Olivier Galibert].
-  7th September 2003: Olivier Galibert sent in a SegaPCM sound chip emulation cleanup with some fixes thrown in.
- 17th February  2000: Andrew Prime fixed SegaPCM sound in the System16 drivers.
- 0.36b3             : Changed description to 'Sega_PCM'.
- 0.36b2             : Added sound\segapcm.c/h. Sega PCM and RFC68 sound emulators, used by System 16 [Hiromitsu Shioya].
- GAMES: Sega - Enduro Racer (1987), Out Run (1986), Super Hang-On (1992)
- DRIVERS: segahang.cpp, segaorun.cpp, segaxbd.cpp and segaybd.cpp
- SOURCE: sound\segapcm.cpp


S13.2   RF5C68

- 0.231              : Updated stream before writing to wave ram (sound\rf5c68.cpp) [hap].
- 0.225              : Updated RF5C68 sound to new stream callbacks [Aaron Giles].
- 0.222              : Verified default register map (datasheet). Implemented some chip variant differences [cam900]. Use STRUCT_MEMBER for state saving (sound\rf5c68.cpp) [Osso].
- 0.215              : Fixed again engine noise loops/resets in F1 Exhaust Note (sound\rf5c68.cpp). Note: RF5C68 needs to be initialized to 0xff, otherwise f1en has bad sound [Tafoid, Osso].
- 0.207              : Removed unnecessary arguments in handlers [cam900].
- 0.198              : Added save states. Added device_rom_interface, because Datasheet says it's can connect with ROM. Added rom_bank_updated and device_memory_interface instead device_rom_interface [cam900].
- 0.186              : Changed description to 'Ricoh RF5C68'.
- 0.154              : Converted RF5C68 to use inline config [Fabio Priuli].
- 0.148u2            : Modernize RF5C68 sound device [Andrew Gardner].
- 0.141u3            : Implemented address readback position registers in RF5C68 sound core [Angelo Salese].
- 13th February  2011: Angelo Salese - Fixed address readback in RF5C68 and added a preliminary audio redbook support in Mega CD / Sega CD driver... results are shown in this YT video.
- 0.137u3            : Correct the point at which the RF5C68 sample callbacks are triggered, and what channel is returned. The interrupts are masked or enabled based on what PCM memory bank is used, rather than the physical channel that was used [Barry Rodewald].
- 0.136u1            : Added a PCM sample end/loop callback to the RF5C68 core [Barry Rodewald].
- 0.104u9            : Fixed engine noise looping (sound\rf5c68.c) [Angelo Salese].
- 0.96u4             : Rewrote the RF5C68 sound emulator from the specs, improving sound in the System 18/32 games [Angelo Salese].
- 0.89u1             : Fixed a rf5c68 memory access bug [Angelo Salese].
- 0.79u1             : Reverted the RF5c68 sound emulation to an earlier version, to fix some tuning problems [R. Belmont].
- 0.76u2             : Rewrote RF5C68 sound core [Olivier Galibert].
- 11th March     2003: Fixed a small typo in the RF5C68 sound core [R. Belmont].
- 0.36b2             : Added sound\rf5c68.c/h. Sega PCM and RFC68 sound emulators, used by System 16 [Hiromitsu Shioya].
- NOTES: RICOH RF5C68 PCM controller
- PCB: 315-5476A, 80 pins (Radr, Sega System32), ASSP 5C105 (Radm, Slipstrm)
- DRIVERS: segas18.cpp, segas32.cpp and system16.cpp
- SOURCE: sound\rf5c68.cpp



S13.3   RF5C164

- 0.237              : Changed RF5C68 to RF5C164 in speedbsk.cpp, connect addrmap [Dirk Best].
- 0.222              : Implemented some chip variant differences. Implemented RF5C164 default register map (Reference: RF5C68 Datasheet and Mega CD hardware manual PCM sound source) [cam900].
- 0.201              : Added 'Ricoh RF5C164' device.
- 0.200              : Added RF5C68/RF5C164 support. Added PCM Write handler (drivers\vgmplay.cpp) [cam900].
- DRIVERS: speedbsk.cpp
- SOURCE: sound\rf5c68.cpp



S13.4   RF5C320
- PCB: CPS2-B RF5C320 CAPCOM DL-3129 (QFP208)
- GAMES: Capcom - Street Fighter EX (1996), Rival Schools (1997), Gallop Racer (Tecmo 1996)



S13.5   RF5C400

- 0.230              : Added channels for effect outputs [Windy Fairy].
- 0.229              : Fixed looping and implemented position readback [Windy Fairy].
- 0.225              : Update RF5C400 sound to new stream callbacks [Aaron Giles].
- 0.223              : Fixed loop position is not being calculated correctly [zniqco, cam900]. Modernized save states. Allow clock changed behavior. Added imperfect_features related to unemulated effects and unverified envelope issues [cam900].
- 0.222              : Fixed wrong bus width (sound\rf5c400.h) [O. Galibert]. READ/WRITE macros removal [Osso].
- 0.193              : Fixed RF5C400 sound regression. This fixes Gradius IV, and also fixes the dog whistling and other issues in the beatmania IIDX games [R. Belmont]. Converted RF5C400 to use device_rom_interface. Save/restore the external memory registers. Moved static variable into device state. Fix the commented out osd_printf_debug. Fixed "always values". Added skeleton for reading and writing channel register 0x0F (which is used by the beatmania IIDX games) [smf].
- 0.186              : Changed description to 'Ricoh RF5C400'.
- 0.170              : Added external memory r/w function [Ville Linde].
- 0.165              : Document some registers [Ville Linde].
- 0.158              : The M68000 & SPU board now process commands, some sound f/x play now (sound\rf5c400.c) [R. Belmont].
- 0.156              : Use a region_ptr_finder in RF5C400 to find our sound ROM instead of looking up the region by hand in device_start(). Will probably start converting other sound devices to this pattern (other than the ones that use the memory system) if there are no problems or objections (emu\devfind.c) (emu\devfind.c) [Alex Jackson].
- 0.148u2            : Modernized RF5C400 sound device [Andrew Gardner].
- 0.148u1            : RF5C400 envelope timing based on chip output rate instead of MAME output rate [R. Belmont].
- 0.125u7            : Aaron Giles added save state support to the RF5C400 sound core.
- 0.113              : Actually included the RF5C400 changes mentioned for 0.112u4 [Hoot Development Team].
- 0.112u4            : RF5C400 sound core improvements [Hoot Development Team]: Implemented volume envelopes. Correct the channel volume calculation. Documented registers for reverb, chorus and per-channel digital filter (actual effects are not implemented yet).
- 0.112u1            : Rewrote much of the RF5C400 sound emulator to support looping, stereo panning and 8-bit sample support [hoot development team, Ville Linde].
- 19th October   2006: R. Belmont - I'm still looking for samples of Konami RF5c400 games, but in the meantime Ville Linde and I have improved the emulation of the chip so that Gradius 4 and Solar Assault now sound very much like the real thing, and GTI Club isn't far behind. (NBA Play By Play and the Thrill Drive games have something very strange happening - either a mild address line swap on the sample data or the ROMs are in weird Konami byte mode or who knows what).
-  7th October   2006: R. Belmont - If you have a Konami PowerPC-based game or PCB with the RF5c400 sound system (check system16 or MAWS if you aren't sure - this includes games like Gradius 4, Solar Assault, NBA Play By Play, Thunder Hurricane, Thrill Drive, Racing Jam, and more) and it's in good working order, I need some samples off one to fix up the RF5c400 emulation in MAME/M1/hoot. Please PM me on one of the 3 boards I read: bannister.org, www.mame.net, or www.mameworld.info if you can supply stereo mp3 samples of such a machine. Update: Guru got me some samples from Gradius 4, which have given me 2 pieces of info about the chip I didn't previously have. Sweet. Many more samples are still needed to achieve decent emulation however.
- 0.103              : Some RF5C400 improvements [hoot development team].
- 0.102u1            : Added sound\rf5c400.c/h. Ville Linde added very, very preliminary emulation of the Ricoh RF5C400.
- PCB: RICOH RF5C400, PQFP (GTIClub, Gradius4). Ricoh RF5C400 PCM 32Ch, 44.1 kHz Stereo, 3D Effect Spatializer, clock input 16.9344MHz (hornet.cpp)
- DRIVERS: cobra.cpp, firebeat.cpp, gticlub.cpp, hornet.cpp, nwk-tr.cpp and twinkle.cpp
- SOURCE: sound\rf5c400.cpp



S13.6   Yamaha YMW-258-F

- 0.262              : Correct interpolation around sample loop point (sound\gew.cpp). Fixes 'SELECT' song in Virtua Racing [ValleyBell, Devin Acker].
- 0.256              : Implemented reverse flag (sound\gew.cpp) [Devin Acker].
- 0.254              : Added sound\gew.cpp/h. Some MultiPCM fixes (sound\gew.cpp; envelope behavior, sample lengths, stream updates and save state members) [Devin Acker].
- 0.249              : Changed which bit selects 12-bit samples, fixes (MESS) Yamaha MU-5 bad instruments [Laurens Holst, R. Belmont]. Correct address bus width. Make address space big-endian [AJR].
- 0.231              : Retrigger after writing to sample register if key is on (YMF278 also does this) [dink, hap].
- 0.227              : Ported 12-bit sample support from Yamaha SWP30, still needs work. Fixed endianness of word reads. Some 12-bit samples sound almost reasonable now. Found the real 12-bit format flag. Correct clock divider and clocks for users of YMW-258-F to match schematics [R. Belmont]. Fixed the 12bits mode decoding [O. Galibert].
- 0.225              : Update MultiPCM sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.217              : Added wrapper for using STRUCT_MEMBER with an indeterminate length array (emu\diexec.cpp). Examples in MultiPCM. Also used STRUCT_MEMBER to reduce clutter in diexec save state registration [Vas Crabb].
- 0.216              : Added optional compile-time sample logging [Ryan Holtz].
- 0.214              : Eliminated auto_alloc. Saner pointer allocation [AJR].
- 0.194              : Avoid unnecessary initialization and fixes division by zero [Oliver Stoeneberg]. Moved bank schemes to DEVICE_ADDRESS_MAP and allow 512 Samples (0x1800 Header size, 12byte Header per sample) [cam900].
- 0.189              : Changed description to 'Yamaha YMW-258-F'. Confirmed Sega 315-5560 as Yamaha YMW-258-F [ANY, R. Belmont].
- 0.186              : Changed description to 'Sega/Yamaha 315-5560 MultiPCM'.
- 0.177              : Make multipcm cache sample data on KeyOn [MooglyGuy].
- 0.168              : Mass cleanup of MultiPCM [MooglyGuy].
- 0.150              : Modernized MultiPCM device [Osso]. Use address space instead of direct memory region. Fixed invalid error message and copy/paste typo [R. Belmont].
- 0.147              : Added 'Sega/Yamaha 315-5560' device.
- 0.125u7            : Changed description to 'Sega/Yamaha 315-5560'. MultiPCM/315-5560 rewrite. All features are now supported including PLFO and ALFO [ElSemi].
- 0.123u5            : Saturate MultiPCM on clip and fix envelope discontinuity [ElSemi].
- 0.97u5             : Aaron Giles cleaned up bank handling in Sega Multi-PCM sound core.
- 0.93               : Changed description to 'MultiPCM'.
- 30th June      2003: R. Belmont sent in an update to the MultiPCM sound chip emulator, adding a new banking mode used by Stadium Cross, though the sound in that game is still not perfect.
- 12th April     2003: R. Belmont added save state support to the MultiPCM sound core and did a little cleanup on it.
- 0.67               : Added sound\multipcm.c/h. Sega 315-5560 "MultiPCM" sound chip emulation [R. Belmont].
- 31st January   2003: R. Belmont sent in a very preliminary System 32 Multi driver in which basically only the MultiPCM sound works, nothing else.
- NOTES: Yamaha YMW-258-F 'GEW8' (aka Sega 315-5560)
- DRIVERS: model1.cpp, model2.cpp and segas32.cpp
- SOURCE: sound\multipcm.cpp and sound\gew.cpp


S13.7   Sega Z80-based Digital Sound Board

- 0.268              : Fixed volume. Added variables into save states. Cleanups. Moved devices into private. Initialize variables at machine start. Removed hardcoded tags and literal tag usage. Added notes. Fixed spacing. Constantize values. Use correct typename values (sega\dsbz80.cpp) [cam900]. Don't leak the MPEG audio decoder and don't initialise the sample buffer on construction - it happens on reset anyway (sega\dsbz80.cpp) [Vas Crabb].
- 0.226              : Update audio\dsbz80.cpp to new stream callbacks [Aaron Giles].
- 0.221              : Simplified some handlers (audio\dsbz80.cpp) [Osso].
- 0.192              : Fixed music and reduced log spam (audio\dsbz80.cpp, machine\m3comm.cpp) [AJR].
- 0.152              : hap removed YMZ770_TAG define.
- 0.148              : De-skeletonized Sega Z80 type Digital Sound Board, hooked up to Star Wars Arcade [R. Belmont, O. Galibert].
- 0.145              : Added audio\dsbz80.c/h. R. Belmont added skeleton device for Z80 version of the Model1 MPEG sound board. No playback, just running the Z80.
- DRIVERS: model1.cpp, model2.cpp and model3.cpp
- SOURCE: audio\dsbz80.cpp



S13.8   Sega 68k-based Digital Sound Board 2

- 0.278              : Added sega\dsb2.cpp/h. Hookup DSB2 MPEG device [Angelo Salese].
- DRIVERS: flashbeats.cpp, model2.cpp and model3.cpp
- SOURCE: sega\dsb2.cpp


S14.    Seta

S14.1   X1-010

- 0.230              : Clamp output samples to within range [AJR].
- 0.225              : Update X1-010 sound to new stream callbacks [Aaron Giles].
- 0.220              : Accurate frequency calculation. Minor cleanups. Reduced unused and unnecessary lines. Fixed notes and spacing. Use shorter/correct type values [cam900].
- 0.201              : Simpler handlers for X1-010 sound [cam900].
- 0.195              : Improved naming of member variables/functions [cam900].
- 0.186              : Changed description to 'Seta X1-010'.
- 0.166              : Minor X1-010 sound fixes [kazblox].
- 0.163              : Implemented X1-010 frequency division flag. This fixed X1-010 sound playback is wrong, garbage or wrong pitch in some instances [superctr].
- 0.156              : Fixed frequency for X1-010 and added a note. I know PhilB is working on a totally new driver, but this should be fixed anyways. It's a very small change, but fixes a lot of things and breaks nothing as far as I can tell [trap15].
- 0.154              : Converted X1-010 to use inline config [Fabio Priuli].
- 0.149u1            : Modernized the X1-010 device (drivers\champbwl.c, seta.c and seta2.c) [Osso].
- 0.65               : Added sound\x1_010.c/h. Nicola Salmoria added stereo support to the X1-010 emulator and made it a proper sound core.
- 20th August    2002: Manbow-J submitted an improvement to the X1-010 (Seta PCM) sound chip emulation.
- NOTES: The Seta Custom Sound Chip X1-010 is a 16 voices sound generator, each channel gets it's waveform from RAM (128 bytes per waveform, 8 bit unsigned data) or sampling PCM (8bit unsigned data).
- PCB: X1-010, QFP80 Sound Chip (Champbwl), Mitsubishi X1-010 M60016 CALRUA (Deerhunt)
- DRIVERS: champbwl.cpp, seta.cpp and seta2.cpp
- SOURCE: sound\x1_010.cpp


S14.2   ST0016 (Audio)

- 0.241              : Hold onto memory cache handler change subscriptions (emu\emumem.h). Don't try copying memory access caches (sound\st0016.cpp) [Vas Crabb].
- 0.237              : Fixed sound pitch related to CPU clock. Use struct for each voices. Minor fix in sample position. Use device_memory_interface for fetching sample behavior. Added notes [cam900].
- 0.186              : Changed description to 'Seta ST0016 (Audio)'.
- 0.155              : Added 'ST0016 (Audio)' device.
- 0.148u2            : Modernized ST0016 sound device [Andrew Gardner].
- 0.93               : Changed description to 'ST0016'.
- 0.81u7             : Added sound\st0016.c/h. R. Belmont and Tomasz Slanina added ST-0016 stereo sound to the ST0016 driver. Neratte Chu and Renju Kizoku now have sound.
- 20th April     2004: R. Belmont added support for looping samples and fixed a few other things in the ST-0016 sound chip emulation.
- 19th April     2004: R. Belmont added sound to the Seta ST-0016 driver and David Haywood fixed a slight bug in it.
-  7th March     2004: Tomasz Slanina - More Seta ST-0016 stuff (in multicpu games only st-0016 is emulated): Mayjinsen (V810 + ST-0016), Mayjinsen 2 (V810 + ST-0016), Super Eagle Shot (R3000 + ST-0016), Super Real Mahjong P5 (R3000 + ST-0016) - No gfx .. sound code is executed every frame and Neratte cyuh! (ST-0016) - Problems with rombanking.
- NOTES: Seta ST0016 (Audio) custom chip sound emulation by R. Belmont, Tomasz Slanina and David Haywood
- PCB: SETA ST-0016 TC6187AF (Speglsht), SETA ST-0016 TC6210AF (Mayjisn2, Nratechu), ST-0016 (Srmp5)
- DRIVERS: jclub2.cpp, macs.cpp, simple_st0016.cpp, speglsht.cpp and srmp5.cpp
- SOURCE: sound\st0016.cpp


S14.3   ST0026

- 0.230              : Changed sound\nile.cpp/h to sound\setapcm.cpp/h. Refactored Seta sound [cam900].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.206              : Added save states support [cam900].
- 0.186              : Changed description to 'Seta ST-0026 NiLe'.
- 0.148              : Modernize the NiLe sound device [Andrew Gardner].
- 0.147              : Added 'NiLe' device.
- 0.139u1            : Removed global variables from Nile ST-0026 sound core [Atari Ace].
- 0.125u9            : Fixed NiLe pitch calculation [h0pdmiYX0].
- 0.125u7            : Added sound\nile.c/h. ST-0026 NiLe (sound) emulation [Tomasz Slanina, R. Belmont]. Added audio to Super Real Mahjong P6.
- NOTES: Seta ST-0026 NiLe (Sound)
- DRIVERS: srmp6.cpp
- SOURCE: sound\setapcm.cpp


S14.4   ST0032

- 0.230              : Refactored Seta sound, adding preliminary ST0032 sound support. Hooked up ST0032 sound to jclub2.cpp [cam900].
- NOTES: Seta ST-0032 (Sound)
- DRIVERS: jclub2.cpp
- SOURCE: sound\setapcm.cpp




S15.    Hudson Soft


S15.1   Hudson HuC6230

- 0.243              : Code review some dubious paths (sound\huc6230.cpp) [Angelo Salese].
- 0.225              : Update HuC6230 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.218              : Fixed ADPCM frequency. Make ADPCM less louder. Fixed naming related to patents. Fixed stream sample rate related to PSG output rate. Added notes. Note: ADPCM is still noisy and imperfect [cam900].
- 0.202              : Fixed PSG. Converted ADPCM update to timer callback. Implemented CD-DA Volume [cam900].
- 0.201              : Added sound\huc6230.cpp/h. Added HuC6230 emulation [cam900].
- NOTES: https://patents.google.com/patent/US5692099
- DRIVERS: (MESS) pcfx.cpp
- SOURCE: sound\huc6230.cpp



S15.2   Hudson HuC6280

- 0.277              : Improved accuracy of volume control and LFO (sound\c6280.cpp) [cam900]. Optimization for games that have sound disabled [hap].
- 0.232              : Fixed C6280 volume envelope shape [Leonardo Demartino].
- 0.225              : Update HuC6280 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.218              : Fixed noise, volume calculation and interface behavior related to manual. Modernized save states. Use shared index between wavefrom writing and sound playback. Fixed spacings/namings. Use correct/shorter type values. Added notes. Reduced unnecessary lines. Reference: https://archive.org/stream/PCEDev/HuC6280%20-%20CMOS%20Programmable%20Sound%20Generator%20Manual [cam900].
- 0.209              : Fixed LFO enable bit. Implemented LFO reset bit behavior. Correct frequency behavior. Added notes [cam900].
- 0.206              : Removed MCFG macros (sound\c6280.h) [Ryan Holtz].
- 0.204              : Fixed LFO scale bit [cam900].
- 0.201              : Changed description to 'Hudson Soft HuC6280 PSG'. Added notes [cam900].
- 0.198              : Implemented LFO. Fixed channel check when LFO is enable. Added notes [cam900].
- 0.186              : Changed description to 'Hudson HuC6280'.
- 0.154              : Converted HuC6280 to use inline config [Fabio Priuli].
- 0.149              : Minor improvements to PCE save state reliability (sound\c6280.c) [Fabio Priuli].
- 0.147              : Added 'HuC6280' device (sound\c6280.c).
- 0.148              : Modernized the C6280 sound core [MooglyGuy].
- 0.128u5            : Aaron Giles fixed all sets with HuC6280 as Audio Device (PCE-Based titles): Fatal Error after OK.
- 25th November  2007: Charles MacDonald - The HuC6280 PSG used in the PC Engine and several Data East arcade games has six "tone" channels which output a short waveform (32 x 5-bit samples) repeatedly. The last two channels have independent random noise generators that replace the tone output, which generate one bit per sample, interpreted as the minimum ($00) or maximum ($1F) sample value. For the purposes of accurate emulation it would be useful to know exactly how the random data is generated. This involves two steps; analysis of the recorded noise output and determining the type of random noise generator being used. Both the tone and noise channels can be configured to run at the same frequency. I chose the slowest ones, $00 for noise and $3E for tone output which is approximately 1804 Hz. The tone output was loaded with a square wave, such that within one sample of the noise output (one bit) there is a full square wave on the tone output. This provided a reference "clock" for the noise "data", which was used for extracting the noise bitstream from the recorded output of the chip. The clock had one transition at the same time the noise output changed and another in the middle when the output has settled somewhat. During playback, the tone sample buffer index is not necessarily in sync with the noise output, it can be offset by up to 32 samples. By toggle the frequency of the tone channel briefly using the control pad, it was possible to change the index. With a little trial and error you can get the two perfectly aligned. I'm not too familiar with audio processing in general, but I could see that the problem of extracting digital data from an analog source was something a Schmitt-triggered input would be capable of doing in an electronic circuit. I implemented this in software, in the form of a program that would look at both channels and reconstruct the clock and data bitstreams by applying hysteresis to the recorded samples. When the clock had a negative pulse, the data was in a valid state and it's current state was recorded. This type of processing also had the advantage of being able to handle situations where the noise output had multiple 1's or 0's in sequence; the output would decay towards zero after an initial peak, but the hysteresis prevented this from looking like a sequence of "100000" rather than it's actual value of "111111". With the bitstream reconstructed, it was time for some analysis. One way to generate random bits is with a linear feedback shift register (LFSR) something that is easy to implement in hardware. Gridle pointed out a very useful program that implements the Berlekamp-Massey algorithm for determining the shortest LFSR that matches a given bitstream: http://www.qualcomm.com.au/PublicationsDocs/b-m.c  According to the program it was a LFSR! The LFSR was 18 bits, with bits (LSB) 0, 1, 11, 12, and 17 (MSB) tapped. Assuming a right-shift on each clock pulse, the bit shifted out is the noise sample. The tapped bits are XOR'd together and inserted into bit 17. After /RESET is asserted the LFSR is initialized with bit 0 set and all other bits reset. It has a maximum sequence of 131071 bits before repeating. To confirm this I wrote a test program that generated a bitstream based on the LFSR, and then searched for that sequence within the extracted bitstream from a recording. As expected the generated bitstream was found and it repeated every 131071 bits within the recording. I wanted to see which registers affected the LFSR, but as it turns out none of them do except for the LFSR frequency control. If the channel is turned on or off, noise is turned on or off, or if any other setting is adjusted, the LFSR always runs at the specified noise frequency. Apart from a reset, the LFSR state can't be changed. I did a few more recordings at other frequencies and on other systems (using a mix of HuC6280 and HuC6280A chips) to confirm the results; and indeed the findings were identical each time. The only unknown is how the random noise generator of the PC-FX sound chip works, which contains the same PSG core with ADPCM output added. One of these days I'd like to look at the random noise generator used in the Namco NA-1 board, it's internal state can be read and written during playback, and clocked 'manually' one step at a time. It should be possible to extract the bits without recording any samples and analyze that directly.
- 0.103u2            : H6280 updates [Rob Bohms]: Added T-flag emulation. Fixed read calls (cpu\h6280\h6280.c and sound\c6280.c).
- 0.67               : Added sound\c6280.c/h. HuC6280 sound emulation [Charles MacDonald].
-  1st April     2003: Charles MacDonald submitted a HuC6280 sound chip emulator and added support for it in the Battle Rangers / Bloody Wolf driver.
- NOTES: Remember (!) there is also the HuC6280 CPU in MAME. The HuC6280 sound chip emulator based on Paul Clifford PSG documentation and Richard Bannister TGEmu.
- PCB: KIA6280 (Legendoh)
- DRIVERS: actfancr.cpp, battlera.cpp, boogwing.cpp, cbuster.cpp, cninja.cpp, darkseal.cpp, dassault.cpp, dec0.cpp, deco32.cpp, dietgo.cpp, funkyjet.cpp, ggconnie.cpp, madmotor.cpp, paranoia.cpp, rohga.cpp, supbtime.cpp, tourvis.cpp, uapce.cpp and vaportra.cpp
- SOURCE: sound\c6280.cpp





S16.    Philips

S16.1   SAA1099

- 0.238              : Fixed output behavior when both noise and tone are enabled [cam900].
- 0.225              : Update SAA1099 sound to new stream callbacks [Aaron Giles].
- 0.223              : Fixed output and frequency behavior. Added notes. Reduced unnecessary, unused values, duplicates and macros [cam900].
- 0.217              : Modernized struct member save registration. Use narrower types for members. Clean up code slightly [AJR]. Added padding to saa1099_noise to force alignment on Linux i686 [Vas Crabb].
- 0.209              : Simplified handlers [cam900].
- 0.190              : Removed unnecessary device tag from logerror messages [AJR].
- 0.187              : Created standard write handler; substitute for bogus YM2413 in Magic Card. Zero writes are not errors (logerror()) [AJR].
- 0.186              : Changed description to 'Philips SAA1099'.
- 0.183              : Use the correct LFSR polynomial for the SAA1099 noise generation and added some notes about an unemulated undocumented feature of the noise clock [Jepael, Lord Nightmare].
- 0.164              : Fixed SAA1099 driver to actually use clock [kazblox].
- 0.159              : Added save state support to SAA1099 [Osso].
- 0.148u2            : Modernized SAA1099 sound device [Andrew Gardner].
- 0.147              : Added 'SAA1099' device.
- 0.137u3            : MPU4+Video updates [Phil Bennett, David Haywood]: Fixed serial comms. As a result, most games actually boot now. Fixed colours. Fixed SAA1099 sound. Added Characteriser tables for all games (a complete implementation is still needed for most games).
- 0.37b7             : Added sound\saa1099.c/h.
- 20th July      2000: Manuel Abadia submitted a Philips SAA1099 sound chip emulator.
- NOTES: Philips SAA1099 sound
- PCB: SAA1099P (Xorworld)
- DRIVERS: bingor.cpp, blitz68k.cpp, jpmsys5sw.cpp, manohman.cpp, mastboy.cpp, mpu4vid.cpp and xorworld.cpp
- SOURCE: sound\saa1099.cpp


S16.2   SAA71111
- PCB: Philips SAA71111AH2 20505650 bP0219, QFP64 (Chameleon 24-in-1)
- DRIVERS: cham24.cpp




S17.    Capcom

S17.1   QSound

- 0.278              : Adding parent rom reference to qsound, function body in cpp file (sound\qsoundhle.cpp) [hap].
- 0.225              : Update QSound to new stream callbacks [Aaron Giles].
- 0.222              : READ/WRITE macros removal (sound\qsound.cpp) [Osso].
- 0.220              : Simplified some handlers [Osso].
- 0.203              : Saturate voice and output accumulators (The DSP16A accumulator has built in saturation). Fixes clipping in Super Puzzle Fighter II Turbo and possibly others [superctr].
- 0.201              : Added device_clock_changed [smf]. Saturate ROM offsets (sound\qsoundhle.cpp). Apply ADPCM sample bank (sound\qsound.cpp) [superctr]. Added improved qsound_hle core. Use ROM lookups instead of copying tables at init and use enums for most DSP ROM addresses. Replacing memset at the cost of legibility (sound\qsoundhle.cpp) [Lord Nightmare].
- 0.196              : Added sound\qsoundhle.cpp/h. QSound LLE available with a 3-character change. Clean up host and DAC comms a bit, hopefully fix desync (sound\qsound.cpp). Changed sample rate and playback behaviour to better match DSP for qsound_hle. Simplified sample fetch/scale and register writes for qsound_hle [Vas Crabb].
- 0.153              : Cleanup QSound. No practical changes here except that i removed support for LOG_WAVE raw sound filewriting. Updated soundstream before writing (tsk). Reg 3 is key on. Small fix to sample start and loop. Guru measured qsound music timing [hap].
- 0.148u5            : Added QSound internal DSP ROM to the device [Andrew Gardner]. FILE location update (sound\qsound.c) [Miodrag Milanovic].
- 12th January   2013: Andrew J. Gardner - Remember the last post below? The one where Dr. Decap decapped a mystery chip? Well, as noted on his blog shortly after (which now appears to have departed), it was the QSound chip, found in nearly every CPS2 game and a handful of others (zn.c & cps1.c). QSound is a chip capable of spatializing sound samples in a 3d manner. To do this, a Head Related Transfer Function is run on the sounds as they are played. In the QSound chip, this function is executed by an on-die AT&T DSP16A CPU, currently unemulated in MAME (its CPU core is only a disassembler). MAME's QSound emulation already plays audio samples, but not in their fully-spatialized awesomeness, so to get the full QSound experience we need to emulate the DSP16A so it can run its internal program on the samples. As with many of these decaps, the HRTF program was locked away in the QSound chip. Two years ago, the doc photographed it, and things began to unfold. The doc's photos were decent, and after some work by s_bastian, the monkeys sprung into action. All the bits were typed up within a couple of weeks, and we had ourselves a bit pattern. Problem was, this one was very difficult to decode. I tried and failed (twice), and every few months I'd prod other devs to see if they were up to the challenge. At least one of them found it really difficult as well. But then, near the end of 2012, Quench (as with a lot of other decap decodings) saved the day, giving us a proper decode. And here we are... A good deal of work remains before the QSound DSP16 HRTF algorithm runs in MAME, but we're on our way. The DSP16A CPU core needs its opcodes implemented so it can run the software us monkeys typed up, and the glue logic inside the QSound chip will need to be figured out as well. Adding to the challenge, a few difficult regions of the decap photos mean a few opcodes might be wrong, and given that this is the only dump we have of DSP16A software (unless someone out there finds additional software?), it will be a challenge to make work correctly. All-in-all this is great new for QSound fans! Thanks to Quench, hopefully now it will just be a matter of time before the DSP16A in the QSound chip runs its proper HRTF algorithm on the sound samples. MAME 0.148 contains a few opcodes for the DSP16 CPU core, and more will be forthcoming. Keep an eye on the whatsnew.txt for work on the DSP16A CPU core. The better this core gets, the more potential MAME has for emulating the QSound chip properly. I'll do my best to report any successes (big or small) we might have along the way.
- 0.148              : Modernize the QSound device [Andrew Gardner]: The one that started it all. It works now. No idea what I was doing wrong before, but I'm not doing it anymore. It appears as though a clean build might be necessary for this one to take. I've tested more CPS2 games than I care to mention, a bunch of zn games, and a cps1 game and they all are happy, so we should be good. Now for the fun stuff...
- 0.109u1            : David Haywood added bounds checking to the Qsound driver.
- 0.94u1             : Aaron Giles fixed '3 speaker problem' with Qsound.
- 0.93               : Changed description to 'Q-Sound'.
- 0.88               : Added Qsound save state support (thanks to Mame32Plus).
- 27th December  1999: Paul Leaman sent in a small Qsound update to the alternate Qsound player.
- 0.36b11            : Changed sndhrdw\cpsq.c to sound\qsound.c/h. QSound player (preliminary) [CAB, Paul Leaman, Miguel Angel Horna].
-  5th December  1999: Paul Leaman merged his and Miguel's Qsound cores.
-  4th December  1999: Miguel Angel Horna sent in yet another Qsound update.
- 30th November  1999: Miguel Angel Horna submitted yet another Qsound driver, which sounds pretty good now.
- 28th November  1999: Miguel Angel Horna and Paul Leaman both submitted a Qsound driver, but neither of them are working correctly.
-  1st August    1999: Paul Leaman added some kind of sound to the Qsound games, but frequency and length of the samples aren't yet right.
- 0.35               : Added sndhrdw\cpsq.c.
- 30th June      1999: Paul Leaman sent a new CPS-1 driver with stub functions for the Qsound system. It doesn't play anything yet, but simple sample playing shouldn't be far off.
- 13th February  1999: More progress on the CPS1 driver. Some of the later CPS1 games utilizing the Q-sound system are now working (such as Cadillacs & Dinosaurs, Punisher and Warriors of Fate), and a few minor bugs have been fixed. No sound though, because the Q-sound roms are encrypted. Information about 'Kabuki' encryption system is very welcome.
- NOTES: Capcom System QSound with 16 channel stereo sample player. QSpace position is simulated by panning the sound in the stereo space. Many thanks to CAB, the author of Amuse.
- GAMES: Capcom - Warriors of Fate (1992), The Punisher (1993), Mega Man 2 (1996)
- DRIVERS: cps1.cpp, cps2.cpp and zn.cpp
- SOURCE: sound\qsound.cpp and qsoundhle.cpp



S17.2   DSP16

- 0.222              : READ/WRITE macros removal [Osso].
- 0.221              : Removed some dummy_space() calls [smf].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.201              : Fixed a couple of typos pointed out by Coverity (dsp16\dsp16fe.cpp) [MoochMcGee].
- 0.198              : Better rnd on negative (dsp16\dsp16core.ipp). Fixed condition mask in disassembler (dsp16\dsp16dis.cpp) [Vas Crabb].
- 0.197              : Improved performance of DSP16 interpreter a little by generating six variants of execution loop. Bypass DSP16 memory system for work RAM access when debugger is disabled - gives small performance gain [Vas Crabb].
- 0.196              : Removed cpu\dsp16\dsp16ops.hxx. Added cpu\dsp16\dsp16core.cpp/h, dsp16core.ipp, dsp16rc.cpp/h and dsp16fe.cpp/h. Rewrote/Improved DSP16 disassembler. Less ambiguous, more like the manual. Less cluttered output, better handling of ambiguous operations, look-ahead for predicated jumps, live will/won't comments on conditional instructions (cpu\dsp16\dsp16dis.cpp). Cycle-accurate DSP16 core (disabled in QSound for performance reasons). Start adding DSP16 recompiler boilerplate. Marginal DSP16 performance improvement by precalculating SIO clock divider preload, also push ILD/OLD on mode change. Moved most core state into DRC cache - keeps a lot of details out of the main header (DRC is still stubbed out) [Vas Crabb].
- 15th March     2018: Vas Crabb - The DSP16A is an interesting chip. It's like the great granddaddy of VLIW and EPIC: * The instruction set is explicitly parallel, and it can manage a 16*16->32 multiply, a 32+36->36 or 36+36->36 addition, a 12+12->12 addition, a 16+16->16 (9+9->9 on DSP16) addition, two 8-bit increments, a ROM fetch, and a RAM access in a single cycle. Yes, the word is "and", although there are limitations on the exact combinations you can use. * There are effectively no general-purpose registers - every register has an assigned role, although in some cases a few registers are interchangeable (e.g. the two accumulators and four RAM pointers).* It has dedicated silicon for saturation and rounding. * It doesn't actually have a fused multiply/add instruction (aka FMA, multiply/accumulate, MAC) - if you issue a multiply and an add in the same instruction, the add operates on the previous multiplication's product. * It has an on-board pseudorandom sequence generator. * It normally overlaps the ROM fetch for the next instruction with the current instruction, but it has a manually managed 15-instruction cache in the control unit. When executing from cache, it can overlap a ROM data fetch for the next instruction with the current instruction for higher throughput. By executing a tight loop from cache, you can make a very fast FIR filter with coefficients in ROM. * Although the DSP16 can only use internal program ROM or external program memory, but not both at the same time, the DSP16A can access external program memory while the internal ROM is enabled (QSound uses this to read sample data). * It supports multi-master time-division multiplexed synchronous serial protocols, making it ideal for processing circuit-switched voice calls in phone network switches. * The QSound DSP runs at 30MHz (60MHz clock input divided by two). On CPS2, it's already clocked at almost three times the speed of the main 68k CPU, it can issue an instruction every one or two cycles, and it can do up to four operations per instruction. The 68k main CPU takes several cycles to execute most instructions, and multiplies are particularly time-consuming. The QSound DSP is far more powerful than the main CPU - maybe 40 times the throughput. The QSound program has been dumped for some time, and MAME has a DSP16 core. However, it doesn't implement all the functionality required to run the QSound program, and it isn't cycle-accurate, which is needed for the QSound DSP to output at a consistent sample rate. MAME's QSound device will show disassembly for the DSP program, but it won't do anything else with it. The only effects used are volume control and a simple panning table. I've written a DSP16 core with enough functionality to run the QSound program that runs at machine cycle granularity and hooked it up in a private branch. The QSound program works, and effects are present. So what's the catch? Emulating a fast DSP costs performance - you'll need a fast computer to run it at full speed in its current form. I'm considering writing a recompiler for the DSP16 which would yield a large performance improvement. If you want to try out the first emulator with real QSound support, the source is on github here (https://github.com/cuavas/mame/tree/dsp16). Be aware that it requires a fast computer to run CPS2 at full speed. It also prints some nasty validation errors, but they don't stop it from working The new QSound device source file has some notes on how it works at a high level. I've attached a recording of the first thirty seconds of Street Fighter Zero 2 Alpha (Japan). The QSound jingle at about 8s plays all sixteen channels simultaneously with effects enabled. From about 18s you can hear the beginning of the attract loop music.
- 0.193              : Added cpu\dsp16\dsp16dis.h.
- 0.186              : Updated QSound/DL-1425 ROM and comments with corrections from recent decap [Lord Nightmare, Siliconpr0n, superctr, Quench].
- 0.180              : Changed the DSP16A disassembler to use 'std::ostream &' internally [Nathan Woods]. Fixed a bug in DSP16 caused by incorrect use of macro [Vas Crabb].
- 0.174              : Changed cpu\dsp16\dsp16ops.inc to cpu\dsp16\dsp16ops.hxx. INC -> HXX makes editors and code analyzers see it as C++ [Miodrag Milanovic].
- 0.153              : Changed cpu\dsp16\dsp16ops to dsp16ops.inc [Oliver Stoeneberg]. DSP16 has an internal /2 divider [hap].
- 0.149u1            : DSP16 improvements [Andrew Gardner]: Fixed R=M disassembly. Added flag formatting. Shadow register is hooked up. Opcode & flag fixes.
- 0.148u5            : Added the QSound internal DSP ROM to the device [Andrew Gardner].
- 0.148u1            : Additional DSP16 opcodes & disassembly fixes. The PC moves on from potentially all used DSP16 opcodes now. I believe I've roughed in each of the opcodes the QSound program uses (every opcode the dsp16 has except three, apparently). Even without all flags being set and conditions being tested, reasonable memory regions are being accessed. Unfortunately, though, I've found what I believe to be my first bad opcode (at PC=03e6 and will have to do a bit of spelunking to see what I can make of that). Switch -> if (dsp16\dsp16ops.c) [Andrew Gardner].
- 0.148              : Added cpu\dsp16\dsp16ops.c. Added DSP16 registers and implemented the goto opcode. Added DSP16 16-bit immediate load opcode. Fixed reset behavior. Code reorganization. Fixed compile (dsp16_device_start()). DSP16 simplification and additional work. Few more DSP16 opcodes & spaces->tabs. Two more DSP16 opcodes for the fixed-point math enjoyment [Andrew Gardner]. Fixed U64 compile issues [Angelo Salese].
- 0.147              : Oliver Stoeneberg fixed some printf format string warnings reported by Cppcheck (cpu\dsp16\dsp16dis.c).
- 0.141u2            : Added cpu\dsp16\dsp16.c/h and dsp16dis.c. A new WE DSP16A CPU disassembler [Andrew Gardner].
- 24th January   2011: Dr. Decapitator - The Capcom DSP16A (#17 on the status page) has been decapped.
- GAMES: Used on Capcom CPS1/2 and some ZN1/2 based Capcom games (Gallop Racer/SFEX/EX2 etc).
- PCB: Q-Sound chip also stamped DL-1425 45570 9420S 40 (C)92 AT&T (PLCC84) or DL-1425 11008 9741T 74 (C)92 LUCENT (PLCC84).
- PCB: DSP-16P DL1425 (Sfexp, Sfex2), DL-1425 DSP-16A (C) 92 AT&T - CAPCOM-Q1 QSound Processor (CPS2), DL 1425
- DRIVERS: cps1.cpp, cps2.cpp and zn.cpp
- SOURCE: cpu\dsp16\dsp16.cpp



S18.    Nanao

S18.1   GA20

- 0.225              : Update Irem GA20 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.203              : Rewrote Irem GA20 channel update to make data 0 act as sample terminator. Note: In all currently supported GA20 sample ROMs, samples are followed by 1 to 16 bytes with value 00 (depends on alignment). Thus I assume that this is a sample end marker. The "sample end" register might be used for something else (looping?) [Valley Bell]. Assumed keyon is at reg 6 bit 1 (not just any non-0 value), removed 2nd end of sample check, misc refactor and added notes [hap].
- 0.148u1            : Modernized Irem GA20 sound device [Andrew Gardner].
- 0.147              : Added 'Irem GA20' device.
- 0.112              : R. Belmont rewrote faux x86 assembly in the Irem GA20 sound core.
- 0.94u1             : Changed description to 'Irem GA20'.
- 0.93               : Sound System update: Acho cod... transmission lost [Aaron Giles].
- 0.89u5             : IremGA20 64-bit crash fix [Stephen Behling].
- 0.80u2             : R. Belmont added channel status readback to the GA-20, which fixes some occasional odd voice-stealing behavior I've heard playing R-Type Leo.
- 0.79u2             : R. Belmont fixed Irem GA-20 pitch.
- 18th February  2004: R. Belmont - Reverse-engineered the proper pitch calculation for the Irem GA-20 sound chip and submitted to MAMEdev. I no longer need samples from those games. Thanks to Fujix, Yasuhiro Ogawa, the Guru, and Tormod for real PCB samples that made this possible.
- 17th February  2004: R. Belmont - Japump has kindly sent samples from an R-Type Leo and Guru's got a Gunforce. Samples from any other games using an Irem GA-20 are still needed though.
- 14th February  2004: R. Belmont - Looked into the pitch calculation for the Irem GA-20. I have something that works a lot better (R-Type Leo's music all matches the OST now) but it's still not perfect. I need PCB recordings from the test menu of a GA-20 based game (R-Type Leo would be great, but any MAME m92.c or m107.c game would probably work). Please private message me on one of the 3 boards I read (the bannister.org M1 board, the MAME.net board, or the MAMEWorld boards) if you can do this.
-  7th January   2003: Bryan McPhail fixed the IremGA20 sound chip emulation from crashing if sound was turned off.
- 30th May       2002: Acho A. Tang did a few small cleanups in various drivers and improved the Irem GA-20 sound chip emulation slightly. Applied hyperbolic gain control to volume and used a musical-note style progression in sample rate calculation(still very inaccurate).
- 18th April     2002: Acho A. Tang improved the Irem GA-20 sound chip emulation which helps some of the games on the Irem M-92 hardware. Rewrote channel mixing and added prelimenary volume and sample rate emulation.
- 11th January   2002: Acho A. Tang submitted a modification to the Irem GA20 sound chip emulation, which partially fixes some sample pitch problems in the Irem M-92 driver.
- 0.37b8             : Added sound\iremga20.c/h. Preliminary Irem GA20 sound emulation [Bryan McPhail]. Bryan McPhail added preliminary sound in Blade Master, Gunforce, UUCops and Lethal Thunder.
- 11th September 2000: Bryan McPhail sent in a huge Irem games update with a rewritten NEC core, fixing many bugs. R-Type Leo title screen was fixed as well as preliminary Irem GA20 custom sample player support was added.
- PCB: Nanao GA20, QFP80 (Gunforc2), Nanao-GA20 (Inthunt, Uccops)
- DRIVERS: m92.cpp and m107.cpp
- SOURCE: sound\iremga20.cpp







S19.    Ensoniq

S19.1   ES5503

- 0.279              : Fixed error in emulation of oscillator over-contribution glitch (GitHub #13669) and use m_ prefixes consistently (sound\es5503.cpp) [Kelvin Sherlock, R. Belmont]. Oscillators halted by the CPU have the same behavior as those halted internally if the low bit of the mode is set, as per the datasheet. Fixes Skate or Die for the Apple IIgs's music freezing (sound\es5503.cpp) [R. Belmont, Peter Ferrie].
- 0.255              : Support sync and AM modes and the last oscillator volume bug [R. Belmont].
- 0.253              : Preserve fractional phase, allows high-freq sample play [Peter Ferrie]. Cleaner fix for preserving the full accumulator phase on looping [Kelvin Sherlock, R. Belmont].
- 0.248              : More correct behavior in some swap-mode corner cases [R. Belmont].
- 0.240              : Fixed interpretation of oscillator enable register (GitHub #9045; Music Studio is out of tune in Apple IIgs). The Mirage boot ROM spams $FF to the oscillator enable register, so handle it. Additional cleanups to oscillator enable usage [R. Belmont].
- 0.236              : Initialized variable properly. Clean up code a little [AJR].
- 0.233              : Bits 0 and 6 are always high for this register [Tim Lindner].
- 0.225              : Modernized ES5503 device. Use put_int for sample scaling and fill_n for faster clear. Fixed some corner cases with swap mode on even vs. odd oscillators. Use std::vector as intermediate buffer and resize on sample rate changes [R. Belmont]. Update ES5503 sound to new stream callbacks [Aaron Giles].
- 0.217              : Modernized save state registration [R. Belmont].
- 0.209              : Simplified handlers [cam900].
- 0.201              : Added DEVCB3 accessors [Ryan Holtz].
- 0.200              : Fixed bad playback of synthLAB sampled-attack looped-sustain instruments [R. Belmont].
- 0.163              : Improved Ensoniq 5503DOC Swap Mode. If one oscillator is in swap mode, its partner should be treated as being in swap mode, even if it is set to one shot. This behavior is undocumented in literature from Ensoniq, but exploited by software developers. This change allows Ninjaforce's NinjaTracker to correctly play looped instruments [NJRoadfan].
- 0.153              : ES5503 use DEVCB2 instead of custom callbacks [Miodrag Milanovic].
- 0.147u4            : Make the number of ES5503 output channels configurable [O. Galibert].
- 0.147              : Preserve ES5503 phase when oscillators loop. Fixed IRQ timing error introduced when I did the device conversion [R. Belmont].
- 0.145              : R. Belmont cleared all ES5503 oscillator params on reset. This fixed Moonquake exception in debug build. Note: I couldn't reproduce the crash reported under any build on any OS, but Valgrind indicated out-of-bounds reads without this change and none with it.
- 0.143u5            : Converted ES5503 to modern device, improved IRQ timing [R. Belmont]. Changed description to 'Ensoniq ES5503'.
- 0.142u2            : Properly mask ES5503 oscillator enable bits when setting [R. Belmont].
- 0.114              : R. Belmont made behavior of ES5503 IRQ status register more accurate.
- 0.113u4            : ES5503 updates [R. Belmont]: Major fixes to IRQ semantics and end-of-sample handling. Sample memory now configurable. Added state save support. Calculates output rate properly based on the input clock. Hooked up properly to Moonquake.
- 0.113u3            : ES5503 improvements [R. Belmont]: Fixed extraneous click at end of samples. Improved timing behavior. Fixes music tempo in many Apple IIgs apps and games in MESS.
- 0.109              : R. Belmont fixed ES5503 behavior for voice volumes > 127 (cures missing sounds/music notes in several Apple IIgs demos and games).
- 0.105u3            : Added sound\es5503.c/h. ES5503 emulation [R. Belmont].
- 16th March     2005: R. Belmont - I submitted first-pass working ES5503 emulation to MESS for their now-in-CVS Apple IIgs driver.
- NOTES: The ES5503 was the next design after the famous C64 "SID" by Bob Yannes. It powered the legendary Mirage sampler (the first affordable pro sampler) as well as the ESQ-1 synth/sequencer. The ES5505 (used in Taito's F3 System) and 5506 (used in the "Soundscape" series of ISA PC sound cards) followed on a fundamentally similar architecture.
- DRIVERS: mquake.cpp
- SOURCE: sound\es5503.cpp


S19.2   ES5505

- 0.282              : Ensoniq ES5505 device generate 20bit samples, not 16-bit ones [Christian Brunschen].
- 0.225              : Correct Taito ES5505 Bankswitching behavior. Sample bank per ES5505 voice is actually taito_en.cpp specific. Moved external bank behavior into taito_en.cpp. Added getter for voice index. Added precalculated ES5505 bank table for reduce performance issue. Added getter for CPU [cam900].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.216              : Implemented ES5505/5506 difference. Fixed spacing. Various updates. Reduced duplicates, unnecessary lines and #define macros. Implemented reset behavior (RESB in ES5506). Added notes. Fixed filter behaviors. Sync to official documents. More constant-expandable volume lookup tables. References: http://zine.r-massive.com/ensoniq-technical-documents-and-schematics/. Correct algorithms. Allow signed shifting. Fixed envelope and volume [cam900].
- 0.186              : Changed description to 'Ensoniq ES5505'.
- 0.179              : Fixed ES5505/6 readback of global registers when the current page was in a certain range. Made voices run for a zero-length loop, as real hardware does it and synthesizers rely on it. These changes fixed the playback of "Transwaves" on the (MESS) VFX and SD-series synths [Christian Brunschen].
- 0.177              : Attempt to fix ES5505 32bit crash [Osso].
- 0.154              : Converted es550x_device to DEVCB2 [Osso].
- 0.152              : Modernized ES5505 device [Osso].
- 0.146u3            : Stop spamming error.log [hap].
- 0.146u1            : ES5505/6 actually use the ADC port read callback [R. Belmont]. Removed es5505_set_channel_volume() hack [Phil Bennett].
- 0.144              : Angelo Salese added per-channel volume control to ES5505/ES5506 sound chip, and hooked it up to the Taito F3 driver.
- 0.136u4            : Fabio Priuli added save state to both ES5505 and ES5506.
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the ES5505/6 sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.98u3             : Jarek Burczynski fixed subtle bug in ES5505/6 interpolation code.
- 20th April     2003: R. Belmont fixed a few memory leaks in the ES550x sound core.
- 16th November  2002: Nicola Salmoria added preliminary sound CPU communication to the Macross Plus driver, but sound doesn't work yet due to an unemulated IRQ feature in the ES5506 sound core.
- 0.60               : Acho A. Tang improved Irem GA20 emulation, used by M92 games.
-  3rd April     2002: Aaron Giles fixed a potential crash bug in the ES550x sound chip emulators, but this doesn't fix anything else.
- 0.53               : Aaron Giles fixed a ES550x bug that caused Taito F3 and Incredible Tech games to sound bad.
-  4th August    2001: Aaron Giles fixed the ES-550x sound bug which caused scratchy sound.
- 27th January   2001: Bryan McPhail sent in a Taito F3 sound update, with the sound cutting out bug fixed and stereo sound implemented (it was mono before).
- 0.37b11            : ES5505/6 emulation [Aaron Giles].
- 16th January   2001: Aaron Giles fixed a small interpolation bug in the ES5505 core.
- 15th January   2001: Bryan McPhail finally submitted his Taito F3 driver, which is not graphically perfect and crashes hard sometimes but has complete ES5505 sound emulation thanks to Aaron Giles, Ian Schmidt and R. Belmont.
- NOTES: The Ensoniq ES5505/6 sound emulation for the Taito F3 games eats lots of memory as 8 bit PCM data is decoded as 16 bit for use by the current ES5505 core.
- PCB: Ensoniq OTISR2 5505, DIP48 (Elevactr, Twinqix, Undrfire, Groundfx), ENSONIQ OTISR2 5505 OTIS (Scfinals)
- DRIVERS: galastrm.cpp, groundfx.cpp, gunbustr.cpp, superchs.cpp, taito_f3.cpp, taitojc.cpp and undrfire.cpp
- SOURCE: sound\es5506.cpp


S19.3   ES5506

- 0.282              : Ensoniq ES5506 device generate 20bit samples, not 16-bit ones [Christian Brunschen].
- 0.253              : Converted comments to C++ style and added notes and additional logging (sound\es5506.cpp) [cam900].
- 0.225              : Update ES5506 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.216              : Implemented ES5505/5506 difference. Fixed spacing. Various updates. Reduced duplicates, unnecessary lines and #define macros. Implemented reset behavior (RESB in ES5506). Added notes. Fixed filter behaviors. Sync to official documents. More constant-expandable volume lookup tables. References: http://zine.r-massive.com/ensoniq-technical-documents-and-schematics/. Correct algorithms. Allow signed shifting. Fixed envelope and volume [cam900].
- 0.212              : Reduced logging noise (logerror() -> LOG()) [AJR].
- 0.186              : Changed description to 'Ensoniq ES5506'.
- 0.179              : Fixed ES5505/6 readback of global registers when the current page was in a certain range. Real hardware does run the voice for a zero-length loop and the synths rely on it. These changes fix the playback of "Transwaves" on the (MESS) VFX and SD-series synths [Christian Brunschen].
- 0.154              : Converted es550x_device to DEVCB2 [Osso].
- 0.152              : Modernized ES5506 device [Osso].
- 0.150              : Small DEVICE_RESET cleanup in sound\es5506.c [Oliver Stoeneberg].
- 0.147              : Fixed inheritance (sound\es5506.c/h). Fixed other issues [Miodrag Milanovic].
- 0.146u3            : Stop spamming error.log [hap].
- 0.146u1            : ES5505/6 actually use the ADC port read callback [R. Belmont].
- 0.144              : Angelo Salese added per-channel volume control to ES5505/ES5506 sound chip, and hooked it up to the Taito F3 driver.
- 0.136u4            : Fabio Priuli added save state to both ES5505 and ES5506.
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the ES5505/6 sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.98u3             : Jarek Burczynski fixed subtle bug in ES5505/6 interpolation code.
- 0.53               : Aaron Giles fixed a ES550x bug that caused Taito F3 and Incredible Tech games to sound bad.
- 0.37b11            : Added sound\es5506.c/h. ES5505/6 emulation [Aaron Giles].
- 10th January   2001: Aaron Giles sent in a small update to the ES5506 sound core, fixing some digital filter bugs.
- PCB: OTTOR2 ES5506000102 (Macrossp), ENSONIQ OTTO R2 (Quizmoon)
- DRIVERS: itech32.cpp, macrossp.cpp and ssv.cpp
- SOURCE: sound\es5506.cpp


        ES5506 GENMIDI2 sample rom labels (16MBit MaskROM, DIP42):

        ENSONIC (C) 1992 2M     1350901601 9320 1.00'         (Pairs - drivers\itech32.c)
        ENSONIC (c) 1992 2M     1350901601 20584A-M           (Gt3d)
        ENSONIC          2MX16U 1350901801 9312 1.00          (Gt97, Gt98)

        Pairs sample rom text:
        SDGI  9.Jan 05 1993 V1.00  GENMIDI2 2MX8 Compressed Audio Sample Data Copyright (c) 1992 Ensoniq Corp.



S19.4   ES5510

- 0.272              : Removed hack that never could possibly have worked, comparing a uint8_t to a 24-bit constant [R. Belmont].
- 0.255              : Avoid calling DESCRIBE_INSTR when not verbose-logging [Ryan Holtz].
- 0.254              : Fixed some ALU flag problems [hap].
- 0.250              : Use util::sext and other bit utility functions [AJR].
- 0.229              : Added serial control register for debugging. Fixed/Added some hardware features. Implemented (partially) RAM clear function. Fixed host control register (host access OK flag is inverted (0 is active)) Added notes [cam900].
- 0.221              : Simplified some handlers [Osso].
- 0.196              : Fixed DRAM read/write. Converted gpr, instr and dram into std::unique_ptr. Added save states and notes. Minor cleanup [cam900].
- 0.195              : Hooked up ES5510 effects DSP (audio\taito_en.cpp) [cam900, R. Belmont]. Added ES5510 CPU3 and 'Ensoniq 5505/5506 to 5510 interface' to galastrm.cpp, groundfx.cpp, gunbustr.cpp, superchs.cpp, taito_f3.cpp, taitojc.cpp and undrfire.cpp.
- 0.193              : Added cpu\es5510\es5510d.cpp/h.
- 0.189              : Added util\server_http_impl.hpp and server_ws_impl.hpp. Refactor server_{ws,http}.hpp into separate interface and implementation. Refactor server_{ws,http}.hpp into separate interface and implementation headers. When shutting down the HTTP server, also explicitly stop the asio::io_context (emu\http.cpp) [Christian Brunschen].
- 0.188              : Added an external panel for the (MESS) Ensoniq VFX family of keyboards, with a websocket interface and an HTML/Javascript implementation that can be served over HTTP. Better handle the case where HTTP is not enabled (emu\http.cpp) [Christian Brunschen].
- 0.152              : Cleaned up (MESS) driver esqkt.c and use real ES5510 device [R. Belmont].
- 0.150              : Improved ES5510 debug capabilities, better disassembly, bugfixed many opcodes. Most effects programs now produce correct results. Fixed saturating ALU operations, greatly improving the behavior of many programs [Christian Brunschen].
- 14th August    2013: R. Belmont - Moving on from the last post, Christian made some additional fixes to the effects processor so now the "rotating speaker" effect works. In case you're unfamiliar with what that means, you'll probably understand quite quickly listening to this. It's a classic sound used in the blues, rock, jazz and even electronica.
-  5th August    2013: R. Belmont - Christian Brunschen continued working on the Ensoniq synthesizer components and got the ES5510 effects processor chip working. Some bugs definitely remain, but by and large the effects programs for the 16-bit Ensoniq synthesizer drivers in MESS now do what they're supposed to. One standout example: the VFX has a patch called "GATED-DRUMS". For those not versed in music production, "gated reverb" was the process used by Phil Collins and his engineer to make drums sound huge on 1980's "In The Air Tonight". This became *the* signature drum sound of the 1980s and gated reverb was widely used on records from about 1983 to 1992. Now, the VFX wisely saves ROM by using existing clean drum samples and using the ES5510 effects processor to apply the "gating" process for the "GATED-DRUMS" patch.
- 0.149u1            : Preliminary hookup ES5510 to ES5505/5506. Samples are passed through unchanged for now (cpu\es5510\es5510.c/h, es5506.c/h, audio\taito_en.c, drivers\itech32.c, macrossp.c and ssv.c) [Christian Brunschen]. Dropped ESS5505/6 levels in driver to make up for changes in core which under normal levels caused VERY loud audio and clipping. Note: This is a temporary fix until the core itself can be made to react as it did before the last sound core change [Tafoid].
- 0.148u2            : Added missing breaks in es5510_device::write_reg() [Oliver Stoeneberg].
- 0.148u1            : Added cpu\es5510\es5510.c/h. Initial implementation of Ensoniq ES5510 DSP. This doesn't actually process samples yet, but it's pretty close to doing so, we just need OG to figure out how that works in the core [Christian Brunschen]. Compile fix (cpu\es5510\es5510.c). Added proper replace func and made it always use that one [Miodrag Milanovic]. Additional portability fixes [R. Belmont]. Fixed uninitialized memory in cpu\es5510\es5510.c [Oliver Stoeneberg].
- 0.146u1            : Taito Ensoniq improvements [Phil Bennett]: Use the common 68681 DUART implementation. Implemented the MB87078 volume control.
- 0.144              : Angelo Salese added a preliminary ES5510 DSP DRAM input/output latches support in Taito F3 driver, fixes sound in Ring Rage and Riding Fight.
- NOTES: Ensoniq ES5510 (ESP)
- PCB: Ensoniq 5510 (Superchs), ESPR5 5510 ESP DIP48 (Scfinals), ESPR6 ES5510 (Landgear, Sidebs, Sidebs2), ES5510000106 ESPR6 (Elvactr, Twinqix), ENSONIC ESP-R6 (Groundfx), EnsoniqESP-R6 (Undrfire)
- DRIVERS: galastrm.cpp, groundfx.cpp, gunbustr.cpp, superchs.cpp, taito_f3.cpp, taitojc.cpp and undrfire.cpp
- SOURCE: cpu\es5510\es5510.cpp


S19.5   ES5701
- NOTES: ???
- PCB: ENSONIQ 5701, QFP100 (Scfinals), 5701000101 (Elevactr, Twinqix)


S19.6   SUPER GLU
- PCB: ENSONIC SUPER GLU (Groundfx, Undrfire)


S19.7   Ensoniq ASR

- 0.152: Added drivers\esqasr.c. (MESS) New skeleton drivers Ensoniq ASR-10 and Ensoniq ASR-X [R. Belmont].
- NOTES: ASR-X hardware: CPU: 68340 MCU, Sound: ES5506, Effects: ES5511 and FDC: NEC uPD72069. http://www.gweep.net/~shifty/music/asrxhack/
- SOURCE: mess\drivers\esqasr.cpp


S19.8   ES1373

- 0.225              : Update ES1373 sound to new stream callbacks [Aaron Giles].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.186              : Added save states to iteagle driver (sound\es1373.c) [Ted Green].
- 0.161              : More ITEagle improvements: Do some processing and DMA, and issue IRQs (sound\es1373.c) [Ted Green].
- 0.160              : Added sound\es1373.c/h. Work-in-progress: Hooked up PCI devices and bridge correctly using new PCI subsystem. Fixed BIOS selection [Ted Green].
- NOTES: Creative Labs Ensoniq AudioPCI97 ES1373
- DRIVERS: iteagle.cpp
- SOURCE: sound\es1373.cpp



S20.    Brian Schmidt Music Technology

S20.1   BSMT2000

- 0.225              : Update BSMT2000 sound to new stream callbacks [Aaron Giles].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.208              : Fixed 4-bit ADPCM sample playback [Scott Percival].
- 0.207              : Removed remaining BSMT2000 related MCFGs. Use private for most things (includes\btoads.h) [cam900].
- 0.206              : Removed MCFG macros (sound\bsmt2000.h) [Ryan Holtz].
- 0.186              : Changed DECO BSMT2000 ready callback into a device delegate [Vas Crabb].
- 0.146u4            : Angelo Salese removed redundant line in sound\bsmt2000.h.
- 0.143u1            : Miodrag Milanovic fixed missing or corrupt sound in drivers using the BSMT2000 sound.
- 0.141u1            : Added a virtual stream update function to the device sound interface. Added a new stream_create that takes fewer parameters and calls the device's stream update. Removed the stream update stub template. Updated BSMT2000 and OKIM6295 to use the new interface for their streams [Aaron Giles]. Replaced BSMT2000 HLE emulator with emulation of the original TMS32015 [Dr. Decapitator, Andrew Gardner, Quench, Guru, Ernesto Corvi, Peter Grounds, Lord Nightmare, Aaron Giles].
- 21st January   2011: Andrew J. Gardner - The last chip Dr. Decapitator expertly decapped was the BSMT2000. s_bastian's typing tool was used by the following mameworld members to type 65,536 bits 3 times each: amarok, angrylion, Armatic, ASI, bdam, Brian Troha, Canim, casper, ChuKy, Cpt. Pugwash, DarylC, Dr. Spankenstein, drewcifer, fireinthehole, franciscohs, Fungo, john666, Klez, Layne, leniad, Lord_Nightmare, Malice, MAMu_, MASH, mitice, MonkeyEgg, MrDuncanM, NaokiS, niiiih, Osso, Qun Mang, Rad R, real, SothoTalKer, superultrahyper, s_bastian, TAZ-NZ, Various For, Warpath0007, Xiaou2, x_wins and Zer0. Decoding the ROM was very challenging this time around. Numerous people, myself included, have looked at it for a good chunk of time, but have gotten nowhere. Earlier this week, Quench, with some expert suggestions from Dr. Decapitator, figured it out! It was especially tricky since some bits were burned 'forward' and some 'backward' in alternating patterns. Quench fully decoded the ROM and handed it to Aaron, who hooked it up to the BSMT2000 device in MAME. The emulation of Brian Schmidt's classic sound chip should now work in MAME 100% as it originally did. If there are any bugs, please report them on MAMETesters after the next u release. In related news, the doc just photographed another sound chip. This one is used by dozens of games, and is only partially emulated in MAME. I'm in the process of stitching the new set of images together, and will hand it over to s_bastian when it's done. Stay tuned to the mameworld news board for further announcements!
-  6th January   2011: Andrew Gardner - Thanks to the following typists (in alphabetical order), the dump is complete! amarok, angrylion, Armatic, ASI, bdam, Brian Troha, Canim, casper, ChuKy, Cpt. Pugwash, DarylC, Dr. Spankenstein, drewcifer, fireinthehole, franciscohs, Fungo, john666, Klez, Layne, leniad, Lord_Nightmare, Malice, MAMu_, MASH, mitice, MonkeyEgg, MrDuncanM, NaokiS, niiiih, Osso, Qun Mang, Rad R, RagingBoner, real, SothoTalKer, superultrahyper, s_bastian, TAZ-NZ, Various For, Warpath0007, Xiaou2, x_wins and Zer0. Out of 65,536 bits (8 kilobytes), 17 bits are questionable, even after 3 people typed them. Five of these are completely obscured and will require disassembly to figure out, 9 of them have pretty good guesses, but I marked them to be checked in the disassembly anyways, and 3 of them are pretty obviously in the middle of big globs of 1's, but I marked them as questionable just in case. Thanks to s_bastian's ever-maturing monkey-tool, it took me roughly 30 minutes to look through the results, fix the mis-typed bits, and take note of the bits we're still unclear about. This is a vast improvement in time spent over what it would take one or two people to do it, and bodes well for the future. There was, on average, roughly 0.5 mistakes per image, and only in four cases did everyone disagree about a single bit. We still have to decode these bits into a ROM and feed it through a TMS320C15 disassembler, but that will come in due time. In the meantime, thank you again to s_bastian, all y'all typists, and to Dr Decapitator, whose images are so high quality this is a joy to do!
-  3rd January   2011: Andrew Gardner - s_bastian has done it again! This time it's the BSMT2000 chip used in all sorts of groovy stuff (BSMT2000). It's monkey-time: http://www.progettoemma.net/dump/
-  2nd January   2011: Dr. Decapitator - Chip #23 (BSMT2000), a TMS32015 with mask ROM, used on Battle Toads, Police Trainer, Sharpshooter, Tattoo Assassins, Double Cheese, Fred Flintstones' Memory Match, Lotto Fun 2 and Data East pinball machines, has been decapped. You can see the ROM area in the picture below in the top left (in 2 sections).
- 0.113              : Aaron Giles rewrote the BSMT2000 to be more accurate. Various modes are now software selected at startup based on the register value at reset time. Changed all existing drivers so they properly hooked up the reset line on the chip in order to make this control work. Also added correct BSMT2000 ADPCM output.
- 0.112              : Aaron Giles removed linear interpolation from the BSMT2000 by default since the original chip did not do interpolation.
- 0.104u4            : Aaron Giles added save state support to the BSMT2000 sound emulator and the dcheese driver.
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the BSMT2000 sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.57               : Added sound\bsmt2000.c/h. BSMT2000 sound emulator [Aaron Giles].
- NOTES: BSMT2000 = Brian Schmidt Music Technology
- PCB: BSMT2000 D15505N (Dcheese)
- DRIVERS: btoads.cpp, dcheese.cpp, de_3.cpp, de_3b.cpp, deco32.cpp, policetr.cpp, tapatune.cpp, whitestar.cpp
- SOURCE: sound\bsmt2000.cpp



S20.2   Data East Pinball BSMT2000 sound board

- 0.265              : Implemented device_mixer_interface for sound output. Also removed root device references in tags and added data members to save states (shared\decobsmt.cpp) [cam900].
- 0.246              : Changed sourcefile to shared\decobsmt.cpp.
- 0.209              : Simplified handlers [cam900].
- 0.206              : Removed MACHINE_CONFIG macros [Ryan Holtz].
- 0.193              : Correct CPU type [AJR].
- 0.150              : Modernized periodic interrupt in decobsmt_device [Oliver Stoeneberg].
- 0.143u6            : Added audio\decobsmt.c/h. R. Belmont moved DECO BSMT2000 sound board out to a device shared between Whitestar driver and Tattoo Assassins.
- NOTES: Data East Pinball BSMT2000 sound board used for System 3 and Whitestar pinball games and Tattoo Assassins video
- DRIVERS: de_3.cpp, deco32.cpp (Tattoo Assassins) and whitestar.cpp
- SOURCE: shared\decobsmt.cpp




S21.    Gaelco

S21.1   Gaelco GAE1

- 0.227              : Fixed gaelco_gae1_device channels init, fixes random crashes and possibly audio issues in Surf Planet (sound\gaelco.cpp) [O. Galibert].
- 0.225              : Update Gaelco GAE1 sound to new stream callbacks [Aaron Giles].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.148              : Modernize Gaelco sound device [Andrew Gardner].
- 0.94u1             : Changed description to 'Gaelco GAE1'.
- 0.63               : Added sound\gaelco.c/h.
- 30th December  2002: Manuel Abadia sent in the Gaelco GC-1V/GAE1 driver, supporting Alligator Hunt, Maniac Square and Bang! playably and World Rally 2, Touch & Go and Snowboard Championship not working because of DALLAS protection.
- GAMES: Gaelco - Alligator Hunt (1994), World Rally 2 (1995), Maniac Square (1996)
- PCB: GAE1 449, QFP208 (Aligator, Wrally2), GAE1 501 (Touchgo)
- DRIVERS: gaelco2.cpp
- SOURCE: sound\gaelco.cpp


S21.2   Gaelco CG1V

- 0.225              : Update Gaelco CG1V sound to new stream callbacks [Aaron Giles].
- 0.148              : Modernize Gaelco sound device [Andrew Gardner].
- 0.94u1             : Changed description to 'Gaelco CG1V'.
- 0.93               : Changed description to 'GAELCO_CG1V'.
- 0.63               : Added sound\gaelco.c.
- 30th December  2002: Manuel Abadia sent in the Gaelco GC-1V/GAE1 driver, supporting Alligator Hunt, Maniac Square and Bang! playably and World Rally 2, Touch & Go and Snowboard Championship not working because of DALLAS protection.
- GAMES: Gaelco - Snow Board Championship (1996), Bang! (1998)
- PCB: CG-1V 388 (Bang), GC-1V 366 (Snowboar)
- SOURCE: sound\gaelco.cpp





S22.    Sony

S22.1   SPU

- 0.266              : Fixed a class memory access warning. Little cleanup (sound\spu.cpp) [Vas Crabb].
- 0.255              : Don't explode when the reverb parameters couldn't be found after a save state (sound\spu.cpp) [Windy Fairy].
- 0.254              : Calculate tables based on clock speed (sound\spu.cpp) [Windy Fairy].
- 0.225              : Update SPU sound to new stream callbacks [Aaron Giles].
- 0.222              : READ/WRITE macros removal (sound\spu.cpp) [Osso].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.186              : Changed description to 'PlayStation SPU'.
- 0.153              : Fixed copy and paste errors in sound\spu_tables.c [Oliver Stoeneberg].
- 0.148u5            : Improved save state behavior, but still needs work (sound\spu.c) [R. Belmont].
- 0.148u4            : Move CDDA interrupt to play_cdda to make sure it happens at least once per sector. (MESS) Vibribbon doesn't crash now starting gameplay but there's no music. It seems to copy the samples to the reverb loop address which doesn't appear to be mixed currently [Carl].
- 0.148u3            : Added CDDA interrupts to sound\spu.c. Don't overrun SPU ram [Carl].
- 0.148u2            : Fixed uninitialized member in emu\sound\spu.c. Fixed uninitialized memory in emu\sound\spureverb.c [Oliver Stoeneberg].
- 0.148u1            : (MESS) PlayStation: Play XA audio at the correct speed (sound\spu.c). Fixed PlayStation sample signedness and stream rate for CDDA (redbook) audio (sound\spu.c and machine\psxcd.c). Attempt better XA/SFX volume balance (sound\spu.c) [R. Belmont].
- 0.141u3            : Added 'SPU' device.
- 0.141u3            : Changed sound\psx.c/h to sound\spu.c/h. Added sound\spureverb.c/h and spu_tables.c. Replaced PSX SPU with a much more complete implementation [pSXAuthor, R. Belmont]. R. Belmont correct SPU IRQ notification in all drivers. Fixes streaming audio in Simpsons Bowling.
- 14th February  2011: R. Belmont - After porting over the pSX audio emulation, I brought pSX's CD emulation over to MESS. That gets us some working commercial games. (More games run than are shown here, this is just the first two I tried). Big thanks to pSXAuthor for his generosity!
-  5th February  2011: R. Belmont - Arguably the most problematic aspect of MAME's PSX hardware emulation was the SPU audio chip. It had no envelope support, no reverb, and an assortment of bugs. Fortunately most arcade games use the SPU only for sound effects and have a separate chip for music so the problems weren't as dire as a working MESS PSX driver might have shown, but glitches did occur and vex players (for instance, the siren in Tetris the Grand Master). Anyway, pSXAuthor, the author of the pSX emulator gave us permission a while ago to use his SPU code in MAME. The problem at the time was that his code makes heavy use of C++ features and MAME back then was plain C only. Aaron's recent architectural changes have finally made it possible to rock out with your polymorphic classes out in a sound chip emulation, and so I've finally done the port. One thing the MESS driver does do is play .PSF music rips from PlayStation games. I'm going to use one of my favorite songs from one of my favorite PS1 games (Parasite Eve) here to demonstrate the before/after. I think you'll find the improvement quite striking.
- 0.130u3            : Simulate 'keyoff' in the SPU. The envelopes aren't actually emulated, but the sound is silenced after a key-off (by placing the sound in a 'release' state). This prevents audiable sound from looping forever [David Haywood].
- 0.129u5            : Quick hack to delay installing the SPU DMA handler until the first write to the SPU as driver init is now called after the devices are created [smf].
- 0.93               : Changed description to 'SPU'.
- 0.84               : Several PSX SPU improvements [smf]: Added PIO SPU ram writes. Fixed status register read/write. Internal mixer clamps output to 16 bits to fix distortion. State saves all registers. Removed the need for casts by making the decoded sample buffer signed. DMA read/writes are limited to the SPU ram.
- 0.80u3             : R. Belmont added Konami GV System driver. The SPU emulation needs a lot of help, especially on Wedding Rhapsody. smf is working on it.
- 19th February  2004: smf added preliminary PSX SPU sound emulation and fixed the standalone MIPS disassembler.
-  6th February  2004: R. Belmont - The always fabulous Pete B. (http://sourceforge.net/projects/peops/) is donating his P.E.Op.S SPU code to MAME, so we'll have sound soon too.
- 15th January   2004: R. Belmont - smf is working on the PSX SPU (sound chip) which will get the rest of the sound working in the Konami GV games.
- 0.78               : Added sound\psx.c/h. Preliminary PSXSPU emulation [smf].
- NOTES: The Sony Playstation custom chips CXD2922 and CXD2925 are SPU's
- SOURCE: sound\spu.cpp
- PCB: Sony CXD2922CQ, QFP100 (Rvschool, Sfex, Sfex2), CXD2925Q (Brvblade), CXD2922BQ + CXD2925Q (Konami GV System)





S23.    Excellent Systems

S23.1   ES8712

- 0.220              : Simplified some handlers [Osso].
- 0.207              : Allow MSM5205 to be configured with a device finder or reference (sound\es8712.h) [cam900].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.196              : Changed description to 'Excellent Systems ES8712 Sound Controller'. The ES8712 is actually a controller for MSM5205/MSM6585 and 74157-type TTL pair. Added notes [cam900].
- 0.186              : Changed description to 'Excellent Systems ES8712 ADPCM'.
- 0.183              : Working sound and music in Last Bank. Added busy status read to ES8712 and notes on device. Added a reset line callback for the ES-8712. This will be used to reset the MSM5205/MSM6585 when the implementation is rewritten to use those devices. For now, it's used for IRQ generation in vmetal, whose program seems to use a separate gate to prevent unwanted IRQs when the device is reset (gcpinbal appears to do the same with a rather subtle difference). Removed the probably bogus and already unused auto-repeat feature from the ES-8712 device. All known games that loop samples do so by status polling or IRQs [AJR].
- 0.148u2            : Modernized ES8712 sound device [Andrew Gardner].
- 0.95u6             : Added sound\es8712.c/h. Quench added new ES8712 sound core and hooked up sound in Varia Metal.
- NOTES: The ES8712 sound controller chip for MSM5205/MSM6585 and 74157-type TTL pair. Samples are currently looped, but whether they should and how, is unknown. Interface to the chip is also not 100% clear. It seems that the ES8712 is actually a programmable counter which can stream ADPCM samples when hooked up to a ROM and a M5205 or M6585 (whose VCK signal can drive the counter). Neither of these seem to be used in conjunction with the ES8712 on Dream 9 and Dream 9 Final, which suggests it may have been used for an entirely different purpose there (perhaps to do with video timing).
- PCB: ES-8712, es8712, chip is branded 'EXCELLENT' (Vmetal), ES-88712 (Gcpinbal)
- DRIVERS: d9final.cpp, lastbank.cpp, metro.cpp and witch.cpp
- SOURCE: sound\es8712.cpp







S24.    Sound Systems

S24.1   Bally

S24.11  Bally AS2888 Sound Board
- 0.211              : Removed clock from as2888, as it's a discrete board [Mike Harris].
- 0.210              : Move AS2888 code to a proper device. Mark the AS2888 games as non-skeleton [Mike Harris].
- DRIVERS: by35.cpp
- SOURCE: audio\bally.cpp


S24.12  Bally AS3022 Sound Board

- 0.210              : Added support for AS3022, a sound board Bally used in pinballs [Mike Harris].
- DRIVERS: by35.cpp
- SOURCE: audio\bally.cpp


S24.13  Bally Sounds Plus w/ Vocalizer Board

- 0.221              : Simplified handler signatures (audio\midway.cpp) [AJR].
- 0.210              : Added support for Sounds Plus w/ vocalizer and various Bally pinball cleanup (audio\midway.cpp) [Mike Harris].
- DRIVERS: by35.cpp
- SOURCE: audio\bally.cpp


S24.14  Bally Cheap Squeak Board

- 0.210              : Added Cheap Squeak sound board [Mike Harris].
- DRIVERS: by35.cpp
- SOURCE: audio\bally.cpp


S24.15  Bally Squawk & Talk Board
- 0.211              : Added Squawk & Talk board. Use Bally Squawk & Talk sound board implementation for mcr.cpp driver [Mike Harris].
- DRIVERS: mcr.cpp
- SOURCE: audio\bally.cpp


S24.16  Bally Squawk & Talk w/ AY8910 Board
- 0.211              : Added new board, Squawk & Talk with the AY chip [Mike Harris].
- DRIVERS: by35.cpp
- SOURCE: audio\bally.cp



S24.2   Midway

S24.21  Midway Squawk 'n' Talk Sound Board

- 0.211              : Removed Midway Squawk 'n' Talk Sound Board.
- 0.210              : Added support for AS3022, a sound board Bally used in pinballs [Mike Harris].
- 0.145u7            : Broke dependency between MCR68 and MCR by creating sound devices for each of the Midway 8-bit sound boards. This will also aid in eventually hooking them up to pinballs. Enhanced the mixer interface support to allow for more than one output line. To use this you need to use the MCFG_MIXER_ROUTE macro instead of MCFG_SOUND_ROUTE so that the mixer output index can be specified. See midway_ssio_device for an example [Aaron Giles]. Added 'Midway Squawk 'n' Talk Sound Board'.
- 0.125u7            : Atari Ace fixed a few build problems with the TMC0285 sound core.
- 0.122u6            : Aaron Giles added clocks to the MCR sound boards and some of the MCR games. Added TMS5220 variants TMS5200 and TMC0285 as proper chips. Changed MCR squawk & talk to use the TMS5200 as documented.
- NOTES: Midway Squawk 'n' Talk Sound Board
- DRIVERS: by6803.cpp, mcr.cpp and mcr68.cpp
- SOURCE: audio\midway.cpp




S24.22  Midway Cheap Squeak Deluxe Sound Board

- 0.181              : Added audio\csd.cpp/h. Identify DAC (-> AD7533) for Midway Cheap Squeak Deluxe/Turbo Cheap Squeak. Moved the Cheap Squeak Deluxe sound board to its own file (audio\csd.cpp) and give it its's correct name. Updated CSD interface to better reflect real hardware, added address decoding PAL and verify memory map [Dirk Best].
- 0.145u7            : Broke dependency between MCR68 and MCR by creating sound devices for each of the Midway 8-bit sound boards. This will also aid in eventually hooking them up to pinballs. Enhanced the mixer interface support to allow for more than one output line. To use this you need to use the MCFG_MIXER_ROUTE macro instead of MCFG_SOUND_ROUTE so that the mixer output index can be specified. See midway_ssio_device for an example [Aaron Giles]. Added 'Midway Chip Squeak Deluxe Sound Board'.
- 0.97u5             : Aaron Giles updated memory maps for the MCR Chip Squeak Deluxe and Sounds Good boards.
- NOTES: Cheap Squeak Deluxe is a 68000 CPU and DAC sound.
- GAMES: Bally Midway - Spy Hunt (1983), Zwackery (1984), Turbo Tag (prototype 1985)
- SOURCE: audio\csd.cpp



S24.23  Midway Turbo Cheap Squeak Sound Board

- 0.226              : Added DAC filtering to Midway "Turbo Cheap Squeak" sound hardware [Lord Nightmare].
- 0.181              : Identify DAC (-> AD7533) for Midway Cheap Squeak Deluxe/Turbo Cheap Squeak [Dirk Best].
- 0.145u7            : Broke dependency between MCR68 and MCR by creating sound devices for each of the Midway 8-bit sound boards. This will also aid in eventually hooking them up to pinballs. Enhanced the mixer interface support to allow for more than one output line. To use this you need to use the MCFG_MIXER_ROUTE macro instead of MCFG_SOUND_ROUTE so that the mixer output index can be specified. See midway_ssio_device for an example [Aaron Giles]. Added 'Midway Turbo Chip Squeak Sound Board'.
- NOTES: Turbo Cheap Squeak is a M6809 CPU and DAC sound.
- DRIVERS: mcr.cpp, mcr3.cpp and mcr68.cpp
- SOURCE: audio\midway.cpp



S24.24  Midway Sounds Good Sound Board

- 0.226              : Added DAC filtering to Midway "Sounds Good" hardware and added notes/mirroring regarding the undumped memory mapper PAL [Lord Nightmare].
- 0.145u7            : Broke dependency between MCR68 and MCR by creating sound devices for each of the Midway 8-bit sound boards. This will also aid in eventually hooking them up to pinballs. Enhanced the mixer interface support to allow for more than one output line. To use this you need to use the MCFG_MIXER_ROUTE macro instead of MCFG_SOUND_ROUTE so that the mixer output index can be specified. See midway_ssio_device for an example [Aaron Giles]. Added 'Midway Sounds Good Sound Board'.
- 0.97u5             : Aaron Giles updated memory maps for the MCR Chip Squeak Deluxe and Sounds Good boards.
- NOTES: 'Sounds Good' is a 68000 CPU and DAC sound. Spy Hunter 2 uses a 'Sounds Good' and 'Turbo Chip Squeak' sound board.
- DRIVERS: mcr3.cpp and mcr68.cpp
- SOURCE: audio\midway.cpp


S24.25  Midway SSIO Sound Board

- 0.145u7            : Broke dependency between MCR68 and MCR by creating sound devices for each of the Midway 8-bit sound boards. This will also aid in eventually hooking them up to pinballs. Enhanced the mixer interface support to allow for more than one output line. To use this you need to use the MCFG_MIXER_ROUTE macro instead of MCFG_SOUND_ROUTE so that the mixer output index can be specified. See midway_ssio_device for an example. The SSIO PROM has been moved to within the Midway SSIO device now [Aaron Giles]. Added 'Midway SSIO Sound Board' sound.
- 0.122u6            : Aaron Giles added clocks to the MCR sound boards and some of the MCR games. Added TMS5220 variants TMS5200 and TMC0285 as proper chips. Changed MCR squawk & talk to use the TMS5200 as documented.
- 0.117u2            : Ernesto Corvi fixed incorrect implementation of SSIO volume controls in the MCR driver. This makes the engine sound in Spy Hunter audible again, among other things.
- 0.98u1             : Aaron Giles did some major cleanup on the MCR drivers: Implemented Super Sound I/O interrupts properly, filled out all memory maps according to schematics, fixed sound sync with various sound boards, allowing for kludges to be removed from Power Drive and Star Guards, re-verified all connections from wiring diagrams and documented various lamp and driver boards from the games.
- NOTES: SSIO or Super Sound I/O boards can you find in MCR1/2/3 games.
- SOURCE: audio\midway.c; drivers\mcr.c and mcr3.cpp


S24.26  Midway DCS Audio Board

- 0.270              : Got rid of unused memory share (fixes mismatched width warning for DCS Denver) (shared\dcs.cpp) [Vas Crabb].
- 0.265              : Implemented device_mixer_interface for sound output. Suppress side effects for debugger reads. Reduced use of literal tags. Reduces public class members. Use C++ style line comments (shared\dcs.cpp) [cam900].
- 0.246              : Changed sourcefile to shared\dcs.cpp.
- 0.222              : READ/WRITE macros removal (audio\dcs.cpp) [Osso].
- 0.221              : Removed some dummy_space() calls [smf]. Fixed reset control. Changed DCS reset control to active low in Midway drivers (atlantis.cpp, kinst.cpp, midvunit.cpp, seattle.cpp, vegas.cpp, midtunit.cpp, midwunit.cpp and midxunit.cpp) [AJR].
- 0.216              : Eliminated auto_alloc (audio\dcs.cpp) [AJR].
- 0.206              : Fixed ram bank mapping in Denver DCS audio [Ted Green].
- 0.201              : Removed ADDRESS_MAP_BANK MCFG macros [Ryan Holtz].
- 0.200              : Reinstate hastily removed eat_cycles to audio\dcs.cpp, fixes DCS2 sound hardware test failed in War: The Final Assault [Ted Green].
- 0.199              : Updated DCS audio to get San Francisco Rush 2049 closer to working (audio\dcs.cpp) [Ted Green].
- 0.194              : Some minor changes mainly for DSIO and DENVER systems (audio\dcs.cpp) [Ted Green].
- 0.193              : Fixed DCS audio banking for DENVER and DSIO DCS audio. DSIO and DENVER don't use SDRC DMA. Fixes boot hang on Road Burners [Ted Green].
- 0.192              : Replaced driver_device::generic_pulse_irq_line with device_execute_interface::pulse_input_line + CPU minimum quantum [AJR].
- 0.188              : Get audio to start working in Skins Game (1.06) (audio\dcs.cpp). Re-enable speedups for external ram [Ted Green].
- 0.182              : Removed unused variable [Ted Green].
- 0.181              : Implemented proper ram bank switch for ADSP2181 systems [Ted Green].
- 0.175              : Added sport timer for DCS2 DSIO device (audio\dcs.cpp). Fixed buffer overflow with clone San Francisco Rush 2049: Special Edition. Updated 2181 SYSCONTROL bits. Added internal ram memory bank for DENVER ADSP 2181 [Ted Green].
- 0.161              : Added missing save state (audio\dcs.c), fixes DRAM reload problems in NFL Blitz (boot ROM 1.1) and War Gods [Osso].
- 0.154              : Modernized DCS Audio Board [Miodrag Milanovic]. Fixed DCS [O. Galibert]. Temp fix for DCS damage [David Haywood].
- 0.151              : Start to get DCS-based games running in wpc_dcs driver (audio\dcs.c) [Barry Rodewald].
- 0.149              : Fixed typo in denver_w() (audio\dcs.c) [Oliver Stoeneberg].
- 0.142u1            : DCS audio variables are restructured internally to resemble a device, simplifying a future device conversion. Some AM_BASE macros are eliminated as well [Atari Ace].
- 0.130              : Aaron Giles fixed DCS2 speedup handler so it doesn't get lost during a memory remap. This should give a slight speed bump to the Seattle/Vegas games and to War Gods.
- 0.125u9            : Aaron Giles fixed some save state problems in the DCS driver. Still comes out garbled on a load, however.
- 0.122u6            : Aaron Giles hooked up Revolution X DCS reset line. Signaled IRQ on correct CPU when DCS sends data back.
- 0.122u4            : Aaron Giles fixed crash when saving state of older DCS-based games.
- 0.122u1            : Aaron Giles fixed ROM-based DCS2 system to ignore HLE transfers (fixes broken sound in invasn). Properly reduced internal memory on the ADSP-2104 variants.
- 0.103              : Aaron Giles got the DCS-3 sound system working for Road Burners.
- 27th December  2005: Aaron Giles - I'm looking for someone out there who has a 2D Midway game with a DCS sound system. This would include Mortal Kombat 2, Mortal Kombat 3, NBA Hangtime, WWF Wrestlemania, 2 On 2 Open Ice Challenge, or Rampage: World Tour. Basically, I need to know how much RAM there is for the ADSP chip. If the system is on an external card, this is pretty easy, just identify the RAM chips on the card and let me know what they are. For the Wolf unit games, I think the sound system is on-board, so you'll just need to identify the smaller RAM chips (they will probably be 8kx8 or 32kx8 parts). In fact, knowing this info for the Cruisin' and Killer Instinct games would be useful as well.
- 0.84u3             : Aaron Giles cleaned up and reorganized the DCS sound module. This required changing the way ROMs are loaded for all of the DCS-using games.
- 0.81u6             : Aaron Giles added support for DCS HLE downloading via FIFO (used by Vegas games).
- 0.81u5             : DCS2 upload command HLE optimization (to make driver easier to work with) [Aaron Giles].
- 0.79u2             : Aaron Giles added support for DMA based DAC 'sound chip' and updated DCS / CAGE to use it.
- 20th February  2004: Aaron Giles - I've decided to take a bit of a break from bending my mind on the 3D texture mapping to do some more core improvements (uh oh....) First thing I recently submitted is a "new" sound device: the DMA-driven DAC. This is essentially what the DCS and CAGE sound systems do. They start their chip's internal DMA controller, point it at the sample data, and let the DMA controller stream the data to the DAC(s). Since I had written this code twice (once for DCS, once for CAGE), and since the Gaelco 3D games use a similar technique, I decided to formalize the code into a new common sound device.
- 0.78               : Aaron Gile fixed reporting of DCS input full/output empty states.
- 31st  October  2003: Aaron Giles recently submitted an updated DCS sound engine that works 100% for WarGods.
- 0.72u2             : Removed DCS Speed-Ups.
- 0.63               : Added sndhrdw\dcs.c/h.
- 21st July      2000: Ernesto Corvi fixed the last remaining bugs in the inter-cpu communication in DCS emulation.
- 20th July      2000: Aaron Giles fixed the clipping in DCS emulation.
- NOTES: DCS Audio Denver = atlantis.cpp and vegas.cpp; DCS2 Audio DSIO = atlantis.cpp and vegas.cpp and DCS3 = Road Burners and San Francisco Rush 2049
- DRIVERS: atlantis.cpp, kinst.cpp, midtunit.cpp, midvunit.cpp, midwunit.cpp, midxunit.cpp, midzeus.cpp, seattle.cpp, vegas.cpp, wpc_95.cpp and wpc_dcs.cpp
- SOURCE: shared\dcs.cpp



S24.3   Williams

S24.31  Williams Audio Boards

- 0.222              : Moved some RC timing macros out of the core (machine\rescap.h) [AJR].
- 0.142u1            : Williams audio variables are restructured internally to resemble a device, simplifying a future device conversion. Some AM_BASE macros are eliminated as well [Atari Ace].
- 0.101u1            : Added save state support to the Williams sound boards. Cleaned up and fully mapped the Williams sound boards. Also added save state support to them [Aaron Giles].
- SOURCE: audio\williams.cpp



S24.32  Williams ADPCM Sound Board

- 0.204              : Removed YM2151 MCFG macros (audio\williams.cpp) [Osso].
- 0.193              : Lower ADPCM volume of the williams_adpcm_sound_device. This fixed possible volume balance issue in NBA Jam / Williams ADPCM Sound Board [hap].
- 0.192              : Lower the DAC volume of the williams_adpcm_sound_device (audio\williams.cpp) [hap]. This fixed missing music in Mortal Kombat.
- 0.187              : Handler cleanup (audio\williams.cpp) [AJR].
- 0.145u7            : Added 'Williams ADPCM Sound Board' sound to jdreddp, nbajam, nbajamte, mk, term2 and totcarn.
- NOTES: Williams ADPCM Sound Board (wmsadpcm)
- DRIVERS: midtunit.cpp and midyunit.cpp
- SOURCE: audio\williams.cpp



S24.33  Williams CVSD Sound Board

- 0.222              : Fixed the Williams audio HC-55516 digit write to mask the digital input bit correctly (instead of sending a whole byte) and fixed the clock set and clear logic to accurately reflect schematics (audio\williams.cpp) [Lord Nightmare].
- 0.187              : Handler cleanup (audio\williams.cpp) [AJR].
- 0.145u7            : Added 'Williams CVSD Sound Board' sound to archrivl, hiimpact, joust2, pigskin, smashtv, strkforc, shimpact, trisport and trog.
- NOTES: Williams CVSD Sound Board (wmscvsd)
- DRIVERS: mcr68.cpp, midyunit.cpp and williams.cpp
- SOURCE: audio\williams.cpp



S24.34  Williams NARC Sound Board

- 0.222              : Fixed the Williams audio HC-55516 digit write to mask the digital input bit correctly (instead of sending a whole byte) and fixed the clock set and clear logic to accurately reflect schematics (audio\williams.cpp) [Lord Nightmare].
- 0.187              : Handler cleanup (audio\williams.cpp) [AJR].
- 0.145u7            : Added 'Williams NARC Sound Board' sound to narc.
- NOTES: Williams NARC Sound Board (wmsnarc)
- DRIVERS: midyunit.cpp
- SOURCE: audio\williams.cpp


S24.35  Williams WPC Sound

- 0.243              : Added save-state support (audio\wpcsnd.cpp) [Robbbert].
- 0.222              : Fixed wpcsnd memory map to explicitly define mirrors and fixed two swapped write handlers in the map (audio\wpcsnd.cpp) [Lord Nightmare].
- 0.221              : Simplified some handlers (audio\wpcsnd.cpp) [Osso].
- 0.204              : Removed YM2151, WPCSND and S11C_BG MCFG macros (audio\wpcsnd.cpp) [Osso].
- 0.182              : Replaced '8-Bit R-2R DAC' sound with AD7524.
- 0.151              : Added audio\wpcsnd.c/h. Added 'Williams WPC Sound' device. Added WPC sound board [Barry Rodewald].
- DRIVERS: wpc_an.cpp, wpc_dot.cpp, wpc_flip1.cpp and wpc_flip2.cpp
- SOURCE: audio\wpcsnd.cpp


S24.36  Williams Pin Sound '88 Audio Board

- 0.245              : Converted audio\pinsnd88.cpp to use logmacro [Ryan Holtz].
- 0.224              : Added 'Williams Pin Sound '88 Audio Board' device. Added and hook up a device for the D-12338-567 Williams Pin Sound '88 board, used on the Williams System 11B 'Jokerz!' pinball. Switched Williams Pin Sound 88 board to use two device_mixer_interface outputs for its output channels, instead of having speakers handled internally to the device. Fixed the Pin Sound 88 /SYNC_PULSE line to connect to Jokerz' System 11B PIA@3400 CA1 instead of CB1, based on board pictures of the W2/W3 jumper positions. Added a note about the infamous audio hum issue on the real Jokerz! pinball table, and updated device comments to clarify things and fix some minor errors [Lord Nightmare].
- DRIVERS: s11b.cpp
- SOURCE: audio\pinsnd88.cpp


S24.37  Williams System 4 Sound Board
- 0.241: Added Williams DAC sound card device to s3 driver [Robbbert].
- NOTES: S4 SOUND BOARD (simple sound card used in system 3/4 pinballs).
- DRIVERS: s3.cpp, s4.cpp and wms_shuffle.cpp
- SOURCE: audio\williams.cpp


S24.38  Williams System 6 Sound Board
- 0.241: Added Williams Dac+speech device for system 6, 6a and 7 [Robbbert].
- NOTES: S6 SOUND BOARD (s4 with speech, used in system 6/6a/7 pinballs).
- DRIVERS: s6.cpp, s6a.cpp and s7.cpp
- SOURCE: audio\williams.cpp


S24.39  Williams System 9 Sound Board
- 0.241: Made sound card a device (WILLIAMS_S9_SOUND). Added 'Williams System 9 Sound Board' sound to Strike Zone (Shuffle) (L-5) and clone (L-2) [Robbbert].
- NOTES: S9 SOUND BOARD (s6 with different interface, used in system 9 pinballs).
- DRIVERS: s8a.cpp, s9.cpp and wms_shuffle.cpp
- SOURCE: audio\williams.cpp


24.3A  Williams System 11 Sound Board
- 0.241: Added 'Williams System 11 Sound Board' sound to Alley Cats (Shuffle) (L-7) [Robbbert].
- NOTES: S11 SOUND BOARD (s9 with banked roms, used in system 11/a/b/c pinballs).
- DRIVERS: wms_shuffle.cpp
- SOURCE: audio\williams.cpp



S24.3B  Gottlieb Multi-mode Sound Board

- 0.246              : Changed sourcefile to shared\gottlieb_a.cpp.
- 0.242              : Replaced 'Gottlieb Sound rev. 0' device with 'Gottlieb Multi-mode Sound Board'.
- 0.155              : Added 'Gottlieb Sound rev. 0' device (audio\gottlieb.c). Preliminary gts80.c work and WIP. Added original 'sound-only' card (Gottlieb Sound rev. 0). Moved original sound board to audio\gottlieb as a device [Robbbert].
- DRIVERS: gts1.cpp, gts80.cpp and gts80a.cpp
- SOURCE: shared\gottlieb_a.cpp


S24.3C  Gottlieb Sound pin./rev.

- 0.258              : Added 'Gottlieb Sound/Speech rev. 1 w/SC-01' device. Use mos6530/2_new_device, sync writes and improved gottlieb_sound_p3_device (shared\gottlieb_a.cpp) [hap]. Added support for the older version of the MA-216 "Sound and speech" board which has a Votrax SC-01 populated instead of an SC-01-A [Lord Nightmare]. Changed description of 'Gottlieb Sound rev. 1 with Votrax' device to 'Gottlieb Sound/Speech rev. 1 w/SC-01-A'. Changed Votrax SC-01 sound clock speed to 422000 Hz in 'Gottlieb Sound/Speech rev. 1 w/SC-01 / A' devices.
- 0.246              : Changed sourcefile to shared\gottlieb_a.cpp.
- 0.242              : Added 'Gottlieb Sound pin. 3', 'Gottlieb Sound pin. 4', 'Gottlieb Sound pin. 5', 'Gottlieb Sound pin. 6' and 'Gottlieb Sound pin. 7' device.
- 0.184              : Added 'Gottlieb Sound rev. 1 with Votrax' device.
- 0.145u4            : Added 'Gottlieb Sound rev. 1' and 'Gottlieb Sound rev. 2' device. Converted Gottlieb r1 and r2 sound boards into full-on devices, using the recently-added mixer interface. All sound outputs are redirected to the new sound device itself, and then the consuming driver can route the new sound device's outputs as appropriate. The Votrax chip has been hooked up properly, with a crude guess at the variable clocking. Current Votrax emulation is turned off, but it can be enabled by changing USE_FAKE_VOTRAX to 0 in gottlieb.h [Aaron Giles].
- DRIVERS: gottlieb.cpp, gts3.cpp, gts3a.cpp, gts80.cpp, gts80a.cpp and gts80b.cpp
- SOURCE: shared\gottlieb_a.cpp




S24.4   Sega

S24.41  Sega Universal Sound Board

- 0.227              : Fixed Sega USB sound device, was using more memory than allocated (fixes Zaxxon and segag80r\segag80v.cpp) [O. Galibert].
- 0.224              : Fixed STRUCT_MEMBER [Vas Crabb].
- 0.224              : Changed audio\segasnd.cpp to audio\segausb.cpp/h and audio\nl_segausb.cpp/h. Improved 'Sega Universal Sound Board' implementation for better accuracy in Star Trek and Tac/Scan [Aaron Giles].
- 0.221              : Simplified some handlers (audio\segasnd.cpp) [Osso].
- 0.187              : Make "Universal Sound Board with ROM" work again [AJR].
- 0.151              : Added 'Sega Universal Sound Board with ROM' device (audio\segasnd.c).
- 0.147              : Added 'Sega Universal Sound Board' device (audio\segasnd.c).
- 0.129u4            : Changed Custom sound to 'Sega Universal Sound Board'. Aaron Giles removed the custom sound device. The additional work to just make custom sound cases into full devices is minimal, so I just converted them all over to be actual devices.
- 0.107u3            : More Zaxxon driver cleanups/fixes [Aaron Giles]: Added state saving support to the Sega Universal Sound Board.
- 0.107u2            : Rewrote Zaxxon driver from the schematics [Aaron Giles]: This is still a WIP (not finished yet). Connected universal sound board to Ixion and Razzmatazz.
- 0.104u8            : Hooked up Sega Universal Sound board to Pig Newton 8Aaron Giles].
- 0.104u7            : More improvements to the Sega Universal Sound board. Star Trek is almost identical to the samples. Tac/Scan is not that far off, surprisingly. Added new PORT_DIPLOCATION() macro which allows you to specify the physical PCB location of a dipswitch and the switches that correspond to the bits in the DIPSETTING. See sega.c for an example [Aaron Giles].
- 0.104u6            : Aaron Giles added emulation of the Universal Sound Board - not yet perfected, but gets rid of the need for samples in Star Trek and Tac/Scan. Tac/Scan sounds pretty wretched now, but Star Trek is close. Fixed CPU clock speed on the speech board, but it appears to be a bit too slow now. This is still work-in-progress. Don't report bugs yet.
- DRIVERS: segag80r.cpp and segag80v.cpp
- SOURCE: audio\segausb.cpp and audio\nl_segausb.cpp



S24.42  Sega Speech Sound Board

- 0.224              : Added audio\nl_segaspeech.cpp/h. Splitted the 'Sega Universal Sound Board' and 'Sega Speech Sound Board' into their own separate files. Wrote netlist-based backend for 'Sega Speech Sound Board'; currently disabled pending future sound system changes [Aaron Giles].
- 0.149u1            : Added 'Sega Speech Sound Board' device.
- 0.142u1            : Audio device additions: segasnd are converted to legacy devices [Atari Ace]. Added 'Sega Speech Sound Board' to astrob, spacfury, startrek and zektor.
- DRIVERS: segag80r.cpp and segag80v.cpp
- SOURCE: audio\segaspeech.cpp and audio\nl_segaspeech.cpp



S24.5   Leland

- 1st generation sound hardware was controlled by the master Z80. It drove an AY-8910/AY-8912 pair for music. It also had two DACs that were driven by the video refresh. At the end of each scanline there are 8-bit DAC samples that can be enabled via the output ports on the AY-8910. The DACs run at a fixed frequency of 15.3kHz, since they are clocked once each scanline.
- 2nd generation sound hardware was used in Redline Racer. It consisted of an 80186 microcontroller driving 8 8-bit DACs. The frequency of the DACs were controlled by one of 3 Intel 8254 programmable interval timers (PITs). The clock outputs for each DAC can be read, and are polled to determine when data should be updated on the chips. The 80186's two DMA channels are generally used to drive the first two DACs, with the remaining 6 DACs being fed manually via polling.
- 3rd generation sound hardware appeared in the football games (Quarterback, AAFB) and the later games up through Pigout. This variant is closely based on the Redline Racer sound system, but they took out two of the DACs and replaced them with a higher resolution (10-bit) DAC. The driving clocks have been rearranged a bit, and the number of PITs reduced from 3 to 2. Like the 2nd generation board, the first two DACs are driven via the DMA channels, and the remaining 5 DACs are polled.
- 4th generation sound hardware showed up in Ataxx, Indy Heat, and World Soccer Finals. For this variant, they removed one more PIT and 3 of the 8-bit DACs, and added a YM2151 music chip and an externally-fed 8-bit DAC. The externally driven DACs have registers for a start/stop address and triggers to control the clocking.
- SOURCE: audio\leland.c - Driver by Aaron Giles and Paul Leaman



S24.6   CAGE

- 0.243              : Added partially support of variable sound output channels (audio\cage.cpp) [cam900].
- 0.224              : Added one missing variable to state saving (audio\cage.cpp), should address MT07724 (No sound when loading from save state in sfrush and sfrushrk) [Osso].
- 0.222              : Fixed [debug] assertion in 'San Francisco Rush' and 'San Francisco Rush: The Rock' (audio\cage.cpp) [AJR].
- 0.221              : Removed some dummy_space() calls [smf]. Simplified some handlers (audio\cage.cpp) [Osso].
- 0.200              : Reduced runtime tag lookups. Use device finder. Fixed communication. Minor cleanups [cam900].
- 0.174              : Updated audio\cage.cpp to use gen_latch.cpp [Osso].
- 0.154              : Modernized CAGE sound [Miodrag Milanovic]. Added 'Atari CAGE' and 'Atari CAGE Seattle' device (audio\cage.c).
- 0.142u1            : CAGE audio variables are restructured internally to resemble a device, simplifying a future device conversion. Some AM_BASE macros are eliminated as well [Atari Ace].
- 0.125u7            : Aaron Giles added save state support to CAGE audio system.
- 0.79u2             : Aaron Giles added support for DMA based DAC 'sound chip' and updated DCS / CAGE to use it.
- 20th February  2004: Aaron Giles - I've decided to take a bit of a break from bending my mind on the 3D texture mapping to do some more core improvements (uh oh....) First thing I recently submitted is a "new" sound device: the DMA-driven DAC. This is essentially what the DCS and CAGE sound systems do. They start their chip's internal DMA controller, point it at the sample data, and let the DMA controller stream the data to the DAC(s). Since I had written this code twice (once for DCS, once for CAGE), and since the Gaelco 3D games use a similar technique, I decided to formalize the code into a new common sound device.
- 0.77               : Added sndhrdw\cage.c/h. Aaron Giles fixed frequency computation - CAGE now works ok! Added speedup mechanism. Fixed positioning of the 4 voices.
-  9th November  2003: R. Belmont - CAGE works for T-MEK and Primal Rage. It doesn't work yet for Metal Maniax or San Francisco Rush (the 32031 does boot and act normally in those games, it just isn't responding to commands at the moment).
-  7th November  2003: Aaron Giles added the CAGE sound system emulation to Primal Rage (and a bunch of non-working drivers).
- PCB: CAGE audio board Nr. A053304 (Tmek, Primrage, Metal Maniax)
- DRIVERS: atarigt.cpp, metalmx.cpp and seattle.cpp
- SOURCE: audio\cage.cpp



S24.7   Seibu Sound System

- 0.276              : Read coin inputs through sound device. Coin inputs are read through the sound MCU, so this documents the connections better and allows fake I/O ports to be removed. Also cleaned up code and improved tags [cam900].
- 0.246              : Changed sourcefile to shared\seibusound.cpp.
- 0.230              : Schedule all interrupt changes via timers to ensure proper ordering. Fixes the seibu sound issue in a more generic fashion (sound\ymfm.cpp) [Aaron Giles]. Implemented in-service lockout for IRQs. Prevent Cabal from locking up the sound CPU with an unacknowledged interrupt after reset [AJR].
- 0.227              : Changed description to 'Seibu ADPCM interface'. Use interface to MSM5205 device for seibu_adpcm. Fixed hardware notes (audio\seibu.h) [cam900].
- 0.226              : Update audio\seibu.cpp to new stream callbacks [Aaron Giles].
- 0.200              : Interrupt modernization (audio\seibu.cpp) [AJR].
- 0.189              : Use 8-bit handlers for main CPU accesses (audio\seibu.cpp) [AJR].
- 0.180              : Seibu sound device cleanup: Eliminate SEIBU_SOUND_SYSTEM configuration macros hiding details of device construction. Start using DEVCB for generic YM hookups. Use device finder to connect seibu_sound_device to audiocpu. kothello has only one YM2203 and one ADPCM, not two of each. Future changes planned: Separate SEI0100BU and SIE150 types; Cabal and Dead Angle should each be using two of the former. Separate SEI80BU device to handle Z80 decryption (Mustache Boy uses this for its main CPU). Moved SEI80BU encryption out of the SEIBU_SOUND device and make it a device of its own. Added MCFG_DEVICE_ROM to override region tag for device_rom_interface [AJR].
- 0.157              : Changed description to 'Seibu ADPCM (MSM5205)'. Removed unused functions (audio\seibu.c) [Alex Jackson].
- 0.155              : Get rid of static int irq1 and irq2 (audio\seibu.c) [hap].
- 0.154              : Converted seibu_adpcm to use inline configs [Fabio Priuli].
- 0.150              : Modernized the Seibu ADPCM device and converted the Seibu sound system to be a device [Osso]. Fixed Clang compiler warnings (audio\seibu.c) [Oliver Stoeneberg].
- 0.148u5            : Fixed using wrong macro (YM2151_IRQ_HANDLER <-> YM3812_IRQ_HANDLER; audio\seibu.h) [smf].
- 0.146u3            : Set other coin bits to unused [hap].
- 0.145u7            : hap removed old and obsolete hack (audio\seibu.c).
- 0.140u3            : Angelo Salese fixed an un-inited bankswitch problem in the Seibu audio driver, gives preliminary working sound in Denjin Makai. Commented out a bogus irq hack in Seibu audio HW, fixes sound for good in Denjin Makai and removes a cheesy kludge for Denjin Makai and SD Gundam.
- 0.124u1            : Stephane Humbert changed Seibu sound CPU to use AM_READ_PORT("COIN") (seibu_sound_map) instead of input_port_0_r.
- 0.122u6            : Aaron Giles cleaned up memory maps in the Seibu sound interfaces. Changed to use shared sound configs instead of statically copying them in each driver.
- 0.71u2             : Aaron Giles improved CPU interrupt (src\cpuint.c), this fixed the Seibu Sound System.
- 0.36b12            : Added sndhrdw\seibu.c/h.
- NOTES: The Seibu sound system comprises of a Z80A, YM3812, YM3931 and OKI MSM6205. As well as sound the Z80 can controls coins and pass data to the main cpu. There are a few little quirks that make it worthwhile emulating in a seperate file: The YM3812 generates interrupt RST10, by asserting the interrupt line, and placing 0xd7 on the data bus. The main cpu generates interrupt RST18, by asserting the interrupt line, and placing 0xdf on the data bus. A problem can occur if both the YM3812 and the main cpu try to assert the interrupt line at the same time. The effect in the old MAME emulation would be for sound to stop playing - this is because a RST18 cancelled out a RST10, and if a single RST10 is dropped sound stops as the YM3812 timer is not reset. The problem occurs because even if both interrupts happen at the same time, there can only be one value on the data bus. Obviously the real hardware must have some circuit to prevent this. It is emulated by user timers to control the Z80 interrupt vector.
- DRIVERS: airraid.cpp, bloodbro.cpp, cabal.cpp, dcon.cpp, deadang.cpp, dynduke.cpp, goodejan.cpp, legionna.cpp, nmk16.cpp, r2dx_v33.cpp, raiden.cpp, raiden2.cpp, sengokmj.cpp, shanghai.cpp and toki.cpp
- SOURCE: shared\seibusound.cpp


S24.8   Vegas sound system
- NOTES: The Vegas Sound I/O boards consists of: Vegas SIO  - ADSP2104 (16MHz, boot ROM and 4MB RAM), Deluxe SIO - ADSP2181 (32MHz, no ROM and 4MB RAM) and Denver SIO - ADSP2181 (33MHz, no ROM and 4MB RAM).
- SOURCE: drivers\vegas.cpp
- GAMES: Atari/Midway Seattle games


S24.9   Data East Pinball soundboard
- NOTES: Tattoo Assassins is a prototype, only 25 test units were manufactured and distributed to test arcades before the game was recalled. Tattoo Assassins is the only game developed by Data East Pinball in USA.
- SOURCE: drivers\deco32.cpp
- PCB: Soundboard 520-5077-00 R (Tattass)


S24.A   Taito Soundboard

- 0.262              : Use callbacks for interrupt and reset outputs. Also suppress read side effects for debugger accesses (shared\taitosnd.cpp) [cam900].
- 0.209              : Removed unnecessary arguments in handlers and defines. Use shorter type values [AJR].
- 0.150              : Improved TC0140SYT/PC060HA NMI handling, preventing lost interrupts (audio\taitosnd.c) [Phil Bennett]. Synchronize CPUs when maincpu accesses the chip (audio\taitosnd.c), this fixes recent Drift Out sound breakage [hap].
- 0.148u4            : Fixed taitosnd interrupts basically not working at all, stupid bug. Get rid of old commented-out verbosity and some other source cleanup [hap].
- 0.148u2            : Modernized the taitosnd device (affected drivers\asuka.c, darius.c, exzisus.c, mlanding.c, ninjaw.c, opwolf.c, othunder.c, rainbow.c, rastan.c, slapshot.c, taito_b.c, taito_f2.c, taito_h.c, taito_l.c, taito_x.c, taito_z.c, taitoair.c, topspeed.c, volfied.c, warriorb.c, wgp.c and zn.c) [Andrew Gardner].
- 0.146u1            : Stop flooding error.log with these [hap].
- 0.136u1            : Fabio Priuli converted taitosnd (aka TC0140SYT) to be a device and updated the related drivers to use the new code.
- 0.130u3            : Aaron Giles removed msb/lsb handlers from taitosnd. Updated all drivers to call the 8-bit versions directly from the address maps.
- 0.37b8             : Added sndhrdw\taitosnd.c/h.
- PCB: TCO140SYT (Othunder, Sci, Aquajack)
- GAMES: Taito - Rastan (1987), Rainbow Islands (1987), Superman (1988), Taito L-System, Taito F2 System and Taito B System
- SOURCE: audio\taitosnd.cpp


S24.A1  Taito Ensoniq Sound System

- 0.284              : Re-enable esqpump aux outputs (taito\taito_en.cpp) [hap].
- 0.283              : Removed feature::SOUND from imperfect_features() (es5510\es5510.h, sound\esqpump.h) [Christian Brunschen].
- 0.282              : Route es5505 bus to a separate 'aux' stereo output. The VFX-SD and later keyboards in the family have not only a main stereo output, but also a second 'aux' stereo output that bypasses effects processing and has separate output jacks from the keyboard. This allows some sound to be routed for separate effects processing or recording (sound\esqpump.cpp and ensoniq\esq5505.cpp) [Christian Brunschen].
- 0.228              : Removed unneeded logerror (sound\esqpump.cpp) [hap].
- 0.225              : Fixed overdriving that caused distortion and pops in previous versions (audio\taito_en.cpp) [R. Belmont]. Update sound\esqpump.cpp to new stream callbacks and cleanup esqpump thanks to synchronous streams [Aaron Giles].
- 0.221              : Removed obsolete workaround for M68000 reset issue (audio\taito_en.cpp) [AJR]. Simplified some handlers (audio\taito_en.cpp) [Osso].
- 0.215              : Slight XTAL correction (emu\xtal.cpp and audio\taito_en.cpp) [AJR].
- 0.212              : Saner dividers for MB87078, fixes regression with Taito F3 volume control being too quiet (audio\taito_en.cpp) [Angelo Salese].
- 0.209              : Use CPU space for interrupt vectoring (audio\taito_en.cpp) [AJR].
- 0.207              : Use required_device for m_esp. Added device_clock_changed. Added notes. Changed timer frequency related to sample rate(clock). Sync sample rate with sound\esqpump.cpp [cam900].
- 0.206              : Eliminated set_input_line_vector (audio\taito_en.cpp) [AJR].
- 0.202              : Removed MB87078 MCFG macros (audio\taito_en.cpp) [Ryan Holtz].
- 0.196              : Moved imperfect_features() into es5510.h. Verified ESP input clock and output channels from GunBuster schematics (same in other PCBs?). Added m_bankmask instead runtime tag lookups. Added notes. Cleanup unused m_otis/m_otto and converted e[0x4000] into std::unique_ptr if used (sound\esqpump.cpp) [cam900].
- 0.195              : Hooked up ES5510 effects DSP [cam900, R. Belmont]. Added 'Ensoniq 5505/5506 to 5510 interface' device (sound\esqpump.cpp).
- 0.188              : Improved -romident performance by dynamically allocating large arrays at device_start time (audio\taito_en.cpp) [Phil Bennett].
- 0.187              : Use MB8421 for communication RAM (audio\taito_en.cpp) [AJR].
- 0.172              : Use device_mconfig_additions() (audio\taito_en.cpp) [Osso].
- 0.162              : Updated sound\esqpump.c [Miodrag Milanovic].
- 0.155              : Added note. Small cleanup (audio\taito_en.c) [hap].
- 0.154              : Converted es550x_device to DEVCB2 [Osso].
- 0.152              : Updated taito_en to use the N68681 device [Osso].
- 0.150              : Added sound\esqpump.c/h. Converted taito_en to 'Taito Ensoniq Sound System' device [Osso]. Separate Ensoniq "pump" device out from esq5505.c (sound\esqpump.c) [R. Belmont].
- 0.149u1            : Preliminary hookup ES5510 to ES5505/5506. Samples are passed through unchanged for now (cpu\es5510\es5510.c/h, es5506.c/h, audio\taito_en.c, drivers\itech32.c, macrossp.c and ssv.c) [Christian Brunschen]. Dropped ESS5505/6 levels in driver to make up for changes in core which under normal levels caused VERY loud audio and clipping. Note: This is a temporary fix until the core itself can be made to react as it did before the last sound core change [Tafoid].
- 0.147              : Fixed debug assert (src\emu\attotime.h) in all/most sets in superchs.c, gunbustr.c, groundfx.c, galastrm.c, taitojc.c, undrfire.c, taito_f3.c and bfm_sc4.c [Phil Bennett].
- 0.146u3            : Phil Bennett fixed barely audible sound in Gunlock (audio\taito_en.c).
- 0.146u2            : Taito Ensoniq ES5505 sound (audio\taito_en.c): Fixed 68000 CPU2 clock speed in galastrm.c, groundfx.c, gunbustr.c, superchs.c, taito_f3.c, taitojc.c and undrfire.c [Stefan Lindberg].
- 0.142u1            : taito_en has minor changes to eliminate an AM_BASE macro [Atari Ace].
- 0.106u8            : Changed sndhrdw\taito_f3.c to taito_en.c/h. David Haywood moved some common code into taito_en.c (Taito Ensoniq sound system).
- NOTES: Taito Ensoniq ES5505-based sound hardware
- DRIVERS: galastrm.cpp, groundfx.cpp, gunbustr.cpp, superchs.cpp, taito_f3.cpp, taitojc.cpp and undrfire.cpp
- SOURCE: audio\taito_en.cpp + sound\esqpump.cpp


S24.A2  Taito Zoom Sound System

- 0.198              : Route sound relative to current device [Vas Crabb].
- 0.180              : Don't attach memory maps to driver_device [O. Galibert].
- 0.201              : Improved Taito Zoom ZSG-2 sound emulation (sound\zsg2.cpp): Implemented emphasis filter, this is a noise reduction scheme that amplifies higher frequncies to reduce quantization noise. Added sample interpolation and another adjustable lowpass filter. This seems to be roughly what real hardware does. Improved panning registers and identify DSP output gain registers. Register 0b appears to be status flags. Proper ramping implemenation and added register map. Attempt to reduced clicks. Made the emphasis filter much more simple. I think this matches hardware, as a filter like this could be implemented with very few gates in hardware. Also reset the filter state when the sample position reaches the start address, this fixes Ray Crisis song #9. Clamp audio output to 16-bits. Optimized the filters. Saturated the emphasis filter output. Right shifting will cause unwanted noise. Discharge the output filter slowly when the cutoff is set to 0. Fixes popping noises in Ray Crisis song #12. Taito Zoom ZSG-2 sound board (audio\taito_zm.cpp): Added working DSP emulation. Reduced MCFGs. Added device_mixer_interface for sound gain. Added imperfect_features related to DSP and notes. Fixed TMS57002 clock. Adjust volume balance, hopefully fixing Psyvariar -Revision-. I would need hardware recording for proper verification though [superctr].
- 0.153              : Modernized Taito Zoom (audio\taito_zm.c). Added Zoom ZSG-2 sound to taitogn.c [hap].
- 0.148u2            : Modernized ZSG2 devices [Andrew Gardner].
- 0.136u3            : Added audio\taito_zm.c/h. Preliminary Taito ZOOM ZSG-1 sound system. Added and hook up ZOOM ZSG-2 skeleton. Note: Doesn't do much at the moment, but the increase in documentation value is significant (we're documenting the sample compression format, for one thing) [Olivier Galibert].
- SOURCE: audio\taito_zm.cpp



S24.B   SNK

S24.B1  SNK6502

- 0.199              : Improved sound encapsulation and fixed BGM. Frequency/rate should be set in config, not reset handlers. Speech should be moved into a separate device for the games that have it. Probably should be specialisations for sasuke and satansat. Not all games have three channels [Vas Crabb].
- 0.192              : Changed description to 'SNK6502 Custom Sound'.
- 0.150              : Modernized snk6502 devices [Osso].
- 0.132u5            : Changed Rockola Custom to 'snk6502 Custom'.
- 0.129u4            : Changed Custom sound to Rockola Custom.
- 0.88u7             : BUT added Custom sound to Sasuke vs. Commander.
- 0.36b7             : Added Custom sound to Fantasy, Nibbler, Pioneer Balloon, Satan of Saturn and Vanguard.
- DRIVERS: snk6502.cpp
- SOURCE: audio\snk6502.cpp


S24.B2  SNK Wave

- 0.272              : Fixed frequency register bit alignment as well as waveform sample bit alignment based on the schematics and observations of running games (sound\snkwave.cpp). Fixes wrong laser/other sounds in Vanguard II and some wrong sounds in Marvin's Maze [Lord Nightmare].
- 0.225              : Update SNKWave sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.154              : Fixed for SNK buzzing sound on startup (sound\snkwave.c). To be verified during the next regression test [Osso].
- 0.148              : Modernize SNKWave sound device [Andrew Gardner].
- 0.147              : Added 'SNK Wave' device.
- 0.127u2            : Added sound\snkwave.c/h. Nicola Salmoria fixed emulation of the "SNK Wave" custom sound used by Marvin's Maze and Vanguard II and made it into a proper sound core.
- DRIVERS: snk.cpp
- SOURCE: sound\snkwave.cpp



S24.C   IREM

S24.C1  Irem Audio

- 0.221              : Simplified some handlers (audio\irem.cpp) [Osso].
- 0.174              : Added audio\nl_kidniki.h. Allow separate audio\irem.cpp driver building [Miodrag Milanovic].
- 0.164              : Converted Irem sound into a true device [Couriersud].
- 0.163              : Documented signals on PortA used for analog sound (audio\irem.c) [Couriersud].
- 0.149u1            : Modernized the irem_audio device. Removed some includes made unnecessary by recent changes [Osso].
- 0.133u1            : Improved Irem sound: [Couriersud]: Better Moon Patrol sound. Revisited schematics. Found 10-Yard schematics as well. Correct a bug, some discrete values and added two RC nodes from schematics.
- 0.111u1            : Mamesick fixed copy/paste bug in the Irem sound hardware dealing with MSM5205 chips (audio\irem.c).
- DRIVERS: m52.cpp, m57.cpp, m58.cpp, m62.cpp and travrusa.cpp
- SOURCE: audio\irem.cpp



S24.C2  Irem M72 Audio

- 0.209              : Removed hardcoded tags, unused functions and values and added device_rom_interface for sample roms (audio\m72.cpp) [cam900].
- 0.189              : ACCESSING_BITS cleanup of M72 Audio [AJR].
- 0.186              : Changed description to 'Irem M72 Audio'.
- 0.154              : Changed 'M72 Custom' to 'Irem M72 Audio Custom'.
- 0.149u1            : Modernized M72 audio device and removed dead code [Osso].
- 0.142u1            : Converted M72 audio to legacy devices [Atari Ace]. Added 'M72 Custom' sound to m72.c, m90.c, shisen.c and vigilant.c.
- DRIVERS: m72.cpp, m90.cpp, shisen.cpp and vigilant.cpp
- SOURCE: audio\m72.cpp


S24.D   NEC C1891
- NOTES: NEC Matrix Surround Sound Processor
- PCB: NEC C1891ACY, DIP20 (NeoGeoHyper64)



S24.E   Game Blaster

- 0.223              : Fixed SAA1099 output and clock inputs (verified from real hardware) [cam900].
- 0.222              : Simplified signatures of most handlers [AJR].
- 0.185              : Added 'Game Blaster Sound Card' device.
- 0.166              : Minor Game Blaster corrections [kazblox].
- 0.164              : Correct Game Blaster clock to 7.159 MHz [kazblox].
- 0.163              : Fixed Game Blaster emulation, now working. Fixed Game Blaster compatibility in SB1.0 [Balrog].
- 0.153              : Moved mess\machine\isa_gblaster.c/h to emu\bus\isa\. Shuffle ISA and some more PC related devices around [Miodrag Milanovic].
- 0.147              : Added mess\machine\isa_gblaster.c/h. Merge of MESS sources [Miodrag Milanovic].
- NOTES: ISA 8 bit Creative Labs Game Blaster Sound Card
- SOURCE: bus\isa\gblaster.cpp


S24.F   Sound Blaster

- 0.284              : Fixed sb16_lle produces ugly beeps in (MESS) ct486 Wolfenstein 3D. Converted irq triggers to input_merger. Moved OPL3 ranges in host_io map. Round up cnt reads to actual raw writes. Ack irq16 too when reading 0x22e from host side. Subscribe to ISA remap. Mode bit 1 is for silence, fixes (MESS) fwmigolf card detection (isa\sb16.cpp). Hookup legacy Microphone level r/w (sound\ct1745.cpp) [Angelo Salese].
- 0.283              : Silence spammy ports (isa\sb16.cpp) [Angelo Salese].
- 0.278              : Added command 0x80 (Play silence) (isa\sblaster.cpp) [Carl]. Hookup command logs thru logmacro.h [Angelo Salese].
- 0.273              : Convert FIFO size checks to a named entity. Halve DMA length if Stereo mode is selected. Added +1 to DMA length for stereo mode as well (isa\sb16.cpp) [Angelo Salese].
- 0.272              : Added sound\ct1745.cpp/h and cbus\sb16_ct2720.cpp/h. Initial hookup for PC-98 Sound Blaster 16 (Creative Sound Blaster 16 for PC-9800 Series (Board name: CT2720)) (cbus\sb16_ct2720.cpp). Fixed incorrect OPL3 range and added quick mixer placeholder so that it returns irq/dma settings (isa\sb16.cpp). Moved mixer implementation to own ct1745 device [Angelo Salese].
- 0.264              : Quickly add remap to sb16, allow przonegd to boot to VGA mod [Angelo Salese].
- 0.258              : Added 8-bit DMA continue command. Fixes missing sounds in (MESS) ibm5170_cdrom.xml games sideline and jagdead at least and teardown hang in sideline (isa\sblaster.cpp) [Angelo Salese].
- 0.223              : Fixed SAA1099 output and clock inputs (verified from real hardware) [cam900].
- 0.222              : Simplified signatures of most handlers (isa\sb16.cpp, sblaster.cpp) [AJR].
- 0.219              : Support more playback commands [Sergey Svishchev].
- 0.206              : DMA fixes for SB Pro and SB16 (isa\sblaster.cpp) [Sergey Svishchev].
- 0.199              : Implemented direct DAC mode successfully tested in Scream Tracker 2.2 [Sergey Svishchev].
- 0.185              : Added save DSP state. Fixed incessant popping before first use [Scott Percival].
- 0.179              : Drop the upper bit of the address when shifting left, as described http://wiki.osdev.org/ISA_DMA#16_bit_issues (machine\cs4031.cpp). This fixes 16 bit audio in sb16 diagnose.exe. Intel documentation is conflicting, which prompted osdev to claim that 128k DMA was impossible. Masking the lowest bit of the page instead of the upper bit of the address makes more sense and it does also fixed the issue with SB16 diagnose.exe playing silence [smf].
- 0.166              : Minor Sound Blaster corrections [kazblo].
- 0.164              : Correct Sound Blaster 1.0 clock to 7.159 MHz [kazblox].
- 0.155              : Added isa\sb16.c/h. Added Soundblaster 16 low level emulation. The diagnose program mostly works but I'm sure there are still many more bugs, it definitely isn't near as usable as the HLE (at least yet) [Carl, Malice, O. Galibert]. Removed unused m_bps variable [Wilbert Pol].
- 0.154              : Fixed irqs and 16bit DMA [Carl].
- 0.153              : Changed mess\machine\isa_sblaster.c/h to bus\isa\sblaster.c/h.
- 0.148u5            : Modernised the YMF262 (sound\262intf.c/h and machine\isa_sblaster.c) [smf].
- 0.148u1            : Sound Blaster MIDI Out support for single-byte, SB UART and MPU-401 UART modes. Improved MIDI throttling. Working SB-MIDI In (tested w/MIDI Monitor for Windows). Fully hooked up MPU-401 input and output for SB16. Added save state registrations to Sound Blaster [R. Belmont].
- 0.148              : Partially implement sb16 mixer [Carl]: Fixes Simcity 2000. Removed unneeded &&1 in machine\isa_sblaster.h.
- 0.147              : Added Sound Blaster 16, and proper 16 bit ISA DMA handling. Added 2, 3 and 4bit ADPCM support. Improved the isa_blaster ADPCM and simplifies the DSP protection, based on the ATI Stereo FX rom. Correct the output in ADPCM mode and inhibits irqs after the protection command. Test-sbc.exe works again [Carl].
- NOTES: ISA 8/16 bit Creative Labs Sound Blaster Sound Card
- DRIVERS: fruitpc.cpp, magtouch.cpp, pcat_dyn.cpp and savquest.cpp
- SOURCE: bus\isa\sblaster.cpp and isa\sb16.cpp/h


S24.G   Gravis Ultrasound

- 0.226              : Update GUS sound to new stream callbacks [Aaron Giles].
- 0.222              : Simplified signatures of most handlers [AJR].
- 0.219              : Active channels are numbered from 0 [Sergey Svishchev]. Calculated GF1 sample rate [cam900]. Fixed divide by zero [Barry Rodewald].
- 0.154              : Converted GUS to DEVCB2 (isa\gus.c) [Osso].
- 0.153              : Changed mess\machine\isa_gus.c/h to bus\isa\gus.c/h. Rewritten 6850 based on datasheet using external CLOCK & removed MIDI clock hacks. GUS gf1_device device derives from acia6850_device to gain access to the tx & rx irq state, rather than exposing it with a public method [smf].
- 0.148u1            : Enabled 6850 MIDI interface in Gravis Ultrasound (machine\isa_gus.c) with a hopefully accurate clock, and fixed a silly error with MIDI IRQs, and passes the MIDI transmit IRQ test. It still slows the drivers down a bit, but now only by about 20-25%, might be a bit more manageable now. Also, is there any way to tell if the 6850 triggers an IRQ on recieve or transmit, as the GUS has separate flags for each case. Otherwise, it can't pass the MIDI recieve IRQ test. Added Gravis Ultrasound MIDI In and Out. Note: MIDI Out seems to work fine with Win 3.1 MIDI Mapper and Media Player. To use with these, open MIDI Mapper, and edit the General MIDI setup, and change each channel from "Ultrasound MIDI Synth" to "Ultrasound MIDI Output Port". MIDI In is untested, and the MIDI Receive IRQ test still fails. Fixed audio streaming in the Windows GUS drivers, and added a hacky workaround for Win95 setting invalid IRQ settings [Barry Rodewald].
- SOURCE: bus\isa\gus.cpp


S24.H   ATI Stereo F/X

- 0.222              : Simplified signatures of most handlers (isa\stereo_fx.cpp) [AJR].
- 0.153              : Changed mess\machine\isa_stereo_fx.c/h to bus\isa\stereo_fx.c/h.
- 0.151              : Fixed ATI Stereo F/X typo shown by Clang [R. Belmont].
- 0.147              : Added machine\isa_stereo_fx.c/h. Added ATI Stereo F/X ISA card support [Carl].
- NOTES: ATI Stereo F/X
- SOURCE: bus\isa\stereo_fx.cpp


S24.I   MPEG

- 0.266              : Added decode of "AMMSL" type sample (sound\mpeg_audio.cpp) [MetalliC].
- 0.192              : Use pre-calculated cosine table for DCT decoding, yields significant performance improvement (sound\mpeg_audio.cpp) [David Haywood, Aaron Giles].
- 0.173              : Separated MPEG audio as device, made building separate Model3 possible [Miodrag Milanovic].
- 0.153              : Removal of unused code [hap].
- 0.152              : Return false on bad header [hap]. Moved the 0-size test [O. Galibert].
- 0.148              : Added sound\mpeg_audio.c/h. Splitted AMM decoder from YMZ770 and added MPEG layer 1/2 support [O. Galibert].
- DRIVERS: Sega Z80 Digital Sound Board (dsbz80.h - Model 1/2/3)
- SOURCE: sound\mpeg_audio.cpp



S24.J   Acclaim RAX Sound Board

- 0.268              : Use device_mixer_interface for sound route. Cleanups. Use C++ style comments for single line comments. Suppress side effect for debugger reads. Make variables constant. Fixed spacing. Reduced literal tag usages. Added variables into save state (shared\rax.cpp) [cam900].
- 0.246              : Changed sourcefile to shared\rax.cpp.
- 0.240              : Used finder for memory banks (audio\rax.cpp) [Osso].
- 0.229              : Fixed issues detected by Coverity Static Analysis (software) (audio\rax.cpp) [Robbbert].
- 0.225              : Modernized RAM allocation and object lookups [AJR].
- 0.221              : Simplified some handlers (audio\rax.cpp) [Osso].
- 0.193              : Fixed RAX sound [Olivier Galibert].
- 0.192              : Replaced driver_device::generic_pulse_irq_line with device_execute_interface::pulse_input_line + CPU minimum quantum [AJR].
- 0.186              : Finished updating mame\audio devices to use device_add_mconfig insted of device_mconfig_additions [Osso].
- 0.180              : Added audio\rax.cpp/h. Changed machine\zndip.cpp/h to znmcu.cpp/h. Emulated the Acclaim RAX sound board, fixing sound to Batman Forever and NBA Jam Extreme [Phil Bennett].
- DRIVERS: stv.cpp and zn.cpp
- SOURCE: shared\rax.cpp



S24.K   MSX AUDIO
- GAMES: Ginga NinkyouDen (Jaleco 1987), The Legend of Air Cavalry (SNK 1988), ChopperI (SNK 1988)
- PCB: SOUND: YM2149 Y8950(MSX AUDIO), SOUND: YM3812x1 / MSX-AUDIOx1 or SOUND: YM3526, MSX-AUDIO (?)


S24.L   86C617

- 0.262              : Added pci\sonicvibes.cpp/h. Added S3 Sonic Vibes PCI based cards. Added base BARs, hookup joystick port and OPL3 [Angelo Salese].
- NOTES: S3 Sonic Vibes 86C617 PCI card. Known subvendor ID cards (from dosdays.co.uk): Turtle Beach Daytona, Aztech SC128 3D (FCC ID: I38-SN97126), ExpertColor MED6617, GVC Media Technology card (FCC ID: M4CS0027) and Ennyah 3D PCI Sound
- SOURCE: pci\sonicvibes.cpp


S24.M   Emagic Audiowerk2
- 0.262              : Added pci\audiowerk2.cpp/h. Added stub for Emagic Audiowerk2 [Angelo Salese].
- NOTES: 'Emagic Audiowerk2 Digital Audio Recording PCI card'
- SOURCE: pci\audiowerk2.cpp


S24.N   ESS Solo-1/Maestro
- 0.263              : Added pci\ess_maestro.cpp/h. Added stub for ESS Solo1/Maestro line [Angelo Salese].
- NOTES: 'ES1938/ES1946/ES1969 Solo-1 Audiodrive PCI card'
- SOURCE: pci\ess_maestro.cpp


S24.O   AdLib Music Synthesizer Card
- 0.278              : Use official product name for device string [AJR]. Removed unneeded r/w trampoline [hap]. Changed description to 'AdLib Music Synthesizer Card'.
- 0.185              : Added 'Ad Lib Sound Card' device (bus\isa\adlib.cpp).
- 0.147              : Added machine\isa_adlib.c/h. Added Merge of MESS sources [Miodrag Milanovic].
- NOTES: ISA 8 bit AdLib Music Synthesizer Card
- SOURCE: bus\isa\adlib.cpp


S25.    Synthesizer / MIDI

S25.1   MIDI

- 0.284              : Tidy some stuff (ensoniq\esqvfd.cpp) [Vas Crabb].
- 0.283              : Improved Ensoniq panel/display device functionality, added three more views, including a working keyboard. The panel view is improved after re-measuring on a real keyboard. Colors have been changed a bit in order to improve contrast. Three new views have been added: 1. A Full view of the keyboard, including the controls to the left of the keyboard, specifically the Pitch-Bend and Modulation Wheels and the Patch Select buttons, as well as a representation of the floppy drive and the little "storage compartment" above it that is a bit of a characteristic shape. 2. A "Compact" view that includes all the controls and a 37-key (3-octave) keyboard that may be both legible and playable at the same time, on a reasonably-sized touch screen. 3. A "Tablet" view of the front-panel controls, with the display and buttons stacked vertically instead of stretched horizontally, as well as the "Patch Select" buttons. This view, together with a MIDI keyboard controller, this should give users a reasonably workable facsimile of the real thing: Keys, Pitch Bend and Modulation wheels on their MIDI keyboard controller; all the keyboard-specific controls and the Ensoniq-specific Patch Select buttons on the "Tablet" view. The Full and Compact views also include a keyboard: the full 61 keys and a reduced 37 keys respectively. These work, tracking pointer events, and generate not just key-down events with velocity, but also per-key "pressure" or "aftertouch". Velocity is simulated by position of the click/touch; Pressure by movement of the pointer on the key while down. Both are also animated: Velocity is shown as a colour between blue (1) and green (127), Pressure between yellow (1) and red (127) (ensoniq\esqpanel.cpp). Ensoniq Vacuum Fluorescent Displays: Ignore 'ff' light commands. 'e8' also clears attributes. Ignore 'ff' light commands. 'e8' also clears attributes. Normalized bracing from a mix to K&R, matching esqvfd.h. Added save_item(...) in device_start() for all member variables. Use existing m_lastchar to ignore the byte following 0xff light commands. Adjusted indentation of the comment at the top of |font| to match the C++ coding guidelines (ensoniq\esqvfd.cpp) [Christian Brunschen].
- 0.277              : Updated to PortMidi 2.0.4. Try to get PortMidi into a state where it will build with sane compiler settings. Fixes for Linux and Clang builds. Another place that needs const hit by Linux. Another batch of K&R function declarations that upset Clang. More cases of ignoring const in the macOS code. Disable another warning to help Clang on Windows. Fixed more macOS errors. Fixed the right uninitialised local variable. Fixed more discarded const and undefined macro errors (3rdparty\portmidi\*) [Vas Crabb].
- 0.272              : Added ui\midiinout.cpp/h. Added MIDI connection selection to MIDI ports (ui\midiinout.cpp) [O. Galibert].
- 0.264              : Added osd\interface\midiport.h. Cleaned up MIDI interface a little more (interface\midiport.h) [Vas Crabb].
- 0.260              : Support loading sysex dumps (imagedev\midiin.cpp) [Devin Acker].
- 0.255              : Fixed error condition handling so MIDI files can be loaded again (imagedev\midiin.cpp) [Devin Acker].
- 0.252              : Added option to select MIDI provider module (currently only PortMidi and the dummy module are available). Also put various things in namespaces, and fixed builds including SDL sound module with native Windows OSD (osd\modules\midi\portmidi.cpp) [Vas Crabb].
- 0.250              : I/O stream eof() returns whether a read stopped short due to EOF, not whether the file pointer is at EOF (ensoniq\esqpanel.cpp) [Vas Crabb].
- 0.247              : Send All Notes Off CC when unloading a MIDI file (imagedev\midiin.cpp) [Devin Acker].
- 0.244              : Fixed Windows MIDI callback signatures (portmidi\pm_win\pmwinmm.c) [Devin Acker].
- 0.243              : Use util::random_read rather than buffer pointer in MIDI file parser (imagedev\midiin.cpp) [AJR].
- 0.239              : Made channel remapping configurable. Handle channel remapping at playback time instead of load time, also small fix to sysex event parsing (imagedev\midiin.cpp) [Devin Acker].
- 0.233              : Added support for providing a .mid file as input (imagedev\midiin.cpp) [Aaron Giles].
- 0.212              : Fixed reception of several System Common messages [Golden Child, R. Belmont].
- 0.206              : Removed MCFG macros [Osso].
- 0.166              : Moved emu\imagedev\midiin.c/h to devices\imagedev [Miodrag Milanovic].
- 0.161              : Converted to DEVCB2 (midi\midiinport.c and imagedev\midiin.c) [Osso]. Fixed keyboard error in 'Keyboardmania 3rd Mix' (machine\midikbd.c) [K2-git].
- 0.160              : Fixed memory leak warning (autorelease pool) on OSX (portmidi\pm_mac\osxsupport.m) [Couriersud]. Added ability to completely disable MIDI (lib\osdobj_common.c) [qmc2].
- 0.159              : Added modules\midi\midi_module.h. Converted MIDI into a module [Couriersud].
- 0.155              : MIDI sound: Added note about memory leaks (portmidi\pmlinuxalsa.c) [Oliver Stoeneberg]. Rejected invalid MIDI bytes with no status, fixes most 6850-based MIDI setups (osd\osdcore.c) [R. Belmont].
- 0.154              : Removed portmedia\pmmidi.inc and windows\winmidi.c. Converted MIDI device to DEVCB2 [Osso]. Allow "default" for -midiin and -midiout (osd\osdcore.c) [R. Belmont].
- 0.153              : Changed portmedia\pmmidi.c to pmmidi.inc [Oliver Stoeneberg]. Moved mess\machine\midiinport.c/h and midioutport.c/h to emu\bus\midi\. Added bus\midi\midi.c/h. Call set_data_frame() before stc_rcv_rate() in imagedev\midiin.c and midiout.c, as since r26274 there is random behaviour if you don't. Separated MIDI devices. Removed local lists of MIDI devices in (MESS) drivers as they are currently all the same [smf]. Fixed MIDI output (bus\midi\midi.c) [R. Belmont].
- 0.150              : Ensoniq 16-bit: SQ series are 21-voice, not 32. Fixes tuning vs. h/w. SQ also don't have an FDC (drivers\esq5505.c). MIDI System Common messages should not override running status, fixes Sierra games crashing with the MT-32 (portmedia\pmmidi.c) [R. Belmont]. Fixed some SysEx issues (portmedia\pmmidi.c) [Christian Brunschen]. Sorted out ESQ5505 BIOSes for the SD-1 family: Newly dumped 3.0 for 21-voice, allow selecting 4.02 or 4.10 for 32-voice [Christian Brunschen, R. Belmont].
- 0.149u1            : Ensoniq: Document latest panel protocol findings (machine\esqpanel.c and esqvfd.c). Ensoniq 16-bit: Better A/D parameter handling, allow panel device to send new analog data (drivers\esq5505.c and machine\esqpanel.c) [Christian Brunschen].
- 0.149              : Added machine\midikbd.c/h. firebeat: Splitted MIDI keyboard to separate device [Carl].
- 0.148u2            : IRQ_CALLBACK_MEMBER cleanup (mess\drivers\esq5505.c) [Miodrag Milanovic]. Fixed memory leak in find_default_device() (lib\portmidi\finddefaultlinux.c) [Oliver Stoeneberg].
- 0.148u1            : Added emu\imagedev\midiin.c/h, midiout.c/h and machine\midioutport.c/h. Added 'MIDI In image device' device (imagedev\midiin.c). MIDI core updates [R. Belmont]: Added MIDI in and out ports as image device types. Added OSD calls to check for and read MIDI input. Added MIDI in image device which reads input and converts it to a serial bitstream (imagedev\midiin.c). Note that the MIDI In device uses the new image device override to prevent the core from attempting to fopen() the "file" name and instead it handles open/close itself in call_load/call_unload. This allows greater flexibilty than the hack used for sockets/ptys/named pipes where the OSD file layer has to know about them. Added MIDI In capability to all of these drivers (mess\drivers\esq5505.c). Allow MIDI input port to work without a connected real device. More fun with older OS X (portmidi\ptmacosx_mach.c). Fixed compiling on PowerPC OS X (portmidi\osxsupport.m + readbinaryplist.c and osd\sdl\sdl.mak). First pass on MIDI out support (imagedev\midiout.c/h and machine\midioutport.c/h). Fixed several MIDI bugs and bumped the input buffer sizes. Handle MIDI Out with running status properly (osd\portmedia\pmmidi.c). Enable transmission of SysEx messages. Preliminary SysEx reception support [R. Belmont]. Fixed DEBUG compilation of portmidi\pmwinmm.c [Oliver Stoeneberg].
- 0.148              : Initial commit of PortMIDI [R. Belmont]. This isn't enabled to compile yet, this is just to make it easier to run the final tests on my Mac and my Windows laptop. Enable compiling PortMidi. Tested on: Linux x64, Mac OS X 10.8 and Windows 8 x64 w/latest toolchain for both OSD=windows and OSD=sdl. MIDI should auto-disable on other OSes (*BSD) but there may be problems. Works fine on Linux when set to use the system's copy of the library as well, which many distros prefer. Fixed compile on OS X 10.6/10.7 (portmidi\readbinaryplist.c) [R. Belmont]. Fixed portmidi Visual Studio warnings. Fixed portmidi library name [Oliver Stoeneberg]. Fixed portmidi compilation on Xcode 3.2.6 for OSX 10.6.8 [Fabio Priuli]. Added lib\portmidi\finddefault.c, finddefaultlinux.c, osxsupport.h, osxsupport.m, pminternal.h, pmlinux.c/h, pmlinuxalsa.c/h, pmmac.c/h, pmmacosxcm.c/h, pmutil.c/h, pmwin.c, pmwinmm.c/h, portmidi.c/h, porttime.c/h, ptlinux.c, ptmacosx_cf.c, ptmacosx_mach.c, ptwinmm.c, readbinaryplist.c/h and osd\portmedia\pmmidi.c, sdl\sdlmidi.c and windows\winmidi.c.
- DRIVERS: fruitpc.cpp, magtouch.cpp, savquest.cpp and pcat_dyn.cpp
- SOURCE: osd\modules\midi\portmidi.cpp and imagedev\midiin.cpp



S25.2   MPU-401

- 0.283              : Subscribe to remap and hookup irq (isa\mpu401.cpp) [Angelo Salese].
- 0.221              : Simplified handlers [Osso].
- 0.203              : Eliminated MCFG macros [AJR].
- 0.190              : Fixed rom name, added full label and version note [Lord Nightmare].
- 0.153              : Changed mess\machine\isa_mpu401.c/h to bus\isa\mpu401.c/h and mess\machine\mpu401.c/h to machine\mpu401.c/h.
- 0.150              : Added machine\mpu401.c/h. Preliminary checkpoint. Preliminary working MIDI out [R. Belmont, kevtris].
- DRIVERS: (MESS) NEC PC-98
- SOURCE: machine\mpu401.cpp and bus\isa\mpu401.cpp



S25.3   SAM9773
-  8th June      2006: Pierpaolo Prazzoli - Started fixing / finishing Pasha Pasha 2 (which is Gotcha 2) driver with the new redump. The sound system uses an unemulated sound chip (DREAM SAM9773) plus 2 M6295, but unfortunately it uses a read protected MCU as sound cpu.
- NOTES: ATMEL DREAM SAM9773 Single Chip Synthesizer/MIDI with Effects and serial interface, clock 9.6MHz, TQFP80 (Pasha2)


S25.31  SAM448
- PCB: SAM448-20J (F15se), UV erasable microprogram sequencer/Special Application Memory Device from Waferscale Integration



S25.4   ICS2115

- 0.278              : Updated stream before r/w and some irq flag fixes [hap].
- 0.250              : Fixed volume calc sign overflow [hap].
- 0.245              : Make fast timers less expensive and cleanup timer code (sound\ics2115.cpp) [O. Galibert].
- 0.236              : Implemented pan for stereo support for ICS2115 [nabetse].
- 0.235              : Improved sound using next-state logic (sound\ics2115.cpp) [Esteban Diez Laiz].
- 0.225              : Update ICS2115 sound to new stream callbacks [Aaron Giles].
- 0.223              : Improved envelope behavior and debugging registers. Fixed ramping [cam900].
- 0.222              : Added imperfect_features related to incorrect/unverified interrupt, interpolation and ramping Interpolation issue is most noticeable in Cave PGM hardware game music. Use device_memory_interface for fetch external samples and for later DMA and DRAM interface support. Allow ulaw interpolation (some instrument sound samples in IGS PGM Motherboard sound ROM is u-law). Added notes. Reduced duplications [cam900].
- 0.219              : Calculated sample rate related to clock. Activated OSC numbers [cam900]. Fixed reported badly formatted/invalid characters from labels (hash\vgmplay.xml) [Tafoid].
- 0.207              : Changed description to 'ICS2115 WaveFront Synthesizer'. Removed unnecessary arguments in handler. Moved igs011.cpp exclusive 16bit handlers into ics2115.cpp. Minor code style fixes. Use shorter type values. Correct device name. Minor code style fixes [cam900].
- 0.153              : ICS2115 now using DEVCB2 instead of custom callback [Miodrag Milanovic].
- 0.148u2            : Fixed uninitialized memory in DoDonPachi II by request (sound\ics2115.c) [Oliver Stoeneberg].
- 0.141              : Added 'ICS2115' device. Rewrote ICS2115 sound core using modern device standards, improving audio in Oriental Legend, Killing Blade and other PGM titles in the process [austere, nimitz, trap15].
- 0.140u3            : O. Galibert fixed the ICS2115 timer.
- 0.135u4            : Fabio Priuli added save states to ICS2115 sound device.
- 0.81u3             : Added sound\ics2115.c/h. Olivier Galibert added preliminary PGM sound emulation. It has bad sounds now and causes crashes for now.
- NOTES: ICS2115 WaveFront Synthesizer. Driver by O. Galibert and ICS emulation by Elsemi (Nebula Emu.). The ICS WaveFront-2115 Wavetable MIDI syntesizer are used in some actual sound cards (Turtle Beach).
- PCB: WAVEFRONT ICS2115V, PLCC84 (PGM System)
- DRIVERS: igs011.cpp, igs_fear.cpp and pgm.cpp
- SOURCE: sound\ics2115.cpp



S25.5   QS1000

- 0.235              : Preliminary QS1000 hook up in SSFindo driver. There seems to be a bug in the ARM_VIDC20 device that causes static/bad sounds. Just set the related volume sliders to 0 to hear the QS1000 [Osso].
- 0.225              : Update QS1000 sound to new stream callbacks [Aaron Giles].
- 0.222              : Added save state related to loop support (disabled currently) [cam900].
- 0.220              : Simplified some handlers [Osso].
- 0.209              : Added imperfect_features related to emulation incorrection [cam900].
- 0.207              : Added getter for internal CPU [cam900].
- 0.196              : Converted set_irq into WRITE_LINE_MEMBER [cam900].
- 0.158              : Added save state support to qs1000_device [Osso].
- 0.153              : Converted QS1000 to DEVCB2 [Osso].
- 0.149u1            : QS1000 sound core issue now not a mandatory include which allows tiny builds to be built without it [Mamesick].
- 0.146u2            : Added emu\sound\qs1000.c/h. Added preliminary QS1000 sound emulation. Hooked up QS1000 to Limenko driver [Phil Bennett]. TODO: Looping is currently disabled. Figure out unknown sound header parameters. Figure out and implement envelopes and filters. Pitch bending. Dump the internal ROM.
- NOTES: The QS1000 is a 32-voice wavetable synthesizer, believed to be based on the OPTi 82C941. It contains an 8051 core, 256b of RAM and an (undumped) internal program ROM. The internal ROM can be bypassed in favour of an external ROM. Commands are issued to the chip via the 8051 serial port. The QS1000 can access 24Mb of sample ROM. To reduce demand on the CPU, instrument parameters such as playback rate, envelope and filter values are encoded in ROM and directly accessed by the wavetable engine. There are table entries for every note of every instrument.
- NOTES: Wavetable Audio chip from AdMOS (http://www.hwass.co.kr/product.htm). The General MIDI Chipset QDSP 1000 MIDI Player (80c32 CPU), MIDI 16th Channel(32 Poly) using as Effect EPROM (512Kb) and MIDI Background Music EPROM (512Kb)
- PCB: QDSP QS1000 AdMOS 9638R, QFP100 (Ssfindo, Misncrft, Raccoon)
- DRIVERS: eolith.cpp, ghosteo.cpp, limenko.cpp, vamphalf.cpp and vegaeo.cpp
- SOURCE: sound\qs1000.cpp


       Wavetable roms for the QS1000 are:

       QS1001: QDSP QS1001A Wavetable audio chip. 512k x 8 ROM, SOP32 (Hidctch2/3, Nhidctch). 1M ROM manufactured by AdMOS (Now LG Semi.), SOP32 (Misncrft, Raccoon), QS-1001A (Crazywar)
       QS1003: (Legendoh)
        1008S: HWASS 1008S-1 Wavetable Audio Samples chip, 1MB x 8 MaskROM, SOP32 (Ssfindo)
     NASN9289: Re-badged ROM. Should be compatible with existing QS100x Wavetable Audio Sample ROMs (dumped as 1M x 8 SOP32 MaskROM) (Ppcar)



S25.6   KS0164

- 0.262              : Reduced the octave bits to 4 [O. Galibert].
- 0.261              : KS0164 CPU refinements: Force source register to be the same as destination register for max/min instructions. Fixes missing instruments and eventually disappearing music in Elfin attract. Write "tst" instead of "zero |=" in disassembly (ks0164\ks0164.cpp). Actually lower TX full semaphore when host reads MPU-401 buffer. This fixes elfin losing sound and the ability to coin up during attract (sound\ks0164.cpp) [AJR]. Fixed neg/not and looping. Added volume and envelopes. Correct loop flag and pan swap. Fixed registers on nonloop so that the voice is freed correctly. Bonus usage debug output, to be removed at some point. Fixed looping calculations and removed debug stuff (ks0164\ks0164.cpp and sound\ks0164.cpp) [O. Galibert].
- 0.260              : Attempt to fix audio looping issues (sound\ks0164.cpp). Swap bges and bles (fixes sound effects). Fixed some disasm issues and documented a new opcode (ks0164\ks0164.cpp and ks0164d.cpp) [Windy Fairy].
- 0.259              : Identified the correct decompression table (sound\ks0164.cpp) [Windy Fairy].
- 0.250              : Use util::sext and other bit utility functions [AJR].
- 0.234              : Added KS0164 sound cpu to Funky Ball [Carl].
- 0.227              : Pitch is floating point [O. Galibert].
- 0.225              : Update KS0164 sound to new stream callbacks [Aaron Giles].
- 0.223              : Profiling says 40% of the time is spend calling describe_context() and not using the result (sound\ks0164.cpp) [O. Galibert].
- 0.221              : 'Decrement and branch' goes to 0, not -1. Make some noise (cpu\ks0164\ks0164.cpp). Someone get me a GM sample rom please? [O. Galibert]. Fixes ks0164\ks0164.cpp for VS2019 [smf].
- 0.220              : Added sound\ks0164.cpp/h. Added 'Samsung KS0164 Wavetable Synthesizer' device. Turn KS0164 into a device. KS0164 disassembler work. First stab at the KS0164 core [O. Galibert].
- 0.219              : Added cpu\ks0164\ks0164.cpp/h and ks0164d.cpp/h. Added 'Samsung KS0164 audio processor' device. First try at a disassembler [David Carne, O. Galibert]. Get #include guards in line with filenames, avoid expensive things in static initialisation [Vas Crabb].
- NOTES: Samsung KS0164 Wavetable Synthesizer and Samsung KS0164 audio processor. General Midi compliant 32-voice Wavetable Synthesizer Chip. Omni Wave Synthesizer (Dedicated-Special Application Linear Circuit)
- NOTES: The 16-bit CPU core was Sequoia's design and was licensed to Samsung. It was a 16-bit core with a nearly perfectly orthogonal instruction set. You could even multiply the PC by the stack pointer if you wanted.
- PCB: SEC KS0164 (running at 16.9MHz), QFP100 (Xfiles, Kdynastg, Fishing Maniac 3)
- DRIVERS: dgpix.cpp and funkball.cpp
- NOTES: Samsung KS0164 audio processor and Samsung KS0164 Wavetable Synthesizer
- SOURCE: sound\ks0164.cpp and cpu\ks0164\ks0164.cpp



S25.7   MagicEyes VRender0 Sound Engine

- 0.284              : Update per-channel cache when texture memory pointer is changed. Simplify casting (sound\vrender0.cpp) [cam900].
- 0.259              : Use util::sext function (sound\vrender0.cpp) [AJR].
- 0.227              : Miscellaneous clean-up. Replaced several uses of auto_alloc [Vas Crabb].
- 0.225              : Update VRender0 sound to new stream callbacks [Aaron Giles].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.218              : Use struct for each channels and address map for sound interface and wave memory. Fixed wave address calculation and volume. Fixed channel starting behavior (fixes start position). Partially implemented envelopes and interrupts. Moved dynamic sample rate change behavior into device_clock_changed. Use operation clock related sample rate. Use shorter/correct type values. Reduced duplicates. Added notes. Reference: https://web.archive.org/web/20040628133240/http://www.mesdigital.com/support/downfile/vr0510q_datasheet_v1.31.pdf [cam900].
- 0.203              : Changed description to 'MagicEyes VRender0 Sound Engine'. Fixed naming. Removed MCFGs and unused. Added notes [cam900].
- 0.154              : Converted VRender0 sound to use inline config [Fabio Priuli].
- 0.148              : Modernize VRender0 sound device [Andrew Gardner].
- 0.147              : Added 'VRender0' device.
- 0.137u4            : Converted VRender0 to be a device [Fabio Priuli].
- 0.93               : Changed description to 'VRender0'. Aaron Giles fixed a VRender0 clipping bug that was lurking there (negative clipping wrapped to positive values -- noticeable at 32-bits).
- 0.90u3             : Lawrence Gold fixed Vrender0 sound broken in 0.90u2.
- 0.90               : Added sound\vrender0.c/h. VRender Zero emulation [ElSemi].
- NOTES: The CRYSTAL SYSTEM using a VRender0 System on a Chip. The chip contains: CPU Core SE3208 (info at www.adc.co.kr) @ 43MHz, 2 DMA chans, 4 Timers, 32 PIO pins, PWM output, 32 channels wavetable synth (8bit linear, 16bit linear and 8bit ulaw sample format) and Custom 2D video rendering device (texture mapping, alphablend, roz)
- PCB: MESGraphics VRenderZERO (all-in-one main CPU/graphics/sound, QFP240) (Crysking)
- DRIVERS: crospuzl.cpp, crystal.cpp, ddz.cpp, menghong.cpp, psattack.cpp and trivrus.cpp
- SOURCE: sound\vrender0.cpp



25.8   Music Quest

- 0.215              : Added bus\isa\pcmidi.cpp/h. Added Music Quest PC MIDI Card [AJR, VOGONS Vintage Driver Library].
- DRIVERS: (MESS) PC
- SOURCE: bus\isa\pcmidi.cpp





S26.    Speech processors


S26.1   DAC Speech
- 0.34b3             : Brad Oliver fixed speech in King & Balloon. Ernesto Corvi fixed speech in Karate Champ.
- 0.36b1             : Zsolt Vasvari added "Get Ready!" speech to Grobda. The hardware in Grobda automatically cycles the bottom 6 address lines of sound RAM, so they probably added a latch loaded when the bottom 4 lines are 0010 (which corresponds to locations not used by the sound hardware). The program writes the same value to 0x02, 0x12, 0x22 and 0x32. However, removing the 15XX from the board causes sound to disappear completely, so the DAC might be built-in after all (see drivers\mappy.c).
- 0.33b2             : Nicola Salmoria added speech to Champion Baseball.
- 0.31               : Nicola added speech in Mat Mania.



S26.2   Texas Instruments

S26.21  TMS0285

- 0.72u1             : Nathan Woods added support for the TMS0285 variant (an old variant of the TMS5220).
- NOTES: The tms0285 is an early variant of the TMS5220 used in the ti-99/4(a) computer. The exact relationship of this chip with TMS5200 & TMS5220 is unknown, but it seems to use slightly different tables for LPC parameters.
- SOURCE: sound\tms5220.cpp


S26.22  TMS5100

- 0.269              : Renamed extract_bits to read_bits [hap].
- 0.254              : Initialize some more variables at reset. Fixes nonexistent or erratic speech on CVS games [AJR].
- 0.220              : Simplified some handlers [Osso].
- 0.168              : Fixed TMS5xxx for occasional audio 'spike' instability/wraparound glitches caused by improper truncation in the lattice filter multiplier. This is not an optimal fix as it isn't correct to hardware, but it works better than the previous approximation [Lord Nightmare].
- 0.148u4            : Correct and verified TMS5100 LPC table against the decap (sound\tms5110r.c) [digshadow, Lord Nightmare].
- 0.148u3            : TMS5100 and 5200 series: Document the decapping and verification of chirp tables for the tms5100, tms5200, tms5220, and tms5220c. The LPC tables are not verified yet [digshadow, Lord Nightmare].
- 0.141u3            : Lord Nightmare fixed the interpolation coefficient shifts for the TMS5xxx chips based on results of simulating the circuit from the patent.
- 0.127u2            : Lord Nightmare updated TMS5100 LPC tables based on mathematical analysis of 1st and 2nd derivatives of the values and comparison to the best quality patent image, which nearly always showed which values were in error. Some off-by-one issues may remain, but it is now nearly perfect. Further perfection will require PROMOUT dumping, which is planned.
- 0.125u1            : Lord Nightmare fixed the chirp table implementation in both the 51xx and 52xx chips.
- 0.122u2            : Couriersud added coefficient maps for TMS5100 and M58817 from documented sources to tms5110r.c. Also changed CVS driver to use TMS5100 according to PCBInfos and "game system operational" now sounds more natural.
- PCB: TMS5100ANL Speech (Shootgal), UMC 8923S-UM5100 voice processor (Filetto)
- DRIVERS: cvs.cpp
- SOURCE: sound\tms5110.cpp


S26.23  TMS5110

- 0.273              : Small cleanup [hap].
- 0.225              : Update TMS5110 sound to new stream callbacks [Aaron Giles].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.188              : Implemented device_clock_changed [AJR].
- 0.184              : Updated some comments [Lord Nightmare].
- 0.174              : Changed sound\tms5110r.inc to tms5110r.hxx.
- 0.168              : Fixed TMS5xxx for occasional audio 'spike' instability/wraparound glitches caused by improper truncation in the lattice filter multiplier. This is not an optimal fix as it isn't correct to hardware, but it works better than the previous approximation. Added more verbosity to DEBUG_LATTICE [Lord Nightmare].
- 0.166              : Got rid of the request_bits and FIFO implementation in TMS51xx, both of which were incorrect to hardware. Minor ZPAR fix. Some comment cleanup. Finally fixed zpar logic correctly. Purge process() of gotos to hopefully make the compiler's optimizer happier. Added same FAST_START_HACK as in TMS5220, makes (MESS) Speak & Math word delay closer to hardware. Minor comment fixes and changes to debugging log data. Fixed an TMS5110/5220 off-by-one in the interpolator causing the k5 coefficient to not be zeroed during unvoiced frames. Fixes various speech glitches. Comment updates (sound\tms5110r.inc). Fixed incorrect TMS5110/5220 implementation of pitch zero which caused an improperly long period with no pitch at an interpolation inhibited -> voiced boundary. Moved unvoiced parameter zeroing into the frame parser, as on the original chips. Some minor TALK/SPEN state machine changes as well, which should have minimal effect. Added some notes about the tms51xx interpolator bug [Lord Nightmare].
- 0.165              : Added correct CD2802 chirp rom from decap (sound\tms5110r.inc) [Sean Riddle]. Replaced the frame parse and speech generation code from tms5110.c with the code from tms5220.c, should be significantly more accurate and allow the cores to be much more easily merged in the future. This also allowed finally getting rid of the COEFF_ENERGY_SENTINEL hack in tms5110r.inc. Updated the interpolation tables to use the "IP" (0,1,2,3,4,5,6,7) instead of logical (1,2,3,4,5,6,7,0) order. Fixing the initial coefficient index values. Removed target_x variables in favor of reloading from coefficient ROM during the generation loop (as the real device does). Implemented proper ZPAR and unvoiced ZPAR logic for zeroing parameters during idle and unvoiced frames. Changed the pitch zeroing logic during frame inhibit to last an entire interpolation period rather than one sample. Replaced the speech-is-synthesizing state machine with the original patent TALK, TALKD and SPEN bits. Redid the talk_status logic to use (TALKD || SPEN) as the real device does. Fixed stupid typo, doesn't fix the cvs.c Gold Bug sound inconsistency yet [Lord Nightmare].
- 0.163              : Added new LPC table data for CD2802, CD2801 and TMS5110A/TMC0281D. Added new information regarding each chip. Reorganize LPC tables to use #defines rather than repeating identical data [David Viens, Lord_Nightmare, NullMoogleCable]. Corrections to some comments in sound\tms5110r.inc [Lord Nightmare]. Added CD2801/TMC0280 chirp table [Digshadow, David Viens, Lord Nightmare]. Fixed missing cast for chirp/excitation values, fix a potential off-by-one for tms5110.c as well [Lord Nightmare].
- 0.157              : Implemented TMS5110 output and read bit commands. Fixed VSM rom read through the TMS51xx. This breaks the speech in Radar Scope (TRS01), because the rom it has has the bits in the backwards order. I will fix this later [Lord Nightmare]. Fixed usage of uninitialized member in tms5110_device. Happened with (MESS) Speak & Spell [Oliver Stoeneberg].
- 0.154              : Removed legacy handlers (sound\tms5110.c), now that no drivers use them anymore. Updated TMS5110 to use DEVCB2 [Fabio Priuli]. Converted tmsprom_device to DEVCB2 [Osso].
- 0.153              : Changed sound\tms5110r.c to tms5110r.inc [Oliver Stoeneberg]. Updated TMS5110 to use newer chirp table, based on decap (sound\tms5110r.inc). Note: The TMS5111NLL was decapped and imaged by digshadow in April, 2013. The LPC table is verified to match the values from Jarek's PROMOUT dump of the TMS5110, and the die even says "TMS5110AJ" on it. It uses the 'newer' 5200-style chirp table [Lord_Nightmare, digshadow].
- 0.150              : Small DEVICE_START cleanup in sound\tms5110.c [Oliver Stoeneberg].
- 0.148u5            : Started to modernise TMS5110 (sound\tms5110.c/h, audio\dkong, scramble.c, drivers\bagman.c, cvs.c, includes\cvs.h, dkong.h) [smf].
- 0.148u4            : Verified TMS5200 LPC rom as correct from decap (sound\tms5110r.c). Correct and verified TMS5100 LPC table against the decap (sound\tms5110r.c) [digshadow, Lord Nightmare].
- 0.141u3            : Fixed the interpolation coefficient shifts for the TMS5xxx chips based on results of simulating the circuit from the patent. Changed 'Chirp table' waveform to match the chip more closely, acoustically. This will require completion of a pending decap to verify as correct, but it certainly sounds better [Lord Nightmare].
- 0.138u2            : Couriersud added a new cycle exact VMS interface to TMS5110 emulating M0, M1 and ADD1 to ADD8 lines. Added TMS6100 memory controller device. Also added TMSPROM device emulating Bagman and A. D. 2083 prom controlled speech logic. Switched Bagman, A. D. 2083 (scramble.c) and Radar Scope (TRS01) to use the new interface and devices. Added documentation about TMS5110 prom interface used by Bagman and A. D. 2083.
- 0.137u3            : Lord Nightmare massive merge of TMS5110 and TMS5220 cores, TMS5220 side only so far. Much code by Jarek Burczynski merged. Lattice Filter, Multiplier and clipping redone. TMS5220C multi-rate feature added. Now using the same LPC table file (and format, as created by Couriersud) as the TMS51xx is. Unvoiced-Voiced transitioning adjusted to match patent. Command handling redone to better match patent. Reasonably significant speech quality improvements: Separate tables for TMS5200, TMS5220 and TMS5220C are implemented, though all still need to be verified from hardware. Fixes: Garbled speech in Escape from the Planet of the Robot Monster's Canal Mazes is fixed, as well as some other garbled speech in game (when saying 'throwing switch' for instance).
- 0.134u1            : Partially implemented TMS5110_CMD_TEST_TALK [Couriersud]: According to the documentation, this needs to be issued to read status on CTL1. CVS driver needs this. TMS5110 improvements [Couriersud]: Implement CTL port input/output for status reads. Input/output is switched by clocking pdc after a TALK STATUS command. Update drivers to support new tms5110_ctl_r. Now exhibits Rom Clock signal.
- 0.133u3            : Removed sound\5110intf.c/h. Aaron Giles merged 5110intf into TMS5110.
- 0.127              : Oliver Stoenberg removed duplicated TMS5110 entry in sound.mak.
- 0.125u2            : Lord Nightmare added proper interpolation sub-cycles to the TMS5110 and TMS5220 ('PC' cycles and A/B subcycles of each) and updated comments.
- 0.125u1            : Lord Nightmare fixed the chirp table implementation in both the 51xx and 52xx chips.
- 0.122u7            : Couriersud added all known variants of the TMS5110 as proper chips. Updated dkong, cvs and scramble to use new chips.
- 0.122u4            : Couriersud completed TMS5110A code for the game 'A. D. 2083'. Working speech synthesis.
- 0.122u3            : Fixed TMS5110 tables [Couriersud, Lord Nightmare].
- 0.122u2            : TMS51xx and M58817 speech updates [Couriersud]: Removed sound\m58817.*. Added support for multiple coefficients maps to tms5110.*. Fixed interpolation factors (see tms5110r.c for reason). Made lattice calculation precision 9bit. Added support for READBIT and LOADADDRESS commands to tms5110.c. More changes in line with various patents. Documented TRS-02, TKG-02/03 "voice" interface.
- 0.111u5            : Lord Nightmare fixed PRNG noise in the TMS5110/5220 code and added signal wrapping to match the patent.
- 0.111u1            : Lord Nightmare fixed a problem with the chirp tables of both the TMS5220 and the TMS5110. Also backported Jarek's PRNG implementation from tms5110.c to tms5220.c so it no longer relies on rand().
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the TMS5110 sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.101              : Aaron Giles added save state support to TMS5110 sound chip.
- 0.94u1             : Aaron Giles fixed games using the TMS5110 (sound\5110intf.c) which refused to start (Bagman, CVS driver etc.).
- 0.93u1             : Aaron Giles adding missing memset when initializing the TMS5110 and TMS5220 structures; should prevent the crashes. Fixed signed/unsigned error in the TMS5110 core.
- 0.92               : Jarek Burczynski added real noise generator to TMS5110.
- 0.37b6             : Added sound\tms5110.c/h, tms5110r.c, 5110intf.c/h. TMS5110 emulator, used by Bagman and Super Bagman [Jarek Burczynski].
-  8th August    2000: Jarek Burczynski wrote a TMS5110 emulator and added speech support to Bagman.
- NOTES: "perform dummy read" is not mentioned in the datasheet of the TMS5110. However Bagman speech roms data are organized in such way so bit at address 0 is NOT a speech data. Bit at address 1 is data speech. Seems that the TMS5110 is performing dummy read before starting to execute a SPEAK command.
- DRIVERS: bagman.cpp, jeutel.cpp and scramble.cpp
- SOURCE: sound\tms5110.cpp


S26.24  TMS5200

- 0.276              : TMS52xx: Enable command buffering during speak operation. Removed legacy spchrom implementation (sound\tms5220.cpp) [Michael Zapf].
- 0.168              : Fixed TMS5xxx for occasional audio 'spike' instability/wraparound glitches caused by improper truncation in the lattice filter multiplier. This is not an optimal fix as it isn't correct to hardware, but it works better than the previous approximation [Lord Nightmare].
- 0.167              : Fixed a TMS52xx bug where if the FIFO contained exactly 0 bytes and a SPEAK (VSM) command was issued, the command would instantly terminate due to the FIFO being empty even though the chip wasn't in SPEAK EXTERNAL mode. Fixes speech in (MESS) TI Extended Basic [Lord Nightmare].
- 0.163              : Added new LPC table data for CD2802, CD2801 and TMS5110A/TMC0281D. Added new information regarding each chip. Reorganize LPC tables to use #defines rather than repeating identical data [David Viens, Lord_Nightmare, NullMoogleCable].
- 0.150              : Small DEVICE_START cleanup in sound\tms5220.c [Oliver Stoeneberg].
- 0.148u4            : Verified TMS5200 LPC rom as correct from decap (sound\tms5110r.c) [digshadow, Lord Nightmare].
- 0.148u3            : Removed sound\tms5220r.c. Added correct TMS5200 chirp rom derived from decap; This is now used for 5200, 5220 and 5220c pending decaps of the latter two. Removed tms5220r.c which hasn't actually been compiled/used by speech code for around 2 years now, and fixed the makefile [digshadow, Sarayan, Lord Nightmare]. Extremely minor fix for Speak External based on the 5220c and 5200 decaps, and some small documentation updates [Lord Nightmare, digshadow]. TMS5100 and 5200 series: Document the decapping and verification of chirp tables for the tms5100, tms5200, tms5220, and tms5220c. The LPC tables are not verified yet [digshadow, Lord Nightmare].
- 0.142u5            : Minor updates to the TMS52xx comments and the disabled-by-default pulse excitation code to better match how hardware would probably work [Lord Nightmare, Neill Corlett].
- 0.141u3            : Lord Nightmare fixed the interpolation coefficient shifts for the TMS5xxx chips based on results of simulating the circuit from the patent.
- 0.138u4            : Fixed timing of TMS52xx OLDP and OLDE updates to happen on the correct IP/PC cycles, should very slightly improve sound/reduce clicking for TMS5200 and TMS5220 games [Lord Nightmare] (missing from whatsnew).
- 0.138u3            : TMS52xx now uses proper IP/PC/Subcycle counting for audio generation [Lord Nightmare].
- 0.137u4            : Lord Nightmare replaced TMS5200 table with table extracted using PROMOUT from actual chip. Money Money sounds much better.
- 0.125u7            : Zaccaria updates [Couriersud]: Removed TMS5220 kludge. Hooked up new RS/WS/READY TMS5220 interface. Removed DAC1 as well. Replaced it by attenuation control for AY2 - channel B. This fixed TMS5200 hookup bug, which is currently kludged to work. Atari Ace fixed a few build problems with the TMS5200 sound core.
- 0.125u1            : Lord Nightmare updated TMS5200/5220 documentation and comments. Fixed the chirp table implementation in both the 51xx and 52xx chips.
- 0.122u6            : Aaron Giles added clocks to the MCR sound boards and some of the MCR games. Added TMS5220 variants TMS5200 and TMC0285 as proper chips. Changed MCR squawk & talk to use the TMS5200 as documented.
- NOTES: The TMS5200/TMC0285 coefficients were directly read from an actual TMS5200 chip by Lord Nightmare using the PROMOUT pin, and can be regarded as established fact. The chirp table contents were read from a decap done by digshadow in March 2013. The interpolation coefficients still come from the patents pending verification of the interpolation counter circuit from the chip decap image vs the patent. Note that the K coefficients are VERY different from the coefficients given in the US 4,335,277 patent, which may have been for some sort of prototype or otherwise intentionally scrambled. The energy and pitch tables, however, are identical to the patent. Also note, that the K coefficients are ALMOST identical to the coefficients from the CD2802, above.
- DRIVERS: mcr.cpp, portrait.cpp and zaccaria.cpp
- SOURCE: sound\tms5220.cpp


S26.25  TMS5220

- 0.276              : Five an example VERBOSE value that will actually do something rather than LOG_GENERAL which isn't used in the file at all [Vas Crabb].
- 0.272              : Fixed status read when RSQ is held low. Clean up logging slightly. Further logging refinements [AJR].
- 0.269              : Renamed extract_bits to read_bits [hap].
- 0.243              : Work around problem with sound CPU interrupts that was preventing PSG sounds from playing (sound\tms5220.cpp and drivers\looping.cpp) [AJR].
- 0.225              : Update TMS5220 sound to the new stream update callback [Aaron Giles].
- 0.211              : Switch the log mask define comments to be above the defines. Adjust delay time between /RS going low and /READY being set. Note: The datasheet doesn't list this time exactly, but something close (time between /RS going low and the data being valid on the bus). It's measured in usec, not clock cycles [Mike Harris].
- 0.209              : Removed unnecessary arguments in handlers [cam900].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.202              : Removed TMS5220 read/write handler trampolines [smf].
- 0.199              : Converted logging calls to logmacro.h standard [AJR]. Renaming improperly capitalized pseudo-macros and removed pseudo-macros from lvalues. Reorganized savestate values into a sane, maintainable order. Removed the unused, deprecated time_to_ready and cycles_to_ready functions. Fixed the race condition bug with m_buffer_low and m_buffer_empty flags not being updated before setting the interrupt state. Fixed the issue where if no VSM is actually attached to the 5220, the chip will get stuck speaking silence forever if it gets a Speak VSM command. In reality (at least on the tms51xx and probably the same here) the pin reads as open bus/noise, but will eventually hit a stop frame by reading 4 ones in a row. Added/fixed debugger fences for read functions where they were missing, and a write function where it was unnecessary and caused issues when issuing manual writes from the debugger. Changed the types of the flag variables already used for boolean values to bool, and simplified comparisons with them; also renamed the ambiguous m_data_register variable to the more descriptive name of m_read_byte_register. Changed status_read such that reading the status register from the debugger returns a valid value instead of 0, but doesn't otherwise affect the emulation. Make it so the /READY(readyq) callback only changes state to ready after a write during speak external mode, if the write actually completed because there was room in the FIFO. If not, it polls the fifo state every 16 cycles until there is room, and only then asserts the readyq callback. Actually zero the FIFO during initialization and when speak external goes active. Replaced memset calls with std::fill [Lord Nightmare].
- 0.188              : Use device_clock_changed instead of custom method and misc modernization [AJR].
- 0.173              : TMS5220/5110 merge Part 1. Added a 'combined rs/ws write' function for systems which require both pins to change at exactly the same time and not to reset the chip [Lord Nightmare]. Replaced fprintf by logerror; fixed some small issues [Michael Zapf].
- 0.168              : Fixed TMS5xxx for occasional audio 'spike' instability/wraparound glitches caused by improper truncation in the lattice filter multiplier. This is not an optimal fix as it isn't correct to hardware, but it works better than the previous approximation. Added more verbosity to DEBUG_LATTICE. Fixed missing savestate entries in tms5220.cpp [Lord Nightmare].
- 0.167              : Fixed a TMS52xx bug where if the FIFO contained exactly 0 bytes and a SPEAK (VSM) command was issued, the command would instantly terminate due to the FIFO being empty even though the chip wasn't in SPEAK EXTERNAL mode. Fixes speech in (MESS) TI Extended Basic [Lord Nightmare].
- 0.166              : Implemented talk status state machine properly as shown by patent. Got rid of m_target_* hack in favor of loading data from ROM as needed. Fixed ZPAR logic. Fixed pitch zeroing to match(?) patent. Purge process() of gotos to hopefully make the compiler's optimizer happier. Added a hack so Victory's "Shields Up" sample and the sample afterward aren't corrupted. Removed outdated comments and other comment updates to TMS5220. Fixed an TMS5110/5220 off-by-one in the interpolator causing the k5 coefficient to not be zeroed during unvoiced frames. Fixes various speech glitches. Fixed incorrect TMS5110/5220 implementation of pitch zero which caused an improperly long period with no pitch at an interpolation inhibited -> voiced boundary. Moved unvoiced parameter zeroing into the frame parser, as on the original chips. Some minor TALK/SPEN state machine changes as well, which should have minimal effect. Added some notes about the TMS51xx interpolator bug [Lord Nightmare].
- 0.165              : Minor cleanups to TMS5220 so savestate and member variables are in the same order. Added a missing savestate entry. Fixing the initial coefficient index values [Lord Nightmare]. Fixed interpolation on TMS52xx to match samples from real chip [David Viens, Lord Nightmare].
- 0.163              : Fixed missing cast for chirp/excitation values in TMS5220 [Lord Nightmare].
- 0.161              : Some preparation for a possible future merge of TMS51xx and 52xx into one .c file [Lord Nightmare].
- 0.154              : Fixed usage of uninitialized members in tms5220_device [Oliver Stoeneberg].
- 0.150              : Small DEVICE_START cleanup in sound\tms5220.c [Oliver Stoeneberg].
- 0.149u1            : Doing the TMS5220 dummy read immediately on reset [Michael Zapf].
- 0.149              : Minor TMS5220 WIP, commented for now [Lord Nightmare]. Inserted checks to prevent debugger access [Michael Zapf].
- 0.148u5            : Modernised TMS5220 [smf].
- 0.148u4            : Updated many TMS5200 comments, changed a variable name, and made some minor fixes to the 'circuit 412' to better reflect the patent. Based on decap analysis, both the TMS5220 and TMS5220C use identical LPC tables; get rid of the unnecessary extra table [Lord Nightmare].
- 0.148u3            : Removed sound\tms5220r.c. Added correct TMS5200 chirp rom derived from decap; This is now used for 5200, 5220 and 5220c pending decaps of the latter two. Removed tms5220r.c which hasn't actually been compiled/used by speech code for around 2 years now, and fixed the makefile [digshadow, Sarayan, Lord Nightmare]. Extremely minor fix for Speak External based on the 5220c and 5200 decaps, and some small documentation updates [Lord Nightmare, digshadow]. TMS5100 and 5200 series: Document the decapping and verification of chirp tables for the tms5100, tms5200, tms5220, and tms5220c. The LPC tables are not verified yet [digshadow, Lord Nightmare].
- 0.147u3            : Got rid of most of the TMS5220 excitation (voicing) hacks. The rest is mostly making the space/tabs for comments more consistent and fixing a couple of spelling errors in the comments. Minor bugfix regarding the time_to_ready code [Lord Nightmare].
- 0.146u2            : Class re-implementation, appended to legacy version [Michael Zapf].
- 0.145u8            : Various Clang warning cleanups in sound\tms5220.c [Balrog].
- 0.142u6            : Force TMS5220 OLDP and OLDE to be updated only on the A subcycle of IP=0 PC=0; this has no effect whatsoever on the output, it is merely to better document how the chip works [Lord Nightmare]. Emulate TMS5220 circuit 412 from the patent, which should prevent spurious clicks on interpolation-inhibited frame transitions; This may improve the tie fighter sounds in Star Wars, and some clicking in EPROM/EPROMa [Lord Nightmare].
- 0.142u5            : Minor updates to the TMS52xx comments and the disabled-by-default pulse excitation code to better match how hardware would probably work [Lord Nightmare, Neill Corlett].
- 0.142u1            : Lord Nightmare updates to comments and nonstandard feature defines (tms5220.c). Partially fixed perfect interpolation hack, disabled by default. Fixed perfect interpolation hack the rest of the way, now it works as it did before 0.140 or so. Improved perfect interpolation hack slightly, should be less noisy after inhibit frames.
- 0.141u3            : Lord Nightmare fixed the interpolation coefficient shifts for the TMS5xxx chips based on results of simulating the circuit from the patent.
- 0.138u4            : Fixed timing of TMS52xx OLDP and OLDE updates to happen on the correct IP/PC cycles, should very slightly improve sound/reduce clicking for TMS5200 and TMS5220 games [Lord Nightmare] (missing from whatsnew).
- 0.138u3            : TMS52xx now uses proper IP/PC/Subcycle counting for audio generation [Lord Nightmare].
- 0.138u1            : Couriersud added a readyq callback to the TMS5220 interface. This is needed to solve the missing speech bug in the Zaccaria games. The INTQ and READYQ are connected to PIA 6821 lines CA2 and CB1 which are edge driven. Just reading READYQ would miss to detect a state change if between reads READYQ went 0-1-0. Updated zaccaria.c and looping.c.
- 0.138              : Lord Nightmare removed unnecessary interpolation code in TMS5220. Added 'Unrealistically Perfect Interpolation' debug mode. Fixed a potential issue with 16 bit overflow in the lattice filter. Made idle state emulation more accurate to real chip. Clean out variables before VSM speech starts. Mask out low 4 bits of 14 bit lattice result before output. Fixed a mistake in the interpolation logic, it should now properly delay interpolation until the final cycle of each frame when INHIBIT is set. Added extra check to make unvoiced mode trigger at the correct sample. Fixed up TMS52xx clip/wrap function arrangement to be much more sane, and properly handled range extension. Made TMS5220 DEBUG_GENERATION more useful and simplified the code in the process.
- 0.137u4            : Lord Nightmare replaced TMS5220 table with table extracted using PROMOUT from actual chip. By 'Replaced', I mean documented, as the actual extracted table exactly matched the table already in MAME. Changed TMS5220C to use the same energy table as 5220 does, since my previous assumption based on the Quadravox tables was probably wrong. Updated the ranout condition code of tms5220.c to be slightly more accurate to the chip, and added TODOs. Re-enabled the timers for deactivating the READY line on /WS or /RS as this is probably slightly more accurate to hardware, but the difference is 2 or 3 clock cycles max. Made /READY timing accurate to the real chip as best as possible. Note that on the zaccaria games, possibly due to a bug in the CA2 line handler of the PIA which reads the /READY state, speech usually won't work until midway through the first game played, but works fine afterward. Not sure if that's a MAME bug or an original game bug. Fixed race condition involving TMS52xx status register which broke victory/victorba self test. Updated debug routines a bit, and improved the non-NORMALMODE a bit. Fixed ZPAR (zeroed k parameters 5-10) behavior for unvoiced frames. Updated comments and debug functions. Cleaned up ranout (FIFO running out mid-frame) to be accurate to hardware. Cleaned up talk status clearing to be more accurate to hardware. Cleaned up parse_frame function significantly. Added some more comments. Redid parameter interpolation and frame load logic so new frames don't immediately force all the Energy/Pitch/K values to the values of the old frame, but wait until their first interpolation to do so. This fix improves speech quality considerably.
- 0.137u3            : Lord Nightmare massive merge of TMS5110 and TMS5220 cores, TMS5220 side only so far. Much code by Jarek Burczynski merged. Lattice Filter, Multiplier and clipping redone. TMS5220C multi-rate feature added. Now using the same LPC table file (and format, as created by Couriersud) as the TMS51xx is. Unvoiced-Voiced transitioning adjusted to match patent. Command handling redone to better match patent. Reasonably significant speech quality improvements: Separate tables for TMS5200, TMS5220 and TMS5220C are implemented, though all still need to be verified from hardware. Fixes: Garbled speech in Escape from the Planet of the Robot Monster's Canal Mazes is fixed, as well as some other garbled speech in game (when saying 'throwing switch' for instance). Tentative fix for TMS5220 VSM support. Converted Atari System 1 to use the 'new' TMS5220 interface. Switched Escape from the Planet of the Robot Monsters to use the new TMS5220 interface. Converted Atari System 2 to use the 'new' TMS5220 interface. Switched TMS5220 type to 5220C. Updated Star Wars to use proper clocks for the TMS5220 and the Pokey's.
- 0.134u1            : Implemented a RS and WS line interface for TMS5220 [Couriersud]: This emulates the RS/WS and READY handshaking according to the TMS5220 manual. Drivers reading the ready line should most probably use it. Note: For cases where the READY handshake is done by the cpu sufficient cycles have to be burnt to simulate that the cpu waited. This yet has to be implemented. Changed all TMS5220 lines to (READ|WRITE)_LINE_DEVICE_HANDLER [Couriersud]: Added q suffix to denote active low lines. Updated all drivers accordingly. Removed some trampoline functions. Added TMS5220C variant to tms5220.c [Lord Nightmare]: Implemented reset for TMS5220C if /RS and /WS are pulled down together. Inserted LNs email and corrections as comment into source. Created a TODO section.
- 0.133u3            : Removed sound\5220intf.c/h. Aaron Giles merged 5220intf into TMS5220.
- 0.129u2            : Phil Bennett and Jay Gallagher fixed TMS5220 speech in Turbo Sub.
- 0.125u5            : Additional documentation in the TMS5220 core [Lord Nightmare].
- 0.125u2            : Lord Nightmare added proper interpolation sub-cycles to the TMS5110 and TMS5220 ('PC' cycles and A/B subcycles of each) and updated comments.
- 0.125u1            : Lord Nightmare updated TMS5200/5220 documentation and comments. Fixed the chirp table implementation in both the 51xx and 52xx chips.
- 0.123u2            : Atari Ace added some missing #if's to 5220intf.c.
- 0.122u6            : Zsolt Vasvari disabled code in the TMS5220 that set the Buffer Empty flag after a stop frame. This fixes Victory. This might be the incorrect fix but the old code wasn't working either.
- 0.118u6            : Lord Nightmare updated TMS5220 core to use shifts instead of divides for the parameter interpolation. Also added support for internal clamping to 8-bit output when using the internal DAC.
- 0.118u2            : Further improvements to the TMS5220 emulation and more unification with the TMS5110 core [Lord Nightmare].
- 0.118              : Modularized the TMS5220 code [Lord Nightmare].
- 0.111u5            : Lord Nightmare fixed PRNG noise in the TMS5110/5220 code and added signal wrapping to match the patent.
- 0.111u2            : Lord Nightmare added missing initialization to the TMS5220 RNG.
- 0.111u1            : Lord Nightmare fixed a problem with the chirp tables of both the TMS5220 and the TMS5110. Also backported Jarek's PRNG implementation from tms5110.c to tms5220.c so it no longer relies on rand().
- 0.109u2            : Connected TMS5220 speech support to the Major Havoc: Return to Vax mod [Jess Askey].
- 0.103u4            : Aaron Giles added stream_set_sample_rate() call and converted the TMS5220 sound core to output at their native sample rates, allowing the core sound system to perform over/re-sampling to the output rate.
- 0.100u4            : Aaron Giles added save state support to the TMS5220 chip.
- 0.93u1             : Aaron Giles adding missing memset when initializing the TMS5110 and TMS5220 structures; should prevent the crashes.
- 0.80               : Nathan Woods added a security margin in the estimate of the delay for TMS5220 speech synthesis ready line to come low (needed for a MESS side bug fix).
- 12th February  2003: Nathan Woods added support for TMS5220 speech ROM, though this feature is not used by any arcade game emulated so far.
- 0.37b6             : Changed description to 'TMS5220'.
- 14th February  2000: Aaron Giles modified TMS5220 and ADPCM sound cores to produce sound streams at correct sample rates.
- 11th July      1999: Raphael Nabet sent in a new version of TMS5220 emulator with support for speech rom. Phil Stroffolino sent in an update to the sprite manager.
- 0.30               : Added sndhrdw\tms5220.c/h, tms5220r.c, 5220intf.c/h and tms5220.txt. TI TMS5220 emulator [Frank Palazzolo]. This handles speech in Star Wars and other games. Aaron Giles added speech in Discs of Tron.
- NOTES: The TI TMS5220 Speech chip uses Linear-Predictive decoding scheme to produce speech from very compact data. It is virtually identical to the chip used in the landmark "Speak 'N Spell" toy produced in the '70s. This scheme is very similar to the U.S. Federal Standard LPC-10e coding system, which was developed soon after this chip. The TI speech chip contains a 128-bit parallel-in, serial-out FIFO, a 10-pole digital lattice filter which models the vocal tract, and a D/A converter. It was originally design to operate either with a microcomputer interface, or with a serial speech ROM. The Speech ROM functionality is now emulated, although no arcade games require it currently. The input data is writen a byte at a time into the chip, and it is decoded bitwise into variable length frames.
- PCB: TSP5220 (720, Eprom), TMS5220 (Looping), 5220 (Victory)
- DRIVERS: esripsys.cpp, firefox.cpp, jedi.cpp, looping.cpp, mrgame.cpp, starwars.cpp, tomcat.cpp and victory.cpp
- SOURCE: sound\tms5220.cpp


S26.26  TMS5220C

- 0.168              : Fixed TMS5xxx for occasional audio 'spike' instability/wraparound glitches caused by improper truncation in the lattice filter multiplier. This is not an optimal fix as it isn't correct to hardware, but it works better than the previous approximation [Lord Nightmare].
- 0.165              : Fixed interpolation on TMS52xx to match samples from real chip [David Viens, Lord Nightmare].
- 0.148u3            : Removed sound\tms5220r.c. Added correct TMS5200 chirp rom derived from decap; This is now used for 5200, 5220 and 5220c pending decaps of the latter two. Removed tms5220r.c which hasn't actually been compiled/used by speech code for around 2 years now, and fixed the makefile [digshadow, Sarayan, Lord Nightmare]. TMS5100 and 5200 series: Document the decapping and verification of chirp tables for the tms5100, tms5200, tms5220, and tms5220c. The LPC tables are not verified yet [digshadow, Lord Nightmare]. Based on decap analysis, both the TMS5220 and TMS5220C use identical LPC tables; get rid of the unnecessary extra table [Lord Nightmare].
- 0.142u5            : Minor updates to the TMS52xx comments and the disabled-by-default pulse excitation code to better match how hardware would probably work [Lord Nightmare, Neill Corlett].
- 0.141u3            : Lord Nightmare fixed the interpolation coefficient shifts for the TMS5xxx chips based on results of simulating the circuit from the patent.
- 0.138              : More cleanup of the LPC tables [Lord Nightmare]: Replaced TMS5220C pitch table with the TMS5220 one as that one is more likely to be correct. Fixed up TMS52xx clip/wrap function arrangement to be much more sane, and properly handled range extension.
- 0.137u4            : Lord Nightmare replaced TMS5220 table with table extracted using PROMOUT from actual chip. By 'Replaced', I mean documented, as the actual extracted table exactly matched the table already in MAME. Changed TMS5220C to use the same energy table as 5220 does, since my previous assumption based on the Quadravox tables was probably wrong. Updated the ranout condition code of tms5220.c to be slightly more accurate to the chip, and added TODOs. Re-enabled the timers for deactivating the READY line on /WS or /RS as this is probably slightly more accurate to hardware, but the difference is 2 or 3 clock cycles max.
- 0.137u3            : Lord Nightmare fixed 5220C pitch table so unvoiced speech actually works. Oops. Should be a further quality improvement. Cleaned up interpolation inhibit logic, may sound slightly better now. Minor fix to TMS5220C table so zero-energy frames are correctly detected. Converted Atari System 2 to use the 'new' TMS5220 interface. Switched TMS5220 type to 5220C.
- 0.137u2            : Replaced TMS5220 sound with TMS5220C in eprom.
- 0.134u1            : Implemented a RS and WS line interface for TMS5220 [Couriersud]: This emulates the RS/WS and READY handshaking according to the TMS5220 manual. Drivers reading the ready line should most probably use it. Note: For cases where the READY handshake is done by the cpu sufficient cycles have to be burnt to simulate that the cpu waited. This yet has to be implemented. Changed all TMS5220 lines to (READ|WRITE)_LINE_DEVICE_HANDLER [Couriersud]: Added q suffix to denote active low lines. Updated all drivers accordingly. Removed some trampoline functions. Added TMS5220C variant to tms5220.c [Lord Nightmare]: Implemented reset for TMS5220C if /RS and /WS are pulled down together. Inserted LNs email and corrections as comment into source. Created a TODO section.
- DRIVERS: atarisy1.cpp, atarisy2.cpp, eprom.cpp and gauntlet.cpp
- SOURCE: sound\tms5220.cpp


S26.27  EFO Sound-3 board

- 0.272              : Added shared\efo_sound3.cpp/h. Added emulation of Sound-3 speech synthesizer board to nightmare, cerberup and spain82. Improved propagation of data from latch to speech synthesizer (shared\efo_sound3.cpp) [AJR].
- NOTES: EFO Sound-3 speech synthesizer board. The CPU is identified on schematics as a custom "90435" type, but board photos confirm it really is a CDP1802ACE as the pinout and support ICs suggest. Its XTAL value is specified as 2.95 MHz, but 3 MHz has also been seen on one set of Night Mare. The synthesizer IC is custom-marked as EFO90503, but it also bears a TI logo and is obviously some sort of TMS5220 variant. Its discrete oscillator circuit is tuned for a 160 kHz operating frequency, according to both schematics and board markings (Unlike other EFO sound boards, Sound-3 has no PSG). The PCB has space for two TMS2532 EPROMs, but normally they are both replaced by one TMS2564 EPROM. Either of two pin headers may be used for input. J2 allows 8-bit parallel data to be strobed in by a clock signal. J3 carries only D0-D2 (+ ground) and is used with the older IOS-II board.
- DRIVERS: nightmare.cpp, play_2.cpp and play_3.cpp
- SOURCE: shared\efo_sound3.cpp


S26.28  CD2501E/CD2501ECD

- 0.150              : Added support for CD2501ECD variant of TMS52xx, used in the TI 99/8 prototype. Renamed TMC0285 to the more correct CD2501E in the TI 99/4a [mizapf, Lord Nightmare].
- 0.125u7            : Atari Ace fixed a few build problems with the TMC0285 sound core.
- 0.122u6            : Aaron Giles added clocks to the MCR sound boards and some of the MCR games. Added TMS5220 variants TMS5200 and TMC0285 as proper chips. Changed MCR squawk & talk to use the TMS5200 as documented.
- DRIVERS:
- SOURCE: sound\tms5220.cpp


S26.29  SPEECHROM

- 0.276              : Removed machine\spchrom.cpp/h. Removed legacy spchrom implementation (sound\tms5220.cpp) [Michael Zapf].
- 0.186              : Changed description to 'TI Speech ROM'.
- 0.184              : Added 'SPEECHROM' device (machine\spchrom.cpp).
- 0.148u5            : Moved mess\audio\spchroms.c to emu\machine\. Added some TODO comments [smf].
- NOTES: This is an emulator for "typical" speech ROMs from TI, as used by TI99/4(a). In order to support its speech processor, TI designed some ROMs with a 1-bit data bus and 4-bit address bus (multiplexed 5 times to provide a 18-bit address). A fairly complete description of such a ROM (tms6100) is found in the tms5220 datasheet.
- DRIVERS: (MESS) exelv.cpp and mpf1.cpp
- SOURCE: machine\spchrom.cpp



S26.3   Mitsubishi

S26.31  M58817

- 0.122u7            : Replaced TMS5110 sound with M58817 in clone 'Radar Scope (TRS01)'.
- 0.122u2            : Removed sound\m58817.c/h. Added coefficient maps for TMS5100 and M58817 from documented sources to tms5110r.c [Couriersud].
- 0.122              : Added sound\m58817.c/h. Couriersud wrote M58817 sound driver and hooked it up to Radar Scope (TRS01). Uses TMS5110 speech synthesis. LPC format is identical, however coefficients seem to be different. Until coefficients are known, samples are used.
- 0.116u3            : DKong driver update [Couriersud]: First attempts on decoding m58815.
- NOTES: Mitsubishi M58817AP Speech Generator - Speech Synthesizer; DIP28. MAME: The Mitsubishi M58817 seems to have (partly?) copied the coefficients from the TMC0280/CD2801 above, but has some slight differences to it within the chip: The main accumulator seems to have 1 extra bit and the digital values are tapped 1 bit higher than on the TI chips. This is emulated within tms5110.c
- DRIVERS: dkong.cpp
- SOURCE: sound\tms5110r.inc


S26.32 M58819S

- 0.221              : Simplified handlers [Osso].
- 0.165              : Lord Nightmare added support for M58819 'VSM-emulator', fixes speech in clone Radar Scope (TRS01).
- 0.149              : Modernized the M58819 device [Osso].
- 0.138u2            : Added pinouts for TMS6100 and M58819 [Couriersud].
- NOTES: Mitsubishi M58819S Memory Interface - EPROM I/F foruse w/M58817 speech syn
- DRIVERS: dkong.cpp
- SOURCE: machine\tms6100.cpp



S26.4   Votrax SC-01

- 0.258              : Use logmacro [hap].
- 0.256              : Removed imperfect_features flag (sound\votrax.h) [O. Galibert].
- 0.255              : Added support for the older Votrax SC-01 chip (Gorf and Wizard of Wor). Currently only used by Bally Astrocade-derived arcade hardware. All other devices remain using the Votrax SC-01-A [Lord Nightmare].
- 0.236              : Re-balanced some Votrax stuff, attempting to keep the chip output between +/-1.0 [David Haywood].
- 0.233              : Tell the device's parent when the IRQ line is lowered. Improves (MESS) Type 'N Talk [Rob Justice].
- 0.226              : Adjust the final filter [O. Galibert].
- 0.225              : Fixed pitch and closure. Note that the dynamic clock changes will sound bad until Aaron's sound stream fixes are in [O. Galibert]. Fixed Votrax SC-01 hookup for Wizard of Wor [O. Galibert, Frank Palazzolo, David Viens]. Updated Votrax sound to new stream callback [Aaron Giles]. Tweaked Votrax speech frequency settings to better match samples/recording for Q*bert (audio\gottlieb.cpp) [Tafoid].
- 0.207              : Simplified write handlers [AJR].
- 0.181              : Redumped 'Votrax SC-01' device rom. Simulate Votrax SC-01 (gorf, qbert, qbertqub, reactor, sqbert, tylz and wow). Complete simulation of digital section based on die imaging. Plosives are still imperfect [O. Galibert].
- 0.167              : Fixed the memory map mirroring based on schematic in (MESS) Votrax Type 'N Talk [Lord Nightmare, Kevtris].
- 0.155              : Re-added 'Votrax SC-01' device rom.
- 0.153              : Converted Votrax SC-01 device to DEVCB2 [Osso].
- 0.151              : Changed speech clock to value recommended on the datasheet for (MESS) Votrax Type 'N Talk and Personal Speech System [Robbbert].
- 0.149              : Connected ACIA and RS232 in (MESS) Votrax Type 'N Talk [Robbbert].
- 0.145u6            : Removed Votrax SC-01 device rom.
- 0.145u6            : Votrax clock adjustment [Aaron Giles].
- 0.145u4            : Formalized the Votrax SC-01 device [Aaron Giles, Lord Nightmare, Olivier Galibert]. Implemented the full set of digital logic from the patent, including the timing circuit, transition circuit, glottal generator, and noise source. Some unknowns still exist with regards to clocking, due to contradictory statements in the patent, but as it stands now, all parameters are fetched and processed, phonemes are requested, and in theory all that remains is for someone with analog sound experience to simulate the filters on the output. For now, you just get the raw glottal pulse mixed with the noise signal based on the vocal and fricative amplitudes, which is enough to show progress, but hardly a pleasing result just yet. Aaron Giles converted Gottlieb r1 and r2 sound boards into full-on devices, using the recently-added mixer interface. All sound outputs are redirected to the new sound device itself, and then the consuming driver can route the new sound device's outputs as appropriate. The Votrax chip has been hooked up properly, with a crude guess at the variable clocking. Current Votrax emulation is turned off, but it can be enabled by changing USE_FAKE_VOTRAX to 0 in gottlieb.h. A few tweaks, better logging [Aaron Giles]. Added some temporary hacks to the votrax to get the parameters to all change to real values so the analog filters can be tested. Changed USE_FAKE_VOTRAX back to 1. Was accidentally checked in the wrong way in a previous change [Aaron Giles]. Added analog path to Votrax (Compute Final Capacity + Analog to Digital Filter) [O. Galibert].
- 0.145u1            : Added 'Votrax SC-01' device (sound\votrax.c).
- 0.120u3            : Some build-related improvements to the sound cores [Atari Ace]: VOTRAX can now be built independentally of SAMPLES.
- 0.129              : Added sound\votrax.h.
- 0.93               : Aaron Giles pulled out the dead Votrax core (was still being hard-compiled) and made it a proper sound type (which currently isn't included).
- 0.34b4             : Kevin Bales improved speech in Gorf. It now plays speech 100% accurately except for the missing samples.
- 0.31               : Alex Judd made better speech in Gorf.
- 0.28               : Added sndhrdw\votrax.c.
- NOTES: Votrax SC-01 synthesizer uses 64 phoneme to produce speech. The PinMAME uses all original 64 phonemes (http://www.pinmame.com/ + http://pinmame.retrogames.com/).
- GAMES: Gottlieb games uses the Votrax speech chip in the revision 1 sound board (Q*bert and Reactor). The revision 2 games uses a GI SP-0250 speech chip.
- DRIVERS: astrocde.cpp, gottlieb.cpp and taito.cpp
- SOURCE: sound\votrax.cpp



S26.41  Votrax SC-02

- 0.262              : Added sound\ssi263hle.cpp/h. Added a temporary SSI-263 Speech Synthesizer device extracted from thayers.c driver which remaps Votrax SC-02 phonemes onto the SC-01's phoneme set (sound\ssi263hle.cpp) [Ryan Holtz].
- NOTES: Votrax SC-02 / Silicon Systems SSI-263A Phoneme Speech Synthesizer (see https://en.wikipedia.org/wiki/Votrax)
- PCB: VOTRAX SC-02  or  SSI 263P
- DRIVERS: thayers.cpp
- SOURCE: sound\ssi263hle.cpp





S26.5   S14001A

- 0.270              : Level triggered 1-bit handler does not make sense. Removed overloaded set_clock [hap].
- 0.269              : Shorthand variable types. Small cleanup. Removed statistics. Use logmacro for debug msgs and device_rom_interface (sound\s14001a.cpp) [hap].
- 0.228              : Simplified code, removing the uDeltaAdrP2 switch [hap].
- 0.222              : Zero-fill variables, fixes missing speech in some (MESS) Fidel chess drivers in DEVNOCLEAR build [Osso].
- 0.220              : Simplified some handlers [Osso].
- 0.186              : Changed description to 'SSi TSI S14001A'.
- 0.170              : Added optional DEVCB callbacks for mem read and BSY pin. Set default amp to 15 [hap]. Added more accurate SSi S14001A speech chip emulation, written by one of the people at SSi who originally laid out the S14001a silicon in 1974/5! (http://www.vintagecalculators.com/html/speech-.html) [Ed Bernard, hap]. Added savestates to new s14001a_device. Added new s14001a_device to Berzerk, Frenzy, Moon War, Wolf Pack and st_mp200.cpp (catacomp, flight2k, freefall, lightnin, orbitor1 and spltsecp) [hap].
- 0.162              : Added save state support to S14001A sound [Osso].
- 0.150              : Modernized the S14001A sound device [Osso].
- 0.148u2            : Added note that the four S14001A DAC test pins are really digital out pins [David Viens].
- 0.136u2            : Lord Nightmare updated S14001A comments; got rid of the squealing noise (hidden behind a #define now, code is still there) until some other issues can be resolved.
- 0.128u4            : Update S14001A core [Lord Nightmare]: Added chip pinout and operation notes.
- 0.125u9            : Update S14001A core [Lord Nightmare]: Improved filtering to be more accurate to the chip, changed internal audio renderer to produce 4 bit sound as the real chip does. Moved filter outside of the main rendering loop into the glue code. Note: With this update, you may hear a whining noise that was not previously present. This is accurate to the chip! The real chip would almost always have an analog filter placed on its output to suppress this whine.
- 0.122u7            : Zsolt Vasvari changed S14001A emulator to allow setting the clock frequency instead of the clock multiplier. This is how the real chip works. Changed the Berzerk driver to set the S14001A clock as per the schematics.
- 0.117u2            : Lord Nightmare connected S14001A speech to the Wolf Pack driver.
- 0.111u6            : Lord Nightmare added the missing volume and frequency controls to the Berzerk driver and s14001a core. Fixed the issue with random words being spoken instead of the proper ones. Word is now latched at the proper time.
- 0.111u5            : Lord Nightmare fixed a minor problem with sound clipping in the s14001a.
- 0.111u4            : Added sound\s14001a.c/h. Preliminary emulation of the TSI S14001A speech synthesizer as found in Berzerk/Frenzy (and also Stern pinballs) [Lord Nightmare, Kevtris, R. Belmont].
- NOTES: TSI S14001A emulator by Jonathan Gevaryahu ("Lord Nightmare") with help from Kevin Horton ("kevtris"). MAME conversion and integration by R. Belmont. The TSI S14001A speech chip produced speech with speech roms from the VSU-1000 board. Berzerk, Universal Research Laboratories/Stern Inc., 1980. Just passing a Berzerk machine was a new experience for most people. The machine actually spoke! Few people had experienced voice-synthesis at the time, and it made quite an impression. Because digitization was so expensive, the sentences spoken by Berzerk shared a vocabulary of only 30 words. The speech was done using LPC coding that I believe was invented by T.I., although I remember we used a National Speech chip in it. This was when speech and memory was expensive, so we didn't just digitize sounds and dump them out through a DAC. I remember it cost something like $1000 per word to have the compression done, so we tried to come up with a limited vocabulary which could be rearranged and reused as much as possible. There was some guy up in Silicon Gulch who did this stuff for a living - so it is possible to make money while talking in a monotone.
- DRIVERS: berzerk.cpp, st_mp200.cpp and wolfpack.cpp
- SOURCE: sound\s14001a.cpp



S26.6   GI

S26.61  SP0250

- 0.258              : Make drq_r return an int instead of u8 [hap].
- 0.225              : Fixed STRUCT_MEMBER. Update SP0250 sound to the new stream update callback [Aaron Giles].
- 0.224              : Matched clock divider to real chip measurements. Fixed behavior when not fed enough data; addresses "gapping" in speech in Sega games. Implemented accurate LFR noise generator according to real chip measurements. Added pulse-width modulation DAC output mode for future consumption by netlist. Further verification from real hardware [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.186              : Changed description to 'GI SP0250 LPC'. Removed timer_pulse [Osso].
- 0.153              : SP0250 using DEVCB2 now [Miodrag Milanovic].
- 0.150              : Modernized the SP0250 device [Osso].
- 0.129              : Aaron Giles added polling hooks for SP0250 DRQ line. The callback is now optional. If not provided, then the kick timer is not used. Converted gottlieb speech driver to use polling for SP0250 DRQ line.
- 0.102u5            : SP0250 update [Nicola Salmoria]: Added SP0250 speech chip to The Three Stooges. Streamlined the SP0250 emulation to avoid timing issues which were preventing 3 stooges from working. Fixed glitches in the speech that were caused by not resetting the filter stages when a speech frame is loaded. Made the SP0250 support the external clock rate. Changed the playback rate to match the real board by making the clock divider a reasonable number.
- 0.93               : Changed description to 'SP0250'.
- 0.71u3             : Added sound\sp0250.c/h. SP0250 sound / G80 speech board emulation [Olivier Galibert].
- 27th July      2003: Olivier Galibert sent in support for SP0250 sound chip and Sega G80 speech board, adding emulated speech to Astro Blaster, Space Fury, Star Trek and Zektor.
- NOTES: The GI SP0250 is a digital LPC speech sound synthesizer (Sega G80 boards). http://www.dsplib.com/chips/sp025x.html
- GAMES: Sega - Astro Blaster (1981), Space Fury (1981), Star Trek (1982), Zektor (1982)
- PCB: G-80 Speech Synthesis chip (Astrob), GI SP-0250
- DRIVERS: galaxian.cpp, gottlieb.cpp, gts80b.cpp, segag80r.cpp and segag80v.cpp
- SOURCE: sound\sp0250.cpp



S26.62  SP0256

- 0.264              : Removed reset lrq timer workaround that was added there for (MESS) Odyssey 2 killer bees. Bad luck: Everything o2 works same as before except turtlesu (bus\odyssey2\voice.cpp), instead of failing to detect The Voice only sometimes, now it happens more commonly. Not due to the removed timer, but actually the stream updates before accessing I/O which should be more accurate. When callbacks are used, add bg timer like SP0250 does [hap].
- 0.225              : Update SP0256 sound to new stream callbacks [Aaron Giles].
- 0.202              : Less space [smf].
- 0.200              : Removed MCFG_SP0256 macro [AJR].
- 0.186              : Changed description to 'GI SP0256 Narrator Speech Processor'.
- 0.154              : Fixed usage of uninitialized member in sp0256_device [Oliver Stoeneberg].
- 0.153              : Converted SP0256 device to DEVCB2 [Osso].
- 0.149              : Modernized the SP0256 Narrator Speech Processor sound device [Fabio Priuli].
- 0.148u2            : Added a little delay before settling LRQ when resetting the SP0256 device. Fixes (MESS) MT05103 (odyssey2: No speech in Killer Bees). When reading the LRQ signal, force an update of the stream. This fixes support for 'The Voice' in 'Turtles' for the odyssey2 (No speech in Killer Bees) [Wilbert Pol].
- 0.147              : Added 'SP0256' device (sound\sp0256.c).
- 0.145u7            : Curt Coder fixed SP0256 clock speed.
- 0.143u6            : Update SP0256 core to use correctly ordered resroms; update Sauro driver to use correctly ordered sp0256-al2 resroms [Huygens, Lord Nightmare].
- 0.141u1            : Curt Coder added SBY line read to SP0256 interface.
- 0.132u1            : Curt Coder added SP0256 pinout.
- 0.129u4            : Nathan Woods added the ability to invoke CPU input lines with DEVCB callbacks. Changed SP0256 to use DEVCB callbacks. Updated Sauro driver to use this new feature.
- 0.111u1            : Added sound\sp0256.c/h. Added GI SP0256 Narrator Speech Processor [Joe Zbiciak]. Ported to MESS by Tim Lindner. Nathan Woods adding remaining MESS sound cores to the core MAME sources.
- NOTES: The SP0256-AL2 is a text to speech controller. It synthesizes 'alophones' to somethink like 'speech primitives'.
- PCB: GI-SP0256A-AL (Sauro)
- DRIVERS: holeland.cpp, idsa.cpp and sauro.cpp
- SOURCE: sound\sp0256.cpp




S26.7   Hitachi HD38880 and HD38882

- 10th August 2010: Smitdogg - Kold666 sent me a HD38882 chip for decapping.
- NOTES: The Hitachi HD38880 is a speech chip with an EPROM interface (HD38882). Got-Ya just sends it a sound command (0-0x1a)
- GAMES: Fantasy (SNK 1981), Got-Ya (Game-A-Tron 1981) and Vanguard
- WEB: http://www.freepatentsonline.com/4435832.html
- PCB: HD38880BP, HD38882PA06 (Fantasy, Thehand)



S26.8   HC-55516

- 0.274              : Correct variable type of digital sample in hc55516 class. Small cleanup. BTANB NOTE: Outputs a low-volume but very high-pitched background tone when /FZ is active and the hardware doesn't have a low-pass filter [hap].
- 0.248              : Added hc55516 device to Oli-Boo-Chu [hap].
- 0.226              : Major update for HC55516 CVSD audio device and related filtering, as well as hooking it to drivers. Splitted HC55516 core into separate cores/subclasses for HC55516 and HC55532 (new 'digital' implementation based on decap/die tracing) as well as MC3417 and MC3418 (old existing 'analog' implementation left alone) and hooked the HC55516 and MC3417 implementations to the appropriate hardware drivers. This should vastly improve CVSD sound quality in drivers that use the HC55516 [Lord Nightmare, Sean Riddle].
- 0.225              : Update HC-55516 sound to new stream callbacks [Aaron Giles].
- 0.154              : Fixed usage of uninitialized members in hc55516_device [Oliver Stoeneberg].
- 0.149u1            : Modernized HC-55516 sound chip [Osso].
- 0.147              : Added 'HC-55516' device (sound\hc55516.c).
- 0.122u8            : Zsolt Vasvari reorganized exidy440 audio code to make it easier to eventually use the MC3417/18 emulation directly. Added MC3418 variant support to the HC55516 audio code.
- 0.122u7            : Changed description to 'HC-55516'. Zsolt Vasvari added the ability to the HC55516 emulator to take an external osciallator. Updated Mouse Trap to use the new interface. Added MC3417 and MC3418 variants to the HC55516 sound emulation. Changed Mouse Trap to use MC3417.
- 0.101u1            : Aaron Giles added save state support to the HC55516 sound chip.
- 0.36b9             : Several changes and improvements to the TMS34010 emulation and to the Williams games using CVSD sound [Aaron Giles].
- 0.36b8             : CVSD sound in Mouse Trap [Dan Boris, Aaron Giles].
- 23rd October   1999: Dan Boris and Aaron Giles added the digital CVSD sound to Mousetrap.
- 0.36b7             : Changed sound\cvsd.c/h to sound\hc55516.c/h. Rewritten the HC55516 CVSD decoder [Aaron Giles]. This affects Sinistar, Joust 2, Arch Rivals, Pigskin, Tri-Sports, Smash TV, Trog and Narc.
- 11th October   1999: Aaron Giles sent in a CVSD/HC55516 rewrite, which sounds a little better.
- 0.35b2             : Added sndhrdw\cvsd.c/h. CVSD emulation, used for speech in Sinistar and in the 34010 games (Smash TV etc.) [Larry Bank, Alex Pasadyn]. Alex Pasadyn emulated speech in Sinistar. Samples are no longer used.
- NOTES: Harris HC55516 CVSD decoder
- PCB: Harris 55564 CVSD (Trog), HC3-55536 (Olibochu), HARISS HCI-55536-5 (Jangou)
- DRIVERS: changyu.cpp, jangou.cpp, mcr68.cpp, midyunit.cpp, pcxt.cpp, redalert.cpp, s11.cpp, s11a.cpp, s11b.cpp, s11c.cpp, s6.cpp, s6a.cpp, s7.cpp, s9.cpp, williams.cpp, wpc_an.cpp, wpc_dot.cpp, wpc_flip1.cpp and wpc_flip2.cpp
- SOURCE: sound\hc55516.cpp


S26.81  HC-55532
- 0.226              : Added 'HC-55532' device. Splitted HC55516 core into separate cores/subclasses for HC55516 and HC55532 (new 'digital' implementation based on decap/die tracing) [Lord Nightmare, Sean Riddle].
- DRIVERS:
- SOURCE: sound\hc55516.cpp



S26.9   VLM5030

- 0.257              : Update stream before changing st/rst pin. Small cleanup. Fixed overflow problem on unvoiced samples [hap].
- 0.225              : Update VLM5030 sound to new stream callbacks [Aaron Giles].
- 0.223              : Fixed VLM5030 speech at least halfway in TwinBee (gx400_speech_w; drivers\nemesis.c) [AJR].
- 0.208              : Simplified read/write handlers [AJR].
- 0.202              : Eliminated register_postload [AJR].
- 0.186              : Changed description to 'Sanyo VLM5030'.
- 0.176              : Converted VLM5030 to device_memory_interface; correct region lengths. Fixed VLM loading in Jail Break and clones [AJR].
- 0.155              : Changed vlm5030_device pin read/write functions to READ/WRITE_LINE [hap].
- 0.153              : Removed silly VLM5030 config interface [Alex Jackson].
- 0.149u1            : Modernized the VLM5030 speech synthesizer chip [Osso].
- 0.143u8            : Added tables from VLM5030 as verified by decap from ogoun. Adapted VLM5030 to use the TMS5xxx common tables file. Some details have yet to be worked out for certain (how exactly the reflection coefficients beyond k=2 address the k2+ rom) [ogoun, Lord Nightmare, The Dumping Union]. Adjusted the VLM5030 K3 thru K10 coefficients to be based not on reading the K2 rom but based on the index itself <<6 or 7. This makes the games sound much better and explains the very small ram size used for coefficients other than K1 and K2. This needs further investigation and figuring out of the die schematic to settle completely [Lord Nightmare].
-  7th October   2010: Smitdogg - Ogoun decapped the VLM5030 sound chip used in games like Double Dribble. Thanks to Corrado Tomaselli for donating the chip.
- 0.139u2            : Lord Nightmare added IC pinout to VLM5030 driver. Still need translation of the datasheet for VCU, RST (which does more than just reset) and MTE.
- 10th August    2010: Smitdogg - Kold666 sent me a HD38882 chip for decapping.
- 0.117              : Zsolt Vasvari fixed high pitch noise after the speech most noticeable in Track & Field.
- 0.58               : Tatsuyuki Satoj fixed the VLM5030 emulation (Punch Out, Track & Field, Yie-Ar Kung Fu etc.).
- 23rd January   2002: Tatsuyuki Satoh added the 4800/9600bps parameter support to the VLM5030 sound chip emulation, fixing some speech in Jailbreak.
- 22nd January   2002: Tatsuyuki Satoh fixed the noise generator in the VLM5030 sound chip emulation, completely removing the need for samples.
- 21st January   2002: Tatsuyuki Satoh submitted a new, much improved version of the VLM5030 sound chip emulation, used for speech in (Super) Punch-Out and a few other drivers. It is now more than 90% accurate to the original, and only a few small problems remain.
- 23rd July      2001: Tatsuyuki Satoh adjusted the speed parameter in the VLM5030 emulation.
- 19th July      2001: Tatsuyuki Satoh improved the filter parameter in VLM5030 emulation but it is still not perfect.
- 0.37b14            : Tatsuyuki Satoh improved speech in Double Dribble.
- 29th March     2001: Tatsuyuki Satoh improved the VLM5030 emulator a little, but further progress will be very difficult without the exact decoding algorithm.
-  4th October   1999: Tatsuyuki Satoh sent in an update to his FM core with still incomplete LFO support (intro of Rock 'n Rage needs this) and some other bugfixes.
- 28th June      1999: Tatsuyuki Satoh fixed the VLM5030 and RC filter interface in Double Dribble.
- 0.35b13            : Tatsuyuki Satoh improved VLM5030 emulation.
- 10th May       1999: Tatsuyuki Satoh sent in a MUCH better version of the VLM5030 software emulator, but it is not yet quite as good as the samples, though better than the older one.
- 13th April     1999: Tatsuyuki Satoh and Ernesto Corvi added VLM5030 support for the Double Dribble driver.
- 12th April     1999: Ernesto Corvi sent in the Double Dribble driver made by Manuel Abadia, which only lacks colors and VLM5030 emulation.
- 0.33b6             : Tatuyuki Satoh fixed bug in VLM5030 emulator which caused samples not to work.
- 0.33b3             : Tatsuyuki Satoh updated the VLM5030 emulation (Punch Out etc.). Since quality is still bad, the emulator is only used when samples are not available.
- 0.30               : Added sndhrdw\vlm5030.c/h.
- NOTES: The VLM5030 speech emulator based on the TMS5220 driver. NOTES: 9bit DAC is composed of 5bit Physical and 3bitPWM. TODO: Noise Generator circuit without 'rand()' function.
- PCB: SANYO VLM5030, DIP40
- DRIVERS: ddribble.cpp, hyperspt.cpp, jailbrek.cpp, nemesis.cpp, punchout.cpp, rockrage.cpp, sbasketb.cpp, trackfld.cpp and yiear.cpp
- SOURCE: sound\vlm5030.cpp




S26.A   NEC

S26.A1  uPD7752

- 0.225              : Update uPD7752 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.150              : Added sound\upd7752.c/h. Added dummy uPD7752 device [Angelo Salese].
- DRIVERS: (MESS) NEC PC-6001/PC-6601
- SOURCE: sound\upd7752.cpp


S26.A2  uPD7756

- 0.186              : Changed description to 'NEC uPD7756'.
- 0.147              : Added 'uPD7756' device. Added upd7756_device to homerun.c [hap].
- NOTES: The uPD7756 is a speech processor with internal rom.
- PCB: D7756 - Moero Pro Yakyuu Homerun (Jaleco 1988)
- DRIVERS: homerun.cpp
- SOURCE: sound\upd7759.cpp


S26.A3  uPD7759

- 0.253              : Only detect mode change in idle state (sound\upd7759.cpp) [hap].
- 0.244              : Added support for mode switching. Fixes to switching between slave and stand alone mode (sound\upd7759.cpp) [Wilbert Pol].
- 0.225              : Update uPD7759 sound to the new stream update callback [Aaron Giles].
- 0.220              : Fixed Ribbit! random jumps back to 1st round (sound\upd7759.cpp and drivers\segac2.cpp). Note: Ribbit does random measure of UPD7759 sample #A playback time and reset to round 1 if its not in expected range (see routine @1D8D2) [MetalliC].
- 0.201              : Converted uPD7759 to use device_rom_interface and added md input for selecting between master and slave [smf].
- 0.198              : Fixed uPD7759 class hierarchy, and reset callback before resolving it (fixed assert in Sega C2). This fixed also debug assert in all sets of jpmsys5sw.cpp [Vas Crabb].
- 0.186              : Changed description to 'NEC uPD7759'. Fixed/Reduced logging [AJR].
- 0.153              : uPD7759 using DEVCB2 now [Miodrag Milanovic].
- 0.149u1            : Modernized the uPD7759 sound chip [Osso].
- 0.148u4            : upd7759_device tag lookup removal (drivers\88games.c/h, bfcobra.c, bfm_sc1.c, bfm_sc2.c, bingoc.c, bladestl.c, combatsc.c/h, jpmimpct.c/h, mainevt.c/h, prehisle.c/h, rpunch.c/h, segac2.c, snk68.c/h, tmnt.c/h, twin16.c/h, includes\bladestl.h and megadriv.h) [Miodrag Milanovic].
- 0.147              : Changed description to 'uPD7759'. Added uninitialized variable. Added asserts to prevent array overflow or nullpointer access. Rommask makes more sense. Update notes. Paletteram is readable. Title correction [hap]. Fix for upd7759 assert [Miodrag Milanovic].
- 0.108u4            : Vas Crabb added save state support for uPD7759.
- 0.93               : Changed description to 'UPD7759'.
- 0.91u2             : uPD7759 rewrite, fixing sound in System 16 games [Aaron Giles].
- 0.74               : Support upd7759 Silence Compression [Olivier Galibert].
-  6th September 2003: Olivier Galibert added support for silence compression and fixed the end-of-sample garbage and 4x command length in the UPD7759 sound chip emulator.
-  6th March     2003: Acho A. Tang fixed the wrong UPD7759 samples being played in the Twin16 driver, and he fixed a bug in the UPD7759 emulation that caused problems with playing the last sample.
- 0.65               : Acho A. Tang fixed some issues with uPD7759 (TMNT, 88 Games, P.O.W.).
-  9th February  2003: Acho A. Tang fixed various problems in the uPD7759 sound chip emulation, including a crash in the System16 driver and missing and/or incorrect sounds in TMNT, P.O.W. and '88 Games.
- 0.59               : Rewritten the UPD7759 emulator (used by TMNT etc) [Olivier Galibert].
- 12th February  2002: Olivier Galibert rewrote the UPD7759 sound chip emulation with far better accuracy and he fixed a few problems in the drivers that use it.
- 27th October   1999: Takahiro Nogi fixed UPD7759 problems in Vulcan Venture.
- 0.36b3             : Ernesto Corvi changed the UPD7759 emulator to support two chips ('88 Games needed this) and fixed a bug in the ADPCM decoding.
- 14th August    1999: Ernesto Corvi did a small bugfix update to UPD7759.
- 0.35b13            : Juergen Buchmueller improved uPD7759 ADPCM decode.
- 11th May       1999: Juergen Buchmueller made the uPD7759 sound a little better and fixed some other things.
- 0.35b2             : Added upd7759.c/h. NEC uPD7759 emulation [Juergen Buchmueller, Mike Balfour, Howie Cohen]. This is used by TMNT, System 16, and others. uPD7759 support in Golden Axe, Shinobi, Passshtb, Alien Syndrome, Altered Beast [Howie Cohen].
- NOTES: The NEC UPD7759 is a speech processing LSI that utilizes ADPCM to produce speech or other sampled sounds. It can directly address up to 1Mbit (128k) of external data ROM, or the host CPU can control the speech data transfer. The UPD7759 is usually hooked up to a 640 kHz clock and has one 8-bit input port, a start pin, a busy pin, and a clock output. The ADPCM converter converts nibbles into 9-bit DAC values. It has an internal state of 4 bits that's used in conjunction with the nibble to lookup which of the 256 possible steps is used. Then the state is changed according to the nibble value. Essentially, the higher the state, the bigger the steps are, and using big steps increase the state. Conversely, using small steps reduces the state. This allows the engine to be a little more adaptative than a classical ADPCM algorithm. The UPD7759 can run in two modes, master (also known as standalone) and slave. The mode is selected through the "md" pin. No known game changes modes on the fly, and it's unsure if that's even possible to do.
- PCB: uPD7758C or D7759C (TMNT), uPD7759C (Rabiolep), D7759C (Tmnt), D7759GC (Elvis) and NEC 7759 (Pow)
- DRIVERS: 88games.cpp, bfcobra.cpp, bfm_sc1.cpp, bfm_sc2.cpp, bingoc.cpp, bladestl.cpp, combatsc.cpp, gambl186.cpp, itgambl2.cpp, jpmimpct.cpp, jpmimpctsw.cpp, jpmsys5.cpp, jpmsys5sw.cpp, konmedal.cpp, mainevt.cpp, maygay1bsw.cpp, maygayv1.cpp, micro3d.cpp, mpu4.cpp, mpu4crystal.cpp, prehisle.cpp, rpunch.cpp, segac2.cpp, segas16b.cpp, segaufo.cpp, snk68.cpp, system16.cpp, tmnt.cpp, twin16.cpp and videosaa.cpp
- SOURCE: sound\upd7759.cpp



S26.B   MSM5218
- PCB: OKI MSM5218RS ADPCM Voice Analysis/Synthesis IC (Jangou Lady)


S26.C   Alpha 88
- NOTES: MAME use a simple DAC interface for the Voice/Speech of the Alpha 88 (see alha68k.c)
- PCB: Alpha 88 Voice Chip (Sbasebal)



S26.D   Digitalker

- 0.225              : Update Digitalker sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.186              : Changed description to 'MM54104 Digitalker'.
- 0.167              : Fixed Digitalker speed. The interrupt command was triggered at the end of the post-sample blank instead of at the start. It's a tight guess but is on par with real hardware footage of Scorpion [kazblox].
- 0.165              : Added Chexx/Face-Off (EM Bubble Hockey) with Digitalker [Jarrod Wright, Luca Elia]. Fixed typos in sound\digitalk.c [Luca Elia].
- 0.164              : Hooked up Digitalker (4MHz) speech in Harem [Luca Elia, tirino73].
- 0.148u1            : Modernized Digitalker sound device [Andrew Gardner, Olivier Galibert].
- 0.147              : Added 'Digitalker' device.
- 0.131u4            : Fixed Digitalker step mode 2 [Olivier Galibert].
- 0.129u1            : Added sound\digitalk.c/h. Added Digitalker (4MHz) speech emulation to Scorpion [Olivier Galibert].
- NOTES: National Semiconductor's Digitalker. The history of this driver is a little strange. The real reverse-engineering work has been done by Kevin Horton (single-stepping the chip and everything) with assistance by Lord Nightmare who had done the work (with help from Mr. Horton) on the tsi s14001a, a predecessor of the digitalker. Mr. Horton was not interested in publishing his findings, but provided full-rate resynthesized samples for the game scorpion. This driver is the result of analyzing these samples.
- DRIVERS: chexx.cpp, galaxian.cpp, mazerbla.cpp and scramble.cpp
- SOURCE: sound\digitalk.cpp
- PCB: MM54104 Digitalker speech (Scorpion)



S26.E   TC8830F

- 0.225              : Update TC8830F sound to new stream callbacks [Aaron Giles].
- 0.186              : Changed description to 'Toshiba TC8830F'.
- 0.153              : Preliminary ADM decoding [hap].
- 0.146              : Added emu\sound\tc8830f.c/h. Added 'TC8830F' device. Preliminary Toshiba TC8830F emulation [hap].
- NOTES: The Toshiba TC8830F is a single chip C MOS LSI for voice recording and reproducing LSI using the ADM (Adpative Delta Modulation) system. Voice recording and reproducing can be made by externally connecting S-RAM for voice data recording.
- GAMES: Chance Kun (Japan) (1988)
- SOURCE: sound\tc8830f.cpp


S26.F   MEA 8000

- 0.251              : Make MEA8000-based speech interface an extension device (thomson\speech.cpp) for (MESS) Thomson MO5 NR [AJR].
- 0.225              : Update MEA8000 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.217              : Initialized stuff in sound\mea8000.h [Osso].
- 0.190              : Added 'Philips/Signetics MEA 8000 speech synthesizer' device.
- 0.184              : Added Stargame pinballs games Space Ship (Pinball) and White Force with MEA 8000 sound [Osso]. Removed no longer used configuration macro [AJR].
- 0.179              : Converted MEA 8000 to a sound device [smf].
- 0.153              : Converted MEA 8000 to DEVCB2 [Curt Coder]. Fixed tag search for mea8000 [Miodrag Milanovic].
- 0.149              : Modernized MEA 8000 sound device [Fabio Priuli].
- 0.147              : Added mess\audio\mea8000.c/h. Merge of MESS sources [Miodrag Milanovic].
- NOTES: Philips / Signetics MEA 8000 Voice Synthesizer
- DRIVERS: stargame.cpp
- SOURCE: sound\mea8000.cpp




S27.    Other

S27.1   Melody Generator
- NOTES: The sound board of 005 (Sega 1981) generates a melody with an LS393 counter hooked to addr lines A0-A6 of a 2716 ROM. Port B from the 8255 hooks to addr lines A7-A10 of the 2716. D0-D4 output from the 2716 into an 6331. D5 outputs from the 2716 to a 555 timer. D0-D7 on the 6331 output to two LS161s. The LS161s output to the LS293 (also connected to 8255 B4). The output of this feeds into a 4391, which produces "MELODY" output.
- SOURCE: audio\segar.cpp


S27.11  Epson 7910
- 0.233: Added placeholders for missing Epson 7910 Melody ICs to nextfase, rockclim and tattack [Osso].
- NOTES: Epson 7910CQ Multi-Melody IC. Actual size unknown, needs decapping.
- DRIVERS: galaxian_rockclim.cpp, phoenix.cpp and tattack.cpp
- SOURCE: ???


S27.2   Waveform Generator

S27.21  S2688
- NOTES: American Microsystems S2688P Waveform-Function Generator, Digital Noise Generator, VDD-14.0v, Max Freq 105k Hz, Nom Supp. 27.0 V, DIP8
- PCB: s2688 8117yu (Buckrog)



S27.3   Noise Generator

S27.31  MM5437
- PCB: National Semiconductor MM5437 pseudo-random noise generator chip, DIP8 (Pairs)


S27.32  MM5837

- 0.225              : Added 'MM5837 Digital Noise Stream' device. Unify implementations: Create base mm5837_source device to provide raw output. mm5837_device is based on it. mm5837_stream_device generates a sound stream from it. Frequency calculation now computed instead of table-based [Aaron Giles].
- 0.219              : Documented frequency by supply voltage [Couriersud].
- 0.200              : Removed MCFG macros (sound\mm5837.h) [Vas Crabb].
- 0.181              : Added sound\mm5837.cpp/h. Added 'MM5837 Digital Noise Source' device (sound\mm5837.cpp). New MM5837 Noise Generator device for Beezer [Dirk Best].
- 0.164              : Added MM5837 Noise Generator used by Congo Bongo (nl_examples\congo_bongo.c and mm5837_noise.c) [Couriersud].
- 0.141u2            : Beezer now uses correct MM5837 noise source (clock may be a bit off though), and now has MM5837 properly hooked to audio via. May still be some issues with intermittent noise updating which need fixing [Lord Nightmare].
- NOTES: The MM5837 is a noise generator.
- PCB: 5837N (Buckrog/Zoom909)
- NOTES: National Semiconductor MM5837 Digital Noise
- DRIVERS: beezer.cpp, balsente.cpp, turbo.cpp and zaxxon.cpp
- SOURCE: sound\mm5837.cpp + audio\sente6vb.cpp + drivers\gridlee.cpp


S27.33  RCA CDP1863

- 0.228              : Initialized more member variables [AJR].
- 0.225              : Update CDP1863 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.206              : Removed MCFG macros (sound\cdp1863.h) [Ryan Holtz].
- 0.186              : Changed description to 'RCA CDP1863'.
- 0.177              : Added 'CDP1863' device.
- 0.142u2            : Refactored CDP1863 into a C++ device [Curt Coder].
- 0.134u1            : Added sound\cdp1863.c/h. Curt Coder added CDP1863 sound devices for MESS.
- NOTES: RCA CDP1863 CMOS 8-Bit Programmable Frequency Generator emulation
- DRIVERS: play_2.cpp
- SOURCE: sound\cdp1863.cpp


S27.34  RCA CDP1864

- 0.227              : Fixed colour bugs (sound\cdp1864.cpp). Note: At start, color is disabled. If the CON pin is taken low (or pulsed low), color is enabled. It can only be disabled again by resetting the chip [AJR].
- 0.225              : Update CDP1864 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.201              : Partial MCFG elimination (all callbacks are now DEVCB3). Hook in screens efficiently without using MCFG. Fixed have_screen_update(), which was broken and returned false under any valid configuration, and rename the function has_screen_update(). This fixes regressions in 'Granny and the Gators' and other drivers using custom update functions with CDP1861, CDP1864 and TMS992x VDPs (emu\screen.h) [AJR].
- 0.150              : (MESS) mpt02: Fixed CDP1864 colors [Curt Coder, Guru]. Fixed CDP1864 background color sequence [Curt Coder].
- 0.149              : Converted CDP1864 to DEVCB2 [Curt Coder].
- 0.147              : Death to palettes (palette_set_color_rgb) [Curt Coder].
- 0.134u4            : Curt Coder added helper macro for CDP1864 screen creation.
- 0.134u1            : Added sound\cdp1864.c/h. Curt Coder added CDP1864 sound devices for MESS.
- NOTES: RCA CDP1864C COS/MOS PAL Compatible Color TV Interface
- DRIVERS: (MESS)
- SOURCE: sound\cdp1864.cpp



S27.35  RCA CDP1869

- 0.245              : Removed inline overuse (sound\cdp1869.cpp) [Ryan Holtz].
- 0.225              : Update CDP1869 sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.206              : Removed MCFG macros (sound\cdp1869.h) [AJR].
- 0.186              : Changed description to 'RCA CDP1869 VIS'.
- 0.153              : Converted CDP1869 to DEVCB2 [Curt Coder]. Converted CDP1869 to use delegates so whole configuration is in MCFG block [Miodrag Milanovic].
- 0.149              : Added CDP1869 device address maps [Curt Coder].
- 0.148u2            : Fixed uninitialized members and memory in sound\cdp1869.c [Oliver Stoeneberg].
- 0.147              : Death to palettes (palette_set_color_rgb). Fixed regression [Curt Coder].
- 0.146u3            : Fixed a hard to reproduce divide by 0 crash (sound\cdp1869.c) [hap].
- 0.140              : Added 'RCA CDP1869' device. Refactored the CDP1869 chip into a C++ device [Curt Coder].
- 0.135u3            : Changed CDP1869 PAL/NTSC signal to use DEVCB [Curt Coder].
- 0.135u2            : CDP1869 changes: Converted page RAM functions to use DEVCB. Added pull interface for predisplay [Curt Coder].
- 0.134u4            : Added helper macro for CDP1869 [Curt Coder].
- 0.129u4            : Removed video\cdp1869.c/h. Changed description to 'RCA CDP1869'. Combined CDP1869 video and sound parts to one device [Curt Coder].
- 0.129u1            : Fixed sloppy rendering in CDP1869 that caused occasional crashes [Curt Coder].
- 0.128u6            : CDP1869 devices now also require a CPU to be defined in the configuration, in order to know which CPU's registers to fetch. Updated all cdp1869 users to specify one [Aaron Giles].
- 0.125u2            : Fixed CDP1869 character memory access, and Cidelsa sprite flashing [Curt Coder].
- 0.124u4            : Added a macro for the CDP1869 interface, and made write handlers optional [Curt Coder].
- 0.115u2            : Fixed the CDP1869 to fill the border area with the background color. Added cropping to the Cidelsa games [Aaron Giles].
- 0.113u4            : Changed CDP1869 to use proper write handlers for MESS [Curt Coder].
- 0.113u3            : Externalized CDP1869 color bit handling to a callback function for MESS [Curt Coder].
- 0.113u2            : Fixed CDP1869 double width mode (for MESS) [Curt Coder].
- 0.112u1            : Improvements to the Cidelsa driver: Set CDP1869 display size and visible area according to data sheet. Added CDP1869 CFC emulation (probably never used by anything but just for completeness' sake). Cleaned up driver [Curt Coder].
- 0.111u4            : Added CDP1869 video emulation to the Cidelsa driver. The games still don't work due to timing and interrupt issues [Curt Coder].
- 0.109u2            : Added vidhrdw\cdp1869.c/h. Added support for CDP1869 sound/video [Peter Trauner].
- NOTES: The Cosmac RCA CDP1869 is a white noise generator.
- DRIVERS: cidelsa.cpp
- SOURCE: sound\cdp1869.cpp



S27.4   TIA-MC1

- 0.221              : Simplified some handlers (audio\tiamc1.cpp) [Osso].
- 0.108u1            : Added sndhrdw\tiamc1.c. Added TIA-MC1 sound [Eugene Sandulenko]. Special thanks to Shiru for his standalone emulator and documentation.
- GAMES: Konek-Gorbunok (Terminal 1988)
- SOURCE: audio\tiamc1.cpp



S27.5   DSP

S27.51  ZOOM ZSG-1

- 0.221              : Simplified some handlers (audio\taito_zm.cpp) [Osso].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.201              : Taito Zoom ZSG-2 sound board (audio\taito_zm.cpp): Added working DSP emulation. Reduced MCFGs. Added device_mixer_interface for sound gain. Added imperfect_features related to DSP and notes. Fixed TMS57002 clock. Adjust volume balance, hopefully fixing Psyvariar -Revision-. I would need hardware recording for proper verification though [superctr].
- 0.136u3            : Added sound\zsg2.c/h. Preliminary Taito ZOOM ZSG-1 sound system [Olivier Galibert].
- DRIVERS: taitogn.cpp and zn.cpp
- SOURCE: audio\taito_zm.cpp


S27.52  ZOOM ZSG-2

- 0.274              : Update stream before reading [hap].
- 0.225              : Update ZSG-2 sound to new stream callbacks [Aaron Giles].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.202              : Properly reset emphasis filter state at key-on (sound\zsg2.cpp) [superctr].
- 0.201              : Improved Taito Zoom ZSG-2 sound emulation (sound\zsg2.cpp). Implemented emphasis filter, this is a noise reduction scheme that amplifies higher frequncies to reduce quantization noise. Added sample interpolation and another adjustable lowpass filter. This seems to be roughly what real hardware does. Improved panning registers and identify DSP output gain registers. Register 0b appears to be status flags. Proper ramping implemenation and added register map. Attempt to reduced clicks. Made the emphasis filter much more simple. I think this matches hardware, as a filter like this could be implemented with very few gates in hardware. Also reset the filter state when the sample position reaches the start address, this fixes Ray Crisis song #9. Clamp audio output to 16-bits. Optimized the filters. Saturated the emphasis filter output. Right shifting will cause unwanted noise. Discharge the output filter slowly when the cutoff is set to 0. Fixes popping noises in ay Crisis song #12 [superctr].
- 0.186              : Changed description to 'ZOOM ZSG-2'.
- 0.163              : Correct ZSG-2 internal clock [hap].
- 0.155              : Added note [hap].
- 0.153              : Added Zoom ZSG-2 sound to taitogn.c and zn.c. Regs 5/7 high bytes are for stereo panning. Divider matches G-Darius OST (Original Soundtrack). Fixed ZSG2 soundchip clock in Taito G-NET. Modernized ZSG2 device and Taito ZM. Off-by-one fixes, added notes and implemented panning. Implemented volume, Taito G-NET sounds pretty good now, still need to find out why Taito FX1b (zn.c) sound sucks compared to it, especially Ray Storm. Reset soundchip too on controlled reset. Reverse shift (no practical difference) [hap].
- 0.148u2            : Modernized ZSG-2 sound device [Andrew Gardner].
- 0.136u3            : Added sound\zsg2.c/h and audio\taito_zm.c. Added and hookup ZOOM ZSG-2 skeleton. Doesn't do much at the moment, but the increase in documentation value is significant (we're documenting the sample compression format, for one thing) [Olivier Galibert].
- NOTES: ZOOM ZSG-2 custom wavetable synthesizer (sound\zsg2.c) and Taito Zoom ZSG-2 sound board (audio\taito_zm.c; includes MN10200 CPU, ZOOM ZSG-2 audio chip and TMS57002 DASP).
- PCB: Zoom Corp ZSG-2 sound DSP, QFP100 (Taito GNET-System), ZOOM ZSG-2 (Ftimpcta, Gdarius, Raystorm)
- DRIVERS: taitogn.cpp and zn.cpp
- SOURCE: sound\zsg2.cpp and audio\taito_zm.cpp



27.6   MAS 3507D

- 0.265              : Mix sample internally before playing (sound\mas3507d.cpp) [Windy Fairy].
- 0.255              : Added sound\mp3_audio.cpp/h. Updated 3rdparty\minimp3 to latest source. Added helper class to decode MP3 frame data (sound\mp3_audio.cpp), abstracting away minimp3 from devices [Windy Fairy].
- 0.240              : Changed description to 'Micronas MAS 3507D MPEG decoder'. Fixed metadata. Added notes/docs [cam900].
- 0.225              : Update MAS 3507D sound to new stream callbacks [Aaron Giles].
- 0.212              : 'Konami 573 digital I/O board' now correctly reports the actual number of samples already played (instead of rounding up by one discrete mpeg frame in advance and disregarding samples that have been copied to the stream but not yet actually played) (sound\mas3507d.cpp) [Eric Vidal].
- 0.186              : Changed description to 'MAS 3507D MPEG decoder'.
- 0.146u5            : Oliver Stoeneberg fixed some incorrect operators and a duplicated game flag reported by Visual Studio Code Analysis (mas3507d.c).
- 0.141u2            : Added emu\sound\mas3507d.c/h. Hook up part of the I2C communication with the MAS3507D sound [O. Galibert].
- NOTES: Micronas MAS 3507D MPEG decoder
- DRIVERS: ksys573.cpp
- SOURCE: sound\mas3507d.cpp



S27.7   Computer sound cores

S27.71  Wave

- 0.278              : Removed sound\wave.cpp/h. Removed obsolete wave (cassette sound) device [hap].
- 0.225              : Update Wave sound to new stream callbacks [Aaron Giles].
- 0.192              : Look up speaker count and cassette device relative to owner. Fixes cassette speakers inside devices (sound\wave.cpp) [Dirk Best].
- 0.165              : Reduced tagmap lookups in sound\wave.c [Wilbert Pol].
- 0.152              : Modernized wave sound device [Osso].
- 0.138u3            : Robbbert fixed bad cassette wave sound.
- 0.111u1            : Added sound\wave.c/h.
- 0.37b14            : Removed sound\wave.c.
- 0.36RC1            : Added sound\wave.c/h.
- DRIVERS: (MESS) a5105.cpp, a6809.cpp, ac1.cpp, acrnsys1.cpp, alphatro.cpp, amstrad.cpp, apf.cpp, apogee.cpp, applix.cpp, binbug.cpp, bk.cpp, bmjr.cpp, bml3.cpp, c80.cpp, camplynx.cpp, cd2650.cpp, d6800.cpp, dolphunk.cpp, elwro800.cpp, et3400.cpp, excali64.cpp, fc100.cpp, fm7.cpp, galaxy.cpp, h8.cpp, hec2hrp.cpp, homelab.cpp, instruct.cpp, interact.cpp, jr100.cpp, jtc.cpp, jupace.cpp, lola8a.cpp, lviv.cpp, mc1502.cpp, mekd2.cpp, microtan.cpp, mikro80.cpp, mikrosha.cpp, mk14.cpp, mkit09.cpp, ms0515.cpp, mycom.cpp, mz2000.cpp, mz700.cpp, ondra.cpp, orao.cpp, oric.cpp, partner.cpp, pc6001.cpp, pcm.cpp, pecom.cpp, pegasus.cpp, pencil2.cpp, phunsy.cpp, pk8000.cpp, pmd85.cpp, poly88.cpp, primo.cpp, pro80.cpp, proteus3.cpp, ptcsol.cpp, pv2000.cpp, radio86.cpp, ravens.cpp, rx78.cpp, spc1000.cpp, spc1500.cpp, spectrum.cpp, svi318.cpp, tavernie.cpp, tec1.cpp, ti99_4p.cpp, ti99_4x.cpp, ti99_8.cpp, tm990189.cpp, tutor.cpp, vector06.cpp, vg5k.cpp, vtech1.cpp, vtech2.cpp, z1013.cpp and z9001.cpp
- SOURCE: sound\wave.cpp


S27.72  SID

- 0.243              : Moved creation of the SID core to device_start and explictly initialised members of the SID core structures. These structures are in internal headers, so they won't cause downstream recompiles (sound\mos6581.cpp) [Vas Crabb].
- 0.225              : Update MOS6581 sound to new stream callbacks [Aaron Giles].
- 0.222              : Fixed SID6581 init (sound\sid.cpp) [cam900].
- 0.215              : Added save states [cam900].
- 0.207              : Eliminated address_space argument from handlers [AJR].
- 0.186              : Changed description to 'MOS 6581 SID'.
- 0.185              : Added 'MOS6581' device.
- 0.153              : Cleaned up MOS6581 DEVCB2 usage [Curt Coder].
- 0.148u2            : Changed sound\sid6581.c/h to sound\mos6581.c/h. Modernized the MOS6581 device [Curt Coder]. Fixed memory leak (sound\mos6581.h) [Oliver Stoeneberg].
- 0.147u1            : Fixed SID crashes (sid6581.c/h) [Aaron Giles].
- 0.129u5            : Device-ized the SID code [Nathan Woods].
- 0.129              : Wilbert Pol cleaned up the SID interface.
- 0.128u7            : Wilbert Pol added running_machine parameter to the callback in the SID interface.
- 0.111u5            : Nathan Woods fixed memory leak in sound\sidvoice.c.
- 0.111u1            : Added sound\sid.c/h, sid6581.c/h, side6581.h, sidenvel.c/h, sidvoice.c/h, sidw6581.h and sidw8580.h. Added SID emulator [Peter Trauner]. Based on Michael Schwend's SID play. Noise generation algorithm is used courtesy of Asger Alstrup Nielsen. His original publication can be found on the SID home page. Noise table optimization proposed by Phillip Wooller. The output of each table does not differ. MOS-8580 R5 combined waveforms recorded by Dennis "Deadman" Lindroos.
- DRIVERS: (MESS) c64.cpp, c128.cpp, cbm2.cpp and vic10.cpp
- SOURCE: sound\mos6581.cpp


S27.73  Apple Sound Chip

- 0.262              : Use multibyte.h helpers (sound\asc.cpp) [AJR].
- 0.258              : Fixed half-full flag for all variants and add IRQ gate for Sonora/Aardbeg, gives smooth playback on all chip variants [R. Belmont].
- 0.230              : Added IMPERFECT_SOUND flag to Apple Sound Chip for now [R. Belmont].
- 0.225              : Converted ASC sound device to new callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.194              : Preliminary working but imperfect sound for maclc3 [R. Belmont].
- 0.154              : Fixed 0.153 regression that prevented several Macs from booting. Fixed asc_device::read [R. Belmont].
- 0.153              : Fixed ASC array out of bounds access [R. Belmont].
- 0.150              : Mac: Converted ASC to DEVCB2 IRQ output, some minor modernization [R. Belmont].
- 0.139u3            : Added emu\sound\asc.c/h.
- NOTES: Apple Sound Chip (ASC)
- DRIVERS: (MESS) mac.cpp
- SOURCE: sound\asc.cpp


S27.74  LMC1992

- 0.225              : Update LMC1992 sound to new stream callbacks [Aaron Giles].
- 0.155              : Fixed Clang build (sound\lmc1992.h) [Curt Coder].
- 0.142u2            : Added sound\lmc1992.c/h.
- NOTES: LMC1992 Digitally-Controlled Stereo Tone and Volume Circuit with Four-Channel Input-Selector.
- DRIVERS: (MESS) atarist.cpp
- SOURCE: sound\lmc1992.cpp


S27.75  Imagetek I5000

- 0.225              : Update I5000 sound to new stream callbacks [Aaron Giles].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.186              : Changed description to 'Imagetek I5000 Sound'.
- 0.149u1            : Added 'I5000' device.
- 0.148u4            : Sync fix (i5000snd_device::write_reg16) [hap].
- 0.145u8            : hap added savestates to Imagetek I5000 sound. okiadpcm.o is also used by i5000.
- 0.145u7            : Added sound\i5000.c/h. Preliminary Imagetek I5000 sound emulation. Fixed unending samples. Added 3bit ADPCM. Fixed 3bit ADPCM pitch. Added exponential volume table (sounds much better, music doesn't drown sfx anymore) [hap].
- NOTES: Imagetek I5000 Sound
- SOURCE: sound\i5000.cpp


S27.76  AN7395
- PCB: Panasonic AN7395S Spatializer IC (3-D Surround), SOIC20 (GTIClub)


S27.77  uPD934G

- 0.277              : Fixed play sample command (sound\upd934g.cpp) [Devin Acker].
- 0.262              : Correct channel mapping for play sample command (sound\upd934g.cpp) [Devin Acker].
- 0.251              : Use device_rom_interface instead of a read callback [Devin Acker].
- 0.250              : Preliminary support for ACCENT/MUTE [Dirk Best].
- 0.225              : Update uPD934G sound to new stream callbacks [Aaron Giles].
- 0.220              : Simplified some handlers [Osso].
- 0.196              : Added sound\upd934g.cpp/h. Preliminary uPD934G emulation [Dirk Best].
- NOTES: NEC uPD934G Percussion Generator
- DRIVERS: (MESS) cz230s.cppv and rz1.cpp
- SOURCE: sound\upd934g.cpp


S27.78  MP3

- 0.284              : Move rate changes outside of stream update (sound\lc82310.cpp). Fixed fatalerror when trying to change the sample rate while in stream_update. Note: Kills g13jnr [O. Galibert]. Source style cleanup after prev commit (sound\lc82310.cpp) [hap].
- 0.255              : Added sound\mp3_audio.cpp/h and sound\lc82310.cpp/h. Removed 3rdparty\minimp3\minimp3_ex.h. Added 'Sanyo LC82310 MP3 Decoder' device. Updated minimp3 to latest source. Added helper class to decode MP3 frame data (sound\mp3_audio.cpp), abstracting away minimp3 from devices. Added basic Sanyo LC82310 MP3 decoder emulation (sound\lc82310.cpp). Implemented save states for MP3 decoder [Windy Fairy].
- 0.210              : Added 3rdparty\minimp3\minimp3.h and minimp3_ex.h. Partial support for encrypted audio in Konami 573 digital I/O board (machine\k573dio.cpp) [Windy Fairy].
- NOTES: Minimalistic, single-header library for decoding MP3 (https://github.com/lieff/minimp3)
- DRIVERS: ksys573.cpp and namcos10.cpp
- SOURCE: sound\mp3_audio.cpp



S28.    Extern

S28.1   Cassette Tape

- 0.37b7             : Phil Stroffolino added Thief and NATO Defense.
- 12th July      2000: Phil Stroffolino added cassette tape sample support to the Pacific Novelty games (Shark Attack, Thief, NATO Defense).
- 27th March     2000: Phil Stroffolino sent in a preliminary Thief driver, but only attract mode works.
- NOTES: Journey (Bally Midway 1983) use a music cassette tape.
- GAMES: Pacific Novelty - Shark Attack (1980), Thief (1981), NATO Defense (1982)


S28.11  Clarion 809
- NOTES: Tic Tac Quiz (Sega/Gremlin 1977) use the Clarion 809 cassette player. The tape deck is automobile stereotype that plays in either direction. The unit has no rewind capability even though it is a reel-to-reel system.


S28.2   CD Audio

- 0.278              : Redbook routing fix for (MESS) sega\dccons.cpp [O. Galibert].
- 0.275              : Bulk replace "pce_cdrom" interface with "cdrom" (nec\pce_cd.cpp) [AJR].
- 0.272              : Updates and additions. More flexible API: You can set the start and length separately without forcing unpause/play start/etc. Data tracks are force muted, headphone users are safe. Added forward and reverse fast scan capability (sound\cdda.cpp) [R. Belmont].
- 0.263              : Use device_mixer_interface rather than using hard-coded speaker tags (nec\pce_cd.cpp) [cam900].
- 0.255              : Modernized CD/DA a little (sound\cdda.cpp) [O. Galibert].
- 0.253              : Added an actual write callback for audio playback end event. Fixed longstanding regression with get_channel_volume, rename it to get_channel_sample (sound\cdda.cpp). Implemented CDDA audio end event to (MESS) nec\pce_cd.cpp, fixes redbook repeat with emeraldd. Fixed CDDA get_channel_volume index overflow (nec\pce_cd.cpp) [Angelo Salese].
- 0.243              : Check for CD before last track and some Coverity software error (machine\megacdcd.cpp) [Robbbert].
- 0.230              : Return LBA position as currently playing LBA (sound\cdda.cpp) [Windy Fairy].
- 0.225              : Update CD/DA sound to new stream callbacks [Aaron Giles].
- 0.180              : Removed CD-DA volume trampolines [smf].
- 0.179              : Removed machine\matsucd.cpp/h. m_audio_ended_normally is set within the stream_update(), so update the stream before returning it (sound\cdda.cpp) [smf].
- 0.166              : Added 3rdparty\libflac\include\share\endswap.h. Backport libflac endian patch to not use winsock.h etc [Balrog].
- 0.157              : Moved lib\libflac\*.* to lib\libflac\libFLAC\. Moved some FLAC files around to match the distribution package structure [Oliver Stoeneberg].
- 0.154              : Fixed usage of uninitialized member in lc89510_temp_device (machine\megacdcd.c) [Oliver Stoeneberg].
- 0.148u5            : Modernised CDDA & discard buffered samples when starting to play to avoid audio glitches and timing issues (sound\cdda.c/h, emu\machine\matsucd.c, scsicd.c/h, stvcd.c, mame\machine\cd32.c, cdicdic.c, gdrom.c/h and megacdcd.c) [smf].
- 0.148              : Added cdda_get_channel_volume() function to CD-DA device. Fixed volume control display in PC Engine CD system [Angelo Salese].
- 0.147              : Added 'CD/DA' device (sound\cdda.c).
- 0.145u2            : Better management of FLAC block sizes, aiming to keep them around 2k samples. Increased CD sectors per hunk to 8 for better compression [David Haywood].
- 0.145u1            : Added new CHD codec [Aaron Giles]: CD-FLAC which knows how to shuffle CD data to more optimally use FLAC. Updated flac wrapper to implement a tell callback so FLAC can tell us how much we've decoded. Updated chdman to use CD-FLAC codec in preference over the existing codecs for CDs by default. Fail initializing the CD-FLAC codec if the hunk size is not CD-compatible. Centralize detection of existing output files. Add detection (require --force) for extracted files as well. Move checks outside of try/catch so that the files are not subsequently deleted. Rewrote SAMPLES as a modern device [Aaron Giles]. Updated all callers. FLAC reading is now done using the FLAC wrapper. There is now a samples_iterator class to centralize the logic for handling the sample list walking. Also redid the cheesy half-baked votrax device since it relied on some old samples-based handling. Until we have a real implementation, it would be good to route the various clients through the current one to at least wire it up properly, even if it just plays samples in the end. Will look into that shortly.
- 0.145              : Various wav/flac sample changes [David Haywood]: Remove hardcoded ".wav" sample extensions from within drivers. Update samples.c to check for both .flac and .wav extensions when loading a sample. Made sample loading failure a bit more verbose (various zips contained 0 byte samples, I assume to keep clrmame happy or something). Fixed memory allocation with 8-bit flac samples. WAV is not (yet) deprecated, rm warning that made it sound like it is [hap]. David Haywood fixed -verifysamples.
- 0.144u7            : Added FLAC (lossless audio) codec support plus experimental hooks in samples and chdman. Bumped up CHD-CD hunk size to get better compression ratios on both zlib and flac [David Haywood, R. Belmont]. Changed the way FLAC compiles so that it works like other external libraries, and also compiles successfully for MSVC builds [Aaron Giles]. Disable -createcdflac for now. The CHDs produced are not compatible with existing v4 CHD readers, so I don't want these out in the wild. We will need a version bump to add this support properly. I'll tackle this next (after fixing recent regressions). Changed the way FLAC compiles so that it works like other external libraries, and also compiles successfully for MSVC builds [Aaron Giles].
- 18th January   2012: David Haywood - One of the criticisms often made of MAME / MESS's CHD format is that it doesn't actually provide very efficient compression, especially when it comes to CD AUDIO data. I've had a number of people ask me if I can look into improving this, especially when you consider that in with the current format a complete Saturn set is almost 1TB, with a large portion of that being AUDIO. The reason it's inefficient is because it's using zlib's inflate algorithm for the blocks, blocks which are rather small to ensure that data is decompressed quickly. While this is fine for DATA (it's the same thing that ZIP files use) it's absolutely hopeless for AUDIO. There are dedicated audio lossless compressors out there, FLAC is a popular one. I've spent the last 4-5 days solid integrating support for this into the MAME / MESS tree, and extending the CHD format to not only support it's native blocks (hunks), but also reference to embedded streams via 'virtual hunks' which point at a stream, and allow the actual FLAC codec to do the seeking and decoding work for this. By doing this I can achieve a good level of compression with FLAC, far better than trying to split it into CHD hunks due to the lower overhead, and improved ability of the compression algorithms to predict how data best compresses. I also still get good speed decoding, as the FLAC format is designed to be quick to seek, and has built in seektable support of it's own which I'm levering. I have to say FLAC is an absolute joy to work with, the API does everything you can expect, the documentation is great, and it's very good at letting you know if something is wrong. (the only issue I had with the documentation / API was with the seektables, whereby calling things in the wrong order / wrong time during encoding could cause data to be overwritten without throwing an error). I've also added support to the MAME SAMPLE interface to playback files from FLAC sources, this should allow the recently dumped tape loops to be compressed much better than they are now (they're uncompressed PCM .wav files). The other possibilities for this are endless, -wavwrite could also output FLAC data if support was added, MESS could potentially load cassette based software from FLAC images. It's an incredibly useful codec to have around. I've uploaded my first pass of this code Here (link offline for the time being, there is definitely still an error). This should be considered ALPHA SOFTWARE and I won't be held responsible if you end up destroying your CHDs with it. I'm currently in the process of batch converting many images and haven't found a broken case yet, but still, it's in testing. While I'm happy with the current format extensions and CHD format created it could change in a final version, you have been warned. This code has been submitted to R. Belmont, who is currently making some portability fixes. FLAC is designed to be portable, so this shouldn't be too much of a problem, so fingers crossed it can be sorted out soon. Usage is simple, I've added an additional -createcdflac commandline option which will use the FLAC routines when compressing AUDIO. If you already know how to use CHDMAN then it's simple enough. I've added support to the MAME SAMPLE interface to playback files from FLAC sources, this should allow the recently dumped tape loops to be compressed much better than they are now (they're uncompressed PCM .wav files).
- 0.139u4            : Added a per-channel volume setting function to sound/cdda [Barry Rodewald].
- 0.139u3            : Added a set volume function for CD-DA [Angelo Salese].
- 0.130u1            : Modified cdrom.c to expose metadata read/write functions, and changed chdman to use them.
- 0.112u3            : smf added state saving to emu\sound\cdda.c.
- 0.110u3            : Aaron Giles cleaned up cdrom.c. Removed audio implementation and relocated code into sound\cdda.c.
- 0.93               : Changed description to 'CD/DA'.
- 0.80u3             : Added sound\cdda.c/h. R. Belmont added Preliminary CD-ROM support for CHDMAN. CDROM emulation primitives, including Red Book audio playback. Audio tracks on CDs are not compressed on a CD image at present (or more accurately they're gzip compressed, which is useless). The plan is to use FLAC at some point.
- 15th January   2004: R. Belmont - CD audio tracks now work for CHD-CDs, so Susume! Taisen Puzzle-Dama has background music.
- NOTES: CD-DA "Red Book" audio sound hardware. Relies on the actual CD logic and reading in cdrom.cpp
- DRIVERS: cdi.cpp, firebeat.cpp, jaguar.cpp, konamigv.cpp, ksys573.cpp, stv.cpp and twinkle.cpp
- SOURCE: sound\cdda.cpp



S29.    Extra

- 12th April     2001: David Graves added the subwoofer emulation to darius2d and fixed a few other problems.
- 0.35b2             : Sound fade timer ports in the CPS1 games (see Willow's Test mode for an example) [Paul Leaman].



S29.1   MB87078

- 0.204              : Refactor and correct data_w/r. Only update channel latch when dsel is low [hap].
- 0.202              : Removed MB87078 MCFG macros [Ryan Holtz].
- 0.153              : Converted MB87078 to DEVCB2 [Osso].
- 0.150              : Modernized MB87078 device [Osso].
- 0.146u1            : Implemented the MB87078 volume control in audio\taito_en.c [Phil Bennett].
- 0.136              : Fabio Priuli converted Fujitsu MB87078 volume controller to be a device and updated taito_b.c to use the new code (it's the only driver emulating this chip atm).
- 0.37b14            : Added machine\mb87078.c/h. MB87078 emulation, used by some Taito B games [Jarek Burczynski].
-  7th March     2001: Jarek Burczynski added MB87078 (an electronic volume control) emulation to the Taito B driver.
- NOTES: The Fujitsu MB87078 is a 6bit 4channel electronic volume control. An excerpt from the datasheet about the chip functionality: "A digital signal input controls gain every 0.5 dB step from 0dB to -32dB. Gain variable range: 0 dB to -32 dB by 0.5dB or -infinity, Gain variable range is expanded to connect two channels serially (0 dB to -64 dB), Each channel gain can be set respectively, Test function is provided (to confirm internal data), Data is initialized by reset signal (all channels are set to 0dB) and Logic I/O is TTL comatible". There are 6 digital data input/output pins and DSEL pin that selects the group (there are two) of internal registers to be read/written.
- PCB: MB87078P, SOIC24 (Gp500, Landgear, Spacedx)
- DRIVERS: galastrm.cpp, groundfx.cpp, namcos22.cpp, superchs.cpp, taito_b.cpp, taito_f3.cpp, taitojc.cpp and undrfire.cpp
- SOURCE: machine\mb87078.cpp


S29.2   Toshiba

S29.21  TC9176
- PCB: Toshiba TC9176P High Efficiency Electronic Volume, DIP16 (CPS2)

S29.22  TC9185
- PCB: Toshiba TC9185P Electronic Volume Control IC, DIP20 (CPS2)


S29.3   AN5836
- PCB: Matsushita AN5836 DC Volume and Tone Control IC, SIL12 (NintendoSuperSystem)


S29.4   BA3121
- PCB: Ground Isolation Amplifier/ Noise Eliminator, SOIC8 (Gamshara, Mrdrilr2)


S29.5   SSM2047
- PCB: SSM2047 = Sound generator circuit (Botss, F15se)

S29.51  SSM2300
- PCB: SSM2300 = Sample and hold amplifier (F15se)

S29.6   TEA6320
- PCB: Philips TEA6320T Sound fader control circuit (Area51)

S29.7   09R81P
- PCB: The 09R81P IC is a kind of samples system controller, driving the OKI M5205 in Lucky 74. The IC is connected to Z80 through ports 0x00 to 0x05. Transmit the status (/busy) to port 0x00 (bit 0). Load the sample start offset from ports 0x00 & 0x01 and the ending offset from ports 0x03 & 0x04, then trigger the sample when the bit 0 of port 0x05 is activated.




S30.    Audio Amplifier


S30.1   Fujitsu

        MB3615       (Shadfrce, Agress)
        MB3712       5.7 Watt Power AMP, SIP8 (Champbwl, Tripool)
        MB3722       (Hcrash)
        MB3730       (Rezon, Thepit)
        MB3731       SIP12 (40love, Daikaiju, Tokio)
        MB3733       Power Amp IC (SegaSystem16B)
        MB3735       15W Power AMP with dual output used for stereo sounds (Sci, Viofight, Nastar)
        MB3771       Power Supply Monitor with Watch Dog Timer (i.e. Reset IC) (Raystorm), MB3771, MB3771F, 3771, DIP8, SOIC8 (Evilston, Gollygho, Gunbird2, Luckywld, S1948II)
        MB3773       DIP8 (Gstriker, VGoalSoccer, Capcom ZN1, SegaSystem16B)
        MB3790       (Drifto94)
        MB4391       Voltage Controlled Amplifier, DIP16 (Buckrog, 005)


        WIP:

        MB3773
        - 0.202          : Removed MB3773 MCFG macros [Ryan Holtz].
        - 0.200          : There is no reset input, so resetting the status of the variable tracking the external signal makes no sense. However we should probably restart the timer on all resets (instead of just at start/watchdog timeout), to avoid a watchdog reset if you press F3 at the wrong time [smf].
        - 0.187          : Added MB3773 device to aerofgt.cpp and gstriker.cpp [AJR].
        - 0.149          : smf finished modernizing the MB3773.
        - 0.138u4        : smf converted MB3773 from a legacy device to a C++ device.
        - 0.131u4        : Fabio Priuli converted Fujitsu MB3773 to be a MAME device.
        - 0.84           : Added machine\mb3773.c/h. Added MB3773 emulation.
        - NOTES: Fujitsu 'MB3773 Power Supply Monitor' with Watch Dog Timer (i.e. Reset IC)
        - PCB: Fujitsu MB3773, DIP8 (Gstriker, VGoalSoccer, Capcom ZN1, SegaSystem16B)
        - DRIVERS: aerofgt.cpp, aquarium.cpp, gcpinbal.cpp, gstriker.cpp, model1.cpp, segaxbd.cpp, segaybd.cpp, sigmab98.cpp, taitogn.cpp, taotaido.cpp and zn.cpp
        - SOURCE: machine\mb3773.cpp




S30.2   Hitachi

        HA13001      Dual 5.5W Power amplifier IC (Nintendo Super System, NeoGeo, Gotcha)
        HA13118      18W audio amplifier (Loderndf, rdft2)
        HA1366       HA1366W audio amplifier (Hyperspt, Trackfld)
        HA1368       (Cafedoll)
        HA1377       HA1377A (Combh)
        HA1384       MA1384 (Hparadis)
        HA17408      (Kabukiz)
        HA17555      (Wwjgtin)
        4AK16        Hitachi 4AK16 Silicon N-Channel Power MOSFET Array (Konami-HornetSystem)



S30.3   Japan Radio Co.

        JRC2902      Quad Operational Amplifier, SOIC14 (Polystar, Konami-M2)
        JRC2904      Dual Low Power Op Amp, SOIC8 (NintendoSuperSystem)
        JRC3404      Low Power Quad Op AMP, DIP8 (Champbwl)
        JRC4560      Op Amp IC, DIP8 (Ejanhs, Rdft, Viprp1), 4560D (Brvblade, rdft2)
        JRC4556      JRC 4556-15268B  Audio Support? (Xmen)
        JRC4741      JRC4741 (Psikyo PS3-V1 hardware)



S30.4   Mitsubishi M51516
        - 0.218: Added audio\nl_konami.cpp/h. Implemented KONAMI filters using netlist into Galaxian driver. This change improves accuracy and scalability. Added some notes about M51516L amplifier [Couriersud].
        - NOTES: Mitsubishi M51516 Single-Channel Audio Power-Output Amplifier (Xsleena, Agress, Amidar)
        - DRIVERS: galaxian.cpp
        - SOURCE: audio\nl_konami.cpp



S30.5   National Semiconductor

        LM324        LM324N, Amplifier (Riot, Rockclim, Sichuan2, Spaceg, Trucocl, Vanvan, Youma), GL324 (Twinadv), CA324E (Ghostb), UA324PC (Phoenix)
        LM339        Embargo
        LM340        LM3401N (Invaders, Ozmawars), LM340T12 (Phoenix)
        LM348        Carnival
        LM358        Low Power Dual Operational Amplifier, SOIC8 (Cbaj, Gp500, Glpracr, Sfex2, Surfplnt), LM358N (Snookr10), LN358N (Ttchamp)
        LM377        LM377N sound (Mrdo)
        LM380        LM380N amp chip (Shuttlei, Spaceg, Chameleon 24-in-1)
        LM383        LM383T is a 5 pin audio Amp (Pntnpuzl)
        LM385        LM385 is a adjustable Micropower Voltage Reference Diode, SOIC8 (CPS3)
        LM393        (Unknown SEGA game)
        LM458        458 (Shuttlei)
        LM613        LM613 (Maxforce)
        LM741        LM741CN (Hustler, Mplanets)
        LM833        Dual Audio Operational Amplifier, DIP8 (CPS2, Rvschool), ST Microelectronics LM833N Low Noise Audio Dual Op-Amp, DIP8 (CPS3)
        LM1203       Video out - DIP28, CRT output/drive PreAMP & Comparitor, LM1203N (Namco Classics Vol.1/2 (1995/6), Mega Touch 3/5)
        LM1877       (Astinvad)
        LM3900       LM3900N (Cyclshtg, Headoni, Ladyfrog, Spaceg, Victnine)
        LM7805       LM78L05 (Maxforce), LM7805CV (Drgnwrld)
        LM7809       LM78L05 (Maxforce)



S30.6   NEC

        uPC159       NEC UPC159A High Speed Operational Amplifier (Buckrog) from manual and datasheet
        uPC324       uPC324C (Hcrash, Mjkojink, Wrofaero, Mjkojink, DDragon, SegaSystem16b), NEC C324C (Wrofaero)
        uPC624       uPC624C (Buckrog)
        uPC844       NEC uPC844C Quad High Speed Wide Band Operational Amplifier, DIP14 (PGM-System, Titlef, Model1)
        uPC1241      uPC1241H (HatchCatch, Pipeline, 3in1semi)
        uPC1242      uPC1242 (Shocking), UPC1242H (Sdmg2), uPD1242H (IQblock)
        uPC1318      uPC1318 (Armchmp2)
        uPC3403      NEC uPC3403 High Performance Quad Operational Amplifier, DIP14 (Vmetal), MC3403 (Gunforce, Pairs), 3403 (Pairs), NEC PC3403C (Csilver)
        uPC4064      UPC4064 (Titlef, SegaSystem32) 4064 (Lastfort)



S30.7   NJMxxxx

        NJM2060      (Beastrzr)
        NJM2100      (Raystrom, Taito GNET-System)
        NJM3414      NJM3414A 70mA Dual Op Amp, SOIC8 (Gp500, Mrdilr2, NamcoSystem12), Y3414B (Ghostb)
        NJM5532      NJM5532 DIP8 (GTIClub, Polystar)



S30.8   Other

        4558         4558 Operational Amplifier, SOIC8 (NamcoSystem11, Kabukiz, NeoGeo, NCV1/2), KA4558 (Xfiles, Kdynastg), GL4558 (Sichuan2), C4558C (Csilver)
        AN7130       Single-Channel Audio Power-Output Amplifier (Taxidrvr)
        CA741        Intersil CA741 High Gain Operational Amplifier (Jchan)
        CA810        CA810AQM RCA Solid State, 7 Watt Single-Channel Audio Power Amplifier with Thermal Shut-Down (Invaders)
        GL358        GL358 N16 Dual Operational Amplifier, Isup 2.0mV (Topshoot)
        IR3702       Sharp IR3702N Quad General Purpose Op Amp (Buckrog)
        KA22065      Samsung KA22065 4.6 Dual Power AMP (Pasha2)
        LF351        Fairchild LF351N Single/Input Operational Amplifier (JFET) (Turbo)
        LMC6484      CMOS Quad Rail-to-Rail Input and Output Operational Amplifier (Nbajamex, Harley)
        MC33274      Motorola MC33274 High Performance Operational Amplifiers + Comparators (Sidebs, Sidebs2, Landgear)
        MJM2904      MJM2904 (Koikois)
        NE5532       Dual (Low Noise) Operational Amplifier from Philips or Fairchild, NE5532, DIP8 (Glpracr, Gradius4, CPS2), NE5532AN (Sscope2), NJM5532 (Gticlub)
        NTE1423      NTE1423 5.7W, SIP8, Power Amplifier (Ghosthunt, Tutstomb)
        TBA820       ST Microelectronics TBA820 1.2W Audio Amplifier (Poker)
        TCA940       Thomson TCA940E AF Amplifier (Astrof, Ozmawars)
        TS271        TS271CN  Programmable Low Power CMOS Single Op-amp (Skattv)



S30.9   Philips

        TDA1510      (Crzrally)
        TDA1515      (Kdynastg)
        TDA1518      (Titlef)
        TDA1519      Philips TDA1519A Dual 6W Stereo Power Amplifier, SIL9 (Crysking, JumppopAMP, PGM system), Philips TDA1519A 22W BTL/Dual 11W Audio Power Amplifier IC, SIL9 (Lastfght)
        TDA1554      tda1554q amplifier (Area51, Maxforce)
        TDA2002      TDA2002 sound (Headon2, Passsht)
        TDA2003      TDA2003 sound Cyclshtg, NYcaptor
        TDA7240      TDA7240A is a 20W Bridge Amplifier (Nbajamex, Mk3)



S30.A   Sanyo

        LA4445       (Rockrage)
        LA4460       Sanyo 12W Power Amplifier, SIL10 (Djboy, Baraduke, Bruckrog, Bonkadv, SnowBros)
        LA4705       Sanyo LA4705 15W 2-channel Power Amp, SIP18 (MrDriller2, NamcoSystem12)
        LA6324       LA6324N = High-performance quad operational amplifier, DIP14 (Fantasy)
        LC7535       Electronic Volume/Loudness Control with Serial Data Control


        WIP:

        LC7535

        - 0.285: Use device_sound_interface. Removed custom volume callback. Added option to use a logarithmic gain scale. Use explictly sized variables (sound\lc7535.cpp). Updated Dragon Gun for new LC7535 interface and support switching the gun oki output between gun speaker and main speaker [Dirk Best].
        - 0.190: Added sound\lc7535.cpp/h. Emulated LC7535-based volume control for Dragon Gun board based games [Dirk Best].
        - NOTES: Electronic Volume/Loudness Control with Serial Data Control
        - DRIVERS: deco32.cpp
        - SOURCE: sound\lc7535.cpp/h


S30.B   Toshiba

        TA7222       5.8 Watt Audio Power Amplifier, SIP10 (Headoni, Vmetal)
        TA7252       Toshiba TA7252AP 5.9W audio power amplifier (Pkgnshdx)
        TA7630       NOTES: In Buggy Challenge the 7630 chips controlls the MSM5232 sound chip outputs (bass/treble, volume/balance). - GAMES: Buggy Challenge (Taito 1984), Forty-Love (Taito 1984), The FairyLand Story (Taito 1985), - SOURCE: drivers\40love.cpp, flstory.cpp, msisaac.cpp, nycaptor.cpp, buggychl.cpp
        TA7900       Toshiba? TA7900S (Gberet)
        TA8030       TA8030S - WatchDog Timer, might be controlled by JP1 ??? (Dfeveron)
        TA8139       TA8139S (11beat, Mtetrisc)
        TA8201       Toshiba TA8201 18W BTL x 2-Channel Audio Power Amplifier, TA8201 (CPS3, 11beat, Mtetrisc)
        TA8205       TA8205AH (Nslasher), TA8205 (Nitrobal, Schmeisr)
        TA8210       Audio AMP (Seta SSV system)
        TA8225       Toshiba TA8225L 45W BTL Audio Amplifier, ZIP17, TA8225H (Model1), TA8225L (CPS2)


        WIP:

        TA7630

        - 0.191: Changed description to 'Toshiba TA7630P'.
        - 0.190: Added sound\ta7630.cpp/h. Added 'TA7630 Device' device. Wrote a new device for TA7630, hooked it up to 40love.cpp, buggychl.cpp, msisaac.cpp and flstory.cpp [Angelo Salese].
        - NOTES: Toshiba TA7630P Dual. Volume / Balance / Tone (Bass/Treble). A set of discrete filters that applies to sound chip outputs. According to the datasheet, two channels are outputted from here after it applies all of the filters.
        - PCB: TA7630 (Victnine)
        - DRIVERS: 40love.cpp, buggychl.cpp, flstory.cpp and msisaac.cpp
        - SOURCE: sound\ta7630.cpp



S30.C   TL0xx

        TL062        ST Microelectronics Dual Low Power Operational Amplifier (DIP8), (Pasha2, Model1)
        TL074        JFET Lo Noise Quad OP Amp (Sci, Goundfx, Nastar, Viofight)
        TL082        (Legendoh)
        TL084        (Buckrog, Flytiger, Gollygho, Luckywld, Sega-System16B)



S31.    Potentiometers

S31.1   VR
- NOTES: Potentiometer for sound volume/brightness/...
- PCB: VR1-4 (Spaceg), VR1/2/3 (Headoni), VR1 Volume Pot (Mrdrilr2)

S31.2   RV
- PCB: RV1/2, RV3/4 (Mermaid)

S31.3   DS1267
- PCB: DALLAS DS1267 digital potentiometer (Botss, F15se)



==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


PROTECTION

  0.    The Decapping Project

  1.    Alpha Electronics
  1.1   ALPHA-8201
  1.2   ALPHA-8301
  1.3   ALPHA-8302
  1.4   ALPHA-8303
  1.5   ALPHA-8304
  1.6   ALPHA-8333
  1.7   ALPHA-8505
  1.8   ALPHA-8511
  1.9   ALPHA-8713
  1.A   ALPHA-8921
  1.B   HD44801

  2.    Atari
  2.1   Slapstik
  2.2   SLOOP

  3.    Capcom
  3.1   CPS2
  3.2   CPS3

  4.    DALLAS
  4.1   DS1204
  4.2   DS1207
  4.3   DS5002FP

  5.    Fujitsu
  5.1   MB88xx
  5.11  MB8841
  5.12  MB8842
  5.13  MB8843
  5.14  MB8844
  5.15  MB8851
  5.2   MB14241
  5.3   F2MC-16
  5.31  MB9061x
  5.32  MB9064x
  5.33  MB91F155A

  6.    Intel
  6.1   4004 / MCS-40
  6.2   4040
  6.3   8008
  6.4   MCS-48
  6.5   8021
  6.6   8022
  6.7   8031
  6.71  80C31
  6.8   8032
  6.81  80C32
  6.9   8035
  6.A   8039
  6.A1  M58715
  6.B   8041A
  6.B1  8741 / MCS-48
  6.B2  Taito 8741
  6.C   8042
  6.C1  8742
  6.D   8048
  6.D1  8748
  6.E   8049
  6.E1  8749
  6.F   8051 / MCS-51
  6.F1  80C51
  6.F2  80C51GB
  6.F3  Philips MX10EXA
  6.F4  8052
  6.F5  80C52
  6.F6  80C562
  6.G1  8744
  6.G2  8751
  6.G3  87C51
  6.G4  8752
  6.G5  87C52
  6.G6  87C552
  6.G7  87C751
  6.H   8089
  6.H1  P8098 / MCS-96
  6.H2  P8798
  6.I   89C51
  6.I1  89C4051
  6.J   89C52
  6.K   89C55
  6.L   90C32

  7.    Komami
  7.1   Konami ESC

  8.    Microchip PIC-MCU
  8.1   PIC16
  8.11  PIC1650
  8.12  PIC16C54
  8.13  PIC16C55
  8.14  PIC16C56
  8.15  PIC16C57
  8.16  PIC16C62x
  8.17  PIC16C70
  8.18  PIC16C74
  8.19  PIC16C84
  8.1A  PIC16F84
  8.2   PIC17
  8.21  PIC17C43
  8.22  PIC17C44

  9.    Mitsubishi
  9.1   M740
  9.11  M50734
  9.12  M5074x
  9.13  M50747
  9.14  M509xx
  9.2   M30624
  9.3   M37450
  9.4   M37640

 10.    Motorola
 10.1   M68701
 10.2   M68705
 10.21  M68705 MCU rom
 10.22  MC68HC705
 10.3   MC68HC11

 11.    Namco
 11.1   Cxx
 11.2   C68
 11.3   C69 (M37702)
 11.4   C70 (M37702)
 11.5   C71
 11.6   C74 (M37702)
 11.7   C75 (M37702)
 11.8   C76 (M37702)

 12.    National Semiconductor
 12.1   COP400
 12.2   COP410
 12.3   COP420
 12.4   COP421
 12.41  COP424
 12.5   COP440
 12.6   COP444

 13.    Nichibutsu
 13.1   1411M1
 13.2   1412M2
 13.3   1413M3
 13.4   1414M4
 13.5   NSC8105

 14.    Nintendo
 14.1   Nintendo VS System (VSNES)
 14.2   RP5H01
 14.3   Aleck64 (Nintendo64 based hardware)

 15.    Sega
 15.1   Sega encryption
 15.2   Sega encryption 2

 16.    Seibu
 16.1   COPX
 16.11  COPDX
 16.12  COPX-01
 16.13  COPX-02
 16.14  COPX-03

 17.    Texas Instruments
 17.1   TMS32010
 17.2   TMS32015
 17.3   TMS32016
 17.4   TMS32020

 19.    Other
 19.1   Program Protection
 19.2   Random Number Generator
 19.3   Opcode encryption
 19.4   DL57S22
 19.5   Toshiba T5324
 19.6   ASIC
 19.7   CAT702
 19.8   Address lines scrambling
 19.9   Dongle
 19.A   Custom security
 19.A1  Epoxy block
 19.A2  BBX
 19.B   ATMEL AT90S2313
 19.C   NEC uPD78081
 19.D   Signetics 8X300

 20.    PLD (Programmable Logic Device)
 20.1   PAL (Programmable Array Logic)
 20.2   PLA (Programmable Logic Array)
 20.3   GAL (Gate Array Logic)
 20.4   CPLD (Electrically Erasable Complex Programmable Logic Device)
 20.5   FPGA (Field Programmable Gate Array)
 20.6   Other

..................................................................................................................................................................................................................................



P0.    The Decapping Project

- 23rd December  2019: CAPS0ff - We heard there was a laser glitch attack against Intel 87C51FA. The basic idea is to randomly flip transistors with a laser until you find one that happens to unlock the chip. After a little prodding (100 mW green, 45 degree angle) we found an area that unlocked the firmware! This resulted in a good dump for Semicom Hatch Catch without any encryption applied. Let's dive a little deeper into our laser glitching approach. First, we program a sample with a known pattern and secure it. Next, we create a script that repeatedly reads the chip, saves the current read, and also displays the current read. While this is running, we sweep a laser around the die, focusing near EPROM, until valid looking data shows up. We then tweak the laser until we get a stable readout.
-  8th January   2011: Smitdogg - We've sent more chips to the doc for decapping and I got a scanner so I should have a bunch of scans on the artwork board soon.
- 26th December  2010: Dr. Decapitator - Work has begun on the following chips from The Decapping Project Status Page: #13, #17, #20, #21, #22, #23, #38, #51, #88, #89, #107, #109, #114, #123, #124, #125, #134, #200 and #201. More info to come later... The remaining 68705's are on hold at the moment because they were damaged and require special parts to fix which haven't yet been acquired.
- 27th June      2010: Guru - We've successfully decapped more than 25% of the chips that have been sent to the lab. See my Decapping Status page for more info and the list of other wanted items. If you can help to donate funds towards future decapping please visit Dr. Decapitator's Laboratory. Thanks!
- 0.131u2            : Angelo Salese added notes to several drivers indicating specifically that an MCU is needed for decapping.
- 30th July      2008: Guru - Thanks to Dox who sent a few more chips to be decapped. These chips are from Taiwan Chess Legend, Elvis, Kyros, Cow Race, D-Day, Double Dealer, Raiden II, Angel Eyes, Arkanoid, Croupier and Heavy Barrel.
- 11th June      2008: Guru - Speaking of decapping, I've just about got it all together, sort-of. I've just completed a BIG _preliminary_ update with everything that I've sorted out so far.... at least until I find more things to add to the list! There's so much stuff here that I keep finding things to decap(!?!). There's some minor work involved removing the chips and some serious work involved keeping track of everything and updating the decapping page (plus, remember I work full-time....) so there's still a few weeks/months before it will all go out. I'm also planning to add pics of every chip. In the meantime probably more stuff will arrive! There's at least a couple more wanted chips coming from Japan in the next big box that will arrive in 3-4 weeks and some other devs are going to send out some more chips soon. You might notice a lot of chips that are unknown and may or may not be important. I've decided to just grab everything that _could_ be useful for emulation purposes and send it out and see what happens. There's no guarantees that any of it will be successful, but we must try. Will collecting the decapping chips ever end?
- 27th February  2008: Guru - I've struck a deal with a company that does IC security work to process most, if not all of the micro-controllers that I'm currently holding. This includes the following chips and possibly more that may come my way in the near future: BSMT2000, All remaining Namco custom MCUs (i.e. 59xx, 62xx etc), NMK004, Sega Model 1 TGPs, Namco customs C70, C75 & C76, Sound MCUs from Vimana and Teki Paki, QSound chips from Capcom ZN1 and CPS1/2), Kaneko Beast (DJ Boy, B Rap Boys), Kaneko Mermaid (Heavy Unit), C-Chip from Bonze Adventure, Sound MCUs from Fix Eight and Knuckle Bash, MCU's from Victorious Nine, Xain'd Sleena/Solar Warrior, Alcon, Prebillian, Tokio and possibly others that I can find, MCU's from Joshi Volleyball, Meikyuu Hunter G, Super Qix, Gladiators, Tatakae! Big Fighter and possibly others, Every PIC16C621A that I have here (maybe 20, used by GDROM-based games), Sound MCU from Dynamic Shoot & Moero Proyakyuu Home Run, MCU from Kyuukyoku Tiger, MCUs from NBA Jam Extreme and Primal Rage II, MCU from NAOMI/Hikaru/HNG64 JVS I/O board and probably two or three other chips from a few MAMEdevs. There will also be the possiblity of a few others including Gaelco's suicidal DS5002 from World Rally at a later date in a separate analysis project. This is a special Guru-deal with some conditions. To get this work done by a professional company would cost about $80k-$100k. This includes decapping and micro-photographing of maskROM and decapping plus UV-zapping of protection bits and readout of internal EPROM. We can wait for an unknown period of time for one or two other people to try their attempts at about 10% of these with no guarantee of success. Make no mistake, most of these are beyond even the above average set-up. We're talking BIG dollars to process most of these chips. Or we accept the special Guru-deal and get it all for $7500. That's an amazing price when you consider to process one PIC16C621A costs $1200 per chip! On top of that, this company is also MAME-friendly and supports our cause.... one of the reasons why we're getting such a cheap price. Oh and they were influenced by my Guru-Charm, of course. They are also able to extract the ROM directly from the IC substrate so in some cases high-magnification of the die and tedious bit-analysis may not even be required..... they can suck the bits right off the chip directly! Of course, there's a problem. There's always a problem! I can cover $2500 of that, but to move forward I need to come up with the rest of the bucks. I'm hoping for assistance from out there in internet-land. As I said, this could be the most important day in emulation history providing the funds can be achieved. If you can help, simply click the Paypal Donation button to the right. Thanks!
- 27th March     2007: Guru - Here's the next chip we've decapped in a little more detail (Namco 50XX). This shows the full chip die at approx 20X magnification (reduced to minimise the file size, the real image is 5X bigger) and is roughly pasted together from 6 separate images for your viewing pleasure.
- 10th March     2007: Guru - I've been thinking about how to defeat the protected MCU's that use EPROM. My theory is to unlock the chip by exposing only the protection fuse to UV light, which should then allow the chip to be read as an unprotected MCU (for example 68705P5's on many early Taito games, and Intel 8751 MCU's used on Sega S16/S18 and others). Of course, there is a catch. It requires a high quality microscope that can be connected to a PC. There is such a device available. In fact many models are available on eBay from a retail seller. Not cheap though! This one is probably the minimum required. It can magnify up to 90X and has a 3.3MP CCD camera. Those camera/mag. specs are the same as the pics I got from the Japanese lab which were used to successfully re-create the code from the Namco 54xx MCU. We'll still need the Japanese lab for decapping and photographing maskROM-based MCUs, but this type of thing can't really be done by someone else, it needs a hands-on approach and lots of time. This method just might work well enough to allow reading the chip in it's unprotected form. According to MCU protection specialists (http://www.cl.cam.ac.uk/research/security/tamper/), the method I have described is one of the well known methods used to defeat EPROM-based MCUs. We could do the same, given the equipment. The only problem now is lack of funds.
-  5th February  2006: With the successful 'decap dumping' of the MCU from Bubble Bobble, it got us (MAMEDev) thinking if we could do this with a few more chips. Thus the 'Decapping Project' was born.
- WWW: http://www.mameworld.info/gurudumps/decap/index.html
- MESS Dumping Project: http://www.bannister.org/forums/ubbthreads.php?ubb=showflat&Number=27098#Post27098



P1.    Alpha Electronics

P1.1   ALPHA-8201

- 0.272              : Added hmcs412/414/424 (hmcs400\hmcs400.cpp) [hap].
- 0.270              : Added hmcs400\hmcs400.cpp/h, hmcs400\hmcs400d.cpp/h and hmcs400\hmcs400op.cpp. Added Hitachi HMCS400 CPU skeleton device, disassembler and fill in most of the opcodes. Added I/O ports, logerror for unmapped ports, irq controller, pinout reference, timers, standby/stop mode and NVRAM [hap].
- 0.261              : Removed unneeded zerofill [hap].
- 0.221              : Removed cpu\alph8201\8201dasm.cpp/h and alph8201.cpp/h [hap]. Simplified some handlers (machine\alpha8201.cpp) [Osso].
- 0.193              : Added cpu\alph8201\8201dasm.h.
- 0.179              : Fixed disassembly window. Sync pc & curpc [smf]. Changed the Alpha 8x01 disassembler to use std::ostream internally (cpu\alph8201\8201dasm.cpp) [Nathan Woods].
- 0.168              : Added machine\alpha8201.c/h. Renamed device to prevent name clash during modernization (L is for Legacy). Added ALPHA-8201 protection emulation and hooked it up to shougi.c [hap].
- 0.149u1            : Modernized ALPHA-8x01 cpu cores [Wilbert Pol].
- 0.128u6            : Pointer-ified the ALPHA-8201 CPU core [Aaron Giles].
- 0.125u7            : Atari Ace fixed a few build problems with the ALPHA8201 CPU core.
- 0.123u6            : Alpha Denshi major update [Nicola Salmoria]: Fixed Alpha 8201/830x MCU simulation. All hacks from the equites driver removed. Fixed equites restart position after going underground. Fixed hvolume, splndrbt 2 players. Removed hacks from exctsccr2. Fixed CPU gameplay in shougi. Added dump of Alpha 8201 MCU to games that use it (the ROM isn't used yet, HMCS44 CPU core needs to be written first).
- 0.109u5            : Aaron Giles converted the alph8201 disassemblers to the new format and added step in/out support where it was obvious.
- 0.104u8            : Added cpu\alph8201\alph8201.c/h and 8201dasm.c. Tatsuyuki Satoh added emulation of the Alpha 8201/8301 MCU, and connected it to champbbj, champbb2, talbot, shougi, shougi2 and exctsccr.
- NOTES: The Alpha-8x0x isn't a real CPU. It is a Hitachi HD44801 4-bit MCU, programmed to interpret an external program using a custom instruction set. Shougi (Alpha 198x) use a custom MCU ALPHA 8201 (DIP42). It's connected to the RAM that is shared with the first CPU.
- DRIVERS: champbas.cpp, equites.cpp and shougi.cpp
- SOURCE: cpu\alph8201\alph8201.c + machine\alpha8201.cpp



P1.2   ALPHA-8301

- 0.179              : Fixed disassembly window & flags. Added boilerplate comments [smf]. Removed alpha 8201 fakecpu notes [hap].
- 0.168              : Changed description to 'ALPHA-8301L'. Renamed device to prevent name clash during modernization (L is for Legacy) [hap].
- 0.149u1            : Modernized ALPHA-8x01 cpu cores [Wilbert Pol].
- 0.104u8            : Tatsuyuki Satoh added emulation of the Alpha 8201/8301 MCU, and connected it to champbbj, champbb2, talbot, shougi, shougi2 and exctsccr.
- DRIVERS: equites.cpp
- SOURCE: cpu\alph8201\alph8201.cpp



P1.3   ALPHA-8302

- 0.126u5            : Nicola Salmoria updated Alpha 8302 MCU simulation to match newly dumped internal ROM. Added the ROM to Champion Baseball 2.
- 12th September 2004: Pierpaolo Prazzoli added Exciting Soccer II protection (still at least one issue because you can't control the player).
- NOTES: The Alpha-8x0x isn't a real CPU. It is a Hitachi HD44801 4-bit MCU, programmed to interpret an external program using a custom instruction set. Alpha-8302 has an expanded instruction set, backwards compatible with Alpha-8201. The main purpose of the MCU is to control the program flow. This tables are actually subroutine addresses, wich get pushed onto the stack one after the other. Basically then the program runs and when it returns on one of these subroutines, it expects to land on the proper 'next' subroutine. All tables built manually from the analisis of the bootleg set.
- GAMES: Exciting Soccer (Alpha Denshi 1983) uses the ALPHA 8302 MCU.
- SOURCE: machine\exctsccr.cpp
- PCB: Alpha 8302 (Exctsccr)


P1.4   ALPHA-8303

- 0.127u1            : Nicola Salmoria added 8303 ROM to Bull Fighter, Equites, Exciting Soccer II and Splendor Blast and updated MCU simulation to match the new findings.
- 28th August    2008: Corrado Tomaselli dumped the MCU8303 rom.
- NOTES: The 8303 controlled sound.
- GAMES: Alpha Denshi - Bull Fighter (1984), Equites (1984), Splendor Blast (1985)
- SOURCE: equites.c - Lack of 8303/8404 tech info. All MCU results are guessed.
- PCB: Alpha 8303 44801B42 3M 3 (Bullfgtr), ALPHA-8303 (Splndrbt), 8303 (Liberate), unknown 8303 (Shootout), ProSoccer, KamikazeCabbie, BoomerRang


P1.5   ALPHA-8304
- PCB: ALPHA-8304 (Hvoltage)


P1.6   ALPHA-8333
- PCB: 8333 = SY 6502A (Liberate)

P1.7   ALPHA-8511
- PCB: ALPHA-8511, 40 pin (Skysoldr, TimeSold, Jongbou)

P1.8   ALPHA-8505
- 0.221              : Dumped Alpha-8505 MCU for Bingo Time [Team Europe]. Use the new Alpha-8505 MCU for Gekisou (Japan) and High Voltage, seems to work [hap].
-  3rd April     2020: TeamEurope - Last year i bought a big lot of gambling boards from an local operator. Inside this lot were four complete boards from an unknown game marked as BINGO TIME on an included sheet. After all roms got dumped and submitted to MAME, it was pretty fast discovered that it fits perfectly into the "equites.cpp" driver. The game also booted but got stuck. If you look closer at the board you will find the ALPHA-8505 chip. This chip is from the HMCS40 chip-family and we even already have dumps from the ALPHA-8303 in MAME. These were only possible because Tatsuyuki Satoh built the 8201 dumper back in 2003-2008. This dumper uses the LTP-port of an WindowsXP computer. While i built that dumper already in 2019, for dumping the ALPHA-8505, i did not get good dumps with it. That way i thought the 8505 is different to the other supported chips. As the four boards were on my shelf since months and i saw it mostly every day, i got interested in it again the last few days and rebuilt the complete dumper from scratch today. I also used another old WindowsXP machine with the dumper. This time i got better results, the program ran through all pages of the testmode and within some seconds i got a 8kb file from it. Comparing that file with the existing 8303 dump it mostly matched and only had 169 differences! I redumped all four of my 8505 chips and always got the same dumping result! After sending the dump to MAME, i shortly after got the confirmation that the dump is good and the game boots through the romcheck. The game is marked as working now, but without sound. Someone has to take a closer look at the sound-emulation, as this is currently not supported. As we will need this dumper for some other currently missing ALPHA-8*** mcu's also in the future and as it's more complicated to solder the complete dumper by hand, i designed a little board. The PCBs are already in production and should arrive here in the next few weeks, making it really easy to reproduce this dumper for more people in the world. (You only will need a WindowsXP machine with an real (no USB) LTP-port). For the external +5v power it has a Mini-USB-Port which you can just connect to the usb-ports from your computer. Thanks to Ivan for adding the game to MAME and to Tatsuyuki Satoh for making this dumper. Another rare game completely preserved.
- DRIVERS: equites.cpp


P1.9   ALPHA-8713
- PCB: ALPHA-8713 (Goldmedl)


P1.A   ALPHA-8921
- 0.225              : Added machine\alpha_8921.cpp/h. Added 'Alpha denshi ALPHA-8921' device. Device-fied PRO-CT0 for protection, aka ALPHA-8921 (in some later 80s Alpha Denshi PCBs) or SNK-9201 [cam900].
- NOTES: Alpha denshi ALPHA-8921 emulation: Also known as SNK PRO-CT0 and SNK-9201. This chip is sprite ROM data serializer or optional security device. Used in some later 80s Alpha Denshi hardware (ex: Gang Wars). Some early Neogeo MVS motherboards and AES cartridges. Also integrated in NEO-ZMC2 and NEO-CMC. Reference: https://wiki.neogeodev.org/index.php?title=PRO-CT0
- DRIVERS: neogeo.cpp
- SOURCE: machine\alpha_8921.cpp


P1.B   HD44801

- 0.271              : Set page start to 0x3f (hmcs40\hmcs40d.cpp). Added hmcs46/hmcs47 [hap].
- 0.247              : Block interrupt after conditional jump [hap].
- 0.222              : Fixed savestate regression (hmcs40\hmcs40.cpp) [hap].
- 0.221              : Simplify internal timer. Changed stack op [hap].
- 0.211              : Removed port enum (cpu\hmcs40\hmcs40.h) [AJR].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.193              : Added cpu\hmcs40\hmcs40d.h. Overhaul dvdisasm [O. Galibert].
- 0.189              : Workaround related to MT06638 (Exception when using -debug); this disables a poorly implemented disassembly feature to prevent assertion failures and crashes when debugging drivers using HD44801 CPU (cpu\hmcs40\hmcs40d.cpp). Get rid of next_pc tables (cpu\hmcs40\hmcs40d.cpp) [AJR].
- 0.186              : Fixed possible issue with irq/lpu (hmcs40\hmcs40.cpp) [hap].
- 0.173              : REDD/SEDD param is only 2 bits (hmcs40\hmcs40.cpp) [hap].
- 0.168              : Replaced ALPHA-8201/8301 CPU3 with HD44801 in champbas.c, equites.c and shougi.c games.
- 0.160              : Added cpu\hmcs40\hmcs40.c/h, hmcs40d.c and hmcs40op.inc. Added Hitachi HMCS40 series MCU core [hap].
- NOTES: Hitachi HD44801. The Alpha-8201/830x isn't a real CPU. It is a Hitachi HD44801 4-bit MCU, programmed to interpret an external program using a custom instruction set.
- DRIVERS: champbas.cpp, equites.cpp, shougi.cpp and splendor.cpp
- SOURCE: cpu\hmcs40\hmcs40.cpp




P2.    Atari

P2.1   Slapstik

- 0.233              : ALT_COMMIT alt4 must be done with /cs [O. Galibert]. Fixed regression in clones Tetris (bootleg set 2) and (bootleg set 3) (drivers\atetris.cpp). Note: Though of course none of the bootlegs have the actual SLAPSTIC, at least some appear to have simulated it using TTL and PLDs [AJR].
- 0.229              : Full rewrite, using infrastructure we did not have previously [O. Galibert].
- 0.227              : Removed legacy init/reset, use the start device ones. Make the interface even nicer. Removed legacy stuff and reduced logging. Between a guess, the opcode going through the memory and the cycle-perfect 6502 the kludge is not needed anymore. Removed access68k and space as a secondary consequence. The Slapstic in Marble Madness seems to trigger on more than the banking zone (machine\slapstic.cpp and drivers\atarisy1.cpp). Added some more information [O. Galibert].
- 0.222              : Changed includes\slapstic.h to machine\slapstic.h. Transfer legacy slapstic handling routines from machine\atarigen.cpp to device (machine\slapstic.cpp). Eliminated address_space argument from legacy read/write handlers (machine\slapstic.cpp) [AJR].
- 0.205              : Updated Slapstic information based on observations of Pit Fighter sets & build dates [Brian Troha].
- 0.175              : Removed the slapstic direct update handler, which hasn't been necessary since direct access has been enhanced to work correctly on handlers, years ago (machine\atarigen.cpp) [O. Galibert].
- 0.171              : One small step toward slapstic modernization. Make chip number part of device configuration, not init param. Correct mainpcb slapstic number in racedrivpan. Removed many unused slapstics. Hopefully no regressions [AJR].
- 0.156              : Added 'Atari Slapstic' device. Get rid of some global stuff by making Atari Slapstic a device [David Haywood].
- 0.123u5            : Aaron Giles changed slapstic management to always install an opbase handler to more aggressively catch code executing in the slapstic region. Updated all drivers to separate the slapstic region of ROM into a different ROM section from the fixed ROM.
- 0.122u4            : Atari updates [Aaron Giles]: Added save state support to slapstic. Modified slapstic code to support address range mirrors.
- 0.96u3             : Aaron Giles simplified additive path in slapstic code. This should not impact any games that use it, but it is worth verifying (see atarisy1+2.c, atetris.c, harddriv.c and starwars.c games).
- 0.71u3             : Added some Slapstics used in Europe / Japan (machine\slapstic.c) [Aaron Giles].
- 18th September 2002: Aaron Giles fixed the remaining issues with the Rampart slapstic behaviour.
- 15th November  2001: Aaron Giles added another version of Road Blasters that uses a different Slapstic chip.
- 0.53               : Added includes\slapstic.h.
- 30th July      2001: Aaron Giles finally ironed out the last Slapstic bugs, fixing Pit Fighter and Rampart for good.
- 21st June      1999: Nicola Salmoria finally fixed Empire Strikes Back's slapstic issues, and the game itself is playable!
- 22nd June      1999: Ernesto Corvi fixed the slapstic problems in Rampart. Nicola Salmoria fixed the slapstic problems in Xybots, and fixed Empire Strikes Back from hanging at the highscore screen.
- 20th June      1999: Nicola Salmoria and Ernesto Corvi fixed the slapstic issues in Gauntlet and Gauntlet 2.
- 0.31               : Added machine\slapstic.c.
- NOTES: The Slapstic was a security chip made by Atari, which was used for bank switching and security in several coin-operated video games from 1984 through 1990. The slapstic generally sits between the CPU's address bus and one of the program ROMs. The son of slapstik is a protection chip called SLOOP. The Slapstic chip is a socketed DIP20 on the board and the number on the chip will be 137412-1xx.
- DRIVERS: atarig1.cpp, atarisy1.cpp, atarisy2.cpp, atetris.cpp, cyberbal.cpp, gauntlet.cpp, harddriv.cpp, rampart.cpp, starwars.cpp and xybots.cpp
- SOURCE: machine\slapstic.cpp


P2.2   SLOOP

- 0.175              : Removed unneeded sloop direct update handler (drivers\atarig42.cpp) [O. Galibert].
-  6th February  2002: Aaron Giles re-submitted Zsolt Vasvari's and Jim Hernandez's Buck Rogers sample support, fixed the Blaster line fill and added the missing ASIC65 source file.
- NOTES: The SLOOP (or "SLOOPstic") is a follow-on chip to the slapstic. It provides a similar type of security, but is programmed onto a GAL6001, rather than a custom part. It was created because Atari was running out of slapstics to use in their games, and the original masks for the slapstic had been lost by the company that manufactured them. A separate FAQ for this chip is planned for the future.
       - Road Riot 4WD (1991): (Aaron Giles) The core hardware is pretty similar to Hydra, but the emulation suffers from the lack of understanding of a custom ASIC on the board. Apparently this ASIC is used for complex math operations, and improper emulation of it leads to incorrectly drawn roads and crashes. It is likely this game also uses a SLOOP (son-of-slapstik) chip for protection. The sound board is a standard Atari 6502, YM2151 and ADPCM board.
       - Guardians of the 'Hood (1992): (Aaron Giles) Runs on the same hardware as Road Riot 4WD, but seems to have a much simpler chip in place of the custom ASIC. On the other hand, it is still unplayable due to a lack of understanding of the SLOOP protection chip.
       - Space Lords (1992): (Aaron Giles) This is the first Atari game to use a 68020 processor. Other games to follow on similar hardware include Moto Frenzy, T-Mek, and Primal Rage. The video and sound hardware is quite similar to the previous games (Guardians of the Hood and Road Riot 4WD). However, the SLOOP chip appears to have gone away, only to be replaced by something equally sinister. Space Lords uses this chip to produce the palette for the sprites, which is why all the screenshots have incorrect colors. The protection chip is also used to produce some in-game parameters, making it nigh impossible to play without accurate emulation.
- GAMES: Atari G42 System - Guardians of the 'Hood and Road Riot 4WD



P3.    Capcom

P3.1   CPS2

- 0.112u2            : Many more CPS2 keys added. Removed all XORs and support for them from MAME [Nicola Salmoria, Andreas Naive].
- 17th February  2007: Nicola Salmoria - CPS2 not much left to do: When I originally wrote the key searching program, that was on the assumption that the key for the second Feistel network was 96 bits long. Each (E,D) pair reduces the key space by a factor of about 2^16, so to isolate the correct key with good confidence one would need at least 96/16 = 6 (E,D) pairs. The big problem is finding those pairs. Remember that they must be at compatible addresses, that is addresses whose bottom 17 bits are the same. This is a serious limitation, because the code of several games only covers a range of 0x80000 bytes, which would give a maximum of 4 pairs at any address. For the Super Puzzle Fighter 2 games, the range is just 0x40000 bytes, giving just 2 pairs per address. One can find hundreds, even thousands of of (E,D) pairs, but if they are not at compatible addresses they are of no use to find the key using this attack. However, now we know that the key actually has only 64 significant bits, some of which are repeated. I therefore rewrote the program to take that into account. This means that only 4 (E,D) pairs are needed to isolate the key. Also, I made several important optimisations that I missed the first time around, like caching intermediate results and speeding up the s-boxes calculations by using precalculated tables (this last optimisation also made into MAME so the decryption when loading a game is now faster). The end result is a program that is orders of magnitude faster than the previous one. Now it takes just 15 seconds to find the key given 8 (E,D) pairs. With 5 pairs, which was just plain impossible before, it takes 5 minutes. With 4 pairs, 35 minutes. These improvement made it simple to find most of the remaining keys, even for games that didn't have a matching revision already decrypted (most notably some of the Steeet Fighter Zero versions). But there's more: the program is now fast enough to go one step further, and look for the key with just 3 pairs. Of course 3 pairs are not enough to isolate the right key: they only reduce the key space by about 2^48, therefore leaving about 2^16 keys which are compatible with the data. Once a 64-bit key for the second Feistel network is selected, the compatible 64-bit master keys can then be easily generated, and used to verify other (E,D) pairs at different addresses. This allows to find the correct key in less than one day, and I had to use this extended attack for a couple of the most problematic games. In the meantime, Andreas Naive has been busy implementing the attack he had described on his blog, and was able to find the keys for two of the Super Puzzle Fighter 2 games. Unfortunately, the attack failed on the third. Work is still in progress on that one, and there is some hope that the key will eventually be found. The only other games that are missing a key are the two CPS2 versions of Mega Man. There is no decrypted CPS2 version of that game to compare with, and the CPS1 version seems to be too different to be able to find good pairs.
- 0.111u5            : Nicola Salmoria removed XORs from almost all CPS2 games in place of proper emulation of the encryption.
- 23rd January   2007: Guru - Here's a few pics of the very first custom chip that I sent to a professional Japanese IC decapping company that we (MAMEdev) are using to help us with some MAME-related things. Hopefully if this is successful, more will follow and also hopefully talented hardware devs like JROK will be able to make replacements for it to repair real PCBs. You may also be wondering why we're doing this instead of using some other people who frequent the 'boards' who have offered to do this kind of thing for free? The answer is fairly simple.... apart from the amount of time it takes to get this done, the level of communication is somewhat 'sporadic' and so far offers to supply other chips to them have been ignored. We requested pics of some CPS2 ICs that were said to have been decapped and so far nothing has surfaced (over a month has passed since then). Doing it this way gives us more control over what we achieve and ensures the work is done in a timely manner. Apart from that, the plan to get this IC decapped has been in the works for several months, so we might as well use the professional IC decapping company whenever possible because the amount of ICs we need to decap is possibly too much work for someone to do in their spare time for free.
- 21st January   2007: Nicola Salmoria - CPS2 Key Bit Order: As previously mentioned, the 64-bit keys I'm currently using should be the same as the hardware ones, except for a fixed permutation of the bits. The permutation is actually irrelevant as far as the algorithm is concerned, since it is already taken into account when generating subkeys. The difference that it does make, however, is that there are strong suspicions that some of the keys are not random numbers, so what looks like random gibberish currently would show some order if we had the correct permutation. Take the ssf2 versions for example. There are currently 6 different versions supported: World, USA, Asia, Japan, Tournament World, Tournament Japan. Here are the keys (in a different order): 3D9E1E15A58C32CE, 3599DF35AD98284C, B74433502F4653D7, 8758E3923FFA1A50, F0AE3D08420DD6BF and 6260014FD857F7A7. There is something immediately obvious about those keys: they all contain exactly 32 0s and 32 1s. When picking one random 64-bit numbers, the likelihood of this happening is about 1 in 10, so it's ok. But the likelihood of it happening for SIX numbers is about 1 in 1 million! So we can be pretty sure that those keys are not random numbers. What is one particularly simple sequence that has exactly 32 1s? Well, of course 0123456789ABCDEF. And sure enough, after looking at the bits for a while and applying an appropriate permutation, here is what the above keys become: 0123456789ABCDEF, 1032547698BADCFE, 45673210CDEFAB89, 67451032FEDC98BA, 89ABDCEF45672301 and CDEFBA9823016754. Looks much better doesn't it? Though there's no way to tell how close it is to the real thing.
- 19th January   2007: Nicola Salmoria - CPS2 Moving Slowly Now: The improved attack works, and I've been able to recover a few more keys, but it takes a lot of computation time--several hours per game. I've also experienced some failures, e.g. I could find the key for dimahoo but not for gmahou. This might have been because of a false positive when looking for pairs with the complementation property, so now I'm trying again with a different pair. Since the searches take so long, experimenting isn't easy. On the plus side, I've applied the improved attack also to some games for which XOR files were not available, and it worked in a number of cases--though it failed in many others. One of the new versions supported is mshb, which I is the first Brazilian version of a CPS2 game to work. Andreas has published details on a theoretical attack using differential cryptanalysis which looks promising. If Andy's calculations are correct, it should allow to retrive the key for the three most problematic games: spf2t, spf2xj, and spf2ta. It does require a lot of (E,D,k) triplets, something in the order of 2^16-2^17, which is a bit steep, but we should be able to do that in a few cases. One thing to note about my attack, which I might not have explained clearly, is that it requires a remarkably small amount of data: it has worked for many games with just 7 (E,D) pairs. The problem is that those pairs must all be at the same address (as far as the encryption is concerned; that is, bits 1-16 of the address must be the same). Those 7 pairs allow to retrieve the 96-bit key for the second round at that address, and once that is known, the 64-bit master key can be found in less than 1 second, without having to know ANY other (E,D) pair at any address. Unfortunately for game like spf2t, whose full encryption range covers just 2 repetitions of an address, we are never going to have 7 pairs so the attack will never work.
- 17th January   2007: Nicola Salmoria - CPS2 The Fight Continues: I've finished going through all the games previously supported by MAME using XOR files, and generating keys using this attack (http://mamelife.blogspot.com/2007/01/how-to-bruteforce-cps2.html). The attack needs a minimum of 7 (E,D) pairs at some address in order to work, though with just 7 pairs it takes several hours to find the key. Most of the games provided at least 8 pairs, a few 7, so the attack worked. On 11 games the attack didn't work. Three of them only provide 2 pairs, so there's no way for the attack to work--a different approach will be needed. The others provide 4 pairs, and I'm now trying to still perform the attack, using a new trick. Remember the complementation property? For every address A, we know that exists another address A1 such that D(X, A) = D(X ^ 0xffff, A1) ^ 0xffff. The problem is that we don't know A1. We can search it, however, using the XOR data. Pick an address, look at the four (E,D) pairs associated to it, and then see if at another address there is a pair (E ^ 0xffff, D ^ 0xffff). That way we can put together the information from the two addresses, raising the number of pairs from 4 to 7, barely enough to run the attack. There's a possibility of false positives when doing this, so avoid all pairs where E or D are 0x0000 or 0xffff, because those values are very common and make the probablity of a false positive much higher. In theory this trick should work, though it will require some luck and a lot of time. The holy grail remains an attack which could use pairs from different addresses; that would be the only way to retrieve the key for the games that lack XORs.
- 14th January   2007: Nicola Salmoria - CPS2 Getting Closer: The correlations between the 96-bit keys of the two Feistel networks were crucial in getting the s-boxes with 4 or 5 inputs "in sync"--that is, make them idential to the real ones apart from a fixed XOR or permutation applied to the whole box. Eventually, I ended with a layout which I'm 99.9% sure is equivalent to the real one. We cannot know the exact contents of the real s-boxes without getting them from the actual hardware, but the current ones should be matematically equivalent. The result is here: http://xoomer.alice.it/nicola.salmoria/cps2crptv2.zip. The most notable news is that the key is now reduced to 64 bits, and the one we are currently using should be identical to the one used by the hardware, apart from a fixed permutation of the bits. Finding the real permutation would be nice, but obviously that's not something we can determine from the algorithm, since the order of the bits of the key is completely irrelevant. What is interesting to note is that the keys used by some games don't seem to be random. If they were random one would expect there to be around 32 0s and 32 1s, but sometimes this isn't the case. E.g.: pzloop2: 3332206a0077f829; mshj: 01c0c951370f4c80; dstlka: 04048b4e2a498879; ringdest: 0405541367806575 and cybotsj: 0404821534388354. Of these, the last three literally scream "I'm not a random number!". Guessing the right bit order to make something appear, of course, is another matter. Some of the watchdog values contain birth dates, e.g. cmpi.l #$19660419,D1, so I expect the same thing might be happening here. Also, it makes sense for the pzloop2 one to be more regular than the others because it's third party game. On the key extraction front, things are going reasonably well. The brute force attack described in the previous article is working decently on most games, however for some of them the available data isn't enough. I'll have a more precise list once I've finished going through all the games. After that, we'll need to devise a better attack if we want to get the missing keys. The discovery that the key is only 64 bits might help to construct a better attack, though at the moment I don't have many ideas. The fact that the algorithm is divided in two parts, with the output of the first one affecting the key on the second part, complicates things.
- 12th January   2007: Nicola Salmoria - How to bruteforce CPS2: I couldn't devise an attack using differential cryptanalysis and the XOR files. The fact that the second 96-bit key changes with the address makes thing more difficult, and I couldn't think of a way to effectively use data from different addresses. The XOR files give us no more than 8-16 (E,D) pairs at a given address (remember that the encryption only uses the low 16 bits of the address). We have no choice of what data we have, so we have to make the best of it. So the idea I had is to use a meet in the middle brute force attack which exploits a weakness in the s-boxes. Remember also that the fn round functions are made of 4 s-boxes each. These are the 16 s-boxes, with their inputs and outputs. f2b1 is the weakest link. It has only four inputs, 0246. To get those four inputs, we need just three boxes in round 1: f1b1, which outputs 67, f1b3, which outputs 14, and f1b4, which outputs 02. We don't need f1b2, which outputs 35. So if we start from the ciphertext and run it through the first two rounds of the Feistel network, scanning all 224 possible keys for f1b1, f1b3, f1b4, and f2b1, we'll get all possible values for bits 46 of R2. Now let's start from the plaintext instead, and go up. If we scan all 26 keys for f4b2, we'll get all possible values for bits 47 of R2 again. Now we impose that bit 4 calculated in these two ways is the same, and given enough (E,D) pairs we have a huge pruning of the valid keys. From experiments, at least 8 pairs are needed for the attack to work effectively, but with 12 it's faster. When we have a match on bit 4, we start adding more key bits, 6 or 12 at a time. First f4b4, to match bit 6 of R2. Then f1b2 and f2b3, to match bit 7 of R2. At this point, we are most likely already left with a single key, so adding more key bits doesn't increase the computation time. The important thing is to do it 6 bits at a time, in order to avoid unnecessary calculations. Soon enough, we have reconstructed the whole 96-bit key. This will be the key at a specific address--of course, before running the search we'd have scanned the whole data and selected the address with most different pairs, in order to make the attack more effective. After the 96-bit key at one address is found, the rest is easy. Since the 96-bit key is modified by the 16-bit result of the first FN in a fixed way, we just use brute force to find the correct 16-bit value at every address, and then we have a full subkey table as when we had the full 8GB tables at the beginning. The process is working reasonably well, it's taking me 20-40 minutes to find the 192-bit key for a game. It could be made faster, probably. I've done some games for which I had more data, and Razoola was kind enough to provide additional data that will help with many other games. I'm not yet sure that the attack will work on all games, but it surely will on a good percentage. Some very good news after obtaining more keys is that I found strong correlations between the first and second 96-bit keys, so they are effectively the same key, just permuted. This will also allow to fix the order of the subtables in the s-boxes of the first FN, in the same way I did for the second. Should we consider ourselves finished after that? Not yet: whether it will be possible to generate keys for games for which we lack XOR data is an open problem. In that case, the best we can expect to do is to match the startup code from a different version of the game, so we'll have several (E,D) pairs at consecutive addresses, and no more than one pair at a given address. A new attack will have to be devised in order to use that kind of information. Hopefully the discovery that the first and second 96-bit keys are correlated will help.
- 0.111u3            : Andreas Naive and Nicola Salmoria replaced CPS2 CHDs with preliminary decryption function.
-  9th January   2007: Nicola Salmoria - CPS2 coming to MAME: I've submitted to MAMEDEV the code to replace the 4GB CHDs with 192-bit keys. It contains all the information needed to understand the algorithm, including the s-boxes. There is still a lot of uncertainty about the contents of the s-boxes. They do their job, but since they are different from the originals they also affect the key. Using the real s-boxes might make correlations between the key bits more apparent, if they exist (anyway, having only 7 keys to look at, there's not enough data to speculate on any kind of correlation). I'm hoping that it will be possible to extract the s-boxes contents from photos of the decapped CPS2 chip. That would be an important step forward in the accuracy of the emulation. Now the next challenge is finding the keys for the other CPS2 games that have XOR files but not full tables. I have some ideas, but it doesn't look simple. We have a lot of (E,D,k) triplets for those games, but unfortunately not many once you fix k (the 96-bit key used in the second FN), and that would be the most important part. Note that we don't have to find the whole 192-bit key all at once. Once the second 96-bit was found, then we could easily use brute force to get the 16-bit key seed at every address, and therefore easily find the first 96-bit key.
-  8th January   2007: Razoola - Nicola Salmoria of MAME Dev seems to have worked out the rest of the CPS2 algo (though there is still some s-boxes to complete), to quote his blog... * Take the 16-bit address and a 96-bit key and run them through the first Feistel network, to produce a 16-bit subkey. * Take the 16-bit ciphertext, 16-bit subkey, and another 96-bit key and run them through the second Feistel network, to produce the 16-bit plaintext. Our congratulations go out to him, again to Andreas Naive and also Charles MacDonald who all played a role to get to this point today. Looking back at the way things have gone from the first XOR release some six years ago (after the discovery of the main weakness in the system), we know some people were quite unhappy at our unwillingness to have this algo known for emulation (Statement of 7th Janurary 2001). It was always our intention to hold back information to help achieve this until the system was commercially dead (our view was 3 years after the last game released). It is very satisfying to know we achieved this as believe it or not Janurary 2007 is just past that three year mark (Hyper Street Fighter II was released in December 22nd 2003). I will update the encryption page with the details once Nicola has fully documented the Algo within MAME.
-  8th January   2007: Nicola Salmoria - CPS2 Fundamental Breakthrough: Today I realised why I was having problems with the correlations between subkey bits, where some bits had to be derived from the others not only using XOR, but also AND and OR. The reason was again in the s-boxes that only have 4 or 5 data inputs instead of the full 6. Those boxes contain 2 or 4 subtables, and the order of the subtables inside the box or the order of the bits inside each subtable isn't particularly important when decrypting a single address, because they can always be compensated by appropriate bits in the subkey. However, when putting all subkeys together, those things became important. E.g. I could be finding that when using subtable #3 in a box, then two of the inputs had to be inverted. To fix this, I had to rearrange the subtables inside the s-boxes to make everything in sync. The result was excellent. Previously, some of the correlations among the 96 bits were overly complex, taking up to 4 bits at once. Now every bit is directly correlated to another. The only exception is the bits that correspond to the "empty" inputs of s-boxes that take only 4 or 5 data inputs. What this means is that all 6 inputs of all s-boxes always receive the XOR of three sources: either a data bit, a key seed bit, and a global key bit; or two key seed bits, and a global key bit. That's only the beginning of the good news, though. After fixing the s-boxes, I could attack again the first part on the algorithm on the assumption it was a 4-round Feistel network, and indeed it was. So the algorithm turns out to be like this: Take the 16-bit address and a 96-bit key and run them through the first Feistel network, to produce a 16-bit subkey. Take the 16-bit ciphertext, 16-bit subkey, and another 96-bit key and run them through the second Feistel network, to produce the 16-bit plaintext. So now, for the first time, I would be able to produce a program that algorithmically decrypts one of the game for which we have full tables, without using any table. It's not yet time to celebrate, though: the s-boxes for the first Feistel network still have to be properly determined, and this might require having access to some more games. Once that is done, producing keys for games that we have complete tables for will be quite simple. Finding keys for games for which we don't have full tables, however, is an entirely different matter. As said above, we are potentially dealing with a 192-bit key here; it's possible that the key is smaller and the bits are reused, however since we don't know how they would be, we have to treat it like a 192-bit one. For a key of that size, obviously brute force is out of the question; and while the XOR tables do provide some information, it's probably not the kind of information that would allow to use the differential cryptanalysis techniques we'd need.
-  7th January   2007: Nicola Salmoria - CPS2 Won't Be Tamed That Easily: Some people thought we were almost finished with the CPS2 algorithm, but this doesn't seem to be the case. True, at least the 4GB tables could now be replaced with a single 128kB table, but that's still not how the hardware works, and it wouldn't be possible to generate proper keys for the games that are missing the full 8GB tables, which is the main concern. From the full tables, we can extract a 96-bit subkey for every address. These wouldn't be the actual keys used by the hardware, however I think me and Andy have agreed that they are, apart from a fixed XOR and bit permutation that wouldn't change from game to game. So we can forget about this step of the decryption for the time being, and move on. The problem now is to understand how the hardware generates the 96-bit subkey starting from the address and from the global key. I have determined that only 16 bits are needed to generate the 96-bit subkey; this was sort of expected, but it isn't without problems. We can generate only 94 bits of the subkey starting from those 16 bits and using only XOR operations. The remaining 2 bits need AND/OR operations, something which I have no explaination for at this point. That was the least of the problems anyway. The major hurdle at this point is that the mapping from address to 16-bit key seed is very far from trivial. The scheme should be as follows: Take 16-bit address, N-bit global key, and generate a 16-bit key seed using an unknown algorithm. Take 16-bit key seed, M-bit global key, and generate 96-bit subkey using an unknown algorithm. Take 16-bit ciphertext, 96-bit subkey, and generate 16-bit plaintext using the algorithm we have discovered. I think it would make sense for the algorithm in step 1. to be another 4-round Feistel network. If this is the case, things are quite harder than before. To break the other Feistel network, we could rely on complete knowledge of ciphertext-plaintext relationship. Now we can't: we only have a vague idea of what the 16-bit key seed could be. If we could rely on a 16-bit value except for a constant XOR and permutation, it wouldn't be a problem, since that wouldn't change the nature of the Feistel network. Unfortunately, we don't have that luxury. Let's see that with an example. Let's say that the first algorithm generates a 4-bit key seed, abcd, which is expanded into the 6-bit subkey ABCDEF this way: A = a; B = a XOR b; C = a XOR c; D = b XOR c; E = b XOR d; F = b XOR c XOR d. We don't know anything about abcd, all we see is ABCDEF, but we need to guess what abcd looks like. So we notice that D = B XOR C; F = A XOR C XOR E; and we decide that a' = A; b' = B; c' = C; d' = E; so we would have A = a'; B = b'; C = c'; D = b' XOR c'; E = d'; F = a' XOR c' XOR d'. This all works as far as generating the subkey from the seed goes, the problem is that abcd and a'b'c'd' are two completely different numbers! We have that a'b'c'd' = abcd XOR aab; so this isn't simply a XOR with a constant value, it's a variable modification of the number. And this is something that the Feistel network cannot handle.
-  6th January   2007: Nicola Salmoria - CPS2 Subkeys: I said earlier that I was going to post the program to extract subkeys from a CHD, and the subkey lists for a few games, however after extracting the subkeys I found important relationships between the subkey bits so I'll have to work on that first. A subkey consists of 24*4 = 96 bits. There are 65536 subkeys, so the total is 786kB of data. What I found that one bit of the subkey is constant, while 59 can be derived from the others with a XOR (which is constant for all 65536 addresses, but changes from game to game). So this hints at a 64-bit global key, while the independent subkey bits drop for now at 96-1-59 = 36 bits.
- 19th December  2006: Nicola Salmoria - CPS2 notes, part 5: In part 1 i showed some constant values in the table that shows how many times flipping a bit in the ciphertext flips a bit in the plaintext. But there's more than that. It seems that there are more properties which are true for all games, regardless of the key (see table). So in total there are 2x4x2x2x4 = 128 combinations. Each combination is used by exactly 256 tables. Note the symmetry of it all. 16 values are affected, related to 2 bits of the ciphertext and 8 bits of the plaintext. This suggests that the algorithm might work on the data 8 bits at a time, or even only 4 bits at a time. The regular behaviour could be caused by a step, at the beginning or at the end of the algorithm, that doesn't use the key. Another thing we can do is check which of the 128 combinations corresponds to each memory address, and look for a way to correlate the two. Unfortunately there doesn't seem to be a simple way to do that.
- 19th December  2006: Nicola Salmoria - CPS2 notes, part 4: I have to stress that there is NO progress being made in breaking the encryption. The things I am showing in these notes have been known for over a year and haven't lead to any breakthrough. Hopefully, a public discussion of these properties could generate some valuable feedback. There also isn't any kind of competition against the people that are attacking the CPS2 encryption in hardware. On the contrary, I think that the hardware path will be the only way to gather more information about the algorithm. In these notes I have shown several properties that are always true, regardless of the key. This means that they are properties of the algorithm itself, and therefore are hardcoded in hardware. For example, there almost surely are fixed substitution boxes which could be extracted from the custom CPU. If an algorithm is reconstructed by studying the CPU, we can also test it against the known properties, regardless of the key. If it doesn't match, then the algorithm isn't right. Once an algorithm fitting the properties is found, we can start looking for the key.
- 18th December  2006: Nicola Salmoria - CPS2 notes, part 3: In part 1 we were flipping bits in the ciphertext, and seeing what happened to bits in the plaintext. We can do the opposite, of course, and there's something unexpected in the results. I'll show the total number of times the bits change (in hex) instead of percentages, to make the point more visible (see table). The values highlighted in orange are the only two that are constant in every table (there were four in the inverse table). But the values highlighted in red are the most interesting. They are not constant--they can vary among a few possible values. But the sum of the two values in each column is constant, and it's always 0x10000. Why? I have no idea.
- 18th December  2006: Nicola Salmoria - CPS2 notes, part 2: The complementation property was an important discovery--and not just because it reduces the size of the tables in half. Still, we haven't taken full advantage of it yet. Let's recap the basics of the CPS2 encryption first. Inputs: 16-bit value stored in ROM; 16-bit address (bits 1-17 of the physical address) key of unknown size, different for every game Outputs: 16-bit decrypted value. Let's call D(X,A,K) the decryption of value X at address A using key K. The complementation property says that for every A there is exactly one A1 such that D(X,A,K) = D'(X',A1,K) where x' is the complement of x. This finding is important because it shows that A has an algorithmical effect on the encryption. In Sega's FD1094 CPU, the key for every address is just stored in a huge table. If the CPS2 CPU worked in the same way, the complementation property wouldn't happen. This isn't too much of a surprise: with the Kabuki CPU, we had already seen that Capcom preferred a complex algorithm with a small key, while Sega preferred a simpler algorithm with a huge key. Unfortunately we don't yet know how to calculate A1 given A. It varies from game to game so it must be a function of the key. The complementation property isn't unheard of, even in strong ciphers, so it isn't necessarily a weakness in the algorithm. For example, DES (http://en.wikipedia.org/wiki/Data_Encryption_Standard#Minor_cryptanalytic_properties) has it. In that case, it reads D(X,K) = D'(X',K'). In general, the complementation property indicates that there are probably XOR operations happening, which cause the complement operation to cancel out. Let's see this with an example: consider a substitution function f, and an algorithm such that d = e XOR f(e XOR k), if we take the complements we have e' XOR f(e' XOR k') = e' XOR f(e XOR k) = (e XOR f(e XOR k))' = d' of course this is a very simple example. Note that x' doesn't have to be the complement in this case: you can define it as e.g. x' = x XOR 1, and it will still work. So the CPS2 algorithm obviously isn't that simple. A more realistic example would be a Feistel network (note that DES is an example of a Feistel network). If you define the Feistel network as Li = Ri-1 and Ri = Li-1 XOR f(Ri-1 XOR Ki-1). It should be easy to see how the complementation property would ensue. The idea of the CPS2 encryption being a Feistel network is tempting, however I don't think this is the case, because I would expect the diffusion to be much better than what we have seen in part 1.
- 17th December  2006: Nicola Salmoria - CPS2 notes, part 1: Since the finding of the complementation property (sfzj_049e38[x] ^ 0xffff == sfzj_05ee0c[x ^ 0xffff]  => 8GB / 2 is still 4GB) almost one year ago, there has been no progress at all on the CPS2 encryption. I'm going to explain here some of the (remarkably few) things we know about the encryption. A common misconception is that the decryption tables look like "random data". They may look so to the naked eye, but the most basic statistical checks show that this isn't the case. Take an encrypted value, change a bit in it, and look at what happens to the output. For a random table, you'd expect every bit in the decrypted value to change with 50% probability. This isn't happening. Take a look at the following statistics taken on a single table (see http://mamelife.blogspot.com/): on rows, you have the encrypted bit that changes; on columns, the frequency with which the decrypted bit changes. So there is a large number of values around 50%, which look just random, but there are also values very far from that. This indicates that the encryption algorithm doesn't have good diffusion. This is a weakness, though it hasn't been exploited yet. Of particular interest are the four values I highlighted in red. While the other values change from game to game and from table to table, those four values are always the same. E.g. flipping bit 9 in the encrypted value causes bit 0 in the decrypted value to flip exactly 0x5080 times out of 0x10000, for every game, at every address. This property is quite interesting. It is the most obvious "signature" of the algorithm. Does it help? Well, it tells us that if the algorithm contains bit permutations that depend on the key, those permutations cannot affect bits 3 and 9 in the encrypted value, nor bits 0 and 14 of the decrypted data. Apart from that, however, the property doesn't tell us much, because even if we know that the bits have to change that many times, we don't know exactly when to flip them. Discovering that would be a significant advance in the understanding of the algorithm.
- 0.110u4            : CPS2 updates [David Haywood]: Added table for Jyangokushi (from Guru). Note that GFX/Sound roms aren't dumped on this one. Removed old 'handcrafted' XORs for games which we have CHDs for and replaced them with XORs generated from MAME using the CHD. This means anyone with the CHD can easily generate the XORs (using the code I've left in there) if they need to be able to run the games with a shorter startup time. Disabled the loading of the XORs by default for all sets with a CHD. Now only the CHD is loaded, unless the #define is changed at the top in which case only the XORs generated from the CHD are loaded.
- 0.110u3            : David Haywood added raw decryption table to choko. Enabled the use of the large CHD-based tables by default.
- 0.110u2            : David Haywood added support for using CHDs to decrypt CPS2 games. This code is disabled for the moment, but will be enabled in the future. Only a handful of games have complete tables so far. These tables are huge (~4GB) and uncompressable until the encryption algorithm is understood.
- 19th September 2006: Charles MacDonald - With the success of the Choko dump from a while ago, I'm working to get the CPS-2 dumping tools and instructions updated. Changes were made from the last version, mostly bugfixes and speed-ups to decrease the amount of time it takes to dump a full table set. There's also a minor modification that needs to be done to the PCB, to ensure stability, though now that it's known which features are absolutely needed, I might redesign it. Admittedly not many people have been interested in getting more of the games dumped, probably because all the popular ones we wasted tons of quarters on are already emulated!
- 0.105u3            : Aaron Giles uncommented/added missing undumped ROMs/XORs in the CPS2 games.
- 0.105u1            : David Haywood updated CPS driver to more accurately draw tilemaps, based on evidence from a board with mixed ROMs.
- 14th February  2006: Guru - A CPS2 USB adapter arrived, thanks to Charles MacDonald. The adapter plugs into the 64-pin CN7 on the B board. The chips on the bench are the original ROMs and PALs. ROM3 is changed and ROM10 is added. Plus 1 PAL on the A board is changed and 2 PALs on the B board are changed. Unfortunately, none of the PALs were socketed and this particular B board didn't have a CN7 connector! So I had to desolder a CN7 connector from another dead CPS2 board and solder it to this board and desolder and socket the 3 PALs as well! Luckily she still works! It's not that exciting to look at though.
- 15th January   2006: Razoola - Nicola Salmoria has reported on his blog some progress in understanding the CPS2 algo. He has managed to shrink the current 8gig table of SFZ down to 4gig. This is the first breakthrough in understanding the encryption used. For more information visit his blog.
- 11th January   2006: Charles MacDonald - I've tried to package and clean up all the CPS-2 related development stuff I have that was used for table dumping. This can be used for writing CPS-2 software, running tests on the system, and dumping table data so we can hopefully figure out the encryption at some point. I will definitely include more sample programs, documentation and hardware information in future updates to the package, but I wanted to get this off my to-do list.
-  5th January   2006: Razoola - While playing around coding on a dead CPS-2 board I have today I found that the encryption algo is still fully in place even after the CPS-2 board has suicided. That said, on examining values the number do not match those of the expected game. This almost certainly confirms that their is only _one_ algo over all CPS-2 games with the only difference being key data (like Kabuki on CPS-1). I passed some test code onto Charles MacDonald so that he can check the values he gets there (on his dead SFA3 board). Those should match what I see here and to be honest it looks just a formality. When you consider the watchdog on a suicide board is 0xFFFF,0xFFFF,0xFFFF (example opcode, CMPI.L #$FFFFFFFF,$FFFF0000) everything starts to make sence. There was a big debate over this going back to when we first broke past the protection. The worry voiced by some DEVs was that all boards would be needed again to get the algo for each game. This new discovery certainly confirms that once the algo is known for one game all the others can be brute forced using the XOR tables. As for figuring out the algo itsself whats needed now is a complete dump of tables (8gig) of the algo executing in this default state. Using this the algo should be easier to understand because any key data used for math should be 0xFFFF. I have quickly dumped a complete table for a couple of addresses and while it still looks a mess there are certinally more patterns compared to a normal game. Update: I've got word back from Charles and after some work (over irc) he has managed to get the same data I was seeing. This basically confirms what I mentioned above. There were some initial problems with his transfer system (which is far superior to mine) giving different results. It turned out that at some point during the process the protected RAM was being reprogrammed!!! The exact way this is happening is not yet known but it opens up some large posibilities if the cause can be found and understood. This situation did not happen when he was dumping games that were non suicide. It currently looks like there is no way to get a full 8gig table because the protected region in a suicide state seems to be only 0x10000 bytes where a complete table covers 0x20000 bytes. Hopefully we can get around this.
-  4th January   2006: Razoola - I have written a small tool that can be programmed onto EPROM and used to test if a CPS2 board has suicided.
- 19th November  2005: Charles MacDonald - Thanks to a generous donation from Razoola and the CPS2Shock team, I've been given B-boards for the following games: sfzj, csclubj and sfz3. I have dumped complete table sets from the first two and am doing tests on the latter. It has no battery, so I can see how the hardware works when the battery-backed SRAM is erased. With a much larger data set (32 GB) spanning four games, hopefully some patterns will be discovered. I'm still interested in dumping a regional variant for one of the currently dumped games to see what kinds of similarities might exist between the two. Most likely I will revise and release the tools and specifications for my CPS-2 development setup in the future. Then other people could dump table sets from their games and contribute to this project. There are so many CPS-2 games out there that I couldn't possibly do it all myself, nor would I want to.
- 12th October   2005: Charles MacDonald - Getting a bunch of PCBs to work with in the next few weeks: three CPS-2 'B' boards (more on those next update), Shanghai for HD63484 tests, and a Quartet 2 board. I'll continue my CPS-2 research once the other games arrive. One of them has no battery so I can skip the annoying encryption and run tests directly, which will be a huge convenience. I think right now all the useful data that can be extracted from xmcota and pzloop2j has been obtained.
- 30th September 2005: Charles MacDonald - I've been doing some research on the CPS-2 hardware in the last few months, starting as soon as the System 32 work was put on hold. I'll give a basic overview of the encryption, however I should point out I'm just elaborating on the findings that Razoola originally made, which are at CPS-2 Shock. As you can imagine the results of his prior experiments have been absolutely essential to this project. The CPS-2 hardware uses a custom 68000 CPU running at 16MHz, though the effective speed is lower due to video DMA. Out of the 16MB address range, the lower 4MB is allocated for ROMs storing program code and data. The first 1MB of this area is where decryption is enabled, though the exact boundary under the 4MB point may change from game to game. In addition to the address range check, there is a timer that expires after a certain amount of time has passed. When this happens, decryption is turned off and the 68K will execute code exactly as it is read from memory. A sequence of one or more specific instructions, changing on a per-game basis, will reset the timer and enable encryption again. The timer can be restarted after any duration from when it has expired. The decryption logic uses bits A16 through A1 of the 68K address bus, meaning the encryption wraps every 128K. For each encrypted word at a given address there is exactly one unique output; in contrast to the FD1094 there are no disabled opcodes or 'blanked' data that resolve to the same decrypted value. Data read from the supervisor or user code space is decrypted (e.g. opcodes and operands) and data from the supervisor or user data space is not. The size of a complete set of decrypted data for one game quite large, totalling 8GB - it takes forever to dump. There are no duplicate tables within a game's table set or between sets for different games, though I've only examined tables dumped from the two 'B' boards I have. I've discussed analysis of the table data with a few other people and so far the encryption seems to be pretty tough to solve. As a result, I think progress will depend on additional help. If you have skill in this type of thing (strong mathematics background and familiarity with encryption) and would like to lend a hand, then please get in contact with me. Working with the CPS-2 hardware has been challenging due to the large amount of custom parts involved. I designed a communications board with a USB adapter, DTACK generator, and interface to the CPS-2 video and peripheral bus to run software on it, as well as several adapters to replace the 16V8 GALs with more capable 22V10 GALs that have their own shared I/O bus. Small update for some common questions: The two games I've dumped are xmcota and pzloop2j, which are both already emulated in MAME. The ETA for a complete table dump (65,536 files) is 9 hours, and it's fully automated. Sometimes the system locks up randomly and has to be reset which slows things down, this occured quite a lot for pzloop2j and not at all for xmcota. They have different types of B boards, perhaps that has something to do with it. Many people are suggesting to look at Street Fighter Zero and it's variants, as well as Rockman which had a less common CPS-2 release but is very similar to the CPS-1 version. The only thing that would be really useful is to find two games that are encrypted with the same or similar keys, so unless Rockman has an identical key as another game it's not that useful. I would be interested in getting data out of another variant of xmcota.
- 27th October   2004: Razoola - There seems to be someone making quick hacks of XOR files we have released in the past to get games running which don't currently have XORs. While this sounds a good thing it's actually no different than using the region switch option in kawaks for example. The big problem is that these new XOR's contain incorrect information in relation to what the real encryption would return for many addresses when compared to real hardware. It also makes it less likely for these games to be donated in the future so good XOR's can be created as people will think they already have good XOR's. The reality is these new hacked XOR's are prone to all the bugs that come with using region switching in CPS2 games. It's for these reasons that I want it known I have nothing to do with these hacks and I would advise against them being used officially in any emulator as they cannot guarantee an accurate game.
- NOTES: The CPS-2 encryption only affects opcodes, not data. It consists of two 4-round Feistel networks (FN) and involves both the 16-bit opcode and the low 16 bits of the address. The hardware also has different watchdog opcodes and address range (see below) which are stored in the battery backed RAM. There doesn't appear to be any relation between those and the 64-bit encryption key, so they probably use an additional 64 bits of battery-backed RAM. The encryption does _not_ cover the entire address space. The range covered differs per game. The CPS2 system has a watchdog system that will disable the decryption of data if the watchdog isn't triggered at least once every few seconds. The trigger varies from game to game (some games do use the same) and is basically a 68000 opcode/s instruction. The instruction is the same for all regions of the game. The watchdog instructions are listed alongside the decryption keys.
- SOURCE: machine\cps2crypt.cpp



P3.2   CPS3
- SOURCE:





P4.    DALLAS

P4.1   DS1204

- 0.152              : Added machine\ds1204.c/h. Created DS1204 device & switched Megatouch (meritm.c) to use it instead of it's own local version (driver could do with some more tidying up as not all games use a key but currently it is hooked up to all games). Default data comes from a region instead of coded in driver, commands & security match are now compared, data is clocked on the correct edge, key can be written to and is saved to NVRAM. Improved logging. Hooked up DS1204 to Touchmaster driver, but haven't found what it checks for yet. Changed PATCH_PROTECTION to 0 in tmaster.c and VERBOSE_LEVEL to 2 in ds1204.c then look for "-> command" in error.log to find the subsequent read from the dq pin for reading the identification and secure memory. For tm4k the first two bytes of the NVRAM need to be  0x00, 0xa0. From scratch you'll need to play a game before it will complain about the protection, but after that it will complain on every boot. It tries five different contents for the compare register at various points during the bootup, this may be for obfuscation as the real chip will return random results if the key is wrong. If the keys are available it might be easier to dump them than figure out exactly what it wants [smf].
- 0.145u4            : Brian Troha fixed clone Megatouch IV (9255-40-01 RO, Standard version) by adding DS1204 key.
- PCB: Data Key - MegaTouch (Merit)
- NOTES: DS1204 Electronic Key
- DRIVERS: meritm.cpp and tmaster.cpp
- SOURCE: machine\ds1204.cpp


P4.2   DS1207

- 0.262              : Fixed typos in the logs [Roberto Fresca].
- 0.247              : Added machine\ds1207.cpp/h. Added 'DS1207 Time Key' device [Paul Arnold].
- NOTES: DS1207 Time Key
- DRIVERS: magicard.cpp
- SOURCE: machine\ds1207.cpp


P4.3   DS5002FP

- 0.283              : Cleaned up (gaelco\gaelco_ds5002fp.cpp) [Vas Crabb].
- 0.282              : Added cpu\mcs51\ds5002fp.cpp/h.
- 0.221              : Simplified some handlers (machine\gaelco_ds5002fp.cpp) [Osso].
- 0.191              : Added DS5002FP SRAM dumps to Target Hits and clone - Games now playable. Added DS5002FP SRAM dumps to Target Hits and clone - Games now playable. Dumped Touch & Go DS5002FP SRAM from 2 more boards, used that dump to verify/correct the SRAM image [Peter Wilhelmsen, Morten Shearman Kirkegaard, ClawGrip, Brian Troha, David Haywood].
- 0.190              : Added new DS5002FP SRAM dump to Alligator Hunt (Spain, protected) - Game now playable. Data was verified using a 2nd board, only 1 byte changed in the code area, data table is also verified by checksum in the code, and by the unprotected set as reference. This is a good read. Added DS5002FP SRAM dumps to Glass (Ver 1.1, Break Edition, Checksum 49D5E66B, Version 1994) and clones (Ver 1.0, Break Edition, Checksum C5513F3C) and (Ver 1.0, Break Edition, Checksum D3864FDB) - Games now playable. Added DS5002FP SRAM dumps to Maniac Square (protected, Version 1.0, Checksum DEEE) and clone (protected, Version 1.0, Checksum CF2D) - Games now playable [Peter Wilhelmsen, Morten Shearman Kirkegaard, Charles MacDonald, David Haywood].
- 0.189              : Added new DS5002FP SRAM dump to TH Strikes Back - Game now playable.
- 0.188              : Added machine\gaelco_ds5002fp.cpp. Added dumped DS5002FP chip to TH Strikes Back, Touch & Go and World Rally 2 using the method published by Morten Shearman Kirkegaard and Peter Wilhelmsen as documented at http://www.afdelingp.dk/files/articles/ds5002fp/ds5002fp.pdf [Morten Shearman Kirkegaard, Peter Wilhelmsen, David Haywood]. Note: A 2nd verification pass is still needed on them from additional boards, as bad bits existed in World Rally 2 even prior to extraction (steering logic was broken but bad byte was identified and fixed as the code for that command handler was identical to World Rally 1) and TH Strikes Back is crashing at the first boss (could also be a CPU core issue). The DS5002FP SRAM for World Rally 2 has been dumped from 2 PCBs. The first had unused space filled as 0x00, the 2nd space was filled as 0xff. In addition, the first had 2x bad bytes and was partially patched out, so we're using the 2nd dump. Glass was also dumped, but at the time the data wasn't extracted, only the code, and the board has since died, so needs redoing. Alligator Hunt was dumped and works, but not yet added, want to verify on a 2nd PCB first as the process does corrupt some bytes and a couple had to be handfixed, so the only way to know for sure is multiple dumps. Made DS5002FP store battery-backed internal RAM and SFR registers as NVRAM. Made SFR defaults configurable in ROM loading like NVRAM defaults. Made external SRAM persistent as well (some games store scores etc. in it). Cleaned up Touch & Go dump and added preconfigured internal RAM. Created device for Gaelco protection module and removed remaining simulation code [David Haywood]. Clean up Galeco Dallas hookup device: There is no need for a second device for World Rally and Glass, it's the same thing. How the address lines are hooked up for host memory access is part of the driver and can be done with a mirror/mask in the address map provided by the driver. There's also no need for the SRAM trampolines in the device, that can be done entirely through address maps. The drivers need trampolines to do the address swizzling. We should be able to get rid of these when we get better support for 8-bit views of 16-bit components (dooyong drivers also have ugly trampolines for doing this kind of thing) [Vas Crabb].
- 0.128u3            : Removed cpu\ds5002fp\ds5002fp.c/h, ds5002fpdasm.c and ds5002fpops.c. Merged DS5002FP into MCS51 [Couriersud]: Merged DS5002FP. Disassembler now uses type specific memory names. Merged DS5002FP disasm. Added 83C751 memory names to disassembler. Delete DS5002FP specific files. Removed unnecessary cpu callback in wrally. DATA_MAP ==> IO_MAP in wrally.
- 0.125u2            : R. Belmont fixed World Rally MCU comms on big-endian.
- 0.125u1            : Added cpu\ds5002fp\ds5002fp.c/h, ds5002fpdasm.c and ds5002fpops.c. Added DS5002FP CPU core [Manuel Abadia].
- 12th May       2008: Manuel Abadia - World Rally emulation is complete. I implemented priorities (that were trickier than I thought), shadows/highlights and a few missing bits in the video hardware. The game is fully playable from beginning to end without any problem as far as I can tell. I thought there was a bug in the video hardware emulation somewhere... So I plugged my PCB and compared it to the driver. The problem is also in the original arcade game. Because of the way an arcade monitor works, the problem is nearly unnoticeable in the original game. I also checked if the original PCB had the same "shadow effect" for the tiles, yes the hardware works that way. Something curious about the protection... Javier told ElSemi that the protection of this game took 8 months of work, so imagine how complicated it was... even the dallas has some code that performs some pseudorandom dummy accesses to the shared RAM to make black box attacks even more difficult. To clarify a question about the other protected games, having the World Rally dallas code does not help to emulate the protection of them. As MAME now has a DS5002FP core and the other games are almost fully emulated, if we get the dallas code for a game, it will be playable quickly. Finally, I want to thank to all the people that made this possible. It was cool to be part of this. It has brought me some good memories and healed my wounds with Gaelco.
- 10th May       2008: Manuel Abadia - Playable status reached: Javier sent us (via ElSemi) detailed information about how the encryption process worked. However, he told us that the sheets of paper that contained the encryption info were a bit difficult to read in some places (remember that this protection was designed 15 years ago) so probably there was some mistakes in the excel file he sent us. ElSemi and I tried to add it with the information he gave us but we didn't have success. Nicola Salmoria did an excellent work (as always) consolidating the information and obtaining the missing information. He generated a working decryption function that not only works for World Rally, but also for Squash and Thunder Hoop. Mike Coates also completed the interface to get the data from a World Rally PCB, so he was able to supply the encrypted/decrypted data that was needed to get the specific details to decrypt World Rally properly. Special mention to Andreas Naive too. The high level information Javier told us a few days ago was already discovered by Andreas and posted in his page a couple of months ago. Before Javier sent us detailed information about how the encryption worked I contacted Andreas Naive about the encryption and he told me that he didn't have free time at the moment to look at it. However he told me an intuition he had about the algorithm: "I remember that my last feeling was that to decipher each 16 bits block, it was done in 3 chunks: a first 6 bits chunk and then two 5 bits chunks, each of them based in a/some bits of the first chunk. I don't remember exactly which ones, but the first chunk was the one with a simple structure (based on the tables I published), while the other two were the ones that shown a more complex structure (and carry effects)". He was completely right as that was how it worked the encryption that Javier sent us. It is good to have geniouses around. After adding the decryption to the driver the game looks fine. It has a few graphic glitches that will be fixed soon but it seems to be PLAYABLE.
-  7th May       2008: Manuel Abadia - The Dallas DS5002FP core is complete. The additions to the 8051 core are: Extra Special Function Registers, Byte-wide Bus Support, Memory Partition and Memory Range, Bootstrap Configuration, Power Fail Interrupt, Timed Access, Stop Mode and Idle Mode. I didn't bother to add support for Peripherals, the Reprogrammable Peripheral Controller or CRC-16 support because it isn't used by the game. The communication between the Dallas and the main CPU seems to be working, however, the game writes some bytes to the encrypted Video RAM, it reads them back and then makes some calls based on the decrypted data. As the current decryption is wrong, the game doesn't work yet and never uses the dallas for anything interesting right now. The decryption of the Video RAM is in the same state as it was. However, ElSemi asked Javier for information about the decryption and he is trying to help us. He didn't remember how it was performed but we send him the information we got about it in 2002 (when Mike connected the PCB to the fluke) to refresh a bit his memory. Thanks to that, he gave us another point of view about how the encryption may work. Even if he is right, we still need to get data from the original PCB. Hopefully, somewhere in the process we end up with a clean decrypt function that uses no tables. Understanding some code I was able to guess some decrypted values and get this (see snapshot). It looks really ugly as the colors for the tiles aren't decrypted properly but this finally confirms that World Rally uses the same Video Hardware as Target Hits. The only change seems to be the additional palette entries for the night races. I have seen how the palette was configured in a night race and I have an idea of how the palette works for the night races (not very different from World Rally 2), but we'll have to wait until the game works to implement it. So, the current status is that if the Video RAM is decrypted properly and we are lucky, the game should work without the light effects (and maybe some priority problems) and be playable. If we are not that lucky, hopefully the problems are not difficult to find and fix.
-  5th May       2008: Manuel Abadia - If you have tried to execute World Rally since it was added to MAME you have seen the precarious state of the driver. The protection of World Rally is double: 1. Encrypted Video RAM: The encrypted Video RAM transforms a 32 bits value written to it to another value that is really complex to derive from the original value. This protection was also used in Thunder Hoop and Squash. Mike Coates connected a fluke to his PCBs and got a 4 GB file will all possible combinations (2^32) for Thunder Hoop and Squash. Using that file, the encryption process was replicated. However, it was not very practical to require a 16 GB file to run the game. Nicola Salmoria studied the file and generated some code (about 400 lines) that replicated the original encryption. That's why you can play Thunder Hoop and Squash. Why World Rally encryption is incomplete? All of us wanted to see World Rally running before any other game, so we started studying World Rally before Squash and Thunder Hoop. In that time, we thought that the encryption was only performed in 16 bits, not 32. Unfortunately, when Mike got all decrypted values (2^16), the code was clearly showing that the decrypted values were not correct in most cases (for example, one of the methods that draws the tiles uses a decrypted value for the number of tiles to draw. That's why the power on self test results and other screens look horrible right now). After we find that out, the decryption efforts were centered in the other games. As World Rally was not going to be playable unless the dallas code was dumped (something that seemed unlikely), it has remained that way. 2. Dallas DS5002FP secure MCU: The Dallas MCU in the Gaelco games has some critical code that handles inputs, objects manipulation and other complex calculations that prevent the game from working properly (Take a look at World Rally 2 if you don't know what I mean). The DS5002FP MCU has been one of the best chips for protecting information on its era making emulation of these games impossible for now. There are some specialized labs that claim to be able to get the code from a DS5002FP but it is an incredibly expensive process we can't afford. I have to admit that I thought that I'd never see World Rally emulated, as I approached some people at Gaelco and Zigurat for the Dallas code without luck. However, the other day I received an email that changed my mind. Miguel Angel Horna (ElSemi) did a talk at Lleida Lan Party about emulation. At the party he met one of the Gaelco founders (Javier Valero) that was there to speak about the arcade game industry. ElSemi and Javier talked about the protection in some Gaelco games and Javier was kind enough to provide the dallas code for World Rally. With the internal code of the DS5002FP it is just a matter of time to finally have a working driver in MAME. I have been completely inactive from MAME development for a while but as I worked on the drivers of all the Gaelco 2D games (except Master Boy) and I spent a lot of time and money on them, I thought it was a good time to resume my work on MAME. Mike Coates is trying to get all the possible values from World Rally Video RAM so we can advance in that area too. Currently I am writing a DS5002FP core to run the dallas code. The DS5002FP is just a 8051 MCU with some additions and as MAME already has a 8051 core things are going fast. For example, the initial coprocessor test works (although it is a trivial test to pass without the dallas code). Also, adding the Power Fail Interrupt of the dallas I managed to see this screen that is supposed to be seen when the dallas is dying. After the both protections are emulated the driver will need more work as probably the video hardware emulation isn't complete and needs some tweaks here and there but I'm confident that World Rally will be playable in a not so distant future. I don't know if Javier will give us more dallas code or not, but hats off to him for this one. Also, thanks a lot to ElSemi for being able to get the dallas code from him.
-  8th December  2002: Manuel Abadia sent in a driver for Target Hits but it is unplayable due to an undumped DS5002FP MCU.
-  6th December  2002: Manuel Abadia sent in a preliminary driver for World Rally that works somewhat, but won't be playable because of an undumped DS5002FP MCU.
- NOTES: The DS5002FP MCU use external battery ram (32k) - see wrally2 PCB info
- GAMES: Gaelco - Glass (1993), World Rally (1993), TH Strikes Back (1994)
- Web: http://www.scribd.com/doc/931673/Dallas-DS5002FP-protection-cracking
- PCB: Dallas DS5002 (Aligator, Touchgo, Wrally2), DS5002FP (Thoop, Thoop2, Wrally)
- DRIVERS: gaelco2.cpp, glass.cpp, targeth.cpp, thoop2.cpp and thoop2.cpp
- SOURCE: cpu\mcs51\ds5002fp.cpp and gaelco\gaelco_ds5002fp.cpp



P5.    Fujitsu

P5.1   MB88xx

- 0.273              : Added PLA mask option. Increment timer when taking irq cycles. Make TC pin an inputline and don't clear irq pin state at reset. Small cleanup (mb88xx\mb88xx.cpp) [hap].
- 0.264              : Clean up spacing, single line comments and shorthand variable types (mb88xx\mb88xx.cpp and mb88xx\mb88dasm.cpp) [hap].
- 0.262              : Added an internal flag set on servicing an interrupt and cleared by RTI. Suppressing nested interrupts appears to fix issues in Arabian (Missing bird at top of the screen (ID 03916) and 2 Player freezes after Player 1's death (ID 08436)). Also renamed m_nf to m_if to match the datasheet (mb88xx\mb88xx.cpp) [Mike Harris].
- 0.253              : Added IRQ callbacks for internal interrupts (mb88xx\mb88xx.cpp) [AJR].
- 0.244              : Uppercase mnemonics and removed opcode explanations from DASM (mb88xx\mb88dasm.cpp). Mask ram r/w and read_r to 4-bit (mb88xx\mb88xx.cpp) [hap].
- 0.240              : Clarify interrupt line is 'logical', not voltage-based. Clear the appropriate interrupt enable flag when taking the int (mb88xx\mb88xx.cpp) [Mike Harris].
- 0.221              : Fixed interrupt handling. m_nf is basically the IF flag. It should be set when the int line is active (when its low). Only trigger an int when the line was previously high [Mike Harris].
- 0.193              : Added cpu\mb88xx\mb88dasm.h.
- 0.188              : Converted MB88XX ports to DEVCB and removed generic device type (audio\namco52.cpp, namco54.cpp, drivers\arabian.cpp, strnskil.cpp, machine\namco50.cpp, namco51.cpp, namco53.cpp and namco62.cpp). Added pin diagrams [AJR].
- 0.180              : Changed the MB88xx disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.155              : Added support for Fujitsu M88201-202 MCU [Felipe Sanches].
- 0.150              : Modernized MB88xx cpu core [Wilbert Pol].
- 0.141              : Assigned MB88xx interrupt sources unique vectors, as expected by the Arabian MCU program [Phil Bennett].
- 0.138u4            : Alex Jackson fixed some bugs in the MB88xx CPU core.
- 0.131u4            : Cleaned up Namco 5xxx docs, listing both MB88xx pin IDs and Namco custom IDs where appropriate [Aaron Giles].
- 0.131u3            : Several MB88xx changes/fixes [Aaron Giles]: Internal timer support now works; prescaler is guessed based on Pole Position sample playback frequency. External counter support works. A basic mechanism for reading serial input has been added; it is not sufficient for a full implementation, but good enough to sample the SI pin at startup. Fixed TSTS/TSTV to clear their respective flags. Fixed CI and CYI to compute imm-reg instead of reg-imm. Added masking of the PA register upon RTI/RTS to prevent bogus PC values. Added internal memory maps and internal clock divider to the MB88xx CPUs. Removed now-redundant memory maps from drivers and removed explicitly-specified clock dividers.
- 0.128u6            : Pointer-ified the MB88xx core [Aaron Giles].
- 0.112u1            : Added cpu\mb88xx\mb88xx.c/h and mb88dasm.c.
- NOTES: Fujitsu MB88xx series MCU
- DRIVERS: arabian.cpp, galaga.cpp, kangaroo.cpp, markham.cpp and polepos.cpp
- SOURCE: cpu\mb88xx\mb88xx.cpp


P5.11  MB8841

-  2nd May       2022: hap/forums.bannister.org - Here is (MESS) Scrabble Lexor. It's a simple scrabble game and scorekeeper, does not have a word library in the ROM. The interesting thing is that this is on a Fujitsu MB8841, first time I've seen a handheld/tabletop using this. The MCU was already emulated in MAME. Sean figured out how to dump it. This might also mean good news on the arcade side soon, it's possible to dump MB8841 protection MCUs now.
- 0.122u8            : Cleaned up Kangaroo driver [Aaron Giles]: Documented MB8841 (needs to be decapped to get code). Proper video timing. Full memory maps. Simplified and more accurate video logic.
- 25th January   2007: Guru - For those that didn't realise, the chip below is a Namco Custom 54xx and is used on Xevious, Galaga, Bosconian and Pole Position for generating some sounds (for example the 'death bang' sound in Galaga). The chip is actually a Fujitsu MB884x-family microcontroller with 1k internal maskROM. If you want to blow your mind with technical details, the datasheet is here (http://www.sharpmz.org/download/mb8843.pdf).
- 23rd January   2007: Guru - Here's a few pics of the very first custom chip that I sent to a professional Japanese IC decapping company that we (MAMEdev) are using to help us with some MAME-related things. Hopefully if this is successful, more will follow and also hopefully talented hardware devs like JROK (http://www.jrok.com/) will be able to make replacements for it to repair real PCBs. You may also be wondering why we're doing this instead of using some other people who frequent the 'boards' who have offered to do this kind of thing for free? The answer is fairly simple... Apart from the amount of time it takes to get this done, the level of communication is somewhat 'sporadic' and so far offers to supply other chips to them have been ignored. We requested pics of some CPS2 ICs that were said to have been decapped and so far nothing has surfaced (over a month has passed since then). Doing it this way gives us more control over what we achieve and ensures the work is done in a timely manner. Apart from that, the plan to get this IC decapped has been in the works for several months, so we might as well use the professional IC decapping company whenever possible because the amount of ICs we need to decap is possibly too much work for someone to do in their spare time for free.
- NOTES: The Fujitsu MB8841 is a 4-bit microprocessor/MCU with 8k rom (see Kangaroo). It generates a protection NMI in games after the startup. The custom CPU also controls the video flip control line. MAME patched this protection.
- NOTES: Banbam has a Fujitsu MB8841 4-Bit MCU for protection labeled SUN 8212.
- PCB: MB8841 (Route16)
- DRIVERS: arabian.cpp, kangaroo.cpp and markham.cpp
- SOURCE: cpu\mb88xx\mb88xx.cpp


P5.12  MB8842
- 0.114u1            : Nicola Salmoria added actual emulation of the microcontroller used for the Namco 50xx chip as found in Bosconian and Xevious.
- NOTES: The Namco 50XX chip is a Fujitsu MB8842, which has twice the ROM and RAM of the 54xx chip. It is used for Player score control (only used as protection check).
- DRIVERS: galaga.cpp
- SOURCE: cpu\mb88xx\mb88xx.cpp


P5.13  MB8843
- 0.131u3            : Aaron Giles changed the Namco 52xx and 53xx devices to run the actual MCU instead of simulating the behavior. Hooked them up properly in bosco, digdug and polepos.
- DRIVERS: galaga.cpp and polepos.cpp
- SOURCE: cpu\mb88xx\mb88xx.cpp


P5.14  MB8844
- 0.114u1            : Changed description to 'MB8844'. Nicola Salmoria added actual emulation of the microcontroller used for the Namco 50xx chip as found in Bosconian and Xevious.
- 0.112u1            : Added cpu\mb88xx\mb88xx.c/h and mb88dasm.c. Replaced implementation of Namco 54xx sound chip with new MB8844 CPU core running the original embedded ROM code. Removed old sound core. Pole Position and Bosconian no longer require samples as a result [Nicola Salmora, Ernesto Corvi, Guru].
- DRIVERS: galaga.cpp and polepos.cpp
- SOURCE: cpu\mb88xx\mb88xx.cpp


P5.15  MB8851
- NOTES: 4-bit MCU (DIP42)
- SOURCE: ???




P5.2   MB14241

- 0.222              : Use MB14241 device in drivers\40love.cpp [hap].
- 0.215              : Simplified handlers [Vas Crabb].
- 0.202              : Removed MB14241 MCFG macros [Ryan Holtz].
- 0.149              : Modernized the MB14241 device (drivers\8080bw.c, fgoal.c and mw8080bw.c) [Osso].
- 0.147              : Added 'MB14241 Data Shifter' device.
- 0.135u4            : Fabio Priuli made MB14241 Shifter IC a device and moved its source to emu\machine. Updated mw8080bw.c and 8080bw.c accordingly. Also converted fgoal.c to use this implementation in place of its own version.
- 0.113u2            : Added machine\mb14241.c/h. Zsolt Vasvari] created a new file for MB14241, which is the shifter IC used by Invaders hardware games.
- NOTES: MB14241 did custom operations. In Field Goal (Taito 1979) it shifts the data.
- PCB: MB14241 (40love, Fieldday, Jollyjgr)
- DRIVERS: 8080bw.cpp, fgoal.cpp, mw8080bw.cpp and scyclone.cpp
- SOURCE: machine\mb14241.cpp



P5.3   F2MC-16

- 0.271              : Added cpu\f2mc16\f2mc16_adc.cpp/h, f2mc16\f2mc16_clock.cpp/h, f2mc16\f2mc16_intc.cpp/h, f2mc16\f2mc16_port.cpp/h, f2mc16\f2mc16_ppg.cpp/h, f2mc16\f2mc16_reload.cpp/h, f2mc16\f2mc16_uart.cpp/h, f2mc16\mb90570.cpp/h and f2mc16\mb90640a.cpp/h. Replaced f2mc16\mb9061x.cpp/ with f2mc16\mb90610a.cpp/h. Created devices for the onboard analogue to digital converter, clock generator, interrupt controller/Extended intelligent I/O service, I/O port, Programmable Pulse Generator, reload timer and UART. CPU core exposes the RMW line for onboard devices. Log messages will contain the address of the start of the instruction, rather than the next byte the CPU is about to fetch. Added INT9/INT addr16 & INT addr24 software interrupt instructions. Fixed INCW @RWx & DECW @RWx instruction length. Added missing fetch of immediate value in MOV @RWx + RW7, #imm8 [smf].
- 0.268              : Flesh out CPU emulation. Support INT #vct8, LSL A, R0 and FILSWI instructions. Support many more EA-type instruction modes. Prevent MOVS(W)I and FILS(W)I from clobbering RW0 if it lies within the destination range (f2mc16\f2mc16.cpp) [AJR].
- 0.267              : Added and fixed several instructions. Added additional instructions from Prin-C disassembly (f2mc16\f2mc16.cpp) [qufb]. Disassembly updates: Correct decoding of FILSWI. Eliminated unnecessary and somewhat confusing INC A and DEC A aliases (f2mc16\f2mc16d.cpp) [AJR].
- 0.235              : Updates and fixes for F2MC-16: Emulated various additional instructions and modes. Fixed banking for direct addressing mode. Fixed semantics of CLRB and number of bytes consumed by SETB. Fixed mistake with calculating N and Z flags for SUB and CMP and writing incorrect result for SUB. Use INC(W)(L) A and DEC(W)(L) A pseudo-operations in disassembly. General cleanup: Added helper functions for increment and decrement operations and short direct banking. Rationalize use of temporary variables. Modify only lowest 8 bits of accumulator for XOR A, #imm8. Perform a 16-bit rather than 8-bit write for MOVW @RLx + #disp8, A. Use SSB instead of USB for @RW3 or @RW7 addressing when S flag is set. Fixed numerous flag calculations. Emulated many more opcodes. Added interrupt callback for debugger. Correct disassembly of MOVW io, A [AJR].
- 0.234              : Changed f2mc16\f2mc16dasm.cpp/h to f2mc16\f2mc16d.cpp/h. Rewrite disassembler. Fixed bug in CPU core advancing PC by one too many bytes when executing 'ADDL A, RLn' [AJR].
- 0.222              : F2MC-16 disassembly fixes: Added/improved support for EA forms of numerous instructions. Correct the number of bytes for CLRB and SETB with 16-bit address. Correct some formatting mistakes, including one that substituted "1" for the mnemonic in absolute EA forms (cpu\f2mc16\f2mc16dasm.cpp) [AJR].
- 0.221              : Simplified some handlers [Osso].
- 0.214              : More opcodes and more robust IRQ handling. Fixed BBC branch offset, add savestates, cleanup variable usage in utility functions. Added more opcodes to diassembler, normalized bit syntax. This allows disassembling most of the Namco System 23 "Extra I/O" programs, which use an MB90611A [R. Belmont].
- 0.213              : Checkpoint. (MESS) Prin-C now runs for a few seconds then enables Timer 0 (not yet implemented) and waits for it [R. Belmont].
- 0.212              : Added cpu\f2mc16\f2mc16.cpp/h, f2mc16\f2mc16dasm.cpp/h and f2mc16\mb9061x.cpp/h. Preliminary Fujitsu F2MC-16 CPU core. First pass with working IRQs [R. Belmont]. Added F2MC-16 to unidasm [AJR].
- NOTES: Fujitsu MB90F574 F2MC-16LX I/O board MCU + 256KB internal flashrom (QFP120). 500 GP and Angler King stamped 'FCAF10' and Ridge Racer V (on System 246) stamped 'FCAF11'
- DRIVERS: novadesitec_fr002.cpp
- SOURCE: cpu\f2mc16\f2mc16.cpp



P5.31  MB9061x

- 0.235              : Added 'Fujitsu MB90610A' and 'Fujitsu MB90611A' devices. Added "extra" I/O CPU (MB90611A F2MC-16) to Motocross Go! configuration [AJR].
- 0.214              : Implemented timers 0 and 1, including external event counter mode (f2mc16\mb9061x.cpp) [R. Belmont].
- 0.212              : Added cpu\f2mc16\mb9061x.cpp/h. Added MB90610A and MB90611A microcontrollers [R. Belmont].
- NOTES: Fujitsu MB90610A + Fujitsu MB90611A Microcontroller Family
- DRIVERS: namcos23.cpp
- SOURCE: cpu\f2mc16\mb9061x.cpp



P5.323  MB9064x

- 0.235              : Added 'Fujitsu MB90641A' device.
- NOTES: Fujitsu MB90641A Microcontroller Family
- SOURCE: cpu\f2mc16\mb9061x.cpp




P5.33  MB91F155A

- 0.220              : Changed description to 'Fujitsu MB91F155A'. Changed MCU type based on further research [AJR].
- 0.215              : Added cpu\fr\fr.cpp/h and cpu\fr\frdasm.cpp/h. Added Fujitsu FR disassembler and skeleton CPU device [AJR].
- NOTES: Fujitsu MB91F155A
- SOURCE: cpu\fr\fr.cpp





P6.    Intel

P6.1   4004 / MCS-40

- 0.271              : Don't log messages about NOP aliases for the 4004 (the Linux/4004 firmware uses these for instrumentation points) (mcs40\mcs40.cpp) [Vas Crabb].
- 0.200              : Removed MCFG macros [Vas Crabb]. Fix for ambiguous call to overloaded function when using MSVC (mcs40\mcs40.h) [smf].
- 0.199              : Cleaner boilerplate (mcs40\mcs40.h) [Vas Crabb].
- 0.193              : Added cpu\mcs40\mcs40dasm.h. MCS-40 is paged [Vas Crabb].
- 0.188              : Changed cpu\i4004\i4004.cpp/h and 4004dasm to cpu\mcs40\mcs40.cpp/h and mcs40dasm.cpp. Rewrote 4004 core and disassembler: Renamed to MCS-40. Emulated 8-clock instruction cycle, interruptible at any point. Converted TEST input to an input line. Added SYNC and CM output lines. Added support for 4040 CY output, logical operations, extended registers, ROM banking and disassembly. Made I/O space mapping more flexible to support the variety of peripherals available. Notable missing features are 4040 interrupt and halt, and "program memory" space. MCS-40 update: Make disassembler/debugger use syntax closer to what ASL accepts. Use 2D lookup to make debugger tables more compact. Allow 4-bit registers to be set independently. Save state fixes. Implemented WPM/RPM instructions. Expose some signals from a 4008/4009 or 4289. Can't use opram when program and opcodes are not related in the slightest. Check for disabled side-effects! Better reflection of 4289 timings for performing program read/write. Added support for 4040 stop/ack and HLT instruction, hook up stop/single step buttons in (MESS) INTELLEC 4/MOD 40. MCS-40 updates: Splitted ROM and RAM port address spaces. Splitted RAM memory and status address spaces (no more read/modify/write). Fixed bug in FIN handling. Exposed cycle callback [Vas Crabb].
- 0.186              : Changed description to 'Intel 4004'.
- 0.180              : Changed the I4004 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.149u1            : Modernized i4004 cpu core [Wilbert Pol]. Changed description to 'Intel I4004'.
- 0.133u2            : Added cpu\i4004\i4004.c/h and 4004dasm.c. Added Intel 4004 CPU core [Miodrag Milanovic].
- DRIVERS: flicker.cpp
- SOURCE: cpu\mcs40\mcs40.cpp


P6.2   4040

- 0.237              : A-1 Supply PCBs use a 4040 CPU [Osso]. Added I4040 (1MHz) CPU1.
- 0.188              : Changed cpu\i4004\i4004.cpp/h and 4004dasm to cpu\mcs40\mcs40.cpp/h and mcs40dasm.cpp. Added 'Intel 4040' device. Rewrote 4004 core and disassembler: Renamed to MCS-40. Emulated 8-clock instruction cycle, interruptible at any point. Converted TEST input to an input line. Added SYNC and CM output lines. Added support for 4040 CY output, logical operations, extended registers, ROM banking and disassembly. Made I/O space mapping more flexible to support the variety of peripherals available. Notable missing features are 4040 interrupt and halt, and "program memory" space. MCS-40 update: Make disassembler/debugger use syntax closer to what ASL accepts. Use 2D lookup to make debugger tables more compact. Allow 4-bit registers to be set independently. Save state fixes. Implemented WPM/RPM instructions. Expose some signals from a 4008/4009 or 4289. Can't use opram when program and opcodes are not related in the slightest. Check for disabled side-effects! Better reflection of 4289 timings for performing program read/write. Added support for 4040 stop/ack and HLT instruction, hook up stop/single step buttons in (MESS) INTELLEC 4/MOD 40. MCS-40 updates: Splitted ROM and RAM port address spaces. Splitted RAM memory and status address spaces (no more read/modify/write). Fixed bug in FIN handling. Exposed cycle callback [Vas Crabb].
- NOTES: Intel 4040 (i4040)
- DRIVERS: a1supply.cpp
- SOURCE: cpu\mcs40\mcs40.cpp


P6.3   8008

- 0.241              : IO instructions (INP/OUT) make register A available at state T1 [Nigel Barnes].
- 0.204              : I/O addressing is only 5 bits [AJR].
- 0.193              : Added cpu\i8008\8008dasm.h.
- 0.180              : Changed the i8008 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.146u1            : Modernized i8008 CPU core [Lukasz Markowski].
- 0.135u2            : Added cpu\i8008\i8008.c/h and 8008dasm.c. Miodrag Milanovic added Intel 8008 CPU with CF clear after binary operations.
- DRIVERS: (MESS) k1003.cpp, mod8.cpp and sacstate.cpp
- SOURCE: cpu\i8008\i8008.cpp



P6.4   MCS-48

- 0.273              : Removed TODO note about EN/DIS I opcode not incrementing the timer, doc is wrong, and add another note. Fixed crash with rect element alpha of 0 < n < 1.0/255 (emu\rendlay.cpp) [hap].
- 0.269              : MCU reset sets bus to hi-z if ea=0. Improved EA pin and added it to Mario Bros. Shorthand variable types (mcs48\mcs48.cpp) [hap].
- 0.258              : Replaced pi constant with M_PI (mcs48\mcs48.h) [hap].
- 0.253              : Cleanup (mcs48\mcs48.h) [Curt Coder]. Added IRQ callbacks for internal interrupts (mcs48\mcs48.cpp) [AJR].
- 0.252              : Correct opcode cycles for IN A, DBB and OUT DBB, A (mcs48\mcs48.cpp) [devsaurus].
- 0.238              : Correct comments - D87xxH have UVEPROM, not EEPROM (mcs48\mcs48.h) [Vas Crabb].
- 0.228              : Separated F0/F1 from upi41 STS and fixed F0 flag read from upi41_master_r. Small bugfix for DA A. Fixed possible problem with A11 and RET during interrupt (mcs48\mcs48.cpp) [hap].
- 0.226              : Check irq before opcode to fix Fire Fox, but re-added (MESS) WY-100 hack. Execute_jcc param is a bool, not u8 [hap].
- 0.225              : Fixed problem with strt_cnt if counter was already enabled [hap].
- 0.224              : Fixed cycles not deducted for timer IRQ, get rid of (MESS) Kaypro 10 hack. Burn opcode cycles before executing opcode. Get rid of wy100 irq hack. Fixed possible missed timer overflow if burn_cycles is larger than 2. Fixed cond jump address if argument fetch was at 0x7ff or 0xfff (mcs48\mcs48.cpp) [hap].
- 0.221              : Simplified some handlers [Osso].
- 0.212              : Workaround for interrupt latency issue. A better fix for the JNI problem. Documented a few more variants (mcs48\mcs48.cpp) [AJR].
- 0.211              : Added (unemulated) CMOS IDL opcode (mcs48\mcs48dsm.cpp). Update documentation. Further distinction of UPI variants [AJR].
- 0.206              : Fixed disassembly of short jump instructions located on page boundaries (mcs48\mcs48dsm.cpp) [AJR].
- 0.205              : Fixed all games using MCS-48 are crashing when trying to set watchpoint with wpd (MT05732; cpu\mcs48\mcs48.cpp) [AJR].
- 0.203              : Eliminated now-unneeded arguments from p1_r and p2_r handlers. Fixed critical bugs with P4-P7 reads in the emulation of the MCS-48 MOVD A,Pp instruction. Set lower 4 bits of P2 to input during (and after) MOVD A,Pp. Fixed length of flags display [AJR].
- 0.199              : Give INS opcode proper name [AJR].
- 0.194              : Use paged mode for disassembler. UPI41 lacks MB0/MB1 paging and has no external memory space. Use 11-bit offsets now (cpu\mcs48\mcs48dsm.cpp). Program counter wraps at 11 bits. More specific emulation of Intel 8021: Separated disassembler for i802x (including unemulated 8022 instructions). Provided separate (though mostly just more limited) 8021 opcode table. Writes to 8021 P0 no longer go through memory space [AJR].
- 0.193              : Added cpu\mcs48\mcs48dsm.h.
- 0.192              : The MCS-48 core needs to be re-written so it works at S-cycle level (if not clock cycle level), but for now I've worked around this case in the least intrusive way possible [Vas Crabb].
- 0.186              : Converted MCS-48 ports to DEVCB: T0, T1 and PROG handlers are now 1-bit rather than 8-bit. Eliminate several T0/T1 handlers that DEVCB macros can take care of now. T0 CLK output emulation (untested) [AJR].
- 0.180              : Changed the MCS48 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.154              : Fixed usage of uninitialized member in mcs48_cpu_device [Oliver Stoeneberg].
- 0.150              : Modernized MCS-48 cpu core [Wilbert Pol].
- 0.148u1            : Added a default handler to the disasm switch/case (cpu\mcs48\mcs48dsm.c) [Wilbert Pol].
- 0.129              : Some minor MCS-48 cleanup. Added 8040/8050 variants. Changed videopkr MCS-48 P4 control register to the PROG line, which is more likely. The way to toggle the PROG line is to read/write/and/or to ports 4-7. Since the board doesn't list an 8243 port expander, it is likely the "writes" to port 4 are really just a mechanism to get the PROG line to toggle to clear the interrupt. Removed bogus port 4-7 definitions from MCS-48. Added i8243 implementation. Connected 8243 properly to monsterb and system 16a sound. Changed draw80pkr to connect the PROG line like videopkr. Cleaned up MCS48 to be dependent on a single makefile define, rather than separate defines for each CPU which didn't really buy us anything in terms of code size or performance [Aaron Giles].
- 0.128u5            : Aaron Giles fixed most sets using MCS48/51.C: Fatal Error when using -cheat trigger.
- 0.128u4            : Switched MCS48 to new memory functions [Couriersud].
- 0.128u3            : Couriersud converted the MCS-48 core to reference data via pointers.
- 0.127u5            : Aaron Giles fixed AF calculation in MCS48.
- 0.127u3            : Aaron Giles fixed memory handling of internal banks. They should be LOWER priority than the driver's memory maps. Reverted recent changes to MCS-48 core that were very hacky and which crashed many games. You can now properly override the internal memory map and do your own banking.
- 0.127u2            : Couriersud changed MCS-48 core to write p1 and p2 on reset. Use banking to handle EA line. Added MCS48_INTERNAL_ROMBANK define to header. Drivers which need to control the EA line have to initialize banking for internal/external rom. This is not yet optimal but works as expected with existing drivers and modified mario.c. Changed MCS-48 EA line handling to use an explicit bank for now. Aaron Giles changed all MCS-48 chips to have a 12-bit address space, regardless of internal ROM size.
- 0.127u1            : i8039 -> mcs48 [Aaron Giles]. Changed cpu\i8039\i8039.c/h and 8039dasm.c to cpu\mcs48\mcs48.c/h and mcs48dsm.c. Significant cleanup/rewrite of the MCS-48 CPU core [Aaron Giles]: Renamed from i8039 to mcs48. Changed to use data address space for internal RAM. Added internal memory maps for variants with internal RAM/ROM. Added a number of variants from documentation. Removed redundant and unused definitions from header file. Renamed constants and functions to be MCS48* prefixed. Re-verified all opcode behaviors and timing. Changed illegal opcodes to count 1 cycle to avoid infinite loops. Changed EA behavior so that it is a push from the driver instead of a pull on each opcode fetch (this may change further in the future). Reimplemented IRQ generation and timer behavior according to documentation. Updated all drivers accordingly. Fixed several uses of PULSE_LINE, which no longer works.
- 0.35b10            : Removed cpu\i8039\dis48.c, makefile.txt and readme.txt.
- 0.33b7             : Added dis48.c, makefile.txt and readme.txt.
- NOTES: MCS-48 CPU types: Intel I8021, I8022, I8035, I8048, I8648, I8748, I8039, I8049, I8749, I8040, I8050, I8041, I8741, I8042, I8242, I8742, MB8884, N7751 and M58715
- SOURCE: cpu\mcs48\mcs48.cpp



P6.5   8021

- 0.211              : Changed description to 'Intel 8021'.
- 0.196              : Changed description to 'Intel I8021'.
- 0.184              : Added 'I8021' device (cpu\mcs48\mcs48.cpp).
- 0.144u5            : Curt Coder fixed I8021/I8022 clock divider (MCS48).
- 0.136u3            : Added Intel 8021/8022 CPU types [Curt Coder].
- DRIVERS: (MESS) k28.cpp, mac128.cpp, microvsn.cpp, trs80m2.cpp, victor9k.cp and z29.cpp
- SOURCE: cpu\mcs48\mcs48.cpp



P6.6   8022

- 0.211              : Changed description to 'Intel 8022'.
- 0.196              : Changed description to 'Intel I8022'.
- 0.184              : Added 'I8022' device (cpu\mcs48\mcs48.cpp).
- 0.144u5            : Curt Coder fixed I8021/I8022 clock divider (MCS48).
- 0.136u3            : Curt Coder added Intel 8021/8022 CPU types.
- DRIVERS: -
- SOURCE: cpu\mcs48\mcs48.cpp



P6.7   8031

- 0.282              : Changed cpu\mcs51\mcs51.cpp/h to cpu\mcs51\i8051.cpp/h.
- 0.212              : Changed description to 'Intel 8031'.
- 25th November  2004: R. Belmont - Converted Steve Ellenoff's i8031/8051/8052/8731/8751/8752 core to the latest MAME core and submitted it so Aaron can emulate the protection in Sega's "Moonwalker" properly.
-  3rd April     2004: Phil Bennett - I've hastily transferred Steve Ellenoff's i8051 PinMAME core over to MAME. As a result, F-15SE and B.O.T.S.S start up with some DAC humming and what sounds like FM machine-gun fire and bell chimes. Given that the 68000 and 8031 aren't communicating properly, that's the extent of the current sound emulation.
- PCB: i8031, DIP40, sound MCU (Sliver), MAB8031AH = Philips MAB8031AH MCU = Single-chip 8-bit microcontroller (Chelnov)
- DRIVERS: fireball.cpp, karnov.cpp, laz_aftrshok.cpp, spinb.cpp, superqix.cpp and videopkr.cpp
- SOURCE: cpu\mcs51\i8051.cpp



P6.71  80C31

- 0.282              : Added cpu\mcs51\i80c51.cpp/h.
- 0.212              : Changed description to 'Intel 80C31'.
- 25th November  2004: R. Belmont - Converted Steve Ellenoff's i8031/8051/8052/8731/8751/8752 core to the latest MAME core and submitted it so Aaron can emulate the protection in Sega's "Moonwalker" properly.
- PCB: SC80C31BCCN40 MCU = 8051 family (Botss, F15se), LGS GMS80C301 (Puzzlekg)
- DRIVERS: artmagic.cpp, bingor.cpp, dynamoah.cpp, m72.cpp, marywu.cpp and piggypas.cpp
- SOURCE: cpu\mcs51\i80c51.cpp



P6.8   8032

- 0.282              : Added cpu\mcs51\i8052.cpp/h.
- 0.212              : Changed description to 'Intel 8032'.
- 0.146u2            : Update the MCS-51 timers sequentially for each cycle. Fixes sound CPU serial communications in the Eolith games [Phil Bennett]. Added I8032 (12MHz) CPU2.
- DRIVERS: eolith.cpp
- SOURCE: cpu\mcs51\i8052.cpp



P6.81  80C32

- 0.282              : Added cpu\mcs51\i80c52.cpp/h.
- 0.212              : Changed description to 'Intel 80C32'.
- 0.150              : Added 'I80C32' device (cpu\mcs51\mcs51.c).
- 0.143u8            : Jim Stolis fixed hang during "Initializing.." routine in 'S-Plus (SS4240) Coral Reef'. Replaced I8052 CPU1 with I80C32.
- 0.128u1            : Replaced I8051 CPU1 with I80C32 (Cardline still broken, we need the exact and complete CPU name) [Couriersud].
- PCB: SIEMENS 80C32 (Cardline), D-80C32-16 (ibm3153), TS80C32X2-MCA (ffruits)
- DRIVERS: cardline.cpp, cromptons.cpp, peplus.cpp and splus.cpp
- SOURCE: cpu\mcs51\i80c52.cpp



P6.9   8035

- 0.211              : Changed description to 'Intel 8035'.
- 0.196              : Changed description to 'Intel I8035'.
- 0.150              : Added 'I8035' device (cpu\mcs48\mcs48.c).
- 0.121u3            : Couriersud correct a potential issue if more than one 8039/8035 is used by a driver. Also should fix a potential inconsistency between saving and loading a state.
- 0.71u3             : Olivier Galibert fixed i803x jumps.
- 27th July      2003: Olivier Galibert fixed a bug in the jump addressing in the i8035 CPU core.
- 20th June      2001: Quench adjusted the way in which reading ports works in the i8035/39/48 CPU core.
- NOTES: Intel 8035 sound CPU based on the 8048 emulator by Dan Boris
- GAMES: Radar Scope (Nintendo 1980), Donkey Kong (Nintendo 1981), Astro Blaster (Sega 1981)
- PCB: W8035 (Spcforce), MBL8035N (MCU, RAM 64byte, ROM N/A) ShootingGallery
- DRIVERS: lckydraw.cpp, monzagp.cpp, n8080.cpp, quasar.cpp, rcorsair.cpp, ron.cpp, segag80r.cpp, spacefb.cpp, sumt8035.cpp, supstarf.cpp, vega.cpp, vicdual.cpp, zaxxon.cpp
- SOURCE: cpu\mcs48\mcs48.cpp



P6.A   8039

- 0.211              : Changed description to 'Intel 8039'.
- 0.196              : Changed description to 'Intel I8039'.
- 0.150              : Added 'I8039' device (cpu\mcs48\mcs48.c).
- 0.127u1            : i8039 -> mcs48 [Aaron Giles]. Changed cpu\i8039\i8039.c/h and 8039dasm.c to cpu\mcs48\mcs48.c/h and mcs48dsm.c. Significant cleanup/rewrite of the MCS-48 CPU core [Aaron Giles]: Renamed from i8039 to mcs48. Changed to use data address space for internal RAM. Added internal memory maps for variants with internal RAM/ROM. Added a number of variants from documentation. Removed redundant and unused definitions from header file. Renamed constants and functions to be MCS48* prefixed. Re-verified all opcode behaviors and timing. Changed illegal opcodes to count 1 cycle to avoid infinite loops. Changed EA behavior so that it is a push from the driver instead of a pull on each opcode fetch (this may change further in the future). Reimplemented IRQ generation and timer behavior according to documentation. Updated all drivers accordingly. Fixed several uses of PULSE_LINE, which no longer works.
- 0.124u3            : Wilbert Pol fixed I8039 DAA instruction when A is > 0xF9.
- 0.122u6            : Couriersud fixed regression on i8039 T1 counter mode. i8039.c/mario.c updates [Couriersud]: Fixed movd instructions. Added MB8884 and M58715 CPU types. Moved timer hack to M58715. Added ram_mask for internal ram access. Added R.A11 as 'M' to DASM flags. Added EA "IO" port. mario now uses M58715 as sound cpu. Hooked up EA line for M58715. Fixed portA startup value. Documented hardware changes to use a I8039 on a mario board.
- 0.121u3            : Couriersud correct a potential issue if more than one 8039/8035 is used by a driver. Also should fix a potential inconsistency between saving and loading a state.
- 0.112              : Minor cleanup to the 8039 disassembler [Nathan Woods].
- 0.107u2            : Aaron Giles fixed bug in 8039 CPU handling of A11 latch.
- 0.104u7            : Aaron Giles updated the i8039 disassembler to the new interface.
- 0.78u4             : Aaron Giles fixed incorrect address bus widths on the I8039 CPU core.
- 0.71u3             : Olivier Galibert fixed i803x jumps.
- 16th January   2002: Quench correct the internal behaviour of interrupt handling in the i8039 CPU core.
- 20th June      2001: Quench adjusted the way in which reading ports works in the i8035/39/48 CPU core.
- 0.36b12            : Nicola Salmoria added preliminary 8039 + DAC sound in Finalizer.
- 0.35b10            : Removed cpu\i8039\dis48.c, makefile.txt and readme.txt.
- 0.35b2             : Brian Stern fixed some bugs in the I8039 emulation.
- 0.34b4             : Dan Boris fixed bug in the I8039 external interrupt handling.
- 0.33b7             : Added 8039dasm.c, dis48.c, makefile.txt and readme.txt. Andrea Mazzoleni added the I8039 to the debugger, using Mike Cuddy's disassembler.
- 0.30               : Added i8039\i8039.c/h. 8039 emulator, and _emulated_ sound in Donkey Kong, Donkey Kong Jr. and Mario Bros. Since the boards also use discrete circuits to generate sound, some samples are still needed to get complete sound support. Also partial sound in Radarscope [Ron Fries, Dan Boris, Mirko Buffoni].
- 0.20               : Ron Fries created a new set of Donkey Kong samples, using Mike Cuddy's 8039 emulator. The new samples no longer have static, they are aliased and louder.
- NOTES: Based on the I8048 emulator by Dan Boris
- GAMES: Carnival (Sega 1980), Mario Bros. (Nintendo 1983), Juno First (Konami 1983), Gyruss (Konami 1983), Finalizer (Konami 1985)
- PCB: TMP8039P-6 (Megazone), OKI MSM80C39RS = 8039 sound CPU (Wilytowr), D8039LC (Junofrst)
- SOURCE: cpu\mcs48\mcs48.cpp



P6.A1  M58715

- 0.269              : Changed description to 'Mitsubishi M58715'.
- 0.122u6            : i8039.c/mario.c updates [Couriersud]: Fixed movd instructions. Added MB8884 and M58715 cpu types. Moved timer hack to M58715. Added ram_mask for internal ram access. Added R.A11 as 'M' to DASM flags. Added EA "IO" port. mario now uses M58715 as sound CPU. Hooked up EA line for M58715. Fixed portA startup value. Documented hardware changes to use a I8039 on a mario board. Replaced I8039 CPU2 with M58715 (11MHz).
- NOTES: I8039-clone Audio CPU, external ROM and 128k internal memory
- PCB: M58715 (Mario)
- DRIVERS: mario.cpp
- SOURCE: cpu\mcs48\mcs48.cpp


P6.A2  MB8884

- 0.269              : Changed description to 'Fujitsu MB8884'.
- 0.127u2            : Replaced I8035 CPU2 with MB8884 in 8ballact, dkong, dkongjr and drakton, verified on schematics [Couriersud].
- 0.122u6            : i8039.c/mario.c updates [Couriersud]: Fixed movd instructions. Added MB8884 and M58715 CPU types. Moved timer hack to M58715. Added ram_mask for internal ram access. Added R.A11 as 'M' to DASM flags. Added EA "IO" port. mario now uses M58715 as sound cpu. Hooked up EA line for M58715. Fixed portA startup value. Documented hardware changes to use a I8039 on a mario board.
- NOTES: Fujitsu MB8884
- DRIVERS: dkong.cpp
- SOURCE: cpu\mcs48\mcs48.cpp


P6.B   8041A

- 0.211              : Changed description to 'Intel 8041A'. Added 'Intel 8041AH' device (cpu\mcs48\mcs48.cpp).
- 0.196              : Changed description to 'Intel I8041'.
- 0.150              : Added 'I8041' device (cpu\mcs48\mcs48.c).
- 0.129              : Removed cpu\i8x41\i8x41.c/h, 8x41dasm.c and i8x41ops.c. Merged i8x41 (UPI-41) core into MCS-48 core [Aaron Giles]: All code now lives in mcs48.c. Rewrote disassembler as unified MCS-48/UPI-41 disassembler. Changed UPI-41 interfaces to match MCS-48. Added new master read/write interfaces for external access. Unified interface to 8243 expander chip. Converted tnzs and decocass to the new interfaces.
- 0.128u4            : Changed description to 'I8041'. Added cpu\i8x41\i8x41ops.c. UPI-41/42 (still I8x41) changes [Couriersud]: CPU\i8x41 should be renamed to UPI-4x, since UPI-41/42 was an intel chip family postponed for now until core moved to pointers. Removed I8041 definition from mcs48. Removed I8x41 cpu definition and config struct. Added I8041, I8741, I8042, I8242 and I8742 cpus to i8x41.c. Added internal memory maps. Internal ram now uses DATA memory space. Updated drivers. Increased interleave to 70 in decocass. This fixes decocass hanging in countdown around 13. No idea when this bug was introduced. Converted i8x41 to use pointers for state access. Separated opcodes into i8x41ops.c.
- 0.125u7            : i8x41 improvements [Wilbert Pol]: Removed i8x41.ram hack from the i8x41 CPU core. Fixed disassembly for opcode 0x67. Added configurable i8x41/i8x42 subtype support. Fixed carry flag handling in ADDC A,#N instruction. Fixed carry flag handling in RLC A instruction. Updated the ram sizes (8041 uses 128 bytes, 8042 uses 256 bytes). Added support for re-enabling interrupts inside an interrupt handler. Fixed cycle count for DJNZ instruction.
- 0.109u5            : Aaron Giles converted the i8x41 disassemblers to the new format and added step in/out support where it was obvious.
- 0.90               : Juergen Buchmueller fixed crash in i8x41 cpu core reading uninitialized internal RAM.
- 13th January   2003: Quench improved the i8x41 CPU core.
- 0.37b13            : Added cpu\i8x41\i8x41.c/h and 8x41dasm.c.
-  8th February  2001: Juergen Buchmueller managed to fix some 8x41 emulation bugs and got a few DECO Cassette system games running.
- 31st January   2001: Juergen Buchmueller further fixed the i8x41 core and hooked some parts of the DECO cassette system to the Burger Time driver.
-  9th October   1999: Juergen Buchmueller sent in an Intel 8x41 core.
- NOTES: The I8x41 core emulates the UPI-41/8041/8741/8042/8742. The work based on Intel(tm) UPI(tm)-41AH/42AH Users Manual
- GAMES: All DECO Cassette games
- SOURCE: cpu\mcs48\mcs48.cpp



P6.B1  8741 / MCS-48

- 0.211              : Changed description to 'Intel 8741A'. Added 'Intel 8741AH' device (cpu\mcs48\mcs48.cpp).
- 0.196              : Changed description to 'Intel I8741'.
- 0.150              : Added 'I8741' device (cpu\mcs48\mcs48.c).
- 0.137u1            : Quench added I8741 and restored correct DSP roms loads and proms for clone Flying Shark (bootleg).
- 0.128u4            : Couriersud added I8741 cpu to i8x41.c.
- 0.127u1            : Changed cpu\i8039\i8039.c/h and 8039dasm.c to cpu\mcs48\mcs48.c/h and mcs48dsm.c. Significant cleanup/rewrite of the MCS-48 CPU core [Aaron Giles]: i8039 -> mcs48. Removed redundant and unused definitions from header file. Renamed constants and functions to be MCS48* prefixed. Re-verified all opcode behaviors and timing. Changed illegal opcodes to count 1 cycle to avoid infinite loops. Changed EA behavior so that it is a push from the driver instead of a pull on each opcode fetch (this may change further in the future). Reimplemented IRQ generation and timer behavior according to documentation. Updated all drivers accordingly. Fixed several uses of PULSE_LINE, which no longer works.
- NOTES: NEC 8741 emulation by Tatsuyuki Satoh
- NOTES: The NEC 8741 communicate between main and sub CPU. Read Joystick and Coin Slot (both players). And read buttons (Fire 1, 2 and 3 (both players), service button)
- PCB: I8741A MCU (Fshark bootleg)
- DRIVERS: twincobr.cpp
- SOURCE: cpu\mcs48\mcs48.cpp



P6.B2  Taito 8741

- 0.221              : Simplified some handlers (machine\tait8741.h) [Osso].
- 0.159              : Added save state support to Taito 8741 [Osso].
- 0.154              : DECLARE_WRITE8_MEMBER( nmi_enable_w ), not DECLARE_WRITE8_HANDLER (machine\tait8741.h) [Miodrag Milanovic].
- 0.153              : Converted tait8741 MCU hack to a device, kept it as 4 pack since driver anyway have to use real MCU in future [Miodrag Milanovic].
- 0.146u5            : More protection sim fixes (machine\tait8741.c + drivers\cyclemb.c) [Angelo Salese].
- 0.129u6            : Added port names to the taito8741 device pending its proper devicification [Aaron Giles].
- 0.104u9            : Fixed Joshi Volleyball and Great Swordsman, which was broken in an earlier update [Tatsuyuki Sato].
- 0.35RC1            : Added machine\tait8741.c/h.
- GAMES: Taito - Joshi Volleyball (1983), Great Swordsman (1984), Gladiator (1986)
- PCB: NEC 8741 (Gladiatr), 8741 (Josvolly)
- DRIVERS: cyclemb.cpp, gladiatr.cpp and gsword.cpp
- SOURCE: machine\tait8741.cpp



P6.C   8042
- DRIVERS: (MESS) mindset.cpp
- SOURCE: cpu\mcs48\mcs48.cpp


P6.C1  8742

- 0.246              : Replaced i8742 simulation in thedealr.cpp with 8742 I/O MCU emulation [AJR].
- 0.211              : Changed description to 'Intel 8742'. Added 'Intel 8742AH' device (cpu\mcs48\mcs48.cpp).
- 0.196              : Changed description to 'Intel I8742'.
- 0.150              : Added 'I8742' device (cpu\mcs48\mcs48.c).
- 0.165              : Dumped The Dealer's i8742 internal ROM [Porchy].
- 0.128u4            : Nicola Salmoria and David Haywood removed ROM banking kludges from NewZealand Story. Replaced I8X41 CPU3 with I8742 in clones 'The NewZealand Story (Japan, old version) (older PCB)' and '(World, prototype?) (older PCB)'. Replaced I8X41 CPU3 with I8742 in Chuka Taisen.
- NOTES: MCU internal ROM size = 2048 bytes ($800)
- PCB: i8742 (Drtoppel), INTEL D8742 (Tnzs), i8742 MCU (Chukatai, Tnzs), M-CHIP 40-pin (Arknoid2)
- DRIVERS: gladiatr.cpp, thedealr.cpp and tnzs.cpp
- SOURCE: cpu\mcs48\mcs48.cpp



P6.D   8048

- 0.228              : Fixed (MESS) Odyssey 2 loading games with -cart not working (mcs48\mcs48.cpp) [hap].
- 0.211              : Changed description to 'Intel 8048'.
- 0.196              : Changed description to 'Intel I8048'.
- 0.184              : Added 'I8048' device (cpu\mcs48\mcs48.cpp).
- 20th June      2001: Quench adjusted the way in which reading ports works in the i8035/39/48 CPU core.
- NOTES: Based on the I8048 emulator (C) 1997 by Dan Boris
- GAMES: Sai Yu Gou Ma Roku (Japan bootleg 1) - China Gate (1988) clone
- DRIVERS: (MESS)
- SOURCE: cpu\mcs48\mcs48.cpp



P6.D1  8748

- 0.211              : Changed description to 'Intel 8748'.
- 0.196              : Changed description to 'Intel I8748'.
- 0.150              : Added 'I8748' device (cpu\mcs48\mcs48.c).
- NOTES: MCU internal ROM size = 1024 bytes ($400). The game 'Sai Yu Gou Ma Roku' (Japan bootleg 1) has a i8748H MCU on board, but MAME uses the I8048.
- PCB: Intel i8748H (Chinagat), 8748 (Sstingry), 8748 (Csilver)
- DRIVERS: alpha68k.cpp, chinagat.cpp and cubeqst.cpp
- SOURCE: cpu\mcs48\mcs48.cpp



P6.E   8049

- 0.211              : Changed description to 'Intel 8049'.
- 0.143              : Fixed Halts at "Please Standby" in Cliff Hanger and clone. Fixed Cobra Command (M.A.C.H. 3 hardware) stalls on its opening diagnostic screen [smf]. Added I8049 CPU2.
- DRIVERS: cliffhgr.cpp, cubeqst.cpp, firefox.cpp and gottlieb.cpp
- SOURCE: cpu\mcs48\mcs48.cpp



P6.E1  8749

- 0.211              : Changed description to 'Intel 8749'.
- 0.199              : Hook up I8749 MCU to get working sound in clone Tetris (bootleg set 3) [AJR].
- 0.196              : Changed description to 'Intel I8749'.
- 0.184              : Added 'I8749' device (cpu\mcs48\mcs48.cpp).
- 0.123u2            : Curt Coder added i8749 CPU variant for MESS.
- NOTES: drivers\chinagat.c: There's an Intel i8748 CPU on the bootlegs (bootleg 1 lists D8749 but the microcode dump's the same).
- PCB: NEC D8749HC (Stratof), D8749 (Chinagat), 8749HD (Wildfang), Intel 8749H (WB3), P8749H (Toki)
- DRIVERS: atetris.cpp and gaiden.cpp
- SOURCE: cpu\mcs48\mcs48.cpp



P6.F   8051 / MCS-51

- 0.283              : Removed spurious port read messages (mcs51\i8051.cpp) [O. Galibert].
- 0.282              : Changed cpu\mcs51\mcs51.cpp/h to cpu\mcs51\i8051.cpp/h and mcs51\mcs51ops.hxx to mcs51\mcs51ops.cpp. Fixed destination RAM type in XCHD A, @R0/@R1. The initial value is read from internal RAM (IRAM_IR). The final value must be written to the internal RAM too (IRAM_IW instead of IRAM_W) (mcs51\mcs51ops.hxx). Fixed destination RAM type for XCHD A, @R0/@R1. This applies the same fix as PR #14289 to axc51 too (axc51\axc51ops.hxx) [Fabio D'Urso]. Renamed the external data bus from io to data. Start turning the internal maps into real maps. Modernization step 1+2 (mcs51\i8051.cpp) [O. Galibert].
- 0.274              : Fixed P3.1 output logic. Mode 0 is still incorrect. Don't mask P3.1 at reset (mcs51\mcs51.cpp) [Patrick Mackinlay]. Update savestates. Added some TODO notes. Improved execute_run icount timing. Max opcode cycles is 4. Removed unneeded powerdown check. Removed old changelog from comments and copypasted comment block. Clean up source code spacing (mcs51\mcs51.cpp) [hap]. Implemented PES bit for DS5002FP. PES bit is peripheral enable select on bytewide bus (mcs51\mcs51.cpp) [cam900].
- 0.263              : Correctly override some SFR names in dissassemblers (mcs51\mcs51dasm.cpp) [AJR].
- 0.256              : Added rxb8 to uart reset [hap].
- 0.255              : Implemented serial input/output as bit stream (mcs51\mcs51.cpp) [Patrick Mackinlay].
- 0.222              : Correct MCU type for (MESS) Consola EMT (cpu\mcs51\mcs51.cpp). Added Dallas DS80C320 HSM, Siemens SAB80C535 and Intel 8344AH RUPI-44 disassemblers [AJR]. READ/WRITE macros removal (mcs51\mcs51.cpp) [Osso].
- 0.213              : Added some disassembly helpers for (MESS) Monon Color (mcs51\mcs51dasm.cpp) [anonymous].
- 0.212              : Changed description to 'Intel 8051'. Disassembler update: Restored some 8052 SFR and bit names that were inadvertently omitted for more advanced models. Added a few more T2-related names. Added i8xc51fx and i8xc51gb disassemblers with additional SFR and bit names. Removed i80c51 from unidasm (actual differences from i8051 are not significant) [AJR].
- 0.208              : New version of old hack to break out of JB INT0/INT1 loops when interrupt is triggered (cpu\mcs51\mcs51.cpp) [AJR].
- 0.205              : Added mcs51\axc51-core.cpp/h and axc51-core_dasm.cpp/h. Added derived CPU type for AX51-CORE (used by AX208 and others) so that we can start to customize disassembly and execution. Added SFR register names for axc51 disassemler [David Haywood]. Removed remaining MCFGs [Ryan Holtz].
- 0.199              : Consolidate internal address maps. Removed P0 from ROMless versions since it conflicts with external accesses on hardware [AJR].
- 0.198              : Added more interrupt and timer registers to debug state. Eliminated atrocious hack for breaking out of INT0 polling loops [AJR]. Minor DASM fix for case 0x95 [Patrick Mackinlay].
- 0.197              : Safer way to propagate INT0 and INT1 inputs, which also need to be active low [AJR].
- 0.196              : Use callbacks for parallel ports [AJR].
- 0.194              : Added DPTR, P0, P1, P2 and P3 to debug state registration [AJR].
- 0.193              : Added cpu\mcs51\mcs51dasm.h.
- 0.185              : 8051 MCU family core: Fixed the indirect memory access opcodes dec,inc and xch_a. Indirect access can't touch the SFR and must point to the extra memory above 0x80. This probably fix many machines using this MCU (cpu\mcs51\mcs51ops.hxx) [jfdelnero].
- 0.180              : Changed the MCS51 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.176              : Converted MCS-51 serial_rx and serial_tx to DEVCB [Osso].
- 0.174              : Changed cpu\mcs51\mcs51ops.inc to mcs51ops.hxx.
- 0.161              : Added the ability to MCS51 family processors to use port bits as inputs which actually are used as outputs because a "0" has been written to them. The CMOS chips in the family may be misused in this way when a low impedance source is connected to them [Couriersud].
- 0.155              : Initialize all serial state and added serial state to the save state. Fixed MCS-51 modernization regression (MAME 0.150) with timer 2 interrupts for some cpu cores. This fixed loss of in-game sound in Candy Candy (eolith.c) [Wilbert Pol].
- 0.154              : Fixed usage of uninitialized members in mcs51_cpu_device [Oliver Stoeneberg].
- 0.153              : Changed cpu\mcs51\mcs51ops.c to mcs51ops.inc [Oliver Stoeneberg].
- 0.150              : Modernized MCS-51 cpu core [Wilbert Pol].
- 0.148u3            : Make MCS51 callbacks used delegates (cpu\mcs51\mcs51.c/h, sound\qs1000.c/h, drivers\eolith.c, maygayv1.c, includes\eolith.h, micro3d.h and machine\micro3d.c) [Miodrag Milanovic].
- 0.146u2            : Update the MCS-51 timers sequentially for each cycle. Fixes sound CPU serial communications in the eolith.c games [Phil Bennett].
- 0.146u1            : WANGPC Keyboard WIP from MESS (cpu\mcs51\mcs51.c) [Curt Coder].
- 0.144u4            : Documented MCU ports in The Deep, doesn't work yet due of a MCS51 core bug [Angelo Salese].
- 0.131u2            : MCS-51 fixes [Aaron Giles]: jb int0,<self> loops are now broken out of if int0 comes and is taken. Externally-clocked counters only count when enabled. Internal RAM no longer wraps when accessed out of bounds.
- 0.131u1            : Fixed MCS51 disassembler to work properly when there are two memory arguments (the second would overwrite the first) [Aaron Giles].
- 0.128u6            : Removed hack for setting MCS51 serial callbacks. Updated micro3d to use new functions [Aaron Giles].
- 0.128u4            : Switched MCS51 to new memory functions [Couriersud].
- 0.128u3            : Couriersud converted the MCS-51 core to reference data via pointers. Merged DS5002FP into MCS51 [Couriersud]: Merged DS5002FP. Disassembler now uses type specific memory names. Merged DS5002FP disasm. Added 83C751 memory names to disassembler. Delete DS5002FP specific files. Removed unnecessary cpu callback in wrally. DATA_MAP ==> IO_MAP in wrally.
- 0.128u2            : Changed cpu\i8051\i8051.c/h, 8051dasm.c and i8051ops.c to cpu\mcs51\mcs51.c/h, mcs51dasm.c and mcs51ops.c. MCS-51 improvements [Couriersud, Jim Stolis]: Fixed split timer mode. No interrupts for timer 0 modes 0,1,2 while timer 1 in mode 3. MCS51 core now supports 4 interrupt levels depending on CPU type. According to Philips, 80C31 is a 80C52 family member with 128K internal ram and no rom. Implemented CMOS features: Powerdown & idle. Added comments about special function registers on Philips 80C52. Cleaned up reset routines. Fixed INT0 & INT1 interrupt line handling. Finally move cpu\i8051 to cpu\mcs51, rename files and some constants. Quotes from the documentation added to the source as well. Started DS5002FP integration.
- 0.128u1            : MCS51/I8051 improvements [Couriersud, Jim Stolis]: Improved serial port timing. Better infrastructure for adding more variants like DS5002. Fixed port reading. Rewrote Macros for better readibility. Fixed and rewrote Interrupt handling. Now returns INTERNAL_DIVIDER and adjusted cycle counts. Remove unnecessary and duplicated code. Remove unnecessary functions. Rewrite to have sfr-registers stored in int_ram. Debugger may now watch sfr-registers as well. Implemented interrupt callbacks (HOLD_LINE now supported). Runtime switch for processor type - remove ifdefs. Internal memory maps for internal rom versions (internal ram now displayed in debugger). More timer cleanups from manual. Fixed timer 2 interrupts. Implement serial mode 2/3 rx and tx clock handling. Remaining games checked and adapted to changes in cpu core. Cardline still broken. I need the exact and complete cpu name. Added more variants 803X, 80CXX and AT89C4051. Fixed segas18.c (segaic16.c) MCU maps. Fixed sslam.c. Fixed issue with core allocation of ram (duplicate savestate) in limenko.c and videopkr.c.
- 0.127u7            : Grull Osgo fixed i8051 timers and the AJMP opcode to take 2 bytes instead of 3.
- 0.126u3            : I8051 CPU core timer updates [Wilbert Pol]: Added support for timer mode 0 (13 bit timer). Cleaned up timer code a bit, fixing some off-by-one errors when timers overflow.
- 0.125u5            : In the i8051 core, timer 0's second split counter was incorrectly checking the Timer 1 Run Control Bit. Fixed it [Jim Stolis].
- 0.122u8            : Jim Stolis correct previous i8051 timer fix to use more accurate IE SFRs.
- 0.122u7            : Jim Stolis fixed I8051 timers from firing when not enabled. Checking TCON alone is not enough to invoke timers. Added IE SFR flags in conditional.
- 21st January   2008: Jim Stolis - Hack Free: I finally found the bug that was forcing me to add memory hacks to the driver in order for it to bypass the memory tests for each game. The I8051 core library was basically firing the timers when they were sometimes not enabled. What this did was cause the timer interrupts to modify memory while the memory check subroutine was running. The memory check routine was writing specific values into memory and verifying that they read back the same value that was written. But with the timers updating memory at the same time, the memory check would not find the values it was expecting and therefore fail. The fix should help slightly increase the responsiveness of the game code too. I believe the I8051 core has other areas to investigate, but this fix is a huge change for the driver. With the fix in place, all memory hacks in the driver can be removed. This means any new clones that are added in the future should drop in nicely without any special memory modifications. I will be submitting a new driver update in the near future with all the hacks removed.
- 0.122u3            : Pierpaolo Prazzoli fixed save states in i8051 cpu core.
- 0.121u2            : Stephane Humbert fixed BCD math error in i8051 core.
- 0.120u4            : Jim Stolis fixed a bug in the i8051 core that improperly fired the Timer2 interrupt when it wasn't enabled.
- 0.120u1            : Jim Stolis fixed several i8051 issues: Fixed a bug with some opcodes having the wrong cycle counts. Fixed a bug where determining the proper timer mode. Fixed a bug where determining the proper serial transmit mode. Added support for split timer mode.
- 0.111u1            : Special LIU fixed implementation of da_a instruction in i8051 core. Giuseppe Gorgoglione converted 8051dasm.c to use cpuintrf_temp_str() instead of local string pools.
- 0.109u5            : Aaron Giles converted the i8051 disassemblers to the new format and added step in/out support where it was obvious.
- 0.89u1             : Aaron Giles fixed I8051 cpu core bugs. Uses correct read/write memory routines for external accesses now and supported external IRQs.
- 25th November  2004: R. Belmont - Converted Steve Ellenoff's i8031/8051/8052/8731/8751/8752 core to the latest MAME core and submitted it so Aaron can emulate the protection in Sega's "Moonwalker" properly.
- 0.88u5             : Added cpu\i8051\i8051.c/h, i8051ops.c and 8051dasm.c. i8x51 cpu core [Steve Ellenoff]. This work is based on 'Intel(tm) MC51 Microcontroller Family Users Manual', 8051 simulator by Travis Marlatte and Portable UPI-41/8041/8741/8042/8742 emulator V0.1 by Juergen Buchmueller.
-  3rd April     2004: Phil Bennett - I've hastily transferred Steve Ellenoff's i8051 PinMAME core over to MAME. As a result, F-15SE and B.O.T.S.S start up with some DAC humming and what sounds like FM machine-gun fire and bell chimes. Given that the 68000 and 8031 aren't communicating properly, that's the extent of the current sound emulation.
-  1st April     2004: Phil Bennett - I've been informed (thanks Thomas!) that there's an i8051 core in PinMAME, supporting the i80C31 MCU. Sound emulation *may* follow soon. I'm expecting thumping FM techno soundtracks from F-15 Strike Eagle and B.O.T.S.S.
- DRIVERS: drivers\armedf.cpp, artmagic.cpp, barata.cpp, bingor.cpp, blktiger.cpp, cardline.cpp, dec0.cpp, dec8.cpp, djboy.cpp, eolith.cpp, fireball.cpp, firetrap.cpp, gaelco2.cpp, glass.cpp, gms.cpp, goldstar.cpp, hvyunit.cpp, karnov.cpp, m72.cpp, marywu.cpp, maygayv1.cpp, mephistp.cpp, micro3d.cpp, peplus.cpp, piggypas.cpp, re900.cpp, sliver.cpp, snesb.cpp, snowbros.cpp, spinb.cpp, splus.cpp, sslam.cpp, superqix.cpp, system1.cpp, targeth.cpp, thedeep.cpp, thoop2.cpp, tumbleb.cpp, vamphalf.cpp, videopkr.cpp and wrally.cpp
- SOURCE: cpu\mcs51\i8051.cpp



P6.F1  80C51

- 0.283              : Added read/write slave address registers to 80c51 (mcs51\i80c51.cpp) [O. Galibert].
- 0.282              : Added cpu\mcs51\i80c51.cpp/h.
- 0.262              : Dumped 80C51 MCU rom MX10EXAQC for Crazy Bugs [buffy].
- 0.212              : Changed description to 'Intel 80C51'.
- 0.186              : Fixed Bonus Chance CPU clock and added undumped MCU [AJR]. Added I80C51 (12MHz) sound.
- 0.177              : Added Maygay M1A MCU bones, commuication not hooked up yet. Fixed maygay M1A lamping code to work with layouts. Maygay1b: Fixed second set of lamps and partially investigated MCU hookup [David Haywood]. Added I80C51 (2MHz) CPU2.
- 0.141              : Fixed Heavy Unit - Game now playable. Hooked up KANEKO MERMAID protection MCU and removed obsolete simulation code. Also updated the driver to use a state class [Phil Bennett, Dr. Decapitator, Andrew Gardner]. Added I80C51 (6MHz) CPU4.
- 0.138u4            : Added unverified Beast MCU internal ROM image to DJ Boy [Dr. Decapitator, Tomasz Slanina, Lord Nightmare, Phil Bennett]. Added I80C51 (6MHz) CPU4.
- 20th May       2009: Guru - The 80C51 MCU from Heavy Unit has just been decapped. This is the ROM image, you can clearly see a large part of the lower section of the ROM is unused.
- 0.128u1            : Replaced I8051 CPU2 with I80C51 in Power Balls (Super Slam conversion).
- DRIVERS: blocktax.cpp, cashline.cpp, cb2001.cpp, cosmos_playc8f.cpp, djboy.cpp, goldstar.cpp, hvyunit.cpp, maygay1bsw.cpp, microdar.cpp, poker72.cpp and sslam.cpp
- SOURCE: cpu\mcs51\i80c51.cpp



P6.F2  80C51GB

- 0.282              : Added cpu\mcs51\i80c52.cpp/h.
- 0.245              : Correct SFR address of ACON for i8xc51gb disassembly (mcs51\mcs51dasm.cpp) [AJR].
- 0.212              : Identified CPU type as 80C51GB (specific differences obviously not emulated) [AJR].
- DRIVERS: scm_500.cpp
- SOURCE: cpu\mcs51\i80c52.cpp


P6.F3  Philips MX10EXA

- 0.272              : Implemented unsigned 16*16 multiply and branch if positive. Fixed flags for unsigned 32/16 divide [David Haywood]. Confirmed Icescape XA as the same as Fearless Pinocchio [Team Europe]. Added some XA opcode groups that get executed with this now (xa\xa_ops.cpp) [David Haywood].
- 0.270              : Implemented add with indexed addressing mode for source. Used by clone Triple Fever (V105US) microcontroller program. The game no longer causes a fatal error, but hangs instead (cpu\xa\xa_ops.cpp) [David Haywood].
- 0.268              : Added cpu\xa\xa.cpp/h, xa\xa_ops.cpp and xa\xadasm.cpp/h. New Philips XA CPU and disassembler. This adds basic execution to XA core. It emulates enough of the XA to give fearless and superkds working sound. Only the exact forms of the opcodes used so far have been implemented. No optimizations have been done, use of const, inline use, templates etc. are planned for a future update; code is still primed for debugging and development. Overall structure, code style are not 100% final (see above) and will be adjusted as the CPU is better understood. Peripherals, interrupts etc. are not yet fully implemented, nor is anything outside of the page zero mode used here due to lack of test cases [David Haywood].
- NOTES: MX10EXAQC (80C51 XA based MCU) - While advertised as a type of 80c51 (and even referred to as such by the test mode in some IGS titles) this is a distinct architecture. The opcode set does extend on an 80c51, and tools were provided to help convert 80c51 sources to run on the XA architecture, but the encoding is entirely different and there is no binary compatibility. See  https://www.ceibo.com/eng/datasheets/Philips-XA-User-Guide.pdf.
- DRIVERS: igs_fear.cpp and igs_m027xa.cpp
- SOURCE: cpu\xa\xa.cpp


P6.F4  8052

- 0.282              : Added cpu\mcs51\i8052.cpp/h.
- 0.212              : Changed description to 'Intel 8052'.
- 25th November  2004: R. Belmont - Converted Steve Ellenoff's i8031/8051/8052/8731/8751/8752 core to the latest MAME core and submitted it so Aaron can emulate the protection in Sega's "Moonwalker" properly.
- 0.88u5             : i8x51 cpu core [Steve Ellenoff]. This work is based on 'Intel(tm) MC51 Microcontroller Family Users Manual', 8051 simulator by Travis Marlatte and Portable UPI-41/8041/8741/8042/8742 emulator V0.1 by Juergen Buchmueller.
- GAMES: All Player's Edge Plus games, Mission Craft (Sun 2000), Wyvern Wings (SemiCom 2001)
- PCB: 83c02 = I8052 compatible (Pepp0516)
- DRIVERS: eolith.cpp, ghosteo.cpp, limenko.cpp, maygayv1.cpp, vamphalf.cpp and vegaeo.cpp
- SOURCE: cpu\mcs51\i8052.cpp



P6.F5  80C52

- 0.282              : Added cpu\mcs51\i80c52.cpp/h.
- 0.212              : Changed description to 'Intel 80C52'.
- 0.196              : Use callbacks for parallel ports [AJR]. Replaced I8052 CPU3 with I80C52 in Hyper Pacman.
- 0.128u2            : Implemented 80C52 interrupt handling. According to Philips, 80C31 is a 80C52 family member with 128K internal ram and no rom. Added comments about special function registers on Philips 80C52 [Couriersud].
- DRIVERS: (MESS) lggp40
- SOURCE: cpu\mcs51\i80c52.cpp


P6.F6  80C562

- 0.282              : Added cpu\mcs51\i80c51.cpp/h.
- 0.263              : Added placeholder device type for P80C562, with custom SFR definitions for the disassembler (mcs51\mcs51.cpp). Added p8xc562 type (tools\unidasm.cpp) [AJR].
- NOTES: Philips P80C562
- DRIVERS: funeball.cpp
- SOURCE: cpu\mcs51\i80c51.cpp



P6.G1  8744

- 0.282              : Changed cpu\mcs51\mcs51.cpp/h to cpu\mcs51\i8051.cpp/h.
- 0.234              : Added i8744 [Patrick Mackinlay].
- DRIVERS: ???
- NOTES: Intel 8744H RUPI-44
- SOURCE: cpu\mcs51\i8051.cpp



P6.G2  8751

- 0.282              : Changed cpu\mcs51\mcs51.cpp/h to cpu\mcs51\i8051.cpp/h.
- 0.234              : Dumped Space Harrier 315-5163A I8751 MCU [coolmod, TeamEurope].
- 0.230              : Redumped and verified the 315-5159A I8751 MCU for Shooting Master [Joe Magiera, TeamEurope, Brian Troha, The Dumping Union].
- 0.212              : Changed description to 'Intel 8751'.
- 0.131u1            : Aaron Giles added and began hooking up the 8751's for the System 1 games. Still some work to do. Dr. Decapitator, Guru and Angelo Salese added proper I8751 MCU dump for Black Tiger.
-  6th April     2007: Charles MacDonald - I was running some timing tests on the 8751 MCUs used in several Sega games, and noticed they seemd to respond to the internal ROM / external program memory select pin (/EA) even when it was changed after a reset. I thought this meant it may have been possible to force the MCU to run a user specified program and dynamically enable/disable the internal ROM while running. This ended up not being the case, the opcodes are fetched but not acted upon. Maybe the MCU internally drives NOPs onto the data bus. I wonder if the program counter continually increments so that you could force the PC to get into the external program memory range, but in the limited testing environment I had set up this didn't seem to happen. Probably the PC is never incremented. This behavior seems to be standard across the Intel C8751 and D8751 chips. If /EA is pulled high or left unconnected, the internal ROM program runs. If /EA is tied to ground it stops execution and starts fetching opcodes by strobing /PSEN repeatedly. You can change /EA as many times as you want and reset the MCU with it in different states, you'll get the same behavior every time. It's unfortunate, but at least this confirms that a trick used to dump some protected 8051s will not work on these MCUs in particular. I compared their operation to a unprotected AT89C52 which responded correctly, so this is definitely a function of the MCU security bit(s).
- 0.104u4            : Aaron Giles fixed the 8751 MCU (8751MCUgames0104u3: segas16a/b, segas18 games using a 8751 are not working).
- 0.90               : Nicola Salmoria updated the Super Qix driver. Repaired the ROM code and added support for the I8751 MCU, so the two original sets work.
- 0.89u1             : Aaron Giles hooked up the 8751 in mwalk, mwalka and mwalkb and fixed sound ROM loading - all games now work.
- 25th November  2004: R. Belmont - Converted Steve Ellenoff's i8031/8051/8052/8731/8751/8752 core to the latest MAME core and submitted it so Aaron can emulate the protection in Sega's "Moonwalker" properly.
- 12th January   2003: Bryan McPhail emulated the i8751 protection in Firetrap so the original version works.
-  9th January   2003: Bryan McPhail fixed the erratic coin inputs in the i8751 emulation in the Karnov driver.
- 26th December  2002: Angelo Salese simulated the i8751 protection in Birdie Try so that the game is playable, but there are some misplaced sprites in it. Bryan McPhail correct the CPU clock speed in it.
- 31st July      2000: Guru - Dumped Karnov's i8751 MCU.
- 15th January   2000: Bryan McPhail got the two original Side Pocket romsets working by simulating the i8751 MCU.
- 25th September 1999: Nicola added Gallop to the M72 driver, but the rest of the M72 games need their i8751 MCU emulated before they work.
- 0.35b3             : Simulated the 8751 protection in F-1 Dream [Eric Hustvedt].
- NOTES: i8751 (C8751H-88) is read protected. The Mad Gear PCB has an unused pad on the board for an i8751 (trivia for the DEV). Protection simulation (drivers\m72.c): Most of the games running on this board have an 8751 protection MCU. It is not known how it works in detail, however it's pretty clear that it shares RAM at b0000-b0fff. On startup, the game writes a pattern to the whole RAM, then reads it back expecting it to be INVERTED. If it isn't, it reports a RAM error. If the RAM passes the test, the program increments every byte up to b0ffb, then calls a subroutine at b0000, which has to be provided by the MCU. It seems that this routine is not supposed to RET, but instead it should jump directly to the game entry point. The routine should also write some bytes here and there in RAM (different in every game); those bytes are checked at various points during the game, causing a crash if they aren't right. Note that the program keeps incrementing b0ffe while the game is running, maybe this is done to keep the 8751 alive. We don't bother with that. Finally, to do the ROM test the program asks the MCU to provide the correct values. This is done only in service, so doesn't seem to be much of a protection. Here we have provided the correct crcs for the available dumps, of course there is no guarantee that they are actually good. All the protection routines below are entirely made up. They get the games running, but they have not been derived from the real 8751 code.
- PCB: MPU 8751 (Ghostb, Gondo), C8751H (Blktiger, Srdarwin), D8751H (Airduel, Sf1), i8751 (Garyoret, Wndrplnt), iC8751H-88-L5310039 (Shtngmst)
- DRIVERS: armedf.cpp, bionicc.cpp, blktiger.cpp, cdi.cpp, changyu.cpp, dec0.cpp, dec8.cpp, firetrap.cpp, m72.cpp, segahang.cpp, segas16a.cpp, segas16b.cpp, segas18.cpp, snesb.cpp, superqix.cpp, system1.cpp and thedeep.cpp
- SOURCE: cpu\mcs51\i8051.cpp



P6.G3  87C51

- 0.282              : Added cpu\mcs51\i80c51.cpp/h.
- 0.217              : Decapped Date Quiz Go Go, Dream World and Hatch Catch MCUs (87c51rap.bin and 87c51fa.bin) [Team CAPS0ff, Guru].
- 0.215              : Decapped 87C51 MCU for the changyu2 [CAPS0ff, TeamEurope].
- 24th October   2019: CAPS0ff - C055: changyu2/CYE 87C51. TeamEurope recently asked us to dump an 87C51. We thought we had done this before, but turns out we had only looked at related chips like 8751H and 87C51FA. This adds a few complications: Not known if vulnerable to laser glitching like 87C51F. Don't have a known fuse location like 8751H. Not familiar with the XOR encryption scheme. So we procured some sample chips, this time literally marked SAMPLE. After a few masking tests, we discover the security fuses are in the location marked above. This makes the project interesting because its rather close to the EPROM. However, we are able to apply masks reasonably precisely, so didn't worry about this too much. Here is the final mask on C055. Note that the mask was applied pretty heavily to try to minimize edge leakage. However, this is encrypted, so we now need to address cracking the XOR table. The basic idea is that there are 0x20 XOR encryption key bytes that are linearly applied, modulo the address. However, since the default key of 0xFF should not change the contents, the result is also inverted. Guessing the key is probably not too hard as, for example, usually firmware starts with LJMP (0x02). We started by looking at reprogramming the XOR table as a direct extraction technique. Unfortunately, our primary programmer (BP Microsystems) doesn't allow directly programming the table. We also recently received a bunch more chips, including a number of 87C5X. So hopefully there will be a follow up soon.
- 0.212              : Changed description to 'Intel 87C51'.
- 0.196              : Changed description to 'Intel I87C51'.
- 0.184              : Added 'I87C51' device (cpu\mcs51\mcs51.cpp).
- DRIVERS: changyu.cpp and tumbleb.cpp
- SOURCE: cpu\mcs51\i80c51.cpp



P6.G4  8752

- 0.282              : Added cpu\mcs51\i8052.cpp/h.
- 0.212              : Changed description to 'Intel 8752'.
- 25th November  2004: R. Belmont - Converted Steve Ellenoff's i8031/8051/8052/8731/8751/8752 core to the latest MAME core and submitted it so Aaron can emulate the protection in Sega's "Moonwalker" properly.
- NOTES: The Intel or Philips 8752 MCU is read protected, the code can't be dumped. The following games uses the I8752 MCU (MCU code can't be dumped): snowbros.c - hyperpac, twinkle, toppyrap, moremore, moremorp, 3in1semi, cookbib2, cookbib3 and finalttr. And driver tumbleb.c - htchctch, cookbib, chokchok, metlsavr, bcstry and bcstrya.
- DRIVERS: (MESS)
- SOURCE: cpu\mcs51\i8052.cpp



P6.G5  87C52

- 0.282              : Added cpu\mcs51\i80c52.cpp/h.
- 0.217              : Decapped Choky! Choky! MCU (p87c52ebpn.bin) [Team CAPS0ff, Guru].
- 0.212              : Changed description to 'Intel 87C52'.
- 0.196              : Changed description to 'Intel I87C52'.
- 0.184              : Added 'I87C52' device (cpu\mcs51\mcs51.cpp).
- 0.141              : Added the recent 87C52 MCU decaps to Wonder League Star and Wonder League '96 [Dr. Decapitator].
- 0.113u4            : David Haywood added I87C52 MCU protection data, extracted from the shared ram to Wonder League Star - Game now playable.
- 19th January   2007: f205v dumped the TSC87C52 microcontroller rom in Mongolfier New (Italian) and Soccer New (Italian).
- 0.93u3             : Improved protection and added I87C52 protdata.bin rom in New HyperMan (3-in-1 with Cookie & Bibi & HyperMan) - Game now playable. The protdata.bin rom is not a real rom but instead the data extracted from shared ram, the MCU puts it there [Corrado Tomaselli, David Haywood].
- 25th November  2004: R. Belmont - Converted Steve Ellenoff's i8031/8051/8052/8731/8751/8752 core to the latest MAME core and submitted it so Aaron can emulate the protection in Sega's "Moonwalker" properly.
- 0.88               : Added user1 rom (87C52 MCU protdata.bin) to B.C. Story.
- 0.79               : David Haywood emulated the protection (Philips 87c52 MCU) in More More Plus - Game now playable. Added 512 bytes protdata user1 rom.
- 18th November  2003: David Haywood emulated the Philips 87c52 MCU in Cookie and Bibi 2. And More More plus doesn't point the vectors there but does have a jump there in the code. See hyperpac for an example, the protection data for that game was extracted from the bootleg.
- 0.77u1             : David Haywood fixed Cookie & Bibi 2 - Game now playable. Added user1 rom ($0 - 87C52 protdata).
- 18th November  2003: David Haywood emulated the protection (Philips 87c52 MCU) in Cookie & Bibi 2.
- 12th November  2003: David Haywood emulated the protection (87c52) in Hatch Catch, so it's now fully playable with sound.
- PCB: Philips P87C52EBPN MCU DIP40 (Semibase, Dreamwld, Hyperpac, BCStory), 87C52 (Htchctch), TSC87C52-16CB - PLCC44 - Programmable 8BIT MCU (Monglfir, Soccernw)
- DRIVERS: tumbleb.cpp
- SOURCE: cpu\mcs51\i80c52.cpp



P6.G6  87C552
- 0.282              : Added cpu\mcs51\i80c51.cpp/h.
- 0.263              : Added placeholder device type for P87C552, with custom SFR definitions for the disassembler (mcs51\mcs51.cpp). Added p8xc552 type (tools\unidasm.cpp) [AJR].
- NOTES: Philips P87C552
- DRIVERS: midqslvr.cpp
- SOURCE: cpu\mcs51\i80c51.cpp



P6.G7  87C751

- 26th September 2005: Pierpaolo Prazzoli - Emulated OKI6295 sound in Power Balls (Super Slam conversion). The Philips 87C751 sound MCU wasn't read-protected (=> s87c751.bin).
- 0.95u2             : Quench improved Super Slam audio MCU simulation.
-  1st February  2004: Quench simulated the OKI6295 sound CPU (Signetics 87C751) in Super Slam, but it's not perfect yet.
- NOTES: The 87C751 is a 8051 based MCU (DIP24) with 2k x8 OTP EPROM and 64k x8 SRAM.
- NOTES: MCU 87C751 simulation: A table converts commands sent from the main CPU, into sample numbers played back by the sound processor. All commentry and most sound effects are correct, however the music tracks may be playing at the wrong times. Accordingly, the commands for playing the samples is just a guess: 1A, 1B, 1C, 1D, 1E, 60, 61, 62, 65, 66, 67, 68, 69, 6B, 6C. Samples 63, 64 and 6A are currently not fitted anywhere. Note that samples 60, 61 and 62 combine to form a music track. Ditto for samples 65, 66, 67 and 68. Command 29 is fired when the game is completed successfully. It requires a melody from bank one to be playing, but we're already using the bank one melody during game play. The sound CPU simulation can only be perfected once it can be compared against a real game board.
- PCB: Philips 87C751 sound MCU (Powerbal), Signetics 87C751 (Sslam)
- SOURCE: drivers\sslam.cpp



P6.H   8089

- 0.217              : Try the new save state possibilities (Allow saving members of structures in n-dimensional arrays) (cpu\i8089\i8089_channel.cpp) [Osso].
- 0.215              : Changed description to 'Intel 8089 I/O Processor'.
- 0.207              : Disabled logging. Fixed 16-bit target DMA transfers without DRQ (i8089\i8089_channel.cpp) [Dirk Best].
- 0.193              : Added cpu\i8089\i8089_dasm.h.
- 0.191              : Fixed sintr (cpu\i8089\i8089_channel.cpp). Fixed odd byte count and mismatched bus size [Carl].
- 0.186              : Fixed buffer overrun warnings from GCC 7.1 (cpu\i8089\i8089_dasm.cpp) [Miodrag Milanovic].
- 0.181              : Silence DMA transfer log spam [Dirk Best].
- 0.180              : Changed the I8089 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.163              : Added support for DMA_WAIT_FOR_SOURCE_DRQ (cpu\i8089\i8089_channel.c). Added support for wait for destination drq [Dirk Best].
- 0.153              : Fixed small bugs (i8089_channel.c and i8089_ops.c). Fixed I8089 channel priorities. isbc_215g: Formatting and writing [Carl]. Rewrote I8089 disassembler [Dirk Best].
- 0.152              : Implemented remaining instructions and support execution from "io" space [Carl]. movbi_mi second parameter is 8 bit signed & MSVC complains that 0xff is truncated unless you explicitly cast it (cpu\i8089\i8089_channel.c) [smf].
- 0.150              : Added cpu\i8089\i8089.c/h, i8089_channel.c/h, i8089_dasm.c and i8089_ops.c. Skeleton I8089 device. Go thru initialization. Channel initialization, first opcodes added. Added instruction decode and more opcodes, starts executing task blocks now. Implemented DMA engine, (MESS) Apricot now successfully runs the 8089 self-test. Converted to a proper cpu core, added debugger support and disassembler. Improved I8089 debugger view [Dirk Best]. Fixed Visual Studio compilation (cpu\i8089\i8089.h and i8089_channel.h) [Oliver Stoeneberg].
- NOTES: Intel 8089 I/O Processor
- DRIVERS: (MESS) altos8600.cpp, apricot.cpp and machine\isbc_215g.cpp
- SOURCE: cpu\i8089\i8089.cpp



P6.H1  P8098 / MCS-96

- 0.254              : Fixed a case where events could be delayed by mistake (mcs96\i8x9x.cpp) [O. Galibert].
- 0.253              : Translate first 256 bytes of main memory space to register space (mcs96\mcs96.cpp) [AJR].
- 0.245              : Replaced BYTE_XOR_LE with new casting helper (mcs96\mcs96.cpp) [AJR].
- 0.221              : Added more device types, some with 16-bit buses. Implemented quasi-bidirectional port structure (cpu\mcs96\i8x9x.cpp). Location 0 is just 0 (mcs96\mcs96d.cpp). Fixed EXTINT and added some very preliminary HSI stuff. Implemented HSO CAM status flags in IOS0 (cpu\mcs96\i8x9x.cpp) [AJR].
- 0.220              : Fixed I8096 JNH/JH opcode according to manual (mcs96\mcs96ops.lst). This makes the (MESS) CM-32P Orch. Hit patch work [Valley Bell].
- 0.217              : Get rid of deprecated universal newlines open flag in Python scripts (io module is present as of Python 2.6) (scripts\build\verinfo.py, cpu\mcs96\mcs96make.py) [Vas Crabb].
- 0.211              : Added baud rate register (mcs96\i8x9x.cpp) [AJR].
- 0.203              : MCS-96: Replaced I/O space with callbacks; use internal space for non-executable register file and SFR area. Make SFRs more accessible to the debugger. Improved MCS-96 (i8x9x) disassembly: Properly decode names of directly addressed SFRs. This involves a major refactoring of the instruction execution/description unit to keep track of operand sizes and write-only destinations (since 8X9X maps numerous write-only SFRs to the same addresses as read-only SFRs). Correct operand size for immediate modes of ADDCB and SUBCB and indexed mode of MULB. Correct destination register for execution of the indexed mode of 2-argument ANDB. Correct assembler syntax of JBC and JBS (the bit specifier follows the register). Added save state and miscellaneous other stuff. Save the int_pending register as well (but note that it is not actually cleared upon reset). i8x9x: Added HSO stuff (interrupts & A/D conversion) and A/D interrupt [AJR].
- 0.196              : Changed description to 'Intel C8095' and 'Intel P8098'.
- 0.193              : Added cpu\mcs96\i8x9xd.cpp/h, i8xc196d.cpp/h and mcs96d.cpp/h.
- 0.192              : Added 'C8095' and 'P8098' device (mcs96\i8x9x.cpp). Added P8098 (12MHz) CPU2 and 8798 MCU dump to Paint & Puzzle [Reznor007, AJR].
- 0.180              : Changed the mcs96 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.160              : Removed except clause syntax not supported on Python 3. This change uses sys.exc_info()[1] instead of the "as" syntax to retain Python 2.5 compatibility (cpu\h8\mcs96make.py). Removed unused "opc", fix possible undefined name "inf" (cpu\mcs96\mcs96make.py) [Mike Naberezny].
- 0.155              : Replaced exit() with fatalerror() in cpu\mcs96\mcs96.c [Oliver Stoeneberg]. Fixed recompute_bcount regression [hap].
- 0.152              : Misc MCS96 fixes [O. Galibert].
- 0.151              : Small change to MCS96 generation messages (cpu\cpu.mak) [Oliver Stoeneberg].
- 0.148u2            : Fixed uninitialized member in cpu\mcs96\i8x9x.c [Oliver Stoeneberg].
- 0.148              : Added cpu\mcs96\i8x9x.c/h, i8xc196.c/h, mcs96.c/h, mcs96make.py and mcs96ops.lst. First (incomplete) stab at a MCS-96 core. Fixed divb reg,#nn. Fixed V setting on divb. Added normal and the missing div variants [O. Galibert]. Fixed for MSVC (cpu\mcs96\i8x9x.c) [smf]. (MESS) Preliminary Roland D-110 driver (updated cpu\mcs96\i8x9x.c, i8xc196.h, mcs96.c/h and mcs96ops.lst) [Lord_Nightmare, O. Galibert].
- NOTES: MCS96, 8x9x branch (the original version), c196 branch (the enhanced 16 bits bus version)
- SOURCE: cpu\mcs96\i8x9x.cp



P6.H2  P8798

- 0.221              : Added 'Intel P8798' device (cpu\mcs96\i8x9x.cpp). Added more device types, some with 16-bit buses [AJR]. Replaced Intel P8098 CPU2 with Intel P8798 in Paint 'N Puzzle.
- NOTES: P8798 (8797 on schematic) L3372718E Intel Label: MicroTouch 5603670 REV 1.0; U15 48 pin IC.
- DRIVERS: pntnpuzl.cpp
- SOURCE: cpu\mcs96\i8x9x.cp



P6.I   89C51

- 0.215              : Decapped AT89C51 MCU for Shizhan Ding Huang Maque [Team CAPS0ff, EdHunter].
- 23rd December  2019: CAPS0ff - We wondered what else might be vulnerable to laser glitching? We tried Atmel AT89C51 and much to our surprise we also found a glitch! We heard this part was likely going to require microprobing which, although not out of the question, was going to make it much harder. This allowed dumping Quizard 2, German, TAB DN 122 D3 (C054) and Quizard 4, Czech, TS142 CZ1 (C057). However, C057 end in fill patterns like FF, but they should be solid without bit flips. So why do we think this is correct? Let's dive a little deeper into our laser glitching approach. First, we program a sample with a known pattern and secure it. Next, we create a script that repeatedly reads the chip, saves the current read, and also displays the current read. While this is running, we sweep a laser around the die, focusing near EPROM, until valid looking data shows up. We then tweak the laser until we get a stable readout. In the case of C057, we held the laser stable and observed 40+ consecutive dumps with the same pattern. While we can't for sure rule out bit flips, this at least gives reasonable confidence the binary is correct. Finally, we also do quick disassembly of dumps to verify assembly looks mostly reasonable.
- 0.138u4            : Top Shooter now load (but don't yet use) the decapped MCU (89c51.bin) [Dr. Decapitator].
- 0.138u3            : Dr. Decapitator and Guru decapped 89C51 MCU in Real Battle Mahjong King. Added AT89C4051 (5.5MHz) MCU.
- 25th June      2010: Guru - The 89C51 MCU for Real Battle Mahjong King and Top Shooter has now been successfully processed (decap, de-protect & read).
- NOTES: http://www.atmel.com/dyn/products/product_card.asp?family_id=604&family_name=8051+Architecture&part_id=1939
- PCB: Atmel 89C51 MCU, protected (Rbmk), AT89C51 (Topshoot, Chameleon 24-in-1), AT89c4051-24PC (Beastrzb, Spotty)
- SOURCE: -



P6.I1  89C4051
- 0.282              : Added cpu\mcs51\i80c51.cpp/h.
- 0.128u1            : MCS51/I8051 improvements [Couriersud, Jim Stolis]: Added more variants 803X, 80CXX and AT89C4051. Replaced I8051 CPU2 with AT89C4051 in Spotty (Ver. 2.0.2).
- PCB: AT89c4051-24PC (Beastrzb, Spotty), AT89C4051 (gigaman2, spotty)
- DRIVERS: -
- SOURCE: cpu\mcs51\i80c51.cpp



P6.J   89C52
- 0.282              : Added cpu\mcs51\i80c52.cpp/h.
- 0.131u1            : Guru and David Haywood made Hyper Pacman run with protection code from decapped MCU rather than simulation. Added I8052 (16MHz) CPU3 and 8k AT89C52 MCU rom.
- NOTES: http://www.atmel.com/dyn/products/product_card.asp?family_id=604&family_name=8051+Architecture&part_id=1939
- PCB: Atmel AT89C52 MCU w/8k internal FlashROM, DIP40 (Hidctch2, Pasha2, 3in1semi, Moremore)
- SOURCE: cpu\mcs51\i80c52.cpp


P6.K   89C55
- PCB: Atmel 89C55  8-Bit Microcontroller with 20K Bytes Flash, KD89C55A (SuperMoto)
- SOURCE: -


P6.L   90C32
- NOTES: Hyundai GMS90C32 MCS-51 Compatible Microcontroller w/8k internal EPROM, clock 12.000MHz (PLCC44). Note: EA (External Access Enable on pin35) is LOW, thus it is configured to use the External EPROM at U111. The chip is configured by placing a small smt zero Ohm resistor across 2 pads adjacent to pin35. So a romless condition can be easily checked by looking to see if the resistor is present. If the resistor is not present, EA is configured to HIGH and the chip is using it's internal ROM.
- PCB: GMS90C32 (Hidctch3)
- SOURCE: -





P7.    Komami

P7.1   Konami ESC
-  4th May       2003: Acho A. Tang submitted a major improvement to the Konami GX driver, improving the graphics emulation and emulating the ESC protection in Salamander 2, Dragoon Might and Tokimeki Memorial Puzzle-dama, making them all playable.
- NOTES: Konami ESC (E Security Chip) protection chip. The ESC is a custom microcontroller with external SRAM connected to it. It's microprogram is uploaded by the host game. The ESC has complete DMA access to the entire 68020 address space, like most Konami protection devices. Most games use the same or a compatible microprogram. This program gathers the sprite information scattered around work RAM and builds a sprite list in sprite RAM which is properly sorted in priority order. The Japanese version of Gokujou Parodius contains a 68020 version of this program at 0x2a285c. The code below is almost a direct translation into C of that routine. Salamander 2 uses a different work RAM format and a different ESC program, and Dragoon Might uses a third format and program. These games haven't been reverse-engineered yet and so have no sprites. Winning Spike and the Type 4 games use a new protection chip made from a Xilinx FPGA. See type4_prot_w for details.
- GAMES: Konami System GX - Salamander 2, Sexy Parodius, Twinbee Yahhoo, Dragoon Might and Daisu-Kiss




P8.    Microchip PIC-MCU

P8.1   PIC16

- 0.263              : Register file cleanup: Use member variables for core special registers, eliminating unsafe abuse of get_write_ptr and permitting watchpoints to trigger on accesses to these. Use arrays for TRIS registers and port read/write callbacks. Narrow the width of some variables and function parameters. Store FSR and show in debugger without extra high bits. Eliminated now-unnecessary reset kludge (pic16c5x\pic16c5x.cpp) [AJR].
- 0.252              : Small cleanup (1-line comments C++ style and switch/case spacing). Removed bitpos arrays. Don't do a double read with swapf. Statusreg high bits are 1 on old GI PIC. Make it easier to write in the comment block. Writing to reg 2 takes one more cycle. Improved RTCC pin timer count. Lowercase function names that aren't macros. Shorthand variable types. No need for m_old_data class variable [hap].
- 0.226              : Initialised a couple of variables that can be problematic (pic16c5x\pic16c5x.cpp) [Vas Crabb].
- 0.221              : Added cpu\pic16\pic16d.cpp/h. Added PIC16 generic disassembler with extended instructions (tools\unidasm.cpp) [O. Galibert].
- 0.193              : Added cpu\pic16c5x\16c5xdsm.h. Removed cpu\pic16c5x\dis16c5x.cpp.
- 0.183              : Fixes for PIC16C5x writes with the status register as destination: Write all bits except TO and PD, thus enabling e.g. bcf, bsf or clrf to change the flags. rlf and rrf must update the flags after the store to work correctly on this register [Luca Elia]. Small PIC16C5x update, correct savestates. Added PIC1655. Removed unused MCFG_PIC16C5x_T0_CB callbacks. Added RTCC pin (not called T0, plus it was implemented in reverse). Fixed RTCC clocking in sleep mode and potentially clocking it too fast. Added basic support for the old GI PIC1650 and PIC1655. Made RTCC (aka T0CKI) pin an inputline handler. Added alias for RTCC pin (Note: In the mid-90s RTCC was renamed to T0CKI) [hap].
- 0.180              : Changed the PIC16C5x disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Added virtual for consistency (cpu\pic16c5x\pic16c5x.h) [smf].
- 0.160              : Removed PIC16 MCU fake I/O memory map in bingor.c, blackt96.c, drgnmst.c, kickgoal.c, megaphx.c, midzeus.c and playmark.c [hap].
- 0.154              : Fixed the hand modified PIC16C57 code for Hot Mind and Lucky Boom (Hard Times hardware) so they correctly handle the OKI banking and work on the real hardware (cpu\pic16c5x\pic16c5x.c) [Quench].
- 0.150              : Modernized PIC16C5x cpu core [Wilbert Pol].
- 0.134              : Fixed the PIC16C5x CPU T0CKI count input being controlled by the wrong edge sensing [Quench].
- 0.133u5            : PIC16C5x CPU core fixes [Quench] Indirect addressing was not taking into account special purpose memory mapped locations. 'iorlw' instruction was saving the result to memory instead of the W register. 'tris' instruction no longer modifies Port-C on PIC models that do not have Port-C implemented.
- 0.128u6            : Pointer-ified the PIC16C5x core [Quench].
- 0.109u5            : Converted the pic16c5x disassemblers to the new format and added step in/out support where it was obvious [Aaron Giles].
- 0.79u2             : Updated the PIC16C5x CPU core to support internal memory maps, and he updated the relevant drivers to use the functionality as well [Quench].
- 0.78u4             : CPUs with an implicit address shift (e.g., the TMS34010 shifts addresses right 3 bits; the TMS32031 shifts addresses left 2 bits) now automatically get that shift applied to addresses in their memory maps and in calls to install_memory_read/write_handler(). This eliminates many ugly macros in the memory maps. Affected CPU cores are the ADSP210x, CCPU, PIC16C5x, TMS3201x, TMS3202x, TMS32031, and TMS340x0. Note that the CPU cores themselves still need to pass shifted values to the core read/write routines. All drivers using these cores have had their icky macros and bitshifts removed. * Harvard architecture CPUs now have data memory fully implemented now. Affected CPUs are the ADSP210x, TMS3201x, TMS3202x, PIC16C5x, and CCPU. All cores have been modified to fully split program and data memory. All drivers using these cores now specify explicit program and data memory maps. This also gets rid of a ton of ugly macros used in memory maps [Aaron Giles].
- 0.78               : Added support for Biofreaks, fixed remaining issues in California Speed, verified California Speed HDD dump (works in self test, not in boot ROM test), fixed timer change that broke Blitz 2000 and added proper PIC IDs for Wayne Gretzky and Mace. Added sound auto acknowledgement option, added new PIC mapping for Gauntlet: Dark Legacy and fixed initial sound IRQ state. DCS: Fixed reporting of input full/output empty states [Aaron Giles].
- 0.77u3             : Fixed several minor bugs that affected Biofreaks and California Speed and increased default visible area to handle Biofreaks. Tweaked the Midway PIC handling so that Biofreaks can read its serial number. Correct audio ADSP2115 CPU2 clock speed to 16MHz and graphics resolution to 512x400 [Aaron Giles].
- 0.69b              : Various fixes to the PIC16C5x core [Quench].
- 31st May       2003: Sent in various fixes to the PIC16C5x core and added sound to Big Twin [Quench].
- 0.69               : Fixed a problem with missing 'returns' in the PIC CPU core [Bryan McPhail].
- 17th May       2003: Fixed a small bug in the PIC CPU core where it didn't return a value properly [Bryan McPhail].
- 0.67               : Added cpu\pic16c5x\pic16c5x.c/h, 16c5xdsm.c and dis16c5x.c. PIC16C5x CPU core [Quench].
-  5th April     2003: Sent in a PIC16C5x CPU core and added sound emulation to Dragon Master using it [Quench].
- NOTES: ?


P8.11  PIC1650

- 0.183              : Added PIC1650 device [hap].
- SOURCE: cpu\pic16c5x\pic16c5x.cpp


P8.12  PIC16C54

- 0.249              : Added support for the GI PIC1654S [R. Belmont].
- 0.247              : Expose driven lines to I/O handlers in mask (pic16c5x\pic16c5x.cpp) [Paul Arnold].
- 0.225              : Decapped and dumped PIC16C54 device for Bingo Roll / Turbo Bingo? and clones Magic Card Export 94 and Magic Card - Wien (Sicherheitsversion 1.2) [CAPS0ff, TeamEurope].
- NOTES: PIC16C54 DIP-18 MEM: 512x12, 25 Bytes RAM   4/20MHz max.
- GAMES: Stone Ball (Art & Magic 1994), Strata/Incredible Tech - World Class Bowling (1995), Shuffleshot (1997), Golden Tee'97 (1997), World Class Bowling Deluxe (1999)
- PCB: PIC 16C54, PIC 16C54A 04/P, PIC 16C54B, PIC16C54-HS/P (Pntnpuzl), ITBWL-3 (Wcbowl), ITBWL-4 (Wcbowldx), ITGFS-3/ITGFM-3 (Gt97), ITGF98-M (Gt98), ITGF99 (Gt99), ITGF-1/ITGF-2 (Gt3d), ITGF2K (Gt2k), ITSHF-1 (Shufshot)
- DRIVERS: bingor.cpp and megaphx.cpp
- SOURCE: cpu\pic16c5x\pic16c5x.cpp


P8.13  PIC16C55

- 0.247              : Expose driven lines to I/O handlers in mask (pic16c5x\pic16c5x.cpp) [Paul Arnold].
- 0.210              : Decapped PIC16C55 for Mosaic. Not hooked up yet [CAPS0ff, Caius, The Dumping Union].
- 0.198              : Decapped PIC16C55 for High Seas Havoc [Team CAPS0ff].
- 0.196              : Changed description to 'Microchip PIC16C55'.
- 0.150              : Added 'PIC16C55' device.
- PCB: PIC16C55 (Drgnmst), PIC16C55 SND.MCU (Tumblep - bootleg set)
- DRIVERS: drgnmst.cpp and mosaic.cpp
- SOURCE: cpu\pic16c5x\pic16c5x.cpp


P8.14  PIC16C56

- 0.247              : Expose driven lines to I/O handlers in mask (pic16c5x\pic16c5x.cpp) [Paul Arnold].
- 0.225              : Decapped and dumped PIC16C56 device for Hola Don Pepito [CAPS0ff, ClawGrip, Victor Fernandez]. Decapped and dumped PIC16C56 device for unknown 'TE06' [CAPS0ff, TeamEurope].
- 0.196              : Changed description to 'Microchip PIC16C56'.
- 0.183              : Added 'PIC16C56' device.
- DRIVERS: cowtipping.cpp, dkmb.cpp, gaelcof3.cpp, galgames.cpp and midas.cpp
- SOURCE: cpu\pic16c5x\pic16c5x.cpp


P8.15  PIC16C57

- 0.247              : Expose driven lines to I/O handlers in mask (pic16c5x\pic16c5x.cpp) [Paul Arnold].
- 0.247              : Dumped PIC16C57 sound program for Hard Times. Fixed missing sound [CAPS0ff, Tailsnic Retroworks].
- 0.224              : Hooked up security PIC16C57 to Rampage: World Tour [MetalliC].
- 0.219              : Decapped PIC16C57 for 'The Grid' [CAPS0ff].
- 0.204              : Decapped and hooked up PIC16C57 in Kick Goal. It's possible the banking is wrong on the OKI still as the game really doesn't attempt to use the majority of the sounds in the rom, there are only a few screens where music even plays [CAPS0ff, balrog, David Haywood].
- 0.196              : Changed description to 'Microchip PIC16C57'.
- 0.181              : CAPS0ff added PIC16c57 dump to World Beach Volley (set 1) and clones. This gives partial sound, OKI banking setup for the game is incorrect in the driver so music doesn't currently play also I cleaned up OKI banking in the whole driver by using configured banking to make further work cleaner.
- 0.154              : Replaced the sound PIC in Hot Mind with a hand modified version for correct background music playback. Fixed the hand modified PIC16C57 code so it correctly handle the OKI banking and work on the real hardware. Replaced the sound PIC in Lucky Boom (Hard Times hardware) with a hand modified version for correct sample and music playback. Fixed the hand modified PIC16C57 code for Lucky Boom so it correctly handle the OKI banking and work on the real hardware (cpu\pic16c5x\pic16c5x.c) [Quench].
- 0.150              : Added 'PIC16C57' device.
- 0.138u4            : Invasion now load (but don't yet use) the decapped MCU (pic16c57.u76). I'm not convinced this one is good. Revolution X now load (but don't yet use) the decapped MCU (revx_16c57.bin) [Dr. Decapitator].
- 0.105u1            : David Haywood added simulated PIC16C57/OKI6295 sound for Pang Pang and clone Tumble Pop (bootleg set 2).
- 0.97u3             : Quench added preliminary PIC16C57/OKI6295 sound support for Action Hollywood.
- 0.95               : Pierpaolo Prazzoli added PIC16C57 sound to Excelsior.
- 0.69b              : Quench got sound working in Big Twin with the use of the PIC HEX dump.
- 31st May       2003: Quench sent in various fixes to the PIC16C5x core and added sound to Big Twin.
- 31st August    2000: Nicola Salmoria sent in a driver for World Beach Volley, again without sound due to an undumped PIC chip.
- NOTES: PIC16C57C DIP-28 MEM: 2048x12, 72 Bytes RAM   4MHz max.
- NOTES: Games with working PIC16C5 CPU: Big Twin and Excelsior
- PCB: PIC16C57-X T/P (MK3, Wwfmania), PIC16C57C (Gauntleg), PIC16C57-HS/P  Ic-8-bit CMOS MCU Otp (Hotmind)
- DRIVERS: bingor.cpp, blackt96.cpp, cps1bl_pic.cpp, kickgoal.cpp, midwunit.cpp, midzeus.cpp, nmk16.cpp, playmark.cpp, psikyo.cpp and tumbleb.cpp
- SOURCE: cpu\pic16c5x\pic16c5x.cpp


P8.16  PIC16C62x

- 0.263              : Core overhaul: Use callbacks rather than address space for I/O ports. Eliminated unsafe use of get_write_ptr and let the internal memory map decode each special register individually. Eliminated several macros, magic ID numbers and some unnecessary tables. Adjust execution of a few opcodes to avoid reading operands twice and set flags correctly. Added PCLATH to state display (pic16c62x\pic16c62x.cpp) [AJR].
- 0.218              : Correct rom memory sizes. Enabled ability to set configuration word [yz70s].
- 0.217              : Added 'Microchip PIC16C620', 'Microchip PIC16C620A', 'Microchip PIC16C621', 'Microchip PIC16C621A', 'Microchip PIC16C622' and 'Microchip PIC16C622A' device.
- 0.193              : Added cpu\pic16c62x\16c62xdsm.h. Removed cpu\pic16c62x\dis16c62x.cpp.
- 0.180              : Changed the pic16c62x disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.150              : Modernized PIC16C62x cpu core. This core seems to be completely unused [Wilbert Pol].
- 0.135u4            : Added cpu\pic16c62x\pic16c62x.c/h, 16c62xdsm.c and dis16c62x.c. Samuele Zannoli added a new CPU core for the PIC 16c62x series of processors.
- DRIVERS: chihiro.cpp, magreel.cpp, naomi.cpp and triforce.cpp
- SOURCE: cpu\pic16c62x\pic16c62x.cpp


P8.17  PIC16C70

- 0.233              : Fixed major string-related bug in disassembler [AJR].
- 0.222              : Added cpu\pic1670\pic1670d.cpp/h. Added a PIC16C70 disassembler [O. Galibert].
- DRIVERS: ???
- SOURCE: cpu\pic1670\pic1670d.cpp


P8.18  PIC16C74
- 0.188: Load recent CAPS0ff PIC16C74 MCU dump for Croupier (Playmark Roulette v.20.05) and clone (Playmark Roulette v.09.04), not hooked up for now [David Haywood].
- DRIVERS: mil4000.cpp and sderby.cpp
- SOURCE: ???


P8.19  PIC16C84
- DRIVERS: Ttchamp.cpp
- SOURCE: ???


P8.1A  PIC16F84
- 0.267              : Added cpu\pic16x8x\pic16x8x.cpp/h and 16x8xdsm.cpp/h. Added cpu device PIC16x8x. Added PIC16F84 to Magic Lotto Export [Grull Osgo].
- DRIVERS: magicard.cpp
- SOURCE: cpu\pic16x8x\pic16x8x.cpp


P8.2   PIC17
- 0.237              : Fixed over/out in debugger (pic17\pic17d.cpp) [AJR].
- 0.222              : Added cpu\pic17\pic17.cpp/h, pic17c4x.cpp/h and pic17d.cpp/h. Added disassembler for PIC17 family and preliminary PIC17C4X emulation. Sample interrupt flags before writes can destroy them [AJR].
- NOTES: Microchip PIC17CXXX High-Performance 8-bit MCU family
- DRIVERS: ???
- SOURCE: cpu\pic17\pic17.cpp


P8.21  PIC17C43

- 0.222: Added cpu\pic17\pic17c4x.cpp/h. Added disassembler for PIC17 family and preliminary PIC17C4X emulation [AJR].
- NOTES: Microchip PIC17C43 microcontrollers
- DRIVERS: brglitz.cpp
- SOURCE: cpu\pic17\pic17c4x.cpp/h


P8.22  PIC17C44

- 0.222: Added cpu\pic17\pic17c4x.cpp/h. Added disassembler for PIC17 family and preliminary PIC17C4X emulation [AJR].
- NOTES: Microchip PIC17C44 microcontrollers
- DRIVERS: teamjocs.cpp
- SOURCE: cpu\pic17\pic17c4x.cpp/h






P9.    Mitsubishi

P9.1   M740

- 0.253              : Correct PC value following LDA ($zz, X) (m6502\om740.lst) [AJR].
- 0.248              : 6502 future-proofing: Do not overwrite the variable with the access address on a read in case we want to rerun it [O. Galibert]. M740 fixes. Only access data memory in indirect modes [AJR].
- 0.238              : STY ZP should store Y, not X (IIgs ADB MCU @ $FF15) (m6502\om740.lst) [R. Belmont].
- 0.229              : Fixed calculation of destination address for disassembly of BBC/BBS n, A, rel (cpu\m6502\m6502d.cpp) [AJR].
- 0.228              : Restored T flag correctly during PLP and RTI. Previous emulation inherited from the 6502 base device caused these instructions to always set T in P and not affect instruction decoding at all (m6502\dm740.lst, m740.h and om740.lst). Changed many instruction timings and dummy fetch patterns to match Mitsubishi documentation rather than 6502 behavior. Added overrides to be used for separable data space in future M50734 emulation. Fixed incorrect addition of Y to address of EORT $zp. Eliminated INCT A and DECT A instructions (T=1 has no effect on INC A or DEC A). Added STP and WIT instructions (not distinguished for now). Eliminated generic M740 device type (not used by anything). NMI does not exist (updated notes)(m6502\om740.lst) [AJR].
- 0.227              : M740 family updates. Added cycle clock dividers. Removed SO input line (not apparently supported on any Mitsubishi model). Fixed cycle timings for CLB/SEB ($zz), BBC/BBS (all modes) and RRF. A few more timing corrections (m6502\om740.lst) [AJR].
- 0.226              : Added missing JSR ($zz) and TST $zz instructions. Fixed return address for JSR ($zz) (m6502\dm740.lst and om740.lst) [AJR].
- 0.202              : Make SET instruction in Mitsubishi M740 subfamily actually affect execution (cpu\m6502\m740.h). This fixes missing P1/2 coin buttons in Steel Gunner 2 (MT07091), and may fix subtle problems in other drivers as well [AJR].
- 0.193              : Added cpu\m6502\m740d.cpp/h.
- 0.148u3            : M740 CPU family updates: Support for all T=1 instructions. Added COM and the accumulator-only versions of INC and DEC [R. Belmont, O. Galibert]. Save state regs for M740. Fixed branch target disasm for M740 branch-on-bit instructions. Correct M740 disassembly of bbs/bbc on A register. Correct M740 disassembly for seb x,A/clb x,A [R. Belmont]. The (indirect),y zeropage should wrap. So ff,00 instead of ff,100 (m6502\om6502.lst, om6509.lst, om65c02.lst, om740.lst and on2a03.lst) [hap].
- 0.148u2            : M740 updates: Added JMP (zp) instruction. Working interrupts. Moved 6502 family V line to make room for up to 16 IRQs (m6502\m6502.h) [R. Belmont].
- 0.148u1            : Correct disassembly for M740 bit+zp+rel. offset form of BBC/BBS (cpu\m6502\dm740.lst, m6502.c/h, m740.h and om740.lst) [R. Belmont].
- 0.148              : Added cpu\m6502\m740.c/h, dm740.lst and om740.lst. Preliminary support for Mitsubishi M740 (M5074x/M509xx) CPU family [R. Belmont].
- NOTES: Mitsubishi M740 series (M507xx/M509xx)
- DRIVERS: ???
- SOURCE: cpu\m6502\m740.cpp/h


P9.11  M50734

- 0.253              : Partially emulate stepper motor controller registers. Preliminary emulation of Timer X (m6502\m50734.cpp) [AJR].
- 0.249              : Emulated some on-chip timers [AJR].
- 0.248              : Added preliminary M50734 emulation. Fixed device_reset and stack page. Added A-D converter [AJR].
- NOTES: Mitsubishi M50734
- DRIVERS: (MESS) kawai_r100.cpp and mps1200.cpp
- SOURCE: cpu\m6502\m50734.cpp


P9.12  M5074x

- 0.279              : Make external IRQs edge-triggered as documented for the M5074x and M5075x (m6502\m5074x.cpp) [R. Belmont].
- 0.268              : Modernized logging, fixed Timer X mixing up the prescale and countdown values. Fixes several PowerBooks that were auto-polling ADB at 5 Hz instead of 70 Hz [R. Belmont].
- 0.232              : Added port pullup configuration [AJR].
- 0.227              : Added support for the 8-bit IN port. Finish M50753 A/D converter, including completion IRQ [R. Belmont]. Protect interrupt request bits against being set by writes for M5074x [AJR].
- 0.226              : Added preliminary M50753 type. Eliminated custom ROM tag [AJR]. Added both IRQ lines and route them to the correct interrupt bits [R. Belmont].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.199              : Added missing memory_space_config() [R. Belmont].
- 0.155              : Added machine\namcomcu.c/h. Memory system and Namco improvements [Alex Jackson]: Explicit regions in address maps (AM_REGION) are now looked up relative to the device rather than as siblings when in an internal address map (similar to devices and shared pointers)  Besides being more orthogonal than before, this allows internal ROMs of MCUs and similar devices to be hooked up in a nicer and more foolproof way. Updated the m37710 and m5074x (m6502 derivative) to take advantage of this. Divided the M37702/M37710 into specific models, with each model having its own internal address map containing the correct amounts of internal RAM and ROM. M37702 MCUs found on various Namco PCBs are now all unique devices and have their respective internal ROMs loaded as device ROMs. Also did some spring (fall) cleaning in addrmap.c/memory.c/dimemory.c. m_devbase (the base device used for tagmap lookup when late-binding handlers and finding memory regions and shares) is now a reference rather than a pointer, since we know what it is when the address_map_entry is constructed and it doesn't change (it depends solely on whether it's an entry in an MCFG-provided address map or an internal one) And for the same reason, there's now only one m_devbase per address_map_entry rather than individual copies for read/write/setoffset/sharedptr. Removed mysterious unused address_map_entry member "m_region_string", along with a silly assert probably left over from when Aaron was replacing AM_BASE with AM_SHARE years ago. Added a comment noting that "make sure all devices exist" in device_memory_interface::interface_validity_check() actually does nothing, like the proverbial goggles. The reason there's just a comment and not a fix is I haven't figured out how to fix it yet (is it possible to extract the original device tag that was given to a proto-delegate? [Alex Jackson].
- 0.148u3            : Added cpu\m6502\m5074x.c/h. Added support for Mitsubishi M50740/50741 MCUs [R. Belmont].
- 0.148u1            : Removed m5074x from emu\cpu\cpu.mak (not ready for this yet) [R. Belmont].
- NOTES: Mitsubishi M5074x 8-bit microcontroller family = Mitsubishi M50740, M50741 and M50753.
- DRIVERS: (MESS) apple2gs.cpp, macprtb.cpp and macpwrbk030.cpp
- SOURCE: cpu\m6502\m5074x.cpp


P9.13  M50747

- 19th November  2006: Tomasz Slanina - Working on Double Dealer protection similar to used in other jalmah.c games (Mitsubishi M50747 MCU used for protection and providing main program code snippets), shots from real board, not emulation.
- NOTES: Single-chip 8-bit CMOS Microcontroller (6502 CORE), 8192 ROM, 256 RAM, SDIP64
- PCB: M50747 (Daireika, Kakumei/2, Mjzoomin), M50747 labeled "MO-91044" (Hayaosi1)
- DRIVERS: ddealer.cpp, jalmah.cpp and megasys1.cpp
- SOURCE: ???


P9.14  M509xx

- 0.193              : Added cpu\m6502\m740d.cpp/h.
- 0.148              : Added cpu\m6502\m740.c/h, dm740.lst and om740.lst. Preliminary support for Mitsubishi M740 (M5074x/M509xx) CPU family [Olivier Galibert, R. Belmont].
- DRIVERS: ???
- SOURCE: cpu\m6502\m740.cpp/h


P9.2   M30624
- NOTES: The M30624FGAFP is a Mitsubishi (Renesas) M16/62A 16bit microcomputer. It has 256 KB of internal flash ROM + 20 KB of RAM.
- SOURCE: drivers\itgambl3.cpp
- PCB: M30624FGAFP-251G108 (Ejollyx5, Grandprx)


P9.3   M37450

- 0.222              : READ/WRITE macros removal [Osso].
- 0.202              : Make SET instruction in Mitsubishi M740 subfamily actually affect execution (cpu\m6502\m740.h). This fixes missing P1/2 coin buttons in Steel Gunner 2 (MT07091), and may fix subtle problems in other drivers as well [AJR].
- 0.148u3            : Save state regs for M3745x [R. Belmont]. Use the correct C68 (M37450) I/O MCU for Steel Gunner 2 [R. Belmont, Guru, Charles MacDonald].
- 0.148u2            : Added cpu\m6502\m3745x.c/h. Preliminary support for the Mitsubishi M37450 microcontroller [R. Belmont].
- NOTES: Mitsubishi M3745x 8-bit microcontroller family
- DRIVERS: namcos2.cpp, namcos21_c67.cpp, namcos21_de.cpp and shootaway2.cpp
- SOURCE: cpu\m6502\m3745x.cpp


P9.4   M37640

- 0.264              : Added m6502\m37640.cpp/h. Start adding the Mitsubishi M37640 [O. Galibert].
- NOTES: Mitsubishi M37640 8-bit microcontroller with USB support
- DRIVERS: ???
- SOURCE: cpu\m6502\m37640.cpp




P10.    Motorola

P10.1   M68701

- 0.90               : Nicola Salmoria updated the Bubble Bobble driver. Removed the 68705 CPU emulation, since that's not what the original used, simulated the 68701 MCU (enemy movement should now be correct), fixed clock item behaviour (now enemies start moving again after 10 seconds), supported coin lockout and emulated the boblbobl protection device (getting rid of the ROM patches).
- NOTES: The Motorola M68701 is a microcontroller with 2K internal ROM and read protected. The original Bubble Bobble board has a 68701 protection MCU, which hasn't been read. Its behaviour is simulated and should be a good approximation but not 100% accurate.
- NOTES: KiKi KaiKai uses a custom 68701 MCU which isn't dumped. The bootleg Knight Boy replaces it with a 68705. The bootleg is NOT 100% equivalent to the original (a situation similar to Bubble Bobble): collision detection is imperfect, the player can't be killed by some enemies. I think the bootleggers put the custom MCU in a test rig, examined its bus activity and replicated the behaviour inaccurately because they couldn't figure it all out. Indeed, the 68705 code reads all the memory locations related to the missing collision detection, but does nothing with them.



P10.2   M68705

- 0.261              : Added preliminary support for analog input ports (m6805\m68705.cpp) [hap].
- 0.245              : Timer updates: Allow timer prescaler and mode to be determined by configuration parameters on models for which these are not otherwise programmable (P2, P6, R2 and U2 models). Changed default value of timer input from 0 to 1 (m6805\m68705.cpp) [AJR].
- 0.236              : Added ROM parents for m68705u3 [Vas Crabb].
- 0.222              : READ/WRITE macros removal (m6805\m68705.cpp) [Osso].
- 0.221              : Added more documentation of mask ROM versions. Added HD6805S1 device for future use [AJR]. Simplified some handlers (machine\taito68705interface.cpp) [Osso].
- 0.215              : Added HD6805U1 type for future use (m6805\m68705.cpp) [AJR].
- 0.210              : Prevent registration of illegal debug states for nonexistent port latches/DDRs [AJR]. Fixed prescaler update. Restored the proper behaviour of the timer [Patrick Mackinlay].
- 0.209              : Added other Motorola M6805 Family HMOS variants [Patrick Mackinlay]. Fixed Clang error (Unused variable 'M6805_VECTOR_INT2' [-Werror,-Wunused-const-variable). Use NVI for internal map to prevent segmentation fault [AJR].
- 0.183              : Confirmed MC68705R3 bootstrap program matches Bouncing Balls (Adult) M68705R3 [brizzo]. Hook up protection MCU in clone Bouncing Balls (Adult), added to parent set as BAD_DUMP. Note: Uses a similar scheme to Pushman, but doesn't use port D on the MCU, and uses the same endianness for MCU reads/writes (Pushman swaps the bytes on writes). As an aside, Bouncing Balls has at least partial nudity in it as seen in attract mode, although less than clone Bouncing Balls (Adult). Fixed problem with edge case in 68705 timer overflow interrupt. This fixed the missing enemies in the second stage of Xain'd Sleena [Vas Crabb].
- 0.182              : Added cpu\m6805\m68705.cpp/h and machine\taito68705interface.cpp/h. Taito 68705 refactoring (40love.cpp, bigevglf.cpp, bking.cpp, bublbobl.cpp, buggychl.cpp, flstory.cpp, lkage.cpp, lsasquad.cpp, msisaac.cpp, nycaptor.cpp and slapfght.cpp). Moved 68705 timer logic out of Arkanoid driver and into 68705 core [David Haywood]. Improvements to I/O emulation in new MC68705 device: All internal memory handlers are now private members. DDRs zeroed when device reset (as per datasheet). Port writes no longer transmit bits not set in DDR. DDR updates may cause port bits to be written out (this is important). Added external read/write handlers for ports [AJR]. Refactoring and improvements: Moved 68705 devices into their own file. Made P3, P5 and U3 variants and made them load bootstrap ROMs. Implemented EPROM control (write is stubbed out with a logerror). Implemented differences for open drain I/O ports. Base device with peripherals should really derive from the 6805 device directly, not the 68705 devices, as I/O ports are present on mask devices (e.g. 6805P2). All drivers and devices that were using M68705_NEW have been changed to M68705P5 - someone who knows the drivers better should fix them up. Fixed pushed input ports, implement EPROM write (not saved yet). Save EPROM contents using NVRAM mechanism. Disassemble memory addresses symbolically. Re-implement timer/counter. Support MOR-controlled mode. Correct count direction. Correct startup and reset states. Exposed more more internal registers through the state interface. Shows contents of registers that can't be read by program code. Completely eliminate the concrete 68705-without-peripherals class. Added logmacro.h inspired by Edstrom's log macros (emu\logmacro.h). Added lots of logging to help trace issues. Taito 68705 interface improvements: Moved stuff arkanoid/puzznic have in common with other games to new abstract base class. Got rid of the unnecessary hacks for Big Event Golf, it doesn't need anything special. Moved Xain'd Sleena M68705 stuff to the common interface class. Fixed regressions in tokio and daikaiju. Started instantiating common device finders with the devices to marginally improve build/link time. Use common Taito 68705 interface device in Mania Challenge and clone. Removed non-obvious mcu_status_r and semaphore_r members and move to drivers (varies by system). Slap Fight M68705 functionality can be safely folded into base class so do so. Removed leftover crud from driver state classes. ddragon.cpp, qix.cpp, stfight.cpp, taitosj.cpp, bub68705, changela and pipeline use new MC68705P3 core. Renegade use common Taito 68705 hookup. mexico86 use new MC68705P3 core, simulate synchronous latches better. ADC is stubbed out with logerror (pipeline doesn't use it at all). Bootstrap ROM is believed to be identical to U3 but need to confirm. Quiz Punch use new MC68705P5 core, MCU now gets timer interrupts correctly [Vas Crabb].
- 0.181              : Start putting some 68705 functionality in the CPU core rather than copy+pasted in all the drivers. As this is a lengthy task I've created a derived CPU type with the new functionality to aid in the process without disrupting existing drivers that haven't yet been updated. Started with Alcon/Slap Fight, Guardian, Tiger Heli and Tokio / Scramble Formation [David Haywood].
- 17th December  2010: Smitdogg - I talked to Dr. Decapitator today and he's working hard on some 68705s for us. If you want to send him some help/donations you can do it through his website here (http://decap.mameworld.info/) or you can click here to donate to the DU. Or you can do both.
- 25th June      2010: Dr. Decapitator - Here are some pictures of recently decapped chips. On the right is an MC68705, which was used in many games.
- 0.115              : Aaron Giles updated 68705 clocks to take into account the internal divide by 4. Added constant so that it is clear why this is being done.
- 17th October   2003: Guru - Received a Dangerous Dungeons PCB from Pelle and dumped the 68705 microcontroller on it.
- 11th August    2003: Guru - Dumped successfully the MCU from Tiger with the Data IO Unisite Programmer.
- 31st July      2003: Guru - Successfully used the Data I/O Unisite programmer to read the 68705 microcontroller on Pit N' Run.
-  8th September 2000: Nicola Salmoria fixed the Return of Invaders driver to use the 68705 emulation correctly instead of relying on a protection hack.
- 17th July      2000: Nicola Salmoria added correct MCU communication to Legend of Kage.
-  1st December  1999: Quench added correct MCU roms to Flying Shark and Wardner.
- 19th August    1999: Nicola added the 68705 image to Fairyland Story, and the attract mode and intro now work, but it hangs when a game is started.
- 0.36b3             : Nicola emulated the 68705 protection in Mania Challenge.
- 13th August    1999: Nicola Salmoria added a 68705 image to Mania Challenge, which is now working!
- 27th June      1999: Nicola modified all the 68705 roms to be 2048 bytes instead of 1920.
- 24th June      1999: Nicola added made-up 68705 roms to Arkanoid's US and Japanese versions, which fixes the later levels.
- 25th May       1999: Tatsuyuki Satoh sent in a preliminary Chack'n Pop driver, but it doesn't really work since the MCU (68705) rom image is missing. Marco Cassili fixed some dips from the Exidy driver.
- 0.35b3             : Nicola Salmoria properly emulated the 68705 protection in The Electric Yo-Yo, Kram, Space Dungeon, Zoo Keeper. And make support for the ORIGINAL version of Bubble Bobble, with 68705 code from a pirate board. Wizards *do* throw stones in this version.
- 0.34b1             : Nicola Salmoria made the original Elevator Action now works, using the 68705 MCU ROM which was missing. Since there is one additional CPU to emulate, it is slower than the bootleg version. Also replaced Front Line with the complete set containing the 68705 code. It still doesn't work though.
- NOTES: The Motorola M68705 is a microcontroller with 2K internal ROM and read protected.
- GAMES: Arkanoid (Taito 1986), Pushman (Comad 1990)
- PCB: MC68705P5S (Tigerh), MC68705P3 (Arkanoid), M68705P5S (40love), MC68705R3  DIP40 (Bballs), MC68705R3P-06A46E-QLCK9018 (Pipeline)
- DRIVERS: 40love.cpp, arkanoid.cpp, bigevglf.cpp, bking.cpp, bublbobl.cpp, buggychl.cpp, changela.cpp, ddragon.cpp, flstory.cpp, lkage.cpp, lsasquad.cpp, matmania.cpp, maxaflex.cpp, mexico86.cpp, msisaac.cpp, namcos2.cpp, namcos21.cpp, nycaptor.cpp, pipeline.cpp, pitnrun.cpp, qix.cpp, renegade.cpp, retofinv.cpp, slapfght.cpp, stfight.cpp, superqix.cpp, taitosj.cpp, tigeroad.cpp, tubep.cpp, vertigo.cpp, xain.cpp and wyvernf0.cpp
- SOURCE: cpu\m6805\m68705.cpp and machine\taito68705interface.cpp



P10.21  M68705 MCU rom

- 0.187              : Use actual M68705 dump in Field Day/Undoukai, Onna Sanshirou and Rumba Lumber, replaces inaccurate simulation. Replaced hand crafted MCUs with dumped 68705 dumps for clone Arkanoid (Japan, newer) and Tournament Arkanoid (US). Added an unused (not programmed) 68705P5 MCU dump to Tetris (D.R. Korea) [ShouTime, brizzo]. Replaced MCU simulation with new M68705 dump in Chack'n Pop, Guardian (US), Get Star (Japan) and Nekketsu Kouha Kunio-kun (Japan) [AJR].
- 0.183              : Dumped MC68705R3 for clone Bouncing Balls (Adult) [brizzo, TeamEurope]. Confirmed MC68705R3 bootstrap program matches Bouncing Balls (Adult) M68705R3 [brizzo].
- 20th June      2017: Smitdogg - ShouTime dumped the following MCUs with brizzo's custom 68705 dumper hardware: TAITO ARKANOID V2.1 MCU (Japan), D.R. KOREA TETRIS MCU (Korea), TAITO ARKANOID V1 MCU (Japan/US/WORLD), TAITO SLAP FIGHT JAMMA Version MCU (Japan), TAITO FRONTLINE MCU, TAITO ELEVATOR ACTION MCU (Japan), TAITO TOURNAMENT ARKANOID MCU (US), TOAPLAN GETSTAR MCU (Japan) [also for GUARDIAN (US)], TECHNOS JAPAN XAIN'D SLEENA MCU (Japan), TOAPLAN TIGER HELI MCU (Japan), TAITO PUZZNIC MCU (Japan), TECHNOS JAPAN Nekketsu Kouha Kunio--kun MCU (Japan), Seibu Kaihatsu EMPIRE CITY 1931 MCU (Japan), TAITO SCRAMBLE FORMATION/TOKIO MCU (Japan/US/WORLD), KANEKO PREBILLIAN MCU (Japan), TAITO The Fairyland Story MCU (Japan/World), TAITO THE LEGEND OF KAGE YM2203 Version MCU (Japan/US/World, TAITO TYPHOON GAL MCU (Japan), TAITO BUGGY CHALLENGE MCU (US/World), TOAPLAN RETURN OF THE INVADERS MCU (Japan/World), TAITO KICK START MCU (Japan), The Undoukai/Field Day MCU (Japan/World), SJ TAITO SEA FIGHTER POSEIDON MCU (Japan), TAITO FORTY-LOVE 40-0 MCU (Japan/World), TAITO Chack'n Pop MCU (Japan), TAITO METAL SOLDIER ISAAC II MCU (Japan) and TAITO RUMBA LUMBER MCU (Japan). These are totally new game dumps on top of it: KANEKO JUMP-kun (Japan, Prototype), TAITO FORTY-LOVE 40-0 (Japan) and ATLUS POWER INSTINCT Location Test Version (US, Prototype).
-  6th September 2014: R. Belmont - Painting on Apple II: Guru dumped the 68705 MCU from an Apple II Mouse Card and I did the rest.
- NOTES: The rom for the M68705 MCU is protected (2048 bytes).
- PCB: Motorola 15-00011-01 DA68235, 28 pins (Fieldday, Pitnrun), DA68305 (Flstory)


P10.22  MC68HC705
- PCB: MC68HC705C8ACS (Goldstar), MC68HC705C8P (Steaser)


P10.3   MC68HC11

- 0.253              : Clean up interrupt code and generalize handling. Enable all timer output compare and count overflow interrupts (only TOC1 was fully supported before). Use standard interrupt handling for RESET vector and added XIRQ input. Fixed WAI handling and STOP recovery (mc68hc11\mc68hc11.cpp) [AJR].
- 0.246              : Added M68HC11 internal EEPROM for relevant models (hitpoker.cpp and nscsi\cdd2000.cpp) [AJR].
- 0.236              : Added stubs for TCTL registers. Documented coding bug in asma2k [AJR].
- 0.231              : Fixed bug causing DES to decrement IX rather than the stack pointer (mc68hc11\hc11ops.hxx) [AJR].
- 0.230              : Memory modernization and updates. Eliminated data and I/O spaces, using memory views to remap internal RAM and I/O registers within the program space. Added MC68HC811E2 type. Lay some groundwork for future internal EEPROM support. Added RTI and counter overflow flag. Register debugger state for a few more internal registers [AJR].
- 0.217              : Fixed disassembly and execution of BRCLR/BRSET (IND, Y) [AJR].
- 0.216              : Added preliminary MC68HC11F1 type. MC68HC11 Clock is internally divided by 4. Fixed size of fetched operand for ADDD indexed modes (mc68hc11\hc11ops.hxx). This appears to have accidentally regressed in 0.212. Emulated FDIV instruction [AJR].
- 0.213              : CPU device modernization: Replaced the old-style fake I/O space with callbacks. Added address spaces to handle remappable accesses to internal RAM and registers. Eliminated set_config in favor of separate device types for each model (not differentiated properly yet...). Added internal latches and direction registers for ports. Related changes: Splitted up hc11_regs_r/w into many separate handlers. Give each MC68HC11 model its own specific io_map. Removed now-unnecessary readback handlers from skeetsht.cpp and taitojc.cpp [AJR].
- 0.212              : Implemented more of the instructions. Limited testing of these additions on 6800 code. The fdiv instruction appears the only one remaining now. Cleaned up some of the existing definitions to make the patterns more consistent, and to make it easier to spot inconsistencies and errors [68bit].
- 0.194              : MC68HC11 is big-endian. Fixed dissassembly of instructions with 16-bit operands (immediate or direct) [AJR].
- 0.193              : Added cpu\mc68hc11\hc11dasm.h.
- 0.187              : Fixed MC68HC11 disassembly (tools\unidasm.cpp) [AJR].
- 0.180              : Changed the HC11 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.174              : Changed cpu\mc68hc11\hc11ops.inc to hc11ops.hxx.
- 0.154              : Fixed usage of uninitialized members in mc68hc11_cpu_device [Oliver Stoeneberg].
- 0.153              : Changed cpu\mc68hc11\hc11ops.c to hc11ops.inc [Oliver Stoeneberg].
- 0.150              : Modernized MC68HC11 cpu core [Wilbert Pol].
- 0.149u1            : Some changes to PDP-11 (cpu\mc68hc11\mc68hc11.c and mess\drivers\pdp11.c) [Angelo Salese].
- 0.148u1            : Fixed MC68HC11 hang after soft reset [Sandro Ronco].
- 0.147              : Added asl_ext, bclr_dir and bset_dir opcodes to the HC11 core. Fixed RORA/RORB opcodes in HC11 core. Fixed N flag in 16-bit operations in HC11 core [Sandro Ronco].
- 0.146u4            : Fixed H/V flags on adc/sbc (cpu\mc68hc11\hc11ops.c). Wrong cast, reg a/b are 8bit. Fixed carry flag on NEG and get rid of unneeded casts. Removed unneeded var. Small cleanup. Fixed BRSET mask. Rekludged Hit Poker (Bulgaria) to make it boot again after this MC68HC11 fixes [hap].
- 0.143u6            : Angelo Salese implemented default INIT register for MC68HC11 CPU core, necessary for Namco's 30 Test HC11 sub-variant to work properly, implemented preliminary Free Running Counter timer and save support for MC68HC11 CPU core. Added ROL EXT, ROL INDX, ROL INDY, STS DIR opcodes to the HC11 CPU core.
- 0.137u1            : Angelo Salese implemented MC68HC11 SUBD DIR & SUBD EXT opcodes.
- 0.132u3            : MC68HC11 improvements [Angelo Salese]: Added STX DIR, STY DIR opcodes. Fixed a bug with TAP opcode. Fixed internal RAM/internal I/O start-up state. Fixed the I/O system by changing the has_io flag with a has_extended_io flag (switch between 0x40 and 0x100 I/O registers) the latter is used by the Taito JC HC11 CPU only at the current time. Fixed a register r/w to allow Skeet Shooter to put some gfxs.
- 0.132u2            : Angelo Salese fleshed out the MC68HC11 CPU core, adding support for numerous new opcodes and basic IRQ support.
- 0.128u6            : Pointer-ified the MC68HC11 CPU core [Aaron Giles].
- 0.115u3            : Phil Skuse fixed disassembly of brset and brclr opcodes in the 68HC11 core.
- 0.111u2            : Taito JC driver improvements [Ville Linde]: Implemented MC68HC11 communications. Added analog controls via MC68HC11.
- 0.109u5            : Aaron Giles converted the MC68HC11 disassemblers to the new format and added step in/out support where it was obvious.
- 0.91u1             : MC68HC11 compiler fixes [Lawrence Gold]: ANSI C89 unfortunately doesn't allow unnamed structs or unions, so I had to uglify this code a bit. A cleaner solution is welcome (mc68hc11\mc68hc11.c + hc11ops.c).
- 0.91               : Added cpu\mc68hc11\mc68hc11.c/h, hc11ops.c/h and hc11dasm.c. Motorola MC68HC11 CPU core [Ville Linde].
- NOTES: Motorola MC68HC11 microcontroller with 64k internal ROM. Types: Motorola MC68HC11A1, MC68HC11D0, MC68HC811E2, MC68HC11F1, MC68HC11K1 and MC68HC11M0.
- PCB: MC68HC11M0, QFP80 (Landgear, Sidebs, Sidebs2)
- DRIVERS: 30test.cpp, dangbar.cpp, hitpoker.cpp, ice_bozopail.cpp, skeetsht.cpp and taitojc.cpp
- SOURCE: cpu\mc68hc11\mc68hc11.cpp



P11.    Namco

P11.1   Cxx

-  4th January   2006: Charles MacDonald - Some information is needed about the M37702 MCUs used in various Namco games. If anyone can help, the following needs to be determined: Which games use the C71, C72, or C73 chips. Which games use the C77 (or higher numbered) chip. What we know so far is: C68  = System 2 (Final Lap 3, Suzuka 8 Hours) + System 21, C69  = NA-1 (World Court Tennis), C70  = NA-2 (Quiztou, Numan Athletics), C71  = System 22 (Master TMS32025 DSP BIOS), C72  = ?, C73  = Found on a test board, but used in any games?, C74  = System 22, C75  = NB-1 (Nebulas Ray) + NB-2 (Out Foxies) + System FL and C76  = System 11 (Xevious 3D/G). In the interim I've been examining the BIOS and working on a better trojan as well as figuring out how hardware on the MCU side works. So far adapting the NA-1 trojan for the C70 chip has not worked, but given the many similarities to C69 I feel a solution is not far off. It looks like all the System 2 games that have C68 do not use the external program ROM socket. Do any System 21 games use it, if such a socket is present? Updated the chip list based on information from Justin (thanks for the PCB pic!), Kayama, Fujix, Oliver, Guru and R. Belmont.
- 19th July      2004: R. Belmont - The Namco sound MCUs (Systems 11, 22, NB-1, NB-2, FL) are read-protected. So we're moving on to plan B. The screenshot is from MAME (trojan program) - if it runs properly on real hardware we'll be able to use it to dump the internal ROMs from all the C7x series sound MCUs. Don't get too excited though, it hasn't even been verified to boot on a real PCB yet.


P11.2   C68

- 19th September 2006: Charles MacDonald - Thanks to ogoun and Stiletto the Namco C68 MCU has been positively identified as a M37450 and I now have some documentation for it. I modified an existing PC-Engine USB / flash memory card I made to interface with the MCU (hooking up through the EPROM and PAL sockets) which has allowed some experiments to be run, but didn't result in the internal ROM being dumped. There are plenty of other things to try - one big advantage is that external memory can be mapped into the stack range (due to limited on-chip RAM) which may allow for a stack overflow technique to be used. Currently I am working on some better development hardware for the 68000 side so I can have external control of the dual port RAM the MCU has access to.
- 24th July      2006: Charles MacDonald - When I was working on the C69 MCU found in the Namco NA-1 hardware, it came to my attention that later Namco System 2 boards had a C68 MCU instead of the HD63705 which earlier revisions used. It seemed reasonable to assume Namco used a M37702 as well considering the C68 and C69 are physically identical. I had picked up two Suzuka 8 Hours boards to examine the C68 and see what possibilities there were for trojaning it. The MCU interface is virtually unchanged for the C68 compared to the previous System 2 boards, except for some slightly different connections and a new address decoding PAL. However the C68 pinout doesn't match any of the M377xx series. After disassembling some of the external program ROM dumps used by the C68 in a few games, investigation of the code shows it's actually a Mitsubishi 740 series based MCU, which is a 6502 core with extra instructions and features. Of course when Mitsubishi's microprocessor division was transferred to Renesas, they dropped support (and documentation!) of the older chips. I was able to reverse engineer the PAL outputs to put together the original equations and come up with a memory map, as well as make a partial pinout of the C68. However, I need some help locating a datasheet (user manual) for it, and I don't know the official part number. The C68 is a 100-pin QFP plastic chip, rectangular in shape with pin counts of 24, 16, 24, and 16 pins going around the perimeter from pin 1. The part has a date marking of 1991. While there are many modern parts that are similar to this chip, most of them are for USB or LED segment drivers and do not have an external address/data bus, which the C68 does. The 3806 group of the 740 series, particularly the M38063M6-XXXFP seems like a very close match, but the pins are shifted around. I already have the 740 software manual (e740sum.pdf). Feature-wise, it has eight analog channels, possibly 6 or more I/O ports (going by Mitsubishi's nomenclature, ports 0,1,2 are the data, address low, address high buses, and ports 3,4,5 are used for general I/O), internal RAM of at 256 to 512 bytes at $0000-007F/$0100-013F, and internal mask ROM of an unknown size. Another unusual feature is that the SFRs are at $D0-$FF instead of $00-$3F which may help in identifying it. In the following pinout, the address/data buses, CNVss, and analog converter channel inputs have to match whatever chip is being looked at as a potential candidate, the others are not critical. I've been through everything I can find at the Renesas website and in my collection of manuals, so I'm fairly sure the C68 corresponds to a part that is no longer in production or supported. If anyone has any tips or ideas about which chip this part is based on, I'd certainly like to hear your suggestions! I'm looking forward to writing code for the C68 as I've been wanting to work with the 740 series chips for a while now. And hopefully, a method to read the internal ROM can be figured out.
- 11th January   2006: Charles MacDonald - I recently purchased two Suzuka 8 Hours PCBs (Namco System 2) and will see what can be done about trojaning the M37702-based C68 custom chip used on it. This would be helpful for System 2 and System 21 games. Also I'd like to take a closer look at the alternate type of video hardware this game has, since there seem to be some minor emulation issues in MAME.
- NOTES: System 2 (Final Lap 3, Suzuka 8 Hours) and System 21 use the C68
- PCB: C68 MCU = M37450 = M37450S2FP (QFP80): Gollygho


P11.3   C69 (M37702)

- 0.186              : Changed description to 'Namco C69 (M37702)'.
- 0.155              : Added machine\namcomcu.c/h. Memory system and Namco improvements [Alex Jackson]: Explicit regions in address maps (AM_REGION) are now looked up relative to the device rather than as siblings when in an internal address map (similar to devices and shared pointers)  Besides being more orthogonal than before, this allows internal ROMs of MCUs and similar devices to be hooked up in a nicer and more foolproof way. Updated the m37710 and m5074x (m6502 derivative) to take advantage of this. Divided the M37702/M37710 into specific models, with each model having its own internal address map containing the correct amounts of internal RAM and ROM. M37702 MCUs found on various Namco PCBs are now all unique devices and have their respective internal ROMs loaded as device ROMs. Also did some spring (fall) cleaning in addrmap.c/memory.c/dimemory.c. m_devbase (the base device used for tagmap lookup when late-binding handlers and finding memory regions and shares) is now a reference rather than a pointer, since we know what it is when the address_map_entry is constructed and it doesn't change (it depends solely on whether it's an entry in an MCFG-provided address map or an internal one) And for the same reason, there's now only one m_devbase per address_map_entry rather than individual copies for read/write/setoffset/sharedptr. Removed mysterious unused address_map_entry member "m_region_string", along with a silly assert probably left over from when Aaron was replacing AM_BASE with AM_SHARE years ago. Added a comment noting that "make sure all devices exist" in device_memory_interface::interface_validity_check() actually does nothing, like the proverbial goggles. The reason there's just a comment and not a fix is I haven't figured out how to fix it yet (is it possible to extract the original device tag that was given to a proto-delegate? [Alex Jackson].
-  6th May       2006: Charles MacDonald - Guru kindly sent another NA-2 board for me to work with. I've got the NA-1 USB hardware hooked up to it and have tried running some of the C69 trojans as well as new programs to figure out what's going on. Namco did a good job patching up the holes in the C69's security. ;) I'm sure in time the C70 can be dumped.
- 11th January   2006: Charles MacDonald - Progress on the C70 trojan has temporarily halted. After Guru had run a bunch of tests to help determine what was going on, it appears that the MCU commands used by the C69 trojan are implmented as do-nothing functions in the C70, so it isn't possible to simply upload code or do a memory transfer in the opposite direction to read the internal ROM out. Luckily, Guru has offered to send a NA-2 board for me to experiment with, and hopefully some methods for reading the internal ROM can be derived from the C69 BIOS which may apply to the C70.
- NOTES: NA-1 (World Court Tennis) use the C69


P11.4   C70 (M37702)

- 0.186              : Changed description to 'Namco C70 (M37702)'.
- 0.155              : Added machine\namcomcu.c/h. Memory system and Namco improvements [Alex Jackson]: Explicit regions in address maps (AM_REGION) are now looked up relative to the device rather than as siblings when in an internal address map (similar to devices and shared pointers)  Besides being more orthogonal than before, this allows internal ROMs of MCUs and similar devices to be hooked up in a nicer and more foolproof way. Updated the m37710 and m5074x (m6502 derivative) to take advantage of this. Divided the M37702/M37710 into specific models, with each model having its own internal address map containing the correct amounts of internal RAM and ROM. M37702 MCUs found on various Namco PCBs are now all unique devices and have their respective internal ROMs loaded as device ROMs. Also did some spring (fall) cleaning in addrmap.c/memory.c/dimemory.c. m_devbase (the base device used for tagmap lookup when late-binding handlers and finding memory regions and shares) is now a reference rather than a pointer, since we know what it is when the address_map_entry is constructed and it doesn't change (it depends solely on whether it's an entry in an MCFG-provided address map or an internal one) And for the same reason, there's now only one m_devbase per address_map_entry rather than individual copies for read/write/setoffset/sharedptr. Removed mysterious unused address_map_entry member "m_region_string", along with a silly assert probably left over from when Aaron was replacing AM_BASE with AM_SHARE years ago. Added a comment noting that "make sure all devices exist" in device_memory_interface::interface_validity_check() actually does nothing, like the proverbial goggles. The reason there's just a comment and not a fix is I haven't figured out how to fix it yet (is it possible to extract the original device tag that was given to a proto-delegate? [Alex Jackson].
- 0.127u4            : Phil Bennett changed Namco NA-2 to use real C70 BIOS. Removed sound and input simulation code.
- 11th June      2006: R. Belmont - Spent most of the day pulling apart the music player in the Namco NA-1 (C69) BIOS looking for exploits we can use to trojan the C70. Unfortunately, unlike the later players, there isn't a wide open opcode that'll do it for us, but I still have many other ideas.
-  6th May       2006: Charles MacDonald - Guru kindly sent another NA-2 board for me to work with. I've got the NA-1 USB hardware hooked up to it and have tried running some of the C69 trojans as well as new programs to figure out what's going on. Namco did a good job patching up the holes in the C69's security. ;) I'm sure in time the C70 can be dumped.
- 11th January   2006: Charles MacDonald - Progress on the C70 trojan has temporarily halted. After Guru had run a bunch of tests to help determine what was going on, it appears that the MCU commands used by the C69 trojan are implmented as do-nothing functions in the C70, so it isn't possible to simply upload code or do a memory transfer in the opposite direction to read the internal ROM out. Luckily, Guru has offered to send a NA-2 board for me to experiment with, and hopefully some methods for reading the internal ROM can be derived from the C69 BIOS which may apply to the C70.
- NOTES: NA-2 (Quiztou, Numan Athletics) use the C70
- PCB: C70 (Emeralda), C70 = rebadged M37702, QFP80 (Namco NA2)


P11.5   C71

- 17th January   2006: R. Belmont - Phil Stroffolino was able to trojan and dump the BIOSes from the C71 3D math engine (actually a TMS32c025) and the C74 sound/inputs MCU (actually an M37702). He's already flying high with the C71 - using that code many long-standing graphics problems are now gone and several games that didn't work properly now work 100% (such as Ace Driver: Victory Lap).
- PCB: C71 TI TMS320C25 DSP, C71 WEYW40116, C71 D72260FN 980 FE-5CA891W (NamcoSystem22)


P11.6   C74 (M37702)

- 0.186              : Changed description to 'Namco C74 (M37702)'.
- 0.155              : Added machine\namcomcu.c/h. Memory system and Namco improvements [Alex Jackson]: Explicit regions in address maps (AM_REGION) are now looked up relative to the device rather than as siblings when in an internal address map (similar to devices and shared pointers)  Besides being more orthogonal than before, this allows internal ROMs of MCUs and similar devices to be hooked up in a nicer and more foolproof way. Updated the m37710 and m5074x (m6502 derivative) to take advantage of this. Divided the M37702/M37710 into specific models, with each model having its own internal address map containing the correct amounts of internal RAM and ROM. M37702 MCUs found on various Namco PCBs are now all unique devices and have their respective internal ROMs loaded as device ROMs. Also did some spring (fall) cleaning in addrmap.c/memory.c/dimemory.c. m_devbase (the base device used for tagmap lookup when late-binding handlers and finding memory regions and shares) is now a reference rather than a pointer, since we know what it is when the address_map_entry is constructed and it doesn't change (it depends solely on whether it's an entry in an MCFG-provided address map or an internal one) And for the same reason, there's now only one m_devbase per address_map_entry rather than individual copies for read/write/setoffset/sharedptr. Removed mysterious unused address_map_entry member "m_region_string", along with a silly assert probably left over from when Aaron was replacing AM_BASE with AM_SHARE years ago. Added a comment noting that "make sure all devices exist" in device_memory_interface::interface_validity_check() actually does nothing, like the proverbial goggles. The reason there's just a comment and not a fix is I haven't figured out how to fix it yet (is it possible to extract the original device tag that was given to a proto-delegate? [Alex Jackson].
- 0.104u2            : Updates to the Namco System 22 driver [R. Belmont]: Necessary changes to System 22 games to use the real C74 BIOS for music/sound. Added system controller register to boot the C74. Speedup cheat for the CPU board C74. Promoted Ace Driver from NO_SOUND to IMPERFECT_SOUND.
- 17th January   2006: R. Belmont - Phil Stroffolino was able to trojan and dump the BIOSes from the C71 3D math engine (actually a TMS32c025) and the C74 sound/inputs MCU (actually an M37702). The C74 is a bit more interesting. Unlike Super System 22, which has one M37710 (37710 and 37702 are the same MCU, just '02 has an internal ROM and '10 boots externally like a normal CPU), original System 22 has 2 M37702s (C74) with identical internal BIOSes. Based on the state of one of the MCU's inputs, the BIOS boots one of 2 different programs. The first one, intended for the C74 on the I/O board, reads all the inputs, massages them, and transmits them via the MCU's built-in serial port to the second MCU. The second MCU recieves the data via it's own serial port, puts that in shared RAM for the 68020 to see, and handles all the sound and music duties.
-  3rd January   2006: R. Belmont - Charles MacDonald has trojaned the MCU BIOS for Namco NA-1. Primarily this means correct emulated sound and music as opposed to the current (very good) simulation. I'm working on hooking everything up in MAME properly right now. And yes, this can also be considered proof of concept for trojaning other troublesome Namco MCUs (including System 11, 22, NB-1/NB-2, and FL) although the specific method won't quite apply.
-  2nd January   2006: Charles MacDonald - I've been running tests on the Namco NA-1 hardware over the last few days, and figured out how to dump the internal ROM of the M37702 MCU used in Super World Court. The BIOS has a function where code can be copied from the 68000 side over to MCU RAM and executed, making it quite insecure. I wrote a program that copies a portion of the M37702 memory to shared RAM, and the 68000 can change and run the program in a loop to read any part of the MCU address space. I think the same technique will work for other NA-1 games; at least what I've seen in MAME is that a number of them also upload code fragments for the MCU to use. For other types of Namco hardware that use the M37702, it's highly dependant on what services the MCU makes available. Also, now that the BIOS can be examined and user code can be executed on the MCU side for testing, maybe the NA-1 sound hardware (integrated in the multiple purpose 219 chip) will get figured out. Though the existing simulation of the NA-1 sound hardware is remarkably good.
- 0.99u9             : Added sndhrdw\namcoc7x.c/h.
- NOTES: The Mitsubishi M37702 (printed as C74) is a sound MCU with mask ROM.
- SOURCE: audio\namcoc7x.cpp
- PCB: (printed as C74) System 22


P11.7   C75 (M37702)

- 0.186              : Changed description to 'Namco C75 (M37702)'.
- 0.155              : Added machine\namcomcu.c/h. Memory system and Namco improvements [Alex Jackson]: Explicit regions in address maps (AM_REGION) are now looked up relative to the device rather than as siblings when in an internal address map (similar to devices and shared pointers)  Besides being more orthogonal than before, this allows internal ROMs of MCUs and similar devices to be hooked up in a nicer and more foolproof way. Updated the m37710 and m5074x (m6502 derivative) to take advantage of this. Divided the M37702/M37710 into specific models, with each model having its own internal address map containing the correct amounts of internal RAM and ROM. M37702 MCUs found on various Namco PCBs are now all unique devices and have their respective internal ROMs loaded as device ROMs. Also did some spring (fall) cleaning in addrmap.c/memory.c/dimemory.c. m_devbase (the base device used for tagmap lookup when late-binding handlers and finding memory regions and shares) is now a reference rather than a pointer, since we know what it is when the address_map_entry is constructed and it doesn't change (it depends solely on whether it's an entry in an MCFG-provided address map or an internal one) And for the same reason, there's now only one m_devbase per address_map_entry rather than individual copies for read/write/setoffset/sharedptr. Removed mysterious unused address_map_entry member "m_region_string", along with a silly assert probably left over from when Aaron was replacing AM_BASE with AM_SHARE years ago. Added a comment noting that "make sure all devices exist" in device_memory_interface::interface_validity_check() actually does nothing, like the proverbial goggles. The reason there's just a comment and not a fix is I haven't figured out how to fix it yet (is it possible to extract the original device tag that was given to a proto-delegate? [Alex Jackson].
- 0.127u4            : R. Belmont changed Namco NB-x to use real C75 BIOS, read controls the real hardware way.
- 0.127u1            : Namco NB 1/2 work [Olivier Galibert]: Shares the memory with the C75. Renames the C75 region to C7x from user4. Implements the C75 reset/halt control. Implements the irqs more correctly.
- 26th August    2008: Guru - A couple of items arrived(Espgaluda 1 and 2)... Now for some REALLY BIG NEWS.....I've also been working on Namco's M37702 Sound MCU (C75) with Olivier Galibert.
- 10th August    2006: R. Belmont - On the trojan front, the 68020 side runs well on the PCB, but I've had some issues getting the MCU to cooperate. And at 20 minutes erase time per EPROM the turnaround is pretty nasty (I don't know how Guru puts up with it). Still, onwards we go...
-  6th August    2006: R. Belmont - Finally getting somewhere on the C75 trojan. I found a great universal cross-assembler and wrote a 68020 assembly program based on the startup/diagnostic code from Mach Breakers since that's the PCB I have to play with. Finally I've come up with a program that works to my satisfaction in MAME. Next comes actually trying it on the PCB, but since it's mostly unaltered Namco code it hopefully shouldn't be too problematic.
- 0.99u9             : Added sndhrdw\namcoc7x.c/h.
- SOURCE: audio\namcoc7x.cpp
- PCB: NAMCO 75 (M37702 MCU) (Speedrcr, NamcoFL-System), NB-1 and NB-2


P11.8   C76 (M37702)

- 0.186              : Changed description to 'Namco C76 (M37702)'.
- 0.155              : Added machine\namcomcu.c/h. Memory system and Namco improvements [Alex Jackson]: Explicit regions in address maps (AM_REGION) are now looked up relative to the device rather than as siblings when in an internal address map (similar to devices and shared pointers)  Besides being more orthogonal than before, this allows internal ROMs of MCUs and similar devices to be hooked up in a nicer and more foolproof way. Updated the m37710 and m5074x (m6502 derivative) to take advantage of this. Divided the M37702/M37710 into specific models, with each model having its own internal address map containing the correct amounts of internal RAM and ROM. M37702 MCUs found on various Namco PCBs are now all unique devices and have their respective internal ROMs loaded as device ROMs. Also did some spring (fall) cleaning in addrmap.c/memory.c/dimemory.c. m_devbase (the base device used for tagmap lookup when late-binding handlers and finding memory regions and shares) is now a reference rather than a pointer, since we know what it is when the address_map_entry is constructed and it doesn't change (it depends solely on whether it's an entry in an MCFG-provided address map or an internal one) And for the same reason, there's now only one m_devbase per address_map_entry rather than individual copies for read/write/setoffset/sharedptr. Removed mysterious unused address_map_entry member "m_region_string", along with a silly assert probably left over from when Aaron was replacing AM_BASE with AM_SHARE years ago. Added a comment noting that "make sure all devices exist" in device_memory_interface::interface_validity_check() actually does nothing, like the proverbial goggles. The reason there's just a comment and not a fix is I haven't figured out how to fix it yet (is it possible to extract the original device tag that was given to a proto-delegate? [Alex Jackson].
-  3rd September 2008: Guru - Since a few people were interested, here's a small Guru-treat about the C76 dumping process. The first pic is an overall view of the Namco NB-1 PCB. The second pic shows a close-up of the C76 that has been surface mounted onto the PCB. Astute MAME'ers will know that normally in that location on a Namco NB-1 PCB is a C75 chip. The C76 is just the same type of Mitsubishi M37702 microcontroller with a different internal ROM. If you look closely you can see the number '24' written on it, showing it's the chip that I tagged to be decapped on my Decapping Page. The decapping is no longer required, of course. The third pic shows the two 27C4096 EPROMs that have been re-programmed with the trojan code and the on-board 2k EEPROM that we're using to save the data. The EEPROM is simply read with any common EPROM programmer to get the C76 code that we put there using the trojan. There were a couple of issues here. First, the C76 interface is different to the C75 so it took a few tries before the trojan would run on this PCB (if you've been paying attention you'll know the C76 normally sits on a Namco System 11 PCB). Secondly, and unfortunately, the C76 ROM is 16k so I needed to adjust the trojan code manually by changing the memory start point then repeating the process 8 times to get a full dump of the C76 ROM (at c000, c800, d000, d800, e000, e800, f000, f800). This also involves blanking EPROMs 8 times too. Thanks again to Olivier Galibert for figuring it all out.
-  2nd September 2008: Guru - Namco System 11 BIOS (C76) dumped: Special thanks again to Olivier Galibert for his superior trojan writing skills.
- 0.99u9             : Added sndhrdw\namcoc7x.c/h.
- SOURCE: audio\namcoc7x.cpp
- PCB: NamcoSystem11




P12.    National Semiconductor

P12.1   COP400

- 0.263              : Zerofill class variables (cop400\cop400.cpp) [hap].
- 0.241              : Added accessors for sk/so output pin state [hap].
- 0.229              : Small notes cleanup [hap].
- 0.221              : Simplified some handlers [Osso].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.201              : Modern configuration accessors [Ryan Holtz].
- 0.190              : COP400 overhaul: Rewrote the execution control logic to fetch each byte of an instruction separately in one pass of the main loop. This provides EEPROM-compatible timing for the SIO shift register, allowing the 93C46 on Quiz Punch II to be read and written properly (though its default contents are a bad dump). Added M pseudo-register (internal RAM referenced by B) to debugger state. Added T register to debugger state on devices where it only affects SKT. The SIO state is now displayed in binary when it is defined as a shift register. Skipped instructions and the SKIP flag can be debugged by compile-time switch (disabled by default) [AJR].
- 0.182              : Fixed disassembly of jump instructions and used decimal for LDD/XAD. Fixed instruction timing and time-base counter. Fixed debugger behavior on skip. Fixed debugger register/flags view [Curt Coder].
- 0.181              : Added COP400 LEI opcode (reset L pins when EN2=0). Added L pins tri-state callback [hap]. Correct internal RAM memorymap for COP410 [Sean Riddle].
- 0.174              : Changed cpu\cop400\cop400op.inc to cop400op.hxx.
- 0.172              : Implemented the MICROBUS interface [Curt Coder].
- 0.162              : Got rid of COP400 fake I/O memory map (drivers\cidelsa.c, looping.c and thayers.c). Fixed LBI mask and B mask on XDS,XIS (cop400\cop400op.inc). Changed skip-lbi-testing. Changed lbi skip testing again, previous solution didnt work properly [hap].
- 0.161              : Accuracy fix for integer division loses fraction (attotime::from_hz -> attotime::from_ticks) [hap].
- 0.153              : Changed cpu\cop400\cop400op.c to cop400op.inc [Oliver Stoeneberg].
- 0.149u1            : Modernized COP4xx cpu core (drivers\cidelsa.c, looping.c and thayers.c) [Wilbert Pol].
- 0.129u1            : Changed cpu\cop400\cop410.c to cop400\cop400.c and 410ops.c to cop400op.c. COP400 CPU core refactoring [Curt Coder]: Added state table for the debugger. Grouped all cpu types under a single makefile entry. Removed duplicate code.
- 0.128u4            : Pointerized the COP400 CPU cores. Refactored the COP400 CPU cores to use the new memory functions [Curt Coder].
- 0.109u5            : Aaron Giles added save state support to the COP4xx core. Aaron Giles converted the COP4x0 disassemblers to the new format and added step in/out support where it was obvious.
- DRIVERS: cidelsa.cpp, looping.cpp and thayers.cpp
- SOURCE: cpu\cop400\cop400.cpp

        Types   (NOTES: The National Semiconductor COP4xx MCUs manages CPU communnication)

        COP400
        COP401 is a ROMless version of the COP410
        COP402 is a ROMless version of the COP420
        COP404 is a ROMless version of the COP444, which can emulate a COP410 or a COP424
        COP410
        COP411 is a 20-pin package version of the COP410, missing D2/D3/G3/CKO
        COP420
        COP421 is a 24-pin package version of the COP420, lacking the IN ports
        COP422 is a 20-pin package version of the COP420, lacking the IN ports
        COP424 is functionally equivalent to COP444, with only 1K ROM and 64x4 bytes RAM
        COP425 is a 24-pin package version of the COP424, lacking the IN ports
        COP426 is a 20-pin package version of the COP424, with only L0-L7, G2-G3, D2-D3 ports
        COP440
        COP444
        COP445 is a 24-pin package version of the COP444, lacking the IN ports



P12.2   COP410

- 0.193              : Added cpu\cop400\cop410ds.h.
- 0.180              : Changed the cop410 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.149u1            : Modernized COP4xx cpu core [Wilbert Pol].
- 0.146u4            : Fixed bogus if-condition in src\emu\cpu\cop400\cop410ds.c [Oliver Stoeneberg].
- 0.127u2            : Enabled internal COP410 program map [Curt Coder].
- 0.125u5            : COP4xx [Curt Coder]: Fixed LEI instruction (cpu\cop400\410ops.c).
- 0.125u4            : COP4xx updates [Curt Coder]: Added HALT opcode and halt mode to the COP410.
- 0.124u1            : COP CPU updates [Curt Coder]: Implemented interrupt. Implemented serial input/output. Fixed XAD/LDD, XIS1, RMB3 opcodes. Fixed clock divider. Fixed internal memory map size. Added some cpu variants. Fixed serial timer. Fixed clocks. Fixed COP410 RMB3, XAD instructions. General cleanup.
- 0.118u1            : Andrew Gardner fixed two minor bugs in the COP400 CPU disassembler. Hooked up the internal 64 bytes of DATA RAM to the core.
- 0.109u5            : Aaron Giles added save state support to the COP4xx core. Aaron Giles converted the COP4x0 disassemblers to the new format and added step in/out support where it was obvious.
- 0.109u4            : Nathan Woods added a COP410 core to the COP4xx collection.
- 0.109u3            : Added cpu\cop400\cop410.c, 410ops.c, cop410ds.c and cop400.h. Added National Semiconductor COP410 emulator [Dan Boris].
- DRIVERS: (MESS) hh_cop400.cpp and test_t400.cpp
- SOURCE: cpu\cop400\cop400.cpp


P12.3   COP420

- 0.193              : Added cpu\cop400\cop420ds.h.
- 0.180              : Changed the COP420 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.149u1            : Modernized COP4xx cpu core [Wilbert Pol].
- 0.129u1            : Changed cpu\cop400\cop420.c and 420ops.c to cop400\cop400.c and cop400op.c.
- 0.125u5            : COP4xx [Curt Coder]: Fixed LEI instruction (cpu\cop400\410ops.c).
- 0.125u4            : COP4xx updates [Curt Coder]: Added Microbus support, clock divisor selection and CKO mode selection to the COP420. Changed Thayer's Quest keyboard interface to at least slightly resemble the schematics.
- 0.125u3            : Curt Coder fixed COP420 instructions JSRP, LBI, LQID, SKT, XAS and INIL. Draco now has sound. Fixed cycle count for extended opcodes. Added CKO general purpose input.
- 0.124u1            : COP CPU updates [Curt Coder]: Implemented interrupt. Implemented serial input/output. Fixed XAD/LDD, XIS1, RMB3 opcodes. Fixed clock divider. Fixed internal memory map size. Added some cpu variants. Fixed serial timer. Fixed clocks. General cleanup.
- 0.118u3            : Andrew Gardner added counter emulation to the COP420 CPU core. Hooked it up to Thayer's Quest and added an alternate set.
- 0.118u1            : Andrew Gardner fixed two minor bugs in the COP400 CPU disassembler. Hooked up the internal 64 bytes of DATA RAM to the core.
- 0.114u1            : Curt Coder fixed XABR opcode in the COP420 core, added LBI skip for extended opcodes and fixed the CPU name in save states.
- 0.109u5            : Aaron Giles added save state support to the COP4xx core. Aaron Giles converted the COP4x0 disassemblers to the new format and added step in/out support where it was obvious.
- 0.109u3            : Added cpu\cop400\cop420.c, 420ops.c, cop420ds.c and cop400.h. Added National Semiconductor COP420 emulator [MAME Team]. Curt Coder added COP420 core to Draco (Cidelsa 1981).
- 29th January   2001: Phil Stroffolino sent in the playable Looping driver, with correct graphics and colors, but it lacks one of the nicest features of the game - speech and music. The COP420 microcontroller in fact helps with the CPU communication, so it is probably necessary for sound emulation.
- DRIVERS: looping.cpp
- SOURCE: cpu\cop400\cop400.cpp


P12.4   COP421

- 0.193              : Added cpu\cop400\cop420ds.h.
- 0.149u1            : Modernized COP4xx cpu core [Wilbert Pol].
- 0.125u5            : COP4xx [Curt Coder]: Added COP421 variant. Fixed LEI instruction.
- DRIVERS: thayers.cpp
- SOURCE: cpu\cop400\cop400.cpp


P12.41  COP424
- 0.193              : Added cpu\cop400\cop424ds.h.
- 0.182              : Added cpu\cop400\cop424ds.cpp.
- DRIVERS: thayers.cpp
- SOURCE: cpu\cop400\cop400.cpp


P12.5   COP440

- 0.182              : Changed cpu\cop400\cop440ds.cpp to cop444ds.cpp. Removed non-working, incomplete COP440 code [Curt Coder].
- 0.149u1            : Modernized COP4xx cpu core [Wilbert Pol].
- 0.129u1            : Changed cpu\cop400\cop440.c and 440ops.c to cop400\cop400.c and cop400op.c.
- 0.128u4            : Added cpu\cop400\cop440.c, cop440ds.c and 440ops.c.
- DRIVERS:
- SOURCE: cpu\cop400\cop400.cpp


P12.6   COP444

- 0.193              : Added cpu\cop400\cop444ds.h.
- 0.182              : Changed cpu\cop400\cop440ds.cpp to cop444ds.cpp. Fixed COP444 disassembly. Properly separated COP444L from COP444C [Curt Coder].
- 0.180              : Changed the COP444 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.149u1            : Modernized COP4xx cpu core [Wilbert Pol].
- 0.129u1            : Changed cpu\cop400\cop440.c and 440ops.c to cop400\cop400.c and cop400op.c.
- 0.128u4            : Added cpu\cop400\cop440.c, cop440ds.c and 440ops.c.
- DRIVERS: (MESS) hh_cop400.cpp
- SOURCE: cpu\cop400\cop400.cpp




P13.    Nichibutsu

P13.1   1411M1
- GAMES: Nichibutsu - Pastel Gal (1985)


P13.2   1412M2

- 0.232              : Don't return a bool for uint8 [hap].
- 0.231              : NB1412M2 Mahjong Custom: Fixed BGM tempo was unstable. The frequency setting of DAC and timer clock are now linked. When changes the DAC clock, Sound driver set wait loop count ($C010) in the range of 2 to 4 in order to keep the tempo of BGM even if changed clock. This was the cause of the slow BGM in previous versions. Fixed DAC clock calculation. I changed this so that sound plays same as PCB. Implemented a protect command 0x11 to stop the DAC. This is needed to stop DAC sound when the psycho gun is stopped (machine\nb1412m2.cpp). This fixed various sound issues in Mighty Guy so that it sounds almost exactly like PCB [Sasuke].
- 0.221              : Simplified some handlers (machine\nb1412m2.cpp) [Osso].
- 0.198              : Hooked up NB1412M2 to Mighty Guy. Improved sound capabilities, makes Mighty Guy to have a sense sound wise. Added DAC sound (MCFG_NB1412M2_DAC_CB) [Angelo Salese].
- 0.197              : Added machine\nb1412m2.cpp/h. Added 'NB1412M2 Mahjong Custom' device. Rewrote NB1412M2 into a device [Angelo Salese].
- NOTES: Nichibutsu 1412M2 protection chip
- DRIVERS: cop01.cpp, galivan.cpp and terracre.cpp
- SOURCE: machine\nb1412m2.cpp


P13.3   1413M3

- 0.262              : Decouple common mahjong inputs from NB1413M3 (nbmj9195.cpp and nichild.cpp) [Dirk Best].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.211              : Kill NB1413M3 busy flag publicness and busyflag hack in threeds [Angelo Salese].
- 0.198              : Eliminated some explicit device tag lookups [AJR].
- 0.197              : Moved includes\nb1413m3.h to machine\.
- 0.186              : Changed description to 'NB1413 Mahjong Custom'.
- 0.158              : Anonymous timer in nb1413m3_device isn't anonymous anymore [Osso].
- 0.149u1            : Added 'NB1413M3 Mahjong Custom' device. Modernized/converted NB1413M3 to a device. Removed some includes made unnecessary by recent changes [Osso]. Moved NB1413M3 configuration to inline config [Wilbert Pol, Osso].
- 0.147u4            : Correct NB1413M3 DAC frequency in 'Hayaoshi Taisen Quiz Hyhoo' [Takahiro Nogi].
- 0.147u3            : Fixed nested NMI behaviour on soft resets in Nichibutsu mahjong drivers (hyhoo driver etc). Little note update [Angelo Salese, Takahiro Nogi].
- 15th August    2009: Guru - Another package from Japan arrived with NB1413M3 (Nichibutsu mahjong MCU to decap), thanks to Team Japump.
- 0.86u2             : Takahiro Nogi added some process to the 1413M3 custom chip. Adjusted the interrupt of drivers using machine\nb1413.c/h. So, some titles are broken.
- 0.57               : Moved machine\nb1413m3.h to includes\.
- 0.37b8             : Added machine\nb1413m3.c/h.
- NOTES: This custom chip is use by many Mahjong games (drivers\nbmj8688.c)
- DRIVERS: hyhoo.c, nbmj8688.c, nbmj8891.c, nbmj8900.c, nbmj8991.c and pastelg.c
- SOURCE: machine\nb1413m3.cpp


P13.4   1414M4

- 0.217              : Fixed text attribute reference when erasing of blinking. Fixed kozure_score_msg when score is 0, the tens place is blank. Fixed insert_coin_msg and credit_msg if the in-game flag is on, "INSERT COIN" etc. is not displayed. Get the in-game flag bit 0200 from sent at command. Removed duplicate bit 0200 operations to make code easier to read. Draw the score when the game over display bit 0e00 is set. The flashing bit 0e00 is no longer applied to game over. Fixed corrupted Ninja Emaki continue screen (machine\nb1414m4.cpp) [Sasuke]. Improved notes. Added stub for frame synchronization (machine\nb1414m4.cpp) [Angelo Salese].
- 0.197              : Moved includes\nb1414m4.h to machine\.
- 0.159              : Added 'NB1414M4 Mahjong Custom' device. Converted NB1414M4 to a device, no functional change expected [Osso].
- 0.142u3            : Added machine\nb1414m4.c and includes\nb1414m4.h. Angelo Salese de-stateized the NB1414M4 routines, and converted the correlated Armed F text tilemap to be 8-bits. Angelo Salese hooked up NB1414M4 to Ninja Emaki, greatly improving gfxs in it.
- 0.142u2            : Angelo Salese hooked up the 1414M4 chip emulation for Legion and Crazy Climber 2. Hooked up NB1414M4 priority bit, fixing video text priority in all the games in the ArmedF driver.
- 21st April     2011: Angelo Salese - Currently working at the Nichibutsu 1414M4 emulation, that is a fancy MCU / blitter device used for copying text strings in various 1987/1988 games. Here's Terra Force and Kodure Ookami with this hooked up.
- DRIVERS: armedf.cpp and galivan.cpp
- SOURCE: machine\nb1414m4.cpp


P13.5   NSC8105

- 0.272              : Small tweak to opcode cycles (m6800\m6800.cpp) [hap].
- 0.217              : Internalized internal RAM [AJR].
- 0.171              : Added opcodes ldax_imm and stax_imm for NSC8105 CPU core, used by Night Gal Summer (cpu\m6800\6800ops.inc). ADCX opcode is actually an ADDX, fixes gfx garbage in Sexy Gal. Added opcode $b2, Night Gal Summer shows some graphics now. Improved opcode $bb, added extra protection ports. Fixed DASM for the new opcodes (cpu\m6800\6800dasm.cpp) [Angelo Salese].
- 0.150              : Added 'NSC8105' device (cpu\m6800\m6800.c).
- 0.141u4            : Some cycle fixes + cycles_nsc8105 table was wrong (cpu\m6800\6800tbl.c and m6800.c) [hap].
-  5th June      2002: Jarek Burczynski added a new opcode to the M6800/NSC8105 CPU core.
- 30th November  1999: Zsolt Vasvari sent in a NSC8105 core and modified Seicross driver to use it.
- NOTES: The NSC-8105 is similiar to the M6800/M6802, but the opcodes are scrambled and there is at least two new opcode ($ec and $fc).
- PCB: NSC81050-102  8127 E37, 40-pin IC (Seicross)
- DRIVERS: jangou.cpp, nightgal.cpp, seicross.cpp and tubep.cpp
- SOURCE: cpu\m6800\m6800.cpp




P14.    Nintendo

P14.1   Nintendo VS System (VSNES)

        RP2C03C               Vspinbal, Smgolf
        RP2C03B               Btlecity, Duckhunt, Starlstr
        RP2C04 0001           Hogalley, Machridr, Vsbball
        RP2C04 0002           Bnglngby, Cstlevna, Wrecking
        RP2C04 0003           Excitebk, Goonies
        RP2C04 0004           Iceclimb
        RC2C05-1              Jajamaru
        RC2C05-2              Mightybj
        RC2C05-3              Vsgshoe
        RC2C05-4              Topgun


P14.2   RP5H01

- 0.155              : Changed RP5H01 from read8/write8 to read_line/write_line. Removed unneeded enable/disable in drivers (drivers\nss.c and machine\playch10.c). Added RP5H01 devices to spnchout. Had a look at the datasheet, the dumps look fine to me [hap].
- 0.149              : Modernized the RP5H01 device [Osso].
- 0.147              : Got the RP5H01 protection to work (still says no slot for whatever reason tho) [Angelo Salese].
- 0.138u2            : Couriersud removed rp5h01_config. Memory region now has to have same tag as RP5H01 device. Update playch10.c driver.
- 0.131u4            : Fabio Priuli converted RP5H01 to be a MAME device.
- 0.37b6             : Added machine\rp5h01.c/h.
- NOTES: RP5H01 = Ricoh 64x1bit(+8bit) PROM with 6/7-bit counter (=>16 bytes security data). In reality, PROM data is 72bits (64 + 8bit 'dummy'). In 7-bit counter mode, from 64 to 127 (%1000000 to %1111111), the dummy bits are read repeatedly, with a mask of %1010111. For example if the 8 dummy bits are $7c, bits 64 to 127 are read as $7c $7c $00 $00 $7c $7c $00 $00. To simplify this, our emulation expects 'overdumps', 128bits total.
- NOTES: The RP5H01 one-time PROM (OTP) is confirmed to be unprogrammed.
- DRIVERS: nss.cpp and playch10.cpp
- SOURCE: machine\rp5h01.cpp

        Playchoice 10 carts examples:

        PCH1-01-ROM      (Pc_ebike, Pc_kngfu, Pc_smb)
        PCH1-01-ROM-A    (Pc_grdus, Pc_tkfld)
        PCH1-01-ROM-B    (Pc_rnatk)
        PCH1-02-ROM-B    (Pc_cntra, Pc_cvnia, Pc_dbldr, Pc_rygar)
        PCH1-02-ROM-D    (Pc_radrc)
        PCH1-01-ROM-E    (Pc_miket)
        PCH1-01-ROM-F    (Pc_rcpam, Pc_tmnt)
        PCH1-02-ROM-F    (Pc_drmro, Pc_ftqst, Pc_ngaid)
        PCH1-01-ROM-G    (Pc_gntlt, Pc_smb3)
        PCH1-02-ROM-G    (Pc_suprc)
        PCH1-04-ROM-G    (Pc_ngai3, Pc_tmnt2, Pc_wcup)


P14.3   Aleck64 (Nintendo64 based hardware)

        CIC-NUS-5101          Boot protection chip    (11beat, Magical, Mtetrisc)
        BK4D-NUS              Similar to the save chip used in N64 console carts

        - 0.105u4: Nintendo 64 system improvements [Ville Linde, Ryan Holtz]: Fixed a major bug in the RSP core, rewrote the PIF handling and slightly improved triangle rendering.
        - 0.105u1: R. Belmont split out some of the Nintendo 64 core pieces into MESS-shareable modules.
        - SOURCE: drivers\aleck64.cpp + video\n64.cpp



P15.    Sega

P15.1   Sega encryption

- 0.256              : Added 'Sega 315-5111' device (machine\segacrpt_device.cpp).
- 0.253              : Updated documentation (machine\segacrpt_device.cpp) [Brian Troha]. Added 'Sega 315-5006' device. Changed 'Sega 315-5xxx (Spatter)' to 'Sega 315-5096'.
- 0.209              : Decrypted SEGA 315-5133 device used by clone Wonder Boy (system 2, set 2, 315-5176) [Osso].
- 0.188              : Decrypted SEGA 315-5133 device used by clone Sega Ninja (315-5113), promoted it to working. Shares identical code with other sets (SWAT (315-5048), just with a different number [David Haywood].
- 0.184              : Device cleanup (machine\segacrpt_device.cpp) [O. Galibert]. Added device names to sega_315_5010, sega_315_5013, sega_315_5014, sega_315_5015, sega_315_5018, sega_315_5028, sega_315_5033, sega_315_5041, sega_315_5048, sega_315_5051, sega_315_5061, sega_315_5064, sega_315_5065, sega_315_5084, sega_315_5093, sega_315_5098, sega_315_5099, sega_315_5102, sega_315_5110, sega_315_5128, sega_315_5132, sega_315_5133, sega_315_5135, sega_315_5155 and sega_315_spat.
- 0.173              : Changed machine\segacrpt.cpp/h to machine\segacrpt_device.cpp/h. Sega encryption emulation (segacrpt) is now a device, kill off a whole bunch of duplicated decryption code across several drivers [David Haywood]. Give unique descriptions and short names to new SegaCrypt Z80 devices so that they show up properly in devices listings [Tafoid].
- 0.147u3            : Minor doc update: Added the Super Locomotive encrypted Z80 part number (machine\segacrpt.c) [Brian Troha].
-  4th May       2005: As you might already have seen on Haze's WIP, yesterday I succeeded in decrypting Gardia and Space Position. This was an interesting case of pieces falling into place rapidly one after another. The first piece was the decryption of Calorie Kun, thanks to a decrypted bootleg which was recently found. This didn't look like a particolarly interesting breakthrough at the moment: the encryption algorythm was already known, the key would have been difficult to find by hand but with the reference of the bootleg it could be derived automatically in a few minutes - just the time to write a program. This renewed my interest in the remaining Sega encrypted games that use this algorithm, in particular Gardia. David Widel revealed that he had decrypted a portion of it months ago, but got stuck and put aside the results without publishing them. Believe it or not, he decrypted most of the code by comparing it with My Hero - even if that's a completely different game, it shares a lot of almost identical code with Gardia. The data David provided was very useful to get started. Another really useful coincidence was that we have two sets of Gardia (one supposedly being a bootleg, but still encrypted). The two sets are different versions, with code shifted by a few bytes in places. This is an ideal situation when decrypting games that use simple algorithms like this one. When you have decrypted a portion of code in one set, you can use it to decrypt the same portion of code in the other set; but this way you also automatically decrypt some more code in the second set, which is still encrypted in the first set, so you can go back to the first set and decrypt even more code, and so on - you slowly build up the two keys in parallel. While I was doing this, I rapidly noticed that the key used by the second set for opcodes was identical to the one used by the first set for data. Shortly afterwards, I also noticed that the key used by the second set for data was identical to the one used by the first set for opcodes - just shifted by one byte. At that point I was on the lookout; I have to admit that I didn't notice it immediately, but eventually I discovered that the keys were actually the same as Calorie Kun, apart from the shift. When I found that, I just copied the whole Calorie Kun keys and I was almost finished - Gardia booted but had some problems. I just had to find a few more bytes at the end of the key to fix them. Space Position was the easiest of all. At that point I was almost sure it would have used the same key. I checked some bytes of the partial key I had manually derived years ago, matched them with the known key, copied over the data with the appropriate shift, launched the game, and it was already working, on the first try - apart from the emulation issues which Haze later fixed. This completes the decryption of all currently known Sega games using the "easy" Z80 encryptions. Unfortunately there are a few encrypted Z80 games left, using the suicide MC8123 CPU, which might be lost forever: all boards using the CPU seem to be dead, and the key is just about impossible to find without an hardware attack.
-  4th May       2005: David Haywood - Nicola decrypted Space Position however it doesn't work correctly in the current driver as it uses the hardware in a slightly different way to Angel Kids. I've started fixing the driver, the first fix was using different roms for the upper / lower tilemap (In Angel Kids both tilemaps have identical roms so it was impossible to tell which set was for which tilemap). With this fix the title screen looks good. The sprites may need drawing in reverse order, or a priority bit may be missing / handled incorrectly. There is currently no sound. Update: Fixed sound and hang when game starts due to main CPU requiring a response from the sound CPU. Fixed sprite drawing and added controls. Game seems to be fully playable.
- 0.96               : Cleaned up sega Z80 encryption code [Nicola Salmoria].
- 0.53               : Added machine\segacrpt.h. Added (Testdriver) Space Position (Japan). The game is encrypted, the main processor is D317-0005 (NEC Z80 Custom), see machine\segacrpt.c for details on this encryption scheme [David Haywood].
- 0.34b1             : Added machine\segacrpt.c. Moved the Sega encryption code used by Flicky, Future Spy and many others to machine\segacrpt.c [Nicola Salmoria].
- NOTES: Several Sega Z80 games have program ROMs encrypted using a common algorithm (but with a different key). The hardware used to implement this encryption is either a custom CPU, or an  epoxy block which probably contains a standard Z80 + PALs. The encryption affects D3, D5, and D7, and depends on M1, A0, A4, A8 and A12. D0, D1, D3, D4 and D6 are always unaffected. The encryption consists of a permutation of the three bits, which can also be inverted. Therefore there are 3! * 2^3 = 48 different possible encryptions.
- SOURCE: machine\segacrpt_device.cpp


P15.2   Sega encryption 2

- 0.214              : Added NEC 315-5136 decrypt device for use on clone New Lucky 8 Lines (set 10, W-4, encrypted NEC D315-5136) [Grull Osgo].
- 0.184              : Added 'Sega 315-5162', 'Sega 315-5176', 'Sega 315-5177', 'Sega 315-5178', 'Sega 315-5179', 'Sega 317-0004', 'Sega 317-0005', 'Sega 317-0006' and 'Sega 317-0007' device (machine\segacrp2_device.cpp). Renamed (z80_sega2) to (sega_315_5162).
- 0.173              : Added 'Z80 SegaCrypt2' device (machine\segacrp2_device.cpp).
- 0.173              : Changed machine\segacrp2.cpp/h to segacrp2_device.cpp/h. Sega encryption emulation (segacrp2) is now a device, kill off a whole bunch of duplicated decryption code across several drivers [David Haywood].
- 0.138u3            : Added machine\segacrp2.c/h.
- NOTES: Sega encryption 2: This encryption is an evolution of the one implemented in segacrpt.cpp. It works on more data and address bits but apart from that it's essentially the same. The encryption affects D0, D2, D4, and D6, and depends on M1, A0, A3, A6, A9, A12, and A14. The encryption consists of a permutation of the four data bits, which can also be inverted. Therefore there are 4! * 2^4 = 384 different possible encryptions. An interesting peculiarity is that four games in the list below use an almost identical key, just offset by one or more bytes. This leads to believe that keys were generated using a PRNG like in other Sega encryptions (MC8123 etc.) and the CPU part# used to skip the first N bytes.
- DRIVERS: angelkds.cpp, appoooh.cpp, calorie.cpp, goldstar.cpp, segae.cpp, segas16a.cpp and system1.cpp
- SOURCE: machine\segacrp2_device.cpp



P16.    Seibu

P16.1   COPX

- 0.266              : Fixed a class memory access warning (seibu\seibucop.cpp) [Vas Crabb].
- 0.246              : Changed sourcefile to seibu\seibucop.cpp.
- 0.221              : Moved mame\machine\seibucop\seibucop*.* to mame\machine [hap].
- 0.181              : Fixed palette dimming by respecting a fade-me-not bit (seibucop\seibucop.cpp and seibucop_dma.hxx) [AJR].
- 0.176              : Added some unused macro hookups (seibucop\seibucop_cmd.hxx) [Angelo Salese]. COP command fix for minor Heated Barrel regression and misc notes [AJR].
- 0.175              : Changed machine\raiden2cop.cpp/h to machine\seibucop\seibucop.cpp/h. Added machine\seibucop\seibucop_cmd.hxx and seibucop_dma.hxx. Cleaning up the Seibu COP (Co-Processor) device and documentation. Moved DMA and commands into own files. Prevent cop_angle to overflow byte range. Fixes III to I quadrant movements in Legionnaire and Heated Barrel. Fixes stage clear player movement in Legionnaire, level 4 boss and maybe access exceptions in Heated Barrel. Moved zsorting to DMA file, improved notes [Angelo Salese]. Added nicer sorting routine [O. Galibert].
- 0.157              : Endian safety fix (machine\raiden2cop.c) [Alex Jackson].
- 0.155              : Changed machine\seibu_cop.c/h to machine\raiden2cop.c/h. Added COP 0x6200 command to Raiden 2 driver [O. Galibert]. Reworked the Seibu Cup Soccer debug mode code so that it can be enabled for all sets rather than just the non-functional bootlegs, also documented how you get the Olympic Soccer '92 title screen and disable a debug display in the Cup Soccer Selection sets. The COP could be involved in providing a rom overlay for this area. Added palette DMA (RAM to private buffer) to all Seibu Cop games. Moved some of the Raiden 2 COP emulation to a new device (just the memory DMA stuff, including private buffer copy code) and started sharing it with legionna.c in order to avoid code duplication. We can slowly move other duplicate code over too and eventually kill the old seicop.c. De-duplicate seicop table upload code. Use common collision logic that appears to work for all games using the same commands, tested r2 etc. and 2nd boss still works (machine\raiden2cop.c) [David Haywood].
- 0.153              : Converted machine\seibu_cop.c to DEVCB2 [Osso].
- 0.147u1            : Added Seibu COP 0x1c param to 0x0205 command, fixes at least sprite positioning during intros of Raiden 2 and Zero Team (but breaks gameplay in Zero Team, needs investigation). Made Seibu COP 0x42c2 command more accurate, makes Legionnaire enemies to behave properly and match finally starts in Seibu Cup Soccer [Angelo Salese, Smitdogg]. Fixed rounding error on 0x42c2. Ported 0x42c2 to raiden2.c, helps with ship entry, respawn and power-up movements. Added command 0x6200 note. Added 0xe38e command, used by Seibu Cup Soccer to follow the ball. Quick and dirty porting of R2 opcode table into M68k based games. Added reg/off for unknown opcodes. Check-point (seibu_cop_io, seibu_cop_device). Made default base to be 0x400. DMA hooked up (machine\seibu_cop.c) [Angelo Salese]. Experimental collision detection [David Haywood].
-  1st October   2012: Angelo Salese - The COP Diary #3:
                       #15 Advanced Hit Test: With this we tried to understand better the collision detection, by repeately poll the collision ports but it didn't gave reasonable results. Amusingly, if you don't clear the unused data of the collision table it will give complete garbage.
                       #16 Purple Laser Test: a.k.a. test for 0x6200 COP macro, used by various games to calculate angle direction according to a fixed function. This is used by Raiden 2 purple laser, chopper (first enemies ) facing direction, SD Gundam homing weapon and 3rd level mid-boss direction (and probably others too). We now do know that the algo does some corrections to the result in particular circumstances, discovering what these are is the next goal.
                       #17 Ext Pin Test: In Legionnaire program code there's a weird r/w access to an I/O port in range 0x700-0x7ff while polling bit 13 of the external port (0x470), then it puts the results of this weird read to some work RAM addresses that are never readed-back by the program itself. We tried to read the contents of this while doing the exact same thing as Legionnaire, but it just returned 0xffff. So it's very likely to be a development left-over (either debugging device or a feature of the game that was discarded at some point).
                       #18 OBJ Y Test: This tested video register 0x644. The test confirmed that is a simple Y base register for sprites.
                       #19 0905/0904/0903/0902/0985/0984 Test: This checked the simplest macro (the 0x905, aka read to work RAM address X, add with RAM address Y, write the result to RAM address Z) and tried various combinations of it. 0x905 behaves normally, 0x904 (used in Zero Team and X Se Dae) definitely does a subtraction instead of an addition, 0x903/0x902 doesn't do anything and 0x985/0x984 behaves like 0x905/0x904, respectively. There's a new theory, where the COP trigger is masked with a ~0x281 value when it executes commands at 0x50x, to define what COP macro should be executed (and also explains why Seibu Cup Soccer tries to execute 0xe18e, that isn't in the uploaded table at all).
                       #20 DDE5 Test: This is used by the radar in Seibu Cup Soccer, but what we do know about it is completely wrong, so it doesn't return any result in there. It doesn't help that we still don't have a proper way to access COP registers that are above 3 (see also test #13).
                       #21 DMA 14/15 Test: This checked if the DMA is really a burst one (-> halts main CPU and takes complete control over the system). Disregard the snapshot, timings with this algo are: 0xaa1/0xaa2 for first test, 0xafb for second, 0xac6 for third and 0b1f for fourth. So the test confirmed that the DMA is really a burst one, and also that the original PCB is slighlty slower than emulation in "idle" mode (either refresh rate or waitstates). Next step is to extract the exact timings out of the DMA.
                       #22 680 Test: This test tried to check out what's the meaning of writing to port 0x680 (that is done at irq routine by all games). I've expected a full stop of the operations (so that is an irq ack) or a jumpy sprite movement (so that is a sprite buffer copy). It's neither of those, fun.
                       23 COP R/W Test/COP Read Test/Bogus R/W Test/Bogus RAM Test: This one tries to r/w the COP ports (0x100400-0x1005ff). System locks up if there's an attempt to write at 0x100430 for whatever reason. Every other register prior to that seems to be read-backable. With Bogus RAM test, it tries to check out RAM addresses 0x100000-0x1003ff. It's a normal RAM. With the Read tests instead, we tried to only do a read to these addresses, and we did two discoveries. A) default RAM pattern seems to be: if((ram_addr & 0x20) == 0x20); return 0x4141; else; return 0x0f0f. B) none of the 0x5** COP registers have default RAM values (returns either 0xffff or default state values), while all of the 0x4** all returns 0x4141 / 0x0f0f except to where I've did mods for the correct functioning of the system (so it returns back last value I've written in there).
- 18th September 2012: Angelo Salese - The COP Diary #2:
                       #5/6 Raster A/B test: This test checked if the scrolling registers applies only at DMA time or it's a post-processing effect, by changing these vregs in the middle of the frame. The oblique shape of the background indicates that it's a post-processing effect. This also proves that Godzilla has jerky scrolling due of a completely different problem (timing, perhaps?).
                       #7 Trigonometry Test: This one was a test mostly made for tuning the sine / cosine maths and the scale factor used with it. The only major difference than before is that the scale is a two bits register. It's hardly noticeable by the naked eye, but now bullet / character speeds are more accurate than before.
                       #8 Division Test: This one checked the 0x42c2 macro command functionality, but it failed miserably (returned always zero in tests). It indicates that the 0x42c2 command must be used together with the Pythagorean ones for correct functionality. It was re-tested in #12 (see below).
                       #9 Priority Test: This one checked the video priorities, via a simple "compare one layer with everything else" algorythm. I haven't yet implemented the scheme into the driver, plus it's unknown if there isn't anything nasty like a per-pen priority but we'll see.
                       #10 130e/138e test: This one checked the 0x130e/0x138e macro command (Pythagorean Theorem angle calculation). Other than some minor off by one errors (presumably due of rounding issues) and the fact that the execution of this command is mandatory for the correct functionality of 0x3b30/0x42c2 macro commands, there isn't nothing really new to talk about for this one.
                       #11 3b30/3bb0 test: This one checked Pythagorean Theorem hypotenuse length command functionality. Again, nothing really new, it's just the familiar square root(x^2+y^2) in binary format.
                       #12 42c2 test: This is where things gets a bit trickery. #8 proved that this macro command must be concatenated with 0x13*e/0x3b*0, so I was really curious to see what this one really does. Rather than being a simple division operation, it's a multiply/divider of the RAW hypotenuse length result. In medical terms, while 0x3bb0 returns a 16-bit value, this one takes the original value, shifts it to the left (via the scale register) then divides again the result via a RAM parameter. It also changes 0x1b2 register, it returns the number of the scale multiplication factor. This makes Legionnaire to have less cowardish enemies, even though some movements are still a bit off.
                       #13 Reg Mirror (Dummy): This test tried if the COP registers 4-7 are a mirror of 0-3 via a simple read-back (hence the "dummy" name). The test failed (returns garbage in those ports), I'll try again sooner or later. It's important to know this concept in order to understand an unclear fact regarding the COP machine code, i.e. what determines the usage of registers 4-7 in bit terms.
                       #14 0205 test: While doing this one I've studied the preliminary ASM code provided by OG and trap15 documented in the raiden2.c, and something catched my eye: there was a write (work RAM address +0x1c) that is definitely triggered by this, but it never gave noticeable result plus makes Zero Team to crash after some seconds of gameplay/attract mode. After the test run, it was clear that there is definitely an addition between +0x1c and +0x10 work RAMs. The discovery is that it seems to be a dword and not a word operation. This fixes: Raiden 2 intro (ship objects now scrolls down correctly), Zero Team intro (the scrolling was a bit off before during the bike / van chase) and Seibu Cup Soccer now Kick Offs (although the players then decides that is the right time to make a strike action and leave the poor GK alone). Unfortunately, this also breaks Zero Team gameplay again, but 0.147 was just released so I have some time to understand why it crashes even if the fix is definitely right.
- 0.147              : Added machine\seibu_cop.c/h. Understood how the Seibu COP collision detection really works, greatly improving Godzilla, Heated Barrel and SD Gundam RT gameplay [Angelo Salese, Smitdogg]. 0x588 is just a mirror of 0x580 apparently (machine\seicop.c). Improved the collision detection (still some rounding errors). Added Seibu COP protection device (seibu_cop.c). Small addendum and some notes [Angelo Salese].
- 13th September 2012: Angelo Salese - The COP Diary #1: For the four people that lives in Mars, the Seibu COP is one of the most evil system protections ever studied by mankind, and that's an understatement too. I'm doing some researches thru m68k coding and a working PCB kindly provided by Smitdogg. The researches involves ANYTHING unclear, and more I go ahead and more I do believe that the games doesn't even reach the 10% of the possible potential of the system. So, here's the results and my speculations of the currently done tests:
                       Test #1/2 Manual Collision Check / Automatic Collision Check: An hit-box is a well known basic concept of gaming. For people that doesn't know, every single object has an invisible shape (generally a rectangle for 2d) that defines its collision space. Some macro commands in COP basically calculates the hit-box for two given objects. My previous attempts of HLE this concept failed miserably, and needed 7 videos from Smitty and various mods to understand that what I was taking as a collision detection parameter is actually a relative address to another table, that's positioned after the old table. Implementing this gave way better collision detections to every single game of the system. It's still not 100% perfect, but my plan is to modify the manual test in order to return & modify this relative value on the fly. These tests also provided the meaning of 0x582/0x584 (respectively y and x distance between origin points, i.e. an hexadecimal subtraction) and then the correct bit assignment for 0x580 (bit 0: collides in Y space, bit 1: collides in X space, active low). Unknown meaning for 0x586 (it seems always 1?) and 0x588 (that seems a mirror of 0x580 but then it also sets up bit 2 and 3 for whatever reason).
                       Test #3 Check 63X: The 0x***62e-0x***63f range is a bit weird, is modified from time to time by Godzilla so for a moment I've thought that was a clipping effect register for the tilemaps. The test instead proves that these are just alternative scrolling registers, setted up in a way that presumably puts the tilemap origin at whatever top-left corner the CRTC sets up. Now, the question is: why having TWO scrolling registers? Is it a weird design choice or there's a definite difference between writing one or another register? The upcoming Raster A/B test should answer to this question.
                       Test #4 PDMA test: This test was specific to SD Gundam: according to a real PCB video that floats around the net, we are doing a full fade in/out when it should actually fade only some layers. The table used is a bit weird, and I've tried to upload the same thing to a different board (that is Legionnaire). The result? It does what is supposed to do even on real HW, so the prime suspect is that SD Gundam sets (either in SW or in HW) that specific area of the RAM in an encrypted fashion, also proved by the fact that it doesn't test it at POST and having Denjin Makai that basically does the same.
- 0.141u1            : Angelo Salese hooked up preliminary Seibu COP macro command 0x6200, used on SD Gundam Sangokushi Rainbow Tairiku Senki for the Homing weapon. Fixed Seibu COP command 0x7e05, used by Raiden DX fg video banking. Preliminary implementation of the Seibu COP palette brightness mode 4, used by Denjin Makai fade in/out effects. Work around for Seibu COP command 0x8100 / 0x8900, used in all games for direction of objects. Fixes many sync bugs in all legionna.c / raiden2.c games [Angelo Salese, Tomasz Slanina].
- 0.141              : Angelo Salese implemented a preliminary sort-DMA in Seibu COP routines, fixes sprite-sprite priorities in Seibu Cup Soccer. Fixed RAM fill in Seibu DMA COP command 0x116, allowing Godzilla to boot. Implemented palette DMA brightness algorythm mode 5 in Seibu COP games, used by Seibu Cup Soccer, Godzilla, SD Gundam Rainbow Tairiku Senki and Legionnaire for fading effects. Reimplemented scatter-gather Sprite DMA in Seibu COP used by SD Gundam Rainbow Tairiku Senki, also improving the functionality in it. Implemented preliminary Seibu COP macro command 0xdde5, used by Seibu Cup Soccer x/y radar positions. Implemented Seibu COP macro 0x905, used for ark movements in Legionnaire / Zero Team when a knock down occurs.
- 0.138u3            : hap added COPX romloading for sets that didn't have it, marked as BAD_DUMP until the assumption that they're the same is (un)confirmed.
- 0.124u3            : Seibu implementation cleanups [David Haywood]: Added COP/Heated Barrel ram clear stuff. Tried to make COP a bit more generic, breaks a few things for now, but better than duplicated code all over the place.
- 0.124u2            : Seibu COP cleanup, primarily sorting the code and identifying similarities in different implementations [David Haywood].
-  7th April     2008: David Haywood - I've decided to dust off the Seibu protection stuff Kale was working on and take a look at that. It's a complex beast to say the least, and quite whether I'll be able to emulate it or not I don't know. Based on what's already been documented there appear to be multiple parts to the protection. A bunch of registers, Some maths operations, DMA operations, a 'Macro' table it uploads and can trigger which can perform other sequenced, complex protection operations on a per game basis, and an external rom 'COPX-01? or 'COPX-02? which is probably used for lookups on some of the maths operations. It looks like the protection device is integrated into the system controller and can access anything on the board. This is of course all undocumented, and figuring it out from guesswork alone isn't easy. I'm currently pondering over the possibility of running some test code on the boards but the interaction with the protection devices (uploading of tables etc.) is vast, complex and very subtle in places so it's hard to know what to test, especially as it's hard to know where in ram to look for results. There is also a later revision of the MCU using external rom 'COPX-03' which is used on the V33 based "New Zero Team" and "New Raiden 2", however, this MCU seems to be a completely different beast, unrelated to the previous generation. In those cases the games upload a much larger amount of data to the MCU device, maybe the entire program, but it looks to be encrypted. I'm not making any promises that there will be any progress on any of thsee games, but rest assured, they are being looked at, they haven't been forgotten, they're just *hard*, really hard, especially the non-68k based ones which have additional banking issues to worry about.
- NOTES: The Raiden 2 hardware games use the 2nd (and 3rd) generation of Seibu's 'COP' protection, utilizing the external 'COPX_D2' and 'COPX_D3' lookup roms (probably for math operations)  These chips, marked (c)1992 RISE Corp. are not thought to be the actual MCU which is probably internal to one of the Seibu customs.
- DRIVERS: legionna.cpp and raiden2.cpp
- SOURCE: seibu\seibucop.cpp


P16.11  COPDX

- 0.198              : Changed machine\seicop.cpp/h to machine\seicopbl.cpp/h. Fixed device chip endianness (machine\seicopbl.cpp) [Angelo Salese].
- 0.155              : Ported OG's fix in M68k based games to machine\seicop.c. 'Seibu Cup Soccer' players now turns around right, at the expense of being mostly without the head (!). 'SD Gundam Sangokushi' has less erratic Homing Missiles and third mid-boss doesn't go to wonderland anymore. Updated 0205 for M68k based games. Experiment with the bootleg. Fixed radar for Seibu Cup Soccer (machine\seicop.c) [Angelo Salese].
- 0.152              : Converted mame\machine\seicop.c to a device. Eventually it should be merged with emu\machine\seibu_cop [Osso].
- 0.147              : Understood how the Seibu COP collision detection really works, greatly improving Godzilla, Heated Barrel and SD Gundam RT gameplay [Angelo Salese, Smitdogg]. 0x588 is just a mirror of 0x580 apparently (machine\seicop.c). Improved the collision detection (still some rounding errors). Small addendum and some notes [Angelo Salese].
- 0.140u3            : Angelo Salese added DMA mode 0x0e in machine\seicop.c, used by Seibu Cup Soccer, Godzilla and SD Gundam.
- DRIVERS: legionna.cpp and seicupbl.cpp
- SOURCE: machine\seicopbl.cpp


P16.12  COPX-01
- SOURCE: machine\seicop.cpp
- GAMES: Legionnaire (TAD 1992), Seibu Cup Soccer (Seibu 1992)
- PCB: COPX-D1 (cupsoc), COPX-01 (legionna)


P16.13  COPX-02
- SOURCE: mame\machine\seicop.cpp
- GAMES: Heated Barrel (Tad 1992), Denjin Makai (Seibu 1993), Zero Team (Seibu 1993)
- PCB: COPX-D2 (Rise Corp. 1992), DIP40 (denjinmk, heatbrl, zeroteam)


P16.14  COPX-03
- SOURCE: mame\machine\seicop.cpp
- PCB: COPX_D3.357 (Raiden DX Seibu 1996)



P17.    Texas Instruments

P17.1   TMS32010

- 0.263              : Fixed memory access helpers for variants with 64k-word program space (tms32010\tms32010.cpp) [cam900].
- 0.253              : Replaced sprintf with type-safe equivalents (tms32010\32010dsm.cpp) [Erik Newton].
- 0.205              : Removed MCFG [Ryan Holtz].
- 0.193              : Added cpu\tms32010\32010dsm.h.
- 0.175              : Fixed some cpus with virtual ports (TMS32010), mark them with +1 in any case [Olivier Galibert]. Made TMS32010 use DEVCB instead of memory map for bio line [Osso].
- 0.154              : Fixed usage of uninitialized members in tms32010_device [Oliver Stoeneberg].
- 0.153              : Modernized TMS32010 cpu core [Wilbert Pol].
- 0.139              : Quench correct TMS32010 cycle timing for conditional branch instructions.
- 0.138u4            : Quench added TMS32015 and TMS32016 CPU variants to the TMS32010 core. Fixed LST instruction which was sometimes adjusting internal RAM banking incorrectly.
- 0.135u1            : Lord Nightmare change to consistently use Intel notation for hex values in TMS32010 disassembler, rather than a mix of Motorola and Intel notation.
- 0.135              : Aaron Giles changed 32010 unknown opcode to output in $xxx format like all other hex values.
- 0.128u6            : Pointer-ified the TMS32010 core [Quench].
- 0.110u3            : Fixed bug in overflow handling and SUBC emulation in the TMS32010 core [Rainer Keuchel].
- 0.109u5            : Aaron Giles converted the tms32010 disassemblers to the new format and added step in/out support where it was obvious.
- 0.80u2             : Quench fixed some problems with the 32010 update. Cycle counts for invalid opcodes 7F1E and 7F1F are now 0.
- 0.80               : Quench added internal data memory map to the TMS32010 CPU core and fixed overflow in the ADDH instruction. Adjustments for TMS32010 internal data map in Twin Cobra / Wardner, Toaplan1 and Hard Drivin'.
- 0.78u4             : CPUs with an implicit address shift (e.g., the TMS34010 shifts addresses right 3 bits; the TMS32031 shifts addresses left 2 bits) now automatically get that shift applied to addresses in their memory maps and in calls to install_memory_read/write_handler(). This eliminates many ugly macros in the memory maps. Affected CPU cores are the ADSP210x, CCPU, PIC16C5x, TMS3201x, TMS3202x, TMS32031, and TMS340x0. Note that the CPU cores themselves still need to pass shifted values to the core read/write routines. All drivers using these cores have had their icky macros and bitshifts removed. * Harvard architecture CPUs now have data memory fully implemented now. Affected CPUs are the ADSP210x, TMS3201x, TMS3202x, PIC16C5x, and CCPU. All cores have been modified to fully split program and data memory. All drivers using these cores now specify explicit program and data memory maps. This also gets rid of a ton of ugly macros used in memory maps [Aaron Giles].
- 0.69a              : Aaron Giles fixed the BIO pin handling in the TMS32010 CPU core.
- 0.62               : Changed description to 'TMS32010'.
- 0.37b9             : The TMS320C10 core is now a full 16-bit core. Appropriate changes to the drivers that use them have already been made. This fixes gameplay in several Toaplan games [Aaron Giles].
- 0.35b10            : Changed description to '320C10'.
- 0.35b8             : Changed description to 'TMS320C10'.
- 0.35b3             : Added cpu\tms32010\tms32010.c/h, 32010dsm.c and dis32010.c. TMS32010 emulator [Quench]. This is used by Twin Cobra. Quench emulated the protection (TMS32010) in Twin Cobra, which is now fully playable.
- SOURCE: cpu\tms32010\tms32010.c - TMS32010 DSP code by Tony La Porta
- GAMES: Toaplan - Twin Cobra (1987), Flying Shark (1987), Wardner (1987), Demon's World (1989)
- PCB: TMS320C10NL-14 microcontroller (Twincobr), D70012U GXC-02 MCU 71400 (SkyShark), D70012U GXC-02 MCU (Delta) 71900 (Wardner), D70016U GXC-04 MCU (delta) 74000 (TwinCobra)



P17.2   TMS32015

- 0.138u4            : Quench added TMS32015 and TMS32016 CPU variants to the TMS32010 core. Fixed LST instruction which was sometimes adjusting internal RAM banking incorrectly.
- 0.114u4            : Hooked up actual TMS32015 on Road Riot 4WD and Steel Talons [Aaron Giles].
- NOTES: The TMS32015 controlls palette, sounds and inputs and has a built-in ROM.
- PCB: TMS320E15 (AmeriDarts), TMS320P15FNL (Hdrivair), TMS320C15 DIP40 (with mask ROM)



P17.3   TMS32016
- 0.138u4: Quench added TMS32015 and TMS32016 CPU variants to the TMS32010 core. Fixed LST instruction which was sometimes adjusting internal RAM banking incorrectly.


P17.4   TMS32020
- 0.78u4             : CPUs with an implicit address shift (e.g., the TMS34010 shifts addresses right 3 bits; the TMS32031 shifts addresses left 2 bits) now automatically get that shift applied to addresses in their memory maps and in calls to install_memory_read/write_handler(). This eliminates many ugly macros in the memory maps. Affected CPU cores are the ADSP210x, CCPU, PIC16C5x, TMS3201x, TMS3202x, TMS32031, and TMS340x0. Note that the CPU cores themselves still need to pass shifted values to the core read/write routines. All drivers using these cores have had their icky macros and bitshifts removed. * Harvard architecture CPUs now have data memory fully implemented now. Affected CPUs are the ADSP210x, TMS3201x, TMS3202x, PIC16C5x, and CCPU. All cores have been modified to fully split program and data memory. All drivers using these cores now specify explicit program and data memory maps. This also gets rid of a ton of ugly macros used in memory maps [Aaron Giles].
- SOURCE: namcos21.cpp





P19.    Other

P19.1   Program Protection

        1943.c, blktiger.c : The game crashes (thru a jump to 0x8000), if a read from this address doesn't return the value it expects.
        aeroboto.c : Protection read at 0x2973, 0x3004 and writes at 0x01a2
        afega.c    : Unknown write to 0x080012/13. This fixes the text in Service Mode.
        airbustr.c : Reading $efe0 ram probably resets a watchdog mechanism that would reset the main cpu.
        clshroad.c : Protection at 0x05C6 - The death sequence in Fire Battle never ends so the game is unplayable after you die once.
        kopunch.c  : It looks like there is a security chip, that changes instruction of the form: ld a,$0C + jr nc,$0333  into something else (maybe just a nop) with the effect of resuming execution from the operand of the JR  NC instruction.
        mpatrol.c, mrdo.c : Moon Patrol do strange things if a read from address 0x8800 doesn't return the value it expects. Mr. Do! doesn't clear the screen if a read from address 0x9803 doesn't return the value it expects.
        naughtyb.c : 1st protection in Pop Flamer relies on reading values from a device at $9000 and writing to 400A-400D (See $26A9). Then value stored in 400C must be xxxx1001 (rrca x 3) or else reset. 2nd protection relies on the values stored in 400A-400D matching $2690+($400E) (Starts at $460). If the values all match then it will jump to 0x0011 instead of 0x0009 (refresh instead of reset).
        offtwallc  : In several places of 'Off the Wall', the value 1 is stored to the byte at $3fdf1e. A fairly complex subroutine is called, and then $3fdf1e is checked to see if it was set to zero. If it was, "HARDWARE ERROR" is displayed.


P19.2   Random Number Generator
- 0.70u5             : Barry Rodewald changed drivers to use mame_rand for random numbers.
- 27th June      2003: Barry Rodewald changed all drivers needing random numbers to use MAME's own random number generation.
- 26th January   2003: Bernd Wiebelt added a generic random number generator to the core.
- NOTES: In 99% of arcade games, a software based pseudo-random number generator is used. It's code no different from that driving the gameplay, so it's 100% accurate. The random number simulation that was added to the MAME Namco System1 driver is a hack. They read values from a special chip. It's deterministic, sometimes used for protection, and other times for pseudo-random values. The code that was added isn't based objectively on the behavior of the real cuskey, which has yet to be reverse-engineered.
- GAMES: Splatter House (Namco 1988), Sega System 32 games (have a true hardware random-number generator), NeoGeo Games (SMA chip ?)


P19.3   Opcode encryption
- 0.35b1: Nicola Salmoria added a horrible dirty hack to allow opcode encryption on CPUs other than the main one. It's really ugly and needs a rewrite, but it's enough to get sound in Pocket Gal and The Real Ghostbusters.

P19.4   DL57S22
- NOTES: In Survival (Rock-ola 1982) there is a 14 pin part connected to the 8910 Port B D0 labeled DL57S22. There is a loop at $2002 that reads the player controls -- the game sits in this loop as long as Port B changes. Also, Port B seems to invert the input bits, and the game checks for this at $2f32. The game also uses the RIM instruction a lot, that's purpose is unclear, as the result doesn't seem to be used (even when it's stored, the result is never read again). I would think that this advances the protection chip somehow, but isn't RIM a read only operation?
- SOURCE: drivers\phoenix.cpp


P19.5   Toshiba T5324
- 12nd September 2003: Guru - Finally completed the adapter to read the nasty Toshiba embedded ROM on US Championship V'Ball. Still some work to do though, it's not quite giving us the correct read yet... it's taken Jarek and I many hours over several months to get to this point, we're not far off now.
- PCB: Toshiba 0615 T5324 TRJ-101 (Vball)


P19.6   ASIC
- SOURCE: machine\pgmprot.cpp
         ASIC3         Oriental Legend (1997 IGS)
         ASIC022       Dragon World 3 (1998 IGS)
         ASIC025       Dragon World 3 (1998 IGS)
         ASIC28        Knights of Valour (1999 IGS)



P19.7   CAT702

- 0.265              : Added CAT702 variant with different interface logic for PIU10 (machine\cat702.cpp) [Windy Fairy].
- 0.243              : Init 2 more variables [hap].
- 0.172              : CAT702 transform table must be specified in MCFG. This eliminates two instances of driver_start, including one performing a game-name lookup [AJR].
- 0.156              : Changed machine\znsec.c/h to machine\cat702.c/h. Added 'CAT702' device.
- 0.147u3            : Turned ZN security into a device [smf].
-  9th March     2004: Guru - Now that many of the ZN security chips are dumped, we're beginning to see some action on screen, but only in Gallop Racer so far. The majority of the remaining ZN1 games have further protection that prevents them from working right now. But the ones that run on the Capcom ZN1 hardware will work now. Unfortunately we only have the protection chip for Gallop Racer, so only this one can work at the moment. We really need the remaining ZN security chips to get further with the emulation of the other games.
- 0.79u3             : Added machine\znsec.c/h.
- NOTES: The CAT702 is a ZN security/protection chip/MCU (DIP20). The chip has a sticker of the form XXnn, where XX is the company and nn a number: AC = Acclaim, AT = Atlus, CP = Capcom, ET = Raizing, KN = Konami, MG = Tecmo, TT = Taito and TW = Atari
- PCB: CAT702 103090-ET02 = Raizing (Beastrzr), CAT702 103090-MG03 (Cbaj), CAT702 CP06 = Capcom (Rvschool), TT10 or TT16 (Taito GENT-System)
- DRIVERS: taitogn.cpp and zn.cpp
- SOURCE: machine\cat702.cpp


P19.8   Address lines scrambling
- SOURCE: drivers\afega.cpp


P19.9   Dongle

- 0.148              : Refactor the type1 dongle code a bit, to make any future additions easier (decocass.c) [David Haywood].
-  7th July      2012: Charles MacDonald - Quite a lot of progress has been made with the Data East cassette system dumping efforts. Many different dongle types have been examined and supported, and currently all known dongle types can be dumped. Software has been developed to extract the PROM data out of dongle dumps and to perform detailed analysis of the decryption features of various dongles, and to determine internal jumper settings to see how a dongle is configured without even opening it up. A few games have been added to MAME recently and it's likely there will be more additions in the future, as we keep finding tapes and dongles to dump from generous donors.
-  5th February  2012: Charles MacDonald - The Data East cassette system uses a security dongle that is unique to each game. This prevents operators from duplicating a game simply by copying the audio data from a game cassette to a blank tape. There are several types of basic dongle designs, and each one has data that is specific to a particular game. A 6502 CPU runs the BIOS and software loaded off the tape. It can exchange command and data bytes from a 8041 MCU that controls the tape drive over a serial interface. The dongle sits between the 6502 and 8041 and can modify, replace, or pass data through unaltered during communication. A loaded program can also interrogate the dongle for additional data unrelated to the 8041 or tape contents. I've made a circuit that mimics both the 6502 and 8041 interface so all aspects of the dongle can be observed. Because some dongles also have a reset generator inside them that intializes the internal state, the dongle reader has a software-controlled power supply to force a reset condition as needed. It has been tested successfully with a so-called Type 3 dongle. This dongle has a normal operating mode and a "PROM mode" where a 4Kx8 PROM can be read out sequentially. After a reset, values written to the data and command registers and data read from the command register are not modified. Values read from the data register have bits 6 and 7 exchanged, and bit 0 is the latched value from the previous byte that was read. The 8041 normally uses commands in the 00-7F range and ignores higher values. This allows 80-FF to be used to send commands to the dongle that will not trigger any action on the tape drive. For the Type 3 dongle, writing Cx (where bits 3-0 don't matter) enables PROM mode. Now, writing any value to the command register loads bits 12-8 of a 12-bit counter and bits 3-0 are reset to zero. Reading the command register returns a byte from the PROM at the current address, then the counter is incremented by one. The counters wrap from offset FFF to zero. In this way the loaded program can read out the entire PROM content. Oddly enough the 8041 interface seems to be disabled in this mode. Writing to the data register or command register will tristate the data bus, causing the 8041 to latch an open-bus value. Likewise, reading the data register returns an open-bus value as well. There are no resistors on the BIO-8 board or in the Type 3 dongle to pull the data lines into a known state, so the actual value that is present will fluctuate. Perhaps after receiving the Cx command the 8041 knows to ignore all future communciation with the 6502. Once the power has been cycled the system and dongle will reset and normal operation resumes, with the tape drive being accessible again. Once I get some other types of dongles to experiment with I'll post an update about how they work.
- 30th January   2012: Smitdogg - Charles MacDonald just got his custom Deco Cassette dongle dumper working on one of the dongle types. There are a few different types so still a ways to go but it's working correctly on the first type added. Expect progress / new dumps over the next couple of months.
- 0.106u5            : Juergen Buchmueller added new dongle data (cexplore.pro 32 byte) to Explorer (Cassette). The dongle data is reverse engineered by table analysis.
- 0.106u3            : David Widel and Juergen Buchmueller added dongle data (TYPE1 DONGLE (DE-0061) with alternate PROM) to Highway Chase. The dongle data is reverse engineered from manual decryption - Game now playable.
- 27th May       2006: Dave Widel - I've been working on the decryption for chwy, so I haven't had any sleep for two days. I can't stop once I start working on something like this. I have ~233 out of the 256 decrypted. Usually they get easier by this point but this one seems to get harder as I near the end. UPDATE: Looks like the data in my table repeats. Juergen spotted it imediately. I have enough data already for him to solve it, looks like chwy is decrypted.
- 18th March     2006: Guru - A 984A02 dongle and a Magic Gate security dongle (Capcom/Banpresto 2003 - Namco System 256 hardware) arrived late yesterday from Japan.
- 0.99u2             : Juergen Buchmueller improved some DECO cassette games. Found bitswap for Zeroize type #3 dongle; found hack to get it running w/o the dongle ROM by debugging the game code; changed year to 1983; removed NOT_WORKING flag. Changed visible area to 240x248.
- 0.89u5             : Juergen Buchmueller added a NOP dongle (returning the data read from cassette as is) to Flying Ball - Game now playable.
- SOURCE: machines\decocass.cpp


P19.A   Custom security

P19.A1  Epoxy block
-  8th October   2011: Charles MacDonald - I've been running a lot of tests on Free Kick to understand how various functions of the NS6201 security module work. Here's a complete description of it: http://cgfm2.emuviews.com/txt/freekick.txt.
- PCB: Check the lizwiz.txt for: How to reading the data of 2x 2732 EPROMs in a epoxy block.
- PCB: Springer - The security CPU module is in a tin shell about 3x4 inches which is filled with epoxy, removing the epoxy exposes a Nicad, a Z80, a 6116LP RAM, a 74LS32, a 74LS05 and a 4069 plus a few diodes & resistors. The first ROM has a blank space and I assume that the RAM has program code stored in it to act as unaccessable ROM code.
- PCB: S562008 - Custom security block (battery backed) (Hardhead, SuperRanger), SUNA T568009 (HardHead2, Sparkman)


P19.A2  BBX
- NOTES: The BBX coprocessor in Shanghai Kid (Taiyo 1985) is burried in an epoxy block (1.5" by 2" by 4") and it is connected to the PCB by a 40 pin DIP socket labeled IC30. It contains a surface-mounted Z80 (TMPZ84C00P), LS245 logic IC and Fujitsu MB8464 ram (8k x 8 SRAM, external battery backed). The BBX coprocessor receives graphics and sound-related commands from the main CPU via shared RAM. It directly manages an AY8910, is responsible for populating spriteram, and forwards appropriate sound commands to the sample-playing CPU.
- SOURCE: drivers\shangkid.cpp


P19.B   ATMEL AT90S2313
- 10th May 2009: Smitdogg - The remaining AT90S2313 chips have also been processed from Golden Tee Fore (#179, 181, 182, 183 and 184).
- NOTES: The AT90S2313 is a low-power CMOS 8-bit microcontroller based on the AVR RISC with 2 KBytes of In-System Programmable Flash, 128 bytes EEPROM and 128 bytes SRAM.


P19.C   NEC uPD78081
- NOTES: EC uPD78081, 8-bit 78K0-family microcontroller with on-chip 8k ROM, 256 bytes RAM, 33 I/O ports, 8-bit resolution 8-channel A/D converter, 3-channel timer, 1-channel 3-wire serial interface interrupt control (USART) and other peripheral hardware)
- PCB: NEC_78081G503 (ZN games)


P19.D   Signetics 8X300

- 0.243              : 8x300 subcycle improvements [Luigi Thirty].
- 0.208              : Added registers "R12", "R13", "R14", "R15", "R16" and "IVR" (cpu\8x300\8x300dasm.cpp) [AJR].
- 0.206              : Cleanup 8x300 and expansion. Latch at most one IV input per instruction. Fixed output behavior of some opcodes that selected the wrong IV bank or wrong value to write. Added 8X305 type. Emulated additional 8X305 registers. Added address latching callback. Fixed IV destination masking [AJR].
- 0.193              : Added cpu\8x300\8x300dasm.h.
- 0.184              : Correct JMP target address (8x300dasm.cpp) [Barry Rodewald].
- 0.180              : Changed the 8x300 disassembler to use 'std::ostream &' internally [Nathan Woods].
- 0.179              : Removed unused state_string_export(). Sync pc/ar/curpc [smf].
- 0.154              : Fixed usage of uninitialized members in n8x300_cpu_device [Oliver Stoeneberg].
- 0.153              : Added 8x300 to UNIDASM [Wilbert Pol].
- 0.152              : Added cpu\8x300\8x300.c/h and 8x300dasm.c. Added Signetics 8X300 microcontroller core, updated (MESS) Wicat System driver to use it [Barry Rodewald].
- DRIVERS: (MESS) wicat.cpp
- SOURCE: cpu\8x300\8x300.cpp




P20.    PLD (Programmable Logic Device)

- 0.253              : Fixed a bug when logging parsed fuse values and added more useful error log messages (util\jedparse.cpp) [Vas Crabb].
- 0.248              : Removed not strictly needed use of strrchr (util\plaparse.cpp) [hap].
- 0.241              : Added regtests\jedutil\baseline\gal16v8\gal16v8_simple_mode_2.txt, eqns\WinCUPL\gal16v8\gal16v8_simple_mode_2.pld and jeds\gal16v8\gal16v8_simple_mode_2.jed. Fixed the viewing of a GAL16V8 device when in simple mode and pins 15 or 16 have no product terms (tools\jedutil.cpp) [Kevin Eshbach].
- 0.236              : Convert JED, PLA and JEDBIN parsers to (mostly) use ioprocs instead of raw memory interfaces [AJR].
- 0.222              : Added regtests\jedutil\baseline\atf22v10\atf22v10_power_down_mode.txt, gal16v8\gal16v8_complex_mode.txt, gal16v8_registered_mode.txt, gal16v8_simple_mode.txt, gal22v10\gal22v10_combinatorial_mode.txt, gal22v10_registered_mode.txt, pal22v10-combinatorial-to-gal22v10.txt, pal22v10-registered-to-gal22v10.txt, eqns\WinCUPL\atf22v10\atf22v10_power_down_mode.pld, gal16v8\gal16v8_complex_mode.pld, gal16v8_registered_mode.pld, gal16v8_simple_mode.pld, gal22v10\gal22v10_combinatorial_mode.pld, gal22v10_registered_mode.pld, atf22v10\atf22v10_power_down_mode.jed, gal16v8\gal16v8_complex_mode.jed, gal16v8_registered_mode.jed, gal16v8_simple_mode.jed, gal22v10\gal22v10_combinatorial_mode.jed, gal22v10_registered_mode.jed, pal22v10-combinatorial-to-gal22v10.jed, pal22v10-registered-to-gal22v10.jed, gal20v8\gal20v8_complex_mode.txt, gal20v8_registered_mode.txt,gal20v8_simple_mode.txt, pal14h8-to-gal20v8.txt, pal14l8-to-gal20v8.txt, pal16h6-to-gal20v8.txt, pal16l6-to-gal20v8.txt, pal18l4-to-gal20v8.txt, pal20l2-to-gal20v8.txt, pal20l8-to-gal20v8.txt, pal20r4-to-gal20v8.txt, pal20r6-to-gal20v8.txt, pal20r8-to-gal20v8.txt, regtests\jedutil\eqns\WinCUPL\gal20v8\gal20v8_complex_mode.pld, gal20v8\gal20v8_registered_mode.pld, gal20v8\gal20v8_simple_mode.pld, readme.txt, regtests\jedutil\jeds\gal20v8\gal20v8_complex_mode.jed, gal20v8_registered_mode.jed, gal20v8_simple_mode.jed, pal14h8-to-gal20v8.jed, pal14l8-to-gal20v8.jed, pal16h6-to-gal20v8.jed, pal16l6-to-gal20v8.jed, pal18l4-to-gal20v8.jed, pal20l2-to-gal20v8.jed, pal20l8-to-gal20v8.jed, pal20r4-to-gal20v8.jed, pal20r6-to-gal20v8.jed, pal20r8-to-gal20v8.jed. Added GAL20V8 support to the jedutil tool. jedutil updates: Initial support for viewing the logic equations of the PLS100, 82S100, PLS101 and 82S101. Added support to view the logic equations of the PALCE22V10 device. Improved the documentation on the Magix game and the undumped PAL's (security fuses blown). Added PAL22V10 as another device that is equivalent to ythe PALCE22V10 device. Added initial registration test for the PALCE22V10/PAL22V10 devices. Adding PAL22V10 combinatorial regression test data. Updated jedutil with a new command that will take a jed file and list the devices that the jed file could represent. Initial work on supporting the GAL20V8 device. Adding an initial regression test for the GAL20V8. Tweaked the function to print text to handle the end of line character. Fixed some mis-configurations of the GAL20V8 device. Added regression tests for the GAL20V8 device. Fixed the output of the GAL20V8 when viewing a jed in simple mode to properly display outputs as also being inputs for certain pins. Fixed the output of a GAL16V8 device in Simple Mode to mark relevant output pins as providing feedback as documented in the datasheet. Correct the output feedback state when in simple mode for the GAL16V8 and GAL20V8 devices [Kevin Eshbach].
- 0.221              : Added regtests\jedutil\baseline\pal22v10\pal22v10-combinatorial.txt, pal22v10-registered.txt, eqns\PALASM\pal22v10\pal22v10-combinatorial.pds, eqns\PALASM\pal22v10\pal22v10-registered.pds, jeds\pal22v10\pal22v10-combinatorial.jed and pal22v10-registered.jed. New device for jedutil and rom name changes: Initial support for viewing the logic equations of the PLS100, 82S100, PLS101 and 82S101. Added support to view the logic equations of the PALCE22V10 device. Improved the documentation on the Magix game and the undumped PAL's (security fuses blown). Added PAL22V10 as another device that is equivalent to the PALCE22V10 device. Added initial registration test for the PALCE22V10\PAL22V10 devices. Adding PAL22V10 combinatorial regression test data. Updated jedutil with a new command that will take a JED file and list the devices that the JED file could represent [Kevin Eshbach].
- 0.190              : Added regtests\jedutil\baseline\pls100\pls100.txt, jedutil\eqns\AMAZE\pls100\AMAZE.DEF, eqns\AMAZE\pls100\PLS100.BEE, eqns\AMAZE\pls100\PLS100.PAL, jedutil\eqns\AMAZE\pls100\PLS100.STD, eqns\AMAZE\readme.txt and jedutil\jeds\pls100\pls100.jed. Initial support for viewing the logic equations of the PLS100, 82S100, PLS101 and 82S101 (tools\jedutil.cpp) [Kevin Eshbach].
- 0.171              : Added regtests\jedutil\baseline\ampal18p8\pal10h8->pal16l8-as-ampal18p8.txt, eqns\PALASM\ampal18p8\pal10h8->pal16l8-as-ampal18p8.pds and jeds\ampal18p8\pal10h8->al16l8-as-ampal18p8.jed. Added support for the AMPAL18P8 (tools\jedutil.cpp). Adding regression tests for the AMPAL18P8 [Kevin Eshbach].
- 0.160              : Make jedtest.py Python 3 compatible [Mike Naberezny].
- 0.153              : Added jedutil\baseline\pal20c1\pal20c1.txt, eqns\Opal_Jr\pal16p2\pal16p2.eqn, jeds\pal16p2\pal16p2.jed and jeds\pal16rp8\pal16rp8.jed. Fixes to correct some of the regression test data used by the jedutil test [Kevin Eshbach].
- 0.152              : Added jedutil\baseline\pal10p8\pal10p8.txt, pal12h10\pal12h10.txt, pal12l10\pal12l10.txt, pal12p6\pal12p6.txt, pal14h8\pal14h8.txt, pal14l8\pal14l8.txt, pal14p4\pal14p4.txt, pal16h6\pal16h6.txt, pal16l6\pal16l6.txt, pal16p2\pal16p2.txt, pal16p8\pal16p8.txt, pal16rp4\pal16rp4.txt, pal16rp6\pal16rp6.txt, pal16rp8\pal16rp8.txt, pal18h4\pal18h4.txt, pal18l4\pal18l4.txt, pal20l2\pal20l2.txt, pal6l16\pal6l16.txt, pal8l14\pal8l14.txt, palce16v8\pal10h8-as-palce16v8.txt, palce16v8\pal12h6-as-palce16v8.txt, palce16v8\pal14h4-as-palce16v8.txt, palce16v8\pal16r4-as-palce16v8.txt, eqns\Opal_Jr\pal10p8\pal10p8.eqn, Opal_Jr\pal12h10\pal12h10.eqn, Opal_Jr\pal12l10\pal12l10.eqn, Opal_Jr\pal12p6\pal12p6.eqn, Opal_Jr\pal14h8\pal14h8.eqn, Opal_Jr\pal14p4\pal14p4.eqn, Opal_Jr\pal16h6\pal16h6.eqn, Opal_Jr\pal16l6\pal16l6.eqn, Opal_Jr\pal16p8\pal16p8.eqn, Opal_Jr\pal16rp4\pal16rp4.eqn, Opal_Jr\pal16rp6\pal16rp6.eqn, Opal_Jr\pal16rp8\pal16rp8.eqn, Opal_Jr\pal18h4\pal18h4.eqn, Opal_Jr\pal18l4\pal18l4.eqn, Opal_Jr\pal20c1\pal20c1.eqn, Opal_Jr\pal20l2\pal20l2.eqn, PALASM\pal6l16\pal6l16.pds, PALASM\pal8l14\pal8l14.pds, jeds\pal10p8\pal10p8.jed, pal12h10\pal12h10.jed, pal12l10\pal12l10.jed, pal12p6\pal12p6.jed, pal14h8\pal14h8.jed, pal14l8\pal14l8.jed, pal14p4\pal14p4.jed, pal16h6\pal16h6.jed, pal16l6\pal16l6.jed, pal16p8\pal16p8.jed, pal16rp4\pal16rp4.jed, pal16rp6\pal16rp6.jed, pal18h4\pal18h4.jed, pal18l4\pal18l4.jed, pal20c1\pal20c1.jed, pal20l2\pal20l2.jed, pal6l16\pal6l16.jed, pal8l14\pal8l14.jed, palce16v8\pal10l8-as-palce16v8.jed and palce16v8\pal16r6-as-palce16v8.jed. Jedutil update [Kevin Eshbach]: Correct the output of the PAL20X4, PAL20X8, PAL20X10 to show the XOR on the relevant sum of products. When viewing a device the size of the JED file is verified to match the size of the device. Replaced hard-coded symbol strings with constants. Started experimental work for supporting RICOH PAL's (currently ifdef'ed out). Added support for viewing the following devices and the corresponding regression test data: PALCE16V8, PAL10P8, PAL12P6, PAL14P4, PAL16P2, PAL16P8, PAL16RP4, PAL16RP6, PAL16RP8, PAL6L16, PAL8L14, PAL12H10, PAL12L10, PAL14H8, PAL14L8, PAL16H6, PAL16L6, PAL18H4, PAL18L4, PAL20C1 and PAL20L2.
- 0.151              : Added regtests\jedutil\baseline\palce16v8\pal10l8-as-palce16v8.txt, pal12l6-as-palce16v8.txt, pal14l4-as-palce16v8.txt, pal16h2-as-palce16v8.txt, pal16l2-as-palce16v8.txt, pal16l8-as-palce16v8.txt, pal16r6-as-palce16v8.txt, pal16r8-as-palce16v8.txt, regtests\jedutil\eqns\PALASM\palce16v8\pal10h8-as-palce16v8.pds, pal10l8-as-palce16v8.pds, pal12h6-as-palce16v8.pds, pal12l6-as-palce16v8.pds, pal14h4-as-palce16v8.pds, pal14l4-as-palce16v8.pds, pal16h2-as-palce16v8.pds, pal16l2-as-palce16v8.pds, pal16l8-as-palce16v8.pds, pal16r4-as-palce16v8.pds, pal16r6-as-palce16v8.pds, pal16r8-as-palce16v8.pds, regtests\jedutil\eqns\PALASM\readme.txt, regtests\jedutil\jeds\palce16v8\pal10h8-as-palce16v8.jed, pal12h6-as-palce16v8.jed, pal12l6-as-palce16v8.jed, pal14h4-as-palce16v8.jed, pal14l4-as-palce16v8.jed, pal16h2-as-palce16v8.jed, pal16l2-as-palce16v8.jed, pal16l8-as-palce16v8.jed, pal16r4-as-palce16v8.jed and pal16r8-as-palce16v8.jed. Added the ability to view PALCE16V8 JED files along with some regression test data for the PALCE16V8. The PAL dumps for Twin Cobra 2 in the Taito F3 driver are now labeled as bad dumps because when viewed with jedutil the data is bad [Kevin Eshbach].
- 0.150              : Added regtests\jedutil\baseline\pal20x10\pal20x10.txt, pal20x4\pal20x4.txt, pal20x8\pal20x8.txt, eqns\Opal_Jr\pal20x10\pal20x10.eqn, pal20x4\pal20x4.eqn, pal20x8\pal20x8.eqn, jeds\pal20x10\pal20x10.jed, pal20x4\pal20x4.jed and pal20x8\pal20x8.jed. Added support to jedutil to view the PAL20X10, PAL20X8 and PAL20X4. Added some preliminary work on figuring out what the undocumented fuses for the PALCE16V8 are. The data sheet does not document what all of the fuses are [Kevin Eschbach].
- 0.149u1            : Output the actual JED test error message (jedutil\jedtest.py) [Oliver Stoeneberg]. Switch JED files to binary as the checksum includes line endings [smf].
- 0.149              : Removed jedutil\eqns\pal10h8\pal10h8.eqn and jedutil\jedtest.wsf. Added support to jedutil for decoding 82S153, PLS153 and CK2605 [Kevin Eshbach, Charles MacDonald]. Added jedutil\baseline\18cv8\18cv8_bi-directional_io.txt, baseline\ck2605\ck2605-test1.txt, baseline\ck2605\ck2605-test2.txt, baseline\gal18v10\gal18v10-test1.txt, baseline\gal18v10\pal10h8-to-gal18v10.txt, baseline\gal18v10\pal10l8-to-gal18v10.txt, baseline\gal18v10\pal12h6-to-gal18v10.txt, baseline\gal18v10\pal12l6-to-gal18v10.txt, baseline\gal18v10\pal14h4-to-gal18v10.txt, baseline\gal18v10\pal14l4-to-gal18v10.txt, baseline\gal18v10\pal16h2-to-gal18v10.txt, baseline\gal18v10\pal16l2-to-gal18v10.txt, baseline\gal18v10\pal16l8-to-gal18v10.txt, baseline\gal18v10\pal16r4-to-gal18v10.txt, baseline\gal18v10\pal16r6-to-gal18v10.txt, baseline\gal18v10\pal16r8-to-gal18v10.txt, baseline\pls153\pls153.txt, eqns\ispLEVER_Classic\gal18v10\test1\gal18v10-test1.abl, eqns\ispLEVER_Classic\gal18v10\test1\gal18v10-test1.syn, eqns\ispLEVER_Classic\readme.txt, eqns\Opal_Jr\pal10h8\pal10h8.eqn, eqns\Opal_Jr\pal10l8\pal10l8.eqn, eqns\Opal_Jr\pal12h6\pal12h6.eqn, eqns\Opal_Jr\pal12l6\pal12l6.eqn, eqns\Opal_Jr\pal14h4\pal14h4.eqn, eqns\Opal_Jr\pal14l4\pal14l4.eqn, eqns\Opal_Jr\pal16c1\pal16c1.eqn, eqns\Opal_Jr\pal16h2\pal16h2.eqn, eqns\Opal_Jr\pal16l2\pal16l2.eqn, eqns\Opal_Jr\pal16l8\pal16l8.eqn, eqns\Opal_Jr\pal16r4\pal16r4.eqn, eqns\Opal_Jr\pal16r6\pal16r6.eqn, eqns\Opal_Jr\pal16r8\pal16r8.eqn, eqns\Opal_Jr\pal20l10\pal20l10.eqn, eqns\Opal_Jr\pal20l8\pal20l8.eqn, eqns\Opal_Jr\pal20r4\pal20r4.eqn, eqns\Opal_Jr\pal20r6\pal20r6.eqn, eqns\Opal_Jr\pal20r8\pal20r8.eqn, jeds\18cv8\18cv8_bi-directional_io.jed, jeds\18cv8\pal10l8-to-peel18cv8.jed, jeds\18cv8\pal16l8-to-peel18cv8.jed, jeds\ck2605\ck2605-test1.jed, jeds\ck2605\ck2605-test2.jed, jeds\gal18v10\gal18v10-test1.jed, jeds\gal18v10\pal10h8-to-gal18v10.jed, jeds\gal18v10\pal10l8-to-gal18v10.jed, jeds\gal18v10\pal12h6-to-gal18v10.jed, jeds\gal18v10\pal12l6-to-gal18v10.jed, jeds\gal18v10\pal14h4-to-gal18v10.jed, jeds\gal18v10\pal14l4-to-gal18v10.jed, jeds\gal18v10\pal16h2-to-gal18v10.jed, jeds\gal18v10\pal16l2-to-gal18v10.jed, jeds\gal18v10\pal16l8-to-gal18v10.jed, jeds\gal18v10\pal16r4-to-gal18v10.jed, jeds\gal18v10\pal16r6-to-gal18v10.jed, jeds\gal18v10\pal16r8-to-gal18v10.jed, jeds\pls153\pls153.jed and regtests.mak.
- 0.148u1            : Oliver Stoeneberg fixed memory leak in jedutil.
- 0.148              : Added jedtest output folder to ignore list. Added a "tests" target to the makefile (jedtest.py) [Oliver Stoeneberg].
- 0.147u4            : Added jedutil\baseline\18cv8\18cv8_combinatorial_feedback.txt, 18cv8_register_feedback.txt, pal10h8-to-peel18cv8.txt, pal10l8-to-peel18cv8.txt, pal12h6-to-peel18cv8.txt, pal12l6-to-peel18cv8.txt, pal14h4-to-peel18cv8.txt, pal14l4-to-peel18cv8.txt, pal16h2-to-peel18cv8.txt, pal16l2-to-peel18cv8.txt, pal16l8-to-peel18cv8.txt, pal16r4-to-peel18cv8.txt, pal16r6-to-peel18cv8.txt and pal16r8-to-peel18cv8.txt. Added jedutil\eqns\ICT_Place\PEEL18CV8\18cv8_bi-directional_io.psf, ICT_Place\PEEL18CV8\18cv8_combinatorial_feedback.psf, ICT_Place\PEEL18CV8\18cv8_register_feedback.psf, ICT_Place\readme.txt and Opal_Jr\readme.txt. Added jedutil\jeds\18cv8\18cv8_combinatorial_feedback.jed. Added jedutil\jeds\18cv8\18cv8_register_feedback.jed, pal10h8-to-peel18cv8.jed, pal12h6-to-peel18cv8.jed, pal12l6-to-peel18cv8.jed, pal14h4-to-peel18cv8.jed, pal14l4-to-peel18cv8.jed, pal16h2-to-peel18cv8.jed, pal16l2-to-peel18cv8.jed, pal16r4-to-peel18cv8.jed, pal16r6-to-peel18cv8.jed and pal16r8-to-peel18cv8.jed. Added the ability to view peel18cv8 jed files to the jedutil [Kevin Eshbach].
- 0.147u3            : Added src\regtests\jedutil\jedtest.py. Converted jedtest script to Python [Andrew Gardner]. Fixed regtest, now all is executed fine [Miodrag Milanovic].
- 0.147u2            : Added util\plaparse.c\h. Refactored the code in jedutil to support the viewing of a GAL16V8 device and added a new command line option of "-viewlist" which will print out a list of all the devices that can be viewed in human readable logic equations. Also updated the jedutil regression test to support passing in an additional argument of "debug" to print out a detailed log. Also moved the jedutil regression test data into separate directories composed of the device's name to make things more organized [Kevin Eshbach]. Added experimental support for using Berkeley PLA files as input to jedutil [Curt Coder]. Fixed potentially uninitialized variable error in MSVC compile (tools\jedutil.c) [smf].
- 0.147              : Numerous jedutil tool improvements [Kevin Eshbach]: Made some modifications to the jedutil tool to allow the viewing of simple combinatorial jeds (adding support for registered and gals in the future) by taking a jed file and printing out human-readable equations. Changed the command line options of the jedutil tool to know take an initial argument to specify what the tool should do. For example to convert a jed to bin the command is now: jedutil -convert <source.jed> <dest.bin> and jedutil -convert <source.bin> <dest.jed>. To view a jed file with human-readable equations the command is jedutil -view <source.jed> <pal type>. Added a simple regression test for the tool that just verifies that the currently known pals have the row and column fuse location mapped correctly and at the moment this tool runs under windows only. Under the directory src\regtests\jedutil there is a Windows Script File with the name jedtest.wsf that if run from the command line with the command "cscript jedtest.wsf" will verify that a dump of the jeds in src\regtests\jedutil\jeds matches the good dumps in src\regtests\jedutil\baseline. Reference jed files created using the tool eqn2jed which is included with Opal Jr and these files are in src\regtests\jedutil\eqns (regtests\jedutil\baseline\pal10h8.txt, pal10l8.txt, pal12h6.txt, pal12l6.txt, pal14h4.txt, pal14l4.txt, pal16h2.txt, pal16l2.txt, pal16l8.txt, pal20l10.txt and pal20l8.txt), (regtests\jedutil\eqns\pal10h8.eqn, pal10l8.eqn, pal12h6.eqn, pal12l6.eqn, pal14h4.eqn, pal14l4.eqn, pal16h2.eqn, pal16l2.eqn, pal16l8.eqn, pal20l10.eqn, pal20l8.eqn and readme.txt) and (regtests\jedutil\jeds\pal10h8.jed, pal10l8.jed, pal12h6.jed, pal12l6.jed, pal14h4.jed, pal14l4.jed, pal16h2.jed, pal16l2.jed, pal16l8.jed, pal20l10.jed, pal20l8.jed and jedtest.wsf). Fixed compile error (tools\jedutil.c) [Wilbert Pol].
-  9th September 2011: Charles MacDonald - Atari GX2 protection - Atari GX2 games consist of three boards: Game board (JAMMA compatible), JSA board (Sound and some I/O) and CLARN board (Security and linking). The CLARN board has a fast board-to-board parallel link and a slower cabinet-to-cabinet serial link. Surprisingly an entire ADSP-2105 DSP is used just to manage serial communications. The parallel link consists of two identical subsystems shared across two board sets, each containing one port of a 2Kx8 dual port RAM and a 8Kx8 RAM (only 4K usable) accessed through a TPC1020 FPGA. Here's some preliminary documentation (pinouts, memory map, etc.): http://cgfm2.emuviews.com/txt/gx2tech.txt. The FPGA can't access the dual port RAM, DSP, and I/O on the board, though it may be able to snoop CPU access to them. It has the right connections to provide a 16-bit interface to the 8-bit RAM transparently. Moto Frenzy writes data into RAM and tests it frequently, doing dummy reads and other seemingly pointless operations. The FPGA keeps track of these accesses and uses it to influence data that is read back later as it can manipulate the RAM address and data bus as needed. The game depends on correct results when creating sprite lists and road data, without the CLARN board present the sprite positions and road display are corrupt making the game unplayable. The next step is to add a USB interface to the GX2 board and write 68K code to communicate with a PC. Then I can send test programs to the system and start experimenting with FPGA RAM access. Since the RAM is external, it can be monitored with a logic analyzer or even replaced with a RAM emulator (same one used in Master Boy) to capture the actual data the FPGA is working with. I'm hoping the protection has more to do with the RAM content rather than the internal state, as the FPGA has 48 bits that can be isolated from the I/O pins. The Atari GT games (T-Mek/Primal Rage) use a similar security system. The main board has an Actel A1020B FPGA connected to 8K RAM. With the RAM removed, the game runs much like it does in MAME now. The A1020B is a significantly more complex chip so it's likely the security has improved considerably. Definitely something to look at later.
-  6th December  2007: Charles MacDonald - Boolean minimization: I have been getting quite a lot of feedback about the PAL analyzer circuit. Currently it will generate the minimal equations for a given pin, and then do a term coverage check to remove intermediate equations that resulted from the minimization but should really be replaced with another one that has wider coverage of the input terms. What I didn't expect was pin polarity being an issue. One of the M92 PALs had a pin which reduced to the following mess assuming it was an active low output: *...*. Looks like some complicated logic was involved. But if we assume it's active high. As you can see the polarity you are targeting during minimization makes all the difference. As a quick way of attempting to generate the smallest set of equations possible I added a check to find which output level occurs the least for a given pin. It's also entirely possible to have a simple set of equations that generate the opposite of the desired polarity and a complex set that give the desired one. I think to keep the output of the program as human-readable as possible I will always try to generate the smallest set, and this means running the minimization process twice to see which polarity gives the best results. The amount of data to process for a given pin increases exponentially based on the number of input terms used; currently the program slows to a halt when processing a CPS-2 PAL that has 12 inputs (4096 equations). There are a number of optimizations that can be made, but for now I want to keep the program simple enough until the basic functions of it work properly. Then I'll tune it for speed. The dumping process has been tweaked quite a bit and it can dump a PAL in a few seconds instead of ~15 minutes. Note that the dumping process (generating a binary dump of all PAL states from the target device itself) and the minimization (turning the state data into a set of equations) are two very different things. I have been running tests on the Jaleco Mega System 32 hardware, but for some reason I can't get any layer other than the text foreground layer to appear. I'm sure all I need is the right combination of video register settings and priority RAM settings, but nothing is working yet. Hopefully I'll have more updates about it in the near future.
-  2nd November  2007: Charles MacDonald - Replacing a PAL: I picked up an Irem Gunforce (M92) board recently. After dumping the PALs I found the board wouldn't boot and the picture wouldn't sync - turns out IC51 had been inserted backwards. Oops! What kind of damage had been done? Hopefully just IC51 was bad and the rest of the hardware was OK. IC51 is a 16L8 type PAL. The device was programmed in 'simple' mode as opposed to 'complex' mode which allows output pins to be tri-stated individually. Bidirectional pins 13 and 15 were always tri-stated, so they were inputs, or (less likely) outputs with their output enables turned off. Which inputs were used? Of the six outputs, each one only uses a handful of inputs. This seemed promising - there would be less data to examine. A number of the inputs were never used, either the settings particular to Gunforce didn't call for them or the pins were left disconnected. At some point I'll take the two PCB apart to see what these pins are connected to. What you don't always see is a case where each output pin has only one set of inputs that drive that pin to a certain level. That meant all other sets of input combinations could be rejected (omitted in the above listing for brevity). This also revealed the "active" polarity for each output pin, active low, low, low, low, high, low respectively. I had some 22V10 to 16V8 adapters from my CPS-2 projects, so I wrote up a set of replacement equations in WinCUPL. I burned the resulting JEDEC fusemap to a 22V10, plugged the adapter into the IC51 socket on the Gunforce board and powered it up. Success! The self-checks passed and the attract mode started cycling. As the first real use of dumping an unknown PAL and (manually) generating a replacement, the PAL analyzer worked perfectly. Not all PALs use simple logic equations as shown above and that's where you need the software to examine and reject unused input settings automatically. You could easily have thousands of input settings to look through. But in this case, the data set was small enough to be examined by hand. The old PAL seems to be permanently damaged, when redumped the data suggests all bidirectional pins have changed to input only. So remember, don't plug PALs in backwards! Or at least dump them first.
- 26th October   2007: Charles MacDonald - PAL analyzer: A few months ago I developed a device to analyze read-protected PALs conforming to the 16x8 pinout over a USB connection. The hardware works fine, but the software has been quite difficult to write given all the different ways PALs can be configured. I think I'll release the project files soon rather than wait any longer to finish it. Currently the software can detect the following: - Bidirectional pin function (input, output, output+OE). - Inputs used by a bidirectional pin in output or output+OE mode. - Inputs used for the OE-enabling input of a bidirectional pin. - Device configuration (registered, complex, simple). - Presence of I9 acting as a global-OE for bidirectional pins. This is a hint towards identifying registered 16V8 PALs. Device support: All 16L4, 16L6, 16L8 compatible parts and 16V8 compatible parts in complex or simple mode. There is no standard way to determine how a registered PAL works, but you can write your own test function to send data to the PAL and see how it responds. This allows support of 16R4/6/8 and 18VC8 devices on a case-by-case basis, and PLS153/CK2605 devices if pins 9,11 aren't configured as outputs. It may be possible to support registered devices that simply latch inputs and used the feedback from the macrocells to feed the logic array, but more complex things like counters, state machines, shift registers, FIFOs, and multiple latches are too specific to detect in a generic way. Pins configured in combinatorial mode for a registered PAL that don't rely on feedback from a registered macrocell can still be analyzed, however. The next step is to determine the logical relationship between the input terms that enable a particular output or assert it, though that part isn't quite done. I have a working program to do this with a simple PALs (assuming 10 inputs, and all bidirectional pins are output-only, with no output enable controls) but it needs to be rewritten to support all configurations properly. When that is done a PAL dump can be converted to a CUPL source file describing all the logic the PAL implements. From that point you could burn a 100% compatible replacement part for repair or in the context of emulation see exactly what the PAL does. I've wanted a plug-and-play solution for PAL dumping in a lot of previous projects, and it's great to almost have it now.
- 0.111u6            : Moved src\jedutil.c to src\tools\.
- 0.106u12           : Aaron Giles fixed bug in JED parsing code that would checksum fuses beyond the number explicitly specified. Some programs write extra fuse data beyond the end and this should not be part of the checksum. Also made the checksum parsing more flexible to handle JED files with extra 0 digits in the file checksum.
- 0.105u4            : Added src\jedutil.c and jedparse.c/h. Aaron Giles added a new tool jedutil, which will convert .JED files to binary form and back again. Added new ROM region REGION_PLDS, which is designed to hold binary dumps of PLD fusemaps (produced from .JED files by jedutil). Added logic to -romident to automatically parse .JED files to identify them against these binary dumps. Added PLD dumps to the Vindicators, Batman, Pit Fighter, ThunderJaws and Relief Pitcher drivers. More to come shortly. Converted PLDs for catnmous and lazarian to the new binary format.
- SOURCE: tools\jedutil.cpp




P20.1   PAL (Programmable Array Logic)

- 14th July      2013: Charles MacDonald - Data East 146 chip: Thanks to The Dumping Union I was able to purchase a "Super Shanghai Dragon's Eye" PCB. The board was designed by Data East for Hot-B and is mostly identical to other Data East boards of the same time period. This board needed PAL dumps and had some emulation problems in MAME prompting further investigation into the 146 protection chip. I made a few modifications to the board for finer control of the 146 and have been developing and testing a lot of trojan programs to figure out how the chip works. I haven't gotten around to adding my findings to MAME and I won't have time to do so for a while, so I've decided to put up the relevant documentation. It's mostly complete and should be able to augment the existing 146 emulation to help Super Shanghai and other games. I'd really like to do more work with the other Data East protection chips because they seem very similar to the 146. If anyone can help out with providing any of the 68000-based games that use these chips (such as Robocop 2, Rohga, etc.) maybe we can complete the emulation for them as well. I've finished a new PAL dumper design. Many ideas from the previous 68000-based prototype have been refined and implemented in the new one, which had design goals of lowering cost and simplifying assembly. Adding a proper ZIF socket and a software controlled power supply makes it easy to swap out chips when dumping, and allowed me to dump a box of 60 PALs in about an hour. The control software has more exhaustive tests to identify and confirm registered devices so you can easily tell how GAL chips are programmed and how they should be dumped. This version supports 20 and 24-pin combinatorial devices and dumping of 20-pin registered devices. I've finished the new combinatorial dump analyzer, and am working on adding more devices to the registered dumping software. Then I can start work on the analysis program to convert registered dumps back into human-readable logic which should be quite a challenge. Even if that proves too troublesome, we still have a way to preserve all the data in registered PALs now, and the analysis software can follow at a later time.
-  7th July 2012     : Smitdogg - Kevin Eshbach designed a new PAL dumper (http://imageshack.us/g/835/palcrackerattachedtodum.jpg/).
- 23rd August    2011: Charles MacDonald - Fake 22V10s: I recently bought a set of used Lattice GAL22V10D devices from China-based distributor that turned out to be counterfeit. They all have identical top-side labeling, including the speed grade and date code. The molded plastic body differs from chip to chip; some have an indendation for a pin 1 indicator, others have a notch, some have both. The ejector pin marks are frequently missing, and the body color is inconsistent and ranges from dark black to gray. All have a beveled edge around the top instead of a sharp edge like the real chips, likely due to sanding to remove the old markings. The pins were clean and bent out -- clearly not pulls as advertised. Out of the set of 50 there were two good chips, which physically matched regular 22V10s and were pulls with pencil markings indicating their original board position ("U10" and "U11"). I guess throwing in a few good PALs in the tube makes the transaction more legit. Now that Lattice discontinued the 16V8 and 22V10, these chips are rising in price and the pirates seem to have positioned themselves to benefit as people scramble to purchase the last batches available. I wonder what these chips really are, probably just junk that fits the 24-pin DIP form factor.
-  7th November  2010: Charles MacDonald - I've updated the PLA disassembler to fix a bug that was causing it to crash; as it turns out some device programmers do not specify a pin count in the JED file. Now the pin count is inferred from the fuse count. Thanks to the Dumping Union, we found it is possible to dump CK2605 PLAs as PLS153s, which results in an overdump as the PLS153 has more array rows than the CK2605 does. So I added an option to trim these rows and convert a PLS153 fusemap back to a CK2605 fusemap.
- 17th August    2010: Charles MacDonald - I've finished a tool for disassembling CK2605, PLS153, and PLS173 fusemaps. You can assign signal names from schematics or ones you come up with yourself to make the source equations more readable. As documentation is always important I would encourage users to name the signals and add comments where possible. You can also recompile the source code to target other devices, for example fitting a CK2605 or PLS153 design into a GAL16V8, or a PLS173 design into a GAL22V10D. This allows these older parts to be replaced with inexpensive modern equivalents. Of course these PLA devices have a different internal architecture from PALs, so not every design can fit. A PLA has a global pool of AND gates that any OR gate can include, whereas a PAL has a fixed set of AND gates per OR gate. It's possible for a PLA to specify many AND gates for any one input, and for multiple OR gates to share multiple AND gates from the pool. Here's an example of how the tool works. Shinobi uses a Signetics CK2605 PLA for part 315-5214 which implements glue logic for the Z80. Invoking the tool like so will disassemble the fusemap using the assigned pin names and produce a CUPL file that can be used with WinCUPL. On a GAL16V8 these pins are fixed inputs and do not have characteristics that need to be defined. WinCUPL will generate a fusemap that you can use to program a GAL16V8 and use to directly replace the chip on a Shinobi PCB. Later I will add an option for more compact output that folds the AND and OR gate definitions together. Keeping them split makes it clear which resources each pin uses, but it does decrease readability. And I plan to merge the 22V10 disassembler and this tool together too.
- 19th July      2010: Charles MacDonald - I've been working on the prototype PAL reader and finally hit a development milestone, I was able to dump two PAL16R4s through an automated process. Unlike dumping combinatorial PALs, registered PALs have no straightforward reading procedure. This is where the onboard processing power of the 20 MHz 68000 and the large amount of work RAM came in handy. The program starts by resetting the device and mapping other states that are connected to the reset state. While it does this, it builds up a list of state transition values so that it can search states that are more deeply linked. All the states and all their transitions are explored recursively, and in the end the state machine has been fully exercised and all possible outputs are recorded. The processing involved is moderately complex and requires efficient access to large data structures and multi-dimesional arrays in RAM, which the 68000 addressing modes are well suited for. In fact, a 68020 would do a better job but sadly it appears Freescale no longer makes them. As much as I'd like to put a 68060 in this thing it has to stay inexpensive. The next step is to generalize the algorithm so that 16R6 and 16R8 PALs can be read, and then support 16V8s. At that point I think all registered PALs within those device families could then be dumped and preserved. It will be possible to support registered 22V10 designs in some configurations, but any device that can be programmed to hide its internal state has the potential to be undumpable, such as the 18CV8 which has buried registers. The final step is to develop analysis software that can examine a registered PAL dump and turn it back into logic equations for recompilation and/or retargeting. Already it's clear that this step will produce results that will be functionally equivalent but certainly not representationally equivalent, and determining what the original registered structure was (FIFO, latch, counter, etc.) will likely be impossible. It will be up to the user to make a judgment call about the original implementation. This is more of a documentation issue than anything else. It's great to finally be at this point because reading registered PALs was one of the two 'big' PAL problems that I've been working on for about 3 years now, the other being feedback analysis. Getting this to work also validated some of the design decisions that went into the prototype PAL dumper, now I know which features to keep and which to drop for the next version. In other news I have finished a CK2605/PLS153 disassembler and am working on a CK2605 to PLS153 fusemap conversion tool. I'll try to get those released shortly.
- 14th February  2010: Charles MacDonald - Over the winter I had been working on the next revision of the PAL reader and decided to implement a number of experimental ideas to see what could be gained from them. The result is a 68000-based computer system. The hardware consists of the following: Freescale 68EC000 CPU @ 20 MHz, 1MB work RAM (can be used as ROM overlay), 512K Flash (boot loader), 128K page-mode EEPROM (non-volatile storage), Support for dumping 20 and 24-pin DIP PALs, Support for dumping 20 and 28-pin PLCC PALs, Lattice ISP programming interface (for ispGAL22V10C), High speed USB interface and Expansion port. The software for dumping 20/24-pin DIP PALs and 28-pin PLCC PALs works, and some of the basic ISP functions for entering ISP mode and reading the device ID also work. The bootloader allows software to be uploaded to RAM and has functions for memory upload/download, remote soft-reset, and diagnostics. I used a 68EC000 as it has an 8-bit data bus mode which simplified the process of manual routing for such a large 2-layer board. Several 22V10s were used to implement an address decoder, clock generator, programmable wait state generator (not unlike the one used in the System 16B boards), and I/O strobes for the PAL interface hardware. Needless to say with such a fast CPU and available RAM this system is very convenient to program for. Currently I'm working on an update to jed2cupl which will generate EPROM-type dumps from JED files. It will allow for virtual programming and dumping of a device based on CUPL code without having to program any real chips. This will be used to identify more edge cases for PAL analysis and to further validate the output of WinCUPL and the PAL dump analysis tool. I've also cleaned up and generalized the source quite a bit in anticipation of future 16V8 device support.
- 16th February  2009: Charles MacDonald - If you do not want to build the PAL reader, there is a very low-cost alternative for dumping combinatorial (not registered) PALs. You can construct an adapter that connects a 20-pin PAL to a 32-pin socket. By reading the PAL in a device programmer as a 27C020 EPROM you will get a 256K dump which the PAL analysis software can interpret. Please note that while this has worked in some cases, because it relies on the operation of your device programmer the results cannot be guaranteed to be accurate. One person told me about several good dumps that were made with the adapter and just a few PALs gave weird results. When all the PALs were later redumped on the dedicated PAL reading hardware the correct dumps were still correct and the bad dumps were now read properly. Keep in mind that it is just a hack.
- 15th January   2009: Charles MacDonald - The third revision of the PAL reader has had an update to fix a problem where USB enumeration wouldn't always work. Check out the online instructions for a step-by-step guide of how to modify the PCB and new PIC firmware. Current projects under development include: * Communications board for the PC-Engine using the new DLP-245R USB module. * USB-based RCA Studio 2 cartridge reader. * PAL programmer that interfaces directly with the PAL dumper. The latter should help testing different configurations as the chip can be programmed then dumped in one step and without removing and inserting chips over and over.
- 21st August    2008: Charles MacDonald - This week I finished assembling and testing the third version of the PAL reader hardware. Both 20-pin (16L8) and 24-pin (22L10) devices can be dumped, though the analysis software needs some considerable changes to support 24-pin chips. I'm moving towards a more device-independent way of analysis that could support other programmable logic devices of varying input and output pin counts, though I don't have plans at the present to make a PAL reader capable of doing that. The power switch (ST890C) works very nicely, it has an output that is asserted when there is a short circuit or an overheating condition and will cycle its power output when it cools down sufficiently to continue. This caught a short circuit on the PCB as I noticed the "fault" LED was always lit. I tested a few registered PALs and the power-up reset works as expected, the only quirk was that the clock input needs to be low for the reset to happen. If it's held high, not all of the macrocells are reset to '1'. This will allow all possible transitions from the reset state to the next state to be mapped, which the previous versions of the PAL reader couldn't do without manually cycling the power. Not something you'd want to do 256 times. What didn't work was the DS1233 reset generator, which should keep the /RESET output low for short while after the ST890C power output has reached a valid level. Instead, it directly follows the power output state, low when off and high when on. Without that necessary delay I can't accurately determine when the 'settling' time for the PAL has elapsed, at which point its power-on reset sequence is complete. A workaround was to insert a short delay on the PC side, but I would much rather find a better solution. There is an expansion connector intended for a PIC12F675 with all the power and related control signals available, so it should be possible to find a more suitable part or circuit and connect it there, or just use a PIC to monitor the output. And if the software was informed about the kind of PAL being dumped, it could poll the PAL outputs until they were reset though that would increase the time it took to process a registered PAL. Overall I am quite pleased with the results. The design is becoming more refined and the capabilities are increasing. Once it's ready for a release I will update the PAL reader package with the new files, PCB layout, and software.
-  6th August    2008: Charles MacDonald - I had received reports of PALs that couldn't be replaced because they used more input terms than a PAL supports. While the results were functionally correct and would compile for a virtual device, the results wouldn't fit in a replacement GAL16V8. A shortcoming in the analysis process was revealed where feedback wasn't properly taken into consideration. PALs have feedback taken from the point between the output buffer and bonding pad, which can be used as an input term by other outputs. Because the feedback is tapped at this particular point, it can be driven by the PALs output, or when the pin is tristated it can be driven by an external circuit. This allows for bidirectionality instead of forcing a pin to be input or output only. I had assumed WinCUPL would be able to minimize equations by taking the feedback of other outputs into account. But it doesn't, and for good reason: this is an unsafe optimization. If the pin in question was ever tristated then the feedback wouldn't represent the result of the logic associated of it, instead it would assume whatever state external circuitry on the pin set it to. Another less likely situation is that the output buffer of the PAL could be overridden if it was strongly driven high or low, say during a bus conflict, which would again make the feedback incorrect. From a design standpoint this isn't really an issue as the designer would always know if they wanted to use feedback or not. In retrospect it's probably pointless for the design software to try to work feedback into the optimization process because it would be explicitly specified. In terms of reverse engineering, this adds extra complexity to the analysis involved. I have started updating the software to take this into account, and it will likely take a while to work out all the associated issues. On the flip side it's nice to know that out of the many PALs people have dumped this was the only significant issue and that the results weren't really even incorrect, just not optimal. Special thanks to Nicola Salmoria for making sense out of the equations, and Chris Hardy and Corrado Tomaselli for providing PAL dumps, tracing PCB connections, and sharing information.
- 27th July      2008: Charles MacDonald - I have been working with Chris Hardy to determine how the Bagman security chip works. It is a PAL16R6 clocked independently of the CPU at about 30 Hz. A new 6-bit random number is generated each time and can be read by the Z80 as needed. It generate 55 unique values before the sequence repeats. There are many different ways the internal storage (state data) of a PAL can be linked together to form elements like shift registers, latches and counters. Rather than try to determine these very specific configurations, it's easier to look at the PAL from a generic point of view. The Bagman PAL has 6 registered macrocells and 8 inputs, so that's 64 possible states and 256 possible input configurations per state. This can be represented by a 'transition table', which says which state will be selected when the device is clocked, based on the current state and input settings. A problem arises as you fill out the table by feeding data to the PAL and recording the results: eventually you may reach a point where a very specific sequence of states has to be stepped through in order to reach the 'target' state you are mapping the inputs for. The rate at which the table is filled drops dramatically when this happens. To get around this I added code that checked if the current state was completely mapped out, and if so, it would find the path of state transitions that was necessary to reach the target state that needed further mapping. If no such path exists from the current state, a different state is selected and the path check is made again. This allowed all the input lists to get completely filled out for every state that was available. When analyzing the inputs, it was surprising to see that none of them were used by the registered logic. The address bus is available to the PAL, but does not affect random number generator. The bit from the timing circuit also wasn't used, and functioned independantly as an inverter. This greatly simplifies how the PAL functions as none of the inputs need to be taken into consideration when examining state changes. It's also highly unusual in terms of your typical registered PAL implementation. The next step was to create a replacement. Some of the initial designs we tested for a 16V8 didn't work, so I moved to a 22V10 (the only GAL I can program), dumping it through the PAL reader using a 22V10 to 16V8 adapter I made for the earlier CPS-2 project. As it turns out there is a strange quirk in WinCUPL; the state machine description which I generated from the transition table would compile, but only the optimized results (represented as logic equations) would generate a valid JED file for the 16V8. This was easy to fix, just cut and paste the results from the simulator output back into the CUPL source. But it is unfortunate this happens at all. Eventually we had a working GAL16V8 replacement for the Bagman PAL that produced identical output as the original part. Problem solved!
-  9th July      2008: Charles MacDonald - I've been working on the PCB layout for the third revision of the PAL reader. This new version will support 24-pin devices like the 20L8 and 20L10. It has a software controlled power switch so that registered devices can be initialized to a known state in a consistent manner by causing a power-on reset. If this works as expected, it should allow registered devices such as the PAL16R8 to be dumped. If it doesn't, the extra circutry can be bypassed with a jumper and it will function normally. I have also tried to address usability issues; there are mounting holes for standoffs, all parts except a SOIC-8 chip are socketed for easy repair, and there is more clearance around the PAL socket. There is still a lot to do as the new design has to be tested to confirm its operation, and the dumping and analysis software will need some considerable rework for the larger devices. But this is another step towards a better solution for dumping PALs.
- 11th May       2008: Guru - I received a small custom adapter from Charles MacDonald. It's used to raw-read PALs, especially protected ones. Very nice little gizmo that will hopefully be useful for solving some memory map related issues in MAME. I've already used it to dump the PALs from Captain Commando (CPS1).
- 0.105u4            : Added src\jedutil.c and jedparse.c/h. Aaron Giles added a new tool jedutil, which will convert .JED files to binary form and back again. Added new ROM region REGION_PLDS, which is designed to hold binary dumps of PLD fusemaps (produced from .JED files by jedutil). Added logic to -romident to automatically parse .JED files to identify them against these binary dumps. Added PLD dumps to the Vindicators, Batman, Pit Fighter, ThunderJaws and Relief Pitcher drivers. More to come shortly. Converted PLDs for catnmous and lazarian to the new binary format.
-  2nd May 2006: Aaron Giles - One of the best uses of MAME is the identification of random video game parts. Thanks to the -romident feature, you can dump a ROM or PROM from a game and pretty quickly identify what game you have. Believe me, as someone who owns a giant pile of PCBs, it is not always easy to tell. In theory, MAME should catalog all the programmable parts on an arcade PCB. This is useful not only because of the -romident feature, but also because if a part fails due to bit rot or corrosion or some other kind of damage (or is just missing), you can identify it, track down the data, and program yourself a new one. Up until now, we have only been really cataloging ROM-based devices, in spite of the fact that another class of device " the Programmable Logic Device (PLD) " is often found on PCBs, especially those dating from the mid-80's onward. PLDs are a class of device that includes PALs, GALs, and other related devices, which are programmable in much the same way that ROMs and EPROMs are. One of the big reasons why we haven't been including PLDs is because they are generally not stored in raw binary format, like ROM data. Rather, they are stored in a format known as the JEDEC file format (.JED), which is basically a text file containing all the data, with lots of room for programmer-inserted comments and many optional fields. This is not really a big problem in and of itself, except for the fact that every single programmer out there, when reading a PLD, will produce slightly different output. This in turn makes tools such as the -romident feature useless for such devices because -romident works by comparing the CRCs and SHA1s of the files, which would be different even for the same PLD read by different programmers. I finally took a close look at the .JED file format over the past week, and came up with several strategies for how MAME can finally begin cataloging these parts. After a bit of discussion, I finally settled on one that will be implemented in the 0.105u4 release which should be coming up shortly. Here is how it works. At the creamy center of a .JED file is what is known as the 'fuse map'. This is the raw set of binary 1s and 0s that get programmed into the PLD. In fact, the rest of the .JED file beyond that is mostly filler: some checksums, default states for unspecified fuses, etc. The final fuse map is really the important data, along with the type of device that was used (was it a GAL16V8A or a PAL16L8?). So the basic premise for logic devices in MAME works like this: the fuse map is stored in raw binary form, preceded by a single 32-bit (big-endian) value that specifies the total number of fuses. Each bit of the fuse map is packed into a byte from LSB to MSB. This, it turns out, is the exact format that is used for the internal fuse map checksum, so it is a natural arrangement. I decided not to try and encode the device type into the file because (a) there are way too many devices to be concerned with, and (b) many devices with similar but not identical names are equivalent. Rather, PLDs that are added to MAME should specify the device type in the filename. (Also keep in mind that if the device type were encoded into the file itself, then if person A reads a GAL16V8 and person B reads a GAL16V8A that contain identical data, they would not match). How do you get data in and out of this format? Well, starting with 0.105u4, the default build of MAME will build a new utility called jedutil, which can convert a .JED file into its binary form, and vice-versa. This means that you can find the binary form of a PLD, run jedutil on it, and extract a .JED which can be programmed into a real life PLD using any standard programmer. So how does this help -romident? Well, if you read a PLD from a board and want to see if it matches anything we've cataloged, you can do one of two things. You can take the resulting .JED and run jedutil on it to convert it to binary form. Or, you can just point -romident to the .JED file directly, because I've added code to the romident feature that recognizes .JED files and automatically parses them into binary form on the fly. The first experiments in using this will be the mid-80's and later Atari games, which I've been working on cleaning up the names on, and which I've already read the GALs from. I know there are several other games out there that we already have good PAL/GAL dumps from as well. Hopefully we can produce an even more complete catalog of arcade game devices as a result. Many of Atari's games used GALs to control the logic for memory addressing, video and sound. Unfortunately, most of the GALs on shipping Atari boards have the security fuse blown, meaning that if one goes bad, you'll have a tough time trying to make a replacement. Furthermore, since GALs are EEPROM based, they are subject to deterioration over time. Luckily, some equipment does exist that can read these protected GALs. So, as a service to anyone out there who needs a replacement GAL to fix an Atari board, I've decided to set up this page where you can grab the necessary JEDEC files for any GALs you need to replace. Disclaimer: Although these reads were taken from working boards, I have not programmed replacements for these to verify that the JEDEC files are accurate.
- NOTES: PAL = Programmable Array Logic is a family of programmable logic device semiconductors used to implement logic functions in digital circuits introduced by Monolithic Memories, Inc. (MMI) in March 1978.
- SOURCE: tools\jedutil.cpp


        PAL10H8      Suprglob
        PAL10L8      Gaplus, Maniach
        PAL12L6      Cchasm, ZeroTarget, PAL12H6 (Archrivl)
        PAL12L10     Metlhawk, Cosmo
        PAL14L4      Citycon
        PAL16B4      Ssozumo
        PAL16H2      Seicross
        PAL16L8      MMI PAL16L8ACN, PAL16L8BCN, PAL168ACN (Ddragon), AMD AMPAL16L8APC, TIBPAL16L8 (20 pins), PAL16L8NC (Freekick, Ufosensi)
                     The PAL16L8ACN encrypted the data in roms. An encryption table can you find in drivers\galaxian.c (-> init_checkman)
        PAL16R4      PAL16R4A, PAL16R4B, PAL16R4PC, PAL16R4ANC, PAL16R4NC, MMI PAL16R4CN (DIP20), AmPAL16R4A
        PAL16R6      Aso, Crzrally, Chopper   NOTES: In Bagman a PAL16R6 is used for guards controlling (Inputs are connected to buffered address lines AB0, AB1, AB2, AB3, AB4, AB5 and AB6)
        PAL16R8      Captaven, Skullxbo
        PALCE16V8    PALCE16V8H (Oisipuzl), PLCE16V8 (Spacedx), AMD PALCE 16V8H stamped 'PS5-1', DIP20 (Gunbird2)
        PAL20L8      PAL20L8BCNS (Darius2, Archrivl, Cadash), PAL20L8BCN (NamcoFL-System)
        PAL20L10     PAL20L10ACNS (Buccanrs), PAL20X10 (Trisport), PAL20X10 (Archrivl, Luckywld, Elvactr)
        PAL20R4      PAL20R4ACNS (Ninclown, Ufosensi)
        PAL20V8      Luckywld
        PALCE20V8    PALCE20V8H  DIP24 (Rfjet), PLCE20V8 (Spacedx), PAL CE 20v8h (Trucocl)
        PALCE22V10   PALCE22V10H-25PC/4 (Megat6, Propcycl, Alpinerc)

        TIBPAL16L8   (Btlkroad, Finalb)
        TIBPAL16R4   (Timekill)
        TIBPAL22V10  TIBPAL22V10ACNT (Hotmind)

        EPL10P8      (Legend), EPLIOP8BP (Stratof)
        EPL12P8      EPL12P6A (Airwolf), EPL12P6 (Legend)
        EPL16P4      Ricoh EPL16RP4BP (F1GP)
        EPL16P8      Ricoh EPL16P8BP (Ashnojoe, Spinlbrk), EPLIOP8BP (Stratof)

        ATF1500      Atmel ATF1500A      PLD  A-22912 (Gauntdl)
        ATF16V8      Atmel ATF16V8-10PC  DIP20, ATF16V8B marked A-21647    (Area51, Crysking, Metmqstr)

        18CV8        18CV8PC (Mgcrystl), AMI 18CV8 (Riot), 18CV8 (Sailormn), HY18CV8S (Rebus, Twinadv), ICT PEEL 18CV8P  DIP20  stamped 'SXX005-5' or 'SXX011B' (Bmcbowl, Rfjet)
        22CV10       ICT 22cv10aj (Area51), 22CV10 (Hayaosi1), 22CV10P (Boogwin)

        Signetics
        CK2605       DIP20 (Shinobi, Sega-System16a)
        PLS153       PLS153A (Smathtv), PLS 153N (Xenophob)
        PLHS18P8     PLHS18P8BN (Othunder, Gollygho, Airco22b)


        NAMCO
        SYS87B-1 = SYS87B-2B = PAL16L8
        SYS21C1  = SYS21PC1  = PAL20L8
        SYS87B-3             = PAL20L10
        PCB: Airco22b, Gollygho



P20.2   PLA (Programmable Logic Array)

- 0.221              : Allow reparsing after device started (machine\pla.cpp) [hap].
- 0.210              : Added optional logging to present the decoded terms [AJR].
- 0.205              : Added a dedicated MOS8721 device [Ryan Holtz].
- 0.201              : Added PLS100 device [Ryan Holtz].
- 0.156              : Made pla_device more generic. Fixed cache2 problem (machine\pla.c). Made plaparse less strict about whitespace and ordering, added .phase keyword and cleanup (util\plaparse.c). Fixed fatalerror on parse error (machine\pla.c) [hap].
- 0.155              : Small optimization to pla_device::read() (machine\pla.c) [Oliver Stoeneberg].
- 0.154              : (MESS) C64: Precalculate PLA outputs for approximately 5% speedup (machine\pla.c) [Curt Coder].
- 0.147u2            : Added util\plaparse.c/h. Added experimental support for using Berkeley PLA files as input to jedutil. Optimized the PLA implementation and added simple caching with significant performance increase. Fixed MOS8721 (machine\pla.c) [Curt Coder].
- 0.147              : Changed machine\pls100.c/h to machine\pla.c/h. Generalized the PLS100 into a PLA device of variable amounts of inputs/outputs/terms [Curt Coder].
- 0.145              : Added machine\pls100.c/h. Added PLS100 (82S100) PLA emulation which utilizes a binary JED fusemap [Curt Coder].
- NOTES: PLA = A Programmable Logic Array is a kind of programmable logic device used to implement combinational logic circuits.
- DRIVERS: laserbat.cpp
- SOURCE: machine\pla.cpp



P20.3   GAL (Gate Array Logic)

- 14th November  2014: Charles MacDonald - Over the summer I developed on a device programmer for Lattice GALs. The GAL16V8 and GAL22V10 are currently supported, and Porchy sent a bunch of other GAL types to be added as well. I used PJRC's Teensy 3.1 microcontroller board which is unique in having both an DAC and ADC as well as a decent amount of on-chip Flash and work RAM. This makes it well suited for more complex applications, and it was a good fit for this circuit which has an analog section for generating a digitally adjustable programming voltage ranging all the way from 1.25V to 19.25V. The utility program has the usual functions to erase, program and verify a GAL, and also has functions to auto-detect the programming interface (different for each chip type), determine if a device is read-protected, and an assortment of other diagnostic options. What's really been interesting is to fill in the missing details between what was experimentally determined in existing GAL programmers, and the information in Lattice's patents. I've written extensive documentation on this subject and once the remaining devices are supported, I'll publish that data here. Eventually this project will be open-sourced and I'll make the schematics and circuit board layout available too. Between this and the PAL reader there is now a complete solution for reading, programming and testing PALs and GAL devices.
- SOURCE: tools\jedutil.cpp

        GAL16V8      PLCC20, DIL20, DIP20       GAL16V8A (Finalb, Pitfight), GAL16V8B (Gogomile), GAL16V8D stamped 'MCTL01'(Gnbarich, Rfjet)
        GAL20V8      PLCC-28, DIL-24            GAL20V8A 15LP L244D02 (Timekill), GAL20V8B (MK3), GALv20V8B (Topshoot)
        GAL22V10     PLCC-28, DIL-24            GAL22V10B (Drtomy)
        GAL6001      (Guardian)          NOTES: The SLOOP (or "SLOOPstic") is a follow-on chip to the slapstic. It provides a similar type of security, but is programmed onto a GAL6001, rather than a custom part. It was created because Atari was running out of slapstics to use in their games, and the original masks for the slapstic had been lost by the company that manufactured them. A separate FAQ for this chip is planned for the future.

        SCX6218UTP   National Semiconductor MicroCMOS Gate Array  (Stunrun), SB942 SCX621BUTP (Hdrivair, Racedriv), SCX62180UTP (Harddriv), SCX6218UTP S9052AB, PLCC 80 (Steeltal)



P20.4   CPLD (Electrically Erasable Complex Programmable Logic Device)

        Altera
        EPM3064     ALTERA MAX EPM3064ATC100-10  (TQFP100, stamped S10MA2A)                           (MrDriller2)
        EPM7032     ALTERA     EPM7032LC44-15T D9522, QFP44/PLCC44 (Midway no. A-22544)               (Bangball, Gauntleg, Inufuku)
        EPM7064     ALTERA     EPM7064QC100 CPLD (QFP100), EPM7064LC84 (PLCC84)                       (Taito GNET-System)
        EPM7128     ALTERA MAX EPM7128ELC84-20, MAX EPM7128STC100-10 (labelled S12M841), MAX7128      (Gotcha, Tekken Tag Tournament)
        EPM7160     ALTERA MAX EPM7160ELC84-10 (PLCC84 CPLD, labelled 'PSX PiD 9-19-96 2FDA')         (Primrag2)

        AMD
        MACH110     CPLD, PLCC44  (Poitto, Pururun, Tickee)
        MACH111     GTI Club (Konami 1996), NBA Jam Extreme (Acclaim 1996), Silent Scope 2 (Konami 2000)
        MACH130     The Return of Lady Frog (Microhard 1993)
        MACH210     MACH210-15, QCC44, switch matrix CPLD (Ncv1, BurglarX, EggVenture)
        MACH211     Battle Bakraid (8ing 1999), Beastorizer (8ing 1997), Brave Blade (8ing 2000)
        MACH231     MACH231-15-JC/1-18JI/1 (Snookr10)

        Cypress
        CY37064     CPLD KEYCUS, PLCC44, labelled KC048 or KC053   (Aquarush, MrDriller)
        CY37128     CY37128VP160 CPLD, TQFP160, labelled KC001A    (Gamshara, MrDriller)
        CY37256     CY37256VP208 CPLD, TQFP208                     (NamcoSystem10)

        Lattice
        pLSI 1016   LATTICE pLSI1016  PLCC44  (suprnova.c), isp1016E (Deerhunt)
        pLSI 1032   pLSI1032 (Stagger), Lattice pLSI 1032-60LJ (Hyperpac, Newfant), 1032E (Rbmk)
        pLSI 2032   Lattice pLSI 2032-80LJ (Behind Enemy Lines, Jchan), ispLSI2032 (Deerhunt)
        pLSI 2064   PLCC 44
        pLSI 2096   TQFP 128

        SDT7134     PLCC44, custom CPLD ?  (F15se)

        XILINX
        XC7336      XILINX PC44ACK9633 A63458A                   (Tetrisp2, Rdft)
        XC9536      XILINX CPLD (PLCC44, Konami no. Q931H1)      (Gaia, Sscope2)
        XC9572      XILINX CPLD (TQFP100)                        (Gauntleg)
        XC95108     XILINX (PQFP100, Flash Complex PLD)          (Bbakraid, Gunpey)
        XC95144     XILINX (TQFP100, Flash Complex PLD)          (Bbakraid)
        XC95288     XILINX (TQFP208, Flash Complex PLD)          (G-Stream G2020)




P20.5   FPGA (Field Programmable Gate Array)

        Altera
        EPF10K10QC208    ALTERA EPF10K10QC208-4 FPGA               (NeoGeoHyper64)
        EPF6016TC144     ALTERA EPF6016TC144-2  FLEX 6000 PLD, TQFP144    (Gauntleg, Gauntdl)

        Actel
        A128oxc          ACTEL A128oxc pq16oc, square smd          (Speedup)
        A42MX09          ACTEL A42MX09, PLCC84                     (A51site4)
        A42MX16          ACTEL A42MX16 FPGA, QFP160                (Pasha2)

        EMP7064LC68    FPGA, A-20259 Custom Chip                   (Nbahangt, MK3, Wwfmania)

        HP FPGA 1FY5-0003 9351-HONG KONG NPFY5B5880                (MetalManiax)

        Playmark
        010412         FPGA Playmark 010412                        (Sderby)
        018969         Playmark 018969                             (RoulettePlaymark)
        018970         Playmark 018970                             (RoulettePlaymark)


        XILINX
        XC3020         XILINX XC3020A                              (Kdeadeye)
        XC3030         XILINX (PLCC84), ATT3030-70M84              (Sexyboom, Stonebal)
        XC3042         XILINX XC3042-70, xc3042A                   (Eggventr, Touchmaster3000/4000)
        XC3130         XILINX (TQFP100)                            (Skullfng, Avengrgs)
        XC3142         XILINX FPGA XC3142-3 TQ144C X25839M AIG9326 (MetalManiax)
        XC3190         XILINX FPGA XC3190-3 PQ160C X35728M AIG942  (MetalManiax)
        XC4003         XILINX FPGA CX4003-6 PQ100C X25788M ASG9325 (MetalManiax)
        XC5210         XILINX PQ240C X68710M AKJ9544               (Tetrisp2)
        XCS05          XILINX Spartan XCS05 FPGA   (QFP100)        (X-Files, Kdynastg)
        XCS10          XILINX Spartan XCS10 FPGA   (QFP144)        (Ppcar)
        XCS10XL        XILINX (FPGA, QFP100, Konami no. 4C)        (Sscope2)
        XCS236A        XILINX XCZ236A-25                           (Cheesech)


P20.6   Other

        Altera
        EP1810LC20T    EPLD (Primrage. SF2, T-mek)
        EP610PC        Altera EP610PC-35 (Smashtv)
        EP910PC        Altera EP 910PC-40 (Raiden, Smashtv)

        Intel
        N5C090-60 simple PLD (PLCC44), 100% compatible with Altera EP900
        P5C060     16 Macrocell CMOS PLD, One-Time-Programmable Logic Device, 26MHz fMAX (Mk)

        Quicklogic
        QL2003-XPL84C 0003BA  PLD (PLCC84)            1945iii, 3in1semi, Pclubys, Ssfindo, Suplup, Vamphalf
        QL2007-XPQ208C                                Bcstry, Semibase
        QL12X16B-XPL84C                               Pclubys, Searchey



==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


INPUT/OUTPUT

  1.    I/O chips

  2.    RIOT (RAM & I/O Timer)
  2.1   MOS 6530 MIOT
  2.2   MOS 6532 RIOT
  2.3   8155
  2.4   8156
  2.5   NSC810

  3.    Interrupt controller
  3.1   8214
  3.2   8259
  3.3   71059
  3.4   F3853
  3.5   6846
  3.6   R10696
  3.7   RA17XX
  3.8   Atmel ARM AIC
  3.9   AM9519
  3.A   RST interrupt vector buffer

  4.    UART (Universal Asynchronous Receiver and Transmitter)
  4.1   National Semiconductor
  4.11  INS8250
  4.12  NS16450
  4.13  NS16550
  4.14  PC16552D
  4.2   Intel 8251 USART
  4.3   MB89371
  4.4   NEC
  4.41  uPD7001
  4.42  uPD71051
  4.5   IM6402
  4.6   S2350
  4.7   General Instruments
  4.71  AY-3-1013
  4.72  AY-3-1015
  4.8   DUART
  4.81  MC68681

  5.    DMA controller
  5.1   MC6844
  5.2   I8257
  5.3   I8237
  5.4   AM9516
  5.5   AM9517A
  5.6   MOS 8726
  5.7   HD63450

  6.    Interfaces
  6.1   PIA (Peripheral Interface Adapter)
  6.11  6520
  6.12  6821
  6.2   PPI (Programmable Peripheral Interface)
  6.21  8255
  6.22  MB89363
  6.3   VIA (Versatile Interface Adapter)
  6.31  6522
  6.4   6525
  6.5   CIA (Complex Interface Adapter)
  6.51  MOS6526
  6.52  MOS6529
  6.53  8510
  6.54  MOS8520
  6.55  8530
  6.6   ACIA (Asynchronous Communications Interface Adapter)
  6.61  6551
  6.62  6552
  6.63  6850
  6.7   RS232 Port
  6.71  DS232
  6.72  DS1228
  6.73  ICL232CPE
  6.74  GD75232
  6.75  MC2661
  6.76  TMS1024 / TMS1025
  6.77  TMS9901
  6.78  TMS9902
  6.79  MC68230

  6.8   Other
  6.81  2651
  6.82  UM82C11
  6.83  SN75452
  6.84  MC6852
  6.85  MC68901
  6.86  MC88916
  6.87  8243
  6.88  8279
  6.89  AM2950
  6.90  QS32X384
  6.91  I2C Memory
  6.92  MD0204
  6.93  TMS6100
  6.94  Prime 3C
  6.95  Bitbanger
  6.96  Serial device interface
  6.97  MK68564

  7.    I/O Controller
  7.1   8212
  7.2   I8274
  7.3   CDP1852
  7.4   INS8154
  7.5   uPD7201
  7.6   TMS5501
  7.7   Toshiba
  7.71  TMP82265
  7.72  TMP8740
  7.8   SMC FDC37C932
  7.9   TE7750
  7.91  TE7751
  7.92  TE7752

  8.    Input/Output
  8.1   Analog Digital Converter (ADC)
  8.11  ADC0804
  8.12  ADC0808
  8.13  ADC0809
  8.14  ADC083x
  8.15  ADC0844
  8.16  ADC0848
  8.17  ADC1038
  8.18  ADC1213x
  8.2   NEC
  8.21  uPD7002
  8.22  uPD7004
  8.23  MSM6253
  8.24  M58990
  8.3   Coin
  8.31  PC3092
  8.4   Lamps
  8.41  Lamp Driver
  8.42  Lamp Sequencer
  8.43  Flasher
  8.44  Stepper motor
  8.5   Terminal
  8.6   Display
  8.61  Alphanumeric Display
  8.62  On-Screen Display (OSD)
  8.63  Touchscreen
  8.7   Keyboard
  8.71  8042 Keyboard/Mouse Controller
  8.71  16/20-Key Encoder
  8.8   Mouse/Trackball/Spinner/Pedal
  8.81  Mouse
  8.82  uPD4701
  8.83  TC4584
  8.84  Analog pedal
  8.9   Printer
  8.A   Sega Billboard
  8.B   BACTA Datalogger
  8.C   Zapper
  8.C1  Nintendo R.O.B.
  8.D   Ticket Dispenser
  8.E   Winbond W83787F
  8.E1  Winbond W83977TF
  8.E2  Winbond IT8705F

  9.    Controller
  9.1   Floppy Disk
  9.11  MB89311
  9.12  8272
  9.13  MB4107
  9.14  MC6843
  9.15  WD2793
  9.16  1801VP1-128
  9.2   Hard Disk Controller
  9.21  WD1000
  9.22  WD2010
  9.23  IMI 5000H
  9.24  IMI 7000
  9.3   IDE
  9.31  EIDE
  9.4   ATA/ATAPI
  9.5   SCSI
  9.51  SCSI T10 commands
  9.52  53CF96
  9.53  53C700
  9.54  53C810
  9.55  NCR5380
  9.56  NCR5385
  9.57  NCR5390
  9.58  NCR539x
  9.59  MB87030
  9.5A  MB8935x
  9.5B  WD33C9x
  9.5C  AHA-1542
  9.5D  AHA-2940AU
  9.5E  uPD7261
  9.6   ISA
  9.7   PCI
  9.71  NCR53C825
  9.72  PCI-IDE controller
  9.73  PCI Bus Legacy
  9.73  AGP
  9.74  MPC105
  9.75  MPC106
  9.76  GT64010
  9.77  NEC VRC4373
  9.78  PLX PCI9050
  9.8   PIIX
  9.81  PIIX4
  9.9   PCMCIA
  9.A   Bus Controller
  9.B   USB
  9.C   Network
  9.C1  91C94/6
  9.C2  20020
  9.C3  66220
  9.C4  LAN
  9.C5  MB89374
  9.C6  Network Interface Device
  9.C7  MC6854
  9.C8  I82586
  9.C9  InterLan NP600A-3 Intelligent Protocol Processor
  9.CA  3COM 3C50x
  9.CB  Realtek RTL8xxx
  9.D   Centronics

 10.    Transceiver
 10.1   Analog Devices
 10.11  ADM485
 10.12  ADM619
 10.13  ADM708
 10.2   SP485
 10.3   HYC2485
 10.4   DS8921
 10.5   SN75179
 10.6   LMS75LBC176
 10.7   DS75160A

 11.    Optocoupler
 11.1   Sharp
 11.11  PC900
 11.12  PC910

 12.    Cassette / Cartridge / Floppy / Harddisk / CD / Laser Disc
 12.1   Cassette
 12.11  DECO Cassette System
 12.12  Multi Amenity Cassette System (MACS)
 12.13  SCSI Tape
 12.2   Cartridge
 12.21  Max-A-Flex
 12.22  PlayChoice-10
 12.23  Sega MegaTech
 12.24  Sega MegaPlay
 12.25  SNK NeoGeo
 12.26  Nintendo Super System (NSS)
 12.3   Floppy Disk
 12.31  Iomega Zip
 12.4   Imgtool
 12.5   CHD (Compressed Hunks of Data)
 12.6   HardDisk
 12.7   CD-ROM
 12.71  Matsushita CR589
 12.72  Stingnet ATAPI CD-ROM
 12.73  Toshiba XM-6402B CD-ROM
 12.8   DVD
 12.9   Laser Disc
 12.91  Pioneer PR-8210
 12.92  Pioneer LD-V1000
 12.93  Pioneer LD-V4200
 12.94  Philips 22VP931
 12.95  Philips VP415
 12.96  Sony LDP-1000
 12.97  Sony LDP-1450
 12.A   GDROM

 13.    Motherboard chipset
 13.1   Namco I/O PCB
 13.2   I750

 14.    Connectors

 15.    PC hardware
 15.1   Generic PC machine
 15.2   Slot
 15.21  PCI Slot
 15.3   Bus
 15.4   PC CARD
 15.5   ACPI
 15.6   Northbridge
 15.7   Southbridge
 15.8   Intel 440BX
 15.9   PIIX4E

 16.    Other
 16.1   PT8010
 16.2   Intel 8355
 16.3   WD11C00-17
 16.4   WD7600
 16.5   Atari 400/600/800
 16.51  Atari ST
 16.6   Acorn Archimedes
 16.7   Amiga
 16.8   Mega Drive
 16.9   Sega Master System

.................................................................................................................................................................................................................................



I1.    I/O chips

- 0.131u4            : Added emu\devtempl.h. Aaron Giles added new file devtempl.h which can be used to generate the DEVICE_GET_INFO function. Updated all the Namco I/O devices to use this, along with the 6821PIA and Voodoo.
- 15th March     2004: Charles MacDonald added I/O chip and partial VDP emulation for shdancer, shdancrj, shdancbl, shdancrb, moonwlkb and astormbl.
- 0.78u4             : Nicola Salmoria implements the 56XX and 58XX I/O custom chips (machine\namcoio.c) used by all the games. The I/O chips are now accurately simulated, fixing subtle nuances during normal operation and not-so-subtle ones in test mode; e.g. you can now scroll the grid in Mappy's test mode.
- 29th May       2001: David Graves streamlined the I/O handling in most of the Taito 68k based games.
- 28th June      1999: Manuel Abadia fixed the custom IO chip reset bugs in Mappy driver.
- 28th March     1999: Ernesto Corvi sent in a new Gaplus driver with preliminary Galaga 3 (clone) support added (not working because of a different custom I/O chip).
- 0.30               : Better emulation of the custom I/O chip in the Namco games [Aaron Giles].
- 0.21               : Support for GALAGA. Special thanks to Martin Scragg that provided us crucial information on custom I/O chips.
- 0.20               : Source: 8910_sh_update() doesn't emulate the 8910 audio if sound is disabled (the I/O ports of the chip are still emulated, since some games use them for input).



I2.    RIOT (RAM & I/O Timer)

I2.1   MOS 6530 MIOT

- 0.258              : Removed 'MOS 6530 MIOT' device. Changed 'MOS 6530 (new)' to 'MOS 6530 MIOT'. Removed machine\mos6530.cpp/h. Changed machine\mos6530n.cpp to machine\mos6530.cpp. Use template for pa/pb_w. Timer goes back to count mode when irq flag is cleared. Added pa/pb_w byte handler and irq callback to 6530 [hap].
- 0.257              : Use loops for repeated I/O callbacks, edge_w bits are on address, not data and added live timer status to savestate. Replaced convoluted timer implementation with one mostly copy pasted from Aaron's 6532riot. 6530 irq pin output is enabled when PB7 ddr is set to input. Removed a7800 workaround (machine\mos6530n.cpp) [hap].
- 0.253              : Keep timer running forever past terminal count, fixes incorrect RIOT behavior on (MESS) A7800/A7800p Side-by-side. Removed unreachable code [Curt Coder].
- 0.249              : Added 'MOS 6530 (new)' device. Fixed io_w offset error. Removed old, unused io_r/io_w functions [kmg].
- 0.221              : Simplified handlers [Osso].
- 0.212              : Changed description to 'MOS 6530 MIOT'.
- 0.210              : Stop killing Atari1050 with infinite recursion [AJR].
- 0.187              : Fixed copy-paste error (pa -> pb; machine\mos6530n.cpp) [Osso].
- 0.186              : Changed description to 'MOS 6530 RRIOT'.
- 0.174              : Fix for MOS6530n building (scripts\src\machine.lua) [Miodrag Milanovic].
- 0.168              : Allow One-On-One Basketball (1on1u) for the Atari 7800 to run again, based on http://mametesters.org/view.php?id=6060. This doesn't fix the (MESS) supercharger tho [David Haywood].
- 0.162              : (MESS) Fixed CBM C8050 floppy disk access (machine\mos6530n.c). Refactored CBM C2040 floppy to use MOS6530n. Fixed MOS6530n address maps, edge detect, timer not running at reset, timer (cur_live.period -> attotime::from_hz()) and timer last count. Set timer initial value. Atari A2600 calgames now boots [Curt Coder].
- 0.161              : Added machine\mos6530n.c/h. Rewritten MOS6530 to support timer (machine\mos6530n.c) [Curt Coder].
- 0.158              : Changed description to 'MOS6530 RRIOT'.
- 0.155              : Added MOS6530 to allied.c [Robbbert].
- 0.154              : Updated MOS6530 to use DEVCB2 [Fabio Priuli].
- 0.153              : Modernized MOS6530 device [Osso].
- 0.148u2            : Moved mess\machine\mos6530.c/h to mame\ [Curt Coder].
- NOTES: MOS Technology 6530 Memory, I/O and Timer Array
- DRIVERS: allied.cpp, gts1.cpp, gts80.cpp, gts80a.cpp and gts80b.cpp
- SOURCE: machine\mos6530.cpp


I2.2   MOS 6532 RIOT

- 0.258              : Removed '6532 RIOT' device. Changed 'MOS 6532 (new)' to 'MOS 6532 RIOT'. Removed machine\6532riot.cpp/h [hap].
- 0.257              : Replaced riot6532_device with mos6532_new_device (shared\exidysound.cpp). Removed use of devcb pointers. Update irqstate when enabling/disabling a7 irq (machine\6532riot.cpp) [hap].
- 0.249              : Added 'MOS 6532 (new)' device.
- 0.221              : Simplified handlers [Osso].
- 0.201              : Removed MCFG and old DEVCB accessors [Ryan Holtz].
- 0.188              : Added some WRITE_LINEs to set individual port lines through callbacks [AJR].
- 0.167              : Fixed Atari 2600 Homebrew ROM cart Stella's Stocking (AtariAge 2008) [David Haywood].
- 0.163              : Removed static TIMER_CALLBACK in favour of device_timer (machine\6532riot.c) [Osso].
- 0.162              : Rewrote the MOS6532 RIOT (machine\mos6530n.c). Refactored (MESS) Atari 2600, Atari 7800, CBM C2040, CBM C8050, CBM C8280, CBM D9060, Elektor Electronics Junior Computer, Interpod, Pitronics Beta, Rockwell AIM 65 and Synertek SYM-1 to use the new 6532. Fixed Atari 2600 E.T. [Curt Coder].
- 0.154              : Fixed usage of uninitialized members in riot6532_device [Oliver Stoeneberg]. Updated 6532RIOT to use DEVCB2 [Fabio Priuli]. Fixed for 6532RIOT, makes sound back in Gameplan driver [Miodrag Milanovic].
- 0.148u4            : Removed usage of 6532RIOT legacy calls (machine\6532riot.c/h, audio\exidy.c, starwars.c, drivers\firefox.c, gameplan.c/h, spectra.c, starwars.c/h, tomcat.c and tourtabl.c) [Miodrag Milanovic].
- 0.148u2            : Fixed uninitialized variables in machine\6532riot.c [Oliver Stoeneberg].
- 0.147u1            : 6532 RIOT internal timer is always running. Slightly better reset fix. Fixes several Atari 2600 regressions (MESS). Made reg_r method debugger friendly. Slightly improved startup values to fix more Atari 2600 regressions [Wilbert Pol].
- 0.145u2            : Added member read/write handlers to the 6532 RIOT [Aaron Giles].
- 0.144u1            : Fixed 6532 RIOT device changes causing missing sound in games [hap].
- 0.144              : 6532 RIOT output interrupt state only when it changes [Curt Coder].
- 0.139u2            : Added '6532 RIOT' device. Updated the 6532 RIOT device to no longer be legacy [Harmony].
- 0.134u1            : Converted 6532riot to DEVCB interfaces [Couriersud]: Updated all drivers. Converted drivers to RS/WS TMS5220 interface where appropriate. Removed quite some trampoline functions.
- 0.133u1            : The 6532 RIOT timer should keep spinning after a timeout (regression introduced in 0.126u2) [Wilbert Pol].
- 0.126u2            : Changed the 6532 RIOT device into a proper device. Rewrote the logic to be simpler and leverage the new attotime functions. Changed the I/O port setters to specify a mask, and changed the I/O port callbacks to pass in the previous value. Updated tourtabl and gameplan drivers to use the new device interface [Aaron Giles].
- 0.117u2            : Updated the 6532 riot interface to be more like the 6522via and 6821pia interfaces [Wilbert Pol].
- 0.117              : Changed the 6532riot code to split r6532_init into r6532_init and r6532_reset [Wilbert Pol].
- 0.116u4            : Improved the 6532riot timer implementation. Implemented irq callback support [Wilbert Pol].
- 0.111u2            : Changed 6532riot code to only allow initialization at init time [Nathan Woods].
- 0.82u2             : 6532 RIOT patch (fixes some things in MESS) [Judge].
- 0.78u5             : Rewrote machine\6532riot.c. This fixed the gfx problems and bad sound in the Gameplan driver, video\gameplan.c is no longer needed. Added PA7 adge detect and irq callback to machine\6532riot [Nicola Salmoria].
- 0.68               : Added machine\6532riot.c/h.
- NOTES: MOS Technology RAM-I/O-Timer. Game 'Star Wars' stored sound commands from the main CPU in the 6532 port A data register and the 6532 port B data register is interfaced to the TMS5220 data bus (see audio\starwars.c).
- PCB: R6532P (Qbert, Mtrap), SY6532A (Mplanets)
- DRIVERS: exidy.cpp, firefox.cpp, gottlieb.cpp, gts80.cpp, gts80a.cpp, gts80b.cpp, killcom.cpp, spectra.cpp, starwars.cpp, tomcat.cpp, tourtabl.cpp and victory.cpp
- SOURCE: machine\mos6530.cpp



I2.3   8155

- 0.222              : Allow writes to port registers to alter latches whether or not output mode is configured. Turn logging back off [AJR].
- 0.219              : Make timer more efficient by not counting each cycle [AJR].
- 0.212              : Update port outputs upon mode change [AJR].
- 0.208              : Simplified read/write handlers. Renamed "read" and "write" handlers to data_r and data_w, since these are neither complete nor typically-used accessors (machine\i8155.cpp) [AJR].
- 0.201              : Removed I8155 MCFG macros [Osso]. Eliminated unnecessary memory interface for internal RAM [AJR].
- 0.192              : Substantially rewrote timer emulation. Modernized logging. Abandon "RIOT" name properly belonging to MOS 6532. Provided separate device type for 8156. Regression fix for Golden Arrow (machine\i8155.cpp) [AJR].
- 0.190              : Cleanup timer start, a clock of 0 causes MAME to freeze [Robbbert].
- 0.181              : Attempt at fixing 8155 timer behavior so 8085 doesn't lose interrupts in Equites [AJR].
- 0.180              : Removed unnecessary tag() parameter from logerror calls [AJR].
- 0.154              : Converted i8155 to DEVCB2 [Fabio Priuli].
- 0.148u2            : Fixed uninitialized members in machine\i8155.c [Oliver Stoeneberg].
- 0.145u8            : I8155 timer regs can be read too (used by meyc8088 diagnostics). Simplified 8155 read_port + make sure portc is 6 bits wide (meyc8088.c expects d6,7 to be set on read) [hap].
- 0.145u7            : Defaulting LOG to off [hap].
- 0.142              : Added machine\i8155.c/h.
- NOTES: Intel 8155 RIOT => 2048-Bit Static MOS RAM with I/O Ports and Timer emulation.
- PCB: TMP8155 (Equites), M5L8155P (Splndrbt), NEC D8155HC (Hvoltage, Paranoia), 8155 (Bullfgtr)
- DRIVERS: amusco.cpp, equites.cpp, mephistp.cpp, meyc8088.cpp, paranoia.cpp, tourvis.cpp and unkhorse.cpp
- SOURCE: machine\i8155.cpp


I2.4   8156

- 0.192              : Substantial rewrite of 8155 timer emulation. Modernized logging. Abandon "RIOT" name properly belonging to MOS 6532. Provided separate device type for 8156. Regression fix for Golden Arrow (machine\i8155.cpp) [AJR].
- 0.145u6            : hap added i8156 device definition to machine\i8155.c.
- 0.142              : Added machine\i8155.c/h.
- NOTES: Intel 8156 RIOT - 2048-Bit Static MOS RAM with I/O Ports and Timer emulation. The only difference between 8155 and 8156 is that pin 8 (CE) is active low on the former device and active high on the latter. National's NSC810 RAM-I/O-Timer is pin-compatible with the Intel 8156, but has different I/O registers (including a second timer) with incompatible mapping. The interrupt in Space Bugger is generated by 8156 - very old combination chip containing 256*8 RAM (used as stack area), a timer and 8+8+6 ports. After game start all 8156 ports are set as inputs, timer is working in mode 3 - automatic reload. TC register is set to 0x7f. Timer input frequency is unknown. Output should be close to 1440 Hz.
- PCB: TMP8156 RIOT, 2048-Bit/256 x 8 Static MOS RAM with I/O Ports and Timer (Sbugger)
- DRIVERS: g627.cpp and sbugger.cpp
- SOURCE: machine\i8155.cpp


I2.5   NSC810

- 0.271              : Save internal state (machine\nsc810.cpp) [AJR].
- 0.245              : Converted to arrays rather than individually-numbered members [Ryan Holtz].
- 0.213              : Implemented port bit set/clear [Nigel Barnes].
- 0.208              : Simplify read/write handlers (machine\nsc810.cpp) [AJR].
- 0.166              : Moved NSC810 build to proper place (machine.lua and scripts\target\mame\mess.lua) [Miodrag Milanovic].
- 0.153: Added machine\nsc810.c/h. Added basic implementation of the NSC810 RAM-I/O-Timer device, and plugged it into the (MESS) Husky Hunter 2 driver. Fixed I/O port writing, fixing the keyboard on the Hunter 2 [Barry Rodewald].
- NOTES: National Semiconductor NSC810 RAM-I/O-Timer
- DRIVERS: madmoney2.cpp
- SOURCE: machine\nsc810.cpp



I3.    Interrupt controller

I3.1   8214

- 0.244              : Back out previous changes to device emulation except as a system-specific hack [AJR].
- 0.243              : PoC in separating INT ASSERT and CLEAR phases (machine\i8214.cpp) [Angelo Salese].
- 0.221              : Simplified handlers (machine\i8214.cpp) [Osso].
- 0.219              : Updated logging. Adjusted interrupt level check. Added combined B/SGS setter and bulk R setter [Ryan Holtz, Phil Bennett].
- 0.197              : Check pending interrupts when ETLG and INTE lines change [Sergey Svishchev].
- 0.191              : Changed description to 'Intel 8214 PICU'.
- 0.191              : Renamed IRQ to INT to agree with Intel pin names. Added callback for convenient interrupt vector latching [AJR].
- 0.178              : Fixed inverted data writes to I8214 PICUs in (MESS) CMI IIx [Ryan Holtz].
- 0.153              : Converted I8214 to DEVCB2 [Curt Coder].
- 0.148u2            : Fixed uninitialized member in machine\i8214.c [Oliver Stoeneberg].
- 0.142u1            : Added machine\i8214.c/h.
- NOTES: Intel 8214 Priority Interrupt Controller
- DRIVERS: (MESS) anzterm.cpp, cmi.cpp, konin.cpp, ms6102.cpp, pc8801.cpp, v1050.cpp
- SOURCE: machine\i8214.cpp


I3.2   8259

- 0.282              : Side effect protection [Sergey Svishchev].
- 0.251              : Treat slave IRQs as level-triggered even when LTIM = 0 [AJR].
- 0.222              : Z80/8085 slave PICs need 32 bit vectors [Carl]. Emulated three-cycle acknowledge for non-8086 mode (machine\pic8259.h). Moved recently-introduced inta_call hack down into the only Z80-based driver that still needs it. The hardware-accurate way of synthesizing multiple INTA pulses in a Z80 system (which involves rerouting what would otherwise be normal memory reads) is not so simple and deservedly rare [AJR].
- 0.209              : Avoid reacting to debugger reads [O. Galibert].
- 0.206              : Default input clocks to zero [AJR].
- 0.204              : NEC V5x ICU is always in x86 mode [Patrick Mackinlay].
- 0.198              : Use device_resolve_objects [AJR].
- 0.190              : Break up the MCFG_PIC8259_ADD macro [AJR].
- 0.189              : Removed hack used by M92 driver (HACK_get_base_vector(); machine\pic8259.h) [AJR].
- 0.186              : Changed description to 'Intel 8259 PIC'.
- 0.180              : Use resolve_safe to protect against segfaults [AJR].
- 0.171              : Added spurious irq 7 with logerror [Carl].
- 0.167              : Turn PIC8259 logging back off [David Haywood].
- 0.161              : Fixed a polling mode bug in PIC8259 [F. Ulivi].
- 0.160              : m_out_int_func() works even in polling mode - (MESS) Siemens PC-D depends on this, go figure [Carl].
- 0.156              : Priority and sfnm (machine\pic8259.c) [Carl].
- 0.154              : Removed PIC8259 trampolinese [Carl]. Fixed usage of uninitialized members in pic8259_device [Oliver Stoeneberg].
- 0.153              : (MESS) Cleaned up Apollo PIC8259 usage [R. Belmont].
- 0.149u1            : Added '8259 PIC' device.
- 0.148u5            : Continue modernization of PIC8259 (machine\pic8259.c/h, drivers\calchase.c, chihiro.c, fruitpc.c, funkball.c, gamecstl.c, gammagic.c, magtouch.c, mediagx.c, midqslvr.c, pcat_nit.c, pcxt.c, photoply.c, pinball2k.c, quakeat.c, queen.c, savquest.c, su2000.c, taitowlf.c, voyager.c, xtom3d.c and machine\pcshare.c). Get rid of anonymous timer (machine\pic8259.c). Switched to DEVCB2. Added PIC825 state save support [Wilbert Pol].
- 0.148u1            : Used modern accessors for I8259 (machine\pic8259.c) [Curt Coder].
- 0.147u3            : Added modern accessors to PIC8259 [Curt Coder]. Hooked up IDE irq straight to the PIC8259 in calchase.c, chihiro.c, funkball.c, gamecstl.c, mediagx.c, midqslvr.c, queen.c, taitowlf.c, savquest.c, voyager.c and xtom3d.c.
- 0.145u4            : Various PIC8259 fixes [Carl].
- 0.145u1            : Fixed PIC8259 set_irq_line and pic8259_w, this should fix some pic issues. When using level trigger mode we are taking current lines on EOI [Miodrag Milanovic].
- 0.142u5            : Carl and Miodrag Milanovic fixed PIC8259 edge triggering and non-specific EOI.
- 0.142u4            : Carl updated PIC8259 to be more according to documentation.
- 0.142u1            : Miodrag Milanovic added support for PIC8259 cascade mode, updated interface in all drivers.
- 0.140u2            : PIC8259 IRQ semantics fixes [Hans Ostermeyer].
- 0.137u1            : Miodrag Milanovic changed default initial state of PIC8259 to STATE_READY.
- 0.136u4            : Dirk Best replaced pic8259_set_irq_line with pic8259_irX_w write line handlers. Updated device to use DEVCB calls.
- 0.128u7            : Some PIC8259 updates [Wilbert Pol]: Fixed operation of edge-triggered interrupts. INT output line is now cleared when an IRQ is acknowledged. Implemented basic OCW3 features.
- 0.128u6            : Wilbert Pol added MDRV_PIC8259_ADD macro.
- 0.124u5            : Miodrag Milanovic added support for 8080/85 mode interrupts to the 8259 PIC.
- 0.124u3            : Wilbert Pol changed the PIC8259 implementation into a device.
- 0.101u2            : Added machine\pic8259.c/h.
- NOTES: Unicorn Microelectronics UM8259A Programmable Interrupt Controller
- PCB: 8259 (Mrflea)
- DRIVERS: amusco.cpp, calchase.cpp, chihiro.cpp, comebaby.cpp, fastinvaders.cpp, freeway.cpp, fruitpc.cpp, funkball.cpp, gammagic.cpp, m107.cpp, m72.cpp, m92.cpp, magtouch.cpp, mrflea.cpp, mtouchxl.cpp, pangofun.cpp, paokaipc.cpp, pcat_dyn.cpp, pcat_nit.cpp, pcxt.cpp, photoply.cpp, pinball2k.cpp, quakeat.cpp, queen.cpp, savquest.cpp, sis630.cpp, su2000.cpp, taitowlf.cpp, voyager.cpp and xtom3d.cpp
- SOURCE: machine\pic8259.cpp


I3.3   71059

- 0.167              : Use the uPD71059 in M72 driver instead of hacking the irq vectors for different games. Added uPD71059 device to M92 driver. Added uPD71059 device to M107 driver to avoid per-game irq vector base in the init [David Haywood].
- NOTES: NEC uPD71059 interrupt controller
- PCB: NEC D71059C (Dsoccr94, Inthunt, Gunforce), (Rtypeleo)
- DRIVERS: m72.cpp, m92.cpp and m107.cpp


I3.4   F3853

- 0.221              : Simplified handlers [Osso].
- 0.209              : F3856 bugfix (Note: Device not used anywhere in MAME yet, doesn't affect anything) [hap].
- 0.208              : Added preliminary support for F3856 PSU, enough to get (MESS) Boris Diplomat playable. Added F3851 PSU and preliminary F38T56 PSU [hap].
- 0.201              : Don't fire external interrupt automatically when enabled. Clear interrupt requests once they are taken. Overhaul interface and replace custom interrupt generation callback with DEVCB3 [AJR].
- 0.154              : Converted F3853 to use delegates [Fabio Priuli].
- 0.139u2            : Harmony updated the Fairchild F3853 SMI device to no longer be legacy.
- 0.129              : Moved cpu\f8\f3853.c/h to machine\f3853.c/h. Wilbert Pol changed the F3853 implementation into a device.
- 0.128u7            : Wilbert Pol added running_machine parameters to the F3853 callbacks.
- 0.128u6            : Nathan Woods re-synced F3853 core with MESS.
- 0.117u2            : Nathan Woods fixed up F3853 core to work with new timing code.
- 0.111u2            : Added cpu\f8\f3853.c/h.
- NOTES: Fairchild F3853 SRAM interface with integrated interrupt controller and timer (SMI). This chip is a timer shift register, basically the same as in the F3851.
- DRIVERS: (MESS) mk1.cpp and vidbrain.cpp
- SOURCE: machine\f3853.cpp


I3.5   6846

- 0.221              : Simplified handlers [Osso].
- 0.219              : Removed nonexistant CP1 output callback and added a CP1 input interface call [Joakim Larsson Edstrom].
- 0.212              : Fixed the timer modes. The bit definitions for the timer modes were backwards [68bit].
- 0.201              : MC6846 uses the E clock [AJR].
- 0.154              : Fixed usage of uninitialized members in mc6846_device [Oliver Stoeneberg].
- 0.153              : Converted MC6846 to DEVCB2 [Osso].
- 0.151              : Modernized MC6846 device [Osso].
- 0.148u2            : Moved mess\machine\mc6846.c/h to mame\ [Curt Coder].
- NOTES: The MC6846 chip provides ROM (2048 bytes), I/O (8-bit directional data port + 2 control lines) and a programmable timer.
- DRIVERS: (MESS) thomson.cpp
- SOURCE: machine\mc6846.cpp


I3.6   R10696

- 0.221              : Simplified handlers [Osso].
- 0.167              : R10696 typo/bug fix, thanks to PVS [Miodrag Milanovic].
- 0.157              : Added machine\r10696.c/h. Added Rockwell 10696 General Purpose Input/Output emulation WIP. Added IO chip U2 (10696) for NVRAM access to gts1.c driver. Connect the GTS1 dipswitches to another 10696 [Juergen Buchmueller].
- NOTES: Rockwell 10696 General Purpose Input/Output (I/O)
- DRIVERS: gts1.cpp
- SOURCE: machine\r10696.cpp


I3.7   RA17XX

- 0.237              : Fixed error message [Robbbert].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.221              : Simplified handlers [Osso].
- 0.157              : Added machine\ra17xx.c/h. Added preliminary emulation of the Rockwell A17XX chips (ROM, RAM, I/O) [Juergen Buchmueller].
- NOTES: Rockwell A17XX ROM, RAM and I/O chip. A ROM of 2048 x 8 bits is addressed whenever the RRSEL line (ROM/RAM select) is 0. A RAM of 128 x 4 bit is addressed when RRSEL is 1. The 16 I/O ports are addressed when the WI/O line is 1, i.e. whenever the CPU executes an IOL instruction. There are two basic I/O instructions: SES = Select Enable Status and SOS = Select Output Status. The lower 4 bits of the I/O address select one of 16 I/O lines.
- DRIVERS: gts1.cpp and recel.cpp
- SOURCE: machine\ra17xx.cpp


I3.8   Atmel ARM AIC

- 0.222              : READ/WRITE macros removal [Osso].
- 0.193              : Rewrote Atmel ARM AIC logic and implemented most features (machine\atmel_arm_aic.cpp) [MetalliC].
- 0.192              : Added machine\atmel_arm_aic.cpp/h. Creating devices for the Atmel ARM AIC [David Haywood].
- NOTES: ARM AIC (Advanced Interrupt Controller) from Atmel typically integrated into the AM91SAM series of chips see http://sam7-ex256.narod.ru/include/HTML/AT91SAM7X256_AIC.html. Current implementation only handles basics needed for PGM2.
- DRIVERS: pgm2.cpp
- SOURCE: machine\atmel_arm_aic.cpp


I3.9   AM9519

- 0.245              : Interrupt requests are latched [Patrick Mackinlay].
- 0.226              : AM9519 has no clock input (machine\am9519.h) [Patrick Mackinlay].
- 0.208              : Simplified read/write handlers (machine\am9519.cpp) [AJR].
- 0.201              : Removed MCFG macros and old DEVCB [Ryan Holtz].
- 0.195              : Added machine\am9519.cpp/h. Added AM9519 UIC device [Carl]. Replaced 8259 device with AM9519 in (MESS) superslave.cpp and trs80m2.cpp. Preliminary AM9519 hookup (MESS) dps1.cpp [AJR].
- NOTES: AM9519 Universal Interrupt Controller (UIC)
- DRIVERS: (MESS) ceres.cpp, digilog320.cpp, dps1.cpp, olyboss.cpp, superslave.cpp and trs80m2.cpp
- SOURCE: machine\am9519.cpp


I3.A   RST interrupt vector buffer

- 0.204              : Set default clock to 0 (machine\rstbuf.h) [AJR].
- 0.195              : Added machine\rstbuf.cpp/h. Created RST interrupt buffer device [AJR].
- NOTES: The hardware circuit emulated by this device, which is generally made of various TTL gates and buffers, combines three independent interrupt request lines into a single level trigger and also generates a 8080-compatible RST opcode vector when the CPU acknowledges the interrupt, reflecting the current state of all three inputs.
- DRIVERS: dynax.cpp, kurukuru.cpp, m72.cpp, m90.cpp, shisen.cpp and vigilant.cpp
- SOURCE: machine\rstbuf.cpp




I4.    UART (Universal Asynchronous Receiver and Transmitter)


I4.1   National Semiconductor

I4.11  INS8250

- 0.281              : Avoid setting data frame when bit encoding doesn't change (machine\ins8250.cpp) [Mark Garlanger].
- 0.261              : Implemented transmit Break functionality. Removed scratchpad register access to 8250 class chips (machine\ins8250.cpp) [Mark Garlanger].
- 0.227              : Initialized member [Sven Schnelle].
- 0.220              : Fixed a small bug in INS8250 that prevented module self-test to pass [fulivi].
- 0.218              : Ignore FIFO bits when clearing interrupt [Patrick Mackinlay].
- 0.215              : Fixed cleared pending THRE interrupt. The code notes that reading the iir register "will clear the int if this is the source of the int" and the code cleared a pending THRE interrupt if it was *pending*. This causes a lost THRE interrupt for the SWTPC 8121 terminal firmware and this locks up the TX side of the terminal. This occurred regularly when the ISR read this register upon a higher priority RX pending interrupt. The documented operation has been reinterpreted as only clearly the THRE interrupt if THRE is the highest priority interrupt and so is the pending interrupt *causing* the interrupt. This fixes that lost THRE interrupt for the SWTPC 8121 terminal [68bit].
- 0.209              : Simplified read/write handlers. Use shorter type values [cam900].
- 0.206              : Detect framing and parity errors; allow side effects of reads to be disabled. Allow writes to MSR with lower 4 bits zero to clear the associated interrupt. This is not confirmed behavior, but is logically consistent with nonzero bits causing interrupts when written [AJR].
- 0.203              : Added interrupt line read handler for later use [AJR].
- 0.202              : Added INS8250 to (MESS) Hazeltine 1420 [AJR]. Removed INS8250 MCFG macros [Ryan Holtz].
- 0.196              : Added hack to reset transmitter when baud rate is changed. This is needed to make the (MESS) VT102 printer loopback test pass because ins8250_uart_device does not fully emulate the baud rate generator as the independent block it really is, but relies on the all-purpose, somewhat faulty device_serial_interface implementation [AJR].
- 0.195              : Unbreak the (MESS) IBM pcjr (machine\ins8250.c) [Carl]. Added EEPROM and INS8250 UART to timetrv.cpp [AJR].
- 0.190              : Added and use INS8250 register defines. Replaced LCR, LSR and MCR bits by defines [Sven Schnelle].
- 0.186              : Changed description to 'National Semiconductor INS8250 UART'.
- 0.184              : Added 'National Semiconductor INS8250' device.
- 0.176              : Reassert THRE irq when setting mask [Carl].
- 0.172              : Don't clear THRE on write to the line status register of INS8250 [Dirk Best].
- 0.161              : msr (modem status register) is writeable, (MESS) IBM PC Jr depends on this [Carl].
- 0.155              : Registering save state in INS8250 [Wilbert Pol]. NS8250 fixes. Loopback: tx goes high and data is clocked at the correct rate instead of appearing instantly. Modem status register: Don't lose track of external signals when starting, resetting, switching loopback off, writing to register. Handshaking: Active low for consistency (RS232 port now defaults handshaking lines high and serial mouse dtr/rts handling has been adjusted). Call interrupt callback after clearing internal interrupt state when resetting. 8250 write protect 0x40 in line status register, this bit is used to track whether diserial is running and will call us back. mpz80 writes 0 to this bit and waits for it to be set again, it used to work because loopback was HLE'd. The 8250 datasheet says that transmission in loopback goes through the shift registers, the way the old code worked wouldn't test any send/receive functionality of the chip at all. It's unknown whether clearing this bit would cause the chip to start shifting, the datasheet says you shouldn't write to the register at all & it's reserved for testing the chip in the factory. Initialize m_regs.ier register to stop interrupts randomly being generated before reset, fixes Portfolio booting [smf].
- 0.154              : Fixed usage of uninitialized member in ins8250_uart_device [Oliver Stoeneberg]. Converted ins8250_device to DEVCB2 [Osso].
- 0.152              : Added timer callbacks to terminal and INS8250 [Carl].
- 0.149u1            : Use clock-div rate setting for more precision (machine\ins8250.c) [Carl].
- 0.149              : Added PC16552d to INS8250. Set thre only if tx fifo is cleared and unset received data available if rx FIFO is cleared [Carl].
- 0.148u4            : Fixed INS8250 msr bits [Carl].
- 0.145u5            : Fix for ibmpcjr error (machine\ins8250.c) [Carl].
- 0.145u4            : Support for the 16550 fifo in INS8250 [Carl]. Some more && -> & cases found (machine\ins8250.c) [clang].
- 0.145u2            : Rewrite INS8250 to use diserial, updated Microtouch to modern, made it serial device and updated connected drivers (adp.c, cd32.c, magtouch.c, meritm.c, pcat_nit.c and tmaster.c). Serial rx line high on start and fix for msr register. Proper start state of ins8250 [Carl].
- 0.142u6            : Fix for INS8250 enabling better mouse support in PC driver [Carl]. Refactored the INS8250 interrupt line to use DEVCB [Curt Coder].
- 0.138u2            : Added machine\ins8250.c/h. PC-AT New Image Technologies driver update [Mariusz Wojcieszek]: Added VGA emulation from MESS. Added INS8250 emulation from MESS. Added format decimal support to Microtouch. Added rom banking and inputs to pcat_nit games. streetg(2) now boot properly. Fixed game_prg roms loading.
- NOTES: National Semiconductor 8250 UART interface and emulation.
- PCB: 8250 (Rocnrope), UMC 8936CS-UM8250B Programmable asynchronous communications element (Filetto)
- DRIVERS: jackpot.cpp and sis630.cpp
- SOURCE: machine\ins8250.cpp


I4.12  NS16450

- 0.186              : Changed description to 'National Semiconductor NS16450 UART'.
- 0.145u2            : Added 'National Semiconductor NS16450' device (machine\ins8250.c).
- DRIVERS: aristmk5.cpp, freeway.cpp, magtouch.cpp, pcat_nit.cpp and timetrv.cpp
- SOURCE: machine\ins8250.cpp


I4.13  NS16550

- 0.186              : Changed description to 'National Semiconductor NS16550 UART'.
- 0.149              : Converted MeritM driver to use NS16550 and not PC16552d [Carl].
- 0.145u2            : Added 'National Semiconductor NS16550' device (machine\ins8250.c).
- NOTES: National Semiconductor PC16550DN UART
- PCB: PC165500N (MegaTouch3/5)
- DRIVERS: aristmk6.cpp, atlantis.cpp, comebaby.cpp, firebeat.cpp, fromanc2.cpp, funkball.cpp, jackpool.cpp, ksys573.cpp, merit3xx.cpp, meritm.cpp, midqslvr.cpp, mtouchxl.cpp, pcat_dyn.cpp, stingnet.cpp, tetrisp2.cpp, twinkle.cpp and vegas.cpp
- SOURCE: machine\ins8250.cpp


I4.14  PC16552D

- 0.186              : Changed description to 'National Semiconductor PC16552D UART'.
- 0.149              : Removed machine\pc16552d.c/h. Added 'National Semiconductor PC16552D' device (machine\ins8250.c). Converted MeritM driver to use NS16550 and not PC16552d. Added PC16552d to INS8250 [Carl].
- 0.128u6            : Atari Ace modified the pc16552.h interface to eliminate some more global Machine variables. More deprecat.h includes eliminated.
- 0.110u5            : Added machine\pc16552d.c/h. Added PC16552D DUART emulation [Ville Linde].
- NOTES: National Semiconductor PC16552D Dual Universal Asynchronous Receiver/Transmitter with FIFOs
- DRIVERS: firebeat.cpp, ksys573.cpp and stingnet.cpp
- SOURCE: machine\ins8250.cpp



I4.2   Intel 8251 USART

- 0.281              : Don't do binary math on bool. Removed unneeded calc_parity function (machine\i8251.cpp) [hap].
- 0.278              : Implemented internal serial interrupt for V50 (v5x_scu_device; machine\i8251.cpp) [Devin Acker].
- 0.230              : Allow write_cts before device has started [AJR].
- 0.219              : Resolved callbacks at device_resolve_objects time [AJR].
- 0.216              : Required initial state to enable receiver of a 8251a and also to avoid sending start bit to diserial on reset and get framing error [AJR].
- 0.215              : Modernized debug printouts [Joakim Larsson Edstrom].
- 0.214              : Preliminary addition of synchronous support: Can transmit and receive with one sync byte. Added bisync support. Updated list of save-state variables [Robbbert].
- 0.208              : Allow read side effects to be disabled [AJR].
- 0.206              : Flag parity and framing errors in status register. Protect some members no longer subjected to hacky public use [AJR].
- 0.204              : Minor tidy on v5x_scu variant [Patrick Mackinlay]. Implemented send break command [AJR].
- 0.202              : Provided standard read/write handlers and eliminated memory space as argument [AJR].
- 0.196              : Added XMIT FLAG polling to (MESS) DEC VT100 using new i8251 line read handler [AJR].
- 0.190              : Fixed setup for sync byte in 8251 [Robbbert].
- 0.186              : Changed description to 'Intel 8251 USART'.
- 0.185              : Improved logging; restrict external command_w and mode_w access to V53 variant [AJR].
- 0.182              : Make receive more reliable, cleaned up a little [Vas Crabb].
- 0.176              : Added rtscts flow control for rs232\null_modem.cpp and relevant fix to i8251 [Sergey Svishchev]. RTS and DTR outputs now use negative logic (0 = active) [F. Ulivi].
- 0.168              : Improved I8251 handling of tx enable/disable bit, RS232 diagnostic on. (MESS) HP 64000 is ok now [F. Ulivi].
- 0.165              : Separated rx and tx data buffers. Updated (MESS) HP 64000 driver [F. Ulivi].
- 0.155              : Added save state to machine\i8251.c [Wilbert Pol].
- 0.154              : Fixed usage of uninitialized members in i8251_device [Oliver Stoeneberg]. Fixed communication between (MESS) Yamaha FB-01 midi-in and 8251 (added receive_register_reset() to 8251) [Wilbert Pol].
- 0.153              : Expose less of the diserial internals (emu\diserial.h), which has meant adding i8251_device::write_cts. Converted I8251 to DEVCB2. Fixed write_txc [smf]. As per the i8251 manual, disabling Tx mid-byte should wait for transmission to finish [R. Belmont]. Fixed DSR status bit [Curt Coder].
- 0.152              : Replaced read rx/cts/dcd callbacks in I8251 with write handlers, which allows multiple chips to be connected together without using glue methods [smf].
- 0.149              : Improved i8251 interface [Curt Coder].
- 0.148u5            : Implemented 16X/64X clock modes in i8251 [Curt Coder].
- 0.148u2            : Fixed uninitialized members in machine\i8251.c [Oliver Stoeneberg].
- 0.148u1            : Disabled logerror spam in i8251 driver [Curt Coder].
- 0.146              : i8251 "reset" bit is only documented to revert to looking for a mode byte, not reset the entire chip [R. Belmont].
- 0.145u1            : Phil Bennett added DSR input readback to i8251.
- 0.144u5            : Implemented i8251 transmit and receive data callbacks [Barry Rodewald].
- 0.143u5            : Added machine\i8251.c/h. Added '8251 USART' device (machine\i8251.c).
- NOTES: Intel 8251 Universal Synchronous/Asynchronous Receiver Transmitter code
- PCB: 8251 (Mmpanic, PPKing), 8251A (Fortecar), i8251A USART (Turbosub), 82C51 (Model1)
- DRIVERS: bingoc.cpp, bolsaint.cpp, calomega.cpp, ecoinfr.cpp, flashbeats.cpp, konmedal.cpp, model1.cpp, model2.cpp, model3.cpp, segam1.cpp, segaxbd.cpp, seibucats.cpp and speedbsk.cpp
- SOURCE: machine\i8251.cpp



I4.3   MB89371

- 0.283              : Rewrite MB89371 as a fully functional device (machine\mb89371.cpp) [R. Belmont].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.221              : Comment out debug code [smf].
- 0.149              : Added machine\mb89371.c/h. Added skeleton MB89371 device [smf].
- NOTES: Fujitsu MB89371 Dual Serial UART
- SOURCE: machine\mb89371.cpp
- GAMES: Crypt Killer (Konami 1995)


I4.4   NEC

I4.41  uPD7001

- 0.221              : Added machine\upd7001.cpp/h. New device (NEC uPD7001 A/D Converter) [AJR].
- NOTES: NEC uPD7001 CMOS Serial I/O Analog-to-Digital Converter
- PCB: uPD7001C (Sxyreact)
- DRIVERS: ssv.cpp
- SOURCE: machine\upd7001.cpp


I4.42  uPD71051
- SOURCE: drivers\ssv.c - uPD71051 (UART)
- PCB: NEC uPD71051C Serial Control Unit, DIP28 (CPS2), NEC D71051 (Janjans2), D71051GU (SegaModel3, Bel, Scud), uPD71051 (Mslider), NEC D71051 (Harley)


I4.5   IM6402

- 0.255              : Removed ugly hack to force bits into receiver and make it work the normal way instead (machine\im6402.cpp) [AJR].
- 0.221              : Simplified handlers (machine\im6402.cpp) [Osso].
- 0.202              : Removed IM6402 MCFG macros [Ryan Holtz].
- 0.199              : Changed description to 'Intersil IM6402 UART'.
- 0.177              : Reset receive/transmit registers after data frame is changed [Curt Coder].
- 0.153              : Converted IM6402 to DEVCB2 [Curt Coder].
- 0.152              : Replaced read rx callback in IM6402 with a write handler, which allows multiple chips to be connected together without using glue methods [smf].
- 0.149              : Added RS-232 ports to machine\im6402.c [Curt Coder].
- 0.148u2            : Fixed uninitialized members in machine\im6402.c [Oliver Stoeneberg].
- 0.146u1            : WANGPC Keyboard WIP from MESS (machine\im6402.c). Fixed POST serial and keyboard errors [Curt Coder].
- 0.144u7            : Added machine\im6402.c/h. Curt Coder added Intersil IM6402 UART emulation.
- NOTES: Intersil IM6402 Universal Asynchronous Receiver/Transmitter emulation
- DRIVERS: (MESS) kyocera.cpp, wangpc.cpp and wicat.cpp
- SOURCE: machine\im6402.cpp


I4.6   S2350

- 0.262              : Added machine\s2350.cpp/h. Added AMI S2350 USRT device. Frame format configuration is not implemented yet [Mark Garlanger].
- NOTES: American Microsystems, Inc. (AMI) S2350 Universal Synchronous Receiver/Transmitter(USRT)
- DRIVERS: ?
- SOURCE: machine\s2350.cpp




I4.7   General Instruments

I4.71  AY-3-1013

- 0.221              : Simplified handlers [Osso].
- 0.218              : Better EOC timing with two stop bits. Improved logging messages [AJR].
- 0.207              : Removed baud clock generation from device emulation (not a built-in UART feature) [AJR].
- 0.201              : Removed MCFG macros and added default input clock. Get rid of the DEVCB2 stuff [AJR].
- 0.196              : Privatized [rt]x_process. Fixed receiver desync when next start bit arrives early. Fixed receiver synchronization at start bit [AJR].
- 0.194              : Added RCP/TCP line write control [AJR].
- 0.191              : Added notes about more UART clones [AJR].
- 0.191              : Changed description to 'AY-3-1013 UART'.
- 0.171              : Fixed two swapped pin functions. Hooked up 2x AY-3-1013 UARTS to Xerox NoteTaker [Lord Nightmare].
- 0.147              : Added mess\machine\ay31015.c/h. Merge of MESS sources [Miodrag Milanovic].
- DRIVERS: (MESS) ampex.cpp, cm1800.cpp, hazeltin.cpp, hp2640.cpp, hpz80unk.cpp, mcb216.cpp, micral.cpp, ms6102.cpp, nascom1.cpp, notetaker.cpp, ptcsol.cpp, sapi1.cpp, sorcerer.cpp and tv912.cpp
- SOURCE: machine\ay31015.cpp


I4.72  AY-3-1015

- 0.203              : Added keyboard, cursor and scrolling to (MESS) Zentec Zephyr [AJR].
- 0.196              : UART loopback test passes in (MESS) Dialogue 80. Added READ8 and WRITE8 handlers to be placed in memory maps; allow reads to reset DAV automatically. Fixed receiver desync when next start bit arrives early [AJR].
- 0.195              : Replaced "status changed" notifier with line callbacks. Make SI and SO line callbacks as well. Replaced generic pin setters and getters with READ_LINE and WRITE_LINE handlers [AJR].
- 0.194              : Added RCP/TCP line write control [AJR].
- 0.191              : Changed description to 'AY-3-1015 UART'.
- 0.171              : Fixed two swapped pin functions in AY-3-1015 UART [Lord Nightmare].
- 0.154              : Converted AY-3-1015 to DEVCB2. Blind attempt at fixing AY-3-1015 problems (can't repro) [Osso]. Fixed usage of uninitialized members in ay31015_device [Oliver Stoeneberg].
- 0.149              : Modernized AY-3-1015 device and added save state [Fabio Priuli].
- 0.148u2            : Moved mess\machine\ay31015.c/h to mame\ [Curt Coder].
- NOTES: AY-5-1013 UART. Code for the AY-3-1014A, AY-3-1015(D), AY-5-1013(A) and AY-6-1013 UARTs. The HD6402 UART is compatible with the AY-3-1015 UART.
- DRIVERS: (MESS) nascom1.cpp, ptcsol.cpp, sorcerer.cpp, trs80.cpp and z80ne.cpp
- SOURCE: machine\ay31015.cpp





I4.8   DUART

I4.81  MC68681

- 0.283              : Added received data to FIFO in loopback mode (machine\mc68681.cpp) [Nigel Barnes].
- 0.280              : Fixed TX disable bug (machine\mc68681.cpp) [Patrick Mackinlay].
- 0.278              : Ignore TX enable if already enabled [Patrick Mackinlay].
- 0.274              : Small cleanup [hap].
- 0.271              : Unambiguous xr68c681 control blocks. 'SC28C94 QUART' has 64 registers (machine\mc68681.cpp) [Angelo Salese].
- 0.258              : Idle tx lines after transmitter reset (machine\mc68681.cpp) [Patrick Mackinlay].
- 0.256              : Separated transmitter holding and shift registers [Patrick Mackinlay]. Delay setting of TxRDY until start bit time has passed (machine\mc68681.cpp), fixes DUART test on (MESS) AT&T 630 [AJR].
- 0.233              : Wait until transmitter is actually empty to set TxEMT [AJR].
- 0.229              : Ignore tx enable if already enabled [Patrick Mackinlay].
- 0.227              : Output counter ready on OP3. Suppress unnecessary interrupt callbacks. Fixed counter clock rate calculation [Patrick Mackinlay].
- 0.224              : TX/RX clocking from timer fixed and added partial support for break signal [fulivi].
- 0.211              : Correct MC68340 module baud rate calculation [R. Belmont]. Save a few more registers [AJR].
- 0.209              : Disabled side effects for interrupt acknowledgment [AJR].
- 0.206              : Eliminated space and mem_mask arguments from read/write handlers. Detect framing and parity errors, storing flags with FIFO characters [AJR].
- 0.201              : Added Exar XR68C681 support to MC68681 with MISR register and extended baud rate [Joseph Zatarski].
- 0.192              : DUART drives (MESS) Micro-Term 5510 EEPROMs (mc68681_base_device::ip6_w). Distinguish SCN2681 and MC68681 DUART types. Use MCFG_DEVICE_ADD instead of custom macro [AJR].
- 0.190              : Added the DUART compatible 68340 serial module (machine\mc68681.cpp) [Joakim Larsson Edstrom].
- 0.182              : Preliminary support for SC28C94 QUART. Channels C and D can now transmit properly for sc28c94 [R. Belmont].
- 0.176              : Added op tx/rx status lines [Carl].
- 0.155              : Fixed usage of uninitialized member in mc68681_device [Oliver Stoeneberg].
- 0.154              : Support MC68681 timer-driven serial channels. Fixes SC4 fruit machine games [R. Belmont]. Fixed usage of uninitialized member in mc68681_device and mc68681_channel [Oliver Stoeneberg].
- 0.153              : Changed machine\n68681.c/h to machine\mc68681.c/h. Removed machine\68681.c/h. Added 'MC68681 DUART' device (machine\mc68681.c). Modernized N68681 and killed config struct in favor of DEVCB2. Follow Aaron's official DEVCB2 pattern. Implement OP3 toggle on timer expire and input delta interrupts. We're going to start phasing out the old pull method of reading the input ports in order to facilitate the input delta handling. Make loopback operate at the current baud rate instead of instantaneously. Fixes (MESS) 'DECtalk DTC-01' DUART self-test [R. Belmont]. Changed parity & stop bits to an enum (you can now pass in 1.5). I've updated the uarts that were testing for 1.5 stop bits to pass that in, but there are probably others & 1.5 stop bits is converted to 2 by diserial. However the 68681 requires stop bits to be specified in clocks, so this will change in the future. Replaced synchronous flag with start bit count, as some uarts can use a start bit in synchronous mode & that whether there is a start bit is all the flag is currently controlling. Updated rs232 terminal to allow startbits, stop bits 1.5 to be specified (although that is currently not supported by diserial) and individual transmit and receive baud rates [smf]. Start removing usage of deprecated 68681 INPORT_CALLBACK. (MESS) Cat: Removed hacks required by the old 68681 implementation; keyboard works again. Fixed a few uninitialized variables, beefed up optional logging. Return bits 6 and 7 of the input port register correctly [R. Belmont]. Fixed the DUART ip pins so they don't accidentally clear each other's state on device_write_line; this fixes the Canon Cat printing in MESS. Only clear input state on start, not reset. Don't trust the start order [Lord Nightmare]. Removed old 68681 duart [Miodrag Milanovic].
- 0.149u1            : Converted Hard Drivin' driver to use modern N68681 device [Osso].
- 0.148u2            : Fixed uninitialized members in machine\n68681.c [Oliver Stoeneberg].
- 0.148u1            : Fixed N68681 trashing of the serial parameters when ACR is updated. (MESS) Converted ESQ-1 to use N68681, hooked up MIDI I/O, mapped more front panel buttons [R. Belmont].
- 0.148              : Added machine\n68681.c/h. Checkpoint of "n68681" modernized, diserial-ized 68681 device. This covers the modernization aspect; the diserial-ization comes next. Do not convert other drivers to use this yet. Preliminary working DUART N68681 diserial-based I/O. Fixed compile on MacOSX 10.6.8 (machine\n68681.c) [R. Belmont].
- 0.146u1            : Fixed 68681 counter/timer implementation. Use the common 68681 DUART implementation in audio\taito_en.c [Phil Bennett].
- 0.146              : DUART fix for counter mode making SC4 not assert (machine\68681.c) [Miodrag Milanovic]. 68681 DUART timers start immediately; unlike counters they don't wait for a start command. Fixed MC68681 generation of spurious interrupts, and provide ASSERT/CLEAR states to the IRQ callback [R. Belmont].
- 0.141u2            : 68681 patch to fix DECTalk's startup test in MESS [Hans Ostermeyer].
- 0.140u2            : Hans Ostermeyer fixes for 68681 loopback mode.
- 0.134u1            : R. Belmont supported external baud rates in the MC68681 DUART.
- 0.134              : Lord Nightmare fixed 68681/2681 duart, when a channel is in loopback mode, do not actually transmit bytes sent to that duart channel over the TX pin.
- 0.133u5            : Lord Nightmare added loopback mode and counter/timer modes 3 and 6 to 68681 DUART, self-tests now pass in DECTalk in MESS.
- 0.127              : Roberto Zandona began implementing 68681 device in Skat TV.
- 0.125u5            : Updated 68681 DUART [Mariusz Wojcieszek]: Converted to device interface. Converted to 8 bit device. Added input and output port. Added X1/16 timer.
- 0.124u4            : Added machine\68681.c/h. Mariusz Wojcieszek added preliminary 68681 DUART.
- NOTES: The main incompatibility between the 2681 and 68681 (Signetics and Motorola each manufactured both versions of the chip) is that the 68681 has a R/W input and generates a 68000-compatible DTACK signal, instead of using generic RD and WR strobes as the 2681 does. The 68681 also adds a programmable interrupt vector, with an IACK input replacing IP6.
- PCB: Signetics SCN68681C1N40 Dual Asynchronous Receiver/transmitter (Skattv, Tm3k, Tm4k), MC68681 (Groundfx, Scfinals), MC68681P (UART) (F15se)
- DRIVERS: adp.cpp, artmagic.cpp, bfm_sc4h.cpp, bfm_sc5sw.cpp, galastrm.cpp, goldngam.cpp, groundfx.cpp, gunbustr.cpp, harddriv.cpp, manohman.cpp, maygay1bsw.cpp, maygayv1.cpp, micro3d.cpp, stellafr.cpp, superchs.cpp, taito_f3.cpp, taitojc.cpp, tmaster.cpp, undrfire.cpp, vlc.cpp and wildpkr.cpp
- SOURCE: machine\mc68681.cpp




I5.    DMA controller

I5.1   MC6844

- 0.220              : Clean up [Vas Crabb].
- 0.219              : Added machine\mc6844.cpp/h. Added Motorola MC6844 DMA controller (devicified from (MESS) swtpc09.cpp) [Joakim Larsson Edstrom].
- NOTES: MC6844 DMA controller
- PCB: MC6844P-CM88708 (Cheyenne)
- DRIVERS: (MESS) + audio\exidy440.cpp (* MC6844 DMA controller interface)
- SOURCE: machine\mc6844.cpp


I5.2   I8256

- 0.282              : Clean up (machine\i8256.cpp) [Vas Crabb].
- 0.281              : Added machine\i8256.cpp/h. Added Intel 8256 MUART. Added lamps and layout to adp\stella8085.cpp [stonedDiscord]. Don't do binary math on bool. Removed unneeded calc_parity function. Small cleanup [hap].
- NOTES: Intel 8256AH Multifunction microprocessor support controller
- PCB: P8256AH (bingor5)
- DRIVERS: stella8085.cpp
- SOURCE: machine\i8256.cpp


I5.2   I8257

- 0.283              : Make the driver handle verify cycles since the DMAC only does an address strobe (machine\i8257.cpp) [Carl].
- 0.254              : Minor logging improvement (machine\i8257.cpp) [AJR].
- 0.236              : Fixed 8257 DMA so TC can work with multiple devices [Carl].
- 0.221              : Simplified handlers (machine\i8257.cpp) [Osso].
- 0.217              : Modernized struct member save registration [AJR].
- 0.215              : Various small improvements: Synchronize at a couple of critical points. Allow read side effects to be suppressed while debugging. Improved TC timing. Allow HLDA to abort DMA cycle. Don't clear request input state when device is reset [AJR].
- 0.202              : Removed I8257 MCFG macros. Removed no-longer-needed old-style configurators [Ryan Holtz].
- 0.196              : Cleanup [Vas Crabb].
- 0.195              : Don't clear DRQ on tc [Carl].
- 0.193              : Added LOG messages [Joakim Larsson Edstrom].
- 0.186              : Changed description to 'Intel 8257 DMA Controller'.
- 0.154              : Changed machine\8257dma.c/h to machine\i8257.c/h. Updated i8257 to DEVCB2 [Fabio Priuli]. New 8257 based on AM9517a (replaced 8257dma in (MESS) fanucspmg.c). Added i8257 safety. Converted (MESS) Radio-86RK to new 8257. Fixed i8257 off-by-one. (MESS) Unior doesn't quite display properly. Replaced machine\8257dma.c in dkong and kill it [Carl]. Removed some unused macros [Osso].
- 0.146u1            : Removed memconv.h usage [Miodrag Milanovic].
- 0.142u3            : Added 'Intel 8257' device (machine\i8257.c).
- 0.142u1            : Curt Coder fixed the I/O address in Intel 8257 DMA operations.
- 0.139u2            : Harmony updated the i8257 DMA device to no longer be legacy.
- 0.135u1            : Curt Coder refactored i8257 DMA to use DEVCB.
- 0.126u4            : 8257DMA device now require device callback handlers instead of machine handlers. Updated affected drivers accordingly [Couriersud].
- 0.126u2            : Miodrag Milanovic fixed 8257 DMA terminal count stop for autoload mode and added callback function existence check.
- 0.125u7            : Implemented 8257 DMA controller as proper device [Couriersud]: Rewrote 8257dma.[ch]. Updated dkong.c accordingly.
- 0.125u3            : Implemented autoload mode in 8257 DMA [Miodrag Milanovic]: Added support for autoload mode. Fixed bug in calculating count.
- 0.122u4            : Couriersud fixed a misleading comment in 8257dma.h.
- 0.121u3            : Added machine\8257dma.c/h. Couriersud hooked up and written 8257 DMA controller. All dkong, dkongjr based, Epos and 2650 based games now use the 8257.
- NOTES: Intel 8257 DMA Controller
- PCB: upD8257C NEC DMA Controller (Shootgal)
- DRIVERS: dkong.cpp and fastinvaders.cpp
- SOURCE: machine\i8257.cpp



I5.3   I8237

- 0.149              : Removed machine\8237dma.c/h. Convert its remaining users and kill it [Carl].
- 0.148u2            : Fixed uninitialized member in machine\8237dma.c [Oliver Stoeneberg].
- 0.147              : PC hardware: Cleanup the end-of-dma notifications (machine\8237dma.c) [O. Galibert].
- 0.146u1            : Refactored PC1512 to use the new 8237A [Curt Coder]. Removed memconv.h usage in 8237dma.
- 0.145u1            : Hans Ostermeyer fixed uninitialized variable in DMA8237.
- 0.142u1            : Wilbert Pol added cascade mode support to 8237DMA.
- 0.140u2            : Hans Ostermeyer added 8237DMA memory-to-memory transfers.
- 0.139u4            : Wilbert Pol initialize the 8237DMA command register to 0 on reset.
- 0.139u2            : Harmony updated the i8237 DMA device to no longer be legacy.
- 0.135u1            : Curt Coder refactored i8237 DMA to use DEVCB.
- 0.134u3            : Mariusz Wojcieszek fixed DMA write mask register in 8237DMA.
- 0.132u1            : Made the 8237 DMA controller emulation more accurate by implementing it as a state machine. Deprecated the dma8237_run_transfer function [Wilbert Pol].
- 0.128u6            : Wilbert Pol added MDRV_DMA8237_ADD macros.
- 0.124u2            : Wilbert Pol changed the 8237DMA implementation into a device.
- 0.101u2            : Added machine\8237dma.c/h.
- GAMES: mediagx.c + taitowlf.cpp
- SOURCE: machine\8237dma.cpp
- PCB: Intel8237A functionally compatible (Radr), Fujitsu MB89237A DMA Controller


I5.4   AM9516

- 0.253              : Added preliminary (very incomplete) Am9516 UDC configuration to (MESS) sun3.cpp [AJR].
- 0.252              : Start DMA cycle after chain on hardware request [Patrick Mackinlay].
- 0.247              : General improvements [Patrick Mackinlay].
- 0.246              : Added machine\am9516.cpp/h. Added new AM9516 device. Bug fixes [Patrick Mackinlay].
- NOTES: Am9516 Universal DMA Controller, http://bitsavers.org/components/amd/_dataBooks/1989_AMD_Personal_Computer_Products.pdf
- DRIVERS: (MESS) mg1\mg1.cpp and tektronix\tekigw.cpp
- SOURCE: machine\am9516.cpp



I5.5   AM9517A

- 0.237              : Store actual line state in status register, correcting to logical state when used. Reverted previous 0.234 change that corrupted DREQ input state when the mask register was written to. Added configuration methods to define initial state for DREQ inputs being active low (or high). Added a few more internal helper functions. Disable side effects of reads for debugging. Fixes (MESS) Apollo DN3000 machine cannot load programs from tape [AJR].
- 0.234              : Setting mask bits also sets status [Patrick Mackinlay].
- 0.228              : Simplify software request handling [Patrick Mackinlay].
- 0.221              : Assert EOP during rather than after final DMA transfer. uPD765 may not care much about the timing of this signal, but other devices (notably NCR5380) expect it to occur simultaneously with the read/write strobe. This *might* break drivers\devices that expect EOP to be continuously active as it was previously emulated, rather than pulsed. Those likely need to latch the edge of EOP or one of the ACK signals [AJR].
- 0.217              : Modernized struct member save registration [AJR].
- 0.208              : Simplified read/write handlers (machine\am9517a.cpp) [AJR].
- 0.206              : Silence logging. Added EISA variant. Note: The EISA_DMA device represents the 82C37A-compatible DMA devices present in EISA bus systems, in particular those embedded within the i82357 Integrated System Peripheral. The device supports 32 bit addressing, 32 bit data sizes, and 24 bit transfer counts, allowing DMA across 64k boundaries. It also adds stop registers, supporting ring-buffer memory arrangements [Patrick Mackinlay].
- 0.204              : Added 16 bit transfer support to v5x_dmau variant [Patrick Mackinlay].
- 0.200              : Removed MCFG macros [Vas Crabb].
- 0.173              : Added clone (PC Transporter DMAC/PCXPORT_DMAC) with the non-standard mask behavior of the PC Transporter ASIC (machine\am9517a.cpp) [Carl, R. Belmont].
- 0.160              : AM9517A register layout is different and it can do wider address range, so not quite a drop-in, and will need more work, but still seems to be related [David Haywood].
- 0.157              : Added missing save state to am9517a_device, fixes (MESS) mikromik.c save state problem [Osso].
- 0.154              : Converted AM9517A to DEVCB2 [Osso].
- 0.148u2            : Added state saving to AM9517a [Curt Coder]. Fixed uninitialized variables and member in machine\am9517a.c [Oliver Stoeneberg].
- 0.148              : (MESS) Make Tandy 1000 286s post. Make the Tandy's and other PC compatibles use the AM9517a (mess\drivers\pc.c). They can read floppies and boot now [Carl].
- 0.147u2            : Don't grossly fail on AM9517A verify [O. Galibert]: The verification itself is not done, the obvious implementation proving wrong. A test case is the IBM5150 floppy format command, which uses verify when reading just-formatted sectors.
- 0.147              : PC hardware: Cleanup the end-of-dma notifications (machine\am9517a.c) [O. Galibert].
- 0.146u4            : Added proper contents to AM9517A [Carl].
- 0.146u1            : Added machine\am9517a.c/h. Added 'AM9517A' device. Driver now boots from WANGPC floppy [Curt Coder].
- NOTES: AMD AM9517A Multimode DMA Controller emulation
- DRIVERS: calchase.cpp, comebaby.cpp, fruitpc.cpp, funkball.cpp, gamecstl.cpp, gammagic.cpp, magtouch.cpp, mediagx.cpp, midqslvr.cpp, model1.cpp, mtouchxl.cpp, pangofun.cpp, pcat_dyn.cpp, pcat_nit.cpp, pcxt.cpp, photoply.cpp, pinball2k.cpp, quakeat.cpp, queen.cpp, savquest.cpp, su2000.cpp, taitowlf.cpp, voyager.cpp and xtom3d.cpp
- SOURCE: machine\am9517a.cpp



I5.6   MOS 8726
- 0.151              : Moved mess\machine\mos8726.c/h to src\emu\.
- NOTES: MOS 8726R1 DMA Controller
- SOURCE: machine\mos8726.cpp


I5.7   HD63450

- 0.277              : Added primitive /own and /dtack support. Also improved auto-request mode logic (machine\hd63450.cpp) [Patrick Mackinlay].
- 0.263              : Simplified DRQ lines and added PCL lines (machine\hd63450.cpp) [Nigel Barnes].
- 0.259              : Only halt cpu in max transfer rate mode [Carl].
- 0.233              : Added linked array chaining. Speed up max rate transfers. Start handling bus errors. Unhalt CPU if a DMA bus error occurs [Carl].
- 0.232              : Restart transfer if continue is set [Carl].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.217              : Modernized struct member save registration [AJR].
- 0.209              : More accurate IRQ handling with a tidier interface. Updated IRQ output when enable bit changes. Clear all *but* the lowest bit of CSR on reset [AJR].
- 0.202              : Removed MCFG [Ryan Holtz].
- 0.200              : Configure device clock (not used yet); back out custom constructor. Initialized registers on device_reset. Added save state registration. Switched member variables to types [AJR].
- 0.182              : Fixed device to find the owner CPU if the top node doesn't have a CPU, like in the case of a VME chassi [Joakim Larsson Edstrom].
- 0.154              : Added drq lines. Mask error irq [Carl]. Converted HD63450 to use inline configs [Fabio Priuli].
- 0.153              : Moved mess\machine\hd63450.c/h to emu\machine\. Modernized HD63450 device and converted to DEVCB2 [Osso]. Don't set timer when transfer expects only drqs [Carl].
- 0.151              : Make it easier for HD63450 external drq support. ESQ5505 is the only other user of the hd63450, needs to be tested (mess\machine\hd63450.c) [Carl].
- 0.128u5            : Mostly worked on the MESS X68000 driver and HD63450 (DMA controller) code to get the ADPCM working for most X68000 software [Barry Rodewald].
- NOTES: Hitachi HD63450 DMA Controller or Hitachi HD63450 DMAC
- DRIVERS: (MESS) ds90.cpp, e9161.cpp, esq5505.cpp, harriet.cpp, philipsbo.cpp and x68k.cpp
- SOURCE: machine\hd63450.cpp



I6.    Interfaces


I6.1   PIA (Peripheral Interface Adapter)

I6.11  6520
- PCB: SY6520/SY6820, 40 Pin, Peripheral Interface Adapter Plug (Comg239), 6820 (Copsnrob)


I6.12  6821

- 0.265              : Hooked both PIAs 6821 for I/O in 4roses.cpp [Roberto Fresca].
- 0.259              : Removed pia6821 clock freq param in all drivers [hap].
- 0.244              : Removed some unnecessary 6821 readca1_handler, readca2_handler and readcb1_handler hookups (drivers\arachnid.cpp, by17.cpp, by35.cpp, calomega.cpp, s8.cpp, s9.cpp and starrider.cpp) [smf].
- 0.228              : Added callback to set port B three-state output [AJR].
- 0.227              : Improved PA and CA2 output handling [AJR].
- 0.223              : Guard against side effects when these should be disabled (machine\6821pia.cpp) [68bit].
- 0.221              : Simplified handlers [Osso].
- 0.219              : Improved LOG messages a bit [Joakim Larsson Edstrom].
- 0.217              : Initialized new variable [Osso].
- 0.211              : Fixed method names in comments. Removed unused set_port_a_z_mask calls and m_port_a_z_mask variable. For port A reads, only use the DDR for reading pins unless. Provide an override option when a device depends on slightly undefined behavior of an external device driving the pins and changing the value read. One board seems to need this (coinmstr). I don't have the schematics, but it seems it uses this to check its meter operation [Mike Harris].
- 0.210              : Added port line write handlers [AJR].
- 0.207              : Simplified read/write handlers [AJR].
- 0.201              : Removed MCFG and old DEVCB [Ryan Holtz].
- 0.200              : 6821 has no clock for bus logic side [Vas Crabb].
- 0.188              : 6821 PIA logging improvements: Use logmacro.h interface. Removed device tags superfluous with modern logerror. Make LOG_SETUP actually handle something [AJR].
- 0.184              : Incremental C++-ification of 6821pia.cpp.1: Changed some 'int' ==> 'bool' where appropriate. 2. Changed the various control byte macros to static functions [Nathan Woods].
- 0.182              : Updated the LOG mechanism [Joakim Larsson Edstrom].
- 0.170              : Stop PIA from spamming debug console by default [Joakim Larsson Edstrom].
- 0.154              : Fixed usage of uninitialized members in pia6821_device [Oliver Stoeneberg].
- 0.153              : Converted PIA6821 to DEVCB2. Fixed swapped cb1 & ca2 read callbacks during conversion (drivers\arachnid.c, s3.c, s4.c, s6.c, s6a.c, s7.c, s8.c and s9.c). Removed 6821 porta_r/portb_r/ca1_r/ca2_r/cb1_r/cb2_r functions as they only returned what you'd written to the chip, only a couple of those were ever used (by audio\exidy.c). Removed some ca*/cb* read callbacks that just returned what had already been pushed or always returned 0. As there are no longer any cb2 read callbacks that functionality has been removed. Reduced the number of callers to set_a_input by calling porta_w & made the WRITE8_HANDLER call that as well, instead of the other way round and having to lookup an address space that is never used (audio\exidy.c, spiders.c and drivers\toratora.c). Removed 6821 from the MCFG PIA macros, not all PIA's are 6821's. Fixed slither/slithera 6821 PIA hookup [smf].
- 0.148u2            : Fixed uninitialized members in machine\6821pia.c [Oliver Stoeneberg].
- 0.139u2            : Added '6821 PIA' device. Harmony updated the 6821 PIA device to no longer be legacy.
- 0.131u4            : Aaron Giles added new file devtempl.h which can be used to generate the DEVICE_GET_INFO function. Updated all the Namco I/O devices to use this, along with the 6821PIA and Voodoo.
- 0.129u6            : Removed machine\6821new.c/h. Aaron Giles converted all drivers to the new device-based 6821 PIA.
- 0.129u3            : Nathan Woods converted 6821new device to use the module DEVCB. Updated Williams drivers to remove trampoline functions.
- 0.129u1            : Added machine\6821new.c/h. Nathan Woods introduced a parallel 6821 PIA implementation, as a MAME device (6821new.c). Ported the Williams drivers over to use this new PIA implementation.
- 0.128              : Phill Harvey-Smith added function to get the status of CA2 on the 6821 PIA emulator.
- 0.124u3            : Aaron Giles removed word-sized handlers from 6821pia.c. Updated drivers that needed them to use these new interfaces instead.
- 0.122u6            : 6821 PIA changes [Zsolt Vasvari]: Added orthogonal accessors. Removed hacky update_shared_irq_handler(), now the same IRQ callback maybe called multiple times, but this shouldn't be a problem. IRQ lines are cleared on a reset.
- 0.120              : Tim Lindner changed 6821 PIA logging so that it only logs core messages once.
- 0.115u3            : Zsolt Vasvari updated PIA interfaces to support masks for port A/B inputs. This allows proper behavior of unconnected pins, according to the specs. Updated a number of games to use the new interfaces. Fixed subtle behavior in handling of PIA port A. This allows for the removal of hacks in the Qix driver and the Williams driver. Fixed PIA numbers in revamped Spiders driver.
- 0.115u2            : Zsolt Vasvari removed the addressing order parameter from pia_config() and replaced it with dedicated write and read handlers.
- 0.111u5            : Nathan Woods added an assertion to prevent usage of pia_set_input_[a|b]() when input reading callbacks are specified.
- 0.106u10           : Nathan Woods fixed 6821 PIA addressing regression in the Atari machine driver (machine\atari.c).
- 0.105u2            : Did some cleanup on the 6821 PIA functions, converting to new MAME struct conventions and enforcing that configuration/initialization happens only at init time [Nathan Woods].
- 0.105u1            : Nathan Woods added accessors for the CA2, CB2 and IRQ signals on the 6821 PIA.
- 0.104u6            : Nathan Woods added accessors to return output values for the 6821 PIA.
- 0.100u4            : Aaron Giles cleaned up 6821 PIA initialization and save state registration.
- 0.95u2             : Nathan Woods fixed 6821 PIA emulation.
- 0.72               : Martin Adrian fixed the behavior of the 6821 PIA when reading disconnected pins.
-  2nd May       2003: Nathan Woods updated the 6821 PIA init function to support save states.
- 29th April     2001: Nathan Woods added state saving support for the 6821 PIA chip.
- 26th September 2000: Aaron Giles modified the 6821 PIA emulation to work properly with the new memory interface.
- 0.36b6             : Aaron Giles changed the 6821 PIA interface.
- 0.30               : Added machine\6821pia.c/h.
- NOTES: The Motorola 6821 PIA is a Peripheral Interface Adapter for sound/coin-switch/player control devices.
- PCB: Mototola 6821 PIA (Qix), MC68A21 (Spiders), MC68B21CP (Royalcrd, Strkforc), MC6821P (Magiccrd), HD6821 (BigBoy, R2dtank), HD46821P (Spiders), hd46821p (Tugboat), EF6821P (Monglfir), EF68B21P (Soccernw)
- DRIVERS: 5clown.cpp, acesp.cpp, allied.cpp, arachnid.cpp, aristmk4.cpp, attckufo.cpp, by17.cpp, by35.cpp, by6803.cpp, byvid.cpp, calomega.cpp, carpolo.cpp, castle.cpp, clowndwn.cpp, coinmstr.cpp, de_2.cpp... zwackery.cpp
- SOURCE: machine\6821pia.cpp




I6.2   PPI (Programmable Peripheral Interface)

I6.21  8255

- 0.284              : Added 8255-based analog multiplexing of sound output for (MESS) ibmpcjr [AJR].
- 0.278              : Removed unreachable code (machine\i8255.cpp) [hap].
- 0.240              : Always latch input data when strobe is asserted [Sergey Svishchev].
- 0.223              : Set ibf flag in output mode for port A [Dirk Best].
- 0.202              : Removed I8255 MCFG macros [Ryan Holtz].
- 0.201              : Set default clocks to 0 [Ryan Holtz]. Added handlers for strobed Port A/B reads in Modes 1 & 2, this allow some side effects to be disabled in Sindbad Mystery and Super Locomotive. Refactor to make clear the exact sequences of actions acka_r and ackb_r correspond to [AJR].
- 0.200              : Created 8255 PPI clone based on the (MESS) Amstrad Plus ASIC, and use it with the Amstrad Plus/GX4000 drives. Made device flags const [Barry Rodewald]. Clean up [Vas Crabb].
- 0.198              : Improved readback of port C high output latches when port A is in Mode 1 (see https://github.com/mamedev/mame/pull/3544) [hap, shattered].
- 0.194              : Added 8255 PPIs to Time Traveler [AJR].
- 0.187              : Use 8255 PPI devices (most of which are only used for input) and use the new 8255 tristate callbacks to removed some workarounds in subsino.cpp. Use 8255 PPI devices for I/O in mjkjidai.cpp. Replaced soundlatch with 8255 PPI device that runs in mode 2 in suprloco.cpp. MMake 8255 PPI handshaking work in Noraut Poker. Restore some 8255 inputs in Noraut Poker and clone Noraut Joker Poker (alt) that were disconnected many releases ago [AJR]. Added tristate outputs [hap].
- 0.186              : Added 8255 PPI to segae.cpp and taito_l.cpp drivers [AJR]. Hook up 8255 PPIs to Apache 3, Round Up 5 and Happy Jackie [Duke]. Hook up 8255 PPI, verify XTALs and clean up machine configs [Dirk Best].
- 0.183              : Simplify code by adding 8255 PPI and PSG type is YMZ284 [AJR].
- 0.154              : Converted i8255 to DEVCB2 [Fabio Priuli].
- 0.150              : Fixed incorrect device name in machine\i8255.c [Tafoid].
- 0.148u2            : Fixed uninitialized member in machine\i8255.c [Oliver Stoeneberg].
- 0.146u5            : Removed machine\8255ppi.c/h. Convert remaining drivers. Kill off old 8255ppi.
- 0.146u1            : Get rid of write_pc, those checks are not needed (machine\i8255.c/h) [hap].
- 0.146              : Updating MAME drivers to use modern i8255 implementation instead of the legacy one [Fabio Priuli]. Fixed I8255 port C-lower mask in port A mode 2. Fixed obvious bug with port C-lower output [hap].
- 0.142u5            : Angelo Salese hooked up the 2x PPI8255 for Super Crowns Golf.
- 0.142u3            : Changed machine\i8255a.c/h to machine\i8255.c/h. Curt Coder fixed I8255 interrupt enable.
- 0.139u2            : Harmony updated the 8255 PPI device to no longer be legacy.
- 0.136u3            : Curt Coder clear I8255 output lines to 0 on write to mode register, and float input lines to 1.
- 0.135u2            : Curt Coder clear Intel 8255A input latch after reading it.
- 0.132u5            : Added machine\i8255a.c/h. Intel 8255A PPI (MESS Team): Added a new implementation of the I8255A device. Rewritten from scratch to properly support handshaking in modes 1 and 2. Refactored sg1000a.c to use the new implementation.
- 0.132u1            : Curt Coder fixed handshaking signals for PPI8255 modes 1/2, and mode 2 input mask.
- 0.129u3            : Aaron Giles converted the 8255PPI device to use the structure of new module DEVCB, and updated all users to use the DEVCB macros, removing some unnecessary trampoline functions along the way.
- 0.129u4            : Angelo Salese properly added the PPI8255 devices to Pit Boss.
- 0.129u1            : Improvements to Sky Lancer driver [Roberto Fresca]: Hooked all the PPI 8255 devices. Reworked the inputs based on them. Fixed the reels visible area. Reorganized and cleaned-up the driver (only remains to split in driver + video).
- 0.127u6            : 8255 PPI interface cleanup [Aaron Giles]: Added MDRV_PPI8255_ADD, MDRV_PPI8255_RECONFIG and MDRV_PPI8255_REMOVE macros; updated all drivers to use them. Changed callbacks to device read/write handlers intead of machine read/write handlers; updated all drivers accordingly. Normalized function and variable names to be lower_under. Removed a number of redundant interfaces from the galaxian/scramble line of games.
- 0.124u4            : Wilbert Pol converted the PPI8255 implementation to a device.
- 0.104u2            : Miscellaneous cleanups to the 8255 PPI code. Changed some 'int' types to 'offs_t' and 'UINT8'. Added ppi8255_get_portA/B/C() functions. Also fixed some formatting problems [Nathan Woods].
- 0.101              : Aaron Giles added save state support to 8255 PPI.
- 0.96u2             : Nathan Woods rewrote 8255 PPI mode 2 support, and hooked 8255 to Buck Rogers properly.
- 0.95u3             : Nathan Woods merged in 8255 PPI mode 2 functionality.
- 0.36b11            : Added machine\8255ppi.c/h.
- NOTES: The 8255 is a programmable peripheral interface. It has three 8-bit I/O ports. 24 I/O ports are divided into two groups (Port A and B) which are programmable independently by control words provided by MPU. The PPI has three operation modes (Mode 0, 1 and 2) and is capable of versatile interface between MPU and peripheral devices. Zaxxon's discrete circuits is triggered by an output pin of the 8255. There are four registers in the 8255. They are mapped to (111x xxxx 0011 11pp) by Zaxxon. Zaxxon writes to these at FF3C-FF3F. There are three modes of the 8255, but by the schematics I can see that Zaxxon is using "Mode 0", which is very simple.
- GAMES: Scramble (Konami 1981), Zaxxon (Sega 1982), Rescue (Stern 1982)
- PCB: 8255A (Rescue), D8255 (Buckrog), NEC D8255AC-2  DIP40 (Bodyslam, Pipeline), uPD8255AC-2 (Hangonjr), UM82C55A-PC (Sfkick), M5M82C255ASP (Countrun), M5L8255AP-5 (Triplep), TMP8255AP-5 (Taxidrvr), Intel P8255A (Dribling, Dealer), EC 8255AC (RoundUp), AMD AM8255APC (Quiz211), PB255a = P8255A (Megat3)
- DRIVERS: 24cdjuke.cpp, aces1.cpp, amaticmg.cpp, amusco.cpp, angelkds.cpp, aristmk4.cpp, astinvad.cpp, cabaret.cpp, cb2001.cpp, chinsan.cpp, clayshoo.cpp, dblcrown.cpp, dfruit.cpp, dlair.cpp, dribling.cpp, ecoinf2.cpp, epos.cpp, esh.cpp, flipjack.cpp, fortecar.cpp, freekick.cpp, galaxian.cpp, gatron.cpp, gei.cpp, goldstar.cpp, gp_1.cpp, gp_2.cpp... zaxxon.cpp
- SOURCE: machine\i8255.cpp


I6.22  MB89363

- 0.221              : Simplified handlers (machine\mb89363b.cpp) [Osso].
- 0.202: Removed MB89363B MCFG macros [Ryan Holtz].
- 0.154: Added machine\mb89363b.c/h. Make MB89363B a trampoline device for 2x i8255 chips [David Haywood].
- NOTES: Fujitsu MB89363 / MB89363B / MB89363R 8-bit x 3 x 2 (6 x 8-bit) parallel data I/O port VLSI chip Parallel Communication Interface Extended I/O compatible with 8255.
- DRIVERS: kenseim.cpp
- SOURCE: machine\mb89363b.cpp




I6.3   VIA (Versatile Interface Adapter)

I6.31  6522

- 0.281              : Changed timer1 count=0 change from MAME 0.277 to only when in continuous mode (machine\6522via.cpp). Fixes several Vectrex games hang MAME [hap].
- 0.280              : RESET does not change T1 and T2 latches/counters and Shift Register (machine\6522via.cpp) [Nigel Barnes].
- 0.277              : Don't generate a signal on PB7 when the timer 1 latch is programmed with 0 (machine\6522via.cpp). Note: 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) [donohoe00].
- 0.258              : Zerofill variables at device start [hap].
- 0.253              : Made input ports read transparently when corresponding interrupt flag is clear (machine\6522via.cpp) [Massimiliano Zattera].
- 0.252              : Fixed VIA_IFR write. These 3 datasheets http://archive.6502.org/datasheets/mos_6522_preliminary_nov_1977.pdf, rockwell_r6522_via.pdf and synertek_sy6522_via_1978_jan.pdf state that: The IFR bit 7 is not a flag. Therefore, this bit is not directly cleared by writing a logic 1 into it. It can only be cleared by clearing all the flags in the register or by disabling all the active interrupts as discussed in the next section. But this is what current code does. If more updated datasheets are available, please share the links [Massimiliano Zattera].
- 0.245              : Implemented Shift Register Mode 0 [Nigel Barnes].
- 0.244              : Fixed (MESS) Commodore LCD real time clock reading, it relies on the RTC chip being able to ground PORT A while it is set to an output. Which is documented in the 6522 datasheet as being possible. It's NMOS, so it has weak pull ups and doesn't drive it's output hard. However due to a bug in the prototype ROM code, it currently has the date and month swapped round [smf].
- 0.230              : Fixed timing (7 edges to cb1 change from start of read) [O. Galibert].
- 0.228              : Changed description to 'MOS 6522 VIA'. Distinguish some different VIA types [AJR].
- 0.225              : Added support for CB2 pulse mode [R. Belmont, Peter Ferrie]. Port B special modes are only on write, not read [Rob Justice].
- 0.222              : Correct vocabulary, raise cb2 on shift in to make open-collector work correctly. Don't lose sync on edge count when the serial clock is external [O. Galibert].
- 0.212              : Changed most mappings into m() [O. Galibert].
- 0.209              : Removed unneeded space and offset (machine\6522via.cpp) [Robbbert].
- 0.206              : Count negative PB6 pulses in T2 counter mode. Note: VIA interrupt remains disconnected in (MESS) tv950 due to CRTC-related problems. This is fairly likely to cause regressions in other drivers which may need explicit writes to PB6 [AJR]. Fixed timing for shifting under control of system clock [Mathis Rosenhauer].
- 0.201              : Removed MCFG accessors [Ryan Holtz].
- 0.193              : Eliminated truly ancient hack to default clock to that of first CPU. All VIAs in MAME now have properly configured clocks [AJR].
- 0.192              : Added some interrupt LOGs [Joakim Larsson Edstrom].
- 0.186              : Refactored shifter supporting more fetures and fixed a few bugs. Removed old code and cleaned up a bit. Tuned shifter IRQ timing to be more cycle accurate. Fixed the flank timer value which improved but not completelly reverted the Vectrex regression [Joakim Larsson Edstrom].
- 0.183              : Updated LOG messages to latest cut and added some new. Fixed 50/50 duty cycle for T2 and O2 driven CB1 shift IN & OUT on CB2. Added stop of device_timer when going from internaly to externaly clocked shift modes. Fixed so shift out and in flank is not controlled by pcr in accordance with datasheet. Added missing final and leading flanks when shifting out and in respectivelly [Joakim Larsson Edstrom].
- 0.161              : Added 6522 VIA device address map [Curt Coder].
- 0.158              : Added missing save states to 6522 VIA, fixes at least Konkyuu no Hoshi save state problem [Osso].
- 0.154              : Fixed usage of uninitialized members in via6522_device [Oliver Stoeneberg].
- 0.153              : Convert VIA6522 to use DEVCB2. Converted pa* & pb* inputs to WRITE_LINE_MEMBER. Removed read_ca*/read_cb* in Beezer as they just returned what you'd written to the chip already. Removed readpb & readcb2 callbacks from (MESS) Commodore LCD VIA6522 configuration. Changed write_cb2 to work with shift register. Removed VIA6522 ca2 callback as the value is already pushed in aristmk4.c and beezer.c. Removed ca1/ca2/cb1 callbacks as they were never called anyway. Removed cb2 callback from (MESS) MAC drivers, you now have to push the data. Fix for potential loss of state change. Removed the simplest 6522 port callbacks in gameplan.c and trvquest.c. Added support for shift out free running at t2 rate, cb1 output now lasts for the specified number of clocks and the signal goes low at the end. 6522 CA1 is input only, so I have removed the output callback. The (MESS) Lisa via hookup has been changed as it had functions named as CA2/CB2 hooked up to CA1/CB1 and CA1 output no longer exists, it appears to have been wrong since before the code was merged with MAME. Changed CB1 to be active low as CA2 & CB2 already are & it sort of was before, but when the chip is reset then the handlers are called setting the lines to 1. This seems to stop it thinking that you've pressed a key at startup as I believe it got out of sync before because the lines weren't consistent. Merged some duplicate code for handling outputs and removed some obvious comments. Serial data is shifted in just before cb1 goes high, not just after it goes low. Allow reading from port A in output mode. Add a separate bit for timer 1 PB7 toggling rather than changing the PB register directly. Don't clear the SR register on reset. Clears pcr & acr at construct time, in case something sets one of the handshaking lines before we've started. Use a separate variable for the latched inputs and the current inputs. Consolidate the input and output code. Clears port a and port b latches at startup, temporarily reverted CA1 timing change as Beezer is extremely sensitive to CB2 timing, temporarily prevented port a read handlers from affecting reading back of output bits (real hardware can do this but some handlers are returning 0 for bits that they aren't driving low). Simplified VIA 6522 irq handling [smf].
- 0.148u2            : Fixed uninitialized members in machine\6522via.c [Oliver Stoeneberg].
- 0.148              : Used core clock/attotime functions in 6522 VIA [Curt Coder].
- 0.144u7            : Improved 6522 serial input emulation. Shift in under o2 or t2 control generates clock on cb1 [Phill W.].
- 0.144              : Implemented CA2 pulse output mode in 6522 VIA, and output interrupt state only when it changes [Curt Coder].
- 0.142u3            : Added '6522 VIA' device.
- 0.139u3            : Modernized the 6522 VIA device [Aaron Giles]: Changed to use the new device timer mechanism. Removed all trampolines in favor of modern methods.
- 0.139u2            : Miodrag Milanovic updated VIA 6522 to generate interrupt on T2 Pulse counting mode too, according to documentation. Added support for shift mode 5 (shift out under T2 control). Harmony updated the 6522 VIA device to no longer be legacy.
- 0.136u3            : Read VIA6522 port A/B only if some pins are inputs [Curt Coder].
- 0.136u1            : Curt Coder refactored the VIA6522 interface to use READ/WRITE_LINE.
- 0.135u4            : Fabio Priuli added save states to 6522via.c. This fixes problems of gameplan.c and trvquest.c games with -autosave.
- 0.131u4            : Palindrome fixed VIA address map in '86 Lions'.
- 0.129u4            : Made the 6522 VIA implementation use DEVCB [Nathan Woods].
- 0.128u6            : Nathan Woods changed the 6522 VIA implementation to be a device.
- 0.122u4            : Changed 6522 emulation such that when writing to the ACR register with the timer 1 in continuous counting mode, the timer 1 value should not be reloaded but keep on counting [Wilbert Pol].
- 0.97u2             : Mathis Rosenhauer fixed the way the VIA 6522 shift register was implemented to get rid of the previous hacky way.
- 0.78u5             : Nicola Salmoria rewrote machine\6522via.c. This fixed the gfx problems and bad sound in the Gameplan driver, video\gameplan.c is no longer needed. Fixed port writes in machine\6522via so that pins set as input are pulled high. This is required by the gameplan games and is confirmed by the 65422 data sheet. Added support for CA2 pulse handshake.
- 0.77u1             : 6522 VIA fixes and updates from MESS [Nathan Woods].
-  3rd May       2002: Zsolt Vasvari cleaned up the Leprechaun / Pot of Gold drivers and added proper VIA 6522 chip emulation.
- 0.37b8             : Added machine\6522via.c/h.
- NOTES: The Rockwell 6522 VIA is a versatile interface adapter. The 6522 emulation based on MAME's M6821. The Atari System 1 hardware use a SY6522A for communication to the TMS5220.
- PCB: Rockwell R6522 (Timekill), Synertek SY6522A VIA (Bmcbowl), UM6522A 8926S (Pntnpuzl)
- DRIVERS: alvg.cpp, atarisy1.cpp, barni.cpp, beezer.cpp, bmcbowl.cpp, chexx.cpp, cops.cpp, killcom.cpp, itech8.cpp, itech32.cpp, jvh.cpp, nsg6809.cpp, pntnpuzl.cpp, trvquest.cpp and vectrex.cpp
- SOURCE: machine\6522via.cpp



I6.4   6525

- 0.276              : Clear latches on write to portc in interrupt mode [Dirk Best].
- 0.207              : Eliminated address_space argument from handlers [cam900].
- 0.201              : Removed MCFG and old DEVCB accessors [Ryan Holtz].
- 0.201              : Added '6525 TPI' device (machine\6525tpi.cpp).
- 0.154              : Converted 6525 TPI to DEVCB2 [Osso].
- 0.151              : Modernized 6525tpi device [Osso].
- 0.148u2            : Fixed 6509<>8088 comms (machine\6525tpi.c) [Curt Coder].
- 0.145u1            : Sync with MESS [Curt Coder].
- 0.142u3            : Added machine\6525tpi.c/h.
- NOTES: Tri port interface 6525 and triple interface adapter 6523. Used in Commodore b series and commodore c1551 floppy disk drive.
- DRIVERS: (MESS) bus\c64\ieee488.h, bus\c64\magic_voice.h, bus\plus4\c1551.h, amiga.cpp, cbm2.cpp
- SOURCE: machine\6525tpi.cpp



I6.5   CIA (Complex Interface Adapter)

I6.51  MOS6526

- 0.280              : Get rid of m_icr_read, fixes (MESS) cpm68k-amiga boot (machine\mos6526.cpp) [Angelo Salese].
- 0.262              : Fixed a couple of initial states as per vAmigaTS/showcia1 test. Fixed UNUSED register behaviour (machine\mos6526.cpp) [Angelo Salese].
- 0.245              : Removed inline overuse (machine\mos6526.cpp) [Ryan Holtz].
- 0.237              : Guard against resetting IRQs when none is chained. Makes timer B polling reads to actually work in (MESS) barb2paln4, fixing booting (machine\mos6526.cpp) [Angelo Salese].
- 0.207              : Eliminated address_space argument from handlers [cam900].
- 0.189              : Show state of registers that can be read without side effects in debugger [David Viens].
- 0.186              : Changed description to 'MOS 6526 CIA'.
- 0.163              : Fixed MOS6526 port A/B read [geecab].
- 0.154              : Removed machine\6526cia.c/h. Fixed usage of uninitialized members in mos6526_device and legacy_mos6526_device [Oliver Stoeneberg]. Fixed macros in machine\6526cia.h and mos6526.h [Curt Coder]. Kill the legacy CIA emulation. CIA changes: Added missing virtual keyword to actually call the right TOD clock. Outputs depend on the input state (fixes A1000 overlay switch). Switching to serial output mode with one-shot activated causes a pulse on SP (correct? needed for keyboard handshake). Serial input is clocked by the CNT input, not the default clock. Mask offsets to 4 bits. Writing the Timer High register with one-shot activated immediately causes the timer to be latched and the timer started, regardless of timer start value [Dirk Best].
- 0.153              : MOS6526 DEVCB2 cleanup and WIP. Converted 6526 CIA temporarily to DEVCB2 until MOS6526 works with Amiga. Cleaned up CIA access a bit (machine\amiga.c) [Curt Coder]. Fix for Amiga regression, machine\6526cia.c made infinite loop. Removed legacy not used code [Miodrag Milanovic].
- 0.148u2            : Modernized MOS6526 device [Curt Coder]. Fixed uninitialized members in machine\mos6526.c [Oliver Stoeneberg].
- 0.147u2            : Couriersud added port A/B read handlers (machine\mos6526.c).
- 0.147u1            : Added machine\mos6526.c/h. Added proper start value (initialize data direction registers) [Miodrag Milanovic]. Implemented a nearly cycle-exact "old" MOS6526 CIA, which passes most of the Lorenz/VICE CIA tests (drivers\alg.c, arcadia.c, cd32.c, mquake.c and upscope.c) [Curt Coder].
- 0.147              : Improved MOS6526 interface [Curt Coder].
- 0.145u5            : The PC output will now go low for 1 cycle following a read/write of port B (instead of being toggled immediately) (machine\6526cia.c) [Curt Coder].
- 0.136u2            : Curt Coder refactored the CIA 6526 interface, adding SP/CNT callbacks. Fixed serial transfer. Harmony updated the 6526 CIA device to no longer be legacy.
- 0.135u4            : Curt Coder fixed CIA6526 FLAG handling and slight interface cleanup.
- 0.134              : Roberto Zandona fixed 6526 CIA PRA, PRB, DDRA and DDRB ports and added partial fix to 6526 CIA timer: Avoid timer's desync in read count operation.
- 0.133u5            : Roberto Zandona added different TOD implementation for CIA6526 and CIA8520.
- 0.129u5            : Dirk Best added support for the /PC output pin to the CIA emulation.
- 0.129u4            : Nathan Woods changed 6526cia to use DEVCB.
- 0.129u1            : Nathan Woods added a validity check to the 6526 CIA emulation.
- 0.128u5            : Made the 6526/8520 CIA implementations be devices [Nathan Woods]: Added differentiation between the r1 and r2 versions of the 6526; not acting on it yet.
- 0.125u1            : Roberto Zandona added feature to the cia6526: In READ operation the value can be forced by a external circuit; this feature is necessary for MESS.
- 0.117              : Peter Rittwage reverted patch to the 6526CIA as it was causing issues with Amiga/Arcadia emulation.
- 0.115u3            : Peter Rittwage fixed bit calculation in 6526cia.c which broke joysticks in the MESS C64 driver.
- 0.111u4            : Ernesto Corvi fixed system time counters in the Amiga code.
- 0.111u2            : Amiga core system updates [Ernesto Corvi]: Updated 6526/8520 CIA to be able to set the value of the SP pin. This is needed to emulate the Amiga keyboard. Fixed a bug on the 6526/8520 CIA that prevented chained counters from working.
- 0.111u1            : Ernesto Corvi reimplemented one-shot timer modes in the 6526 CIA (Amiga) emulation.
- 0.109u2            : Nathan Woods improved timer accuracy and added save state support to the 6526 CIA module.
- 0.107u2            : Nathan Woods implemented CNT pin and some serial features of the 6526 CIA chip.
- 0.105u3            : Added machine\6526cia.c/h. Nathan Woods refactored the 8530 CIA code from the Amiga into a separate module and made it support both the 6526 and 8530 variants.
- NOTES: MOS 6526 CIA and MOS 6526A CIA Complex Interface Adapter emulation
- DRIVERS: alg.cpp, arsystems.cpp, cubo.cpp, mquake.cpp and upscope.cpp
- SOURCE: machine\mos6526.cpp + machine\amiga.cpp/h


I6.52  MOS6529

- 0.221              : Simplified handlers [Osso].
- 0.148u1            : DEVCB2 conversions (machine\mos6529.c/h) [Curt Coder].
- 0.146u5            : MOS6529 chip has no clock input [Curt Coder].
- 0.142u1            : Added machine\mos6529.c/h.
- NOTES: MOS Technology 6529 Single Port Interface Adapter.
- DRIVERS: (MESS) plus4.cpp
- SOURCE: machine\mos6529.cpp


I6.53  8510

- NOTES: Amiga CIA
- GAMES: Moonquake (Sente 1987)


I6.54  MOS8520

- 0.275              : TOD is not latched when CRB_ALARM is set (MOS8520; machine\mos6526.cpp) [Dirk Best].
- 0.186              : Changed description to 'MOS 8520 CIA'.
- 0.133u5            : Roberto Zandona added different TOD implementation for CIA6526 and CIA8520.
- 0.128u5            : Made the 6526/8520 CIA implementations be devices [Nathan Woods].
- 0.111u2            : Amiga core system updates [Ernesto Corvi]: Updated 6526/8520 CIA to be able to set the value of the SP pin. This is needed to emulate the Amiga keyboard. Fixed a bug on the 6526/8520 CIA that prevented chained counters from working.
- DRIVERS: alg.cpp, arcadia.cpp, cubo.cpp, mquake.cpp, upscope.cpp
- SOURCE: machine\mos6526.cpp + machine\amiga.cpp/h


I6.55  8530
- 0.144u7            : Removed machine\am8530h.c/h. MESS sync [O. Galibert].
- 0.143u4            : Added machine\am8530h.c/h. Sync with MESS [O. Galibert].
- 0.105u3            : Nathan Woods refactored the 8530 CIA code from the Amiga into a separate module and made it support both the 6526 and 8530 variants.
- SOURCE: ---



I6.6   ACIA (Asynchronous Communications Interface Adapter)

I6.61  6551

- 0.284              : Do not disable the transmitter when a command deasserts RTS. RTS high disables transmitter, but not in the middle of a character (machine\mos6551.cpp) [AJR].
- 0.278              : Correct transfer data from RSR to RDR. On real hardware, this transfer is not atomic, but done bit-by-bit on the last clock cycles of a byte reception. Do the same, so bugs in programs are not hidden from developers. Also fixes another discrepancy with reality: When the RDR is full and a byte arrives, it is transferred to the RDR, and the Overrun flag is set. Our implementation did set the flag but left the old byte in the RDR [Colin Leroy-Mira].
- 0.270              : Misc fixes. Suppress receiver full and transmitter empty IRQs when disabled by command write. Added address map for future use. Correct pin label on diagram (machine\mos6551.cpp) [AJR].
- 0.221              : Clear IRQ state upon hardware reset. Not doing this at device_start time avoids a race condition in digel804 that was causing the Z80 interrupt to be raised in advance of machine_start [AJR].
- 0.207              : Simplified read/write handlers [AJR]. Default input clocks to zero (machine\mos6551.h) [hap].
- 0.201              : Eliminated MOS6551 MCFG macros [Ryan Holtz].
- 0.193              : Added 'MOS 6551 ACIA' device.
- 0.157              : Fixed receive with parity != none in MOS6551 [Sandro Ronco].
- 0.154              : Support 115200 bit/s on Apple III (machine\mos6551.c). Stop the internal timer if DTR is high and there is no character being received as neither the transmit or receive will do anything anyway. The default is for the internal divider to be disabled so if the chip wasn't initialised then the timer would be running at the full rate of the xtal. Fixed uninitialised variable that could prevent transmit irq from being generated after reset. Ignore reads from the debugger [smf]. Fixed usage of uninitialized members in mos6551_devicee [Oliver Stoeneberg].
- 0.153              : Call set_data_frame() before stc_rcv_rate() in MOS6551, as since r26274 there is random behaviour if you don't. Rewritten 6551 emulation. Changed clock to be the o2 clock instead of the baud rate xtal, supports external clocking, generates transmit interrupts when idle, added echo mode, dcd/dsr/cts input handling, parity & stop bit checking. Tested and fixed hookup to (MESS) Commodore LCD & Plus 4 [smf]. Support Rockwell 6551s, which show different register contents from MOS/CSG parts on reset [R. Belmont].
- 0.152              : Removed unused rxd callback from MOS6551 and made DEVCB2 consistent with other implementations [smf].
- 0.149              : Added RS-232 ports to machine\mos6551.c [Curt Coder].
- 0.148u2            : Added MOS6551 serial callbacks. Fixed typo (machine\mos6551.h). (MESS) Connected the C64 Turbo232/SwiftLink cartridges' RS-232 port to the 6551 ACIA [Curt Coder].
- 0.148u1            : Changed machine\6551acia.c/h to machine\mos6551.c/h. DEVCB2 conversions (machine\mos6551.c/h). Refactored all drivers to use the new MOS6551 and removed the old implementation (MESS + drivers\cops.c) [Curt Coder].
- 0.146u5            : Disabled debug logging [Curt Coder].
- 0.145u8            : 6551ACIA m_status_register was not being initialized properly [Robbbert].
- 0.143u5            : Added machine\6551acia.c/h.
- NOTES: MOS 6551 ACIA = MOS Technology 6551 Asynchronous Communication Interface Adapter
- DRIVERS: nsg6809.cpp and cops.cpp
- SOURCE: machine\mos6551.cpp


I6.62  6552
- 0.268              : Added machine\r65c52.cpp/h. Added Rockwell 65C52 Dual Asynchronous Communication Interface Adapter. A slightly tweaked combination of two 6551 ACIAs on a single chip. Correct bug associated with IRQ handling [James Wallace]. Srcclean and tidy (machine\r65c52.cpp) [Angelo Salese]. Simplified update_irq. Added call to update_irq at each place IER or ISR changes and debugger side effects check on reads (machine\r65c52.cpp) [hap].
- DRIVERS: cops.cpp
- SOURCE: machine\r65c52.cpp


I6.63  6850

- 0.263              : Added 6850 ACIA to (MESS) hk1000.cpp [AJR].
- 0.244              : Initialized receive section (machine\6850acia.cpp) [Miodrag Milanovic].
- 0.227              : Removed outdated MC6850 ACIA hack in balsente.cpp (sound communications now work better without it) [AJR].
- 0.223              : Fixed initializations issues that were causing problems in DEVNOCLEAR debug builds (machine\6850acia.cpp) [Osso].
- 0.222              : TDRE should read clear in reset and set coming out of reset. Fixes a lockup running UniFlex on the SWTPC09. Tested on hardware, the TDRE flag reads as zero in the reset state and reads as set when taken out of reset, and even if data has been written to the data register while in the reset state [68bit].
- 0.221              : Prevent transmission of a spurious character following master reset [AJR].
- 0.219              : Updated MC6850 ACIA use of logmacro.h [Joakim Larsson Edstrom].
- 0.210              : Silented VERBOSE mode [Joakim Larsson Edstroem].
- 0.207              : Allow disabling side effects for reads. Simplified read/write handlers [AJR].
- 0.201              : Removed MCFG macros and old DEVCB [Ryan Holtz].
- 0.200              : 6850 has no clock for bus logic side [Vas Crabb].
- 0.199              : Use MC6850 ACIA devices for sound communication in alsente.cpp [AJR].
- 0.193              : Created standard read/write handlers for 6850 ACIA [AJR].
- 0.190              : Serial link preparation (6850 ACIA) for Grand Striker [AJR]. Fixed 6850 ACIA so that LOG_OUTPUT_FUNC can be defined as printf. Removed c_str() in LOG statements [Joakim Larsson Edstroem].
- 0.186              : Changed description to 'MC6850 ACIA'.
- 0.176              : Make ACIA write initial line state in reset to avoid crash [Vas Crabb].
- 0.168              : Added 6850ACIA serial port (untested) to (MESS) Osborne-1, use configured banking [Vas Crabb].
- 0.159              : Fixed 6850 ACIA parity [Carl]. This fixed many sets in mpu4vid.c stops at a "Serial Link Failure" screen (MT05498).
- 0.154              : Fixed usage of uninitialized members in acia6850_device [Oliver Stoeneberg].
- 0.153              : Fixed uninitialised variables, (MESS) Atari ST mouse works again. Hooked ACIA 6850 up to (MESS) Altair 8800bt. Rewritten 6850 based on datasheet using external CLOCK & removed MIDI clock hacks. (MESS) GUS gf1_device device derives from acia6850_device to gain access to the tx & rx irq state, rather than exposing it with a public method. Fixed bug in sending that showed up using terminal. Tidied up enum names, fixed frame error detection [smf].
- 0.152              : Replaced read rx/cts/dcd callbacks in ACIA6850 write handlers, which allows multiple chips to be connected together without using glue methods. Changed write_rx to update the correct variable [smf].
- 0.148u4            : Wilbert Pol improved 6850ACIA DCD signal handling.
- 0.148u2            : Fixed uninitialized variables and members in machine\6850acia.c [Oliver Stoeneberg].
- 0.148u1            : Added 6850ACIA accessor function for status [Barry Rodewald].
- 0.147u4            : Bring 6850ACIA IRQ line into standard usage (ASSERT_LINE = IRQ active) [R. Belmont]. (mame\drivers\bfcobra.c, mpu4vid.c and mess\drivers\mirage.c) are the only 3 drivers I found that appear to use the 6850 IRQ callback; many others had it commented out. If you own such a driver and you commented it out due to weird behavior or whatever (isa_gus.c?) you might want to try again.
- 0.140u3            : Curt Coder adjusted MC6850 receive/transmit timer periods when clocks are changed. Also added receive byte function to MC6850 ACIA for MESS generic terminal emulation.
- 0.139u2            : Harmony updated the ACIA 6850 device to no longer be legacy.
- 0.137u3            : Phil Bennett improved handling of 6850ACIA /CTS signal and fixed issue with transmission parity generation.
- 0.129u4            : Curt Coder refactored the ACIA6850 to use DEVCB. Only adjust the 6850acia rx/tx bit timers on a control write if the divide ratios have changed [Phil Bennett].
- 0.128u5            : Made the 6850 ACIA a device [Nathan Woods].
- 0.124u1            : James Wallace added dynamic control of RX and TX pins to 6850 ACIA emulation - this is needed for correct operation of the MPU4 Video communications system, and may be handy for some MESS systems. To use, set the rx and tx clocks to 0 in the acia interface, then use acia_tx_clock_in() and acia_rx_clock_in() respectively.
- 0.123u4            : Kingshriek improved (not perfect) ACIA slot monitoring.
- 0.123u3            : Some improvements to the 6850 ACIA CTS pin checking logic and the MPU4 ACIA clock logic [James Wallace].
- 0.123u2            : James Wallace changed the 6850 core to allow dynamic RX and TX clock alteration, to at least try to remove a few of the MPU4 timing problems.
- 0.120u2            : Rewrote ACIA6850 implementation [Curt Coder].
- 0.118u1            : Curt Coder changed 6850ACIA to use MSB/LSB read handlers.
- 0.114u2            : MPU4 improvements [James Wallace]: Decommissioned machine\mpu4.c, as the 6850acia code from Phil does the same job, making one less thing to maintain.
- 0.113              : Added machine\6850acia.c/h.
- 0.108u3            : Removed machine\6850acia.c/h. Big update to the MPU4 driver [El Condor]: Added support for reverse clocking in the VFD code. Changed the 6840 to not run the counter clock if no frequency is specified. Reworked the MPU4 drastically to be more in sync with AGEMAME. MPU4 video should now be working a little better. Deprecated machine\6850acia.c, replacing it with a specialized driver (machine\mpu4.c).
- 0.103u2            : Added machine\6850acia.c/h.
- NOTES: The MC6850 is a RS232 communications interface. The 25-way RS232 D-type in Qix (1981) is layed out but not fitted.
- Games: Qix (Taito 1981), Tail to Nose (V-System 1989), Begas Battle (DataEast 1983)
- PCB: 6850 (Qix), MC68B50P (F1gp, Gstriker, Tail2nos), EF68B50P (BegasBattle), M6850 UART I/O to sound board (machine\balsente.c), 6850 ACIA (Memory map of Qix and Zookeep), 6850 serial IO (MPU4VideoSystem)
- DRIVERS: balsente.cpp, bfcobra.cpp, bfmsys85.cpp, calomega.cpp, f1gp.cpp, goldngam.cpp, gstriker.cpp, guab.cpp, jpmsys5.cpp, jpmsys5sw.cpp, mpu4vid.cpp, seta.cpp, sigmab31.cpp and tail2nos.cpp
- SOURCE: machine\6850acia.cpp




I6.7   RS232 Port

- 0.283              : Improved text transmission options: Added configuration switch to translate CR/LF characters from the bitbanger input prior to transmission. Multiple translation modes are provided. Added configuration switch to delay further transmission for a number of milliseconds after each CR is sent (rs232\null_modem.cpp) [AJR].
- 0.282              : Added option for (MESS) Heath H19 terminal. Changed to the option function to a static method [Mark Garlanger].
- 0.268              : Added Mouse Systems serial mouse to default RS-232 devices (rs232\rs232.cpp) [Brian Johnson].
- 0.263              : Added rs232\scorpion.cpp/h. Added the Micro-Robotics Scorpion Intelligent Controller device [Nigel Barnes].
- 0.262              : Removed unused constexpr (rs232\pty.cpp) [hap].
- 0.255              : Pseudo terminal: Copied flow control code from bus\rs232\null_modem.cpp (bus\rs232\pty.cpp) [Carl Drougge].
- 0.252              : Added support for (MESS) NABU PC and simulated host. Added 111900 BAUD to bus\rs232\rs232.h [Brian Johnson].
- 0.250              : Start adding support for RS-232 to (MESS) MSX [Wilbert Pol].
- 0.244              : Don't forget the current state of dsr & rts when changing serial settings in null modem device (rs232\null_modem.cpp) [smf].
- 0.237              : Added bus\rs232\patchbox.cpp/h. Added a configurable patch box device and various cleanups. Added comments with V.24 interchange circuit numbers and names to rs232.h to make the meanings of the abbreviated signal names clearer. Moved a few slot card classes out of headers and into anonymous namespaces to reduce compile depedencies and exported symbols (rs232\rs232.cpp). Added patchbox device source (bus\rs232\patchbox.cpp) [Vas Crabb].
- 0.230              : Added rs232\rs232_sync_io.cpp/h. Added device for synchronous I/O [fulivi].
- 0.229              : Added generic Radio Shack printer option (generates break condition when online) (bus\rs232\rs232.cpp) [Tim Lindner]. HLE updates: Removed option to change the number of start bits (1 was always the default, and the RS232 protocol requires one start bit). Added many historically significant baud rates ranging from 50 to 7200 [AJR].
- 0.222              : XON/XOFF flow control (rs232\null_modem.cpp) [Sergey Svishchev].
- 0.220              : Removed 7200 baud setting formerly required by one driver to work around incorrect table (bus\rs232\rs232.h) [AJR].
- 0.216              : Put the swtpc8212 terminal in the default RS-232 devices [Vas Crabb].
- 0.215              : Moved some initialization to a device_reset() function. Calling the line handlers, such as m_cts_handler() from the device_start() function is problematic as some of these handlers may wish to read ioports and that is not safe at this stage, so move these to a new device_reset() function. Added DTR flow control to RS232 Null Modem. Some terminals use the DTR output for hardware flow control, so added that as another option [68bit].
- 0.210              : Do terminal I/O through USART for (MESS) Dual Systems 68000 (added RS232_BAUD_7200 to rs232.h) [AJR].
- 0.196              : Moved DEVCB resolution to device_resolve_objects for RS232 [Vas Crabb]. Added V.24 cross reference. Added speed indicator to modem control and speed select output. Added DEC 12-15336-00 RS232 loopback connector type (required for (MESS) VT102 modem control self-test) [AJR].
- 0.193              : Added DCE RxC/TxC callbacks (untested) and table of standard signals [AJR].
- 0.192              : Changed 9615 baud configurations to the nominal 9600 baud now that Z80SIO is more tolerant [AJR].
- 0.190              : Added 9615 baud rate actually used by a number of systems (bus\rs232\rs232.h) [AJR].
- 0.176              : Added rtscts flow control for rs232\null_modem.cpp and relevant fix to i8251 [Sergey Svishchev]. Make flow control optional (rs232\null_modem.cpp) [Carl].
- 0.155              : Loopback: tx goes high and data is clocked at the correct rate instead of appearing instantly. Modem status register: don't lose track of external signals when starting, resetting, switching loopback off, writing to register. Handshaking: active low for consistency (RS232 port now defaults handshaking lines high and serial mouse dtr/rts handling has been adjusted) [smf].
- 0.154              : Standardised the configuration of rs232 devices. All serial devices are now connected using an rs232 port [smf].
- 0.153              : Added bus\rs232\loopback.c/h. Changed 'Serial Port' to 'RS232 Port' device (bus\rs232\rs232.c). Changed mess\machine\serial.c/h to emu\bus\rs232\rs232.c/h. Moved mess\machine\null_modem.c/h to emu\bus\rs232\. Removed imagedev\serial.c/h. Changed parity & stop bits to an enum (you can now pass in 1.5). I've updated the uarts that were testing for 1.5 stop bits to pass that in, but there are probably others & 1.5 stop bits is converted to 2 by diserial. Replaced synchronous flag with start bit count, as some uarts can use a start bit in synchronous mode & that whether there is a start bit is all the flag is currently controlling. Updated rs232 terminal to allow startbits, stop bits 1.5 to be specified (although that is currently not supported by diserial) and individual transmit and receive baud rates. Separated RS232 devices. Added hack for required_device not being set until device_start(), it would be nice if they were filled in during config complete (null_modem.h). Hooked up dtr/rts/rxc to serial port & introduced the etc pin to rs232 (pin 24 Transmitter Signal Element Timing/External Transmitter Clock). Added RS232 loopback [smf].
- 0.152              : Converted serial & RS232 devices to DEVCB2 [smf].
- 0.151              : Serial WIP (imagedev\serial.h) [Sergey Svishchev].
- 0.147              : Added 'Serial Port' device (mess\machine\serial.c).. Added mess\machine\null_modem.c/h. Merge of MESS sources [Miodrag Milanovic].
- 0.143u6            : Fixed some issues with serial device (imagedev\serial.c) [Miodrag Milanovic].
- 0.143u5            : Added emu\imagedev\serial.c/h. Added serial image device, was in serial.c in mess\machine [Miodrag Milanovic].
- 0.142u3            : Added mess\machine\serial.c/h.
- DRIVERS: 20pacgal.cpp, aristmk5.cpp, atlantis.cpp, bolsaint.cpp, f1gp.cpp, freeway.cpp, funkball.cpp, gammagic.cpp, gfamily.cpp, gkigt.cpp, gstriker.cpp, harddriv.cpp, iteagle.cpp, ksys573.cpp, megaturbo.cpp, micro3d.cpp, model1.cpp, namcos12.cpp, namcos23.cpp, odyssey.cpp, pcat_dyn.cpp, photoply.cpp, pluto6.cpp, przone.cpp, sttechno.cpp, tail2nos.cpp, tetrisp2.cpp, twinkle.cpp and vegas.cpp
- SOURCE: bus\rs232\rs232.cpp and rs232\loopback.cpp


I6.71  DS232
- PCB: DS232AS serial port chip (Blitz99), 232ACBN (Gauntdl)

I6.72  DS1228
- NOTES: DALLAS DS1228  RS232 communications interface
- PCB: DS1228 (RS232 port for debug) (F15se)

I6.73  ICL232CPE
- PCB: ICL232CPE  RS232 port for communication to Host PCB (Botss, F15se)

I6.74  GD75232
- NOTES: LGS GD75232, Triple RS232 transmitter, 5 Receiver Bus-Line Transceiver
- PCB: LGS GD75232, SOIC20 (A51site4)


I6.75  MC2661

- 0.220              : Removed machine\mc2661.cpp/h.
- 0.206              : Eliminated space and mem_mask arguments from read/write handlers. Detect framing and parity errors; allow disabling of side effects of reads [AJR].
- 0.202              : Removed MC2661 MCFG macros [Ryan Holtz].
- 0.197              : Talk to terminal serially through MC2661 [AJR].
- 0.154              : Fixed usage of uninitialized member in mc2661_device [Oliver Stoeneberg].
- 0.153              : Converted MC2661 to DEVCB2 [Curt Coder].
- 0.152              : Added various MC2661 transmission and reception logic to help make (MESS) wicat start sending data to the terminal board [Barry Rodewald]. Replaced read rx callback in MC2661 with a write handler, which allows multiple chips to be connected together without using glue methods [smf].
- 0.149              : Added RS-232 ports to MC2661 [Curt Coder].
- 0.146u1            : Added machine\mc2661.c/h.
- NOTES: Motorola MC2661/MC68661 Enhanced Programmable Communications Interface
- SOURCE: machine\mc2661.cpp


I6.76  TMS1024 / TMS1025

- 0.253              : Added optional logging messages (machine\tms1024.cpp) [AJR].
- 0.184              : Added 'TMS1024 I/O Expander' device. Read inputs in Docastle driver through TMS1025. Added input callbacks and read handler to TMS1024/TMS1025. Clean up code a little. Added MS pin to TMS1024, added write to port 0 [AJR].
- 0.163              : TMS1024/(MESS) Break Up (Tomy) update [hap].
- 0.162              : Added machine\tms1024.c/h. Added TMS1024 device [hap].
- NOTES: Texas Instruments TMS1024 and TMS1025 I/O expander
- DRIVERS: docastle.cpp
- SOURCE: machine\tms1024.cpp


I6.77  TMS9901

- 0.243              : Added the S0-triggered clock update to TMS9901 [Michael Zapf].
- 0.221              : Simplified handlers [Osso].
- 0.210              : Changed input line reading from 8-bit units to single bits, adapted clients. Decrementer now continues counting even when initial value is 0, clearing up a misunderstanding of specs. Ensure that the INT3 input is disabled when the clock is enabled [Michael Zapf].
- 0.208              : Simplified read/write handlers (machine\tms9901.cpp) [AJR].
- 0.207              : Fixed cassette instabilities, caused by improper timer usage; introduced synchronous clock input for TMS99019901 [Michael Zapf].
- 0.203              : Added output state accessor; undo some search-and-replace corruption [AJR].
- 0.173              : Added RST1 reset line [Michael Zapf].
- 0.153              : DEVCB2 migration [Michael Zapf].
- 0.150              : Small DEVICE_STOP, DEVICE_RESET and DEVICE_START cleanup in machine\tms9901.c [Oliver Stoeneberg].
- 0.148u2            : Avoid usage of uninitialized memory in tms9901_device::field_interrupts() [Oliver Stoeneberg].
- 0.146u4            : Added machine\tms9901.c/h. Moved TMS9901 from mess\machine into emu\machine subtree [Michael Zapf].
- NOTES: TMS9901 is a Programmable System Interface and a support chip for TMS9900. It handles interrupts, provides several I/O pins, and a timer (a.k.a. clock: it is merely a register which decrements regularly and can generate an interrupt when it reaches 0). It communicates with the TMS9900 with the CRU bus, and with the rest of the world with a number of parallel I/O pins. I/O and timer functions should work with any other 990/99xx/99xxx CPU. On the other hand, interrupt handling was primarily designed for TMS9900 and 99000 based systems: other CPUs can support interrupts, but not the 16 distinct interrupt vectors.
- DRIVERS: (MESS) geneve.cpp, ti99_2.cpp, ti99_4p.cpp, ti99_4x.cpp, ti99_8.cpp and tm990189.cpp
- SOURCE: machine\tms9901.cpp


I6.78  TMS9902

- 0.203              : Make timer interrupt work and added save state [AJR].
- 0.177              : Improved logging; fixed missing CTS signal, outgoing RTS and incoming DTR [Michael Zapf].
- 0.154              : Converted TMS9902 to DEVCB2 [Osso].
- 0.150              : Small DEVICE_STOP, DEVICE_RESET and DEVICE_START cleanup in machine\tms9902.c [Oliver Stoeneberg].
- 0.149u1            : Fixed stuck INT line after resetting [Michael Zapf].
- 0.148u2            : Fixed uninitialized variables in machine\tms9902.c [Oliver Stoeneberg].
- 0.146u4            : Added machine\tms9902.c/h. Moved TMS9902 from mess\machine into emu\machine subtree [Michael Zapf].
- NOTES: TMS9902 is an Asynchronous Serial Controller for use with the TI990 and TMS9900 family. It provides serial I/O, three extra I/O pins (namely RTS, DSR and CTS), and a timer. It communicates with the CPU through the CRU I/O bus, and one interrupt pin.
- DRIVERS: jpmmps.cpp and jpms80.cpp
- SOURCE: machine\tms9902.cpp


I6.79  MC68230

- 0.245              : Converted machine\68230pit.cpp to use logmacro. Removed FUNCNAME in machine\68230pit.cpp to avoid compiler-specific #define checks in devices [Ryan Holtz].
- 0.221              : Simplified handlers [Osso].
- 0.196              : Subtle but helpful internal improvements for MC68230 PIT. Publicize IACK functions. Don't store meaningless dummy value in timer control register so it can be read back. Use logmacro.h for logging (and remove LOG_PRINTF since that no longer works). Spelling correction for #include guard [AJR].
- 0.193              : Added 'MC68230 PI/T' device (machine\68230pit.cpp).
- 0.182              : 68230pit updates: Don't forget all externally driven line states when the DDR changes. Return proper port values when line states are pushed instead of pulled [R. Belmont]. Improved LOG system. Added support for the PSR register, H1-H4 sense and direct pin levels [Joakim Larsson Edstrom].
- 0.181              : Improved reset, timer and port C behaviour. Fixed typo and removed uneeded counter in exchange for a more clear TIN pin clock update interface. Added bitwise update methods for all ports and moved register access methods to private section. Fixed bug in port A-C write and added check of DDR registers for bit updates. Added initial support for timer interrupts and embryonic support for port interrupts [Joakim Larsson Edstrom].
- 0.180              : Small PIT68230 fixes [Joakim Larsson Edstrom].
- 0.178              : Improved LOG messages in the 68230 device [Joakim Larsson Edstrom].
- 0.176              : Added support for the 24 bit timer [Joakim Larsson Edstrom].
- 0.175              : Drivers for (MESS) Force Computers CPU-30 and Signetics DUSCC milestone 1 (machine\68230pit.cpp) [Joakim Larsson Edstrom].
- 0.166              : Handle Port C Data Direction Register (register 4). Hook up 68230 to (MESS) Besta-88 and make its ROM self-test pass [Sergey Svishchev].
- 0.164              : Added machine\68230pit.c/h. Started implementation of a Motorola 68230 PI/T (Parallell Interface / Timer) device. Added PBDR register needed for printer on CPU-1, still need to add handshake wiring to the data port to get it to work. More registers added. Started support for CPU-1 Centronics port on Port B. Removed/initialized class members to fix compile problems at Travis etc [Joakim Larsson Edstrom].
- NOTES: Motorola MC68230 PIT Parallell Interface and Timer
- DRIVERS: manohman.cpp
- SOURCE: machine\68230pit.cpp





I6.8   Other


I6.81  Signetics SCN26xx

- 0.282              : Copy old value of MR1 to MR2 when MR1 is written (machine\scn_pci.cpp) [AJR, BulbulatorMacher].
- 0.220              : Added machine\scn_pci.cpp/h. New and completely rewritten emulation of SCN2651 PCI, SCN2661 EPCI & SCN2641 ACI. This is far more thorough and accurate than the preexisting MC2661 device emulation. Synchronous modes have been implemented but not tested. Replaced old MC2661 device in micro3d.cpp with new SCN2651 device and make some associated changes [AJR].
- NOTES: Signetics SCN2651 Programmable Communications Interface (PCI), Signetics SCN2661A/B/C Enhanced Programmable Communications Interface (EPCI) and Signetics SCN2641 Asynchronous Communications Interface (ACI)
- PCB: SCN2651CC1N28 (communications interface, for debug) (Botss, F15se)
- DRIVERS: micro3d.cpp
- SOURCE: machine\scn_pci.cpp


I6.82  UM82C11
- PCB: UMC 8935CS-UM82C11 Printer Adapter Interface (Filetto)

I6.83  SN75452
- PCB: Texas Instruments SN75452 (Shuttlei) - Dual Peripheral Drivers NAND


I6.84  MC6852

- 0.278              : Cleaned up various things. First device marked as not supporting saved states (machine\mc6852.cpp) [Vas Crabb].
- 0.277              : Fixed various transmit-related issues which were preventing (MESS) victor9k Audio output from working (machine\mc6852.cpp). Note: 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 [donohoe00].
- 0.223              : Implemented more functionality and added byte interface [68bit].
- 0.207              : Simplified read/write handlers [AJR].
- 0.177              : MC6852 WIP [Curt Coder].
- 0.153              : Converted MC6852 to DEVCB2 + diserial. Fixed state saving [Curt Coder].
- 0.152              : Removed unused rxd callback from MC6852 (which is only a skeleton) [smf].
- 0.142u1            : Added machine\mc6852.c/h.
- NOTES: Motorola MC6852 Synchronous Serial Data Adapter.
- DRIVERS: (MESS) bus\c64\tdos.cpp, drivers\victor9k.cpp, machine\thomflop.cpp
- SOURCE: machine\mc6852.cpp


I6.85  MC68901

- 0.253              : Record the timer input level always, even if the timer is off (machine\mc68901.cpp) [O. Galibert].
- 0.245              : Removed unnecessary parameters and emu_timer::enable calls (machine\mc68901.cpp) [Ryan Holtz].
- 0.219              : AUTO_TURNAROUND is only done once (machine\mc68901.cpp) [AJR].
- 0.218              : Preliminary cleanup. Sweeping rewrite of USART emulation (no longer based on device_serial_interface), adding support for 16x clock prescaler and data transition synchronization, break generation and detection, internal loopback and synchronous mode (machine\mc68901.cpp) [AJR].
- 0.209              : Added (untested) callback for daisy-chained interrupt acknowledgment (machine\mc68901.cpp) [AJR].
- 0.206              : Detect framing and parity errors and signal Rx error interrupt if enabled [AJR].
- 0.201              : Converted MC68901 to DEVCB3 [AJR].
- 0.192              : Improved MC68901 USART behavior for polled operation [AJR].
- 0.191              : Fixed TCDCR register. Bits 6-4 are used for timer C and bits 2-0 are used for timer D, see https://www.nxp.com/docs/en/reference-manual/MC68901UM.pdf page 43 [Nicolas Planel].
- 0.153              : Uses aer register to select which transition to generate an interrupt on. Added preliminary transmit support and preliminary receiving serial support for MC68901. Converted (MESS) X68000 keyboard into a separate serial device. This allows the removal of the UART HLE in the driver (which didn't work, it was always two characters behind). diserial cannot sync with the start bit properly when using an external clock, so for now I've added a hack that is only enabled when using the MC68901 (setting the flag ignores the extra spurious bit that was getting shifted in). Removed MC68901 polling for gpio bits (mess\drivers\atarist.c and x68k.c). Stores all bits written to gpip register, so that it can update the output when changing the ddr register & renamed variables to tie up more with the description in the data sheet [smf]. Converted MC68901 device to DEVCB2 [Osso].
- 0.152              : Replaced read rx callback in MC68901 with a write handler, which allows multiple chips to be connected together without using glue methods. Removed a load of unused code from MC68901, probably left over when it was converted to use diserial [smf].
- 0.149              : Added RS-232 ports to machine\mc68901.c [Curt Coder].
- 0.148u2            : Fixed uninitialized members in machine\mc68901.c [Oliver Stoeneberg].
- 0.141u2            : Added machine\mc68901.c/h. Curt Coder imported the MC68901 device from MESS so it can be shared with micro3d.c.
- NOTES: Motorola MC68901 Multi Function Peripheral emulation
- PCB: Motorola MC68901P Interface, Multi-Function Peripheral (F15se, Botss)
- DRIVERS: micro3d.cpp
- SOURCE: machine\mc68901.cpp


I6.86  MC88916
- PCB: Motorola MC88916 Multifunction Peripheral Interface, SOIC20 (GTIClub)



I6.87  8243

- 0.203              : I8243 device overhaul: Fixed critical bugs with P4-P7 reads. Emulated the CS line, which will be useful for driving multiple 8243s. Provided a separate callback for each 4-bit port. Eliminated space and offset arguments from p2_r and p2_w. Added save state. Release P2 output after completion of read operation [AJR].
- 0.202              : Removed I8243 MCFG macros [Ryan Holtz].
- 0.186              : Changed description to 'Intel 8243 I/O Expander'.
- 0.147u4            : Fixed I8243 write handler regression following DEVCB2 conversion [Phil Bennett].
- 0.147u2            : Updated I8243 to use DEVCB2 and removed trampolines [Miodrag Milanovic].
- 0.142u3            : Added '8243 I/O Expander' device (machine\i8243.c).
- 0.139u2            : Harmony updated the i8243 Port Expander device to no longer be legacy.
- 0.129              : Added machine\i8243.c/h. Added i8243 implementation. Connected 8243 properly to monsterb and system 16a sound. Unified interface to 8243 expander chip. Converted tnzs and decocass to the new interfaces [Aaron Giles].
- NOTES: Intel 8243 Port Expander
- PCB: NEC D8243C, DIP24 (BodySlam, Sega-System16a)
- DRIVERS: othello.cpp, segas16a.cpp and segag80r.cpp
- SOURCE: machine\i8243.cpp/h



I6.88  8279

- 0.222              : Keyscan overhaul: Improved handling of multiple key depressions. Emulated debounce cycles (emulation partly disabled due to MAME updating inputs only once per frame). Added switch closed status flag for sensor matrix mode [AJR].
- 0.219              : Simplified handler signatures. Added save state. Disabled read side effects. Removed timing hack. Make sure SL3 gets output (MESS) Pied Piper Communicator needs it. Correct keyboard scan rate and logging. Fixed accidentally uncovered crash in Turbo (Sega 1981) (machine\i8279.cpp). This device emulation is anything but robust [AJR].
- 0.202              : Removed I8279 MCFG macros [Ryan Holtz].
- 0.201              : Added DEVCB3 accessors [Ryan Holtz].
- 0.186              : Changed description to 'Intel 8279 KDC'.
- 0.180              : Unify read/write handlers for standard A0-to-A0 hookup [AJR].
- 0.155              : Improved display in peyper.c; added i8279 chip and added inputs [Robbbert].
- 0.154              : Converted i8279 to DEVCB2 [Osso]. Converted drivers\maygay1b.c, maygay1bsw.c and maygayv1.c to standard i8279 drivers [James Wallace]. Added asserts for known index out-of-bounds accesses in i8279_device [Oliver Stoeneberg].
- 0.145u7            : Added emu\machine\i8279.c/h. Added '8279 KDC' device. Import updated i8279 device driver to emu\machine (shared) folder [Tafoid]. Converted turbo.c to use i8279 device [Sandro Ronco].
- 0.108u2            : Further Turbo driver cleanup [Aaron Giles]: Added a more complete 8279 implementation.
- NOTES: Intel 8279 KDC = Intel 8279 Programmable Keyboard/Display Interface emulation
- PCB: D8279 (Buckrog, Turbo), P8279 (Turbo), AM8279PC programmable keyboard / display interface (Unknown PCB)
- DRIVERS: gsspade.cpp, icecold.cpp, marywu.cpp, maygay1bsw.cpp, maygayv1.cpp, peyper.cpp and turbo.cpp
- SOURCE: machine\i8279.cpp


I6.89  AM2950
- NOTES: The AMD AM2950DC is a I/O port to the sound processor.
- PCB: BegasBattle (DataEast 1983)


I6.90  QS32X384
- PCB: QuickSwitch Products QS32X384 High-Speed CMOS 20-Bit Bus Switch (Mtetrisc)



I6.91  I2C Memory

- 0.282              : Added 24C65 alias for (MESS) Megadrive bighurt/brianl96/collslam/shanewar (machine\i2cmem.cpp) [Angelo Salese, Happy].
- 0.279              : Revert change from MAME 0.278 (Don't enter start condition except from idle state) that broke dreamlss. Don't falsely register I2C bus start or stop condition while device as slave is driving SDA. Modernize logging (machine\i2cmem.cpp) [AJR]. Fixed (MESS) later Acclaim sport games fails I2C checks during POST (sega\megadriv.cpp) (GitHub #13998) [Angelo Salese].
- 0.278              : Don't enter start condition except from idle state (machine\i2cmem.cpp) [AJR].
- 0.265              : Added 24C128 and 24C256 I2C Memory variants [Dirk Best].
- 0.244              : I2C Memory and derived devices: Only acknowledge correct I2C device-id (machine\i2cmem.cpp). Added FIXME comments to badly behaved I2C target devices. I2C slaves should only ACK their own device-id and NAK all others. SDA output should only change state while clock is low. Idle state of SDA must be high (machine\pcf8593.cpp, machine\x76f041.cpp, machine\x76f100.cpp, sound\mas3507d.cpp and machine\zs01.cpp) [Paul Arnold].
- 0.241              : Initialized m_bits (machine\i2cmem.cpp) [AJR].
- 0.230              : Added Xicor X24C01 support [Ryan Holtz].
- 0.229              : Added PCF8570 device [Nigel Barnes].
- 0.227              : Added PCF8582 device [Nigel Barnes].
- 0.222              : Created i2cmem sub classes for all used device types, fixed the buffer sizes that were wrong, removed the methods for modifying the data & buffer sizes and changed the drivers to use the correct types [smf].
- 0.220              : Latch the upper address bits from the I2C device ID after receiving the lower 8 bits of the address, implemented 2-wire softwarereset for I2C, stop nack from lowering sda and removed redundant state from I2C page write. Added support for the address high byte to i2cmem for devices greater than 4096 bytes [smf].
- 0.219              : Added '24C04 I2C Memory' device type [Ryan Holtz].
- 0.208              : Fixed page write logic [O. Galibert].
- 0.207              : Added '24C01 I2C Memory', '24C02 I2C Memory', '24C08 I2C Memory', '24C16 I2C Memory', '24C16A I2C Memory' and '24C64 I2C Memory' device. Removed MCFG macros [Ryan Holtz].
- 0.205              : Added 'X2404P I2C Memory' device.
- 0.175              : Removed device_memory_interface in machine\i2cmem.cpp [O. Galibert].
- 0.174              : One step closer to core I2C EEPROM implementation (megadrive\eeprom.cpp) [Fabio Priuli].
- 0.154              : Fixed usage of uninitialized members in i2cmem_device [Oliver Stoeneberg].
- 0.153              : Only save m_page for chips that use pages (machine\i2cmem.c) [Wilbert Pol].
- 0.152              : Finished modernising i2cmem [smf].
- 0.148u2            : Fixed initialization of i2cmem_device [Oliver Stoeneberg].
- 0.147              : Use device_t.static_set_static_config (machine\i2cmem.c) [smf].
- 0.141u2            : Hook up part of the I2C communication with the MAS3507D sound [O. Galibert].
- 0.140u2            : Fixed problems with i2cmem. Cubo CD32 games now save and load settings properly [Mariusz Wojcieszek].
- 0.139u2            : Added clock read-back register to the I2C device [Angelo Salese].
- 0.138u4            : Added 'I2C Memory' device. Removed machine\i2cmemdev.c/h. Turned i2cmem into a C++ device & ditched the unused legacy device [smf].
- 0.130u3            : Added machine\i2cmemdev.c/h. Added device-based implementations of the EEPROM and I2C devices [Samuele Zannoli].
- 0.120u2            : Added machine\i2cmem.c. Added generic I2C bus memory support. Hooked up to the cubocd32 driver [smf].
- NOTES: Generic ram/rom/eeprom/flash on an I2C bus.
- DRIVERS: 4enlinea.cpp, cubo.cpp, ertictac.cpp, funworld.cpp, ghosteo.cpp, hotblock.cpp, microdar.cpp and twinkle.cpp
- SOURCE: machine\i2cmem.cpp


I6.92  MD0204
- NOTES: Fuji MD0204 memory controller
- PCB: Fuji MD0204 JAPAN F39D110, QFP128 (Sliver)


I6.93  TMS6100

- 0.170              : Rewrote TMS6100 command handling, (MESS) Mr. Challenger sound is now correct [hap].
- 0.169              : Added TMS6100 4bit read support for (MESS) Mr. Challenger. (MESS) Mr. Challenger expects reads from TMS6100 to be valid after setting indirect address. Added notes [hap].
- 0.164              : WIP preparing to fix the speech in Radar Scope [Lord Nightmare].
- 0.160              : Added the TMS6125 4KiB VSM pinout [Lord Nightmare, David Viens].
- 0.157              : Added TMS6100 hookup to (MESS) Speak & Spell (US, prototype) and Speak & Math (US, prototype), fixing speech in them [Lord Nightmare].
- 0.149              : Modernized the TMS6100 device [Osso].
- 0.138u2            : Added machine\tms6100.c/h. Added TMS6100 memory controller device. Couriersud moved TMS6100 code into emu\machine\tms6100. Added pinouts for TMS6100 and M58819.
- NOTES: Texas Instruments TMS6100 Voice Synthesis Memory (VSM).
- DRIVERS: by35.cpp, audio\dkong.cpp and (MESS) tispeak.cpp
- SOURCE: machine\tms6100.cpp


I6.94  Prime 3C
- NOTES: LG Semicon Super I/O chip, Prime3C, address decoding, FDD control, most of the IDE functionality, RS232 control and the printer port, Prime 3C Super I/O device - http://www.physics.adelaide.edu.au/~jwoithe/prime3b/
- PCB: LGS Prime 3C 9930R (QFP100), Prime 3C 9849R (SeeSeeFindOut, Ppcar)


I6.95  Bitbanger

- 0.241              : Added software list loader support (used by sitcom) [Vas Crabb].
- 0.188              : Fixed potential compile error [Robbbert].
- 0.154              : Converted Bitbanger device to DEVCB2. Loading CoCo doesn't crash, but someone familiar with the system should test it [Osso].
- 0.148u4            : Handle Bitbanger create. Use Bitbanger instead of prin on the command line. Give it a brief name [Carl].
- 0.145u2            : Miodrag Milanovic added 19200bps to Bitbanger.
- 0.141u1            : Added imagedev\bitbngr.c/h.
- NORES: TRS style "bitbanger" serial port.
- DRIVERS: (MESS) coco.cpp and null_modem.cpp
- SOURCE: imagedev\bitbngr.cpp


I6.96  Serial device interface

- 0.271              : Improved stop bit handling. Fixes bytes are read too slow in serial emulation. Never check more than one stop bit on reception. Don't add an extra stop bit on transmission (emu\diserial.cpp) [Colin Leroy-Mira]. Got rid of the per-instance parity lookup table [Vas Crabb].
- 0.264              : Changed the rx start delay to more realistic 0.5 cycles (emu\diserial.cpp) [hap].
- 0.255              : Added machine time to bit logging messages (emu\diserial.cpp) [AJR].
- 0.225              : Use logmacro for optional logging and make the messages more useful (emu\diserial.cpp) [AJR].
- 0.210              : Correct parity output [Patrick Mackinlay]. Make received parity consistent with transmitted parity [AJR].
- 0.206              : Actually check parity of received bytes in modes other than PARITY_NONE; fixed transmission of parity bit in PARITY_EVEN mode (emu\diserial.cpp). Make is_receiver_register_full and is_transmit_register_empty const and inline [AJR].
- 0.177              : Make buffered serial a mixin to promote reuse (rs232\keyboard.cpp, rs232.h, terminal.cpp, emu\diserial.h) [Vas Crabb].
- 0.173              : Added extra bit as delay between bytes to make 1 stop bit work [Joakim Larsson Edstrom].
- 0.154              : Fixed usage of uninitialized member in device_serial_interface [Oliver Stoeneberg].
- 0.153              : Removed serial_source_device. Expose less of the diserial internals. Don't transmit anything when driven by an external clock and nothing has been queued. Removed diserial connect() [smf]. Added some information getters for future use. Added framing error detection [Curt Coder].
- 0.152              : Removed defines, cleanup clocks/timers and added sync support (emu\diserial.c) [O. Galibert]. Double half diserial cycle freq [Carl].
- 0.149u1            : Added attotime and clock-div forms of set_rateand rename check_for_start to rx_w. attotime from_hz is inverted so multiply (emu\diserial.c). Simplify diserial [Carl].
- 0.149              : Added methods for clocking the receiver/transmitter outside of the timers (emu\diserial.c) [Curt Coder].
- 0.148u2            : Fixed uninitialized variables and member in emu\diserial.c [Oliver Stoeneberg].
- 0.148              : Correct uninitialized data bug where the first character transmitted would sometimes fail to synch (emu\diserial.c) [R. Belmont].
- 0.145u5            : Fix for ibmpcjr error (emu\diserial.c) [Carl].
- 0.145u2            : Added optinal rx and tx timers and callbacks [Carl].
- 0.143u5            : Added emu\diserial.c/h.
- DRIVERS: philips\cdi.h, seta.cpp and seta2.cpp, isa\sblaster.h, rs232\null_modem.h, rs232\printer.h and rs232\rs232.h
- SOURCE: emu\diserial.cpp




I6.97  MK68564
- 0.216              : Added preliminary MK68564 device. Emulate BRG [AJR].
- DRIVERS: (MESS) e9161.cpp and msbc1.cpp
- SOURCE: machine\z80sio.cpp



I7.    I/O Controller


I7.1   8212

- 0.212              : Simplified read/write handlers [AJR].
- 0.202              : Removed I8212 MCFG macros [Ryan Holtz].
- 0.200              : Removed MCFG macros (machine\i8212.h) [Vas Crabb].
- 0.191              : Added 'Intel 8212 I/O Port' device (machine\i8212.cpp). Renamed IRQ to INT to agree with Intel pin names. Device overhaul: Changed the mode setting from a line write to an input callback. This is based on the observation that MD is nearly always tied to either Vcc or GND on actual hardware. Make the mode a scoped enumeration. Added strobed write handler for input mode. This allows the device to be hooked up in supstarf in place of generic_latch_8_device. Added interrupt acknowledge callback for future use. Added extensive introductory comments [AJR].
- 0.153              : Converted I8212 to DEVCB2 [Curt Coder].
- 0.142              : Added machine\i8212.c/h.
- NOTES: Intel 8212/3212 8-Bit Input/Output Port (Multi-Mode Latch Buffer). spacefb.c: Communicates to the Sound card (via 8212 latch)
- PCB: 8 bits gets "sent" to a 8212 chip (Spacefb), INS/DP8212N P8212, DIP 24 (Malzak, Rjammer), ICL8212CPA 8049SI (Unknown TMS9980 board), 8049 (Stratof)
- DRIVERS: supstarf.cpp
- SOURCE: machine\i8212.cpp


I7.2   I8274
- NOTES: Intel P8274 Multi Protocol Serial Controller - MPSC
- PCB: iP8274 (Dwarfd)


I7.3   CDP1852

- 0.272              : Fixes and enhancements. Fixed clock write handler. Added write handler for automatically clocking 8-bit data into input-mode latch. Added line read handler for SR output (machine\cdp1852.cpp) [AJR].
- 0.221              : Simplified handlers [Osso].
- 0.200              : Replaced CDP1852 I/O callback macros with DEVCB3 bindings; use line write handler to clock output from TPB [AJR].
- 0.192              : Added DO read function to machine\cdp1852.h [Curt Coder].
- 0.153              : Converted CDP1852 to DEVCB2 [Curt Coder].
- 0.142u1            : Refactored CDP1852 into a C++ device and cleaned up the Cidelsa driver slightly [Curt Coder].
- 0.129u4            : Cidelsa changes [Curt Coder]: Refactored CDP1852 to use DEVCB.
- 0.125u1            : Added machine\cdp1852.c/h. Curt Coder added CDP1852 I/O buffer chip, and used it in Altair/Draco.
- NOTES: The Intersil CDP1852 and CDP1852C are parallel, 8-bit, mode-pro-grammable input/output ports. They are compatible and will interface directly with CDP1800-series microprocessors. They are also useful as 8-bit address latches when used with the CDP1800 multiplexed address bus and as I/O ports in general-purpose applications.
- DRIVERS: cidelsa.cpp and nightmare.cpp
- SOURCE: machine\cdp1852.cpp


I7.4   INS8154

- 0.208              : Added internal 128-byte RAM and simplified handlers [Ryan Holtz].
- 0.207              : Fixed bit register accesses [Joakim Larsson Edstrom].
- 0.202              : Removed INS8154 MCFG macros [Ryan Holtz].
- 0.153              : Converted INS8154 to DEVCB2 [Osso].
- 0.139u2            : Harmony updated the INS 8154 RAM I/O device to no longer be legacy.
- 0.136u4            : Added machine\ins8154.c/h. Dirk Best moved INS8154 emulation from MESS to MAME, needed by future drivers. Updated device to use DEVCB calls, cleaned up.
- NOTES: The INS8154 is a N-Channel 128-by-8 Bit RAM Input/Output device
- DRIVERS: vega.cpp
- SOURCE: machine\ins8154.cpp


I7.5   uPD7201
- 0.188              : Replaced console hack with upd7201 device in (MESS) Sun-1 [Sergey Svishchev].
- 0.149              : Removed machine\upd7201.c/h.
- 0.142u1            : Added machine\upd7201.c/h.
- NOTES: NEC uPD7201 Multiprotocol Serial Communications Controller


I7.6   TMS5501

- 0.221              : Simplified handlers [Osso].
- 0.208              : Since 0.153, assembler based games for (MESS) 'DAI Personal Computer' are not working anymore. The program does a check of the transmit buffer status in the TMS5501, however this sometimes returned 0 (not empty) when it was empty. So it would loop, waiting for the correct status which never came [Robbbert].
- 0.201              : Converted TMS5501 to DEVCB3. Renamed INT callback to match pin name [AJR].
- 0.196              : Replaced UART with TMS5501 in (MESS) mcb216 and cb308 [AJR].
- 0.153              : Moved mess\machine\tms5501.c/h to emu\machine\. Rewrote TMS5501 emulation to use DEVCB2 and diserial. Updated (MESS) DAI Personal Computer to use new TMS5501 [Curt Coder].
- NOTES: TMS5501 Multifunction Input/Output Controller emulation.
- DRIVERS: (MESS) compucolor.cpp, dai.cpp and mcb216.cpp
- SOURCE: machine\tms5501.cpp


I7.7   Toshiba

I7.71  TMP82265
- NOTES: I/O Custom chip
- SOURCE: taifo_f2
- PCB: TMP82C265BF: Growl (Taito 1990), Quiz-HQ (Taito 1990), Solitary Fighter (Taito)

I7.72  TMP8740
- PCB: TOSHIBA TMP87CH40N-4828 I/O controller, SDIP64 (NeoGeoHyper64)


I7.8   SMC FDC37C932
- PCB: SMC FDC37C932APM, QFP160 (A51site4) - Plug and play compatiable ultra I/O Controller with software mangment from Standard Microsystems


I7.9   TE7750

- 0.261              : Added TE7750 input getters to Poker Spirit [Angelo Salese].
- 0.220              : Simplified handler signatures [AJR].
- 0.205              : Default clock and updated docs [AJR].
- 0.187              : Added machine\te7750.cpp/h. Added 'TE7750 Super I/O Expander' device [AJR].
- NOTES: The TE7750 and its successors are CMOS I/O expanders equipped with nine 8-bit parallel ports, which can programmed for input or output either in hardware or in software.
- PCB: TE7750 (Ninjak)
- DRIVERS: bingowav.cpp, capr1.cpp, cpzodiac.cpp, cucaracha.cpp, pkspirit.cpp and taito_f2.cpp
- SOURCE: Added machine\te7750.cpp


7.91  TE7751
- 0.234              : Added 'TE7751 Super I/O Expander' device. Map TE7751 I/O expanders for heromem.cpp and sbmjb.cpp [AJR].
- DRIVERS: heromem.cpp and sbmjb.cpp
- SOURCE: machine\te7750.cpp


7.92  TE7752
- 0.205              : Added TE7752 type [AJR].
- NOTES: TE7752 Super I/O Expander
- DRIVERS: flashbeats.cpp
- SOURCE: machine\te7750.cpp




I8.    Input/Output

I8.1   Analog Digital Converter (ADC)

       ADC0804         DIP20                              (Dday, Armchmp2, SuperMonacoGP)
       ADC0808         ADC0808CCN, S9530AG-ADC0808-CCV    (LockLoad, Backfire)           NOTES: A/D converter for lightgun (Othunder)
       ADC0809         ADC0809CCN                         (Superchs, Groundfx, Opwolf3)  NOTES: The ADC0809CCN is a 8-bit ADC with 8-way mux or 8-bit Microprocessor Compatible A/D Converter with 8-Channel Multiplexer (DataSheet at http://www.national.com/ds/AD/ADC0808.pdf).
       ADC0834                                            (Racin' Force)                 NOTES: National Semi ADC0834 steering wheel
       ADC0844                                            (Max RPM)                      SOURCE: drivers\mcr3.cpp
       ADC0848     NSC ADC0848CCN                         (Gauntleg)
       ADC12138    NSC ADC12138                           (Gradius4, Konami-HornetSys)   NOTES: 12-bit + serial I/O ADC with MUX, self calibrating

       AD813           AD 813AR, SOIC14                   (A51site4, 11beat, Mtetrisc)
       AD7582          AD7582KN                           (MetalManiax)                  NOTES: 12-bit ADC

       TLC549    Texas Instruments TLC549 8-BIT Analog-to-Digital Converter with serial control, compatible to TLC540-545-1540 (Surfplnt)

       WIP:
       - 0.285: Tidy some stuff (sound\adc.cpp) [Vas Crabb].
       - 0.283: Overhaul of the synthesis part, effects to follow (sound\adc.cpp, sound\swp00.cpp) [O. Galibert].
       - 0.278: Added sound\adc.cpp/h. New sound infrastructure [O. Galibert].


I8.11  ADC0804

- 0.247              : Added ADC0804 A/D Converter to Spy Hunter and Turbo Tag [AJR].
- 0.215              : Added machine\adc0804.cpp/h. Emulated ADC0804 and added device to various drivers [AJR].
- NOTES: ADC0804 A/D Converter
- DRIVERS: cischeat.cpp, mcr3.cpp, nemesis.cpp, overdriv.cpp, polepos.cpp, segae.cpp, segahang.cpp, segaorun.cpp, segaxbd.cpp, tmnt.cpp, wallc.cpp and wecleman.cpp
- SOURCE: machine\adc0804.cpp



I8.12  ADC0808

- 0.251              : One logerror was missing \n (ENTER) [hap].
- 0.201              : Removed MCFG macros and old DEVCB [Ryan Holtz].
- 0.198              : Reduced CPU overhead by smarter timer usage. Made timing more accurate to the datasheet [Ryan Holtz].
- 0.197              : Added 'ADC0808 A/D Converter' device. Rewrote ADC0808 device so it actually works [Dirk Best]. Allow polling of EOC line. Allow side effect disabling for reads [AJR].
- 0.154              : Converted ADC0808 to DEVCB2 and delegates. Removed some unused macros [Osso].
- 0.148u2            : Fixed uninitialized member in machine\adc0808.c [Oliver Stoeneberg].
- 0.142u1            : Added machine\adc0808.c/h.
- NOTES: National Semiconductor ADC0808/ADC0809 A/D Converter with 8 Channel-Multiplexer
- PCB: ADC0809CCN (drifto94, galastrm)
- DRIVERS: backfire.cpp, othunder.cpp, vertigo.cpp and wheelfir.cpp
- SOURCE: machine\adc0808.cpp


I8.13  ADC0809
- 0.251              : One logerror was missing \n (ENTER) [hap].
- 0.197              : Added 'ADC0809 A/D Converter' device. Rewrote ADC0808 device so it actually works [Dirk Best]. Allow polling of EOC line. Allow side effect disabling for reads [AJR].
- DRIVERS: atarig1.cpp, atarig42.cpp, atarigt.cpp, atarigx2.cpp, atarisy1.cpp, atarisy2.cpp, eprom.cpp, firefox.cpp, foodf.cpp, galastrm.cpp, groundfx.cpp, harddriv.cpp, irobot.cpp, jedi.cpp, slapshot.cpp, ssv.cpp, starwars.cpp, superchs.cpp, taito_z.cpp, tceptor.cpp, tomcat.cpp, undrfire.cpp and wgp.cpp
- SOURCE: machine\adc0808.cpp


I8.14  ADC083x

- 0.206              : Default input clocks for ADC083x [AJR].
- 0.201              : Removed MCFG macros and old DEVCB [Ryan Holtz].
- 0.154              : Updated ADC083x to use delegates and slightly reduced tagmap lookups in konamigx and zr107 while at it [Fabio Priuli].
- 0.149              : Removed adc083x_interface [smf].
- 0.148u5            : Modernised ADC083x [smf].
- 0.135u2            : ADC devices updates [smf]: adc08x chips are all hooked up using input/output ports. Reversed Racin' Force steering wheel input and gas pedal, which is enough to get the game to boot. Reversed steering wheel input on Winding Heat, the usa cabinets are however hooked up the other way. Renamed adc0831_interface to adc083x_interface. Fixed adc083x gnd input. Removed stray call logerror from adc083x.c. Fixed default adc083x sars value. adc083x reset only affects outputs.
- 0.131u4            : Fabio Priuli converted ADC083x converters to be MAME devices.
- 0.96u1             : smf fixed ADC overflow condition in ADC083x code.
- 0.95u3             : Added machine\adc083x.c/h. Cycle accurate emulation of ADC0831/ADC0832/ADC0834/ADC0838 serial analogue to digital converters [smf].
- NOTES: 8-Bit Serial I/O A/D Converters with Muliplexer Options (ADC0831/ADC0832/ADC0834/ADC0838). PCB: Gun games need an ADC to interpret the movement of the players gun.
- DRIVERS: konamigx.cpp, ksys573.cpp and zr107.cpp
- SOURCE: machine\adc083x.cpp


I8.15  ADC0844

- 0.206              : Default input clocks for ADC084x [AJR].
- 0.201              : Removed MCFG macros and old DEVCB [Ryan Holtz].
- 0.192              : Added machine\adc0844.cpp. Added ADC0844 A/D Converter for input to mcr3.cpp (maxrpm), mcr68.cpp (spyhunt2), micro3d.cpp, midvunit.cpp and midyunit.cpp (term2). Added ADC0844 device to (MESS) Einstein. The analogue joystick is now emulated [Dirk Best].
- NOTES: A/D Converter with multiplexer options
- DRIVERS: mcr3.cpp, mcr68.cpp, micro3d.cpp, midvunit.cpp and midyunit.cpp
- SOURCE: machine\adc0844.cpp


I8.16  ADC0848

- 0.206              : Default input clocks for ADC084x [AJR].
- 0.192              : Added machine\adc0844.cpp. Support ADC0848 variant, some adjustments to differential mode [Dirk Best].
- NOTES: A/D Converter with multiplexer options
- DRIVERS: midxunit.cpp
- SOURCE: machine\adc0844.cpp


I8.17  ADC1038

- 0.201              : Removed MCFG macros and old DEVCB [Ryan Holtz].
- 0.154              : Updated ADC1038 to use delegates and inline configs [Fabio Priuli].
- 0.149              : Modernize ADC1038 device [Osso].
- 0.147              : Fixed data out reads (machine\adc1038.c) [Ville Linde].
- 0.136              : Added emu\machine\adc1038.c/h. Splitted ADC1038 emulation from gticlub.c. Also converted it be device and updated PPC Konami games to use the new code [Fabio Priuli].
- NOTES: National Semiconductor ADC1038 = 10-Bit Serial I/O A/D Converters with Analog Multiplexer and Track/hold Function
- DRIVERS: gticlub.cpp and cobra.cpp
- SOURCE: machine\adc1038.cpp



I8.18  ADC1213x

- 0.251              : Implemented ADC12138 for Silent Scope board [Windy Fairy].
- 0.210              : Simplified handlers [cam900].
- 0.201              : Removed MCFG macros and old DEVCB [Ryan Holtz].
- 0.154              : Updated ADC12138 to use delegates [Fabio Priuli].
- 0.149              : Modernize ADC12138 device [Osso].
- 0.146u3            : Ville Linde added an unhandled case to ADC1213x.
- 0.131u4            : Fabio Priuli converted ADC1213x converters to be MAME devices.
- 0.114u2            : Added machine\adc1213x.c/h. Ville Linde added ADC1213x A/D converter emulation.
- DRIVERS: hornet.cpp and nwk-tr.cpp
- SOURCE: machine\adc1213x.cpp



I8.2   NEC

I8.21  uPD7002

- 0.281              : Replaced custom delegates with devcb [Nigel Barnes].
- 0.208              : Simplified read/write handlers [AJR].
- 0.154              : Updated upd7002 to use delegates [Fabio Priuli].
- 0.153              : Modernized upd7002 device [Osso].
- 0.148u2            : Moved mess\machine\upd7002.c/h to emu\machine\ [Curt Coder].
- NOTES: uPD7002 Analog to Digital Converter
- DRIVERS: (MESS) bbc.cpp
- SOURCE: machine\upd7002.cpp


I8.22  uPD7004

- 0.221              : Simplified handlers [Osso].
- 0.211              : Added machine\upd7004.cpp/h. Added uPD7004 ADC device. Updated Beast Busters gun handling uses the uPD7004 device, fixes strange Players AI behaviour in attract mode. Adjusted gun limits to the factory defaults. Removed no longer needed default EEPROMs. Calibration in service mode now also works and doesn't cause the game to refuse to boot [Dirk Best].
- NOTES: uPD7004 10-bit 8 Channel A/D Converter
- DRIVERS: busters.cpp
- SOURCE: machine\upd7004.cpp


I8.23  MSM6253

- 0.259              : Use MSM6253 ADC device in Heavyweight Champ [AJR].
- 0.221              : Simplified handlers [Osso].
- 0.206              : Removed MCFG macros and added DEVCB3 support [Ryan Holtz].
- 0.187              : Disable side effects in some read handlers (machine\msm6253.cpp) [AJR].
- 0.186              : Changed description to 'OKI MSM6253 A/D Converter'.
- 0.185              : Added machine\msm6253.cpp/h. Added 'MSM6253 A/D Converter' device. Added OKI MSM6253 device to segaybd.cpp and srallyc. Read pedals through MSM6253 in Hot Rod [AJR].
- NOTES: OKI MSM6253 8-Bit 4-Channel A/D Converter
- DRIVERS: model2.cpp and segaybd.cpp
- SOURCE: machine\msm6253.cpp


I8.24  M58990

- 0.197              : Added 'M58990 A/D Converter' device. Rewrote ADC0808 and make it work. Added M58990 A/D Converter to Lock-On [Dirk Best]. Added M58990 A/D Converter to Apache 3 [AJR].
- NOTES: Mitsubishi M58990 A/D Converter compatible with ADC0808.
- DRIVERS: lockon.cpp and tatsumi.cpp
- SOURCE: machine\adc0808.cpp


I8.3   Coin

I8.31  PC3092
- NOTES: Chip for coin inputs and start buttons.
- SOURCE: drivers\crbaloon.cpp


I8.4   Lamps

I8.41  Lamp Driver

- 0.118              : Removed machine\lamps.c/h.
- 0.103u2            : Added machine\lamps.c/h.
- NOTES: For the 'Lamp Driver' in Spy Hunter is a 3-to-8 latching demuxer connected to the input bits. Three of the inputs (J1-11,10,12) specify which output to write to, and the fourth input (J1-14) is the data value. A fifth input (J1-13) controls the strobe to latch the data value for the demuxer. The eight outputs directly control 8 lamps.
- SOURCE: machine\lamps.cpp

I8.42  Lamp Sequencer
- NOTES: For the 'Lamp Sequencer' in Discs of Tron is a 556 timer set up in astable mode with two different frequencies, one using R1=R2=10k and C=10uF giving a frequency of 4.8 Hz, and the second using R1=R2=5.1k and C=10uF giving a frequency of 9.4118 Hz. The outputs of these clocks go into a mux at U4, whose input is selected by the input bit latched from J1-6. The output of the mux clocks a 16-bit binary counter at U3. The output of the binary counter becomes the low 4 address bits of the 82S123 PROM at U2. The upper address bit comes from the input bit latched from J1-5. Each of the 5 output bits from the 82S123 is inverted and connected to one of the lamps. The /CE pin on the 82S123 is connected to the input bit latched from J1-4. Thus: J1-4 enables (0) or disables (1) the lamp sequencing, J1-5 selects one of two 16-entry sequences stored in the 82S123 and J1-6 selects one of two speeds (0=4.8 Hz, 1=9.4118 Hz).
- SOURCE: drivers\mcr3.cpp

I8.43  Flasher
- NOTES: For the 'Flasher Control' in Discs of Tron is a 555 timer set up in astable mode with R1=R2=56k and C=1uF giving a frequency of 8.5714 Hz. The timer is enabled if J1-3 is high (1). The output of the timer is connected to the input of a D-type flip flop at 1A, which is clocked by the AC sync (since this is a fluorescent light fixture). The J1-4 input is also connected the input of another D-type flip flop on the same chip at 1A. The output of this directly controls the light fixture. Thus: J1-3 enables a strobe effect at 8.5714 Hz (77.616ms high, 38.808ms low) and J1-4 directly enables/disables the lamp. The two outputs are wire-ored together.
- SOURCE: drivers\mcr3.cpp


I8.44  Stepper motor

- 0.199              : Separated reel and stepper devices to an extent, cleaned up use of custom mcfgs for them [Ryan Holtz].
- 0.157              : Converted steppers to device_t [Ramiro Polla]. Attempt at fixing the new Stepper device to load correctly for AWP games. This is part 1 of a plan to remove the stepper_interface for a DEVCB2 setup. Significant change to Stepper motor device behaviour, using DEVCB2 interfaces. New functions added: MCFG_STEPPER_ADD(tag) - add a stepper device, MCFG_STEPPER_REEL_TYPE(type) - the equivalent of the first line in the old interface, now also takes NOT_A_REEL for printer and similar applications, MCFG_STEPPER_START_INDEX(int index) - the old second line of the interface, the position (in half steps) where the optic tab first triggers, MCFG_STEPPER_END_INDEX(int index)  - the old third line of the interface, the last position (in half steps) where the optic tab triggers, MCFG_STEPPER_INDEX_PATTERN(int pattern) - a coil pattern in hexadecimal that has to be on the motor for the index to trigger (0 if no specific pattern is needed) and MCFG_STEPPER_INIT_PHASE(int phase) - starting phase of the motor. All drivers have been updated, testing done to all specific drivers - Scorpion 4 was particularly complex [James Wallace].
- 0.156              : Moved mame\machine\steppers.c/h emu\machine\. Added absolute position for stepper motor [Ramiro Polla].
- 0.146u1            : Improved reel motor and optical alignment for reels as related to the layout interface. Comment: Made a significant change to how stepper motors operate in MAME - it is now possible to align a reel motor properly in the interface (namely by specifying what motor phase is active at 0). As a consequence, reverse spin should only be specified in layouts, and optical alignment should be much better. As a note, Scorpion 4 has had its interface changed to one specifically for its reel type, it may be worth watching for regressions in their behaviour as a result. It looks like that particular reel type can move its opto tab around the circumference of the unit, so different interfaces may be needed [James Wallace].
- 0.145u7            : Did some stepper motor work to support more types [James Wallace].
- 0.142u1            : Added reverse-spin support to the stepper motor simulator [James Wallace].
- 0.127u1            : Updated stepper motor code to use a MAME-style config interface, rather than a load of setting functions. Changed optic functions to use clearly defined start and end points. Added standard layout for Starpoint units used in many machines. Updated all affected drivers [James Wallace].
- 0.122u7            : Scorpion 2 has also been altered to match the MPU4 coding style, where proper handlers re now included for the stepper motor data, which can then be expanded on in AGEMAME [James Wallace].
- 0.111u3            : Added save state support to the steppermotor emulation module (machine\steppers.c) [James Wallace].
- 0.103u2            : Added mame\machine\steppers.c/h.
- NOTES: Steppermotor emulation. Emulates stepper motors driven with full step or half step also emulates the index optic.
- DRIVERS: aces1.cpp, bfm_sc1.cpp, bfm_sc2.cpp, bfmsys85.cpp, ecoinf2.cpp, ecoinf3.cpp, ecoinfr.cpp, jpmsys5.cpp, jpmimpct.cpp, maygay1bsw.cpp, mpu3.cpp, mpu4.cpp and mpu4vid.cpp
- SOURCE: machine\steppers.cpp



I8.5   Terminal

- 0.192              : Lower beeper volume (machine\terminal.cpp) [hap].
- 0.191              : Tighten up scope. Get rid of vestigial palette that was breaking generic terminal when it isn't first screen [Vas Crabb].
- 0.177              : Keyboard/terminal improvements: Mark lots of things constexpr in attotime and turn macros into functions. Add base classes for HLE matrix keyboard and buffered RS232 device. Make generic keyboard/terminal more usable. Keyboard has configurable typematic delay/rate. Keyboard has selectable JIS/ANSI layout. Keyboard handles simultaneous keypresses more intuitively. Keyboard uses meta to set high bit. Terminal has configurable auto LF on CR, auto CR on LF and local echo. Terminal has audible bell. Untangle Olivetti M20 keyboard from generic_keyboard. Add notes to Olivetti M20 keyboard emulation. Make Olivetti M20 keyboard match physical layout. Untangle RM Nimbus keyboard from generic_keyboard. Fix natural keyboard mode with RM Nimbus. Untangle x68k keyboard from generic_keyboard. Improve x68k key names and mapping. Improve x68k typematic behaviour. Untangle QX-10 keyboard from generic_keyboard. Keep NGEN keyboard barely working. Default auto CR on LF for generic terminal (machine\terminal.cpp) [Vas Crabb].
- 0.175              : Fixed color configuration (machine\terminal.cpp) [Nigel Barnes].
- 0.155              : Save state some members; doesn't fix xor100 save state issue though (machine\terminal.c) [Wilbert Pol].
- 0.154              : Fixed startup order issue introduced in r28777 (rs232\terminal.h) [smf]. Converted generic terminal device to DEVCB2 [Osso].
- 0.153              : Moved mess\machine\terminal.c/h to emu\machine\. Added bus\rs232\terminal.c/h. Changed (MESS) Heathkit H89 to use an RS232 port to communicate with the serial terminal to instead of connecting it directly [smf].
- 0.148u5            : Serial keyboard and terminal have same options (machine\keyboard.c and machine\terminal.c) [Robbbert].
- DRIVERS: funkball.cpp, konamim2.cpp, vegas.cpp
- SOURCE: machine\terminal.cpp/h and rs232\terminal.cpp/h



I8.6   Display

I8.61  Alphanumeric Display

- 0.259              : Don't randomize ram at power on (video\dl1416.cpp) [hap].
- 0.233              : DL1414 does not have CE pin or addr latch [hap].
- 0.212              : Simplify bus_w handlers and type names [AJR].
- 0.194              : Changed description from to 'DL1414T Intelligent Display', 'DL1416B Intelligent Display' and 'DL1416T Intelligent Display'.
- 0.183              : DL1416 update: Split interface into signal-level and bus-level APIs and improved support for different variants [Vas Crabb].
- 0.153              : Converted DL1416 device to DEVCB2 [Osso].
- 0.150              : Modernized the DL1416 device [Osso].
- 0.148u4            : OS X compile fix (video\dl1416.c) [R. Belmont].
- 0.148u2            : Moved mess\video\dl1416.c/h to mame\ [Curt Coder].
- NOTES: 4-Digit 16-Segment Alphanumeric Intelligent Display with Memory/Decoder/Driver.
- DRIVERS: (MESS) aim65.cpp, cmi.cpp, sitcom.cpp and testconsole.cpp
- SOURCE: video\dl1416.cpp



I8.62  On-Screen Display (OSD)
- 0.147u2            : O. Galibert added the charset proper dump (m50458-001sp), courtesy of DogP, patch by ReadOnly.
- 0.147              : Added video\m50458.c/h. Written up a bare-bones M50458 OSD video chip device, used by Nintendo Super System HW. Fixed validity check. Added underline for OSD. Testing vertical scrolling. Improved vertical scrolling, now it's more or less reasonable. Made a shadow ROM copy, the charset is now more faithful to the original reference. Added horizontal/vertical char size, making the NSS logo to look better. Added blinking [Angelo Salese].
- PCB: Mitsubishi M50458-001SP On-Screen Display Chip (NDIP32) (NintendoSuperSystem)



I8.63   Touchscreen

- 0.218              : Added BIOS ROM load for MicroTouch device (not hooked up) [ClawGrip, Kevin Eshbach, ArcadeHacker].
- 0.154              : Removed non-serial device (machine\microtch.c) [Carl].
- 0.145u2            : Added 'Microtouch Touchscreen' device.
- 0.143u7            : Hooked up touch screen to Odeon Twister 2 [Mariusz Wojcieszek].
- 0.138u2            : Added format decimal support to Microtouch [Mariusz Wojcieszek].
- 0.131u3            : This removes the pulse input on the touchscreen for the touchmaster drivers, making centipede returns (tm4k), breakout3k (tm3k), wordsearch (tm8k) and possibly other games playable do to the need for "dragging" the screen. An example of this is the word search game where it is necessary to drag from the start letter to the end to highlight the selection, which is not possible with a pulse input [Mike Green].
- 0.124u4            : Added machine\microtch.c/h. Mariusz Wojcieszek moved Microtouch touch screen controller emulation to separate module.
- NOTES: Paint & Puzzle is a touch screen game from MicroTouch Systems.
- PCB: ICS1578N 9334  19-507 Rev 2  (c) 1992 (28pin) and IC Intel MicroTouch 5603670 REV 1.0  L3372718E P8798 (Pntnpuzl) and Touchscreen games Touchmaster 3000 and 4000
- DRIVERS: adp.cpp, aristmk5.cpp, cubo.cpp, magtouch.cpp, meritm.cpp, mtouchxl.cpp, pcat_nit.cpp, tmaster.cpp, trivrus.cpp and vlc.cpp
- SOURCE: machine\microtch.cpp



I8.7   Keyboard

- 0.280              : Added keytronic\informer_kbd.cpp/h. Begin slotifying generic Keytronic serial keyboards. Kaypro II (& clones): Added dump of original serial keyboard (actually identical to that of Keytronic L2207) and make it the default option. Added (MESS) in213 dump and LLE of keyboard [AJR, retrocmp.de]. Slotify keyboard and added some alternate options [AJR]. Added support for an ADI keyboard for an unknown system [Dirk Best, BikeForever]. Added remaining control characters for natural keyboard [AJR].
- 0.278              : Added machine\ay34592.cpp/h. Fixed (MESS) ibm\rtpc_kbd.cpp keyboard diagnostic [Patrick Mackinlay]. New AY-3-4592 keyboard encoder device [Nigel Barnes].
- 0.277              : Reassigned keys on the IE15 keyboard to match the layout of a VT52 keypad (machine\ie15_kbd.cpp) [Sergey Svishchev]. Work round a race condition in the (MESS) Compaq i8042 rom. Fixes using ctmouse.exe (v2.1 beta4) in shutms11 (machine\at_keybc.cpp) [smf]. Fixed issue with dynamic buffer resizing. Limit buffer size to 4*8MB (emu\natkeyboard.cpp) [hap].
- 0.273              : Natural keyboard improvements: NUL is no longer a reserved character and PORT_CHAR(0) is meaningful now. The ioport_field structure now uses a reserved Unicode character rather than 0 as a filler. PORT_CHAR() with no arguments (formerly illegal) may be used to skip over shift positions that produce no useful codes. Added CAPSLOCK, CR and LF escapes to post_coded (emu\natkeyboard.cpp) [AJR].
- 0.270              : Convert more string posting methods to std::string_view (emu\natkeyboard.cpp) [AJR].
- 0.245              : Added bus\pc_kbd\cherry_mx1500.cpp/h. Added emulation of Cherry G80-1500 keyboard, minus smartcard reader [AJR].
- 0.241              : Minor code changes, formatting and comments (machine\ie15_kbd.cpp) [Sergey Svishchev].
- 0.228              : Removed natkeyboard from ioport_manager (emu\ioport.cpp) [AJR].
- 0.226              : Fixed natural mods for pc_keyboard & at_keyboard devices. Added more logging (emu\natkeyboard.cpp). Internalized input ports for PC Keyboard (machine\pckeybrd.cpp) [AJR].
- 0.222              : Fixed typos in PORT_CHAR definitions (machine\keyboard.cpp). Fixed for UI Paste with the Default Serial Terminal (emu\natkeyboard.cpp). Without this fix, 8 characters @^&()\:" cannot be pasted from the UI [Frank Palazzolo]. READ/WRITE macros removal (machine\keyboard.cpp) [Osso]. Formatting consistency (emu\natkeyboard.cpp) [Vas Crabb].
- 0.221              : Simplified handlers (machine\cdp1871.cpp) [Osso].
- 0.218              : Don't strip linefeed characters (Ctrl-J) from natural keyboard input except when pasting strings (emu\natkeyboard.cpp) [AJR].
- 0.214              : Changing some arrays to use std::array<> in natkeyboard [Nathan Woods].
- 0.211              : Minor tweaks. Resolve aux irq callback. Renamed mouse to aux. Added logging and some notes. Added a Compaq rom dump (machine\at_keybc.cpp). PC/AT and PS/2 101-key keyboard works now. Command issue resolved by bug-fix to 6805 (bus\pc_kbd\pcat101.cpp) [Patrick Mackinlay].
- 0.210              : PC/AT and PS/2 101-key keyboard update. Still doesn't process commands from the host properly - not sure if it's a cpu or port issue (bus\pc_kbd\pcat101.cpp) [Patrick Mackinlay].
- 0.209              : Connected matrix and ports (bus\pc_kbd\pcat101.cpp). After this change, the keyboard sends scan codes to the host successfully, but fails to receive/process commands from the host. Failure is probably due to differences between the 6805U3 that's really in the keyboard, and the 68705U3 that's the best match in MAME at the moment, so requires expanded 6805 emulation [Patrick Mackinlay].
- 0.208              : Simplified read/write handlers (machine\at_keybc.cpp) [AJR]. Fixed keyboard with PC/XT (bus\pc_kbd\pc_kbdc.cpp) [Carl].
- 0.203              : Dumped the IBM Model M PC/AT and PS/2 keyboard microcontroller [Brandon Ermita]. Emulated PS/2 keyboard/mouse controller - same MCU as AT, but wired differently. Keyboard functionality works, mouse functionality is untested and not hooked up to anything. Will add slot devices for PS/2 mouse later. For some reason the ct486 driver now reports a keyboard error on boot. You can hit F1 to get past it, but it's annoying. I'll look into that later as well [Vas Crabb]. Added bus\pc_kbd\pcat101.cpp/h. Skeleton driver for IBM Model M PC/AT and PS/2 keyboard [Patrick Mackinlay].
- 0.202              : Removed IE15_KEYBOARD MCFG macros [Ryan Holtz].
- 0.188              : Cleaned up serial, matrix keyboard and TI-8x link protocol interfaces [Vas Crabb].
- 0.186              : Assert output calback is set for keyboard/terminal [Vas Crabb].
- 0.182              : Fixed for a potential problem if natural keyboard input gets disabled while machine is running (emu\natkeyboard.cpp) [AJR].
- 0.177              : Added machine\keyboard.ipp. Keyboard/terminal improvements: Mark lots of things constexpr in attotime and turn macros into functions. Add base classes for HLE matrix keyboard and buffered RS232 device. Make generic keyboard/terminal more usable. Keyboard has configurable typematic delay/rate. Keyboard has selectable JIS/ANSI layout. Keyboard handles simultaneous keypresses more intuitively. Keyboard uses meta to set high bit. Terminal has configurable auto LF on CR, auto CR on LF and local echo. Terminal has audible bell. Untangle Olivetti M20 keyboard from generic_keyboard. Add notes to Olivetti M20 keyboard emulation. Make Olivetti M20 keyboard match physical layout. Untangle RM Nimbus keyboard from generic_keyboard. Fix natural keyboard mode with RM Nimbus. Untangle x68k keyboard from generic_keyboard. Improve x68k key names and mapping. Improve x68k typematic behaviour. Untangle QX-10 keyboard from generic_keyboard. Keep NGEN keyboard barely working [Vas Crabb]. Added workaround for MSVC warning (machine\keyboard.ipp) [Nathan Woods]. Added F16..F20 keys (present on (MESS) DEC LK201 keyboard and its clones) [Sergey Svishchev]. Fixed keyboard error on POST in (MESS) WangPC [Curt Coder].
- 0.166              : Hook up 'Display switch' (machine\at_keybc.c) [shattered, Miodrag Milanovic].
- 0.156              : (MESS) x820: Emulated the ASCII keyboard (key repeat is not working yet) [Curt Coder].
- 0.155              : Fixed usage onf uninitialized member in serial_keyboard_device (rs232\keyboard.c) [Oliver Stoeneberg]. Let's also call generic_terminal_device::device_start (rs232\keyboard.c) [Barry Rodewald]. Added save state to machine\keyboard.c and rs232\keyboard.c [Wilbert Pol].
- 0.154              : Added layout\ie15.lay and machine\ie15_kbd.c/h. Converted generic_keyboard_device to DEVCB2 [Osso]. Emulated ie15 keyboard & use RS232 port [Sergey Svishchev]. Converted IE15 keyboard device to DEVCB2. Also removed some machine().first_screen() from ie15.c. Converted pc_kbdc_device to DEVCB2 [Osso]. Generic keyboard / terminal: Added function keys. Values are 0x81 to 0x8c (F1 to F12). If CTRL pressed, added 0x10. If SHIFT pressed, added 0x20. This gives 48 new keys for special terminal functions, etc [Robbbert].
- 0.153              : Moved mess\machine\keyboard.c/h to emu\machine\. Added bus\rs232\keyboard.c/h. Converted CDP1871 to DEVCB2 and cleanup [Curt Coder]. Make machine\pckeybrd.c into a device [Carl].
- 0.152              : Added pc_kbd\iskr1030.c/h. Moved machine\kb_ec1841.c/h, kb_keytro.c/h, kb_msnat.c/h, kb_pc83.c/h, kb_pcat84.c/h, kb_pcxt83.c/h and pc_kbdc.c/h to emu\bus\pc_kbd\ and machine\pc_keyboards.c/h to emu\bus\pc_kbd\keyboards.c. Added a skeleton of native iskr103* keyboard.
- 0.150              : Use natural keyboard for AT clones and 386+ and fix 5160 bios 1 [Carl].
- 0.149u1            : Added machine\kb_pcxt83.c/h, kb_ibm5160.c/h and kb_pcat84.c/h. Added IBM PC/XT 5150/5160 83-key keyboard emulation. Added skeleton for the IBM PC/AT and 3270PC keyboards. Emulated the IBM 5170 Model F PC/AT 84-key keyboard [John Elliot, Curt Coder]. Added some natural keys to generic keyboard. IBM5170 keyboard WIP (machine\kb_pcat84.c). Improved IBM5170 keyboard labels. Fixed PC/XT keyboard interface [Curt Coder].
- 0.148u5            : Serial keyboard and terminal have same options (machine\keyboard.c and machine\terminal.c) [Robbbert].
- 0.148u4            : Moved mame\machine\pckeybrd.c to emu\machine\ and emu\machine\pcshare.h to mame\machine\. Removed some duplicated and not used code for PC keyboard and moved stuff needed for XT keyboard on proper place (emu\emu.mak, pcshare.c/h, pckeybrd.c, drivers\calchase.c, funkball.c, gamecstl.c, gammagic.c, magtouch.c, mediagx.c, midqslvr.c, pangofun.c, pcat_dyn.c, pcat_nit.c, photoply.c, queen.c, savquest.c, su2000.c, taitowlf.c, voyager.c, xtom3d.c, machine\pcshare.c and mame.mak) [Miodrag Milanovic].
- 0.148u2            : Fixed uninitialized members in machine\cdp1871.c and mess\machine\pc_kbdc.c [Oliver Stoeneberg].
- 0.148u1            : Fixed some control keys in generic keyboard. Fixed multisession crash with any system using generic keyboard (mess\machine\keyboard.c) [Robbbert].
- 0.142              : Added machine\cdp1871.c/h (RCA CDP1871 Keyboard Encoder emulation).
- 0.141u2            : Clean up natural keyboard support [Atari Ace].
- 0.126u5            : Moved mame\machine\pckeybrd.h to emu\machine\pckeybrd.h.
- 0.117u2            : Nathan Woods fixed up pckeybrd.c to work with new timing code.
- 0.101u2            : Added machine\pckeybrd.c/h.
- 0.36b1             : Added allegro\src\misc\pckeys.c.
- SOURCE: pckeybrd.c, pc_keyboards.c, emu\machine\keyboard.c, bus\rs232\keyboard.c and machine\ie15_kbd.cpp



I8.71  8042 Keyboard/Mouse Controller

- 0.282              : Can't possibly receive if the timer isn't running. Fixed PCIAGP boot without debug tricks (machine\8042kbdc.cpp) [Angelo Salese].
- 0.263              : Improved behavior coming out of reset, locking device until AA is written to command port. Allow some systems to write D1 command first (machine\8042kbdc.cpp) [AJR].
- 0.262              : Added port60/port64_r/_w accessible aliases (machine\8042kbdc.h) [Angelo Salese].
- 0.260              : Unbundle keyboard from device and make it optional (machine\8042kbdc.cpp) [AJR].
- 0.257              : Should use KBDC8042_DOUBLE for set_interrupt_type (machine\pc87306.cpp) [Angelo Salese].
- 0.245              : Return 0 when reading data port with no data (makes (MESS) Nvidia nForce PC BIOS usable) [yz70s].
- 0.236              : Improved management of PS/2 mouse. Added mouse interrupt. Support more mouse commands. Use command byte to enable/disable mouse and keyboard interrupts. Now the PS/2 mouse works with Windows 98. Mouse reset answers at least one byte if mouse disabled. Makes (MESS) nforcepc BIOS happy (machine\8042kbdc.cpp) [yz70s].
- 0.223              : Initialized variables which caused problems in debug DEVNOCLEAR build (machine\8042kbdc.cpp) [AJR]. Generate data for mouse only if mouse is enabled. Now it is possible to use the (MESS) Nvidia nForce PC BIOS setup without it crashing [yz70s].
- 0.222              : Initialized variable that caused problems for the PCI PC drivers in DEVNOCLEAR build (machine\8042kbdc.cpp) [Osso].
- 0.221              : Simplified handlers for machine\8042kbdc.cpp [Osso].
- 0.216              : Recognize mouse reset command [yz70s].
- 0.207              : Added timer to periodically check mouse. Fixes mouse in (MESS) SGI Indigo2/Indy IRIX [Ryan Holtz].
- 0.204              : Hooked up 8042kbdc interrupts and 8042kbdc reset to (MESS) SGI Indigo2/Indy [Ryan Holtz].
- 0.201              : Set default clocks to 0 (machine\8042kbdc.h). Removed legacy DEVCB accessors [Ryan Holtz].
- 0.200              : Removed MCFG macros (machine\8042kbdc.h) [Vas Crabb].
- 0.199              : Changed description to '8042 Keyboard/Mouse Controller'. Added rudimentary PS/2 mouse support to machine\8042kbdc.cpp [Ryan Holtz].
- 0.179              : Fixed (MESS) Indigo keyboard (machine\8042kbdc.cpp). The removed stuff from 8042kdbc appears to be handled by pckeybrd now but there could be regressions [Carl].
- 0.154              : Converted 8042 Keyboard Controller to DEVCB2 [Osso]. PULSE_LINE appears not to work through DEVCB2 for machine\8042kbdc.c [Carl]. Fixed usage of uninitialized members in kbdc8042_device [Oliver Stoeneberg].
- 0.148u5            : Fixed uninitialized variable (machine\8042kbdc.c) [Peter Ferrie].
- 0.148u4            : 8042kbdc is now device [Miodrag Milanovic].
- 0.148u4            : Added '8042 Keyboard Controller' device.
- 0.148              : Added support for keyboard enable command and keyboard reset command (machine\8042kbdc.c) [Peter Ferrie].
- 0.147u2            : Port 0x64 opcode 0xd1 should incur no delay when delivering (machine\8042kbdc.c). This allows, for example, SU2000 (Virtuality 1993) to start booting to the CMOS setup screen [Peter Ferrie].
- 0.147u1            : Removed not used calls (machine\8042kbdc.c) [Miodrag Milanovic].
- 0.144u4            : Fix for 8042kbc.c irq generation, now California Chase correctly accept keyboard inputs [Grull Osgo].
- 0.124u2            : Removed the hardcoded dependency on a 8254 device from the 8042kbdc code. Changed the drivers using the 8042kdbc to define their own 8042kdbc - 8254 dependency [Wilbert Pol].
- 0.101u2            : Added machine\8042kbdc.c/h.
- DRIVERS: astropc.cpp, calchase.cpp, comebaby.cpp, ez2d.cpp, fruitpc.cpp, funkball.cpp, gammagic.cpp, magtouch.cpp, matrix.cpp, mediagx.cpp, midqslvr.cpp, mtouchxl.cpp, odyssey.cpp, pangofun.cpp, paokaipc.cpp, pcat_dyn.cpp, pcat_nit.cpp, pinball2k.cpp, przone.cpp, quakeat.cpp, queen.cpp, savquest.cpp, silverball.cpp, taitowlf.cpp, tetrisp2.cpp and xtom3d.cpp
- SOURCE: machine\8042kbdc.cpp



I8.72  16/20-Key Encoder

- 0.274              : Clock da pin after updating data outputs (machine\zmm74c922.cpp) [Robbbert].
- 0.223              : Data output pins are clocked the same time as DA pin (machine\mm74c922.cpp) [hap].
- 0.222              : Added 74c923 device to (MESS) tec1.cpp instead of custom code. Correct scan rate in 74c922 device to fix random F characters [Robbbert].
- 0.153              : Converted MM74C922 to DEVCB2 [Curt Coder].
- 0.148u2            : Fixed uninitialized members in machine\mm74c922.c [Oliver Stoeneberg].
- 0.142u2            : Added machine\mm74c922.c/h.
- NOTES: MM74C922/MM74C923 16/20-Key Encoder
- DRIVERS: (MESS) didact.cpp, digel804.cpp, elf.cpp, mtd1256.cpp, saitek_intchess.cpp and tec1.cpp
- SOURCE: machine\mm74c922.cpp



I8.8   Mouse/Trackball/Spinner/Pedal

I8.81  Mouse

- 0.281              : Added ibm\rtpc_mouse.cpp/h. Added mouse hle [Patrick Mackinlay].
- 0.211              : Added bus\pc_kbd\hle_mouse.cpp/h. Added high-level emulation of PS/2 mouse [Patrick Mackinlay].
- 0.203              : Emulated PS/2 keyboard/mouse controller - same MCU as AT, but wired differently. Keyboard functionality works, mouse functionality is untested and not hooked up to anything. Will add slot devices for PS/2 mouse later. For some reason the ct486 driver now reports a keyboard error on boot. You can hit F1 to get past it, but it's annoying. I'll look into that later as well [Vas Crabb].
- 0.202              : Changed bus\rs232\ser_mouse.cpp/h to hlemouse.cpp/h. Re-write serial mouse support: Splitted Microsoft mouse into separate two-button (Microsoft), three-button (Logitech) and click wheel devices. Added Microsoft wheel mouse. Made Mouse Systems mouse behaviour better match early Mouse Systems models. Added "rotatable" Mouse Systems mouse support (untested due to lack of software). Simplified code and eliminated timers. X/Y translation and buttons works for all devices. The wheel on the wheel mouse seems to be transmitting the right data, and CuteMouse detects the wheel as being present, but no software seems to support it properly. Software supporting the Mouse Systems "rotatable" mouse is very rare - typically people just set the DIP switches on their M-1 for "non-rotatable" mode. A standard mouse driver will see the "rotatable" mouse moving two mickeys for each count, and move eratically on rotation. The "rotable" mouse is poorly tested due to lack of software. MAME doesn't have a proper input type for a mouse wheel, and it doesn't seem to be possible to map the host mouse wheel to an axis when configuring inputs. The default mapping ends up assigining the wheel or rotation to one of the translation axes, which is very unhelpful [Vas Crabb].
- 0.166              : Moved emu\bus\rs232\ser_mouse.c/h to devices\bus\rs232\. Moved all devices into separate part of src tree [Miodrag Milanovic].
- 0.155              : Handshaking: active low for consistency (RS232 port now defaults handshaking lines high and serial mouse dtr/rts handling has been adjusted) [smf].
- 0.154              : Make msft mouse work again (Microsoft 2-Button Serial Mouse; bus\rs232\ser_mouse.c) [Carl]. Fixed usage of uninitialized member in microsoft_mouse_device [Oliver Stoeneberg].
- 0.153              : Moved mess\machine\ser_mouse.c/h to emu\bus\rs232\.
- DRIVERS: pcat_dyn.cpp
- SOURCE: bus\rs232\hlemouse.cpp + bus\pc_kbd\hle_mouse.cpp


I8.82  uPD4701

- 0.238              : Changed input update method to not use PORT_RESET (machine\upd4701.cpp) [AJR].
- 0.221              : Simplified handlers [AJR].
- 0.192              : Better handling of uPD4701 control lines for Beat the Champ [AJR].
- 0.190              : Use uPD4701A device in Krazy Bowl. Added uPD4701A device with multiplexing to U.S. Classic [AJR].
- 0.189              : Added read-triggered X reset & Y reset routines to device [AJR].
- 0.187              : Use uPD4701 device in arknoid2, plumppop and jpopnics. Disable side effects in some read handlers (machine\upd4701.cpp) [AJR].
- 0.186              : Rewrote uPD4701 device and hook it up to a cabal, calibr50, eaglshot, fbaitbc, forgottn, horshoes, poundfor, ridleofp, sonic and wwallyj [AJR].
- 0.148u5            : Modernised uPD4701 [smf].
- 0.131u4            : Fabio Priuli converted NEC uPD4701 to be a MAME device.
- 0.110u2            : Added machine\upd4701.c/h. smf added uPD4701 emulation to Konami System 573.
- NOTES: NEC uPD4701A 2-Axis Incremental Encoder Counter. Mouse/Trackball interface.
- PCB: NEC D4701AC (EagleShot), NEC4701 (Krzybowl), uPD4701c
- DRIVERS: cabal.cpp, cps1.cpp, dec0.cpp, konamigv.cpp, ksys573.cpp, m72.cpp, segae.cpp, segas16b.cpp, segas18.cpp, segas24.cpp, segas32.cpp, seta.cpp, speedbsk.cpp, ssv.cpp, taito_l.cpp, tnzs.cpp and ultrsprt.cpp
- SOURCE: machine\upd4701.cpp



I8.83  TC4584
- NOTES: The TC4584 is used for trackball/spinner control.
- PCB: TC4584 (Fitegolf), 4584 CMOS (GigasMark3)


I8.84  Analog pedal
-  8th September 1999: Aaron Giles added better analog pedal support for APB (Atari 1987) and other Atari System 1/2 games.
- SOURCE: drivers\atarisy2.cpp


I8.9   Printer

- 0.240              : Added machine\bitmap_printer.cpp. Added bitmap_printer_device and converted epson_lx810 to use it [Golden Child]. Initial cleanup (machine\bitmap_printer.cpp), the calm before the refactor [R. Belmont].
- 0.223              : Initialized the data output high. High is the restful state for RS232. The low level could cause continual breaks to be received by an attached device and this could cause problems for some drives (bus\rs232\printer.cpp) [68bit].
- 0.206              : Removed PRINTER MCFG macros [Osso].
- 0.187              : Removed timer_set from centronics\printer.cpp [AJR].
- 0.154              : Changed bus\centronics\image.c/h to printer.c/h. Added bus\rs232\printer.c/h. Converted printer device to DEVCB2 [Osso]. Added serial printer, renamed centronics printer to match. Standardised the configuration of rs232 devices. All serial devices are now connected using an rs232 port [smf]. Fixed usage of uninitialized member in centronics_printer_device [Oliver Stoeneberg].
- 0.141u1            : Added emu\imagedev\printer.c/h.
- DRIVERS (MESS) dragon.c, hec2hrp.c, interact.c, mc10.c, ql.c, vg5k.c and x07.cpp
- SOURCE: imagedev\printer.c and bus\centronics\printer.cpp


I8.A   Sega Billboard

- 0.214              : Added machine\segabill.cpp/h, layout\segabill.lay and layout\segabillv.lay. Emulated the Sega Billboard and hook it up to the STV driver. It's not shown by default. To view it, choose the layout view 'Billboard'. YouTube: https://youtu.be/csuOJBU5rzo [biggestsonicfan, Dirk Best]. Hook up Sega Billboard emulation to Model2 A/B games. Hook up 315-5649 I/O and Sega Billboard emulation to Model 3 [Dirk Best]. Adding visual and descriptive board layout for Versus City Billboard [Rob Krum]. Fixed Z80 clock [Brian Troha].
- SOURCE: machine\segabill.cpp


I8.B   BACTA Datalogger

- 0.243              : Prevent continuous transmission of 0xff [Paul Arnold].
- 0.225              : Attempt at a fix for missed character transmissions. Turn off log pollution [James Wallace].
- 0.224              : Added machine\bacta_datalogger.cpp/h. Added an implementation of the BACTA Datalogging protocol used in many of the AWP drivers. Hooked the BACTA logger up to the MPU4 driver to fix Datapak/Protocol games. Hooked up BACTA datalogger to JPM GuaB driver, fixes coinup issues. Moved BACTA Datalogger to shared library, improved message handling [James Wallace].
- NOTES: BACTA = British Amusement and Catering Trade Association created a standard for the tracking of statistics and other features on British AWPs across hardware manufacturers. The specification is very simple, a 1200 Baud null modem connection via RS232, with the logger sending an ACK command (0x06) on receipt of a valid character, and NAK (0x15) on error. In this emulation, the simplest possible device is simulated here, derived from the RS232 null_modem. We only handle the feedback for acknowledgment, and limited logging.
- DRIVERS: guab.cpp, jpmimpct.cpp, jpmimpctsw.cpp, mpu4.cpp, mpu4avan.cpp, mpu4bwb.cpp, mpu4concept.cpp, mpu4crystal.cpp, mpu4dealem.cpp, mpu4empire.cpp, mpu4mdm.cpp, mpu4misc.cpp, mpu4mod2sw.cpp, mpu4mod4yam.cpp, mpu4plasma.cpp, mpu4sw.cpp, mpu4union.cpp, mpu4vid.cpp and rastersp.cpp
- SOURCE: machine\bacta_datalogger.cpp


I8.C   Zapper

- 0.252              : Added bus\nes_ctrl\bandaihs.cpp/h. Improved trigger, put Bandai lightgun in its own file (Nintendo Family Computer Bandai Hyper Shot Lightgun) [hap].
- 0.242              : Added nes_ctrl\zapper_sensor.cpp/h. Added 'Nintendo Zapper Lightgun Photodiode' device. Split zapper sensor off as a reusable device [kmg].
- 0.241              : Added 'Nintendo Zapper Lightgun' and 'Bandai Hyper Shot Lightgun' devices. Made zapper less bad: Limited light detection to scanlines recently drawn by CRT. Lowered light detection threshold to better reflect how real zapper behaves; color doesn't need to be white. Bugs fixed: Not detecting hits on certain white objects. Misdetecting hits on objects far away from the pointer. Not being able to track where zapper is pointed in demo/test software. Made zapper sensor fuzzier: Removed the pixel-perfect sensor by averaging pixel brightness over circular area around gun position. Treat RGB values equally and don't use lib\util\palette.h's weighted brightness function [kmg].
- 0.239              : Revised Bandai Hyper Shot to only use exp port calls. Use %p player specifier for B button. Use helper function for writing strobe bit [kmg].
- 0.238              : Added support for Bandai Hyper Shot light gun [kmg].
- 0.212              : Fixed light gun regression. Changed the way screen is set for light gun (NES, SMS, nes_ctrl\zapper.cpp) [Enik Land].
- 0.209              : Replaced VDP bitmap access with screen().pixel() for lightgun emulation [Enik Land].
- 0.166              : Moved emu\bus\nes_ctrl\zapper.c/h to devices\bus\nes_ctrl\.
- 0.158              : Added bus\nes_ctrl\zapper.c/h. (MESS) NES: Converted input code to use slot devices. this means that now you change the emulated controllers (Zapper, NES Four Score Adapter, Bandai Power Pad and Family Trainer, Famicom Keyboard Component, Arkanoid Vaus Paddle and Mahjong Controller) via the Slot Device menu of the UI interface and not anymore from the System Configurations menu. Also, changing controller now requires to reset the system, so please take some time *before* starting the game if you want to play a game that uses particular controllers [Fabio Priuli].
- NOTES: Nintendo Zapper Lightgun
- SOURCE: bus\nes_ctrl\zapper.c


I8.C1  Nintendo R.O.B.

- 0.242              : Added nes_ctrl\rob.cpp/h and layout\nes_rob.lay. Added 'Nintendo R.O.B. / Family Computer Robot' device [hap]. Split zapper sensor off as a reusable device [kmg].
- SOURCE: bus\nes_ctrl\rob.cpp


I8.D   Ticket Dispenser

- 0.283              : Added a sensor test input for convenience. Also call the line status callback for ticket dispensers as well as hoppers and cleaned up the code a little (machine\ticket.cpp) [Vas Crabb].
- 0.270              : Get device configuration constants out of the global namespace (machine\ticket.cpp) [Vas Crabb]. Changed ticket MOTOR_ACTIVE_LOW and STATUS_ACTIVE_LOW to HIGH. Removed motor/status_active setters (machine\ticket.cpp) [hap].
- 0.249              : Added proper hopper communications to machine\ticket.cpp. Added a devcb_line for output handling to communicate with hardware (machine\ticket.cpp) [James Wallace].
- 0.245              : Converted machine\ticket.cpp to use logmacro [Ryan Holtz].
- 0.217              : Don't use "led2" for output [hap].
- 0.205              : Added separate hopper_device (machine\ticket.cpp) [Ryan Holtz].
- 0.198              : Use output finder in machine\ticket.cpp [AJR].
- 0.194              : Moved machine\ticket.cpp/h to devices\machine\ [AJR].
- 0.193              : Eliminated legacy read/write methods and "active bit" nonsense (machine\ticket.cpp) [AJR].
- 0.186              : Added hopper-like mode to ticket dispenser device (drivers\stv.cpp, machine\ticket.cpp) [MetalliC].
- 0.179              : Added ticket_dispenser_device::motor_w as a proper WRITE_LINE method, first step towards eliminating the m_active_bit=0x80 nonsense (machine\ticket.cpp) [AJR].
- 0.145u7            : Modernized ticket dispenser device [Aaron Giles].
- 0.135u4            : Changed ticket.c into a device, updated all users [Aaron Giles].
- 0.33b5             : Added machine\ticket.h.
- 0.31               : Added machine\ticket.c.
- DRIVERS: albazc.cpp, amusco.cpp, banpresto_bpsc68000.cpp, banprestoms.cpp, big10.cpp, bmcpokr.cpp, capbowl.cpp, cave.cpp, cgang.cpp, champbwl.cpp, cischeat.cpp, clpoker.cpp, dcheese.cpp, feversoc.cpp, funtech.cpp, gei.cpp, gi6809.cpp, goldstar.cpp, igs_fear.cpp, igs_m027.cpp, igs_m027xa.cpp, itech32.cpp, itech8.cpp, kurukuru.cpp, lethalj.cpp, magic10.cpp, mgavegas.cpp, midas.cpp, piggypas.cpp, piratesh.cpp, playmark.cpp, powerbal.cpp, pzletime.cpp, seta.cpp, seta2.cpp, sigmab98.cpp, skylncr.cpp, subsino.cpp, subsino2.cpp, sunwise.cpp, tapatune.cpp, tickee.cpp, tonton.cpp, tvg01.cpp, wacky_gator.cpp, williams.cpp, witch.cpp and xtheball.cpp
- SOURCE: machine\ticket.cpp


I8.E   Winbond W83787F

- 0.264              : Added machine\w83787f.cpp/h. Preliminary W83787F Super I/O core. Document config_map [Angelo Salese].
- NOTES: Winbond W83787IF / W83787F = 'F is the base and 'IF adds IrDA. 'National Semiconductor W83787F Super I/O Enhanced Sidewinder Lite'.
- DRIVERS: photoply.cpp and (MESS) Pcipc_sis.cpp
- SOURCE: machine\w83787f.cpp


I8.E1  Winbond W83977TF

- 0.282              : Hookup FDC, GPIO1, FDC irq and drq lines. Ensure Super I/O port to be installed after the others. Hookup ISA DMA bindings and fixed floppy fails (machine\w83977tf.cpp) [Angelo Salese].
- 0.263              : Hookup basic LPT port (machine\w83977tf.cpp) [Angelo Salese].
- 0.257              : Misc cleanups in PCI world. Implemented keyboard port PnPs (machine\w83977tf.cpp) [Angelo Salese].
- 0.256              : Added machine\w83977tf.cpp/h. Added 'Winbond W83977TF Super I/O' device. Added preliminary Super I/O PoC [Angelo Salese].
- NOTES: Winbond W83977TF Super I/O
- DRIVERS: ez2d.cpp, silverball.cpp, quakeat.cpp and (taitowlf.cpp)
- SOURCE: machine\w83977tf.cpp/h


I8.E2  Winbond IT8705F

- 0.282              : Fixed FDC DRQ line setup. Hookup ISA DMA bindings (machine\it8705f.cpp) [Angelo Salese].
- 0.264              : Added machine\it8705f.cpp/h. Initial implementation for IT8705F Super I/O. Added UARTs and non-working FDC [Angelo Salese].
- NOTES: Winbond IT8705F LPC Super I/O
- DRIVERS: sis630.cpp and gfamily.cpp
- SOURCE: machine\it8705f.cpp



I9.    Controller


I9.1   Floppy Disk

I9.11  MB89311
- PCB: Fujitsu MB89311 CMOS Floppy Disk Controller / Formatter (Sega System24)

I9.12  8272
- PCB: UMC 8928LP-UM8272A floppy disk controller (Filetto)

I9.13  MB4107
- PCB: Fujitsu MB4107AP Disk-Tape Support Circuit, Floppy Disk Vari-Freq Osc (VFO) (Sega System24)


I9.14  MC6843

- 0.271              : Fixes and improvements. Make Seek Track Zero issue step pulses when the track 0 sensor is off rather than on. Enable IRQ output from device (bml3 software needs this). Issue Status Sense Request in PC I/O mode, not DMA mode. Raise Seek Error if STZ command doesn't end at track 0. Added settle timeout for head unload after certain commands. Enhance logging messages but hide them behind logmacro compilation switches [AJR].
- 0.251              : Clear STRB bits when read [AJR].
- 0.224              : Added a delay reading the CRC (machine\mc6843.cpp). Code using programmed I/O may read the last byte of a sector and then expect to have some time to store that to memory before receiving an interrupt on the completion of the command. The interrupt was occurring on the last read and the last byte was being lost by some drivers. This change adds a delay after reading the last byte, roughly the time needed to read the 16 bit CRC, before the end of a read command is processed. Avoid side effects when these are disabled [68bit].
- 0.216              : Simplified read/write handlers [AJR].
- 0.153              : Modernized MC6843 device [Osso]. Converted MC6843 to DEVCB2 [Curt Coder].
- 0.148u2            : Moved mess\machine\mc6843.c/h to mame\src\emu\machine\ [Curt Coder].
- NOTES: Motorola 6843 floppy disk controller.
- DRIVERS: (MESS) bml3.cpp and thomson.cpp
- SOURCE: machine\mc6843.cpp


I9.15  WD2793
- 0.150: Updated Apricot PC/Xi to use the new WD2793 controller, no support for apridisk image files yet (drivers\apricot.c) [Dirk Best].


I9.16  1801VP1-128

- 0.272              : Added missing TTSN function [Vas Crabb].
- 0.265              : Fixed a class memory access warning (machine\1801vp128.cpp) [Vas Crabb].
- 0.264              : Added machine\1801vp128.cpp/h. Added support for 1801VP1-128 gate array (MFM codec) [Sergey Svishchev].
- NOTES: 1801VP1-128 gate array (MFM codec for floppy controllers)
- SOURCE: machine\1801vp128.cpp




I9.2   Hard Disk Controller

- 0.275              : Improved initial state, proper units for dma transfers (isa\hdc.cpp) [Dirk Best].
- 0.245              : Converted isa\hdc.cpp to use logmacro. Made isa\hdc.cpp usage of m_member prefix consistent. Removed C89-style variable declarations in isa\hdc.cpp when noticed. Removed fixed-size std::vector in favor of std::unique_ptr [Ryan Holtz].
- 0.222              : Simplified signatures of most handlers (isa\hdc.cpp) [AJR].
- 0.177              : Implement READSBUFF command (used by (MESS) ec1841 diags) (bus\isa\hdc.cpp) [Sergey Svishchev].
- 0.163              : Refactored XT HD controller into separate device, so that it can be used in non-ISA systems. Added preliminary ST11M type controller and improved PIO support a bit. Improved Write Sector Buffer command [Barry Rodewald].
- 0.156              : Added DIPs, make ROM optional. Implement WRITESBUFF command. (MESS) EC-1841 compatibility [Sergey Svishchev].
- 0.152              : Changed mess\machine\isa_hdc.c to bus\isa\hdc.c. Shuffle ISA and some more PC related devices around [Miodrag Milanovic].
- 0.147              : Added mess\machine\isa_hdc.c. Merge of MESS sources [Miodrag Milanovic].
- NOTES: ISA 8 bit XT Hard Disk Controller
- SOURCE: bus\isa\hdc.cpp


I9.21  WD1000

- 0.249              : Use resolve_safe for m_intrq_cb (machine\wd1000.cpp) [Brian Johnson].
- 0.221              : Simplified handlers [Osso].
- 0.216              : Added save state [68bit].
- 0.214              : Added machine\wd1000.cpp/h. Added WD1000 Winchester hard disk controller. Used by the (MESS) SWTPC09 DMAF3 and it boots UniFLEX on a disk image, and perhaps some other machines can leverage this [68bit].
- NOTES: Western Digital WD1000 Winchester Disk Controller
- DRIVERS: (MESS) dmv.cpp and swtpc09.cpp
- SOURCE: machine\wd1000.cpp


I9.22  WD2010

- 0.268              : Increased maximum sectors per track to 32. Implemented multi-sector transfers. Don't change current cylinder on reset [Sven Schnelle].
- 0.207              : MCFG removals [Ryan Holtz].
- 0.188              : Improved WD2010 emulation. Better feedback on cylinder positions. Almost all checks of the winchester test pass (option 16 @ RX50DIAG.TD0 diskette), except low level tests expecting manufacturer or diagnostic tracks (write test #1) [Bavarese].
- 0.162              : Provides IRQ / (B)DRQ signals. Honors DRIVE_READY and WRITE FAULT (DRDY / WF) now. Set WF to GND and DRDY to VCC in your driver if signals are not serviced [Karl-Ludwig Deisenhofer].
- 0.154              : Converted WD2010 to DEVCB2 [Osso].
- 0.148u2            : Moved mess\machine\wd2010.c/h to emu\machine\ [Curt Coder].
- NOTES: Western Digital WD2010 Winchester Disk Controller.
- DRIVERS: (MESS) ngen.cpp, pg685.cpp, rainbow.cpp, bus\isa\p1_hdc.cpp, wdxt_gen.cpp and tiki100\hdc.cpp
- SOURCE: machine\wd2010.cpp


I9.23  IMI 5000H

- 0.153              : Moved machine\imi5000h.c/h to bus\imi7000\imi5000h.c/h.
- 0.149u1            : Added skeleton for IMI 5000H hard disk controller [Curt Coder, Al Kossow].
- NOTES: IMI 5000H 5.25" Winchester Hard Disk Controller. Used in Corvus Systems H-Series drives (Model 6/11/20).
- SOURCE: bus\imi7000\imi5000h.cpp


I9.24  IMI 7000
- 0.153              : Added bus\imi7000\imi7000.c/h [Curt Coder].
- SOURCE: bus\imi7000\imi7000.cpp



I9.3   IDE

- 0.222              : Simplified signatures of most handlers (isa\ide.cpp, xtide.cpp) [AJR]. READ/WRITE macros removal (machine\idectrl.cpp) [Osso].
- 0.209              : Added ability to throttle HDD DMA transfer speed, fixes strange freeze in attract mode of San Francisco Rush 2049 [Ted Green].
- 0.206              : Another use for required_address_space (machine\idectrl.cpp) [AJR].
- 0.201              : Set default clocks to 0 (machine\idectrl.cpp). Removed ATA_INTERFACE, IDE_CONTROLLER and VT83C461 MCFG macros (bus\isa\ide.cpp, machine\idectrl.h and vt83c461.h) [Ryan Holtz].
- 0.193              : Disambiguated 16- and 32-bit CS access, and added non-space CS access methods [O. Galibert].
- 0.167              : Small comment changes (machine\idectrl.c) [yz70s].
- 0.155              : Added Read Native Max Address IDE command (machine\atahle.h, machine\idehd.c) [Barry Rodewald].
- 0.153              : Changed mess\machine\isa_ide.c/h to bus\isa\ide.c/h and mess\machine\isa_xtide.c/h to bus\isa\xtide.c/h [Miodrag Milanovic].
- 0.150              : Changed machine\isa_ide8.c/h to machine\isa_xtide.c/h. IDE documentation for PC-9801 [Angelo Salese]. Fixed ATA addressing in machine\isa_ide8.c, reduced rom space to 8k (as that is all the XTIDE v1 supported) and added all the v1 compatible roms. Use 2864 for ROM. This allows XTIDECFG to flash the rom. Tested with 2.0.0 beta 3. You must disable SDP because eeprompar doesn't emulate it & you must load from a file as if you load from EEPROM then it only finds zeros (machine\isa_xtide.c). Renamed IDE8 to XTIDE [smf].
- 0.149u1            : Added machine\vt83c461.c/h. If there is no drive selected then there is nothing to read from, although not sure what value this expect to receive (machine\idectrl.c). Moved the buffer from the IDE controller to the device. Moved more state from idectrl.h. Moved password fields off the IDE controller. Moved block_count to the device, renamed some IDE commands to make them closer to the spec & also use the block count for triggering the first irq on read/write multiple. Either I misunderstand the spec or the code but judge dredd doesn't like this change. Moved a couple more variables. A couple more over the fence. Fixed crash if no disk. Fishin' Frenzy has no hard drive at all and prefers this value (return 0xff). Allow more than one IDE controller on the same device. 'Area 51: Site' doesn't like the same value as Fishin' Frenzy, maybe there is a difference between the value you get for no drives at all and no current drive. Moved the Error register, status, command, status timer and reset timer across. Splitted hard drive emulation from the IDE controller. Simplified ide_device_interface (machine\idehd.c). Derive Chihiro's baseboard ide from IDE mass storage device (machine\idehd.c). Simplified idehd status flags & fixed ct486 booting in MESS. Fixed crash when reading from non-existent hard drive (machine\idehd.h). Changed "features" to "identify device". Don't set DRDY immediately when executing identify device as a timer is fired that will set it and trigger an interrupt anyway. Diagnostics fail if no identify device response is available. Set correct register contents at reset. Added edge detection to reset. Clear irq as soon as reset is triggered. Don't clear DRDY when resetting. Only call update_irq if something changed. Removed some places that were setting sector count. Added some #defines for masking bit fields (machine\idectrl.c, idehd.c, drivers\chihiro.c, cobra.c, kinst.c, taitotz.c and viper.c). Fixed head incrementing when using CHS with 16 heads (machine\idehd.c). Removed read_key() from ide_mass_storage_device as it's only used by ataflash and that was also reading the key in manually (machine\ataflash.c, idehd.c, drivers\chihiro.c). Added device number in logs, fixed issues with status flags that was causing FreeBSD to fail to boot with two drives (machine\idehd.c). Added ata_interface_device, ide_controller_device is now only for pc register mapping. Renamed ide_mass_storage_device to ata_mass_storage_device. Changed ide_hdd_device so it only picks up it's image from the harddisk_image_device, which does a lookup to see if there is a region itself (ataflash.h, idectrl.c/h, idehd.c/h, machine.mak, drivers\atlantis.c, calchase.c, chihiro.c, cobra.c, djmain.c, extrema.c, fruitpc.c, funkball.c, gamecstl.c, globalvr.c, iteagle.c, jaguar.c, kinst.c, maygayep.c, mediagx.c, midqslvr.c, midvunit.c, photoply.c, pinball2k.c, pyson.c, qdrmfgp.c, quakeat.c, queen.c, savquest.c, seattle.c, taitogn.c, taitotz.c, twinkle.c, vegas.c, viper.c, voyager.c, vp101.c, zn.c, includes\djmain.h and qdrmfgp.h). Added vt83c461, which is currently implemented as a 32 bit chip. This allows hooking up to the jaguar driver without any glue, but primal rage 2 does as the io bus it's connected to is only 16 bit. Only build the identify buffer on the first reset, so patches made by the driver aren't lost if the device is reset. Fixed issues that caused the HD to report that the diagnostics failed (machine\idehd.c and drivers\chihiro.c). Log unknown writes (machine\idehd.c). Moved identify buffer manipulation and master/user password setting from ata interface to the ata mass storage device. These should be stored in the CHD (emu\machine\atadev.c/h, ataintf.c/h, idehd.c/h, drivers\cobra.c, djmain.c, kinst.c, taitotz.c and viper.c). Make sure identify buffer is initialised (machine\idehd.c). Added IDE_CONTROLLER_32 for systems that have 32 bit prefetch. Don't update irq/dmarq unless they change (machine\ataintf.c). Uses one timer instead of anonymous timers, so that resetting the device will stop any outstanding work. BSY is always set when waiting for the busy timer to fire. Implemented DASP & PDIAG functionality, device 1 is detected during reset & if device 1 fails diagnostic then device 0 sets bit 7 of it's diagnostic result. Ide cards now default to 1 hard disk, otherwise device 1 without a chd will cause device 0 to report a controller error (AMIBIOS for example doesn't allow booting from device 0 if device 1 fails). Timing of DASP & PDIAG is set very short because of lack of wait states when accessing ATA bus. Improved SRST functionality, which has meant viper needed to be changed to trigger a hard reset instead of a soft reset. Writes to the command register are now ignored with BSY or DRQ is set (packet devices can accept the DEVICE RESET command but they are not supported yet) [smf]. Forgot the secret ingredient (machine\idehd.h) [R. Belmont].
- 0.148u5            : Changed I/O to 8/16 bit & removed the flash trampolines in the driver (machine\idectrl.c) [smf].
- 0.148u4            : Added machine\isa_ide8.c/h. XT IDE interface [Phill Harvey-Smith].
- 0.148u2            : Words 57/58 of IDENTIFY DEVICE are total sectors, not sectors per track (machine\idectrl.c). As commented, this is the case for ATA-1, -2, -3, -4, and -5. The CFFA2 Apple II IDE card firmware relies on this value being as documented in the standards to properly detect the drive size, and none of the usual sensitive Atari/Midway games are broken by the change (This field is unused in ATA-6 and later) [R. Belmont]. Fixed for ide_controller_device class for most uninitialized variables [Samuele Zannoli].
- 0.148u1            : Fixed regression in Fishin' Frenzy without breaking Area 51 Site 4 (machine\idectrl.c) [Peter Ferrie].
- 0.148              : Peter Ferrie fixed phantom slave drive detection problem (machine\idectrl.c).
- 0.147u2            : smf cleaned up the IDE controller enough to change the irq to a DEVCB2 and changed DEVICE_SELF_OWNER to DEVICE_SELF in IDE config & in MCFG_IDE_CONTROLLER_ADD add the IDE controller after the slots (audio\jaguar, drivers\atlantis.c, calchase.c, chihiro.c, cobra.c, djmain.c, funkball.c, gamecstl.c, jaguar.c, kinst.c, mediagx.c, midqslvr.c, midvunit.c, qdrmfgp.c, queen.c, savquest.c, seattle.c, taitogn.c, taitotz.c, taitowlf.c, twinkle.c, vegas.c, viper.c, voyager.c, xtom3d.c and zn.c).
- 0.147              : More proper solution for not connected IDE devices [Miodrag Milanovic]. Support IDE command 0x31 (IDE_COMMAND_WRITE_MULTIPLE_NORETRY) [Phil Bennett].
- 0.146u4            : Fix for MT04844 bug (black screen after EEPROM initialize in Fishin' Frenzy), no need to clear status if drive not connected [Miodrag Milanovic].
- 0.145u4            : idectrl change [Carl].
- 0.145u1            : IDE controller now support two slots, currently used devices are made as slot devices [Miodrag Milanovic]. Note that rom regions for disks are now changed in order to support multiple connected drives in cases needed.
- 0.144u7            : Miodrag Milanovic fixed idectrl regression and clean it a bit.
- 0.144u6            : Miodrag Milanovic added support for 2 drives on IDE controller.
- 0.144u5            : Carl added delayed interrupts in idectrl to enable booting on some older BIOSes.
- 0.143u1            : Implemented command 0x70 (SEEK) makes jdredd and jdreddb boot again (idectrl.c) [Miodrag Milanovic].
- 0.142u5            : Carl clears error status on driver initialization (idectrl.c). Implemented verify no retry command.
- 0.142u3            : Updated idectrl to react on IDE_COMMAND_ATAPI_IDENTIFY it is returning same content as case IDE_COMMAND_GET_INFO, disks are being identified by 586 drivers in MESS. Added 0xE3 command to idectrl, ATAPI identify should not work for hard disk, so updated unknown commands always to return IDE_ERROR_UNKNOWN_COMMAND, this way at586 driver boots (machine\idectrl.c) [Miodrag Milanovic].
- 0.132u5            : Added IDE Lock mechanism to the IDE Driver in MAME, so games on gnetv2 BIOS are working correct now (idectrl.c / idectrl.h) & taitogn.c [Joerg Hartenberger].
- 0.130u3            : Build the IDE features table only when there is a CHD available [Curt Coder].
- 0.128u5            : Aaron Giles removed cpunum_get_active(). Main important change is that IDE controllers with bus mastering (DMA) need to specify the target address space in the IDE device configuration.
- 0.126u4            : Aaron Giles changed the IDE interfaces to default to choosing the region with the same tag as the device for its master disk (assuming no slave). Added support for specifying explicit master/slave disk regions as part of the configuration, though slave disks are still not supported yet.
- 0.124u3            : Aaron Giles converted the IDE controller to a device. Updated all drivers accordingly.
- 0.79u2             : Nathan Woods added ide_bus_0_r() call to access the bus directly.
-  9th February  2004: Nathan Woods sent in miscellaneous fixes to the IDE controller emulation.
- 0.78               : Aaron Giles fixed IDE controller final sector handling for Gauntlet: Dark Legacy and added new PIC mapping.
- 0.77u3             : Aaron Giles made sure the IDE controller in the Seattle games waits a minimum amount of time before generating an interrupt. The IDE controller features buffer is now filled in completely. Also fixed code that reads the bus master status register from a word offset. Nathan Woods added #ifndef <headername>_H protection (harddisk.h + chd.h).
- 0.69a              : IDE Update adding support for a few things needed in the future [Aaron Giles].
- 27th May       2003: Aaron Giles updated the IDE controller emulation to support a couple more commands and added DMA bus mastering support that will be necessary for the Seattle games.
- 0.69               : Added ide_controller_init_custom() (used by MESS) (src\idectrl.c) [Nathan Woods].
- 0.59               : Added machine\idectrl.c/h.
- NOTES: IDE = Integrated Drive Electronics. IDE Controller: 83461 VT83C461, QFP100 (Area51, Maxforce, Primrag2), 87415 PC87415VCG (Blitz99)
- DRIVERS: djmain.cpp, kinst.cpp, taitotz.cpp, turrett.cpp, cobra.cpp, viper.cpp, jaguar.cpp and chihiro.cpp
- SOURCE: bus\isa\ide.cpp, machine\idectrl.cpp and idehd.cpp


I9.31  EIDE
- 0.264              : Added bus\pci\pdc20262.cpp/h. Added PDC20262 card (Promise PDC20262 FastTrak66 EIDE controller). Dumped v1.14 BIOS and provide PCI config scan [Guru]. Added base bus master interface [Angelo Salese].
- NOTES: EIDE = Enhanced Integrated Drive Electronics
- PCB: CMDPCI646U2, PC1646U2 CMD EIDE Controller for HDD Quantum Fireball (Gauntleg, Gauntdl)
- SOURCE: bus\pci\pdc20262.cpp



I9.4   ATA/ATAPI

- 0.275              : Abort ATA commands when writing to command block registers and DRQ or BSY is set, which is mentioned in the ATA3 specification as a possible outcome. Removed the equivalent hack used by the cojag games. Improved the logging in the ATA code. Don't abort commands if the drive/head register is written with the current value (machine\atahle.cpp). Reading the status doesn't acknowledge interrupts unless BSY is 0, update RDY when reading either cs0 or cs1, log the correct device number even when device 0 is standing in for device 1, don't log data reads/writes if the device isn't selected, fixes regression that prevented slave devices working. Fixes regression in 'Tropical Chance' booting and 'Psyvariar -Revision-' save settings, by reverting to ignoring writes when BSY flag is set (machine\atahle.cpp). ATA-1 specification says that some drives will de assert interrupts if there is more data to be read (machine\atastorage.cpp). Store sense key in ATA error register (ata\atapihle.cpp). Attempt at implementing unit attention how software needs it to be rather than any standards and removed ATAPI_FIXED_CDROM & ATAPI_FIXED_DVDROM (ata\atapicdr.cpp) [smf].
- 0.273              : Clamp buffer size to word units in command packet. Fixed CD audio playback in PC-based systems (ata\atapihle.cpp) [Angelo Salese].
- 0.268              : Clear DMA modes when switching to PIO mode. Do not log reads when reading from the debugger (machine\atahle.cpp) [Wilbert Pol].
- 0.267              : Log disk geometry at verbose level (rather than debug) so it can be shown in release builds. Also use logmacro.h for compile-time configurable logging (machine\atastorage.cpp) [Vas Crabb].
- 0.263              : Added 'Matsushita CR589 CD-ROM Drive' (cr589) as mountable option (ata\atadev.cpp) [Angelo Salese].
- 0.262              : Use multibyte.h helpers (machine\atastorage.cpp) [AJR]. Made DMA ready configurable (ata\atapihle.cpp) [Windy Fairy].
- 0.259              : Support subclassing atapi_fixed_cdrom_device (ata\atapicdr.cpp) [R. Belmont].
- 0.258              : Updates: Support READ_BUFFER and WRITE_BUFFER commands, used by early ATA Macs to verify drive communications. Don't report an error on SET_FEATURES for ENABLE_ECC, ENABLE_RETRIES, and ENABLE_READ_LOOK_AHEAD. Support the secondary "hdd" interface so software lists can work with multiple drive types (machine\atahle.cpp and atastorage.cpp) [R. Belmont].
- 0.257              : Changed ata\atahle.cpp/h to machine\atahle.cpp/h. Untangle machine\ataflash.cpp from the parallel ATA interface. This isolates the ATA disk drive interface implementation from the physical parallel ATA device interface. The ATA Flash PC Card is no longer a kind of parallel ATA device. Derive from CF card base rather than hard disk base. Made the CF Card behave more like a CF card (machine\atastorage.cpp) [Vas Crabb].
- 0.256              : Do slot output signals the sensible way (ata\atadev.cpp/h, ata\atahle.cpp/h), fixes Killer Instinct and Killer Instinct 2 do not get beyond blue startup screen [Vas Crabb].
- 0.255              : Make the dvdrom drives be dvdroms (ata\atapicdr.cpp) [O. Galibert]. Set CDDA image on device reset (ata\atapicdr.cpp and scsi\scsicd.cpp) [Windy Fairy].
- 0.252              : Reset error state on writing CS0 command. Also added constants for standby commands (not implemented yet) (ata\atahle.cpp) [holub].
- 0.250              : Added alternate CS0/CS1 handlers with built-in byte swapping for big-endian host systems (ata\ataintf.h) [AJR].
- 0.244              : Fixed save state for 8-bit mode (ata\atahle.cpp) [Miodrag Milanovic].
- 0.240              : Streamlined logging across chips to use logmacro.h, removed popmessages and printfs in production code (ata\atapihle.cpp) [Angelo Salese].
- 0.229              : Added way to specify Ultra DMA as a machine configuration (bus\ata\atapicdr.cpp) [Windy Fairy].
- 0.215              : Changed machine\atadev.cpp/h to bus\ata\atadev.cpp/h, machine\atahle.cpp/h to bus\ata\atahle.cpp/h, machine\ataintf.cpp/h to bus\ata\ataintf.cpp/h, machine\atapicdr.cpp/h to bus\ata\atapicdr.cpp/h and machine\atapihle.cpp/h to bus\ata\atapihle.cpp/h. Moved IDE devices into bus\ata [AJR].
- 0.201              : Added DEVCB3 support (machine\ataintf.cpp). Removed ATA_INTERFACE MCFG macros [Ryan Holtz].
- 0.198              : Get abstract_ata_device working again - needs a better solution long-term (machine\ataintf.cpp) [Vas Crabb].
- 0.193              : Simplified class hierarchy so there is no ambiguity with 16 & 32 bit methods. Removed the memory system read/write handler trampolines from the ATA devices as they are not required (machine\atadev.cpp) [smf].
- 0.181              : Fixed issue with 68000 byte writes to sector count by only taking the bottom 8 bits from the bus (machine\atahle.cpp). Note: Don't use mem_mask as ATA doesn't have an equivalent mechanism for byte accesses and it could mask out data that real hardware would keep. Fixed ATA Write Multiple (command c5) ignoring the block count on the first block (machine\idehd.cpp) [smf].
- 0.180              : Made constructor protected in machine\atahle.h [smf].
- 0.179              : Added "headphones" to ATAPI CD-ROM drives [smf].
- 0.176              : Added ATAPI_FIXED_CDROM to Firebeat driver (machine\atapicdr.cpp) [Carl].
- 0.172              : Basic disk change support (machine\atapicdr.cpp) [Carl].
- 0.170              : Try to fix a problem when m_buffer_size is not a multiple of sector size (machine\atapihle.cpp). When reading sectors using the packet command, if the "Byte count limit" is not a multiple of the sector size, only a subset of the data will be transferred. It happens sometimes with the xbox [yz70s].
- 0.167              : Ultra DMA modes should be useable now (machine\atahle.c). Call routine fill_buffer using a timer to avoid reentering read_data and losing data with ultra DMA (machine\atahle.c). Call fill_buffer using a timer only when ultra DMA is enabled. Otherwise some drivers have problems [yz70s].
- 0.166              : Added method identify_device_buffer() to ATAPI CDROM (machine\atapicdr.h) like in idehd [yz70s].
- 0.164              : Added Check Power Mode command (machine\atahle.h and atapihle.c) [Ville Linde].
- 0.162              : Added clear cache command (machine\atahle.c) [Ted Green].
- 0.158              : Added missing save state to machine\atahle.c, fixes NFL Blitz '99 save state regression [Osso].
- 0.156              : smf fixed Otenki Kororin fails to boot into the game by reducing ATA flash card seek time to zero.
- 0.155              : Added Read Native Max Address IDE command (machine\atahle.h, machine\idehd.c) [Barry Rodewald].
- 0.154              : Added CS1 active status register to machine\atahle.c [Curt Coder].
- 0.153              : Added support for 8 bit data transfers using the set features command, instead of using mem_mask as ATA doesn't work that way. Added a hack to get Taito GNET games working after 'added support for 8 bit data transfers'. More investigation is required to determine whether there is a latch when using 8 bit accesses or whether the limitation of fixed sized transfers is only applicable to the ATA bus and not flash cards that implement the ATA protocol [smf].
- 0.152              : Added machine().describe_context() to debugging code (machine\ataintf.c). Set the error bit in the IDE status register if the command causes a check condition. Fixed enum, didn't mean to click ok on commit earlier as I was still clean building (machine\atapihle.c) [smf].
- 0.151              : Fixed machine\atahle.c. This fixed "disk error" after rom check in bm1stmix and other. Changed atapicdr packet identify to Virtual CDROM because not all images are compressed & the text no longer starts in the middle of the vendor name (software displaying the vendor name used to display "MAME Com"). Added m_buffer_size = IDE_DISK_SECTOR_SIZE to machine\ataflash.c. This fixed boot error message in Taito G-NET games spuzbobl, spuzboblj and Usagi [smf].
- 0.150              : Added machine\atahle.c/h, atapicdr.c/h and atapihle.c/h. Replaced ISA16_IDE_CD with ATAPI_CDROM, replaced ISA16_IDE & ISA16_IDE_CD in southbridge_device with two BUS_MASTER_IDE_CONTROLLERs. Removed local ATAPI code in preparation to use the new code, but the CPU gets lost after executing the first instruction (drivers\gammagic.c). Refactored to use ATA_INTERFACE (drivers\firebeat.c and ksys573.c). Preliminary ATAPI/Dreamcast DMA. The timing needs to be moved into the devices, so the timing hack can be removed from the driver (machine\atapihle.c and mess\machine\dccons.c). Preliminary SET FEATURES support. Only set transfer mode is currently supported, but this checks/sets flags in the identify device buffer. The buffer has been moved up into atahle and the idehd has been changed to work with words instead of bytes (emu\machine\atahle.c/h, atapihle.c/h, idehd.c/h, drivers\cobra.c, kinst.c, taitotz.c, viper.c and machine\gdrom.c) [smf].
- 0.149u1            : Added machine\atadev.c/h and ataintf.c/h.
- 0.149u1            : ATA flash device derives from IDE HDD device and added pccard interface, instead of using an IDE controller. Moved the GNET protection command processing to ataflash.c. Removed read_key() from ide_mass_storage_device as it's only used by ataflash and that was also reading the key in manually (machine\ataflash.c, idehd.c, drivers\chihiro.c) [smf].
- 0.149              : Added Split RF5C296 and ATA flash functionality from Taito G-NET driver into their own devices. The pccard slot has had to revert to use memory handlers instead of device maps for the moment [smf].
- 0.148u2            : altstatus reset to ATAPI CD (mess\machine\isa_ide_cd.c) [Carl].
- 0.147u3            : Some additional ATAPI support to Firebeat driver [PKGINKGO].
- 0.142u3            : Updated idectrl to react on IDE_COMMAND_ATAPI_IDENTIFY it is returning same content as case IDE_COMMAND_GET_INFO, disks are being identified by 586 drivers in MESS. Added 0xE3 command to idectrl, ATAPI identify should not work for hard disk, so updated unknown commands always to return IDE_ERROR_UNKNOWN_COMMAND, this way at586 driver boots (machine\idectrl.c) [Miodrag Milanovic].
- 0.125u5            : Firebeat driver update [Aaron Giles]: Added VBLANK IRQ clear. Added ATAPI IRQ clear. Tried to add UART IRQ clear but it doesn't yet work. Most of the games start to show something again with these changes. Added fast RAM region.
- NOTES: ATA = Advanced Technology Attachment; ATAPI = Advanced Technology Attachment with Packet Interface; atahle = ATA device HLE
- DRIVERS: cobra.cpp, djmain.cpp, firebeat.cpp, iteagle.cpp, kinst.cpp, ksys573.cpp, midvunit.cpp, qdrmfgp.cpp, taitotz.cpp, turrett.cpp, twinkle.cpp, viper.cpp, vp101.cpp, zn.cpp
- SOURCE: machine\atadev.cpp, ataflash.cpp, atahle.cpp, ataintf.cpp, atapicdr.cpp and atapihle.cpp



I9.5   SCSI

- 0.284              : Added a BSY line callback suitable for drive LEDs to the bus itself (machine\nscsi_bus.cpp). Now all NSCSI users can have a drive activity LED [R. Belmont].
- 0.277              : Consistent logging order for status. Changed data release delay to 400ns to match the comment. It was previously using a value of 40ns (machine\nscsi_bus.cpp) [Adam Billyard].
- 0.273              : Added some more framework for future support of later SCSI command sets (machine\nscsi_bus.cpp). Support SYNCHRONIZE CACHE command and fixed off-by-1 MODE SENSE size reporting (nscsi\hd.cpp) [R. Belmont].
- 0.272              : AppleCD improvements: Fixed bug causing APPLE_AUDIO_STATUS to always return PLAYING. APPLE_READ_SUB_CHANNEL now returns the current location information even when playback is stopped. APPLE_AUDIO_PLAY semantics have been overhauled to support the start playback/set end flag. APPLE_AUDIO_STOP now sets the stop position to the end of the specified track, as per comments in Apple II DeskTop's CD Remote and the behavior of Apple CD-ROM Explorer. APPLE_AUDIO_SCAN is now implemented and works. Many other minor fixes and behavior updates (nscsi\cd.cpp) [R. Belmont, thanks to Joshua Bell]. Updated the Apple CD-ROM device based on the developer documentation [R. Belmont, thanks to Antoine Vignau]. Support ZuluSCSI/BlueSCSI Toolbox commands for uploading and downloading files to the MAME share_directory. CD switching commands are not (yet) supported but may be in the future (nscsi\cd.cpp) [R. Belmont].
- 0.268              : Fixed no-disc status for Apple CD drive and implemented eject command. Dragging a CD into the Trash on MacOS now properly unloads it [R. Belmont].
- 0.262              : Use multibyte.h helpers and correct allocation length for READ TOC/PMA/ATIP command (nscsi\cd.cpp). Use multibyte.h helpers (nscsi\hd.cpp and nscsi\s1410.cpp) [AJR].
- 0.259              : Designated initializers require C++20a (machine\nscsi_bus.cpp) [Patrick Mackinlay]. Pass pointer to struct for sense_data (machine\nscsi_bus.cpp) [hap].
- 0.258              : Support the secondary "hdd" interface so software lists can work with multiple drive types (nscsi\hd.cpp). Improved the correctness of the Apple CD-ROM command set, including working audio commands (nscsi\cd.cpp) [R. Belmont]. Flipped include order in bus\nscsi\cd.cpp to put module header immediately after prefix header [Vas Crabb].
- 0.257              : Correct SCSI command names (machine\nscsi_bus.cpp) [Mietek Bak].
- 0.254              : Set CDDA image on device reset (scsi\scsicd.cpp) [Windy Fairy].
- 0.254              : Implemented basic CDDA support (nscsi\cd.cpp) [Windy Fairy].
- 0.253              : Fixed Xebec S1410 sense, seek and diagnostic commands (nscsi\s1410.cpp) [Curt Coder]. Added vendor-specific Read TOC command for Apple SCSI CD-ROM drive. Included track numbers in results of AppleCD Read TOC command (nscsi\cd.cpp and util\cdrom.cpp) [AJR].
- 0.252              : Handle larger INQUIRY sizes ((MESS) Solaris 2.6 requests 48 bytes) (nscsi\cd.cpp) [Windy Fairy].
- 0.250              : Fixed hard disk formatting for (MESS) ABC 1600 by introducing configurable byte transfer and command delays into the NSCSI system (machine\nscsi_bus.cpp). Fixed NSCSI regression in CPS3 driver (machine\nscsi_bus.cpp) [Curt Coder].
- 0.243              : Don't crash on certain commands when no cdrom is inserted (nscsi\cd.cpp) [O. Galibert].
- 0.241              : Fixed sense command, bytes per sector in read/write buffer commands and format data pattern (nscsi\s1410.cpp) [Curt Coder].
- 0.240              : Expand SCSI device selection (bus\nscsi\devices.cpp) [AJR].
- 0.239              : Minor logging changes (nscsi\hd.cpp) [Michael Zapf]. Copy "MODE SELECT 6" from bus\nscsi\cd.cpp, fixes unable to format (MESS) Macintosh 128k hard disk (nscsi\hd.cpp) [Logan B].
- 0.235              : Added initialization of sense buffer on reset (machine\nscsi_bus.cpp) [Michael Zapf].
- 0.232              : Macs now can see and boot from CD-ROM (bus\nscsi\cd.cpp) [R. Belmont, Al Kossow]. Map full SCSI DRQ memory ranges, A/UX 3 installer can now see its CD. Implemented READ DISC INFORMATION command (nscsi\cd.cpp) [R. Belmont].
- 0.228              : Fixed several genuine issues found by Coverity (software) (bus\nscsi\cd.cpp) [Patrick Mackinlay].
- 0.225              : Have bad hard disk reads actually fail instead of just returning zeroes (bus\nscsi\hd.cpp) [R. Belmont].
- 0.224              : Implemented REZERO command (machine\nscsi_bus.cpp). Fixed format unit command and data input (nscsi\s1410.cpp) [Curt Coder].
- 0.222              : Reset on reset (NSCSI HLE; machine\nscsi_bus.cpp) [O. Galibert].
- 0.221              : Simplified handlers (machine\aic6250.cpp, nscsi_cb.h) [Osso].
- 0.213              : Revert "Make (MESS) SGI CDROM identify as hard disk (nscsi\cd.cpp)" from MAME 0.212 [Patrick Mackinlay].
- 0.212              : Added bus\nscsi\devices.cpp/h. Changed machine\nscsi_cd.cpp/h to bus\nscsi\cd.cpp/h, machine\nscsi_hd.cpp/h to bus\nscsi\hd.cpp/h and machine\nscsi_s1410.cpp to bus\nscsi\s1410.cpp. Moved modern SCSI CD/HD devices into devices\bus\nscsi. Default list of nscsi devices. Class overhaul: SCSI slot options are no longer required to implement nscsi_device themselves. Instead they implement nscsi_slot_device_interface, which contains a finder for a nscsi_device. This is to accommodate LLE SCSI drives with their own LSI interface chips. SCSI bus device connection is now done through device_resolve_objects rather than device_config_complete (The pessimized code to access the device finder is because that will not have been resolved yet). Added a validity checking method for nscsi_connector [AJR]. Make (MESS) SGI CDROM identify as hard disk. Personal Iris depends on the drive reporting as a non-removable hard disk in response to INQUIRY (nscsi\cd.cpp). Fixed logging in nscsi\hd.cpp [Patrick Mackinlay].
- 0.210              : Added isa\asc88.cpp/h. Added serial EEPROM and a few stub handlers (isa\tekram_dc820.cpp). Added 7200 FIFOs to isa/aha174x [AJR]. Verified stub. Windows NT setup uses the VERIFY command without data comparison (machine\nscsi_hd.cpp) [Patrick Mackinlay]. Disabled LOG_DATA_SENT by default to minimize log spam (machine\nscsi_bus.cpp) [Ryan Holtz]. Preliminary emulation of ASC-88 SCSI adapter [AJR, minuszerodegrees.net].
- 0.209              : Added isa\tekram_dc820.cpp/h, hultra12f.cpp/h, ultra14f.cpp/h and ultra24f.cpp/h. Added dumps and skeleton device for Ultra 12F ISA ESDI controller. Preliminary, untested implementation of processor memory requests and inverted Port A outputs; misc small fixes (machine\aic6250.cpp). Use swap_ranges to descramble ROM; added FDC; updated notes (isa\ultra12f.cpp). Added skeleton device for UltraStor Ultra-14F and Ultra-24F EISA SCSI controller [Metropoli BBS Archive]. Support mode page 0x01, allows (MESS) Apple II SCSI Card to access CD-ROMs [R. Belmont]. Added skeleton devices for Tekram EISA SCSI controllers. Map tekram_dc820 SCSI chips; FIFO test now passes but BMIC test fails [AJR, Metropoli BBS Archive, I-Shou University File Server].
- 0.208              : Added bus\isa\aha174x.cpp/h. Added skeleton AHA-1740 and AHA-1742A ISA devices. Added roms for BT-542B ISA SCSI controller (isa\bt54x.cpp) [AJR]. Added AHA-1742A BIOS/MCODE sets [Funet Archive].
-  5th March     2019: Smitdogg - ClawGrip dumped the BIOS of some old PCI SCSI boards (Adaptec AHA-2940AU, Adaptec AHA-2930CU, Advansys APB-930).
- 0.206              : Track the current block LBA on writes (machine\nscsi_hd.cpp) [tyfighter]. Request sense returns minimum of allocated length or available data (or 4 bytes). Set the additional length properly. Fixed some magic numbers (machine\nscsi_bus.cpp). Stubs some mode pages. The (MESS) MIPS systems complain if hard disks don't support these pages and allow mode select on some of them. Added stubs for some mode pages. Detect and report an error for unsupported pages. Accept and ignore mode select command (machine\nscsi_hd.cpp). Correct inquiry with missing lun behaviour. Return error on mode sense for unsupported page (machine\nscsi_cd.cpp) [Patrick Mackinlay]. Added the read TOC command and fixed inquiry (machine\nscsi_cd.cpp). Return diagnostics (machine\nscsi_cd.cpp and nscsi_hd.cpp) [O. Galibert].
- 0.203              : Set block size with mode select (machine\nscsi_cd.cpp). Solaris 2.3 uses MODE SELECT (6) to specify a 512-byte block size during boot from CD-ROM on sun4_40. This patch is very limited (only a single mode parameter block, and no other parameters are supported), but sufficient to make sun4 happy [Patrick Mackinlay]. Disable debug. The default debug settings are filling up error.log pretty quick when booting SCSI machines like (MESS) hp9k_3xx. Disable debug in the default settings, it can still be enabled if some dev/user wants to debug NSCSI (machine\nscsi_bus.cpp, nscsi_cd.cpp and nscsi_hd.cpp) [Sven Schnelle].
- 0.202              : Added FORMAT_UNIT command to machine\nscsi_hd.cpp [Sven Schnelle]. Return mid-sector data when initiating a read mid-sector in 512-byte block mode (machine\nscsi_cd.cpp). Added optional verbose logging of data transfers [Ryan Holtz].
- 0.201              : Support media changes for machine\nscsi_cd.cpp. Together, these changes enable softlist CD-ROM media changes for InterPro, and presumably other nscsi_cd systems. Haven't looked into how other CD-ROM devices work, but the romload fix should apply equally to them too. Detect and respond to media changes [Patrick Mackinlay].
- 0.200              : Added support for CD-ROMs with 512-byte blocks (machine\nscsi_cd.cpp). Older UNIX workstations used SCSI CD-ROM drives with 512-byte logical blocks instead of the now standard 2048. This change makes the block size configurable, and adds logic to translate logical blocks to/from the underlying 2048 byte sectors as needed. Added stub for "prevent/allow medium removal" command. Minor fix for "inquiry" command (machine\nscsi_hd.cpp) [Patrick Mackinlay].
- 0.199              : Only the lower 3 bits of the identify message contain the LUN (machine\nscsi_bus.cpp) [Patrick Mackinlay].
- 0.193              : Use CHD IDNT metadata for inquiry and logmacro.h logging (machine\nscsi_hd.cpp) [Patrick Mackinlay].
- 0.188              : Correction for INQUIRY with bad lun (machine\nscsi_hd.cpp) [Patrick Mackinlay].
- 0.160              : Moved machine\omti5100.c/h to bus\scsi. (MESS) Siemens PC-D keyboard and partial SCSI [Carl].
- 0.155              : Sync rest of lines with input buffer (bus\scsi\scsi.c) [Carl].
- 0.154              : Removed machine\scsibus.c/h, scsicb.c/h and scsidev.c/h. Added bus\scsi\scsi.c/h and machine\legscsi.c/h. Moved scsicd.c/h, scsihd.c/h and scsihle.c/h to emu\bus\scsi\. Added some missing save state entries (machine\nscsi_bus.c, nscsi_cd.c and nscsi_hd.c) [O. Galibert]. SCSI Port using WRITELINE and DEVCB2. The slot number and SCSI ID are separate so you can for example have -harddisk1 as ID 6 and -harddisk 2 as ID 5. The HLE'd CD & HD have configuration switches to set the ID, real emulated hardware will specify the ID using it's own method. Added SCSI ID configuration to sa1403d as it's HLE'd but adds it's own DIP switches [smf]. Synchronized the data output lines with the input buffer device (bus\scsi\scsi.c). (MESS) RM Nimbus: Make SCSI work [Carl].
- 0.152              : Added machine\nscsi_cb.c/h and nscsi_s1410.c/h. Added nscsi versions of the SCSI callback device and Xebec S1410 [Curt Coder]. Fixed D9060 format. Reads greater than one sector were broken when using bit banging (machine\scsihle.c). Added SCSI status code & set it in all command handlers. It is sent over the bus when in status phase. In case of an error further information should be set in m_sense_key/m_sense_asc/m_sense_ascq & m_sense_information so that it can be returned by executing a request sense command (emu\bus\ieee488\d9060hd.c, machine\cdu76s.c, scsihle.c/h and mame\machine\gdrom.c) [smf].
- 0.151              : Moved the adaptec mode sense handling into the ACB4070 device (machine\scsihle.c and mess\machine\acb4070.c) [smf].
- 0.148u2            : Added 6-byte WRITE, logging of unknown commands, and some Apple-specific SCSI tweaks (emu\machine\nscsi_hd.c) [R. Belmont].
- 0.147u4            : Set interface name to SCSI harddisks so they can be mounted as softlist items. Added interface for SCSI CDROM, but named it "cdrom" since medium is always same (machine\nscsi_cd.c, nscsi_hd.c, scsicd.c and scsihd.c) [smf].
- 0.147u3            : Added STOP command to SCSI CD [PKGINKO].
- 0.147u2            : Removed some old commented out code (machine\scsihle.c/h). Default all lines high & improved logging (machine\scsicb.c/h). Added output logging (machine\scsidev.c). Added the device tag when logging that no harddrive is found (machine\scsihd.c). Delays the req signal and disabled logging left on by accident (machine\scsihle.c). Uses logical levels rather than voltage levels for control signals, you have to write 0 to the data lines when you're not sending data. Added a kludge to stop the ff from the 6522 from preventing the bus from being read, this may or may not be how the hardware really works (machine\scsibus.c, scsicb.c, scsidev.c and scsihle.c). Switched SCSICB to use DEVCB2. SCSICD now has a CDDA sub device [smf].
- 0.147u1            : Changed machine\scsidev.c/h to machine\scsihle.c/h. Moved some more SCSI command handling from scsibus into scsidev. Removed init_scsibus() from scsibus_device as it was only used for passing the sector size, in reality this is an attribute of the hard drive and not the bus. It now asks the device for the size, however this will go away soon. Created new base class for SCSI devices which scsihle derives from. Talking to scsibus is now done via scsicb. Call base class in device_start(). Moved extra SCSI_PHASE_* into scsihle.h. Changed rmnimbus to use DEVCB & added a callback for ACK. Added atn to scsicb for completeness & renamed reset line to rst. Moved SCSI protocol code from scsibus_device to scsihle_device, leaving scsibus_device to calculate the current bus contents and distribute it to each of the scsidev_device. Started thinking about how multi-endpoint devices will work, using a hierarchy has too many limitations (machine\scsibus.c) [smf]. Fixed VS2012 warnings in machine\scsicb.c [Oliver Stoeneberg].
- 0.147              : Changed machine\scsi.c/h to machine\scsibus.c/h. Added machine\scsicb.c/h. Glacial SCSI improvements towards NSCSI and beyond, moved the SCSI ID onto the device. SCSI device tags are relative to the SCSI controller. Removed SCSIConfigTable, SCSI devices are now linked using SCSIBUS from MESS. Made S1410 device act as a SCSIHD with the custom commands, added D9060HD & ACB4070 devices to do the same thing (machine\scsibus.c and scsihd.c). Split out callbacks from scsibus_device into scscb_device, eventually this will be a SCSI device. SCSIBus_interface is no longer required and has been removed. Removed test ready command as scsidev already handles it (machine\scsibus.c/h) [smf].
- 0.146u5            : Added docs\nscsi.txt. NSCSI documentation [O. Galibert].
- 0.146u1            : SCSI devices are now proper MAME devices [Phill W.]. Made NSCSI use fixed slots support in core [Miodrag Milanovic].
- 0.145u4            : Write and mode sense support in nscsi_hd. Misc fixes [O. Galibert]. Dir works on CD's now (machine\scsicd.c) [Miodrag Milanovic].
- 0.145u1            : Added machine\nscsi_bus.c/h, nscsi_cd.c/h and nscsi_hd.c/h. New modern object-oriented bus-signals-available SCSI implementation [O. Galibert].
- 0.144u7            : Fixed SCSI hard disk allocation. This fixed Crypt Killer crashes MAME before it can display the disclaimer [Curt Coder].
- 0.144u5            : Get sector size from CHD metadata to support old 256 bytes/sector SCSI drives, and allow hard disk image subdevices (scsihd.c) [Curt Coder].
- 0.124u2            : R. Belmont reverted previous SCSI CD change which broke some games.
- 0.135u2            : Added support for SCSI command 0x2a (Write w/ 32-bit LBA) [Harmony].
- 0.135              : R. Belmont fixed scsihd don't crash if no media is attached.
- 0.134u4            : scsihd updates [R. Belmont]: Fixed parameter interpretation for READ(10) and READ(12). Added WRITE(10).
- 0.126u4            : Disks opened by the romload module are no longer identified by index. Instead, they are identified by the region they were loaded in. This generally means one disk per region. get_disk_handle() now takes a region name in place of an index. Updated all callers to do this. The SCSI modules in particular posed a challenge to make this work, so watch out for potential bugs there [Aaron Giles].
- 0.124u2            : R. Belmont reverted previous SCSI CD change which broke some games.
- 0.124u1            : Various SCSI devices register state items by their disk ID, which are not unique across device types. Introduced a device-type offset for CD-ROMs so their registrations don't clash with harddisks [R. Belmont].
- 0.124              : R. Belmont fixed SCSI case when no device exists (e.g. running the sys573 BIOS directly).
- 0.122u2            : Oliver Stoenberg fixed several memory leaks related to SCSI CD emulation.
- 0.120u2            : Added machine\scsi.c/h, scsidev.c, scsihd.h and scsicd.h. Made substantial changes to the SCSI support, making it require fewer hacks, and allowing one device to be derived from another [smf].
- 0.110u4            : SCSI CD emulation improvements [Ville Linde]: Added Play Audio (12) command. Fixed track number and added MSF support to Read Sub-Channel command.
- 0.109u5            : R. Belmont improved behavior of SCSI CD implementation for audio playback and TOC reading commands.
- 0.99u3             : SCSI hard disk updates [R. Belmont]: Added FORMAT UNIT, READ (6 byte), WRITE (6 byte), READ (12 byte), MODE SENSE and READ CAPACITY commands. Changed INQUIRY to ID as a real Seagate model, which makes MacOS much happier than a manufacturer code of "MAME". Added some MESS-specific tweeks to initialization.
- 0.96u2             : R. Belmont and Ville Linde fixed a number of bugs and added support for more SCSI commands and modes.
- 0.95               : Added machine\scsihd.c, scsicd.c and scsidev.h.
-  8th January   2004: R. Belmont - Fixed a bunch of bugs all around GV, the SCSI controller, and other bits. Hyper Athlete now has all it's men in MAME and is fully playable, and the corrupted graphics in Wedding Rhapsody are fixed (it's a quiz game). Also figured out the problem with Susume Taisen Puzzle-dama in MAME, and Simpsons Bowling no longer freezes and just needs the trackballs hooked up to be fully playable.
- NOTES: SCSI = Small Computer System Interface
- PCB: AMD 33C93A (PLCC44) SCSI Controller (CPS3)
- DRIVERS: cps3.cpp, konamigq.cpp, konamigv.cpp, model3.cpp, twinkle.cpp
- SOURCE: machine\scsihd.c and scsicd.c


I9.51  SCSI T10 commands

- 0.275              : Fix for 'Tropical Chance' booting since MAME 0.272 (machine\t10mmc.cpp) by setting the correct media type. Added support for mode sense dbd flag & mode select shouldn't use the length in the header [smf].
- 0.272              : Return dummy data for CD-TEXT format TOC read. Fixed bug in track transition (machine\t10mmc.cpp) [Windy Fairy]. Fixed ATAPI Mode Sense and Mode Select for MSCDEX Mode 2 Form 1 support (machine\t10mmc.cpp) [smf, Windy Fairy]. T10MMC mode select length does not include the length itself (machine\t10mmc.cpp) [smf].
- 0.266              : Playback from current head and other misc cleanup. Implemented T10MMC_CMD_MECHANISM_STATUS. Implemented TOC_FORMAT_FULL_TOC, TOC_FORMAT_SESSIONS and return proper indexes for T10MMC_CMD_READ_SUB_CHANNEL (machine\t10mmc.cpp) [Windy Fairy].
- 0.264              : Fixed MSF to LBA conversion for T10MMC_CMD_PLAY_AUDIO_MSF. Clean up how to_msf/to_lba is used throughout the code (machine\t10mmc.cpp) [Windy Fairy]. Fixed minor error in previous refactoring (machine\t10spc.cpp) [AJR].
- 0.261              : Fixed interpretation of CD Audio control page data (machine\t10mmc.cpp) [Windy Fairy].
- 0.259              : Support page 0x3f (return all pages) for MODE SENSE (machine\t10mmc.cpp) [R. Belmont]. Use helpers from multibyte.h (machine\t10mmc.cpp, t10sbc.cpp and t10spc.cpp) [AJR]. Fixed reading user data from mode 1 tracks using T10MMC_CMD_READ_CD. Added support for T10SBC_CMD_SEEK_10 command [Windy Fairy].
- 0.258              : Implemented most features of T10 MMC read CD (0xbe) command (machine\t10mmc.cpp) [Windy Fairy]. Fixed some Coverity warnings in the nscsi_apple_cdrom_device (nscsi\cd.cpp) [R. Belmont].
- 0.255              : Track command 48h just plays track when TNO start == TNO end. Fixed redbook silent regression with konamigv.cpp (machine\t10mmc.cpp) [Angelo Salese]. Added DVD support. Better abstraction in general and multi-image support in arcade-type drivers (util\dvdrom.cpp and machine\t10mmc.cpp). Make driver a little les chatty (machine\t10mmc.cpp). Make the initial dvdrom test pass (nichibutsu\hrdvd.cpp and machine\t10mmc.cpp) [O. Galibert].
- 0.254              : Avoid a stack overflow if device can't read CD data, allows (MESS) PC-FX menu to be useable (with CD in ...) (machine\t10mmc.cpp) [Angelo Salese]. Implemented basic CDDA support (nscsi\cd.cpp and machine\t10mmc.cpp). Added preliminary implementation of "read CD" (0xBE) command (machine\t10mmc.cpp) [Windy Fairy].
- 0.243              : Return error response when no CD is available (machine\t10mmc.cpp) [AJR].
- 0.243              : Classify cdrom_file. Could use more internal work, but it's a step [O. Galibert].
- 0.237              : Dumped 76s.1.1c.ic206 ROM (bus\scsi\cdu76s.cpp) [Hammy].
- 0.230              : Added CD media type check for special LBA 0 case (machine\t10mmc.cpp). Note: The special case of setting m_lba to 150 when m_lba is 0 is only applicable to data and mixed mode media CDs [Windy Fairy].
- 0.227              : Fixed calculating relative value in T10MMC_CMD_READ_SUB_CHANNEL (machine\t10mmc.cpp) [Windy Fairy].
- 0.206              : m_sotc isn't implemented as bool (machine\t10mmc.h) [hap].
- 0.205              : Reverted erroneous CD audio change in MAME 0.199 and added gain setters for each CD channel (machine\t10mmc.cpp). Support 256 gain levels (machine\t10mmc.cpp) [Phil Bennett].
- 0.199              : Added missing header bytes to mode sense, fixes audio playing with common DOS CDROM drivers (machine\t10mmc.cpp) [Carl].
- 0.187              : Improved CD audio play track/index command handling (machine\mb89352.c and t10mmc.c). kokoroj2 needs mods in the MB89352 core that won't break (MESS) Sharp X68000 as well. kokoroj2 requires the printer interface, a command to stop current track is sent with CD & printer disabled in dipswitches [smf]. Correct CD Audio control page (machine\t10mmc.cpp) [O. Galibert].
- 0.183              : Added Play Audio MSF (0x47) command, used by Another CD Player and Astrocounter of Crescents (machine\t10mmc.cpp) [Barry Rodewald].
- 0.154              : Moved emu\machine\cdu76s.c/h to emu\bus\scsi\.
- 0.152              : Added SCSI status code & set it in all command handlers. It is sent over the bus when in status phase. In case of an error further information should be set in m_sense_key/m_sense_asc/m_sense_ascq & m_sense_information so that it can be returned by executing a request sense command (machine\t10mmc.c, t10sbc.c, t10spc.c, t10spc.h). Fixed compiling with MSVC and added enums for T10 commands, moved seek(6) from 2410 to t10sbc [smf]. Fixed hard disk images with 256-byte sectors (machine\t10sbc.c) [Curt Coder].
- 0.151              : Added emu\machine\t10mmc.c/h, t10sbc.c/h, t10spc.c/h and cdu76s.c/h. Use virtual multiple inheritance to share command processing between SCSI & ATAPI instead of having a SCSI subdevice. This allows matsushita_cr589_device & gdrom_device to derive from atapi_cdrom_device. Moved request sense command into t10spc, supporting the old obsolete format and the new one. Fixed read TOC to always return the lead out & return the correct results for msf requests. Mounting the same iso in Windows 8 produces a slightly different result, but it's enough to make windows 2000 recovery console and Windows 95a work. Fixed bugs in new toc reading code, when the request wasn't from the first track. Uses the sff8020 read toc legacy format field if the mmc format field is zero (MSCDEX uses the sff8020 format field instead of the mmc format field). Added support for session format for read toc, we only support 1 session so the data is mostly hard-coded. Fixed read sub command when subq bit was not set (machine\t10mmc.c). Added a cdu76s device so that the inquiry for the generic ATAPI and SCSI cdrom drives can also be set to "Virtual CDROM". However none of the Konami GV games care, so I'm not sure which game required that response & that is the only Konami SCSI CD based system. The response is invalid according to the SCSI spec as the strings should be space filled and not null terminated & there are fields not filled in. So it's currently compiled in but not used (machine\cdu76s.c). Fixed read sub channel bug (fixes Dance Dance Revolution 2nd Mix) (machine\t10mmc.c) [smf].
- DRIVERS: atapicdr.h = firebeat.cpp, hrdvd.cpp, mtouchxl.cpp  +   scsicd.h = konamigv.cpp and twinkle.cpp   +   cdu76s.h = ???
- SOURCE: machine\t10mmc.cpp



I9.52  53CF96

- 0.265              : Removed machine\am53cf96.cpp/h. Removed legacy am53cf96.cpp SCSI bus host controller device [Vas Crabb].
- 0.221              : Simplified handlers [Osso].
- 0.201              : Removed MCFG macros and old DEVCB [Ryan Holtz].
- 0.149              : Fixed uninitialized variable and added range checking, which prevents visual studio 64 bit debug builds from crashing (machine\am53cf96.c). Apple GCC complained about "warning: comparison is always true due to limited range of data type". Deleting/Update code [smf].
- 0.147              : Removed am53cf96_get_device and some other unused GetDevice() trampolines. AM53cf96 is now a device. Use device_t.static_set_static_config. SCSI device tags are relative to the SCSI controller (machine\am53cf96.c) [smf].
- 0.95               : R. Belmont changed konamigv and konamigq drivers to support the new 53cf96 configuration system. AM53cf96.c is now fully configurable: you can have any combination of up to 7 CD-ROMs and/or harddisks attached to the emulated SCSI bus and specify what each one's SCSI ID is. CD-ROM emulation expanded to support more SCSI commands and bugfix some existing ones. Moved actual CD-ROM and harddisk device emulation out of am53cf96.c to new scsicd.c and scsihd.c files. CD-ROM emulation expanded to support more SCSI commands and bugfix some existing ones.
- 0.80u3             : R. Belmont added preliminary CD-ROM support for CHDMAN. CDROM support for the AM53cf96 SCSI controller.
- 0.78               : Added machine\am53cf96.c/h. NCR 53CF96-2 SCSI controller emulation [R. Belmont].
- NOTES: AMD/NCR/Symbios 53CF96 SCSI-2 controller. Qlogic FAS-236 and Emulex ESP-236 are equivalents.
- DRIVERS:
- SOURCE: machine\am53cf96.cpp
- PCB: NCR 53CF96-2 hard drive control IC, QFP100 (CryptKiller)


I9.53  53C700

- 0.243              : DFE bit is not reset when status register is read [Paul Arnold].
- 0.242              : Don't use static buffers for messages, don't clash with the LOG_GENERAL constant (machine\53c7xx.cpp) [Vas Crabb].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.186              : Changed description to 'NCR 53C7xx SCSI'.
- 0.149              : Added support for machine config fragments that are applied when the cart is loaded, converted NCR 53C7xx to DEVCB2 as an example [smf].
- 0.148u2            : Preliminary 53c7xx save state support [A. Viloria].
- 0.148              : Added machine\53c7xx.c/h. Added preliminary emulation of the NCR 53C700 SCSI I/O processor [Phil Bennett].
- NOTES: NCR 53C700 SCSI I/O Processor
- DRIVERS: rastersp.cpp
- SOURCE: machine\53c7xx.cpp


I9.54  53C810

- 0.155              : Reading 53C810 DSTAT clears DIP bit in ISTAT [Ville Linde].
- 0.154              : Updated 53C810 to use delegates, and moved some formerly static stuff into Model3 and (MESS) BeBox classes.
- 0.129u5            : Couriersud added register SXFER (0x05) to the 53c810 - nothing more. This reg determines SCSI transfer speeds. scud / scuda now fatalerror with writes to reg # 0x70. Converted 53c810 to a C++ device [smf].
- 0.125u5            : Aaron Giles changed 53C810 SCSI controller read/write handles to proper READ8/WRITE8_HANDLER callbacks so they can eventually be used directly.
- 0.125u4            : R. Belmont updated the 53c810 SCSI adapter to pass IRQ state with the IRQ callback.
- 0.102              : Began adding support for SCRIPTS programs to the 53C810 emulation [Nathan Woods, R. Belmont].
- 0.101u1            : Tomas Karlsson integrated 53C810 into the SCSI framework.
- 0.99u3             : Ville Linde fixed recent LSI53C810 update which caused the Model 3 games to crash.
- 0.97u5             : Nathan Woods abstracted memory interfaces and improved 53C810 SCSI emulation.
- 0.90u2             : Ville Linde fixed 53c810 SCSI single-stepping mode DMA and added memory moves and DMA callback.
-  3rd January   2005: Ville Linde - Fixed some bugs in the SCSI emulation, and now 3D graphics is also working in Virtua Fighter 3, Sega Bass Fishing, Scud Race and the Step 1.5 versions of Virtua Striker 2 and VS2 '98. There are still a lot of glitches and crashing though.
- 0.89u3             : Added machine\53c810.c/h. Preliminary 53c810 SCSI emulation [Ville Linde]. Lost World now tries to download everything necessary to the Real3D stuff.
- NOTES: LSI Logic LSI53C810A PCI to SCSI I/O Processor
- PCB: 53C810 (Harley)
- DRIVERS: model3.cpp
- SOURCE: machine\53c810.cpp


I9.55  NCR5380

- 0.276              : Added DP8490 type so that its Enhanced Mode can be emulated in the future (machine\ncr5380.cpp) [AJR].
- 0.234              : Renamed machine\ncr5380n.cpp to machine\ncr5380.cpp/h. Reclaim ncr5380 device name [Patrick Mackinlay].
- 0.232              : Retiring the original NCR5380 implementation [R. Belmont, AJR].
- 0.228              : Assert DRQ after REQ with phase mismatch (machine\ncr5380n.cpp) [Patrick Mackinlay].
- 0.227              : Fixed MAME lockup introduced in the previous change (machine\ncr5380n.cpp) [R. Belmont]. Halt DMA on phase mismatch (machine\ncr5380n.cpp) [Patrick Mackinlay].
- 0.227              : Clear ACK upon exit from DMA mode (machine\ncr5380n.cpp) [Patrick Mackinlay].
- 0.224              : Use explicitly sized storage type for enum registered for save state (machine\ncr5380n.cpp) [Vas Crabb].
- 0.222              : NCR 53C80 rewrite. Nearly a complete rewrite, now working with (MESS) news_68k but only cursory testing with other systems. Exit infinite loop (machine\ncr5380n.cpp). Minor fixes: Phase match isn't latched. Correct eop handling [Patrick Mackinlay].
- 0.210              : Removed fake device clock from configuration. Allow some read side effects to be disabled. Separate device type for 53C80, which has a few functional differences and is used in various Apple products. Added hsscsi to (MESS) apple2e and apple2gs slot options [AJR].
- 0.208              : Simplified read/write handlers (machine\ncr5380n.cpp) [AJR].
- 0.206              : Removed some orphaned macros [Osso].
- 0.151              : Moved mess\machine\ncr5380n.c/h to emu\machine\. Better DRQ support, fixed arbitration-in-progress bit (machine\ncr5380n.c). Improved /BSY behavior on arbitration (machine\ncr5380n.c) [R. Belmont].
- 0.149              : Converted NCR5380N to DEVCB2 & use MCFG_DEVICE_CLOCK to set SCSI chip clock [smf].
- 0.148u2            : Added mess\machine\ncr5380n.c/h. Reimplemented the NCR5380 SCSI controller using nscsi (mess\machine\ncr5380n.c). Added 6-byte WRITE, logging of unknown commands, and some Apple-specific SCSI tweaks (emu\machine\nscsi_hd.c) [R. Belmont].
- NOTES: NCR 5385E SCSI Controller
- DRIVERS: (MESS) ampro.cpp, emax.cpp, emu3.cpp, korgdss1.cpp, krz2000.cpp, lb186.cpp, lbpc.cpp, mac128.cpp, macprtb.cpp, news_38xx.cpp, news_68k.cpp, philipsbo.cpp and sun3.cpp
- SOURCE: machine\ncr5380.cpp


I9.56  NCR5385

- 0.278              : Removed incorrect enum value (machine\ncr5385.cpp) [Patrick Mackinlay].
- 0.268              : Raise IRQ for INT_INVALID_CMD. (MESS) Tektronix 4404 selftest writes 0xff as command (invalid command) and expects an IRQ to be raised [Adam Billyard].
- 0.264              : Initial NSCSI implementation. Added single byte transfers. Tolerate slow targets (machine\ncr5385.cpp) [Patrick Mackinlay].
- 0.208              : Simplified read/write handlers (machine\ncr5385.cpp) [AJR].
- 0.197              : Addec machine\ncr5385.cpp/h. Added NCR 5385E SCSI Controller [Ryan Holtz].
- NOTES: NCR 5385E SCSI Controller
- DRIVERS: (MESS) icm3216.cpp, tek440x.cpp, tekigw.cpp and vp415.cpp
- SOURCE: machine\ncr5385.cpp


I9.57  NCR5390

- 0.274              : Allow clock conversion register to be set to 0 (faster versions allow this) (machine\ncr53c90.cpp) [AJR].
- 0.257              : Don't subtract FIFO contents from transfer count when DMA is started. The 5390/5394/5396 manuals all agree transfer count only decrements on DACK in DMA write mode and 68040 Macs require it. Also tested on sun4_60, Solaris boots fine. P-Mac will investigate other uses (machine\ncr53c90.cpp) [R. Belmont]. Improved logging [AJR].
- 0.253              : Numerous NCR5390 fixes: Prevent recursive stepping when scsi_ctrl_changed is called in the middle of a state (most likely by HLE SCSI devices programmed to respond instantly). Added some calls to the state machine stepping handler for non-timeout conditions that may advance it, particularly non-DMA writes to the FIFO. Always wait for FIFO to have at least one byte before sending anything. Properly interpret configuration flag for Save Residual Byte 16-bit DMA mode. Use little-endian byte order for 16-bit DMA handlers, but add alternate byte-swapping handlers for convenient use with big-endian systems. Allow 16-bit DMA handlers to access just one byte in the FIFO rather than exit MAME with an exception. Always honor timeout for selection arbitration (previously any event could short-circuit it). Allow side effects of read handlers to be disabled for debugging. More updates. Eliminated unnecessary command length counter. In 16-bit bus mode, only enable DRQ for transferring one byte to memory when TC0 is set and config flag to save it is not. Restrict 24-bit extension of transfer counter and config4 & ID registers to NCR53CF94/96 [AJR].
- 0.252              : Renamed to ncr53c90 to avoid confusion about the actual NCR part name. Fixed 'Select w/ ATN and Stop' command in DMA mode. Drop ATN during the message phase of Transfer Information command, per OG's suggestion (machine\ncr53c90.cpp) [MooglyGuy]. Transfer counter semantics were incorrect for async mode. DRQ wasn't updated after all operations that could change it. (MESS) Mac Quadra 700 now gets to "Welcome to Macintosh" from HDD and (MESS) SPARCStation-1 can still boot Solaris (machine\ncr53c90.cpp) [R. Belmont]. Better guess at sequence logic for (MESS) Macintosh Quadra 700. Trigger function complete interrupt on disable selection command (machine\ncr53c90.cpp) [Patrick Mackinlay]. Fixed issues with DMA transfers [Windy Fairy].
- 0.212              : Minor sequence bug [Patrick Mackinlay].
- 0.208              : Simplified read/write handlers (machine\ncr5390.cpp) [AJR].
- 0.207              : Removed logerror("command_length %d\n", command_length) [Patrick Mackinlay].
- 0.206              : Silence logging. Various NCR5390 improvements. DMA/DRQ handling is simplified and hopefully more correct. Tested working with (MESS) mips, interpro and sun4. Added 16 bit dma for NCR53c94. Added reset ATN command. Refactored DMA/DRQ code. Avoid a hang in disconnected selection. Fixed reset behaviour. Better command length logic [Patrick Mackinlay].
- 0.203              : Several important fixes that help Sun4 (can now boot Solaris 2.3 from CD-ROM) and Jazz work better: Fixed stupid virtual/override errors preventing ncr53c90a+ from working properly. Start DMA after arbitration/selection is completed for "select with..." commands. Trigger an interrupt on SCSI bus reset (if enabled) [Patrick Mackinlay].
- 0.202              : If a command is already in the FIFO, don't block select arbitration. Select w/ ATN and Stop command should indicate bus service. Makes the SunOS installer happy [Ryan Holtz]. Enable DMA for command completion. This gets sun4 slightly further along [Patrick Mackinlay].
- 0.201              : Added DEVCB3 support [Patrick Mackinlay].
- 0.200              : DMA fixes. Function/bus complete should proceed when the FIFO is empty, to allow devices to send less data than indicated in the transfer count. Raise drq when tcounter = 0 (meaning 65536 bytes) [Patrick Mackinlay].
- 0.199              : Several small but important changes to NCR5390: Don't wait for REQ after initiator complete with NACK. Wait until fifo empty during dma out before command complete. Make sure drq is always cleared on bus/function complete. Reset happens immediately. Always clear TC0 when counter reloaded. Check valid commands separately for 5390 and 5390a. Handle 5390a initiator set attention command. Use logmacro for logging. Note: These changes work with InterPro, but haven't been tested on other machines. Despite this, I'm reasonably confident they are all correct according to the observed behaviour and the documentation. SCSI and DMA fixes: DMA support for disconnected state commands. Fixed DMA bug with tcounter=0 (meaning 65536). Improved DMA start and counter decrement. Fixed sun4 dma control register writes. These changes make (MESS) sun4 SCSI work to some extent, and don't break interpro [Patrick Mackinlay].
- 0.188              : Improved NCR 5390 SCSI: Improved initiator transfer information logic. Split transfer count/counter. Added rudimentary 53c90a/53c94 support. Reworked initiator transfer information state machine: should now support all SCSI phases. Improved handling of dma/non-dma commands. Added an undocumented hack to make (MESS) InterPro work. Match updated 5390 device. Inherit memory map. Implemented interrupt status flag in status register for 53c90a, this is critical for (MESS) InterPro. Improved tcounter and dma/drq handling [Patrick Mackinlay].
- 0.187              : Basic 53c94 support for (MESS) InterPro 2800 (machine\ncr5390.cpp). SCSI DMA improvements [Patrick Mackinlay].
- 0.180              : Implemented 'selection disable' (machine\ncr5390.cpp) [O. Galibert].
- 0.154              : Added some missing save state entries to machine\ncr5390.c [O. Galibert].
- 0.149              : Converted NCR5390 to DEVCB2 & use MCFG_DEVICE_CLOCK to set SCSI chip clock [smf].
- NOTES: NCR 53C90 SCSI Controller
- DRIVERS: konamigq.cpp, konamigv.cpp and twinkle.cpp
- SOURCE: machine\ncr53c90.cpp


I9.58  NCR539x

- 0.274              : Fixed NCR53CF94 ID read sequence [AJR].
- 0.253              : Removed machine\ncr539x.cpp/h. Retire legacy NCR 539X emulation [AJR].
- 0.252              : Added NCR53CF96 device as an alias [Windy Fairy].
- 0.223              : Fixed initializations issues that were causing problems in DEVNOCLEAR debug builds (machine\ncr539x.cpp) [Osso].
- 0.208              : Simplified read/write handlers (machine\ncr539x.cpp) [AJR].
- 0.155              : Added asserts for index out-of-bounds access with (MESS) Sun 3x/80. Adjusted an ncr539x_device assert [Oliver Stoeneberg].
- 0.154              : Converted NCR539x to DEVCB2 [Osso]. Fixed FIFO read/writing to work as expected [R. Belmont].
- 0.147              : SCSI device tags are relative to the SCSI controller (machine\ncr539x.c) [smf].
- 0.144              : Added machine\ncr539x.c/h. Rewrote NCR539x SCSI emulation from scratch [R. Belmont].
- NOTES: NCR 53(CF)94/53(CF)96 SCSI controller
- DRIVERS: (MESS) mac.cpp and sun3x.cpp
- SOURCE: machine\ncr539x.cpp


I9.59  MB87030

- 0.284              : Added a BSY line callback suitable for drive LEDs (machine\mb87030.cpp) [R. Belmont]. Correct the behaviour when a transfer size 0 is requested (machine\mb87030.cpp) [O. Galibert].
- 0.279              : Fixed SCSI hookup in (MESS) FZ-20M (machine\mb87030.cpp) [Devin Acker].
- 0.263              : Fixed some bit definitions for the SCMD register (machine\mb87030.h) [Patrick Mackinlay].
- 0.262              : Logging improvements (machine\mb87030.cpp) [AJR].
- 0.255              : Make DMA transfers go through DREG rather than separate single buffer [AJR].
- 0.253              : Added 'Fujitsu MB87030 SCSI controller' device (machine\mb87030.cpp).
- 0.221              : Simplified handlers (mb87030.cpp) [Osso].
- 0.205              : Deduplicated transfer count decrement. Moved FIFO queue/dequeue end of state machine. This makes the (MESS) HP9000/382 work with MB87030 SCSI [dxl]. Fixed sense data if not cdrom in drive (machine\nscsi_bus.h and nscsi_cd.cpp) [Sven Schnelle].
- 0.204              : Support padding mode. This makes Pascal 3.25 boot/run from SCSI on hp9k_3xx. Pascal is now a fully running OS like BASIC on these machines. While at it also clean up a few style issues. Fixed MB87030 SCSI disconnect interrupt. Previous order of code triggered a state change after the disconnect, which confused the NETBSD installer. With this fixed, writing a disklabel to a netbsd chd works [Sven Schnelle].
- 0.203              : Added machine\mb87030.cpp/h. Added new SCSI controller Fujitsu MB87030. Fixed MB87030 temp register sampling. This makes Bootrom Rev C1 machines (/340, /370) boot via SCSI [Sven Schnelle]. Use delegate for timer (machine\mb87030.cpp) [dxl].
- NOTES: Fujitsu MB87030 SCSI controller
- DRIVERS: segas32.cpp
- SOURCE: machine\mb87030.cpp


I9.5A  MB89351/2

- 0.254              : Added MB89351/2 variants. Added 'Fujitsu MB89351 SCSI controller' device. Changed description of 'Fujitsu MB89352A' to 'Fujitsu MB89352 SCSI controller' and sourcefile to machine\mb87030.cpp. Switch segas32, (MESS) mpc3000 and x68k to NSCSI MB89352 implementation (machine\mb87030.cpp). Implemented program transfer interrupts. Suppress duplicate selection command completion. Terminate transfer command on phase mismatch. Implemented message in/out ATN/ACK logic. Track interrupt output state. Minor logging improvements. Improved arbitration/selection handling. Fixed (MESS) hp98265a diagnostic error (machine\mb87030.cpp) [Patrick Mackinlay].
- 0.253              : Fixed reset readback and selection timeout (machine\mb89352.cpp) [AJR].
- 0.221              : Simplified handlers (machine\mb89352.cpp) [Osso].
- 0.201              : Added DEVCB3 support. Set default clocks to 0. Removed legacy DEVCB accessors (machine\mb89352.h) [Ryan Holtz].
- 0.187              : Improved CD audio play track/index command handling (machine\mb89352.cpp). kokoroj2 needs mods in the MB89352 core that won't break (MESS) Sharp X68000 as well. kokoroj2 requires the printer interface, a command to stop current track is sent with CD & printer disabled in dipswitches [smf].
- 0.186              : Added 'Fujitsu MB89352A' device (machine\mb89352.cpp). Base MB89352 SCSI hookup in Soreike Kokology Vol. 2 - Kokoro no Tanteikyoku, disabled by default [Angelo Salese].
- 0.154              : Converted MB89352 to DEVCB2 [Osso]. Get the correct MB89352 phase [Carl].
- 0.148u2            : Fixed uninitialized members [Oliver Stoeneberg].
- 0.147              : Added machine\mb89352.c/h. Merge of MESS sources [Miodrag Milanovic]. Glacial SCSI improvements towards NSCSI and beyond, moved the SCSI id onto the device. SCSI device tags are relative to the SCSI controller [smf].
- NOTES: Fujitsu MB89351 SCSI controller and Fujitsu MB89352 SCSI controller
- DRIVERS: segas32.cpp
- SOURCE: machine\mb87030.cpp


I9.5B  WD33C9x

- 0.284              : Fixed negate ACK should trigger an irq (machine\wd33c9x.cpp, GitHub #14532) [Angelo Salese].
- 0.283              : Provide an hack free status read (machine\wd33c9x.cpp) [Angelo Salese].
- 0.275              : Added support for the Translate Address command (machine\wd33c9x.cpp) [Dirk Best].
- 0.225              : Handle 'polled DMA' in vme_hcpu30 (machine\wd33c9x.cpp) [Sergey Svishchev].
- 0.213              : Clarify hardware reset. Hardware reset triggers a SCSI_STATUS_RESET interrupt when the MR signal is asserted, but this is also true when the device first powers on. Move the interrupt generation to device_reset so all hardware resets trigger the interrupt [tyfighter].
- 0.212              : Added interrupt on reset. Don't fatalerror. The SGI 4D/20 boot prom likes to write to the command register immediately after a hard reset (which raises an interrupt), so we can't die here [Patrick Mackinlay].
- 0.207              : Silence logging by default (machine\wd33c9x.cpp) [Ryan Holtz].
- 0.206              : Added machine\wd33c9x.cpp/h. Removed machine\wd33c93.cpp/h. New NSCSI device for WD33C9x SCSI Controllers [tyfighter]. Handle disconnect command properly. Fixes fatalerror in (MESS) ip225015 with new WD core [Ryan Holtz]. Fixed select-and-transfer. Disable IRQ when drq is active. Fixed non-dma data retrieval. Converted CPS3 driver to use the new WD33C9x NSCSI device, kill the old driver [O. Galibert].
- 0.204              : Style cleanup and improved logging. Silence logging by default [Ryan Holtz].
- 0.202              : Removed WD33C93 MCFG macros [Osso].
- 0.201              : Added DEVCB3 support and set default clocks to 0 (machine\wd33c93.h) [Ryan Holtz].
- 0.153              : Converted WD33c93 to DEVCB2 [Osso].
- 0.148u4            : State cleanup and some modernization (machine\wd33c93.c and drivers\cps3.c) [Miodrag Milanovic].
- 0.148              : Fixed uninitialized members in wd33c93.c. Fixes (MESS) ip225015 crash [Oliver Stoeneberg].
- 0.147              : Turned WD33C93 into a device and made CPS3 flash roms optional on CD sets. Use device_t.static_set_static_config (emu\machine\wd33c93.c). Glacial SCSI improvements towards NSCSI and beyond, moved the SCSI id onto the device. SCSI device tags are relative to the SCSI controller [smf].
- 0.146u1            : SCSI devices are now proper MAME devices [smf].
- 0.135u2            : Added support for SCSI command 0x2a (Write w/ 32-bit LBA), upped input buffer size in WD33C93 controller [Harmony].
- 0.122u2            : Fixed several memory leaks related to SCSI CD emulation [Oliver Stoeneberg].
- 0.118u3            : Added machine\wd33c93.c/h. Added a fairly complete WD33C93 SCSI controller emulation, and also updated the cps3.c driver to use it [Ernesto Corvi].
- NOTES: Western Digital WD33C93 SCSI controller
- DRIVERS: cps3.cpp
- SOURCE: machine\wd33c9x.cpp


I9.5C  AHA-1542

- 0.222              : Simplified signatures of most handlers (isa\aha1542c.cpp) [AJR].
- 0.215              : Added machine\aic580.cpp/h. Split out AIC-580 emulation to new device and improved transfer speed calculation [AJR].
- 0.210              : Added machine\aic565.cpp/h. aha1542a and aha1542b pass the FIFO tests. aha1542a provided latches for host communication. Added AIC-565 device (AIC-565 Bus Auxiliary Interface Chip) [AJR].
- 0.209              : Added jumper definitions to aha1542a and aha1542b. Added switch settings (isa\aha1542c.cpp) [Metropoli BBS Archive]. Added 3.1b BIOS to aha1542b [Funet Archive].
- 0.208              : Added bus\isa\aha1542b.cpp/h. Changed bus\isa\aha1542.cpp/h to aha1542c.cpp/h. Added 'AHA-1542A SCSI Controller', 'AHA-1542B SCSI Controller', 'AHA-1542C SCSI Controller', 'AHA-1542CF SCSI Controller' and 'AHA-1542CP SCSI Controller' devices (bus\isa\aha1542b.cpp). Changed description to 'AHA-1542CF SCSI Controller' (bus\isa\aha1542c.cpp). Added more roms to the Adaptec AHA-1542 SCSI Controller (bus\isa\aha1542c.cpp), renamed and splitted into three variants: AHA-1542C [modem7, minuszerodegrees.net], AHA-1542CF v2.11 [Jolaes76, VOGONS Vintage Driver Library] and AHA-1542CP [modem7, minuszerodegrees.net]. Added AHA-1542A, AHA-1542B and BIOS v1.02 of AHA-1542C roms from Adaptec. Added serial EEPROM to AHA-1542C [AJR]. Added BIOS v2.10 to the AHA-1542CF set. Improved readme [Guru]. Added v3.11 BIOS to aha1542b [Funet Archive].
- 0.185              : Added 'AHA1542 SCSI Controller' device (bus\isa\aha1542.cpp).
- 0.153              : Moved mess\machine\isa_aha1542.c/h to emu\bus\isa. Shuffle ISA and some more PC related devices around [Miodrag Milanovic].
- NOTES: Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers
- SOURCE: bus\isa\aha1542b.cpp and aha1542c.cpp


I9.5D  AHA-2940AU
- 0.276              : Added enough glue logic to at least try some SCSI [Angelo Salese].
- 0.262              : Added pci\aha2940au.cpp/h. Added stub for AHA2940AU. Added default EEPROM [Guru].
- NOTES: Adaptec AHA-2940AU SCSI controller
- SOURCE: pci\aha2940au.cpp


I9.5E  uPD7261
- 0.264              : Added machine\upd7261.cpp/h. Added new uPD7261 device [Patrick Mackinlay].
- NOTES: NEC uPD7261 Hard-Disk Controller or NEC uPD7261A/uPD7261B Hard-Disk Controllers
- SOURCE: machine\upd7261.cpp



I9.6   ISA

- 0.280              : Merged ISA8 options with ISA16 8-bit options, i.e. allow mounting (MESS) IBM Speech to ISA8, xtide to ISA16 (isa\isa_cards.cpp) [Angelo Salese]. Fixed validation by restoring wonky difference between ISA8 and ISA16 option lists (isa\isa_cards.cpp) [AJR].
- 0.275              : Categorize storage devices in comments (bus\isa\isa_cards.cpp) [AJR].
- 0.256              : Retire TGUI9680 from being selected (all refs points to be a PCI card only, there's mention of a VLB card but haven't seen a single retail dump/photo yet) (isa\isa_cards.cpp) [Angelo Salese].
- 0.252              : Got rid of unnecessary uses of simple_list [Vas Crabb].
- 0.227              : Miscellaneous clean-up [Vas Crabb].
- 0.222              : Simplified signatures of most handlers (isa\isa.cpp) [AJR]. READ/WRITE macros removal [Osso].
- 0.218              : Provisional ready line interface [AJR]. Halt CPU by ISA READY line in (MESS) poisk1 and mc1502 FDC devices [yz70s]. Added stub extended mode register to machine\i82357.cpp [Patrick Mackinlay].
- 0.210              : Simplified handler (3-chip Intel 82350 EISA bus; machine\i82357.cpp) [Patrick Mackinlay].
- 0.206              : Preparation for supporting DACK handshake line. Modernized ISA device configuration: Configure spaces without using cpu_device. Removed NMI enable logic (the flag is usually a property of the bus controller, not the bus itself). Default many unnecessary 8253 and 8259 clocks. Note that with this change, ISA devices can no longer cause a NMI on the host CPU unless the IOCHCK callback is explicitly configured. Fixed custom space configuration [AJR].
- 0.198              : Added isa\lbaenhancer.cpp. Added Lba enhancer card (28 bit LBA) [Bavarese]. ISA devices now have the possibility to remap themselves: * ISA bus managers have a list of their slots. * ISA bus managers and device base classes have a new virtual method remap(). * Modify the ET4000 ISA device to support the new method. Currently ISA devices map themselves in their address space ranges only in device_start() and if something unmaps them, they are not visible anymore remap(int space_id, offs_t start, offs_t end) of the isa bus manager can be called to tell devices that if they have mapped something in address space space_id from start to end they should remap themselves [Samuele Zannoli].
- 0.192              : Make maincpu tag more configurable (bus\isa\isa.cpp) [AJR].
- 0.188              : Added unmap_device method and in install16_device use I/O space width (bus\isa\isa.cpp) [yz70s].
- 0.186              : Changed description to '8-bit ISA slot'.
- 0.185              : Provide proper unitmask for address spaces of any data width (bus\isa\isa.h) [AJR].
- 0.177              : Check get_card_device before using. This fixed crash/exception at initialization in various machines using ISA [Carl].
- 0.154              : Converted ISA8 and ISA16 devices to DEVCB2 [Osso]. (MESS) Apollo updates: Fixed ISA bus endianness, it's the same as other 680x0 systems with ISA. Improved logging in several places. "20 years ago" option updated to now-necessary "25 years ago". Fixed ISA high IRQ routing. Fixed omti8621 and sc499 to have correct-endian ISA interfaces [Hans Ostermeyer].
- 0.153              : Changed mess\machine\isa.c/h to bus\isa\isa.c/h and mess\machine\isa_dectalk.c/h to bus\isa\dectalk.c/h. Added bus\isa\side116.c/h and mufdc.c/h. ISA bus can now use its own address spaces instead of taking over a CPU's. This is completely untested for 16-bit buses, but it works well for 8-bit (stand by for demo commit). Cleaned up 16-bit handling now thanks to a test case. (MESS) Preliminary hookup of ISA bus, peripherals and MFP to Indiana University 68030 board. As noted, it puts lots of text in the VGA framebuffer which is never displayed. Something off-spec with how the VGA is being accessed? Converted (MESS) Apollo to use real ISA bus [R. Belmont]. Added IDE controller to (MESS) Indiana University 68030, fixed 16-bit ISA I/O (machine\isa.c) [R. Belmont, Carl]. Added support for the Acculogic sIDE-1/16 8-bit ISA card (this card goes into an 8-bit slot, but allows the use of 16 bit AT IDE drives). Added preliminary support for the Multi Unique type ISA FDC cards [Dirk Best]. Removed a pit trampoline (machine\isa_ibm_mfc.c) [smf]. Shuffle ISA and some more PC related devices around. Finished modernizing ISA [Miodrag Milanovic].
- 0.151              : Added machine\isa_dectalk.c/h. Added the DECTalk PC device. Audio quality is currently marginal [Carl, Lord Nightmare]. Much better now although quieter and some pops and squeaks [Carl].
- 0.150              : Removed machine\isa_ide_cd.c/h. Replaced ISA16_IDE_CD with ATAPI_CDROM, replaced ISA16_IDE & ISA16_IDE_CD in southbridge_device with two BUS_MASTER_IDE_CONTROLLERs. Refactored to use ATA_INTERFACE (drivers\firebeat.c). Preliminary ATAPI/Dreamcast DMA. The timing needs to be moved into the devices, so the timing hack can be removed from the driver (machine\atapihle.c and mess\machine\dccons.c). Preliminary SET FEATURES support. Only set transfer mode is currently supported, but this checks/sets flags in the identify device buffer. The buffer has been moved up into atahle and the idehd has been changed to work with words instead of bytes (machine\atahle.c/h, atapihle.c/h, idehd.c/h, drivers\cobra.c, kinst.c, taitotz.c, viper.c and machine\gdrom.c) [smf]. Added some comments (machine\isa.h). Flagged a few more things as deprecated (machine\isa.h) [Oliver Stoeneberg].
- 0.149u1            : PC driver cleanup: Added support for the IOCHCK signal to the ISA bus, this is used instead of directly issuing an NMI to the main CPU. Moved ISA device slot definitions to its own file to avoid copy & pasting the same list to different drivers [Dirk Best]. Fixed regression (machine\isa_cards.c) [Curt Coder].
- 0.148u3            : Don't set intreason_io in data out phase (machine\isa_ide_cd.c). WARP installer sees the CDROM now. NOTE: Only the OS/2 WARP CD-ROM version works for now as the floppies use the XDF format which apparently use variable sectors per track and so AFAIK won't work for now [Carl].
- 0.148u2            : Commented com3 and com4 in isa_com implementation, usual case is 2 not 4 (machine\isa_com.c). Correctly mapped alternate port (machine\isa_ide.c). This makes a586 boot from primary HDD. Removed some legacy code from machine\isa.c [Miodrag Milanovic]. Added altstatus reset to ATAPI CD (mess\machine\isa_ide_cd.c) [Carl].
- 0.147u2            : Fixed compile (machine\isa.h) [Angelo Salese]. Removed not needed calls from ISA [Miodrag Milanovic].
- 0.147              : Added 'ISA8_SLOT' device. Added proper 16 bit ISA DMA handling [Carl].
- NOTES: ISA = Industry Standard Architecture
- SOURCE: bus\isa\isa.cpp



I9.7   PCI

- 0.263              : Propose a way to find the busmaster space for newpci (machine\pci.cpp) [O. Galibert].
- 0.262              : Better irq support (but incomplete, missing shared) (machine\pci.cpp) [O. Galibert].
- 0.255              : Make map public so it can be reused by i82371eb_acpi (would otherwise fail mapping to the intended HW) (machine\pci-smbus.h) [Angelo Salese].
- 0.253              : Added new config read/write functions to support bridges that allow software to issue both Type 0 and Type 1 config addresses (machine\pci.cpp) [R. Belmont].
- 0.246              : Fixed PCI device initialization (machine\pci.cpp) [Miodrag Milanovic].
- 0.243              : Converted lpci\i82371ab.cpp to logmacro and fixed log writes [Angelo Salese].
- 0.234              : Added support for adding subdevice maps directly (machine\pci.h) [Aaron Giles].
- 0.221              : Simplified handlers (machine\vt82c496.cpp) [Osso]. Fixed 'Fatal error: install_ram_generic: In range cdcdcdcc-9b9b9b98 mirror 0, start address is after the end address' for pcipc in DEVNOCLEAR debug builds (machine\pci.cpp). Fixed 'Fatal error: unmap_generic: In range 42723233-103fffff mirror 0, start address is after the end address.' for m55hipl in DEVNOCLEAR debug builds (lpci\i82439tx.cpp) [Osso].
- 0.218              : Remove unwanted changes (lpci\i82439tx.h) [yz70s].
- 0.211              : Corrections to PCI configuration data (machine\i82439hx.cpp). Correct bug (machine\pci.cpp) [yz70s].
- 0.186              : Fixed memory map (machine\i82439hx.cpp and i82439tx.cpp) [AJR].
- 0.185              : Added placeholder for OHCI device (machine\pci-usb.cpp) [yz70s].
- 0.182              : Moved interrupt line and pin functions into PCI device and added variables (machine\pci.c) [Ted Green].
- 0.166              : Added machine\i82439tx.cpp/h. Moved initialization of (MESS) Sandbox PCI PC little further. Added non-legacy i82439tx and created a driver using it in pcipc. Added VGA hack to be able to test pcipc.cpp. pcipc -bios 3 and pcipctx can initialize more if 0xAA is written at 0x4f0 [Miodrag Milanovic].
- 0.166              : Added bus\lpci\vt82c505.c/h and machine\vt82c496.c/h. Added PCI bus and chipset. -bios 2 and 3 now boot. Other BIOSes require some cache funkiness [Barry Rodewald].
- 0.161              : More ITEagle improvements: Allow BAR of 0; change "invalid" from 0 to -1 (machine\pci.c) [Ted Green].
- 0.157              : Added c\lpc-pit.c/h. Added real PCI bridges to lindbergh.c driver. Added PCI expansion rom management. Fixed some initialisations, Valgrind stops complaining (machine\i6300esb.c, i82875p.c and pci.c). Autodetect PCI multifunction devices. Added more PCI bridge registers [O. Galibert].
- 0.156              : Moved bus\pci\i82371ab.c/h and pci.c/h to bus\lpci\. Added pci-apic.c/h, lpc-rtc.c/h, pci-sata.c/h, pci-smbus.c/h and pci-usb.c/h. Experiments in PCI land. A little more PCI, reaches an unemulated pslldq at fd228 (machine\i6300esb.c and machine\pci.c). Added remapping notifiers (machine\i6300esb.c and machine\pci.c), Host bridge (i82875p.c and machine\pci.c). Generic mapping (machine\pci-smbus.c and pci.c). Added grossly hacked smbus (machine\pci-smbus.c and machine\pci.c) [O. Galibert].
- 0.153              : Added bus\pci\pci.c/h.
- 0.146u2            : Made PCI legacy and new implementation coexist for now (drivers\calchase.c, chihiro.c, cobra.c, funkball.c, gamecstl.c, magictg.c, mediagx.c, midqslvr.c, queen.c, savquest.c, taitowlf.c, viper.c, voyager.c and xtom3d.c).
- 0.139u2            : Samuele Zannoli updated the PCI bus device so that PCI buses can be arranged in a tree like in real hardware.
- 0.128u6            : Aaron Giles made the PCI bus a device. The bus is declared in the machine config, and the devices attached to it are enumerated there. Eventually, the PCI config read/write functions should be moved to well-known functions within the device, but for now they are kept separate.
- 0.101u2            : Added machine\pci.c/h.
- NOTES: PCI = Peripheral Component Interconnect. Information on PCI vendors can be found at http://www.pcidatabase.com/
- DRIVERS: calchase.cpp, chihiro.cpp, cobra.cpp, fruitpc.cpp, funkball.cpp, gamecstl.cpp, gammagic.cpp, lindbergh.cpp, magictg.cpp, mediagx.cpp, midqslvr.cpp, photoply.cpp, pinball2k.cpp, queen.cpp, savquest.cpp, taitowlf.cpp, viper.cpp, voyager.cpp and xtom3d.cpp
- SOURCE: bus\lpci\pci.cpp, machine\pci.cpp, pci-apic.cpp, pci-sata.cpp, pci-smbus.cpp and pci-usb


I9.71  NCR53C825

- 0.268              : Added bus\pci\ncr53c825.cpp/h. Added NCR53c825 stub [Roberto Fresca, Gaby, recreativas.org].
- NOTES: NCR/Symbios Logic/LSI Logic 53C825A PCI
- DRIVERS: odyssey.cpp
- SOURCE: bus\pci\ncr53c825.cpp


I9.72  PCI-IDE controller

- 0.222              : READ/WRITE macros removal (machine\pci-ide.cpp) [Osso].
- 0.201              : Removed ATA_INTERFACE, BUS_MASTER_IDE_CONTROLLER and IDE_PCI MCFG macros (machine\pci-ide.cpp) [Ryan Holtz].
- 0.187              : Added writing to subsystem id register (machine\pci-ide.cpp). Fixes power-on PCI Data Test in NBA Showtime Gold [Ted Green].
- 0.186              : Added save states to machine\pci-ide.cpp. Allow for setting the top 12 decode address bits in legacy mode. Moved default legacy address assignment from device_start to device_reset. Allow for address size resolving even in legacy mode. Added function to set default PIF byte (machine\pci-ide.cpp) [Ted Green].
- 0.184              : Perform IDE reset during PCI device reset (machine\pci-ide.cpp) [Ted Green].
- 0.182              : Added legacy mapping based on prog i/f register (machine\pci-ide.cpp) [Ted Green].
- 0.175              : Added IRQ callback (machine\pci-ide.cpp) [Ted Green].
- 0.174              : Added machine\pci-ide.cpp/h. New generic PCI IDE controller. Fixed address map range for BAR config (machine\pci-ide.cpp) [Ted Green].
- NOTES: Generic PCI IDE controller implementation. Based on datasheet for National Semiconductor PC87415 PCI-IDE Interface Controller: The Enhanced PCI-IDE Interface is a single-chip controller packaged in a 100-pin PQFP. It provides 2 IDE channels for interfacing up to 4 IDE drives, or 2 IDE drives and CD-ROM directly on the PCI Local bus.
- DRIVERS: atlantis.cpp, iteagle.cpp, seattle.cpp, vegas.cpp and (MESS) pcipc.cpp
- SOURCE: machine\pci-ide.cpp


I9.73  PCI Bus Legacy

- 0.234              : Removed some tag lookups [Miodrag Milanovic].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.196              : De-staticize callbacks and remove both device parameters (machine\lpci.cpp) [AJR].
- 0.156              : Added machine\lpci.c/h. Experiments in PCI land [O. Galibert].
- DRIVERS: calchase.cpp, cobra.cpp, fruitpc.cpp, funkball.cpp, gamecstl.cpp, gammagic.cpp, magictg.cpp, mediagx.cpp, midqslvr.cpp, photoply.cpp, pinball2k.cpp, queen.cpp, savquest.cpp, taitowlf.cpp, viper.cpp, voyager.cpp and xtom3d.cpp
- NOTES: The PCI bus is a 32-bit bus introduced by Intel
- SOURCE: machine\lpci.cpp


I9.73  AGP
- 0.264              : Added pci\sis6326.cpp/h. Separated AGP cards to their own container. Added SiS6326 AGP card (pci\sis6326.cpp) and SiS6326 VGA core (video\pc_vga_sis.cpp) [Angelo Salese].
- NOTES: Accelerated Graphics Port (AGP)
- SOURCE: pci\clgd546x_laguna.cpp


I9.74  MPC105

- 0.218              : Changed #include location [yz70s].
- 0.156              : Moved bus\pci\mpc105.c/h to bus\lpci\.
- 0.153              : Moved mess\machine\mpc105.c/h to bus\pci\.
- 0.147              : Added mess\machine\mpc105.c/h Merge of MESS sources [Miodrag Milanovic].
- 0.89u3             : R. Belmont added init for MPC105 bridge to Model 3. Ville Linde improved the MPC105 emulation.
-  2nd December  2003: Aaron Giles - Well, I finally decided to figure out what the heck was up with California Speed. Turns out there were a few subtle problems in the PCI configuration code when setting up the 3dfx card. With that fixed, I was able to map the proper self-test button, and finally hook up all the controls. Then came some ugly sound synchronization issues. Like Wayne Gretzky's 3D Hockey, this game won't boot unless the sound is working. After some fiddling, I was able to get it to work. Unlike San Francisco Rush, this one starts up and is playable, though there are some obvious color issues (well, not so obvious here, but it is in other screen shots). However, it doesn't last too long until we hit a snag. Much like San Francisco Rush, we get some math errors and the game freaks out. I really hope this doesn't mean I have to add full floating point exception support....
- NOTES: Motorola MPC105 PCI Bridge/Memory Controller
- GAMES: Atari - California Speed, San Francisco Rush and Wayne Gretzky's 3D Hockey.
- DRIVERS: model3.cpp
- SOURCE: bus\lpci\mpc105.cpp


I9.75  MPC106

- 0.97u3             : Improvements to Sega Model 3 [Ville Linde]: Fixed a bug in the MPC106 emulation (Star Wars Trilogy and Sega Rally 2 are working now).
- 21st June      2005: Ville Linde - I dug up Supermodel after over a year and ran some test runs with Sega Rally 2. This helped me to find a small bug in the MPC106 emulation. Fixing that small problem had some very nice results. Now both Sega Rally 2 and Star Wars Trilogy are working in MAME!
- NOTES: Motorola MPC106 PCI Bridge/Memory Controller
- SOURCE: drivers\model3.cpp
- PCB: MOTOROLA  XPC106ARX66CE  MPC106+, BGA304 (Harley)


I9.76  GT64010
- NOTES: Galileo GT64010 PCI Bridge/System Controller.
- SOURCE: drivers\seattle.cpp


I9.77  NEC VRC4373

- 0.222              : READ/WRITE macros removal [Osso].
- 0.197              : Use device_post_load instead of callbacks [Ted Green].
- 0.193              : Correct device/vendor id PCI field [Ted Green].
- 0.190              : Changed to interrupt callback instead of direct interrupt assertion (machine\vrc4373.cpp) [Ted Green].
- 0.188              : Save states supports static vectors natively (machine\vrc4373.cpp) [Ted Green].
- 0.186              : Added save states to machine\vrc4373.cpp [Ted Green].
- 0.175              : Updated rom naming/mapping and changed ram instantiation (mips\mips3drc.cpp and machine\vrc4373.cpp) [Ted Green].
- 0.174              : Moved DMA transfer to separate timed process. Changed NEC VRC4373 to using attotime::never for timer disabling. Added correct PCI config map [Ted Green].
- 0.163              : Clean up DMA routine (machine\vrc4373.c) [Ted Green].
- 0.162              : Splitted memory space mapping routines for CPU and PCI spaces and added fastram for CPU (machine\vrc4373.c) [Ted Green].
- 0.161              : Fixed Visual Studio compilation (machine\vrc4373.c) [hap]. More ITEagle improvements: Implemented bus-master DMA (machine\vrc4373.c) [Ted Green].
- 0.160              : Added machine\vrc4373.c/h. Work-in-progress: Hooked up PCI devices and bridge correctly using new PCI subsystem. Fixed BIOS selection. Fixed VR4373 PCI target accesses [Ted Green]. Trivial conversion to real PCI + VR4373. No visible progress (drivers\atlantis.c) [R. Belmont].
- NOTES: NEC VR4373 "Nile 3" system controller / PCI bridge
- DRIVERS: atlantis.cpp and iteagle.cpp
- SOURCE: machine\vrc4373.cpp


I9.78  PLX PCI9050

- 0.283              : Fixed class code (machine\pci9050.cpp) [Angelo Salese].
- 0.222              : READ/WRITE macros removal (machine\pci9050.cpp) [Osso].
- 0.186              : Added save state to machine\pci9050.cpp [Ted Green].
- 0.161              : Added machine\pci9050.c/h. Added PCI9050 device skeleton [R. Belmont]. First stab at PCI9050 [O. Galibert].
- NOTES: PLX PCI9050 PCI to 4x Local Bus Bridge
- DRIVERS: atlantis.cpp
- SOURCE: machine\vrc4373.cpp




I9.8   PIIX
- NOTES: PIIX = "PCI IDE ISA Xcelerator", also known as Intel 82371, is a family of Intel southbridge microchips employed in some Intel chipsets. x86 virtualization implementations often support emulations of various PIIX-based chipsets.
- SOURCE: emu\bus\lpci\i82371ab.cpp


I9.81  PIIX4

- 0.160              : Intercept OOB access to PIIX4 device for Queen driver [Peter Ferrie].
- 0.144u5            : Added PCI Revision ID and fixed PIIX4 PCI slot to 31 (after DASM studying of the code) [Angelo Salese].
- NOTES: The PIIX4 introduced ACPI support, an improved IDE controller with Ultra DMA/33 or ATA-4 support and an integrated a MC146818 style RTC and CMOS controller. It was used with the 430TX and the 440LX Balboa northbridges. The PIIX4E updated the ACPI support. It was mainly used in 440BX and 440GX chipsets but 440EX, 440ZX, and 450NX chipsets also employed it. The mobile version was used in 440BX and 440ZX-M chipsets. The following variations existed: 82371AB (PIIX4) Base, 82371EB (PIIX4E) Enhanced and 82371MB (PIIX4M) Mobile.
- DRIVERS: calchase.cpp, gamecstl.cpp, midqslvr.cpp, queen.cpp, savquest.cpp, taitowlf.cpp, voyager.cpp and xtom3d.cpp
- SOURCE: emu\bus\lpci\i82371ab.cpp



I9.9   PCMCIA

- 0.222              : READ/WRITE macros removal (machine\rf5c296.cpp) [Osso].
- 0.204              : Removed RF5C296 MCFG macros [Osso].
- 0.184              : Added 'RF5C296 PC Card controller' device (machine\rf5c296.cpp).
- 0.149              : Added machine\rf5c296.c/h. Split rf5c296 functionality from taitogn.c into their own devices. The pccard slot has had to revert to use memory handlers instead of device maps for the moment [smf].
- PCB: Ricoh RF5C296 PCMCIA controller - TQFP144 (Taito GNET-System and Capcom-ZN-1+2)
- SOURCE: machine\rf5c296.cpp


I9.A   Bus Controller

- 0.217              : Very minor cleanup (machine\pcf8584.cpp) [AJR].
- 0.213              : Added machine\pcf8584.cpp/h. Added more onboard devices, including new PCF8584 skeleton [AJR].
- NOTES: Philips PCF8584 I2C Bus Controller. This is a comprehensive protocol interface chip for Philips' IC serial bus, supporting master and slave modes for both receiving and transmitting data. The register interface is similar but not identical to that provided by certain Philips 80C51-derived microcontrollers.
- DRIVERS: atronic.cpp
- SOURCE: machine\pcf8584.cpp


I9.B   USB

- 0.262              : Changed sourcefile to pci\opti82c861.cpp/h. Added 'OPTi 82C861 'FireLink' USB OHCI controller' device. Converted opti82c861 to a pci_slot (pci\opti82c861.cpp) and added basic OpenHCI values [Angelo Salese].
- 0.255              : Added machine\opti82c861.cpp/h. Skeleton for OPTi 82C861 PCI USB OHCI controller [R. Belmont].
- NOTES: OPTi 82C861 'FireLink' USB OHCI controller
- PCB: The Namco System12 system has a USB connector for controls (Aquarush, Ehrgeiz, Mrdrillr). The I/O board in the NAOMI games is connected to the main board with a USB link.
- DRIVERS:
- SOURCE: pci\opti82c861.cpp



I9.C   Network

I9.C1  91C94/6

- 0.262              : Use multibyte.h helpers (machine\smc91c9x.cpp) [AJR].
- 0.235              : SMC91C96 updates (MESS apple2e, a2osx w/ lancegs): m_loopback_result needs to be a signed into so negative status codes remain negative. FDSE bit was masked out. When full duplex switched internet is active, deferrals and collisions not used. Implemented AUTO_RELEASE [Kelvin Sherlock].
- 0.234              : SMC91C9x Ethernet Controller adjustments: Reset should disable promiscuous mode. RCR - handle promiscuous changes, adjust soft reset handling. EPH_STATUS should be LINK_OK by default (previous code wouldn't set LINK_OK unless RX_EN is set but LANceGS won't set RX_EN unless LINK_OK is set). B0_BANK bits 4-8 are unspecified in the documentation but LANceGS expects a 3 (used in Card detection logic). MIR values depend on device type and resets when the mmu resets. Reading/writing the data register needs to be aware of 8-bit I/O. Calculate FCS. Removed WMS OUI filtering hack [ksherlock].
- 0.222              : READ/WRITE macros removal (machine\smc91c9x.cpp) [Osso].
- 0.207              : Pull sticky stringstream settings out of loop [Ted Green].
- 0.206              : Refactor code. Added initial MAC filter and fixed multicast address filtering and WIP [Ted Green].
- 0.197              : Added separate transmit FIFO and fixed irq handling. Use device_pre_save and device_post_load instead of pre/post callbacks [Ted Green].
- 0.193              : Fixed loopback and added proper MMU handling. Switch from queue to vector for save state support. Added packet padding and variable transmit timing. Promoted San Francisco Rush: The Rock to working [Ted Green].
- 0.192              : SMC91C9X Ethernet controller now working in connected mode with WinPcap or TUN/TAP tunnel. Fixed logs, typos and memset replaced by std::fill. Use logmacro.h to reduced clutter with conditional logging. Reduced scope of local variables. Make some locals const (reduced mutable state). Idiomatic array fill. Fixed soft reset only working when logging is enabled [Jean-Francois DEL NERO].
- 0.190              : Adjust tx interrupt status to mirror tx buffer empty (machine\smc91c9x.cpp). Fixes linking boot hang on Cart Fury [Ted Green].
- 0.186              : Set link to be unconnected by default to keep warfa (drivers\vegas.cpp) from hanging (machine\smc91c9x.cpp) [Ted Green].
- 0.153              : Custom callback to DEVCB2 [Miodrag Milanovic].
- 0.150              : Modernized SMC91c9x device [Osso].
- 0.125u7            : SMC91C9x [Aaron Giles]: Converted to proper device. Updated seattle and vegas drivers to allocate devices. Added separate 91C96 device for eventual 'San Francisco Rush 2049' use. Cleaned up code. Added save state support to the smc91c9x emulator.
- 0.82u2             : Added machine\smc91c9x.c/h. New implementation of SMC91C94 ethernet controller. Only loopback mode supported [Aaron Giles].
- NOTES: SMC ISA/PCMCIA Ethernet & Modem Controller
- PCB: SMC91C94QFP (Gauntleg), SMSC LAN91C94 (Gauntdl)
- DRIVERS: seattle.cpp and vegas.cpp
- SOURCE: machine\smc91c9x.cpp


I9.C2  20020
- NOTES: Network communmication IC
- PCB: SMC_COM20020I (Sidebs2), SMC COM20020-5ILJ  PLCC28 (NeoGeoHyper64), COM20020 (Groundfx)

I9.C3  66220
- PCB: The M66220FP is a 256 x 8bit Mail-Box Inter-MPU data transfer (Raystorm, Taito GNET-System)

I9.C4  LAN
- PCB: LAN board Nr. A052967 (Tmek), K9100259A J9100202A LAN INTERFACE BOARD (Dblaxle), Clarn II LAN PCB - local area network board (Spclords), LAN  PCB  GQ931 PWB (Sscope2), uPD72105C  - LAN hookup for multiple machines (Dblaxle, Wgp)


I9.C5  MB89374
- 0.196              : Added machine\mb89374.cpp/h. Added preliminary MB89374 emulation. Arrays and savestates [SailorSat].
- PCB: Fujitsu MB89374 Data Link Controller, SDIP42 (Radr, Model1)
- DRIVERS: model1.cpp (sega\m1comm.c)
- SOURCE: machine\mb89374.cpp



I9.C6  Network Interface Device

- 0.284              : Push CR bit 5 high on DMA complete events (machine\dp8390.cpp) [Angelo Salese]. Use multibyte helpers instead of casting buffer pointer (machine\i82586.cpp) [AJR].
- 0.277              : Advance CRBA on packet RX (machine\dp83932c.cpp) [Brice Onken]. Improved address filtering (machine\dp8390.cpp) [Patrick Mackinlay].
- 0.275              : Delay interrupt after initialization (machine\am79c90.cpp) [Patrick Mackinlay].
- 0.267              : Improved interrupt logic (machine\am79c90.cpp) [Brice Onken].
- 0.262              : Fixed receive overflow logic (machine\dp83932c.cpp) [Patrick Mackinlay].
- 0.259              : Use helpers from multibyte.h (machine\am79c90.cpp and machine\i82586.cpp) [AJR].
- 0.258              : RMD3 mcnt is 0 on error (machine\am79c90.cpp) [Patrick Mackinlay].
- 0.248              : Use swapendian_int16 (machine\dp83932c.cpp) [AJR].
- 0.245              : Support BE mode and transmission packet appending. Added support for big endian bus accesses by adjusting the width of the bus access appropriately (In 32-bit mode, descriptors and the RBA must all be aligned to 32-bit boundaries, even when the values are only 16 bit, thus the previous method had issues on BE buses. See pages 7 and 15 in the datasheet). Stop device from starting a second transaction task if one is already in progress. The datasheet recommends that software which wants to append packets during a transmission send another transmission command to avoid a race condition, and it should do nothing if this command is received while the transfer is still ongoing. NEWS-OS 4.2.1aRD is an example of software that does this. It would hang on boot without this change because the SONIC would start doing weird things when the second transmit command came in (machine\dp83932c.cpp) [Brice Onken].
- 0.224              : Use swapendian_int16/int32 (machine\dp8390.cpp) [AJR].
- 0.222              : Eliminated CS line handler, use separate read and write handlers instead (machine\dp8390.cpp) [AJR]. READ/WRITE macros removal (machine\dp8390.cpp) [Osso].
- 0.201              : Allow AppleTalk broadcast through recv (machine\dp8390.cpp) [rakslice].
- 0.154              : Converted DP8390D to DEVCB2 [Osso]. Fixed MB8795 packet sizes [O. Galibert].
- SOURCE: machine\am79c90.cpp, cs8900a.cpp, dp8390.cpp, dp83932c.cpp, edlc.cpp, i82586.cpp, mb8795.cpp and smc91c9x.cpp



I9.C7  MC6854

- 0.219              : Added support for external clocks and DMA. Improved LOG messages and fine tuning of IRQ handling [Joakim Larsson Edstrom].
- 0.216              : Small cleanup for readability [Joakim Larsson Edstrom].
- 0.207              : Simplified read/write handlers [AJR].
- 0.201              : Added DEVCB3 support. Removed legacy DEVCB accessors [Ryan Holtz].
- 0.154              : Converted MC6854 to DEVCB2 and delegates [Osso].
- 0.152              : Removed removed unused rxd callback from MC6854 (this also appears to be mostly a skeleton). Removed dependency clutter from econet [smf].
- 0.151              : Modernized MC6854 device [Osso].
- 0.148u2            : Moved mess\machine\mc6854.c/h to mame\ [Curt Coder].
- NOTES: The MC6854 chip is an Advanced Data-Link Controller (ADLC). It provides a high-level network interface that can transimit frames with arbitrary data and address length, and is compatible with the following standards: ADCCP (Advanced Data Communication Control Procedure), HDLC  (High-Level Data-Link Control), SDLC  (Synchronous Data-Link Control). It is designed to be interfaced with a M6800-family CPU. It is used in the "Nano-network" extension of the Thomson computers to link up to 32 computers at 500 Kbps. Many networks involving one PC server and several MO5 or TO7/70 computers were build in French schools in the 1980's to teach computer science.
- DRIVERS: (MESS) bbc.cpp, e01.cpp, poly.cpp and thomson.cpp
- SOURCE: machine\mc6854.cpp


I9.C8  I82586

- 0.246              : Interrupts are level triggered. Also tidy up timer usage [Patrick Mackinlay].
- 0.241              : Tolerate missing irq callback [Patrick Mackinlay].
- 0.233              : Various fixes: Send FCS in loopback mode. Don't store FCS in memory. Don't consume descriptors for bad frames [Patrick Mackinlay].
- 0.228              : Fixed address hash and multicast setup bugs [Patrick Mackinlay].
- 0.210              : Added line handler for reset [AJR].
- 0.209              : Added 'Intel 82586 IEEE 802.3 Ethernet LAN Coprocessor' device (machine\i82586.cpp). Loopback mode fixes [Patrick Mackinlay].
- 0.202              : Fixed transmit bug and handle reset. Improved interrupt handling and implement delayed transmit/receive behaviour [Patrick Mackinlay].
- 0.190              : Fixed 82586 initialisation. Have now tested 82586 version successfully. Include heartbeat indicator on all transmits to pass InterPro diagnostic. Also correct a bug affecting long frames - now allows up to 64k, slightly worried about the increase in save state, but don't have a better idea [Patrick Mackinlay].
- 0.188              : Added machine\i82586.cpp/h. Intel 82586/82596 ethernet controllers, skeleton only. Added databook references. Use address space for memory access. i82586 functional (~90% complete). Added dumping of 82586 configuration. Added i82586 state save. Changed address handling and filtering [Patrick Mackinlay].
- DRIVERS: (MESS) interpro.cpp, sun2.cpp and tekigw.cpp
- SOURCE: machine\i82586.cpp


I9.C9  InterLan NP600A-3 Intelligent Protocol Processor

- 0.252              : Guess functions of various things [AJR].
- 0.209              : Preliminary 82586 hookup. Added 82586 interrupt [AJR].
- 0.206              : Added bus\isa\np600.cpp/h. Added skeleton InterLan NP600A-3 Intelligent Protocol Processor (modem7, minuszerodegrees.net). Map a few I/O registers [AJR].
- DRIVERS: isa_cards.cpp (PC)
- SOURCE: bus\isa\np600.cpp


I9.CA  3COM 3C50x

- 0.252              : Avoid excessive 82586 resets (isa\3c505.cpp) [Patrick Mackinlay].
- 0.222              : Simplified signatures of most handlers (isa\3c503.cpp) [AJR].
- 0.210              : Tested 3C505 working with (MESS) Apollo [Patrick Mackinlay].
- 0.209              : Added LLE implementation of 3COM 3c505. Untested due to unresolved driver issues, but should replace existing HLE when tested working [Patrick Mackinlay, Neko May]. Replaced 3c505 HLE. For review/comment especially by @rb6502 and Hans Ostermeyer because it's: A rewrite/replacement of prior work, and proposes taking over the copyright as well; and untested on Apollo at the moment because the driver is crashing while trying to install Domain/OS (unrelated to this device). nTesting with the 3c505.exe diagnostic program on MS-DOS passes the Group 1 & 2 tests successfully when using 16-bit DMA channel. It intermittently fails the Group 2 transmit test when using an 8-bit channel [Patrick Mackinlay].
- 0.208              : Fixed crash in 3c505 networking [Hans Ostermeyer].
- 0.206              : Eliminated firstcpu usage (bus\isa\3c505.cpp) [AJR].
- 0.176              : The Ethernet frame check sequence is now appended to transmit data (bus\isa\3c505.cpp) [Hans Ostermeyer].
- 0.164              : Moved option ROM to the card to reflect real H/W (bus\isa\3c505.c) [Hans Ostermeyer].
- 0.154              : (MESS) Apollo updates: Fixed 3c505 to have a 16 bit ISA interface [Hans Ostermeyer].
- 0.148u2            : Removed mcast_chk and check for multicast in recv (mess\machine\3c505.c) [Carl].
- NOTES: 3COM 3C505 Ethernet Controller
- SOURCE: bus\isa\3c505.cpp


I9.CB  Realtek RTL8xxx

- 0.262              : Added pci\rtl8029as_pci.cpp/h and pci\rtl8139_pci.cpp/h. Added stub for RTL802AS and RTL8139 PCI based cards [Angelo Salese].
- NOTES: Realtek RTL8029AS and Realtek RTL8139C / RTL8139D / RTL8129 (?) PCI Ethernet cards. Second gen of Realtek network cards, driving away from the NE2000 design in '8029AS.
- SOURCE: pci\rtl8029as_pci.cpp and pci\rtl8139_pci.cpp



I9.D   Centronics

- 0.276              : Added centronics\epson_fx80.cpp/h. Added skeleton devices Epson FX-80 and JX-80 printers [Golden Child].
- 0.275              : Added centronics\adaptator.cpp/h and centronics\epson_rx80.cpp/h. Hookup The Adaptator DE-9 multitap device (centronics\ctronics.cpp). Register a possible DDR variable (centronics\adaptator.cpp) [Angelo Salese]. Added a skeleton Epson RX-80 printer device to allow the CPU ROM to be debugged [Golden Child].
- 0.238              : Fixed conflicting DIP locations, reversed order and inverted polarity for Epson printers. Also added the LX-810 (without L suffix) DIP switches for reference, we don't have a device for this printer yet. (bus\centronics\epson_lx800\lx810l.cpp) [Vas Crabb].
- 0.156              : (MESS) Use the same list of centronics devices everywhere (except the Amstrad CPC), the list has been renamed as they aren't all printers [smf].
- 0.154              : Small typo fix (bus\centronics\ctronics.c) [Osso].
- 0.153              : Added emu\machine\buffer.c/h, latch.c/h, bus\centronics\dsjoy.c/h and image.c/h. Centronics WIP using write lines and DEVCB2. Added an output latch and input buffer device to allow configuration in MCFG. Renamed centronics device "printer" to "image". FM-7 parallel port joystick works again. Added support for using PC LPT control lines as inputs (not tested). c64 geocable now just passes individual lines through, changed the strobe line to what is documented online (not tested). Converted MSX & exidy sorcerer parallel port DAC to use covox device instead of using a configuration switch (not tested). Sorcerer parallel port is more like the commodore user port, so should be converted to it's own slot where one option is a centronics card [smf]. Preliminary Centronics hookup to Canon Cat [R. Belmont].
- 0.151              : Moved machine\ctronics.c/h to bus\centronics\.
- 0.145              : Did centronics implementation in C++. Implemented centronics as slot device and file printer as default output [Miodrag Milanovic].
- 0.142u3            : Added emu\machine\ctronics.c/h.
- NOTES: Centronics interface, an interface developed by the same company for parallel data transmission, for example, computer printers and vice versa.
- SOURCE: emu\bus\centronics\ctronics.cpp





I10.    Transceiver

I10.1   Analog Devices

I10.11  ADM485
- PCB: ADM485JR 5V Low Power EIA RS485 transceiver, SOIC8 (Gp500, NamcoSystem12/23)

I10.12  ADM619
- PCB: ADM619AR is a 900MHz RF Transceiver - SOIC16, compatible to AD6190 (Nbajamex)

I10.13  ADM708
- PCB: ADM708AR (Taito GNET-System)


I10.2   SP485
- PCB: Sipex SP485CS is a low power half-duplex RS485 transceiver (Sscope2)

I10.3   HYC2485
- PCB: Hyundai HYC2485S is a SMC ARCNET Media Transceiver - RS485 5Mbps-2.5Mbps (Sscope2)

I10.4   DS8921
- PCB: National DS8921ATM Differential Line Driver (RS422/423) and Receiver Pair, SOIC8 (NamcoSystem12, NamcoSystem23, Gp500)

I10.5   SN75179
- PCB: Texas Instruments SN75179 Differential Driver and Receiver Pair, DIP8 (Model1)

I10.6   LMS75LBC176
- NOTES: National Semiconductor LMS75LBC176 or Texas Instruments SN75LBC176 Differential Bus Transceivers
- PCB: 75LBC176 (Radikalb, Surfplnt)


I10.7   DS75160A

- 0.153              : Converted DS75161A device to DEVCB2 [Osso].
- 0.148u1            : DEVCB2 conversions (machine\ds75160a.c/h) [Curt Coder].
- 0.147u1            : Added machine\ds75160a.c/h and ds75161a.c/h. Implemented DS75160A/DS75161A IEEE-488 GPIB Transceivers [Curt Coder].
- NOTES: National Semiconductor DS75160A IEEE-488 GPIB Transceiver emulation
- DRIVERS: (MESS) cbm2.cpp
- SOURCE: machine\ds75160a.c and ds75161a.cpp


I11.    Optocoupler

I11.1   Sharp

I11.11  PC900
- PCB: Sharp PC900 Digital Output Type OPIC Photocoupler, DIP6 (Cybsled, Gollygho, Luckywld)

I11.12  PC910
- PCB: Sharp PC910L0NSZ Logic-Gate-Output Optocoupler, High speed 10Mb/s, high CMR type, DIP8 (Cybsled, Gollygho, Luckywld), Sharp PC9D10 (NamcoNA2, NamcoFLSystem, Speedrcr)




I12.    Cassette / Cartridge / Floppy / Harddisk / CD / Laser Disc


I12.1   Cassette

- 0.281              : Improved incorrect data detection. Fixed crash while image data is invalid (formats\zx81_p.cpp). Fixes several tapes cause MAME to crash in (MESS) ZX81 and one tape causes MAME to crash in (MESS) ZX80 [holub].
- 0.278              : Added more items to savestate. Small cleanup (imagedev\cassette.cpp) [O. Galibert, hap]. Added warnings about wrong checksum and size of the image (formats\tzx_cas.cpp) [holub]. Invert cassette polarity (formats\phc25_cas.cpp) [Olivier Valentin].
- 0.277              : Pass byte count to wave fill function for legacy cassette formats (formats\cassimg.cpp). Check length of data read for (MESS) TAP format blocks (formats\tzx_cas.cpp) [holub].
- 0.275              : Prevent regression in cass images (formats\cassimg.cpp) [holub]. Put allocation outside loop again and check more allocations for failure (formats\cassimg.cpp) [Vas Crabb].
- 0.264              : Added support for saving cassette images in FLAC format (imagedev\cassette.cpp and formats\flacfile.cpp). Implemented seek/tell callbacks for FLAC library (util\flac.cpp) [Wilbert Pol].
- 0.262              : Added formats\flacfile.cpp/h. Added support for compact cassette images in FLAC format (formats\cassimg.h and formats\flacfile.cpp). Added support for flac data where bits_per_sample != 16 (formats\flacfile.cpp and util\flac.cpp). Fixed stereo output for stereo input images (imagedev\cassette.cpp) [Wilbert Pol].
- 0.259              : Fixed regression reading floating-point values (formats\uef_cas.cpp) [Vas Crabb].
- 0.234              : Don't construct string from nullptr. Note that std::string() was tried but somehow caused another bug (tape preset as play was instead stopped) [Robbbert].
- 0.228              : Added cassette_image::image_read_byte method for reading one byte at a time (formats\cassimg.cpp) [AJR].
- 0.226              : Update imagedev\cassette.cpp sound to new stream callbacks [Aaron Giles]. Make the interface look something like C++. Finished encapsulation of cassette_image class (formats\cassimg.cpp) [Vas Crabb].
- 0.221              : Added formats\h8_cas.cpp/h. Added support for (MESS) Heathkit H8 H8T cassette images [Robbbert].
- 0.218              : Hopefully fixed cassette bugs (imagedev\cassette.cpp) [Robbbert].
- 0.215              : Added bitwise operators for cassette_state (imagedev\cassette.cpp) [Vas Crabb].
- 0.212              : Cleanup and fixed a few minor but annoying bugs: Create new tape, hit Reset: fatal error - internal error. Load empty file to record onto, same error. Randomly have to hit Play a number of times before it takes. Randomly tape "plays" silently with the motor off [Robbbert].
- 0.201              : Allow cassette sound to be directly routed to a sound output (imagedev\cassette.cpp) [Michael Zapf].
- 0.200              : Bug fix for multi-channel reads in cassette_get_samples() (formats\cassimg.cpp). Use the unused "sample_bytes" arg the same way as cassette_put_samples(). Can be used with multi-channel files now. Rename sample_bytes to more descriptive sample_spacing. Added some comments about sample functions and sample_spacing variable [Frank Palazzolo].
- 0.194              : cassette_image_device::set_state() did not use the supplied state (m_state) at all (imagedev\cassette.h) [Firewave]. Updated documentation for castool (tools\castool.rst) [Nigel Barnes].
- 0.192              : Added Acorn Atom formats (tools\castool.cpp) [Nigel Barnes].
- 0.175              : Fixed readonly cassette formats (imagede\cassette.cpp, tools\castool.cpp). Performs argument checking on the return value of CassetteLegacyWaveFiller.chunk_sample_calc() (formats\cassimg.cpp). This is just better error checking. You can see this if you create a garbage file named 'foo.csw' and invoke the following command: MAME bbcb -cass1 foo.csw. With this change you get an invalid image error. Without it, you get this: Caught unhandled St12length_error exception: vector::_M_default_append [Nathan Woods].
- 0.175              : Modernized the cassette animation [Nathan Woods].
- 0.162              : Added formats\camplynx_cas.c/h. Added Camputers Lynx TAP cassette format [Robbbert].
- 0.158              : Added bus\a8sio\a8sio.c/h and cassette.c/h. Added skeleton for Atari 8bit SIO bus. This will not work until pokey learns to speak low level serial. Some Atari 8bit cassette work, not working yet [Wilbert Pol].
- 0.155              : Correction to the (MESS) MC-1000 cassette input [Emerson Costa]. Fixed bug where systems with multiple cassette drives (e.g. PET) had no Tape Controls when no cassette was loaded in the first drive (ui\tapectrl.c). Added shortcut commands for Tape Start and Tape Stop, by default mapped to F2 and Shift+F2, respectively. This is not meant as a replacement for the internal Tape Control menu, but it shall make simpler the usage of game tapes in home computers. Notice that REC/RWD/FWD have still to be pressed from the internal UI and that if you mount multiple cassettes in a driver with multiple tape drives only the first one will be controllable with these shortcuts. The idea is that more complex actions (e.g. save you own BASIC program or copy programs from a tape to another, etc.) should be performed through the internal menu, while people just aiming to play games can use the shortcut. This commit requires probably a clean build (emu\inpttype.h, ioport.h and ui.c). Converted Atari VCS carts to be slot devices, cleaned up the implementation and removed Supercharger tapes from the main system. The -cass media switch (to load the tape file) will become available only when you mount the Supercharger cart [Fabio Priuli].
- 0.154              : Ensure cassette-save timer is synchronised to cpu (MESS: a6809.c, acrnsys1.c, alphatro.c, d6800.c, dolphunk.c, fc100.c, h8.c and mekd2.c) [Robbbert]. Removed CassetteOptions that is already default. Cassette config moved inline [Miodrag Milanovic].
- 0.153              : Added formats\mbee_cas.c/h, phc25_cas.c/h, sol_cas.c/h and sorc_cas.c/h. Sanyo PHC-25 can load .phc cassettes images. Added back support for .apt cassettes to APF Imagination Machine. Added support for CAS and CPF cassettes to APF. Added TAP cassette format to Samsung SPC-1000 and Exidy Sorcerer. Added support for TAP and BEE formats to Applied Microbee (used in ubee512 emulator). Added partial support for SVT format to SOL-20 (used in Solace emulator) [Robbbert]. Fix for tape control and bitbanger control in UI (ui\devctrl.h) [Miodrag Milanovic].
- 0.148u4            : Cassette cleanup [Miodrag Milanovic].
- 0.148u2            : Set proper cassette image loading error. Removed unused CASSETTE_ERROR_INVALIDARG (imagedev\cassette.c). Fixed uninitialized variables in imagedev\cassette.c [Oliver Stoeneberg].
- 0.148u1            : [MESS] Oliver Stoeneberg fixed interface for ondra cassette (drivers\ondra.c).
- 0.148              : MESS: Adjusted FM7 cassette sample rate. Fixes Pac-man [Barry Rodewald]. Removed some unnecessary checks (formats\tzx_cas.c) [Oliver Stoeneberg].
- 0.146u5            : MESS: Added support for old TAP format to the driver, so that all newly added tapes work (high sample rate tapes are still not supported, though) (lib\formats\x1_tap.c) [Fabio Priuli].
- 0.146u3            : Added formats\sc3000_bit.c/h. Added support for the SC-3000 Survivors *.bit cassette file format [Curt Coder, SC-3000 Survivor].
- 0.146u1            : Added formats\tvc_cas.c/h. Added Videoton TVC .cas cassette image support. Fixed 8-bit wav loading (formats\cassimg.c + wavfile.c) [Sandro Ronco].
- 0.145u7            : Added formats\adam_cas.c/h and formats\x07_cas.c/h. Improved the cassette emulation [Curt Coder]: Added DDP tape image support (Coleco Adam Digital Data Pack format). Edited cassette.c to allow speed / direction / channel selection. Changed cassimg.c so multichannel tapes work [huygens]. Added multiread support (behind a define for now pending heuristics) to the dfi import support. Fix some inaccuracies regarding index decode position in dfi files [Lord Nightmare]. Modern apple 2 disk decoder for 16-sector disk images implemented using Olivier's new system for floptool. Only supports importing from .dfi 50MHz multi-read x3 images at the moment [Lord Nightmare, Balrog, Jason Scott, Karsten Scheibler]. Fixed dsk export from floptool so it can work with just one .dfi read instead of needing 3 reads. Tested at 50MHz sampling rate only [Lord Nightmare].
- 0.145u6            : Changed lib\formats\pmd_pmd.c/h to pmd_cas.c/h. Sandro Ronco added support for loading PMD 85 .ptp cassette images.
- 0.145u1            : Robbbert fixed error when starting with a blank tape already loaded. Making sure tape stops at end when playing (MESS: Apple1 for example).
- 0.144u7            : Fix for cassette [Miodrag Milanovic].
- 0.144u6            : Fix for cassette extension extraction [Miodrag Milanovic].
- 0.142u1            : Miodrag Milanovic added support for a display info callback function (cassette.c and flopdrv.c).
- 0.141u1            : Added imagedev\cassette.c/h and cassimg.c/h.
- 0.138u4            : Miodrag Milanovic added per-device image softlist loading routine. Added ability to support other types of software lists, so floppies, cassettes, cd-roms are now possible to be used.
- DRIVERS: (MESS)
- SOURCE: imagedev\cassette.cpp



I12.11  DECO Cassette System

- 23rd July      2001: Dave Haywood resubmitted some DECO Cassette System additions.
-  5th June      2001: David Haywood added some alternative versions of the DECO Cassette system games to the decocass driver.
-  6th March     2001: Juergen Buchmueller fixed some bugs in the state saving functions, added support for them to the DECO Cassette system driver.
- 26th February  2001: Juergen Buchmueller sent in another DECO Cassette system driver update with a few fixes to the graphics.
- 24th February  2001: Juergen Buchmueller sent another DECO Cassette system driver update with a few bugfixes.
- 21st February  2001: Juergen Buchmueller fixed some memory corrupting bugs in the Burger Time and DECO Cassette system drivers.
- 17th February  2001: Juergen Buchmueller managed to get the background tiles partially working in the DECO Cassette system driver, but the graphics are still not perfect.
- 15th February  2001: Juergen Buchmueller sent in another DECO Cassette system update with Explorer and Scrum Try, however they are both still missing some graphics.
- 14th February  2001: Juergen Buchmueller improved the sound CPU communication in the DECO Cassette system driver and added Boulder Dash - the original version.
- 12th February  2001: Juergen Buchmueller sent in an updated DECO Cassette system driver with support for Bump N Jump / Burnin' Rubber, Burger Time, Graplop / Cluster Buster, La.Pa.Pa / Rootin' Tootin', Fighting Ice Hockey, Pro Bowling, Night Star, Pro Soccer and Peter Pepper's Ice Cream Factory, but the games still lack some graphics.
- 11th February  2001: Juergen Buchmueller improved the DECO Cassette system driver even more, now Disco No. 1, Pro Tennis and Tornado are working too.
-  9th February  2001: Juergen Buchmueller sent in the first version of the DECO Cassette system driver, supporting Lock 'n Chase, Treasure Island, Super Astro Fighter, Astro Fantasia, Lucky Poker, Pro Golf and Mission X. The rest are either not yet dumped or use protection that has not been cracked yet.
-  8th February  2001: Juergen Buchmueller managed to fix some 8x41 emulation bugs and got a few DECO Cassette system games running: Super Astro Fighter, Pro Golf and Mission X (the last one with wrong colors though). Accurate to the original, the games need 1 - 2 minutes to load from the simulated tape. Also many thanks to Al Kossow for his incredible work on preserving this system that was near extinction.
- 31st January   2001: Juergen Buchmueller further fixed the i8x41 core and hooked some parts of the DECO cassette system to the Burger Time driver.



I12.12  Multi Amenity Cassette System (MACS)
-  1st May       2004: Tomasz Slanina - Present very preliminary emulation screenshots of Yu-Ka/Yu-Jan and Seimei-Kantei. The MACS system is strange, a cartridge based system and using ST-0016 chip.
- 24th April     2004: David Haywood sent in a preliminary MACS driver which also does not work at all.
- GAMES: I'Max - Kisekae Mahjong, Kisekae Hanafuda, Yubis / T.System - Yu-Ka, Yu-Jan



I12.13  SCSI Tape
- 0.260              : Inline is implied for member functions with bodies supplied at declaration (imagedev\simh_tape_image.h) [Vas Crabb].
- 0.259              : Added nscsi\tape.cpp/h, imagedev\simh_tape_image.cpp/h, util\multibyte.h, util\simh_tape_file.cpp/h and util\tape_file_interface.h. Added SCSI tape device based on SIMH tape image format [Mietek Bak].
- SOURCE: bus\nscsi\tape.cpp




I12.2   Cartridge
- 0.262              : Use out-of-line virtual destructors to avoid vtable link errors in certain single-driver builds (generic\slot.cpp) [Vas Crabb].
- 0.194              : Added 'Generic Cartridge Slot' device.
- 0.155              : Changed imagedev\cartslot.c/h to bus\generic\slot.c/h.
- 0.141u1            : Added emu\imagedev\cartslot.c/h and multcart.c/h.
- SOURCE: bus\generic\slot.cpp


I12.21  Max-A-Flex
-  8th November  2004: Mariusz Wojcieszek - Wrote a driver for the Max-A-Flex system (Atari 600XL). Four titles have appeared on this platform officially only.
- NOTES: The Max-A-Flex system is basically an Atari 600XL computer inside an arcade cabinet, which uses game cartridges. There is additional hardware that controls the length of time that you may play the game. Each time you insert a quarter, an amount of time determined by dip switch settings on the controller board is added. While the timer is running, all controls are active and you can control the game via Start, Select, Option, an 8-way joystick and one button. When the timer gets down to 10 seconds of play remaining, the control board starts beeping a progressivly higher pitched beep and flashing the "insert coin" and "extend play" lights. When the timer gets to zero, the controls become non-functional, but the game does not reset, so you could add more coins and continue playing.
- GAMES: First Star Software - Astro Chase (1982), Bristles (1983), Boulder Dash (1984), Flip and Flop (1983)

I12.22  PlayChoice-10
- SOURCE: drivers\playch10.cpp

I12.23  Sega MegaTech
- SOURCE: drivers\segac2.cpp
- PCB: Just 2 ROMs in the cartridge (Goldnaxe)

I12.24  Sega MegaPlay
- SOURCE: drivers\segac2.cpp
- PCB: (Mp_sonic)

I12.25  SNK NeoGeo
- NOTES: MVS version, MGD-2 and MGD-II format
- SOURCE: drivers\neogeo.cpp

I12.26  Nintendo Super System (NSS)
- SOURCE: drivers\nss.cpp
- PCB: (Nss_lwep)





I12.3   Floppy Disk

- 0.285              : Recognize .po extension for 400K/800K raw sector images (formats\ap_dsk35.cpp) [AJR].
- 0.284              : Added support for machines that have non-standard TS (two-sided) line hookups (machine\upd765.cpp) [R. Belmont]. Command interface improvements: Eliminated voluminous info dump on formats and filesystems when invoked with no arguments. Show only usage info for relevant command when parameters are invalid. Added help command to print information about any or all commands, formats and filesystems. Added flopblocks and hdblocks commands to enumerate blocks used by every file or directory on the specified volume (tools\floptool.cpp). Internal API change: Raw pointer accessors (data, rodata) are no longer provided for fsblk_t::block_t. Other accessors used to be based on these methods, but now require their own internal overrides. This entails more copying of data in many cases, but will allow more flexible subclassing opportunities in the future. To compensate for the removal of raw pointer accessors, added methods to fsblk_t::block_t for checking whether a portion of a block is equal to a memory range or a string (eqmem, eqstr). The resulting changed behavior in formats\fs_oric_jasmin.cpp actually fixes a bug in the directory search routine. Added error code for when a circular reference is countered and use it in one filesystem (formats\fsblk.cpp). Insert NUL padding when reading sparse files, rather than copies of the boot sector (formats\fs_prodos.cpp). Properly recognize end of directory; fixed block overrun in file_create; use std::min (formats\fs_vtech.cpp). Add disk_id and os_version to volume metadata (formats\fs_cbmdos.cpp). Added disk_id to volume metadata (formats\fs_coco_os9.cpp). Use multibyte.h helpers instead of playing fast and loose with alignments (formats\86f_dsk.cpp, formats\apd_dsk.cpp, formats\csw_cas.cpp, formats\d88_dsk.cpp, formats\fdd_dsk.cpp, formats\jfd_dsk.cpp and formats\nfd_dsk.cpp) [AJR]. Added 3.5" 2DD option for (MESS) pc9801uv2 [Angelo Salese]. Added support for 1.2MB drive (525hd) to (MESS) att6300p [donohoe00]. Use explicitly sized integers for things that are saved, clean up and srcclean (olivetti\att6300p_fdc.cpp) [Vas Crabb].
- 0.283              : Added formats\wren_dsk.cpp/h. Documented all of the upd72069 auxiliary commands (machine\upd765.cpp). Coleco Adam floppy disk emulation improvements: Completely reimplement Adam .dsk floppy format, permuting sectors of 720KB and 1.44MB 3.5" formats into (and out of) the correct native interleave. Split adam_fdc device into several sets, some now properly supporting 720KB and/or 1.44MB formats. Removed the "Doug Slopsema" BIOS for the 320KB FDC variant upon determining it to be a copy of the 320ta BIOS with slight bitrot. Added compatibility matrix for convenient reference (bus\adamnet\fdc.cpp) [AJR]. Added Wren Executive disk image format (formats\wren_dsk.cpp). Added Control Port C4 and C6 outputs for TC8566AF (machine\upd765.cpp) [Nigel Barnes]. Added support for bad address field crc in basic fm and mfm images (formats\flopimg.cpp) [Carl]. Fixed size of FLUX chunk in MOOF files. The previous code allocated 512 bytes to accomodate a FLUX chunk if the resulting file has flux tracks, but the actual size of a FLUX chunk is 168 bytes (8 bytes header + 160 bytes chunk). When MAME allocated 512 bytes, this left 344 zero-bytes padding in the file that other tools would interpret as invalid chunks. See file format reference: https://applesaucefdc.com/moof-reference/ (formats\as_dsk.cpp) [Thomas]. Allow invalid auxcommand sent by (MESS) S3000, which works on hardware (machine\upd765.cpp) [R. Belmont].
- 0.282              : Removed duplicate lookup table. Added write support for the D13 format. Removed the RWTS18 format (formats\ap2_dsk.cpp) [Roman Donchenko]. Support quad density floppies as an option. Disable option ROM on fixed disk controller (onboard BIOS has built-in support). Use a lambda instead of short function (isa\fdc.cpp) [Sergey Svishchev]. Added rudimentary error checking to floppy_create, allow mount to return nullptr on failure. Fixed error return for floppy_create (tools\floptool.cpp, tools\image_handler.cpp). Sanity check for debug builds (formats\fsblk_vec.cpp). Enable 320KB format (with appropriate BIOS and drive option) and added floppy sounds (formats\adam_dsk.cpp). New filesystem-based commands: Added flophashes and hdhashes commands to compute CRC-32 and SHA-1 hashes for each file on a floppy or hard disk image. Added flopchmeta command to change the metadata for a file, directory or volume on a floppy image. Added floprename and flopremove commands (tools\floptool.cpp) [AJR]. Added 8bit DMA and NOP unknown FDC commands to (MESS) MPC-3000 (machine\upd765.cpp). Added uPD72069 data rate control (machine\upd765.cpp) [Carl]. Improved timing of data register reads (machine\wozfdc.cpp) [Roman Donchenko].
- 0.281              : Allow images loaded from software lists to be write protected (imagedev\floppy.cpp). Recognize more file types (formats\fs_prodos.cpp). Fixed writing data to disk (adamnet\fdc.cpp). Downgrade strength of format identification to reduce the number of false positives. This helps floptool more than MAME, since these formats are largely specific to one group of drivers there (formats\acorn_dsk.cpp) [AJR]. Added block 4B support (TSX format). Fixed bug in block 35 (formats\tzx_cas.cpp) [holub]. Set m_mon to 1 (motor off) in constructor (imagedev\floppy.cpp). Fixes (MESS) mtu130 crashes MAME, if you try to load a software-list item that is missing. Fixes (MESS) LSI m3 crashes when attempt to use missing disk [hap]. Correct recalibrate steps for Intel N82077 FDC. As documented in the datasheet it should be 80 for this FDC (machine\upd765.cpp) [Brice Onken]. Added a default implementation for 'supports_save'. Since the default implementation of 'save' is a stub that always fails, it makes sense to also add a default implementation of 'supports_save' that returns 'false'. That way, there's one fewer method that needs to be implemented for read-only image formats. Removed the now-redundant implementations in concrete format classes (formats\flopimg.cpp) [Roman Donchenko].
- 0.280              : Fixed floppy regression (luxor\abc1600.cpp) [Curt Coder]. Prevent INTRQ from being raised until last DRQ is serviced unless data was already lost (machine\wd_fdc.cpp) [AJR].
- 0.279              : Include IPF, 86F disk formats in floptool. IPF is included unconditionally by scripts/formats.lua, so the HAS_FORMATS condition was always false. 86F is also included unconditionally but simply wasn't added to formats\all.cpp when it was introduced. Added 86F to the "Container FM/MFM" category for consistency with the grouping in devices\imagedev\floppy.cpp and moved IPF to the "PC" category for the same reason (formats\all.cpp) [Invertego].
- 0.278              : Reimplemented HxC floppy emulator HFE format. Do not exit for an unknown encoding, just inform (formats\hxchfe_dsk.cpp) [Michael Zapf]. Converted a800\atarifdc.cpp to slot device [AJR]. Hookup compatability with mz2000_flop (sharp\mz2500.cpp) [Angelo Salese]. Add floppy to FZ-1 and clones (casio\fz1.cpp) [Devin Acker].
- 0.276              : Return INVALIDIMAGE from floppy_image_device::identify if no format scores (imagedev\floppy.cpp) [AJR].
- 0.274              : Added formats\h17disk.cpp/h. Fixes and improvements: Fixed incorrect directory sector offset value for file read/write operations. Allow file types other than T and B. Fixed off-by-one error: end address is exclusive, not inclusive (formats\fs_vtech.cpp). Recognized .dvz extension (formats\vt_dsk.cpp) [AJR]. Added revert reason (BTANB: Trackdisk has no HW interlock for motor running with disk not inserted). Stabilize wordsync (amiga\paulafdc.cpp) [Angelo Salese]. Removed code supporting functionality that's no longer used. Eliminated floppy_get_drive_type and floppy_set_type. No callers for these functions allowing us to get rid of the FLOPPY_TYPE_ defines as well. Drop flopimg_get_image, floppy_drive_get_next_id, floppy_drive_read_track_data_info_buffer, floppy_drive_write_track_data_info_buffer, floppy_drive_format_sector, floppy_drive_set_index_pulse_callback, floppy_drive_get_current_track_size, floppy_wtd_w  floppy_wpt_r, floppy_dskchg_r and floppy_twosid_r. Drop flopimg_get_sectors_per_track and flopimg_get_id_callback. Drop unneeded state variables: m_id_index and m_rdy. Make some members as private (imagedev\flopdrv.cpp) [Priit Laes]. Start the ready dance on insertion even if motor is always on (imagedev\floppy.cpp) [O. Galibert]. Added format for Heath hard-sectored formats (formats\h17disk.cpp) [Mark Garlanger].
- 0.273              : Fixed remaining calls memory access warnings (modules\fat.cpp). Fixed function returning floperr_t value as imgtoolerr_t (modules\vzdos.cpp) [Vas Crabb].
- 0.272              : Added formats\sap_dsk.cpp/h. Don't crash when loading a NIB file with an all-zero track. In this case, 'levels' is empty, and 'generate_track_from_levels' immediately crashes with a division by zero. To fix this, just leave the track empty instead. Added read-only support for the D13 format. This is the equivalent of DSK used for 13-sector disks. While 'diskiing' cannot directly boot from 13-sector disks, you can still access such disks with it (for example, using the BOOT13 and MUFFIN programs), so list the format as supported by both 'diskiing13' and 'diskiing'. Added missing error handling code (formats\ap2_dsk.cpp) [Roman Donchenko]. Add support for reading SAP (Systeme d'Archivage Pukall) disk images to Thomson systems (formats\sap_dsk.cpp). Guard against divide by zero errors when the bytes per sector field in the parameter block is not properly set (as on some early PC-DOS disks) (formats\fs_fat.cpp). Fixed typo that excluded VTech disk formats from floptool (formats\all.cpp) [AJR]. Set ST0_SE when seeking not ready drive (verified on real hardware) (machine\upd765.cpp). TC8566AF ready line is not connected (msx\slot\disk.cpp) [Carl].
- 0.271              : Added formats\86f_dsk.cpp/h. Don't enable_transfer after tc. Indicate ready status in polling irq sense. Reset st0 when starting a seek and fail if drive isn't ready (machine\upd765.cpp). Added read 86f image support (formats\86f_dsk.cpp). FM should be cell_count / 2 (formats\nfd_dsk.cpp). Handle 256bps images (formats\pc98_dsk.cpp) [Carl]. Different workaround for (unused) BIG_ENDIAN enum (formats\86f_dsk.h) [hap].
- 0.270              : Floppy hard-sector support. Mix of Eric Anderson's and Mark Gallager's patches. Removal of the flux screen experiment. Removal of the unused get_pos() [Eric Anderson]. Be more permissive about allowing double-sided images in single-sided drives (formats\d88_dsk.cpp). Added single-density 3" drive types (imagedev\floppy.cpp). Use correct SSSD drive type (bml3\bml3mp1805.cpp). Added 3-inch double-sided quad-density format (imagedev\floppy.cpp). Added DSQD drives to configuration and enable one by default (oricext\microdisc.cpp). Upgrade all configurations using double-sided drives to quad density (amstrad\pcw.cpp). Make drives single-density since 8271 controller doesn't support MFM (bbc\fdc\ams.cpp). Don't blindly trust the number of tracks and sides to be valid (formats\oric_dsk.cpp). Removed #include "screen.h" (imagedev\floppy.h) [AJR]. Use standard drives for hard-sectored systems (imagedev\floppy.cpp). Updated file specs for how hard-sectored support was added (formats\mfi_dsk.cpp) [Mark Garlanger]. Don't bail immediately when a sector address crc failure fixes ea interlock copy pro (machine\upd765.cpp) [Carl]. Relax track_count check to a warning (formats\d88_dsk.cpp) [Angelo Salese].
- 0.268              : Fixed HP 9121 format #4. With this change, all the SSDD disks from hpmuseum can be read and the size of the disk matches. While at it, also fix a typo (formats\fs_hplif.cpp and formats\hp300_dsk.cpp). Added HP9133 Floppy/Fixed disk drive (ieee488\hp9133.cpp) [Sven Schnelle]. Drive busy bits should not be cleared until a SIS is executed. Note: The upd765 does not clear the drive busy bits until you issue a sense interrupt status command. Without this fix CP/M Plus on the QX-10 gives disk I/O errors because it expects the busy bit to stay set until it has a chance to issue the SIS command (machine\upd765.cpp) [Brian Johnson]. Removed HFE image format from the general list for rewrite (imagedev\floppy.cpp) [Michael Zapf].
- 0.267              : Added basic write support (formats\fs_coco_rsdos.cpp) [Wilbert Pol]. Lower drq at the end of track write (machine\wd_fdc.cpp) [Mark Garlanger]. Fixed a bug with reading the first 1-bit on a track. Note: 'floppy_image_device::find_index' uses binary search to find the index for which 'buf[spos] <= position < buf[spos + 1]'. However, the algorithm behaves incorrectly when 'position < buf[0]'. In this case, the algorithm returns 0, as if 'position' was between 'buf[0]' and 'buf[1]'. The effect of this is that if 'get_next_transition' is called with a timestamp that is between the start of the revolution and the first transition, then instead of returning the timestamp of that transition, it returns the timestamp of the second transition instead. Essentially, the first 1-bit on the track gets flipped to a 0. I have encountered this in Apple II emulation, where this bug manifests as sporadic I/O errors. Fixed it by doing two things: 1. Replaced 'find_index' with a call to 'upper_bound' from the standard library, which behaves correctly in edge cases. 2. If 'upper_bound' signals that 'position < buf[0]', then adjust 'base' and 'index' to point to the last transition of the previous revolution (imagedev\floppy.cpp). Fixed out-of-bounds access to the seek sample. Note: Currently, when 'floppy_sound_device::step' selects a new seek sample, the value of 'm_seek_samplepos' remains the same as it was the last time a seek sample was played. This might be an invalid position for the new sample, since the seek samples have different lengths. When this is the case, the next call to 'floppy_sound_device::sound_stream_update' makes an out-of-bounds memory access as it reads the sample data. Fixed this by resetting 'm_seek_samplepos' to 0 when a new seek sample is selected. This also makes the seek sounds more consistent, since previously they would start from a semi-random position each time (imagedev\floppy.cpp) [Roman Donchenko].
- 0.266              : Added FDD motor timeout for (MESS) Sharp X1 (CZ-800C) and support odd d88 images (formats\d88_dsk.cpp) [Carl]. Added write support (formats\fs_fat.cpp). Note: Removal of files is untested and floptool does not have a command to delete a file. Fixed display of all directory entries (formats\fs_cbmdos.cpp). Added partial write support (formats\fs_cbmdos.cpp) [Wilbert Pol]. More const, less copying (formats\fs_fat.cpp) [Vas Crabb].
- 0.265              : Removed unused variable (machine\upd765.cpp) [hap]. Header byte 4 is not reserved (formats\dmk_dsk.cpp). Fixes DMK Disk format detection rejects single-sided DMK files (MESS) trs80l2, trs80m3, trs80m4 and coco [Wilbert Pol]. Fixed a class memory access warning (machine\fdc_pll.h) [Vas Crabb].
- 0.264              : Fixed apparent logic error in write splice setting test (formats\flopimg.cpp) [AJR]. Improved checks in identify. Added structure checks in identify. Use less strong FIFID flags (formats\dmk_dsk.cpp) [Wilbert Pol].
- 0.263              : Various fixes. Get the volume label from the root directory, rather than from the extended BPB (which is less reliable). Ignore long file name entries for now (formats\fs_fat.cpp). Allow floptool to use ProDOS filesystem with 140K 5.25" disks. Actually list OS and date/time file attributes. Fixed decoding of dates to match Apple II ProDOS. Skip header entries in a less hacky way. Recognize some file types (formats\fs_prodos.cpp). Added ProDOS filesystem where applicable (a2bus\a2diskiing.cpp). Delete unused getter that leaked details (imagedev\floppy.cpp). Disallow identification of "ssd" format based on recorded sector counts unless they are divisible by 10 (formats\acorn_dsk.cpp). Floppy fixes. Refilter list of specific floppy formats using the known form factor and variant before trying to mount a filesystem on an image. Sort identify results by decreasing score (code already expects the best format to be first) (tools\image_handler.cpp). Added the 5.25" disk formats (formats\fs_fat.cpp) [AJR]. Added Iskra Delta Partner floppy image format (formats\idpart_dsk.cpp) [Miodrag Milanovic].
- 0.262              : Ignore deleted directory entries (formats\fs_fat.cpp) [Wilbert Pol]. Use multibyte.h helpers (formats\ap_dsk35.cpp and formats\lw30_dsk.cpp). Use util::sum16_creator (modules\vzdos.cpp) [AJR]. Added 3.5 inch disk formats and adjust scoring (formats\jvc_dsk.cpp and formats\os9_dsk.cpp) [Tim Lindner]. Updated class variables to current naming convention (imagedev\floppy.cpp) [Mark Garlanger].
- 0.261              : Added formats\nabupc_dsk.cpp/h. Fixed a crash when format doesn't implement get_sectors_per_track() (imgtool\modules\bml3.cpp). Implemented get_sectors_per_track() (formats\imd_dsk.cpp). Check for unrecognized options (imgtool\main.cpp) [Lubomir Rintel]. Added NABU PC floppy disk formats [Brian Johnson]. Removed hard-sector floppy support (imagedev\floppy.cpp) (MAME 0.259) and workaround for index timing regression (imagedev\floppy.cpp) (MAME 0.260). Note: This has caused numerous regressions, including floppy formats not working and application hangs when using some formats [Vas Crabb]. Only match by file size if the file is headerless (formats\jvc_dsk.cpp) [Nigel Barnes].
- 0.260              : Removed flopimg.h and fsmgr.h from floppy device header (imagedev\floppy.cpp). Workaround for index timing regression (imagedev\floppy.cpp). Formats-related #include cleanup: Note that IMD is one of the default MFM formats, so there is no need to add it explicitly. Floppy format API refinements: Added noexcept to format information overrides and several simple floppy_image accessors. Be more const-correct and use references instead of raw pointers wherever applicable. In particular, floppy_image_device::load and floppy_image_device::save now take a reference to floppy_image rather than a pointer, const-qualified in the latter case [AJR]. Added Cumana DFS disk image format (formats\acorn_dsk.cpp). Added support for Cumana floppy format (electron\cart\cumana.cpp) [Nigel Barnes].
- 0.259              : Added optional logging for data reads and writes (machine\wd_fdc.cpp). Recognized SSDD images for 3(.5)-inch floppy drives (formats\td0_dsk.cpp). Fixes loading of (MESS) CP/M Plus v1.5 on pcw8256. Do more error checking, hopefully eliminating softlocks when trying to load truncated images (formats\td0_dsk.cpp). Don't swallow bits and bytes at the end of Huffman-encoded images, when the word buffer can no longer be filled (formats\td0_dsk.cpp). Cleanup filesystem management (formats\fsmgr.cpp): Use multibyte.h functions for packing and unpacking words. Removed a few aliases for cstdlib functions. Converted rstr and wstr functions to std::string_view. Restore trim_end_spaces as a std::string_view function and use it in place of strtrimrightspace in FS code (formats\fsmgr.cpp). Use multibyte.h functions in many formats\**.cpp [AJR]. Added hard-sector floppy support (imagedev\floppy.cpp) [Eric Anderson].
- 0.258              : DRQ fixes: Drop DRQ immediately when a new command is written, without even waiting for it to be committed (fixes observed regression in ms0515). Eliminated logic for raising IRQ if DRQ is serviced while FDC is idle (machine\wd_fdc.cpp) [AJR].
- 0.257              : Simplified/Optimized how bus inverting is handled (machine\wd_fdc.cpp) [Mark Garlanger].
- 0.256              : Added Teac FD55-A and FD55-B drive types (imagedev\floppy.cpp) [Mark Garlanger].
- 0.254              : Don't clear DRQ on LDB/INTR and fixed spurious READ TRACk/ADDR FM mark syncs (machine\wd_fdc.cpp), fixes (MESS) SuperUtility 3 and Marble Maze on TRS-80 Color Computer [Peter Phillips, Tim Lindner]. Clean up floppy-related code in various drivers with finder arrays. Always interrupt upon command completion and clear busy flag if the latter was set (even if DRQ was not serviced). Drop DRQ when "Force Interrupt" command is issued in idle state (machine\wd_fdc.cpp) [AJR]. Cleaned up (machine\upd765.cpp) [Vas Crabb].
- 0.253              : Added formats\lw30_dsk.cpp/h. Eliminated superfluous return value for load callback (imagedev\floppy.h) [AJR]. Addec Micropolis VGI floppy disk image format (formats\vgi_dsk.cpp) [Eric Anderson]. Minimally added some auxcmd commands to the 72069 (need docs!). Turn back down excessive default verbosity level (machine\upd765.cpp) [O. Galibert]. Encode certain tracks as single density in .d88 floppy format (formats\d88_dsk.cpp) [AJR].
- 0.252              : Unify data_irq and other_irq (machine\upd765.cpp) [Carl]. Fixed a bug in the OS-9 file systems file name validation function that caused it to incorrectly tolerate characters with the seventh bit set (formats\fs_coco_os9.cpp) [Nathan Woods]. Fixed the flux tracks (formats\as_dsk.cpp) [O. Galibert]. Enabled 1.44Mb dc42 images (formats\ap_dsk35.cpp) [Peter Ferrie]. Mitigate against rot in legacy floppy code (formats\d88_dsk.cpp and formats\dsk_dsk.cpp). Eliminated use of sprintf for error messages (tools\image_handler.cpp) [AJR].
- 0.251              : Clear data_irq in fifo_r/w. Also disable clearing data_irq in msr_r. Fixes (MESS) pc8801 Donkey Kong 3. Clear wc if the found sector has the correct cyl in the address field (machine\upd765.cpp) [Carl]. Fixed floppy sound spin sample oob access (imagedev\floppy.cpp), fixes (MESS) Apple II memory access violation in floppy device sound emulation [hap].
- 0.250              : Fixed FDC Busy bit for overlapped commands (machine\wd_fdc.cpp), fixes (MESS) TRS-80 Model I graphic adventures with custom boot loader fails. The problem here is that the end of the previous command clears the BSY status bit which makes it appear to system code that the second command has completed (when it has not) emulation. Implemented FM and mixed FM/MFM reading to DMK disk image format (formats\dmk_dsk.cpp) [pnp2084]. Added FDC Write Protect Delay (machine\wd_fdc.cpp), fixes (MESS) error booting OS-9 on Color Computer 2B [Tim Lindner]. A few small formatting cleanups and scope reductions (formats\dmk_dsk.cpp) [Vas Crabb].
- 0.249              : Added formats\as_dsk.cpp/h and formats\fs_isis.cpp/h. Move the applesauce formats in their own file. Complete woz writing format. Added write support to moof format (formats\as_dsk.cpp). Added extended DDAM handling to FD1771 FDC (machine\wd_fdc.cpp), fixes (MESS) TRS-80 Model I (Level II Basic) WD1771 does not support a1 DAM status bit [O. Galibert]. Added support for Intel ISIS-II filesystem [fulivi]. Added support for specifying volume attributes in 'floptool flopcreate'. An example command line: flopcreate vdk coco_rawdsk_os9_35 newdisk.vdk -name mycooldisk -creation_date "1999-02-28 13:23:47". Attributes are identified on the command line prefixed with '-'; if this is not the preferred syntax this can be changed. Implementing this also forced a change to fs::meta_value where the various as_*() calls can now be called without respect to which type the fs::meta_value is; this is necessary so that floptool code doesn't need to "own" parsing of the various types of fs::meta_value. And with this change, fs::meta_value::to_string() is now replaced by fs::meta_value::as_string(). Allow sector counts not divisible by 10 (formats\acorn_dsk.cpp) [Nathan Woods]. Reset the contents of data_reg when the sync is changed (machine\wd_fdc.cpp), fixes (MESS) WD FDC FM sync incorrect in two places of trs80l2 and trs80m4 [pnp2084].
- 0.248              : Removed machine\sonydriv.cpp/h. Fixed use-after-std::move() issue in constructor (formats\fs_fat.cpp). Changed fs::manager_t::enumerate_f() to simplify logic within file system drivers. enumerate_f() used to contain quite a bit of boilerplate logic to determine whether a particular floppy type should be added. This change attempts to move this logic outside the file system drivers to simplify the drivers. The riskiest part of this change is unformatted_image::enumerate_f(). I attempted to replicate the logic that was previously determining with unformatted image types to use, but the logic is tricky and it isn't clear to me that replicating the logic is the correct action - I may be cargo culting. * Fix to floppy_image_device::fs_enum::add_raw(). * Updating FS_FAT to reflect this PR. * On the advise of Sarayan, I moved the filtering to the fs::manager_t::fs_enum base class. This is actually a less intrusive change than what I originally had because it keeps the unformatted raw image handling closer to what we had previously. Some misgivings about these changes: 1. We now have fs::manager_t::fs_enum::add() being a thin call that invokes a protected method called fs::manager_t::fs_enum::add_format(). Better ideas for names are welcome. 2. It feels odd that we've removed the need to do filtering from the various FS modules, but the unformatted module has to ask the fs_enum() for its internal variables for filtering to perform the same logic. This seems to be the least worst option. Feedback is welcome (formats\fsmgr.cpp, tools\image_handler.cpp, imagedev\floppy.cpp) [Nathan Woods].
- 0.247              : Added formats\cp68_dsk.cpp/h and formats\fdos_dsk.cpp/h. Don't force ProDOS 2.5a8 to ProDOS sector order (formats\ap2_dsk.cpp) [R. Belmont]. Fixed logic error (formats\mfi_dsk.cpp) [Peter Ferrie]. Handle FLUX tracks, even when somewhat broken (formats\ap2_dsk.cpp) [O. Galibert]. Added CP/68 disk format for SWTPC 6800. Added FLEX 1.0 (MiniFLEX) Disk Format for the SWTPC MF-68 Disk System uses 18 128-byte sectors per track. Added FDOS disk format for the SWTPC 6800. Allows the SWTPC 6800 machine to boot FDOS in MAME using Mike Douglas' FDOSMPS.DSK, and to read/write other available disk images [Michael R. Furman]. Fixed truncating when a write doesn't reach the end of stream (util\ioprocsvec.h). Fixed reversed error checking logic (tools\floptool.cpp) [F.Ulivi].
- 0.246              : Added formats\fs_cbmdos.cpp/h. New API and blk_t is probably going to change too (formats\fsmgr.cpp) [O. Galibert]. Created a CBM DOS file system driver and added it to the 1541 implementation. Initial FAT file system support for Floptool. Current Limitations: Read only. Only supports floppy disks. No FAT32 support. No Long Filenames Support [Nathan Woods].
- 0.245              : Converted isa\omti8621.cpp and machine\victor9k_fdc.cpp to use logmacro. Made isa\omti8621.cpp usage of m_member prefix consistent [Ryan Holtz]. Changed the constructor of fs::dir_entry to take 'std::string &&name' instead of 'const std::string &name' (formats\fsmgr.h) [Nathan Woods]. Fixed uPD765 command decoding, FDC works now in (MESS) Compugraphic MCS PowerView 10 [Carl].
- 0.244              : Changed floppy_image_device::identify() to take std::string_view instead of std::string (imagedev\floppy.cpp). Added logic to the CoCo RS-DOS FS module to catch cycles in file granule (block) lists (formats\fs_coco_rsdos.cpp) [Nathan Woods]. If waiting for additional command bytes, treat a data register read as an open bus write (tested on real hardware) and always trigger the DRQ line even if in nodma mode (machine\upd765.cpp) [Carl]. Adjusted returned FFID's to indicate verified internal structure [Nigel Barnes].
- 0.243              : Removed the save support that is just too broken and member variables (formats\imd_dsk.cpp). Constify the floppy image handling interface. Removed the intermediate allocator (lib\formats\*_dsk.cpp). Changed the internal format to flux changes, updated the MFI format accordingly (keep read compatibility with the old MFI) (imagedev\floppy.cpp). Revisit the identify returns (lib\formats\*_dsk.cpp). Removed write support for now, it has issues (sharing data between read and write, copy/pasting the pll code, not supporting v3) (formats\hxchfe_dsk.cpp). Fixed issues when wrapping in generate_bitstream_from_track which were especially damaging for (MESS) Apple drivers (formats\flopimg.cpp) [O. Galibert]. Changed floppy_image_device::init_fs() to set the dirty bit on the floppy image (imagedev\floppy.cpp). Note: This is not an actual user facing bug right now, because in the MAME UI the call to init_fs() is followed up by a call to setup_write(), which forces the image to commit without regard to the dirty bit. There is an argument that this is itself code smell; setup_write() perhaps should be set_output_format() and not arbitrarily perform a commit. Changed fs::meta_value::to_string() to not be static and not require meta_type. No need to pass in the meta_type when using std::visit() on the std::variant (tools\floptool.cpp and formats\fsmeta.cpp). Consolidate floppy_image_device::m_create_fs and floppy_image_device::m_io_fs vectors. We had two separate members in floppy_image_device (m_create_fs and m_io_fs) that contained the same data. Whether the file systems can be formatted or read can be identified by querying fs::manager_t. For this reason, it seems bad to have these separate members, the seemingly only reason to make the UI code slightly less complicated. For this reason I consolidate these two members and moved the burden of selecting which ones are creatable to the UI code (imagedev\floppy.cpp, ui\filecreate.cpp and ui\floppycntrl.cpp). Fixed some issues involving fs::meta_description constructing. With the recent change to use std::variant more closely, I noticed a problem where meta_descriptions of type meta_type::String got defaults of type 't'. This was because the templated ctor for meta_description would convert 'const char *' to 'bool'. This change added another overload to catch 'const char *', along with asserts to catch problems. In the process I correct a few meta_description ctors. It is possible that this change does not go far enough. Perhaps the meta_type argument should be removed, and we should instead create distinct ctor types (rather than relying on templates) and specify the precise meta_type in the overload. Or even go further and remove m_type from meta_description, and instead create an overload that calculates meta_type based on calling std::visit on the variant. Taking this change a bit further, and removing m_type from fs::meta_description; it was superfluous. Also doing some minor C++-ifications (formats\fsmeta.h). Added a 'type()' accessor to fs::meta_value. Let's try to hide the nastiness of std::visit() as much as humanly possible. Changing visitor approach for std::visit() call in fs::meta_value::type() (formats\fsmeta.cpp). Fixed string constructor for fs::meta_value. In absence of a constructor that explicitly took 'const char *', passing a const char * would be interpretted as a bool (formats\fsmeta.h). Cleanups for the CoCo RS-DOS and OS-9 fs modules [Nathan Woods].
- 0.242              : Fixed typo in error message (tools\floptool.cpp) [pnp2084, Nathan Woods]. The CoCo driver now identifies RS-DOS and OS-9 as relevant file systems (coco\coco_fdc.cpp) [Nathan Woods]. Allow creating unformatted images again (tools\floptool.cpp). Correct sector extraction in wd/upd when extracted sector is smaller than expected (formats\upd765_dsk.cpp and wd177x_dsk.cpp). Removed mutable variables from the class (formats\flex_dsk.cpp and img_dsk.cpp) [O. Galibert].
- 0.241              : Added sector dump floppy image format for (MESS) Luxor ABC 1600 [Curt Coder]. Changed code to verify image geometry against floppy drive geometry (formats\jvc_dsk.cpp) [Tim Lindner]. Don't hide diagnostics behind compile-time switch (formats\jvc_dsk.cpp) [Vas Crabb].
- 0.240              : Improved SRA and SRB emulation and added DP8473 reset irq (machine\upd765.cpp) [Sergey Svishchev]. Reimplemented support for the CoCo's RS-DOS filesystem on top of the "fsmgr" framework (currently read only). Added support for file_type and ascii_flag metadata, minor bug fix decoding file allocation table entries. Creating a "CoCo Raw Disk" format and changing the CoCo RS-DOS filesystem to use it. Fix usage message in tools\floptool.cpp: Getting the name of the tool from argv[0] (stop hardcoding floptool.exe). Added missing hddir/hdread/hdwrite declarations. Minor fixes to directory entry handling (formats\fsmeta.cpp, tools\floptool.cpp). Changed to use fsblk_t::r[8|16|24|32]b(). Changed the above functions to be const (formats\fsmgr.cpp) [Nathan Woods]. Enable PC floppy sounds for all the PC FDC variants (isa\fdc.cpp). Check write protect during write & format commands (machine\upd765.cpp) [SomeRandomGuyIdk].
- 0.238              : Wait for sector read/write to complete on interrupt d0-7, fixes (MESS) rmnimbus floppy access errors (machine\wd_fdc.cpp) [prime6809]. Fixed cell size for high density ADFS-F format (formats\acorn_dsk.cpp) [Nigel Barnes].
- 0.237              : Use the command sector size not the address size in read track and set the correct bit in st2 to indicate data crc error (machine\upd765.cpp) [Carl].
- 0.236              : Added head count check (formats\wd177x_dsk.cpp). Prevents further evaluation of incompatible formats [Jesse Marroquin]. Fixed address usage for serial port registers (machine\fdc37c665gt.cpp) [Windy Fairy].
- 0.235              : Fixed segmentation fault saving FM track. Incorrect cell size for FM track results in empty bitstream that ultimately causes data.empty() to seg fault (formats\imd_dsk.cpp) [Jesse Marroquin]. Don't assume string iterators can be indexed (reported by Coverity software) (formats\fsmgr.cpp) [Vas Crabb].
- 0.233              : Added tools\image_handler.cpp/h. Reorganized the floptool code, added some write support (tools\floptool.cpp). Experimental flux viewer, activate by #define FLUX_SCREEN 1 in imagedev\floppy.cpp. Allow the (MESS) vtech floppy with its 32.2us gaps read back unscathed. Changed the formats from an intrusive list to a vector (imagedev\floppy.cpp). Wrap the decoding state in a sub-structure (formats\ipf_dsk.cpp) [O. Galibert]. Disable new code when FLUX_SCREEN is #defined as 0 (and thereby work around crash with some disks) [AJR]. Test to make sure the floppy drive has room for all of the tracks (formats\wd177x_dsk.cpp). Removed tests for head count. Added track count test in check_compatibility() becuase it will segfault if disk drive doesn't have enough tracks (formats\wd177x_dsk.cpp) [Tim Lindner]. Removed legacy pool allocator usage (formats\flopimg.cpp) [Aaron Giles].
- 0.232              : Added bus\qbus\dsd4432.cpp/h, formats\fs_oric_jasmin.cpp/h and formats\fsblk_vec.cpp/h. Start block-devicing filesystem support. First steps on metadata and hopefully make GCC happier on enumerate (imagedev\floppy.cpp and tools\floptool.cpp). Start of read support, experiements in directory tree reading and added file and resource reading (formats\fs_prodos.cpp). Believe it or not, but it seems there has been released pc-format IPFs [O. Galibert]. Temp hack to fix Clang compile (formats\fsmgr.cpp) [R. Belmont]. Be stricter about types (tools\floptool.cpp) [Vas Crabb]. Added dump and skeleton device for Data Systems Design A4432 Floppy Disk Interface [AJR, Bitsavers]. Format/filesystem errors were printing the wrong argument (tools\floptool.cpp) [ksherlock].
- 0.231              : Don't crash when trying to put a 80-track image in a 40-track drive. Do the number of tracks test only on 5.25, 8" and 3.5" is always 80, 3" is always 40 (formats\imd_dsk.cpp). Filter unsupported image formats (formats\upd765_dsk.cpp and wd177x_dsk.cpp) [O. Galibert]. Fixed a bug that caused creation to crash for some subformats (formats\wd177x_dsk.cpp) [AJR].
- 0.230              : Added formats\all.cpp/h, fs_prodos.cpp/h, fs_unformatted.cpp/h, fsmgr.cpp/h and pc_dsk_legacy.cpp/h. Do not crash on damaged disks (formats\upd765_dsk.cpp and wd177x_dsk.cpp). Don't fault on nibble extraction on degenerated tracks (formats\flopimg.cpp). Turn the floppies format arrays into function calls. Create a default "mfm", "fm" and "pc" list of formats. Their contents, and which driver uses what, may need some tuning. Created mame_formats_full_list which gives access to all the supported formats, make floptool use it. Castool should use it too probably, but I don't want to touch it. Refuse 800K images on single-sided drives  (formats\ap_dsk35.cpp). Theoretically support 720K MFM (superdrive; imagedev\floppy.cpp). Beginning of the support for preformatted floppy images. Don't fail creation because the extension is unknown. Make format determination earlier (imagedev\floppy.cpp). Correct index duration (2ms, not 20us) and polarity in superdrive (imagedev\floppy.cpp). Fixed an annoyingly subtle write bug (imagedev\floppy.cpp) [O. Galibert]. Implemented sector-based termination conditions for read commands (machine\upd765.cpp). Reimplemented SMSC FDC37C665GT controller with floppy and parallel support (machine\fdc37c665gt.cpp) [Windy Fairy]. Set form factor for 2MG and DC42 disks so the SuperDrive can handle them. Accept ProDOS-format dc42 3.5" disks (formats\ap_dsk35.cpp) [R. Belmont]. Turned off log output per step (imagedev\floppy.cpp) [Michael Zapf]. Restored legacy pc_dsk floppy support for Imgtool only [AJR].
- 0.229              : Better Apple IIgs floppy interaction and floppy 525 wpt management. Filter out the writes when write protected, useful when the Apple IIgs does a packet send (e.g a write) over DCD with write protect forced on (to avoid damaging a possibly present disk). Ignore set_write_splice when the motor is not running (imagedev\floppy.cpp). Correct setting up of form factor and variant. Don't crash on a fully unformatted disk (formats\mfi_dsk.cpp) [O. Galibert]. Support .2MG images in the new-style apple_gcr_format. Make .2MG its own separate format handler (formats\ap_dsk35.cpp) [R. Belmont]. Fixed issues detected by Coverity Static Analysis (software) (machine\i8271.cpp) [Robbbert].
- 0.228              : Actually build the accepted variants list in floppy (imagedev\floppy.cpp). Provide the variants to the floppy formats. Updated floptool to the new prototypes (tools\floptool.cpp). Fixed precision issue and missing cache clear on write (imagedev\floppy.cpp). Better cell size on save and remove extraneous logging (formats\ap_dsk35.cpp). Changed the extracted bitstreams into vector<bool> and the extracted sectors into vector<vector<uint8_t>>. Added a Mac sector extraction (formats\flopimg.cpp). Generalized track creation/extraction for Apple 3.5 GCR and added a pure sector format (formats\ap2_dsk.cpp). Added dir read on Apple floppies (imagedev\floppy.cpp). When the floppy head stays on an unformatted track from more than an hour and ten minutes and reading happens then interval_index*2+1 overflows. Found and tracked down by Colin Howell, with much thanks (imagedev\floppy.cpp) [O. Galibert]. If an IMD image is 40 track but the drive is HD, put the data on even tracks like hardware would show. Use has_variant() and accept either HD or QD as 80-track drives (formats\imd_dsk.cpp) [R. Belmont]. Clean up time logging (machine\hdc92x4.cpp and i8271.cpp). as_ticks returns a u64, so go unsigned all the way (imagedev\floppy.cpp) [AJR].
- 0.227              : Fixed wrong fill byte after data CRC (had no functional impact) (machine\hdc92x4.cpp) [Michael Zapf].
- 0.226              : Update imagedev\floppy.cpp sound to new stream callbacks [Aaron Giles]. Explicitly emulate reset line (machine\upd765.cpp) [AJR].
- 0.225              : Ignore 84-byte Disk Copy 4.2 header [Justin Kerk]. Use appropriate standard exceptions for reporting errors, allowing libemu to be removed from imgtool and floptool (formats\flopimg.cpp) [Vas Crabb]. Correct register commit delay for WD177x according to datasheet (machine\wd_fdc.cpp) [Nigel Barnes]. Fixed bug when changing IMD image. Some arrays weren't zeroed when changing a IMD disk for saving (formats\imd_dsk.cpp) [lfantoniosi]. Reimplement FDC rate selection and added as standard 16-bit ISA device (isa\omti8621.cpp) [AJR].
- 0.224              : Added legacy floppy image support which is currently required for the mc6843 FDC emulator and used by the EXORset which run XDOS a variant of MDOS. Added support for 5.25 inch XDOS floppy drive formats as used by the EXORset. Make some of the identity tests more permissive to work with observer disks. The date day and month are reversed on some disks, and the boot rib cluster is lower [68bit].
- 0.223              : Added formats\mdos_dsk.cpp/h. Fixed spinup on interrupt command. Do not RESTORE at reset WD1770/72 (machine\wd_fdc.cpp) [MetalliC]. A single missing sector was causing it to give up on an images, as incompatible. Being a little more permissive here helps working with some old recovered disk images with some lost sectors (formats\wd177x_dsk.cpp). MDOS disk format support. Motorola DOS, used on the EXORciser etc. Fixed the cells size and gaps, make clear its Motorola MDOS (formats\mdos_dsk.cpp) [68bit].
- 0.222              : Fixed HFE disk write, this fixes MT07526 [Klaus Kaempf]. Added Dragon DOS disk images [Tim Lindner]. NEC uPD765 family updates: Unmap registers not actually provided for dp8473 and pc_fdc_superio. Increase number of steps for recalibrate command for upd72065, i82072 and smc37c78. Duplicate write protect flag in SR3 for wd37c65c (machine\upd765.cpp). Moved PS/2-class functionality out of base device. SRA and SRB are not mapped in AT mode for n82077aa and pc8477. Increased number of steps for recalibrate command for pc8477a and tc8566af. Improved HLD behavior, always activating output at start of type II & III commands. Use attotime::to_string instead of custom time-to-string method and fixed command logging messages (machine\wd_fdc.cpp). Simplified signatures of most handlers (isa\omti8621.cpp) [AJR]. Be nice and allow to use DS images with SS drives (formats\dsk_dsk.cpp). Improved HLD/HLT handling, fixed FD1771 timings and enable spinup_on_interrupt. Do not delay SEEK with no Verify flag. Improved write protection. set BUSY during initial restore to make it correctly interruptable. Accept new commands while in busy state, workaround for spurious recursive calls if HLD used for drive motor control, don't change track and data registers during reset (machine\wd_fdc.cpp) [MetalliC]. Added ImageDisk IMD save support. Allow to save IMD floppy image disk. Tested on (MESS) Zorba and Kaypro II (formats\imd_dsk.cpp) [lfantoniosi]. Invert signal to seek/step when writing to drive control port. Fixes (MESS) BBC Micro Model B solidisk DFS (8271) returns diskfault (machine\i8271.cpp).
- 0.221              : Added NEC uPD72067 FDC stub [Patrick Mackinlay]. Simplified handlers (machine\wozfdc.cpp) [Osso]. Save INTRQ and DRQ states (machine\wd_fdc.cpp). Added note on wd37c65c map use (machine\upd765.cpp). Case of the missing floppies solved (isa\fdc.cpp) [AJR]. Reduced dependencies on libemu (lib\formats\*.cpp) [Vas Crabb]. DMA fixes (machine\upd765.cpp) [Patrick Mackinlay]. Simplified some handlers (machine\atarifdc.cpp) [Osso].
- 0.220              : Added formats\ibmxdf_dsk.cpp/h. Added IBM Extended Disk Format support [Sergey Svishchev]. Added a MON callback so that drives, which are unselected early, do not spin forever. Changed spindown delay to 9 revs according to specs, added MON clearing directly in master reset (machine\wd_fdc.cpp) [Michael Zapf].
- 0.219              : Use splice position recorded in the image, if available (formats\aim_dsk.cpp) [Sergey Svishchev]. Generalized to allow custom track format variations. Added a get_track_format() method that can be overridden to supply formatvariations for any track and head. The code is generalised to account for such variations. The default method returns the passed format, so this change is neutral for existing formats (formats\wd177x_dsk.cpp). Simplified the FLEX DSK format code. There are now simply format variation descriptions for the second track that have the sector ID continuing in sequence from the first track, rather than specialized code. Extended the FLEX format to support variations in the sectors ID of the first two sectors. The FLEX 6800 boot sectors have IDs based at zero rather than one. Extend the FLEX format to support variations for which the first track, on both sides, is single density on an otherwise double density disk which was historically a common format. Included an identify() method. It is necessary to return a higher score on success, higher than returned by the default method, in order for a general 'identify' to succeed over competitive matches (formats\flex_dsk.cpp). Extended the OS9 disk format to support variations for which the first track, on only the first side, is single density on an otherwise double density disk. OS9 for the SWTPC and Gimix typically used such formats. Extended the OS9 disk format to support variations with a base sector ID of zero in contrast to the existing COCO OS9 format which uses a based sector ID of one. The OS9 format identification code is extended to rely on the optional information stored in the OS9 LSN0 header to identify COCO format disks, and all COCO format disks appear to have this optional information in a regular enough format (formats\os9_dsk.cpp) [68bit]. Condition command completion interrupt on busy flag having been set (machine\wd_fdc.cpp). The logic for dropping the busy flag and raising INTRQ still seems a bit questionable, but at least the Pied Piper does not like spurious interrupts to occur from these conditions when 0xd0 is in the command register (and the busy flag that indicates that a command is in progress is therefore not set). Increased HLD idle timeout to 15 revolutions except for FD1771 and FD1781 (machine\wd_fdc.cpp) [AJR].
- 0.217              : Emulation of isbc202 floppy disk controller. Implemented save in IMG disk format (formats\img_dsk.cpp) [fulivi].
- 0.216              : Get rid of the hardcoded FLOPPY_n tags as much as practical, mostly adding device finder arrays in their place. Moved remaining functions using FLOPPY_n down into appldriv and sonydriv (both of which may be eliminated once FDC emulation is modernized). Replaced CLEAR_LINE and ASSERT_LINE with 0 and 1 (these were being inaccurately used to represent active-low control line states) (imagedev\flopdrv.cpp) [AJR].
- 0.215              : Changed Interrupt command logic based on WD1772 and VG93(1793 clone) decaps (machine\wd_fdc.cpp) [MetalliC]. Fixed FDC mode being treated as clock frequency (MCFG removal gone wrong) (machine\upd765.cpp) [Vas Crabb].
- 0.213              : Added formats\uniflex_dsk.cpp/h. Added a SSO callback (machine\wd_fdc.cpp). Some machines do not connect the SSO output to control the floppy side. When this new callback option is used the wd_fdc no longer controls the floppy, rather calls the SSO callback. Added a UniFLEX specific floppy format. The UniFLEX disk format is not compatible with the Flex format. Significantly it does not use a mix of single density for booting on some double density disks which makes it simpler - hardware required a new boot ROM to run UniFLEX. Further, the UniFLEX sector size is 512 bytes versus 256 for Flex, and the UniFLEX 'SIR' info sector record is completely different to the info on Flex disk, and the file system format is also not at all compatible. Thus the UniFlex format can rely largely on the WD17xx format, with an overload to handle the sector numbering on the second side continuing from the first side (one feature in common with the Flex format). This gives a quick 'save' capability and shares code. Support for 8" disks is included as this was the initial distribution format and the only one found so far. Rewrote Flex dsk to be based on the wd177x dsk format (formats\flex_dsk.cpp). This now works with both single density and double density floppy disks, and dynamically identifies boot sector IDs required for 6800 booting, and supports writing back to the 'dsk' image files [68bit].
- 0.212              : First stab at weak zones handling (imagedev\floppy.cpp) [O. Galibert]. Added basic emulation of agat9 (video, apple compat mode, LLE floppy) and MX floppy format [Sergey Svishchev]. Surpass some copy-protected tracks (formats\dsk_dsk.cpp) [AmatCoder].
- 0.211              : Don't let the absence of the new callback break the device. Emulated writes to master reset line; allow read side effects to be disabled. Adopt new mr_w handler in various drivers (machine\wd_fdc.cpp) [AJR].
- 0.210              : Uncluttered global name space as per Vas suggestion (formats\flopimg.h) [Joakim Larsson Edstrom]. Clean up some stuff (formats\jvc_dsk.cpp and os9_dsk.cpp) [Vas Crabb].
- 0.209              : Eliminated floppy_get_count (imagedev\flopdrv.cpp). Drive selection improvements: Deselect drives upon reset, or select drive 0 for older FDCs with multiplexed select lines. Deselect other floppies when using set_floppy (machine\upd765.cpp). Added uPD72069 device type for (MESS) MPC-3000. Allow second clock to be configured (not used yet) (Western Digital WD37C65C FDC; machine\upd765.cpp) [AJR]. Implemented threshold to accept disk images with a few excess and empty tracks at the end used by HFE and DSK loaders for now (formats\dsk_dsk.cpp, flopimg.h and hxchfe_dsk.cpp) [Joakim Larsson Edstrom].
- 0.208              : Fixed Speedlock copy protection regression (machine\upd765.cpp) [Michael Zapf]. Simplified read/write handlers (machine\hdc92x4.cpp). Simplified read/write handlers (machine\upd765.cpp and i8271.cpp). Allow read side effects to be disabled (machine\upd765.cpp) [AJR]. Avoid segfault if double sided DSK image is loaded on simple sided disk device. MAME crashed if user was trying to load a dsk image with more heads or tracks than disk device supports. Now the error 'Incompatible image format' is raised (formats\dsk_dsk.cpp). Correct result from Read ID when scan failed. Result from Read ID must be the sector ID information during execution phase. So result must be: Zeroes if not ready (execution phase is not reached). Command codes if ready but scan failed (execution phase is reached but ID is not found). This patch fixes this. If scan is correct then result is the ID information from sector found. Fixes disk version of (MESS) Amstrad CPC6128 game "Perico Delgado Maillot Amarillo" stucks in fourth level/black screen (machine\upd765.cpp) [AmatCoder].
- 0.206              : Added output callback for unit/drive select lines. This is intended for future use by machines in which the US/DS lines are neither directly connected to the drives nor wholly disconnected from them (machine\upd765.cpp) [AJR].
- 0.205              : Fixed "Read Only" access mode (the flag was not respected; ui\floppycntrl.cpp) [AJR]. Make formats\upd765_dsk.h slightly safer with defualt initialisers for key format members. Changed signature of stuff in imagedev\floppy.h to hint that it needs an array, not just a pointer, although it doesn't actually warn if you just give a pointer anyway [Vas Crabb]. Added (mostly standard) clocks to all UPD765 devices in the family. These clocks are currently unused, and their sources and dividers are often unclear. In some cases they are clearly software-configurable, which has not been emulated at all [AJR].
- 0.204              : Avoid to use uninitialized booleans (formats\dsk_dsk.cpp). Fixes (MESS) Amstrad CPC6128 DSK images reading. Thanks to Klez for testing [AmatCoder].
- 0.202              : Sectors must be read even if it contains Deleted Mark. FDC will read the data if SK bit is not set (formats\dsk_dsk.cpp). Fixes some disk games gives error when running in (MESS) Amstrad CPC6128 [AmatCoder]. Removed WD1773 MCFG macros [Osso].
- 0.201              : Added some sanity checking on geometry to formats\imd_dsk.cpp. Added debug asserts to help catch geometry errors (formats\flopimg.h) [AJR]. Fixed FIFO mess-up on unexpected FIFO pushes on HX5102 floppy drive (machine\upd765.cpp). Added a minimum head load time to compensate for the floppy spin-up (machine\hdc92x4.cpp) [Michael Zapf]. Simplified API of machine\wd_fdc.cpp [O. Galibert]. Added AUX commands to upd72065. Added upd72065 to (MESS) MPC-3000 [Carl].
- 0.200              : Fixed long-standing disk-switch regression (machine\sonydriv.cpp) [R. Belmont]. Mostly tiying up and simplifying the i82072 behaviour; the only change that could potentially impact other upd765 users is marking the st0_filled after every interrupt-generating command ends, rather than only the non-data ones. This appears to be correct behaviour, and will only affect systems which actually do a "sense interrupt status" after a command-completion interrupt (like the (MESS) InterPro does). Report valid interrupt sense data after all interrupt-generating commands. Improved i82072 drive busy handling and motor control (machine\upd765.cpp) [Patrick Mackinlay].
- 0.199              : Improved logging, removed status flag ST1.ND on missing IDAM/DAM and added HEAD_LOAD state, used as a spinup delay by some systems (machine\upd765.cpp) [Michael Zapf].
- 0.198              : Added Apple II WOZ format [O. Galibert]. Created floppies need to be initialized the same way as loaded floppies [Dirk Best]. Fixed bitrate autodetect (formats\hxchfe_dsk.cpp). Added logmacros to upd765 [Michael Zapf]. Made floppy emulation more robust and improved bitstream handling [John Keoni Morris, Peter Ferrie, Olivier Galibert].
- 0.197              : Minimal improvements on the disk handling. Keeping the 35 tracks drive as an option. Reducing the crashes a bit more. This helps matching the form_factor and the parameters found in the TeleDisk images, thus exiting before a serious crash. It is NOT enough to improve the 8" disk image handling, nor it solves all the stability problems, but it is a tiny step forwards (formats\td0_dsk.cpp) [Stefano]. Added FM resyncs in READ_TRACK and changed threshold (machine\wd_fdc.cpp) [Michael Zapf]. Check status bits in SR2 - CPC DSK format (formats\dsk_dsk.cpp) [Sergey Svishchev].
- 0.196              : Added notes (formats\jvc_dsk.cpp) [Nigel Barnes].
- 0.195              : Support bad crc (formats\d88_dsk.cpp) [Carl].
- 0.194              : Use calculated access times for WD2010 - typical for MFM drives of that age - instead of hard-coded values [Bavarese]. Fixed AddressSanitizer: FPE with -flop asndware in (MESS) Compucolor II (formats\ccvf_dsk.cpp). Fixed drive lookup in machine\atarifdc.cpp. Got rid of bogus default drive in lookup functions, avoid some potential nullptr dereferences and made floppy_get_drive() internal for imagedev\flopdrv.cpp. Removed usage of floppy_get_drive() in machine\thomflop.cpp. Fixed Coverity "Double Free" warning (imgtool\module\fat.cpp) [Firewave]. Added (MESS) Dragon Premier FDC for DeltaDOS. Dragon FDC has READY line tied, fixes loading issues with Flex and OS9. Added floptool (tools\floptool.rst) [Nigel Barnes]. Added some safety checks to avoid reading beyond the end of file (formats\d88_dsk.cpp) [Dirk Best].
- 0.193              : Fixed mounting Zenix floppy disk in (MESS) Color Computer 3 crashes MAME with floating point exception error (formats\jvc_dsk.cpp) [Dirk Best]. Updated debug printouts to use logmacro.h LOG messages (machine\wd_fdc.cpp) [Joakim Larsson Edstrom].
- 0.192              : Don't segfault on empty tracks, fixes (MESS) Einstein 4game (formats\dsk_dsk.cpp). Added TEAC FD-30A 3 inch floppy drive [Dirk Best]. Converted line handlers to READ/WRITE_LINE_MEMBER to make them DEVCB-accessible (machine\wd_fdc.cpp) [AJR]. Added Acorn Atom floppy formats (tools\floptool.cpp) [Nigel Barnes]. Support images with 41 tracks (Kryoflux dtc produces these for some nominally 40-track disks) (fixes (MESS) bivouac from ibm5150_flop.xml) [Justin Kerk].
- 0.191              : Don't set mon_w(0) if there's no image otherwise you have to insert, remove and insert a disk again before ready is set (imagedev\floppy.cpp) [Carl]. Added special case i82072 drive busy bit handling (machine\upd765.cpp), fixes Amstrad CPC6128 freezes the emulator after loading a disk [Patrick Mackinlay]. Improved identifying SSD/DSD by comparing image size with sector counts (formats\acorn_dsk.cpp). Fixed DDCPM format to handle correct image of Double Density CP/M. Added Acorn floppy formats (tools\floptool.cpp) [Nigel Barnes]. Fixed crash loading 80-track .mfm dumps of 40-track disks on 40-track drives (formats\hxcmfm_dsk.cpp) [Justin Kerk]. Don't change sides if the drive has only one head (imagedev\floppy.h) [Curt Coder].
- 0.190              : Added drive LED callback. This currently only works if you set the drive select lines correctly, which the upd765 does now. Hook it up to (MESS) Kontron PSI98 and use the TEAC FD-55F drive instead of the generic one [Dirk Best]. Added support for i82072 including sense interrupt status logic and motor on/off logic (machine\upd765.cpp) [Patrick Mackinlay].
- 0.189              : Autodetect double sided floppy images without header and improved support for headerless OS-9 images (formats\jvc_dsk.cpp) [Dirk Best]. Added FLOPPY_HFE_FORMAT to default_floppy_formats [Nigel Barnes].
- 0.188              : Correct ITT3030 70 track drive type and added 35 drive type and format definition [helwie44 and rfka01].
- 0.187              : Added read support for the disk format SDF used in the CoCoSDC. Fixed JVC disk format to correctly recognize 2 sided disks [Tim Lindner].
- 0.186              : Fixed for a segfault when emulating HP9895 drive [F.Ulivi].
- 0.184              : Added tag command names in debug messages (machine\wd_fdc.cpp). Removed tag() argument from logerror() calls in imagedev\floppy.cpp. Inform disk image of step operation so it can cache information (floppy_stp_w) [Sergey Svishchev]. Added missing operator* to multiply an attotime by a double (machine\fdc_pll.cpp) [F. Ulivi].
- 0.183              : Propagate CRC error flags (CRC_ERROR_IN_ID_FIELD and CRC_ERROR_IN_DATA_FIELD; formats\dsk_dsk.cpp) [Sergey Svishchev].
- 0.182              : Support 360K images with 512-byte header, found in some softlist entries (formats\pc_dsk.cpp) [Justin Kerk]. Inhibit reading/stepping until drive has spun up; this concerns drives/controllers that do not use the READY line. Added TODO comments; revert stp_w ignore on spin-up until further evidence [Michael Zapf]. Write line member for terminal count line of upd765 [Patrick Mackinlay]. Assume a smaller gap size to allow 400K disk images to load. Fixes e.g. ikari and marble from the ibm5150 softlist. Handle 1.44MB images with 1,024-byte footer, which have turned up in a couple places [Justin Kerk]. Don't crash on tracks with no data (formats\imd_dsk.cpp). Accept images produced from 8" SSSD disks in TeleDisk loader (formats\td0_dsk.cpp). Added 'dskchg_writable' property (for Sony Microfloppy drives). Added has_trk00 property, initially for IBM 6360 8-inch drives. Allow override of build_sector_description, like nec765_dsk (formats\wd177x_dsk.cpp). Minor floppy internals improvements (imagedev\floppy.cpp) [Sergey Svishchev].
- 0.181              : 8" motor on for create too (imagedev\floppy.cpp) [Carl]. Added a configuration for disable the motor control when MO line is not connected (machine\wd_fdc.cpp) [Sandro Ronco].
- 0.177              : Added samples\floppy\35_seek_12ms.wav, 35_seek_20ms.wav, 35_seek_2ms.wav, 35_seek_6ms.wav, 35_spin_empty.wav, 35_spin_end.wav, 35_spin_loaded.wav, 35_spin_start_empty.wav, 35_spin_start_loaded.wav, 35_step_1_1.wav, 525_seek_12ms.wav, 525_seek_20ms.wav, 525_seek_2ms.wav, 525_seek_6ms.wav, 525_spin_empty.wav, 525_spin_end.wav, 525_spin_loaded.wav, 525_spin_start_empty.wav, 525_spin_start_loaded.wav and 525_step_1_1.wav. Drop redundant tag() in logerror calls (machine\upd765.cpp) [Sergey Svishchev]. Less errorlog spam (machine\upd765.cpp) [Curt Coder]. Fixed an issue with legacy floppy loading caused by filetype() now being a std::string (imagedev\flopdrv.cpp and formats\flopimg.cpp) [Nathan Woods]. Improved floppy sound emulation. Added new floppy sound samples [Michael Zapf].
- 0.176              : Changed formats\bbc_dsk.cpp/h to formats\acorn_dsk.cpp/h. Added more logging to formats\fsd_dsk.cpp. Splitted ssd/dsd formats. Added opus ddos format. Splitted adfs into oldmap and newmap formats for Archimedes [Nigel Barnes].
- 0.175              : Added logging to formats\fsd_dsk.cpp [Nigel Barnes]. Suppress index pulse irq when busy (machine\wd_fdc.cpp). Did bunch of testing, found no regressions but nothing that even enables the index pulse irq other than the (MESS) Rainbow [Carl].
- 0.174              : Workaround for MT06194, potential segfault during floppy load (imagedev\floppy.cpp and formats\upd765_dsk.cpp) [AJR]. Don't fail immediately on wrong cyl (machine\upd765.cpp) [Carl].
- 0.173              : Added more floppy debugging and fixed DMA masking in (MESS) ROLM 9751 [Brandon Munger].
- 0.172              : Indicate ready status in st0 after seek (machine\upd765.cpp) [Carl].
- 0.172              : Fixed subtle interaction between wd_fdc initial restore and floppy reset [O. Galibert]. Renamed ioprocs parameters from "generic" which MS C++ compiler treats as keyword when compiling with /ZW (formats\ioprocs.cpp) [Brad Hughes]. Moved PDC floppy command trigger to correct register in (MESS) ROLM 9751 Model 10 [Brandon Munger].
- 0.168              : Added formats\fsd_dsk.cpp/h. Preliminary FSD format support for BBC [Nigel Barnes]. Support 36-track Apple II NIB images [Peter Ferrie]. Improved machine\wozfdc.cpp (much less CPU usage now!) [O. Galibert].
- 0.167              : Added samples\floppy\floppy_525_motor_end.wav, floppy_525_motor_loop.wav, floppy_525_motor_start.wav and floppy_525_step1 - 5.wav. Fixed FDD sounds [kara1001000]. Slight I8271 improvement for the (MESS) Acorn BBC Micro [Carl]. Changed rules of "ready" signal on drives with motor that always spins (imagedev\floppy.c). Fix for (MESS) Intel Intellec MDS-II driver after I8271 modernization [F. Ulivi].
- 0.166              : Added 80 trak format to (MESS) Vector 06c [MetalliC].
- 0.165              : Added samples\floppy\floppy_35_motor.wav and floppy_35_step.wav. Don't truncate if format doesn't support save (imagedev\floppy.c) [Carl]. Added Floppy sounds and samples (floppy_35_motor and floppy_35_step). Step sound is now triggered on edge, not level. Added some state save items (imagedev\floppy.c). Invoke step on cylinder change [Michael Zapf].
- 0.163              : Added formats\bbc_dsk.c/h, cd90_640_dsk.c/h, jvc_dsk.c/h, pk8020_dsk.c/h, vdk_dsk.c/h and 2d_dsk.c/h. Renamed formats\trs_dsk.c/h to trs80_dsk.c/h. Removed formats\atarist_dsk.c/h, vtech1_dsk.c/h, z80ne_dsk.c/h and machine\wd17xx.c/h. Check if the timer for sector register update is already running, fixes bbc format command (machine\wd_fdc.c). Updated (MESS) BBC Micro to use the new wd_fdc. Until the 8271 floppy controller is updated, drive 0 and 1 = 8271 and drive 2 and 3 = wd_fdc. Changes to wd_fdc to get (MESS) Nuova Elettronica Z80NE booting (also fixed Colour Genie EG2000 fm mode). Force interrupt is executed without delay. On receiving a command, immediately set busy. Fixed missing setting of ddm in fm mode. Removed custom dmk implementation. Added support for the enmf (enable minifloppy) pin, which enables an internal clock divider for some operations (machine\wd_fdc.c). Updated Microbee and Siemens PC-D to take advantage of this, both systems now boot without patches. After a wd_fdc force interrupt command, return status type 1 (fixes SAM Coupe). Clear wd_fdc head load after 3 disk revolutions, fixes z80netf format command. Updated bml3mp1802, coco, dgn_beta, dgnalpha, fm7, hec2mdhrx, mbc200, mbc55x, mz2000, mz2500, pk8020, rm380z, smc777, svi318, swtpc09, thompson, trs80, vector06. x1/x1twin, z100 and Z80NE to use the new WD FDC. Formatting disks now works in x1/x1twin hubasic. Removed support for the old wd fdc in excali64 since the new one works fine. Save all possible data sectors in fm mode (formats\flopimg.c). Added support to mark tracks as deleted data (formats\wd177x_dsk.c). Fixed plain sector disk images (formats\cgenie_dsk.c). Cleanup formats\vdk_dsk.c. Updated apridisk for new floppy system (formats\apridisk.c) [Dirk Best]. Allow ENMF line to be switched [Robbbert]. Fixes wd_fdc to get BetaDisk work without patches. Separated soviet FD179x clone (machine\beta.c) [MetalliC]. Solved the great Sherwood Forest mystery. DOS 3.3 inserts a short (3-4 cycles, roughly equivalent to one bit) delay between writing the header and the data bytes in the sector data block [Peter Ferrie, Olivier Galibert, Richter Belmont]. Ensure that get_next_transition always provide the next transition (imagedev\floppy.c) [O. Galibert].
- 0.162              : Added formats\cgenie_dsk.c/h. Return 0xff when reading from FIFO while busy (machine\upd765.c) [Carl]. Only return index pulse status in status type 1 mode (machine\wd_fdc.c). Fixes Nascom formatting. Added a function to return the number of sides the drive has and truncated files to new size on save (imagedev\floppy.c). Improved automatic format choice (formats\wd177x_dsk.c). Added support for the CP/M disk formats, use single sided formats first that are compatible with all drives (formats\nascom_dsk.c). Proper support for single/double sided disk drives and hook up ready line and motor off control, fixes format command (nasbus\floppy.c). Fixed floppy disk image creation from command line. Removed old broken Colour Genie EG2000 floppy implementation, added an expansion bus interface, implemented new floppy controller as expansion device. Works with mfi files, still some issues with plain sector dumps. Simplify interrupt logic and added support for the density switch (cgenie\expansion\floppy.c) [Dirk Best]. Added some RWTS18 title IDs (formats\ap2_dsk.c) [Peter Ferrie]. Interrupts take priority (machine\wd_fdc.c) [O. Galibert].
- 0.161              : Added formats\abcfd2_dsk.c/h, c3040_dsk.c/h, c4040_dsk.c/h and c8280_dsk.c/h. Removed formats\d67_dsk.c/h. Emulated the Scandia Metric ABC FD2 floppy controller for (MESS) Luxor ABC 80. Implemented write mode on the Commodore 8050/8250/SFD-1001 floppy drives. Removed write_next_bit_prev_cell hack (machine\fdc_pll.c). Implemented writing to Commodore d64/d67/d71/d80/d82 sector images. Added sector image format for the Commodore 8280 8" floppy drive. Added writing to sector dump disk images for victor9k. Added own sector dump disk format for C4040 since it's different from what the 1541 uses. Added C3040 disk format [Curt Coder]. Fixed crcs and mfm clock bit update (formats\flopimg.c) [Olivier Galibert]. Implemented disk writing for IMD format (formats\imd_dsk.c) [F. Ulivi].
- 0.160              : Show busy status for a moment if seeking to current track (machine\wd_fdc.c) [Carl]. Added a sanity check for TI99 disk format detection and a non-locking Alphalock [Michael Zapf].
- 0.159              : Removed formats\mbee_dsk.c/h. Verified gaps and base class for KAY format (formats\kaypro_dsk.c) [O. Galibert]. (MESS) Beta Disk interface convert to wd_fdc [MetalliC]. Added empty formats[] member, to keep Clang happy (formats\flex_dsk.c) [Barry Rodewald]. Enabled I_IMM to be set (machine\wd_fdc.c) [Carl, Al Kossow]. Reduced the flux inversion pulse duration to the minimum (machine\wozfdc.c) [Peter Ferrie, O. Galibert]. Support oversized Apple II EDD images (formats\ap2_dsk.c) [Peter Ferrie].
- 0.158              : Support 800k ProDOS order (.po) disks (formats\ap_dsk35.c). Don't allocate 2MB of *stack*, malloc() instead (formats\ap2_dsk.c). Initialise error code instead of crashing when menu loads bad image (imagedev\floppy.c) [Peter Ferrie]. When ESCing while creating a new floppy image, fall back to the correct UI menu (imagedev\floppy.c) [Fabio Priuli].
- 0.157              : Added formats\dcp_dsk.c/h, dip_dsk.c/h, c8050fdc.c/h, excali64_dsk.c/h, fdd_dsk.c/h, nfd_dsk.c/h, pc98fdd_dsk.c/h. (MESS) Victor 9000 floppy WIP. Added write_next_bit_prev_cell() that writes a bit at the position the previous bit was read from. This is needed for FDC's that read and write on the same clock cycle, e.g. the Commodore 8050 and Victor 9000 (machine\fdc_pll.c and victor9k_fdc.c). Patched out floppy SCP self test temporarily, CPM86 boots now but hangs while loading menu. CBM 8050 Floppy WIP [Curt Coder]. NEC PC9801: Added preliminary support for disks in DCP, DCU, DIP and NFD formats. Added support for disks in .fdd format [Fabio Priuli]. Include cylinder in savestate (imagedev\floppy.c) [Peter Ferrie]. Starting to add floppy support to (MESS) Excalibur 64 [Robbbert]. Moved some includes around to fix compile errors on OSX [Wilbert Pol].
- 0.156              : Added osd\sdl\man\floptool.1, formats\victor9k_dsk.c/h and machine\victor9k_fdc.c/h. Fixed usage of uninitialized member in wd1770_device (machine\wd17xx.c) [Oliver Stoeneberg]. Fixed broken detection of disk (formats\ap2_dsk.c). Support some incorrect images (formats\d88_dsk.c) [O. Galibert]. (MESS) Victor 9000 floppy WIP [Curt Coder]. Included modern .dsk format among default supported formats [Riley110].
- 0.155              : Added formats\concept_dsk.c/h, cqm_dsk.h, dmk_dsk.c/h and dmv_dsk.c/h. Allow kc85_[2-5] to boot from floppy again (bus\kc\d004.c, formats\kc85_dsk.c). Added read-only support for CopyQM images [Sandro Ronco]. Fixed usage of uninitialized member in upd765_family_device. Replaced a few more exit() calls with fatalerror() (formats\apridisk.c and d64_dsk.c) [Oliver Stoeneberg]. Added 8 inch floppy drive support to Gimix 6809 System [Barry Rodewald]. Handle half and quarter tracks (formats\flopimg.c and mfi_dsk.c). Added some floptool formats (mess\tools\floptool\main.c). Don't infloop in set_write_splice when there's no floppy (imagedev\floppy.c; fixes MT05672). Fixed leaks (formats\mfi_dsk.c) [O. Galibert]. Don't trash a bunch of memory when loading legacy floppies (formats\flopimg.c). Support ProDOS-order Pascal 1.3 images (formats\ap2_dsk.c). Stop trashing DiskCopy 4.2 images that don't have tags (formats\ap_dsk35.c). Added 5.25" DSDD raw image support and preliminary pseudo-DMA to buffered controller (formats\concept_dsk.c) [R. Belmont]. Added NCR Decision Mate V format (dmv_dsk.c) [rfka01, Sandro Ronco]. Changed in find_position to avoid missing edges that are very close to a window end (imagedev\floppy.c). Removed some debugging output; fixed FM value for Index AM (machine\wd_fdc.c) [Michael Zapf]. Added support for 81 track images (formats\msx_dsk.c). Added support for DMK floppy images [Wilbert Pol]. UI: Fixed crash when loading floppies with no parent software from softlist (only via internal File Manager, though). Fixed disks not being launched if loaded from softlist through File Manager (Note: Until we support writing changes to diff, it is also safer to treat disks in softlists as read-only (imagedev\floppy.c) [Fabio Priuli]. Hopefully fix reading sectors with DDAM (machine\wd_fdc.c) [lowen, O. Galibert].
- 0.154              : Added formats\rx50_dsk.c/h and flex_dsk.c/h. Cleanup formats\td0_dsk.c. 1.2MB floppies have 80 tracks (formats\pc_dsk.c). Implemented scan data and read track for upd765. Fail command when drive not ready and check ready before command (verified on real hardware). Stop polling when first byte of command sent (verified). Drop the polling irq when anything is written to the controller in command mode (verified on actual hardware) (machine\upd765.c) [Carl]. Fixed usage of uninitialized members in wd1770_device and c2040_fdc_t. Fixed memory leaks in floppy_image_device [Oliver Stoeneberg]. Call the intrq and drq callbacks when drq and/or intrq are cleared during a reset (machine\wd_fdc.c). MSX floppy cleanup (formats\msx_dsk.c) [Wilbert Pol]. Fixed ipf_dsk.c. VZ300 floppy: Initial modern implementation (bus\vtech\memexp\floppy.c and imagedev\floppy.c) [O. Galibert]. Converted wd17xx to DEVCB2 and cleanup. Hold DRQ in status register until scan ID command has been fully read (machine\wd_fdc.c). This fixes Osborne 1/2 [Curt Coder]. Fixed assorted wd17xx related regressions (drivers\fm7.c, osbexec.c and svi318.c) [Osso]. Converted wd17xx to use inline configs [Fabio Priuli]. Rainbow specific; The RX50 _disk drive_ was used in different architectures. Floppy format used by Rainbow-100 and -190. Track layout (post-amble, some positions) yet unverified. Currently only raw 400 K disk dumps are supported (*.img) [Bavarese]. Fixed 2HS image loading (can now boot Illumination LASER from floppy) (formats\dim_dsk.c). Added support for Flex DSK disk images, will now boot Gimix Flex 3.3. Added support for some double-sided disk sizes. 800KB disk images are now readable (formats\flex_dsk.c). Added workaround for Gimix Flex 3.6 expecting tracks 1 and 2 to be MFM. It will now also boot (formats\flex_dsk.c). Correct Gimix FDC clock, Gimix Flex 4.3 is now bootable (formats\flex_dsk.c) [Barry Rodewald]. Apple3 now using the cycle-accurate floppy emulation [R. Belmont].
- 0.153              : Added docs\floppy.txt, formats\d71_dsk.c/h, d82_dsk.c/h, fmtowns_dsk.c/h, naslite_dsk.c/h, bus\ieee488\c2040fdc.c/h and c8050.c/h. Fixed the FM sync detection (machine\wd_fdc.c). Prevent clock bit to be deleted after CRC in FM. Fixed sector extract for FM recording (formats\flopimg.c). Allow to overwrite find_size and customize offset computation (formats\wd177x_dsk.c). Minor changes to tifdc; added 360K MFM format to ti99_dsk. Added trace switch to control log output (imagedev\floppy.c). Moved sbyte_mfm_r out of private area to make it accessible to format implementations (formats\flopimg.c). Fixed gap2 creation during write_sector and added debugging output (machine\wd_fdc.c). TI99 Floppy modernization [Michael Zapf]. Fixed bug when inserting images after starting the floppy motor (imagedev\floppy.c). Added EPSON drives. Added epson smd-165, used in the pf10. Added the Motorola MCS3201 (machine\upd765.c) [Dirk Best]. Added preliminary support for the 8-N-1 serial encoding scheme used on Compucolor II floppies (formats\flopimg.c). Refactored the Commodore 1541/1551/1571/2031 disk drives to use the modern floppy system. Refactored the Commodore 2040/3040/4040 disk drives to use the modern floppy system. Fixed C2040 READY signal. Added "read_only" feature to the software list to denote write protected images (emu\diimage.c). Bounty Bob Strikes Back! (C64) will not load if disk is not write protected. Fixed software list regression. Added bit cell size detection on save (formats\g64_dsk.c). PC: Added support for NASLite 1.72MB disk images. PC: Added support for Microsoft DMF 1.68MB disk images. Fixed memory leak (formats\ccvf_dsk.c). Added ATTR_DEPRECATED to machine\wd17xx.h. Refactored machine\wd_fdc.c to use DEVCB2 callbacks. Refactored upd765 to use DEVCB2 callbacks [Curt Coder]. Legacy wd17xx is now also a modern device. Modernized access for legacy floppy, quite straight forward thing. Fixed initialization of legacy floppy (imagedev\flopdrv.c) [Miodrag Milanovic]. Floppy subsystem documentation (incomplete; docs/floppy.txt). Formats detected with size only should not have a confidence higher than 50 (formats\ti99_dsk.c). Fixed write over the index pulse and flux change lookup before it [O. Galibert]. Correct Applix 1616 file-ext of disks (formats\applix_dsk.c) [Robbbert]. Converted FM-Towns to use wd_fdc and modern floppy drive implementation [Barry Rodewald].
- 0.152              : Added formats\abc800_dsk.c/h, itt3030_dsk.c/h and bus\isbx\isbc_218a.c/h. (MESS) ABC 800: Added support for raw 640KB disk images. Added support for raw 1MB 8" disk images. Added support for raw 80KB and 160KB disk images. Fixed formatting on the ABC 830/832/834/838 floppy drives (formats\abc800_dsk.c). wd_fdc: Fixed ready interrupt polarity. Added a soft_reset() function which resets only the FDC and not the floppy image devices, thus preserving the correct ready states. Fixed 80KB floppy cell size. Adam: Added a second floppy drive and verified 160KB floppy image gap sizes. Tiki100: Floppy WIP. COMX35: Updated notes, floppy is actually working now. Fixed CPU clock and floppy interface. wd_fdc: Set CRC error bit if CRC error found during Read Address command. Tiki 100 determines whether the disk is in FM or MFM format by checking this [Curt Coder]. ISBC: Added isbx-218a floppy controller. upd765: Make soft_reset public so controller resets don't reset the fdds. Fixed sense drive status command, and allow floppy connectors without drives [Carl]. Start adding to the ITT 3030 skeleton [rfka01, R. Belmont].
- 0.151              : Added emu\bus\isbx\compis_fdc.c/h. Compis FDC WIP. Connected the Compis FDC via the iSBX bus [Curt Coder]. Removed unnecessary #includes (machine\isa_fdc.c) [smf].
- 0.150              : Added formats\kaypro_dsk.c/h and pc98_dsk.c/h. Added back the Kaypro DSK format (still doesn't work!) [Robbbert]. Fixed memory leak (formats\wd177x_dsk.c). Fixed ready handling, allow ready connected to vcc and Data overrun drops drq (machine\wd_fdc.c) [O. Galibert]. Fixed null sector case (formats\td0_dsk.c) [Carl]. Added raw formats for PC-98 and .hdm -> another raw image format, used by add_ssil so far [Angelo Salese]. Don't switch off the motor when the FDC doesn't have a motor control pin (machine\wd_fdc.c) [O. Galibert, Duke]. Added a bunch of floppy drives (imagedev\floppy.c) [Dirk Best]. Removed useless unsigned variable checks in formats\ap_dsk35.c [Oliver Stoeneberg].
- 0.149u1            : Added formats\mbee_dsk.c/h. Removed formats\bml3_dsk.c/h. Added Z-RAM floppy (hash\pet_flop.xml) [Mike Naberezny]. Do the on-reset restore slightly differently (machine\wd_fdc.c) [O. Galibert]. Splitted bml3 into three variants (bml3, bml3a and bml3b) according to floppy disk support. Only bml3a (5.25" disk) is considered working. Fixed uninitialized variable reported by GCC 4.4.7 [jedwidz]. Differentiate legacy from new hotness (machine\wd17xx.c) [Tafoid]. Converted mbee to modern fdc, still doesn't work though [Robbbert]. Fixed compile (formats\flopimg.h) [hap].
- 0.149              : Added formats\applix_dsk.c/h, bml3_dsk.c/h, ep64_dsk.c/h and td0_dsk.h. Ignore unformatted tracks in dsk files (formats\dsk_dsk.c) [smf]. Added new floppy system support for teledisk (formats\td0_dsk.c). Lots of conflicting info out there, need more samples (8", fm). Be more permissive of disk types. Make sure header magic is same case and include cell calc from OG (imagedev\floppy.h and formats\td0_dsk.c). Clear seek irq before new seek (machine\upd765.c) [Carl]. Set st0_filled only if not accessing data (machine\upd765.c). Fixed incorrect sector size bug preventing standard DSK images from working (formats\dsk_dsk.c) [Barry Rodewald]. (MESS) bml3.c disk support [jedwidz].
- 0.148u5            : Added formats\asst128_dsk.c/h. Fixed V1050 floppy drive type [Curt Coder]. Added a new format class for asst128 floppies because the 360K SSQD disk format conflicts with the standard 360K DSDD type. The Assistant 128 BIOS translates disk commands so 360K DSDD disks boot fine though [Carl].
- 0.148u4            : Allow connection of DD drives to ATS (machine\isa_fdc.c). Don't crash when inserting a disk after removing a different size one (formats\upd765_dsk.c) [Carl]. Fixed dsk_format load return true (formats\dsk_dsk.c) [O. Galibert].
- 0.148u3            : (MESS) Sharp MZ-3500: Added RAM-based BASIC bankswitch, improved floppy code, added mon_r(). SIS acts (again) weird on this, and no DRQ is fetched afterwards [Angelo Salese]. Improved IMD disk format identify. Handle upd765 modes a little more, NeXT can boot from floppy again [O. Galibert].
- 0.148u2            : Re-enabled softlist support in snapshot and quickload [Sandro Ronco]. Fixed uninitialized variables and member in imagedev\floppy.c, machine\upd765.c and machine\wd_fdc.c. Added assert when setting up index_pulse_cb in upd765_family_device::device_start() to indicate NULL dereference (machine\upd765.c) [Oliver Stoeneberg].
- 0.148u1            : Added formats\d67_dsk.c/h and d80_dsk.c/h. Refactored the Commodore 1581 floppy disk drive to use the modern floppy system. Supports read-only access to D81 images (formats\d81_dsk.c). Controller remains busy until the last DRQ has been served, and the sector register can now be written more than once (machine\wd_fdc.c). Added support for Commodore GCR encoding (formats\d64_dsk.c). d64/g64 floppy modernization WIP. Fixed write protected signal and added a callback for it (imagedev\floppy.c). Disk is read-only if no output format. Fixed tiki100 90K floppy format [Curt Coder]. Header size obvious fix (formats\dsk_dsk.c). When generating a PC layout, don't write the gap3 after the last sector (lib\formats\flopimg.c) [O. Galibert].
- 0.148              : Completed the dsk support (formats\dsk_dsk.c). Correctly reach files inside zips or softlists (imagedev\floppy.c, softlist.c/h, formats\ioprocs.c/h). Avoid avoidable leaks (formats\flopimg.c). Be verbose about sector IDs when formatting a track (machine\upd765.c) [O. Galibert]. There are 81 track ADF Amiga files out there, actually I think there can be anything from 1 track to 82 tracks, but we'll cross that bridge when we come to it (formats\ami_dsk.c) [David Haywood]. Added ADKCONR hook-up (machine\amigafdc.c/h), fixes at least sound in Ocean's Beach Volley. Log DSKDAT / DSKDATR (machine\amigafdc.c) [Angelo Salese]. Added FM encoding support to flopimg and wd17xx_dsk (formats\adam_dsk.c, comx35_dsk.c, d81_dsk.c, flopimg.c/h, smx_dsk.c, tiki100_dsk.c, tvc_dsk.c and wd177x_dsk.c/h). Added FM encoding support to upd765_dsk. Fixed drivers\bw2.c floppy loading. Fixed floppy for bw12, xerox820 and wangpc [Curt Coder].
- 0.147u4            : Added formats\m20_dsk.c/h, tvc_dsk.c/h, tiki100_dsk.c/h and pc98fdi_dsk.c/h, machine\fdc_pll.c/h, upd765.c/h and wd_fdc.c/h. Fixed formats\imd_dsk.c. Accept IMD versions with single-digit minor. Merged the common parts of D88/IMD (PC floppies: formats\d88_dsk.c, flopimg.c/h and imd_dsk.c). Fixed floppy index pulse generation when motor is always on. Default on Floppy head 0, not 1. Moved upd765 and wd1772 to src\emu. Renamed wd1772 to wd_fdc. Externalized the FDC from upd765. Added comments on the wd_fdc family. Changed the wd_fdc feature functions into bools, and use the correct pll for each chip. Describe wd_fd track when formatting. : wd_fdc FM support, need to review all timings. Enhance floppy ready support. Interrupt on wd_fdc ready support. Floppy restore/recalibrate is supposed to work like this. Added its specific almost raw PC98FDI disk format. Fixed wd_fdc sector sizes and (most) timings. Still need to fix up the timings w.r.t head loading and settling time. Changed wd_fdc fd179x timings to be tighter [O. Galibert]. Added floppy macros for declaring modern floppy formats. The generic floppy formats (D88/DFI/IMD/IPF/MFI/MFM) are now automatically supported in each driver using the modern floppy code. Added some floppy formats and TWOSID signal. Added some more floppy types (FLOPPY_525_SD_35T and FLOPPY_525_SD). Added 8" DSSD floppy type, WD177x inverted bus, and fixed DSKCHG signal. Fixed bw2 floppy format and FDC clock. Fixed sf7000 floppy. Added tiki100 floppy sector skew and fixed PSG output mode. Modernized c1581 floppy, WIP [Curt Coder]. Improved Olivetti M20 keyboard and floppy handling [Christian Groessler]. Updated TVC HBF to use new floppy system. Added a more descriptive error message when it fails to identify the image format [Sandro Ronco]. Added preliminary artwork LEDs for Commodore Amiga (open to suggestions) (mess\layout\amiga.lay, machine\amigafdc.c, drivers\amiga.c). Added LOF bit in Amiga emulation, used by Twintris to boot (machine\amiga.c) [Angelo Salese]. Changes upd765 to busy flag, r/w sector increment and reset int [Carl]. Revert upd765 sector increment behavior and don't change chs address on error [Carl]. Removed unused variable in upd765 [smf]. When wd_fdc seek is done put head on loaded. On wd_fdc restore even if on same track wait stabilization time. wd_fdc side compare (bit 2) is 0 for disable side compare. This makes Specialist MX (MESS) to boot properly. Made Orion use new floppy system (formats\smx_dsk.c) [Miodrag Milanovic].
- 0.147u3            : Added formats\imd_dsk.h and bw2_dsk.c/h. Added a generic WD format (lib\formats\wd177x_dsk.c/h). Added IMD support (formats\imd_dsk.c). Added upd765 read fm sector support. Predict the layout size correctly (formats\imd_dsk.c) [O. Galibert]. Added WD2793 variant and READ/WRITE8_MEMBERs for individual registers. Added modern Bondwell 2 disk formats. Modernized Bondwell 2 floppy handling and cleaned up driver [Curt Coder].
- 0.147u2            : Random fixes/logging (imagedev\floppy.c). Modernize (upd765_dsk.c/h). Reduced the gap3 size from the standard value when the data otherwise won't fit (d88_dsk.c) [O. Galibert]. Changed to subdevice for amiga_fdc [Miodrag Milanovic]. Fixed memory leaks in flopimg.c [Sandro Ronco].
- 0.147              : Added lib\formats\d88_dsk.c/h, upd765_dsk.c/h and xdf_dsk.c/h [O. Galibert]. Added 525hd support into floppy.c. Preliminary FM support [Miodrag Milanovic].
- 0.146u5            : MESS: Added support for C64 speed zone data in D64 image files. Not used drive-side yet. Fixed logging in D64/G64 floppy format code [Curt Coder]. Added support for C64 per-byte speed zones in G64 images [Curt Coder].
- 0.146u2            : Added lib\formats\esq8_dsk.c/h. Preliminary hookup of Ensoniq Mirage floppy format (8-bit Ensoniq synthesizers and samplers) [R. Belmont].
- 0.146u1            : Added formats\esq16_dsk.c/h. Added 16-bit Ensoniq synthesizers and samplers Disk format. Support MFM formats where sector numbering starts at 0 [R. Belmont].
- 0.146              : ap2_dsk (MESS): Preliminary, working RWTS18 decoding support; Decodes disks and shows ascii text; not sure if sectors are in the correct order yet [Lord Nightmare, Balrog, Roland Gustafsson]. Fixed uninitialized variable that causes random assertion failure in snapquik.c [Sandro Ronco]. Fix to read tags from DiskCopy 4.2 files properly (formats\ap_dsk35.c). Lisa requires this [R. Belmont].
- 0.145u8            : ap2_dsk (MESS): Added some missing defines and comments and a way to select whether to use lenient (if the address mark contents are sane regardless of whether the checksum byte was good or not) or normal (only if checksum was valid) usage of the address marks. Also switched the default output sector order from prodos order to dos3.3 order, which is slightly more useful. Added a define to switch between the three possible sector orderings: prodos, dos3.3, and logical [Lord Nightmare]. Fixed a nasty bug in dfi_dsk.c when reading df bytes with 0x80 set throwing the timing way off; this makes most disk images decode a whole heck of a lot better. Fixed a nasty array-out-of-bounds access problem in ap2_dsk.c if an address mark with an insane sector value in it is read [Lord Nightmare, Phil Pemberton]. Fixed a logic bug in the dfi header check which surprisingly doesn't come up at all on GCC (compiler bug?) but does happen on Clang. Also disabled some accidentally enabled debug code, and handle the case of no index transitions at all properly [Lord Nightmare, Balrog]. Remove a hunk of dead code [jgevarya]. Fixed a silly logic-breaking typo that Clang caught [Wilbert Pol].
- 0.145u4            : Added image softlist interface for new floppies. Partial conversion of legacy floppy to modern device [Miodrag Milanovic].
- 0.145u1            : O. Galibert added new floppy formats to imagedev\floppy.c + formats\pc_dsk.c.
- 0.144u7            : Added floppy type constant (3.5 SDD) [Curt Coder]. Do specific floppy UI handling [O. Galibert]. Added DMF support in pc_dsk [Miodrag Milanovic]. Libertarian relicensing (floppy.c needs an ok from micko, did I forget anything?) [O. Galibert].
- 0.144              : Added machine\amigafdc.c/h. Various improvement to Amiga FDC system [O. Galibert]. Describe the remaining IPF fields [O. Galibert, SPS].
- 0.143u9            : Added lib\formats\ipf_dsk.c/h.
- 0.143u6            : Added src\lib\formats\dsk_dsk.h. Curt Coder connected WD17xx Side Select Output for variants that support it.
- 0.143u5            : Added lib\formats\mfi_dsk.c/h. Floppy refactor slightly. Name, descrition, etc are now an intrinsic property of converters [O. Galibert]. Added brand-new MFI (MESS floppy image) support. Fixed the MFI format thanks to smf's help [O. Galibert]. Modernize amigafdc, but don't change a thing (yet) [O. Galibert]. Change the internal floppy format to use magnetic cells. Temporarily move the full-track pll bit extraction in the Amiga FDC [O. Galibert]. Added the easy ST formats (st_dsk) [O. Galibert].
- 0.143u4            : O. Galibert added generic floppy track data descriptors.
- 0.143              : Curt Coder added index and ready line read functions to floppy drive. Added device types for all known WD17XX variants, and enforced inverted DAL lines with e.g. FD1771/FD1791. Used correct variants in drivers, except TRS-80 [Curt Coder].
- 0.142u3            : Added machine\wd17xx.c/h. Curt Coder added 3.5" ED floppy drive type. Implementations of the Western Digital 17xx and 27xx families of floppy disk controllers.
- 0.141u1            : Added imagedev\flopdrv.c/h and flopimg.c/h.
- 0.138u4            : Miodrag Milanovic added per-device image softlist loading routine. Added ability to support other types of software lists, so floppies, cassettes, cd-roms are now possible to be used.
-  2nd April     2002: Aaron Giles removed a ROM length limitation from the ROM loading system, to better support floppy disk images.
- 0.37b7             : Removed msdos\nec765.c.
- PCB: Floppy Disks: Maxell Super RD MF2-256HD (RoughRacer, Qsww)
- SOURCE: emu\imagedev\floppy.c + \formats\pc_dsk.cpp



I12.31  Iomega Zip

- 0.259              : Added ata\zip100.cpp/h. Added dump of Iomega Zip 100MB IDE drive [Guru].
- NOTES: Iomega Zip 100MB IDE drive. Main IC is a 100-pin QFP system-on-a-chip bearing the manufacturer logo. The SoC seems to be named "Rucify", which appears both on its silkscreened label and in its firmware EPROM.
- SOURCE: bus\ata\zip100.cpp



I12.4   Imgtool

- 0.285              : Retired the get_chain method. This is no longer implemented by any supported filesystem, and no command made any use of the information it provided (floptool's flopblocks command is functionally comparable) (imgtool\imgtool.cpp) [AJR].
- 0.284              : Fixed error of assigning nullptr to variable of type std::string (imgtool\imgtool.cpp) [AJR].
- 0.259              : Retire pick_integer_[bl]e and place_integer_[bl]e in favor of the simpler functions in util\multibyte.h (formats\imageutl.h). Use multibyte.h functions in lib\formats\* files [AJR].
- 0.251              : Removed some unused functions (imgtool\stream.cpp) [AJR].
- 0.239              : Patched up code that was rotting behind UNUSED_FUNCTION and switched to [[maybe_unused]] attribute (modules\amiga.cpp and modules\fat.cpp). Fixed Coverity errors (imgtool\imgtool.cpp) [Vas Crabb].
- 0.236              : Removed opresolv.h from emu.h and some other base headers. Splitted legacy floppy image class into a separate file. Clean up a lot of #includes in src\lib and tools\imgtool [AJR].
- 0.233              : Removed util\pool.cpp/h. Removed legacy object pool usage from tools\imgtool [Aaron Giles]. Retire legacy object pool, removing vestigial references [Vas Crabb].
- 0.225              : Fixing an Imgtool build issue with LLVM on MSVC [Nathan Woods].
- 0.211              : Solved mess_hd issue (Imgtool will crash or give "Unexpected error" or loops endlessly upon attempting to create certain formats of image files) [Sergey Svishchev].
- 0.208              : Fixed for filtbas when strings left unterminated in basic lines (imgtool\filtbas.cpp) [tomctomc].
- 0.201              : Fixed off by one error with leap years (util\timeconv.h) [AJR].
- 0.200              : Fixed parsing options with enum values. When parsing an enumerated option, we should use the parameter of the enumerated value, as an integer, instead of the raw identifier as a string. The behaviour probably changed around commit b60879e595 (2016-08-27), but modules still expect the old behaviour [Fabrice Bellet].
- 0.191              : Created a more flexible imgtool::datetime structure for use within Imgtool. This is intended to replace most usage of time_t. Changing the granularity of imgtool_clock from 1ms to 100ns, as per Vas' suggestion. Created arbitrary_datetime in timeconv.h to facilitate interpretation of datetime info. I concluded that invoking std::mktime on manually assembled std::tm is bad, because it is indeterminate how the std::tm members may be "dominant". This required that I go further in imgtool, and updated a number of drivers (imgtool\modules\amiga.cpp, cybiko.cpp, cybikoxt.cpp, fat.cpp, mac.cpp, macbin.cpp, macutil.cpp, prodos.cpp and thomson.cpp) and eliminated the parameter of imgtool::datetime that takes std::tm [Nathan Woods].
- 0.189              : Changed a pointer to a reference and fixed a std::string(nullptr) bug (imgtool\imgtool.cpp). Proper cleanup of floppy object after create/open failure (imgtool\iflopimg.cpp). Merged normalize_filename() into cannonicalize_path() and C++-ification. Eliminated Imgtool-specific rand() function. Changed another charconverter access. C++-ification of imgtool_forkent structure. Made the logic for B&W icon able to handled non-masked set pixels for (MESS) Classic MacOS images (imgtool\modules\mac.cpp). Fixed features.supports_geticoninfo (imgtool\imgtool.cpp) [Nathan Woods]. Fixed the "GET" command [fulivi].
- 0.186              : Cleanups to validity code and transitioned to std::wcerr. Windows doesn't like mixing std::wc[out|err] and printf() (imgtool\imgtool.cpp). Fixed issue with 'listfilters' command. Extremely basic fix to the Imgtool <==> CHD HD bridge. This really needs much more work [Nathan Woods].
- 0.185              : Introduced an 'util::arbitrary_clock' template class, to represent a clock that "knows" when the epoch starts. Converted the NTFS filetime code and Mac datetime code to use util::arbitrary_clock. This is in preparation for a bigger change to Imgtool where I eliminate usage of time_t [Nathan Woods].
- 0.182              : Miscellaneous cleanups and C++ modernization (CoCo/RS-DOS). Changed to use wcout/wcerr in order to support Unicode console output. Changed charconv from an enumeration to an interface. Fixed recently introduce bug on attribute listings. Fixed recently introduced bug in the code that emits usage text [Nathan Woods].
- 0.181              : Changed a number of declarations in Imgtool to use std::string instead of 'const char *. Removed dead strncatz() function. Fixed a recently introduced error in the 'dir' command line command. Cleaned up the output of the 'dir' command [Nathan Woods].
- 0.180              : Consolidate logic for default implementation of imgtool::image::list_partitions(). Changed imgtool::stream::open*() to return imgtool::stream::ptr. Fixed a recently introduced bug which caused image types that do not support partitions to function incorrectly [Nathan Woods].
- 0.179              : Fixed an unsigned overflow error that would causes crashes on 64 bit systems (imgtool\modules\mac.cpp). Fixed a recently introduced bug that could cause module's close() callback to be invoked if an image fails to be opened or created. Made imgtool_image (now imgtool::image) a "real" C++ class. C++-ified a few more classes: imgtool_partition ==> imgtool::partition and imgtool_directory ==> imgtool::directory. Changed many 'imgtool::stream *' to 'imgtool::stream &'. Changed a number of callbacks to be std::function instead of old fashioned function pointers. Changed the create/open callbacks to take 'imgtool::stream &&'. Changed 'imgtool::image *' ==> 'imgtool::image &', 'imgtool::partition *' ==> 'imgtool::partition &' and 'imgtool::directory *' ==> 'imgtool::directory &'. Modernized imgtool::image::list_partitions(). Changed imgtool::image::info() to use std::stream and std::stringstream. Updated quite a bit of client code that manually owned these pointers [Nathan Woods].
- 0.178              : option_guide C++-ification, touched up imgtool. Initial imgtool C++-ification. Retired imgtool_basename(), in favor of core_filename_extract_base(). Changed the read_sector apparatus to use std::vector [Nathan Woods]. Imgtool now supports HP9845B tape image [F. Ulivi].
- 0.163              : Moved some legacy formats over to imgtool since it's now the only user [Dirk Best].
- 0.148              : Removed some unnecessary checks (imgtool\modules\fat.c) [Oliver Stoeneberg].
- 0.147              : Merge of MESS sources: Added tools\imgtool\imgtool.c, iflopimg.c and imghd.c [Miodrag Milanovic].
- SOURCE: lib\formats\imageutl.cpp



I12.5   CHD (Compressed Hunks of Data)

- 0.280              : Request write permission when opening file for verify --fix; allow SHA1 fixes for CHDs otherwise treated as not writeable (tools\chdman.cpp) [lucinda lovebuny].
- 0.276              : Hacked around GitHub #13029 (issues creating delta CHDs). The code depends on getting away with trying to read at least one hunk past the end of the parent CHD. Previously it just ignored any errors from reading the parent CHD, but adding error checking broke it. This hack just ignores that specific error. Also cleaned up some gross flow control and made more things const. The code should obviously be fixed properly, but that's non-trivial. This gets it to a state no worse than it was in 0.270. Use a C++17ism to reduce if nesting a bit (util\chd.cpp) [Vas Crabb].
- 0.272              : Added a sink for osd_printf_ family function output (tools\chdman.cpp) [Windy Fairy].
- 0.271              : Made some APIs return errors rather than throwing exceptions (util\chd.cpp and util\chdcodec.cpp). More API changes: Have metadata_find return std::error_condition instead of throwing an exception. Replaced the is_XXX predicates with check_is_XXX methods that return a std::error_condition, enabling improved error reporting for cdrom_image_device. Retain read error information in chd_file_compressor. Make a bunch of methods noexcept (util\chd.cpp). Throw errors when examining metadata to determine compression defaults (tools\chdman.cpp) [AJR]. Made a few more member functions return error conditions. Also mark error paths as unexpected to optimise against them (util\chd.cpp). Added a safer way to let codecs do special stuff with hunks (util\chd.cpp and util\chdcodec.cpp) [Vas Crabb].
- 0.267              : Got rid of some sprintf and strcat (generates warnings on macOS) (emu\image.cpp) [Vas Crabb].
- 0.265              : Added support for extracting cue/bin GD-ROM images and producing one binary file per track. Use --splitbin/-sb option for extractcd to produce one binary file per track. When producing one binary file per track, the binary file name must contain a %t format conversion for the track number (tools\chdman.cpp) [Windy Fairy].
- 0.264              : Fixed splitframes handling. Added warning when extracting GD-ROM CHDs to cue/bin format (tools\chdman.cpp) [Windy Fairy]. Implemented seek/tell callbacks for FLAC library (util\flac.cpp) [Wilbert Pol].
- 0.263              : Added --hunksize/-hs option for createdvd command and default to 4K hunks (2 sectors, same size as hard disk hunks). Also removed --outputbin/-ob option from extractdvd command - it did nothing as it's CD-specific. Added preliminary CHDMAN documentation. Most common options have at least basic descriptions, supported options are listed for all commands and supported compression algorithms are described (docs\source\tools\chdman.rst). Fixed numerous issues, including: Support input start/size options for createdvd. Fixed not reporting an error on unrecognised command line options. Fixed --fix/-f option for verify command not working. Report an error when conflicting options are supplied (e.g. hard disk template and C/H/S geometry, or input start offset in both bytes and hunks). Previously the results would be unpredictable. Detect more invalid combinations of options and detect when output unit size or hunk size doesn't match parent. Changed order of processing options for createhd so using a template cannot not inadvertently result in an invalid combination of sector size and hunk size. Don't require an explicit unit size for createraw if an output parent CHD file is supplied. Fixed an object leak in createcd (util\chd.cpp, tools\chdman.cpp, docs\source\tools\chdman.rst) [Vas Crabb]. Calculate size of buffer needed to store hunk map (util\chd.cpp), fixes CHDMAN fails to create disk images if compressed hunk map is larger than expected [Balrog]. Fixed cases where bits would be dropped when reading and writing. In some cases, bits would be dropped when writing if there wasn't enough space in the buffer. Fixes bad hunk maps being written to CHD files and incorrect hunk map data being read. Adjust m_doffset based on m_dbitoffs when flushing. Fixes issues exposed when reading LaserDisc CHDs (util\bitstream.h) [Windy Fairy].
- 0.262              : Added support for Zstandard compression (util\chdcodec.cpp) [Vas Crabb]. Added support for flac data where bits_per_sample != 16 (formats\flacfile.cpp and util\flac.cpp) [Wilbert Pol].
- 0.260              : Allow clone CHDs to use parent CHDs as parents. Allow caller to provide a helper for finding parent CHDs and expose (recursive) missing parent status (util\chd.cpp). Search parent systems/devices/software for parent CHDs on encountering a delta CHD (emu\romload.cpp). Report error on delta CHDs when parent can't be found (emu\romload.cpp). Check parents for matching CHDs with different names for devices as well as systems and software (emu\romload.cpp) [Vas Crabb].
- 0.259              : Use helpers from multibyte.h (util\chd.cpp, chdcodec.cpp, avhuff.cpp and flac.cpp) [AJR].
- 0.255              : Changed imagedev\chd_cd.cpp/h to imagedev\cdromimg.cpp/h. Added DVD support. Better abstraction in general and multi-image support in arcade-type drivers. Added extractdvd command (tools\chdman.cpp). Fixed initialisation order and refine gdrom support (imagedev\cdromimg.cpp, emu\diimage.cpp and emu\image.cpp). Executive decision: disk regions used the owner name (e.g., no :image) [O. Galibert].
- 0.252              : Avoid use of non-standard variable-length arrays (tools\chdman.cpp) [Patrick Mackinlay].
- 0.247              : Fixed TOC session type detection for extractcd (tools\chdman.cpp) [Windy Fairy].
- 0.243              : Optimized error return from read_metadata (util\chd.cpp) [O. Galibert].
- 0.241              : Added some missing standard headers (util\flac.cpp) [AJR].
- 0.239              : Fixed chdman threading on cpus with many cores. Removed 4-thread limit from non-high-freq work queues. osd_event flags don't need to be atomic. Fixed race condition that made work queues not wake up enough threads for processing (osd\osdsync.cpp) [tellowkrinkle].
- 0.235              : Added a few more hard disk templates (Seagate, Maxtor, Micropolis...) [Davide Cavalca].
- 0.228              : Removed some unnecessary .c_str() calls (tools\chdman.cpp) [Vas Crabb].
- 0.227              : Support Redump extended bin/cue format for Dreamcast discs. Initial check-in of Redump bin/cue support for Dreamcast GDI. Correctly identifies multi-cue format and sets GDROM flags. Creates a working Crazy Taxi chd from a Redump bin/cue. Disabled debugging code and started tidying up. Simple tool to compare chdman bin/cue and bin/gdi conversions, should be identical. Final tidy up, the testing is going well. Testing failed for Aero Dancing i (Japan), didnt zero last track. Added some comments about .gdi compatibility. Addressing review feedback on pull request #7422. Match TOSEC layout for Pattern I discs (3 tracks). Initial support for Pattern III discs. Pattern III discs now work and match TOSEC layout. Reading datasize from wrong track, same result though. Identify the GDI pattern, makes the code clearer. Support for Pattern II and consecutive AUDIO tracks. Use C99 type not POSIX type to build on Windows. Support Redump tracks split across two .bin files (util\chdcd.cpp and tools\chdman.cpp) [nhand42].
- 0.222              : Support characters outside ASCII in command line arguments. I64 size qualifier is only needed for MSYS64 GCC 9 and earlier [Vas Crabb].
- 0.214              : Clean up some archaic string code [AJR].
- 0.213              : Support hard disk images in HDI format [Justin Kerk].
- 0.206              : Fixed GDI 2048 extraction (tools\chdman.cpp) [MetalliC].
- 0.192              : Use DeviceIoControl to get disk length, allows chdman to access physical drives on Windows 10 (file\winfile.cpp) [Ted Green].
- 0.186              : Minor improvement to CHD metadata loading. Writing into an std::string is now legal with C++11 (util\chd.cpp) [Nathan Woods].
- 0.185              : Fixed an issue where reset_on_load images would not properly persist across emulation sessions (emu\image.cpp). Workaround for sibling disk image loading issue (emu\romload.cpp) [Nathan Woods].
- 0.183              : Fixed CHD build [Vas Crabb].
- 0.182              : Added support for hard disk templates and added some initial ones [Dirk Best].
- 0.180              : Fixed heap corruption when loading a new CHD fails. Throw CHDERR_FILE_NOT_WRITEABLE rather than CHDERR_UNSUPPORTED_VERSION if you try to open an old version for writing (util\chd.cpp) [smf].
- 0.179              : Fixed chdman addmeta --valuefile by calling the correct write_metadata [smf].
- 0.177              : Removed create_option_guide() as you can't create CD's (imagedev\chd_cd.cpp) [smf].
- 0.176              : Fixed remaining "CREATE CD" 64bit issues [MetalliC]. Unbreak large files in chdman after refactor [Vas Crabb].
- 0.175              : Ignore ATA ident CHS values for > 8GB images (tools\chdman.c). Attempt to workaround hang during CHD creation [MetalliC]. Ignore cylinders, heads and sectors from identify device data, based on the ATA 5 specification [smf].
- 0.174              : Fixed for code that expects to be able to dereference a pointer that it knows may be null [Vas Crabb].
- 0.173              : Fixed chdman extractcd track names (was foo.cue.bin instead of foo.bin) [MetalliC]. Allow image devices to be configured with a fixed (not user selectable) piece of software and updated a few options and menu to acknowledge such possibility (emu\diimage.cpp) [Fabio Priuli]. Initialized m_hunknum inside the constructor (util\chd.h) [dankan1890].
- 0.172              : Removed I64FMT and SIZETFMT, one usage left in tools\chdman.cpp [Miodrag Milanovic].
- 0.169              : chdman info verbose metadata output [MetalliC]. When chdman wants only the original sectors from CHD-CD, give it only the original sectors (util\cdrom.cpp) [R. Belmont].
- 0.160              : Send error messages to stderr instead of stdout (chdtest.py). Open chdtest.py as binary, read in chunks to reduce memory usage. Make chdtest.py Python 3 compatible [Mike Naberezny]. Reduced the image size of some chdman createhd tests. Added some disabled debug code (chdman\chdtest.py) [Oliver Stoeneberg].
- 0.159              : Report core file position in case of a CHD hunk read error (tools\chdman.c) [Juergen Buchmueller].
- 0.158              : Fixed ThreadSanitizer data race warnings (lib\util\chd.c). Bail out in chd_file::hunk_info() on unknown compression type. Added a few more chdman tests (chdman\input\createhd_2\in.params, createhd_3\in.params, output\createhd_2\out.chd and createhd_3\out.chd). Added -s/--size parameter for "createhd" to create blank harddisk based on size and sector size. Also added unit tests for the new option / moved filesize validation out of guess_chd() (chdman\input\createhd_4\in.params, createhd_5\in.params, output\createhd_4\out.chd and createhd_5/out.chd). Added missing catch in chd_file_compressor::async_read() and chdman main() happens when e.g. disk is full [Oliver Stoeneberg].
- 0.156              : Fixed "make tools" with VS14 CTP4 [smf].
- 0.154              : CHD update: Bugfixed byte order for GD-ROM audio tracks so FLAC compression is effective. Fixed uninitialized struct on MSVC (and possibly other) builds. This will change the SHA1s of every GD-ROM CHD in MAME; a patch to reflect that is pending (the old images still work, they just take a little more space than is necessary). "chdman copy" suffices to upgrade; no downloading is necessary. Fixed uninitialized flags (util\cdrom.c). CHD cleanups: Double quote filenames with spaces when writing .gdi files. Give audio files .raw extension when writing .gdi files. cdrom_read_subcode() now returns false if the image doesn't contain subcodes [MetalliC]. Recreated yet again the CHDs from r30949 (no new sets) which all had different SHA1 hashes due to bugfixes with CHDMAN since 0.153 release [f205v].
- 0.153              : Added regtests\chdman\input\createcd_cue_audio_silence\in.bin, in.cue, createcd_cue_audio_silence_wav_20_tracks_none\in.cue, in.params, silence.wav, createcd_nrg_audio_silence\in.nrg, createhd_raw_empty_none\in.params, in.raw, output\createcd_cue_audio_silence\out.chd, createcd_cue_audio_silence_wav_20_tracks_none\out.chd, createcd_nrg_audio_silence\out.chd and createhd_raw_empty_none\out.chd. Added some more chdman tests - they had been sitting in my tree for a while, but I held off the commit because the input/output files are a bit bigger than the existing ones. Fixed UBSAN (Clang test) invalid vptr error with dynamic_array<hash_pair> in struct work_item (util\chd.c). chdtest.py might have reported, that all tests were successful even if one failed / cleanups and log the unsupported mode. Changed casing of FLAC folders to match official source distribution (flac->FLAC). Pass VERSION define via compiler flags to libflac. Re-enabled checks in libFLAC\memory.c. Removed definition of SIZE_MAX in libflac\include\share\alloc.h. Fixed reading of bits/sample in parse_wav_sample() on big-endian systems (util\chdcd.c). Changed HAVE_CONFIG_H checks in libflac to be as intended - will be fixed upstream as well [Oliver Stoeneberg]. Fixed compile (tools\chdman.c) [Alex Jackson].
- 0.152              : Fix for MSVC "warning C4717: 'device_image_interface::fread' : recursive on all control paths, function will cause runtime stack overflow" (emu\diimage.h) [smf].
- 0.151              : Added a hack to allow you to limit the number of threads per work queue (all other limits still apply). If you set this to 0 then chdman doesn't hang (osd\windows\winwork.c) [smf].
- 0.150              : Force libflac to never be optimized in a more portable way (lib\lib.mak and libflac\lpc.c). Set GD flag for both "bare" and CHD input (lib\util\cdrom.c) [R. Belmont]. Removed accidental change in 0.149u1 (INT32 g_finds = 0;) (tools\chdman.c) [Oliver Stoeneberg].
- 0.149u1            : Added regtests\chdman\input\createcd_cue_audio_silence_wav_20_tracks_cdfl\in.cue, in.params, silence.wav, createcd_cue_audio_silence_wav_20_tracks_cdlz\in.cue, in.params, silence.wav, createcd_cue_audio_silence_wav_20_tracks_cdzl\in.cue, in.params, silence.wav, output\createcd_cue_audio_silence_wav_20_tracks_cdfl\out.chd, createcd_cue_audio_silence_wav_20_tracks_cdlz\out.chd and createcd_cue_audio_silence_wav_20_tracks_cdzl\out.chd, createhd_raw_empty_flac\in.params, createhd_raw_empty_huff\in.params, createhd_raw_empty_lzma\in.params, createhd_raw_empty_zlib\in.params, output\createhd_raw_empty\out.chd, createhd_raw_empty_flac\out.chd, createhd_raw_empty_huff\out.chd, createhd_raw_empty_lzma\out.chd, createhd_raw_empty_zlib\out.chd, input\createld_avi_yuv2_3_frames_no_audio\in.avi, output\createld_avi_yuv2_3_frames_no_audio\out.chd, input\createld_avi_uyvy_3_frames_no_audio\in.avi, output\createld_avi_uyvy_3_frames_no_audio\out.chd, chdman\input\copy_hd_1\in.chd and output\copy_hd_1\out.chd. Removed unused src\lib\libflac\include\flac++ - libflac++ was removed a long time ago and never used (lib\libflac\include\flac++\all.h, decoder.h, encoder.h, export.h and metadata.h). Added in.params support to all tests (chdman\chdtest.py). chdman -c would only overwrite the amount of compressions defined - part of the default compressions might still have been used. Added unit tests for the CD-based compressions. Added support for .raw input for createhd (chdman\chdtest.py). Added unit tests for createhd with .raw input and tests for each HD compression. Some cleanup and added support for createld (chdman\chdtest.py). Added SHA1 check of output file (chdman\chdtest.py). Treesize in laserdisc CHD was uninitialized when input video had no audio channels (lib\util\avhuff.c). Added createld unit test. Fixed chdtest.py check for output folder existence, clear temp folder before running tests, log which test failed, added extraction for createcd tests cases and added remaining extractions. Fixed yuy16_compress_to_yuy() sometimes writing all green video with YUV2 and UYVY (lib\util\aviio.c). Adjusted logging a bit (chdman\chdtest.py). Only try to clear temp folder when it exists (chdman\chdtest.py). Added copy_hd_1 test case. Small formating change to lib\util\aviio.c. Added workaround to FLAC__lpc_compute_autocorrelation() for 32-bit GCC (aka non-SSE floating point) issues (lib\libflac\libflac\lpc.c). Fixed deletion of output file in case of an error (tools\chdman.c). Fixed hang when chd_file_compressor::async_read() failed (e.g. trying to read an .avi with unsupported color depth) and improved error reporting a bit (lib\util\chd.c and tools\chdman.c). Correct SHA1 mismatch messages in chdtest.py. Disable creation of uncompressed LD CHDs in chdman.c. Disabled optimizations for FLAC__lpc_compute_autocorrelation() for 32-bit GCC builds to prevent different output filesizes with optimized builds (libflac\lpc.c) [Oliver Stoeneberg].
- 0.149              : Added regtests\chdman\input\copy_cd_cue_audio_silence_wav_20_tracks_v4\in.chd, input\copy_cd_cue_audio_silence_wav_v4\in.chd, input\copy_cd_cue_empty_v4\in.chd, input\copy_cd_nrg_empty_v4\in.chd, input\copy_cd_toc_empty_v4\in.chd, output\copy_cd_cue_audio_silence_wav_20_tracks_v4\out.chd, output\copy_cd_cue_audio_silence_wav_v4\out.chd, output\copy_cd_cue_empty_v4\out.chd, output\copy_cd_nrg_empty_v4\out.chd and output\copy_cd_toc_empty_v4\out.chd.
- 0.148u5            : Various CD-ROM / CHDMAN improvements [R. Belmont]: Correct import/export of bin/cue images in which the pregap sectors are present. Normalized TOC handling; the start of a track is always the first pregap sector. Finally allows reading and CDDA playing pregap sectors. Works even if the pregap sectors are not present in the file. Note: Existing CHDs should work (or not) as before - previously non-working ones that were broken due to disc geometry should work if regenerated from source. I tested this on several known-touchy cases (including Saturn Black/Matrix Reprint cinemas and PCE-CD Prince of Persia) but there are likely others. Drivers that tried to fake around the previous lack of pregap reading on CDDA may need some adjustment (util\cdrom.c, chdcd.c and tools\chdman.c) [R. Belmont]. Improved portability for older versions of Xcode (libflac\format.c) [John Gilbert].
- 0.148u3            : Simplify the (MESS) psxcd CDROM [Carl]. I haven't found any regressions but I wouldn't be surprised to see some. The only improvements so far is better CD audio and disk change support.
- 0.148u1            : Added src\regtests\chdman\input\copy_cd_cue_audio_silence_wav_20_tracks_v4\in.chd, input\copy_cd_cue_audio_silence_wav_v4\in.chd, input\copy_cd_cue_empty_v4\in.chd, input\copy_cd_nrg_empty_v4\in.chd, input\copy_cd_toc_empty_v4\in.chd, output\copy_cd_cue_audio_silence_wav_20_tracks_v4\out.chd, output\copy_cd_cue_audio_silence_wav_v4\out.chd, output\copy_cd_cue_empty_v4\out.chd, output\copy_cd_nrg_empty_v4\out.chd and output\copy_cd_toc_empty_v4\out.chd. Added "copy" support to chdtest.py / added some v4 to v5 copy tests. Fixed undefined behavior in bitstream_out::write() as well - thanks to -fcatch-undefined-behavior and Clang (lib\util\bitstream.h) [Oliver Stoeneberg]. Disabled pointless (at least in terms of MAME/MESS) DEBUG message in libflac (src\lib\libflac\libflac\lpc.c) [Wilbert Pol]. Fixed bad frames occurring on 2GB RIFF splits (lib\util\aviio.c) [Phil Bennett].
- 0.148              : Added src\regtests\chdman\chdtest.py, input\createcd_cue_audio_silence_wav\in.cue, input\createcd_cue_audio_silence_wav\silence.wav, input\createcd_cue_audio_silence_wav_20_tracks, input\createcd_cue_audio_silence_wav_20_tracks\in.cue, input\createcd_cue_audio_silence_wav_20_tracks\silence.wav, input\createcd_cue_empty\in.bin, input\createcd_cue_empty\in.cue, input\createcd_iso_empty\in.iso, input\createcd_nrg_empty\in.nrg, input\createcd_toc_empty\data.bin, input\createcd_toc_empty\in.toc, input\createhd_1\in.params, output\createcd_cue_audio_silence_wav\out.chd, output\createcd_cue_audio_silence_wav_20_tracks, output\createcd_cue_audio_silence_wav_20_tracks\out.chd, output\createcd_cue_empty\out.chd, output\createcd_iso_empty\out.chd, output\createcd_nrg_empty\out.chd, output\createcd_toc_empty\out.chd and output\createhd_1\out.chd. Removed unused m_props from chd_lzma_decompressor (lib\util\chdcodec.c). Fixed result of bitstream_in::peek(0) (lib\util\bitstream.h). Fixed uninitialized memory in the last hunk on CHD creation (fixes potentially different filesize with each compiler not defaulting memory to 0x00 including Visual Studio). Fixed tests target for non-Windows platforms (makefile). Ignore hidden Unix folders. Fixed subprocess.Popen() parameter (fixes execution on non-Windows platfors) (chdman\chdtest.py). Correct remaining runProcess() calls. Added "createhd" support to chdtest.py via in.params input file. Added new chdman test. Removed overwrite of ARCH when compiling libflac (src\lib\lib.mak) [Oliver Stoeneberg].
- 0.147u4            : Added ISO support to CHDMAN and as mountable image device (util\chdcd.c). Added ISO to supported CDROM images lists (imagedev\chd_cd.c). Give error in cases when track size is not one of supported (util\chdcd.c). Fixed CDROM extensions in listmedia (imagedev\chd_cd.c) [Miodrag Milanovic]. Added .cdr as a synonym for .iso, as seen on e.g. archive.org [Justin Kerk].
- 0.147u3            : FLAC encoder did not use FIR Linear prediction [William Coolay].
- 0.147u2            : Verify softlist items that are not CHDs or roms and display warnings/errors (emu\diimage.c) [Miodrag Milanovic]. Made cdrom_image_device responsible for accessing driver based CHD's [smf].
- 0.147u1            : Fix for "file note writeable" when creating, plus consolidate some duplicate/redundant code (lib\util\chd.c) [smf]. Removed some expressions which are always true (util\cdrom.c) [Oliver Stoeneberg].
- 0.147              : Support for writing to compressed hard drives using diff files (util\chd.c) [smf]. Removed astring::stringbuffer() / use cached value in astring::len() instead of strlen() (lib\util\chd.c) [Oliver Stoeneberg].
- 0.146u4            : Enable support building the bundled 7z library with a C++ compiler [Markus Rathgeb]. Marked pnchmna, hypbbc2p, jingystm and jojobar1 CHDs as BAD_DUMP (missing Metadata) [R. Belmont, Firewave, Roman]. Fixed memory leak in chd_file_compressor::hashmap [Oliver Stoeneberg].
-  2nd July      2012: R. Belmont - Due to a series of bugs, CHDs created with CHDMAN versions prior to the one in 0.146u2 could differ between different OSs (XP vs Vista vs Win7 vs Linux vs Mac OS X), different service pack patchlevels, and even different PCs with the same software load. In almost all cases the SHA1s would match and the data and metadata should be safe, but if you attempted to join a torrent your files would not match. Additionally, there was a possibility of corrupt CD and GD-ROM CHDs being created. For these reasons, you should re-convert all of your CHDs from the "old" v4 versions using the newest CHDMAN. Note that ClrMAMEPro and chdman -verify are unable to detect if your CHDs are problematic in this way, do not use them to determine if you may have the problems. Thanks to MAMEWorld user jmak for debugging these problems.
- 0.146u2            : CHD fixes [jmak]: Fixed uninitialized variables that were creeping into output. Changed qsort() callback to never return "equal", working around unstable system libc implementations (util\chd.c and cdrom.c).
- 0.146u1            : CHD error handling (lib\util\aviio.c and chdcodec.c) [Firewave]. Fixed CHD decompression and memory leak in libflac\libflac\md5.c (fixes memory issues with chdman) [Oliver Stoeneberg]. Fixed error from manually merging patch (lib\lib7z\CpuArch.c) [R. Belmont].
- 0.146              : Fix for output of TOC and GDI content on extractcd option [Miodrag Milanovic]. Changed error message to be more descriptive to actual error that occurs when a .dif file version doesn't match the CHD version. Hopefully, this will all but stop the seemingly never ending questions about the error (util\chd.c) [Tafoid].
- 0.145u8            : Various libflac and lib7z fixes [Firewave and R. Belmont]. Fixed error in decompression for avhuff (Laser disc chds don't verify after upgrading to CHD v5). Converted cubeqst CHDs now pass verification [Aaron Giles].
- 0.145u5            : Fixed upgrade to CHD v5 changes SHA1 [Aaron Giles].
- 0.145u4            : Fixed stack overflow in chdman when compiled with Visual Studio by moving objects based on chd_file_compressor to the heap [Firewave]. Cleanup recent changes, fixed a missing case where a compressor was still stack allocated [Aaron Giles]. Correct processing of GDI files, add ability to extractcd to .gdi, verified perfect checksum round-tripping on .GDI files. Fixed big-endian compile [R. Belmont]. Rework libflac to play nicer with MAME's build system (based on suggestions by Tsuruchiyo Nitro); should fix compile problems on certain configrations [R. Belmont]. Removed libflac++, there's no intention of using the C++ interface, so it's just dead code [Aaron Giles]. Changed CHD region tag to something more appropriate [Tafoid]. When copying CHDs, preserve the flag that indicates whether the metadata is included in the SHA1. When creating LD CHDs, don't use a checksum on the AVLD metadata, like we did before. Fixes recompression of laserdisc CHDs. Fixed copy/paste error in the chd.h header which caused the flags passed to be ignored when writing metadata [Aaron Giles].
- 0.145u3            : CHDMAN properly handle and warn on bin/cue output of images with subcode data [R. Belmont].
- 0.145u2            : Removed some calls in image.c, note that add_dynamic_device is still used, it's still handy. Fixed empty CHD creation for HDD's [Miodrag Milanovic]. Better fix is to just not parse start/end when there's no input file. Added new function dumpmeta to dump out a particular piece of metadata to a file or stdout. Re-did the non-CD FLAC codec to be "smart" in that it can choose either big-endian or little-endian on the fly and uses the best one. Added FLAC as a default codec for hard disks, which helps a lot for certain disks [Aaron Giles].
- 0.145u1            : Major CHD/chdman update [Aaron Giles]. The CHD version number has been increased from 4 to 5. This means any diff CHDs will no longer work. If you absolutely need to keep the data for any existing ones you have, find both the diff CHD and the original CHD for the game in question and upgrade using these commands: rename diff\game.dif diff\game-old.dif and chdman copy -i diff\game-old.dif -ip roms\game.chd -o diff\game.dif -op roms\game.chd -c none . Specifics regarding this change: Defined a new CHD version 5. New features/behaviors of this version: Support for up to 4 codecs; each block can use 1 of the 4. New LZMA codec, which tends to do better than zlib overall. New FLAC codec, primarily used for CDs (but can be applied anywhere). Upgraded AVHuff codec now uses FLAC for encoding audio. New Huffman codec, used to catch more nearly-uncompressable blocks. Compressed CHDs now use a compressed map for significant savings. CHDs now are aware of a "unit" size; each hunk holds 1 or more units (in general units map to sectors for hard disks/CDs). Diff'ing against a parent now diffs at the unit level, greatly improving compression. Rewrote and modernized chd.c. CHD versions prior to 3 are unsupported, and version 3/4 CHDs are only supported for reading. Creating a new CHD now leaves the file open. Added methods to read and write at the unit and byte level, removing the need to handle this manually. Added metadata access methods that pass astrings and dynamic_buffers to simplify the interfaces. A companion class chd_compressor now implements full multithreaded compression, analyzing and compressing multiple hunks independently in parallel. Split the codec implementations out into a separate file chdcodec.* . Updated harddisk.c and cdrom.c to rely on the caching/byte-level read/ write capabilities of the chd_file class. cdrom.c (and chdman) now also pad CDs to 4-frame boundaries instead of hunk boundaries, ensuring that the same SHA1 hashes are produced regardless of the hunk size. Rewrote chdman.exe entirely, switching from positional parameters to proper options. Use "chdman help" to get a list of commands, and "chdman help <command>" to get help for any particular command. Many redundant commands were removed now that additional flexibility is available. Some basic mappings: Old: chdman -createblankhd <out.chd> <cyls> <heads> <secs> to New: chdman createhd -o <out.chd> -chs <cyls>,<heads>,<secs> . Old: chdman -createuncomphd <in.raw> <out.chd> ... to New: chdman createhd -i <in.raw> -o <out.chd> -c none ... Old: chdman -verifyfix <in.chd> to New: chdman verify -i <in.chd> -f. Old: chdman -merge <parent.chd> <diff.chd> <out.chd> to New: chdman copy -i <diff.chd> -ip <parent.chd> -o <out.chd>. Old: chdman -diff <parent.chd> <compare.chd> <diff.chd> to New: chdman copy -i <compare.chd> -o <diff.chd> -op <parent.chd>. Old: chdman -update <in.chd> <out.chd> to New: chdman copy -i <in.chd> -o <out.chd>. Added new core file coretmpl.h to hold core template classes. For now just one class, dynamic_array<> is defined, which acts like an array of a given object but which can be appended to and/or resized. Also defines dynamic_buffer as dynamic_array<UINT8> for holding an arbitrary buffer of bytes. Expect to see these used a lot. Added new core helper hashing.c/h which defines classes for each of the common hashing methods and creator classes to wrap the computation of these hashes. A future work item is to reimplement the core emulator hashing code using these. Split bit buffer helpers out into C++ classes and into their own public header in bitstream.h. Updated huffman.c/h to C++, and changed the interface to make it more flexible to use in nonstandard ways. Also added huffman compression of the static tree for slightly better compression rates. Created flac.c/h as simplified C++ wrappers around the FLAC interface. A future work item is to convert the samples sound device to a modern device and leverage this for reading FLAC files. Renamed avcomp.* to avhuff.*, updated to C++, and added support for FLAC as the audio encoding mechanism. The old huffman audio is still supported for decode only. Added a variant of core_fload that loads to a dynamic_buffer. Tweaked winwork.c a bit to not limit the maximum number of processors unless the work queue was created with the WORK_QUEUE_FLAG_HIGH_FREQ option. Further adjustments here are likely going to be necessary. Fixed bug in aviio.c which caused errors when reading some AVI files. Move all-0 detection to the write path. Use hunk_info on the compression path to detect whether the write went through (util\chd.c + tools\ldresample.c). Fixed blocksize for FLAC encoder. Update CHD error list in chd.c. Removed 100% redundant and silly list of error strings and chd_cd.c [Aaron Giles].
- 0.145              : David Haywood fixed error where FLAC was encoding 4 times too much data (samples vs. bytes).
- 0.144u7            : Fixed disk loading so that it handles full region tags (emu\romload.c) [Aaron Giles]. Fixes laserdisc and hard disk based games falling over. Added FLAC (lossless audio) codec support plus experimental hooks in samples and chdman. Bumped up CHD-CD hunk size to get better compression ratios on both zlib and flac [David Haywood, R. Belmont]. Changed the way FLAC compiles so that it works like other external libraries, and also compiles successfully for MSVC builds [Aaron Giles].
- 0.144u5            : R. Belmont fixed CHDMAN -extractcd of images with postgaps. CHDs do not need reconversion, this was an -extractcd problem only. Don't be case sensitive on the input type extension.
- 0.143u4            : Miodrag Milanovic supported full/relative paths when creating CD ROM image (chdman.c), also added support for GDI with files containing space char. Added support for loading other image types to CDROM device, with use of chdman part of code.
- 0.142u6            : R. Belmont fixed CHDMAN GCC 4.6 build.
- 0.142u3            : Handle track type 6 in .nrg files in chdman [R. Belmont]. R. Belmont fixed uninitialized variables found by Valgrind (diimage.c).
- 0.141u3            : Experimental incomplete .nrg disc image import (CHDMAN) [R. Belmont].
- 0.141u1            : Added CHD support in softlists [Miodrag Milanovic].
- 0.139u3            : R. Belmont rewrote CHDMAN bin/cue support from specs (more images now work), improved -extractcd bin/cue output, improved error handling and support for .WAV tracks in bin/cue images. Angelo Salese added a set volume function for CD-DA.
- 0.139u1            : Fixed image device error handling [ShimaPong, Miodrag Milanovic].
- 0.138u4            : Sandro Ronco and Miodrag Milanovic fixed image unload and creation (src\emu\diimage.c).
- 0.135u2            : CDiFan fixed audio output lengths in aviio.c.
- 0.135              : R. Belmont added chdman option to create uncompressed writeable HD images for MESS.
- 0.133u1            : Michael Zapf fixed chdman -update to leave the write protect state alone when updating uncompressed CHDs.
- 0.131              : The CHD format has undergone a change with this release. The main reason for this change is to include some of the key metadata into the hashes for the CHDs. This ensures that the metadata is valid and prevents abuse. The first impact you will find is that all of your CHD differencing files are invalid. Just delete your "diff" directory contents entirely. The second impact is that all your existing CHDs will warn you that they have incorrect hashes. This is expected. Your old CHDs should still work fine, so if you can live with the "bad ROM" warnings, you don't really need to do anything. However, if this bugs you or you want to be "clean", you can update your CHDs, using this command line: chdman -update <chdfile> <newchdfile> for each one of your CHDs. This will take a while, but will produce CHDs that match the new checksums posted in the drivers.
- 0.130u3            : Build the IDE features table only when there is a CHD available [Curt Coder].
- 0.130u1            : IMPORTANT NOTE: The CHD format has undergone a change with this release. The main reason for this change is to include some of the key metadata into the hashes for the CHDs. This ensures that the metadata is valid and prevents abuse. The first impact you will find is that all of your CHD differencing files are invalid. Just delete your "diff" directory contents entirely. The second impact is that all your existing CHDs will warn you that they have incorrect hashes. This is expected. Your old CHDs should still work fine, so if you can live with the "bad ROM" warnings, you don't really need to do anything. However, if this bugs you or you want to be "clean", you can update your CHDs, using this command line: chdman -update <chdfile> <newchdfile> for each one of your CHDs. This will take a while, but will produce CHDs that match the new checksums posted in the drivers. Aaron Giles updated CHD format to version 4. Checksums are now computed and stored separately for raw data and metadata, and metadata is now checksummed by default. Aaron Giles updated chdman to support a generic metadata addition system: chdman -addmetatext <chdfile> <tag> [<index>] <sourcefile> and chdman -addmetabin <chdfile> <tag> [<index>] <sourcefile>. Aaron Giles changed the CHD verify interfaces to pass back a structure containing all the necessary data for verification and fixing. Aaron Giles modified cdrom.c to expose metadata read/write functions, and changed chdman to use them. Also changed chdman to parse old-style metadata and convert it to new-style metadata. Aaron Giles added new function core_fload() to load a file into an allocated buffer. Updated src2html, regrep and chdman tools to use this function where appropriate. Updated CHD hashes [Yasuhiro Ogawa, Aaron Giles, David Haywood]. Aaron Giles fixed bug where chdman -extract would not truncate to the logical size. NOTE: The CHD format has undergone a change with this release. The main reason for this change is to include some of the key metadata into the hashes for the CHDs. This ensures that the metadata is valid and prevents abuse. The first impact you will find is that all of your CHD differencing files are invalid. Just delete your "diff" directory contents entirely. The second impact is that all your existing CHDs will warn you that they have incorrect hashes. This is expected. Your old CHDs should still work fine, so if you can live with the "bad ROM" warnings, you don't really need to do anything. However, if this bugs you or you want to be "clean", you can update your CHDs, using this command line: chdman -update <chdfile> <newchdfile> for each one of your CHDs. This will take a while, but will produce CHDs that match the new checksums posted in the drivers.
- 0.130              : Allow CHDs to be directly in the rom directory without a subdirectory [Olivier Galibert].
- 0.129u6            : Aaron Giles added flags to the CHD metadata entries, encoded in the top bit. Right now it is a no-op, but eventually will be used to indicate which bits of metadata are included in the overall checksum.
- 0.127u1            : Aaron Giles fixed corrupt CHDs are reported as missing.
- 0.127              : ElSemi included support for parsing .gdi files in CHDMAN.
- 0.126u4            : Aaron Giles removed per-frame metadata support from chdman. Creating an A/V now simply requires an AVI file input. Aaron Giles fixed bug in winwork that caused the creation of single work items to return NULL, and thus lead to massive memory leaks when using A/V CHDs. Disks opened by the romload module are no longer identified by index. Instead, they are identified by the region they were loaded in. This generally means one disk per region. get_disk_handle() now takes a region name in place of an index. Updated all callers to do this. The SCSI modules in particular posed a challenge to make this work, so watch out for potential bugs there [Aaron Giles]. Aaron Giles added new option to chdman, where if you use -createav with a special filename (either 2:2 or 3:2) it will create a fake laserdisc files with the equivalent cadence. This can be used for testing until full captures are available. Most games used 2:2 apart from Dragon's Lair and Space Ace, which were 3:2. Note that even though these files are essentially blank, they are Huffman-compressed, meaning that the maximum compression ratio you will get is 8:1, so they still end up ~5GB. Aaron Giles moved error strings from chdman.c to chd.c, where they can be fetched from any caller via the new chd_error_string() function. Fixed bug in aviio.c which could cause an infinite loop if attempting to read sound beyond the end of the file.
- 0.123u6            : Aaron Giles fixed CHDMAN -extract to a physical drive on Windows.
- 0.118u6            : smf fixed regression that caused CHD games to crash if the CHD was not present. Also fixed change that required write access to CHDs. Aaron Giles fixed CHD search paths again so that they look in parent subdirectories. smf added SCSIOP_GET_INQUIRY_BUFFER to scsicd & scsihd.
- 0.118u5            : Nathan Woods removed CHD interface structure. CHDs now rely on the corefile routines to perform file I/O. Updated the rest of the system to handle this reality. A side-effect is that "split" CHDs, which never got much play, have now been deprecated.
- 0.118u4            : CHDMAN improvements [smf]: Fixed toc parsing to allow spaces and quotes in file names. Supports "offset start length" track syntax that cdrdao creates if you don't read subcode. Tracks are always padded with zeros & not whatever data happens to follow. Moved cdrom_track_input_info out of src\lib\util\cdrom.h and into src\tools\chdcd.h. Added audio byte swapping support.
- 0.118u2            : smf improved fixes to the chdman CD creating code.
- 0.118u1            : smf fixed chdman_open() "w" to always create/truncate the file, leaving "r+" to try opening first and then truncating. This matches behavior in the core.
- 0.117u1            : Roman Scherzer fixed crash in CHD code if reading beyond the end of the file.
- 0.116u4            : smf added support to CHDMAN to cope with toc files created with cue2toc.
- 0.112u2            : Added src\lib\util\aviio.c/h, avcomp.c/h and huffman.c/h. Aaron Giles added several new modules to the utility library libutil. First is a generic huffman encoding module. Second is a module that allows you to read/write AVI files in a platform-independent way. And third is a lossless A/V compression module. These three pieces together, plus some changes in the CHD code, allow for the creation of CHDs with compressed audio and video. Added two new commands to chdman: -createav converts an AVI file in uncompressed YUY format or HuffYUV-compressed YUY format with "left" prediction into a CHD. And -extractav converts a CHD containing compressed audio & video into an uncompressed YUY format AVI file.
- 0.111u6            : Moved src\chdman.c to src\tools\.
- 0.111u5            : Aaron Giles changed behavior in CHDMAN so that a 0 sector size means the default.
- 0.111u4            : Aaron Giles simplified the hard disk interfaces a bit. Added support in chd.c for lossy compressors, computing CRCs and other hashes based on the decompressed output in those cases. Also added support for asynchronous reads/writes using the new osd work item interfaces.
- 0.111u3            : Aaron Giles cleaned up chdman, normalizing its behavior and improving error reporting.
- 0.110u4            : Rewrote the Dragon's Lair driver from the schematics. Added new module machine\laserdsc.c which has laserdisc emulation for the PR-7280 and LD-V1000 laserdisc players. Full emulation of the laserdisc is pending support for CHD audio/video and high quality rips, but you can operate the game and see the frame numbers that would be displayed. Added built-in layout to display the scores, lives and credit information [Aaron Giles].
- 0.110u3            : Aaron Giles enhanced chd.c to support hunk sizes up to 16MB, versus the previous 64k limit. Added hooks to chd.c to specify codec-specific configuration info. Added support for split CHD files. CHD files can be transparently split into multiple pieces and left that way during read access. Modifications to split files are always written to the last file. A new command chdman -split is now available to split an existing CHD file.
- 0.110u2            : Significant cleanup of chd.c [Aaron Giles]: Got rid of the horrible last_error concept; now all routines return an error directly. Fixed several issues in managing metadata. Changed compression and verification routines to be client-driven rather than monolithic. Changed internal codec usage to be more flexible. Altered chdman and MAME to use the new interfaces. Added new -createraw command for creating raw data CHDs.
- 0.109u5            : smf updated CHD locating behavior to accept CHDs referenced by the parent of a clone if the hash matches, even if it has a different name.
- 0.104u3            : Chris Hardy fixed CHDMAN to write the correct number of logical bytes when extracting something that is not an even number of hunks large.
- 26th January   2006: R. Belmont - As most people understand by now, the ZiNc arcade emulator runs games based on varients of the original 1995 Sony PlayStation hardware. For a variety of reasons (one being just to see what happened), I've done some initial work towards having it also emulate the base home console itself. The 3 major points of difference are the CD-ROM drive's type (custom Sony vs. IDE or SCSI in the arcade boards that used CDs), the memory cards, and the joypads. I hooked up a CD-ROM capability by loading and calling out to an ePSXe-compatible CD plugin and almost immediately started getting some cool things to happen. Here's a few: Silent Hill: Boot warning Title, Wipeout XL: Title In-game, Tekken: Galaga (loading)In-game, Crash Bandicoot: Title, Time Crisis: Title In-game and Madden NFL '97: Main menu In-game. Please note that the final fate and design of this feature are not yet decided, so if you're definitely interested in shaking things up a little in PSX emulation (it's been kinda dead for a while, hasn't it?), voice your support on the official ZiNc forum at bannister.org.
- 0.103u4            : Aaron Giles moved CHD file access routines to fileio.c.
- 0.103u3            : Lawrence Gold added support for >4GB CHD files to CHDMAN for non-Windows systems.
- 0.103              : Lawrence Gold fixed CHDMAN to support 64-bit file sizes on some *nix platforms.
- 24th March     2005: Aaron Giles - Can I use chdman to put a CHD file back onto a hard disk? Yes you can, at least under Windows. You have to be logged in as administrator, and you have to know which physical volume your target hard disk is mapped as. The easiest way to do that on Windows XP and later is to right click on My Computer and select Manage from the menu. In the Computer Management window, in the tree on the lefthand side, select Disk Management. That will show you a list of all the physical hard disks you have plugged in. They will be listed as "Disk 0", "Disk 1", etc. Make a note of which disk number your target hard disk is. Once you've done that, it's easy to "image" the CHD file onto the disk. Just use the following syntax: chdman -extract imagename.chd \\.\PHYSICALDRIVEn - where "imagename.chd" is the name of the CHD file, and the "n" next to PHYSICALDRIVE is the disk number you figured out above. This technique has been used by several people to restore dead hard drives on arcade games. Note that you can also use chdman to create a backup of a hard disk image in much the same way: chdman -createhd \\.\PHYSICALDRIVEn imagename.chd. Which is how most of the CHD images have been created.
- 0.88               : Rene Single fixed a cut and paste error in CHDMAN.
- 0.86u3             : CHDMAN update [R. Belmont]. This makes the parser deal with .toc files output by current cdrdao better. I need to just give in and rewrite it for 2-pass operation sometime, it'll be much cleaner then. Incidentally, if anyone has any idea where to get specs for e.g. CloneCD or some other popularish image format(s) let me know and I'll add support. Converted some CD images to CHD.
- 0.81u7             : smf fixed a couple of issues with hard disks without checksums.
- 0.80u3             : R. Belmont added Preliminary CD-ROM support for CHDMAN. CDROM emulation primitives, including Red Book audio playback and support for the AM53cf96 SCSI controller. The SCSI CD-ROM emulation needs to be separated out from the AM53cf96 if we ever emulate other SCSI controllers or CD-ROM drives. Audio tracks on CDs are not compressed on a CD image at present (or more accurately they're gzip compressed, which is useless). The plan is to use FLAC at some point.
- 0.80               : Nathan Woods added some completion messages, and fixed the code that was falsely assuming that progress() was a function pointer in chdman.c.
- 0.79u3             : Nathan Woods added -createblankhd and -copydata commands and new arguments to -createhd to src\chdman.c. Ported it to Macintosh.
- 23rd February  2004: Nathan Woods added a few new commands to chdman and ported it to Macs.
- 0.78u5             : Olivier Galibert removed some 'smart' code from CHD filename handling.
- 0.78u1             : Nathan Woods added workaround for deficiency in Metrowerks compiler (src\chd.c).
- 21st December  2003: R. Belmont - Added CD-ROM support to the CHD format and CHDMAN utility. (For the curious, CDRDAO rips are used as input, and CDRWIN bin/cue could be added easily).
- 0.77u3             : Nathan Woods added #ifndef <headername>_H protection to src\harddisk.h and src\chd.h.
- 0.77u2             : Removed src\hdcomp.c. CHDman updates, with added checks to make sure source chd's aren't corrupt when doing updates etc [Aaron Giles].
- 30th November  2003: Aaron Giles sent in another update to chdman, making it verify the files when doing an update, merge or a diff operation.
- 25th November  2003: smf fixed some slight bugs in chdman that prevented it from compiling under DOS.
- 0.77u1             : Added src\chdman.c and src\chd.c/h. New CHD format and management tools [Aaron Giles]: hdcomp is now chdman old CHD files are _not_ compatible, they will need to be updated using chdman -update oldchd.chd newchd.chd. CHD now stands for 'Compressed Hunks of Data' not 'Compressed Hard Drive' as the format is more flexible.
- 21st November  2003: Aaron Giles - Well, I think the new CHD format seems to be working okay. It turns out that the hard drives for the Seattle games are often copied onto much larger hard drives, so finding one on the "factory original" hard drive is a bit tricky. It also means that if you compress the hard drive, it will often have garbage data on the end that makes the resulting CHD much larger than it should be. For example, the Mace hard disk I have is a 3.2GB hard disk, but most of the data on there is garbage and irrelevant to the game. I've been looking into ways of reliably "chomping" away the garbage. My current experiments have Mace down to a svelte 130MB, down from 1.2GB.
- 18th November  2003: Aaron Giles fixed various problems in the new CHD code.
- 17th November  2003: Aaron Giles sent in the first update to the CHD format support, separating the file format and hard disk functionality and adding support for SHA1 checksums in the format.
- 16th November  2003: Aaron Giles - We have a new CHD format. The next version of MAME will require you to update your CHDs. Now don't worry, you can do it yourself using the chdman utility (formerly known as hdcomp). Why the need for an updated format? Well, the existing format was close but not quite general enough to do everything we wanted to support other things like CD images and whatnot, so I re-engineered the CHD format to be usage-neutral. In fact, the code that actually implements the format doesn't know anything about hard disks, sectors, cylinders, etc. I also beefed up the compression a bit so you can get SmallCHD-like sizes in an officially supported manner. There are a also a bunch of other small tweaks & features in the updated format that make it overall a pretty nice improvement.
- 14th November  2003: Aaron Giles started rewriting the compressed hard disk code to better support different formats.
- 29th October   2003: Aaron Giles added a function for making desired read/write accesses take extra time.
- 0.76u1             : Reversed harddisk.c back to 0.73 status.
- 0.75               : Nathan Woods moved some variable declarations out of for loops so that it can compile in non-GCC compilers (src\harddisk.c).
-  6th October   2003: Roman Scherzer fixed a small crash bug in the harddisk writing functions.
- 26th September 2003: Bryan Aldrich submitted an improvement to the compressed hard drive image functions to avoid storing duplicate blocks in the .chd file when creating it, making the file a little smaller if there was redundancy.
- 18th August    2003: Roman Scherzer submitted a small bug fix to the hdcomp program.
- 0.72u1             : Nathan Woods added a function to retrieve the harddisk interface.
- 0.71u1             : Stefan Jokisch fixed MAME not looking in parent directory for Hard Drive images.
- 0.70u1             : Nathan Woods enhanced the hard disk code to support sector sizes other than 512 bytes (a non-IDE harddisk in MESS for one of the TI systems uses this). src\machine\idectrl.c has been modified to take this into account; it requires that HD images be 512 bytes. The new code is fully backwards compatible with old CHDs that do not have a sector size within them.
- 31st March     2003: Brad Oliver fixed several minor bugs that affected big-endian systems.
-  1st January   2003: Aaron Giles and Paul Priest fixed a bug in the hard disk image MD5 computation that affected Killer Instinct and Killer Instinct 2.
-  8th December  2002: Aaron Giles implemented compressed hard disk extraction and merging in the hdcomp tool, added support for various things in the IDE controller emulation.
- 30th November  2002: Aaron Giles fixed a crash that sometimes occurred when creating a new hard disk difference file.
- 20th November  2002: Aaron Giles improved the MD5 verification fix.
- 18th November  2002: Aaron Giles sent in an alternate fix for the false-positive MD5 checksums and improved the hdcomp tool.
- 13th November  2002: Aaron Giles prevented hard disk images being stored in ZIP files, and cleaned up various things in the source.
- 31st October   2002: smf added HD image support to the DOS version.
- 0.59               : Added src\harddisk.c/h, hdcomp.c and md5.c/h. Support for compressed hard disk images [Aaron Giles].
-  8th March     2002: Aaron Giles added hard disk support and emulation for a standard IDE controller.
- SOURCE: tools\chdman.cpp

       Hard Drives:
       HDD2141                   HDD2141 MK4313MAT (8944 CYL, 15 Heads, 63 Sectors and 4GB) (Bmcorerm)
       HDD2718                   HDD2718 MK2104MAV (4200 CYL, 16 Heads, 63 Sectors and 2GB) (Bmcompmx)
       Quantum ????              2.1 GB (Jdredd)
       Quantum Fireball EL       2.5 GB (Gauntleg)
       Quantum EL2.5AT           2.5 GB IDE HARD DRIVE (A51site4)
       ST9150AG                  Kinst
       ST9420AG                  Wg3dh - Seagate Laptop Drive model ST9420AG (988 CYL, 16 Heads, 52 Sectors and 420.8MB)
       TOSHIBA MK1924FBV         TOSHIBA MK1924FBV - 2.5" 543MB SCSI hard drive, contains GFX + main program (CryptKiller)
       TOSHIBA ???               988U.A01 4.3 GB (Bmcompm2)
       TOSHIBA ???               858U.A01 2.2 GB (Bmcompmx)



I12.6   HardDisk

- 0.281              : Basic fix for pc_chd support in imgtool. Take ownership of stream in pc_chd_image_open. 'imgtool::image::internal_open' passes an rvalue reference to the stream to the 'open' function of the image format module. It expects the 'open' function to take ownership if it keeps a reference to the stream. If 'open' does not do so, the 'stream' is going to be destroyed at the end of 'internal_open'. 'pc_chd_image_open' fails to take ownership, yet it persists a reference to the stream as part of 'info->hard_disk'. This causes an use-after-free condition. Correct determination of total sectors of a FAT volume. The number of total sectors of a FAT volume is stored either in the 16-bit word at offset 19 or, if that word is zero, in the 32-bit word at offset 32 instead. The 32-bit word is not a high word to build a 48-bit value in conjunction with the 16-bit word at offset 19, but it supersedes it (modules\fat.cpp and imgtool\modules\pc_hard.cpp) [Michael Karcher].
- 0.263              : Report unsuitable CHDs rather than crashing (imagedev\harddriv.cpp) [Vas Crabb].
- 0.257              : Changed ata\idehd.cpp/h to ata\hdd.cpp/h and machine\atastorage.cpp/h.
- 0.262              : Use multibyte.h helpers (imagedev\harddriv.cpp) [AJR].
- 0.243              : Classify hard_disk_file. Hide the CHD (hard_disk_file) [O. Galibert].
- 0.236              : Allow specifying the desired block size for loose files / verifying a CHD's block size (util\harddisk.cpp) [R. Belmont].
- 0.223              : Removed MCFG macros (imagedev\harddriv.cpp) [Ryan Holtz].
- 0.218              : Assign interface 'ide_hdd' (bus\ata\idehd.cpp) [Nigel Barnes].
- 0.215              : Changed machine\idehd.cpp/h to bus\ata\idehd.cpp/h. Moved IDE devices into bus\ata [AJR].
- 0.213              : Support non-CHD harddisk images in raw and 2MG format (imagedev\harddriv.cpp and util\harddisk.cpp). Check for CHD by header string, allows files not named .chd that are CHDs to be recognized (imagedev\harddriv.cpp) [R. Belmont].
- 0.194              : Actually implement read multiple command for machine\idehd.cpp. Fixes crash on 'NBA Showtime: NBA on NBC' where the vegas driver assumes that the buffer is 16 deep [Ted Green].
- 0.175              : Added CHS and LBA limits when the CHD doesn't contain identify device data (machine\idehd.cpp) [smf].
- 0.170              : Respond to command SECURITY DISABLE PASSWORD (machine\idehd.cpp) [yz70s].
- 0.164              : Decrease IDE read fill-time to avoids timeouts (machine\idehd.c). This fixed "HDD ERROR" after initial test in bm1stmix and other (MT05318) [Peter Ferrie].
- 0.163              : Increase IDE fill-time to avoid missed interrupts (machine\idehd.c) [Peter Ferrie].
- 0.158              : Added missing save states to machine\idehd.c, fixes kinst.c save state regression [Osso].
- 0.155              : Added Read Native Max Address IDE command (machine\atahle.h, machine\idehd.c) [Barry Rodewald].
- 0.153              : Simplified harddriv.c [Miodrag Milanovic].
- 0.152              : Tweaks to the idehd timing, which are still based on complete fiction (machine\idehd.c). Stops atari logo flickering in Area 51 (R3000). Calculate seek time using tracks rather than sectors, assuming that reading any sector on the current track will already be in the drives cache. Zeros m_cur_lba when the drive is reset for consistency (running kinst in a debug build took 30 seconds to start) (machine\idehd.c). Fix for divide by zero, if there is no CHD [smf].
- 0.151              : Changed IDE read sector timing to be the same as read multiple instead of write sector (machine\idehd.c) [smf].
- 0.149u1            : Simplified ide_device_interface (machine\idehd.c). Derive Chihiro's baseboard ide from IDE mass storage device (machine\idehd.c). Simplified idehd status flags & fixed ct486 booting in MESS. Fixed crash when reading from non-existent hard drive (machine\idehd.h). Changed "features" to "identify device". Don't set DRDY immediately when executing identify device as a timer is fired that will set it and trigger an interrupt anyway. Diagnostics fail if no identify device response is available. Set correct register contents at reset. Added edge detection to reset. Clear irq as soon as reset is triggered. Don't clear DRDY when resetting. Only call update_irq if something changed. Removed some places that were setting sector count. Added some #defines for masking bit fields (machine\idectrl.c, idehd.c, drivers\chihiro.c, cobra.c, kinst.c, taitotz.c and viper.c). Fixed head incrementing when using CHS with 16 heads (machine\idehd.c). Removed read_key() from ide_mass_storage_device as it's only used by ataflash and that was also reading the key in manually (machine\ataflash.c, idehd.c, drivers\chihiro.c). Added device number in logs, fixed issues with status flags that was causing FreeBSD to fail to boot with two drives (machine\idehd.c). Added ata_interface_device, ide_controller_device is now only for pc register mapping. Renamed ide_mass_storage_device to ata_mass_storage_device. Changed ide_hdd_device so it only picks up it's image from the harddisk_image_device, which does a lookup to see if there is a region itself (ataflash.h, idectrl.c/h, idehd.c/h, machine.mak, drivers\atlantis.c, calchase.c, chihiro.c, cobra.c, djmain.c, extrema.c, fruitpc.c, funkball.c, gamecstl.c, globalvr.c, iteagle.c, jaguar.c, kinst.c, maygayep.c, mediagx.c, midqslvr.c, midvunit.c, photoply.c, pinball2k.c, pyson.c, qdrmfgp.c, quakeat.c, queen.c, savquest.c, seattle.c, taitogn.c, taitotz.c, twinkle.c, vegas.c, viper.c, voyager.c, vp101.c, zn.c, includes\djmain.h and qdrmfgp.h). Added vt83c461, which is currently implemented as a 32 bit chip. This allows hooking up to the jaguar driver without any glue, but primal rage 2 does as the io bus it's connected to is only 16 bit. Only build the identify buffer on the first reset, so patches made by the driver aren't lost if the device is reset. Fixed issues that caused the HD to report that the diagnostics failed (machine\idehd.c and drivers\chihiro.c). Log unknown writes (machine\idehd.c). Moved identify buffer manipulation and master/user password setting from ata interface to the ata mass storage device. These should be stored in the CHD (emu\machine\atadev.c/h, ataintf.c/h, idehd.c/h, drivers\cobra.c, djmain.c, kinst.c, taitotz.c and viper.c). Make sure identify buffer is initialised (machine\idehd.c). Added IDE_CONTROLLER_32 for systems that have 32 bit prefetch. Don't update irq/dmarq unless they change (machine\ataintf.c). Uses one timer instead of anonymous timers, so that resetting the device will stop any outstanding work. BSY is always set when waiting for the busy timer to fire. Implemented DASP & PDIAG functionality, device 1 is detected during reset & if device 1 fails diagnostic then device 0 sets bit 7 of it's diagnostic result. Ide cards now default to 1 hard disk, otherwise device 1 without a chd will cause device 0 to report a controller error (AMIBIOS for example doesn't allow booting from device 0 if device 1 fails). Timing of DASP & PDIAG is set very short because of lack of wait states when accessing ATA bus. Improved SRST functionality, which has meant viper needed to be changed to trigger a hard reset instead of a soft reset. Writes to the command register are now ignored with BSY or DRQ is set (packet devices can accept the DEVICE RESET command but they are not supported yet) [smf]. Forgot the secret ingredient (machine\idehd.h) [R. Belmont].
- 0.149              : Added machine\idehd.c/h. Started to split IDE HD from IDE controller. Merged the MAME and MESS IDE HD device. Moved where cur_drive is updated & changed PCMCIA trampoline definition to 16 bit. Moved handlers into the ide_controller_device. First pass at tidying up IDE interface. It no longer tries to force everything to act as a PC. A copy of the VIA VT83C461 datasheet would be useful to remove some of the hacks added to make the games using it work again. Created a new device for the bus master IDE controller, but the implementation is still in the IDE controller (machine\idectrl.c/h, drivers\chihiro.c, seattle.c and vegas.c). Started to separate the bus master DMA from the drive emulation (machine\idectrl.c/h and drivers\zn.c). Decoupled the IDE bus master emulation from the hard drive emulation (machine\idectrl.c). Converted machine\idectrl.c to device_timer() [smf].
- 0.147u2            : Made harddisk_image_device responsible for accessing driver based CHD's (imagedev\harddriv.c) [smf].
- 0.147              : Support for writing to compressed hard drives using diff files (imagedev\harddriv.c) [smf].
- 0.145u2            : Added 'Harddisk' device (imagedev\harddriv.c).
- 0.145u1            : Removed 100% redundant and silly list of error strings (imagedev\harddriv.c) [Aaron Giles].
- 0.144u7            : Fixed SCSI hard disk allocation. This fixed Crypt Killer crashes MAME before it can display the disclaimer (imagedev\harddriv.c and machine\scsihd.c) [Curt Coder].
- 0.144u1            : Added support for hard disk softlists (imagedev\harddriv.c) [Miodrag Milanovic].
- 0.142u6            : Harddisk image device is now modern device (imagedev\harddriv.c) [Miodrag Milanovic].
- 0.142u4            : There is no difference in handling ide hard drives and other hard drives (imagedev\harddriv.c) [Miodrag Milanovic].
- 0.141u1            : Added imagedev\harddriv.c/h. Moved image devices implementation and related UI functions to emu section from MESS. Removed mess from names of some calls in image device code [Miodrag Milanovic].
-  8th December  2002: Aaron Giles implemented compressed hard disk extraction and merging in the hdcomp tool, added support for various things in the IDE controller emulation.
-  8th March     2002: Aaron Giles added hard disk support and emulation for a standard IDE controller.
- NOTES: Code to interface the image code with harddisk core (imagedev\harddriv.cpp). Generic MAME hard disk implementation, with differencing files (util\harddisk.cpp).
- SOURCE: imagedev\harddriv.cpp and util\harddisk.cpp



I12.7   CD-ROM

- 0.278              : Shift the end of the disk by 150 sectors like the start (isa\mcd.cpp) [Carl].
- 0.275              : Fixed wrong track number in error messages (util\cdrom.cpp) [Robbbert].
- 0.272              : Handle track type and serial copy management flags in TOC file input. Fixed issues with CUE, TOC and GDI parsers. Rewrote GDI parser to be more robust and identify more kinds of invalid input. Don't ignore the last line in CUE and TOC files if there is no terminating newline. Use osd_printf_ family functions for output (util\cdrom.cpp) [Windy Fairy]. Changed fprintf(stderr, ...) calls to osd_printf_error [AJR]. Disambiguate Toshiba XM3301 naming (scsi\scsicd512.cpp) [Patrick Mackinlay].
- 0.266              : Added preliminary support for multisession CD-ROMs, indexes and track flags. Refactoring. Read all indexes from cue files. Read in track flags from cues. Multisession support for cues (util\cdrom.cpp) [Windy Fairy]. More const, less copying (util\cdrom.cpp) [Vas Crabb].
- 0.265              : Zero entire output TOC structure in cdrom_file::parse_metadata. Fixes issues with fields that are not explicitly assigned in all situation (util\cdrom.cpp) [MetalSlug].
- 0.264              : Refactored parse_cue to handle GD-ROMs. Don't discard any data from GD-ROM cue/bin input including pre-gap data (util\cdrom.cpp). Fixes chdman 0.263 error does not compress dreamcast games (GitHub #12081 and #12087) [Windy Fairy].
- 0.263              : Removed unreachable additional handler for MODE2/2336 tracks (util\cdrom.cpp) [stonedDiscord]. Report unsuitable CHDs as "invalid image" rather than "unsupported operation" (imagedev\cdromimg.cpp) [Vas Crabb].
- 0.262              : Don't strip pregaps from Redump GD-ROM files (util\cdrom.cpp) [Maxime Gauduin]. Use multibyte.h helpers (isa\mcd.cpp) [AJR]. Fixed object lifecycles when loading from softlist or ROM region (imagedev\cdromimg.cpp). Fixed size of track info array. Also made it possible to enable VERBOSE in cdrom.cpp without link errors (util\cdrom.cpp) [Vas Crabb].
- 0.259              : Use helpers from multibyte.h (util\cdrom.cpp) [AJR].
- 0.255              : Hook up SCSI IRQ (nscsi\cdd2000.cpp) [AJR].
- 0.254              : Added ROM banking to prevent code from running off rails (nscsi\cdd2000.cpp) [AJR].
- 0.247              : Pass phys flag to read_partial_sector in read_subcode (util\cdrom.cpp). Note: This fixes the data roundtrip problem mentioned in #10230. This does not address the TOC returning CD_ROM instead of CD_ROM_XA that is mentioned in the same issue [Windy Fairy].
- 0.246              : Added M68HC11 internal EEPROM for nscsi\cdd2000.cpp [AJR].
- 0.243              : Removed util\chdcd.cpp/h. Classify cdrom_file. Could use more internal work, but it's a step. Be a little more robust to not having any cdrom reader (machine\stvcd.cpp) [O. Galibert]. Clean up code somewhat. Use std::string_view for filename parameters. Use ioprocs rather than core_file. Reduced commenting out of miscellaneous logging [AJR].
- 0.241              : Fixed CD audio and changed TOC data (isa\mcd.cpp) [Carl].
- 0.240              : Allow recognizing CDI/2352 in cuesheets (util\cdrom.cpp) [Ryan Holtz].
- 0.232              : Added bus\nscsi\crd254sh.cpp/h. Skeleton driver for Sony/Apple CRD-254SH 4x CDROM reader [O. Galibert].
- 0.231              : Added bus\nscsi\cdu415.cpp/h, bus\nscsi\cdu561.cpp/h and bus\nscsi\cdu75s.cpp/h. Return index 1/start of track data instead of index 0/start of pregap data in generated TOC. Added a pre-calculated field for data from current logofs to end of track. Removed pregap adjustment from (MESS) FM Towns code. Added pregap adjustment so track ends when audio data ends in PSX CD player. Fixed pce_cd load error (util\cdrom.cpp) [Windy Fairy]. Added Sony/Apple CDU75S CD-R (nscsi\cdu75s.cpp) and Sony CDU415 CD-R (nscsi\cdu415.cpp) driver [O. Galibert]. Added dump and skeleton device for Sony CDU561-25 CD-ROM drive (nscsi\cdu561.cpp). Added third BIOS dump to CDU561-25 and info on CXD2568M [Bitsavers]. Added internal rom dump to CDU75S [Al Kossow]. Disable debug log message when parsing TOC. Also some miscellaneous cleanup/consistency (util\cdrom.cpp) [Vas Crabb].
- 0.222              : Simplified signatures of most handlers (isa\mcd.cpp) [AJR]. READ/WRITE macros removal (machine\stvcd.cpp) [Osso].
- 0.221              : Moved all commands into functions. Moved communication interface to device_memory. Moved note on top, make some basic QA (machine\stvcd.cpp) [Angelo Salese].
- 0.216              : Correct HC11 type for Philips CDD2000 CD-R to MC68HC11F1 [AJR].
- 0.212              : Added nscsi\cdd2000.cpp/h and cdrn820s.cpp/h. Adeed dump and skeleton device for Philips CDD2000 CD-R [Cyberia/2 Filebase]. Added dump and skeleton device for Caravalle CD-R N820s [I-Shou University File Server].
- 0.204              : Added bus\scsi\scsicd512.cpp/h. Added various legacy SCSI and new-SCSI CD-ROM devices which support 512-byte blocks by default [Ryan Holtz].
- 0.202              : Accept .toast as a synonym for ISO images (util\chdcd.cpp) [R. Belmont].
- 0.194              : Recognized ISO images with 2336 byte sectors [R. Belmont, Angelo Salese]. Fixed some boundary checks for filters access (machine\stvcd.cpp) [Oliver Stoeneberg].
- 0.189              : Added cdrom_get_chd (Get a handle to a CHD from a cdrom; util\cdrom.cpp) [MetalliC].
- 0.185              : Translate from 2336 to 2048 (Return 2048 bytes of Mode 1 data from a Mode 2 form or XA sector) [Carl].
- 0.179              : Fixed load stuff for Mitsumi ISA CDROM Adapter and vis links loads all the way now (isa\mcd.cpp) [Carl].
- 0.177              : Removed create_option_guide() as you can't create CD's (imagedev\chd_cd.cpp) [smf].
- 0.176              : Fixed >2GB .iso parsing in util\chdcd.cpp. Set pregap subcode type to NONE for .CUE and .TOC for consistency with other formats [MetalliC].
- 0.173              : Declared (std::nothrow) some allocations (util\cdrom.cpp) [dankan1890].
- 0.169              : When chdman wants only the original sectors from CHD-CD, give it only the original sectors (util\cdrom.cpp) [R. Belmont].
- 0.154              : Fixed usage of uninitialized member in cdda_device [Oliver Stoeneberg].
- 0.152              : smf fixed (MESS) [debug] crash during Playstation Logo (machine\psxcd.c).
- 0.148u5            : Various CD-ROM / CHDMAN improvements [R. Belmont]: Correct import/export of bin/cue images in which the pregap sectors are present. Normalized TOC handling; the start of a track is always the first pregap sector. Finally allows reading and CDDA playing pregap sectors. Works even if the pregap sectors are not present in the file. Note: Existing CHDs should work (or not) as before - previously non-working ones that were broken due to disc geometry should work if regenerated from source. I tested this on several known-touchy cases (including Saturn Black/Matrix Reprint cinemas and PCE-CD Prince of Persia) but there are likely others. Drivers that tried to fake around the previous lack of pregap reading on CDDA may need some adjustment (util\cdrom.c, chdcd.c and tools\chdman.c).
- 0.148u3            : (MESS) Small cleanups (machine\psxcd.c/h). Added CDDA muting to machine\psxcd.c [Carl]. Stop PSX crashing when reloading a state when CD access was in progress. Stop PSX CD timers when reset [smf].
- 0.148u2            : Fixed uninitialized member in mess\machine\psxcd.c [Oliver Stoeneberg].
- 0.148u1            : Fixed compile on a define switch (machine\psxcd.c) [Angelo Salese]. Cache CPU & SPU lookup (machine\psxcd.c) [smf]. (MESS) Properly close the old image when swapping CHD-CDs (imagedev\chd_cd.c) [Steve Leung].
- 0.148              : Introduces CD-ROM concept of logical sector addresses so games see the disc with pregap/postgap sectors actually taking up sector numbers as in reality. Fixes PC-Engine CDs with hardcoded sector numbers [R. Belmont, Angelo Salese]. Read ISO as binary as well (lib\util\chdcd.c). Cleaned up some chdcd.c error messages (lib\util\chdcd.c). Added a "tests" target to the makefile (chdtest.py). First version of chdman unit test. Fixed dependies of tests target. Recreated all files for the chdman unittest. Added test for TOC input. Fixed filename set in NRG track parsing. Added NRG test to chdman unit test (lib\util\chdcd.c). Fixed reading of NRG images. Bail out on unsupported tracks in NRG images / cleanups (lib\util\chdcd.c). Improved error reporting of parse_wav_sample() and fixed potential resource leaks / use more proper errorcodes when encountering an error when parsing an input file (lib\util\chdcd.c). Correct comment and log message in parse_wav_sample() about channels. Correct some format specifiers (lib\util\chdcd.c) [Oliver Stoeneberg]. Skip without reading of Nero CD (lib\util\chdcd.c) [smf]. Fixed CD-ROM getting the type of the last track, fixes PCE Bomberman '94 proto [R. Belmont]. Added cdda_get_channel_volume() function to CD-DA device. Fixed volume control display in PC Engine CD system [Angelo Salese].
- 0.147u4            : Added ISO support to CHDMAN and as mountable image device (util\chdcd.c). Added ISO to supported CDROM images lists (imagedev\chd_cd.c). Give error in cases when track size is not one of supported (util\chdcd.c). Fixed CDROM extensions in listmedia (imagedev\chd_cd.c) [Miodrag Milanovic]. Added .cdr as a synonym for .iso, as seen on e.g. archive.org [Justin Kerk].
- 0.146u2            : CHD fixes [jmak]: Fixed uninitialized variables that were creeping into output. Changed qsort() callback to never return "equal", working around unstable system libc implementations (util\chd.c and cdrom.c).
- 0.145u8            : Marked all remaining old-style CDs without gap information BAD_DUMP. These will still run (where applicable), but need to be re-ripped for best accuracy (and proper audio track timing for some Bemani games) [R. Belmont, Firewave].
- 0.145u6            : David Haywood added code to cdrom.c to compute and verify ECC codes for mode 1/2 sectors. Aaron Giles added CD compressor template which separates subcode data from sector data, removes redundant ECC data prior to compression, and uses separate compressors for each part. Defined LZMA and ZLib CD compressors based on this and made them the default for CDs. Sadly couldn't wrap the FLAC compressor here because it would have produced incompatible output with previous versions.
- 0.145u2            : R. Belmont fixed crash when parsing bin/cue (util\chdcd.c). The right fix is to not compare against array index -1 [Aaron Giles].
- 0.143              : R. Belmont converted CDROM mode 1 Form 1 sectors to mode 1 raw if requested.
- 0.141u3            : Added alt lba_to_msf conversion needed by SegaCD/MegaCD (cdrom.h) [David Haywood].
- 0.141u1            : Added emu\imagedev\chd_cd.c/h.
- 0.138u4            : Miodrag Milanovic added per-device image softlist loading routine. Added ability to support other types of software lists, so floppies, cassettes, cd-roms are now possible to be used.
- 0.138u2            : chdman/cdrom updates [R. Belmont]: CDRWIN .bin/.cue images now supported for both input and output. Pregap and postgap information is now preserved in the format. Output of CDRDAO images is significantly improved. Existing CHD-CDs will continue to work fine and for data-only discs no action needs to be taken. For mixed data/audio discs (e.g. analog 573/Bemani games) they should be re-converted for better preservation.
- 0.138              : Oliver Stoeneberg fixed stack corruption in CHD code (lib\util\cdrom.c).
- 0.137u4            : R. Belmont correct CDROM header length for form 2 raw sectors.
- 0.128u2            : R. Belmont fixed wrong sector size at CD_TRACK_MODE2 conversion routine.
- 0.124u1            : Various SCSI devices register state items by their disk ID, which are not unique across device types. Introduced a device-type offset for CD-ROMs so their registrations don't clash with harddisks [R. Belmont].
- 0.118u6            : smf added SCSIOP_GET_INQUIRY_BUFFER to scsicd & scsihd.
- 0.118u1            : smf fixed converting CD's containing audio that were ripped by cdrdao, which was broken recently. The code is cleaner and more maintainable now.
- 0.116u4            : R. Belmont added stricter checking in cdrom.c to prevent crashes in games when no CD-ROM is present.
- 0.114u2            : R. Belmont updated stvcd to be working enough that most Saturn games at least die for some other reason, and a few actually do useful things. Also included a small update to the core CDROM code so you can fetch a sector without knowing in advance what format it is.
- 0.112u3            : smf added state saving to emu\sound\cdda.c.
- 0.111u6            : Moved src\chdcd.c/h to src\tools\.
- 0.111u1            : Nathan Woods moved a chunk of platform specific code out of chdcd.c and romcmp.c into the osd_tool code.
- 0.110u3            : Aaron Giles cleaned up cdrom.c. Removed audio implementation and relocated code into sound\cdda.c. Changed metadata format to be textual instead of binary (old metadata format is still supported). Removed external access to CHD positions; all accesses are now done at the physical LBA level and converted internally.
- 0.106u1            : Improvements to CHD-CD support [R. Belmont]: Additional RAW CD sector conversion support, so a game can request e.g. 2048-byte data sectors from a RAW CHD-CD and still get the right data. Reversed CHDMAN error message - now non-RAW CHD-CDs are deprecated. Susume now uses a RAW CHD-CD read directly from an original pressed Konami disc.
- 18th March     2006: Guru - CDROM - GE984 A01(BM) arrived late yesterday from Japan.
- 0.103              : R. Belmont added cdrom_get_track_length() to cdrom.c. Completely rewrote machine\stvcd.c and .h. There's a lot less there now, but what's there is more understandable and works much better.
- 0.95               : Added machine\scsicd.c. R. Belmont moved actual CD-ROM and harddisk device emulation out of am53cf96.c to new scsicd.c and scsihd.c files. CD-ROM emulation expanded to support more SCSI commands and bugfix some existing ones. Added -extractcd to convert CHD-CDs back into CDRDAO .bin/.toc images.
- 0.89u1             : R. Belmont fixed small problem in CHDCD.
-  5th April     2004: R. Belmont improved the CHD-CD support slightly, to support other track formats better.
- 0.81               : CHDMan CHDCD creation fix [R. Belmont].
- 0.80u3             : Added src\cdrom.c/h, chdcd.c/h and sound\cdda.c/h. R. Belmont added Preliminary CD-ROM support for CHDMAN. Input is from CDRDAO .toc/.bin  images (cdrdao.sourceforge.net). CDRDAO comes with utilities to convert CDRWIN .cue/.bin images to .toc/.bin format. CDROM emulation primitives, including Red Book audio playback and support for the AM53cf96 SCSI controller. The SCSI CD-ROM emulation needs to be separated out from the AM53cf96 if we ever emulate other SCSI controllers or CD-ROM drives. CHDMAN doesn't output anything useful when you extract a CHD-CD. It should write out a CDRDAO image.
- 15th January   2004: R. Belmont - CD audio tracks now work for CHD-CDs, so Susume! Taisen Puzzle-Dama has background music.
-  2nd January   2004: R. Belmont - Ongoing work on CHD-CD support to make it submittable.
- 21st December  2003: R. Belmont - Added CD-ROM support to the CHD format and CHDMAN utility. (For the curious, CDRDAO rips are used as input, and CDRWIN bin/cue could be added easily).
- 0.77               : Support for preliminary CD driver for the STV game Sports Fishing 2 (machine\stvcd.c).
- NOTES: If the CD in the Konami-GV System is swapped to another GV game, the game will boot but will stop with an error '25C MBAD' (the EEPROM is 25C). So the games can not be swapped by simply exchanging CDs because the EEPROM will not re-init itself if the CDROM is swapped. This appears to be some form of mild protection to stop operators swapping CD's. The CD contains one MODE 1 data track and several Redbook audio tracks which are streamed to the speaker. The CD for the Konami GV System contains one MODE 1 data track and several Redbook audio tracks which are streamed to the speaker via CN8. For the Capcom CPS-3 games the dumper used CDRWIN V.3.4C to copy the CD. CD labels: CAP-WZD-5 (Capcom 1996 - Warzard), CAP-JJK-140 (Capcom 1998 - JoJo's Venture), 703EAA02 (Konami 1998 - Heatof11)
- DRIVERS: cps3.c, konamigv.c, konamim2.c, saturn.c (sfish2)
- PCB: CAP-WZD-5 (CD labeled as 703EAA02 (Heatof11)
- SOURCE: util\cdrom.cpp, util\chdcd.cpp, scsi\scsicd.cpp, machine\stvcd.c


       CDROM drives:
       Panasonic / Matsushita CR-504-KCM  4X SCSI  drive (CPS-3)
       Panasonic              CR-583      8x CDROM drive (Polystar)


I12.71  Matsushita CR589

- 0.262              : Use multibyte.h helpers (ata\cr589.cpp) [AJR].
- 0.215              : Changed machine\cr589.cpp/h to bus\ata\cr589.cpp/h. Moved IDE devices into bus\ata [AJR].
- 0.181              : Removed unnecessary file machine\cr589.h [smf].
- 0.173              : Skip disc change detection (machine\cr589.h). This fixes all KSYS573 sets no longer work when attempting to test the CD hardware [Carl].
- 0.154              : Changed description to 'Matsushita CR589 CD-ROM Drive'.
- 0.152              : Added a work round so that CR589 firmware updating works again, either from the separate CD's or as part of the game install (for example DDR MAX) [smf].
- 0.151              : Use virtual multiple inheritance to share command processing between SCSI & ATAPI instead of having a SCSI subdevice. This allows matsushita_cr589_device & gdrom_device to derive from atapi_cdrom_device [smf].
- 0.150              : Changed description to 'Matsushita CR589'. Store firmware in NVRAM (machine\cr589.c) [smf]. Fixed space in SCSI_CR589 device shortname [Tafoid].
- 0.146u1            : Added 'CR589' device.
- 0.120u2            : Added machine\cr589.c/h. Added support for CR-589 firmware to the System 573 driver [smf].
- NOTES: Matsushita CR589 CD-ROM Drive
- DRIVERS: konamim2.cpp, ksys573.cpp and namcos10.cpp
- SOURCE: bus\ata\cr589.cpp


I12.72  Stingnet ATAPI CD-ROM
- 0.259: Added 'Stingnet ATAPI CD-ROM' device (konami\stingnet.cpp).
- DRIVERS: stingnet.cpp
- SOURCE: konami\stingnet.cpp


I12.73  Toshiba XM-6402B CD-ROM
- 0.259: Added 'Toshiba XM-6402B CD-ROM' device (namco\namcos12_cdxa.cpp).
- DRIVERS: namcos12.cpp
- SOURCE: namco\namcos12_cdxa.cpp



I12.8   DVD

- 0.255              : Added util\dvdrom.cpp/h.
- 0.215              : Added bus\ata\px320a.cpp/h. Added skeleton device PleXCombo PX-320A DVD/CD-RW Drive [AJR, Firmware HQ].
- NOTES: Plextor PleXCombo PX-320A IDE DVD/CD-RW drive
- DRIVERS:
- SOURCE: util\dvdrom.cpp and bus\ata\px320a.cpp




I12.9   Laser Disc

- 0.262              : Added a general-purpose parallel LaserDisc player interface to have a common class parent for Pioneer LD-PR7820 (machine\laserdsc.h) [Ryan Holtz].
- 0.259              : Use helpers from multibyte.h (util\vbiparse.cpp) [AJR].
- 0.252              : Always add video quad to screen container, adjust tint based on m_videoenable instead (machine\laserdsc.cpp) [Ryan Holtz]. Don't try to allocate a 1MB object on the stack, fixes launching ldresample with no parameters causes SIGSEGV (tools\ldresample.cpp) [Vas Crabb].
- 0.242              : Added functionality to retrieve if a disc is CAV. Added savestate registration (machine\laserdsc.cpp) [Ryan Holtz].
- 0.226              : Update Laser Disc sound to new stream callbacks [Aaron Giles].
- 0.216              : Replaced output().set_value with output finders (machine\ldpr8210.cpp) [AJR].
-  9th February  2019: MooglyGuy - Currently, the Domesday Duplicator hardware itself is stable, and has been since around September of last year. The designs, schematics and firmware are available for anyone to download and build themselves, who wants to start capturing their own discs. Meanwhile, focus has shifted towards improving the output of ld-decode, which generates an uncompressed video output from a capture file produced by the Domesday Duplicator hardware. This is the primary reason why there hasn't been much if any movement on the MAME front towards adding LD games quite yet: We'd like the output of ld-decode to be largely stable before starting to add a lot of LD captures. People already get cranky when they have to re-download ROM sets that are a few kilobytes to a few megabytes in size - the amount of wailing and gnashing of teeth would be astronomical if we forced people to redownload upwards of 100 CHDs the size of Cube Quest each time there's a major improvement in the output quality of ld-decode. For those who want a demonstration of the current capabilities of ld-decode, here's a promo video that was released a couple weeks ago to mark the release of ld-decode rev4. As an aside, it appears that ld-decode is at least partially capable of decoding raw RF captures from a VHS tape, given appropriate adjustment of the decoding parameters. Similarly, there's also another person working on getting ld-decode to be able to decode the output of the "HackRF" project, which is a SDR (Software-Defined Radio) capable of broadcasting and receiving analog television signals. Last but not least, the current roadmap for ld-decode rev5 can be found here: https://github.com/happycube/ld-decode/milestone/5. The plan is for rev5 to be released on the 28th of this month (February 2019). Among other major improvements, it will hopefully contain EFM demodulation, which will allow for decoding the data contained in the Domesday discs, as well as support for decoding digital audio and AC3 audio on laserdiscs which used them.
-  7th August    2018: Smitdogg - brizzo sent out an A/V sample of the current WIP of laserdisc progress thanks to Chad Page (http://smitdogg.mameworld.info/du/aug7-2018/ldsample.avi).
- 12th May       2018: Smitdogg - brizzo and domesday86.com teamed up on some new laserdisc dumping hardware of which we're getting 10 copies. There's going to be a tidal wave of laserdisc dumps.
- 0.196              : Removed first_screen usage from drivers\ldplayer.cpp [Ryan Holtz].
- 0.180              : Added drivers\ldplayer.cpp. Removed ldplayer\ldplayer.cpp, ldplayer.lst and scripts\target\ldplayer\ldplayer.lua. Made ldplayer regular driver [Miodrag Milanovic].
- 0.175              : Fixed laserdisc screen PAL parameters (machine\laserdsc.h) [Angelo Salese].
- 0.170              : Make ldplayer\ldplayer.cpp compile again [Osso].
- 0.161              : Added ldplayer\ldplayer.lua. Fixed compiling ldplayer (ldplayer\ldplayer.lua) [Miodrag Milanovic, Vas Crabb].
- 0.153              : Fixed all Laserdisc games show error in MAME 64-bit when exiting game (cliffhgr, cobram3, cubeqst, firefox, mach3 and usvsthem).
- 0.146u5            : Updated forgotten LD games (drivers\deco_ld.c, dwarfd.c, esh.c, lgp.c, segald.c, superdq.c and timetrv.c). Fixed SCREEN_UPDATE_RGB32 and added MCFG_LASERDISC_OVERLAY_CLIP to deco_ld.c. Removed legacy 8255 APIs [Angelo Salese]. Fixed building ldplayer [Miodrag Milanovic].
- 0.146              : Fixed ldplayer compile [Miodrag Milanovic].
- 0.145u2            : Aaron Giles fixed ld tool compilation (tools\ldresample.c).
- 0.145              : Added ldplayer\ldplayer_dev.lst. First pass of cleaning up LDPLAYER to allow for building [Tafoid].
- 0.144u6            : Removed machine\ldcore.c/h. Added machine\laserdsc.c/h, ldpr8210.h, ldstub.c/h, ldv1000.h and ldvp931.h. Major bitmap-related changes throughout the system [Aaron Giles]. Reorganized the laserdisc base driver and all the laserdisc drivers as modern C++ devices, cleaning the code up considerably. Merged ldsound device into the laserdsc device since modern devices are flexible enough to handle it.
- 0.140              : Aaron Giles fixed LDPLAYER fails to link.
- 0.136u2            : Fixed Laser Disc build fails with missing OPTION_ROMPATH.
- 0.136u1            : Aaron Giles fixed UNIDASM fails to link when ldplayer is the specified target.
- 0.132u5            : Aaron Giles added mechanism for the laserdisc core to return 0 for the Philips codes if video is squelched. Updated the Gottlieb and Cliff Hanger drivers to request it this way, since they decode externally.
- 0.131u3            : Aaron Giles tweaked some of the laserdisc interfaces to use ROM_NAME() and MACHINE_DRIVER_NAME() macros.
- 0.130u4            : Derrick Renaud fixed analog settings to return to default when IPT_UI_SELECT (enter) pressed. Fixed misplaced brackets, allowing upper/lower case extensions for crosshair graphics and LDplayer CHD files.
- 0.130u1            : Vas Crabb fixed build of ldplayer on OS X. Since the CUSTOM sound module no longer exists, I arbitrarily changed it to WAVE, as ar gets upset if it has no input files. I also removed the -all_load flag for ldplayer from the main makefile as it upsets the linker on OS X.
- 0.129              : Laserdisc player works again. Added MDRV_LASERDISC_GET_DISC callback hook which allows for dynamically finding the CHD, rather than relying on the DRIVER_INIT hackery that was there before [Aaron Giles]. Oliver Stoeneberg cleaned up some memory and file handles in the error cases of ldverify. Aaron Giles fixed linking ldplayer fails and wrong colors using Direct3D on ATI cards.
- 0.128u7            : Aaron Giles modified laserdisc players to walk back to their global device state via the owner, rather than brute-force searching for the first instance and hoping that is the right one.
- 0.128              : Added tools\ldresample.c. Aaron Giles added new tool ldresample to assist in resynchronizing audio tracks in a CHD with frames. Currently still WIP but useful if you know what you're doing.
- 0.127u7            : Aaron Giles added new functions for building device-relative tags. Changed machine configuration builder to use these functions. Also changed the laserdisc player devices to use them. Updated Z80 CTC/SIO code to assume that the CPU provided for the clock is relative to the device that the CTC/SIO belong to. Updated memory code to assume that regions and devices referenced by the memory map are relative to the device the associated CPU belongs to. Aaron Giles cleaned up and normalized the three existing laserdisc emulations. Removed obsolete code from the laserdisc core.
- 0.127u6            : Aaron Giles removed render_container_set_palette_alpha() hack. Now the alpha value can be set directly in the palette entry and will be respected for laserdisc overlays. ldverify improvements [Aaron Giles]: Uses back-end decoding for CHDs directly to bitmaps. Changed min/max detection to only check 0/255. Fixed off-by-one bug in min/max computation. Separated white code detection from frame number detection. Track cadence with frame numbers as well as white codes. Use vbiparse.h constants where appropriate. Aaron Giles simplified core deinterlacing logic based on availability of pre-decoded VBI data. Added plumbing for allowing for overall brightness/contrast/gamma corrections on laserdisc video. Fixed bug when combining brightness values in the palette logic.
- 0.127u5            : Removed machine\laserdsc.c. Aaron Giles added Philips 22VP931 laserdisc emulation, which is mostly working. Communication works fine and basic searching/playback/skipping is functional. Still a bit glitchy.
- 0.127u4            : Aaron Giles changed requirements for laserdisc CHDs to require a new chunk of metadata with pre-decoded frame information. Modified chdman to automatically produce this for CHDs that are of the appropriate parameters. To fix up existing CHDs, use chdman -fixavdata on the CHD. Aaron Giles modified the laserdisc core to leverage the pre-decoded frame metadata, which is now required. This improves seek times when searching and allows the player-specific emulation access to the VBI data as soon as it would really be available. Changed update callback timing to fire just before the first line of VBI data would be read; at that point, the frame selection is assumed to be committed. Aaron Giles changed laserdisc video parameters to position the screen area at the bottom rather than the top, since this corresponds more closely to standard line numbering. Aaron Giles extended the vbiparse code to support pack/unpack, and to more fully document all the meanings of the VBI codes. Aaron Giles updated ldplayer to support slow/fast forward movement, frame/chapter display and separate controls for scanning/stepping. Aaron Giles converted Simutrek-hacked laserdisc emulation to using the actual MCU from the game, which in turn hands off commands to the PR-8210 MCU. This is still not 100% but is pretty close at this point and achieves the correct behaviors in most cases.
- 0.127u3            : Aaron Giles extended the LD core interface structure to allow each player type to provide its own ROM region and partial machine driver. Aaron Giles changed laserdisc interface to explicitly specify the screen and sound devices it should route to. Drivers no longer have to manually call laserdisc_vsync(). Instead, the laserdisc code connects up to the routed screen device and works based on that screen's VBLANK timing. Removed all existing calls to laserdisc_vsync(). Aaron Giles changed laserdisc behavior so that it completes the previous video read and initiates the next read at the end of VBLANK instead of the beginning. This gives player logic time during VBLANK to alter the slider position prior to fetching the next frame. Aaron Giles added new laserdisc callback for vsync begin and changed the update callback to be called at the end of VBLANK. Also added functions to set the slider speed, advance the slider, and directly control the video/audio squelch. In addition, there is a new status function to get the slider position in general terms.
- 0.127u2            : Added machine\ldcore.c/h and ldv1000.c. Aaron Giles split core laserdisc functionality into separate file ldcore.c. Each player now gets its own source file, along with new hooks which enable more precise control over the behavior. Updated the PR-8210 and LD-V1000 implementations to the new spec. Other players will come online shortly. Aaron Giles changed laserdisc scan behavior so that it requires a constant stream of signals to continue scanning. Updated ldplayer accordingly.
- 28th August    2008: Aaron Giles - About Laserdiscs, part 3: As I mentioned previously, laserdiscs directly encode and reproduce the broadcast signal format (either NTSC or PAL). So in order to understand how the information about frame numbers and other details are encoded, it is important to know the basics of the underlying signal format. In this case, I'll talk about NTSC specifically. An NTSC frame consists of 525 scanlines of data, broadcast 29.97 times per second. As I mentioned before, each frame consists of two fields, which makes each field 262.5 scanlines (yes, it is true that there is an extra half-scanline). Of these 262.5 scanlines, only 240 are normally visible. This is because your classic CRT-based TV set required some time to move the electron beam from the bottom-right of the screen back to the upper-left in preparation for the next field, and 22.5 scanlines' worth of time was decreed to be an appropriate timeframe for this to happen. These extra 22.5 scanlines each field are known as the Vertical Blanking Interval, or VBI. Traditionally, there is not much of interest transmitted within the VBI area of the field, apart from a few basic control signals that were used for calibrating the picture and synchronizing the timing. Over time, however, people came up with reasons to add useful data to the VBI area. One of the most well-known of these is Closed Captioning, which is encoded on line 21 of each field (the top 22 lines are the VBI, and the following 240 are the visible lines). Laserdiscs took this a step further, and defined special encodings of their own. Line 11 of each field contains what is known as the "white flag", which is a simple binary indicator of whether the current field is the first field of a frame. Laserdisc players look for this white flag to know how to do a still frame that doesn't consist of a split between two film frames. Since it takes two fields to make one frame, and since many film-based laserdiscs are encoded in a 3:2 cadence, it is not straightforward to ensure this without some additional information. Even more interesting than the white flag are the "Philips codes" that are encoded on lines 16, 17, and 18 (note that all the laserdisc encodings are on lines different from Closed Captioning, so that laserdiscs could be encoded with Closed Captioning data as well). The Philips codes are special 24-bit digital values that are encoded in the VBI area of each field, and which are used to describe the field. In general, there are up to two Philips codes encoded on three lines, with line 17 generally being a redundant copy of line 18 for added resilience against dropouts or other transmission errors. So how do you encode a 24-bit binary number into a single scanline of an analog video signal? The answer is to use an encoding technique known as Manchester codes. If you treat bright white as a '1' bit, and black as a '0' bit, then this encoding uses two bits to encode each bit of the code. The reason for two bits is to ensure that the decoded value makes sense, and also to establish a clock for the codes. This works because Manchester codes encode a '0' bit as 10 and a '1' bit as 01. Because of this, you are guaranteed that in the middle of each bit there is a transition from black to white or vice-versa, and this can be used to establish the clock. Once you figure out the clock, then the direction of each transition tells you what the actual value of the bit is. Below is a picture of the VBI region for a CAV laserdisc. The top few rows are an ugly green because those lines of VBI data were not provided by the capture card. Once the Philips codes are extracted, they can be treated as binary data and evaluated. Unfortunately, it seems as though most of the information about what the various Philips codes mean has been kept relatively secret. However, the most important codes are understood: $88FFFF = Lead-in code (indicates the field is located before the official start of the disc), $80EEEE = Lead-out code (indicates the field is located after the official end of the disc), $FXXXXX = Frame code (specifies the 5-digit frame number (XXXXX) in BCD format), $8XXDDD = Chapter code (specifies the 2-digit chapter number (XX) in BCD format) and $82CFFF = Stop code (indicates the player should pause at the current field). So as the player reads data from the disc, it also needs to detect the white flag and Philips codes, and act on them as necessary. By capturing the VBI data along with the normal active video, we are able to preserve this information, and write a laserdisc simulator that operates off of the same information that the original players did.
- 0.127              : Aaron Giles added new generic laserdisc VIDEO_UPDATE handler to the laserdisc code. This handler works for both disc-only games and those with overlays. For disc-only games, the base macro is sufficient. For games with overlays, an additional set of configuration macros are provided: MDRV_LASERDISC_OVERLAY - specifies update function, width, height and bitmap format of the overlay, MDRV_LASERDISC_OVERLAY_CLIP - specifies the visible area of the overlay bitmap, MDRV_LASERDISC_OVERLAY_POSITION - specifies default x,y position and MDRV_LASERDISC_OVERLAY_SCALE - specifies default x,y scale factors. The update function provided to MDRV_LASERDISC_OVERLAY is identical to a normal VIDEO_UPDATE callback, so a standard one can be used. All existing laserdisc drivers have been updated to support this new rendering mechanism, removing much duplicated code. Aaron Giles added new macros MDRV_LASERDISC_SCREEN_ADD_NTSC and _PAL, which defines a standard screen with the correct video timing characteristics and update function for laserdiscs. Updated all drivers to use these macros instead of defining their own screens. Aaron Giles added DISK_REGIONS to all laserdisc drivers. Aaron Giles added DISK_IMAGE_READONLY_OPTIONAL to support games (like Cube Quest) where the disk is non-essential to the game's operation. Aaron Giles fixed bug in identifying the custom sound driver for the laserdisc. Aaron Giles updated ldverify to identify blank regions of the disc for post-processing. Aaron Giles fixed rendering 16bpp with alpha using bilinear filters (fixes screenshots of laserdisc games with overlays).
- 0.126u5            : Added ldplayer\ldplayer.c, ldpdriv.c and ldplayer.mak. Aaron Giles added new target ldplayer, which is based on MAME but serves as a standalone laserdisc player for CHDs. Right now only the Pioneer LD-V1000 is connected, and limited commands are available. Each player type is a driver, so you specify the player type on the command-line. The driver then opens the first CHD it finds in your ROM path and uses that as the laserdisc. The intention is that you specify the -rompath each time on the command-line, so a typical approach might be: ldplayer ldv1000 -rompath j:\mach3, where it will pick up the mach3.chd lurking in your j:\mach3 folder. Several basic commands are supported: Space = play/pause, Alt = toggle frame display, Left = scan forward (when playing) or step forward (when paused), Right = scan backward (when playing) or step backward (when paused), 0-9 = enter numbers for search and Enter = execute search to frame. Aaron Giles rejiggered huffman.c to support multiple interleaving streams and a delta-RLE pre-encoding. Added optimized case for the Y/Cb/Y/Cr video encoding case. Cleaned up the code. Aaron Giles updated avcomp.c to use the new huffman.c functions. Reworked configuration options to allow for both input and output of naturally aligned data streams. Updated chdman and laserdsc to use the new interfaces. New compression gives an additional 3-7% over previous attempt and compresses the dummy CHDs down significantly. Aaron Giles added video level detection and reporting to ldverify. Aaron Giles forced a sound synchronization on each vsync in the laserdisc playback. This prevents overwriting the tail end of the buffer which was fouling up the MACH 3 audio decoding.
- 12th August    2008: Aaron Giles - About Laserdiscs, part 2: All known laserdisc-based videogames use CAV (constant angular velocity) laserdiscs, primarily because these discs could be manipulated in advantageous ways. Players of the era could seek to specific frames, play at different speeds, still frame, play backwards, and perform all sorts of other operations that were not possible with CLV discs. The reason this was possible is that on a CAV disc, each track corresponds exactly to one frame of video. There are approximately 54,000 tracks on one side of a CAV laserdisc, giving 54,000 frames of video per side. Now, believe it or not, laserdiscs are actually analog devices, meaning that the signal that is stored on them is analog, and is described exactly by the video transmission data standard of its intended country (NTSC or PAL, depending on where you live). Thus, once the data is read from the laserdisc, it is basically identical to the signal that you would receive over the airwaves for watching regular broadcast TV. Let's step back a moment and think about how laserdiscs of movies work. A movie is traditionally filmed at 24 frames per second. In contrast, the NTSC broadcast standard (which describes how video is transmitted in North America) describes the TV signal as running at 30 frames per second. Furthermore, each frame is built up of two "fields", which are drawn one after another at a slight offset. This is known as interlacing. Since there are two fields each frame, and the frames run at 30 per second, the result is that the individual fields are transmitted at twice that rate, or 60 times per second (in reality, it is 29.97 frames/second and 59.94 fields/second, but we'll stick to round numbers). So the question becomes, how do you reproduce a film, running at 24fps, within the NTSC standard, which runs at 30fps (or more precisely, 60 fields/second)? If you transferred one frame of film to one frame (two fields) of NTSC video, the result would play back at 30fps, or 25% too quickly. If you duplicated each film frame onto two frames (four fields) of NTSC video, the result would play back at 15fps, or 38% too slowly. The solution that engineers came up with many years ago was to realize that 60 / 24 = 2.5. That is, when you look at it in terms of fields instead of frames, each film frame should conver exactly 2.5 fields of NTSC video. However, since you can't split the video midway within a field, they chose instead to alternate between using 3 fields per film frame and 2 fields per film frame. So the first film frame will be duplicated onto the first 3 fields, while the second film frame will be duplicated onto the next 2 fields, and so on. This is known as 3:2 cadence. The important thing to realize out of all of this is that there was not always a 1:1 relationship between film frames and NTSC frames (though there often was, for example, when the laserdiscs contained video that was originally produced for broadcast TV). That is, if you wanted to view frame #1000 of the actual film, you could not necessarily just seek to NTSC frame #1000 and end up where you wanted. Instead you actually had to go figure out which NTSC frame corresponded to film frame #1000. When the laserdisc was designed, this discrepancy was actually taken into account. The designers realized that being able to seek to a given NTSC frame was actually not nearly as useful as being able to seek to a particular film frame, and so they devised a way to encode information about the frame numbers on the laserdisc itself. Which brings us back around to games. For years, laserdisc emulation has relied on "frame files" and "conversion equations" to determine how to map the film frames (which is what all the seek commands target) to NTSC frames (which is what you get when you capture video). But the information about which NTSC frame corresponds to which film frame was present all along in the video signal itself; we were just not aware of it, nor aware of how to capture it. In the next article, I'll talk about how this information is encoded.
-  7th August    2008: Aaron Giles - About Laserdiscs, part 1: Laserdiscs come in two varieties: CAV (constant angular velocity) and CLV (constant linear velocity). As its initials imply, a CAV laserdisc spins at the same speed no matter where on the disc it is being read from. Since laserdiscs play back at a fixed data rate, this implies that data is packed more tightly near the center of the disc than it is toward the outer edges. If you remember your basic geometry, the circumference of a circle is directly proportional to the radius (C = K x r). Let's say the disc spins just fast enough so that one rotation holds one video frame. So if you encode one frames' worth of data at r=5, you have to pack it into a linear distance of 5K. If you encode the same amount of data at r=8, you have much more room (8K) to store it in. In contrast, a CLV laserdisc packs its data at the same density regardless of its location on this disc. This means that in order to read it, a laserdisc player must adjust the rotation speed depending on how far away from the center of the disc it is reading. Compact discs are CLV devices and you probably recognize the disc speed changing as you seek back and forth. Back to the geometry, in CLV discs data is read at a constant rate (R) per unit of circumference (rate = R x C). Since the circumference is proportional to the radius, this makes the data rate proportional to the radius as well (rate = R x (K x r) = RK x r). This means that at r=5, the disc stores 5RK units of data, and at r=8, the disc stores 8RK units of data. It's pretty clear that CLV discs pack the data more efficiently than CAV discs. This is because with CLV discs, you can pack the data at the maximum rate the player is capable of reading consistently across the entire disc. Whereas with CAV discs, the data can be efficiently packed at the inner part of the disc, but as you move farther away from the center, it gets increasingly less densly packed. In reality, CAV discs maxed out at about 30 minutes (54,000 frames) of playback per side, while CLV discs generally got about 60 minutes per side. Given these facts, why on earth would you ever create a CAV disc, when a CLV disc allows you to pack the data more efficiently? Well, because the simplicity of finding information on a CAV disc enabled many special features: still frames, reverse play, slow motion, and - most importantly for laserdisc-based video games - direct access to any frame on the disc by index. With a CAV disc, each video frame happens to corresponds to one rotation of the disc. Thus, if you want to advance 100 frames ahead, you simply moved the laser up the appropriate amount and read the data there. On the other hand, with a CLV disc, advancing 100 frames involves knowing how fast the data is coming and computing where to seek and how much to adjust the rotation speed to find the target, a much more complicated maneuver. When it comes to movies, most laserdiscs were produced as CLV, to minimize the number of times you need to flip or change discs. A few special edition and high-end versions of movies were released as CAV, enabling access to nice still frames and other effects. When it comes to videogames, however, it's all CAV. In the next article, I'll ignore CLV discs entirely, and talk about tracks, frames and VBI data on CAV discs.
- 0.126u4            : Added tools\ldverify.c. Removed tools\makemeta.c. Aaron Giles added proper laserdisc support for MACH 3, Us vs. Them and Cobra Commander (MACH 3 hardware). Old laserdisc hacks are now removed. The code now talks to the standard Pioneer PR-8210 interface. Also removed hacky "target list" from the MACH 3 ROMs; this information is now decoded on the fly from the right channel laserdisc audio. Aaron Giles changed laserdisc support to parse white flags and other data from the VBI data directly, rather than relying on the textual metadata. Expanded video frame cache to 3. Changed the way frames are assembled to decrease the likelihood of getting an interlaced weave. Fixed sound creation so that it is done at reset time instead of device start, when the sound devices aren't yet live. Change the laserdisc interface to no longer require a disk number or a custom sound device. Both are now assumed to be tagged the same as the laserdisc device. Updated all drivers accordingly. Other laserdisc changes [Aaron Giles]: Changed PR-8210 interface to work consistently for both Gottlieb and Stern games. Added audio callback mechanism to allow drivers to peek at the raw audio streams. Aaron Giles removed obsolete makemeta tool. Replaced it with new ldverify tool which walks through either an AVI or CHD capture from a laserdisc and ensures that there are no anomalies lurking in the VBI data. Aaron Giles added new option to chdman, where if you use -createav with a special filename (either 2:2 or 3:2) it will create a fake laserdisc files with the equivalent cadence. This can be used for testing until full captures are available. Most games used 2:2 apart from Dragon's Lair and Space Ace, which were 3:2. Note that even though these files are essentially blank, they are Huffman-compressed, meaning that the maximum compression ratio you will get is 8:1, so they still end up ~5GB. Aaron Giles updated vbiparse to improve Manchester code decoding. It now assigns a confidence level per bit based on how solid the data is. Also added a new function vbi_parse_all which parses the white flag and all three lines of metadata from a laserdisc frame. It then compares line 17 and 18 against each other and selects the most likely candidate based on per-bit confidence and other factors. Aaron Giles added frame number display to laserdsc.c. It is off by default, though most players can be configured to turn it on (not sure if any actually do). It can be manually toggled via the backslash key during playback.
- 0.126u2            : Laserdiscs are now devices. Updated all drivers accordingly [Aaron Giles].
- 0.126u1            : Added util\vbiparse.c/h. makemeta changes [Aaron Giles]: Split out Manchester code parsing into a separate utility module. Rewrote Manchester code parsing to be clock based. Updated tools\makemeta.c to call the new functions. Changed makemeta to parse a different format for metadata. Fixed Huffyuv decompression in aviio. Added more robust logic to parse out the white flag.
- 13th July      2008: Aaron Giles - DirectShow Part 2: A while back, when the initial push to start adding laserdisc support to MAME was happening, I discovered that there was something missing in all existing laserdisc captures. If you know anything about the NTSC broadcast standard, you know that a video signal consists of 525 scanlines spread across a 30Hz (actually 29.97Hz) interval. Of those 525 scanlines, 480 are considered to be "visible" scanlines, while the remaining 45 constitute the vertical blanking interval (VBI). At first, the VBI part of the scan just contained a couple of special signals for synchronization, but over time, people started adding data to them. The most famous example is closed captioning, which is usually encoded as binary data on line 21 of each video field (a single 30Hz frame is sent as two 60Hz fields, interlaced). Getting back to DirectShow, the way this is handled for video capturing is that the video capture component has a VBI output, which is the raw VBI data, usually sampled at a high rate (2x or 3x the video sampling rate) for improved accuracy. As with everything in DirectShow, there are filters that you can attech the VBI output to, which will decode the line 21 data into binary data, and then further filters that will render the captions as overlays on top of the video stream. The thing I discovered about laserdiscs, though, is that they encoded several very important bits of metadata on some of the VBI lines. Specifically, line 12 has what is known as a "white flag", line 16 contains some control bits, and lines 17-18 contain information about the current frame number and chapter. Even more importantly, all of this metadata is crucial to the way laserdiscs are controlled and operated in video games. The problem is, how do you capture that data? Well, you could route the raw VBI data to a file and then attempt to sync it up with your video capture. But an easier way to deal with it would be to simply take the VBI data, reconstitute it as video signal, and render it above the visible video signal, to essentially reproduce a capture of the entire video signal - all 525 lines of it. Sadly, such a filter didn't exist (or at least I was unable to find such a thing). But thankfully, the DirectShow architecture makes it a fairly simple matter to write your own, which turned into a little side project that I have been working on. Although not quite ready for prime time (synchronization is still a little tricky), the basic filter is now up and running, and we have some actual demo captures with the laserdisc VBI data intact: (In the current version, I extract the laserdisc metadata and overlay it on the video as well, to see if the information matches up. The frame number that the laserdisc player decoded is in large text at the top, and the information my filter has decoded is displayed on the bottom, with field 1 info on the left and field 2 info on the right). In the end, I'll post the source and binary versions of this filter so that it will be possible to get consistent laserdisc captures complete with metadata (on Windows only, though similar techniques can probably be applied to other platforms). And yes, with this problem solved, they should be starting to happen in the coming months.
- 12th July      2008: Aaron Giles - DirectShow: Had my first real exposure to DirectShow recently and I've come away pretty impressed. For those who don't know, DirectShow is an architecture inside Windows that is used for streaming and capturing media (audio/video). It works through a series of independent components, each of which has some number of inputs and outputs. These components can then be assembled as appropriate to route data through the system. (Note that I believe there is a successor to DirectShow, but since I'm an old-skool kind of person and wanted compatibility with other DirectShow components, I went that way). Components fall into three categories: sources, which only have outputs and provide source data; renderers, which only have inputs and "render" the final data; and filters, which have both inputs and outputs and transform the data in some way. Now, this might not seem all that impressive until you realize that the process of connecting components and building up a data flow has been completely abstracted. The key to this is the Microsoft-provided utility GraphEdit. What this simple utility does it allow you to add a bunch of filters and then interconnect them. You then hit "play" and the filters are activated. Assuming you have assembled the filters and connections between them properly, data flows from the source through the filters and to the renderer(s). As a super-simple example, you can take a still image (say, a JPG file) and make that your "source" via the Generate Still Video component. You can then route the output of that to a Color Space Converter filter which applys color transformations to the image. And then you can route the output of the filter to the "Video Renderer", which renders any video inputs to the screen in a window. Once you've built this graph, you simply hit "play" and up pops a window with the JPG image. Ok, that was super-simple, but you start to get the idea. The next step is to try changing the renderer to something else. Let's say we want to output an AVI file of this still image. We can do that by first connecting the output of the Generate Still Video source to one of the inputs of an AVI Mux filter (this filter accepts multiple inputs - usually a video stream and an audio stream - and interleaves them into a single AVI data stream). We then connect the output of the AVI Mux filter to a "File Writer" renderer, which lets us route the raw output of any filter to a file. Now when we hit "play", the still video source is converted to an AVI file. Let's say we want to both view the output AND generate an AVI file. No problem. We insert a new Smart Tee filter, which has one input and two outputs, each of which contains a copy of the input. Then we wire one output through the Color Space Converter and out to the Video Renderer to see what we are viewing, and we wire the second output through the AVI Mux and out to the File Writer. Hitting "play" now does both: an image and an AVI file. Now for the main event. Let's swap out the source with something more interesting. Say, the video capture component provided by your video capture card (each card is different, so I can't provide the exact details here, but you need to dig through all the filters to find them). Usually there are two pieces: a Crossbar source component, and a Capture filter component. Set up the Crossbar to output the appropriate source from your capture device, route that through the Capture component, and then route the outputs from there into the Smart Tee, which is still outputting to the screen and an AVI file. Hit "play" and now with nothing more than this GraphEdit tool, you have a video capture solution. Granted, it's a bit bare bones (some components have property panels you can get at via a right-click), but it works. And the ability to wire up the filters comes in handy in a major way.
- 0.112u3            : Added src\tools\makemeta.c. Aaron Giles added new tool makemeta.exe, which can generate properly formatted metadata for laserdisc CHDs using either a specially captured AVI as input (preferred) or a hand-crafted set of encoded Philips codes.
- 0.112u2            : Aaron Giles added several new modules to the utility library libutil. First is a generic huffman encoding module. Second is a module that allows you to read/write AVI files in a platform-independent way. And third is a lossless A/V compression module. These three pieces together, plus some changes in the CHD code, allow for the creation of CHDs with compressed audio and video. Added two new commands to chdman: -createav converts an AVI file in uncompressed YUY format or HuffYUV-compressed YUY format with "left" prediction into a CHD. And -extractav converts a CHD containing compressed audio & video into an uncompressed YUY format AVI file. Finished hooking up laserdisc support to the new audio/video compression. Note that we still do not have canonical CHDs of laserdisc data at the moment, but all the support is now present for when they start to appear.
- 0.111u5            : Aaron Giles added support for the custom Badlands commands to the LD-V1000 emulation.
- 0.111u4            : Ernesto Corvi added support for the Pioneer PR-8210 laserdisc player. Aaron Giles improved behavior of the laserdisc code when seeking so it doesn't get "stuck". Added preliminary support for the 22VP932 laserdisc player.
- 0.111u3            : More updates to the laserdisc emulation, based on more complete understanding of how the discs are encoded and how they will eventually be stored [Aaron Giles].
-  2nd January   2007: Aaron Giles - Some Laserdisc Progress: After a bit of a hiatus with the holidays and fun power outages, I've been back making some progress on the laserdisc support. I now have the basic CHD format spec'ed out and implemented. And I have modified chdman.exe to support two new commands: -createav, which takes an AVI file plus an optional metadata file and compresses them to a CHD; and -extractav, which takes a CHD file and extracts it to an AVI file and a metadata file. (And yes, the AVI reader/writer is cross-platform code, so it will work on non-Windows platforms as well. I also have a mostly complete QuickTime reader/writer, but am not sure if it is worth the effort to complete it. Though plugging the two together would produce an AVI <-> QuickTime conversion program, which would be useful!). I'm happy to say that with a little bit of work using a test capture, I am now actually capable of displaying video from within MAME. There's still a lot of work to do yet to get the rest of the way, but this is a good step forward. Next up will be synchronizing frame and track numbers (you'll note the numerical discrepancy in the screenshot), wiring up the sound, improving performance, further enhancing chdman.exe with some additional I/O options, and all the while working with the great group of folks I've been talking to in order to get great quality source captures. More to come as it all comes together!
- 0.110u5            : Reorganized the laserdisc support a bit to accommodate new players. Added Sony LDP-1450 support.
-  4th December  2006: Aaron Giles - It should be pretty obvious with the update to the Dragon's Lair driver in 0.110u4 that something is brewing on the laserdisc front. There has been a lot of discussion over the years about how to make it happen, what video formats to use, etc, etc. In the end, it seemed that nobody was ever happy enough with the proposed ideas to actually take them and run. But with the discs and equipment getting older and older, and my (relatively) recent success in reading an NFL Football CED (http://www.cedmagic.com/featured/nfl.html) (thanks to Tim's (http://arcadecollecting.com/) help), I figured it was finally time to just pick a direction and move forward. One of the big stumbling blocks is that pretty much all existing video compression algorithms are heavily patented. Which means that for freely developed and freely available software, there isn't really a good way of utilizing standards such as MPEG. Plus, MPEG hardly qualifies as 'archival' quality. For this reason, MAME will be going its own way, but it won't be straying too far from the usual paths. The container format for the data will be CHD (which originally stood for Compressed Hard Drive, but has since been redubbed as Compressed Hunks of Data). Each frame, including audio and video data, will be a fixed length (some frames will have one fewer audio sample due to rounding, but this is easy to compute). The video frame rate, height, width, audio sample rate, and number of channels will be encoded in the CHD metadata. Each frame is independently compressed. Audio data is stored as multiple 16-bit channels at an arbitrary sample rate (we will be shooting for 44.1kHz stereo during sampling). The audio data is compressed losslessly using Huffman-compressed deltas. This gives a nice compromise between storing the data raw and doing something more complex and aggressive like FLAC. Audio data is just a drop in the bucket anyway from a data rate perspective, so why skimp? This compression may also be used in the future for CHD-CD's with audio tracks, and for systems that read/playback tape-based data. Video data compression is still being fine-tuned, and is waiting some good quality source data to experiment with, both animated and filmed. At a minimum, a lossless compression based on Huffman-compressed per-channel (Y,Cb,Cr) deltas will be available. This is essentially what HuffYUV does. I have also written a lossy DCT-based compressor that is tuned for archival purposes rather than bit rate limiting. That is, with an MPEG compressor you specify your data rate, and the compressor quantizes the DCT coefficients to fit the data rate. With our video compression, you specify a maximum error and a maximum average error for each channel, and the compressor tweaks the quantization on each 8x8 block indepedently to ensure that those criteria are met. The source material will be sampled at DVD resolutions (720x486 for NTSC video) in 'uncompressed' form - which is actually slightly compressed in that it is 4:2:2 subsampled, so each Cr and Cb sample covers two pixels horizontally. This is oversampling for laserdisc video, but it's better to have more data than not enough data. This effectively gives you 16 bits per pixel uncompressed, or 720 x 486 x 2 = 699,840 bytes per frame. Add in a frames' worth of audio data (assuming 29.97fps) at 44100Hz gives an extra 5886 bytes, for a total per-frame average of 705,726 bytes (5.4 MBits) per frame. Once you start multiplying that out, it's a lot of data: 20.6 MB/second, 1.18 GB/minute, or 70.9 GB/hour. Most video game laserdiscs are CAV, which maxes out at 54000 frames, or just over 30 minutes. Lossless tends to give you between 2:1 and 3:1 compression. Going up to lossy with medium deltas (up to 4/256 per component) gets you closer to 4:1 and 5:1 compression with almost no visible difference. Increasing the max deltas beyond that helps further with compression, but it definitely starts to become visible. Not everything is nailed down yet, and it will probably take a couple of months to materialize, but those are the basics. The first game I'm looking at is obviously Dragon's Lair, but coincidentally, I just received in the mail a driver for the American Laser Games series (http://www.dragons-lair-project.com/tech/pages/alg.asp) of shooters as well, which were all run on an Amiga 500 with a genlock. Fortunately, the Amiga emulation is pretty decent these days, so things are progressing well there. Now that the basic system is up and running, I'm hoping others can help get the rest of the laser games moving forward. In 0.110u4 I included support for a couple of common laserdisc players. Even though you can't see any video yet, you can at least watch their operation to see if things are working properly. In 0.110u5 I'll have support for the Sony LDP-1450 (http://www.dragons-lair-project.com/tech/ldguide/sony.asp) laserdisc player and the ability to display dummy frames (each frame is solid color and gets a unique Cb/Cr value) so that you get a little better sense of the operation. And hopefully in the next month or so, I'll have the first video running at last...
- 0.110u4            : Added machine\laserdsc.c/h. Rewrote the Dragon's Lair driver from the schematics. Added new module machine\laserdsc.c which has laserdisc emulation for the PR-7280 and LD-V1000 laserdisc players. Full emulation of the laserdisc is pending support for CHD audio/video and high quality rips, but you can operate the game and see the frame numbers that would be displayed. Added built-in layout to display the scores, lives and credit information [Aaron Giles].
-  1st September 2001: Mirko Buffoni added support for the Dragon's Lair video. However, it only works with the DVD-ROM version and only in Windows, so inclusion is unlikely.
- SOURCE: machine\laserdsc.c, ldcore.c, ldv1000.c and ldpr8210.cpp
- GAMES: Dragon's Lair (Cinematronics 1983), M.A.C.H. 3 (Mylstar 1983), Us vs. Them (Mylstar 1984)

        Hitachi VIP-9500/9550           Galaxy Range (Sega 1984)
        Philips 22VP931                 Fire Fox (Atari 1984)
        Philips 22VP932                 Space Ace (Cinematronics 1983 European), Dragon's Lair (Cinematronics 1983 European)
        Pioneer PR-7820                 Dragon's Lair (Cinematronics 1983)
        Pioneer LD-V1000, LD-V1100      Badlands (Konami 1984)
        Pioneer PR-8210A                M.A.C.H. 3  (Mylstar 1983), Cliff Hanger (Stern 1983)
        Sony LDP-1000A                  Cobra Command (Data East 1984)

        Hardware: Z80, 6809 or 6502
        Sound   : TI SN76496 PSG or 2x AY-3-8910


        http://www.laserarcade.com/



I12.91  Pioneer PR-8210

- 0.132u5            : Aaron Giles made PR8210 serial processing a little more robust.
- 0.127u7            : Aaron Giles and Warren Ondras added correct overlay positioning, font and behavior to PR-8210 emulation. Aaron Giles cleaned up and normalized the three existing laserdisc emulations. Removed obsolete code from the laserdisc core.
- 0.127u4            : Aaron Giles converted PR-8210 emulation over to using the actual MCU from the laserdisc player. This MCU controls low-level functions such as slider position and laser on/off, and receives decoded vertical blanking data in order to make decisions. Removed old HLE behavior. Note that the overlay text is displayed via the UI; this is temporary and will be fixed shortly. Aaron Giles converted Simutrek-hacked laserdisc emulation to using the actual MCU from the game, which in turn hands off commands to the PR-8210 MCU. This is still not 100% but is pretty close at this point and achieves the correct behaviors in most cases.
- 0.127u3            : Added ldplayer\layout\pr8210.lay. Aaron Giles moved preliminary PR-8210 emulation code from ldplayer.c to ldpr8210.c. It is currently disabled behind the EMULATE_PR8210_ROM compile time flag. Aaron Giles further updates to the PR-8210 ROM simulation. Still not quite there but the system is much better understood now. Added layout to the PR-8210 which displays the state of the front-panel LEDs. CPUs, sound chips, devices and ROM-regions which are specified by devices now have their tags auto-prefixed with the device's tag. This allows for multiple instances to be present. For example, the PR-8210 laserdisc player has a CPU with a tag of "pr8210". When it is included as a device by a driver, the driver may tag the device "laserdisc". The resulting final CPU tag name will be "laserdisc:pr8210". Also updated the debugger expression engine to support names with embedded colons [Aaron Giles].
- 0.127u2            : Added machine\ldpr8210.c. Aaron Giles split core laserdisc functionality into separate file ldcore.c. Each player now gets its own source file, along with new hooks which enable more precise control over the behavior. Updated the PR-8210 and LD-V1000 implementations to the new spec. Other players will come online shortly. Aaron Giles changed laserdisc scan behavior so that it requires a constant stream of signals to continue scanning. Updated ldplayer accordingly.
- 0.127u1            : Aaron Giles added PR-8210 support to the ldplayer. Fixed step forward command on the PR-8210. Aaron Giles added some initial logic to boot and run the PR-8210 ROM (i8049) in ldplayer.c. Currently this is disabled behind a compile-time switch. Once this is working, the plan is to incorporate this into the existing PR-8210 emulation, but we're not there yet.
- NOTES: Pioneer PR-8210A LaserDisc Player.
- SOURCE: machine\ldpr8210.cpp


I12.92  Pioneer LD-V1000

- 0.262              : Added machine\ldv1000hle.cpp/h. Switched to LD-V1000 by default in Thayer's Quest and removed LD-PR7820 support for now. Added an HLE version of the Pioneer LD-V1000 laserdisc player (machine\ldv1000hle.cpp). Added a general-purpose parallel LaserDisc player interface to have a common class parent for Pioneer LD-PR7820 (machine\laserdsc.h). Only adjust video and audio enables on field 0, improves seeking visuals (machine\ldv1000hle.cpp) [Ryan Holtz].
- 0.175              : Added command strobe callback interface for LDV1000, and hooked it up to esh.cpp driver [Angelo Salese].
- 0.127u7            : Aaron Giles added preliminary LD-V1000 emulation. Not fully working yet, but mostly there. Aaron Giles cleaned up and normalized the three existing laserdisc emulations. Removed obsolete code from the laserdisc core.
- 0.127u6            : LD-V1000 [Aaron Giles]: Added some (compile-time removed) information about the ROM and memory map.
- 0.127u2            : Added machine\ldcore.c/h, ldv1000.c. Aaron Giles split core laserdisc functionality into separate file ldcore.c. Each player now gets its own source file, along with new hooks which enable more precise control over the behavior. Updated the PR-8210 and LD-V1000 implementations to the new spec. Other players will come online shortly. Aaron Giles changed laserdisc scan behavior so that it requires a constant stream of signals to continue scanning. Updated ldplayer accordingly.
- 0.126u5            : Aaron Giles added new target ldplayer, which is based on MAME but serves as a standalone laserdisc player for CHDs. Right now only the Pioneer LD-V1000 is connected, and limited commands are available. Each player type is a driver, so you specify the player type on the command-line. The driver then opens the first CHD it finds in your ROM path and uses that as the laserdisc. The intention is that you specify the -rompath each time on the command-line, so a typical approach might be: ldplayer ldv1000 -rompath j:\mach3, where it will pick up the mach3.chd lurking in your j:\mach3 folder. Several basic commands are supported: Space = play/pause, Alt   = toggle frame display, Left  = scan forward (when playing) or step forward (when paused), Right = scan backward (when playing) or step backward (when paused), 0-9   = enter numbers for search and Enter = execute search to frame. Aaron Giles rejiggered huffman.c to support multiple interleaving streams and a delta-RLE pre-encoding. Added optimized case for the Y/Cb/Y/Cr video encoding case. Cleaned up the code. Aaron Giles updated avcomp.c to use the new huffman.c functions. Reworked configuration options to allow for both input and output of naturally aligned data streams. Updated chdman and laserdsc to use the new interfaces. New compression gives an additional 3-7% over previous attempt and compresses the dummy CHDs down significantly. Aaron Giles added video level detection and reporting to ldverify. Aaron Giles forced a sound synchronization on each vsync in the laserdisc playback. This prevents overwriting the tail end of the buffer which was fouling up the MACH 3 audio decoding.
- 0.111u5            : Aaron Giles added support for the custom Badlands commands to the LD-V1000 emulation.
- 0.110u4            : Aaron Giles rewrote the Dragon's Lair driver from the schematics. Added new module machine\laserdsc.c which has laserdisc emulation for the PR-7280 and LD-V1000 laserdisc players. Full emulation of the laserdisc is pending support for CHD audio/video and high quality rips, but you can operate the game and see the frame numbers that would be displayed. Added built-in layout to display the scores, lives and credit information.
- SOURCE: machine\ldv1000.cpp


I12.93  Pioneer LD-V4200

- 0.243              : Be paranoid about minimum size of unsigned (machine\ldv4200hle.cpp) [Vas Crabb].
- 0.242              : Added machine\ldv4200hle.cpp/h. Added high-level Pioneer LD-V4200 player emulation (machine\ldv4200hle.cpp). Promoted Time Traveler (set 1) to working. Fixed overshoot issue with Multi-Speed Forward/Reverse [Ryan Holtz]. TODO: On-screen display support. Better CLV support. Chapter-search support. Commands that Time Traveler doesn't use: Door Open/Close. Reject. Pause/Still. Scan Forward/Reverse. Multitrack-Jump Forward/Reverse. Clear. Leadout Symbol. Key Lock and on-screen functions. Status Requests. Registers A-D.
- DRIVERS: timetrv.cpp
- SOURCE: machine\ldv4200hle.cpp


I12.94  Philips 22VP931

- 0.221              : Simplified handlers [Osso].
- 0.127u7            : Aaron Giles cleaned up and normalized the three existing laserdisc emulations. Removed obsolete code from the laserdisc core.
- 0.127u5            : Added machine\ldvp931.c. Aaron Giles added Philips 22VP931 laserdisc emulation (Fire Fox), which is mostly working. Communication works fine and basic searching/playback/skipping is functional. Still a bit glitchy. smf removed sprite to tile priority in Fire Fox, it doesn't exist.
- 28th January   2003: smf sent in a preliminary Fire Fox driver written by him and Chris Hardy, but the laserdisc emulation has not been done yet so there's not much to see.
- SOURCE: machine\ldvp931.cpp


I12.95  Philips VP415

- 0.198              : Added includes\vp415.h. Added proper dumps of Module S and Module W MCUs, which have identical programs [Ryan Holtz, Simon Inns].
- 0.197              : Added drivers\vp415.cpp, video\mb88303.cpp/h and machine\saa1043.cpp/h. Skeleton driver for Philips VP415 LV-ROM Player. Includes basic device implementation of Fujitsu MB88303 Television Display Controller, skeleton Philips SAA1043 Universal Sync Generator and NCR 5385E SCSI Controller, just enough is implemented to make the Philips VP415 CPU / Datagrabber board satisfied that the controller has passed its internal diagnostics [Ryan Holtz].
- SOURCE: (MESS) vp415.cpp


I12.96  Sony LDP-1000

- 0.221              : Simplified handlers [Osso].
- 0.175              : Added machine\ldp1000.cpp/h. Added bare-bones Sony LDP-1000 device [Angelo Salese].
- DRIVERS: deco_ld.cpp
- SOURCE: machine\ldp1000.cpp


I12.97  Sony LDP-1450

- 0.279              : Fixed display mode selection issue and grey background (machine\ldp1450hle.cpp) [James Wallace].
- 0.278              : Added preliminary support for custom On Screen Text mode (still needs checking against hardware) (machine\ldp1450hle.cpp) [James Wallace].
- 0.268              : Added machine\ldp1450hle.cpp/h. Added HLE of player and hookups to some games that use it. Tweaked timings. Added some more comms and text overlay logging. Added multibyte command support [James Wallace]. Srcclean and tidy (machine\ldp1450hle.cpp) [Angelo Salese].
- 0.177              : Added machine\ldp1450.cpp/h. Separation of the LDP-1450 laserdisc player to its own device [James Wallace].
- DRIVERS: alg.cpp and cops.cpp
- SOURCE: machine\ldp1450.cpp/h




I12.A   GDROM

- 0.255              : Fixed READ_TOC command. Improved logging. Added redbook playback & repeat and basic CD status. Fixed loopchk Maker/Model identify ATA command 0104. Flip is_ready() to true, fixes several hangs (cfr. hash\dc.xml) [Angelo Salese].
- 0.246              : Changed machine\gdrom.cpp to bus\ata\gdrom.cpp.
- 0.243              : Fixed crash with no GD-ROM loaded (machine\gdrom.cpp) [AJR].
- 0.240              : Streamlined logging across chips to use logmacro.h, removed popmessages and printfs in production code (machine\gdrom.cpp) [Angelo Salese].
- 0.208              : Added security commands docs [MetalliC].
- 0.155              : Typo fix (switch (command[2] & 0x0f)) [O. Galibert].
- 0.151              : Fixed comment and logerror for command 0x12 (it's normally INQUIRY, not REQUEST SENSE but for GDROM it's used to set data that is returned by command 0x11) (machine\gdrom.c). Use virtual multiple inheritance to share command processing between SCSI & ATAPI instead of having a SCSI subdevice. This allows matsushita_cr589_device & gdrom_device to derive from atapi_cdrom_device (machine\gdrom.c) [smf].
- 0.150              : Preliminary SET FEATURES support. Only set transfer mode is currently supported, but this checks/sets flags in the identify device buffer. The buffer has been moved up into atahle and the idehd has been changed to work (machine\gdrom.c). Refactored (MESS) Dreamcast to use an ATA interface (machine\gdrom.c, mess\drivers\dccons.c) [smf]. Added Offset to GD-Rom 0x11 & 0x12. DRQ wasn't setted properly, now there are proper gd-rom command writes. Added SCSI command 0x71, now Sega Dreamcast games boots properly. Some extra SCSI cmds. Added Maple HW trigger (includes\dc.h, machine\gdrom.c and maple-dc.c/h) [Angelo Salese].
- 0.148u5            : Modernised CDDA & discard buffered samples when starting to play to avoid audio glitches and timing issues (sound\cdda.c/h and gdrom.c/h) [smf].
- 0.147u1            : Implement GetSectorBytes() [smf].
- 0.142u3            : Added machine\gdrom.c/h.
- SOURCE: bus\ata\gdrom.cpp




I13.    Motherboard chipset


13.1   Namco I/O PCB

- 0.272              : Added bus\jvs\cyberlead.cpp/h, bus\jvs\jvs.cpp/h, bus\jvs\jvshle.cpp/h and bus\jvs\namcoio.cpp/h. Fixed dip switch hookup, added unpopulated buttons and updated IO port documentation on the Namco TSSIO JVS I/O board, based on hardware analysis by Guru (jvs\namcoio.cpp) [smf].
- 0.271              : Added a new modular JVS framework. New devices added: Namco Cyber Lead I/O LED(I/O) PCB 8699014200, Namco Cyber Lead I/O LED(I/O) PCB 8699014200 (compatibility patch), Namco Cyber Lead I/O LED(LED) PCB 8699014500, Namco AMC PCB (Extra I/O,JPN,Ver1.10), Namco ASCA-1 (Multipurpose I/O,JPN,Ver2.00), Namco ASCA-3 (Multipurpose + Rotary Encoder,JPN,Ver2.04), Namco ASCA-3 (Multipurpose + Rotary Encoder,JPN,Ver2.02), Namco ASCA-5 (Multipurpose,JPN,Ver2.09), Namco CSZ1 MIU-I/O (GUN-EXTENTION,JPN,Ver2.05), Namco EM I/O1-02 (Techno-Drive I/O,JPN&EXP,Ver2.00), Namco TSS-I/O (GUN-EXTENTION,JPN,Ver2.02) and Namco XMIU1 TSS-I/O (GUN-EXTENTION,JPN,Ver2.11,Ver2.12). Note: The Cyber Lead compatibility patch is required because later versions aren't. Namco FCA-1 (Multipurpose + Rotary Encoder,JPN,Ver1.00), Namco FCA-1 (Multipurpose + Rotary Encoder,JPN,Ver1.01) and Namco FCB (TouchPanel&Multipurpose,JPN,Ver1.02). Note: These use ASCA3 patched to return the correct ID string as the full ROM is yet to be extracted. Namco EM Pri1-01. Note: The printer for Techno Drive is HLE'd only enough to make the game happy [smf].
- NOTES: Namco I/O PCB = Namco AMC PCB (Extra I/O,JPN,Ver1.10), Namco ASCA-1 (Multipurpose I/O,JPN,Ver2.00), Namco ASCA-3 (Multipurpose + Rotary Encoder,JPN,Ver2.04), Namco ASCA-3 (Multipurpose + Rotary Encoder,JPN,Ver2.02), Namco ASCA-5 (Multipurpose,JPN,Ver2.09), Namco CSZ1 MIU-I/O (GUN-EXTENTION,JPN,Ver2.05), Namco EM I/O1-02 (Techno-Drive I/O,JPN&EXP,Ver2.00), Namco EM Pri1-01, Namco FCA-1 (Multipurpose + Rotary Encoder,JPN,Ver1.00), Namco FCA-1 (Multipurpose + Rotary Encoder,JPN,Ver1.01), Namco FCB (TouchPanel&Multipurpose,JPN,Ver1.02), Namco TSS-I/O (GUN-EXTENTION,JPN,Ver2.02) and Namco XMIU1 TSS-I/O (GUN-EXTENTION,JPN,Ver2.11,Ver2.12).
- DRIVERS: namcos12.cpp and namcos23.cpp
- SOURCE: bus\jvs\namcoio.cpp



I13.2   I750

- PCB: Intel i750 = Intel 82750 on the Back Board (Dragngun, Lockload)
- SOURCE: drivers\deco32.cpp





I14.    Connectors

        8x2  - 8-pin connector for extra controls (Janjans2)
       18x2  - Edge connector, 18-way (Harem, Jollycrd, Promutrv, Royalcrd)
       22x2  - Edge connector, 22-way (Jollycrd, Royalcrd)
       36x2  - Edge connector, 36-pin (Puckman)
       56x2  - Edge connector, 56-way (Roughrac)
      100x2  - Edge connector, 100-pin (Profpac) - Interconnect cable to 6 boards

       28WAY - Edge connector is JAMMA backwards (GND is pin 28,27; +5V is pins 26,25 etc) and with RBG locations moved (i.e. not standard JAMMA) (Pkgnshdx)
       48WAY - Edge connector used for extra controls and to output the 2nd speaker when set to stereo mode. (NamcoSystem11)

       JAMMA - Edge connector (Puzzlekg)

       CN103 - 4-pin connector for gun hookup
       CN106 - 4-pin connector for gun hookup
       CN121 - Output connector for left/right speakers (Rdft)
       CN503 - Connector for optional 15kHz external video output (R,G,B,Sync, GND)
       CN504 - Connector for optional 2nd speaker (for stereo output)
       CN505 - Connector for optional 4th player controls
       CN506 - Connector for optional 3rd player controls
       CN651 - Connector for optional analog controls
       CN652 - Connector for optional trackball
       CN654 - Connector for optional memory card

       G6A-474P - PCB: OMRON G6A-474P is a four pole double throw relay (F1GP, Tail2nos)

       IDC34 - IDC34 way flat cable plug (PGM-System), IDC 34 (Crysking, SegaSystem24)
       IDC40 - IDC connector, 40 pin (leading to sound board) (Nbajamex), IDC connector for plugging of a flat 40-wire cable (not used, purpose unknown, possible CDROM/DVD) (NamcoSystem10)

       IDE   - Standard (PC-compatible) 40 pin IDE CDROM flat cable connector and 4 pin power plug connector (Polystar)

       J103  - Custom Namco connector for plug-in ROM PCB
       J201  - Custom Namco connector for mounting of main ROM (game) board, 100 pin
       J202  - Custom Namco connector for mounting of another board (not used, purpose unknown), 80 pin

       USB-A   - Standard USB type A connector, PCB labelled '(TX)' (NamcoSystem12)
       USB-B   - Standard USB type B connector, PCB labelled '(RX)' (NamcoSystem12)



I15.    PC hardware

- 0.284              : Kick-off a generic_cdrom software list (machine\at.cpp, pc\atpci.cpp, pc\ct486.cpp, pc\pcipc.cpp) [Angelo Salese].
- 0.283              : New 82C100 IBM PS/2 Model 30 and Super XT device (machine\82c100.cpp). New 82C606 CHIPSpak Multifunction Controller device (machine\82c606.cpp) [Nigel Barnes].
- 0.282              : Bulk replace cbus -> pc98_cbus. Hookup 2D floppy option (pc98_cbus\fdd_2d.cpp). Moved pc80s31k to bus\nec_fdd folder [Angelo Salese].
- 0.281              : Added isa\pcat512me.cpp/h. Added PC AT 512Kb Memory Expansion [Patrick Mackinlay].
- 0.272              : Bump VGA default to svga_et4kw32i (MESS) pc\ct486.cpp [Angelo Salese].
- 0.268              : Connect iochrdy properly. Also don't forward the same thing more than once - it could be std::move'd out the first time (machine\genpc.h) [Vas Crabb].
- 0.263              : Deprecate shared\pcshare.h (https://github.com/mamedev/mame/issues/391) [Angelo Salese].
- 0.260              : Added (MESS) Gigabyte GA-6LA7 [The Retro Web]. Stub a 82443LX PAC variant [Angelo Salese].
- 0.259              : Added pc_joy\pc_joy_magnum6.cpp/h. Implemented Interact Magnum 6 Game Controller. Added imperfect flag for feature::CONTROLS (pc_joy\pc_joy.cpp) [Angelo Salese].
- 0.256              : Retire pcat_base_state::pcvideo_* fns (shared\pcshare.cpp) [Angelo Salese].
- 0.245              : Enable accesses to keyboard-related registers (pc_noppi_mb; machine\genpc.cpp). Modernized keyboard interface (eliminates occasional "stuck key" error in compc1) for (MESS) compc.cpp and eliminate runtime port tag lookup [AJR]. IRQ2 is redirected to pic8259 ir1 (machine\at.cpp) [Carl].
- 0.240              : Added IBM PC RAM switches (machine\genpc.cpp and (MESS) ibmpc.cpp) [SomeRandomGuyIdk].
- 0.236              : Updated SMSC FDC37C93X to support PS/2 mouse (machine\fdc37c93x.cpp) [yz70s].
- 0.235              : Added placeholder routine for mouse irq to machine\fdc37c93x.cpp. Use NS16550 instead of NS16450 for RS232 as per datasheet. Actually read logical device registers (machine\fdc37c93x.cpp) [yz70s].
- 0.234              : Added BIOS versions and documentation for various motherboards located in PC, AT and (MESS) genpc.cpp [rfka01].
- 0.221              : Simplified handlers (machine\fdc37c93x.cpp, genpc.cpp and pcshare.cpp) [Osso]. Fixed faulty EOP propagation that broke floppy disk loading (machine\genpc.cpp) [AJR].
- 0.210              : Added machine\i82355.cpp/h. Added very preliminary Intel 82355 BMIC device (Bus Master Interface Controller). Use standard EISA board name format [AJR]. Added various BIOS versions to (MESS) at.cpp [rfka01].
- 0.209              : Added several BIOS variant to (MESS) genpc.cpp. Added XT clones to (MESS) genpc.cpp. Added Kyocera XT (MESS) pc.cpp. Added BIOS version 2.01 for PC-10 (MESS) compc.cpp [rfka01].
- 0.208              : Simplified read/write handlers (machine\cs4031.cpp and fdc37c93x.cpp) [AJR].
- 0.201              : Added serial ports to machine\fdc37c93x.cpp. Removed RS232 ports and put them in (MESS) pcipc.cpp [yz70s].
- 0.200              : Removed MCFG macros (machine\cs4031.cpp) [Vas Crabb].
- 0.199              : EOP needs to apply immediately or the FDC errors out [Carl]. Put memory mappings in remap routine (machine\fdc37c93x.cpp). ISA does not use separate spaces since they cause problems. Now with (MESS) pcipc.cpp it is possible to use floppy disks [yz70s].
- 0.192              : Make maincpu tag actually configurable (machine\genpc.cpp) [AJR]. Moved m55hi-plus motherboard stuff to a new machine called m55hipl [Samuele Zannoli].
- 0.188              : (MESS) atpci.cpp: Added N7NS04 BIOS of the Micronics M55HI-Plus moterboard and log writes to port 0x80 [yz70s].
- 0.187              : Fixed Coverity (software) errors about unintended truncation (machine\cs4031.cpp and genpc.cpp) [Vas Crabb]. Added table with BIOS post codes strings for PhoenixBIOS 4.0 Revision 6 and use it as default. The tables that were already present did not have the correct codes used by the default bios in the pcipc machine (drivers\pcipc.cpp) [yz70s]. Proper dump for AMI C 21.1 BIOS (MESS) at.cpp [Miodrag Milanovic].
- 0.184              : Adjust joystick to work with pcjr software that doesn't support calibration (bus\pc_joy\pc_joy.cpp) [Carl]. Added save emulated A20 state (machine\cs4031.cpp) [Scott Percival].
- 0.179              : Intel documentation is conflicting, which prompted osdev to claim that 128k DMA was impossible. Masking the lowest bit of the page instead of the upper bit of the address makes more sense and it does also fixed the issue with SB16 diagnose.exe playing silence (bus\lpci\southbridge.cpp, machine\cs4031.cpp, wd7600.cpp and machine\at.cpp). Applied IBM AT 16-bit DMA wrap round fix to other implementations [smf].
- 0.173              : Added BIOS Rev. 4.35 to (MESS) NCR PC4i [rfka01].
- 0.172              : Changed includes\at.h to machine\at.h. Created AT motherboard device and split PCI and PS2 machines into own files. Simplify somewhat the PCs/clones and enable configs with less than 640k ram. (MESS) tandy1t: make the shared vram actually work and use banking. Some of the tandy's will show garbage on the screen when booted, it's the memory test overwriting the shared VRAM. (MESS) at.cpp: It appears the IBM keyboard interferes with the Kaypro 286i a20 check [Carl].
- 0.168              : Correct number of ISA slots for (MESS) IBM PC/PC XT (drivers\pc.c) [rfka01].
- 0.166              : Fixed for regression/fatalerror in (MESS) Kaypro 286i (machine\at.c) [Tafoid, Carl].
- 0.163              : Added possiblity to read option lines (bus\isbx\isbx.h) [Dirk Best].
- 0.156              : (MESS) PC, AT: Hook up missing softlists to various drivers [Justin Kerk].
- 0.154              : Converted machine\at_keybc.c to DEVCB2 [Osso]. Simplify IBM AT driver [Carl].
- 0.153              : Fixed fatal exception in ec1841 and ec1845 (machine\genpc.c) [Osso]. PC/XT/AT: Added basic implementation of the Programmers Development System ISA card. The PDS editor software requires the hardware present to start up. Some core work will need to be done to get any communications working [Barry Rodewald]. Removed excess serial and parallel ports and set lpt irq to write to the 8259 rather than the cpu (drivers\pc.c). Splitted Tandy 1000 and PCjr from pc.c. Further PC separation and cleanup [Carl].
- 0.152              : Moved pc_keyboard into emu\bus [Miodrag Milanovic]. Removed GAME_NO_SOUND flag from ibmpc.c, these drivers have working PC speaker sound [Justin Kerk].
- 0.151              : Added emu\bus\bus.mak, isbx\isbx.c/h. (MESS) MC1502: Cassette output, printer WIP, serial WIP, minor keyboard fix. MC1502 FDC reset fix [Sergey Svishchev]. Fixed at586 fails too boot from Hard Drive/CHD [smf].
- 0.150              : More 9801ux experiments (drivers\pc9801.c). Preliminary PS/1 support for AT (drivers\at.c) - Probably stalled until the kbc supports mice. Make 9801ux boot. Find a compromise between the at486 and 5170. at486 floppies work again and 5170 bios 1 still boots, at586 still fails it's floppy tests (mess\drivers\at.c. includes\at.h and machine\at.c) [Carl]. Added read handler for CS4031 sysctrl port. Fixes booting the kernel on the Red Hat 7.2 install CD [Barry Rodewald, Dirk Best]. Added some comments (includes\genpc.h). Flagged a few more things as deprecated (machine\genpc.h) [Oliver Stoeneberg]. Documenting 3_5 floppy images. Fixed GRCG usage in PC-9801UX. SASI documentation (drivers\pc9801.c) [Angelo Salese]. Emulated the chipsets ability to intercept gate a20, ignore external gate a20 when emulation is enabled and keyboard reset commands (machine\cs4031.c) [Dirk Best]. Modernized pc_lpt device (machine\pc_lpt.c) [Osso].
- 0.149u1            : PC driver cleanup: Much improved CS4031 emulation, added DMA, interrupt controller, timer, RTC directly to the device as sub devices and added the generic functions needed for AT compatibility. Removed unused private field from src\mess\machine\cs4031.h. Fixed CS4031 16-bit DMA. Set CS4031 DMA controller clocks via chipset configuration. Fixed compile (machine\pcshare.c) [hap]. Use irq delay from pcjr for pcjx [Carl].
- 0.149              : pcshare: make all the common pc hardware in various pc based drivers inherit from pcat_base_state (drivers\calchase.c, fruitpc.c, funkball.c, gamecstl.c, gammagic.c, magtouch.c, mediagx.c, midqslvr.c, pangofun.c, pcat_dyn.c, pcat_nit.c, photoply.c, pinball2k.c, queen.c, savquest.c, su2000.c, taitowlf.c, voyager.c, xtom3d.c and machine\pcshare.c/h) [Carl].
- 0.148u5            : Added machine\pc_joy_sw.c/h. Slotify PC joystick (drivers\amstr_pc.c, pc.c/h, machine\isa_sblaster.c, isa_ssi2001.c, isa_stereo_fx.c, pc.c and pc_joy.c/h). Fixed MSVC warning (drivers\pc.c and machine\pc_joy.h). Added MS Sidewinder pad (mess\drivers\pc.c, machine\pc_joy.c and pc_joy_sw.c/h) [Carl].
- 0.147              : Merge of MESS sources [Miodrag Milanovic]. Cleanup the end-of-dma notifications in PC hardware [O. Galibert].
- 0.128u7            : Aaron Giles renamed REG_PC -> REG_GENPC, REG_SP -> REG_GENSP and REG_PREVIOUSPC -> REG_GENPCBASE. Updated a few spots that were using these directly. Moved these definitions into the end of the register area rather than leaving them outside which put them in a weird range.
- 0.126u5            : Moved mame\machine\pcshare.h to emu\machine\pcshare.h.
- 0.124u1            : Did some major cleanup and gutting of pcshare.c [Wilbert Pol].
- 0.110u5            : Merged in some MESS-specific PC support code [Nathan Woods].
- 0.102u3            : Merged in recent changes to the PC share code from MESS [Nathan Woods].
- 0.101u2            : Added machine\pcshare.c/h.
- NOTES: Functions to emulate general aspects of the machine (RAM, ROM, interrupts, I/O ports). The information herein is heavily based on 'Ralph Browns Interrupt List'.


I15.1   Generic PC machine

- 0.283              : Fixed up a few things for later PC models. The emulation of these systems still isn't very good in general (machine\genpc.cpp) [Vas Crabb].
- 0.280              : Added pc\megapc.cpp. Split up MegaPC WD7600 chipset romsets to own driver (pc\at.cpp and pc\megapc.cpp). Get rid of i386 macro (pc\at.cpp) [Angelo Salese].
- 0.257              : Added more BIOS dumps (pc\at.cpp, pc\genpc.cpp and pc\pc.cpp) [rfka01].
- 0.172              : Moved machine\genpc.cpp and includes\genpc.h to devices\machine\genpc.cpp/h.
- 0.156              : Use correct clock frequency and added new BIOS ROM (bus\pc_kbd\ec1841.c and mess\drivers\ec184x.c) [Sergey Svishchev]. Changed keyboard xtal freq, added speech synthesis swre (bus\pc_kbd\ec1841.c). Added older revision of BIOS; poisk1: add newer revision of HDC BIOS (mess\drivers\ec184x.c) [Miodrag Milanovic].
- 0.150              : Fixed IBM5150 keyboard regression introduced in r24103. On the ibm5150 the PPI PB2 output cannot influence the mainboard keyboard data output (machine\genpc.c) [Wilbert Pol].
- 0.148u5            : Video is in the devices now (machine\genpc.c). Fixed XT (machine\genpc.c) [Carl]. Fixed PC drivers regression (machine\genpc.c) [Wilbert Pol].
- 0.148u1            : Removed GAME_NO_SOUND flags, these drivers have sound [Justin Kerk]. Fixed duplicated genpc.c bios shortnames [Oliver Stoeneberg].
- 0.147u4            : Added some addtional XT and AT bioses [Miodrag Milanovic].
- 0.146u4            : MESS ec1841: Mirror chargen memory at b800:1000 -- fixes video test 501 on TPS (diagnostics) disk. ec1841 not only mirrors the chargen buffer, but also byte-swaps it [Sergey Svishchev].
- SOURCE: machine\genpc.cpp


I15.2   Slot

- 0.240              : Added option_replace, option_replace_internal and option_remove to make it easier to derive option configurations (emu\dislot.cpp) [AJR].
- 0.233              : Preserve configuration for slot cards when not selected. Slightly better test for deselected slot cards (emu\ioport.cpp) [Vas Crabb].
- 0.228              : Make "slot" feature in software lists and a few related features case-sensitive [AJR].
- 0.216              : Got rid of device_slot_card_interface as it wasn't providing value. Added a helper template to reduce certain kinds of boilerplate in slots/buses. Cleaned up some particularly bad slot code (plenty more of that to do), and made some slots more idiomatic [Vas Crabb].
- 0.175              : Added Tagged_list to unordered_map for slots. Proper exception handling (emu\dislot.cpp) [Miodrag Milanovic].
- 0.152              : Added a new macro MCFG_DEVICE_CARD_DEFAULT_BIOS, which can be used in the machine config to set the default BIOS for a slot card device [Curt Coder]. Slot options can now be configured inline without creating an array. Legacy support for old configuration uses MCFG_FRAGMENT_ADD, which required changing so the current device could be updated by the fragment. Converted cassette, pccard1 & pccard2 slots to use new MCFG macros (drivers\ksys573.c). Uses device_mconfig_additions() to added ATA slots, which allows you to just add the device and configure it rather than using the MCFG_ATA_INTERFACE_ADD #define. MCFG_MODIFY_DEVICE(DEVICE_SELF) is no longer required in machine configs used in a slot option. Removed MCFG_DEVICE_CONFIG_CLEAR as it's legacy but not used anymore. Removed support for static config from slots (emu\dislot.c and mconfig.c) and converted the two devices using it (MESS: at.c + bebox.c) to machine config fragments [smf].
- 0.149              : Moved default card config, device inputs and clock off the slot interface so they can be specified for all cards (emu\dislot.c/h, imagedev\floppy.h, machine\ctronics.h, idectrl.h, nscsi_bus.h, machine\pci.h, emu\mconfig.c, drivers\jaguar.c and rastersp.c). Added support for machine config fragments that are applied when the cart is loaded, converted NCR 53C7xx to DEVCB2 as an example [smf].
- 0.148u2            : Fixed compile (emu\dislot.c) [Miodrag Milanovic].
- 0.146u1            : Expanded slot definition with clock and config so we can better define fixed slot devices where needed. Fixed for slot menus. And some cleanup [Miodrag Milanovic].
- 0.145u2            : Added helpers for loading file for slot determination. Give more proper name and disabled loading of soflist items in open_image_file call [Miodrag Milanovic].
- 0.145u1            : Fixed slot devices (emu\dislot.c, mconfig.c and validity.c) [Olivier Galibert]. Made aliases for image devices without index, make some exotic cases to work better. Moved software checks in front of other checks in clifront in order to make things more consistent with behaving when cmd line parameters are sent, also added emuopts support to add newly created options if some is added with adding software item in slot [Miodrag Milanovic]. Added possibility to see subslot devices when they are added from softlist, also removed "const" from get_default_card_software, that enable better usage and no need for it to be like that [Miodrag Milanovic].
- 0.145              : Proper fix for issues with slots, removed old fix too [Miodrag Milanovic].
- 0.144u6            : Cartslot is now C++ device [Miodrag Milanovic].
- 0.143u3            : Nathan Woods fixed initialization order for slot devices.
- 0.143              : Miodrag Milanovic added support for multi level slot devices.
- 0.142u3            : Support for dynamic devices added to the core [Miodrag Milanovic]: Added slot and slot card interfaces (emu\dislot.c/h). Added SLOT_INTERFACE macros in order to simplify device adding. Added new menu option "Slot Devices" and support to change device in runtime. Updated emuopts to support command setting of slot cards. Updated clifront and added listslots option to display available slots and device options for each one.
- 0.140u2            : MESS fixes [Miodrag Milanovic]: Fixed issue with image empty slot. Default for writeconfig is now 0 for MESS since it is not needed anymore. Fixed handling of mounted devices on hard reset. Unified some emuopts code and removed ifdefs.
- SOURCE: emu\dislot.cpp



I15.21  PCI Slot

- 0.262              : Added pci\pci_slot.cpp/h. Added 'PCI extension motherboard port' device. Created a first stab at slottable cards. Embrace the future insanity. Correct upcalls [O. Galibert].
- NOTES: Generic PCI card port (PCI extension motherboard port)
- DRIVERS: comebaby.cpp, ez2d.cpp, midqslvr.cpp, odyssey.cpp, silverball.cpp and tetrisp2.cpp
- SOURCE: pci\pci_slot.cpp


I15.3   Bus

- 0.151              : Added a placeholder for the Intel iSBX bus. Moved abcbus, adamnet, c64 expansion/user ports, cbmiec, comx35, ieee488, iq151, kc, tvc, vip expansion/byte I/O ports, wangpcbus, xebec, z88 expansions and a bunch of other buses under emu\bus, renamed from mess\machine [Curt Coder]. Updated a pair of commented out legacy calls (emu\bus\ecbbus\grip.c) [Osso].
- SOURCE: emu\bus\...


I15.31  IEEE-488

- 0.245              : Converted ieee488\remote488.cpp to use logmacro [Ryan Holtz].
- 0.197              : Removed sub-classing of bitbanger, back to plain bitb. Re-introduced logging of parser FSM in a separated logging category [fulivi].
- 0.196              : Added bus\ieee488\remote488.cpp/h. Added IEEE-488 remotizer device to IEEE-488 buses of HP9845 & HP85 [fulivi].
- 0.180              : A few optimizations to "state-changed" callbacks (ieee488\ieee488.cpp) [fulivi].
- 0.150              : Cleanup. Removed device address information from the IEEE-488 bus, allowing devices to be chained [Curt Coder].
- 0.148u2            : Modernized IEEE-488 device [Curt Coder].
- 0.147              : Added mess\machine\ieee488.c/h. Merge of MESS sources [Miodrag Milanovic].
- NOTES: IEEE-488.1 General Purpose Interface Bus emulation (aka HP-IB, GPIB, CBM IEEE)
- DRIVERS: (MESS) cbm2.cpp, hp64k.cpp, osborne1.cpp, pet.cpp, sage2.cpp, softbox.cpp, tek405x.cpp, victor9k.cpp, vixen.cpp and zorba.cpp
- SOURCE: bus\ieee488\ieee488.cpp and remote488.cpp



I15.4   PC CARD

- 0.266              : Changed machine\linflash.cpp/h to bus\pccard\linflash.cpp/h, machine\pccard.h to bus\pccard\pccard.cpp/h and machine\pccard_sram.cpp to bus\pccard\sram.cpp/h.
- 0.253              : Added machine\pccard_sram.cpp/h. Added support for PCMCIA linear SRAM cards. Added callbacks for card detect, battery voltage and write protect to the PCCard interface. Added helpers to read/write data swapped (similar to the existing support in the ATA device). Added support for 2 MB and 4 MB SRAM PCMCIA models from Centennial with built-in EEPROM storage for CIS information. Updated the linear Flash PCMCIA card emulation to use the new card detection support (machine\linflash.cpp). Fixed write protect switch and removed unneeded function. Added 1 MB variant (machine\pccard_sram.cpp). Added support for the Mitsubishi Melcard SRAM card with 1 MB RAM as an example for a card without attribute memory. Change input ports from DIP to configuration switches (machine\pccard_sram.cpp). Added support for 8-bit reads/writes (machine\pccard.cpp) [Dirk Best].
- 0.222              : READ/WRITE macros removal (machine\linflash.cpp) [Osso].
- 0.149              : Added machine\linflash.c/h and pccard.c/h. Created a PCCARD slot and Linear Flash Card for System 573. Uses bankdev.c for banking the onboard flash chips and the pccard slots. This adds an extra two calls to the memory system & intelfsh.c already called the memory system for accessing the data. Changed the pccard slot over to use a device map [smf].
- SOURCE: Added pccard\linflash.cpp/h


I15.5   ACPI

- 0.156: Added machine\lpc-acpi.c/h and lpc.c/h. LPC: Skeleton ACPI [O. Galibert].
- SOURCE: machine\lpc-acpi.c/h and lpc.cpp/h
- NOTES: ACPI = Advanced Configuration and Power Interface;  LPC = Low Pin Count bus



I15.6   Northbridge

- 0.221              : Simplified handlers (machine\i82439tx.cpp) [Osso].
- 0.188              : Do not always assert on unimplemented PCI configuration registers (bus\lpci\i82439tx.cpp). Log a message in the error log instead [yz70s].
- 0.156              : Moved bus\pci\i82371ab.c/h, i82439tx.c/h, northbridge.c/h and pci.c/h to bus\lpci\ [O. Galibert].
- NOTES: Intel 82439TX Northbridge
- DRIVERS: gammagic.cpp
- SOURCE: bus\lpci\i82439tx.cpp, bus\lpci\northbridge.cpp and machine\i82439tx.cpp


I15.7   Southbridge

- 0.282              : Hookup ISA DMA bindings (machine\sis950_lpc.cpp) [Angelo Salese].
- 0.277              : Correct internal_io_map from MAME 0.276 commit (machine\i82371sb.cpp, machine\sis85c496.cpp and machine\sis950_lpc.cpp) [Angelo Salese].
- 0.276              : Lift cargo cult 0xe0-0xef noprw (machine\i82371sb.cpp, machine\sis85c496.cpp and machine\sis950_lpc.cpp) [Angelo Salese].
- 0.271              : Reduced PIT range (machine\i82371sb.cpp) [Angelo Salese]. i82371sb_isa_device & sis85c496_host_device can now redirect their IRQs (machine\i82371sb.cpp and sis85c496.cpp) [smf].
- 0.264              : Fixed PIC mapping (machine\i82371sb.cpp). Fixed PIC and RTC mapping. Added ISA irq pins and int pin mapper (machine\sis85c496.cpp) [Angelo Salese].
- 0.257              : Added DRAM boundary regs and hookup ISA bus (machine\sis85c496.cpp). Start moving sis85c496 BIOSes from pc\at.cpp to (MESS) pc\pcipc_sis.cpp. Perform some cleanups and added preliminary IDE support and hookup Voodoo 1 (machine\sis85c496.cpp) [Angelo Salese]. Moved 86c496 chipset boards from at.cpp to pspc_sis.cpp [rfka01].
- 0.253              : Object finders aren't resolved at config complete time (machine\i82371sb.cpp) [Vas Crabb].
- 0.235              : Corrections to PCI configuration space map and decoding to debug log of pam register writes (machine\i82439hx.cpp). Various changes, Windows 98 recognizes the ide busmaster controller in (MESS) pcipc driver. Corrections to PCI configuration space maps. Removed useless redefinitions of command_w/r in ide device. Placeholders for nmi, stpclk and extsmi lines of ISA bridge. Correctly support 8 bit writes to idetim registers (machine\i82371sb.cpp) [yz70s].
- 0.222              : READ/WRITE macros removal (machine\sis85c496.cpp). Initiliazed a couple more variables to fix assert in DEVNOCLEAR build (lpci\i82439tx.cpp). READ/WRITE macros removal (pci.cpp, machine\i82371sb.cpp, i82439hx.cpp and pci-smbus.cpp). Fixed problem in pcipc driver in DEVNOCLEAR build [Osso].
- 0.208              : Simplified read/write handlers (machine\i82371sb.cpp and sis85c496.cpp) [AJR].
- 0.201              : Removed ATA_INTERFACE, BUS_MASTER_IDE_CONTROLLER and AT_KEYBOARD MCFG macros [Ryan Holtz]. Connected IRQ for RTC to (MESS) pcipc.cpp and make WinXP install and run. ISA interrupt mapping was strangely wrong. Added interrupt input lines. Also added EISA interrupt registers pcipc.cpp is updated accordingly (machine\i82371sb.cpp) [yz70s].
- 0.200              : IDE works, basic system is usable now (machine\i82371sb.cpp) [yz70s]. Removed MCFG macros (machine\i82371sb.cpp) [Vas Crabb].
- 0.199              : i82371sb.cpp has ISA enabled and a new device for the PCI IDE controller [yz70s].
- 0.198              : Added support for system management mode and more (lpci\i82439tx.cpp). Updated to IDE and USB PCI config registers. With IDE is now possible to enable and disable access to I/O ports (bus master DMA ones too) (lpci\i82371sb.cpp). Support to enable/disable IDE I/O ports. When disabled reads should return all bits to 1 and writes should do nothing. Used when I/O access is disabled by py PCI config registers (lpci\southbridge.cpp). Intercept access to eisa interrupt line mode config ports (lpci\southbridge.h). Do not remap ram betweek 640k and 1megabyte (lpci\northbridge.cpp). PCI devices now have the possibility to remap themselves. Like in the ISA bus remap (int space_id, offs_t start, offs_t end) of the PCI bus manager can be called to tell devices that if they have mapped something in address space space_id from start to end they should remap themselves. It will be used with system management mode. PCI devices can ask to be mapped before the others. Will be used by the ISA bridge in the southbridge (machine\pci.cpp). Start to support system management mode (machine\i82439hx.cpp). Removed unneeded stuff, enable ISA and added system management mode (machine\i82371sb.cpp) [yz70s].
- 0.192              : Not all sothbridges have an internal keyboard controller, RTC, serial and parallel devices. Now southbridge_device does not have them. There is a new southbridge_extended_device that has them. i82371ab_device derives from southbridge_extended_device. Converted comments to C++ [yz70s].
- 0.188              : Put writes to 0x58 and 0x5c in their own case. Give derived classes the ability to intercept writes to debug port 0x80 (lpci\southbridge.cpp). Added boot_state_hook DEVCB to receive writes to debug port 0x80 (lpci\i82371sb.cpp). Splitted the single rw handler to io ports 60 and 61 into two separate handlers one for each port. To support systems in the future where the southbridge does not contain a keyboard controller (lpci\southbridge.cpp) [yz70s].
- 0.156              : Moved bus\pci\i82371ab.c/h, i82371sb.c/h, pci.c/h and pci\southbridge.c/h to bus\lpci\. Allow sound output if 8253 PIT is never programmed, i.e. all output is done by modulating speaker output line (bus\lpci\southbridge.c) [Sergey Svishchev].
- 0.153              : Moved mess\machine\southbridge.c to bus\pci/.
- 0.152              : Make AT586 FDC word (machine\southbridge.c). Clean up the refresh bit, it's always the same as the 5170 (drivers\at.c, machine\at.c and southbridge.c) [Carl].
- 0.151              : Allows you to change what is in the southbridge IDE slots (machine\southbridge.c). Use ds12885 as at586 needs 128 bytes (machine\southbridge.c) [smf]. Fixed southbridge DMA. Greatly increase refresh line delay. Passes floppy controller test, still crashes [Carl].
- 0.149              : Fixed crash (machine\southbridge.c) [Carl].
- 0.147              : Added mess\machine\southbridge.c/h.
- DRIVERS: gammagic.cpp, odyssey.cpp, photoply.cpp, przone.cpp, taitowlf.cpp and tetrisp2.cpp
- SOURCE: machine\i82371sb.cpp and machine\sis85c496.cpp


15.8   Intel 440BX
- 0.255              : Added machine\i82443bx_host.cpp/h. Initial work towards i440bx chipset. Implemented stubs for i82443bx_host [Angelo Salese].
- NOTES: Intel 440BX 82443BX Host section
- DRIVERS: comebaby.cpp, midqslvr.cpp and xtom3d.cpp
- SOURCE: machine\i82443bx_host.cpp


15.9   PIIX4E
- 0.255              : Added machine\i82371eb_acpi.cpp/h, i82371eb_ide.cpp/h, i82371eb_isa.cpp/h and i82371eb_usb.cpp/h. Implemented stubs for i82371eb PCI devices [Angelo Salese].
- NOTES: PIIX4E hardware
- DRIVERS: comebaby.cpp, midqslvr.cpp and xtom3d.cpp
- SOURCE: machine\i82371eb_xxx.cpp


I16.    Other

I16.1   PT8010
- NOTES: Proton PT8010AF is a support chip for 8088/8086 boards. It includes clock generation, timer, interrupt, DMA and glue logic)
- PCB: Proton PT8010AF PLCC (Filetto)


I16.2   Intel 8355

- 0.219              : Simplified handlers [AJR].
- 0.202              : Removed I8355 MCFG macros [Ryan Holtz].
- 0.184              : Use required_region_ptr instead of device_memory_interface for internal ROM [AJR].
- 0.153              : Converted I8355 to DEVCB2 [Osso].
- 0.142              : Added machine\i8355.c/h. Imported some common C++ devices from MESS to emu folder [Curt Coder].
- NOTES: 16k Bit ROM with I/O emulation
- DRIVERS: (MESS) exp85.cpp and sdk85.cpp
- SOURCE: machine\i8355.cpp


I16.3   WD11C00-17

- 0.221              : Simplified handlers [Osso].
- 0.154              : Converted WD11C00-17 to DEVCB2 [Osso].
- 0.148u2            : Moved mess\machine\wd11c00_17.c/h to mame\ [Curt Coder].
- NOTES: Western Digital WD11C00-17 PC/XT Host Interface Logic Device
- DRIVERS: (MESS) bus\isa\wdxt_gen.cpp
- SOURCE: machine\wd11c00_17.cpp


I16.4   WD7600

- 0.280              : Replaced PC chipset with WD7600 (pc\teradrive.cpp, machine\wd7600.cpp). Changed keyboard controller to PS/2 (machine\wd7600.h). Get rid of vestigial 1-filled ISA ROM region (machine\wd7600.cpp) [Angelo Salese].
- 0.208              : Simplified read/write handlers (machine\wd7600.cpp) [AJR].
- 0.200              : Removed MCFG macros (machine\wd7600.cpp) [Vas Crabb].
- 0.186              : Don't use 32-bit masks on a 16-bit space (fixes MegaPC) [AJR].
- 0.175              : Fixed memory fatalerrors (machine\wd7600.cpp). Restore keyboard/portb subunits handlers. Fixes POST errors [Barry Rodewald].
- 0.154              : Added machine\wd7600.c/h. Created WD7600 chipset device. Made into a separate driver class, hooked up WD7600 in (MESS) Amstrad MegaPC. Extended range of some WD7600 registers (based on datasheet) [Barry Rodewald].
- NOTES: Western Digital WD7600 PC system chipset
- DRIVERS: (MESS) at.cpp
- SOURCE: machine\wd7600.cpp



I16.5   Atari 400/600/800

- 0.280              : A800 write_cart doesn't need returning from void fn (a800\a800_slot.cpp) [Angelo Salese].
- 0.272              : Cleaned up miscellaneous stuff (vcs_ctrl\trakball.cpp) [Vas Crabb].
- 0.271              : Added vcs_ctrl\trakball.cpp/h. Added support for Atari CX22/CX80 Trak-Ball in native trackball mode (vcs_ctrl\trakball.cpp) [as-tb-dev].
- 0.264              : Added vcs_ctrl\cx85.cpp/h. Added Atari CX85 Numeric Keypad to controller port options. Invert polarity of B pot output. Moved "cx85" into the general devices list on the slim chance it might be useful with other systems (ATARI_CX85) (vcs_ctrl\cx85.cpp) [AJR].
- 0.260              : Fixed keypad scanning (atari\atari400_m.cpp). Fixed class hierarchy for "a5200_2chips" ROM type (bus\a800\rom.cpp) [AJR].
- 0.256              : Modernized cart slot interface (bus\a800/*). Use address_maps instead of catch-all handlers. Implemented rd4 and rd5 line views. Converted a800_rom_williams_device to the new system, make almost every entry in mega* and prisma* SW to actually boot. Implemented maxflash_1mb / maxflash_8mb devices. This allows loading arbitrary collection of .xex files built thru Maxflash Cartridge Studio program as flash ROM binaries (bus\a800\maxflash.cpp). Implemented sic_128kb / sic_256kb / sic_512kb flash ROM devices (bus\a800\sic.cpp). Implemented ast2k, atrax, Blizzard 32kb, Adawliah, SpartaDOS 128KB and A5200 Super Cart variants (bus\a800\*). Implemented Super Charger math unit device (bus\a800\supercharger.cpp). Fixed xegs cart default slot for loose cart loading (a800\a800_slot.cpp). Merged a800_turbo64 and a800_turbo128 into single a800_turbo slot option (a800\a800_carts.h). Split a5200 to own interface (a800\a800_slot.cpp). Fixed a5200 assert failure on cart [Angelo Salese].
- 0.250              : Atari\atari400.cpp: Initial split up of different state machines. Fixed Clang error: misleading indentation; statement is not part of the previous 'if' [-Werror,-Wmisleading-indentation]. Virtualize machine_start/machine_reset. Isolated m_ext_bank in a130xe_state. Bulk replace pokey raw tags into m_pokey. Fixed a800xl / a130xe self test ROM enabling, fixes Acid800 XL MMU test. Updated Q/A. Splitted a600xl and a1200xl to own state. Virtualize PIA portb. Use memory_view at 0xd800-0xffff. Various a400 and a800 refactoring changes: Reduced memory maps and configs to bare minimum. Reduced default RAM options for them and add preliminary options. Isolated I/O map. Make sure it unmap_value_high() because otherwise they will crash on non-48K setups. Inherit hw_iomap for a800xl and onward. Lower kernel view bound to 0xc000 for a800xl and later machines. Removed all _low_r/low_w handlers and replaced with views, fixed xegs default boot order (BASIC then game ROM via select key), address code review. Fixed CI clang failure. Fixed a1200xl_state calls. Hookup option jumpers to a1200xl. Misc connection notes. Reduced selftest views. Better inherit PIA portb mechanics. Removed obsolete a600xl_mem fns. Emulated extended RAM quirk for a130xe, convert m_ext_bank to address_map_bank_device [Angelo Salese, AJR].
- 0.173              : Changed machine\atari.cpp to machine\atari400.cpp and includes\atari.h to includes\atari400.h [Tafoid].
- 0.155              : (MESS) Atari 400 progress [Fabio Priuli]: Rewritten cart emulation to use slot devices (many "mappers" do not fully work) and unified cart handling among 8bit home computers, XEGS and Atari 5200. Added support for loading carts with bankswitch to all XL/XE models. Added support for loading XEGS carts in Atari 8bits home computers (XEGS instead will only load XEGS games until support for the keyboard add-on is included). Big clean up of the driver, simplifying memory map, removing writes to ROM, etc. Changed NOT_WORKING flag to IMPERFECT_GRAPHICS in 600XL, 65XE, 800XE and XEGS since they should now be working to the same extent of the 800XL, and bugs shall be reported. Note: As a consequence of the above changes, the new softlists a800.xml, a5200.xml and xegs.xml are not compatible anymore with 0.154: Keep the old XMLs until 0.155 if you don't compile your own exe. Start attempt to untangle a bit the video & machine code. Updated Pokey to use delegates for its callbacks. Added A800 sketchy support for some more mappers. Only a few carts have actually improved, but it is a start. Fix error when attempting to mount a cart designed for the A800 right slot (e.g. Monkey Wrench II) into a system without the right slot. Reduced tagmap lookups in Atari400, Naxaflex and Bartop52 [Fabio Priuli].
- 0.154              : Atari: Changed just things I need [Miodrag Milanovic].
- 0.153              : Removed some atari legacy code [Miodrag Milanovic].
- 0.148u3            : Correct bit for POK_KEY_BREAK which now allows colon/semi-colon [:;] key to work properly [Tom Clayton].
- 0.146u1            : Added cycle exact potentiometer and keyboard support to Pokey device. The keyboard changes may break some MESS drivers. Please have a look at atari.c and bartop52.c for an example how the new implementation works [Couriersud].
- 0.146              : Convert all remaining drivers to use the modern Pokey device. Removed legacy left overs from Pokey code. Added a internal pokey_channel class [Couriersud].
- 0.145u7            : Created ioport_manager and moved the port list to it. Removed global port lookups, now all lookups must be done through device_t::ioport() [Aaron Giles].
- 0.144u2            : MAME part of removing deprecat.h from Atari 400/800 [Angelo Salese].
- 0.144u1            : Fixed for some naming conflicts between MAME and MESS [Miodrag Milanovic].
- 0.140u2            : Mariusz Wojcieszek added Barrom Baseball (prototype) (Atari 1983).
- 0.131u1            : Factored out some more MESS specific code for Atari 8bit. Removed a few more MESS specific code from mame\machine\atari.c. Also, renamed a couple of functions to prevent conflicts with MESS [Fabio Priuli].
- 0.130u4            : Factored out MESS-specific code from machine\atari.c (cart init, loading & unloading) [Fabio Priuli].
- 0.130u3            : Removed old hardcoded keyboard handling for Atari 8bit systems and used  more reasonable key matrix scan. No regressions expected in MAME (tested maxaflex.c games) [Fabio Priuli].
- 0.129u6            : Remaining PIA device-ification [Aaron Giles].
- 0.129              : Updates to some MESS-only code [Wilbert Pol].
- 0.125u7            : MESS-specific changes [Nathan Woods].
- 0.124u4            : MESS-specific changes [Nathan Woods].
- 0.124u1            : More MESS-specific changes (this code should be factored out of MAME) [Nathan Woods].
- 0.123u1            : Fixed maxaflex problems. The maxaflex, mf_bdash and mf_achas drivers fatalerror on startup as reported on MAMETesters [Atari Ace].
- 0.88u4             : Mariusz Wojcieszek added Astro Chase (Max-A-Flex), Bristles (Max-A-Flex), Flip & Flop (Max-A-Flex) and Boulder Dash (Max-A-Flex) (Exidy / First Star Software).
-  8th November  2004: Mariusz Wojcieszek - Wrote a driver for the Max-A-Flex system (Atari 600XL). Four titles have appeared on this platform officially only.
- DRIVERS: bartop52.cpp and maxaflex.cpp
- SOURCE: machine\atari400.cpp and includes\atari400.h


I16.51  Atari ST

- 0.284              : Documented stacy rom part numbers (atari\atarist.cpp) [Dirk Best].
- 0.274              : JOY1-5 signal is not for a 2nd joystick button. Fixed joystick button reads (atari\stkbd.cpp) [hap].
- 0.271              : Decrease mouse sensitivity (atari\stkbd.cpp) [Robbbert].
- 0.255              : Added missing ST keycodes and mouse buttons. Don't segfault immediately when starting STe (USA) [ksherlock].
- 0.253              : Added atari\stkbd.cpp/h, atari\stmmu.cpp/h and atari\stvideo.cpp/h. Extract the keyboard subsystem in a device (Atari ST Keyboard/Mouse/Joystick). Extracted the MMU, will need STE memory map specialization. Rewrote of the video for the original ST. Record the timer input level always, even if the timer is off (machine\mc68901.cpp). Correct stupid typo (formats\st_dsk.cpp). Appease listxml by protecting the setting with has_screen (atari\stvideo.cpp). Removed the bullshit bad dumps. Lots of fixes, with much help by Ijor (Jorge Cwik). Added wait state of MFP accesses, partially helps syntax terror and makes Ventura run [O. Galibert].
- 0.245              : Re-added mode 1 shifter kludge for PAL mode only (video\atarist.cpp) [AJR].
- 0.244              : Removed includes\atarist.h. Added machine\ataristb.cpp/h. Cleanups and minor fixes: Added cartridge software list and IPF floppy format to all sets. Added missing handlers to (still non-working) ste, megast and megaste memory maps, making megaste a megast derivative. Give HD6301 its own XTAL. Use array finders for HD6301 keyboard and joystick ports. Swap players for joystick and button inputs (needed for mouse to work). Removed shifter mode 1 kludge that seems to hurt more than help. Split out video and blitter as separate devices [AJR].
- DRIVERS: (MESS) atarist.cpp
- SOURCE: drivers\atarist.cpp and video\atarist.cpp


I16.6   Acorn Archimedes

- 0.282              : Added Acorn AKA30 SCSI Expansion Card (archimedes\podule\scsi_acorn.cpp) [Nigel Barnes].
- 0.281              : Moved classes into anonymous namespace (archimedes\econet\*) [Nigel Barnes].
- 0.280              : Added support for HFE floppy format to all machines. Added another romset for the A500 [Nigel Barnes].
- 0.278              : Updated Flash and Hold logic to match SAA5050 (video\saa5240.cpp) [Nigel Barnes].
- 0.275              : Added Acorn V20 (Development) [anonymous]. Added earlier LBP-4 2.01 ROM (bus\archimedes\podule\laserd.cpp). Improved default CMOS configuration in Acorn R225 (acorn\aa310.cpp). Decode national character sets. Cursor rendered when enabled. Implemented clear memory register. Only acknowledge correct I2C device Id (video\saa5240.cpp). Initialised pixel variables (machine\acorn_vidc.cpp) [Nigel Barnes].
- 0.263              : Correct 16bit RAM access (archimedes\podule\ether1.cpp). Added ROM podule with discless bootstrap (archimedes\podule\rom.cpp). Configured Acorn R225 with discless bootstrap. Configured Acorn A4 to auto-start !BatMgr. Reduced ROM region size, and mirrored. Removed RISC OS 3.19 from BIOS options, was only available in German A3010. Correct ROMs in Acorn M4 [Nigel Barnes]. Use multibyte.h helpers (podule\ether1.cpp) [AJR].
- 0.251              : Added podule\ether2.cpp/h, ether3.cpp/h, ethera.cpp/h, scsi_a500.cpp/h, scsi_acorn.cpp/h, scsi_cumana.cpp/h, scsi_ling.cpp/h, scsi_morley.cpp/h and scsi_oak.cpp/h. Added SCSI Interface podules (not working). Acorn A500 SCSI Interface. Acorn AKA31 SCSI Expansion Card. Acorn AKA32 CDFS & SCSI Expansion Card. Cumana 16bit SCSI Interface. Lingenuity SCSI Podule. Morley Electronics 16bit Cached SCSI card. Oak Solutions 16 bit SCSI Interface. Added Ethernet podules (not working): Acorn AEH50 Ethernet II, Acorn AEH54 10Base2 Ethernet Podule and ANT Ethernet 10base2 mini-podule [Nigel Barnes].
- 0.245              : Removed machine\archimedes_keyb.cpp/h. Added bus\archimedes\podule\hdisc.cpp/h, hdisc_cw.cpp/h, hdisc_morley.cpp/h and hdisc_we.cpp/h. Removed C89-style variable declarations in machine\acorn_vidc.cpp when noticed [Ryan Holtz]. Added Hard Disk podules (not working): Acorn AKD52 Hard Disc Podule. Computerware Hard Disk Podule. Morley Electronics Hard Disc Podule. Watford Electronics Archimedes Hard Disk Podule [Nigel Barnes].
- 0.243              : Workaround missing default QS1000 sounds in See See Find Out by disabling DAC outputs for the time being (machine\acorn_vidc.cpp) [Angelo Salese].
- 0.242              : Added bus\archimedes\econet\midi.cpp/h and podule\midi_emr.cpp/h. Added MIDI devices: The Serial Port MIDI Interface. The Serial Port Sampler and MIDI Interface. EMR MIDI 2 Interface and EMR MIDI 4 Interface [Nigel Barnes].
- 0.239              : Added bus\archimedes\podule\acejoy.cpp/h, greyhawk.cpp/h, scan256.cpp/h and spectra.cpp/h. Added Podules for Acorn Archimedes: ACE Joy Connect, Beebug Spectra Colour Scanner, Computer Concepts GreyHawk Video Digitiser, Computer Concepts ScanLight Junior MkIII, Morley Electronics Analogue and User Interface, Morley Electronics User/MIDI/Analogue Interface, Watford Electronics 256 Grey-Scale Scanner and Wild Vision MidiMax II [Centre for Computing History]. Improved quadrature mouse accuracy and added notes on keyboard variants (machine\archimedes_keyb.cpp) [Nigel Barnes].
- 0.238              : Added machine\acorn_bmu.cpp/h, acorn_lc.cpp/h, upc82c710.cpp/h, upc82c711.cpp/h, bus\centronics\spjoy.cpp/h, bus\archimedes\econet\econet.cpp/h, rtfmjoy.cpp/h, slot.cpp/h, bus\archimedes\podule\a448.cpp/h, armadeus.cpp/h, eaglem2.cpp/h, ether1.cpp/h, etherd.cpp/h, etherr.cpp/h, faxpack.cpp/h, ide_be.cpp/h, ide_rdev.cpp/h, io.cpp/h, io_hccs.cpp/h, io_morley.cpp/h, io_we.cpp/h, lark.cpp/h, laserd.cpp/h, midimax.cpp/h, nexus.cpp/h, rom.cpp/h, rs423.cpp/h, scanlight.cpp/h, scsi_vti.cpp/h, serial.cpp/h, slot.cpp/h and tube.cpp/h. New devices for Archimedes machines: Acorn Battery Management Unit, Acorn LC ASIC (preliminary) and Universal Peripheral Controller 82C710/82C711. Added Vertical Twist Joystick Interface. Swap Center and Right mouse buttons (machine\archimedes_keyb.cpp). Added Econet interface (not working) and RTFM Joystick Interface. Various podules for Acorn Archimedes: Acorn AGA30 BBC I/O Podule, Acorn AKA05 ROM Podule, Acorn AKA10 BBC I/O Podule, Acorn AKA12 User Port/MIDI Podule, Acorn AKA15 MIDI and BBC I/O Podule, Acorn AKA16 MIDI Podule, Acorn AKA25 Ethernet, Acorn Tube Podule, Archimedes Dual RS423 Serial Interface (not working), Armadillo Systems A448 Sound Sampler (not working), Armadillo Systems A448b Stereo MIDI Sound Sampler (not working), Atomwide Serial Expansion Card, Baildon Electronics IDE HD Interface, Clares Armadeus Sampler Board, Computer Concepts Fax-Pack (not working), Computer Concepts LaserDirect (Canon LBP-4) (not working), Computer Concepts ScanLight (not working), Computer Concepts ScanLight Junior (not working), Computer Concepts ScanLight Video 256 (not working), Digital Services Ethernet Podule (not working), HCCS User/Analogue Podule, RISC Developments Ethernet Card (not working), RISC Developments IDE Hard Disc System, VTI User Port and SCSI Podule, Watford Electronics BBC User I/O Card, Wild Vision MidiMax, Wild Vision/Computer Concepts Lark A16, Baildon Electronics IDE HD Interfacem SJ Research Nexus Interface (A500) (not working) and Wild Vision/Computer Concepts Eagle M2 (not working). Implemented DAC differences between VIDC1 and VIDC1a (machine\acorn_vidc.cpp). aa310.cpp: Added PC style IO devices (A5000/A4/A3010/A3020). Added IDE interface (A5000/A4/A3020). Added HD floppy drives (A5000/A4/A3010/A3020). RTFM and Vertical Twist joystick interfaces are slot devices. Acorn joystick interface (A3010). Added Battery Management Unit (A4). Partially implemented IOEB (A5000/A4/A3010/A3020). Replaced all 8 bit wide ROM images with actual dumps. Replaced all default CMOS with factory settings. Added printer port to all machines. Added serial port to all machines. Added podule slots to all machines. Added extension ROM socket (A5000/A4). Machines are individually configured for floppies and hard discs. Added support for Atari ST floppies [Nigel Barnes].
- 0.232              : Removed machine\aakart.cpp/h, machine\archimds.cpp and includes\archimds.h. Converted Erotictac driver to use IOC and MEMC devices [Sandro Ronco].
- 0.229              : Disabled side effects in high_mem_r handler (machine\acorn_memc.cpp) [Nigel Barnes].
- 0.228              : Added machine\acorn_ioc.cpp/h, acorn_memc.cpp/h and archimedes_keyb.cpp/h. Acorn Archimedes code reorganization: Separated Acorn IOC and MEMC into devices. Emulated 8051-based serial keyboard. Ensure only one logical page is mapped to a single physical page (machine\acorn_memc.cpp). Fixed RISC OS POST IOC register test. Added debug code to display RISC OS POST failures (drivers\aa310.cpp). Dumped Acorn Archimedes keyboard microcontroller (machine\archimedes_keyb.cpp) [Phil Pemberton].
- 0.227              : Initialized some variables that were causing crashes in DRVNOCLEAR build (machine\archimds.cpp) [Osso].
- 0.223              : Initialized some variables that were causing problems in debug DEVNOCLEAR build (machine\arm_iomd.cpp) [Osso].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.221              : More WD FDC master reset modernization (machine\archimds.cpp) [AJR]. Simplified handlers (machine\aakart.cpp) [Osso].
- 0.217              : Added machine\arm_iomd.cpp/h. Added 'ARM VIDC20' and 'ARM 7500FE SoC' device. Initialized some stuff (machine\acorn_vidc.cpp) [Osso]. Rewrote ARM IOMD/VIDC20 chips into own devices, merged implementations from ssfindo.cpp & (MESS) riscpc.cpp [Angelo Salese].
- 0.214              : Changed video\archimds.cpp to machine\acorn_vidc.cpp/h. Fixed cursor enable and variable size, used by caverns to display score and main player sprite (machine\archimds.cpp and acorn_vidc.cpp). Added preliminary RTFM joystick and serial joystick support (machine\archimds.cpp). Added compatibility tests. Rewrote Acorn VIDC10 into own device file. Improved raster effects on games that dynamically change palette on active frame. Added stereo sound support. Fixed off by 16 sound DMA transfers, improving sound quality [Angelo Salese]. Internalized palette and externalized screen [AJR]. Generate u255 law sound table on device start (machine\acorn_vidc.cpp) [Olivier Galibert, Angelo Salese].
- 0.201              : Removed AAKART MCFG macros and old DEVCB [Ryan Holtz].
- 0.196              : Removed first_screen usage from machine\archimds.cpp [Ryan Holtz].
- 0.193              : Clean 8bpp color handling (machine\archimds.cpp) [Angelo Salese].
- 0.191              : Added PC_FORMAT for PC Emulator (drivers\aa310.cpp) [Nigel Barnes].
- 0.190              : Added OPUS_DDCPM_FORMAT. Removed ACORN_CPM_FORMAT, same geometry as ACORN_SSD_FORMAT/ACORN_DSD_FORMAT. Improved find_size/identify for SSD/DSD formats. ACORN_DOS_FORMAT 640K now handled as ACORN_ADFS_OLD_FORMAT. Fixed geometry for ACORN_DOS_FORMAT 800K [Nigel Barnes].
- 0.187              : New working software list additions: Countdown to Doom and The Last Days of Doom [Nigel Barnes].
- 0.185              : Fixed Coverity (software) CID 161175 Uninitialized scalar variable [Nigel Barnes].
- 0.184              : Added formats\jfd_dsk.cpp/h. Over 20 games and applications (hash\archimedes.xml). Added notes (formats\apd_dsk.cpp). Added JFD floppy format as used by JASPP (Archimedes Software Preservation Project) [Nigel Barnes].
- 0.183              : Improved identify and simplified load of the Archimedes Protected Disk Image format (formats\apd_dsk.cpp) [Nigel Barnes].
- 0.182              : Added formats\apd_dsk.cpp/h. Finally correct audio frequency setting [R. Belmont]. Added Diagnostic Test ROMs to Archimedes 305. Renamed Archimedes 3000 -> BBC A3000. Single FDD installed by default, other bay usually contains HDD. Removed tape control input port. New floppy format 'Archimedes Protected Disk'. Added over 30 games (some protected) and many apps to hash\archimedes.xml [Nigel Barnes].
- 0.181              : Make floppies work [Sandro Ronco]. Fixed vblank timings in Acorn Archimedes and enabled partial updates, VIDC definitely needs a device rewrite at this stage plus ARM timings are quite off unsurprisingly (machine\archimds.cpp). Fixed Vertical Count Register and pixel clock timings [Angelo Salese]. Fixed sound double-buffering [R. Belmont].
- 0.180              : Reworked Archimedes 310 HLE keyboard and added mouse input. Fixed horizontal display position and cursor position in VIDC [Sandro Ronco]. Added new NOT WORKING machines: Archimedes 305, Archimedes 440, Archimedes 3000, Archimedes 410/1, Archimedes 420/1, Archimedes 440/1, Archimedes 540, Acorn A5000, Acorn A4, Acorn A4000 and Acorn A5000 Alpha. Renamed a310->aa310 to avoid conflict with Amiga machines. Added all missing OS releases Arthur 0.30, RISC OS 2.01, RISC OS 3.00, RISC OS 3.10 and RISC OS 3.19 (German). All machines default to OS (Arthur, RISC OS 2, RISC OS 3) they were shipped with. Correct ROM labels/locations. Added default CMOS to boot to desktop. Mapped Acorn A4 Power Management extension. Added RISC OS 3 Applications to hash\archimedes.xml and removed some bad dumps [Nigel Barnes].
- 0.176              : Notes about how to load a floppy in supervisor mode (drivers\a310.cpp) [Angelo Salese]. Fixed Archimedes disk format [O. Galibert].
- 0.157              : Added softlist for Archimedes disks [Riley110, Fabio Priuli].
- 0.154              : Added preliminary keyboard hook-up in AAKART device, adding bare-bones keyboard inputs to (MESS) Acorn Archimedes. Fixed DMA scrolling and wrap-around, noticeable on supervisor mode. Looks like that /2 is far better as timer count, according to the RTC count (machine\archimds.c). Fixed shaking screen regression in Poizone/Erotictac. Added Co-Processor sub-types to ARM CPU, hooking a special case for VL86C020 used by Acorn Archimedes. Added first step in adding floppy hook-up to Acorn Archimedes, removed old device implementation in favor of new device core. Improved FDC hookup, (MESS) Arthur now boots without hacks. Some keyboard additions. According to OG, m_fdc->dden_w was reversed (and indeed multiple DRQs are called now). Attempt to hook up a bunch of floppy related bits to no avail [Angelo Salese]. Converted AAKART device to DEVCB2 [Osso]. Silence ~1MB/second printf spam (machine\aakart.c) [Tafoid].
- 0.153              : Attempt to partially rewrite AAKART, and added 4bpp video mode for Acorn Archimedes. It now boots at prompt screen, and actually even boots into splash screen and dies almost soon with an error if you provide a properly initialized NVRAM. Added preliminary cursor drawing, disabled as default. Interlace support. Support for 2bpp (screen mode 1) [Angelo Salese].
- 0.149u1            : Added missing aakart_device in aristmk5_usa machine config [Oliver Stoeneberg].
- 0.148u2            : Fixed uninitialized variable in machine\aakart.c [Oliver Stoeneberg].
- 0.148u1            : Reduce tagmap lookups [Wilbert Pol].
- 0.147u4            : Added machine\aakart.c/h. Fixed various bugs with Acorn Archimedes IRQs. Emulated the AAKART, but RISC OS still hangs due of something. Attempt fixing AAKART in blind faith [Angelo Salese].
- 0.147u1            : Modernized Archimedes [Miodrag Milanovic].
- 0.144u1            : Made code works without ifdefs (machine\archimds.c) [Miodrag Milanovic].
- 0.143u2            : Fixed IOC timers 1 & 2 in Archimedes emulation [Palindrome].
- 0.142u5            : Greatly improved (not perfect) audio in Erotictac/Tactic and Poizone (machine\archimds.c) [R. Belmont, Heihachi_73].
- 0.139u2            : Fixed FDC offsets. Hooked up some quick and dirty video routine to Aristocrat Mk-5. Virtual memory initial bank hack, to show all of the MK-5 errors. Acorn Archimedes / Aristocrat MK-5: Added Force IRQ/FIRQ hook-up and hooked up an undefined behaviour for a timer check, fixes CPU check during POST. Implemented I2C accesses to the Acorn Archimedes / Aristocrat MK-5 HW, fixing SRAM check. Added clock read-back register to the I2C device. Fixed the sound DMA in Acorn Archimedes / Aristocrat MK-5, adding sound support to the drivers. Made the I2C clock bit to be AA-specific. Fixed VIDC CRTC behaviour. Fixed a fatal bug in MEMC handling and removed the mapping kludge for Aristocrat MK-5. Used logical addresses for video and fixed sound frequency. Improved video emulation to the Aristocrat MK-5, added bare-bones VIDC DMA transfer and timings, added 8bpp mode. Fixed x/y offsets, added interlace mode. Fixed Diamond Touch screen settings (fixed htotal/vtotal). Rewritten I/O device r/w accesses in Acorn Archimedes/Aristocrat MK-5. Improved the memory management some more. Improved visible area stuff. Made x/y sizes to be dependant by the display registers. Fixed various issues in the AA emulation, this makes Poizone to theoretically work as current ertictac.c emulation (not yet enabled). Fixed sound DMA bug. Fix for VBLANK irq, now Erotictac works like current MAME driver, Fixed timers and irq clears in Acorn Archimedes / Aristocrat MK-5 / Erotictac drivers. Some sound improvements, sound is now actually recognizable, even though quite far off perfection. Improved video DMA operations (4 usecs is another thing). Small video DMA bug fix (bottom-right corner in Poizone) [Angelo Salese]. Improved sound in Erotictac / Poizone [Angelo Salese, Phil Bennett].
- 0.136u3            : Small update needed for MESS (machine\archimds.c) [Dirk Best].
- 0.133u4            : Unnecessary (dangerous) type conversion in comparison with ioc_timercnt being UINT32 (machine\archimds.c) [hap].
- 0.132u2            : Fixed Diamond Touch freeze/hang of process (machine\archimds.c) [Angelo Salese].
- 0.129u3            : Added drivers\aristmk5.c, includes\archimds.h and machine\archimds.c. Adding first-cut shared Archimedes code and hooked it up to MK5 [R. Belmont].
- DRIVERS: aristmk5.cpp, ertictac.cpp and (MESS) aa310.cpp
- SOURCE:


I16.7   Amiga

- 0.282              : Revert MAME 0.274 (Refine silence on empty DMA buffers) with rationale (amiga\paula.cpp) [Angelo Salese].
- 0.278              : Partial revert of MAME 0.274 (Impose DDFSTOP HW limit on bits 15-8 writes) (amiga\amiga_m.cpp). DDFSTOP mask was correct before and this workaround broke ar_ldrb [hap]. Impose upper masks for AGA/ECS chipset only (amiga\amiga_m.cpp) [Angelo Salese].
- 0.276              : CDTV CD-ROM support. CDTV can boot from CD and play audio discs. Alternatively use the A570 expansion for the A500 [Dirk Best].
- 0.275              : Added zorro\oktagon2008.cpp/h and bus\amiga\cpuslot\a570.cpp/h. Misc popmessages aimed at AGA unsupported stuff (amiga\amiga_m.cpp). Added vblank line mechanism for penalties (amiga\agnus_copper.cpp). Amiga AGA: Removed intermediate misprint. Hookup bplam for single playfield mode. Implemented pf2ofx color table. Fixed playfield-sprite collisions. Implemented CLXCON2 and palette reads (amiga\amigaaga.cpp). Trigger an irq if channel DMA gets disabled during playback (amiga\paula.cpp). Hookup photo_cd SW list to all CD systems (amiga\amiga.cpp) [Angelo Salese]. Untangle CPU slot bus from Zorro-II slot: Rewrite DMAC DMA controller. Now actually transfers data. Added preliminary support for the A590 hard disk controller. Added preliminary support for the Action Replay freezer devices. Added support for the MegaMix 500 RAM expansion. Added preliminary support for the A2091 hard disk controller. Rework amiga_workbench.xml software list. The list now contains Workbench for all systems, wile AMIX still uses its own list. Synchronize data where possible with the "Workbench Project" website. All other additions sourced from TOSEC or merged from previous a1000/a3000 lists. Added driver disks for bsc SCSI controllers (hash\amiga_hardware.xml). Added support for Rev. 2 (machine\dmac.cpp) [Dirk Best]. Added emulation (seemingly working) of Oktagon 2008 SCSI controller. Improved ROM mapping [AJR, unknown]. Initial skeleton device (cpuslot\a570.cpp) [Dirk Best, TOSEC].
- 0.274              : Added amiga\zorro\merlin.cpp/h and video\bt48x.cpp/h. Changed machine\akiko.cpp/h to amiga\akiko.cpp/h, machine\amiga_copper.cpp/h to amiga\agnus_copper.cpp/h, machine\amigafdc.cpp/h to amiga\paulafdc.cpp/h, machine\gayle.cpp/h to amiga\gayle.cpp/h, machine\8364_paula.cpp/h to amiga\paula.cpp/h. Couple of logging setups. Disable DMA reload on SPRxPOS (Copper) writes. CLXDAT bit 15 is always high. Impose DDFSTOP HW limit on bits 15-8 writes (amiga\amiga_m.cpp). Convert anon to emu_timer (amiga\akiko.cpp). Better WAIT times. Delay MOVE writes regardless of what register it triggers. Handle SKIP properly. 0x5c is actual h blank minimum position. Calculate cycles remainders on end of scanlines (amiga\agnus_copper.cpp). Don't run copper cycles for ephemeral out of beam phase. Don't added bitplane modulo if DMA is disabled. Fixes amigaocs_flop:lweapon intro at least. Moved sprite DMA triggers to X defined slots. Fixed sprite display in hires mode (amiga\amiga_v.cpp). Correct horizontal screen values (amiga\amiga.h). Moved Paula, Akiko, Copper and FDC from machine to project folder. Refactor device names so that they references chipset names instead (devices\machine\* - > mame\amiga\*). Clamp output to s16. Refine silence on empty DMA buffers (amiga\paula.cpp). Amiga AGA: Align hires fmode 3 DDFs and experimentally enable drawing even if bitplane fetch DMA disabled. Calculate fmode at copper time and removed dubious XOR calculation for fmode 1 delays. Implemented BRDRBLNK, extend DDF stop for hires fmode 3 to +16. Updated QA. Incremented fmode 3 offset hack (amiga\amigaaga.cpp) [Angelo Salese]. Honor cliprect for drawing (zorro\rainbow2.cpp). Improved reset handling. Added preliminary support for the merlin gfx card (bus\amiga\zorro). Implemented RAMDAC with hardware cursor (video\bt48x.cpp). Moved gayle into amiga folder [Dirk Best].
- 0.273              : Added amiga\zorro\picasso2.cpp/h, amiga\zorro\ripple.cpp/h, amiga\zorro\toccata.cpp/h, zorro\rainbow2.cpp/h and hash\amiga_cd.xml. Added support for the RIPPLE IDE controller. Cleanups and 32-bit zorro support for various cards. Added support for the Toccata SoundCard (bus\amiga\zorro/*). Make sure to reset zorro cards on manual calls (zorro\zorro.cpp). Preliminary Picasso II+ support. Added support for the Rainbow II/FrameMaster [Dirk Best].
- 0.262              : Fixed a couple of initial states as per vAmigaTS/showcia1 test. Fixed UNUSED register behaviour (machine\mos6526.cpp). Moved CIA A TOD writes to vblank end (amiga\amiga_m.cpp). Ensure sprites gets updated once per effective scanline, fixes stuck vertical stripe in (MESS) Kick Off & Sword of Sodan (amiga\amiga_v.cpp). Get rid of logic setups in screen_update. Misc cleanups. Assume max size if audlen == 0, fixes missing sound in (MESS) VideoKid and WWF WrestleMania (machine\8364_paula.cpp) [Angelo Salese].
- 0.259              : Use helpers from multibyte.h (machine\akiko.cpp) [AJR].
- 0.255              : Fixed regression crash (machine\akiko.cpp) [Angelo Salese].
- 0.253              : Simplified dsksync behaviour, makes swordsod and itcame to boot without hacks at very least (machine\amigafdc.cpp) [Angelo Salese]. Rewrote the Amiga Gayle emulation, adding support for PCMCIA (machine\gayle.cpp). Fixed an issue with Amiga interrupts arriving at the wrong time. Added 1 MB SRAM variant [Dirk Best]. Use UCS4 character literals (bus\amiga\keyboard\a2000.cpp) [Vas Crabb].
- 0.252              : Added new working software list item (Workbench 1.3.3 (UK); hash\amiga_workbench.xml) [fsck.technology]. Added various Workbench dumps for version 1.0, 1.1 and 1.2. Added list of known part numbers (hash\amiga_workbench.xml) [Dirk Best].
- 0.250              : Dumped code for the CDTV's remote control input converter and LCD controller (amiga\amiga.cpp) [Captain Future/CDTV Land].
- 0.242              : Added machine\amiga_copper.cpp/h. Amiga modernization changes: Converted Copper to device. Added copins implementation as debugging mailbox and converted to logmacro.h (machine\amiga_copper.cpp). Converted OCS/ECS/AGA chipset flavours to address_map_bank_device, currently using the older custom_chip_r/_w as a legacy trampoline that will be progressively removed once that we have working implementations of Agnus/Denise and derivatives. Converted Akiko to logmacro.h (machine\akiko.cpp). Better elaborate QA notes, added "Trackdisk" to device long name as officially referred by Amiga SDK (machine\amigafdc.cpp). Kicked off an amiga_demos.xml SW list hookup. Amiga AGA: Fixed sprites and bitplanes in dualpf modes, fixes at very least cd32:dstreets on gameplay. Fixed BPLCON0 when planes == 7 is set, fixes title screen GFXs in surfninj. Use HAM6 when not in AGA mode, fixes colors in cdtv:townona when run with CD32 system. Fixed sprite control fetches when FMODE != 0, fixes at very least Digger AGA sprites display. Added extended bitplane delay hooks. Fixed HAM8 when in HIRES mode, fixes at least roadkill title and car screens. Implemented Extra Half-Brite mode, used by bblow_a main menu. Workaround most GFX pitch corruptions, caused by implicit DDFSTOP overrunning width loop.Implemented bscan2 (video\amigaaga.cpp). Allow LOF bit to be set by writing bit 15 on VPOSW, fixes roadkill AGA boot. Disallow blitter address writes to go beyond the allocated chip RAM, fixes OCS sockid and AGA sockid_a drawing spurious filled tiles on playfield. Allow DDFSTRT and DDFSTOP to read bit 2 in lores mode, fixes swordsod GFX pitch in gameplay. Use pf2pri for non-dual playfield, fixes alfred player sprite visibility. Disable floppy drive default for CD32. Allow CD32 to read CDTV titles from SW list. Subq command adds +2 in command buffer, fixes cdtv:defcrown hardlock emulation (machine\akiko.cpp). Converted audio implementation accessors from switch-case to per-channel maps (machine\8364_paula.cpp) [Angelo Salese].
- 0.237              : Connect missing DSKINDEX signal from FDC to CIA-B ICR bit 4. Ignore bit 0 with BPLxMOD writes, fixes (MESS) hpoker/hpokera GFXs (drivers\amiga.cpp). Workaround live_counter > 8 to reset, makes abreed to boot to gameplay. Start adding logmacros. Fixed DMAON readback, giving logica2 diag BIOS the chance to print extensive floppy test info (machine\amigafdc.cpp). QA, consistent XML titles, consistent ids of virus plagued disks (additional field plus mark these as baddump). Mark the failures on mount and bulk test with ATK. Misc QA notes (hash\amigaecs_flop.xml). Fixed output channel of irq delegation, and throw one when a DMA reaches the end of a stream. Fixes asparmgp/gpmaster BGMs at very least. Avoid reading audio DMA buffers outside the allocated ranges, fixes sound buzzing/aliasing bug. Fixed DMA reload behaviour (fixes BGMs in (MESS) Ocean games), added live logging and misc [Angelo Salese].
- 0.236              : Put a bunch of implementation classes in anonymous namespaces, getting implementation details out of headers and out of the global namespace (bus\amiga\keyboard\a2000.cpp) [Vas Crabb].
- 0.227              : Initialized variable that was causing crashes in DRVNOCLEAR builds (includes\amiga.h) [Osso].
- 0.226              : Update Paula sound to new stream callbacks [Aaron Giles].
- 0.224              : Use swapendian_int16/int32 (machine\gayle.cpp) [AJR].
- 0.223              : Dumped BIOS version 5.92 for the A2091 [Guru].
- 0.222              : READ/WRITE macros removal (machine\autoconfig.cpp, dmac.cpp, gayle.cpp, 8364_paula.cpp) [Osso].
- 0.221              : Simplified handlers (machine\amigafdc.cpp) [Osso].
- 0.207              : Bus modernization: Removed all MCFG_ macros and use DEVCB3 for callback configuration. Use address space finder to replace one call to machine().device. Required accessor for slot cards to access bus space [AJR].
- 0.201              : Removed MCFG macros and old DEVCB (machine\8364_paula.cpp) [Ryan Holtz].
- 0.205              : Added amiga\zorro\a2058.cpp/h. Added support for the A2058 memory expansion Zorro card [Dirk Best].
- 0.204              : Added bus\amiga\zorro\a2065.cpp/h. Initial version of Commodore A2065 Ethernet card [Dirk Best].
- 0.201              : Added bus\amiga\keyboard\a2000.cpp/h and bus\amiga\keyboard\mitsumi.cpp/h. Removed bus\amiga\keyboard\a500.cpp/h. Added support for Amiga 2000 keyboard with 8039 and external ROM manufactured by Cherry. This keyboard doesn't drive a dedicated reset line, instead using some sequence on the clock line detected by the host chipset. MAME doesn't support this, so keyboard reset won't work. Also started documenting the character labels on the keypad NumLock/ScrLock keys for language variants but still need more pictures. Added notes on purported A1200 keyboard program and added compact mode as a config option. Amiga keyboard overhaul: Implemented Mitsumi Amiga 500, 600, and 2000/3000/4000/CDTV keyboards. Added unlabeled keys to UK layout. Restrict available keyboards depending on system type. Note that C-A-A reset is now broken on "big box" Amigas as MAME doesn't implement it properly, and the hack providing a fake dedicated reset line has been removed. Added A1000/A2000 keyboard reset circuit. Hook up Amiga CDTV keyboard reset [Vas Crabb]. Removed AMIGA_FDC MCFG macros (machine\amigafdc.h) [Ryan Holtz].
- 0.193              : End driver_data use; make all functions and tables members. Eliminated driver_data dependencies in machine\amigafdc.cpp [AJR].
- 0.189              : Correct filenames and added undumped 4.6 and 5.92 versions (amiga\zorro\a590.cpp) [Dirk Best].
- 0.187              : Correct density (DSQD->DSDD; formats\afs_dsk.cpp) [Nigel Barnes].
- 0.186              : Attached orphaned software lists (drivers\amiga.cpp) [Nigel Barnes]. Use correctly sized bootroms for the A1000 [Guru].
- 0.185              : Killed anonymous timer and hooked amigaaga_flop software list to the A1200 driver [Osso].
- 0.183              : Added bus\amiga\keyboard\a1200.cpp/h, a500.cpp/h and keyboard.cpp/h. Changed description to '8364 Paula'. Changed sound\amiga.cpp to machine\8364_paula.cpp. Converted the Amiga keyboards to a bus interface with slot devices. Added a German A500 keyboard variant, keyboard fixes [Dirk Best]. Use virtual method for Amiga keyboard interface (amiga\keyboard\keyboard.h). Amiga keyboard updates: Fixed Shift-Alt combinations with natural keyboard. Fixed crash on keyboard inputs with four characters. Correct polarity of KB_DATA from Amiga to keyboard. Completely rewrote 68HC05CxA-based A1200 keyboard device, now working. Fixed KB_DATA mixing in A500 keyboard. Made A500 keyboard caps lock LED output name consistent with A1200. Added Alt- and Alt-Shift- characters to A500 US keyboard. Fixed natural keyboard modifiers with LLE keyboards. Put Amiga keyboard implementations in a namespace. Factor out matrix keys to a common module shared by A500/A1200. Make new German matrix based on US matrix with Alt-chars hooked up. Removed outdated comment. Added layouts for France/Belgium, Italy and Sweden/Finland. Removed some Alt- chars from Germany/Austria layout so natural keyboard produces canonical keystroke. Added borderline usable dead keys for natural keyboard (also applies to A1200 keyboard). To use dead keys, you need to type the acent character combined with a space, followed by the letter. For example if the host system is a Mac with U.S. or similar keyboard selected, you can type A in the emulated system in natural keyboard mode with Option-Shift-N Shift-A (with emulated keyboard, it's Alt-J Shift-A in most keyboard layouts). Refactor function keys, keypad, etc. into a common set of inputs. Added layouts for Spain, Denmark, Switzerland, Norway and UK. Switzerland has French/German config option, natural mode only works for French [Vas Crabb]. Moved audio related registers into Paula device. The device is now independent from the Amiga state class. Make Akiko independent from driver state [Dirk Best].
- 0.182              : Added machine\a1200kbd.cpp/h. Added A1200 keyboard skeleton device (needs MC68HC05Cx support) [Dirk Best].
- 0.181              : Cleanups and fixes to zorro\buddha.cpp, still not working due to various issues. It uses IDE command c5 (write multi) which our IDE emulation doesn't seem to handle correctly [Dirk Best]. Removed a couple of driver_data() calls [smf].
- 0.176              : Removed redundant call to space() (machine\amiga.cpp) [smf].
- 0.174              : Added video\amigaaga.h. Fixed Amiga related drivers build [Miodrag Milanovic].
- 0.171              : Fixed expansion port interrupts, DMAC WIP [Dirk Best].
- 0.167              : Attributing cd32 softwarelist for the CD32 driver (drivers\amiga.c) [Shideravan].
- 0.165              : Reduced tagmap lookups and read_safe usage. Minor cleanups (includes\amiga.h, machine\amiga.c and video\amiga.c) [Wilbert Pol].
- 0.164              : Fixed Amiga CRC in formats\flopimg.c (fixes ADF) [O. Galibert].
- 0.156              : Use memarray for chip RAM and regular array for custom registers (instead of shared_ptr for both) [Alex Jackson]. Added Workbench 1.3.3 [Guru]. Added Workbench 1.3.3 and AmigaOS 3.5 to workbench list [Dirk Best].
- 0.155              : Implement the Amiga 500 low-level keyboard controller using the newly dumped internal ROM. Removed existing keyboard HLE (machine\mos6526.c and amigakbd.c). Silence keyboard log spam and fixed internal ROM filename (machine\amigakbd.c). Fixed Amiga 600 IDE hard disk regression (machine\gayle.c). Added preliminary software lists for the Amiga 1000 and Amiga 3000, a general workbench list and an application list for testing. Images in those lists are either verified good or best available currently. Many images are still missing. Update Amiga 3000 Kickstart info. Added keyboard reset circuit. You can now reset the Amiga with the usual Ctrl-Amiga-Amiga key combination. Added the latest version of EmuTOS to the Amiga 1000 softlist and fix CIA interrupts getting lost in certain situations. This fixes the EmuTOS keyboard and potentially more. Also fix a possible issue with blitter delays. Softlist update, added Workbench 1.3.2 DE and some apps. Added save state support to the Amiga keyboard and some info about A1000 keyboards (machine\amigakbd.c). Display more info about Amiga images (imgtool\modules\amiga.c). Fixed crash with expansion slot devices (bus\amiga\zorro\zorro.c). Connect Zorro interrupts in the Amiga 500 drivers and reinitialize Zorro devices on reset to stop them from disappearing on soft reset. Fixed expansion slot device initialization (bus\amiga\zorro\zorro.c). Added an initial software list for some Amiga driver disks [Dirk Best].
- 0.154              : Removed machine\6526cia.c/h, amigacd.c/h and amigacrt.c/h. Added emu\bus\amiga\zorro\a2052.c/h, a2232.c/h, a590.c/h, action_replay.c/h, buddha.c/h, cards.c/h, zorro.c/h, machine\autoconfig.c/h, cr511b.c/h, dmac.c/h and gayle.c/h. Changed mame\audio\amiga.c to emu\sound\amiga.c. Added sound\amiga.h. Some more core cleanup (mess\drivers\amiga.c and machine\amigacd.c). Amiga modernization [Miodrag Milanovic]. Fixed usage of uninitialized members in amiga_sound_device [Oliver Stoeneberg]. Big Amiga cleanup and reorganizaton. CDTV temporarily broken. Lots of work still to do. All basic Amiga models are now supported to varying degrees. Created a GAYLE device, used by the A600 and A1200, and implement the internal IDE controller for both. Implement internal IDE controller for the Amiga 4000. Fixed RTC hookup in Amiga 3000 and 4000. Set RP5C01 RTC to actually return 24 hour mode, which fixes RTC detection for the Amiga. Fixed A3000 RTC tag. Kill the legacy CIA emulation and fix Agnus ID for A2000 and A500. CIA changes: Added missing virtual keyword to actually call the right TOD clock. Outputs depend on the input state (fixes A1000 overlay switch). Switching to serial output mode with one-shot activated causes a pulse on SP (correct? needed for keyboard handshake). Serial input is clocked by the CNT input, not the default clock. Mask offsets to 4 bits. Writing the Timer High register with one-shot activated immediately causes the timer to be latched and the timer started, regardless of timer start value. Support PAL/NTSC switch for machines equipped with an ECS Agnus chip or better. Fixed some Zorro slot bugs. Added the Commodore A2052 Zorro-II card as an example for a basic memory expansion. Added the Buddha IDE controller Zorro-II card (not working yet though). Added support for interlaced modes. Currently, this basically emulates a "flickerfixer" device because the core doesn't have native interlace support yet. Added support for the Commodore A2232 Serial Card. Fixed WD33C93 device tag. Disable screen mode logging. TODO: Only update screen mode if it actually changes. Changed constants to enum to avoid some issues with debug builds (includes\amiga.h). Added the Logica Diagnostic ROM 2.0 to various machines. Fixed A4000 kickstart selection. Added proper RS-232 port emulation. Rendering update, always render the full height to allow mixed mode screens. LACE and LOF bits should now work closer to the real system. Emulate DIWHIGH register for ECS machines, reduce some code duplication. Added very basic POT counter emulation, enough for Space Ranger (Arcadia, V 2.0) to detect the second button [Dirk Best]. Added writing to Amiga FDC: Formatting a floppy under A600 gets memory corruption then a guru meditation when reaching the point the system tries to write the directory structure. The fdc itself does not seem to be involved. I'd suspect the blitter, which afaik is used for the mfm expansion of the sector data [O. Galibert]. Added version 6.1 bootroms for the A590/A2091 and RAM controller PAL [Guru]. Fixed usage of uninitialized members in amiga_sound_device (sound\amiga.c) [Oliver Stoeneberg].
- 0.153              : Added a pair of functions to the driver class (mess\drivers\amiga.c) [Osso]. Removed DEVCB_DEVICE_HANDLER and DEVCB_DEVICE_LINE. CIA cleanup (machine\amigacd.c, amigafdc.c and amigacrt.c). Converted machine\amigakbd.c to DEVCB2. 6526cia DEVCB2 temporarily until mos6526 works with Amiga. Cleaned up CIA access a bit [Curt Coder]. Fix for Amiga regression, this made infinite loop (machine\6526cia.c) [Miodrag Milanovic].
- 0.150              : Modernized the Amiga sound device [Osso].
- 0.149              : Fix a3000/a3000n regression [Wilbert Pol].
- 0.148u5            : Added year and publisher info to most games in Amiga OCS, ECS and AGA softlist [Fabio Priuli].
- 0.148u3            : Start to modernize Amiga devices [David Haywood]. Changed HANDLER -> MEMBER where it was by mistake (machine\amiga.c) [Miodrag Milanovic].
- 0.148u2            : Fixed uninitialized variable in machine\amigafdc.c [Oliver Stoeneberg].
- 0.148u1            : Added info to Amiga ECS softlist [LoganB]. Amiga / CD32 tagmap cleanups. Thinking about it these must be hashlookups too, we were converting the param to a char* string and passing it to ioport(). Further reductions in Amiga [David Haywood]. Fixed compiler warnings (drivers\cd32.c and machine\amiga.c) [Oliver Stoeneberg]. Added a few more dumps from CAPS releases to amigaaga/amigaocs.xml softlist [Kaylee].
- 0.148              : Added ADKCONR hook-up to amigafdc.c, fixes at least sound in Ocean's Beach Volley. Log DSKDAT / DSKDATR (machine\amigafdc.c and amiga.c) [Angelo Salese]. Amiga SL improvements (amiga/amigaaga_flop.xml). huffle floppies around based on minimum chipset requirement. Amiga lists shuffle around, document Assassins PD collections from TOSEC ( + some other images I found which are missing from TOSEC..). Better documentation of the discs. Note about virus infected original discs (mastered with viruses) [David Haywood].
- 0.147u4            : Added preliminary artwork LEDs for Commodore Amiga (open to suggestions). Added LOF bit in Amiga emulation, used by Twintris to boot. Fixed cia_1 clocks, makes North & South and Fred happy. Added a note regarding disk swapping. Very preliminary RAW params usage for Amiga based machines in MESS, pending further info [Angelo Salese].
- 0.147u3            : Added A3000 system software. Added missing A3000 tape files to software list [Curt Coder]. Improved the inputs in CD32 (by adding a mirror of the first button where the regular Amiga reads it) this allows the majority of the booting CD32 games to actually be started. Expanded cd32.xml softlist entries to highlight more future test cases [David Haywood].
- 0.147u2            : Added very preliminary softlist for game disks [Fabio Priuli]. Renamed machines to ami500n/p & ami1000n/p and added placeholder lists for system disks. More amiga movement [David Haywood]. Unified floppy tags on other drivers as well. Changed to subdevice for amiga_fdc. Put back amiga to use well known a500, a600, a1200,... names [Miodrag Milanovic].
- 0.147              : Made Amiga keyboard a device, and removed legacy port changed support [Miodrag Milanovic].
- 0.146u5            : Kale levels up, Kale learns MCFG_LASERDISC_OVERLAY_CLIP (drivers\deco_ld.c and video\amiga.c) [Angelo Salese].
- 0.144u5            : MESS sync (machine\amigafdc.c) [Oliver Stoeneberg].
- 0.144              : Upgrade amigafdc. My addition of the Amiga FDC to the Amiga arcade hardware was frighteningly incomplete [O. Galibert].
- 0.143u5            : Modernize amigafdc (imagedev\floppy.c). Moved the full-track pll bit extraction in the amiga fdc (lib\formats\ami_dsk.c) [O. Galibert].
- 0.143u2            : Added lib\formats\ami_dsk.c/h. Amiga ADF disk support [Miodrag Milanovic].
- 0.142u3            : Added mame\drivers\amiga.c, machine\amigacd.c/h, amigacrt.c/h, amigafdc.c/h and amigakbd.c/h. More porting [Angelo Salese].
- 0.142              : Fixed address_space::unmap_write to pass ROW_WRITE instead of ROW_READWRITE (emu\memory.h). Fixes Amiga breakage [Aaron Giles].
- 0.141u3            : Amiga video: Removed additional 2 cycles, in move operation, for non-Agnus registers. Set to #0 the start cycle in the copper operation. Simplified code. Fixed a wrong value [Roberto Zandona].
- 0.139u4            : Converted amiga drivers to use driver_devices. Merged common code between legacy Amiga and AGA video systems [Atari Ace]. Amiga video: Improved offset in copper waiting. Revert to previous code; the change breaks ar_fast [Roberto Zandona].
- 0.132u4            : Better fix for Amiga AGA ddf_stop_pixel, to avoid breaking Amiga 1200 startup screen [Mariusz Wojcieszek].
- 0.132u3            : Fixed AGA display window start and stop (fixes startup screen and lsrquiz & lsrquiz2 missing graphics) [Mariusz Wojcieszek].
- 0.132u2            : Amiga AGA update. Fixed sprite data fetching and sprite colors [Mariusz Wojcieszek]. Cubo CD32 update. Fixed inputs. Found why inputs are not read (protection ?), hacked to work now [Stephane Humbert].
- 0.132              : Amiga Custom sound: As part of the conversion of custom sound devices, the sound chip for Amiga-hardware games is now named "Amiga Custom" on the Game Information display. The Amiga sound chip was called Paula, so it would be nicer to show that instead, as in the attached patch. You could also use "MOS 8364" but that's not as catchy [Justin Kerk].
- 0.131u4            : Changed description to 'Amiga Paula'.
- 0.131u3            : WIP driver for Cubo CD32: AGA palette. AGA bitplane data fetching. Support for up to 8 standard bitplanes. HAM8 mode [Mariusz Wojcieszek].
- 0.128u7            : Added running_machine callbacks for the Amiga code [Nathan Woods].
- 0.128u6            : Fixed arcadia games (drivers\arcadia.c and machine\amiga.c) [Aaron Giles].
- 0.123u6            : Added return value to video_screen_update_partial() indicating whether or not the VIDEO_UPDATE was called as a result (emu\video.c). Modified machine\amiga.c to use this information so that we guarantee a call to amiga_render_scanline() regardless of the video state. Fixes 01521: ar_sdwr: Game hangs on title screen [Aaron Giles].
- 0.123u4            : Converted Amiga based games to partial updating and proper scanline based timers [Zsolt Vasvari].
- 0.122u4            : Updated emu\drivers\xtal.h and mame\includes\amiga.h [Dirk Best].
-  4th December  2006: Aaron Giles - It should be pretty obvious with the update to the Dragon's Lair driver in 0.110u4 that something is brewing on the laserdisc front. There has been a lot of discussion over the years about how to make it happen, what video formats to use, etc, etc. In the end, it seemed that nobody was ever happy enough with the proposed ideas to actually take them and run. But with the discs and equipment getting older and older, and my (relatively) recent success in reading an NFL Football CED (http://www.cedmagic.com/featured/nfl.html) (thanks to Tim's (http://arcadecollecting.com/) help), I figured it was finally time to just pick a direction and move forward. One of the big stumbling blocks is that pretty much all existing video compression algorithms are heavily patented. Which means that for freely developed and freely available software, there isn't really a good way of utilizing standards such as MPEG. Plus, MPEG hardly qualifies as 'archival' quality. For this reason, MAME will be going its own way, but it won't be straying too far from the usual paths. The container format for the data will be CHD (which originally stood for Compressed Hard Drive, but has since been redubbed as Compressed Hunks of Data). Each frame, including audio and video data, will be a fixed length (some frames will have one fewer audio sample due to rounding, but this is easy to compute). The video frame rate, height, width, audio sample rate, and number of channels will be encoded in the CHD metadata. Each frame is independently compressed. Audio data is stored as multiple 16-bit channels at an arbitrary sample rate (we will be shooting for 44.1kHz stereo during sampling). The audio data is compressed losslessly using Huffman-compressed deltas. This gives a nice compromise between storing the data raw and doing something more complex and aggressive like FLAC. Audio data is just a drop in the bucket anyway from a data rate perspective, so why skimp? This compression may also be used in the future for CHD-CD's with audio tracks, and for systems that read/playback tape-based data. Video data compression is still being fine-tuned, and is waiting some good quality source data to experiment with, both animated and filmed. At a minimum, a lossless compression based on Huffman-compressed per-channel (Y,Cb,Cr) deltas will be available. This is essentially what HuffYUV does. I have also written a lossy DCT-based compressor that is tuned for archival purposes rather than bit rate limiting. That is, with an MPEG compressor you specify your data rate, and the compressor quantizes the DCT coefficients to fit the data rate. With our video compression, you specify a maximum error and a maximum average error for each channel, and the compressor tweaks the quantization on each 8x8 block indepedently to ensure that those criteria are met. The source material will be sampled at DVD resolutions (720x486 for NTSC video) in 'uncompressed' form - which is actually slightly compressed in that it is 4:2:2 subsampled, so each Cr and Cb sample covers two pixels horizontally. This is oversampling for laserdisc video, but it's better to have more data than not enough data. This effectively gives you 16 bits per pixel uncompressed, or 720 x 486 x 2 = 699,840 bytes per frame. Add in a frames' worth of audio data (assuming 29.97fps) at 44100Hz gives an extra 5886 bytes, for a total per-frame average of 705,726 bytes (5.4 MBits) per frame. Once you start multiplying that out, it's a lot of data: 20.6 MB/second, 1.18 GB/minute, or 70.9 GB/hour. Most video game laserdiscs are CAV, which maxes out at 54000 frames, or just over 30 minutes. Lossless tends to give you between 2:1 and 3:1 compression. Going up to lossy with medium deltas (up to 4/256 per component) gets you closer to 4:1 and 5:1 compression with almost no visible difference. Increasing the max deltas beyond that helps further with compression, but it definitely starts to become visible. Not everything is nailed down yet, and it will probably take a couple of months to materialize, but those are the basics. The first game I'm looking at is obviously Dragon's Lair, but coincidentally, I just received in the mail a driver for the American Laser Games series (http://www.dragons-lair-project.com/tech/pages/alg.asp) of shooters as well, which were all run on an Amiga 500 with a genlock. Fortunately, the Amiga emulation is pretty decent these days, so things are progressing well there. Now that the basic system is up and running, I'm hoping others can help get the rest of the laser games moving forward. In 0.110u4 I included support for a couple of common laserdisc players. Even though you can't see any video yet, you can at least watch their operation to see if things are working properly. In 0.110u5 I'll have support for the Sony LDP-1450 (http://www.dragons-lair-project.com/tech/ldguide/sony.asp) laserdisc player and the ability to display dummy frames (each frame is solid color and gets a unique Cb/Cr value) so that you get a little better sense of the operation. And hopefully in the next month or so, I'll have the first video running at last...
- 25th April     2006: Aaron Giles - Turns out, the Amiga has a pretty basic 4-channel DMA driven 8-bit sample playing set of DACs, and it only took a couple of days to get the sound going. But by this time, I was intrigued. I had managed to track down a used copy of the Amiga Hardware Reference Manual and as I read more about the Copper and the Blitter and the custom registers, it sounded like more and more of an interesting emulation challenge. Most of the Arcadia games already worked pretty well, but there were still glitches in a few of them, and Up Scope and Moonquake were two other Amiga-based games that weren't yet in MAME. With that incentive, I started delving into the existing implementation of the system. Although the Amiga implementation in MAME hasn't been around that long officially, I knew that Ernesto Corvi had worked on it on and off for a few years even before it made its debut. At the time, the original driver was written to be fairly low-impact, meaning it was reasonably optimized and made fairly poor documentation of how the system worked in exchange for speed (though by comparison to the UAE code, it was clear as a bell). I set out to change that. The first thing that needed an overhaul was the video renderer. I noticed that Moonquake ran in extra half-bright mode, which wasn't supported, so I first tried to fix that. Along the way, I discovered that a lot of assumptions were being made in the code which would ensure that features such as dual playfield scolling and collision detection would not work without a substantial rewrite. A substantal rewrite ensued. Of course, rendering on the Amiga is driven to a large extent by the Copper chip, and as I started to look into that, I realized that Magic Johnson's Fast Break (a)bused the Copper to jam multiple sprites and scrolling displays along the top and bottom of the screen. Which meant I needed to overhaul how sprite drawing worked in order to support these 'manually drawn' sprites, and I also needed to tweak with the timing in the Copper code so that it changed the sprites at just the right instant within a given scanline. I'm still not convinced I have the sprite rendering and Copper timing just right, but it's good enough for the games we've got. Then I wanted to understand this Autoconfig thing. There were some references to Autoconfig in the Arcadia driver, which is how expansion cards were plug & played on the Amiga. Taking the existing implementation at face value, I abstracted out the Autoconfig system so that MESS could eventually use it to plug in peripheral cards, and then I reconnected the expansion card in the Arcadia so that it worked via the Autoconfig mechanism. Of course, after doing that work, I am now convinced that it is wrong. First off, it doesn't make sense that a custom piece of hardware like the Arcadia would bother to implement anything as elaborate as the Autoconfig protocol. Second, the first word of the Arcadia BIOS ROM is a standard Amiga 'ROMtag', and if you map the BIOS up into the Fxxxxx space it boots fine without any Autoconfig mumbo-jumbo. And third, the docs say that the Arcadia systems ran off the Kickstart 1.2 boot ROM. But when you boot an Autoconfig device with the Kickstart 1.2 boot ROM, you run into a bug in the 1.2 code that causes a crash on startup if the device has a boot ROM (you can tell it's a bug because it is very clearly fixed in the 1.3 version of the ROM). I suppose the documentation about the 1.2 boot ROM could be wrong. After all, up until now the Arcadia systems all ran fine with the Kickstart 1.3 boot ROM, right? Well, actually, no. I now have proof that the original system couldn't have run off the 1.3 boot ROM. Sidewinder, a vertical shooter, always had particularly odd problems. The background bitmap would wrap strangely, and when you shot, you would hit random targets in the middle of nowhere. I tracked this down yesterday to code that would attempt to blit data from one bitmap to another, but which would somtimes specify the destination to be a location outside of RAM somewhere. Until recently, there had been a hack in the blitter that would throw away accesses outside of chip RAM, but I knew that was wrong because the documentation is very clear that outside accesses would wrap around and clobber important bits of program code. Looking into this problem more closely, it turns out that the blitting code was doing a bunch of careful 16-bit calculations in the low half of the 68000's D1 register, and then at the end, adding the full 32-bit D1 value to the address. Which means it was assuming that the upper half of the register was 0. Tracing backwards, it was clear that this code was called as part of the VBLANK interrupt routine, and the code which put the non-zero data in the upper half of D1 was the part of the Amiga Kickstart ROM which actually handled the first part of the interrupt. Comparing that same section of code between the 1.2 and 1.3 Kickstart ROMs revealed very different register usage patterns, and sure enough, booting the system under the 1.2 Kickstart ROM produces no invalid blitter accesses and yes, all the graphics problems are fixed. Of course, prior to discovering the Kickstart problem, I thought for sure it was a bug in the blitter. So yes, I ended up rewriting the blitter routines as well, attempting to document them moreso than optimize them. Which in the end was a good thing as I managed to somehow fix the blitting problems in SportTime Bowling. By this time, I'd rewritten 80% of the emulation, so finishing it off by rewriting the 8520 CIA I/O routines and cleaning up the rest of the driver goes without saying. If I had the time, I'd probably play around with the Amiga emulation in MESS, now that I've made a number of fixes and improvements to the system, but there are more pressing matters, as always. Oh, and what about Up Scope and Moonquake? More later.
- 0.105u1            : Added sndhrdw\amiga.c. Aaron Giles rewrote a large chunk of the Amiga emulation to support sound and additional video modes/effects including extra half-bright mode, manual sprites and mid-scanline changes. This is still a work in progress. Aaron also modified Arcadia driver which using empty RAM regions for RAM or had extraneous memory regions. Added Custom (3579545 Hz) stereo sound and changed visible area to 671x216 and VSync to 59.997002 Hz.
- 29th June      1999: Ernesto Corvi sent a preliminary Arcadia system driver, which is basically just an Amiga 500 modified for arcade usage.
- DRIVERS: alg.cpp, arsystems.cpp, cubo.cpp, mquake.cpp and upscope.cpp
- SOURCE: amiga.cpp



I16.8   Mega Drive

- 0.280              : Removed lc89510.cpp/h. Put commands under logmacro. Deleted valueless lc89510 device stub. Implemented Sub CPU Program RAM write boundary (shared\megacdcd.cpp). Fixed (MESS) pitfall/pitfallu crash at startup [Angelo Salese].
- 0.255              : Fixed no disc regression, make sure Mega CD don't throw a fatalerror on audio CD player, first pass at logmacro.h conversion (shared\megacdcd.cpp) [Angelo Salese].
- 0.251              : Added Mega Drive I/O port controller device (sega\mdioport.cpp). Adapted all Mega Drive hardware drivers to work with the new I/O port device and moved based Mega Drive 68k peripherals to a common address map function. Further broke up base Mega Drive class. Created a light-weight base class with just the core functionality, used for "Genie" hardware (Puckman Pockimon). Moved built-in controller emulation to a derived class so it isn't lurking underneath the consoles with pluggable controllers. Moved the Sun Mixing Mega Drive bootlegs to their own source file - they're substantially different, not using the I/O blocks for input. Moved YM sound out of "core" Mega Drive state and made more devices required in "base" Mega Drive state. Made (MESS) Pico/Copera derive from "core" Mega Drive state so they aren't carrying unnecessary baggage (all it uses is the CPU and VDP). Turned controller ports into slots - no need to simulate controllers in the cartridge device (bus\megadrive\jcart.cpp). Simplified wired 6-button controller to use a single input port per pad (sega\megadriv.cpp) [Vas Crabb].
- 0.246              : Changed driver to sega\megadriv.cpp/h.
- 0.235              : Added MEGA-CD euro v2.11 BIOS [TwistedTom].
- 0.234              : Read/write handlers for PRGRAM access from Main side was using u16 for the calculated offset, causing an overflow and constantly pointing to bank 0. Changed to u32, observed expected results (machine\megacd.cpp) [Damian Rogers].
- 0.230              : Added EEPROM cartridge variant with Xicor X24C01 (bus\megadrive\eeprom.cpp). Made all MD cartridge types able to be locked on (bus\megadrive\sk.cpp) [Ryan Holtz].
- 0.177              : Fixed selecting machine / game via softlist though internal menu results exception crash [Osso].
- 0.162              : Added missing save states to machine\megadriv.c, fixes (MESS) MegaDrive gauntlt4 save state problem discovered by Tafoid's regression test [Osso].
- 0.154              : Implement TAS callback (currently only used by megadrive) in a more sensible and versatile way [Alex Jackson].
- 0.153              : (MESS) Moved Megadrive add-ons to appropriate place + cleaned up classes and includes. Renamed Genesis VDP to Sega 315-5313 and moved it to emu\video\ [Fabio Priuli].
- 0.151              : Fixed VDP scanline settings in machine\megadriv.c (MT05293) [Oliver Stoeneberg].
- 0.149              : (MESS) Added some more pirate Megadrive games recently dumped, including original protected versions of some already emulated games. Thanks to Cah4e3. Azathoth, magicrip and the Russian crew for the dumps and to EkeEke for the info on Tekken Special (the only one using a new protection scheme) [Fabio Priuli].
- 0.148u5            : (MESS) Added Megadrive save registration of a bunch of scanline-related and input-related variables [Fabio Priuli].
- 0.148u3            : (MESS) Moved Z80 vars to the driver state. Removed Megadrive NVRAM handler. MESS was not using this since more than one year, and it was causing MT03873. If any bootleg megadrive board needs this, please let me know so that I can re-add it to the correct driver. Reducing Megadrive input tag lookups [Fabio Priuli]. Some Megadrive modernization [Miodrag Milanovic].
- 0.148u1            : (MESS) Many Megadrive updates to cart handling. Updated carts to be slot devices. Simplified loading and bankswitch mechanism. Added support for real Sonic & Knuckles lock-on emulation (you can combine it freely with other carts, through the -cart2 slot which gets added automatically). Removed need for "pcb_type" feature from XML softlist, since the new "slot" feature is enough. Moved SVP emulation to src\mess\ in view of conversion to a slot device as well. More Megadrive updates: Implemented correct ROM mirroring, based on research by Eke & others. Emulated the protection in Ya Se Chuan Shuo, promoting it to work state. Fixed cart type in Blockbuster World Video Game Championship II (works for the first time in MESS). Fixed cart type in HardBall III, Barver Battle Saga and Chao Ji Da Fu Weng. Added support for unusual SRAM location in HardBall 95. Fixed a few regressions introduced in the previous commit. Fixed wrong driver class being used in 32x and SegaCD [Fabio Priuli].
- 0.147u1            : Fix for crashes in mess segacd clones (machine\megadriv.c) [Miodrag Milanovic].
- 0.147              : Made the genvdp a derived class of the newer SMS VDP because the Genesis VDP has an SMS compatibility mode where it basically operates as an SMS VDP (with a few changes / limitations). Note: Not hooked this up to megatech yet to replace the old smsvdp code on the game screen when running sms games, but once I figure out how I'm actually going to do that, that's the plan [David Haywood].
- 0.146u5            : Moved the calls on cpu lines from hardcoded in the vdp to callbacks the drivers can provide. This sllows us to connect the correct line for vblank in segac2 without the previous hack. Also looking to untangle the screen timing a bit. The 'new' renderer now only outputs a scanline and must be serviced by a partial update, i've turned it on for segac2 for now, with my initial goal being to untangle the segac2 palette handling from the vdp, it's external circuitry, mixing the raw digital output of the vdp rather than after cram data has been applied [David Haywood].
- 0.146              : Initial work in preparation for some modernization on the whole megadriv.c file, starting with better splitting of actual drivers (megadriv.c, megacd.c, mega32x.c, megasvp.c and megavdp.c) [David Haywood].
- 0.144u1            : Added clearing of generic NVRAM handler and removed megadriv ifdefs [Miodrag Milanovic].
- NOTES: Sega Mega Drive/Genesis
- DRIVERS: hshavoc.cpp, megadrvb.cpp, megaplay.cpp, megatech.cpp, puckpkmn.cpp and segac2.cpp
- SOURCE: sega\megadriv.cpp


I16.9   Sega Master System

- 0.251              : Reworked Sega Master System controller bus (bus\sms_ctrl\*). Rationalised interface, got rid of TH from the "pulled" lines, and extended to support output on all data lines. Renamed to be less specific as the same interface is shared by multiple consoles. Removed a lot of unnecessary indirection through I/O ports and multiple levels of inversion in peripheral emulation that was obfuscating the code. Made Rapid Fire Unit switches toggles so they can be assigned to controller buttons and switched on/off easily during gameplay. You can still see/change the current state in the Toggle Inputs menu if you don't want to assign buttons. Implemented idle timeout in Furrtek 4-player Master System adapter. Improved crosshair tracking in Graphic Board, added ability to raise/lower pen, and greatly cleaned up code. Fixed paddle controller when used with export consoles. Added 3-button and 6-button Mega Drive control devices. Added support for Sega mouse and four-player adaptor [Vas Crabb].
- DRIVERS: shtzone.cpp + (MESS)
- SOURCE: sega\sms.cpp



==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


OTHER

  1.    Transistors
  1.1   TTL (Transistor Transistor Logic) IC's
  1.2   C-MOS (LOC - MOS)
  1.3   Others
  1.4   Logic Gates

  2.    Timer & Clock ICs
  2.1   NE555
  2.2   NE556
  2.3   NE558
  2.4   NE566
  2.5   MC6840
  2.6   MB8873
  2.7   8253
  2.8   8254
  2.9   NEC D71054
  2.A   MC146818
  2.B   uPD1990AC
  2.C   PCF8593

  3.    RTC (Real Time Clock)
  3.1   DALLAS
  3.11  DS1221
  3.12  DS1287
  3.13  DS1302
  3.14  DS1307
  3.15  DS1386
  3.16  DS1397
  3.17  DS1643
  3.18  DS1994
  3.19  DS2401
  3.1A  DS2404
  3.1B  DS12885
  3.1C  DS17x85
  3.2   Epson
  3.21  3520
  3.22  4543
  3.23  4553
  3.24  9701
  3.25  62421
  3.26  62423
  3.27  65271
  3.28  72421
  3.29  72423
  3.3   Motorola
  3.31  MPC948
  3.32  MPC950
  3.33  MCCS1850
  3.4   National Semiconductor
  3.41  MM58167
  3.42  MM58174
  3.43  MM58274
  3.5   NEC
  3.51  uPD4991
  3.52  uPD4992
  3.6   OKI
  3.61  MSM6242
  3.62  MSM5832
  3.63  MSM58321
  3.7   Other
  3.71  8521
  3.72  V3021
  3.73  E05-16
  3.74  PCF8583
  3.8   Ricoh
  3.81  RP5C01
  3.82  RP5C15
  3.83  LH5045

  4.    Key chip

  5.    Clock
  5.1   Crystal
  5.11  Crystal Resonator
  5.2   Cypress
  5.21  CY2291
  5.22  CY2292
  5.5   ICS
  5.51  9120
  5.52  9170
  5.53  9159
  5.6   Others
  5.61  8224
  5.62  8284
  5.63  2061ASC
  5.64  MX8330
  5.65  MC88915
  5.66  06B49P

  6.    Reset IC
  6.1   Dallas
  6.11  DS1232
  6.12  DS1233
  6.2   Mitsubishi, NEC
  6.21  PST518
  6.22  PST532
  6.23  PST573
  6.24  PST575
  6.25  PST592
  6.26  M51953
  6.3   Maxim
  6.31  MAX690
  6.32  MAX691
  6.33  MAX693
  6.4   Mitsumi
  6.41  MM1026
  6.42  MM1035
  6.5   Texas Instruments
  6.51  TL7700
  6.52  TL7705
  6.6   Other
  6.61  ADM690
  6.62  HA16103

  7.    Voltage Regulator
  7.1   7660
  7.2   7808
  7.3   7812
  7.4   PQ30RV21
  7.5   3423
  7.6   LT1084

  8.    Switch
  8.1   S301
  8.2   S551

  9.    Diodes
  9.1   4148
  9.2   Laser Disc diode

 10.    Capacitor
 11.    Debug Mode
 12.    BIOS
 13.    Instruction Cards

..................................................................................................................................................................................................................................



O1.    Transistors


       C1815
       - NOTES: The C1815 is a transistor. This transistor is used for driving RGB in Special Criminal Investigation for example.
       - GAMES: Head On (Irem 1980), Special Criminal Investigation (Taito 1989)

       D633
       - PCB: The D633 is a Si NPN POWER transistor used in 68k reset circuit (TIP122 compatible) (Sci)

       IR2C24
       - PCB: Sharp IR2C24AN  6-Unit 320mA Transistor Array (Speedrcr, Namco FL-System, NamcoNA2)

       M53357
       - PCB: Mitsubishi M53357P (=LS157 = Quad 2 to 1 line data selectors/multiplexers) in (40love)

       M54532
       - NOTES: Mitsubishi M54532P / M54532FP, DIP16 = 4-unit 1.5A darlington transistor array with clamp diode
       - PCB: M54532 (Rvschool, Glpracr, Sfex2)

       MC14584
       - NOTES: This chip is used for the trackball trigger / reading / converting values. Joystick appears to be used also for selecting stance, club and direction.
       - PCB: Motorola MC14584b  HEX Schmitt Trigger (Eaglshot, SSV)

       PS2501
       - PCB: NEC PS2501 High Isolation Voltage Single Transistor Type Multi Photocoupler, DIP16 (CPS3)

       SLA4060
       - PCB: Sanken Electric Co. NPN Darlington Transistor Array, SIP12 (NamcoSystem11/12)

       TD62003
       - NOTES: TD62003 PNP 50V 0.5A Quad Darlington Switch for driving coin meters and lamps/LEDs.
       - PCB: Toshiba TD62003AP (RongRong), TD62oo3AP (Topshoot), TD62003, DIP16 (Crysking, Sci), TD62003P (40love)

       TD62064
       - NOTES: TD62064 NPN 50V 1.5A Quad Darlington Switch for driving coin meters.
       - PCB: TD62064 (CPS3, ZN1/2, Sci) Evilston, TD62064AP  DIP16 (Radikal Bikers)

       TIP120
       - PCB: TIP120 (UpScope)

       TIP122
       - NOTES: General-Purpose NPN Darlington Transistor
       - PCB: TIP122  TO-220 (Ghosthunt, Tutstomb)

       ULN2003
       - NOTES: ULN2003 is a High Voltage High Current Darlington Transistor Array comprising 7 NPN Darlinton pairs.
       - PCB: Toshiba ULKN2003, DIP16 (Lastfght), ULN2003A (CatherineWheel), ULN2003 for coin counter output (Chboxing, Chwrestl, Sauro)

       ULN2064
       - PCB: ST ULN2064B, DIP16 (A51site4, MK3, Kinst)

       ULN2803
       - NOTES: ULN2803 is a Octal High Voltage, High Current Darlington Transistor Arrays with common emitter
       - PCB: ST ULN2803A (Lethalj), Motorola ULN2803  DIP18 (Ghosthunt, Tutstomb)

       ULN2805
       - PCB: Usg182



O1.1   TTL (Transistor Transistor Logic) ICs


       Manufacturer:

       Fairchild Semiconductor          74LCXxxx
       ???                              74LVTxxx
       Philips                          74HCxxx
       National Semiconductor         DM74LSxxx
       Texas Instruments              SN74LCxxx, 1N74SxxxN



       TTL - ICs/Types

       7400 Quad 2-input NAND gates. Pins 14, 74LS00, 74HC00 (DIP14), 74HC00P, 74F00 (SOIC14), F7400PC, 7400-PC
       7401 Quad 2-input open-collector NAND gates. Pins 14
       7402 Quad 2-input NOR gates. Pins 14, 74LS02, DM7402N, F7402PC
       7403 Quad 2-input open-collector NAND gates. Pins 14
       7404 Hex inverters. Pins 14, SN74LS04N, SN7404N, 74LS04, 74HC04, 74F04PC, DM7404N, 7404-PC, HC04 (NeoGeo)
       7405 6x Hex open-collector inverters. Pins 14, 74LS05, DM7405
       7406 6x Hex open-collector high-voltage inverters. Maximum output voltage is 30V. Pins 14, DM7406N
       7407 6x Hex open-collector high-voltage buffers. Maximum output voltage is 30V. Pins 14, 74F07 (SOIC14)
       7408 Quad 2-input AND gates. Pins 14, 7408N, 74LS08, 74ALS08, DM7408N, F7408PC, F7408N
       7409 Quad 2-input open-collector AND gates. Pins 14
       7410 Triple 3-input NAND gates. Pins 14, 74LS10
       7411 Triple 3-input AND gates. Pins 14, SN74LS11N
       7412 Triple 3-input open-collector NAND gates. Pins 14
       7413 Dual 4-input NAND gates with schmitt-trigger inputs. Pins 14
       7414 Hex inverters with schmitt-trigger inputs. Pins 14, 74LS14N, 74HC14, 74HCT14, LS14 (SOIC14), 78AT3TK HC14 (SOIC14)
       7415 Triple 3-input open-collector AND gates. Pins 14
       7416 Hex open-collector high-voltage inverters. Maximum output voltage is 15V. Pins 14, F7416PC
       7417 Hex open-collector high-voltage buffers. Maximum output voltage is 15V. Pins 14
       7418 Dual 4-input NAND gates with schmitt-trigger inputs. Pins 14
       7419 Hex inverters with schmitt-trigger line-receiver inputs. Pins 14
       7420 Dual 4-input NAND gates. Pins 14, 74LS20, 7420PC
       7421 Dual 4-input AND gates. Pins 14
       7422 Dual 4-input open-collector NAND gates. Pins 14
       7423 Dual 4-input Expandable NOR w/strobe. Pins 16, 74LS23
       7424 Quad 2-input NAND gates with schmitt-trigger line-receiver inputs. Pins 14
       7425 Dual 4-input NOR gates with enable input. Pins 14
       7426 Quad 2-input open-collector high-voltage NAND gates. Maximum output voltage is 15V. Pins 14
       7427 Triple 3-input NOR gates. Pins 14
       7428 Quad 2-input NOR gates with buffered outputs. Pins 14
       7430 8-input NAND gate. Pins 14
       7431 Hex delay elements. Pins 16
       7432 Quad 2-input OR gates. Pins 14, SN7432N, 74LS32, 74HC32, 74HCT32 (SOIC14), HC32 (NeoGeo)
       7433 Quad 2-input open-collector NOR gates. Pins 14
       7434 Hex Buffer. Pins 14
       7435 Hex Buffer open-collector. Pins 14
       7437 Quad 2-input NAND gates with buffered output. Pins 14, 74LS37
       7438 Quad 2-input open-collector NAND gates with buffered output. Pins 14
       7439 Quad 2-input positive NAND buffers with open-collector outputs. Pins 14
       7440 Dual 4-input NAND gates with buffered output. Pins 14
       7442 1-of-10 inverting decoder/demultiplexer. Pins 16, SN7442AN, F7442APC, DM7442N
       7443 4-line to 10-line decoders (excess 3 to decimal). Pins 16
       7444 4-line to 10-line decoders (3-gray to decimal). Pins 16
       7445 BCD to decimal decoder/driver. Pins 16, SN7445N74
       7446 Open-collector BCD to 7-segment decoder/common-anode LED driver with ripple blank input and output. Pins 16
       7447 Open-collector BCD to 7-segment decoder/common-anode LED driver with ripple blank input and output. Pins 16, 7447A (equivalent to an LS47/48)
       7448 BCD to 7-segment decoders/drivers. Pins 16, 74LS48
       7449 BCD to 7-segment decoders/drivers (open-collector outputs). Pins 14
       7450 Dual 2-wide 2-input AND-OR-INVERT gates (one gate expandable). Pins 14
       7451 2-wide 2-input and 2-wide 3-input AND-NOR gates. Pins 14, DM74LS51N
       7452 Expandable 4-wide AND-OR gates. Pins 14
       7453 Expandable 4-wide AND-OR-INVERT gates. Pins 14
       7454 4-wide 2/3-input AND-NOR gate. Pins 14
       7455 2-wide 4-input AND-NOR gate. Pins 14
       7456 50-to-1 Frequency Divider. Pins 8
       7457 60-to-1 Frequency Divider. Pins 8
       7458 2-wide 2-input and 2-wide 3-input AND-OR gates. Pins 14
       7460 Dual 4-input expanders. Pins 14
       7461 Triple 3-input expanders. Pins 14
       7462 4-wide AND-OR expanders. Pins 14
       7463 Hex current-sensing interface gates. Pins 14
       7464 4-2-3-2 input AND-OR-INVERT gates. Pins 14
       7465 4-2-3-2 input AND-OR-INVERT gates. Pins 14
       7468 Dual 4-bit decade counter. Pins 16
       7469 Dual 4-bit binary counter. Pins 14
       7470 AND-Gated J-K positive edge triggered flip-flops. Pins 14
       7471 AND-OR-Gated J-K master-slave flip-flops with preset. Pins 14
       7472 J-K flip-flop with triple ANDed J an K inputs, set and reset. Pins 14
       7473 Dual positive-edge-triggered J-K flip-flop with reset. Pins 14
       7474 Dual D flip-flop with set and reset. Pins 14, 74LS74, 74S74N, 74HC74, 74HC74B1, DM74LS74N, DM7474N, 74F74
       7475 Dual 2-bit transparent latches with complementary outputs. Pins 16
       7476 Dual J-K flip-flops with set and reset. Pins 16
       7477 4-bit bistable latches. Pins 14
       7478 Dual negative-edge-triggered J-K flip-flops with common clock, set and common reset. Pins 14
       7480 1-bit binary full adder. Pins 14
       7481 16-bit Random-Access-Memories. Pins 14
       7482 2-bit binary full adder. Pins 14
       7483 4-bit binary full adder with fast carry. Pins 16, DM74LS83AN, SM74LS83AN
       7484 16-bit Random-Access-Memories. Pins 16
       7485 4-bit noninverting magnitude comparator with cascade inputs. Pins 16
       7486 Quad 2-input XOR gates. Pins 14, 7486N, 74LS86, F7486PC, LS86A (SOIC14)
       7487 4-bit true/complement, zero/one elements. Pins 14
       7488 256-bit read-only-memories. Pins 16
       7489 64-bit read/write memories. Pins 16
       7490 4-bit asynchronous decade counter with /2 and /5 sections, set(9) and reset. Pins 14
       7491 8-bit serial-in serial-out shift register with two AND gated serial inputs and complementary outputs. Pins 14
       7492 4-bit asynchronous divide-by-twelve counter with /2 and /6 sections and reset. Pins 14
       7493 4-bit asynchronous binary counter with /2 and /8 sections and reset. Pins 14
       7494 4-bit shift registers. Pins 16
       7495 4-bit universal shift register with separate shift and parallel-load clocks. Pins 14
       7496 5-bit shift register with asynchronous reset and asynchronous preset inputs. Pins 16
       7497 6-bit synchronous binary rate multiplier. Pins 16
       7498 4-bit data selector/storage registers. Pins 16
       7499 4-bit bidirectional universal shift registers. Pins 16
       74100 8-bit bistable latches. Pins 24
       74101 AND-OR-Gated J-K negative edge triggered flip-flops with preset. Pins 14
       74102 AND-Gated J-K negative edge triggered flip-flops with preset and clear. Pins 14
       74103 Dual J-K negative edge triggered flip-flops with clear. Pins 14
       74106 Dual J-K negative edge triggered flip-flops with preset and clear. Pins 16
       74107 Dual J-K flip-flops with clear. Pins 14, 74LS107, 74107N
       74108 Dual J-K negative edge triggered flip-flops with preset, common clear and common clock. Pins 14
       74109 Dual J-/K positive edge triggered flip-flops with preset and clear. Pins 14
       74110 AND-Gated J-K master-slave flip-flops with data lockout. Pins 14
       74111 Dual J-K master-slave flip-flops with data lockout. Pins 16
       74112 Dual J-K negative edge triggered flip-flops with preset and clear. Pins 16
       74113 Dual J-K negative edge triggered flip-flops with preset. Pins 14
       74114 Dual J-K negative edge triggered flip-flops with preset, common-clear and common-clock. Pins 14
       74116 Dual 4-bit latches. Pins 24
       74120 Dual pulse synchronizers/drivers. Pins 16
       74121 Monostable multivibrators. Pins 14
       74122 Retriggerable monostable multivibrators with clear. Pins 14
       74123 Dual retriggerable monostable multivibrators with positive and negative inputs and direct clear. Pins 16
       74124 Dual voltage-controlled oscillators with enable inputs. Pins 16
       74125 Quad bus buffer gates with three-state outputs. Pins 14, TI SN74LS125AN
       74126 Quad bus buffer gates with three-state outputs. Pins 14
       74128 Line Drivers. Pins 14
       74131 3 to 8 line decoder/demultiplexer with address registers. Pins 16
       74132 Quad 2-Input positive NAND schmitt triggers. Pins 14, 74HC132
       74133 13-Input positive NAND. Pins 16
       74134 12-Input positive NAND gates with three-state outputs. Pins 16
       74135 Quad exclusive OR/NOR gates. Pins 16
       74136 Quad exclusive OR gates with open-collector outputs. Pins 14, DM74LS136N
       74137 3 to 8 line decoders/demultiplexers with address latches. Pins 16
       74138 3 to 8 line decoders/demultiplexers. Pins 16, 74LS138, 74HC138, 74F138, F138, DM74LS138N
       74139 Dual 2 to 4 line decoders/demultiplexers. Pins 16, 74LS139, 74S139N, 74HC139, 74F139
       74140 Dual 4-input positive NAND 50-ohm line drivers. Pins 14
       74141 BCD to decimal decoder/driver. Pins 16
       74142 Counter/latch/decoder/driver. Pins 16
       74143 Counters/latchs/decoders/drivers. Pins 24
       74144 Counters/latchs/decoders/drivers. Pins 24
       74145 BCD to decimal decoders/drivers for lamps, relays, MOS. Pins 16
       74147 10-Line decimal to 4-line BCD priority encoders. Pins 16
       74148 8 to 3 line octal priority encoders. Pins 16, 74LS148
       74150 1 of 16 data selectors/multiplexers. Pins 24
       74151 1 of 8 data selectors/multiplexers. Pins 16
       74152 1 of 8 data selectors/multiplexers. Pins 14
       74153 Dual 4-line to 1-line data selectors/multiplexers. Pins 16, TTL74153, 74LS153, DM74153N
       74154 4-line to 16-line decoders/demultiplexers. Pins 24
       74155 Decoders/Demultiplexers. Pins 16
       74156 Decoders/Demultiplexers. Pins 16
       74157 Quad 2 to 1 line data selectors/multiplexers. Pins 16, 74LS157, 74HC157, DM74157N
       74158 Quad 2 to 1 line data selectors/multiplexers. Pins 16, SN74LS158N, DM74158N
       74159 4 to 16 line decoders/demultiplexers. Pins 24
       74160 Synchronous 4-bit counters (decade, direct clear). Pins 16, SN74160N
       74161 Synchronous 4-bit counters (binary, direct clear). Pins 16, 74161N, 74LS161, DM74LS161N, DM74161AN, F74161PC, PCB: Ckong - The bank switch on the graphics ROMS was controlled by pin 3 of J9 (LS161).
       74162 Synchronous 4-bit counters (decade, synchronous clear). Pins 16
       74163 Synchronous 4-bit counters (binary, synchronous clear). Pins 16, 74LS163
       74164 8-bit parallel out serial shift registers (synchronous clear). Pins 14
       74165 8-bit shift register (parallel load with complementary outputs). Pins 16
       74166 8-bit shift register (parallel/serial input, serial output). Pins 16, DM74166N
       74167 Synchronous decade rate multipliers. Pins 16
       74168 4-bit up/down synchronous counters (decade). Pins 16
       74169 4-bit up/down synchronous counters (binary). Pins 16
       74170 4-by-4 register files. Pins 16
       74171 Quad d-type flip-flops with clear. Pins 16
       74172 16-bit register files. Pins 24
       74173 4-bit d-type registers (3-state outputs). Pins 16, 74F273
       74174 Hex d-type flip-flops (single-rail ouputs, common direct clear). Pins 16, 74174N, SN74174N, 74LS174, 74S174N, DM74LS174N
       74175 Quad d-type flip-flops (complementary outputs, common direct clear). Pins 16, 74LS175, SN74175N
       74176 Presettable decade/biquinary counters. Pins 14
       74177 Presettable binary counters. Pins 14
       74178 4-bit universal shift register. Pins 14
       74179 4-bit universal shift registers. Pins 16
       74180 9-bit odd/even parity generator/checker. Pins 14
       74181 Arithmetic logic units/function generators (16 arithmetic operations,16 logic functions). Pins 24
       74182 Look-ahead carry generators. Pins 16
       74183 Dual carry-save full adders. Pins 14
       74184 Code converters (BCD to binary). Pins 16
       74185 Code converters (Binary to BCD). Pins 16
       74187 1024-bit read-only-memories (256 4-bit words, open-collector outputs). Pins 16
       74188 256-bit programmable read-only-memories (32 bytes, 32 x 8). DIP16, 74S188, SN74S188N, DM74S188A (Ad2083, Sprint1/2)
       74189 64-bit ramdom-access-memories (16 4-bit words, 3 state outputs). Pins 16, 74s189 ram (Revenger, Tripool)
       74190 Synchronous up/down counters (BCD). Pins 16
       74191 Synchronous up/down counters (Binary). Pins 16
       74192 Synchronous up/down dual clock counters (BCD with clear). Pins 16
       74193 Synchronous up/down dual clock counters (Binary with clear). Pins 16
       74194 4-bit bidirectional universal shift registers. Pins 16, 74LS194
       74195 4-bit parallel-access shift registers. Pins 16
       74196 Presettable decade/biquinary counters/latches. Pins 14
       74197 Presettable binary counters/latches. Pins 14
       74198 8-bit bidirectional universal shift registers. Pins 24
       74199 8-bit bidirectional universal shift registers (J-/K serial inputs). Pins 24
       74201 256-bit random-access-memories (256 1-bit words, 3 state outputs). Pins 16, 74LS201, 74S201
       74217 256-bit random-access-memories with three state outputs (64 x 4-bit words). Pins 20
       74218 256-bit random-access read/write memories with three state outputs (32 x 8-bit words). Pins 20
       74219 64-bit random-access-memories (16 x 4-bit words). Pins 16
       74221 Dual monostable multivibrators. Pins 16
       74222 64-bit FIFO memories 16 4-bit words (input-ready enable, output-ready enable, 3-state output). Pins 20
       74224 64-bit FIFO memories 16 4-bit words (3 state output). Pins 16, 74LS224N
       74225 80-bit FIFO memories 16 5-bit words. Pins 20
       74226 4-bit parallel latched bus transceivers (3 state outputs). Pins 16
       74227 64-bit FIFO memories 16 4-bit words (input-ready enable, output-ready enable, open-collector outputs). Pins 20
       74228 64-bit FIFO memories 16 4-bit words (open-collector outputs).Pins 16
       74230 Octal buffers and line drivers (3 state output). Pins 20
       74231 Octal buffers and line drivers (3 state output). Pins 20
       74240 Octal buffers / Line drivers / Line receivers (inverted 3 state outputs). Pins 20, 74LS240
       74241 Octal buffers / Line drivers / Line receivers (non-inverted 3 state outputs). Pins 20, 74LS241
       74242 Quad bus tranceivers (inverted 3 state outputs). Pins 14
       74243 Quad bus tranceivers (non-inverted 3 state outputs). Pins 14
       74244 Octal buffers / Line drivers / Line receivers (non-inverted 3 state outputs). Pins 20, 74LS244N, 74LVT244, 74F244N (SOIC20), 74ACTT244N
       74245 Octal bus tranceivers (non-inverted 3 state outputs). Pins 20, 74LS245P, 74HC245N, 74F245 (SOIC20), 74LVT245, LVT245SS, 74LCX245 (SOP20), ST T74L6245BI (Bmcbowl)
       74246 BCD to seven segment decoders/drivers with ripple blanking. Pins 16, 74LS246
       74247 BCD to seven segment decoders/drivers with ripple blanking. Pins 16
       74248 BCD to seven segment decoders/drivers (internal pull-up outputs). Pins 16
       74249 BCD to seven segment decoders/drivers (open-collector outputs). Pins 16
       74251 Data selectors/multiplexers (true and inverted 3 state outputs). Pins 16
       74253 Dual data selectors/multiplexers (3 state outputs). Pins 16
       74257 Quad data selectors/multiplexers (non-inverted 3 state outputs). Pins 16
       74258 Quad data selectors/multiplexers (inverted 3 state outputs). Pins 16
       74259 8-bit addressable latches. Pins 16, 74LS259, HC259 (NeoGeo)  SOURCE: shougi.c, PCB: Dkongjr, Boggy84, MetalManiax
       74260 Dual 5-input positive NOR gates. Pins 14
       74261 2-bit by 4-bit parallel binary multipliers. Pins 16
       74265 Quad complementary output elements. Pins 16
       74266 Quad 2-input exclusive NOR gates with open-collector outputs. Pins 14
       74270 2048-bit read-only-memories (open-collector outputs, 512 x 4-bit words). Pins 16
       74271 2048-bit read-only-memories (open-collector outputs, 256 x 8-bit words). Pins 20
       74273 Octal d-type flip-flops (common clock, single rail outputs). Pins 20, 74LS273, 74LS273NA, 74HC273N, LS273 (The LS273 is a Octal +ve edge trigger D-type flip-flop with Reset; SOURCE: machine\ajax.c), SN74LS273N 57C55LK (Ttchamp)
       74274 4-bit by 4-bit binary multipliers. Pins 20
       74275 7-bit slice wallace trees. Pins 16
       74276 Quad J-/K flip-flops (seperate clocks, edge-triggering, common direct clear and preset). Pins 20
       74278 4-bit cascadable priority registers. Pins 14
       74279 Quad /S./R latches. Pins 16
       74280 9-bit odd/even parity generators/checkers. Pins 14
       74281 4-bit parallel binary accumulators. Pins 24
       74283 4-bit binary full adder. Pins 16, 74LS283
       74284 4-bit by 4-bit parallel binary multipliers used with '285. Pins 16
       74285 4-bit by 4-bit parallel binary multipliers used with '284. Pins 16
       74287 1024-bit programmable read-only-memories (256 bytes, 256 x 4). DIP 16 / PLCC20, 74S287  (Soccer, Sprint1, Skyraid), DM74S287AN
       74288 256-bit programmable read-only-memories (32 bytes, 32 x 8, bipolar PROM). DIP 16, 74S288, DM74S288N (Spaceg)
       74289 64-bit random-acces-memories (16 x 4-bit words, open collector outputs). Pins 16
       74290 Decade counters (divide-by-two and divide-by-five). Pins 14
       74292 Programmable frequency dividers/digital timers (digitally programmable from 2^2 to 2^31). Pins 16
       74293 4-bit binary counters (divide-by-two and divide-by-eight). Pins 14
       74294 Programmable frequency dividers/digital timers (digitally programmable from 2^2 to 2^15). Pins 16
       74295 4-bit bidirectional universal shift registers. Pins 14
       74297 Digital phase-locked-loop filters (cascadable for higher-order loops). Pins 16
       74298 Quad 2-input multiplexers with storage. Pins 16
       74299 8-bit bidirectional universal shift/storage registers (3 state outputs). Pins 20
       74301 256-bit random-access-memories (256 1-bit words, open collector outputs). Pins 16, SN74S301N
       74317 256-bit random-access-memories with open-collector outputs (64 x 4-bit words). Pins 20
       74318 256-bit random-access-memories with open-collector outputs (32 x 8-bit words). Pins 20
       74319 64-bit random-access-memories (16 x 4-bit words, open-collector outputs). Pins 16
       74320 Crystal controlled oscillators. Pins 16
       74321 Crystal controlled oscillators (with F/2 and F/4 count-down outputs). Pins 16
       74322 8-bit shift registers with sign extend (3-state outputs, multiplexed I/O). Pins 20
       74323 8-bit bidirectional shift/storage registers (3 state outputs). Pins 20
       74324 Voltage Controlled Oscillator. Pins 14
       74347 BCD to seven-segment decoders/drivers (open-collector outputs, low voltage version of 'LS47). Pins 16
       74348 8-Line to 3-line priority encoders (3 state outputs). Pins 16
       74351 Dual 8-line to 1-line data selectors/multiplexers (3 state outputs, four common data inputs). Pins 20
       74352 Dual 4-line to 1-line data selectors/multiplexers (inverting version of 'LS153). Pins 16
       74353 Dual 4-line to 1-line data selectors/multiplexers (3 state outputs,inverting version of 'LS253). Pins 16
       74354 8-line to 1-line data selectors/multiplexers/transparent registers (3 state outputs). Pins 20
       74355 8-Line to 1-line data selectors/multiplexers/transparent registers (open-collector outputs). Pins 20
       74356 8-Line to 1-line data selectors/multiplexers/edge-triggered registers (3 state outputs). Pins 20
       74357 8-Line to 1-line data selectors/multiplexers/edge-triggered registers (open-collector outputs). Pins 20
       74365 Hex bus drivers (non-inverted 3-state outputs, gated enable inputs). Pins 16
       74366 Hex bus drivers (inverted 3-state outputs, gated enable inputs). Pins 16
       74367 Hex bus drivers (non-inverted 3-state outputs organised to facilitate handling of 4-bit data). Pins 16, 74LS367, DM74LS367N
       74368 Hex bus drivers (inverted 3-state outputs organised to facilitate handling of 4-bit data). Pins 16, 74LS368
       74370 2048-bit read-only-memories (512 x 4-bit words, 3-state outputs). Pins 16
       74371 2048-bit read-only-memories (256 x 8-bit words, 3-state outputs). Pins 20
       74373 Octal d-type latches (3-state outputs, common output control, common enable). Pins 20, 74LS373N, SN74ALS373
       74374 Octal d-type flip-flops (3-state outputs, common output control, common clock). Pins 20, 74LS374N, 74L374, 74S374N, 74HCT374, SN74ALS374
       74375 4-bit bistable latches. Pins 16
       74376 Quad J-/K flip-flops (common clock, common clear). Pins 16
       74377 Octal d-type flip-flops (single rail outputs, common enable, common clock). Pins 20, 74LS377
       74378 Hex d-type flip-flops (single rail outputs, common enable, common clock). Pins 16
       74379 Quad d-type flip-flops (single rail outputs, common enable, common clock). Pins 16
       74381 Arithmetic logic units/function generators (8 binary functions, use 'S182 for look-ahead carry). Pins 20
       74382 Arithmetic logic units/function generators (ripple carry and overflow outputs). Pins 20
       74384 8-bit by 1-bit two's-complement multipliers. Pins 16, NOTES: The 74ls384 is a serial subtractor - multiplier - accumulator. For the full calculation 33 GMCLK pulses are generated. The calculation performed is: ACC = ACC + (A - B) * C, SOURCE: machine\starwars.cpp
       74385 Quad serial adders/subtractors. Pins 20
       74386 Quad 2-input exclusive-OR gates. Pins 14
       74390 Dual decade counters (bi-quinary or bcd sequences). Pins 16
       74393 Dual 4-bit binary counters. Pins 14, 74LS393
       74395 4-bit universal shift registers (3-state outputs). Pins 16
       74396 Octal storage registers (parallel access). Pins 16
       74398 Quad 2-input multiplexers with storage (double-rail outputs). Pins 20
       74399 Quad 2-input multiplexers with storage. Pins 16
       74412 Multi-mode buffered 8-bit latches (3-state outputs, direct clear). Pins 24
       74422 Re-triggerable monostable multivibrators (internal timing resistor). Pins 14
       74423 Re-triggerable monostable multivibrators. Pins 16
       74425 Quad gates (3-state outputs, active-low enabling). Pins 14
       74426 Quad gates (3-state outputs, active-high enabling). Pins 14
       74428 System controller for 8080A. Pins 28
       74436 Line driver/memory driver circuits - MOS memory interface. Pins 16
       74437 Line driver/memory driver circuits - MOS memory interface. Pins 16
       74438 System controller for 8080A. Pins 28
       74440 Quad tridirectional bus transceivers (open-collector outputs, non-inverted logic). Pins 20
       74441 Quad tridirectional bus transceivers (open-collector outputs, inverted logic). Pins 20
       74442 Quad tridirectional bus transceivers (3-state outputs, non-inverted logic). Pins 20
       74443 Quad tridirectional bus transceivers (3-state outputs, inverted logic). Pins 20
       74444 Quad tridirectional bus transceivers (3-state outputs, inverted and non-inverted logic). Pins 20
       74445 BCD-to-decimal decoders/drivers. Pins 16
       74446 Quad bus tranceivers with direction controls (3-state outputs). Pins 16
       74447 BCD-to-seven-segment decoders/drivers (low-voltage version of 'LS247). Pins 16
       74448 Quad tridirectional bus transceivers (open-collector outputs, inverted and non-inverted logic). Pins 20
       74449 Quad bus tranceivers with direction controls (3-state outputs). Pins 16
       74465 Octal buffers with 3-state outputs (true outputs). Pins 20
       74466 Octal buffers with 3-state outputs (inverted outputs). Pins 20
       74467 Octal buffers with 3-state outputs (true outputs). Pins 20
       74468 Octal buffers with 3-state outputs (inverted outputs). Pins 20
       74471 Programmable read-only-memory (256 bytes). 74S471, SN74S471N
       74472 4096-bit programmable read-only-memories (512 bytes, 512 x 8). DIP20, 74S472 (Guardian)
       74474 4096-bit programmable read-only-memories (512 bytes, 512 x 8). DIP24, 74S474 (Sidetrac)
       74476 4096-bit programmable read-only-memories (1024 bytes, 1024 x 4). 74S476 (Dribling, Superbug)
       74481 4-bit slice cascadable processor elements. Pins 48
       74482 4-bit slice cascadable control elements. Pins 20
       74484 BCD-to-binary code converter. Pins 20
       74485 Binary-to-BCD code converter. Pins 20
       74490 Dual decade counters. Pins 16
       74505      ?                         DM74505N (Dwarfd)
       74516 4096-bit programmable read-only-memories (512 bytes, 512 x 8). 74S516, SN74S516 (Tx1)
       74518 8-bit magnitude comparator (input pull-up resistor, open-collector output). Pins 20
       74519 8-bit magnitude comparator (open-collector output). Pins 20
       74520 8-bit magnitude comparator (input pull-up resistor, inverted totem-pole output). Pins 20
       74521 8-bit magnitude comparator (inverted totem-pole output). Pins 20
       74522 8-bit magnitude comparator (input pull-up resistor, inverted open-collector output). Pins 20
       74533 Octal d-type transparent latches (3-state buffer-type outputs). Pins 20
       74534 Octal d-type edge-triggered flip-flops (3-state buffer-type outputs). Pins 20
       74538 3 to 8 line decoders/demultiplexers (3-state outputs, output parity control). Pins 20
       74539 2 to 4 line decoders/demultiplexers (3-state outputs, output parity control). Pins 20
       74540 Octal buffers and line drivers (inverted data output). Pins 20
       74541 Octal buffers and line drivers (tru data output). Pins 20, DM74ALS541
       74560 Synchronous 4-bit counters (decade, sync and async clear). Pins 20
       74561 Synchronous 4-bit counters (binary, sync and async clear). Pins 20
       74563 Octal d-type transparent latches (inverted outputs). Pins 20
       74564 Octal d-type edge-triggered flip-flops (inverted outputs). Pins 20
       74568 Synchronous 4-bit up/down counters (decade, sync and async clear). Pins 20
       74569 Synchronous 4-bit up/down counters (binary, sync and async clear). Pins 20
       74571 2048-bit programmable read-only-memories (512 bytes, 512 x 4). PLCC20, 74S571 (Dodgem, Sprint1)
       74572 4096-bit programmable read-only-memories (1024 bytes, 1024 x 4). DIP18, 74S572 (Vangrd2)
       74573 Octal d-type transparent latches (functionally equivalent to 'LS373 & 'S373). Pins 20, 74HC573
       74574 Octal d-type edge-triggered flip-flops (functionally equivalent to 'LS374 & 'S374). Pins 20
       74575 Octal d-type edge-triggered flip-flops (non-inverted outputs). Pins 24
       74576 Octal d-type edge-triggered flip-flops (inverted outputs). Pins 20
       74577 Octal d-type edge-triggered flip-flops (inverted outputs, synchronous clear). Pins 24
       74610 Memory mapper (latched, tristate)
       74611 Memory mapper (latched, openc)
       74612 Memory mapper (tristate)
       74613 Memory mapper (openc)
       74624 Voltage-controlled oscillators
       74629 Dual voltage-controlled oscillators



       WIP:

       7400
       - 0.259              : Removed machine\7400.cpp/h. Removed unused 7400 logic device [Vas Crabb].
       - 0.201              : Removed MCFG and old DEVCB macros [Ryan Holtz].
       - 0.180              : Added machine\7400.cpp/h. Added 7400 Quad 2-Input NAND Gate [Ryan Holtz].
       - NOTES: 7400 Quad 2-Input NAND Gate
       - DRIVERS: -
       - SOURCE: machine\7400.cpp


       7404
       - 0.201              : Removed MCFG and old DEVCB macros [Ryan Holtz].
       - 0.180              : Added machine\7404.cpp/h. Added 7404 Hex Inverter [Ryan Holtz].
       - NOTES: 7404 Hex Inverter
       - DRIVERS: -
       - SOURCE: machine\7404.cpp


       7474
       - 0.244              : Fixed use of uninitialised members (machine\7474.cpp) [Vas Crabb].
       - 0.221              : Changed output to deliver either 0 or 1, not -1 [Michael Zapf].
       - 0.153              : Standardised 7474 MCFG and reduced number of run time lookups [smf].
       - 0.147u2            : Changed 7474 to use DEVCB2 (drivers\carpolo.c, dambustr.c, galaxold.c, scobra.c and scramble.c) [Miodrag Milanovic].
       - 0.146              : Fixed crash in 800fath, mariner, knockout, triplep (scramble.c) and sets having a 7474 without the "audiocpu". No idea why it has started to crash only now [Fabio Priuli].
       - 0.139u2            : Harmony updated the 7474 device to no longer be legacy.
       - 0.138u2            : Couriersud convert 7474 handlers to (READ|WRITE)_LINE_DEVICE_HANDLERS. Changed 7474 to only use DEVCB callbacks and handlers. Updated game drivers.
       - 0.135u4            : Aaron Giles converted 7474 TTL implementation to devices.
       - 0.101              : Aaron Giles added save state support to 7474 TTL.
       -  6th July      2002: Zsolt Vasvari fixed the missing sound in Mr. Kougar (7474).
       - 0.37b15            : Added machine\7474.c/h.
       - NOTES: TTL7474 is apositive-edge-triggered D-type flip-flop with preset, clear and complementary outputs.
       - DRIVERS: carpolo.cpp, galaxold.cpp, inder.cpp, play_2.cpp, play_3.cpp, scobra.cpp, spinb.cpp and scramble.cpp
       - SOURCE: machine\7474.cpp


       7492
       - 0.140u1            : Derrick Renaud fixed operation of DISCRETE_COUNTER_7492.
       - 0.94u5             : Derrick Renaud updated firetrk, montecar and superbug to use new 7492 counter. Changed adjusters so frequency goes higher when adjusted to the right.
       - NOTES: The TTL7492 is a 4-bit asynchronous divide-by-twelve counter with /2 and /6 sections and reset. Pins 14
       - DRIVERS:
       - SOURCE: sound\discrete.h


       74123/74LS123
       - 0.210              : Added keyboard click/beep sound for (MESS) Z-100 (machine\74123.h) [AJR].
       - 0.201              : Removed MCFG and old DEVCB macros [Ryan Holtz].
       - 0.192              : Use line handlers for single lines (m10.cpp, nyny.cpp, r2dtank.cpp and spiders.cpp) [Dirk Best].
       - 0.154              : Converted 74123 to DEVCB2 [Osso].
       - 0.139u2            : Harmony updated the 74123 device to no longer be legacy.
       - 0.128u3            : Couriersud changed 74123 into a device. Clarified behavior from datasheet. Added logic to avoid recursive calls. Rewrote irq for M10/M11 to use two 74LS123.
       - 0.115u2            : New 74123 timer emulator [Zsolt Vasvari]. It supports different ways a 74123 can be hooked up that affect the timing period. The old implementation was incorrect in lots of respects.
       - 0.88               : Derrick Renaud added a macro that calculates the pulse time of a 74LS123 or LS123. TIME_OF_74LS123(r,c) - r is in Ohms and c is in Farads. c must be greater then 1000pF to use this function
       - 25th January   2002: Aaron Giles fixed some problems with the 74123 emulator that appeared with the timer changes.
       - 0.36RC1            : Added machine\74123.c/h.
       - NOTES: The TTL74123 is a monoflop, there are 2 monoflops per chips (see machine\74123.c)
       - DRIVERS: m10.cpp, nyny.cpp, r2dtank.cpp and spiders.cpp
       - SOURCE: machine\74123.cpp


       74145
       - 0.201              : Removed MCFG and old DEVCB macros [Ryan Holtz].
       - 0.153              : Converted 74145 device to DEVCB2 [Osso].
       - 0.148u2            : Fixed uninitialized member in machine\74145.c [Oliver Stoeneberg]. Moved mess\machine\74145.c/h to mame\ [Curt Coder].
       - DRIVERS: (MESS) acrnsys1.cpp, didact.cpp, e100.cpp, mz700.cpp, prodigy.cpp and sym1.cpp
       - SOURCE: machine\74145.cpp


       74148
       - 0.201              : Removed MCFG and old DEVCB macros [Ryan Holtz].
       - 0.154              : Updated TTL74148 to use delegates [Fabio Priuli].
       - 0.150              : Modernized 74148 TTL. This still needs updating to DEVCB/DEVCB2 [Osso].
       - 0.135u4            : Aaron Giles converted 74148 TTL implementation to devices.
       - 0.129              : MooglyGuy added savestate support to the TTL74148 device.
       - 0.61               : Added machine\74148.c/h.
       - 20th June      2002: Zsolt Vasvari added emulation for a 74148 chip which will be needed for proper emulation of Car Polo.
       - NOTES: TTL74148 is a 8-line-to-3-line priority encoder
       - DRIVERS: carpolo.cpp and vertigo.cpp
       - SOURCE: machine\74148.cpp


       74153
       - 0.221              : Simplified handlers [Osso].
       - 0.201              : Removed MCFG and old DEVCB macros [Ryan Holtz].
       - 0.195              : Use 74LS153 device for DSW1 in asteroid.cpp [Dirk Best].
       - 0.194              : Improved 74153 interface [Dirk Best].
       - 0.182              : Rewrote 74153. Only output state when the level changes. Use 74153 for the serial clock selector in (MESS) Apricot PC [Dirk Best].
       - 0.154              : Updated TTL74153 to use delegates [Fabio Priuli].
       - 0.150              : Modernized 74153. This still needs updating to DEVCB/DEVCB2 [Osso].
       - 0.135u4            : Aaron Giles converted 74153 TTL implementation to devices.
       - 0.129              : MooglyGuy added savestate support to the TTL74153 device.
       - 0.61               : Added machine\74153.c/h.
       - NOTES: Dual 4-line to 1-line data selectors/multiplexers
       - DRIVERS: carpolo.cpp
       - SOURCE: machine\74153.cpp
       - GAMES: Car Polo (Exidy 1977)


       74157
       - 0.208              : Simplified handlers. Fixed naming [cam900].
       - 0.201              : Removed MCFG and old DEVCB macros [Ryan Holtz].
       - 0.195              : Use 74LS157 device for namcos1.cpp dipswitches and correct order of switches [Dirk Best].
       - 0.194              : Converted 74157 to bitswap<4>. Added two-in-one version of LS157 and hook it up to Alien Arena, Joust, Plotting and Splat! [AJR].
       - 0.187              : 74157 developments. Added more read/write handlers, optional input callbacks and HC157 variant. Prevent unnecessary reads. plotting, puzznic and horshoes: Use a quartet of LS157s to multiplex the YM2203 inputs.
       - 0.182              : Added 74LS157 for MSM5205 interface in Asuka & Asuka and Maze of Flott. Added 74LS157 for clone Karate Champ (US VS version, set 1) [AJR].
       - 0.181              : Added machine\74157.cpp/h. Created new 74LS157 device and hook it up to MSM5205 on Rastan. 74157 updates (Pinball division): Added 74HCT157 device type alias. Hook up 74HCT157 in inder.cpp and spinb.cpp as per schematics. Changed device and macro names. Stylistic cleanups; avert potential crash in some drivers. This doesn't seem quite right by the schematics, but gives better sound [AJR].
       - NOTES: 74LS157 Quad 2-Line to 1-Line Data Selectors/Multiplexers
       - SOURCE: machine\74157.cpp


       74161/161/162/163
       - 0.221              : Simplified handlers [Osso]. Fixed state machine and made TC signal asynchronous (machine\74161.cpp) [Michael Zapf].
       - 0.201              : Removed MCFG and old DEVCB macros [Ryan Holtz].
       - 0.180              : Added machine\74161.cpp/h. Added 54/74160,161,162,163 device emulation [Ryan Holtz].
       - NOTES: BCD decade counter / 4-bit binary counter
       - DRIVERS:
       - SOURCE: machine\74161.cpp


       74165
       - 0.194              : Added machine\74165.cpp/h. Added SN54/74165 8-Bit Parallel-In/Serial-Out Shift Register [Dirk Best, Luca Elia].
       - DRIVERS: sigmab98.cpp
       - SOURCE: machine\74165.cpp


       74166
       - 0.180              : Added machine\74166.cpp/h. Added SN54/74166 8-Bit Parallel-In/Serial-Out Shift Register [Dirk Best].
       - NOTES: SN54/74166 8-Bit Parallel-In/Serial-Out Shift Register
       - DRIVERS: megaphx.cpp
       - SOURCE: machine\74166.cpp


       74174/175
       - 0.180              : Added machine\74175.cpp/h. Added 54/74174,175 Hex/Quad D Flip-Flops with Clear [Ryan Holtz].
       - 0.127u1            : Couriersud added a new generic latch device. Generic emulation of 74LS174/175, 74LS259 and other latches. Apart from providing synched latch operation, these latches can be configured to read their input bitwise from other devices as well and individual bits can be connected to discrete nodes. Please see audio\dkong.c for examples.
       - NOTES: 74174/5 Hex/Quad D Flip-Flops with Clear
       - DRIVERS: -
       - SOURCE: machine\74175.cpp


       74LS181
       - 0.151              : Fixed copypaste error in 74181, causing bug(s) in Berzerk driver [hap].
       - 0.150              : Converted 74181 to a device [Dirk Best].
       - 0.103u1            : Added machine\74181.c/h. Major cleanup/rewrite of the Berzerk driver [smf]: Merged memory & IO read/write maps. Video ram & magic ram share the same memory. Hooked up NVRAM in frenzy memory map. Emulates magic ram shifter/flopper with 9 74LS153's as per the schematics. Emulates magic ram ALU with 2 74LS181's hardwired to logic mode as per the schematics. 74LS181 emulation based on the logic diagram from the datasheet, supporting logic mode & arithmetic mode.
       - NOTES: TTL74181 is a 4-bit arithmetic Logic Unit
       - DRIVERS: berzerk.cpp
       - SOURCE: machine\74181.cpp


       74LS259
       - 0.210              : Simplified handlers [cam900].
       - 0.201              : Removed MCFG and old DEVCB macros [Ryan Holtz].
       - 0.192              : Added descriptive names for 74LS259 nibble write handlers to mjsister and rallybik [AJR].
       - 0.189              : Added machine\74259.cpp/h. New 74LS259 device [AJR]. Make configuration member const, avoid Object and object distinguished only by case in one line, use MAME_ prefix on all include guards to make it easier to deal with them in -dM (dump preprocessor macros) output. This 16-pin logic devics was commonly used in 8-bit arcade games to control coin counters/lockouts, IRQ flipflops, graphics banking, slave CPU reset lines, discrete audio triggers, screen flipping, serial EEPROMs and much else. Over 100 drivers and a few bus devices have been updated to use the new implementation, and a great deal of research has gone into documenting the physical location of these devices on actual PCBs in the source. Write handlers have been provided for both orthodox and somewhat less conventional memory mappings [Vas Crabb]. Fixing reported failure of netlist build (TTL74259; mame\nl.lua) [Robbbert]. Added write_d1 handler [AJR].
       - 0.127u1            : Couriersud added a new generic latch device. Generic emulation of 74LS174/175, 74LS259 and other latches. Apart from providing synched latch operation, these latches can be configured to read their input bitwise from other devices as well and individual bits can be connected to discrete nodes. Please see audio\dkong.c for examples.
       - NOTES: 74LS259 Addressable Latch
       - DRIVERS: alpha68k.cpp, ambush.cpp, asteroid.cpp, atarisy1.cpp, bagman.cpp, balsente.cpp...
       - SOURCE: machine\74259.cpp


       74262
       - 0.264              : Added hand-crafted character generator ROM based on datasheet. Use SN74S262 as the VDU-40 COS 3.4 character generator for (MESS) rm380z.cpp. Also cleaned up drawing code [Robin Sergeant].
       - 0.254              : Added video\sn74s262.cpp/h. Devicify the SN74S263 character generator. Fixed function override access levels. Implemented device_gfx_interface [Curt Coder].
       - NOTES: Texas Instruments 'SN74S262N Row Output Character Generator'
       - DRIVERS: (MESS) RM-380Z, Luxor ABC80
       - SOURCE: video\sn74s262.cpp


       74381
       - 0.211              : Added machine\74381.cpp/h. Added untested 74S381 ALU/Function Generator device [Ryan Holtz].
       - NOTES: TI SN74S381 ALU / Function Generator
       - DRIVERS: (MESS) dpb7000.cpp
       - SOURCE: machine\74381.cpp


       74LS393
       - 0.201              : Use ripple counter device for (MESS) 'Osborne Executive' RTC and blink timer. Converted 'Generic ripple counter' to DEVCB3. Use 'Generic ripple counter' device in play_2.cpp [AJR].
       - 0.193              : Added machine\ripple_counter.cpp/h. Added new generic ripple counter device [AJR].
       - NOTES: The "Generic binary ripple counter" device emulates basic ripple counter logic ICs with fallingedge clocks and a synchronous reset inputs such as CD4040 and 74LS393. The optional 8-bit ROM interface is intended to help stream ROM data to sound chips that lack memory interfaces of their own (e.g. MSM5205, TMS5110).
       - DRIVERS: mermaid.cpp (Rougien) and play_2.cpp
       - SOURCE: machine\ripple_counter.cpp


       74543
       - 0.278              : Changed description to '74F543 Octal Registered Transceiver'.
       - 0.221              : Added machine\74543.cpp/h. Added octal registered transceiver 74543 [Michael Zapf].
       - NOTES: Octal Registered Transceiver; typically 74F543.
       - DRIVERS: (MESS) TI-99
       - SOURCE: machine\74543.cpp


       74610/1/2/3
       - 0.278              : Added machine\74610.cpp/h. Added 74LS61x memory mapper circuit [Michael Zapf].
       - NOTES: SN74LS610 Memory mapper (latched, tristate), SN74LS611 Memory mapper (latched, openc), SN74LS612 Memory mapper (tristate) and SN74LS613 Memory mapper (openc).
       - DRIVERS: (MESS) TI-99
       - SOURCE: machine\74610.cpp


       74624
       - 0.140u1            : Discrete Updates [Derrick Renaud]: Removed old DISCRETE_74LS624 code and replaced it with new 74LS629 based code. Updated Mario to use new DISCRETE_74LS624 and DISCRETE_XTIME_logic modules.
       - 0.134u2            : DISCRETE_74LS624 - optimized for some more speed [Derrick Renaud]. Couriersud removed capacitor aging code and assumed range input is gnd for all 74LS624.
       - 0.134u1            : Optimized DISCRETE_74LS624 making dkongjr and mario faster [Derrick Renaud].
       - 0.122u2            : Added discrete 74LS624(56789) implementation [Couriersud]: DISCRETE_74LS624 is a VCO needed for dkongjr. Supports Logic, Energy and Count outputs.
       - SOURCE: sound\discrete.h


       74629
       - 0.140u1            : Discrete Updates [Derrick Renaud]: Removed old DISCRETE_74LS624 code and replaced it with new 74LS629 based code. Updated Mario to use new DISCRETE_74LS624 and DISCRETE_XTIME_logic modules.
       - 19th October   2010: Derrick Renaud - Thanks to a patient Smitdogg, we now have this WIP. The 74LS629 is a PITA to emulate. I wanted to do a full electrical equivalent circuit in code, but it looks like it won't happen that way. There are too many non-linear inter-reactions depending on the freq and range voltages. So I settled on just getting data points from the chip and plugged the info into www.zunzun.com to get an equivalent formula. The following pic shows the measured data points I used. Notice that with the range voltage at 5V, the frequency gets lower as the modulation voltage gets lower, except at below 0.5V when the frequency starts to get higher again. The data sheet says not to use modulation voltages less then 1V for this reason. Of course no one listens. The next pic shows the modulation voltage of the walk sound, and sure enough it drops into this range. This is why I settled on an equivalent formula, instead of an electrical simulation. No major difference to the ears. Here are a couple fancy 3D pics of the interaction of the range and modulation voltages on the output frequency. The other fun thing on this chip, is that it is sensitive to heat changes. Heck I think passing airplanes have an effect on it. So the tolerance varies a bit, especially with modulation voltages under 1V, with under 0.5V being real finicky. So here is a graph of the error based on measured data and formula output. Its well within the tolerances of the IC. Listen to the attached MP3 to hear what the new code changes.



O1.2   C-MOS (LOC - MOS)

       4001 Quad 2-input NOR gates. Pins 14
       4006 Dual 4-bit and dual 5-bit serial-in serial-out shift registers. Pins 14 -> audio\phoenix.c, CD4006BE (Invaders), CD4006CN (Ozmawars)
       4011 Quad 2-input NAND gates. Pins 14
       4015 Dual 4-bit shift registers. Pins 16
       4017 Synchronous decimal counters/dividers. Pins 16
       4024 Asynchronous 7-bit Dual counter. Pins 14
       4028 8 - 4 - 2 - 1 - BCD/Decimal decoder. Pins 16
       4030 Quad exclusive OR gates. Pins 14
       4040 12-Stage Binary Ripple Counter;  Philips HCF4040, 74HC4040 (Chameleon 24-in-1, Unknown Sega, Sega-System24)
       4042 4-bit Auffang register. Pins 16
       4047 Monostable / astable multivibrator. Pins 14
       4049 6x inverted drivers. Pins 16
       4066 Switch
       4071 Quad 2-input OR gates. Pins 14
       4076 Quad d-type flip-flops. Pins 16
       4081 Quad 2-input AND gates. Pins 14; HEF4081BP
       4093 Quad 2-input NAND with schmitt-trigger inputs, DIP14; ST-Microelectronics HCF4093BE (Draw Poker Hi-Lo)
       4511 8 - 4 - 2 - 1 - BCD / 7-segment decoder. Pins 16
       4512 8-line multiplexer. Pins 16
       4520 Hitachi HD14520 Dual Up Counter, DIP16 (Champbwl)
       4528 Dual monostable multivibrators. Pins 16
       4539 Dual addressable 4-bit multiplexer. Pins 16



       NOTES:

       4001
       - PCB: CD4001BE (Unknown)

       4066
       - NOTES: The sound output in Fantasy (SNK 1981) is switched on/off by a 4066 IC.
       - NOTES: The polynome output bit for noise sound in Phoenix etc. is used to gate bits 6 + 7 of sound latch A through the upper half of a 4066 chip. Bit 6 is sweeping a capacitor between 0V and 4.7V while bit 7 is connected directly to the 4066 (see audio\pleiads.c).
       - SOURCE: sound\discrete.h  (DISC_CD4066_THRESHOLD)
       - SOURCE: audio\ataridis.c, geebee.c, pleiads.c rockola.c and spiders.cpp
       - PCB: TC4066 (Fantasy), 4066 (Buckrog, Naughtyb, Spaceg, Tripool), CD4066BCN (Unknown Alpha Denshi board)

       4098
       - PCB: CD4098BE (Murogem)

       4528
       - PCB: CD4528BCN  (Unknown)



O1.3   Others

      DS0026     National Semi. DS0026CG, DS0026CN   Dual High-Speed MOS Driver, 5 MHz Two Phase MOS Clock Driver
       TC428     TC428CPA                            Dual CMOS High-speed Driver (Skattv)
       N8T26     N8T26AN                             Quad Bus-Line Transceiver       (Unkmeyco)
      N8T245     N8T245N                             ?= 74245 Octal bus tranceivers  (Strvmstr)
        1855     RCA CDP1855CDX 201                  8-Bit Programmable Multiply/Divide Unit (Lgp)
        3214     Mitsubishi M53214P                  Inverting-Function Schmitt Trigger (Headoni)
        3245     MC3245L                             Clock Driver  (Invaders)
        3417     Motorola MC3417L                    Continuously Variable Slope Delta Modulator              (Showdown)
        3418     Motorola MC3418L                    Continuously Variable Slope Delta Modulator/DE-Modulator (Showdown)
        3674     DS3674N                             Clock Driver   (Ozmawars)
        5801     Allegro MicroSystems UCN5801A       BiMOS II latched drivers        (Gotcha, Pasha2)
        6345     NEC uPD6345                         Serial 8-bit Shift Register IC, SOIC16 (NamcoSystem12)
        6914     AN6914                              Dual Comparators                (Hcrash)
        8116     COM8116                             Dual Baud Rate Generator (Programmable Divider)
        8226     Mitsubishi M5L8226P                 4 Bit Parallel Bidirectional Bus Drivers (R2dtank)
        8228     Intel D8228, DIP28, NMOS            System Controller/Bus Driver (Fastdraw = ECG8228, Draw Poker Hi-Lo)
        9368     Fairchild DM9368                    7-Segment Decoder/Driver/Latch
       10124     Hitachi HD10124                     TTL-DTL-Input Level Translator - AND/NAND (Yachtsman)
       14175     Motorola MC14175 (=74175)           Quad Type D-type Flip-Flop      (Buckrog)
       40174     ST Microelectronics HCF40174BE      Hex d-type flip-flops           (Unknown board)
       53323     Mitsubishi M53323P, equiv to SN74123N - from manual of Buckrog and datasheet)
       53354     Mitsubishi M53354P 16-Line Digital Demultiplexer, DIP24, supposedly equiv. to SN74154N - from manual of Attckufo and datasheet)
       75365     Texas Instruments SN75365, DIL-16   Quadruple NAND TTL to MOS Driver (Buckrog)



       MC3340
       - 0.127u1: Derrick Renaud added discrete sound for Starship 1. Still need to properly emulate the MC3340.
       - NOTES: The Motorola MC3340 VCA chip has logarithmic control response. Because it is designed for single supply operation, the output has a DC offset of about half the supply voltage. An op-amp is used to get the control voltage range to 1 - 10 volt. This circuit has very low distortion at moderate signal levels and low signal bleedthrough. But the CV bleedthrough is far too high for synth use. Another problem is that it won't produce 10 V p-p output level. You could add another op-amp at the output to fix this and the DC-offset. But then you would lose the main advantage with this chip, which is low parts count.


       SM7831
       - NOTES: The NPC SM7831 is a CMOS-LSI arithmetic processor developed for decimal long-word arithmetic. This LSI functions as the arithmetic co-processor and dramatically improves the cost performance of a microcomputer. Freatures: High-speed execution of decimal arithmetic operations, such as addition, subtraction, multiplication, division and square root extraction.
       - NOTES: NPC = Nippon Precision Circuits
       - GAMES: Lucky 74 (Wing 1988)


       COM8116
       - 0.220: Delete SY2661-1/-2 tables (these are just second sources of SCN2661A/B) [AJR].
       - 0.207: Simplified read/write handlers [AJR].
       - 0.203: More documentation [AJR].
       - 0.199: Standardize nibble-packed write handlers; disable FX4 timer if not needed [AJR].
       - 0.195: Added several clock rate/divisor table variant types [AJR].
       - 0.191: Added K1135 notes [AJR].
       - 0.171: COM5016/COM8116 Baud Generator: Added a bunch more divisor tables and notes [Lord Nightmare].
       - 0.153: Standardised COM8116 DEVCB2 callbacks [smf]. Fixed regression in com8116.h [Curt Coder].
       - 0.149: Converted COM8116 to DEVCB2 [Curt Coder].
       - 0.142u1: Added machine\com8116.c/h.
       - NOTES: COM8116 Dual Baud Rate Generator (Programmable Divider)
       - DRIVERS: (MESS) kaypro.cpp, pulsar.cpp, sbrain.cpp, softbox.cpp, xor100.cpp and xerox820.cpp
       - SOURCE: machine\com8116.cpp


       CD4099
       - 0.193              : Added CD4099 (MC14099) demuxer for lamps to Spy Hunter [AJR].
       - 0.189              : New CD4099 device. This 16-pin logic devics was commonly used in 8-bit arcade games to control coin counters/lockouts, IRQ flipflops, graphics banking, slave CPU reset lines, discrete audio triggers, screen flipping, serial EEPROMs and much else. Over 100 drivers and a few bus devices have been updated to use the new implementation, and a great deal of research has gone into documenting the physical location of these devices on actual PCBs in the source. Write handlers have been provided for both orthodox and somewhat less conventional memory mappings [AJR].
       - NOTES: CD4099B is part of RCA's standard CMOS logic series, this device offers the same functions as 74259/9334, though its pins are arranged rather differently. Like many CMOS devices in the 4000B series and the CMOS addressable latches listed below, its reset input is active high rather than active low, as is normal for TTL devices.
       - SOURCE: machine\74259.cpp


       F9334
       - 0.189              : Removed machine\dm9334.cpp/h. New F9334 device. This 16-pin logic devics was commonly used in 8-bit arcade games to control coin counters/lockouts, IRQ flipflops, graphics banking, slave CPU reset lines, discrete audio triggers, screen flipping, serial EEPROMs and much else. Over 100 drivers and a few bus devices have been updated to use the new implementation, and a great deal of research has gone into documenting the physical location of these devices on actual PCBs in the source. Write handlers have been provided for both orthodox and somewhat less conventional memory mappings [AJR].
       - 0.180              : Added machine\dm9334.cpp/h. Added 9334/DM9334 8-Bit Addressable Latch [Ryan Holtz].
       - NOTES: Fairchild 9334 8-Bit Addressable Latch
       - SOURCE: machine\74259.cpp


       DM9368
       - 0.274              : Updated output when rbi is written (video\dm9368.cpp) [hap].
       - 0.196              : Get rid of dioutput - it's only used in one place, and it upset GCC on Linux debug builds for some reason (emu\dioutput.cpp -> video\dm9368.cpp) [Vas Crabb].
       - 0.153              : Converted DM9368 to DEVCB2 [Curt Coder].
       - 0.142u1            : Added video\dm9368.c/h. Imported DM9368 7 segment LED from MESS [Curt Coder].
       - NOTES: Fairchild DM9368 7-Segment Decoder/Driver/Latch
       - DRIVERS: seabattl.cpp and (MESS) cosmicos.cpp, didact.cpp and elf.cpp
       - SOURCE: video\dm9368.cpp


       MM5307
       - 0.211              : Added machine\mm5307.cpp/h. Added device emulation for MM5307 Baud Rate Generator [AJR].
       - NOTES: MM5307AA/MM5307AB Baud Rate Generator
       - DRIVERS: (MESS) poly88.cpp
       - SOURCE: machine\mm5307.cpp


       SEC
       - 0.149u1: Fixed obvious typo in SEC [dgame].
       - 0.145u7: Added machine\sec.c/h.
       - NOTES: Serial Electronic Counter (SEC)



O1.4   Logic Gates



       GATE                        FUNCTION                  IC        Examples (A1, A2 = data input; x = output)


       AND   = AND                 x = a * b                 7408      A1 = 0, A2 = 1  => x = 0, A1 = 1, A2 = 1  => x = 1

       OR    = OR                  x = a + b                 7432      A1 = 0, A2 = 1  => x = 1, A1 = 1, A2 = 1  => x = 1
                                       _
       NOT   = INVERT              x = a                     7450      A1 = 0  => x = 1, A1 = 1  => x = 0
                                       _______
       NAND  = NOT AND             x = (a * b)               7400      A1 = 0, A2 = 1  => x = 1, A1 = 1, A2 = 1  => x = 0
                                       _______
       NOR   = NOT OR              x = (a + b)               7402      A1 = 0, A2 = 1  => x = 0, A1 = 1, A2 = 1  => x = 0
                                        _             _
       XOR   = Exclusive OR        x = (a * b) + (a * b)     7486      A1 = 0, A2 = 1  => x = 1, A1 = 1, A2 = 1  => x = 0
                                        _   _
       XNOR  = Exclusive NOR       x = (a * b) + (a * b)     74266     A1 = 0, A2 = 1  => x = 0, A1 = 1, A2 = 1  => x = 1




O2.    Timer & Clock ICs

- 0.139u3            : Timers get rescheduled only if enable state has changed (timer.c) [Christophe Jaillet]. Aaron Giles added an integral device_timer_id to device timers. This is a cleaner way to differentiate between multiple timers rather than relying on the pointers. These values are also saved with the timers. Updated the few devices using device timers to leverage this. Added new function device_timer_call_after_resynch() which creates a temporary 0-length timer that calls back through the device's device_timer() method with a given device_timer_id.
- 0.127u5            : Aaron Giles added generic timer devices, which simply allocate a timer but don't prime it. This is the preferred method for allocating timers and may eventually be the only mechanism for doing so in the future.
- SOURCE: emu\timer.cpp



O2.1   NE555

- 0.134u2            : DISCRETE_555_MSTABLE - optimized speed and added new operating modes [Derrick Renaud].
- 0.127u2            : Optimized DISCRETE_RCINTEGRATE and DISCRETE_555_ASTABLE. Optimized DISCRETE_555_ASTABLE_CV and DISCRETE_MIXER. Optimized DISCRETE_555_CC. The 555 and mixer changes also speed up just about every current discrete game [Derrick Renaud].
- 0.106u2            : Discrete sound updates [Derrick Renaud]: Created new DISCRETE_555_VCO1 module. This is the 555&Op-amp oscillator circuit used by Borderline.
- 0.99u6             : Discrete sound update: Fixed DSD_555_ASTBL__R2.
- 0.99u2             : Derrick Renaud fixed the discrete sound 555 timer modules when using actual DC mode.
- 0.89               : Discrete Sound Update [Derrick Renaud]. Added new Discrete Modules: DISCRETE_555_ASTABL has been modified to remove control voltage support and DISCRETE_555_ASTABL_CV has been added if control voltage is used.
- 0.88u2             : Derrick Renaud added to DISCRETE_555_ASTABLE an option to use quick charge diode (will be needed for Frogs) and an option to disable oscillation if R1 (charge) is out of circuit (will be needed by Invaders). Modified DISCRETE_555_CC to discharge cap due to natural losses if there is no charging current (needed by Frogs). This makes it more accurate then the current perfect cap that will retain a charge forever. Modified all current drivers to use new code. Added the new discrete module DISCRETE_555_MSTABLE (555 monostable simulation).
- 0.80u2             : Discrete Sound System updates [Aaron Giles, Derrick Renaud]. Aaron: * major internal cleanup and reworking of how nodes are created, fixed bug in 555 timer that led to whiny noise in Hit Me.
- 0.80               : Discrete sound updates [Derrick Renaud]: DISCRETE_555_ASTABLE - changed to use common options with DISCRETE_555_CC. New Discrete Modules Added: DISCRETE_555_CC - Constant Current based 555 VCO with 8 main configurations, that automatically configure from components used.
- 0.68               : Discrete sound system update [Keith Wilkins, Derrick Renaud and Frank Palazzolo]: DISCRETE_555_AST (555 astable generator with squarewave or cap charge out).
- SOURCE: sound\discrete.c + disc_dev.cpp
- PCB: Buckrog, Fantasy, Mrjong, Vsgongf, Crballon - bit 6 sound related (to 555), Ckong - 555 timer chip hacked directly to the board for a "speed control" feature - turn the pot to change the game's speed, Poker2 - sound probably discrete with ne555 timer chip (located near amp/volume control)
- PCB: 555 (Buckrog), NE555 (Headoni, Suprridr), NE555P (Mtrap, Pangofun, Spacefrt), NEC uPD555 (11beat, Mtetrisc)


O2.2   NE556
- NOTES: audio\firetrk.c: Siren is built around a 556 based VCO, the 4 bit input value is smoothed between transitions by a 10u capacitor.
- PCB: 556 (Shuttlei, Naughtyb, Rockclim), NE556A (Headon2), NE556A944 (Astrof), LM556CN (Astrof)


O2.3   NE558
- PCB: NE558, SOIC16(A51site4)



O2.4   NE566

- 0.134u2            : Derrick Renaud started making a more accurate simulation of the DISCRETE_566 based on testing of a real IC. This makes the rest of Sky Raider sounds work.
- 0.80               : Discrete sound updates [Derrick Renaud]: DISCRETE_566 - NE566 simulation.
- SOURCE: sound\discrete.c + disc_dev.cpp
- NOTES: audio\asteroid.c: The slow VCO is implemented with a 555 timer and a 566 is used for the higher VCO.



O2.5   MC6840

- 0.258              : Zerofill variables at device start. Clear output ports at reset [hap].
- 0.249              : Fixed unsigned comparison [AJR].
- 0.246              : Fixed a number of bugs in the 6840 PTM emulation. Fixed one-shot behavior and timer enabling when switching to internal clock. Fixed counter duration and fixed output behavior in single-shot and dual-8-bit modes [Ryan Holtz].
- 0.226              : Initialized array to fix listxml and validate crash. Updated m_gate initialization. It seems to fix the remaining on and off crashes in (MESS) Fairlight CMI IIx [Osso].
- 0.223              : Fixed a couple of issues related to the T3 divisor [Ryan Holtz].
- 0.219              : Added specific logging channels [Ryan Holtz, Phil Bennett].
- 0.207              : Simplified read/write handlers [AJR].
- 0.203              : Fixed dual byte mode once again. Two problems in dual byte mode: The high time flag is the same for all counters. High time flag is reset on each counter reload, but should only be reset if the timer is reload by the user [hp9k].
- 0.202              : Fixed output pins in Dual 8 bit mode. In Dual 8 bit mode the output isn't inverted on every TC, instead it's low until the count reaches 0xff, and high afterwards [Sven Schnelle]. It's generally not a great idea to do integer ops on bool - it implicitly casts to/from int and may perform poorly (machine\6840ptm.cpp; ptm6840_device::timeout) [Vas Crabb].
- 0.201              : Removed MCFG macros and old DEVCB [Ryan Holtz].
- 0.199              : Fixed divide-by-8 mode. In divide-by-8 mode the value computed in compute_counter() is wrong because the function doesn't divide the clock before the calculation [Sven Schnelle].
- 0.195              : Stop defaulting external clocks to 1 Hz. Fully configure MC6840 timer to pass self-test for (MESS) Panafacom Duet-16. Counter/timers are numbered from 1 to 3, not 0 to 2 as with 8253. Renamed OUT0, OUT1 and OUT2 callback configuration macros to match pin names (O1, O2 and O3). Updated all verbose logging messages to be one-based. Removed unnecessary mentions of device type in logging messages [AJR].
- 0.190              : Fixed MC6840 so that LOG_OUTPUT_FUNC can be defined as printf [Joakim Larsson Edstroem].
- 0.186              : Changed description to 'MC6840 PTM'.
- 0.181              : Use standard device clock for internal clock [Dirk Best].
- 0.179              : Changed WRITE8 to WRITE_LINE for single-bit outputs. Changed 6840ptm to use an array of devcb_write_line [Ryan Holtz].
- 0.178              : Fixed channel card memory tests in (MESS) CMI IIx. Load the counter when held in reset (machine\6840ptm.cpp) [Ryan Holtz].
- 0.154              : Converted ptm6840_device to DEVCB2 [Osso].
- 0.148u2            : Fixed uninitialized members in machine\6840ptm.c [Oliver Stoeneberg].
- 0.142u3            : James Wallace fixed 6840PTM mode check in set_gate(). Angelo Salese converted Ginga Ninkyouden to use proper 6840 PTM device.
- 0.140u2            : 6840PTM status register update fixes [Hans Ostermeyer].
- 0.139u2            : Harmony updated the PTM 6840 device to no longer be legacy.
- 0.137u3            : Phil Bennett fixed 6840PTM interrupt flag behaviour and now allow fractional input clocks. Lord Nightmare added partial 6840ptm readback support to exidy.c.
- 0.131u4            : Fabio Priuli converted Motorola 6840PTM to be a MAME device.
- 0.124u1            : Phil Bennett fixed interrupt handling and 16-bit memory accessors in 6840ptm.c. Also cleaned up code for the sake of readability.
- 0.123u2            : James Wallace fixed a few corner cases in the 6840 emulation based on running the MPU4 test ROMs, and added the ability to dynamically alter the external clock frequencies in game.
- 0.122u8            : James Wallace changed 6840 interrupt handling to work like the recent 6821 changes. Updated MPU4 driver accordingly. Updated Scorpion 2 driver to match MPU4 coding style.
- 0.116u1            : Atari Ace fixed a number of errors and simplified the code significantly in the ptm6840 code.
- 0.108u3            : El Condor fixed 6840 counter behavior in continuous mode.
- 0.108u2            : El Condor tidied up the 6840 emulator a bit.
- 0.107u3            : More improvements to the 6840 timer module. Updated the MPU4 driver to the most recent implementation. Convert Cosmic Chasm over to using the new system [El Condor].
- 0.106u12           : El Condor fixed interrupt clearing function in 6840 module.
- 0.106u8            : More generic 6840 module improvements [El Condor].
- 0.106u5            : More generic 6840 improvements [El Condor].
- 0.106u1            : El Condor fixed MSB accesses and latch reading in the 6840 emulator.
- 0.105u5            : More improvements to the BFM driver and the 6840 timer emulation [El Condor].
- 0.105u4            : El Condor cleaned up 6840 implementation and revised Bellfruit Scorpion 2 driver's handling of unmapped regions. Also updated the MPU4 memory map.
- 0.103u2            : Added machine\6840ptm.c/h. Driver by El Condor based on previous work by Aaron Giles, 'Re-Animator' and Mathis Rosenhauer.
- NOTES: Motorola 6840 PTM (Programmable Timer Module). A 6840PTM is used for internal timing in the MPU4 boards (mpu4.c), one of it's functions is to act with an AY8913 chip as a crude DAC device.
- DRIVERS: arachnid.cpp, beezer.cpp, cchasm.cpp, esripsys.cpp, ginganin.cpp, goldngam.cpp, guab.cpp, jpmsys5.cpp, jpmsys5sw.cpp, mcr68.cpp, mpu3.cpp, mpu4avan.cpp, mpu4bwb.cpp, mpu4concept.cpp, mpu4crystal.cpp, mpu4dealem.cpp, mpu4empire.cpp, mpu4mdm.cpp, mpu4misc.cpp, mpu4mod2sw.cpp, mpu4mod4oki.cpp, mpu4mod4yam.cpp, mpu4plasma.cpp, mpu4union.cpp, mpu4unsorted.cpp, mpu4vid.cpp, sigmab31.cpp, sigmab52.cpp, starrider.cpp, vpoker.cpp and zwackery.cpp
- SOURCE: machine\6840ptm.cpp


O2.6   MB8873
- NOTES: The MB-8873E is a timer IC.
- Games: Ginga NinkyouDen (Jaleco 1987)


O2.7   8253

- 0.283              : Hookup PIT8253 device to (NESS) bus\pc98_cbus\amd98.cpp [Angelo Salese].
- 0.278              : Fixed (MESS) 'Victor 9000' 8253 PIT input clock rates and connect outputs to uPD7201 serial interface [freitz85].
- 0.265              : Fixed old regression with mode 3 and odd timer count (machine\pit8253.cpp) [hap].
- 0.241              : Prevent elapsed_cycles from going negative [Carl].
- 0.224              : Added explicit synchronization to all writes. Cleaned up some timing calculations to avoid double<->attotime conversions. Fixed cycles computation error due to using floating-point [Aaron Giles].
- 0.215              : Introduced logmacro.h based logging [Joakim Larsson Edstrom].
- 0.214              : Minor refactor [Patrick Mackinlay].
- 0.207              : MCFG and MACHINE_CONFIG removals [Ryan Holtz].
- 0.206              : Default input clocks to zero [AJR].
- 0.199              : Use Intel 8253 PIT device in balsente.cpp and clean up names [AJR].
- 0.196              : Converted counters to subdevices [AJR].
- 0.188              : Added 'Faraday FE2010 PIT' device (machine\pit8253.cpp). Handle slight Faraday FE2010 PIT incompatibility for (MESS) Commodore PC10 in PIT8253 [Carl].
- 0.186              : Changed description to 'Intel 8253 PIT'.
- 0.181              : Reading back the count while in the middle of a 16-bit write returns a xor'ed version of the value written. Fixes (MESS) Apricot PC error 29 [Dirk Best].
- 0.180              : MSB-only counter writes need to lower outputs in mode 0 [AJR].
- 0.179              : Eliminated device name from logging messages [AJR].
- 0.165              : Try to prevent mode 2 triggering twice in PIT8253 [Carl].
- 0.155              : Small cleanup. Fixed an assert and regression [hap].
- 0.154              : Fixed usage of uninitialized members in pit8253_device [Oliver Stoeneberg].
- 0.153              : Converted PIT8253 to DEVCB2. Initialise m_clk0/m_clk1/m_clk2 to zero [smf]. Fixed Leland games crashing regression (MCFG_PIT8253) [Osso]. Cleanup [Curt Coder].
- 0.149u1            : Fixed PIT8253 null counter reset, fixes (MESS) grub invaders [Dirk Best].
- 0.149              : Modernized the PIT8253 device (drivers\chihiro.c, laserbas.c, pcxt.c, vertigo.c, includes\vertigo.h, machine\pcshare.c and vertigo.c) [Fabio Priuli].
- 0.147              : Added '8253 PIT' device (machine\pit8253.c).
- 0.136u4            : Dirk Best updated PIT8253 device to use DEVCB calls, cleanups.
- 0.136u1            : Miodrag Milanovic updated PIT8253 counter even if there was no elapsed cycles (this only affects fast drivers like at586 in MESS).
- 0.128u6            : Writes to a PIT8253 timer control word always restart the timer. Added MDRV_PIT8253_ADD macro [Wilbert Pol].
- 0.126u4            : Wilbert Pol set the initial 8253 timer output to 2 to indicate that it is undetermined.
- 0.126u1            : pit8253 updates [Wilbert Pol]: Changed the implementation to use timers internally. Removed the frequency change callbacks.
- 0.124u1            : Wilbert Pol converted the PIT8253 implementation into a device. To make it easier to use I've also created a src\emu\devconv.h in the same style as src\emu\memconv.h.
- 0.102              : Mathis Rosenhauer fixed save/restore of 8253 PIT.
- 0.101u2            : Added machine\pit8253.c/h.
- NOTES: Intel 8253 PIT = Programmable Interval Timer
- PCB: NB5K8253 (LaserBase)
- DRIVERS: amusco.cpp, laserbas.cpp, pcxt.cpp, tiamc1.cpp and wacky_gator.cpp
- SOURCE: machine\pit8253.cpp


O2.8   8254

- 0.241              : Prevent elapsed_cycles from going negative [Carl].
- 0.194              : Added IRQ acks and PIT8254 for latter to madshark and magspeed. Use PIT8254 device in kamenrid and msgundam [AJR].
- 0.155              : Hooked up PIT8254 to one of the games as example [hap].
- 0.128u6            : Wilbert Pol added MDRV_PIT8254_ADD macro.
- 0.124u2            : Wilbert Pol removed the hardcoded dependency on a 8254 device from the 8042kbdc code. Changed the drivers using the 8042kdbc to define their own 8042kdbc - 8254 dependency.
- 0.101u3            : Removed machine\8254pit.c/h.
- 0.36b3             : Added machine\8254pit.c/h.
- NOTES: The 8254 is a programmable interval timer chip. Different to 8253: The 8254 has an additional readback feature.
- DRIVERS: ataxx.cpp, calchase.cpp, chihiro.cpp, fruitpc.cpp, funkball.cpp, gamecstl.cpp, gammagic.cpp, leland.cpp, lindbergh.cpp, mediagx.cpp, midqslvr.cpp, pangofun.cpp, pcat_dyn.cpp, pcat_nit.cpp, photoply.cpp, pinball2k.cpp, quakeat.cpp, queen.cpp, savquest.cpp, su2000.cpp, taitowlf.cpp, vertigo.cpp, voyager.cpp and xtom3d.cpp
- SOURCE: machine\pit8253.cpp


O2.9   NEC D71054
- NOTES: NEC uPD71054 programmable timer/counter chip (timer write handle, MACHINE_INIT and other functions)
- PCB: D71054C (Wrofaero)
- DRIVERS: naomi.cpp, segaufo.cpp and seta.cpp
- SOURCE: drivers\seta.cpp


O2.A   MC146818

- 0.269              : Implemented Valid RAM and Time (VRT) register (machine\mc146818.cpp) [Nigel Barnes].
- 0.260              : Split non-direct read and write handlers into more hardware-accurate handlers for address writes and data reads/writes. Note that address_r is not provided since the original IC makes no provision for reading data strobed with AS back. However, a getter has been provided for some situations where this may be dubiously possible [AJR].
- 0.252              : Use device_rtc_interface to acquire base time. Eliminated the set_binary_time configuration parameter (machine\mc146818.cpp). Added machine configuration option for synchronizing to UTC instead of local time (was previously only an option for mc146818, and always enabled for dp8573) (device_rtc_interface) [AJR].
- 0.230              : Improved update in progress handling [Patrick Mackinlay].
- 0.227              : Added square wave output [Patrick Mackinlay].
- 0.208              : Simplified read/write handlers (machine\mc146818.cpp) [AJR].
- 0.201              : Fixed problems with direct-access mode [R. Belmont].
- 0.200              : Support direct-access bus hookup method. This chip has 8 address/data lines and an address/data strobe. Most users hooked it up so the low-order address bit is the address/data strobe, allowing you to write an address and then read/write data at an adjacent address. But if you don't mind using a few more gates you can latch the low-order address bits from the CPU into the chip then latch the data in or out of it so it works just like a RAM. The (MESS) DECstation did this in their I/O ASICs [R. Belmont].
- 0.199              : Eliminated customized MCFG_MC146818_ADD macros [AJR]. Don't restart timer unnecessarily. Correct interrupt polarity. This change makes the MC146818/DS128x devices use the regular ASSERT_LINE/CLEAR_LINE protocol like almost all other devices, removing an unexpected surprise. The devices are fairly widely used, so I've tried to review all of those references and check if they're affected. A surprising number of systems appear to have the interrupt hooked up, but were not accounting for the inversion, so this change might possibly correct some behaviour. The behaviour of the following might change: calchase.cpp, hotstuff.cpp, mtouchxl.cpp, pcat_dyn.cpp, su2000.cpp, machine\pcshare.cpp, machine\sis85c496.cpp and bus\lpci\southbridge.cpp [Patrick Mackinlay].
- 0.191              : Fixed main interrupt flag [Jean-Francois DEL NERO].
- 0.174              : Fixed irqs in MC146818 [Carl].
- 0.167              : Fixed date and some other issues in MC146818 (new in MAME 0166) [Hans Ostermeyer, Carl].
- 0.166              : Optional binary default and epoch setting for MC146818 [Carl].
- 0.162              : Replaced vector.clear with memset in machine\mc146818.c. vector.clear() sets size to zero, causing a crash immediately upon next access [Peter Ferrie].
- 0.151              : Fixed the MC146818 modernisation so that local/utc & whether a century is stored in NVRAM can be specified in a sane way. Removed the century updating as this chip doesn't do that, but each driver can specify where the century should be stored. Fixed off by one errors in the date/time updating. Added support for different external clock speeds and dividers, the clock speeds have been set based on guesswork that the code would set the chip to update at 1Hz but this isn't necessarily true. Most flags have been implemented, so that timer updating can be disabled & irq generation should be correct. Support for different sized MC146818 compatibles. Call update_irq() after updating B & C register in device_reset [smf].
- 0.149u1            : Added 'MC146818 RTC' device. PC driver cleanup: Updated MC146818 RTC for DEVCB2 [Dirk Best].
- 0.145u2            : Set MC146818 period even if timer is disabled, required for Windows NT (MESS) [Carl].
- 0.145u1            : Hans Ostermeyer removed previous Apollo hack, fixed 32768 Hz UIP and updated MC146818.
- 0.143u3            : Removed MC146818 hacks [Hans Ostermeyer].
- 0.142u5            : Carl implemented IRQ callbacks for the MC146818 RTC.
- 0.142u3            : R. Belmont fixed uninitialized variable in MC146818 found by Valgrind.
- 0.140u2            : Hans Ostermeyer added MC146818 UTC mode, various enhancements and fixes.
- 0.139u3            : Made the MC146818 a proper device, modernized it, and added an NVRAM interface so that drivers don't have to ask it to be manually saved [Aaron Giles].
- 0.127u2            : Barry Rodewald added basic implementation of the "update ended" interrupt flag to the MC146818.
- 0.110u2            : Nathan Woods updated MC146818 module to use new core date/time routines.
- 0.101u2            : Added machine\mc146818.c/h. Implementation of the MC146818 [Nathan Woods, Peter Trauner].
- NOTES: MC146818 Real Time Clock (RTC) with battery buffered ram (or CMOS). Used in IBM PC/AT, several PC clones, Amstrad NC200. PC CMOS info (based on info from Padgett Peterson).
- DRIVERS: aristmk4.cpp, calchase.cpp, fruitpc.cpp, funkball.cpp, hotstuff.cpp, magtouch.cpp, mediagx.cpp, pangofun.cpp, paokaipc.cpp, pcat_nit.cpp, photoply.cpp, pinball2k.cpp, queen.cpp, rastersp.cpp and xtom3d.cpp
- SOURCE: machine\mc146818.cpp



O2.B   uPD1990AC

- 0.153              : Removed machine\pd4990a.c/h. upd1990/4990 improvements, most notably added serial command input. Hooked up proper uPD1990/4990 device to neogeo.c and neoprint.c [hap].
- 0.151              : Modernized uPD4990a device. Needs to be merged with upd1990a.c. Don't set time to 0 on reset [Osso].
- 0.149u1            : Shut up Clang compiler warning about unused private field in upd1990a_device [Oliver Stoeneberg].
- 0.149              : Converted uPD1990AC to DEVCB2 [Curt Coder].
- 0.148u2            : Fixed uninitialized members in machine\upd1990a.c [Oliver Stoeneberg].
- 0.148              : Angelo Salese added uPD4990A clone to the uPD1990A, renamed uPD4990A -> uPD4990A_OLD for the time being (core used by Neo-Geo / Neo-Print, will be nuked at some point).
- 0.147u4            : Preliminary support for Test Mode in upd1990a RTC device. Fixed Balance of Power (don't ask why the same exact MS-DOS version behaves differently on this ...). Perhaps PC-9801RS uses upd4990 instead, I don't know [Angelo Salese].
- 0.145u7            : Only latch CSx bits in uPD1990AC when STB is high. Removed unnecessary extra logging [R. Belmont].
- 0.142              : Added machine\upd1990a.c/h.
- 0.131u4            : Fabio Priuli partially converted NEC uPD4990A RTC to be a MAME device. Moved clock init to device_start.
- 0.104u6            : Added save state support to PD4990a device for NeoGeo [MAME Plus!].
- 0.34b1             : Added machine\pd4990a.c/h. NEC PD4990A support.
- NOTES: NEC uPD1990AC Serial I/O Calendar & Clock emulation. The NEC PD4990A is a serial I/O Calendar & Clock IC used in the NEO GEO and probably a couple of other machines.
- PCB: D4990A (NeoGeo)
- DRIVERS: neogeo.inc and neoprint.cpp
- SOURCE: machine\upd1990a.cpp


O2.C   PCF8593
- 0.148u2            : Moved mess\machine\pcf8593.c/h to mame\ [Curt Coder].
- NOTES: Philips PCF8593 CMOS clock/calendar circuit





O3.    RTC (Real Time Clock)

- 0.271              : Devirtualize set_current_time and cleaning up misuse (emu\dirtc.h) [AJR].
- 0.252              : Added machine configuration option for synchronizing to UTC instead of local time (was previously only an option for mc146818, and always enabled for dp8573) (device_rtc_interface) [AJR].
- 0.203              : Added leap year support (emu\dirtc.cpp) [Sven Schnelle].
- 0.179              : Soft resets no longer turn back clocks on devices (device_rtc_interface): Cleanups and refinements. Give RTCs their own phase of machine initialization, right after NVRAM loading. Make RTC feature flag overrides const, including one new one. Make rtc_clock_updated a required override [AJR].
- 0.156              : Call clock_updated() after increasing the minutes counter (emu\dirtc.c) [Sandro Ronco].
- 0.145u8            : Curt Coder added the clock counter chain and other common functions into device_rtc_interface, removing duplicated code in RTC implementations. Rewrote the Dallas DS1302 to support additional features needed by IDE64 in MESS.
- 0.142u2            : Added emu\dirtc.c/h. Curt Coder created device_rtc_interface which can be used to initialize RTC's to a certain date/time at driver startup, useful for regression testing. Implemented the interface in most of the modern RTC devices. Note: This is not yet plumbed down to the command line.
- NOTES: dirtc = Device Real Time Clock interfaces
- SOURCE: emu\dirtc.cpp


O3.1   DALLAS

O3.11  DS1221
- NOTES: The DALLAS DS1221 chip preserved Time and date.
- PCB: Ataxx


O3.12  DS1287

- 0.230              : Added 'DS1287 RTC' device. Improved update in progress handling (machine\mc146818.cpp) [Patrick Mackinlay].
- NOTES: DS1287 RTC
- DRIVERS: aristmk4.cpp
- SOURCE: machine\mc146818.cpp


O3.13  DS1302

- 0.228              : Changed description to 'Dallas DS1302 Trickle-Charge Timekeeping Chip'. Added DS1202 variant [AJR].
- 0.216              : Subtle fix for CE writes. Improved logging [AJR].
- 0.199              : Eliminated customized MCFG_DS1302_ADD macros [AJR].
- 0.186              : Changed description to 'DS1302 Timekeeper'.
- 0.154              : Fixed usage of uninitialized member in ds1302_device [Oliver Stoeneberg].
- 0.145u8            : Curt Coder added the clock counter chain and other common functions into device_rtc_interface, removing duplicated code in RTC implementations. Rewrote the Dallas DS1302 to support additional features needed by IDE64 in MESS.
- 0.139u2            : Added 'DS1302' device. Harmony updated the Dallas DS1302 RTC device to no longer be legacy.
- 0.131u4            : Converted Dallas DS1302 RTC to a device. Converted DS1302 to use devtemplate (emu\devtempl.h) [Fabio Priuli].
- 0.90               : Added machine\ds1302.c/h. DALLAS DS1302 emulation [ElSemi].
- NOTES: RTC+BACKUP RAM
- PCB: Dallas DS1302, DIP8 (Crysking)
- DRIVERS: crystal.cpp, ddz.cpp, itgamble.cpp, psattack.cpp
- SOURCE: machine\ds1302.cpp


O3.14  DS1307

- 0.279              : Added machine\ds1307.cpp/h. Added I2C DS1307 RTC/SRAM. Used the device in (MESS) Spectrum Next [holub].
- DRIVERS: (MESS) specnext.cpp
- SOURCE: machine\ds1307.cpp


O3.15  DS1386

- 0.259              : Removed non-existant set_current_time fn override (machine\ds1386.h) [Angelo Salese].
- 0.245              : Made machine\ds1386.cpp usage of m_member prefix consistent and moved register #defines into header enums [Ryan Holtz].
- 0.221              : Simplified handlers [Osso].
- 0.213              : Added 'DS1386-32K RAMified Watchdog Timekeeper' device. Fixed bcd wrap in machine\timehelp.h [Patrick Mackinlay].
- 0.211              : Make initialization of RTC registers from system time actually work; adopt more useful default value for command register [AJR].
- 0.199              : Eliminated customized MCFG_DS1386_ADD macros [AJR].
- 0.179              : Added machine\ds1386.cpp/h. Added Dallas DS1386-8K and DS1386-32K timekeepers (largely untested) [Ryan Holtz].
- NOTES: Dallas DS1386/DS1386P RAMified Watchdog Timekeeper
- DRIVERS: atronic.cpp
- SOURCE: machine\ds1386.cpp


O3.16  DS1397

- 0.253              : Added DS1397 variant [Patrick Mackinlay].
- NOTES: DS1397 RAMified RTC
- DRIVERS: (MESS) luna_88k.cpp
- SOURCE: machine\mc146818.cpp


O3.17  DS1643

- 0.273              : Fixed wrong constructor (ds1643_device). Fixes (MESS) m8120 crash at start [hap].
- 0.255              : Added Dallas DS1643, a clone of the STMicro M48T58 (machine\timekpr.cpp) [Ryan Holtz].
- NOTES: DS1643 Nonvolatile Timekeeping RAM
- PCB: DALLAS DS1643-100 (Heatof11)
- DRIVERS: konamim2.cpp and (MESS) 600cat.cpp
- SOURCE: machine\timekpr.cpp


O3.18  DS1994

- 0.245              : Converted machine\ds1994.cpp to use logmacro [Ryan Holtz].
- 0.214              : Added FIXME comments. Removed redundant tag from logging helper. Correct device name. Removed copy/pasted application note (copyright infringement) [Vas Crabb].
- 0.210              : Added machine\ds1994.cpp/h. Added DS1994 device. Cleaned up and standarized the code [Grull Osgo].
- NOTES: RTC + BACKUP RAM + 1-Wire Protocol
- DRIVERS: amaticmg.cpp
- SOURCE: machine\ds1994.cpp


O3.19  DS2401

- 0.175              : Support DS2400-compatibility command 0x0F to read serial no (machine\ds2401.cpp) [Vas Crabb].
- 0.155              : Fixed usage of uninitialized members in ds2401_device [Oliver Stoeneberg].
- 0.148u5            : Modernised DS2401. Fixed variable and parameter conflict [smf].
- 0.141u3            : Fixed DS2401 timer intervals [smf].
- 0.124u1            : smf fixed DS2401 state loading now that the digital I/O board's serial number has been changed to a const by not saving it. As the serial number cannot be changed at run time it was rather pointless.
- 0.112u3            : Added mame\machine\ds2401.c/h. smf added DS2401 emulation (Konami System 573).
- DRIVERS: goldstar.cpp, hornet.cpp, ksys573.cpp
- SOURCE: machine\ds2401.cpp


O3.1A  DS2404

- 0.221              : Simplified handlers [Osso]. NOTE: This device implements a parallel interface provided by the Seibu SEI600 for the convenience of SPI emulation. It does not implement the 1-Wire protocol actually used with that ASIC, nor does it implement the alternate 3-Wire serial interface [AJR].
- 0.199              : Eliminated customized MCFG_DS2404_ADD macros [AJR].
- 0.189              : Provide full chip name and standard oscillator frequency (machine\ds2404.cpp) [AJR].
- 0.149u1            : hap fixed DS2404 DEBUG crash.
- 0.149              : Removed DS2404 and EEPROM from hardware that doesn't have them (drivers\seibuspi.c) [hap].
- 0.147u1            : Get rid of DS2404 trampoline code [hap].
- 0.139u2            : Harmony updated the Dallas DS2404 RTC device to no longer be legacy.
- 0.135u4            : Aaron Giles converted the DS2404 to a device.
- 0.81u7             : Added machine\ds2404.c/h. Ville Linde added preliminary Dallas DS2404 (RTC/CMOS) emulation to the Seibu SPI system.
- NOTES: RTC + NVRAM
- PCB: Dallas DS2404S EconoRAM Time Chip, SOIC16 (Rfjet, Ejanhs)
- DRIVERS: seibuspi.cpp
- SOURCE: machine\ds2404.cpp


O3.1B  DS12885

- 0.208              : Simplified read/write handlers (machine\ds128x.cpp) [AJR].
- 0.206              : Added device ds12885ext same as ds12885 but 256 bytes ram [yz70s].
- 0.200              : Removed MCFG macros (machine\ds128x.h) [Vas Crabb].
- 0.192              : Fixed DS128X/DS1288X main frequency divider. The output frequency must be fixed to 1HZ with these devices. In the MC146818, DV2-DV0 were used to select the input frequency to provide a proper time base. Since the DS12885/87 and DS1685/87 use only the 32.768kHz crystal these 3 bits are used to turn the oscillator on or off and to reset the countdown chain. There are not used anymore to select the main clock divider value [Jean-Francois DEL NERO].
- 0.186              : Changed description to 'DS12885 RTC/NVRAM'.
- 0.151              : Added machine\ds128x.c/h. Support for different sized MC146818 compatibles ('DS12885') [smf].
- NOTES: DS12885 RTC/NVRAM
- DRIVERS: calchase.cpp, mtouchxl.cpp, pcat_dyn.cpp, savquest.cpp and su2000.cpp
- SOURCE: machine\ds128x.cpp


O3.1C  DS17x85

- 0.213              : Added machine\ds17x85.cpp/h. Added 'DS17285 RTC', 'DS17287 RTC', 'DS17485 RTC', 'DS17487 RTC', 'DS17885 RTC' and 'DS17887 RTC' devices. Added device emulation for DS17x85 series of MC146818-compatible RTCs with additional features [AJR].
- NOTES: Dallas DS17x85/DS17x87 Real Time Clocks with extended NVSRAM. These MC146818-compatible RTCs overlay the last 64 bytes of user RAM (not provided by the MC146818) with a second page of registers, including a Y2K-updated century count and registers for indirectly accessing extended SRAM which is backed with a separate auxiliary battery power input. The DS1685 and DS17x85 use conventional PDIP/SO/TSOP packages, while the DS1687 and DS17x87 integrate battery, oscillator and chip into one of Dallas's trademark EDIPs. They are indistinguishable from the perspective of software.
- PCB: Hitpocker - DALLAS REAL TIME CLK DS17487-5
- DRIVERS: hitpoker.cpp
- SOURCE: machine\ds17x85.cpp





O3.2   Epson

O3.21  3520

- 0.252              : Use device_rtc_interface to acquire base time (machine\s3520cf.cpp) [AJR].
- 0.218              : Various fixes and improvements [MetalliC].
- 0.186              : Changed description to 'Seiko Epson S-3520CF RTC'. Removed timer_pulse [Osso].
- 0.147              : Added machine\s3520cf.c/h. Added 'S-3520CF RTC' device. Written a preliminary S-3520CF RTC chip device, used by Nintendo Super System. Give the RTC some life [Angelo Salese].
- PCB: Seiko Epson S-3520 Real Time Clock, SOIC14 (NintendoSuperSystem)
- DRIVERS: nss.cpp and sfcbox.cpp
- SOURCE: machine\s3520cf.cpp


O3.22  4543

- 0.176              : More complete R4543 RTC implementation with better logging features. Added JRC6355E RTC variant used by Fever Soccer. Correct JRC6355E implementation to agree with NJU6355 datasheet. RTC writes and reads in Fever Soccer both fully work now [AJR].
- 0.155              : Fixed array out of bounds access [hap].
- 0.148              : Fixed wrong day shown (rtc_clock_updated day_of_week is 1-7), and possible array out of bounds access [hap].
- 0.147u1            : Added machine\rtc4543.c/h. Made Epson R4543 RTC a proper RTC device, eliminates duplicated code in Namco Systems 12 and 23 [R. Belmont].
- PCB: EPSON R4543 Real Time Clock Module, SOIC14 (Gp500, NamcoSystem12, NamcoSystem23)
- DRIVERS: feversoc.cpp, namcos12.cpp and namcos23.cpp
- SOURCE: machine\rtc4543.cpp


O3.23  4553

- 0.218              : Added 'Epson RTC-4553 RTC/EEPROM' device. Various fixes and improvements (machine\s3520cf.cpp). Added RTC-4553 to musclhit. Promoted game to working [MetalliC].
- 0.147              : Added machine\s3520cf.c/h.
- DRIVERS: konamigs.cpp
- SOURCE: machine\s3520cf.cpp


O3.24  9701

- 0.252              : Use device_rtc_interface for system time acquisition (machine\rtc9701.cpp) [AJR].
- 0.186              : Changed description to 'Epson RTC-9701-JE RTC/EEPROM'. Removed timer_pulse [Osso].
- 0.155              : Fixed usage of uninitialized members in rtc9701_device [Oliver Stoeneberg].
- 0.143u8            : Added machine\rtc9701.c/h. Added 'RTC-9701' device. Wrote a basic core for Epson RTC-9701 device chip [David Haywood, Angelo Salese].
- DRIVERS: cv1k.cpp
- SOURCE: machine\rtc9701.cpp


O3.25  62421

- 0.186              : Changed description to 'Epson RTC-62421 RTC'.
- 0.180              : Added 'RTC-62421' device. Hook up RTC-62421 to d9final and correct a few input types [AJR].
- DRIVERS: d9final.cpp and ddenlovr.cpp
- SOURCE: machine\msm6242.cpp


O3.26  62423

- 0.186              : Changed description to 'Epson RTC-62423 RTC'.
- 0.180              : Added 'RTC-62423' device (machine\msm6242.cpp).
- 0.146u5            : Hooked up Epson 62423 RTC device to Hyper Neo Geo 64. Made 24/12h bit register to be correctly activated in Epson 62423 RTC device [Angelo Salese].
- PCB: EPSON RTC62423, SOP24 (NeoGeoHyper64)
- DRIVERS: hng64.cpp
- SOURCE: machine\msm6242.cpp


O3.27  65271

- 0.252              : Use device_rtc_interface to acquire base time (machine\rtc65271.cpp) [AJR].
- 0.233              : Allow for default NVRAM data initialization using external data [Windy Fairy].
- 0.221              : Added intrq_r method to query interrupt state. Use existing interrupt flag for intrq_r (machine\rtc65271.cpp) [Michael Zapf].
- 0.208              : Simplified read/write handlers (machine\rtc65271.cpp) [AJR].
- 0.186              : Changed description to 'Epson RTC-65271 RTC'.
- 0.153              : Converted RTC65271 to DEVCB2 [Osso].
- 0.147u3            : Some minor fixes so Firebeat's RTC65271 check passes (you must delete the "rtc" file from your NVRAM for this to become effective) [R. Belmont].
- 0.145              : Added 'RTC-65271' device. Converted RTC65271 to a modern devices [Miodrag Milanovic].
- 0.135u4            : Aaron Giles converted RTC65271 to a device.
- 0.110u5            : Added machine\rtc65271.c/h. Added Epson RTC65271 emulation [Raphael Nabet].
- NOTES: Epson RTC-65271 RTC
- DRIVERS: firebeat.cpp and twinkle.cpp
- SOURCE: machine\rtc65271.cpp


O3.28  72421

- 0.180              : Make RTC-7242x nominally distinct device type. Replaced custom RTC-72421 emulation with device in Model 3. Hook up RTC-72421 to (MESS) CBM HD [AJR].
- 0.90u2             : Ville Linde added Epson RTC-72421 emulation.
- NOTES: 4-bit RTC-Modul 10ppm
- PCB: RTC 72421B   4382, DIL18 (Ddenlovr)


O3.29  72423
- 0.180              : Make RTC-7242x nominally distinct device type [AJR].
- PCB: RTC72423 (Harley, SegaModel3)




O3.3   Motorola

O3.31  MPC948
- PCB: The Motorola MPC948 is a low voltage clock chip (Gauntleg, Gauntdl).


O3.32  MPC950
- PCB: MPC950, QFP32  (Harley)


O3.33  MCCS1850

- 0.245              : Removed inline overuse [Ryan Holtz].
- 0.154              : Fixed MCCS1850 multi-write. Setup the time [O. Galibert].
- 0.153              : Converted MCCS1850 to DEVCB2 [Curt Coder].
- 0.148u2            : Fixed uninitialized member in machine\mccs1850.c [Oliver Stoeneberg].
- 0.142u3            : Added machine\mccs1850.c/h. Curt Coder added MCCS1850 RTC emulation and added support for default NVRAM in MCCS1850.
- NOTES: Motorola MCCS1850 Serial Real-Time Clock emulation
- DRIVERS: (MESS) next.cpp
- SOURCE: machine\mccs1850.cpp



O3.4   National Semiconductor

O3.41  MM58167

- 0.246              : Set day/month counters reset to 1 [Patrick Mackinlay].
- 0.241              : Minor code changes, formatting and comments (machine\mm58167.cpp) [Sergey Svishchev].
- 0.226              : Enable and use MM58167 IRQs [Rob Justice].
- 0.156              : Implemented MM58167 IRQs and counters write, this allow to pass the (MESS) K803 RTC diagnostic test. Initialize IRQ control register on reset [Sandro Ronco].
- 0.153              : Added machine\mm58167.c/h. Preliminary support for National Semiconductor MM58167 real-time clock/calendar [R. Belmont].
- NOTES: MM58167 Real-Time Clock
- DRIVERS: (MESS) apple3.cpp, cgc7900.cpp, gimix.cpp and kaypro.cpp
- SOURCE: machine\mm58167.cpp


O3.42  MM58174

- 0.278              : Improved chip emulation based on data sheet (machine\mm58174.cpp) [Mark Garlanger].
- 0.230              : Initialized interrupt control register (prevents fatal error in wicat on some builds). Set interrupt period to attotime::never instead of zero when lower 3 bits of control register are 0. Eliminated device_reset method (IC does not have a reset input) [AJR].
- 0.222              : Added machine\mm58174.cpp/h. Added MM58174 real time clock [Sergey Svishchev].
- NOTES: National Semiconductor MM58174 Microprocessor Compatible Real Time Clock.
- DRIVERS: (merit.cpp)
- SOURCE: machine\mm58174.cpp


O3.43  MM58274

- 0.252              : Use device_rtc_interface to acquire base time. Correct operator precedence in calculating m_clk_set and allow disabling side effects of status read [AJR].
- 0.221              : Added MM58274C RTC to 'Montana Super Draw (4436-05, U5-0)' [Osso].
- 0.154              : Updated MM58274C to use inline configs [Fabio Priuli]. Fixed usage of uninitialized members in mm58274c_device [Oliver Stoeneberg]. Removed some unused macros [Osso].
- 0.149              : Modernized the MM58274C RTC device [Fabio Priuli].
- 0.148u2            : Moved mess\machine\mm58274c.c/h to emu\machine [Curt Coder].
- NOTES: National Semiconductor MM58274C RTC
- DRIVERS: merit.cpp
- SOURCE: machine\mm58274c.cpp



O3.5   NEC

O3.51  uPD4991

- 0.236              : Added a preliminary uPD4991a parallel RTC, used by (MESS) pc98ha [Aaron Giles].
- NOTES: NEC uPD4991/uPD4991a parallel RTC
- DRIVERS: (MESS) pc98ha.cpp
- SOURCE: machine\upd4991a.cpp


O3.52  uPD4992

- 0.223              : Fixed initializations issues that were causing problems in DEVNOCLEAR debug builds (machine\upd4992.cpp) [Osso].
- 0.220              : Simplified handler signatures. Don't default clock configuration [AJR].
- 0.152: Added machine\upd4992.c/h. Added a core for uPD4992 RTC, used by Othello Derby and Power Kick [Angelo Salese].
- NOTES: uPD4992 RTC
- DRIVERS: seta.cpp, seta2.cpp and toaplan2.cpp
- SOURCE: machine\upd4992.cpp



O3.6   OKI

O3.61  MSM6242

- 0.247              : Fixed interrupt output pulse duration [Paul Arnold].
- 0.220              : Simplified handler signatures and use shorter type name [AJR].
- 0.195              : Added MSM6242 RTC and fixed EEPROM type to X-Day 2 [Angelo Salese]. Use MSM6242 RTC device in luckgrln.cpp. De-assert interrupt output when the IRQ flag is cleared [AJR].
- 0.186              : Changed description to 'OKI MSM6242 RTC'.
- 0.180              : Added MSM6242 pin diagrams for good measure. Make RTC-6242x nominally distinct device type [AJR].
- 0.153              : Updated MSM6242 device to use DEVCB2 [Osso].
- 0.148              : Fixed MSM6242 RTC regressions regarding interrupt callbacks [Nathan Woods]. Fixed hang on savestate load (machine\msm6242.c) [Phil Bennett].
- 0.147u4            : MSM6242 cleanups and basic modernizations in preparation for other work. Implemented save states. Changing to be based on dirtc.h (machine\msm6242.c). Modernized the MSM6242 RTC code. Timer now only fires when it needs to (i.e. - trigger an interrupt). This should result in performance gains for games/systems using this code [Nathan Woods].
- 0.145              : Angelo Salese added work-around for MT04656 (Various Sets: "Timer Error" shows before start of game each time, showing odd time during setting).
- 0.144u4            : Modernized MSM6242 RTC device, added incrementing time, added preliminary IRQ generation to the MSM6242, updated drivers that uses it accordingly and removed various related kludges [Angelo Salese].
- 0.129u4            : Couriersud fixed the MSM6242 RTC ignores AM/PM bit.
- 0.125u1            : Dirk Best fixed crash in Dynax games due to missing MSM6242 device.
- 0.124u5            : Dirk Best converted the MSM6242 RTC into a proper device.
- 0.118u1            : MSM6242 updates [Ernesto Corvi]: Added support for 12/24 hour mode. Added support for the HOLD bit.
- 0.111u1            : Added machine\msm6242.c/h. Luca Elia moved MSM6242 real time clock to its own file.
- PCB: REAL TIME CLOCK MSM6242 (Hanakanz), RTC M6242B (Pkgnsh, Quizchq, Yarunara), M62X42B (Meosism), M62X42 (suprnova.c), 6242 (Mmpanic), OKIM62X42B (Skattv)
- DRIVERS: adp.cpp, bingor.cpp, cops.cpp, ddenlovr.cpp, dynax.cpp, ggconnie.cpp, joystand.cpp, magicard.cpp, manohman.cpp, namcona1.cpp, royalmah.cpp, suprnova.cpp and vlc.cpp
- SOURCE: machine\msm6242.cpp


O3.62  MSM5832

- 0.215              : Simplified handlers [AJR].
- 0.199              : Eliminated customized MCFG_MSM5832_ADD macros in amusco.cpp [AJR].
- 0.186              : Changed description to 'OKI MSM5832 RTC'.
- 0.180              : More accurate MSM5832 WR emulation [AJR].
- 0.179              : Removed MSM5832 device name from logging messages [AJR].
- 0.178              : Added 'MSM5832' device (machine\msm5832.cpp).
- 0.177              : Fixed MSM5832 RTC hookup in (MESS) Fairlight CMI IIx [Ryan Holtz].
- 0.155              : Day of week is 0-6, not 1-7 [R. Belmont].
- 0.153              : Fixed MSM5832 array out of bounds access [hap].
- 0.142u1            : Added machine\msm5832.c/h. Imported MSM5832 RTC from MESS [Curt Coder].
- NOTES: OKI MSM5832 Real Time Clock/Calendar.
- DRIVERS: amusco.cpp
- SOURCE: machine\msm5832.cpp


O3.63  MSM58321

- 0.222              : Initialized one variable which was causing problems for some driver in (MESS) fmtowns.cpp in DEVNOCLEAR build [Osso].
- 0.201              : Added MSM58321 RTC to (MESS) Textel Compact A1010 [AJR].
- 0.198              : Correct duty cycle for busy output [AJR].
- 0.180              : Added pinout for RTC58323 [AJR].
- 0.154              : Fixed usage of uninitialized members in msm58321_device [Oliver Stoeneberg].
- 0.153              : Converted MSM58321 to DEVCB2, uses level logic rather than edge detection for strobes (as per datasheet), added NVRAM interface as there are some configuration bits to save, added support for 12 and 24 hour. It defaults to 12 hour, but you can configure it in the driver to default to 24H. You can configure what year 0 is in the driver, which is used when setting the date at startup. Added preliminary stop and reset to MSM58321 [smf].
- 0.148u2            : Fixed uninitialized member in machine\msm58321.c [Oliver Stoeneberg].
- 0.142u1            : Added machine\msm58321.c/h.
- NOTES: OKI MSM58321RS Real Time Clock/Calendar.
- DRIVERS: (MESS) clcd.cpp, duet16.cpp, fmtowns.cpp, micro20.cpp, pc100.cpp, textelcomp.cpp and v1050.cpp
- SOURCE: machine\msm58321.cpp


O3.7   Other

O3.71  8521

- 0.221              : Simplified handlers [Osso].
- PCB: 8521 (Sonofphx) and TC8521AP (RTC?)
- SOURCE: machine\rp5c01.cpp


O3.72  V3021

- 0.223              : Changed description to 'EM Microelectronic-Marin SA V3021 RTC'. Support serial interface. Implemented RAM and address commands. Use device_rtc_interface for RTC handling (machine\v3021.cpp) [cam900].
- 0.221              : Simplified handlers [Osso].
- 0.186              : Removed timer_pulse [Osso].
- 0.144u1            : Added machine\v3021.c/h. Added 'V3021 RTC' device. Angelo Salese moved V3021 RTC emulation into a proper device, and made it to increment the time. Hooked this up into pgm.c and fortecar.c drivers.
- PCB: EM Microelectronic-Marin SA Ultra Low Power 32kHz CMOS V3021 Real Time Clock, DIP8 (PGM-System)
- DRIVERS: fortecar.cpp and pgm.cpp
- SOURCE: machine\v3021.cpp/h


O3.73  E05-16
- 0.253              : Fixed E050-16 RTC communications [Curt Coder].
- 0.142              : Added machine\e0516.c/h.
- NOTES: E05-16 Real Time Clock emulation


O3.74  PCF8583
- 0.228              : Replaced '24C02 I2C Memory' in Erotictac/Tactic with PCF8583 RTC device [Nigel Barnes].
- 0.227              : Reimplemented I2C protocol and added clock and alarm modes [Nigel Barnes].
- 0.222              : Switched Erotictac driver to use machine\pcf8583.cpp, which is not currently based on i2cmem.cpp but might be worth merging in the future [smf].
- 0.214              : Added 'PCF8583 RTC with 240x8 RAM' device (machine\pcf8583.cpp).
- 0.201              : Added machine\pcf8583.cpp/h. Added rudimentary Philips PCF8583 RTC emulation, based on the PCF8593 device [Ryan Holtz].
- NOTES: Philips PCF8583 Clock and Calendar with 240 x 8-bit RAM
- DRIVERS: crospuzl.cpp and ertictac.cpp
- SOURCE: machine\pcf8583.cpp



O3.8   Ricoh

O3.81  RP5C01

- 0.222              : Don't save NVRAM 0byte file (machine\rp5c01.h) [hap].
- 0.187              : Added TC8521 device type as alias for RP5C01. Added TC8521 RTC to yesnoj (though the game remains stuck in the 20th century) [AJR].
- 0.179              : Fixed clock regression with RP5C01. This also makes the RP5C01's NVRAM actually non-volatile (previously it would be cleared upon reset after being loaded). The RP5C01 has a power supply line but no reset signal input, so device_reset doesn't seem to make sense here [AJR].
- 0.155              : Put in a read_line for the alarm pin (machine\rp5c01.c). Added RP5C01 device to spnchout. Allow RP5C01 clock of 0. Allow RP5C01 without battery (MAME core still writes a 0-byte file tho) [hap].
- 0.154              : Set RP5C01 RTC to actually return 24 hour mode, which fixes RTC detection for the Amiga [Dirk Best].
- 0.153              : Added missing RP5C01 ram read. Simplify masks [hap]. Converted RP5C01 to DEVCB2 [Osso].
- 0.148u2            : Fixed uninitialized variables, members and memory in machine\rp5c01.c [Oliver Stoeneberg].
- 0.142u3            : Curt Coder fixed reset register bit masks in RP5C01 and RP5C15.
- 0.142u1            : Added machine\rp5c01.c/h. Imported RP5C01 RTC from MESS. Fixed RP5C01 alarm output [Curt Coder].
- 0.129u4            : Nicola Salmoria and Bob Seidel added basic support of RP5C01 to remove (most) protection kludges in Super Punch-Out.
- NOTES: Ricoh RP5C01(A) Real Time Clock with internal RAM.
- DRIVERS: punchout.cpp
- SOURCE: machine\rp5c01.cpp


O3.82  RP5C15

- 0.259              : Implemented set_year_offset setter, fixed x68k default year setup to be current rather than -20 [Angelo Salese].
- 0.221              : Simplified handlers [Osso].
- 0.153              : Converted RP5C15 to DEVCB2 [Osso].
- 0.146u5            : Initialize RP5C15 at power-on (makes the x68k boot reliable) [O. Galibert].
- 0.142u3            : Curt Coder fixed reset register bit masks in RP5C01 and RP5C15.
- 0.142u2            : Added machine\rp5c15.c/h. Imported RP5C15 RTC from MESS [Curt Coder].
- NOTES: Ricoh RP5C15 Real Time Clock / Ricoh RP5C15 RTC
- DRIVERS: (MESS) atarist.cpp, lcmate2.cpp, mz2500.cpp and x68k.cpp
- SOURCE: machine\rp5c15.cpp


O3.83  LH5045
- 0.250              : Added preliminary Sharp LH5045 RTC device. TODO: LH5045 doesn't really wrap time correctly [Angelo Salese].
- NOTES: Sharp LH5045 RTC
- DRIVERS: banprestoms.cpp
- SOURCE: machine\rp5c01.cpp


O4.    Key chip
-  3rd March 2000: Vernon C. Brooks fixed some key chip problems with World Stadium.




O5.    Clock

- 0.236              : Added setters for period, duty cycle and pulse width (machine\clock.cpp). Note: Set the period either with device_t m_clock, or with set_period if it needs to be more fine-tuned (m_clock has higher priority). The duty cycle can be changed with set_duty_cycle (default is 50%), or the pulse width (active time) can be set directly with set_pulse_width. Output signal at machine start is right after falling edge [hap].
- 0.203              : Simplified clock_device [smf].
- 0.154              : Fixed crash introduced when the 6551 transmitter and receiver is shutdown [smf].
- 0.153              : Added machine\clock.c/h [smf].
- DRIVERS: balsente.cpp, bfcobra.cpp, bfmsys85.cpp, calomega.cpp, f1gp.cpp, gladiatr.cpp, gsword.cpp, guab.cpp, hazelgr.cpp, hnayayoi.cpp, idsa.cpp, inderp.cpp, instantm.cpp, jpmsys5.cpp, jpmsys5sw.cpp, kingobox.cpp, laserbat.cpp, model1.cpp, model2.cpp, model3.cpp, nightgal.cpp, nsg6809.cpp, play_1.cpp, play_2.cpp, play_3.cpp, wildpkr.cpp and zaccaria.cpp
- SOURCE: machine\clock.cpp


O5.1   Crystal

- 0.194              : Replaced list of crystal/resonator/oscillator frequencies with a solution that doesn't require recompiling everything on changes [O. Galibert].
- 0.185              : Correction and addition (drivers\xtal.h) [hap].
- 0.160              : Added 430 kHz resonator for xtal.h [hap].
- 0.157              : Added some more comments about NTSC subcarrier multiples, fixed a mis-ordering, added more to comment about 640 kHz resonator (drivers\xtal.h) [Lord Nightmare].
- 0.148u2            : Show the reason 16.9344 and 18.432 MHz are popular (drivers\xtal.h) [R. Belmont].
- 0.146u4            : Reverted errornous changes in xtal.h [Firewave].
- 0.146              : Update comment [hap].
- 0.123u5            : Corrado Tomaselli added some clock frequency changes which were documented in 0.123u4 but which did not apply due to operator error.
- 0.123u2            : Corrado Tomaselli reverted sound OSC of Truxton II to 27MHz/8 since the original OST runs at this speed. The PCB I measured the previous clock was 28MHz/8 and it's a different PCB version from the common one. Since MAME doesn't support multiple OSC I prefer to use the 27MHz one.
- 0.122u3            : Added emu\drivers\xtal.h. Documenting all known arcade PCB clock cystals [Guru, Aaron Giles]: Drivers should be updated to use these as a basis for their clocks, and the list should be augmented as additional crystals are found.
- 0.122u1            : Verified some cpu clocks of original boards using a frequency counter [Corrado Tomaselli]: Changed Success Joe Ym2203 clock from 3MHz to 4MHz. Changed Pang M6295 clock from 990 kHz to 1MHz. Changed Halley Comet main cpu clock to 1.664MHz (it's not a mistake, the clock is very low). Besides confirming clocks on some games, I modified: Aerofighters and Turbo Force sound Z80 to 5MHz. Midnight Resitance 68k cpu to 10MHz (20MHz crystal) and modified m6295 clock to 1MHz. Also confirmed pin 7 is high (Midnight resistance has a lot of slow downs on the PCB too).
- SOURCE: emu\xtal.cpp

       Clock Crystal = Xtal = Oscillator = OSC = X1, X2 or X101

       12098                    (Sprint1)
       169NDK19                 (Kdynastg, Xfiles)
       A33.868 KDS 7M           (NeoGeo Hyper64)
       A40.000 KDS 7L           (NeoGeo Hyper64)
       CSB455E                  (Passsht)
       D180A7                   (Heatof11)
       D320L7                   (NeoGeo Hyper64)
       K SSJ1                   (Boggy84)
       M33.333 KDS 7M, KDS7M    (NeoGeo Hyper64, A51site4)
       M50.113 KDS 7L           (NeoGeo Hyper64)
       M53.693 KDS 745          (Soulclbr)
       M53.693 KDS 920          (Aquarush)
       MEC18432 = 18432.00 kHz  (Chewing, Circusc, StarFigh)
       M.S.C.                   (Horekid)
       Nymph C016018            (Darktowr, Tstrike)
       POE400B (blue crystal)   (Pspikes)
       RXD MP-18                (Horekid)
       TI 75175, DIP8           (Janjans2)
       V100.00 KDS 745          (Soulclbr)
       V100.00 KDS 928          (Aquarush)



O5.11  Crystal Resonator

       CSB380E               (Ddragon)
       CSB398P               (Goldnaxe)
       CSB480E               (Ddragon)
       CSB1056J              (Dbz2)

       1000J-S               (Hrdtimes)

       POE400B               (Mastboy, Pspikes)


O5.2   Cypress

O5.21  CY2291
- NOTES: The CY2291 is the clock input source for the R4650 in Gp500.
- PCB: Cypress CY2291 Three-PLL General Purpose EPROM Programmable Clock Generator - SOIC20 (Gp500)

O5.22  CY2292
- NOTES: Port names: XTALIN, XTALOUT, XBUF, CPUCLK, CLKA, CLKB, CLKC and CLKD
- PCB: Cypress CY2292S Three-PLL General-Purpose EPROM Programmable Clock Generator, SOIC16 (Polystar)



O5.5   ICS

O5.51  9120
- PCB: ICS9120, SOIC8 (A51site4)

O5.52  9170
- PCB: Integrated Circuit Systems Inc. AV9170 Clock Synchronizer and Multiplier, Voltage Controlled Oscillator, SOIC8 (Gradius4, Sscope2, NamcoSystem11/12)

O5.53  9159
- PCB: ICS9159M 9743-14, SOIC28 (A51site4)



O5.6   Others

O5.61  8224
- NOTES: 8224 clock divider chip
- PCB: 8224 (Konek), MPB8224C (Fastdraw), iP8224 (Draw Poker Hi-Lo)

O5.62  8284
- PCB: AMD D8284A  Clock Generator Driver for I8068/88 (Mplanets)

O5.63  2061ASC
- PCB: IC Designs 2061ASC-1 Programmable Clock Generator, SOIC16 (Gp500, NamcoSystem11/12)

O5.64  MX8330
- PCB: Macronix MX8330 RAMBUS Clock Generator (Mtetrisc)

O5.65  MC88915
- PCB: MC88915FN70 Single Low Skew CMOS Clock PLL Driver

O5.66  06B49P
-NOTES: The 06B49P IC is a programmable clock divisor. It provides every frequency needed for all devices from this hardware, plus V-Sync, H-Sync and (V+H)-Sync (composite) frequencies. All generated clocks are proportional to the Clock In (12MHz). There are not fixed or harcoded frequencies.
- PCB: 06B49P, DIP28 (Countrun, Freekick, Lucky74)







O6.    Reset IC

O6.1   Dallas

O6.11  DS1232
- PCB: Dallas DS1232S reset IC, SOIC16 (Primrag2), DS1232, SOIC8 (A51site4), DS1232 DIP8 (RapidFire), DALLAS DS1232 MicroMonitor ? (MetalManiax)

O6.12  DS1233
- PCB: Dallas DS1233 master reset IC, SOIC4 (Crysking)


O6.2   Mitsubishi, NEC

O6.21  PST518
- PCB: Mineswpr

O6.22  PST532
- NOTES: PST532 IC for system reset and battery backup switching (Realbrk)
- PCB: PST532A (Realbrk, Pkgnsh)

O6.23  PST573
- PCB: PST573D System Reset IC with 2.7V detection circuit, SOIC4 (Gamshara)

O6.24  PST575
- PCB: System Reset IC, SOIC4 (Gp500, NamcoSystem23)

O6.25  PST592
- PCB: PST592J System Reset IC with 2.7V detection circuit, SOIC4  (Gamshara, MrDriller2)

O6.26  M51953
- PCB: Mitsubishi Electric Corp. M51953B or M5195B Voltage Detection and System Reset IC, SIP5 (CPS2)



O6.3   Maxim

O6.31  MAX690
- PCB: MAX690 CPA (Dynobop)

O6.32  MAX691
- PCB: MAX691CPE Reset IC with Watchdog and Battery switchover (Skattv)

O6.33  MAX693
- PCB: Maxim max693acwe Watchdog  (Blitz99, MK3)



O6.4   Mitsumi

O6.41  MM1026
- PCB: Mitsumi Monolithic IC MM1026BF System Reset with Battery Backup, SOIC8 (NintendoSuperSystem)

O6.42  MM1035
- PCB: Mitsumi Monolithic IC MM1035 System Reset and Watchdog Timer, DIP8 (Vmetal, Gunmast)


O6.5   Texas Instruments

O6.51  TL7700
- PCB: Texas Instruments TL7700 Supply-Voltage Supervisor/Power-On Reset IC, DIP8 (Tokio)

O6.52  TL7705
- PCB: TL7705 (Armchmp2, Klondkp, Ppcar, Pasha2), ST7705C Reset/Watchdog IC, SOIC8 (Xfiles, Kdynastg), TL7705ACP Supply-Voltage Supervisor (Skattv)



O6.6   Other

O6.61  ADM690
- PCB: Analog Devices ADM690 4.65V Reset, Battery Switchover, Watchdog Timer, Power Fail Input IC, DIP8 (Pairs)

O6.62  HA16103
- PCB: Hitachi HA16103FPJ Watchdog Timer, SOIC20 (CPS-3)



O7.    Voltage Regulator

- 0.226              : Removed sound\volt_reg.cpp/h. Removed Voltage Regulator uses that are not needed anymore with the recent DAC changes. Which is all of them. Removed the device as well [Aaron Giles].
- 0.225              : Update volt_reg sound to the new stream update callback [Aaron Giles].
- 0.222              : Fixed problem with DAC stream slice update (sound\volt_reg.cpp) [hap].
- 0.207              : Output of 32768 is above MAME's sound stream cutoff (-32768 to 32767) (sound\volt_reg.h). Set default m_output [hap]. Removed MCFG macro [Osso].
- 0.201              : Set default clocks to 0 (sound\volt_reg.h) [Ryan Holtz].
- 0.179              : Added sound\volt_reg.cpp/h. Added 'Voltage Regulator' device (sound\volt_reg.cpp).
- DRIVERS: ...
- SOURCE: sound\volt_reg.cpp


O7.1   7660
- PCB: DC-DC Voltage Convertor, SOIC8 (Ppcar)

O7.2   7808
- PCB: Voltage regulator for TV output (Chboxing, Chwrestl)

O7.3   7812
- PCB: 12V voltage regulator (Model1)

O7.4   PQ30RV21
- PCB: Sharp PQ30RV21, PQ30RV31 5V to 3.3V Voltage Regulator (NamcoSystem10, NamcoSystem12)

O7.5   3423
- PCB: Motorola MC3423 Overvoltage Sensing Circuit, SOIC8 (Pairs)

O7.6   LT1084
- PCB: Linear Technology LT1084 Low Dropout/Fixed Positive Adjustable Voltage Regulators (Mtetrisc)



O8.    Switch

O8.1   S301
- PCB: Slide switch for stereo or mono sound output (Rvschool, Sfex2, Taito GNET system).

O8.2   S551
- PCB: Dip switch - 4 position, defaults all OFF (Rvschool, Sfex2, Taito GNET system).



O9.    Diodes

O9.1   4148
- PCB: Standard diode 1N4148 (Wallc)

O9.2   Laser Disc diode
- PCB: Cliff Hanger uses the PR-8210 player and I have heard that it can also run on the LD-V1100 with an infrared transmitter (which only consists of two diodes and two resistors). (CliffHanger)



O10.    Capacitor
- NOTES: A capacitor is an electrical/electronic device that can store energy in the electric field between a pair of conductors (called "plates").
- PCB: 2621N (Laserbat)


O11.    Debug Mode

       - Debugger ROM (extra): Atari - Sprint1/2+Dominis, Wolfpack
       - "Unused" Dip Switch: Time Soldiers - Make the ROM writable and the game will enter a 'debug' (probably from the development system).
       - Edge-connector testpin: Mjyuugi
       - Debug port: Gladiator, Spacefb: Port 3  bit 6 = unused (Debug switch - Code jumps to $3800 on reset if on)
       - RS232 port for debug: F15se
       - Debug Mode dipswitch: Seicross, Jungler, Gun.Smoke, Stinger, Kuri Kinton, Image Fight
       - Debug features: CPS1 games
       - CPU debug switch: Beathead (ASAP CPU)



O12.    BIOS

        Arcade Systems with BIOS (Basic Input Output System):

        Acclaim                     Acclaim PSX (acpsx)
        Arcadia Systems             Arcadia System BIOS (ar_bios)
        Atari                       Atari PSX (atpsx)
        Brezzasoft                  Crystal System BIOS (crysbios)   MX27L1000QC-12 128k x8 EEPROM (BIOS DATA)
        Century Electronics         CVS BIOS (cvs)
        Century Electronics         Quadtel TVGA9000i BIOS Software (Paint & Puzzle (1993?))
        Data East                   DECO Cassette System (decocass)
        Exidy                       Max-A-Flex (maxaflex)
        I'Max                       Multi Amenity Cassette System BIOS (macsbios)
        IGS                         PGM (Polygame Master) System BIOS (pgm)
        Kaneko                      Super Kaneko Nova System BIOS (skns)
        Konami                      Baby Phoenix/GV System (konamigv)
        Konami                      System GX (konamigx)
        Namco                       Namco NA-1/2 System     SOURCE: dricers\namcona1.cpp
        Namco                       Namco System 2          NSY2BIOS, SYS2C65C, SYS2C68 (BIOS DATA)     SOURCE: dricers\namcos2
        Nintendo                    Nintendo Super System BIOS (nss), NSS-ic14-02 is BIOS rom
        Nintendo of America         PlayChoice-10 BIOS (playch10)
        Sega                        Mega Play BIOS (megaplay)
        Sega                        Mega-Tech BIOS (megatech)
        Sega                        ST-V BIOS (stvbios)
        Sega                        Sega System 24
        SNK                         Hyper NeoGeo 64 BIOS (hng64)
        SNK                         Neo-Geo (neogeo)
        Sony/Atlus                  Atlus PSX (atluspsx)
        Sony/Capcom                 ZN1/2 (cpzn1/2)
        Sony/Capcom/Tecmo           NAOMI System        ST 27c160 16Mbit/16 bit (BIOS DATA)
        Sony/Eighting/Raizing       PS Arcade 95 (psarc95)
        Sony/Tecmo                  TPS (tps)
        Sony/Taito                  Taito FX1 (taitofx1)
        Taito                       Taito GNET System




O13.    Instruction Cards

        Joshi Volleyball (1983)
        G3000261A (Instruction card #1)
        G3000262A (Instruction card #2)

        Prebillian (Taito 1986)
        G2000578A (Service Instructions)       G20 00578A
        G2000577A (Board Adjustment Manual)    G20 00577A
        G3000410A (Instruction card #1)        G30 00410A
        G3000411A (Instruction card #2)        G30 00411A

        Vs. Hot Smash (Taito 1987)
        G2000686A (Service Instructions)
        G2000682A (Board Adjustment Manual)
        G3000432A (Instruction card #1)
        G3000433A (Instruction card #2)

        Twin Hawk (Taito 1989)
        G2001005A Service Instructions (Manual)
        G2001006A Game Manual
        G3000527A Instruction Card

        Hat Trick Hero (Taito 1990) - Football Champ clone
        G2001260A (Service Instruction Manual)
        G3000621A (Instruction card #1)
        G3000622A (Instruction card #2)

        Quiz Jinsei Gekijoh (Taito 1992)
        G3000703A (Instruction card 1)
        G3000704A (Instruction card 2)
        G1000996A (Instruction card 3)
        G2001472A (Instruction manual)

        Quiz Crayon Shinchan (Taito 1993)
        G3000724A (Instruction card 1)
        G3000725A (Instruction card 2)
        G2001518A (Instruction manual)

        Crayon Shinchan Orato Asobo (Taito 1993)
        G1001075A - Display Sticker
        G2001553A - Service Instruction Manual
        G3000744A - Instruction Card
        C0601012A - Electro Tap Splice



==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


VIDEO / GRAFIK

  1.    MAME Video Interface
  1.1   Atari
  1.2   Banpresto
  1.3   Capcom
  1.4   Cave
  1.5   Data East
  1.6   Dooyong
  1.7   Dynax
  1.8   Excellent Systems
  1.9   Fujitsu
  1.10  Gaelco
  1.11  IGS
  1.12  Imagetek
  1.13  Incredible Technologies
  1.14  Jaleco
  1.15  Kaneko
  1.16  Konami
  1.17  LSI Logic
  1.18  Nakanihon
  1.19  Namco
  1.20  Nanao
  1.21  NEC
  1.22  Nintendo
  1.23  NMK
  1.24  Other
  1.25  Philko
  1.26  Psikyo
  1.27  Seibu
  1.28  Sega
  1.29  Seta
  1.30  SNK
  1.31  SONY
  1.32  Subsino
  1.33  Taito
  1.34  Tecmo
  1.35  Technos
  1.36  Toaplan
  1.37  V-System

  2.    Custom Video
  2.1   Signetics
  2.11  Signetics 2636
  2.12  S2637
  2.2   Atari
  2.21  TIA
  2.22  GTIA
  2.23  ANTIC
  2.24  AMD 29C101
  2.25  MB87316
  2.26  ASIC65
  2.3   MOS
  2.31  MOS 6560 / 6561 VIC
  2.32  MOS 7360
  2.4   Nintendo
  2.41  2C0X PPU
  2.42  VT03 PPU
  2.43  Nintendo Super NES Video/Sound
  2.44  Capcom CX4
  2.45  Seta ST-010
  2.5   Philips
  2.51  SAA5020
  2.52  SAA5050
  2.53  SAA5051
  2.54  SAA5070
  2.6   Blitter
  2.61  Fujitsu MB1551x
  2.62  ITV4400
  2.63  GA9201
  2.7   Collision chips
  2.71  PC3259
  2.8   TLC34076
  2.9   YGV608
  2.A   Midway ICs
  2.B   Amiga AGA
  2.C   AMI S68047
  2.D   RAMDAC
  2.E   Buffered Sprite RAM
  2.F   MPEG video

  3.    2D Graphic
  3.1   Monochrome
  3.2   MDA
  3.3   AMGDA
  3.4   AGA
  3.5   EGA
  3.6   CGA
  3.7   PGC
  3.8   Q-Bus
  3.9   VGA
  3.91  S3 Graphics VGA
  3.92  ProMotion 3210
  3.A   XGA
  3.B   SVGA
  3.B1  Cirrus Logic GD54xx
  3.C   MagicEyes VRender0 Video Engine

  4.    3D Graphic
  4.1   Polygon games
  4.2   Sprites games
  4.21  Sega 16-bit hardware
  4.22  Sega 16-bit Video
  4.23  Sega 16-bit Road Generator
  4.24  Sega System24
  4.25  Sega System32
  4.26  Sega ST-V
  4.3   Other 3D games
  4.4   Textures games
  4.5   PSX GPU
  4.6   3dfx Graphic
  4.61  Voodoo
  4.62  Voodoo 2
  4.63  Voodoo Banshee
  4.64  Voodoo 3
  4.65  Voodoo chips + cards
  4.7   PowerVR 2
  4.71  PowerVR Neon
  4.8   Gaelco 3D
  4.9   Real3D 1000
  4.A   3DO
  4.B   nVidia Riva 128
  4.C   nVidia Riva TNT
  4.D   nVidia GeForce 256
  4.E   NVidia GeForce 7600GS
  4.F   Cirrus Logic CL-GD5465 Laguna 3D
  4.G   3Dlabs Permedia 2
  4.H   Direct3D

  5.    Video controller
  5.1   Actel
  5.2   Altera
  5.3   Brooktree
  5.4   Cosmac
  5.5   Hitachi
  5.6   Motorola
  5.7   Philips
  5.8   Texas Instruments
  5.9   Other
  5.A   Palette resistors

  6.    Video D/A converter
  6.1   CXD1178
  6.2   MC44200
  6.3   NPC
  6.31  SM5840
  6.32  SM5877

  7.    RGB Pre-Driver
  7.1   RES NET
  7.2   Sony
  7.21  CXA1145
  7.22  CXA1634
  7.23  CXA1779
  7.24  CXA2067
  7.3   000180

  8.    Video Display
  8.1   Hitachi
  8.11  HD44102
  8.12  HD44352
  8.13  HD44780
  8.14  HD61602
  8.15  HD61830
  8.16  HD66421
  8.2   OKI
  8.21  MSM6222B
  8.22  MSM6255
  8.3   R10788
  8.31  Rockwell 10937
  8.32  OKI MSC1937
  8.33  Samsung 16LF01
  8.4   uPD7227
  8.5   SCN2672
  8.51  SCN2674
  8.6   Still Image
  8.7   PWM Display

..................................................................................................................................................................................................................................



G1.    MAME Video Interface

- 0.263              : Fixed a couple shortsights (scripts\src\video.lua) [Angelo Salese].
- 0.186              : Updated devices\video and mame\video devices to use device_add_mconfig insted of device_mconfig_additions [Osso].
- SOURCE: devices\video\*.* + scripts\src\video.lua



G1.1   Atari


       137304-2002                                                 (Arcadecl)


       Slapstic chips

       137412-101              Empire Strikes Back/Tetris
       137412-103              Marble Madness
       137412-104              Gauntlet
       137412-105              Indiana Jones/Paperboy
       137412-106              Gauntlet II
       137412-107              Peter Packrat/Xybots/2p Gauntlet/720
       137412-108              Road Runner/Super Sprint
       137412-109              Championship Sprint/Road Blasters
       137412-110              Road Blasters/APB
       137412-111              Pit Fighter
       137412-112              Pit Fighter (Europe)
       137412-113              Unknown (Europe)
       137412-115              Race Drivin' DSK board
       137412-116              Hydra
       137412-117              Race Drivin'
       137412-118              Rampart/Vindicators II


       137418-103                                                  (Xybots)
       137419-101    137419-101, 137419-104                        (Cyberbal, Guardian, Primrage, Tmek, Xybots)
       137526-001                                                  (Xybots)
       137536-001                                                  (Arcadecl, Xybots)
       137550-001    SOS-137550-001 TAIWAN  20 pin Motorola        (Arcadecl, Cyberbal, Guardian, Klax, Primrage, Sparkz, Tmek)
       137552-001    VMA-137552-001                                (Cyberbal)
       137593-001    VLSI chip, labeled 8915AV U9684 VGT8001-6206  (Arcadecl, Klax)
         ????        VLSI MPG  VGT8003-2148   9027EV               (F15se, Botss)
         ????        VLSI MPG  VGT8007-2105   9027EV               (F15se, Botss)
       137665-1020   Atari                                         (Guardian)



       Atari mathbox

       - 0.221             : Simplified some handlers (machine\mathbox.cpp) [Osso].
       - 0.149             : Modernized the MathBox device [Osso].
       - 0.148u5           : Andrew Welburn removed garbage in unused bits of 4 bit mathbox proms in Star Wars (rev 2) and clone (rev 1) and clone TomCat (Star Wars hardware, prototype).
       - 0.129u5           : Device-ified the Atari mathbox and the Atari vector generators [Couriersud].
       - 0.115u1           : Mathis Rosenhauer moved Atari vector PROMs into separate regions.
       - 0.103u1           : Mathis Rosenhauer rewrote the Star Wars mathbox multiplier from the schematics.
       - 10th December 1999: Aaron Giles fixed the speed of I, Robot's mathbox.
       - 23rd     June 1999: Mathis Rosenhauer fixed the Empire Strikes Back mathbox chip, and the 3D vectors aren't anymore corrupt sometimes.
       - 0.29              : Some fixes to the Star Wars mathbox [Aaron Giles].
       - 0.26              : Added machine\mathbox.c/h and vidhrdw\vector.c/h.



       Atarigen (General functions for Atari games)

       - 0.233  : Eliminated remaining uses of auto_alloc and friends (machine\atarigen.cpp) [Aaron Giles].
       - 0.222  : Transfer legacy slapstic handling routines from machine\atarigen.cpp to device (machine\slapstic.cpp) [AJR].
       - 0.221  : Separated various drivers from atarigen_state. Eliminated ATARI_CLOCK_xxxMHz macros in favor of standard XTAL constants (machine\atarigen.cpp) [AJR].
       - 0.210  : Simplified handlers. Reduced unnecessary lines. Fixed debugger issues, notes and spacings. Use shorter type values [cam900].
       - 0.205  : Disentangle drivers from atarigen_state [AJR].
       - 0.201  : Removed ATARI_SOUND_COMM MCFG macros [Ryan Holtz].
       - 0.197  : Converted MCFG_DEVICE_VBLANK_INT to MCFG_SCREEN_VBLANK_CALLBACK (machine\atarigen.cpp). Removed sound interrupt status from machine\atarigen.cpp base class. Separated a few Atari drivers from atarigen_state. Separated 'Atari VAD video controller' source files from atarigen [AJR].
       - 0.171  : Modernized sound volume setting code in various Atari drivers. This lets atarigen.cpp shed legacy sound routines using the archaic method of looking up sound devices by types rather than tags, which until 0.126u2 they weren't required to provide and often didn't have (arcadecl.cpp, atarisy1.cpp, atarisy2.cpp, badlands.cpp, cyberbal.cpp, gauntlet.cpp, rampart.cpp, relief.cpp and machine\atarigen.cpp) [AJR].
       - 0.170  : Fully disentangle Liberator from machine\atarigen.cpp. Getters for atari_vad_device return devices as references, not pointers [AJR].
       - 0.157  : Fixed save state regression in various Atari drivers (machine\atarigen.c) [Osso]. Fixed attotime/flashing text in Paperboy service mode and 720 attotime/sprites flicker or disappear sometimes in recent MAME versions (machine\atarigen.c) [Alex Jackson].
       - 0.150  : Disabled unused private members (machine\atarigen.h) [Oliver Stoeneberg]. Added eeprompar.*, implementing a simple interface for parallel EEPROMs. Created atari_eeprom_device which wraps a 2804 or 2816 EEPROM with the standard Atari write-locking mechanism. Updated all drivers to use this, and removed all EEPROM stuff from atarigen. Added missing macros (machine\eeprompar.h) [Aaron Giles]. Fixed device description conflict [Tafoid].
       - 0.149u1: Break out the sound communications part of atarigen into its own device. Update all callers (audio\atarijsa.c, cyberbal.c, drivers\atarig1.c, atarig42.c, atarigx2.c, atarisy1.c, atarisy2.c, badlands.c, batman.c, beathead.c, blstroid.c, cyberbal.c, eprom.c, gauntlet.c, harddriv.c, offtwall.c, relief.c, skullxbo.c, thunderj.c, toobin.c, vindictr.c, xybots.c, machine\atarigen.c/h and video\atarisy1.c) [Aaron Giles]. Convert the Atari VAD chip into a device, half-way (machine\atarigen.c/h, drivers\batman.c, offtwall.c, relief.c, shuuz.c and thunderj.c) [Aaron Giles].
       - 0.147u2: Initial round of atarigen cleanup/modernization [Aaron Giles].
       - 0.145u7: Aaron Giles fixed Atari GT driver crashed after OK (atarigen_eeprom_reset regression).
       - 0.139u1: Aaron Giles changed atarigen_state to be a base class from which all the related Atari drivers derive their state from.
       - 0.135u4: Some more Atari driver shuffling [Aaron Giles]: Added atarigen_init() function which allocates all timers and registers for save states. Updated all drivers to call it. Converted some drivers to use device timers.
       - 0.123u5: Zsolt Vasvari converted atarigen and TMS34061 to be handle based.
       - 0.114u1: Aaron Giles fixed video timing in machine\atarigen.c, this fixed the graphics problems in APB.
       - 0.114  : Couriersud added general save state support to the atarigen module.
       - 0.113u1: Zsolt Vasvari began converting drivers over to the new more accurate video timing functions (video_screen_* functions instead of cpu_*). This first batch includes all the games using the TMS34010 chip and the Atari games that use atarigen.c.
       - 0.113  : Zsolt Vasvari removed cpu_gethorzbeampos() and replaced it with calls to video_screen_get_hpos(). Also changed TMS34010 configuration to take a screen number, and changed atarigen_get_hblank() to take a screen number as well.
       - 0.33b3 : Added machine\atarigen.c/h.
       - SOURCE: machine\atarigen.cpp


       Atariscom
       - 0.221  : Added machine\atariscom.cpp/h. Separated 'Atari Sound Communications' from machine\atarigen.cpp. Moved IRQ handling to audio\atarijsa.cpp (not a property of the actual device) [AJR].
       - NOTES: atariscom = Atari Sound Communications
       - DRIVERS: atarig1.cpp, atarig42.cpp, atarigx2.cpp, batman.cpp, batman.cpp, beathead.cpp, blstroid.cpp, cyberbal.cpp, cybstorm.cpp, eprom.cpp, harddriv.cpp, offtwall.cpp, skullxbo.cpp, thunderj.cpp, toobin.cpp, vindictr.cpp and xybots.cpp
       - SOURCE: machine\atariscom.cpp



       Atarimo

       - 0.277  : Got rid of simple_list and fixed_allocator (video\sprite.cpp) [Vas Crabb].
       - 0.274  : Removed unnecessary configuration parameter and unnecessary graphics decode reconfiguration (atari\atarimo.cpp) [cam900].
       - 0.234  : Offset layers for Batman (1991) to align with real PCB videos (video\atarimo.cpp) [David Haywood].
       - 0.173  : Moved emu\sprite.cpp/h to devices\video\sprite.cpp/h.
       - 0.167  : Updated previous fix (video\atarimo.c; MAME 0.165), this fixes palette problem in thunderj [hap].
       - 0.165  : Fixed out of bounds priority check (video\atarimo.c) [hap]. This fixed graphics glitch occurs when destroying computer equipment in eprom/eprom2 (MT05690).
       - 0.155  : Fixed video\atarimo.c:225:24: runtime error: index -4 out of bounds for type 'UINT16 [4096]' [hap].
       - 0.153  : Added asserts for known index out-of-bounds accesses (video\atarimo.c) [Oliver Stoeneberg].
       - 0.150  : Convert atarimo to a device. Still a bunch more cleanup/improvements to do; this is pretty much a direct port of the existing functionality, built on top of the sprite_device [Aaron Giles]. Keep MSVC happy when compiling for x64 (video\atarimo.c; warning C4334: '<<' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) [Phil Bennett].
       - 0.149u1: Convert the Atari VAD chip into a device, half-way. Really needs device-ification of atarimo.c to do it properly, so this will get revisited once that is complete (machine\atarigen.c/h, drivers\batman.c, offtwall.c, relief.c, shuuz.c and thunderj.c) [Aaron Giles].
       - 0.147  : Slightly less abusive gfx_element hacking in atarimo, fixing memory corruptions [Aaron Giles].
       - 0.142  : Atari Ace eliminates the extern variables from atarimo video core, in order to remove a significant source of AM_BASE macros.
       - 0.123u6: Aaron Giles fixed video\atarimo render-based drivers crash when loading an autosave save state.
       - 0.60   : Removed vidhrdw\atarian.c/h and ataripf.c/h.
       - 0.37b8 : Added vidhrdw\atarian.c/h, atarimo.c/h and ataripf.c/h (Gauntlet, Toobin, Xybots, atarisy1.c...).
       - NOTES: 'Atari Motion Objects' device
       - DRIVERS: arcadecl.cpp, atarisy1.cpp, atarisy2.cpp, badlands.cpp, batman.cpp, blstroid.cpp, cyberbal.cpp, eprom.cpp, gauntlet.cpp, klax.cpp, marblmd2.cpp, offtwall.cpp, rampart.cpp, relief.cpp, shuuz.cpp, skullxbo.cpp, thunderj.cpp, toobin.cpp, vindictr.cpp, xybots.cpp and machine\atarigen.cpp
       - SOURCE: video\atarimo.cpp



       Atarirle

       - 0.274  : Cleanups: Suppress side effects for debugger reads, improved save state support, reduce run-time tag lookups. Made some variables const, used bit helpers more, reduced literal tag usage. Reduced preprocessor macros and improved ROM region names [cam900].
       - 0.245  : Correct indentation on some source lines [hap].
       - 0.210  : Simplified handlers. Use shorter type values. Fixed spacing (video\atarirle.cpp) [cam900].
       - 0.150  : Moved tilemap_memory into a generic memory_array class, since it is more generally useful than just in tilemaps. Code is now in memarray.*. Converted the Atari RLE motion objects device from a half-assed device into a full-assed device, leveraging the memory_array class [Aaron Giles].
       - 0.149u1: Added 'Atari RLE Motion Objects' device (video\atarirle.c).
       - 0.141u3: Converted atarirle to a device. Moved a driver specific routine to a generic device file (video\atarimo) [Atari Ace].
       - 10th June 2002: Brad Oliver fixed bugs in the Revolution X driver and Atari RLE decoding that affected MacMAME.
       - 0.60   : Removed vidhrdw\atarian.c/h and ataripf.c/h.
       - 0.37b8 : Added vidhrdw\atarian.c/h, ataripf.c/h and atarirle.c/h (Gauntlet, Toobin, Xybots, atarisy1.c...).
       - NOTES: atarirle (RLE sprite handling
       - DRIVERS: atarig1.cpp, atarig42.cpp, atarigt.cpp and atarigx2.cpp
       - SOURCE: video\atarirle.cpp



       Atari VAD video controller

       - 0.234: Offset layers for Batman (1991) to align with real PCB videos (video\atarivad.cpp) [David Haywood].
       - 0.221: Simplified handlers (video\atarivad.cpp) [Osso].
       - 0.197: Added video\atarivad.cpp/h. Separated 'Atari VAD video controller' source files from atarigen [AJR].
       - NOTES: Atari VAD video controller device
       - DRIVERS: batman.cpp, cybstorm.cpp, offtwall.cpp, relief.cpp, shuuz.cpp and thunderj.cpp
       - SOURCE: video\atarivad.cpp



G1.2   Banpresto

       IKM-AA004 1633JF8433 JAPAN 9523YAA    QFP208         (Macrossp, Quizmoon)
       IKM-AA005 1670F1541  JAPAN 9525EAI    QFP208         (Macrossp, Quizmoon)
       IKM-AA006 1633JF8432 JAPAN 9525YAA    QFP208         (Macrossp, Quizmoon)



G1.3   Capcom

       CPS2:

       DL-030P               DIP40     KABUKI      Custom encrypted Z80, running at 8.000MHz, manufactured by VLSI Technology. On most PCBs this is a regular Zilog Z80 (Z0840008PSC)
       DL-0311               QFP160    CPS-A-01    Graphics Processors
       DL-0921               QFP160    CPS-B-21    Graphics Processors
       DL-1123               QFP136                I/O Controller
       DL-1425               PLCC84    CAPCOM-Q1   Q-Sound Processor, DSP-16A (C) 92 AT&T, clock input of 60.000MHz
       DL-1525               QFP208    SPA         Custom 68000 CPU + ASIC
       DL-1625               QFP128    SPB         Custom 68000 CPU, running at 16.000MHz
       DL-1727               QFP160    MIF
       DL-1827               QFP160    CIF
       DL-1927               QFP120    CGA
       DL-2027               QFP120    CGD
       DL-2227               QFP64     DRC         DRAM Refresh Controller


       CPS3:

       DL-2729  SD10-505     QFP304    PPU
       DL-2829  SD07-1514    QFP208    CCU
       DL-2929  SD08-1513    QFP208    IOU         I/O controller
       DL-3129               QFP208    C.P.S.2-B   RF5C320 sound
       DL-3329  SD04-1536    QFP144    SSU
       DL-3429  SD06-1537    QFP144    GLL1
       DL-3529  SD11-1755    QFP80     GLL2


       PU11256, PU13478    16M MASK ROM (read as 27C160)         (Punisher)



G1.4   Cave

       9050KX016    47pie2, Suchipi                (NEC D65012GF303 9050KX016 - QFP80)


       Sprites
       013 9918EX008                         (Gaia)
       013 9341E7009                         (Mazinger)
       013 9346E7002   QFP240                (Agallet, Metmqstr, Sailormn)

       Tilemaps
       038 9320EX702   QFP176                (Nost)
       038-9320EX703   PQFP176  GFX          (Mcatadv)
       038 9320EX706   QFP176                (Naname)
       038 9330EX705   QFP176                (Nost)
       038 9335EX706                         (Mazinger)
       038 9429WX709                         (Pwrinst2)
       038 9429WX727                         (Donpachi)
       038 9437WX711   QFP176                (Agallet, Metmqstr, Sailormn)
           9807EX004   QFP240                (Dfeveron, Korokoro)
           9838EX004   QFP240                (Korokoro)
       038 9838WX001                         (Dfeveron, Gaia)
       038 9838WX003                         (Dfeveron, Gaia)
           9838WX004   QFP144                (Korokoro)



G1.5   Data East

       TC110G21     TC110G21AF (Sdgndmps, SD Gundam Sangokushi, Raiden DX)
       TC110G38     TC110G38AF (Botss, F15se)
       TC15G008     TC 15G008AP (Liberate), TC15G008AP-0048 (Cross Shooter, Metlclsh, Panic Road)
       TC15G032     TOSHIBA TC15G032CY, TC15GO32AY 0013 8623A DSPC10, TC156032AY (Counter Steer, Garyoret, Lastmisn, Metlclsh, Shootout)
       TC17G005     TC17G005AN (Cross Shooter, Panic Road)
       TC17G008     TC17G008AN (Cross Shooter, Panic Road)
       TC17G014     TC17G014AP-0048 (Mustache)
       TC17G032     DYNAX TC17G032AP-0246 JAPAN 8828EAI (Hanamai, Hana Oriduru)
       TC25SC900    TC25SC900AF (SD Gundam Sangokushi, Heated Barrel, Olympic Soccer'92)


       BAC06        L7A0072 DATA EAST BAC 06 VAE8713    Tilemap generator     (Boulder Dash (1990), Robo Cop (1988), The Deep (1987))
       MXC06        L7B0073 DATA EAST MXC 06 8746       Sprite generator      (Boulder Dash (1990), Robo Cop (1988), The Deep (1987))


       DECO CPU16                          Custom 6502        PGA package    Prosoccr, Prosport, Boomrang, Kamikcab, Liberate, Bwings, Zaviga, Exprraid
       DECO CPU-6                          Custom 6502                       Progolfa
       DECO CPU-7                          Custom 6502                       btime.cpp
       DE45                                Hu6280 CPU         QFP80          Edrandy
       DE52   9322EV 298251 VC5259-0001    Sprites            QFP128         Rhoga, Fghthist, Nslasher, Wcvol95, 9235EV 205941  VC5259-0001 (Dblewing)
       DE55                                Background GFX     QFP160         Rhoga, Edrandy
       DE56                                GFX encryption     QFP160         Prtytime, Rhoga, Fghthist
       DE59                                M68000             QFP64          Rhoga, Mutamtf, Edrandy
       DE60                                Protection/IO                     Edrandy
       DE66                                Protection/IO      QFP100         Edrandy
       DE71   9228EV-313141                Sprites            QFP100         Rhoga
       DE74   24220F009                    GFX encryption     QFP160         Lockload, Fghthist, Nslasher
       DE75                                Protection/IO                     Captaven, Robocop2
       DE77   9303K9200                                       SOP28          Captaven, Dblewing (?)
       DE99   L7A0967  'Ace' chip          Alpha blending?    QFP208         Nslasher
       DE101                               ARM CPU                           Dragngun, Lockload
       DE102  237                          68000              QFP128         Pktgaldx
       DE104  L7A0717 9148                 Protection/IO      QFP100         Nslasher, L7A0717  9143 (Dblewing)
       DE113                               Alpha Blending                    Lockload, Dragngun
       DE141  24220F008                    GFX encryption     QFP160         Nslasher, Wcvol95
       DE145                                                                 Lockload
       DE146  L7A0680                      Protection/IO      100 pin        Dragngun, Fghthist, Stadhr96
       DE150                               GFX controller                    Avengrgs, Skullfng
       DE153  L7A0888 9328                                    QFP144         Nslasher
       DE156  932EV 301801                 ARM CPU            QFP100         Nslasher, Wcvol95
       DE170                                ?                                Fghthist
       DE186                                ?                                Dragngun, Lockload
       DE187                                ?                                Dragngun, Lockload
       DE200  9320PD027                                       QFP100         Fghthist, Nslasher
       DE222  C10707-1                     Custom 6502                       Ghostb, Srdarwin, Oscar
       DE223                               Protection                        Avengrgs, Chainrec, Joemacr, Osman


       NOTES:
       - 0.251              : Undo lopsided tables (older version of srcclean) (dataeast\decocrpt.cpp) [hap].
       - Custom chip 55 provides two playfields of 4bpp tiles, with optional rowscroll and column scroll. Some games use two of these to give 4 playfields. Palette banking, tile banking and priority are outside the scope of this chip, and usually differ between games. Some games combine the 4bpp output of each playfield to give an effective 8bpp display.
       - Custom chip 56 is the same as 55 but with on-chip decryption, so encrypted roms can be used.
       - Custom chip 74 is the same as 56 but with different decryption tables.
       - Custom chip 141 appears to be the same as 56.
       SOURCE: Data East protection in machine\decocrpt.cpp


       DECO CUSTOM CHIPS (dec8.c games)

       HMC20    DECO HMC20 M60232                (Ghostb, Gondo, Shackled, Shootout, Garyoret, Lastmisn)
       SSC10    DECO SSC10 M60324  42pin         (Boomrang, Cobracom, Kamikcab, Liberation, Shootout)
       VSC30    DECO VSC30 M60348                (Ghostb, Gondo, Shackled, Shootout, Garyoret, Lastmis)




       DECO BAC06

       - 0.221              : Fixed flagsmap handling. Reduced unnecessary values. Updated drawing behavior. Use tile callback. Converted pen masking into set_transmask behavior. Added notes. Reduced duplicates and unneeded values [cam900].
       - 0.213              : Use 'DECO BAC06 Tilemap' device for The Deep (1987) instead of custom routines [Osso].
       - 0.210              : Allow priority drawing behavior. Use shorter/correct type values. Fixed spacings. Implemented priority [cam900].
       - 0.209              : Make bpp masking related to gfx. Make tilemap draw routine related to cliprect. Cleanup unnecessary address_space in handlers. Fixed spacing. Simplified handlers [cam900].
       - 0.208              : Fixed problem with DECO BAC06 Tilemap. The previous emulation logic change was correct, however Sly Spy, Hippodrome and Birdie Try suffered from an ordering bug - tilemap.cpp in the core cached the tile indices before the game updated the dynamic colmun/row major bit. It seems the correct fix is to make sure tilemap::mappings_update() should be called when the column/row bit changes, however this is currently a private function. I've put in a hack at line 396 so that mappings_update() is called as a side effect of a flip. The better fix would be just to expose mappings_update for general driver use, but I didn't want to make that larger change without approval. Removed camel case and mapping hack in favour of tilemap.h change. Fixed wide mode used by Act-Fancer [Bryan McPhail]. Small cleanup [hap].
       - 0.195              : Set flip screen state without peeking into driver_data (video\decbac06.cpp). Fixed tilemap flip [AJR].
       - 0.153              : Reverted changes to decbac06 device flipscreen support, now that this can be done properly. Also reverted the decmxc06 changes. This breaks again the flipped sprites in some games, but fixes the actfanct regression [Osso].
       - 0.149u1            : Modernization DECO BAC06 device (drivers\actfancr.c, dec0.c, dec8.c, madmotor.c, pcktgal.c, stadhero.c and video\decbac06.c/h). Modernization of the remainder of the deco_bac06 device [Osso].
       - 0.148              : Save ram properly (video\decbac06.c), added a note about flipscreen behavior as a reminder for reimplementing flips on some of these games later [David Haywood].
       - 0.142              : Added video\decbac06.c/h. Converted DECO BAC06 tilemap (used by dec0.c) to be a device, reducing code duplication [David Haywood].
       - DRIVERS: actfancr.cpp, dec0.cpp, dec8.cpp, madmotor.cpp, pcktgal.cpp, stadhero.cpp and thedeep.cpp
       - SOURCE: video\decbac06.c



       DECO Common Video Functions

       - 0.221              : Simplified handlers (video\decocomn.cpp) [Osso].
       - 0.194              : Get rid of nonbuffered_palette_w in video\decocomn.cpp [cam900]. Removed space, offset and mem mask from decocomn_device::priority_r [smf].
       - 0.149u1            : Modernization of decocomn device (video\decocomn.c/h) [Osso].
       - DRIVERS: rohga.cpp
       - SOURCE: video\decocomn.cpp



       Data East IRQ Controller

       - 0.210              : Simplified handlers. Fixed debugger issue. Use shorter/correct type values [cam900].
       - 0.204              : Trigger interrupts at the start of hblank instead of at the 1st active pixel. Allow raster irqs in active display (glitches in Dragon Gun bottom part of screen otherwise) (machine\deco_irq.cpp). Fixes screen goes black in Dragon Gun on 3rd stage and game stops [hap].
       - 0.190              : Added machine\deco_irq.cpp/h. Added 'Data East IRQ Controller' device. Used by games in the cninja and deco32 drivers. This implies proper VBlank IRQ ack for all games now. Also added and improved raw screen parameters for various games. Use a device map, move screen include to header [Dirk Best].
       - DRIVERS: cninja.cpp and deco32.cpp
       - SOURCE: machine\deco_irq.cpp



       DECO Karnov Sprites

       - 0.278              : Correct 16x32 size flag and update notes (dataeast\deckarn.cpp) [hap, Jim Westfall].
       - 0.262              : Use device_gfx_interface to decode graphics ROMs (dataeast\deckarn.cpp). Make ROM region names more descriptive in systems using this device [cam900].
       - 0.246              : Changed sourcefile to dataeast\deckarn.cpp.
       - 0.210              : Removed unnecessary configuration values. Use callback for color and priority behavior. Use shorter/correct type values. Reduced unnecessary lines [cam900].
       - 0.195              : Set flip screen state without peeking into driver_data (video\deckarn.cpp) [AJR].
       - 0.154              : Changed description to 'DECO Karnov Sprites'.
       - 0.153              : Fixed sprite offset in DEC8 games with karnov_sprites_device (video\deckarn.c). Reverted changes to decbac06 device flipscreen support (video\decbac06.c and deckarn.c), now that this can be done properly. Also reverted the decmxc06 changes. This breaks again the flipped sprites in some games, but fixes the actfanct regression [Osso].
       - 0.143u4            : Fixed garbled sprites in Shackled (video\deckarn.c) [David Haywood].
       - 0.142              : Added video\deckarn.c/h. Added 'karnovsprites_device' device. Implemented Karnov style sprites in its own file, shared with karnov.c and dec8.c drivers [David Haywood].
       - DRIVERS: dec8.cpp and karnov.cpp
       - SOURCE: dataeast\deckarn.cpp



       DECO MXC06

       - 0.262              : Use device_gfx_interface to decode graphics ROMs (dataeast\decmxc06.cpp). Make ROM region names more descriptive in systems using this device [cam900].
       - 0.246              : Changed sourcefile to dataeast\decmxc06.cpp.
       - 0.211              : Fixed 'DECO MXC06 Sprite' regression (MAME 0.210), fixes sprite problems on the title screen of Birdie Try and during gameplay. Fixed Bandit regression. Removed outdated comments. Further fixes of multi-width sprite handling [cam900].
       - 0.210              : Use callback for colour masking and priority behavior. Moved configuration into handlers. Reduced unnecessary lines and unnecessary configuration values [cam900].
       - 0.195              : Set flip screen state without peeking into driver_data (video\decmxc06.cpp). Fixed flip screen rendering of DECO MXC06 sprites (video\decmxc06.cpp). This seems to fix all remaining attract mode glitches in Act-Fancer. This fixed also flipscreen shows "split" sprites in Mad Motor [AJR].
       - 0.160              : Use existing DECO MXC06 sprite device for The Deep, thanks to Osso for pointing it out. Also fixed strange sprite behaviour in Midnight Resistance (MT05333) [David Haywood].
       - 0.158              : Added a workaround for MT04724 (oscar, oscaru, oscarj1, oscarj2, cobracom, cobracomj: Screen flipping is no more working) and MT04797 (All sets in dec0.c: Flip Screen/Cocktail Mode offset), until all drivers are updated to use RAW_PARAMS [Osso].
       - 0.154              : Changed description to 'DECO MXC06 Sprite'.
       - 0.153              : Reverted changes to decbac06 device flipscreen support, now that this can be done properly. Also reverted the decmxc06 changes. This breaks again the flipped sprites in some games, but fixes the actfanct regression [Osso].
       - 0.146u2            : Added basic support for the bootleg sprites used by automat and secretab [David Haywood].
       - 0.142              : Added video\decmxc06.c/h. Added 'decmxc06_device' device. Started moving common DECO MXC06 sprite controller code to it's own device files, reducing code duplication [David Haywood].
       - DRIVERS: actfancr.cpp, dec0.cpp, dec8.cpp, madmotor.cpp, stadhero.cpp, thedeep.cpp and vaportra.cpp
       - SOURCE: video\decmxc06.cpp



       DECO 52

       - 0.266              : Use device_gfx_interface for decoding graphics and cleaned up code. Also do configuration at machine configuration time [cam900].
       - 0.220              : Allow priority/color callback usable with external mixing bit [cam900].
       - 0.195              : Set flip screen state without peeking into driver_data (video\decospr.cpp) [AJR].
       - 0.174              : Fixed flipscreen in Double Wings and Multi Champ (video\decospr.cpp) [Osso].
       - 0.154              : Converted to use delegates + some cleanups (video\decospr.c) [Fabio Priuli].
       - 0.145u7            : Discovered similarities in gotcha.c to Data East Bootleg sprites, also happening to be the closest implementation to Silver Millennium in the sources. Refactored each based on this information (video\gotcha.c and video\decospr.c) [David Haywood].
       - 0.144u7            : Converted Boogie Wings, Lemmings, Rohga, Schmeiser Robo, Thunder Zone/Desert Assault and Wizard Fire to use generic DECO sprite implementation (video\decospr.c) [David Haywood].
       - 0.141u4            : Added video\decospr.c/h. Added 'DECO 52 Sprite' device. Put DECO 52 video sprite chip inside its own file. Allow rendering to a bitmap, with priority data intact, for manual mixing. Thought drawgfx was optimized for single line cliprects, or at least capable of rejecting sprites based on y position and cliprect in non-zoomed cases. It seems I was either wrong, or that functionality is broken, because checking it manually prevents the captaven intro from becoming stupidly slow with partial updates [David Haywood].
       - DRIVERS: backfire.cpp, boogwing.cpp, cbuster.cpp, cninja.cpp, crospang.cpp, darkseal.cpp, dassault.cpp, dblewing.cpp, deco156.cpp, deco32.cpp, dietgo.cpp, esd16.cpp, funkyjet.cpp, gotcha.cpp, lemmings.cpp, mirage.cpp, nmg5.cpp, pktgaldx.cpp, rohga.cpp, silvmil.cpp, simpl156.cpp, sshangha.cpp, supbtime.cpp and tumbleb.cpp
       - SOURCE: video\decospr.cpp/h



       DECO 55 / 56 / 74 / 141 Tilemap Generator

       - 0.221              : Added notes of Locked 'n Loaded PCBs (video\deco16ic.cpp). Fixed transparency/transmask handling in custom draw case. Use callback for tile info and 8bpp mixing. Fixed sshangha regression. Reduced unnecessary values [cam900].
       - 0.220              : Fixed drawing behavior with 16bit indexed bitmap. Implemented runtime color bank changes. Fixed 8bpp color base (video\deco16ic.cpp) [cam900].
       - 0.219              : Fixed 1 pixel glitch (video\deco16ic.cpp) [cam900].
       - 0.210              : Allow masked priority behavior. Use shorter/correct type values. Fixed spacings [cam900].
       - 0.209              : Moved cninja exclusive transmask function into video\cninja.cpp. Simplified handlers and reduced some unnecessary lines (video\deco16ic.cpp) [cam900].
       - 0.204              : Added support for gfxdecode device pointer (video\deco16ic.h) [cam900].
       - 0.194              : Changed description to 'DECO 55 / 56 / 74 / 141 Tilemap Generator'. Splitted pf1/pf2 RAM allowing sizes to differ (video\deco16ic.c) [cam900].
       - 0.165              : Documentation update (video\deco16ic.c) [Brian Troha].
       - 0.158              : Changed description to 'DECO 55 / 56 / 74 / 141 IC'.
       - 0.154              : Converted video\deco16ic.c to use DEVCB2 [Fabio Priuli].
       - 0.149u1            : Modernized DECO16 IC device [Osso]. Disabled unused private field (video\deco16ic.c) [Oliver Stoeneberg].
       - 0.148u4            : Added rest of deco16ic_device [Miodrag Milanovic].
       - 0.147              : Added 'Data East IC 55 / 56 / 74 / 141' device.
       - 0.136u4            : Moved includes\deco16ic.h to video\deco16ic.h. Fabio Priuli implemented device version of the deco16ic tilemap chip and renamed decodev->deco16ic.
       - 0.128u6            : Atari Ace fixed the widely used deco16ic video core to no longer reference the global Machine.
       - DRIVERS: backfire.cpp, boogwing.cpp, cbuster.cpp, cninja.cpp, darkseal.cpp, dassault.cpp, dblewing.cpp, deco156.cpp, deco32.cpp, dietgo.cpp, dreambal.cpp, funkyjet.cpp, mirage.cpp, pktgaldx.cpp, rohga.cpp, simpl156.cpp, sshangha.cpp, supbtime.cpp and vaportra.cpp
       - SOURCE: video\deco16ic.cpp



       DECO 99

       - 0.221              : Simplified some handlers (audio\deco_ace.cpp) [Osso].
       - 0.220              : Added notes for alpha value usage. Improved mixing behavior related to DECO ACE chip. Added notes of splitted palette area and for alpha value usage (video\deco_ace.cpp) [cam900]. DECO 99 "ACE" opaque WIP [Angelo Salese].
       - 0.194              : Added video\deco_ace.cpp/h. Splitted ACE Chip emulation from video\deco32.cpp. Hooked up DECO 99 "ACE" chip to boogwing.cpp
       - PCB: 99 L7A0967 'Ace' chip, QFP208 (Nslasher)
       - NOTES: Data East 99 "ACE" chip for special blending effects
       - DRIVERS: boogwing.cpp and deco32.cpp
       - SOURCE: video\deco_ace.cpp



       DECO 104

       - 0.209              : Reduced unnecessary line. Use shorter type values [cam900].
       - 0.150              : Started integrating DECO104 findings from Charles, done a preliminary hookup of Double Wings to it (input ports bit order not yet verified). Nuked old bad simulation code for DW. Started pushing other games through the new 104 code, removed the old simulations [Charles MacDonald, David Haywood]. Make Pocket Gal Deluxe use the new DECO104 code, it has a different scramble on the address lines just to make things annoying even if the checks are trivial (drivers\pktgaldx.c and machine\deco104.c). Incorporate extra 104 findings from Charles, will clean up as next step. 104 table reformat and info update [David Haywood]. Removed some commented out code from the old, not existing anymore Deco104 simulation (drivers\boogwing.c, dietgo.c, pktgaldx.c and rohga.c) [Osso].
       - 0.149u1            : Changed machine\decoprot.c and includes\decoprot.h to machine\deco104.c/h. Moved Double Wings protection sim to the DECO 104 file - no functional change. Start reworking some of the 104 bits to make things easier later down the line. Switched the Wizard Fire reads around too so that they are more correct and align with Rohga. Shuffle Double Wings address bits around too. Make Caveman Ninja read addresses closer to Rohga / Wizard Fire etc. Bring the Double Wings addresses properly into line too. Refactor DECO104 to pump most games through a standard function. Let Double Wings share the common protection handlers for ones we already know from other games, might make things worse due to the missing ones thos. Night Slashers and Dream Ball using generic DECO 104 protection. Fixed save states [David Haywood].
       - GAMES: boogwing.c, cninja.c, Double Wings (dblewing.c), deco32.c, dietgo.c, pktgaldx.c and rohga.cpp
       - SOURCE: machine\deco104.cpp



       DECO 146

       - 0.209              : Simplified handlers. Reduced unnecessary lines, arguments and duplicates. Fixed spacings and debugger issues. Use shorter type values [cam900].
       - 0.195              : Synchronized soundlatch writes, fixes dropouts in Double Wings (machine\deco146.cpp) [AJR].
       - 0.192              : Fully handle sound latch internal in the DECO 146 device (boogwing.cpp, cninja.cpp, dblewing.cpp, deco32.cpp, dietgo.cpp, funkyjet.cpp, lemmings.cpp and rohga.cpp) [Dirk Best].
       - 0.190              : Use DEVCB for input ports and explicitly define these in all drivers [AJR].
       - 0.174              : Temp fix to regain speed in Edward Randy and clones (and quite possibly more) by commenting select logerrors that are spammed unmerciful causing extreme performance degradation (machine\deco146.cpp) [Tafoid].
       - 0.150              : Fixed DECO 146 compile [Alex Jackson].
       - 0.149u1            : Added machine\deco146.c/h. Begin creation of modern DECO 146 device with info from Charles MacDonald (machine\deco146.c/h; drivers\sshangha.c). Changed a few bits around based on discussion, still not right. Different (better/more correct) interpretation of Charles' data after some discussions. Reformat DECO 146 in a bit but you can start Super Shanghai Dragon's Eye now at least. Looks like the original might not need / use quite the same video hacks as the bootleg. Improved formatting of table. Hooked up the new DECO 146 sim side-by-side with the original in Edward Randy, it does seem that chip had the same functionality even if it was marked differently. Experiment with Mutant Fighter and DECO 146 protection. It's also similar, if not the same. Funky Jet works with the new code too, note the address bitswap is the *reverse* of the one to get from Fighters History to Nitro Ball format. I suspect there is a way to get from where we are to both of those too, and that there are in reality 2 different chip types 146 (+ various rebadges of it) and 104. Moved some functions around for further research and studying. Switch around the address bits on output port handling on the Fighters History / Nitro Ball type. This brings special sound/xor/mask ports to the same as shanghai etc. and also keeps values in the 0-127 range. This is most likely the unscrambled state based on tests. Still need to investigate the read side of it. Should be no functional change. Re-order Fighters History / Nitroball read in the same way, this makes the read ports consistent with robocop 2 and Lemmings... although I can't find a connection with shanghai on the read addresses, seems like an alt mode maybe? Moved the bit reordering out of 'core' function and into the per-game ones for Nitrobal and Fighters History. Collapse bitswaps (Fighters History out ports now use the same swap as Funky Jet) also reformat before further work. A magic address xor means Nitro Ball can work with DECO 146 code. Used info from Charles to fill in some missing remaps on IO ports. Removed the 'UNEMULATED PROTECTION' flag from Fighters History, for the first time ever you can actually play it until the end (previously the last 2 bosses would glitch because the protection results were missing; need to look at the video mixing bug causing bad BG colour in test mode still). Try a different bg pen in fghthist. Pump Stadium Hero '96 through generic 146 code. Put Captain America, Diet Go Go, Dragon Gun, Lemmings and Robocop 2 through the generic protection implementation. Fixed save states [David Haywood].
       - 14th July      2013: Charles MacDonald - Data East 146 chip: Thanks to The Dumping Union I was able to purchase a "Super Shanghai Dragon's Eye" PCB. The board was designed by Data East for Hot-B and is mostly identical to other Data East boards of the same time period. This board needed PAL dumps and had some emulation problems in MAME prompting further investigation into the 146 protection chip. I made a few modifications to the board for finer control of the 146 and have been developing and testing a lot of trojan programs to figure out how the chip works. I haven't gotten around to adding my findings to MAME and I won't have time to do so for a while, so I've decided to put up the relevant documentation. It's mostly complete and should be able to augment the existing 146 emulation to help Super Shanghai and other games. I'd really like to do more work with the other Data East protection chips because they seem very similar to the 146. If anyone can help out with providing any of the 68000-based games that use these chips (such as Robocop 2, Rohga, etc.) maybe we can complete the emulation for them as well. I've finished a new PAL dumper design. Many ideas from the previous 68000-based prototype have been refined and implemented in the new one, which had design goals of lowering cost and simplifying assembly. Adding a proper ZIF socket and a software controlled power supply makes it easy to swap out chips when dumping, and allowed me to dump a box of 60 PALs in about an hour. The control software has more exhaustive tests to identify and confirm registered devices so you can easily tell how GAL chips are programmed and how they should be dumped. This version supports 20 and 24-pin combinatorial devices and dumping of 20-pin registered devices. I've finished the new combinatorial dump analyzer, and am working on adding more devices to the registered dumping software. Then I can start work on the analysis program to convert registered dumps back into human-readable logic which should be quite a challenge. Even if that proves too troublesome, we still have a way to preserve all the data in registered PALs now, and the analysis software can follow at a later time.
       - GAMES: Edward Randy, Mutant Fighter (cninja.c), deco32.c, deco_mlc.c, Funky Jet (funkyjet.c), lemmings.c and rohga.c and Super Shanghai Dragon's Eye (sshangha.c)
       - PCB: DE146 L7A0680  Protection/IO (100 pin); Dragngun, Lockload and Stadhr96
       - DRIVERS: boogwing.cpp, cninja.cpp, dblewing.cpp, deco32.cpp, deco_mlc.cpp, dietgo.cpp, dreambal.cpp, funkyjet.cpp, lemmings.cpp, pktgaldx.cpp, rohga.cpp and sshangha.cpp
       - SOURCE: machine\deco146.cpp



       TC17G032
       - 0.199: Added video\dynax_blitter_rev2.cpp/h. Make "Rev. 2" blitter (TC17G032AP-0246 custom DIP64) a device [AJR].
       - NOTES: Dynax blitter, "revision 2" (TC17G032AP-0246 custom DIP64). The blitter reads its commands from the gfx ROMs. They are instructions to draw an image pixel by pixel (in a compressed form) in a frame buffer.
       - PCB: DYNAX TC17G032AP-0246 JAPAN 8828EAI (Hanamai, Hana Oriduru)
       - DRIVERS: ddenlovr.cpp and dynax.cpp
       - SOURCE: video\dynax_blitter_rev2.cpp


       HMC20

       - 0.192: Added HMC20 and screen raw parameters for bogeyman.cpp, chanbara.cpp, dec0.cpp, dec8.cpp, firetrap.cpp, ssozumo.cpp and mystston.cpp [Angelo Salese]
       - NOTES: DECO HMC20 CRTC (11993100 Hz)


G1.6   Dooyong

       DOOYONG           H2A11004           SCU                      Gulfstrm
       DY-2                                          PLCC44          Flytiger
       DY001     Hyundai DOOYONG DY001-A    FPGA     PLCC84          Flytiger, Gulfstrm
       DY002     Hyundai DOOYONG DY001-A    FPGA     PLCC84          Flytiger, Gulfstrm

       DOOYONG DY-OBJ-01 H2B34027                                    Popbingo
       DY208   DY-OBJ-01                                             Superx

       DOOYONG DY-PL-1   H2A16011                    QFP160          Sadari
       DOOYONG DY-PL-1   H2A32067                                    Popbingo
       DY160   DY-PL-1                                               Superx




G1.7   Dynax

       1108    Dynax 1108F0405, 1108F0406                   Mmpanic, Quizchq, Hparadis
       1427    Dynax 1427F0071                              Mmpanic, Quizchq, Hparadis
       TC17G032AP-0246 JAPAN 8828EAI                        Hanamai, Mjfriday


G1.8   Excellent Systems

       ES-9203                      Gcpinbal
       ES-9207                      Aquarium, Gcpinbal
       ES-9208                      Aquarium, Gcpinbal
       ES 9303                      Aquarium

       ES-8712     ADPCM sound      Gcpinbal, Vmetal

       WIP:
       - 0.274              : Fixed sprite delay and cleaned up code: Implemented sprite RAM DMA triggered by vertical blanking. Use internal graphics decoding layout. Removed unused variables. Reduced duplication and correct comments (excellent\excellent_spr.cpp) [cam900].
       - 0.246              : Changed sourcefile to excellent\excellent_spr.cpp.
       - 0.211              : Update video\excellent_spr.cpp: Internalized gfxdecode. Use callback for priority behavior. Reduced unnecessary lines. Simplified handlers. Fixed spacings. Correct 5bpp gfx decode behavior into rom data mixing. Fixed naming. Simplified gfxdecodes. Reduced unnecessary lines. Added layout of hi 1bpp data of gfx roms [cam900].
       - 0.154              : Added video\excellent_spr.c/h. Added 'Excellent 8-bit Sprite' device.
       - DRIVERS: aquarium.cpp and gcpinbal.cpp
       - SOURCE: excellent\excellent_spr.cpp


G1.9   Fujitsu

       CG10103 145 9520 Z14             Sprite           QFP160            Gstriker, Suprslam, Vgoalsoc
       CG24143 4181 9449 Z01            square SMD       QFP208            Jchan, Galpani3
       CG24173 6186 9447 Z01            square SMD       QFP208            Jchan, Galpani3

       MB112S146                        Fujitsu custom ASIC                Arkanoid
       MB605E53U or MB60553             Tilemap                            Gstriker, Vgoalsoc



       CG10103
       - NOTES: The Fujitsu CG10103 sprite generator is Tile based, has 16x16 4bpp tiles, Up to 7x7 in each block, 5 bit of palette selection for the mixer, Scaling (x/y), Flipping, Indipendent sorting list and 1 bit of priority for the mixer
       SOURCE: video\gstriker.cpp


       CG24173 / CG24143
       - 0.247              : Don't draw outside the cliprect. Fixed sign overflow. Fixes Gals Panic S3 crashes soon after start (kaneko\sknsspr.cpp) [hap].
       - 0.236              : Fixed oob access on transcient incorrect sprites, use masking instead of % (video\sknsspr.cpp) [O. Galibert].
       - 0.217              : Correct algorithm for high precision shrink sprite. Use 10.6 fixed point for position value. Added notes (video\sknsspr.cpp) [cam900].
       - 0.200              : Implemented bitmap clearing disable bit (video\sknsspr.cpp) [cam900].
       - 0.196              : Added device_rom_interface instead memory pointer (video\sknsspr.cpp) [cam900].
       - 0.149              : Added note (video\sknsspr.c) [hap].
       - 0.141u4            : Added video\sknsspr.c/h. Added 'SKNS Sprite' device (video\sknsspr.c). Moved Kaneko Super Nova sprite chip emulation inside its own file [David Haywood].
       - NOTES: SKNS Sprite
       - DRIVERS: galpani3.cpp, jchan.cpp and suprnova.cpp
       - SOURCE: kaneko\sknsspr.cpp


       MB60553
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.190              : Fixed MB60553 zooming tilemap compared against visible area. Improved MB60553 zooming alignment, mostly noticeable in Tecmo World Cup '94, Added rotation to MB60553 core, used by V Goal Soccer during display of football field [Angelo Salese].
       - 0.154              : Added video\mb60553.c/h. Added MB60553 tilemap chip used by Grand Striker, Tecmo World Cup '94 and V Goal Soccer for the backgrounds. Reorganized some code for Grand Striker driver (no functional change). Use custom ROZ implementation to allow for further tweaking, whatever this does it doesn't appear to be standard (I still haven't figured it out properly after 10 years) so will need it (video\mb60553.c). Shuffle bits of code around for easier experimentation [David Haywood].
       - NOTES: The Fujitsu MB60553 tilemap chip has 1 Plane, Tiles 16x16 and 4bpp, Map 64x64, Scrolling and Indexed banking (8 banks). This is the tilemap chip used by Grand Striker, Tecmo World Cup '94 and V Goal Soccer for the backgrounds
       - DRIVERS: gstriker.cpp
       - SOURCE: video\mb60553.cpp



G1.10  Gaelco


       CHIP EXPRESS RASTER   M1178-01 M032541-4 / M027851-1 9706          Radikalb, Surfplnt
       CHIP EXPRESS CHK1     M1105-01 M048494-22                          Radikalb
       CHIP EXPRESS SU3DCOL  M026402-3 9647                               Surfplnt



G1.11  IGS

       IGS001                                                             Grndtour
       IGS002                                                             Grndtour, IQBlock
       IGS003                   ASIC used for I/O (=8255)                 Chindrag, Lordgun
       IGS005      QFP144
       IGS006      QFP144
       IGS007      QFP144
       IGS008      QFP160
       IGS009                                                             igs009.c games
       IGS011      QFP160       F5XD  174    GFX controller?              Chindrag, Vbowl
       IGS012      QFP80        9441EK001    possible MCU?                Drgw2, Vbowl
       IGS017      QFP208                                                 Mgcs
       IGS022                   ASIC                                      Drgw3
       IGS023      QFP256       L8A0290                                   PGM-System
       IGS025      PLCC68       ASIC or 8255 ?                            Drgw2, Drgw3, Olds
       IGS026      QFP144                                                 PGM-System
       IGS027A     QFP120       ARM7/9? based CPU with internal 64k ROM   pgm.c: Ddp2, Dmnfrnt, Dw2001, Martmast, Py2k2, Puzlstar, Puzzli2
       IGS028      QFP100                                                 Olds
       IGS029                                                             Mgcs
       IGS031                   custom ASIC                               Slqz2
       IGS036        ?          ? CPU + GFX                               igs_m036.c + pgm2.c games


       WIP:
       - 0.243           : IGS022: Changed description to 'IGS022 encrypted DMA device'. Fixes for igs017.cpp games. Fixed initial auto-DMA mode. Enlarged internal RAM. Added stack. Fixed command 12: Copy -> Stack Push. Added command 45: Stack Pop. Fixed command 6d opcode 1: Add Imm -> Sub Values. Added command 6d opcode 0: Add Values. Extended logging [Luca Elia, RockyWall]. Don't do unneeded work on strings when logging is disabled (machine\igs022.cpp) [hap].
       - 0.226           : Added some state saving to machine\igs025.cpp [Osso].
       - 0.223           : Simulated 'Photo Y2K 2' sprite offset decode (machine\pgmprot_igs027a_type1.cpp). Promoted game to working [iq_132, dink].
       - 0.222           : Misc demacroization (machine\pgmprot_orlegend.cpp) [Osso].
       - 0.193           : Updated IGS036 to support kof98umh (machine\igs036crypt.cpp). The format of the key tables is now compatible with the real ones provided by the internal ARM [Andreas Naive]. IGS036 seems to be derived from a ARM946ES type core based on using MPU not MMU, change it to be such (cpu\arm7\arm7.cpp) [David Haywood].
       - 0.192           : Dumped internal IGS036 roms from Oriental Legend 2 and Knights of Valour 2 New Legend (V302, China) [Morten Shearman Kirkegaard and Peter Wilhelmsen]. Started adding some devices to the PGM2 driver to support it. Derived IGS036 type in ARM7/9 core, because it seems like MMU could be different and there are probably other internal devices. Fixed (?) BLX (LO) thumb opcode in ARM7/9 core, was storing a return address that skipped the following opcode. There might still be ARM9 issues [David Haywood].
       - 0.189           : Decrypted clone Virtua Bowling (Hong Kong, V101HJS) and added its own bitswaps for IGS003 and IGS011. Found dipswitches to perform a protection test in Virtua Bowling. Changed IGS012 mode toggling to pass the test. Changed IGS003 command 48 in Long Hu Bang II and Virtua Bowling to potentially work in more cases (based on Long Hu Bang II tables) [Luca Elia].
       - 0.173           : IGS009 protection patch for the newer Jingle Bell sets [Luca Elia].
       - 0.156           : Correct patches for Dragon World II (ver. 100H, Hong Kong [Hokg Kong]) (machine\pgmprot_igs025_igs012.c) [iq_132].
       - 0.155           : Preliminary IGS029 protection simulation for Mahjong Man Guan Cai Shen [Luca Elia].
       - 0.153           : Added machine\igs036crypt.c/h. IGS036 decryption support [Andreas Naive].
       - 0.152           : PGM cleanups (drivers\pgm.c, machine\igs025.c, pgmprot_igs025_igs012.c, pgmprot_igs025_igs022.c, pgmprot_igs025_igs028.c and gmprot_igs027a_type3.c). Added partial dump of internal rom from IGS game 'The Gladiator' - it's missing the first 0x188 bytes which are execute-only, unfortunately the code jumps to them in multiple places and it appears to be important so it still doesn't work (machine\pgmprot_igs027a_type3.c). Idle skip for theglad. Still don't understand current behavior tho, code is very similar in places to killbldp. Improved notes in machine\pgmprot_igs027a_type3.c. Changed so that the intro runs, but it can no longer be started, but at least this is a more proper flow. Document another finding in pgmprot_igs027a_type3.c. More sensible stack location to prevent crashes/glitches and shuffle some code about [David Haywood].
       - 0.151           : Added machine\igs022.c/h, igs025.c/h and igs028.c/h. Improvements to Dragon World 3 protection simulation, game seems mostly playable now although a DMA mode copying 68k code to RAM is still missing [iq_132]. Couple of tweaks to the PGM submission (machine\pgmprot_igs025_igs022.c). Added igs025/igs022 DMA mode 4 for drgw3. Small fix to unbreak killbld from iq132. Refactor some IGS protection code for easier sharing between IGS017 and PGM driver. Further refactoring (drivers\igs017.c, machine\igs025.c andn pgmprot_igs025_igs022.c). Fixed broken DMA mode and minor tweak (machine\igs022.c). Shunt some IGS code around. Improved IGS028 [David Haywood].
       - 0.150           : Make Puzzli 2 play some intro music (machine\pgmprot_igs027a_type1.c). Some of the other Z80 pointers on puzzli2. Added couple of ugly hacks to protection sim while I figure things out properly, these will go away shortly. Added extra protection value. More research, need to start joining the dots. More notes. Added logic for the graphic offset / palette commands. Further logic improvement for protection. Level data stream notes. Misc puzzli2 guesses. Tidy up some no longer needed pgm/puzzli2 bits notes. Must also read back the cart region here when the reset command is issued, also applied same logic to our other sims (includes\pgm.h and machine\pgmprot_igs027a_type1.c) [David Haywood].
       -  3rd August 2013: David Haywood - This is possibly a bit of a premature announcement because I don't consider the game to be working yet but I've spent a large amount of the past week looking at the IGS game 'Puzzli 2' with some real hardware assistance from rtw. As with almost all IGS games of this period there is an MCU on the board providing certain functions for use by the main game code. The ultimate goal is to find a way to trick the MCU into spilling out it's internal ROM and simply emulate the ARM CPU program contained inside but in some cases that isn't possible because the MCU is not using any commands with unchecked lookups into internal ROM. After running a data logger on the Puzzli 2 board and watching what it wrote to and read from the device it quickly appeared Puzzli 2 was one of those cases, all functions were work on the data passed in, transform it and give it back in another format. There are 3 main functions the Puzzli 2 MCU provides, first, descrambling of the addresses where the Z80 code is stored for sound / music, this was the first thing I hooked up after studying the logs (albeit with hardcoded addresses because the scramble isn't clear) It was also confirmed that the device provides the correct addresses for Puzzli 2 or Puzzli 2 Super depending on which game code you have running, so clearly the addresses returned are derived from the data passed to the device at startup. The second function is providing offsets to where graphics / palettes are stored. This is used for the random tiles shown during the intro animation and all the backgrounds. In the end this turned out to be a two step operation, the first step multiplying the two nibbles of data passed by 0x19 and 0x5, the second step being the addition of a 4-bit value to the final result. The third, and by far most complex thing it does is descramble and decompress the level data structure for each level. Before each level starts the 68k passes in a stream of data from ROM, the MCU then applies a loop of 16 8-bit xor values to that data (from a 256 byte table, the first value passed is the 8-bit offset into that table) Having done that, in the same step (without revealing the intermediate results to the 68k) the MCU fills in a 10x8 structure for the level data as well as a few misc variables based on the input stream. The MCU is also responsible for flagging to the 68k when it has received enough data to build a level. The level structure is then read back with another command, again with the MCU signaling when enough data has been returned based on the data passed earlier. What this means is to simulate the protection device I had to understand the format of the source level data, and the format of the level data the game expects (sizes, object types etc.) as well as find a way to figure out the scrambling, easier said than done because you can't see the descrambled data directly, only the final level structure after the MCU has also expanded / decompressed that descrambled data. Understanding this was by far the most time consuming part and is where work still really needs to be done. The work done so far has however seen the game emulation improve significantly, many level structures are built correctly, although currently if I look at all the levels the game has several contain what appear to be invalid elements (if you put them in a level the level becomes impossible to finish) interestingly many of these are stripped from the Puzzli 2 Super rom, so I don't know if they're unused data, game bugs, or if they do something else on the level they're meant to be used (they could also be errors in my descrambling, but the xor addresses on which they fall are confirmed with other levels so that's unlikely). There are also problems with my interpretation of the 'depth' data, I think I see where it's passed and read but what I'm doing to it is clearly wrong, the width data passed at the same time appears to be processed correctly by the simulation. Depth is one of the level difficulty factors and it being wrong is causing the black bars at the bottom of some screens because it's drawing everything too high up / for an easier difficulty setting. Hopefully I can figure out the remaining issues and we can get this one marked as working in the near future. Interestingly it also points at there being a background colour register we're not emulating on PGM, unless some of the backgrounds are just glitchy on real hardware (it happens more often on games than you'd think). Even if things aren't fully working yet this felt like promising enough progress to mention it, and should give some insight into just how tricky even the easier cases can be sometimes. Also for those wondering Puzzli 2 Super is quite a significant upgrade, it adds the entire VS CPU mode, the regular Puzzli 2 only has a VS. mode for 2 players. One thing I really like about this game is the music, I find many of the tunes to be catchy and perfectly fitting for a game of this kind. I don't know if like with Bee Storm they're not all exactly original creations but I have a feeling we might find out with time if people end up matching them to source mods ;-) The intro music I'd hope is original because it syncs up so well with the intro animation and is delightfully bouncy!
       - 0.149u1         : More useful filenames for the igs protection sims [David Haywood]. Changed machine\pgmprot.c to pgmprot_orlegend.c, pgmprot1.c to pgmprot_igs027a_type1.c, pgmprot2.c to pgmprot_igs027a_type2.c, pgmprot3.c to pgmprot_igs027a_type3.c, pgmprot4.c to pgmprot_igs025_igs022.c, pgmprot5.c to pgmprot_igs025_igs012.c and pgmprot6.c to pgmprot_igs025_igs028.c.


       IGS027A
       - 0.270              : Added igs\igs027a.cpp/h. Added 'IGS 027A ARM CPU (little)' device. Started encapsulating IGS 027A onboard peripherals. Added 5-bit output port. Added output port, and flagged as having imperfect timing as confidence in timers is still low. Slight simplification. Moved presumed onboard RAM and possible FIQ enable into the device [Vas Crabb]. Correct timer interval calculation. Fixes slowdown in jking02 [XingXing].
       - NOTES: IGS 027A ARM CPU (little)
       - DRIVERS: igs_fear.cpp, igs_m027.cpp and igs_m027xa.cpp
       - SOURCE: igs\igs027a.cpp



G1.12  Imagetek

       I4100    Imagetek I4100 052 9309EK701, QFP208 (Poitto), Imagetek I4100 052 9227KK701 (Pangpoms)             NOTES: Imagetek I4100 is a custom video chip used in Metro Games.
       I4220    Imagetek I4220 071 9338EK707, QFP208, I4220 071 9403EK701 (Balcube, Blzntrnd, Toride2g, Vmetal)    NOTES: The Imagetek I4220 is a Video Chip for 8 bit sprites and tiles used by Metro Games
       I4300    I4300 095                                                 (Mouja, Dokyusei, Dokyusp, Gakusai, Gakusai2)
       I5000    Imagetek I5000 (2ch video & 2ch sound)                    (Tmmjprd, Rabbit)

       WIP:
       - 0.262              : Added blitter logging (video\imagetek_i4100.cpp) [Angelo Salese].
       - 0.243              : Added external pin callbacks and disallow internal irq acks for 5 to 7 lines. Extend external pin notes (video\imagetek_i4100.cpp) [Angelo Salese].
       - 0.228              : Moved metro.cpp and hyprduel.cpp interrupt control (mostly) down into VDP [AJR]. Added state of CRTC related value for debug [cam900].
       - 0.227              : Added some missing initializations, hopefully fixing random metro.cpp crashes at startup (video\imagetek_i4100.cpp) [O. Galibert].
       - 0.226              : Initialized a couple of variables (video\imagetek_i4100.cpp) [Osso].
       - 0.223              : Partially fix flip screen. Fixed sprite position, tilemap offsets and glitches in Hyper Duel [cam900].
       - 0.222              : READ/WRITE macros removal (video\imagetek_i4100.cpp) [Osso].
       - 0.219              : Confirm raster bug for Puzzli (video\imagetek_i4100.cpp) [Angelo Salese].
       - 0.214              : Reduced duplicates. Use struct for sprite drawing routines. Fixed spacings. Use shorter/correct type values. Added notes [cam900].
       - 0.212              : Converted screen update method to bitmap_rgb32 (video\imagetek_i4100.cpp) [AJR].
       - 0.204              : Imagetek I4100/4220/4300: Added support for buffered sprites. Cleanup sprite drawing routine. Internalized gfxdecode (all driver shared same gfxdecodes). Cleanup and removed MCFGs [cam900].
       - 0.203              : Added missing save state to video\imagetek_i4100.cpp, fixes Mahjong Gakuensai 2 (Japan) save state regression [Osso].
       - 0.196              : Boost tilemap drawing routines when VIDEO_UPDATE_SCANLINE case of screen video attributes and fixed tilemap drawing at tilemap offset X/Y !=0 case (video\imagetek_i4100.cpp) [cam900].
       - 0.192              : Added 'Imagetek I4100 052 VDP' device. Rewritten Imagetek I4100/I4220/I4300 video display processor family, hooked it up to Metro driver [Angelo Salese].
       - 0.145u7            : Chiplabel correction [hap]: Imagetek 1xxxx -> Imagetek Ixxxx
       - DRIVERS: hyprduel.cpp and metro.cpp
       - SOURCE: video\imagetek_i4100.cpp


G1.13  Incredible Technologies

       IT42          Graphics Generator       QFP208          Pairs, Timekill
       ITV4400       Custom Blitter                           Hstennis, Neckneck
       ITBP-1        PAL   TIBPAL 16R4                        Pairs, Rimrockn, Timekill
       ITMP-1        PAL                                      Ninclown
       ITSS-1        PAL   TIBPAL 16L8                        Pairs, Rimrockn, Timekill
       ITVS          ITVS.PLD, PAL16L8                        GTG, Stratab
       ITVS-2        PAL???                                   Rimrockn, Wfortune
       ITVS-3        PAL16L8                                  Peggle, Neckneck, Hstennis
       ITVS-4        PAL???                                   Rimrockn
       ITVS-5        PAL16L8                                  Ninclown, Pokrdice, Slikshot
       ITVS-7        TIBPAL 16R4-15CN         20 pins         Timekill
       ITVS-8        TIBPAL 16R4-15CN         20 pins         Timekill
       ITVS-9        GAL20V8A                 24 pins         Timekill
       ITVS-10       TIBPAL 16L8-15CN         20 pins         Timekill
       ITVS-11A      TIBPAL 16L8-15CN         20 pins         Timekill
       ITVS-12                                                Pairs
       ITVS-13                                                Pairs
       ITVS-14                                                Pairs
       ITVS-15                                                Pairs
       ITVS-16A                                               Pairs




G1.14  Jaleco


       JALECO       MCU, scratched surface          DIP24      IC pinout -> see drivers\ddayjlc.c; Games: D-Day (Jaleco 1984) + Parallel Turn (Jaleco 1984)

       GS-9000404 9248EP004                         QFP44
       GS-9000406 9345K5005                         QFP80

       GS600406                                                (Scudhamm)

       GS900151                                     QFP44
       GS90015-01   GS9001501, GS900151             QFP44
       GS90015-02                                   QFP100
       GS90015-03                                   QFP80
       CS90015-04                                   QFP64
       GS90015-05                                   QFP100
       GS90015-06                                   QFP100
       GS90015-07                                   QFP64
       GS90015-08                                   QFP64
       GS90015-09                                   QFP64
       GS90015-10                                   QFP64
       GS90015-11                                   QFP100
       GS90015-12                                   QFP80

       MR90015      ROM-Label   (1-35)                         (F1gpstar, Scudhamm, Wildplt)

       GS91022-01   9335EK005                       QFP120
       GS91022-02   9340EK703   or  9347EX002       QFP160     (Tetrisp2)
       GS91022-03   9343PP718                       QFP100
       GS91022-04   9334PP710   or  9721PD008       QFP100     (Desertwr, Tetrisp2)
       GS91022-05   048 9726HX002                              (Tetrisp2)


       SS91022-01   9336 ABGA                       QFP208
       SS91022-02   9330 IAGA                       QFP100
       SS91022-03   9428XX001   or  9343EX012       QFP176
       SS91022-05   9347EX002   or  9349EX002       QFP120
       SS91022-07   9338EV 436111 06440             QFP208
       SS91022-10   9513EV 370121 06441             QFP144     Decryption (Desertwr, Gratiaa, Tp2m32, Gametngk)


       SS92046-01   9338EV 436091 06441             QFP144     Decryption (Bbbxing, F1superb, Tetrisp, Hayaosi1)
       SS92047-01   9425EV 367821 06441             144pin     Decryption (Gratia, Kirarast)
       SS92048-01   9410EV 436091 06441                        Decryption (P47-Aces)




       Jaleco Megasystem 32 Sprite hardware

       - 0.217              : Added video\ms32_sprite.cpp/h. Device-fied sprite hardware (video\ms32_sprite.cpp). Added notes [cam900].
       - DRIVERS: bnstars.cpp, ms32.cpp and tetrisp2.cpp
       - SOURCE: video\ms32_sprite.cpp


       Mega System 1 Tilemap

       - 0.261              : Trigger screen update on scroll register write (visible in Saint Dragon) (jaleco\ms1_tmap.cpp) [David Haywood].
       - 0.247              : Removed some custom GFX decodes in favor of the ones provided in emu\video\generic.cpp (jaleco\ms1_tmap.cpp) [Osso].
       - 0.199              : Initialize VRAM to sane default (video\ms1_tmap.cpp), fixes ugly back pen showing up in Big Run. Rewrote jalmah.cpp video emulation using Mega System 1 tilemap devices (video\ms1_tmap.cpp) [Angelo Salese].
       - 0.193              : Add notes: Each tilemap is generated by a pair of gate arrays. The mahjong games use NEC D65012GF303 (QFP80) and D650120F307 (QFP80), whose locations are respectively labeled as "VCTR" and "SCPT" on the Legend of Makai PCB. The later Mega System 1 games instead feature Jaleco-badged chips whose part numbers are GS-9000406 (QFP80) and GS90015-02 (QFP100) [AJR].
       - 0.178              : Added 'Mega System 1 Tilemap' device. Make Mega System 1 tilemaps into a device (video\ms1_tmap.cpp). Moved scroll update nearer to its former place; better if tilemaps get switched out. Added tilemap device to cischeat.cpp [AJR].
       - DRIVERS: acommand.cpp, cischeat.cpp, jalmah.cpp and megasys1.cpp
       - SOURCE: jaleco\ms1_tmap.cpp



G1.15  KANEKO

       KANEKO         BABY004 9511EX009 VT-171     QFP44              (Galpani3, Jchan, SuperKanekoNovaSystem)
       KANEKO ALTAIR    BY006-224                  QFP208             (SuperKanekoNovaSystem)
       KANEKO BEAST     80C51 MCU                  DIP40              (Djboy)  WIP: 10th May 2009: Smitdogg - The Kaneko Beast chip has been decapped!
       KANEKO DENEB     BY007-32F                  QFP208             (SuperKanekoNovaSystem)
       KANEKO CALC1-CHIP                           DIP40              (Galpanic, Galsnew)
       KANEKO CALC3 508                            QFP74, MCU         Note: Decapping shows the CALC3 MCU to be a NEC uPD78322 series MCU with 16K internal ROM.
       KANEKO HELP1-CHIP                                              (Blazeon)
       KANEKO I/O JAMMA MC-8282 047, MC-8282837    46 pin             (Mgcrystl, Galsnew)
       KANEKO IU-001 9045KP002                     QFP44              (Mgcrystl)
       KANEKO IU-004                                                  (Berlwall)
       KANEKO JAPAN 9152EV 175101                  QFP160
       KANEKO JAPAN 9203 T     or 9203T            QFP44
       KANEKO JAPAN 9204 T                         QFP44
       KANEKO JAPAN 9448 TA                        QFP44              (Gmtr2)
       KANEKO KC-001                                                  (Gpan2qiz)
       KANEKO KC-002 L0002 023 9339EK706           QFP208             (Gmtr2)
       KANEKO KC-BYO KA05-1068                                        (Gpan2qiz)
       KANEKO KC-TAS KA07-1209                                        (Gpan2qiz)
       KANEKO KC-YUU KA06-0041                                        (Gpan2qiz)
       KANEKO KC-SHU KA03-1849                                        (Gpan2qiz)
       KANEKO MERMAID     80C51 MCU                DIP40              (Heavy Unit)
       KANEKO MUX2-CHIP                            QFP64              (Mgcrystl)
       KANEKO PANDORA   PX79C480FP-3  sprite chip                     (Djboy, Snowbros, Galpanic)
       KANEKO PISCES                                                  (Gpan2qiz)
       KANEKO SPCII-A  JH-4181                     QFP208             (SuperKanekoNovaSystem)
       KANEKO SPCII-B  JH-6186                     QFP208             (SuperKanekoNovaSystem)
       KANEKO TBS0P01 452 9430HK001 / TBSOP01      PQFP74 square SMD                   Note: ToyBox NEC uPD78324 series MCU with 32K internal rom
       KANEKO TBSOP02 454 9451MK002   Custom MCU?  QFP74              (Gmtr2)    Note: ToyBox NEC uPD78324 series MCU with 32K internal rom
       KANEKO VEGA      BY005-197                  QFP144             (SuperKanekoNovaSystem)
       KANEKO VIEW2-CHIP 23160-509 9047EAI         QFP144             (Blazeon, Bloodwar, Mgcrystl)
       KANEKO VIEWIII-A  BL-001                    QFP240             (SuperKanekoNovaSystem)
       KANEKO VU-001 046A                          QFP48              (Mgcrystl, BakuretsuBreaker)
       KANEKO VU-002 052 151021                    QFP160             (Berlwall, Blazeon, Mgcrystl)
       KANEKO VU-003                                                  (Berlwall)

       699205P                                     QFP44              (Bakubrkr, Mgcrystl)
       699206P                                     QFP44              (Bakubrkr, Mgcrystl)



       WIP:

       Kaneko CALC Hitbox

       - 0.248              : Added kaneko_hit device to Air Buster [hap].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.154              : Smear byte writes the same as a real 68000 [Alex Jackson]. Fixed regression caused by 68k change (machine\kaneko_hit.c) [David Haywood].
       - 0.146u5            : David Haywood added save support on a few Kaneko devices (machine\kaneko_hit.c).
       - DRIVERS: airbustr.cpp, expro02.cpp, galpanic.cpp, kaneko16.cpp and sandscrp.cpp
       - SOURCE: machine\kaneko_hit.cpp



       Kaneko CALC3 MCU

       - 0.276              : Removed hard-coded tags and updated comments (kaneko\kaneko_calc3.cpp) [cam900]. Organised decryption table as 256*64 and restored tabulation killed by a previous incarnation of srcclean [Vas Crabb].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.177              : Stop trashing memory in machine\kaneko_calc3.cpp [O. Galibert]. Fixed read case in kaneko_calc3.cpp [David Haywood].
       - 0.155              : KANEKO CALC3 "standardized" it some. Minor cleanup [Osso].
       - 0.146u5            : Kaneko Calc 3 is now a device [David Haywood]. Comment: Note, could still do with Andreas seeing if he can find a relationship between the encryption tables we've derived from studying the protection (used to decrypt the various blocks in the protection data rom) and the final block in the protection data rom. Put Kaneko Calc3 on it's own timer, so the driver doesn't need to keep calling run from the irq function, also cleaned up Gals Panic 3 a bit.
       - 0.133u1            : Calc 3 MCU update [David Haywood]: Shuffled a few things around based on new findings. Added an extra decryption table used for the Brap Boys startup code (still doesn't do anything interesting). Noted that one of the unknown parameters for the MCU Init command is where it reads / writes EEPROM data from. Noted that an additional parameter in the MCU commands may cause further displacement of the writeback address, as BRap Boys seems to rely on this (needs further testing) - added a hack for now so that BRap Boys places the writeback address of the initial table somewhere that causes it to get executed.
       - DRIVERS: kaneko16.cpp
       - SOURCE: machine\kaneko_calc3.cpp



       Kaneko GRAP2

       - 0.272              : Added RLE blitter dstaddress (fixes gals gfx issues on 100% clear) (kaneko\kaneko_grap2.cpp) [dink].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.196              : Bit of improves on bg-bg priorities. Fixed some galpani3 alpha blending and sprite-bg/bg-bg priorities. Cleanup duplicates. Added notes. Added device_rom_interface instead runtime tag lookup to Kaneko GRAP2. Converted address map related defines into device address map. Added internal palette configs. Implemented brightness. Added m_brightreg on save state. Fixed color (video\kaneko_grap2.cpp) [cam900].
       - 0.146u5            : Added video\kaneko_grap2.c/h. Made Kaneko's GRAP2 (rle blitter + framebuffer) a device. Added save support on a few Kaneko devices (video\kaneko_grap2.c) [David Haywood].
       - NOTES: Kaneko GRAP2, RLE blitter / Framebuffer etc.
       - DRIVERS: galpani3.cpp
       - SOURCE: video\kaneko_grap2.cpp



       Kaneko KC002/VU002 Sprites

       - 0.272              : Use generic graphics decoding layouts. Also removed unnecessary object finders and use bool rather than int for Boolean variables [cam900].
       - 0.218              : Fixed drawing behavior. Fixed priority in enabled 'keep sprite' function. Splitted 'Copy temporary bitmap into screen bitmap' function and Getting sprite function [cam900].
       - 0.210              : Internalized gfxdecodes (KC002 has 8bpp). Reduced unnecessary lines. Fixed spacings. Use shorter/correct type values [cam900].
       - 0.184              : Added 'Kaneko KC002 Sprites' device.
       - 0.146u5            : Added video\kaneko_spr.c/h. Kaneko sprites are now a device. This should facilitate cleaning up video related files as well (sprites and tilemaps) [David Haywood].
       - DRIVERS: expro02.cpp, galpani2.cpp and kaneko16.cpp
       - SOURCE: video\kaneko_spr.cpp



       KANEKO MERMAID

       - 0.141              : Phil Bennett, Dr. Decapitator and Andrew Gardner hooked up KANEKO MERMAID protection MCU to Heavy Unit and removed obsolete simulation code. Also updated the driver to use a state class.
       - 28th December  2010: Andrew Gardner - A few months ago, Phil Bennett took it upon himself to tackle the Kaneko MCUs Dr. Decapitator photographed and gave to MAMEDev. I'm as good as the next guy at typing in bits, so I offered to help. The doc's images were nice, allowing us to type in all the data in a short amount of time. Phil figured out how to convert the bits to bytes, and quickly got DJ Boy to talk to the newly-typed-in (dumped) MCU. Often times, looking at the disassembly of a ROM gives a person a pretty good sense of the quality of what we have typed. Things were looking good, but there were a few errors. A little bit twiddling fixed these errors, but looking back at the original die images made us very concerned - sometimes the disassembly made Phil sure a bit should be a 1, but the die image was subtly blurry, and we both typed in a 0. Because of this, we asked for another set of images of the DJ Boy MCU from the Doc, and he very graciously gave us a higher magnification level. This new set of images was so good, it was no problem typing the whole ROM in again, and Phil hooked it up quickly and effectively. We had the same situation going on with the MCU in Heavy Unit. The doc's images were good, but not amazing. We typed them in, but asked for higher magnification images, knowing there may be some issues. Just the other day, the Doc sent us those higher resolution images. Phil typed in the images (I didn't finish my typing), fixed a couple of bits we had improperly typed with the lower-resolution images, and hooked up the MCU. The results should show up in the next release of MAME. In the meantime, David Haywood was kind enough to test out the emulation and record a video of MAME running the game Heavy Unit.
       - 20th May       2009: Guru - The 80C51 MCU from Heavy Unit has just been decapped. This is the ROM image, you can clearly see a large part of the lower section of the ROM is unused.
       - DRIVERS: hvyunit.cpp
       - SOURCE: drivers\hvyunit.cpp



       Kaneko PANDORA GFX

       - 0.262              : Use device_gfx_interface to decode graphics (kaneko\kan_pand.cpp) [cam900].
       - 0.221              : Simplified some handlers (video\kan_pand.cpp) [Osso].
       - 0.187              : Eliminate driver_data dependency (video\kan_pand.cpp, drivers\airbustr.cpp and snowbros.cpp) [AJR].
       - 0.174              : Changed video\kan_panb.cpp to video\snowbros.cpp. Allow separate SnowBros driver building [Miodrag Milanovic].
       - 0.154              : Changed description to 'Kaneko PANDORA GFX'. Converted Kaneko Pandora to use inline config [Fabio Priuli].
       - 0.150              : Removed video\kan_panb.h.
       - 0.149              : Added 'Kaneko Pandora - PX79C480FP-3' device. Modernized Kaneko Pandora device [Osso].
       - 0.135u3            : Fabio Priuli converted Kaneko Pandora sprite chip to be a MAME device and updated drivers accordingly.
       - 0.117u1            : Moved Sand Scorpian and Gals Panic over to use the Pandora emulation. Also fixed some problems in the pandora emulation which improves the sprites in Djboy [David Haywood].
       - 0.117              : Added video\kan_panb.c/h and kan_pand.c/h. David Haywood moved "Pandora" sprite chip implementation to its own file. Updated Snow Bros, Air Buster, DJ Boy and Heavy Unit to use ths new generic implementation.
       - DRIVERS: airbustr.cpp, djboy.cpp, galpanic.cpp, hvyunit.cpp, sandscrp.cpp and snowbros.cpp
       - SOURCE: kaneko\kan_pand.cpp



       KANEKO TOYBOX

       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.177              : Make kaneko_toybox.cpp read safe [David Haywood].
       - 0.155              : KANEKO TOYBOX cleanups [Osso].
       - 0.146u5            : Added machine\kaneko_toybox.c/h. Kaneko TOYBOX is now a device. Added save support on a few Kaneko devices (machine\kaneko_toybox.c) [David Haywood].
       - DRIVERS: galpani3.cpp, jchan.cpp and kaneko16.cpp
       - SOURCE: machine\kaneko_toybox.cpp



       Kaneko VIEW2 Tilemaps

       - 0.272              : Use generic graphics decoding layouts. Also removed unnecessary object finders and use bool rather than int for Boolean variables [cam900].
       - 0.210              : Internalized gfxdecode and values. Reduced unnecessary lines. Fixed spacings [cam900].
       - 0.209              : Updates/Cleanups: Added address_map for VRAM handling. Moved expro02.cpp exclusive tilemap bankswitching function into expro02.cpp (now callback'd). Fixed namings. Reduced duplicates. Simplified handlers [cam900].
       - 0.186              : Renamed (kaneko_view2_tilemap) to (kaneko_view2).
       - 0.146u5            : Added video\kaneko_tmap.c/h. Added 'Kaneko VIEW2 Tilemaps' device (video\kaneko_tmap.c). Started the process of converting some Kaneko games to use devices. Kaneko sprites are now a device. This should facilitate cleaning up video related files as well (sprites and tilemaps) [David Haywood].
       - DRIVERS: expro02.cpp, jchan.cpp, kaneko16.cpp and sandscrp.cpp
       - SOURCE: video\kaneko_tmap.cpp



       Kaneko VU002 Sprites

       - 0.218              : Fixed drawing behavior. Fixed priority in enabled 'keep sprite' function. Splitted 'Copy temporary bitmap into screen bitmap' function and Getting sprite function [cam900].
       - 0.210              : Internalized gfxdecodes (VU002 has 4bpp). Reduced unnecessary lines. Fixed spacings. Use shorter/correct type values [cam900].
       - 0.184              : Added 'Kaneko VU002 Sprites' device.
       - 0.146u5            : Added video\kaneko_spr.c/h. Kaneko sprites are now a device. This should facilitate cleaning up video related files as well (sprites and tilemaps) [David Haywood].
       - DRIVERS: expro02.cpp and kaneko16.cpp
       - SOURCE: video\kaneko_spr.cpp




G1.16  Konami

       K824-501    Gberet, Megazone
       510-47      Tmnt (DIP64)

       0005290     Hcrash                              (SDIP64)
       0005291     Hcrash                              (ZIP64)
       0005292     Hcrash                              (SDIP64)
       0005293     Hcrash                              (SDIP64), also stamped 'TC15G014AP-0019'
       0005294     Hcrash                              (ZIP64) Coin counter driver ?
       0005295     Hcrash                              (SDIP64)
       003461      Polystar                            (QFP100)
       005849      Gberet, Jailbrek                    (005849 8523 E04)
       005885      Finalizr, Jackal, Ddribble          (PGA177)
       007121      Combasc, Tricktrp
       007232      Citybomb, Hcrash                    (SDIP64)
       007324      Lethalen
       007327      Rockrage                            (DIP40)
       007342      Rockrage, TheHustl                  (PGA181)
       007420      Rockrage, TheHustl                  (SDIP64)
       007452      Combasc, Blkpanthr
       007552      Ddibble                             (PAL16L8A)
       007553      Ddibble                             (PAL10L8)
       007593      Blkpanthr, Kittenk, Citybomb        (custom ceramic flat pack with 56 legs)
       007644      Lethalen, Tmnt                      (22pin MSI package)
       007801      Fastlane
       051316      88games, Ajax, Tail2nos, Utraman    (PSAC)
       051550      Ultraman, Citybomb
       051649      Citybomb
       051937      Thndrx2, Tmnt                       (Konami 051937 8937 W39)
       051960      Thndrx2, Tmnt                       (Konami 051960 8938 W32)   Triggered IRQs (Ajax)
       051962      Surpratk, Blockhl, Tmnt             (Konami 051962 8930 W52)
       052001                                                                     KONAMI CPU
       052109      Surpratk, Blockhl, Tmnt             (Konami 052109 8926 W42)   Triggered IRQs, controll coin counters, select work RAM or palette and enable char ROM reading through the video RAM.
       052295      Citybomb                            (PAL16L8)
       052526      Blockhl                             (Konami 052526 8925 Y13)  KONAMI CPU
       052535      Spy
       052627      Kittenk                             (PAL16L8)
       053180      Spy
       053244      Lethalen, Rollerg, Surpratk, Tmnt2    (Sprite Control)
       053245      Lethalen, Rollerg, Surpratk, Tmnt2    (Sprite Rendering)
       053246      Dadandrn, Dbz, Dbz2, Moo, Rungun, Mystwarr, Le2  (053246A QFP120 - Motion objects)
       053247      Dbz, Dbz2, Moo                      - SOURCE: The screen in Over Drive is cluttered with sprites which aren't supposed to be visible, increasing the coordinate mask in K053247_sprites_draw() from 0x3ff to 0xfff fixes this but breaks other games (e.g. Vendetta).
       053248                                                                    KONAMI CPU
       053250      Xexex, Metamorphic Force, Over Drive  - NOTES: The K053250(LVC) is a effect generator.
       053251      Dbz, Dbz2, Tmnt2, Moo, Xmen
       053252      Dadandrn, Dbz, Dbz2, Hexion, Rollerg, Moo, Rungun   (QFP44 - Motion objects)
       053253      Rungun, Xmen                        - NOTES: Motion objects (Rungun)
       053260      Thndrx2
       053936      Blzntrnd, Dadandrn, Suprslam, Rungun    (053936 PSAC2  - QFP80 Backgrounds)  - NOTES: ROZ layer generator (Dbz, Dbz2, F1GP), 3d ROZ plane used for backgrounds (PolygoneCommanders)
       053990      Mtlchmpj. Tmnt2
       054000      Thndrx2
       054009      Plygonet                       (polygon rasterizers)
       054010      Plygonet                       (polygon rasterizers)
       054156      Dadandrn, Dbz, Dbz2, Mystwarr  (Tiles, QFP160)
       054157      Dadandrn, asterix.c, dbz2.c, gijoe.c, konamigx.c and xexex.c   (QFP160)  - NOTES: The K054157 is a complete subset of the K056832.
       054321      Xmen
       054338      Dadandrn, Le2                  (QFP160) - NOTES: Alpha blending (drivers\xexex.c)
       054539      Lethalen                       (PCM sound chip)
       054968A     Lethalen
       055550      Dadandrn                       (QFP64)
       055555      Dadandrn, Le2, Konami-GX       (8-bit-per-pixel priority encoder, PCUCS, QFP176, very tiny chip)
       055673      Dadandrn, Le2, Rungun          (QFP176 (?)- Motion objects - Very tiny chip )
       055996      Dadandrn, Gaiapolis            (PAL16L8 for sound)
       056046      Lethalen                       Mask16M-8bit rom
       056049      Lethalen                       Mask8M-16bit rom
       056230      RacinForce                     (LAN interface)
       056469      Dadandrn, Gaiapolis            (PAL16L8 for CPU/GFX)
       056540      RacinForce, Opengolf
       056602      Cryptklr, Konami GV            (A/D converter ?)
       056734      Daiskiss, Puzldama
       056766      Le2                            (Sprites)
       056800      Le2, Gradius4                  (PQFP80)
       056832      gijoe.c, konamigx.c, moo.c, mystwarr.c and xexex.c       (Tiles)
       056879      Le2, Polystar, Racinfrc        (TQFP120)
       057910      Gokuparo
       057911      Gokuparo
       057913      Gokuparo
       057915      Gokuparo
       057917      Gokuparo
       057920      Gokuparo
       057921      Gokuparo
       058141      CryptKiller                    (PCM sound chip)
       058143      Hmcompm2, Bmcompm2             (Tiles)
       058146      Soccerss, Konami System GX
       058232      Polystar                       (ceramic flat pack IC, DAC?) (SIP14)
       058239      Konami-GV                      (PALCE16V8H)


       KS10011     KS10011-PF                       = 053936             Plygonet, Racinfrc, Suprslam
       KS10021     KS-10021                         = 054009             Plygonet
       KS10031     KS-10031                         = 054010             Plygonet
       KS10071     PQFP w/heatsink                                       GTIClub
       KS10081     PQFP                                                  GTIClub
       KS10101                                                           Bmcompmx, Hmcompm2
       KS160X2     KS160X2 HD/C13327.00-2.0 SHARC   = ADSP 21062         GTIClub
       KS40011     KS40011-PF                       = 056230             Racinfrc

       001005      Custom 3D chipset                                     GTIClub
       001231      PALCE16V8H                                            Konami-GV
       001604      Tilemap                                               GTIClub
       0038323     0038323 E9750, 0038323 E9825, SOIC8  Security Chip    Konami80sArcadeGallery, Konami-HornetSystem
       0000033906  Konami Custom 33906, QFP160                           Gradius4, Sscope2
       0000037122  Konami Custom 37122, QFP208                           Sscope/2



       KonamiIC
       - 0.279              : Correction to device strings (Konami 0xxx instead of K0xxx) [hap].
       - 0.275              : Made layer sorting functions templates and reduced dependence on preprocessor (konami\konami_helper.cpp) [cam900].
       - 0.154              : Removed KONAMI_ROM_DEINTERLEAVEs; SHUFFLE8 and DEINTERLEAVE_4 are entirely gone now (drivers\gijoe.c, gradius3.c, moo.c, overdriv.c, simpsons.c, surpratk.c, tmnt.c, vendetta.c, xexex.c, xmen.c and konami_helper.c/h) [Alex Jackson]. Removed a couple of KONAMI_ROM_DEINTERLEAVE_2 occurrences (asterix.c and dbz.c). Removed completely konami_deinterleave_gfx usage, now that it is redundant (drivers\asterix.c, bishi.c, dbz.c, djmain.c, gijoe.c, lethal.c, moo.c, overdriv.c, qdrmfgp.c, rungun.c, simpsons.c, tasman.c, vendetta.c, xexex.c, xmen.c and zr107.c) [Fabio Priuli].
       - 0.150              : Updated some leftovers from the konamiic modernizations that are behing a debug if (drivers\gijoe.c, konamigx.c, moo.c, mystwarr.c, rungun.c and xexex.c) [Osso].
       - 0.149u1            : Added video\konami_helper.c/h and konamiic.txt. Removed video\konamiic.c/h. Modernized devices contained in konicdev.c. Fix for Over Drive assert (video\konicdev.c). Split up in their own files the remaining modernized devices contained in konicdev.c [Osso]. Shuffle some things around ready for attempting to kill off non-device code. Better splitting of the 4x device. Removed duplicate code. Move some sprite code around. Aake functions more similar for easier comparison / reduction. Duplicate code reduction. Make code more similar, improve some variable names etc. Unify some bits of the gx/non-gx sprite implementations. Further consolidation of codepaths [David Haywood]. Disabled unused private field (video\konicdev.c) [Oliver Stoeneberg].
       - 0.148u4            : Konami hell resolve (88games.c, ajax.c, aliens.c, asterix.c, battlnts.c, bishi.c, bladestl.c, blockhl.c, bottom9.c, chqflag.c, cobra.c, combatsc.c, contra.c, crimfght.c, dbz.c, djmain.c, f1gp.c, fastlane.c, flkatck.c, gbusters.c, gijoe.c, gradius3.c, hcastle.c, hornet.c, konamigx.c, labyrunr.c, lethal.c, mainevt.c, moo.c, mystwarr.c, nemesis.c, nwk-tr.c, overdriv.c, parodius.c, qdrmfgp.c, rockrage.c, rollerg.c, rungun.c, spy.c, suprslam.c, surpratk.c, tail2nos.c, tasman.c, thunderx.c, tmnt.c, twin16.c, ultraman.c, ultrsprt.c, vendetta.c, wecleman.c, xexex.c, xmen.c, zr107.c, includes\plygonet.h, simpsons.h, machine\ajax.c, simpsons.c, video\djmain.c, plygonet.c, qdrmfgp.c and wecleman.c). Enforce naming convention (drivers\djmain.c, hexion.c, konamigq.c, plygonet.c, ultrsprt.c and zr107.c) [Miodrag Milanovic].
       - 0.148u2            : Cleanup (video\konicdev.h) [Ville Linde].
       - 0.146u1            : Revert sprite coord kludge (video\konicdev.c) [hap].
       - 0.138u3            : Atari Ace disabled a fair chunk of dead code in konamiic.c.
       - 0.138u1            : hap fixed sprite Z code rejection regression in Konami devices.
       - 0.136u1            : Misc Konami WIP [Fabio Priuli]: Moved a few routines (used for sorting graphics layers) to konicdev.c since they are shared by several drivers. Updated some Konami drivers above to separately allocate palette/extra/work RAM instead of appending them to maincpu ROM; also, reduced maincpu rom regions where appropriate. Replaced memory_set_bankptr with memory_set_bank where necessary.
       - 0.136              : Fabio Priuli added preliminary device version of Konami video ICs used in PowerPC games (001005, 001006, 001604 and 037122) (video\konicdev.c).
       - 0.135u4            : Removed machine\konamiic.c/h. Changed video\konamiic.c/h to video\konicdev.c/h.
       - 0.130u3            : Added includes\konamipt.h.
       - 0.128u6            : Atari Ace fixed the widely used konamiic video core to no longer reference the global Machine.
       - 0.125u7            : GX era hardware [Yasuhiro Ogawa]: Update video parameters to use actual values written to the CCU.
       - 0.121u2            : Lei Wu added save state support to a number of Konami custom chips.
       - 0.112              : Aaron Giles cleaned up some poorly written code in konamiic.c; there is still much work to be done here, but it fixes the GX sprites.
       - 0.110u3            : Added machine\konamiic.c.
       - 11th July 2005     : David Haywood - Its certainly not pretty, although compared to the Genesis verison its a work of art, but the Arcade version of Lethal Enforcers now works well enough in MAME to be considered 'Working'. There are still a number of glitches, of note are: Sprite Lag - Sprites seem to lag other sprites, rather strange, no idea why, maybe its correct. Sprite Positioning - may be off by 1 pixel, the first level shadow sprites don't line up if I line up the doors on the other levels, I need to see which is right, or if Konami are playing weird tricks. Shadows - Only the background gets shadowed by the shadow sprites (Glass) for some reason enemies don't, probably a limitation of the current sprite/shadow implementation in konamiic.c. Rowscroll - A rowscoll effect is used for the background on the car stage, this isn't currently emulated. Priorities should be mostly correct, scrolling is correct, gunshots seem fairly accurate (maybe very slightly above the cursor).
       - 0.98u1             : David Haywood fixed Escape Kids memory maps and video hardware (video\konamiic.c).
       - 0.70u1             : Konami updates and fixes (including fix for dbz / moo / simpsons crashes in 0.70) (vidhrdw\konamiic.c/h) [Acho A. Tang].
       -  6th June      2003: R. Belmont updated the documentation in the KonamiIC emulation. Acho A. Tang fixed some minor graphics glitches in the Konami GX driver and cleaned up the KonamiIC emulation.
       - 11th March     2003: R. Belmont sent in a major update to the Konami IC emulation by him and Phil Stroffolino.
       - 0.36b2             : Added vidhrdw\konamiic.c/h.
       - SOURCE: video\konamiic.c + konicdev.cpp


       K001005
       - 0.275              : Cleaned up code: Suppress side effects for debugger reads. Use bit helpers, made some variables constant [cam900]. Cleaned up [Vas Crabb].
       - 0.274              : Initialized some variables [Osso].
       - 0.234              : Major rewrite and documentation update: Implemented missing texture+gouraud polygon type. Implemented fog using correct parameters. Fixed lighting calculations. Implemented bilinear filtering in games that use it (Solar Assault and Operation Thunder Hurricane). Use templates for rasterizer code paths. Refactored polygon parser. Disable fog when using constant Z [Ville Linde].
       - 0.233              : Eliminated remaining uses of auto_alloc and friends (video\k001005.cpp) [Aaron Giles].
       - 0.232              : Attempt to fix Solar Assault stage 3 crash (video\k001005.cpp) [Ville Linde].
       - 0.226              : Added a missing command only used in Jet Wave's "How to Control" screen. This screen would show some model of the jetski in turning the handlebars and leaning on the jetski for controls. This fixes an issue where not only the model(s) wouldn't be present but the game would slow down complaining about an unknown polygon command (video\k001005.cpp) [Hydreigon].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.198              : Use device finder [Ryan Holtz].
       - 0.158              : Disabled some logging in K001005 [Oliver Stoeneberg].
       - 0.154              : Merged video\gticlub functionality to K001005/1006 devices. Converted K001005 to use the new poly manager [Ville Linde]. Removed some unused macros [Osso].
       - 0.150              : Modernized the unused K001005 device, just because. This implementation should be merged with the non-device one in video\gticlub.c [Osso].
       - 0.149u1            : Changed video\konicdev.c/h to k001005.c/h. Removed video\konamiic.c/h.
       - 0.147              : Added 'K001005 Polygon Renderer' device.
       - 0.136              : Added preliminary device version of Konami video ICs used in PowerPC games (001005, 001006...) [Fabio Priuli].
       - 0.113u3            : Ville Linde improved K001005 polygon rendering.
       - 0.110u3            : Ville Linde added texture-mapping and z-buffer to K001005 emulation.
       - 0.104u1            : GTI Club updates [Ville Linde]: Very preliminary K001005 & K001006 3D graphics emulation.
       - 0.97u1             : Ville Linde made more progress on the Konami PowerPC drivers. Initial reverse-engineering work on the KS001005 custom 3D chipset in GTI Club.
       - NOTES: Konami K001005 Custom 3D Polygon Renderer chip (KS10071)
       - DRIVERS: gticlub.cpp and zr107.cpp
       - SOURCE: konami\k001005.cpp


       K001006
       - 0.281              : Fixed save state support. Added save state registration and fixed initialization for bilinear flag. Use fixed sized integer for device selection (konami\k001006.cpp) [cam900].
       - 0.275              : Cleaned up code. Suppress side effects for debugger reads. Use bit helpers, made some variables constant. Derive from device_palette_interface for palette. Throw a fatal error if the texture ROM size is not a supported size. Match texture data size to texture ROM size (konami\k001006.cpp) [cam900].
       - 0.270              : Correct some save_pointer usage (konami\k001006.cpp) [hap].
       - 0.225              : Removed alternate texture layout [Osso].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.154              : Merged video\gticlub functionality to K001005/1006 devices [Ville Linde].
       - 0.149u1            : Added video\k001006.c/h.
       - 0.136              : Added preliminary device version of Konami video ICs used in PowerPC games (001005, 001006...) [Fabio Priuli].
       - 0.104u1            : GTI Club updates [Ville Linde]: Very preliminary K001005 & K001006 3D graphics emulation.
       - NOTES: Konami K001006 Texel Unit
       - DRIVERS: gticlub.cpp and zr107.cpp
       - SOURCE: konami\k001006.cpp


       K001604
       - 0.275              : Fixed max palette numbers of gfxs (konami\k001604.cpp) [cam900].
       - 0.234              : Restore cobra.cpp driver to somewhat working state. Adjust visible area to match the K001604. Added callback for vblank irq (video\k001604.cpp) [Ville Linde].
       - 0.233              : Major K001604 rewrite and documentation update. Simplified memory layout [Ville Linde].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.194              : Implemented front layer rotate and zoom [Ville Linde].
       - 0.154              : Converted K001604 to use DEVCB2 [Fabio Priuli].
       - 0.149u1            : Added video\k001604.c/h. Modernized the K001604 video device [Osso]. Disabled some unused private members (video\k001604.c) [Oliver Stoeneberg].
       - 0.148u2            : Ville Linde fixed Wave Shark ROZ layer (K001604, video\konicdev.c).
       - 0.148u1            : Found ROZ layer enable in K001604. Rewrote the ROZ rendering in K001604 (video\konicdev.c) [Ville Linde].
       - 0.147              : Added 'K001604 2D tilemaps + 2x ROZ' device. Set K001604 tilemap origin based on cliprect (video\konicdev.c) [Ville Linde].
       - 0.114u3            : Further improved the ROZ layer emulation in the K001604 [Ville Linde].
       - 0.113u4            : Ville Linde improved the K001604 ROZ layer emulation.
       - 0.112u3            : Ville Linde improved the K001604 tilemap chip emulation.
       - 0.104u1            : GTI Club updates [Ville Linde]: Improved K001604 tilemap emulation.
       - NOTES: Konami K001604 2D tilemaps + 2x ROZ
       - DRIVERS: cobra.cpp, gticlub.cpp, nwk-tr.cpp and zr107.cpp
       - SOURCE: konami\k001604.cpp


       K005849
       - 0.279              : Added konami\k005849.cpp/h. Added added preliminary k005849_device [hap].
       - NOTES: Konami 005849 Video Controller (005849 8523 E04)
       - DRIVERS: gberet.cpp and jailbrek.cpp
       - SOURCE: konami\k005849.cpp


       K007121
       - 0.281              : Use callback for sprite color bank/code bank and moved global x offset into configuration (konami\k007121.cpp) [cam900]. Renamed set_spr_dx to set_sprite_offsets similar to how these displacement functions are named on other konami chip devices [hap].
       - 0.279              : Changed description to 'Konami 007121 Video Controller'. FIRQ is every other frame. Removed dirtytiles_cb (konami\k007121.cpp) [hap].
       - 0.278              : Sprite list and related fixes: I was recently doing some testing on a Contra board around the 007121 IC and found the following: There is no sprite limit, but instead a 264 8x8 sprite block limit. There is no buffering of sprite data on the attached SRAM. From this the follow changes have been made: Use the 264 8x8 sprite block limit to determine number of sprites that should be rendered. Removed sprite ram buffering and move logic for picking sprite ram bank into k007121.cpp. Comment updates related to the limit and non-buffering. Additionally the high bit of tiles are stored in one of the control registers, if this bit changes all tiles should be marked as dirty. These changes fix a number of sprite related issues on games using this chip: Missing sprites in combatsc and left over sprites in contra (konami\k007121.cpp) [Jim Westfall]. Added sprite buffer (otherwise 1 frame sprite lag in eg. hcastle, contra, labyrunr). Updated notes. Do flipscreen and dirty tilemap marking with callbacks. Update notes. Avoid shift with negative amount in drivers. Added interrupts and scrollram (konami\k007121.cpp) [hap].
       - 0.273              : Correct 32x32 sprite code mask. No need for is_flakatck param (konami\k007121.cpp) [hap].
       - 0.262              : Use device_gfx_interface to decode graphics. Also adjusted graphics ROM loading in drivers using this device to allow use of gfx_8x8x4_packed_msb (combatsc.cpp, contra.cpp, fastlane.cpp, flkatck.cpp, hcastle.cpp and labyrunr.cpp) [cam900].
       - 0.250              : Small cleanup [hap].
       - 0.246              : Changed sourcefile to konami\k007121.cpp.
       - 0.221              : Simplified handlers (video\) [Osso].
       - 0.203              : Fixed sprite-sprite priorities in flkatck.cpp and removed hackish implementation in K007121 [Angelo Salese, Dink].
       - 0.193              : Removed space from k007121_device::ctrlram_r [smf].
       - 0.156              : Improved K007121 documentation [Alex Jackson].
       - 0.149u1            : Added video\k007121.c/h.
       - 0.147              : Added 'K007121 Sprite/Tilemap Controller' device.
       - 0.141u4            : Changed main CPU in drivers\contra.c to HD6309 as seen on PCB, and set interrupt source to K007121 [hap].
       - 0.122u7            : Made K007121_sprites_draw not require a 'machine' argument [Zsolt Vasvari].
       - 0.36RC1            : Nicola Salmoria fixed sprites colors in Contra and other improvements to Konami 007121-based games.
       - 0.36b4             : Added proms to Haunted Castle ($0, 100, 200, 300, 400 - K007121 sprite/char lookup tables and priority encoder (not used)).
       - NOTES: Konami K007121 Sprite/Tilemap Controller
       - DRIVERS: combatsc.cpp, contra.cpp, fastlane.cpp, flkatck.cpp, hcastle.cpp and labyrunr.cpp
       - SOURCE: konami\k007121.cpp


       K007342
       - 0.273              : Added interface for sending sprite related flags to paired chip. Updated notes (konami\k007342.cpp) [hap].
       - 0.262              : Use device_gfx_interface to decode graphics ROM. Also cleaned up code and reduced macro use (konami\k007342.cpp) [cam900].
       - 0.221              : Simplified handlers [Osso].
       - 0.154              : Adjusted rom loading in bladestl.c and rockrage.c so that all drivers using the K007342 and K007420 use compatible gfx layouts [Alex Jackson].
       - 0.153              : k007342_device callbacks and params modernized as example how to do it [Miodrag Milanovic].
       - 0.149u1            : Added video\k007342.c/h. Modernized K007342 device [Osso].
       - 0.147              : Added 'K007342 Video Controller' device.
       - NOTES: Konami K007342 Video Controller
       - DRIVERS: battlnts.cpp, bladestl.cpp and rockrage.cpp
       - SOURCE: konami\k007342.cpp

       K007420
       - 0.273              : Apply same sprite code mask fix as with K007121 (konami\k007420.cpp) [hap].
       - 0.262              : Use device_gfx_interface to decode graphics ROM. Also cleaned up code and reduced macro use (konami\k007420.cpp) [cam900].
       - 0.221              : Simplified handlers [Osso].
       - 0.154              : Adjusted rom loading in bladestl.c and rockrage.c so that all drivers using the K007342 and K007420 use compatible gfx layouts [Alex Jackson].
       - 0.153              : K007420 callbacks to delegates [Miodrag Milanovic].
       - 0.149u1            : Added video\k007420.c/h. Modernized K007420 device [Osso].
       - 0.147              : Added 'K007420 Sprite Generator' device.
       - 0.72u2             : Fixed boundary conditions and kludge removal in K007420 [Acho A. Tang].
       - NOTES: Konami K007420 Sprite Generator
       - DRIVERS: battlnts.cpp, bladestl.cpp and rockrage.cpp
       - SOURCE: konami\k007420.cpp


       K007452
       - 0.231              : Added machine\k007452.cpp/h. Added Konami 007452 multiplier/divider, fixes rolling mines trajectories in contra. Plugged K007452 in combatsc, flkatck and wecleman [Furrtek].
       - NOTES: Konami 007452 math chip
       - DRIVERS: contra.cpp, combatsc.cpp, flkatck.cpp and wecleman.cpp
       - SOURCE: konami\k007452.cpp


       K033906
       - 0.279              : Changed description to 'Konami 033906 PCI bridge'.
       - 0.250              : Fixed usage for Voodoo 2 [Windy Fairy].
       - 0.210              : Simplified handlers. Fixed some spacings. Converted arrays into std::unique_ptr [cam900].
       - 0.202              : Removed K033906 MCFG macros [Ryan Holtz].
       - 0.154              : Converted K033906 to use inline configs [Fabio Priuli].
       - 0.142u3            : Added 'K033906 PCI bridge' device.
       - 0.139u2            : Harmony updated the K033906 PCI Bridge device to no longer be legacy.
       - 0.136              : Added emu\machine\k033906.c/h. Fabio Priuli split Konami 033906 emulation from gticlub.c and konppc.c. Also converted it to be device and updated PPC Konami games to use the new code.
       - NOTES: Konami K033906 PCI bridge
       - DRIVERS: gticlub.cpp, hornet.cpp, nwk-tr.cpp and machine\konppc.cpp
       - SOURCE: machine\k033906.cpp


       K037122
       - 0.275              : Fixed max palette numbers of gfxs [cam900].
       - 0.262              : Implemented device_palette_interface for palette. Also cleaned up code and reduced hard-coded constants [cam900].
       - 0.233              : Better RAM layout logic. Implemented ROZ and scrolling. Added tilemap origin [Ville Linde].
       - 0.222              : Updated K037122 hardware information. Added screen raw parameters (verified in both 3DFX Voodoo and K037122 display timing parameters) [cam900]. READ/WRITE macros removal [Osso].
       - 0.149u1            : Added video\k037122.c/h. Modernize K037122 device (drivers\hornet.c and video\konicdev.c/h) [Osso].
       - 0.147              : Added 'K037122 2D Tilemap' device.
       - 0.136u3            : Converted hornet.c to use the Konami 037122 device and removed the old code [Fabio Priuli].
       - 0.136              : Added preliminary 037122 device version of Konami video IC used in PowerPC games (video\konicdev.c) [Fabio Priuli].
       - DRIVERS: hornet.cpp
       - SOURCE: konami\k037122.cpp


       K051316
       - 0.282              : Cleaned up code: Use explicitly sized integers for things that need to be registered for save states. Use references rather than pointers for output parameters of callbacks. Use standard or abbreviated integer types consistently. Improved some member names and fixed formatting (video\k051316.cpp) [cam900].
       - 0.279              : Changed description to 'Konami 051316 PSAC'.
       - 0.249              : Added K051316 tile flip configuration bits, replaces flag setting in callbacks. Removed flags cb parameter and added bool for each configuration bit [Furrtek]. Cleanup driver [Vas Crabb]. Removed device_reset and bool-int comparison [hap].
       - 0.210              : Simplified handlers [cam900].
       - 0.155              : K051316 cleanup and update [Alex Jackson].
       - 0.154              : Converted K051316 to use device_gfx_interface, inline configs and delegates [Fabio Priuli]. Clean up/simplify inline configs, added tile bank dirty method for Ultraman [Alex Jackson].
       - 0.149u1            : Added video\k051316.c/h. Modernized K051316 device (video\konicdev.c) [Osso].
       -  1st April     2000: Nicola Salmoria updated Hot Chase to use the 051316 functions.
       -  8th October   1999: Manuel Abadia added multiple 051316 graphics chip support.
       - 30th May       1999: Nicola has begun working on Shanghai, but it contains a strange graphics chip so the progress will probably be very slow.
       - NOTES: Konami K051316 PSAC
       - DRIVERS: 88games.cpp, ajax.cpp, bottom9.cpp, chqflag.cpp, overdriv.cpp, rollerg.cpp, tail2nos.cpp, ultraman.cpp and wecleman.cpp
       - SOURCE: video\k051316.cpp


       K051550
       - NOTES: 051550 custom ceramic module providing coin counter drivers, watchdog timer and master reset signal
       - PCB: 051550 Citybomb, Kittenk, Tricktrp and Ultraman
       - DRIVERS: ajax.cpp, crimfght.cpp, gijoe.cpp, konmedal.cpp, lethal.cpp, moo.cpp, mystwarr.cpp, piratesh.cpp, simpsons.cpp, tmnt.cpp, wecleman.cpp, xexex.cpp


       K051733
       - 0.278              : Changed description to 'Konami 051733 math chip'. Added NMI timer. Fixed divide by 0 and sqrt off-by-1. Changed rng to machine().rand(). Added lfsr and improved collision detection. Improved reg 7 [hap, Jim Westfall]. No need to shift lfsr by 2. Removed old notes about then-unknown reg 6. Shorthand variable types. Simpler sqrt function (result is same). Division appears to be signed, fixes erratic gameplay logic in Devastators [hap].
       - 0.275              : Suppress side effects for debugger reads, use logmacro.h logging and cleaned up code (konami\k051733.cpp) [cam900].
       - 0.221              : Simplified handlers (video\k051733.cpp) [Osso].
       - 0.149u1            : Added video\k051733.c/h. Modernized K051733 device [Osso].
       - 0.142u3            : Angelo Salese fixed protection read-back registers 0x07 and 0x0e / 0x0f in K051733 math chip, finally fixing gameplay issues in Chequered Flag. Made K051733 RNG to behave like an adder, improves pseudo-random events in Fast Lane.
       - 28th December  1999: Manuel Abadia sent in a Konami update with K051733 working fully in Devastators and Blades of Steel.
       - 27th December  1999: Manuel Abadia added the K051733 protection hacks to Blades of Steel and the game works a little bit better.
       - 26th December  1999: Manuel Abadia sent in a driver for Fast Lane, but it isn't playable because of the K051733 protection.
       - NOTES: Konami 051733 math chip. Sort of a protection device, used for collision detection, and for arithmetical operations. It is passed a few parameters, and returns the result.
       - DRIVERS: bladestl.cpp, chqflag.cpp, fastlane.cpp, labyrunr.cpp and mainevt.cpp
       - SOURCE: konami\k051733.cpp


       K051937
       - 0.192              : K051937 sets up a register when background should be dimmed, fixes start/end pouring event colors in Chequered Flag [Angelo Salese].
       - DRIVERS: 88games.cpp, ajax.cpp, aliens.cpp, blockhl.cpp, bottom9.cpp, chqflag.cpp, crimfght.cpp, gradius3.cpp, mainevt.cpp, spy.cpp, thunderx.cpp, tmnt.cpp and ultraman.cpp
       - SOURCE: konami\k051960.cpp


       K051960
       - 0.282              : Cleaned up code: Use explicitly sized integers for things that need to be registered for save states. Use references rather than pointers for output parameters of callbacks. Use standard or abbreviated integer types consistently. Improved some member names and fixed formatting [cam900].
       - 0.279              : Changed description to 'Konami 051960 Sprite Generator'. Improved sprite y zoom. Fixes bad sprite zooming for the planes in Devastators level 2. Added sprite busy flag. Improved NMI timer and sprite busy duration [hap, Jim Westfall]. Added sprite buffer and irq enable. Removed old #if 0 spriteram savedump [hap].
       - 0.278              : Small cleanup. Disable shadow config bit 0 (it was only used in Chequered Flag and Ultraman, and both needed a workaround) (konami\k051960.cpp) [hap].
       - 0.247              : Implemented shadow configuration bits (fixes shadows in Devastators). Added descriptions for the other previously undocumented register bits, even if they shouldn't affect any game. Attempted to get Chequered Flag shadow/highlights working properly with no k051960 hack [Furrtek].
       - 0.214              : Use device_video_interface to hook screen [AJR].
       - 0.210              : Simplified handlers [cam900].
       - 0.165              : Converted various K051960-based drivers to single-pass drawing and make const things const [Alex Jackson]. Start adding irq/firq/nmi callback support. Implemented NMI and VBLANK. Use new K051960 irq support in 88games.c, ajax.c, aliens.c, blockhl.c, bottom9.c, chqflag.c, crimfght.c, gradius3.c, mainevt.c, spy.c, thunderx.c, tmnt.c and ultraman.c [Dirk Best].
       - 0.156              : Removed 16-bit trampolines [Alex Jackson].
       - 0.155              : K051960 cleanup/update and removal of obsolete comments [Alex Jackson].
       - 0.154              : Removed m_dx and m_dy in K051960, already nonfunctional since devicefication. These chips don't have variable offsets like the later Konami customs do (Gradius 3 title screen being offset 2 pixels to the left is a BTANB, see MT04118) [Alex Jackson]. Converted K051960 to use device_gfx_interface, inline configs and delegates. While at it, also removed unnecessary configurations and removed later stage interleaving of the sprite roms (they just needed to be loaded in the correct way) [Fabio Priuli].
       - 0.149u1            : Added video\k051960.c/h. Modernized the K051960 video device [Osso].
       - NOTES: Konami K051960 Sprite Generator
       - DRIVERS: 88games.cpp, ajax.cpp, aliens.cpp, blockhl.cpp, bottom9.cpp, chqflag.cpp, crimfght.cpp, gradius3.cpp, mainevt.cpp, spy.cpp, thunderx.cpp, tmnt.cpp and ultraman.cpp
       - SOURCE: konami\k051960.cpp


       K052109
       - 0.282              : Cleaned up code: Use explicitly sized integers for things that need to be registered for save states. Use references rather than pointers for output parameters of callbacks. Use standard or abbreviated integer types consistently. Improved some member names and fixed formatting [cam900].
       - 0.279              : Changed description to 'Konami 052109 Tilemap Generator'. Added screen raw params to all K052109 drivers. Added col+rowscroll to K052109, fixes possible graphical corruption during stage 2 in Thunder Cross II and clones. Update scroll before active display [hap]. Added NMI and FIRQ timers (copy paste to/from k051960). Added callback for custom scrolling to emu\tilemap.cpp and added one to K052109 for its combined col/rowscroll (konami\k052109.cpp). This improved star field background scrolling and rotation in Surprise Attack [hap, Jim Westfall].
       - 0.274              : Added function for marking tilemap dirty (konami\k052109.cpp) [hap].
       - 0.269              : Removed the color kludge for xmen/gradius3. Proper handling (init/save) of new m_addrmap variable (konami\k052109.cpp) [Jose Tejada].
       - 0.257              : Removed now-superfluous methods from 052109 device emulation [AJR].
       - 0.251              : Changed invalid logerror m_maincpu->pc to machine().describe_context() [hap].
       - 0.222              : Correct video clocks (drivers\simpsons.cpp and video\k052109.cpp) [Phil Bennett].
       - 0.219              : Fixed/Cleanup K052109 tilemap scrolls, fixes Fuusen Pentai and missing star field background rotation in Surprise Attack [MetalliC].
       - 0.218              : Improved colors for K052109 games Shuriken Boy, Fuusen Pentai and Mario Roulette (drivers\konmedal.cpp) [R. Belmont]. Added hackfix for Mario Roulette scrolling, documented observed row/col scroll K052109 tilemaps issues [MetalliC].
       - 0.214              : Use callback to generate IRQ for most drivers. Fixed IRQ enable logic (otherwise simpsons is very broken). Use device_video_interface to hook screen [AJR].
       - 0.211              : Correct K052109 hookup in konmedal.cpp driver [R. Belmont].
       - 0.210              : Simplified handlers. Removed unnecessary handlers. Fixed notes [cam900].
       - 0.202              : Eliminated register_postload [AJR].
       - 0.165              : Start adding irq/firq/nmi support. Use new K052109 support in blockhl.c [Dirk Best].
       - 0.155              : K052109 cleanup/update and removal of obsolete comments [Alex Jackson].
       - 0.154              : Removed m_dx and m_dy in K052109, already nonfunctional since devicefication. These chips don't have variable offsets like the later Konami customs do (Gradius 3 title screen being offset 2 pixels to the left is a BTANB, see MT04118). Added missing set_colors() [Alex Jackson]. Converted K052109 to use device_gfx_interface, inline configs and delegates. While at it, also removed unnecessary configurations and removed later stage interleaving of the tile roms (they just needed to be loaded in the correct way) [Fabio Priuli].
       - 0.149u1            : Added video\k052109.c/h. Modernized K052109 device (video\konicdev.c) [Osso].
       - 0.136              : Fabio Priuli fixed tile/graphic corruption on multiple launches of Super Contra and clone (K052109 ram needs to be inited to zero).
       - 0.135u4            : Added preliminary device versions of all the Konami custom ICs currently emulated in machine\konamiic.c and video\konamiic.c [Fabio Priuli].
       - 0.95u3             : R. Belmont added dx/dy settings to K052109, similar to those known to exist in the '156 and later chips.
       - NOTES: Konami K052109 Tilemap Generator
       - DRIVERS: 88games.cpp, ajax.cpp, aliens.cpp, blockhl.cpp, bottom9.cpp, crimfght.cpp, gradius3.cpp, konmedal.cpp, mainevt.cpp, parodius.cpp, simpsons.cpp, spy.cpp, surpratk.cpp, thunderx.cpp, tmnt.cpp, tmnt2.cpp, vendetta.cpp and xmen.cpp
       - SOURCE: konami\k052109.cpp


       K052591
       - 0.263              : Modified K052591 PMC emulation to reflect how the real programs work. Added comments to PMC program dumps. Use multibyte.h functions, variable scope and type cleanup. hexion.cpp: Added special 16-byte VRAM clearing command for K052591. spy.cpp: Confirmed K052591 projection function constants, more accurate collision check without the need for special case handling. thunderx.cpp: Simplified K052591 collision check, fixed object flags updates [Furrtek].
       - 0.261              : Simplified K052591 PMC emulation code a little. Removed some redundant variables and removed complementary division/multiplication [Jose Tejada].
       - NOTES: The 052591 is used for protection in Thunder Cross and S.P.Y. (simulated PMCU protection). In Thunder Cross is the K052591 for collision detection. In Hexion (Konami 1992), however, the only thing it seems to do is clear the screen.
       - DRIVERS: hexion.cpp, spy.cpp and thunderx.cpp
       - SOURCE: ---


       K053244/053245
       - 0.282              : Cleaned up code: Use explicitly sized integers for things that need to be registered for save states. Use references rather than pointers for output parameters of callbacks. Use standard or abbreviated integer types consistently. Improved some member names and fixed formatting (konami\k053244_k053245.cpp) [cam900].
       - 0.280              : Small cleanup (konami\k053244_k053245.cpp) [hap].
       - 0.279              : Changed description to 'Konami 053244/053245 Sprite Generator'. Renamed (k05324x) to (k053244). Removed old #if 0 spriteram savedump. Moved sprite buffer clear to reg 7. Limit sprite size to 1024x512. Assume sprite size limit is cliprect, not zoom level (konami\k053244_k053245.cpp) [hap].
       - 0.278              : Small cleanup [hap].
       - 0.210              : Simplified handlers [cam900].
       - 0.155              : K053244/053245 cleanup and update [Alex Jackson].
       - 0.154              : Converted K053244/K053245 to use inline configs, delegates and device_gfx_interface [Fabio Priuli]. Removed deinterleave crap from K053245, clean up. Fixed lethalen sprite regression [Alex Jackson].
       - 0.150              : Removed some unnecessary devlegcy.h includes (video\k053244_k053245.c) [Oliver Stoeneberg].
       - 0.149u1            : Added video\k053244_k053245.c/h. Modernized K05324x video devices [Osso].
       - 0.139u2            : Roberto Zandona hooked up some K053244 register to Lethal Enforcers. Fixed missing flip bits used for the tiles (P2 start screen, reload indicator).
       - NOTES: Konami K053244 & 053245 Sprite Generator
       - DRIVERS: asterix.cpp, lethal.cpp, parodius.cpp, quickpick5.cpp, rollerg.cpp, surpratk.cpp and tmnt2.cpp
       - SOURCE: konami\k053244_k053245.cpp


       K053246/053247/055673
       - 0.282              : Cleaned up code: Use explicitly sized integers for things that need to be registered for save states. Use references rather than pointers for output parameters of callbacks. Use standard or abbreviated integer types consistently. Improved some member names and fixed formatting (konami\k053246_k053247_k055673.cpp) [cam900].
       - 0.279              : Changed description to 'Konami 053246/053247 Sprite Generator'.
       - 0.278              : Changed description to 'Konami 055673 Sprite Generator'. Small cleanup [hap].
       - 0.277              : Went back to update zdrawgfxzoom32GP(), now down to a third of its original size before started changing it. As a thinly veiled excuse for reworking the whole function, went ahead and added additive sprite blending (to the now singular alpha call site). Remarks: The mix priority setting is not yet handled. It seems simple enough (flip dst and src), but I would like to find an example of this before I implement it (konami\k053246_k053247_k055673.cpp) [Fredrik Sandkvist].
       - 0.275              : Improved sprite blending (konami\k053246_k053247_k055673.cpp). Minor K053247_device::zdrawgfxzoom32GP cleanup: Moved variable declarations closer to use. Use appropriate variable types. Mark applicable variables as const. Moved "cull off-screen objects" early out check earlier in function. Moved back "dst_" vars under appropriate comment. Further reduce reuse of "eax" variable. Use cliprect directly inside function. Renamed various "eax" variables. Simplify switch-case to if statement (konami\k053246_k053247_k055673.cpp) [FredYeye].
       - 0.254              : Added 'Golden Region' (Konami 1998) (k055673_gr_rom) [Hammy, R. Belmont].
       - 0.252              : Moved assert to work around Konami GX games failing to start - the code is still dodgy [Vas Crabb].
       - 0.233              : Eliminated remaining uses of auto_alloc and friends (video\k053246_k053247_k055673.cpp) [Aaron Giles].
       - 0.227              : Put the real K055673 memory size. Fixes the Soccer Superstars crashes, if not the memory test itself [O. Galibert].
       - 0.210              : Simplified handlers. Reduced duplicates, unnecessary lines and tags. Use shorter type values. Fixed spacing [cam900].
       - 0.185              : Phil Bennett and R. Belmont added 'Pirate Ship (ver UAA)' (Konami 1995) + fix to pass POST, which earns it working with imperfect gfx [R. Belmont]. Fixed palette-related regressions in Konami GX games (video\k053246_k053247_k055673.cpp) [AJR].
       - 0.181              : Fixed CPU hang on state load (video\k053246_k053247_k055673.cpp) [Scott Percival].
       - 0.155              : Removed extraneous K053246/7 device and use correct gfx layout for K055673 in drivers\tasman.c; fixes debug assert and gfx viewer crash. Fixed 8bpp ROM readback in K053246 and removed some obsolete trampoline and debug handlers (drivers\konamigx.c, mystwarr.c and rungun.c). Hooked up K053246/K055673 registers in drivers\tasman.c; object ROM tests pass now [Alex Jackson].
       - 0.154              : Updated K053246/K055673 to use delegates and inline configs. As before, these changes are mostly driver-level, so I hope they do not conflict with anyone else's work. The only relevant change for the device code is the removal of some redundant variables (from the interface) and of  alt_k055673_vh_start + k053247_set_sprite_offs, which have been replaced by the proper machine configs.
       - 0.150              : Removed some unnecessary devlegcy.h includes (video\k053246_k053247_k055673.c) [Oliver Stoeneberg]. Fixed palette out of bounds access [hap].
       - 0.149u1            : Added 'K053246 & K053247 Sprite Generator' device. Changed k05324x devices to k053246_k053247_k055673.c/h. Moved some sprite code around. Make functions more similar for easier comparison / reduction [David Haywood]. Modernized K05324x devices (video\konicdev.c) [Osso].
       - 0.120u3            : Atari Ace added static qualifiers and renamed symbols in MAME in an effort to further tidy up the global namespace. Generally generic names were targeted and some symbols that were both static and extern. Some specifics: K053247_ram was made static throughout and the existing K053247_export_config was used to obtain the value in xmen.c.
       - NOTES: Konami K053246 & K053247 & K055673 Sprite Generator
       - DRIVERS: dbz.cpp, gijoe.cpp, konamigx.cpp, moo.cpp, mystwarr.cpp, overdriv.cpp, rungun.cpp, simpsons.cpp, tasman.cpp, vendetta.cpp and xexex.cpp
       - SOURCE: konami\k053246_k053247_k055673.cpp


       K053250
       - 0.279              : Changed description of 'K053250 LVC' to 'Konami 053250 LVC' and 'K053250PS LVC' to 'Konami Pirate Ship LVC'. Small cleanup (konami\k053250.cpp) [hap].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.185              : Added video\k053250_ps.cpp/h. Phil Bennett and R. Belmont added 'Pirate Ship (ver UAA)' (Konami 1995).
       - 0.155              : K053250 cleanup and update [Alex Jackson].
       - 0.153              : Moved emu\video\k053250.c/h to mame\video. Modernized its coding conventions (dynamic_arrays, device_video_interface to attach screen, etc.) [Alex Jackson].
       - 0.148u4            : k053250_t to k053250_device (emu\video\k053250.c/h, drivers\mystwarr.c, overdriv.c, xexex.c/h and video\konamigx.c) [Miodrag Milanovic].
       - 0.142u5            : Added video\k053250.c/h. O. Galibert turn the K053250 into a modern device.
       - 0.135u4            : Improved a few Konami device interfaces, moved most rom deinterleaving to DEVICE_START and fixed k053250 (init and handlers) [Fabio Priuli].
       -  8th June      2003: Acho A. Tang did another small improvement on the K053250 graphics emulation.
       - NOTES: Konami K053250 LVC and K053250PS LVC
       - DRIVERS: mystwarr.cpp, overdriv.cpp, piratesh.cpp and xexex.cpp
       - SOURCE: konami\k053250.cpp and konami\k053250_ps.cpp


       K053251
       - 0.279              : Changed description to 'Konami 053251 Priority Encoder'. Removed obsolete code (all dirty tilemap marking after colorbase changed is done locally in drivers). Removed unused read() function (konami\k053251.cpp) [hap].
       - 0.210              : Simplified handlers. Reduced unnecessary handlers [cam900].
       - 0.202              : Eliminated register_postload [AJR].
       - 0.150              : Fixed uninitialized memory in video\k053251.c. This fixes moo.c out of bounds accesses (AddressSanitizer: heap-use-after-free) [Oliver Stoeneberg].
       - 0.149u1            : Added video\k053251.c/h. Modernized K053251 device (video\konicdev.c) [Osso].
       - 0.135u4            : Device-fied Konami 053251 work fine [Fabio Priuli].
       - NOTES: Konami K053251 Priority Encoder
       - DRIVERS: asterix.cpp, dbz.cpp, gijoe.cpp, moo.cpp, overdriv.cpp, parodius.cpp, simpsons.cpp, surpratk.cpp, tmnt2.cpp, vendetta.cpp, xexex.cpp and xmen.cpp
       - SOURCE: konami\k053251.cpp


       K053252
       - 0.279              : Changed description to 'Konami 053252 Timing/Interrupt Controller'.
       - 0.259              : Use helpers from multibyte.h (machine\k053252.cpp) [AJR].
       - 0.221              : Simplified handlers [Osso].
       - 0.202              : Removed K053252 MCFG macros [Ryan Holtz].
       - 0.190              : Fixed music speed by hooking up the INT_TIME callback from the K053252 CCU properly [Lord Nightmare].
       - 0.169              : Allow the Konami K053252 CRTC to configure the 'slave' screen in the demux setup. BTW, we should probably declared Run and Gun as a new working game in 0.169, it's never really worked properly before all this recent work (eg. you could hang it simply by forgetting to select the 'play independently' option) [David Haywood]. Implemented preliminary K053252 vertical position count. Restructured CCU in drivers\konamigx.cpp. Replaced CCU with device version in drivers\konamigx.cpp, including pixel clock select mechanism. Reinstated CCU in drivers\tasman.cpp again, added preliminary irq masking and added some better gfxdecoding. Just reset internal screen state when a frequency clock change occurs [Angelo Salese].
       - 0.164              : Added missing save states to K053252 [Osso].
       - 0.154              : Fixed an off-by-one error in K053252, allowing various Konami games to actually match their Guru-measured vsyncs [Alex Jackson].
       - 0.153              : Converted K053252 device to DEVCB2 [Osso].
       - 0.151              : Fixed "Warning: K053252 read 0e, contact MAMEdev" popmessage in dbz.c, viostorm and clones [Angelo Salese].
       - 0.149u1            : Modernized the Konami 053252 device (drivers\dbz.c, hexion.c, moo.c, mystwarr.c, overdriv.c, qdrmfgp.c, rollerg.c, rungun.c, vendetta.c and xexex.c) [Osso].
       - 0.142u4            : Added machine\k053252.c/h. Implemented an almost complete Konami K053252 device emulation, adds accurate refresh rate timings and irq acks to many mid-90-era Konami games [Angelo Salese, O.Galibert].
       - NOTES: Konami K053252 Timing/Interrupt, codenamed "CCU"
       - DRIVERS: dbz.cpp, hexion.cpp, moo.cpp, mystwarr.cpp, overdriv.cpp, qdrmfgp.cpp, rollerg.cpp, rungun.cpp, vendetta.cpp and xexex.cpp
       - SOURCE: machine\k053252.cpp


       K053936
       - 0.281              : Reduced duplication and added notes about emulation deficiencies. Updated notes based on reverse-engineering by Furrtek. Also cleaned up code (video\k053936.cpp) [cam900].
       - 0.279              : Changed description to 'Konami 053936 Video Controller'.
       - 0.275              : Correct source/destination parameter order to alpha blending function. Also moved blending tests inside the loop (video\k053936.cpp) [FredYeye].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.212              : Added zoom draw for bitmap_rgb32 [AJR].
       - 0.169              : Added K053936 ROM readback to Run and Gun [Angelo Salese].
       - 0.157              : Fixed potential K053936 out-of-bounds memory access; removed some dead code [Alex Jackson].
       - 0.154              : Updated K053936 to use inline configs [Fabio Priuli].
       - 0.149u1            : Added video\k053936.c/h. Modernized K053936 device (video\konicdev.c) [Osso].
       - 0.148              : Allow 16-bit games to use the K053936 (drivers\mystwarr.c) [R. Belmont]. This fixed gaiapols and mmaulers crashed to prompt after a few seconds.
       - 0.134u2            : R. Belmont and David Haywood hooked up 53936 ROZ layer to Polygonet Commanders driver.
       - 0.132u4            : K053936 cleanup and some improvements for Racin' Force [David Haywood].
       -  5th March     2001: Nicola Salmoria added K053936 graphics chip emulation to Blazing Tornado, and improved the K054157 emulation a bit.
       - NOTES: Konami K053936 Video Controller. 3d ROZ plane, used for backgrounds.
       - PCB: 053936, KS10011-PF, PSAC2, 80pin (Plygonet, F1gp)
       - DRIVERS: crshrace.cpp, dbz.cpp, f1gp.cpp, metro.cpp, plygonet.cpp, rungun.cpp, suprslam.cpp and tmnt2.cpp
       - SOURCE: video\k053936.cpp


       K054000
       - 0.279              : Changed description to 'Konami 054000 Protection'.
       - 0.247              : Updated K054000 Protection implementation to better match how the chip works, fixes 'Thunder Cross II' K054000 unit tests and ROM check (11C/12C and 14D return bad) [Furrtek].
       - 0.239              : Fixed incorrect hitboxes for some grounded enemies and broken demo sequences in Vendetta. Converted all drivers using K054000 to access with address map, fixes Gaiapolis and Bucky O'Hare ranges. Initialized variables at machine_reset time. Moved collision dump to a debug compile switch. Cleanup driver [Angelo Salese].
       - 0.210              : Simplified handlers. Reduced unnecessary handlers [cam900].
       - 0.149u1            : Added video\k054000.c/h. Modernized K054000 device [Osso].
       - NOTES: Konami K054000 Protection. Sort of a protection device, used for collision detection. It is passed a few parameters, and returns a boolean telling if collision happened. It has no access to gfx data, it only does arithmetical operations on the parameters.
       - DRIVERS: lethal.cpp, moo.cpp, mystwarr.cpp, tmnt.cpp and vendetta.cpp
       - SOURCE: konami\k054000.cpp


       K054156
       - 0.282              : Cleaned up code: Use explicitly sized integers for things that need to be registered for save states. Use references rather than pointers for output parameters of callbacks. Use standard or abbreviated integer types consistently. Improved some member names and fixed formatting (konami\k054156_k054157_k056832.cpp) [cam900].
       - 0.280              : Small cleanup (konami\k054156_k054157_k056832.cpp) [hap].
       - 0.282              : Got rid of a redundant function with duplicated code (konami\k054156_k054157_k056832.cpp) [cam900].
       - 0.280              : Small cleanup (konami\k054156_k054157_k056832.cpp) [hap].
       - 0.277              : The attr variable holds what appear to be the elusive tile (external) mix codes. Attach it to the flags variable so these bits can be accessed in the tile callback functions. Tiles with mix codes gets their own tilemap category. Remarks: I've now changed the callback to include an attr param (konami\k054156_k054157_k056832.cpp) [Fredrik Sandkvist].
       - 0.274              : Initialized some variables [Osso].
       - 0.216              : Less crude hack to clean tilemap (video\k054156_k054157_k056832.cpp) [AJR].
       - 0.210              : Simplified handlers. Reduced unnecessary handlers, tags and lines. Fixed notes. Reduced deprecated AM_* macro comments (k054156_k054157_k056832.cpp) [cam900].
       - 0.202              : Eliminated register_postload [AJR].
       - 0.194              : Added assert for index out of bounds with ddboy (video\k054156_k054157_k056832.cpp) [Oliver Stoeneberg].
       - 0.169              : Removed Tasman gfx hack in core (video\k054156_k054157_k056832.cpp) [Angelo Salese].
       - 0.156              : Save correct amount of K054156 videoram, fixes Lethal Enforcers savestates [Alex Jackson]. Tilemap assert fix (video\k054156_k054157_k056832.c) [Alex Jackson].
       - 0.150              : Avoid usage of uninitialized memory and improved regs initialization (video\k054156_k054157_k056832.c) [Oliver Stoeneberg]. Fixed palette out of bounds access (video\k054156_k054157_k056832.c) [hap].
       - 0.149u1            : Added video\k054156_k054157_k056832.c/h.
       - NOTES: Konami Tilemap Generator
       - DRIVERS: asterix.cpp, bishi.cpp, dbz.cpp, djmain.cpp, gijoe.cpp, konamigx.cpp, lethal.cpp, moo.cpp, qdrmfgp.cpp, xexex.cpp and zr107.cpp
       - SOURCE: konami\k054156_k054157_k056832.cpp


       K054157
       - 0.216              : Less crude hack to clean tilemap (video\k054156_k054157_k056832.cpp) [AJR].
       - 0.210              : Simplified handlers. Reduced unnecessary handlers, tags and lines. Fixed notes. Reduced deprecated AM_* macro comments (k054156_k054157_k056832.cpp) [cam900].
       - 0.202              : Eliminated register_postload [AJR].
       - 0.194              : Added assert for index out of bounds with ddboy (video\k054156_k054157_k056832.cpp) [Oliver Stoeneberg].
       - 0.169              : Removed Tasman gfx hack in core (video\k054156_k054157_k056832.cpp) [Angelo Salese].
       - 0.156              : Tilemap assert fix (video\k054156_k054157_k056832.c) [Alex Jackson].
       - 0.150              : Avoid usage of uninitialized memory and improved regs initialization (video\k054156_k054157_k056832.c) [Oliver Stoeneberg]. Fixed palette out of bounds access (video\k054156_k054157_k056832.c) [hap].
       - 0.149u1            : Added video\k054156_k054157_k056832.c/h.
       - 28th February  2004: R. Belmont added 8-bit access to the K054157 Konami chip and sent in a preliminary Lethal Enforcers driver which doesn't really work at all.
       - 0.71u1             : Acho A. Tang completed K054157 to K056832 migration.
       -  5th March     2001: Nicola Salmoria improved the K054157 emulation a bit.
       -  4th March     2001: Olivier Galibert added linescroll support to the Konami K054157 emulation, used by Xexex, GI Joe and Asterix.
       - NOTES: Konami Tilemap Generator
       - SOURCE: konami\k054156_k054157_k056832.cpp



       K054321
       - 0.280              : Reset m_active at device_reset [hap].
       - 0.279              : Changed description to 'Konami 054321 Maincpu-Soundcpu interface'.
       - 0.221              : Simplified handlers [Osso].
       - 0.220              : Added note of unknown Xexex (Konami 1991) writes to machine\k054321.cpp [cam900].
       - 0.209              : Fixed synchronizing maincpu-soundcpu communication issue. Use gen_latch [cam900].
       - 0.204              : Remember initial speaker input gains, this fixes volume balance in X-Men [hap].
       - 0.203              : Make it work on all speaker inputs, not just the first [hap].
       - 0.202              : Removed K054321 MCFG macros [Ryan Holtz].
       - 0.194              : Added K054321 sound control to Polygonet Commanders [cam900].
       - 0.186              : Added machine\k054321.cpp/h. Added 'K054321 Maincpu-Soundcpu interface' device. Implemented K054321 as a device (gijoe.cpp, lethal.cpp, moo.cpp, mystwarr.cpp, rungun.cpp, xexex.cpp and xmen.cpp). Fixed validation for drivers\xmen.cpp [O. Galibert, Phil Bennett]. Added save state support. Also removed unneeded includes from the driver where the generic soundlatches were removed [Osso].
       - NOTES: Konami K054321 sound control chip
       - DRIVERS: gijoe.cpp, lethal.cpp, moo.cpp, mystwarr.cpp, rungun.cpp, xexex.cpp and xmen.cpp
       - SOURCE: machine\k054321.cpp



       K054338
       - 0.280              : Some comment cleanups. Copy paste K054338 description from old konicdev file [hap].
       - 0.279              : Changed description to 'Konami 054338 Mixer'.
       - 0.277              : Update set_alpha_level. This function now returns a level, an additive blend bool and a mixpri bool. Minor style changes to the overall file. Remarks: set_alpha_level doesn't actually set anything. Maybe rename to get_alpha_level? (konami\k054338.cpp) [Fredrik Sandkvist].
       - 0.210              : Simplified handlers. Reduced duplicates [cam900].
       - 0.199              : Removed machine().device lookups (video\k054338.cpp) [Ryan Holtz].
       - 0.154              : Updated K054338 to use inline configs [Fabio Priuli]. Fixed Xexex (video\k054338.c) [O. Galibert]. Made KonamiGX and related drivers use modern K054338 device [Miodrag Milanovic]. De-acho-ify K054338 driver [Alex Jackson].
       - 0.149u1            : Added video\k054338.c/h. Further preparation [David Haywood]. Modernized K054338 device (video\konicdev.c) [Osso].
       - NOTES: Konami K054338 Mixer
       - DRIVERS: bishi.cpp, konamigx.cpp, moo.cpp and xexex.cpp
       - SOURCE: konami\k054338.cpp


       K055555
       - 0.280              : Some comment cleanups [hap].
       - 0.279              : Changed description to 'Konami 055555 Priority Encoder'.
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.169              : Fixed K055555 write access, fixing Lethal Enforcers II text colors properly [Angelo Salese].
       - 0.154              : Stop seeing double (video\k055555.c) [Alex Jackson].
       - 0.149u1            : Added video\k055555.c/h. K055555 reworking [David Haywood].
       - NOTES: Konami K055555 Priority Encoder
       - DRIVERS: bishi.cpp, djmain.cpp, konamigx.cpp and mystwarr.cpp
       - SOURCE: konami\k055555.cpp (Mixer Device / Priority encoder)


       K056230
       - 0.279              : Changed description to 'Konami 056230 LANC'.
       - 0.268              : Refactor regs_r/_w to regs_map. Preliminary K056230 LANC support for viper.cpp [Angelo Salese].
       - 0.245              : Some K056230 fixes [Ryan Holtz, Phil Bennett, Hydreigon].
       - 0.234              : Clear network interrupt properly (machine\k056230.cpp), fixes screen flashing in ZR107 driver. Also fixes player vehicle in GTI Club and Jet Wave skips/jitters during the end sequence [Ville Linde].
       - 0.222              : Misc demacroization [Osso]. Documentation updates [Hydreigon].
       - 0.202              : Removed K056230 MCFG macros [Ryan Holtz].
       - 0.154              : Converted K056230 to use inline configs [Fabio Priuli].
       - 0.142u3            : Added 'K056230 LANC' device.
       - 0.139u2            : Harmony updated the K056230 LANC device to no longer be legacy.
       - 0.136              : Added emu\machine\k056230.c/h. Fabio Priuli split Konami 056230 emulation from gticlub.c. Also converted it to be device and updated PPC Konami games to use the new code.
       - NOTES: K056230 LANC
       - DRIVERS: gticlub.cpp, plygonet.cpp, viper.cpp and zr107.cpp
       - SOURCE: machine\k056230.cpp


       K056832
       - 0.281              : Removed duplicate function [hap].
       - 0.280              : Small cleanup. Re-enable update_linemap render now that it works again. Fixes zooming glitches and wrong backdrop in G.I. Joe. Make linemap_enable a mcfg setter (konami\k054156_k054157_k056832.cpp) [hap].
       - 0.279              : Changed description to 'Konami 056832 Tilemap Generator'.
       - 0.218              : Added tilemap priority to K056832 [MetalliC].
       - 0.216              : Less crude hack to clean tilemap (video\k054156_k054157_k056832.cpp) [AJR].
       - 0.210              : Simplified handlers. Reduced unnecessary handlers, tags and lines. Fixed notes. Reduced deprecated AM_* macro comments (k054156_k054157_k056832.cpp) [cam900].
       - 0.202              : Eliminated register_postload [AJR].
       - 0.194              : Added assert for index out of bounds with ddboy (video\k054156_k054157_k056832.cpp) [Oliver Stoeneberg].
       - 0.169              : Note fix for K056832. Removed Tasman gfx hack in core (video\k054156_k054157_k056832.cpp) [Angelo Salese].
       - 0.156              : Tilemap assert fix (video\k054156_k054157_k056832.c) [Alex Jackson].
       - 0.154              : Updated K056832 to use delegates and inline configs. These changes are mostly driver-level, so I think they should not conflict with anyone else's work. The only relevant change for the device code is the removal of altK056832_vh_start. no further work on this chip is planned (it requires major rework) [Fabio Priuli].
       - 0.150              : Avoid usage of uninitialized memory and improved regs initialization (video\k054156_k054157_k056832.c) [Oliver Stoeneberg]. Fixed palette out of bounds access (video\k054156_k054157_k056832.c) [hap].
       - 0.149u1            : Added video\k054156_k054157_k056832.c/h. Modernized K056832 device [Osso].
       - 0.125u4            : Fixed crasher due to some Konami games using 8 layers in the K056832 implementation, even though it was only written for 4 [Aaron Giles].
       - 0.104u7            : Pierpaolo Prazzoli updated the Dragonball Z games to use the K056832 chip emulation, fixing color offsets and priorities.
       - 0.104u5            : Pierpaolo Prazzoli converted Asterix to use K056832 emulation.
       - 0.91u1             : R. Belmont implemented 48xx bankswitch region in Lethal Enforcers, which can toggle between custom chip registers and RAM (evil!). Removed hack to pass POST since we now do it the right way. Correct K056832 RAM interface, added preliminary support for external linescroll RAM on the K056832. This helps with the garbage tilemaps a bit since linescroll data is no longer getting sprayed all over VRAM (note, with this update the driver was just crashing when I tested it, so maybe something is wrong).
       -  1st September 2003: R. Belmont fixed a bug in the K056832 ROM readback, so the mask ROM tests work again in some of the Konami games.
       - 0.71u1             : Acho A. Tang added preliminary K056832 tilemap<->linemap switching, tileline code and missing sprites and priority (vidhrdw\konamiic.c).
       - 13th June      2003: Acho A. Tang updated Bucky O'Hare and Moo Mesa to use the K056832 graphics chip emulation which is far more complete than what the driver previously used, fixing various graphics effects and fixing the hang after the stage 2 boss.
       - NOTES: Konami 056832 Tilemap Generator
       - DRIVERS: asterix.cpp, bishi.cpp, dbz.cpp, djmain.cpp, gijoe.cpp, konamigx.cpp, lethal.cpp, moo.cpp, qdrmfgp.cpp, xexex.cpp and zr107.cpp
       - SOURCE: konami\k054156_k054157_k056832.cpp


       K057714
       - 0.279              : Changed description to 'Konami 057714 GCU'.
       - 0.259              : Removed unecessary clipping that caused medal games not to display properly and improved VBL IRQ handling (konami\k057714.cpp) [R. Belmont, Windy Fairy].
       - 0.230              : Implemented raster timing registers. Gives precise timings for Firebeat screens [Windy Fairy].
       - 0.229              : Adjusted transparency blend mode based on new info from Beatmania III. Fixed some crashes (divide by zero, out of bounds). Clear vram between resets [Windy Fairy].
       - 0.228              : Implemented display resolution register and various fixes to drawing [Windy Fairy].
       - 0.223              : Fixed some initialization problems noticed in debug DEVNOCLEAR build (video\k057714.cpp) [Osso].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.206              : Various improvements to video emulation in Keyboardmania games [Ville Linde].
       - 0.186              : Changed description to 'k057714_device GCU'.
       - 0.165              : Added video\k057714.c/h. Added 'K057714 GCU' device. Splitted K057714 GCU from firebeat.c driver into its own file. Hooked up GCU to konendev.c driver. konendev.c show some graphics. Added double height characters. Added IRQ callback. Found yet another FIFO [Ville Linde].
       - NOTES: Konami K057714 GCU 2D Graphics
       - DRIVERS: firebeat.cpp, konendev.cpp and konmedalppc.cpp
       - SOURCE: konami\k057714.cpp


       ????? (Konami programmable amplifier chip)
       - 27th June 2006: R. Belmont - I'm doing something I meant to do years ago (but MAME wasn't capable of supporting it at the time) - emulating the Konami programmable amplifier chip. It's actually a big ceramic thing that's sadly rather fragile and it's found in games from Xexex pretty much onward. This will make the test menu volume control work in a whole bunch of games, and also effectively make the sound emulation "perfect" in them.




G1.17  LSI Logic

       L1A3787            DMA engine/blitter          Mk
       L1A6017 (MAX1 EXIT)                            Dcheese
       L1A7968 Williams Electronics 5410-1346500      Crusnusa

       L4A0270                                        Atomicp



       Midway/Williams Electronics

       5410-12862-00    DMA-driven DAC                Mk3, Wwfmania
       5410-13465-00    DMA-driven DAC                Crusnusa (5410-1346500)
       5410-14120-00                                  MK3
       5410-14589-00    I/O           QFP164          Gauntleg, Gauntdl
       5410-14590-00                  QFP80           Gauntleg, Gauntdl
       5410-15349-00 Orbit 61142A                     Blitz99




G1.18  Nakanihon

       NL-001        DYNAX NL-001 WD10100                     Mmpanic
       NL-002        NL-002-3D1                               RongRong, Quizchq
       NL-005        208 pin, square, surface-mounted         Ddenlovr

       4L10F2467     QFP160                                   Realbrk, Pkgnsh, Pkgnshdx
       4L10F2468     QFP160                                   Realbrk, Pkgnsh, Pkgnshdx

       70C160F009    QFP160 (208), Graphics generator        Dynax games: Mjchuuka, Mjdchuka
       70C160F011                                             Dynax games: Hkagerou, Mjreach1



G1.19  Namco

       - 0.272              : Various Namco 2D driver cleanups and updates: Made some local variables const, use BIT helper for extracting bits, reduce literal tag use. Suppress side effects for debugger reads. Use explicitly sized integers for member variables that are saved. Updated notes. Reduced preprocessor macro usage [cam900].
       - 0.246              : Changed sourcefile to namco\namcoio.cpp.
       - 0.221              : Simplified some handlers (machine\namcoio.cpp) [Osso].
       - 0.213              : Fixed the sound of the first credit is not played in The Tower of Druaga (machine\namcoio.cpp) [Angelo Salese]. Added ROM definitions for undumped MCUs (machine\namcoio.cpp) [AJR].
       - 0.202              : Removed machine\namcoic.cpp/h.
       - 0.200              : Converted ROZ tilemap code mangles into callback. Splitted config for each game when tilemap mangle is different. Reduced code duplication. Moved metalhawk swap xy function into gfxdecode. Fixed metalhawk zoom. Added C169 wraparound disable bit. Moved Namco NB-2 hardware specific ROZ bankswitch into namconb1.cpp [cam900].
       - 0.174              : Changed drivers\namcoic.cpp to machine\namcoic.cpp. Allow separate namcoic.cpp driver building [Miodrag Milanovic].
       - 0.154              : Removed legacy read/write handlers (drivers\namcoic.c) [Alex Jackson].
       - 0.153              : Converted machine\namcoio.c to DEVCB2 [Osso].
       - 0.147              : Updated users. Added support for tilemaps to be passed a gfx pointer instead of a gfxnum (drivers\namcoic.c) [Aaron Giles].
       - 0.139u1            : Phil Bennett fixed incorrect road colours in Final Lap (drivers\namcoic.c).
       - 0.131u4            : Aaron Giles added new file devtempl.h which can be used to generate the DEVICE_GET_INFO function. Updated all the Namco I/O devices to use this, along with the 6821PIA and Voodoo.
       - 0.119u1            : Major Namco System 21 update [Phil Stroffolino]: Corrections to EPROM handling (affects Namco System2 as well). Scroll fix for sprite emulation in namcoic.c.
       -  9th March     2007: Guru - Two Namco 67 IC's for decapping arrived today. Thanks to Justin D.
       - 0.78u4             : Added machine\namcoio.c/h.
       - 0.88u1             : Shaun Stephenson confirmed Libble Rabble Custom IO chip numbers.
       - 0.60               : Added drivers\namcoic.c and includes\namcoic.h.
       - NOTES: machine\namcoio.c: Namco custom I/O chips 56XX and 58XX (plus an unknown one used only by Pac & Pal - could be "57XX", I guess). These chips work together with a 16XX, that interfaces them with the buffer RAM. Each chip uses 16 nibbles of memory; the 16XX supports up to 4 chips, but most games use only 2. The 56XX and 58XX are pin-to-pin compatible, but not functionally equivalent: they provide the same functions, but the command codes and memory addresses are different, so they cannot be exchanged. The devices have 42 pins. There are 16 input lines and 8 output lines to be used for I/O. It is very likely that the chips are standard 4-bit microcontrollers with embedded ROM, but it hasn't been determined which type. The closest match so far is the Oki MSM6408/MSM6422, but the pinout doesn't match 100%. Since the Namco customs appear to be manufactured by Fujitsu, they might be MB8851, but I haven't found data sheets nor pinouts for those devices.
       - DRIVERS: namcofl.cpp, namconb1.cpp, namcos2.cpp, namcos21.cpp, gaplus.cpp, mappy.cpp and toypop.cpp
       - SOURCE: namco\namcoio.cpp



       Namco 05xx

       - 0.222              : set_input_line is synced, don't need extra synchronize [hap].
       - 0.216              : Added video\starfield_05xx.cpp/h. Implemented accurate starfield for Galaga and Bosconian based on reverse engineering the Namco 05xx chip. Changes: 1. Regenerates starfield colors based on LFSR state for every frame. 2. Pixel accurate to Namco original 05xx. 3. Restores one line horizontal starfield shift for every 256 vertical pixel shifts. 4. Properly handles LFSR reset (_STARCLR). 5. Restores missing 4 stars from previous implementations. 6. Fixes potential issue with the number of stars on screen at any one time. 7. Restores 4 pixel/line scrolling capability (not currently used for any driver). Documentation and notes have been added inline to the code for the galaga video driver [Robert Hildinger].
       - NOTES: Galaga/Bosconian starfield
       - DRIVERS: galaga.cpp
       - SOURCE: video\starfield_05xx.cpp



       Namco System 1 Sprites (CUS39, CUS35/CUS48)

       - 0.282              : Added namco\namcos1_sprite.cpp/h. Moved Namco System 1/System 86 sprite functions into its own device [cam900].
       - NOTES: Namco System 1/86 Sprites - found on Namco System 1, System 86, Baraduke/Alien Sector and Metro-Cross hardware based on docs in namcos86.cpp and namcos1.cpp, they configured with following chips: CUS39 ULA sprite generator. CUS35/CUS48 ULA sprite address generator. "Shadow" sprites are used in namcos1.cpp
       - DRIVERS: namcos1.cpp and namcos86.cpp
       - SOURCE: namco\namcos1_sprite.cpp/h



       Namco C45 Road

       - 0.284              : Allow priority/mask value writes in draw routines (namco\namco_c45road.cpp) [cam900].
       - 0.232              : Tweak road position in Final Lap/2/3, Suzuka 8 Hours/2 and Lucky & Wild to better match hardware videos (Four Trax is uncertain) (video\namco_c45road.cpp) [David Haywood].
       - 0.231              : Changed video\c45.cpp/h to video\namco_c45road.cpp/h.
       - 0.221              : Simplified handlers (video\c45.cpp) [Osso].
       - 0.200              : Removed MCFG macros. Added region_ptr [cam900].
       - 0.154              : Reduced tagmap lookups in video\c45.c. device_gfx_interface and memory system improvements: Added macros to facilitate declaring gfxdecode info arrays as members of a device class. AM_SHAREs in a device's internal address map or its default address map are now tagmapped as children of that device rather than siblings (analogous to how handlers in internal/default address maps are scoped). Converted the Namco C45 to device_gfx_interface [Alex Jackson].
       - 0.153              : Added video\c45.c/h. Splitted C45 road chip from namcoic.c [Alex Jackson].
       - 0.147              : Added 'Namco C45 Road' device. Converted Namco C45 road chip to a device. Updated users. Added support for tilemaps to be passed a gfx pointer instead of a gfxnum (drivers\namcoic.c) [Aaron Giles].
       - DRIVERS: namcos2.cpp and tceptor.cpp
       - SOURCE: video\namco_c45road.cpp



       Namco C65 I/O

       - 0.252              : Removed unneeded bankdev.h include (namco\namco65.h) [Osso].
       - 0.221              : Simplified some handlers (machine\namco65.cpp) [Osso].
       - 0.202              : Added machine\namco65.cpp/h. Converted Namco C65 I/O to device [David Haywood].
       - NOTES: Namco C65 I/O
       - DRIVERS: namcos2.cpp and namcos21.cpp
       - SOURCE: machine\namco65.cpp



       Namco C67
       - 0.202              : Added machine\namco_c67.cpp/h. Converted Namco C67 DSP to device [David Haywood].
       - NOTES: Namco C67 a TMS320C25 with internal ROM and Namco code '67'
       - DRIVERS: namcos21_c67.cpp
       - SOURCE: machine\namco_c67.cpp



       Namco C68 I/O

       - 0.252              : Removed unneeded bankdev.h include (namco\namco68.h) [Osso].
       - 0.221              : Simplified some handlers (machine\namco68.cpp) [Osso].
       - 0.205              : Removed M37450 MCFG macros [Ryan Holtz].
       - 0.202              : Added machine\namco68.cpp/h. Converted Namco C68 I/O to device [David Haywood].
       - DRIVERS: namcos2.cpp
       - SOURCE: machine\namco68.cpp



       Namco System 2 ROZ (C102)

       - 0.284              : Use priority mechanism rather than multiple drawing passes. Added priority value and mask parameters to drawing functions, and cleaned up code (namco\namcos2_roz.cpp) [cam900].
       - 0.272              : Use generic graphics decoding layouts (namco\namcos2_roz.cpp) [hap].
       - 0.246              : Changed sourcefile to namco\namcos2_roz.cpp.
       - 0.213              : Changed description to 'Namco System 2 ROZ (C102)'.
       - 0.203              : Removed unnecessary device. Internalized gfxdecode (8bit data bus for ROM) [cam900].
       - 0.202              : Added video\namcos2_roz.cpp/h. Added 'Namco Sysem 2 ROZ (C102)' device.
       - DRIVERS: namcos2.cpp
       - SOURCE: namco\namcos2_roz.cpp



       Namco System 2 Sprites (C106,C134,C135,C16)

       - 0.284              : Use priority mechanism rather than multiple drawing passes. Added priority value and mixing callbacks. Draw sprites in a single pass using priority control. Cleaned up code and updated notes (namco\namcos2_sprite.cpp) [cam900].
       - 0.272              : Implemented device_gfx_interface to decode graphics (namco\namcos2_sprite.cpp) [cam900].
       - 0.246              : Changed sourcefile to namco\namcos2_sprite.cpp.
       - 0.242              : Fixed regression with valkyrie sprite shadows (video\namcos2_sprite.cpp) [hap].
       - 0.234              : Use extra bit on x coordinate (video\namcos2_sprite.cpp), prevents large oversized bad sprites in Final Lap 2/3 and Suzuka 8 Hours [David Haywood].
       - 0.210              : Simplfied/Fixed sprite gfx select behavior. Reduced unnecessary lines. Fixed spacings. Use shorter/correct type values [cam900].
       - 0.203              : Get palette from graphics decode, avoiding redundant configuration [cam900].
       - 0.202              : Added namcos2_sprite.cpp/h. Added 'Namco System 2 Sprites (C106,C134,C135,C146)', 'Namco System 2 Sprites (C106,C134,C135,C146) (Final Lap)' and 'Namco System 2 Sprites (C106,C134,C135,C146) (Metal Hawk)' devices.
       - DRIVERS: namcos2.cpp
       - SOURCE: namco\namcos2_sprite.cpp



       Namco C116 Video Controller

       - 0.221              : Simplified handlers (video\namco_c116.cpp) [Osso].
       - 0.203              : Implemented device_palette_interface for internal palette [cam900].
       - 0.200              : Removed MCFG macros [cam900].
       - 0.182              : Changed video\c116.cpp/h to video\namco_c116.cpp/h. Bulk rename video\c116.cpp into namco_c116.cpp [Angelo Salese].
       - 0.155              : Added video\c116.c/h. Implemented the Namco Custom 116 palette and raster IRQ controller as a device, and hooked it up to the namcos1, namconb1 and namcofl drivers [Alex Jackson].
       - NOTES: C116 controls palette RAM, blanking/clipping, and generates raster IRQs. It is paired with one of two priority mixer chips, depending on the board. On System 1, its partner is Custom 120; on System 2, NB-1, NB-2, and System FL, its partner is Custom 156. Based on schematics, C156 has more color input pins than C120 in order to support sprites with higher bit depth; other differences between the two mixer chips are unknown. The mixer (C120 or C156) outputs a 13-bit address corresponding to the color index of the highest-priority input pixel to three 6264 SRAMs, one for each of red, green and blue. The data from the RAMs is output to C116, which either sends it to the DAC or clips it to black if the beam position is outside the visible area programmed via its registers. When accessing the palette RAM from the CPU, data lines D0-D7 and address lines A11 and A12 go to C116; these two address lines select between the three RAMs and the C116 internal registers. A0-A10, A13 and A14 go to C120 or C156, which simply pass them through to the RAMs (A13 becoming A11 and A14 becoming A12).
       - DRIVERS: namcofl.cpp, namconb1.cpp and namcos1.cpp
       - SOURCE: video\namco_c116.cpp



       Namco C117 MMU

       - 0.221              : Simplified some handlers (machine\c117.cpp) [Osso].
       - 0.154              : Added machine\c117.c/h. Completely rewrote the emulation of the CUS117 MMU. The MMU is no longer emulated by modifying address maps at runtime, an operation which has become excessively slow as the core memory system has accumulated features and complexity over the years. Instead, the MMU is now a device which works on similar principles to the address_map_bank_device. The recent multisession regression is fixed, all games in the driver should now run substantially faster, and most importantly the driver code is now much cleaner and easier to understand [Alex Jackson].
       - DRIVERS: namcos1.cpp
       - SOURCE: machine\c117.cpp



       Namco C123 (4x + 2x Tilemaps)

       - 0.272              : Use generic graphics decoding layouts, use references rather than pointers in delegate parameters (namco\namco_c123tmap.cpp) [cam900].
       - 0.246              : Changed sourcefile to namco\namco_c123tmap.cpp.
       - 0.221              : Simplified some handlers (video\namco_c123tmap.cpp) [Osso].
       - 0.204              : Fixed Namco C123 video RAM mirroring issue in drivers\namcos2.cpp. Added support for offsets, half-height tilemaps and eight-bit I/O (for using in namcos1.cpp). Reduced unnecessary handlers and code duplication. Fixed naming for 16 bit handlers. Cleanup palette changing behavior [cam900].
       - 0.203              : Internalized gfxdecode (Gfx layout is shared at all hardwares - 8bit data bus for ROM). Mask region. Implemented tilemap disable bit [cam900].
       - 0.202              : Added video\namco_c123tmap.cpp/h. Splitted Namco C123 tilemap chip from namcos2 shared state by making it a device [David Haywood].
       - DRIVERS: namcos2.cpp, namconb1.cpp and namcofl.cpp
       - SOURCE: namco\namco_c123tmap.cpp



       Namco C139 Serial

       - 0.200              : Removed MCFG macros [cam900].
       - 0.182              : Added machine\namco_c139.cpp/h. Rewrote Namco C139 device (SCI) [Angelo Salese].
       - NOTES: Serial I/F Controller (SCI)
       - DRIVERS: namcos2.cpp and namcos21.cpp
       - SOURCE: machine\namco_c139.cpp



       Namco C148 Interrupt Controller

       - 0.200              : Eliminated machine().device [AJR].
       - 0.194              : Namco C148 (CPU Bus Manager) use required_device and optional_device (machine\namco_c148.cpp). This fixed debug assert in winrun, winrun91 and winrungp when starting emulation [Vas Crabb].
       - 0.183              : Register internal Namco C148 stuff to save state [Angelo Salese].
       - 0.182              : Added machine\namco_c148.cpp/h. Rewrote Namco C148 device (Interrupt Controller) [Angelo Salese].
       - NOTES: The C148 is a CPU Bus Manager for the M68000. C148 Features are: 3 Bit output port, 3 Bit input port, 3 Chip selects, 68000 Interrupt encoding/handling, Data strobe control, Bus arbitration, Reset output, Watchdog (NamcoSystem 2) and Memory Decode.
       - NOTES: Based off implementation from K.Wilkins and Phil Stroffolino
       - DRIVERS: namcos2.cpp and namcos21.cpp
       - SOURCE: machine\namco_c148.cpp



       Namco C169 (ROZ)

       - 0.284              : Allow priority/mask value writes in draw routines (namco\namco_c169roz.cpp) [cam900].
       - 0.272              : Use generic graphics decoding layouts, use references rather than pointers in delegate parameters (namco\namco_c169roz.cpp) [cam900].
       - 0.246              : Changed sourcefile to namco\namco_c169roz.cpp.
       - 0.203              : Internalized gfxdecode (Gfx layout is shared at all hardwares - 8bit data bus for ROM). Mask region [cam900].
       - 0.202              : Added video\namco_c169roz.cpp/h. Splitted Namco C169 ROZ chip from namcos2 shared state by making it a device [David Haywood].
       - 0.200              : Added C169 wraparound disable bit to machine\namcoic.cpp [cam900].
       - DRIVERS: namcos2.cpp, namconb1.cpp and namcofl.cpp
       - SOURCE: namco\namco_c169roz.cpp



       Namco 186/187 or C355/187 (sprites)

       - 0.284              : Improved flexibility: Use callback for mixing and added transparent pen configuration. Moved alternate precision flag to configuration. Fixed potential crashes. Reduced duplication and unnecessary code (shared\namco_c355spr.cpp) [cam900].
       - 0.277              : Changed description to 'Namco 186/187 or C355/187 (sprites)'. Updated comments and description to reflect the fact that the C355 is used with a 187 [cam900].
       - 0.272              : Use generic graphics decoding layouts (shared\namco_c355spr.cpp) [cam900].
       - 0.246              : Changed sourcefile to shared\namco_c355spr.cpp.
       - 0.237              : Removed video\deco_zoomspr.cpp/h. Refactor Dragon Gun and Locked 'n Loaded to use the Namco C355 (Sprites) device instead [David Haywood].
       - 0.234              : Fixed handling of sprite attribute table index and sprite position (video\namco_c355spr.cpp), fixes missing sprites in Final Lap R. Adjusted sprite attribute table index mask to accommodate 'J-League Soccer V-Shoot' (video\namco_c355spr.cpp) [Ryan Holtz]. Use namco_c355spr_device built in sprite buffering to pevent flickering gfx in Suzuka 8 Hours 2. Treat 'dy' as signed, seems a more logical solution to finalapr 'missing objects' and also fixes the flags on course select screen [David Haywood].
       - 0.231              : Color 0xfe is for a palette offset instead of shadow (video\namco_c355spr.cpp) [dink, hap].
       - 0.227              : Replaced sprite alpha blending with alternate frame flicker (video\deco_zoomspr.cpp) [cam900].
       - 0.220              : Converted sprite drawing behavior related to template bitmap. Fixed overwritten shadowed pixel. Support bitmap_rgb32. Implemented m_screenbitmap clearing. Added renderable bitmap with sprite effects to m_screenbitmap (video\namco_c355spr.cpp). Fixed copybitmap [cam900].
       - 0.217              : Fixed priority when pri 0 sprite isn't drawed first (video\namco_c355spr.cpp) [cam900].
       - 0.212              : Don't added shadow offset to black_pen, it will crash MAME (and black+shadow = black anyway) [hap].
       - 0.210              : Internalized gfxdecode and initialize values. Simplified handlers. Reduced unnecessary lines. Fixed spacings. Use shorter/correct type values [cam900].
       - 0.204              : Fixed inconsistency, deprecation and duplication [Vas Crabb].
       - 0.203              : Added support for double-buffered sprites, simplified configuration and cleaned up code [cam900].
       - 0.202              : Added video\namco_c355spr.cpp/h. Added 'Namco C355 (Sprites)' device. Splitted Namco C355 sprite chip from namcos2 shared state by making it a device [David Haywood].
       - 0.154              : Added video\deco_zoomspr.c/h. Moved some code around for later. Added more findings [David Haywood].
       - 0.78u5             : Hooked up a private (placeholder) implementation of zdrawgfx() for C355 sprite rendering, adding sprite-tilemap orthogonality for all games using that chip. This fixes MAMEtesters bug ptblank056gre. Also C355 sprite rendering no longer relies on game-specific hacks for XY placement or cropping [Phil Stroffolino].
       - NOTES: Namco C355 Zooming sprites + Namco 186/187 (DECO 186 + 187) Zooming Sprites used by Dragon Gun + Locked 'n Loaded
       - DRIVERS: deco32.cpp, gal3.cpp, namcofl.cpp, namconb1.cpp, namcos2.cpp, namcos21_c67.cpp and namcos21_de.cpp
       - SOURCE: shared\namco_c355spr.cpp



       00XX                   Tilemap address generator with scrolling capability (only Super Pacman)
       02XX                   GFX data shifter and mixer (16-bit in, 4-bit out)
       03XX                   ?
       04XX                   Sprite address generator
       05XX                   Starfield generator (Bosconian)
       06XX                   Interface to custom 5xXX
       07XX                   Clock divider
       08XX                   Bus controller
       09XX                   Address bus interface
       10XX                   Z8002 bus controller
       11XX (CUS11)           GFX data shifter and mixer (16-bit in, 4-bit out)
       12XX                   Sprite generator
       13XX                   Dual scrolling tilemap address generator
       15XX (CUS15)           Sound control
       16XX (CUS16)           I/O control
       17XX                   Tilemap address generator with scrolling capability
       20XX (CUS20)            tilemap and sprite address generator
       21XX (CUS21)           Sprite generator
       26XX (CUS26)           Starfield generator
             CUS27    DIP40   Clock divider
       29XX (CUS29)           Sprite line buffer and sprite/tilemap mixer
             CUS30   SDIP64   Sound control
             CUS31    DIP48
       33XX (CUS33)           Timing generator
       34XX (CUS34)           Address decoder
             CUS35            Sprite address generator
             CUS36            Dual tilemap generator
             CUS39    DIP42   Sprite generator
             CUS41    DIP40   Address decoder
             CUS42    QFP80   Dual scrolling tilemap address generator
             CUS43   SDIP64   Dual tilemap generator
             CUS47            Address decoder
             CUS48   SDIP64   Sprite address generator
       50XX           DIP28   Player score control (only used as protection check)
       51XX           DIP42   I/O (coin management built-in)
       52XX           DIP42   Sample player
       53XX           DIP42   I/O (steering wheel support)
       54XX           DIP28   Explosion sound (noise) generator
       56XX (CUS56)   DIP42   I/O (coin management built-in)
       58XX (CUS58)   DIP42   I/O (coin management built-in)
       59xx           DIP42
             CUS60            MCU (63701) aka 60A1
             CUS64            MCU (63701)
       62XX (CUS62)   DIP28   I/O and explosion (noise) generator
             CUS95            I/O interface
       98XX (CUS98)           Lamp/coin output
       99XX (CUS99)           Sound volume/enable
             CUS115           Expansion board ROM banking
             CUS116           Display output generator
             CUS117           Main/sub CPU MMU
             CUS120           Sprite/tilemap mixer and palette address interface
             CUS121           Sound CPU address decoder
             CUS123           Scrolling tilemap address generator
             CUS133           Tilemap generator
             CUS151           Protection. Changes from game to game




       Other:

       0037     ?, DIL28                                    Digdug
       0042     Video Ram Addresser                         Grobda
       0044     Video Ram Addresser                         Pacnpal
       0228     GFX data shifter and mixer, DIL28           Digdug
       0425     Sprite address generator, DIL28             Digdug
       0433     Motion Object Controller                    Grobda, Pacnpal
       0482     ?, DIP28                                    Pacland
       0640     Interface to Custom 5303, DIL28             Digdug
       0748     Clock Divider, DIL28                        Digdug
       0763     Clock Divider/Sync Generator                Grobda
       0764     Clock Divider                               Digdug
       0773     Clock Divider/Sync Generator                Grobda, Pacnpal
       0883     Bus controller, DIL28                       Digdug
       1100     Datashift Playfield Register                Pacnpal
       1108     Datashift Playfield Register                Grobda, Pacnpal
       1179     ?, DIP28                                    Pacland
       1200     Motion Object Position                      Pacnpal
       1204     Motion Object Position                      Grobda
       1275     ?, DIP28                                    Pacland
       1371     ?, DIP28                                    Pacland
       1500     Sound Generator                             Pacnpal
       1502     Sound Generator                             Grobda
       1600     ?                                           Pacnpal
       1603     I/O control                                 Grobda
       5156     I/O, DIL42                                  Digdug
       5303     I/O, DIL42                                  Digdug
       5601     Protection ?                                Pacnpal
       5604     I/O interface                               Grobda
       5806     I/O interface                               Grobda
       5902     Protection ?                                Pacnpal
       60A1     ?, DIP40                                    Pacland

       DD1-6    ?, DIL20                                    Digdug



       C27     DIP40         GFX motion OBJ                 (Pacland)
       C29     SDIP64                                       (Pacland)
       C30     SDIP64        Known 63701 MCU                (Pacland)
       C34     DIP24                                        (Pacland)
       C36     SDIP64                                       (Pacland)
       C39                   Video
       C45     QFP80         Road/Land Generator            (Luckywld)
       C48                   GFX motion obj.
       C65                   MCU I/O Controller             (Sgunner)
       C67     PLCC68
       C68     QFP80
       C70     QFP80         Rebadged M37702                (Namco NA-1/2 System)
       C71     PLCC68        TI320C25 DSP
       C74                   M37702 Sound MCU
       C75     QFP80         M37702 Sound MCU
       C76     QFP80         M37702 Sound MCU               (Namco System 11)
       C102    QFP80         ROZ Memory Access Control      (Gollygho)
       C106                  OBJ X-Axis Zoom Control
       C107                  Land Line Buffer
       C116    QFP80         I/O  Screen Waveform Generator
       C117
       C120                  Video
       C121    QFP64         Custom Glue logic for 6809 CPU
       C123    QFP80         GFX background, Tile Mem Decoder
       C133                  GFX background
       C134    DIP28         OBJ Address Generator
       C135    DIP28         OBJ Line matching
       C137    DIP28         Clock Generator IC
       C138    QFP80
       C139    QFP64         Serial I/F Controller (SCI)  SOURCE: drivers\namcos22.cpp
       C140    QFP120        24 Channel stereo PCM sample player
       C143    KeyCustom
       C145    QFP80         GFX Tile Memory Access
       C146    QFP80         OBJ Line Buf Steering
       C148    QFP64         CPU Bus Manager             NOTES: The C148 is a custom devices for the M68000. C148 Features are: 3 Bit output port, 3 Bit input port, 3 Chip selects, 68000 Interrupt encoding/handling, Data strobe control, Bus arbitration, Reset output, Watchdog (NamcoSystem 2)
       C149    DIP28         Mouse/Trackball Decoder
       C150    QFP64
       C152    (8822 Z02)
       C154    KeyCustom
       C156    QFP64         Pixel Stream Combo
       C157    NDIP24
       C160    QFP80         Control Inputs
       C165    NDIP28
       C167    QFP128
       C169    QFP120        ROZ(B)
       C184    KeyCustom
       C185    KeyCustom     (Tankfrce)
       C186    QFP160
       C187    QFP160
       C195    QFP160        Shared SRAM Controller for 68000
       C196    CPP
       C197    DIP24
       C198    QFP160        DSP processors
       C199    QFP100        CPU 18K
       C210    SOP28         (Namco NA-1/2 System)
       C214
       C215    QFP176        (Namco NA-1/2 System)
       C218    QFP208        (Namco NA-1/2 System)
       C219    QFP160        (Namco NA-1/2 System)
       C300    QFP160
       C304    QFP120
       C305    Palette
       C311
       C317    QFP178        IDC Main CPU (68000)
       C323    KeyCustom
       C324    KeyCustom
       C325    KeyCustom
       C326    KeyCustom
       C327    DIP24
       C329    QFP100        CPU?
       C335
       C337    PFP
       C342    QFP160
       C345    (9348EV  333791  VY06436A  NX25024K JAPAN)   (Speedrcr)
       C347    QFP80         GFX OBJ
       C350                                                 (Exvania)
       C351    QFP160        Sound processor
       C352    QFP100        32ch PCM Sound
       C353    QFP120
       C354    (32 pin)      (Exvania, Swcourt)
       C355    QFP160        Motion OBJ(B)
       C356                  (Cgangpzl)
       C357                  (Swcourt)
       C358
       C359    KeyCustom
       C361    QFP120
       C362    KeyCustom
       C365    (32 pin)                                   (Quiztou)
       C366    KeyCustom
       C367
       C368    DIP32
       C369    DIP32         Keycus C369
       C370    (Japan 9419A)                              (Ridge Racer, Ridge Racer 2)
       C373    DIP64         LAND-related                 (Luckywld)
       C374    QFP160
       C376
       C379    QFP64
       C380                                               (Speedrcr)
       C381    QFP144
       C382    QFP160                                     (Machbrkr, Outfxies)
       C383    QFP100                                     (Machbrkr, Outfxies)
       C384    QFP48         GFX(3)                       (Machbrkr, Outfxies)
       C385    QFP144                                     (Machbrkr, Outfxies)
       C386
       C388    KeyCustom
       C389    KeyCustom                                  (Cybrcomm)
       C390    KeyCustom, DIP32
       C391    KeyCustom
       C392?                                              (Ace Driver, Victory Lap)
       C393
       C395    QFP168
       C396    QFP160
       C397    QFP160
       C399    QFP160
       C400    QFP100
       C401    QFP64
       C402    QFP144
       C403    QFP136
       C404    QFP208
       C405    QFP176
       C406    KeyCustom, QFP120
       C407    QFP64
       C409    KeyCustom
       C413    QFP208
       C416    QFP176
       C417    QFP208
       C421    QFP208
       C422    QFP64
       C426    KeyCustom
       C428    KeyCustom
       C430    KeyCustom
       C431    KeyCustom
       C434    KeyCustom
       C435    QFP144
       C442    KeyCustom
       C443    KeyCustom
       C444    QFP136
       C446    QFP160
       C447    QFP256


       NVC285       DIP28             (Puckman, Rally X, Dodgem)      Z-80 Sync buss controller. Can be replaced by plug-in board A082-91383-B000
       NVC293       DIP18             (Rally X)                       Video shifter. Can be replaced by plug-in board A082-91388-A000.


       L7A0564      QFP100
       L7A0565      QFP100

       3PDSP1       PAL 16L8          (Cybsled)
       3PDSP2       PAL 16L8          (Cybsled)
       3PDSP4       PAL 16L8          (Cybsled)
       3PDSP5       PAL 16V8          (Cybsled)
       3POBJ4.JED   PLHS18P8  OBJ(B)  (Aircombj)
       3P0BJ3.JED   PLHS18P8  OBJ(B)  (Aircombj)
       3PDSP5.JED   GAL16V8A  DSP     (Aircombj)

       NB1-2        PAL16L8   "DEC75"   (Machbrkr, Outfxies)
       NB2-1        PALCE16V8 "Mixer"   (Outfxies)
       NB2-2        PAL16L8   "SIZE"    (Outfxies)



       NamcoSystem1

       S11GUN0     PLCC84 FPGA (not populated)
       S11GUN1     Altera Max EPM7128STC100-10 EPLD (QFP100, not populated)
       S11GUN2     Altera Max EPM7128STC100-10 EPLD (QFP100)
       S11GUN3     Altera Max EPM7128STC100-10 EPLD (QFP100)

       S11MOT1A    Standard System 11 PAL (DIP20)
       S11MOT2A             - " -
       S11MOT3A             - " -


       NamcoSystem12

       S12HSC1A     PALCE 16V8H
       S12HSC2A     PALCE 22V10H
       S12HSC3A     PALCE 22V10H

       S12MOT1A     PALCE 22V10H, PLCC28
       S12MOT1C     PALCE 22V10H
       S12MOT2A     PALCE 22V10H, PLCC28
       S12MOT2C     PALCE 22V10H
       S12MOT3A     PALCE 16V8H, PLCC28
       S12MOT3C     PALCE 16V8H
       S12MOT4A     PALCE 22V10H, PLCC28
       S12MOT5A     PALCE 22V10H, PLCC28
       S12MOT6A     PALCE 22V10H, PLCC28
       S12MOT7A     PALCE 16V8H, PLCC28



       KEYCUS (Namco System 10/12/23)

       KC001    S10    Mr Driller 2
       KC003    S10    Gekitoride-Jong Space
       KC006    S12    Tekken 3
       KC007    S10    Mr. Driller G
       KC010    S23    Time Crisis 2
       KC012    S10    Kotoba no Puzzle Mojipittan
       KC014    S12    Libero Grande
       KC017    S10    Panicuru Panekuru
       KC019    S10    Star Trigon
       KC020    S12    Soul Calibur
       KC021    S12    Ehrgeiz
       KC022    S10    Utyuu Daisakusen Chocovader Contactee
       KC027    S12    Super World Stadium '99
       KC029    S23    GP500
       KC035    S12    Derby Quiz My Dream Horse
       KC036    S12    Tenkomori Shooting
       KC037    S12    Fighting Layer
       KC038    S12    Paca Paca Passion
       KC042    S12    Point Blank 2
       KC043    S12    Super World Stadium '99
       KC044    S12    Tekken Tag Tournament
       KC045    S12    Ghoul Panic
       KC046    S12    Paca Paca Passion 2
       KC048    S12    Mr Driller
       KC052    S12    Paca Paca Passion Special
       KC053    S12    Aqua Rush
       KC054    S12    Golgo 13
       KC059    S12    Golgo 13 Kiseki no Dandou




G1.20  NANAO

       KNA6021901    DIP42               (Spelunkr, Youjyudn, Kidniki, Ldrun, Ldrun4)
       KNA6032601    DIP40               (Spelunkr, Youjyudn, Kidniki, Ldrun, Ldrun4)
       KNA6032701    DIP42               (Spelunkr, Youjyudn, Kidniki, Ldrun4)
       KNA6034201    DIP40               (Spelunkr, Youjyudn, Kidniki, Ldrun, Ldrun4)
       KNA6074601    60pin flat package  (Spelunkr, Youjyudn, Kidniki)
       KNA6077305    60pin flat package  (Spelunkr, Youjyudn, Kidniki)

       08J27504A1    QFP160              (Dsoccr94, Gunforc2, Majtitl2)

       GA21          QFP136              (Dsoccr94, Gunforc2, Majtitl2)
       GA22          QFP160              (Dsoccr94, Firebarr, Gunforc2, Majtitl2)
       GA23          QFP180              (Gunforce)
       GA25                              (Hasamu)
       GA30                              (Firebarr)
       GA31                              (Firebarr)
       GA32                              (Firebarr)

       70H016                            (Kikcubic)
       91H014                            (Kikcubic)



G1.21  NEC

       D6376       2-channel 16-Bit D/A Converter (SOIC16)           Renju, Scud, Speglsht, NintendoSuperSystem
       D6379GR     2-channel 16-bit D/A converter 10mW typ. (SOIC8)  PGM-System, Taito GNET-System

       D65006C     ???                                               Bigrun
       D65012GF303 9050KX016                    (QFP80)              47pie2, Suchipi
       D65024GF035 8805KK019   uPD65024, FPGA   (QPFP100)            Rallybik, Truxton, Vimana
       D65054GF102                              (QFP100)             Scud (D65654GF102)
       D65081R077  8833K9  or  D6508|R077 8805k9                     Truxton, Rallybik

       D71011      DIP18            ?                                Kothello
       D71036L     V33 CPU                                           Gunforce
       D71051C     D71051GU, DIP28  ssv.c: uPD71051/uPD7001C (UART)  CPS2, Mslider, Bel
       D71054C     Timer, drivers\seta.c                             Indyheat, Wrofaero, Gundhara
       D71055C                                                       Cherry Master + unknown game by Dynax
       D71059C     Interrupt controller (8259 compatible)            Rtypeleo
       D72103AGC   HDLC Serial com chip                              Glpracr2, Cbaj
       D72105C     uPD72105C   LAN hookup for multiple machines      Dblaxle, Wgp

       DX-101                                                        Grdians, Pzlbowl, Penbros
       DX-102     I/O                                                Meosism, Grdians, Pzlbowl, Penbros

       uPD7220    Graphics Display Controller

       HuC6202    Video Priority Controller                          PC-Engine
       HuC6260    Video Colour Encoder                               PC-Engine
       HuC6261    Video Colour Encoder                               PC-Engine
       HuC6270    Video Display Controller                           PC-Engine
       HuC6272    "King" device                                      PC-Engine



       uPD7220

       - 0.277              : Bump 7220 couple to use A revision (video\upd7220.h). Fixes win95 overlaying startup text on desktop graphics in (MESS) NEC PC-9821 [Angelo Salese].
       - 0.273              : Fixed vsync timings and update_partial for graphics partition. Correct hsync width and invert the vsync wait time. Added reset_origin on CRT reprogramming [Angelo Salese].
       - 0.272              : Command reset shouldn't touch RA parameters. Allow optional parameter for screen tag. Bump scissor cutout for graphic layer when interlace mode is on. Fixes (MESS) microbx2 regression. Horizontal multiplier is x16 if in gfx mode, x8 otherwise. Fixes (MESS) microbx2 and pc9801:diremono. Modernized logging. Experimentally allow area 3 graphic drawing in forced bitmap mode. Fixes pc98:steamhea gameplay drawing. Implemented experimental partition fetch fn. Backport pitch shift from pc9821 PEGC. Fixes pc9821:os2warp3 installation & chkdsk screens (video\upd7220.cpp) [Angelo Salese]. Pass cursor height to drawing functions. Reset pattern to pram after FIGD [Carl]. Fixed pitch calculation in rdat/wdat routines [Brian Johnson].
       - 0.271              : Clear FIFO and DMA status on RESET command issued. Fixes (MESS) pc9801rs spindiz2 boot. Fixed sync position. Return 0xff on FIFO underflows. Ignore parameters beyond first one for pitch command (video\upd7220.cpp). Fixes (MESS) pc9801 burai intro MAME crash [Angelo Salese]. Stop drawing if active lines is reached [Carl].
       - 0.269              : Added uPD7220A variant with new RESET and BLANK commands [Nigel Barnes].
       - 0.262              : Sync command should enable/disable the DE bit [Brian Johnson].
       - 0.260              : Wrap the line if pitch is smaller than aw (upd7220_device::draw_graphics_line) [Carl].
       - 0.250              : Use util::sext and other bit utility functions (video\upd7220.cpp) [AJR].
       - 0.245              : Reset pattern after FIGD (video\upd7220.cpp) [Carl].
       - 0.236              : Don't run wdat if figd figure type is set, set the pattern in wdat and reset figure type (video\upd7220.cpp) [Carl].
       - 0.235              : Made address space use word addressing, and implemented proper ead/dad/mask support for draw_char. Updated FIGD to use ead and mask to calculate drawing location (video\upd7220.cpp) [Brian Johnson].
       - 0.234              : During a GCHRD command, always start with pram[15]. Fixes some display bugs on the (MESS) QX-10 system when using mfbasic.com [Brian Johnson].
       - 0.232              : Implemented display zoom support [Brian Johnson]. Make a bitmap partition of len==0 to be max size, fixes (MESS) pc98 madoum1-2-3 [Angelo Salese, Sampson].
       - 0.231              : Fixed mixed mode display area partition parsing. Support DMAW and DMAR commands (video\upd7220.cpp) [Brian Johnson]. Some miscellaneous cleanup/consistency (video\upd7220.cpp) [Vas Crabb].
       - 0.216              : Work around for (MESS) Rainbow 100 Windows 1.03 issue [Carl].
       - 0.186              : Changed description to 'NEC uPD7220'.
       - 0.185              : Added 'uPD7220' device (video\upd7220.cpp).
       - 0.180              : D1 is also signed. Fixed arcs and division by zero in update_graphics. Calculation of 'addr' in inner for() loop of 'update_graphics": division by zero occurrs if mixed = false and m_lr = 0 [Carl].
       - 0.176              : Alternate drawing direction by line in gchrd [Carl].
       - 0.171              : Command 05 appears to blank the display [Carl].
       - 0.170              : Correct lr in graphics mode [Carl].
       - 0.167              : Fixed uPD7220 video in (MESS) MikroMikko 1 from git://github.com/kara1001000/mame. Implemented the 7220 offset and screen size change differently for MikroMikko as there were issues with other machines with 7220s. (MESS) MikroMikko 1 M6 seems to depend on fifo showing empty when there's one byte left to read [Carl].
       - 0.157              : Reversed uPD7220 bit order and make address space 16 bit [Carl].
       - 0.156              : Better output for the (MESS) Telenova Compis and Decision Mate V. Don't skip every other line in mixed mode. Slanted chars. Attempt to resolve apparent contradiction in window behavior. So dividing by lr didn't quite work. This works better but it looks too weird to be entirely correct. Bresenham line drawing. Fills the gaps that were breaking Adventureland. Shift screen down by vbp [Carl]. Fixed shift expression MSVC doesn't like [Alex Jackson]. Fixed usage of uninitialized member in upd7220_device [Oliver Stoeneberg].
       - 0.155              : Fixed uPD7220 RDAT command when data to read are larger than the FIFO, this fixes (MESS) Decision Mate V and BIC A5105 text scrolling [Sandro Ronco]. Support for mode 0 chars in uPD7220 (text in DMV diag program) [Angelo Salese]. Added Bresenham arc and complete char drawing [Carl].
       - 0.153              : Fixed (MESS) PC-98xx Quarth and Xevious video paging (video\upd7220.c). Pitch reversed, Dragon Buster contradicts with it [Angelo Salese]. Converted uPD7220 to DEVCB2 and use delegates.
       - 0.151              : Less verbose (printf -> logerror) [Curt Coder].
       - 0.148u3            : Added the internal uPD7220 rom (hand-dumped as little-endian from a die shot) [rfka01, Balrog].
       - 0.148u2            : Moved mess\machine\upd7220.c/h to emu\video\ [Curt Coder].
       - NOTES: NEC uPD7220 Graphics Display Controller + internal 128x14 control ROM.
       - DRIVERS: (MESS) a5105.cpp, apc.cpp, dmv.cpp, hhtiger.cpp, if800.cpp, mikromik.cpp, mz3500.cpp, mz6500.cpp, pc9801.cpp, qx10.cpp, rainbow.cpp, v550.cpp and vt240.cpp
       - SOURCE: video\upd7220.cpp


       HuC6202/HuC6260/HuC6261/HuC6270/HuC6272

       - 0.284              : Shuffle code blocks around (no implementation change). Attempt at fixing KRAM interface. Converted KRAM data access to 16-bit (video\huc6272.cpp). Fixed PAL offsets (video\huc6261.cpp). Added AR readback (video\huc6270.h). Added register writes (video\huc6271.cpp) [Angelo Salese].
       - 0.277              : Suppress side effects for debugger reads (video\huc6260\huc6270.cpp). Fixed save state issues (video\huc6260.cpp). Chose better types for member variables, made more local variables const and reformatted code (video\huc6202.cpp) [cam900].
       - 0.254              : Fixed RCR sync, it happens one line earlier (video\huc6270.cpp). Fixes (MESS) NEC PC Engine games (hash\pce.xml): draculax stage 4 "all blue" Richter, faussete stage 2 excessive slowdown and erratic water line, xwiber stage 2 boss never spawning, ppersia misplaced line, ddragon2 options menu display and tblade hang after third person view. Modernized HuC6272 handler interface. Fixed m_bg save state registration, added stub logmacro.h and misc cleanups. Hookup SCSI cmd readback (video\huc6272.cpp) [Angelo Salese].
       - 0.243              : Don't return -1 when running out of nybbles in adpcm_update fn (video\huc6272.cpp), fixes extremely overdriven (MESS) PC-FX aliasing [Angelo Salese].
       - 0.241              : Fixed SCSI identifier and added extensive QA (video\huc6272.cpp) [Angelo Salese].
       - 0.222              : READ/WRITE macros removal (video\huc6272.cpp, huc6261.cpp) [Osso].
       - 0.220              : Simplified some handlers (video\huc6260.cpp) [Osso].
       - 0.210              : Simplified handlers (huc6202.cpp, huc6260.cpp, huc6261.cpp, huc6270.cpp) [cam900].
       - 0.202              : Make CD-DA playable for HuC6272 [cam900].
       - 0.201              : HuC6272 device_add_mconfig modernization [Ryan Holtz]. Added ADPCM transfer and save states to HuC6272 [cam900].
       - 0.198              : Use required_device instead of explicit lookups for HuC6261 and HuC6272. Internalized palette HuC6260 [AJR].
       - 0.196              : Removed first_screen usage from video\huc6270.cpp [Ryan Holtz].
       - 0.191              : Inverted h/vsync logic for interrupts, fixes several PC Engine hangs (video\huc6270.cpp). VRAM is actually only 0-0x7fff, area 0x8000-0xffff is open bus and cannot be written to. Moved VRAM-VRAM DMA from vblank callback to hsync, fixes extended/Unexpected periods of black screen in (MESS) PC Engine Takeda Shingen. Actually battlera.cpp can access upper VRAM bounds, fixed regression [Angelo Salese].
       - 0.189              : Fixed B&W mode in (MESS) PC Engine 'Son Son II' causes total palette corruption (video\huc6260.cpp) [Angelo Salese].
       - 0.183              : Added video\huc6271.cpp/h. Fixed YUV colors, added palette offset and HuC6261-A mixing, fixes (MESS) NEC PC-FX boot screen graphics & colors. HuC6272 "King" clean-ups and identify SCSI registers. Added stub HuC6271 device for (MESS) Rainbow. Added full pad inputs, some register hookups in HuC6272 "King" and fixed few bit mistakes. Added SCSI interface to "King" device [Angelo Salese].
       - 0.154              : Converted HuC6202 device to DEVCB2 [Osso]. Converted HuC6261 to use inline config [Fabio Priuli]. Fixed usage of uninitialized member in huc6260_device, this fixed all PCE-based sets crashed with -aviwrite or -mngwrite [Oliver Stoeneberg].
       - 0.153              : Converted HuC6260 and HuC6270 device to DEVCB2 [Osso].
       - 0.149              : Minor improvements to PCE save state reliability (video\huc6270.c). Added VRAM saving to this chip (video\huc6270.c) [Fabio Priuli].
       - 0.148u2            : Fixed uninitialized member in video\huc6260.c, huc6261.c and huc6270.c [Oliver Stoeneberg]. Fixed palette in video\huc6260.c [Aaron Giles].
       - 0.148              : Fixed 'typo' in HuC6202 (prio_index, not prio_type) [Wilbert Pol].
       - 0.147              : Added video\huc6261.c/h and video\huc6272.c/h. Added skeleton-ish for the HuC6261 [wfp]. Start displaying some things from huc6270-b; doesn't look correct yet though. Added BGx mode selection register (video\huc6272.c) [Wilbert Pol]. Fixed PAD latch and irq priority. Template for King device (video\huc6272.c). Basic KRAM hook [Angelo Salese].
       - 0.146u5            : Added video\huc6202.c/h, video\huc6260.c/h and video\huc6270.c/h. Re-implementation of the PC-Engine graphics chips as separate devices. They are quite a lot slower than the current implementation for the pce, tg16, and sgx drivers which is why they are not used in those drivers yet [wfp].
       - NOTES: Hudson/NEC HuC6202 Video Priority Controller
                Hudson/NEC HuC6260 Video Colour Encoder = The HuC6260 takes a stream of pixel data, looks up the correct palette data and outputs a video stream. The HuC6260 generates the tv control signals. A full line lasts 1365 "master" cycles (typically at 21.47727 MHz).
                Hudson/NEC HuC6261 Video Colour Encoder = The HuC6261 generates the tv control signals. A full line lasts 1365 "master" cycles (typically at 21.47727 MHz).
                NEC HuC6270 Video Display Controller = The HuC6270 basically outputs a 9-bit stream of pixel data which holds a color index, a palette index, and an indication whether the pixel contains background data or from sprite data. This data can be used by a colour encoder to output graphics.
       - NOTES: https://patents.google.com/patent/US5692099
       - DRIVERS: battlera.cpp, ggconnie.cpp, paranoia.cpp, tourvis.cpp and uapce.cpp
       - SOURCE: video\huc6202.cpp, huc6260.cpp, huc6261.cpp, huc6270.cpp, huc6271.cpp and huc6272.cpp



G1.22  Nintendo

       RP2C04-001           Baseball, Freedom Force, Gradius, Hogan's Alley, Mach Rider, Pinball, Platoon, Super Xevious
       RP2C04-002           Castlevania, Ladies Golf, Mach Rider, Raid on Bungeling Bay, Slalom, Stroke N' Match Golf, Wrecking Crew
       RP2C04-003           Dr Mario, Excite Bike, Goonies, Soccer, TKO Boxing
       RP2C05-004           Clu Clu Land, Excite Bike, Ice Climber, Ice Climber Dual, Super Mario Bros.
       RC2C05-01            Ninja Jajamaru Kun (Japan)
       RC2C05-02            Mighty Bomb Jack
       RC2C05-03            Gumshoe
       RC2C05-04            Top Gun




G1.23  NMK

       NMK002     QFP80                                         Acrobatm
       NMK004     QFP64       Sound CPU                         Acrobatm, Blkheart, Gunnail, Mustang, Vandyke
       NMK005     QFP64       possible MCU?                     Bioship, Quizpani
       NMK008     QFP84       Sprites
       NMK009     QFP100      Sprites
       NMK111     QFP64
       NMK112     QFP64       Custom IC for bankswitching
       NMK113     QFP64       MCU  9140EBI                      Hacha Mecha Fighter
       NMK214     DIP64       GFX Descrambler                   SabotenBombers
       NMK215     DIP64       Toshiba MCU                       Bjtwin, Nouryoku, Sabotenb
       NMK901     QFP80                                         Bioship
       NMK902     QFP44                                         Bioship
       NMK903     QFP44                                         Bioship

       Links: http://upl-gravedigger.hp.infoseek.co.jp/top.html



       NMK004

       - 0.274              : Removed hard-coded assumptions about surrounding system (nmk\nmk004.cpp) [cam900].
       - 0.268              : Extract NMK004 internal ROM using a new technique. It was dumped from two different devices taken from Acrobat Mission and Thunder Dragon boards. The dump was exactly the same from those 2 devices, so I consider it a good and reliable dump. It was achieved using a custom tool to read internal ROMs from TLCS90 MCUs: https://github.com/sergiopolog/tlcs90-rom-reader. Previously existing dump made by 'trap15' only differs in 3 bytes starting at 0xFBD address. That difference could be caused by the method used to extract the ROM back then. Actually, I talk to him about it and he stated that area around 0xFBF address was marked as unsure when he carried out the process (nmk\nmk004.cpp) [Sergio G].
       - 0.246              : Changed sourcefile to nmk\nmk004.cpp.
       - 0.221              : Simplified some handlers (machine\nmk004.cpp) [Osso].
       - 0.205              : Removed TMP90840 MCFG macros [Ryan Holtz].
       - 0.187              : Replaced fake TLCS-90 I/O space with callbacks (cpu\tlcs90\tlcs90.cpp and machine\nmk004.cpp) [AJR].
       - 0.155              : Added proper NMK004 internal rom. This fixed Source: NMK004 sound CPU is just (imperfectly) simulated [trap15]. Hooked up support for NMK004 internal rom in MAME, replacing Nicola's old simulation code [trap15, David Haywood].
       - 0.150              : Converted NMK004 to a device [Osso].
       - 22nd March     2005: Nicola Salmoria - The NMK004 cannot be dumped directly using the common methods, but the way it operates can probably be used to extract the internal ROM data in another way. The external ROM contains data tables used to play the samples and music; but not only that, it contains pointers to those tables. By changing those pointers, we can make the NMK004 use its internal ROM as if it was one of the external tables. In particular, this can be done with the table that contains the sample numbers to be played by the two OKI6295. We can then log the commands sent by the NMK004 to the OKI6295, and this will allow us to determine which sample it is attempting to play - and therefore the value of the internal ROM byte it has just read. This is still at the theorical level, until one of the hardware gurus gets his hands dirty and tries to put it in practice. So in theory there shouldn't be problems - unfortunately the hardware setup needed to get it all to work isn't trivial. But I'm confident that in due time it will be done.
       - 0.94u4             : Nicola Salmoria improved NMK004 simulation and prevented hang in Black Heart.
       - 17th March     2005: Nicola Salmoria - All NMK004 games have sound, though in some of them it's better than in others. Mustang is possibly the worst one - I have doubts about the sound ROM being a bad dump. There were a few major problems - music stopping shortly after starting, or games completely freezing MAME. I have found a bug in the loops handling which should have caused most of these problems.
       - 0.94u2             : Added machine\nmk004.c/h. NMK004 sound simulation [Nicola Salmoria].
       -  7th March     2005: Nicola Salmoria - I am at a point that I almost consider good enough. The FM part is supported as well. The state machine seems to produce the correct notes, the only strange thing is that the volume is extremely low - I had to push it to 2.0 gain and lower all the others to make it reasonable. There might be a bug somewhere in the way the FM parameters are set - this stuff is much more complex than the PSG. At this point, I'm more worried about the protection in some games than by the sound, which is coming along nicely. It has to be said that this simulation I've written was mostly for personal education and for reference. I am 99% certain the NMK004 internal ROM can be extracted, using a technique I thought of. Theoretically it's very simple, but the process will require some hardware work. And of course, once the ROM is extracted, we'll have to see if it can be ran in MAME. It supposedly is a TLCS-90, which is one of the few CPUs not yet supported by MAME, so an emulator for that CPU would have to be written. Which would be a good thing because it would also allow to support Mahjong If and sound in Rapid Hero. Having the simulation code available might help while writing the CPU emulator.
       -  6th March     2005: Nicola Salmoria - The NMK004 state machine supports: Six FM channels; each pair of them shares one of the three YM2203 voices. Three PSG channels, each one using one of the PSG voices of the YM2203. Eight Effects channels, which can use the total eight voices provided by the two Oki M6295 to play sample-based sounds like drums (but they are also sometimes used to play effects not music related). Direct triggering of Oki M6295 samples (this is not strictly part of the state machine). I am growing more and more convinced that the internal ROM of the NMK004 is the same in all games. A few of the games in the driver have additional protection issues, but at this point I don't think they are related to the NMK004. The problems with the PSG notes were just caused by a silly omission of a *2 in a table lookup. Things that happen when hacking around at 4AM. The PSG part sounds quite good now. Only the FM part is missing...
       -  4th March     2005: Nicola Salmoria - It looks like the Z80 sound program for Task Force Harrier, which is the only known game predating the introduction of the NMK004, uses a data format which is very similar to the one used by the NMK004. The main command table and the sample tables are slightly different, and the music tables look very similar if not identical. It would probably be possible to modify the Z80 program to use the different tables, but I think I'll take the longer route and rewrite the program in C - so I'll learn how a program like that works in detail, which can always be useful knowledge.
       -  3rd March     2005: Nicola Salmoria - One of the longest standing hurdles in MAME emulation is the sound in NMK/UPL games like Mustang, Vandyke, GunNail, etc. Those games use an custom CPU, labelled "NMK004", to drive the sound. It is still not known what kind of CPU it is, what's known is that it has 8 or 16kB of internal ROM which cannot be directly dumped, and which contains the whole program. The external ROM only contains data. I am convinced that the program contained inside the NMK004 is either always the same, or it has minor difference to handle protection - but the format of the data in the external ROM is always the same. What I'm trying to do at the moment is understand the format of the external data. I have started with the easy part, that is the Oki 6295 samples control. I have found the command table, and the mappingd from command to 6295 sample number. This allowed me to make the games play the correct samples at the correct time so e.g. in Vandyke I hear a "swoosh" when I swing the sword and a "uumph" when I jump. I still haven't understood all of the control bits, so it isn't perfect yet, but it's a good start for a night's work. I'm hoping that other games that use a standard Z80 instead of the NMK004 will use similar logic to drive the sound (though I have already verified that they don't use the same data format as the NMK004). Of course the YM2203 part will be much harder since it won't be just a matter of playing a few samples here and there, but I will have to fully understand how the data translates into music and drive the YM2203 accordingly. However there's nothing stopping it in principle, so I am confident that eventually I or someone else will be able to add full sound to these games.
       - 16th August    2004: Guru - The big news is in dumping the Tenkaigen MCU (A Toshiba TMP91P640N in SDIP64 package), we've realised that the sound MCU/CPU on the NMK games that use NMK004 is the same chip, just in a QFP44 package which I have support for in the programmers software! So I can dump those too, but unfortunately we'll need another adapter. This means sound in GunNail, Mustang, Acrobat Mission, Vandyke, Black Heart and possibly others that use the NMK004 chip is possible once the chip is dumped.
       - NOTES: NMK004 TLCS90-based Toshiba TMP90C840AF Microcontroller with 256 bytes RAM & 8Kb internal ROM in the 0000-3fff range.
       - PCB: NMK004 0840-1324 (Acrobatm, Bioship, Vandyke)
       - DRIVERS: nmk16.cpp
       - SOURCE: nmk\nmk004.cpp



       NMK008 + NMK009
       - 0.215              : Added video\nmk16spr.cpp/h. Converted NMK 16 bit sprite hardware to a device. Fixed flipped case. Allow pdrawgfx drawing. Correct clock source (pixel clock mostly). Added value for sprite limitation. Added notes [cam900].
       - NOTES: 'NMK 16 bit sprite hardware' configured in NMK008 + one or more NMK009s or TTL logics or FPGA. From hardware manual: http://upl-gravedigger.boo.jp/pcb_info/pcb_manual_7.jpg
       - PCB: NMK008 + NMK009 (Acrobatm, Arcadian, Bjtwin, Nouryoku, Powerins, Sabotenb and Tdragon2)
       - DRIVERS: nmk16.cpp and powerins.cpp
       - SOURCE: video\nmk16spr.cpp


       NMK112

       - 0.282              : Use configured banking rather than writing to ROM regions (machine\nmk112.cpp) [cam900]. Handle non power of two ROM sizes properly (machine\nmk112.cpp) [Vas Crabb].
       - 0.204              : Eliminated MCFG macros and simplified write handler signatures [cam900].
       - 0.154              : Converted NMK112 to use inline config [Fabio Priuli]. Fixed uninitialized members in NMK112 and removed long-unneeded trampoline 8-bit handler [Alex Jackson].
       - 0.149              : Modernized NMK112 device (drivers\cave.c, nmk16.c, powerins.c, quizpani.c, toaplan2.c, machine\nmk112.c/h.) [Osso].
       - 0.136              : Fabio Priuli converted the NMK112 to be a device and updated drivers using it accordingly.
       - 0.99u4             : Created new NMK112 ROM banking module and connected it up to a number of drivers that made use of it. Affected games are in cave.c, nmk16.c, powerins.c, quizpani.c and toaplan2.c [Alex W. Jackson].
       -  7th July      2005: Alex W. Jackson - As promised, here's my NMK112 unification patch. This patch affects the following games which use the NMK112 chip (including clones, unless noted): cave.c: donpachi and pwrinst2; nmk16.c: macross2, tdragon2, raphero (theoretically - driver doesn't have sound yet), bjtwin, nouryoku and sabotenb; powerins.c: powerina (not powerins); quizpani.c: quizpani (thanks Reip) and toaplan2.c: batrider and battleg. This is my first non-trivial code contribution to MAME, not to mention my first time writing C code in quite a while (VB and Python have made my brain mushy) so a real MAMEDev should probably look over the patch carefully to make sure I haven't done anything stupid. In particular, I don't understand exactly what the ACCESSING_LSB macro does--I just copied it from the old code in nmk16.c. I also don't know if I have correctly named the function NMK112_okibank_word_w(). Only the LSB of the data written is actually used (the data is ANDed with 0xFF and then passed to the 8-bit handler), so perhaps it should be called NMK112_okibank_lsb_w() instead. If any games output incorrect samples after using this patch, they may need to have NMK112_set_paged_table() called in their driver initialization. Determine which of the two M6295s is playing the wrong samples, and add NMK112_set_paged_table(chipnum, 0) to the game's DRIVER_INIT. See Donpachi for an example. Judging by the old code I replaced, I don't believe any games other than Donpachi require this (there was a comment in cave.c implying that Donpachi was an unusual case), but I may be mistaken. The interface to the NMK112 used by the two Raizing games in toaplan2.c can probably be tidied up, but I left it as it was since I don't have either of those romsets to test. In this patch I also took the liberty of fixing an apparent mistake in raphero's sound ROM loading, in case someone gets the sound emulation working in the future.
       - NOTES: NMK112 custom IC for bankswitching the sample ROMs of a pair of OKI6295 ADPCM chips. The address space of each OKI6295 is divided into four banks, each one independently controlled. The sample table at the beginning of the address space may be divided in four pages as well, banked together with the sample data. This allows each of the four voices on the chip to play a sample from a different bank at the same time.
       - DRIVERS: cave.cpp, nmk16.cpp, nmkmedal.cpp, patapata.cpp and quizpani.cpp
       - SOURCE: machine\nmk112.cpp


       NMK214

       - 0.264              : Added nmk\nmk214.cpp/h. Added NMK214 graphics unscrambling device. The current implementation is less than ideal due to inflexibility of device_gfx_interface. Hooked up NMK214 device for Saboten Bombers [Sergio Galiano].
       - NOTES: NMK214 GFX Descrambler. This device is used for descrambling the GFX data on some game PCBs from NMK (nmk16). It works in tandem with NMK215, that's a Toshiba MCU which sends initialization data to NMK214 in order to do the descrambling process. Every game PCB using it has two NMK214 chips, one for sprites and another for background tiles. It can work in two different modes: word and byte: For sprites it always works in word mode; for backgrounds it always works in byte mode. There are 8 hard-wired internal configurations. The data received from NMK215 selects one of those them at startup. That init data is stored in the device when bit 3 matches with the operation mode wired directly on the PCB. The descrambling process is essentially a dynamic bitswap of the incoming word/byte data, doing a different bitswap based on the address of the data to be descrambled. The input address bus on the device is used to determine which bitswap do for each word/byte, and it's usually hooked differently for sprites and background tiles, so an 'input_address_bitswap' is included to get the effective address the device will use.
       - PCB: NMK214 (Bjtwin, Nouryoku and Sabotenb)
       - SOURCE: nmk\nmk214.cpp


       NMK215
       - NOTES: NMK215 Toshiba MCU sends initialization data to NMK214 in order to do the descrambling process. Bit 2 on Port 3 of MCU (NMK215) acts as strobe/clock (rising edge) for storing the byte previously set on the Port 7 of MCU (NMK215) into the internal registers of both NMK214 devices.
       - PCB: Bjtwin, Nouryoku, Sabotenb


G1.24  Other

       Afega               AFEGA AFI-GFSK (PLCC68), AFEGA AFI-GFLK (QFP208), AFI-CF5K       Grdnstrm, Popspops, Bubl2000 (LTC1 = AFEGA AFI-GFSK, LTC2 = AFEGA AFI-GFLK)
       Atlus               ATLUS 8647-01 013                                      Donpachi, Pwrinst2
       AXELL               AXELL AG-1 AX51101     (graphics LSI)                  Gunpey
       Comad               T91B-06, T91B-07                       DIP32           Fantasy95, Hotpinbl
       Electronic Devices  INGA 1 / INGA 2 I.G.1BB  48844758V (PLCC84 FPGA)       Borntofi
       Eolith              EV0514-001                             QFP100          Raccoon, Puzzlekg
       FACE                FX1037-FACE-FA01-2075                  QFP176          Mcatadv, Nost
       Fuuki               FI-002K, FI-003K                       QFP208          Pbancho, Gogomile, Asurabld
       Graphic Techno      001599 + CP S No C2012                                 Taxidrvr
       Home Data           HOMEDATA GX61A01 102 8728KK or 8842KK  QFP100          Lemnangl
       Hudson              HuC6260A, HuC6270                                      Battlera (video\battlera.c), Paranoia, TourVision
       Hyperstone ?        SYS L2D HYP Ver 1.0 ASIC Express, L2D_HYP              Legendoh, Spotty
       Mahjong games       Nichibutsu NB19010 and NB22090 custom chips
       Mahjong Tenkaigen   AL9106 graphics generator              QFP64           Tenkai
       P&P Marketing       AJ001 5380-JY3306A, AT001              QFP160          Policetr, Sshooter
       Tatsumi             TZB215, TZB315 = TZ8315   custom sprite chip           Cyclwarr, Roundup5
       Texas Instruments   TI 52C1HXW and TI 52ALROW                              Ttchamp
       Texas Instruments   F119708APCM custom PQFP                                Nbajam
       Unico               MDE-2001                                               Stoffy
       Universal           CF37201 = Custom Function                              IDsoccer, Docastle, Dorunrun
       Williams            Special Chip 2 (custom BIT/BLT chip)                   Mysticm
       Zoran               Zoran ZR36011PQC + ZR36050PQC          QFP100          Sliver - NOTES: The background images on this hardware are in JPEG format, the Zoran chips are hardware JPEG decompression chips.


       Acorn Archimedes custom chips
       - 0.148u1: Reduced tagmap lookups (includes\archimds.h, machine\archimds.c) [Wilbert Pol].
       - 0.129u3: Added machine\archimds.c/h and aristmk5.c driver. R. Belmont imported Archimedes code from MESS.
       SOURCE: machine\archimds.cpp

      Zoran ZR360xx
      - 0.144u7: David Haywood and R. Belmont added libjpeg (JPEG image encoding, decoding and transcoding). Converted Sliver to decompress pictures on the fly.
      - 18th January 2012: David Haywood - I decided to integrate some proper JPEG decoding libraries into MAME. Why? Well, there is one game, which has been running in MAME for a while which actually uses JPEG decoder chips on the PCB. This game is the rather obscure 'Sliver'. As a game, it's not even remotely interesting, or good, but from a hardware perspective the pair of Zoran chips used to decode the JPEG images stored in the ROMs make it an interesting case. Until recently MAME has simply loaded an extra 'fake' rom with the JPEG images pre-decoded, and used a look-up table in the driver to convert the addresses requested by the game for the JPEGS into addresses where our pre-decoded bitmaps were stored. Obviously this isn't how the hardware worked. By integrating the JPEG library I've managed to remove the fake ROM, and can now point the decoder directly at the real JPEG data in roms as and when it's requested by the game. Note, you can see ugly JPEG artifacting on the game screen, they obviously didn't compress the images with very high quality settings. From an end-users perspective, the game still runs and plays exactly how it did before, but from a MAME perspective the emulation is now better, and we have a JPEG library to play with if we want it, maybe as an option when creating screen-shots at high resolutions where PNG becomes excessively large? Either way, it's there and could be put to further use. There is one other game which uses the same JPEG decoder chips on the board Magic the Gathering: Armageddon (Progettoemma link due to MAWS being down after it was used to hack MameWorld). Currently that game doesn't work, but Phil Bennett was last seen getting some 3D out of it, so having a JPEG decoder should help him get the correct textures, which are encoded as JPEGs in the ROM. As with the FLAC stuff, thanks also goes to R. Belmont for ensuring it compiles / works on Linux and Mac environments.
      SOURCE: lib\libjpeg\jpeglib.h + drivers\sliver.cpp


G1.25  Philko

       PK8701     PK8701 8720                 Outrun
       PK8702     PK8702 8717                 Atomicp, Outrun
       PK8703                                 Outrun
       PK8704                                 Outrun
       PK8705                                 Outrun
       PK8801                                 Twinfalc, Xyonix


G1.26  Psikyo

       PS2001     PS2001B                  (Btlkroad, Gunbird, S1945, Tengai)
       PS3103                              (Btlkroad, Gunbird, S1945, Tengai
       PS3204                              (Btlkroad, Gunbird, S1945, Tengai
       PS3305                              (Btlkroad, Gunbird, S1945, Tengai)
       PS6406     PS6406B    QFP208        (Gunbird2, Gnbarich, Daraku, S1945II)
       PS6807                QFP208        (Hotgmck, Loderndf, Hotdebut, Hgkairak)



G1.27  Seibu

       SEI80BU      611 787                                                      Cshooter, Deadang
       SEI0010BU    TC17G005AN-0025                                              Deadang, Panic Road
       SEI0020BU    TC17G008AN-0015                                              Cshooter, Deadang
       SEI0021BU    TC17G008AN-0022                                              Deadang, Panic Road
       SEI0030BU    TC17G005AN-0026                                              Cshooter, Panic Road
       SEI0040BU    TC15G008AP-0048                                              Cshooter, Panic Road
       SEI0050BU    MA640 00                                                     Cshooter, Deadang, Panic Road
       SEI0060BU    TC17G008AN-0024                                              Cshooter, Deadang
       SEI0070BU                                                                 Mustache
       SEI0100BU    YM3931 9106 EANA                         (DIP64)             Heatbrl, Cupsoc, Godzilla, Skysmash
       SEI150       W (triangle symbol) 40101                                    Raidendx, Raiden2
       SEI0160      F15 359                                  (QFP60)             Sdgndmps, Sengokmj, Skysmash
       SEI0181                                               (QFP80)             Skysmash
       SEI0200      TC110G21AF 0076 9121EAI JAPAN            (QFP100)            Denjinmk, Heatbrl, Legionna, Godzilla, Skysmash
       SEI0210                                               (QFP128)            Sengokmj, Skysmash
       SEI0211      9107 ABCB                                (QFP128)            Heatbrl, Legionna, Cupsoc, Godzilla
       SEI0220BP    JAPAN S 9114 U                           (QFP64, QFP80)      Heatbrl, Legionna, Cupsoc, Godzilla, Skysmash
       SEI252       SB05-106                                 (QFP208)            Raiden2, Raidndx, Ejanhs, Senkyu, Viperp1
       SEI300       TC25SC900AF 001 9211eai                  (QFP184)            Heatbrl, Legionna, Cupsoc, Godzilla
       SEI333                                                                    Raidendx
       SEI360       SB06-1937                                (QFP160)            Raiden2, Raidndx
       SEI400       SB07-3460                                (QFP208)            rdft2
       SEI600       SB08-1513                                (QFP208)            rdft2
       SEI1000      SB01-001                                 (QFP184)            Raiden2, Raidndx, Denjinmk

       RISE10       Tile-Encryption chip                     (QFP240)            Raiden Fighters 2, Raiden Fighters Jet
       RISE11       9823 GAX1    Tile-Encryption chip        (QFP240)            Raiden Fighters Jet
       SIE150                                                (QFP100)            Raiden Fighters 2, Raiden DX



       WIP:

       SEI80BU
       - 0.282: Added seibu\sei80bu.cpp/h. Moved SEI80BU emulation into its own source file (seibu\sei80bu.cpp). SEI80BU is not always part of the Z80-based sound system, e.g. seibu\mustache.cpp. Also added input frequencies for SEI80BU devices (uses the same clock as the Z80) [cam900].
       - 0.180: Move SEI80BU encryption out of the SEIBU_SOUND device and make it a device of its own. Added MCFG_DEVICE_ROM to override region tag for device_rom_interface [AJR].
       - DRIVERS: airraid.cpp, cabal.cpp, deadang.cpp, dynduke.cpp, mustache.cpp, raiden.cpp and toki.cpp
       - SOURCE: seibu\sei80bu.cpp

       SEI0100BU
       - NOTES: The SEI0100BU YM3931 is not a Yamaha chip (!). It is the main/sub cpu interface, similar to Konami's K054986A or Taito's TC0140SYT. It also provides the Z80 memory map and interrupt control.
       - GAMES: Tad - Cabal (1988), Blood Bros. (1990), Raiden (Seibu 1990), Dead Angle (1988)
       - PCB: SEI0100BU YM3931 9106 EANA (Sdgndmps), SEI0100BU YM3931 9149 EALA (Sdgndmrb), SEI0100BU YM3931 9203 EAFA (Heatbrl), YM3931 SEI0100BU  DIP64 (Skysmash)

       SEI0210/SEI0211/SEI0220
       - 0.262: Added seibu\sei021x_sei0220_spr.cpp/h. Encapsulated SEI0210/SEI0211/SEI0220 sprite chip emulation [cam900].
       - DRIVERS: banprestoms.cpp, bloodbro.cpp, dcon.cpp, goodejan.cpp, legionna.cpp and sengokmj.cpp
       - SOURCE: seibu\sei021x_sei0220_spr.cpp

       Seibu CRTC
       - 0.153  : Updated Seibu CRTC to use DEVCB2 [Osso].
       - 0.149u1: Changed video\sei_crtc.c and includes\sei_crtc.h to video\seibu_crtc.c/h. Realized that Seibu SPI still uses their CRTC chip, updated Seibu CRTC. Some extra Seibu CRTC values (video\seibu_crtc.c). Death to sei_crtc dummy device and state-ized Sengoku Mahjong and Good E Jong video functions. Converted Seibu CRTC to a proper device. Hooked Seibu CRTC to D-Con and Blood Bros. hardware. Hooked up Seibu CRTC to clone Raiden (set 3) and raiden2 driver. Seibu CRTC really loved to PAL-ize those addresses. Some minor changes [Angelo Salese]. Seibuspi CRTC notes [hap].
       - 0.146u5: Fixed an horizontal scrolling bug in Sengoku Mahjong (drivers\legionna.c, sengokmj.c and video\sei_crtc.c) [Angelo Salese].
       - 0.141u4: Use a named memory area instead of either generic spriteram or a state-specific spriteram to allow sei_crtc.c to find the spriteram for games that use it [Aaron Giles].
       - 0.129u2: Added video\sei_crtc.c and includes\sei_crtc.h. Removed video\goodejan.c and sengokmj.c. Seibu CRTC [Angelo Salese]: Merged Sengoku Mahjong & Good e Jong video HWs. Added correct scrolling functions for Sengoku Mahjong. Removed some positioning kludges in both drivers.
       - NOTES: Seibu Custom "CRT Controller"
       - DRIVERS: bloodbro.cpp, dcon.cpp, goodejan.cpp, goodejan.cpp, legionna.cpp, raiden.cpp, seibuspi.cpp, sengokmj.cpp and raiden2.cpp
       - SOURCE: video\seibu_crtc.cpp



G1.28  Sega

       315-0015   MCU on Body Slam board. Does the following: Halt 68000 (which has been running for a bit beforehand), set up palette, show warm-up counter in middle of the text layer and let 68000 continue to run
       315-0033   831100  Custom CPU
       315-0042   40-pin - replaced several TTL chips (Carnival, Invho2, Sspaceat), VIC 315042 (Sspaceat)
       315-0062   Security chip (Astrob)
       315-0063   Security chip (Spaceod)
       315-0064   G-80 Security chip (Spacfury, Startrek)
       315-0070   G-80 Security chip
       315-0076   G-80 Security chip (Elim2)
       315-0082   G-80 Security chip for Monster Bash
       315-0172
       315-0220   EEPROM EPM5032DC-25

       315-3513   (Potopoto)
       315-4249   (Strkfgtr)
       315-4296   (Potopoto)

       315-5006   Encrypted CPU for Monster Bash (N7751?)
       315-5010   Encryption Pengo
       315-5011   315-5011 8549X5, Sprite line comparitor, DIP40     (Enduror, Hangon)
       315-5012   315-5012 8605P5, Sprite generator control, DIP48   (Enduror, Hangon)
       315-5013   Encryption Super Zaxxon, Ixion
       315-5014   Encryption Buckrog
       315-5018   Encryption Yamato
       315-5025   (Wmatch)
       315-5028   Encryption Sindbad Mystery
       315-5030   Encryption Up'n Down and Razzmatazz
       315-5033   Encryption Regulus
       315-5041   Encryption Mister Viking
       315-5048   Encryption SWAT
       315-5049   8551PX, Tilemaps, SDIP64    (Shtngmst, Enduror)
       315-5051   Encryption Flicky and Ninja Princess (bootleg)
       315-5053   PAL
       315-5054   PAL
       315-5056   PAL
       315-5061   Encryption Future Spy
       315-5064   Encryption Water Match
       315-5065   Encryption Bull Fight
       315-5069   Encryption Star Force (same key as Super Locomotive)
       315-5070   PAL12H6
       315-5071   PAL16R6
       315-5072   PAL16R6
       315-5073   PAL16L4 (protected) (Combh)
       315-5074   PAL10L8 (Combh)
       315-5084   Custom Z80  (Jongkyo)
       315-5093   Encryption Pitfall II
       315-5098   Encryption Ninja Princess (same key as Up'n Down). CPU is custom labeled M-120 (Razmataz)
       315-5102   Encryption Sega Ninja
       315-5106   PAL16R, DIP20      (Enduror)
       315-5107   PAL16R, DIP20, Horizontal timing control   (Hangon)
       315-5108   PAL16R, DIP20, Vertical timing control     (Hangon)
       315-5110   Encryption I'm Sorry
       315-5114   Encryption Chboxing, Chwrestl (same key as Regulus)
       315-5115   Encryption TeddyBoy Blues
       315-5122   PAL, Timing   (Hangon)
       315-5124   VDP - Sega Master System console
       315-5132   Encryption My Hero
       315-5135   Encryption Heavy Metal and Wonder Boy (set 1a & 3)
       315-5139   315-5139 8537 CK2605 V J  (Shtngmst)
       315-5141   Signetics CK2605, Z80 address decoding, DIP20
       315-5142   Signetics CK2605, DIP20
       315-5143   PAL, Sprite-related?
       315-5144   PAL, Sprite-related?, DIP20
       315-5145   PAL
       315-5147   PAL, unknown, DTACK-related
       315-5149   82S153 FPLA, Video mixing, DIP20
       315-5150   PAL
       315-5155   PAL, DIP20, Road bit extraction
       315-5159   8751 MCU
       315-5162   Encryption 4D Warriors and Rafflesia
       315-5164   PAL      (Enduror)
       315-5165   PAL      (Enduror)
       315-5166   PAL      (Enduror)
       315-5167   PAL      (Enduror)
       315-5168   PAL      (Enduror)
       315-5169
       315-5170   PAL      (Enduror)
       315-5171   PAL      (Enduror)
       315-5172   PAL      (Enduror)
       315-5177   Encryption Astro Flash and Wonder Boy (set 1)
       315-5178   Encryption Wonder Boy (set 2)
       315-5179   Encryption Robo Wres 2001 (NEC D315-5179)
       315-5193   PAL, 68000/MCU interface & address decoding
       315-5194
       315-5195   Memory mapper, QFP100
       315-5196   Sprite generator
       315-5197   Tilemap generator (System 16B) (108 8944 Y95) (PGA135)
       315-5202   PAL, 68000/MCU interface & address decoding  (Bodyslam)
       315-5203   PAL           (Robowres)
       315-5211   Sprite generator, 315-5211 136 8802 Y29 (PGA179)      (Aburner2)
       315-5213   PAL16R6, DIP20, Sprite-related                        (System16b)
       315-5214   Signetics CK2605, DIP20                               (System16b)
       315-5218   315-5218 134 8939 W00, SEGA PCM CHIP, QFP100          (Aburner2, Shangon)
       315-5222   PAL, Road mixing
       315-5223a  PAL
       315-5224   PAL
       315-5225   PAL
       315-5226   PAL
       315-5227a  PAL
       315-5228   PAL
       315-5242   Color encoder (315-5242 0301) (Custom ceramic DIP32 package) (QFP44)
       315-5244   82S153 FPLA, DIP20
       315-5246   VDP
       315-5248   Hardware multiplier, 315-5248 406AU 8939 W18, QFP100  (Strkfgtr)
       315-5249   Hardware divider, 315-5249 186BU 8917 W70, QFP120
       315-5250   Compare/Timer chip, 315-5250 423U 8940 W13, QFP120   (Aburner2, Loffire)
       315-5251   PAL                              (Shangon)
       315-5254   (9Y01)                           (Loffire)
       315-5275   Road generator, QFP100           (Aburner, Smgp)
       315-5278   PAL, Sprite ROM bank control     (Smgp)
       315-5279   PAL, Video mixing                (Afterburner)
       315-5280   PAL, Z80 address decoding        (Loffire, Smgp)
       315-5290   PAL, Main CPU address decoding   (Loffire)
       315-5291   PAL, Main CPU address decoding   (Loffire)
       315-5292   Tilemap generator, QFP160        (System 24, Model1)  (Mahmajn, VF)
       315-5293   Object generator, QFP160         (Mahmajn)
       315-5294   Mixer, QFP100                    (Mahmajn)
       315-5295   Object Generator, QFP100         (SegaSystem24);  Address decoder/interrupt controller (Mahmajn/2)
       315-5296   315-5296 8949KD, QFP100 - I/O handler  SOURCE: machine\system24.c - The 315-5296 has eight 8bits I/O ports, three output-only pins, some protection, and external/daughterboard chip selection on half of the address range.
       315-5298   PAL, Signetics PLS153F Field Programmable Logic Array, DIP20
       315-5304   PAL, Video mixing                (Smgp, Loffire)
       315-5305   Sprite generator                 (Strkfgtr)
       315-5306   Video sync and rotation          (Strkfgtr)
       315-5312   Video mixing                     (Strkfgtr)
       315-5313   VDP, 315-5313 7101 9Z 04 65 C   (Columns2, Tfrceac)
       315-5314   PAL
       315-5315   PAL
       315-5316   PAL
       315-5317   PAL
       315-5318   PAL
       315-5319   PAL
       315-5325   PAL
       315-5328   PAL
       315-5330               (Sega MegaPlay)
       315-5336   PAL         (Smgp)
       315-5337   PAL         (Smgp)
       315-5338   Sega Custom, QFP100         (Model1)
       315-5349   PAL16L8BCN  (Sega MegaPlay)
       315-5360   Memory mapper?
       315-5361   Sprite generator
       315-5362   Tilemap generator
       315-5373   PAL, Video mixing, PLS153      (Mwalk)
       315-5374   PAL, Sprite timing
       315-5375   PAL, System timing
       315-5385   Sprites?, QFP128   (Radr, Titlef)
       315-5386   Tilemap generator, QFP184   (Radr, Titlef)
       315-5387   Sprites, QFP160   (Radr, Titlef)
       315-5388   Priority, video mixing, QFP160   (Radr, Titlef)
       315-5389   PAL, VDP sync
       315-5390   PAL
       315-5391   GAL22V10, Z80 address decoding  (Clutch Hitter)
       315-5393   PAL
       315-5394   PAL
       315-5395   PAL
       315-5394                 (Tfrceac)
       315-5395                 (Tfrceac)
       315-5422   Sega Custom, QFP160   (Model1)
       315-5423   Sega Custom, QFP160   (Model1)
       315-5424   Sega Custom, QFP160   (Model1)
       315-5425   Sega Custom, QFP160   (Model1)
       315-5430   PAL, Video mixing
       315-5433                 (Sega MegaPlay)
       315-5436   Tile/sprite banking
       315-5441   GAL16V8A      (Radr, Sega System32)
       315-5442   PAL           (Radr)
       315-5452                 (Tfrceac)
       315-5463   Sega Custom, QFP160         (Model1)
       315-5464   Sega Custom, QFP160         (Model1)
       315-5465   Sega Custom, QFP100         (Model1)
       315-5476   RF5C68 PCM sound, 80 pins square chip    (Sega System32)
       315-5478   GAL16V8A, DIP20     (Model1)
       315-5483   PAL CK2605, DIP20   (Model1)
       315-5484   GAL16V8A, DIP20     (Model1))
       315-5485   GAL16V8A, DIP20     (Model1)
       315-5486   GAL16V8A, DIP20     (Model1)
       315-5507   PAL           (Radr)
       315-5546   GAL16V8A, DIP20     (Model1)
       315-5547   AMI 18CV8PC-25 PAL, DIP20     (Model1)
       315-5552   GAL16V8A/B    (Jparc, Sonic)
       315-5560   MultiPCM sound chip, QFP80  (Titlef)
       315-5571   SEGA MODEL1 TGP, QFP160     (Model1)
       315-5572   SEGA MODEL1 TGP, QFP160     (Model1)
       315-5573   Sega Custom, QFP160         (Model1)
       315-5577   Lattice GAL16V8A, DIP20)    (Model1)
       315-5578   Lattice GAL16V8A, DIP20)    (Model1)
       315-5579   Lattice GAL16V8A, DIP20)    (Model1)
       315-5591   QFP100         (Titlef)
       315-5596   Lattice GAL16V8A, DIP20  (Titlef)
       315-5598   Lattice GAL16V8A, DIP20  (Titlef)
       315-5611   Lattice GAL16V8A PAL, DIP20   (Model1)
       315-5624   MMI PAL16L8BCN PAL, DIP20     (Model1)
       315-5625   PQFP144       (Doa, VF)
       315-5641   9442CA010     (MESS - Sega Pico)
       315-5644   PQFP160       (Doa, VF)
       315-5645   PQFP208       (Doa, VF)
       315-5646   PQFP304       (Doa, VF)
       315-5647   PQFP304       (Doa, VF)
       315-5648   PQFP44/64/100  (Doa, VF)    QFP64 (Harley)
       315-5649   QFP100        (Bel, Harley)
       315-5651   GAL16V8A      (Sega MegaPlay)
       315-5653   GAL16V8A      (Sega MegaPlay)
       315-5654   PAL16L8BCN    (Sega MegaPlay)
       315-5655   PAL16L8BCN    (Sega MegaPlay)
       315-5661   GAL16V8A      (Sega MegaPlay)
       315-5672   QFP196        (Bel, VF)
       315-5673   QFP240        (Bel, VF)
       315-5674   PQFP120       (Doa, VF)
       315-5677   PQFP240       (Doa, VF)
       315-5678   PQFP240       (Doa, VF)
       315-5679   PQFP240       (Doa, Sega Model 2A)
       315-5687   YMF292-F LAKE QFP128   (Bel, Coolridr, VF)
       315-5688   FH3007        (STV-BIOS)
       315-5689   HD64440F      (STV-BIOS)
       315-5690   FH3006        (STV-BIOS)
       315-5691                 (Coolridr)
       315-5692                 (Coolridr)
       315-5693                 (Coolridr)
       315-5694                 (Coolridr)
       315-5695                 (Coolridr)
       315-5696                 (Coolridr)
       315-5697                 (Coolridr)
       315-5698                 (Coolridr)
       315-5712   PQFP144       (Doa, VF)
       315-5725   QFP144        (Bel)
       315-5737   GAL16V8B      (Doa, VF)
       315-5744                 (STV-BIOS)
       315-5757                 (Coolridr)
       315-5758                 (Coolridr)
       315-5762   PLCC68        (Scud)
       315-5778                 (STV-BIOS)
       315-5793   GAL16V8B      (Doa, VF)
       315-5798   QFP304        (Bel)
       315-5799   QFP368        (Bel)
       315-5800   GAL16V8B      (Coolridr)
       315-5801   GAL16V8B      (Coolridr)
       315-5802   GAL16V8B      (Coolridr)
       315-5803   GAL16V8B      (Coolridr)
       315-5804   QFP144        (Harley)
       315-5815   GAL16V8B      (Doa)
       315-5838                 (Decathlt)
       315-5849                 (Coolridr)
       315-5864   GAL16V8B      (Coolridr, VF)
       315-5879   PAL           (Bel)
       315-5881   317-50xx-COM  (Elandore)
       315-5893   QFP240        (Harley)
       315-5894   QFP240        (Harley)
       315-5917   QFP80         (Harley)
       315-5968   GAL16V8
       315-5969   GAL16V8
       315-6022   QFP208        (Harley)
       315-6050   Lattice ispLSI 2032 80LJ H833B23, PLD (Pltkids, Vs2v991)
       315-6057   BGA                (Harley)
       315-6058   BGA                (Harley)
       315-6059   BGA                (Harley)
       315-6060   BGA                (Harley)
       315-6061   BGA                (Harley)
       315-6074   PALCE16V8          (Harley)
       315-6075   PALCE16V8          (Harley)
       315-6089   GAL16V8D, PLCC20   (Harley)
       315-6090   GAL16V8B           (Harley)
       315-6102   PALCE16V8, PLCC20  (Harley)
       315-6146   QFP176             (Sega NAOMI Mainboard)
       315-6154

       316-1921                 (Razmataz)


       317-0001      ?
       317-0002      ?
       317-0003      ?
       317-0004      Custom Z80   Calorie Kun
       317-0005      Custom Z80   Space Positio
       317-0006      Custom Z80   Gardia
       317-0007      8751H        Gardia
       317-0008      ?
       317-0009      ?
       317-0010      8751H        Quartet
       317-0011      8751H        Dump Matsumoto
       317-0012      ?
       317-0013      FD1089B      Enduro Racer
       317-0014      MC-8123B     DakkoChan Jansoh
       317-0015      8751H        Body Slam
       317-0016      FD1089?      Fantasy Zone
       317-0017      ?
       317-0018      FD1089A      ActionFighter
       317-0019      ?
       317-0020      ?
       317-0021      FD1089A      Alex Kid
       317-0022      FD1089A      Dunk Shot
       317-0023      FD1089A      ?
       317-0024      FD1089B      Time Scanner
       317-0025      ?
       317-0026      ?
       317-0027      FD1089B      SDI
       317-0028      FD1089A      SDI
       317-0029      MC-8123B     Block Gal
       317-0030      MC-8123B     Perfect Billiards
       317-0031      ?
       317-0032      ?
       317-0033      FD1089A      Alien Syndrome
       317-0034      FD1089B      Super Hang On
       317-0035      ?
       317-0036      ?
       317-0037      FD1089B      Alien Syndrome
       317-0038      ?
       317-0039      ?
       317-0040      FD1094       Bullet ?
       317-0041      FD1094       Bullet
       317-0042      MC-8123B     Opa Opa
       317-0043      MC-8123B     Wonder Boy Monster Land
       317-0044      FD1089?      Super Hang On
       317-0045      FD1094       Super League
       317-0046      FD1094       Heavyweight Champ
       317-0047      FD1094       Heavyweight Champ ?
       317-0048      FD1094       Wonderboy 2
       317-0049      FD1094       Shinobi (System 16B)
       317-0050      FD1094       Shinobi (System 16A)
       317-0051      FD1094 ?     Sonic Boom ?
       317-0052      FD1094 ?     Sonic Boom ?
       317-0053      FD1094       Sonic Boom
       317-0054      MC-8123B     Shinobi (System 16A)
       317-0055      FD1094 ?     Thunder Blade ?
       317-0056      FD1094       Thunder Blade
       317-0057      MC-8123B     Fantasy Zone 2
       317-0058-01   FD1094           ?
       317-0058-02C  FD1094       Scramble Spirits
       317-0058-03D  FD1094       Gain Ground
       317-0058-04D  FD1094       Crack Down
       317-0058-05C  FD1094       Super Masters
       317-0058-05D  FD1094       Super Masters
       317-0058-06   FD1094       Rough Racer
       317-0058-07   FD1094           ?
       317-0058-08   FD1094       Quiz Syukudai
       317-0058-09D  FD1094       Dynamic Country Club
       317-0059      FD1094       Ace Attacker
       317-0060      FD1094       Ace Attacker
       317-0061      FD1094       Ace Attacker
       317-0062                       ?
       317-0063                       ?
       317-0064      MC-8123B     Ufo Senshi Yohko Chan
       317-0065      FD1094       Altered Beast
       317-0066      MC-8123B     Altered Beast
       317-0067      FD1094       Altered Beast
       317-0068      FD1094       Altered Beast (Japan)
       317-0069      FD1094       Altered Beast
       317-0070      FD1094       Passing Shot (4P, Japan)
       317-0071      FD1094       Passing Shot (4P, US) ?
       317-0072      FD1094       Passing Shot (4P, Export) ?
       317-0073                        ?
       317-0074      FD1094       Passing Shot (World, 4 Players)
       317-0075                        ?
       317-0076      8751         Altered Beast
       317-0077      8751         Altered Beast
       317-0078      8751         Altered Beast
       317-0079      FD1094       Excite League
       317-0080      FD1094       Passing Shot (2P, Export?)
       317-0081                        ?
       317-0082                        ?
       317-0083                        ?
       317-0084      FD1094       W/Boy3 Monster Lair (Japan)
       317-0085      FD1094       W/Boy3 Monster Lair (Japan)
       317-0086      FD1094       W/Boy3 Monster Lair ?
       317-0087      FD1094       W/Boy3 Monster Lair (Japan)
       317-0088      FD1094       W/Boy3 Monster Lair (US) ?
       317-0089      FD1094       W/Boy3 Monster Lair (Export)
       317-0090      FD1094       Wrestle War (Japan)
       317-0091      FD1094       Tetris (Japan, S16B)
       317-0092      FD1094       Tetris (Japan, S16B)
       317-0093      FD1094       Tetris (Japan, S16A)
       317-0093A     FD1094       Tetris (Japan, S16A)
       317-0094      FD1094       Dynamite Dux (Japan) ?
       317-0095      FD1094       Dynamite Dux (US) ?
       317-0096      FD1094       Dynamite Dux (Export?)
       317-0097                        ?
       317-0098      8751         W/Boy3 Monster Lair
       317-0099      8751         Tough Turf
       317-0100      8751         Tough Turf
       317-0101      FD1094       Wrestle War (US) ?
       317-0102      FD1094       Wrestle War (Export)
       317-0103      8751         Wrestle War
       317-0104      8751         Tough Turf
       317-0105      FD1094       Turbo Out Run ?
       317-0106      FD1094       Turbo Out Run
       317-0107      FD1094       Turbo Out Run
       317-0108                        ?
       317-0109                        ?
       317-0110      FD1094       Golden Axe (Export)
       317-0111                        ?
       317-0112      8751         Golden Axe
       317-0113                        ?
       317-0114      FD1094       Bay Route ?
       317-0115      FD1094       Bay Route (Japan)
       317-0116      FD1094       Bay Route (Export)
       317-0117      FD1094       Turbo Out Run ?
       317-0118      FD1094       Turbo Out Run (upgrade)
       317-0119      FD1094       Turbo Out Run ?
       317-0120      FD1094       Golden Axe (Export)
       317-0121      FD1094       Golden Axe (Japan)
       317-0122      8751         Golden Axe (US)
       317-0123A     8751         Golden Axe
       317-0124A     FD1094       Super Monaco GP (Japan)
       317-0125A     FD1094       Super Monaco GP (US)
       317-0126      FD1094       Super Monaco GP (Export)
       317-0126A     FD1094       Super Monaco GP (Export)
       317-0127A     FD1094       Flash Point (Japan)
       317-0128      FD1094       E-Swat (Japan)
       317-0129      FD1094       E-Swat (US)
       317-0130      FD1094       E-Swat (Export)
       317-0131                      ?
       317-0132                      ?
       317-0133                      ?
       317-0134      FD1094       Line of Fire (Japan)
       317-0135      FD1094       Line of Fire (US)
       317-0136      FD1094       Line of Fire (Export)
       317-0137                      ?
       317-0138                      ?
       317-0139      FD1094       Bloxeed (Japan)
       317-0140      EPM5032      Bloxeed
       317-0141                      ?
       317-0142      FD1094       MVP (Japan)
       317-0143      FD1094       MVP (US)
       317-0144      FD1094       Racing Hero (Export)
       317-0145      FD1094       Racing Hero (US)
       317-0146      FD1094       Alien Storm (2P, Japan)
       317-0147      FD1094       Alien Storm (3P, US)
       317-0148      FD1094       Alien Storm (3P, Export)
       317-0149      EPM5032      Columns
       317-0150                      ?
       317-0151                      ?
       317-0152                      ?
       317-0153      FD1094       Pontoon
       317-0154                      ?
       317-0155                      ?
       317-0156      EPM5032(?)   Bonanza Bros
       317-0157      FD1094       Moon Walker (Japan)
       317-0158      FD1094       Moon Walker (US)
       317-0159      FD1094       Moon Walker (Export)
       317-0160      EPM5032      Columns II
       317-0161      FD1094       GP Rider (Japan) ?
       317-0162      FD1094       GP Rider (US)
       317-0163      FD1094       GP Rider (Export)
       317-0164      FD1094       Laser Ghost (Japan) ?
       317-0165      FD1094       Laser Ghost (US)
       317-0166      FD1094       Laser Ghost (Export)
       317-0167                   Aurail
       317-0168      FD1089B      Aurail
       317-0169B     FD1094       AB Cop (Export?)
       317-0170      FD1094       AB Cop ?
       317-0171      FD1094       AB Cop ?
       317-0172      EPM5032      Thunder Force AC
       317-0173                      ?
       317-0174                      ?
       317-0175      FD1094       Clutch Hitter (Japan)
       317-0176      FD1094       Clutch Hitter (US)
       317-0177      EPM5032      Dynamic Country Club (ROM version)
       317-0178      EPM5032      Ribbit
       317-0179A     FD1094       Cotton (Japan)
       317-0180      FD1094       Cotton (US)
       317-0181A     FD1094       Cotton (Export)
       317-0182      FD1094       D.D. Crew (2P, Japan) ?
       317-0183      FD1094       D.D. Crew (2P, US) ?
       317-0184      FD1094       D.D. Crew (2P, Export)
       317-0185      FD1094       D.D. Crew (4P, Japan) ?
       317-0186      FD1094       D.D. Crew (4P, US)
       317-0187      FD1094       D.D. Crew (4P, Export) ?
       317-0188      FD1094       D.D. Crew (3P, Japan) ?
       317-0189      FD1094       D.D. Crew (3P, US) ?
       317-0190      FD1094       D.D. Crew (3P, Export) ?
       317-0191      EPM5032      Quiz Rouka Ni Tattenasai
       317-0192                      ?
       317-0193      EPM5032      Twin Squash
       317-0194      FD1094       Desert Breaker (Japan) ?
       317-0195      FD1094       Desert Breaker (US) ?
       317-0196      FD1094       Desert Breaker (Export)
       317-0197A     FD1094       Wally wo Sagase! (rev A, Japan)
       317-0197B     FD1094       Wally wo Sagase! (rev B, Japan)
       317-0198                      ?
       317-0199                      ?
       317-0200      EPM5032      Tokoro San no MahMahjan
       317-0201                      ?
       317-0202                      ?
       317-0203      EPM5032      Puyo Puyo
       317-0204      FD1149       Dark Edge
       317-0205      EPM5032      Quiz Mekuromeku Story
       317-0206                      ?
       317-0207                      ?
       317-0208                      ?
       317-0209                      ?
       317-0210      FD1149       F1 Super Lap
       317-0211      EPM5032      Tanto-R
       317-0212      FD1149       Burning Rival
       317-0213                      ?
       317-0214                      ?
       317-0215      FD1149       Dragon Ball Z
       317-0216                      ?
       317-0217      FD1149       Dragon Ball Z
       317-0218                      ?
       317-0219      EPM5032      Stack Columns
       317-0220      EPM5032      Tokoro San no MahMahjan 2
       317-0221                      ?
       317-0222      FD1149       J League
       317-0223                      ?
       317-0224      EPM5032      Ichidant-R
       317-0225                      ?
       317-0226      EPM5032      Quiz Ghost Hunter
       317-0227                      ?
       317-0228      EPM5032      Puyo Puyo II



       317-5012      MC-8123A     Ganbare ChinsanOoshoubu
       317-5021      FD1089B      Sjryukoo
       317-5023      FD1094       Ryukyu

       317-5039-COM
       317-5040-COM
       317-5041-COM
       317-5042-COM
       317-5043-COM
       317-5044-COM
       317-5049-COM


       839-0068     IC61  Sega System 16A                      Sjryuko
       839-0111     EXTENSION BOARD SYSTEM II                  Mahmajn, Mahmajn2
       839-0138     Sensor board/Steering Controller           Sega System24

       SE-93-JCEK     ?                                        Tantr
       SE-93-JDDA     ?                                        Topshoot
       SE-94-JDDB     ?                                        Topshoot
       SE-95 JDDC     ?                                        Topshoot


       TA04      Intercommunication and sync generator chip    Aladbl
       TA05      Input controller                              Aladbl
       TA06      VDP                                           Aladbl



       WIP:

       315-5124
       - 0.233  : Fixed color in SMS1 VDP(315-5124). Note: Blue channel is non-linear, verified from die shot reference: https://www.retrorgb.com/sega-master-system-blue-channel-mysteries-further-uncovered.html [cam900, Dan Mons].
       - 0.226  : Improved registers 03 and 04 behavior in mode 4. Registers 03 and 04 behavior in mode 4. Disable sprites in mode 3 for real. Use logmacro.h for configurable logging (video\315_5124.cpp) [Enik Land].
       - 0.216  : Allow dividing hcounter related to using LCM. Fixed color related to hardware measured value [cam900].
       - 0.214  : Fixed naming [cam900].
       - 0.212  : Adjusted horizontal screen positions [Enik Land].
       - 0.211  : Implemented /NMI-IN as a line write handler rather than as an input callback [Enik Land].
       - 0.210  : Use color lookup and correct color levels for 315_5313 (video\315_5124.cpp). Added notes [cam900].
       - 0.207  : Implemented internal PSG. Use shorter type values. Removed register_postload and unnecessary arguments in handlers [cam900].
       - 0.206  : Restored additional Sega 315-5313 palette entries used by 32X [Vas Crabb].
       - 0.201  : Minor fixes: Fixed off-by-one bug in 315-5124/315-5313 sprite zoom limit. Fixed 315-5214 tile/line numbers in leftmost column. Avoid flagging sprite collisions twice on the same line for 315-5313 [Enik Land]. Make video\315_5124.cpp more consistent [Vas Crabb].
       - 0.200  : Emulated bits of the status register for the number of the first sprite that overflows. Emulated sprite zoom limit of sega315_5124 VDP. Fixed inaccurate scrolling reproduced with Charles' scrolling test. Improved leftmost column color behaviour in mode 4 when fine scroll is applied. Implemented display modes 1 (text) and 3 (multicolor). Renamed vram_write()/vram_read() to data_write()/data_read(). Renamed register_write()/register_read() to control_write()/control_read(). Use "const" and the "BIT" macro where appropriate [Enik Land].
       - 0.186  : Changed description to 'Sega 315-5124 SMS1 VDP'.
       - 0.175  : Added basic C-Sync callback to 315-5124, based on Charles' hardware tests [Enik Land].
       - 0.166  : Minor changes to 315-5124 and fixed a regression that in theory could affect zoomed sprites in TMS9918 modes [Enik Land].
       - 0.164  : Let's not save the dynamic memory in video\315_5124.c for now, it causes some nasty crash issues and doesn't look like it will be fixed anytime soon [David Haywood].
       - 0.162  : Updated 315-5124 palette in TMS99x8 modes [nitrofurano].
       - 0.161  : Update 315-5124 palette. SMS and SG1000-Mark3 uses a different palette for modes 0 to 3. Besides the colour space got posterized into 4 levels (2 bits), that was "designed" from people that didn't care about using the closest colours, which results in a darker picture, and somehow different from what sg1000 mark1 and mark2 games displays. http://www.smspower.org/Development/Palette has more information about [nitrofurano].
       - 0.159  : (MESS) Improved the SMS code for the Light Phaser, by simplifying the routines and making them slightly faster (bus\sms_ctrl\lphaser.c and video\315_5124.c) [Enik Land].
       - 0.158  : (MESS) Misc sms/gamegear improvements [Enik Land]: Renamed the gear2gear port to EXT port, after reading the references in the official GG documents. Inverted Y1 pin signal bits: now high is 1 and low is 0. More complete Y1 behavior: goes low only for transparent pixels. Fixed color of column 0 when it doesn't completely entered in the active display. Improved behavior of sprite overflow, to not be flagged when VINT is active. The new Y1 pin behavior of the SMS VDP is based on Charles' findings and TMS9918 manual [Fabio Priuli].
       - 0.157  : Assorted changes and fixes to video\315_5124.c [Tafoid]. (MESS) Game Gear: Moved GG-SMS scaling from VDP file to the machine file; undone the specific X-Scroll timing introduced to fix Chicago Syndicate, for Game Gear, because it causes problems with the games Sonic Drift 1 and 2; reduced the amount of duplicated code in the VDP file [Enik Land]. NOTE: (MESS Game Gear units modded to output the image signal to a TV are able to show games using SMS compatibility mode in full screen, without scaling, while native GG games are displayed in a centered, smaller image, that is surrounded by bigger borders. Also, GG units that have the original LCD display replaced by another LCD display model (not just the back-light) also displays SMS compatibility games without scaling, and native games with borders. This suggests that the scaling isn't performed by the VDP and therefore motivated the moving of the scaling code in this commit [Fabio Priuli].
       - 0.156  : The Genesis VDP inherits the SMS vdp code so that it can run in SMS compatibility mode (a feature of the chip) not so that you can try and use it in both modes at the same time. Added an SMS VDP to Megaplay to use as the overlay, rather than abusing this feature of the Genesis VDP (video\315_5124.c) [David Haywood].
       - 0.155  : Use a simple array for SEGA 315-5124 CRAM. Fixes autosave issue found by Tafoid [Wilbert Pol]. Prevent VDP register 6 contents from being overwritten while a line is being drawn. Fixes title screen in (MESS) backtof3 (video\315_5124.c) [Enik Land, Wilbert Pol]. Added new member to save state [Wilbert Pol]. Fixed graphics glitch in (MESS) E-Swat attact mode on the smsj driver and some small cleanups. Small improvements to the latching of some registers. Fixes flicker in (MESS) Power Strike 2 (video\315_5124.c). Refactored sprite handling, fixes status bar on Tarzan for Gamegear. Removed m_collission_buffer member variable. Tweaked game gear timing to fix glitches in status bar of Chicago Syndicate for Gamegear. Disable (MESS) Gamegear SIO register when in ggsms mode. Fixed tilemap mirroring on sms1 VDP needed for Japanese version of Ys. Fixed BIOS support in the Gamegear driver. Fixed collisions when column #0 is disabled [Enik Land].
       - 0.154  : Improved 315-5124 CRAM writes. Fixes wrong colors on Sega logo for (MESS) robocop3 on Game Gear. Improvement to timing for calculating flags. Fixes random hangs in Game Gear roboterm and flickering in Game Gear evander. Several timing fixes: * Fixed flicker on Choplifter title screen by drawing the borders through timers. * Instead trigger NMI at end of the display, do it at end of top border (line 261 after start of active screen area). * Added a delay to NMI, to be later than HINT, as stated by Flubba's VDPTest readme. * Also based on VDPTest readme, change VINT and Sprite Overflow flags to be later than VCount change. * Delay a little the display callback, to fix the title scrolling of Road Rash (SMS game). * Fixed documentation of the scanline sections and change some timings to match. * Calculate initial VCount values, instead use of hardcoded values [Enik Land].
       - 0.153  : Improved 315-5124 X-Scroll register timing [Enik Land]. First attempt to use modern 315-5124 code for SMS games in MegaTech, exploiting the parent class of the MegaDrive VDP class. Please report regressions, if any [Fabio Priuli]. Converted 315-5124 to DEVCB2 [Osso].
       - 0.150  : Got rid of redundant read in 315-5124. Small 315-5124 simplification [Oliver Stoeneberg]. Prevent writing outside the m_selected_sprite array [Wilbert Pol].
       - 0.148u5: Changed hcount calculation to use screen timings and move it to the VDP (video\315_5124.c and mess\drivers\sms.c) [Enik Land]. Slightly consolidate save/restore in sms/gamegear, still not reliable (video\315_5124.c and machine\sms.c) [Fabio Priuli].
       - 0.148u3: Small improvements to the 315-5124 palettes [Enik Land].
       - 0.148u2: Improved triggering of 315-5124 IRQs [Enik Land].
       - 0.148u1: (MESS) Running eagles5 on the sms2kr driver. It apparently expects the irq to be cleared when explicitly disabling VINT irqs during VINT (video\315_5124.c) [Wilbert Pol].
       - 0.147u4: Fixed 315-5124 copy/paste error that caused FluBBa's "Offscreen Y, col" test to fail for the game gear VDP [Enik Land].
       - 0.144u5: Added video\315_5124.c/h. Updated Sega System E driver to use the implementation from src\emu\video\315_5124.c and modernized driver [Enik Land, Wilbert Pol].
       - NOTES: Sega 315-5124 SMS1 VDP video hardware chip used by Sega System E, Master System and Game Gear. Some specific behavior of the chip used by Sega Genesis/Mega Drive is also implemented for mode 4 only.
       - DRIVERS: segae.cpp
       - SOURCE: video\315_5124.cpp

       315-5179
       - 0.79u2: Dave Widel decode information for custom CPU used by Robo Wres 2001 (NEC D315-5179).

       315-5197
       -  6th May 2006: Charles MacDonald - I've been revisiting some older hardware research I did with a fresh viewpoint and have been examining video timings for several PCBs as well as other functions: Sega 315-5197 tilemap chip (System 16B, Outrun, X-Board): 400 pixels per scanline: 29 pixels from /HSYNC high to /BLANK high (left border), 321 pixels from /BLANK high to /BLANK low (active display), 18 pixels from /BLANK low to /HSYNC low (right border) and 32 pixels from /HSYNC low to /HSYNC high (horizontal sync. pulse). 262 scanlines per frame: 20 scanlines from /VSYNC high to /BLANK high (top border), 224 scanlines from /BLANK high to /BLANK low (active display), 14 scanlines from /BLANK low to /VSYNC low (bottom border) and 4 scanlines from /VSYNC low to /VSYNC high (vertical sync. pulse). Using 6.293780 MHz pixel clock, 60.05 frames per second. Of scanlines 0-223, /XINT follows /HSYNC on line 222. It goes low when /HSYNC goes low at the start of the horizontal sync. pulse at the end of line 222, and goes high when /HSYNC goes high at the start of the horizontal sync. pulse at the end of line 223. It is asserted for exactly one scanline (400 pixels).

       315-5246
       - 0.200  : Renamed GG VDP from sega315_5378 to sega315_5377 to match maintenance manual. Created a sega315_5313_mode4_device class to emulate some specific 315-5313 behavior in mode 4. Derivate sega315_5377 (GG) and sega315_5313_mode4 (MD) from sega315_5246 (SMS2) instead sega315_5124 (SMS1). Emulated some specific sega315_5377 timings verified on hardware. Emulated some sega315_5313_mode4 timings and behavior verified with Flubba's VDP Test. Emulated bits of the status register for the number of the first sprite that overflows. Emulated sprite zoom limit of sega315_5124 and sega315_5313 VDPs. Fixed inaccurate scrolling reproduced with Charles' scrolling test. Improved leftmost column color behaviour in mode 4 when fine scroll is applied. Implemented display modes 1 (text) and 3 (multicolor). Renamed vram_write()/vram_read() to data_write()/data_read(). Renamed register_write()/register_read() to control_write()/control_read(). Use "const" and the "BIT" macro where appropriate [Enik Land].
       - 0.186  : Changed description to 'Sega 315-5246 SMS2 VDP'.
       - 0.144u5: Added 'Sega 315-5246 VDP' device (video\315_5124.c).
       - DRIVERS: bingoc.cpp, megaplay.cpp, megatech.cpp and sms_bootleg.cpp
       - SOURCE: video\315_5124.cpp

       315-5248
       - 0.136u3: Fabio Priuli converted Sega 315-5248, 315-5249 and 315-5250 custom ICs to be devices and updated drivers accordingly.

       315-5249
       - 0.136u3: Fabio Priuli converted Sega 315-5248, 315-5249 and 315-5250 custom ICs to be devices and updated drivers accordingly.

       315-5250
       - 0.198  : Interrupt callback modernization [AJR].
       - 0.146u5: Added 'Sega 315-5250 Compare/Timer' device (machine\segaic16.c).
       - 0.136u3: Fabio Priuli converted Sega 315-5248, 315-5249 and 315-5250 custom ICs to be devices and updated drivers accordingly.
       - 25th January 2005: Aaron Giles - Spent some time this evening playing with the compare chip (315-5250) on my E-Swat board. This chip is present on several System 16B boards as well as on the X-board systems, and is used for doing simple 16-bit compares between values. Well, at least it looks simple at the start. For the most part, the implementation I currently have works fine, but it's not good enough to get the remaining few protected Golden Axe sets working. The symptom is that your player is stuck near the top of the screen.
       - DRIVERS: segas16b.cpp and segaxbd.cpp
       - SOURCE: sega\segaic16.cpp

       315-5195
       - 0.221  : Simplified some handlers [Osso].
       - 0.215  : Moved 'Sega 315-5195 Memory Mapper' from machine\segaic16.cpp to machine\315_5195.cpp/h. Moved open_bus_r down into the 315-5195 mapper device (not 100% ideal, but the next best place). Splitted out 315-5195 mapper device into separate source file and modernized logging [AJR].
       - 0.196  : Internalized communication latches for sega_315_5195. 315-5195 mapper has same clock as CPU [AJR].
       - 0.146u5: Added 'Sega 315-5195 Memory Mapper' device (machine\segaic16.c).
       - DRIVERS: segaorun.cpp, segas16b.cpp and segas18.cpp
       - SOURCE: machine\315_5195.cpp

       315-5292
       -  6th May 2006: Charles MacDonald - I've been revisiting some older hardware research I did with a fresh viewpoint and have been examining video timings for several PCBs as well as other functions: Sega 315-5292 tilemap chip (System 24, Model 1): 656 pixels per scanline: 69 pixels from /HSYNC high to /BLANK high (left border), 496 pixels from /BLANK high to /BLANK low (active display), 43 pixels from /BLANK low to /HSYNC low (right border) and 48 pixels from /HSYNC low to /HSYNC high (horizontal sync. pulse). 424 scanlines per frame: 25 scanlines from /VSYNC high to /BLANK high (top border), 384 scanlines from /BLANK high to /BLANK low (active display), 11 scanlines from /BLANK low to /VSYNC low (bottom border) and 4 scanlines from /VSYNC low to /VSYNC high (vertical sync. pulse). Using 16 MHz pixel clock, 57.52 frames per second. Setting $270001.b = $01 selects an invalid 512-scanline screen mode (same horizontal timings) where the display is enabled during the vertical sync. pulse and blanked at the wrong time. Maybe it's an unimplemented feature or used for chip testing, but it's definitely not useful. However it prevents framebuffer autoerase from working properly, so you can draw as many sprites as you want and keep the old ones.

       315-5296
       - 0.256: Correct logerror message [hap].
       - 0.252: Got rid of some unnecessary and contradictory member initialisations. Having members initialised in the constructor and also at declarations just leads to confusion (sega\315_5296.h) [Vas Crabb].
       - 0.221: Simplified some handlers [Osso].
       - 0.220: Changed segac2_tfrceacjpb set_ignore_read_direction to a bit more logical set_ddr_override mask, port D works ok now (machine\315_5296.cpp) [hap].
       - 0.185: Read inputs through 315-5296 (drivers\segas24.cpp and segaybd.cpp). Use 315-5296 for I/O in segajw.cpp. Hook up 315-5296 I/O on srallyc drive board (does nothing yet)Added 315-5296 to segam1.cpp and some placeholder RAM areas. Use Sega 315-5296 device for primary I/O in segas32.cpp [AJR].
       - 0.157: Assorted changes and fixes to machine\315_5296.c [Tafoid].
       - 0.156: Added SEGA_315_5296 device to Segas18 driver [hap].
       - 0.155: Added machine\315_5296.c/h. Added 315-5296 device to Sega C2 driver [hap]. Added some notes [Charles MacDonald].
       - NOTES: Sega 315-5296 I/O chip. 100-pin QFP, with 8 bidirectional I/O ports, and 3 output pins. It also has chip select(/FMCS) and clock(CKOT) for a peripheral device.
       - DRIVERS: segac2.cpp and segas18.cpp
       - SOURCE: machine\315_5296.cpp

       315-5313
       - 0.283: Fixed graphics corruption during startup (video\315_5313.cpp) [Angelo Salese].
       - 0.281: Acknowledge irqs only if enabled. Fixes regressions with (MESS) chukrck2 & d_titov2. Delay VINT regular triggers. Fixes (MESS) mazinsagj hang regression (video\315_5313.cpp/h, hash\megadriv.xml) [Angelo Salese].
       - 0.280: Make VDP irq enable times more deterministic. Fixed regression. Mode 4 disallows writing to registers beyond 10. Fixed (MESS) bassmpro Sega startup logo (video\315_5313.cpp) [Angelo Salese].
       - 0.229: Fixed/Added hardware related notes [cam900].
       - 0.226: Fixed a Genesis VDP status bit which was breaking Mega Play MC68000 -> Z80 communications. Promoted all games to working (except for Shinobi III) [Devin Acker]. Note: Only set interlace frame status bit when interlace is enabled (video\315_5313.cpp). This fixed the interaction between BIOS and 68k side is not fully understood. The BIOS often doesn't register that a game has been started and leaves the 'PRESS P1 OR P2 START' message onscreen during gameplay as a result.If this happens, the games usually then crash when you run out of lives as they end up in an unknown state.
       - 0.216: Allow LCM scaling of horizontal resolution [cam900].
       - 0.214: Fixed 3bit color mode masking. Added gfx/palette viewer for debug (off for default). Simpler VRAM write/replace function. Converted drawing routine using device_gfx_interface. Added device_gfx_interface for gfxdecode. Added gfx for shadow/hilight case. Fixed naming [cam900].
       - 0.213: Correct timer rate related to screen refresh rate. Simplified DMA behavior and handlers. Reduce duplicates and unnecessary lines. Fixed spacing. Use shorter / correct type values. Fixed debugger issue. Use struct for nametable [cam900].
       - 0.210: Use color lookup. Converted bitmap drawing function into bitmap_rgb32. Reduced unused. Fixed save pointers and external palette handlers. Implemented 3 bit color mode [cam900].
       - 0.203: Restored additional Sega 315-5313 palette entries used by 32X (video\315_5313.cpp) [Vas Crabb].
       - 0.200: Created a sega315_5313_mode4_device class to emulate some specific 315-5313 behavior in mode 4. Derivate sega315_5313_mode4 (MD) from sega315_5246 (SMS2) instead sega315_5124 (SMS1). Emulated some sega315_5313_mode4 timings and behavior verified with Flubba's VDP Test. Emulated sprite zoom limit of sega315_5313 VDP [Enik Land].
       - 0.199: Removed machine().device lookups [Ryan Holtz].
       - 0.162: Fixed some 315-5313 save states pointers, fixes palette restore problem evident in (MESS) MegaDrive gauntlt4 [Osso].
       - 0.157: Assorted changes and fixes to video\315_5313.c [Tafoid].
       - 0.156: mp_soni2 was trashing so much memory I'm surprised MAME didn't become self aware. Still haven't figured out what causes mp_gslam to trash part of the screen since we started using the real SMS code for the overlay, nor have I fixed the SMS mixing in interlace mode (soni2) or the incorrect horizontal offset (all games) that were also introduced at that time (video\315_5313.c) [David Haywood].
       - 0.153: Added 'Sega 315-5313 Megadrive VDP' device. Changed machine\megavdp.c/h to video\315_5313.c/h. Renamed Genesis VDP to Sega 315-5313 and moved it to emu\video\. Separation of the 32x from Megadrive VDP. (MESS) megavdp: Simplified DMA 'lag' handling, reducing the need of global functions [Fabio Priuli].
       - 0.151: Fixed VDP scanline settings in machine\megadriv.c (MT05293) [Oliver Stoeneberg].
       - NOTES: Sega MegaDrive/Genesis VDP
       -  1st June 2008: Charles MacDonald - Here is a mostly complete pinout for the 315-5313 VDP: http://cgfm2.emuviews.com/txt/vdppin.txt . If anyone does something cool like sticking a RAMDAC chip on the color bus outputs, do let me know.
       - DRIVERS: calcune.cpp, hshavoc.cpp, megadriv_acbl.cpp, megadriv_sunmix.cpp, megadriv_ybox.cpp, megaplay.cpp, megatech.cpp, segac2.cpp and segas18.cpp
       - SOURCE: video\315_5313.cpp

       315-5338
       - 0.270: Correct some save_pointer usage (sega\315_5338a.cpp) [hap].
       - 0.232: Added command readback and more serial output commands. Also always output on port writes (machine\315_5338a.cpp) [Dirk Best].
       - 0.221: Simplified some handlers [Osso].
       - 0.198: Improved 315-5338A I/O Controller and clean up. Renamed ports to match other Sega I/O devices [Dirk Best].
       - 0.197: Added machine\315_5338a.cpp/h and machine\model1io.cpp/h. Added 'Sega 315-5338A I/O Controller' device. Emulated Model 1 I/O board. This includes an emulation of the Sega 315-5338A I/O controller which is also hooked up to the segaufo.cpp driver now [Dirk Best].
       - NOTES: Sega 315-5338A I/O Controller. Custom 100-pin QFP LSI. Supports 7 8-bit input/output ports and can directly interact with dual port RAM. Also supports a master/slave configuration where one controller acts as master and sends commands and data over a serial link to another controller.
       - DRIVERS: bingoc.cpp, flashbeats.cpp, model1.cpp, model2.cpp, model3.cpp, segacoin.cpp, segaufo.cpp and stv.cpp
       - SOURCE: machine\315_5338a.cpp

       315-5377
       - 0.200  : Renamed GG VDP from sega315_5378 to sega315_5377 to match maintenance manual. Derivate sega315_5377 (GG) from sega315_5246 (SMS2) instead sega315_5124 (SMS1). Emulated some specific sega315_5377 timings verified on hardware [Enik Land].
       - SOURCE: video\315_5124.cpp

       315-5571
       - NOTES: Fujitsu MB86233 Geometrizer
       - SOURCE: cpu\mb86233\mb86233.cpp

       315-5572
       - NOTES: Fujitsu MB86233 Geometrizer
       - SOURCE: cpu\mb86233\mb86233.cpp

       315-5573
       - 0.197: Use the real 315-5573 Virtua Racing coprocessor program [Team CAPS0ff].
       - NOTES: Fujitsu MB86233 Coprocessor
       - SOURCE: cpu\mb86233\mb86233.cpp

       315-5641
       - 0.245: Fixed Sega Pico PCM playback. Fixed uPD775x type. Enforce "slave" mode (required for manual data stream). Hook up "PCM FIFO empty" interrupt. Fixes missing uPD samples in (MESS) Pico [ValleyBell].
       - 0.166: Added sound\315-5641.c/h. (MESS) Sega Pico PCM improvements: Refactored Valley Bell changes to uPD7759 into a new device derived from the 7759 rather than adding the Fifo into the 7759 (due to Aaron saying it doesn't exist there). It's possible the custom chip that Pico uses has said logic built in somehow as it's not a plain 7759 afaik [Valley Bell, David Haywood].
       - NOTES: Sega 315-5641 PCM PICO sound chip
       - DRIVERS: (MESS) segapico.cpp
       - SOURCE: sound\315-5641.cpp

       315-5649
       - 0.270: Correct some save_pointer usage (sega\315_5649.cpp) [hap].
       - 0.221: Simplified some handlers [Osso].
       - 0.216: Populate features for future use [MetalliC].
       - 0.214: Hook up 315-5649 I/O to model3.cpp [Dirk Best].
       - 0.210: Set all ports to input on reset, fixes some Model 2 games (rchase2, gunblade, topskatr, srallyc and manxtt) can't keep any change in Test Menu options after power down and restart [Dirk Best].
       - 0.200: Removed MCFG macros [Vas Crabb].
       - 0.198: Added machine\315_5649.cpp/h. Converted Sega 315-5649 I/O Controller to device. Added 315-5649 to coolridr.cpp and model2.cpp. Moved index parameter into template [Dirk Best]. Allow side effects of analog read to be disabled [AJR].
       - 0.181: Documented 315-5649 IO chip and fixed Astra SuperStars test mode hang [MetalliC].
       - NOTES: Sega 315-5649 I/O Controller
       - DRIVERS: coolridr.cpp and model2.cpp
       - SOURCE: machine\315_5649.cpp

       315-5838
       - 0.243: Fixed Coverity software buffer overflow (machine\315-5838_317-0229_comp.h) [Robbbert].
       - 0.222: Misc demacroization [Osso].
       - 0.201: Changed description to 'Sega 315-5838 / 317-0229 Compression and Encryption'. Implemented 315-5838 compression / encryption chip used by Decathlete [Peter Wilhelmsen, Morten Shearman Kirkegaard, Samuel Neves, David Haywood]. Some tweaks to 315-5838 (decathlt) based on further observations [David Haywood].
       - 0.195: 'Dead or Alive' protection was actually good this way, mangled 3D is caused by comms or core bugs (machine\315-5838_317-0229_comp.cpp) [Angelo Salese].
       - 0.171: Evidence suggests there aren't 2 channels for 315-5838 / 317-0229 [David Haywood].
       - 0.158: Added machine\315-5838_317-0229_comp.c/h. Moved Decathlete protection in a device, moved the Dead or Alive protection sim there too, added devices to driver (preparation for refactoring, they're the same device, just underused by Dead or Alive). Start using callbacks for Decathlete style decompression (start of refactoring). Refactored Decathlete protection a bit, hook up 'doa' to the table uploads for it too [David Haywood].
       - DRIVERS: model2.cpp and stv.cpp
       - SOURCE: machine\315-5838_317-0229_comp.cpp

       315-5881
       - 0.278: Cursory cleanups [Angelo Salese].
       - 0.222: READ/WRITE macros removal (machine\315-5881_crypt.cpp) [Osso].
       - 0.196: Standardized protection accessors for Model 2/3 315-5881 device [Angelo Salese].
       - 0.178: Simplify logic and updated comment [David Haywood].
       - 0.159: Updates to 315-5881 encryption based on Daytona USA 2 Power Edition's analysis [Andreas Naive].
       - 0.158: Updates to SEGA's 315-5881 encryption based on new findings from Virtua Striker 2 '98 (Model3). Two new key bits for SEGA's 315-5881 encryption (machine\315-5881_crypt.c). Key scheduling simplifications. Partial reverse enginnering of the use of security PIC labels within 315-5881 keys [Andreas Naive]. Some changes to the 315-5881 to allow basic multiple stream support, Astra SuperStars needs this - we were ignoring a size value in the header, when the 'size' is reached the stream ends, and a new header needs to be read. I need to review the changes w/regards the NAOMI code later (don't have the material to test here) also this will need looking at w/regards compressed streams, as they can be mixed. The data decrypted from astrass is now a 100% match for the data that was extracted from the Saturn version. Let's maintain the '315-5881- keys in 'machine\315-5881_helper.c' until the key format is finalized as things stand the entire set of keys is of arbitrary bit order / poliarity / number of bits and just based on how our implementation works, storing them in files just means a lot of files have to be regenerated each time our understanding changes. I've left placeholder ROM_LOADs (with invalid crc/sha1s, compiled out) for placing the keys back once the format IS final. The list in 315-5881_helper.c needs updating / syncing with current knowledge, would appreciate somebody doing this. I'm going to see if I can see where / how the chip hooks up on Model 2 and Model 3, and if we can pass those checks with our current code. Fixed decompression case for Tecmo World Cup '98 title screen (machine\315-5881_crypt.c). Prepare Model2 for 315-5881 [David Haywood]. Added 315-5881 labels & sort [MetalliC].
       - 22nd January 2015: David Haywood - If you've been following recent news / various GIT commits then you might have noticed that we recent connected the dots between the encryption/compression schemes used on Naomi carts and those used on other Sega systems (ST-V, Model 2, Model 3) etc. In many cases these were used as a simple protection (especially on Model 2 / 3 and Radiant Silvergun in STV) just writing some values, reading them back and comparing them against a string in the code (which is very easy to bypass) but the reality is that there is a chip performing rather complex decompression and decryption operations on the data written in order to get that result, and in some cases it was actually used properly! It was discovered by ANY and others that many of these boards used a 315-5881 chip, we'd long suspected it could be the same scheme, but had never actually managed to make a firm connection. Software to extract data for analysis from a Naomi board already exists, and it turned out that by transplanting one of the chips from an ST-V cartridge onto a Naomi board we could use the existing extraction code and obtain a key thus confirming the chips were exactly the same thing just programmed with different keys. The encryption implementation, as it turned out, was missing some important details, features that none of the Naomi games really used (multiple encrypted/compressed blocks in a stream with mid-stream headers, non-power of 2 sizes for compressed data etc.) furthermore our encryption implementation was incomplete, so Andreas needed to further study the data and fill in some gaps. I poked around with the multiple block side of things a little, and eventually we've ended up with this previously both these graphics (the Tecmo logo and entire title screen) were displayed as garbage because they're both compressed and encrypted. I do wonder if there aren't still some flaws (the Tecmo logo looks rather rough) but it could be right (see next statement), and the title screen definitely looks fine. An interesting fact is that the game also checks a few values in the decompressed Tecmo logo and if they don't match the expected return values then the game breaks in various ways, for example the ball / player movement. If you're curious, the Tecmo logo is a single compressed stream with one block of compressed data. The title screen is a single stream with 4 blocks of compressed data (one for each quarter of the screen). Performance still isn't great here (it's a high resolution ST-V game, and our video rendering code is slow). Astra Super Stars also benefited from this, previously we were handling the HUD layer by loading the HUD data from the Sega Saturn version as a fake 'ROM' file in the romset, with the decryption hooked up I was able to remove the fake rom, the resultant data from the decryption process is identical so there's no visible change, just the knowledge that we're no longer depending on data that wasn't on the PCB. Astra Superstars was a bit of odd one really, for some reason the chip marked '315-5881 317-5040-COM' was actually used by 3 games (the other 2 being 'Shin Nihon Pro Wrestling Toukon Retsuden 4 Arcade Edition' and 'World Kicks') meaning we already had a key from the previous work on Naomi. Note, while this will help a number of ST-V games once we get the correct keys it WILL NOT help Decathlete because Decathlete uses an entirely different chip. My next plan is to hook this up to Model 2 / Model 3 in MAME, it won't really improve the MAME driver, but if we can extract / brute force an encryption key for Dirt Devils it should allow the SuperModel devs to fix the 2D layer (see here) if they decide to update the emulator again.
       - 0.156: Added machine\315-5881_crypt.c/h. Moved 315-5881 based encryption to it's own file, allowing me to experiment with the device for the encrypted ST-V games [David Haywood].
       - DRIVERS: hikaru.cpp, model3.cpp, naomi.cpp and stv.cpp
       - SOURCE: machine\315-5881_crypt.cpp

       315-6154
       - 0.279: Handle statuses and IRQ callback. Updated docs (sega\315-6154.cpp) [MetalliC].
       - 0.222: READ/WRITE macros removal (machine\315-6154.cpp) [Osso].
       - 0.219: Converted 315-6154 device into a real PCI host. And updated DIMM Board accordingly [Samuele Zannoli].
       - 0.218: Added machine\315-6154.cpp/h. Added a new device for the 315-6154 system manager chip used in the DIMM Board. It is still incomplete but can be used [yz70s].
       - NOTES: Sega 315-6154 Northbridge
       - DRIVERS: chihiro.cpp, hikaru.cpp, naomi.cpp and triforce.cpp
       - SOURCE: machine\315-6154.cpp


       317-0229
       - 0.243: Fixed Coverity software buffer overflow (machine\315-5838_317-0229_comp.h) [Robbbert].
       - 0.222: Misc demacroization [Osso].
       - 0.171: Evidence suggests there aren't 2 channels for 315-5838 / 317-0229 [David Haywood].
       - 0.158: Added machine\315-5838_317-0229_comp.c/h. Moved Decathlete protection in a device, moved the Dead or Alive protection sim there too, added devices to driver (preparation for refactoring, they're the same device, just underused by Dead or Alive). Start using callbacks for Decathlete style decompression (start of refactoring). Refactored Decathlete protection a bit, hook up 'doa' to the table uploads for it too [David Haywood].
       - DRIVERS: model2.cpp and model2.cpp
       - SOURCE: machine\315-5838_317-0229_comp.cpp


       317-5000
       - 0.138u3: Nicola Salmoria added support for Sega 317-5000 decryption (same as 315-5177). Reorganised decryption code.

G1.29  Seta

       X1-001A   Sprites Generators   (SDIP64)
       X1-002A   Sprites Generators   (SDIP64)
       X1-001    (also has written YM3906) Sampleplayer?         Extermination, Thundercade
       X1-002    (also has written YM3909)                       Extermination, Thundercade
       X1-003    Video blanking (feeds RGB DACs) (SDIP42)
       X1-004    Input related functions - connected to joystick/input controls (SDIP52)
       X2-005    X0-005 - NVRAM/simple protection (DIP48)
       X1-006    X0-006 (65c02) Palette (SDIP64)
       X1-007    Video DAC? - connected to RGB output (SDIP42)
       X1-009    NVRAM/simple protection (DIP48)
       X1-010    Sound Chip, 16Bit PCM    (QFP80)
       X1-011    Graphics mixing
       X1-012    Tilemaps Generators (QFP100)
       X1-014    Sprites?


       ST-0004    Video DAC                                        Drifto94, EagleShotGolf, Srmp4, Survarts, Vasara2
       ST-0005    Parallel I/O                                     Drifto94, EagleShotGolf, Srmp4, Survarts, Vasara2
       ST-0006    Video controller                                 Drifto94, EagleShotGolf, Srmp4, Survarts, Vasara2
       ST-0007    System controller                                Drifto94, EagleShotGolf, Srmp4, Survarts, Vasara2
       ST-0009    Generate tilemaps               (QFP176)         Gdfs
       ST-0015    60EN502F12   System controller  (QFP208)         SuperEagleShot
       ST-0016    Z80, gfx & sound (all in one)   (QFP208)         SuperEagleShot, Mayjinsen
       ST-0017                                                     Srmp6
       ST-0020    Generate zooming sprites  (QFP304 - heaksinked)  Gdfs
       ST-0026    NiLe (video + sound)                             Srmp6
       ST-0035                                                     Mtetris
       ST-0039                                                     Mtetris
       ST-0042                                                     11beat, Mtetris
       ST-0043                                                     11beat
       ST-0045                                                     Mtetris


       WIP:

       Seta X1-001 Sprites
       - 0.246: Changed description to 'Seta X1-001 Sprites'. Seta X1-001 sprite device cleanup. Use 16-bit pointer for sprite RAM storage (despite some systems only having 8-bit CPUs). Renamed device and move to src\devices. Clean up variable naming in associated drivers [AJR].
       - 0.245: Use Seta SETA001 device for Hanaroku sprites [AJR].
       - 0.227: Moved gfxdecode down into device. Added putative master clocks (video\seta001.cpp) [AJR].
       - 0.221: Simplified some handlers (video\seta001.cpp) [Osso].
       - 0.202: Removed a sprite drawing kludge [David Haywood].
       - 0.200: Converted arrays into std::unique_ptr. Minor cleanups [cam900].
       - 0.186: Changed description to 'Seta SETA001 Sprites'.
       - 0.160: Moved from old style callback to delegate (video\seta001.c) [Osso].
       - 0.154: Fixed doraemon (champbwl.c) save state problem (actually video\seta001.c save states weren't complete) [Osso]. Make data members private, distinguish per-driver configuration from runtime state and only state save the latter [Alex Jackson].
       - 0.149u1: Modernizing the SETA001 device (X1-001A and X1-002A) [Osso].
       - 0.146u5: ST0020 (seta blitter + zooming sprites) is now a device [David Haywood].
       - 0.144u7: Flush ram with $FF (video\seta001.c) [David Haywood].
       - 0.142u3: Added video\seta001.c/h. Added 'Seta SETA001 Sprite' device (video\seta001.c). Started unifying sprite implementations for setax001/x002 chips [David Haywood].
       - NOTES: Seta sprite chips. These always seem to be used as a pair, some board have been seen without the 'A', so it's probably a chip revision / bugfix.
       - DRIVERS: cchance.cpp, champbwl.cpp, seta.cpp, srmp2.cpp, taito_x.cpp, thedealr.cpp and tnzs.cpp
       - SOURCE: video\x1_001.cpp


       Seta X1-012 Tile Layer
       - 0.251: Restrict partial updates in the Seta X1-012 tilemap chip to Caliber 50, it breaks too many other places due to unmasking some bad timing problems in the drivers. This fixed corrupt graphics in Zombie Raid [David Haywood].
       - 0.250: Force a partial update for tilemaps whenever the scroll registers change (seta\x1_012.cpp) - needed for a crude raster effect when entering underground areas on Caliber 50 [David Haywood].
       - 0.227: Added video\x1_012.cpp/h. Added 'Seta X1-012 Tile Layer' device. Separated emulation of tile layers as new device (video\seta.cpp). Moved gfxdecode down into device. Fixed insidious variable type mistake that caused tilemap regressions (video\x1_012.h) [AJR].
       - DRIVERS: seta.cpp
       - SOURCE: seta\x1_012.cpp


       Seta ST0020 Sprites
       - 0.282: Made ST0020 and ST0032 separate devices. Use util::sext for sign extension. Suppress side effects for debugger reads, use logmacro.h for configurable logging (seta\st0020.cpp) [cam900].
       - 0.204: Reduced code duplication. Use device finder. Cleanup tilemap mapping. Removed MCFG macros (video\st0020.cpp) [cam900].
       - 0.186: Seta ST-0020 update: Added 4 tilemaps. Added switchable resolution. ST-0032 video on par with ST-0020. Updated SSV driver to new ST-0020 [Luca Elia].
       - 0.146u5: Added video\st0020.c/h. Added 'Seta ST0020 Sprites' device. ST0020 (Seta blitter + zooming sprites) is now a device. Allow both jclub2 (st-0032) and jclub2o (st-0020) to show their error messages [David Haywood].
       - NOTES: 'Seta ST0020 Sprites' device
       - DRIVERS: jclub2.cpp and ssv.cpp
       - SOURCE: seta\st0020.cpp

       Seta ST0032 Sprites
       - 0.282: Made ST0020 and ST0032 separate devices. Use util::sext for sign extension. Suppress side effects for debugger reads, use logmacro.h for configurable logging (seta\st0020.cpp) [cam900].
       - DRIVERS: jclub2.cpp
       - SOURCE: seta\st0020.cpp



G1.30  SNK

       SNK-CK 22A078801 CLK                                            Ikari3, Tnexspce
       SNK-CG 22A078802 CGO                                            Mechatt
       SNK    22A078803 IO                                             Ikari3, Tnexspce
       SNK NEO-CMC 90G06CF7042 JAPAN 9926EAI D0358AAA (QFP240)         Kof99


       NEO-G0          QFP64
       NEO-E0          QFP64
       PRO-B0          QFP136
       LSPC-A0         QFP160
       PRO-C0          QFP136
       NEO-F0          QFP64
       NEO-D0          QFP64
       NEO-ZMC2        QFP80
       NEO-I0          QFP64



       Alpha Denshi Palette

       - 0.221: Simplified handlers (video\alpha68k_palette.cpp) [Osso].
       - 0.215: Added video\alpha68k_palette.cpp/h. Added 'Alpha Denshi Palette device' device (video\snk68_spr.cpp) [Angelo Salese]. Converted alpha68k.cpp and snk68.cpp to a common palette device and decoded it with NeoGeo specs, causing more accurate colors especially visible on dithered backgrounds [Angelo Salese].
       DRIVERS: alpha68k.cpp and snk68.cpp
       SOURCE: video\alpha68k_palette.cpp


       SNK68 Sprites
       - 0.281: Added flipscreen variable to savestates (other vars are configuration) (shared\snk68_spr.cpp) [hap].
       - 0.215: Converted alpha68k.cpp to snk68 sprite chip [Angelo Salese].
       - 0.209: Bool'd flipscreen value (video\snk68_spr.cpp) [cam900].
       - 0.172: Added video\snk68_spr.cpp/h. Added 'SNK68 Sprites' device (video\snk68_spr.cpp). Black Touch '96 hardware is a Korean clone of 'SNK68' hardware so start to refactor, and share code [David Haywood].
       DRIVERS: alpha68k.cpp, blackt96.cpp and snk68.cpp
       SOURCE: video\snk68_spr.cpp



G1.31  SONY

       CXD1095Q                                      (QFP64)           MegaPlay System, SuperMonacoGP
       CXD2922CQ   SPU                               (QFP100)          RivalSchools, StreetFighterEX, BattleArenaToshinden2
       CXD2923AR   SPU                                                 Cryptkiller, NamcoSystem11 Board
       CXD2925Q    SPU
       CXD2938Q    SPU                               (QFP208)          MrDriller2
       CXD8514Q    GPU
       CXD8530BQ, CXD8530CQ   CPU                    (QFP208)          Cryptklr, KonamiGV, NamcoSystem11, Ts2, RivalSchools, StreetFighterEX, BattleArenaToshinden2
       CXD8538Q    GPU                                                 CryptKiller
       CXD8561Q, CXD8561BQ, CXD8561CQ    GPU         (QFP208)          RivalSchools, StreetFighterEX, BattleArenaToshinden2, MrDriller2
       CXD8606BQ, CXD8606CQ   CPU / GTE              (QFP208)          MrDriller2, Gamshara
       CXD8654Q    GPU                                                 Paca Paca Passion Special, TekkenTagTournament
       CXD8661R    CPU    L9A0088 WE19960 NNM 9738                     Paca Paca Passion Special, TekkenTagTournament


       CXD1095
       - 0.220: Simplified handler signatures and use shorter type name [AJR].
       - 0.215: Default clock to 0 [AJR].
       - 0.201: Removed CXD1095 MCFG macros (machine\cxd1095.h) [Ryan Holtz].
       - 0.187: Use CXD1095 device for I/O in (MESS) SONY PVE-500 [AJR].
       - 0.185: Added machine\cxd1095.cpp/h. Rewrote CXD1095 as a device and added it to segaxbd.cpp and megatech.cpp. Implement reset behavior. Read inputs through CXD1095 device in cyclwarr and bigfight. Use CXD1095 device for megaplay.cpp BIOS I/O [AJR].
       NOTES: Sony CXD1095 I/O Expander
       DRIVERS: megaplay.cpp, megaplay.cpp, model2.cpp, segas16a.cpp, segas16b.cpp, segas32.cpp, segaxbd.cpp and tatsumi.cpp
       SOURCE: machine\cxd1095.cpp


G1.32  Subsino

       SUBSINO 9623EX008                              QFP208           Lastfght
       SS9100                                         QFP44            Super Moto (Subsino 1996)
       SS9101                                         DIP42            Super Moto (Subsino 1996)
       SS9601                                                          Bishjan
       SS9689 6433044A22F Hitachi H8/3044             QFP100           Lastfght
       SS9802 9933                                    QFP100           Lastfght, Bishjan
       SS9803                                                          Bishjan
       SS9804 0001                                    QFP100           Lastfght
       SS9904                                                          Bishjan


G1.33  Taito


       Taito Custom Chips I:

       PC010SA     Custom Ceramic IC SIP14       PCB: Tokio
       PC030CM     Custom Ceramic IC SIP20       PCB: Bublbobl, Tokio   SOURCE: The coin inputs are handled by the PC030. It would be responsible of handling the coin counters.
       PC040DA     Video DAC         SIP19       PCB: Tokio             SOURCE: rastan.cpp
       PC050CM     Coin I/O                      SOURCE: drivers\rastan.cpp
       PC060HA     Main/Sub CPU communication    PCB: Eto, Opwolf, Rastan, Viofight, Volfied
       PC080SN     Tilemap generator             SOURCE: taitoic.h   PCB: Darius, Opwolf, Topspeed  NOTES: Darius uses 3 x PC080SN for generating tilemaps. They must be mapped somehow to a single memory block and set of scroll registers. There is an additional text tilemap on top of this, to allow for both background planes scrolling.
       PC090OJ     Sprite generator              WIP: 14th February 2002: David Graves consolidate the emulation of the Taito sprite chip PC090OJ.



       Taito Custom Chips II:

           -        TC0100SCN    TC0200OBJ    TC0300FLA    TC0400YSC        -
       TC0010VCU    TC0110PCR    TC0210FBC    TC0310FAM        -        TC0510NIO
       TC0020VAR    TC0120SHT    TC0220IOC    TC0320OBR        -        TC0520TBC
       TC0030CMD    TC0130LNB        -            -            -        TC0530SYC
       TC0040IOC    TC0140SYT        -        TC0340BEX        -        TC0540OBN
       TC0050VDZ    TC0150ROD        -            -            -            -
       TC0060DCA    TC0160ROM    TC0260DAR    TC0360PRI        -            -
       TC0070RGB    TC0170ABT    TC0270MOD    TC0370MSO    TC0470LIN    TC0570SPC
       TC0080VCO    TC0180VCU        -        TC0380BSH    TC0480SCP    TC0580PIV
       TC0090LVC    TC0190FMC        -        TC0390LHC        -        TC0590PIV


           -            -            -
           -            -            -
       TC0620SCC        -            -
       TC0630FDP        -            -
       TC0640FIO        -        TC0840GLU
       TC0650FDA        -            -
       TC0660FCM        -            -
           -        TC0770CMU    TC0870HVP
           -        TC0780FPA        -
           -            -            -



       TC0020VAR                  Sprites?
       TC0030CMD                  C-Chip protection
       TC0050VDZ                  Sprites?
       TC0070RGB     28 pin       Palette/Video DAC
       TC0080VCO                  Tilemaps   (Combined tilemap and motion object generator)
       TC0090LVC                  C-Chip protection (Z80)
       TC0100SCN     QFP160       GFX (row and column)
       TC0110PCR     100 pin      Palette
       TC0140SYT                  Sound communication. Main/Sub CPU interface + Sub CPU address decoder and I/O interface.
       TC0150ROD                  GFX - Road generator
       TC0190FMC                  Input      (4 players input?sprite banking?)
       TC0220IOC                  I/O interface
       TC0260DAR     QFP100       Palette
       TC0280GRD                  ROZ
       TC0310FAM                  Sound volume and panning
       TC0320OBR                  Sprites
       TC0360PRI     QFP100       Priority
       TC0430GRW                  ROZ
       TC0480SCP                  GFX (row and column)
       TC0510NIO                  I/O
       TC0520TBC     QFP100       Sprites
       TC0530SYC     QFP160       Sound communication
       TC0540OBN     QFP160       Sprites
       TC0590PIV                  Tilemaps  (Undrfire)
       TC0620SCC                  Lightgun ??? pivot port ???   (Undrfire)
       TC0630FDP     QFP208       Playfield generator?  (Nearest tile roms)
       TC0640FIO     QFP120       I/O & watchdog?
       TC0650FDA     QFP100       Priority mixer?  (Near paletteram & video output)
       TC0660FCM     QFP160       Sprites? (Nearest sprite roms)
       TC0770CMU     QFP208       Math co-processor?
       TC0780FPA     QFP240       Polygon/Texture renderer
       TC0840GLU     QFP144       2D graphics? (Landgear, Sidebs/2)
       TC0870HVP     QFP208       Vertex processor?



       WIP:
       - 0.210              : Updated video\taito_helper.cpp: Allow masked priority behavior. Use correct/shorter type values. Updated machine\taitoio.cpp: Simplified handlers. Fixed debugger issue. Reduced unnecessary lines. Use shorter/correct type values [cam900].
       - 0.153              : Removed video\taitoic.h. Converted machine\taitoio.c to DEVCB2 [Osso].
       - 0.149u1            : Removed video\taitoic.c. Added video\taito_helper.c/h. Modernization of the remainder of taitoic. Split up the video devices contained in taitoic.c [Osso].
       - 0.149              : Modernized Taito I/O devices (machine\taitoio.c/h, drivers\asuka.c, ninjaw.c, othunder.c, slapshot.c, taito_b.c, taito_f2.c, taito_h.c, taito_z.c, taitoair.c, taitojc.c, topspeed.c, warriorb.c and wgp.c) [Osso].
       - 0.148u4            : Taito devices lookup cleanup (drivers\asuka.c, darius.c, lockon.c, ninjaw.c, opwolf.c, othunder.c, rainbow.c, rastan.c, slapshot.c, taito_b.c, taito_f2.c, taito_h.c, taito_o.c, taito_z.c, taitoair.c, topspeed.c, volfied.c, warriorb.c, wgp.c, xexex.c and video\taitoic.h) [Miodrag Milanovic]. Fixed build (includes\taito_h.h: video\taitoic.h -> machine\taitoio.h) [smf].
       - 0.147              : Miodrag Milanovic fixed compile (video\taitoic.c).
       - 0.136              : Added machine\taitoio.c/h. Fabio Priuli converted all Taito custom I/O and video ICs to devices and updated all drivers to use them.
       - 0.128u6            : Atari Ace fixed the widely used taitoic video core to no longer reference the global Machine.
       - 0.123u4            : Zsolt Vasvari fixed Taito Custom ICs (taitoic) regression that caused crashes in several games.
       - 0.37b5             : Added vidhrdw\taitoic.c/h.
       - SOURCE: machine\taitoio.cpp and video\taito_helper.cpp


       PC060HA
       - 0.262              : Use callbacks for interrupt and reset outputs. Also suppress read side effects for debugger accesses (shared\taitosnd.cpp) [cam900].
       - 0.191              : Draw a nominal distinction between PC060HA and TC0140SYT [AJR].
       - 0.150              : Improved PC060HA NMI handling, preventing lost interrupts (audio\taitosnd.c) [Phil Bennett].
       - DRIVERS: mlanding.cpp, opwolf.cpp, rbisland.cpp, taito_b.cpp, topspeed.cpp, volfied.cpp
       - SOURCE: audio\taitosnd.cpp


       PC080SN
       - 0.262              : Use device_gfx_interface to decode graphics. Also cleaned up redundant code [cam900].
       - 0.246              : Changed sourcefile to taito\pc080sn.cpp/h.
       - 0.210              : Allow masked priority behavior. Use shorter/correct type values. Fixed spacing [cam900].
       - 0.202              : Eliminated register_postload [AJR].
       - 0.166              : Removed unneeded drawgfxm.h include (video\pc080sn.c) [Luca Elia].
       - 0.160              : Initialized some variables in PC080SN, attempt at fixing jumping regression [Osso].
       - 0.158              : Removed dead code (video\pc080sn.c) [Alex Jackson].
       - 0.154              : Updated PC080SN to use inline configs [Fabio Priuli].
       - 0.149u1            : Added video\pc080sn.c/h. Added Modernized Taito PC080SN video device (drivers\darius.c, opwolf.c, rainbow.c, rastan.c, topspeed.c and video\taitoic.c/h). Split up the video devices contained in taitoic.c [Osso].
       - DRIVERS: darius.cpp, opwolf.cpp, rastan.cpp, rbisland.cpp and topspeed.cpp
       - SOURCE: video\pc080sn.cpp


       PC090OJ
       - 0.211              : Internalized gfxdecode. Use callback for color bank/priority behavior. Reduced defines and unnecessary lines. Simplified handlers. Use shorter/correct type values [cam900].
       - 0.210              : Fixed validation by (partially) adopting device_gfx_interface [AJR].
       - 0.166              : Removed unneeded drawgfxm.h include (video\pc090oj.c) [Luca Elia].
       - 0.154              : Updated PC090OJ to use inline configs [Fabio Priuli].
       - 0.149u1            : Added video\pc090oj.c/h. Modernized Taito PC090OJ video device (drivers\asuka.c, opwolf.c, rainbow.c, rastan.c, volfied.c and video\taitoic.c). Split up the video devices contained in taitoic.c [Osso].
       - DRIVERS: asuka.cpp, opwolf.cpp, rastan.cpp, rbisland.cpp, volfied.cpp
       - SOURCE: video\pc090oj.cpp


       TC0030CMD (C-Chip)
       - 0.275              : Removed bankdev.h usage [cam900].
       - 0.253              : Got rid of bankdev (taito\taitocchip.cpp) [Vas Crabb].
       - 0.224              : Fixed analog input values [AJR].
       - 0.221              : Fixed typo in taito_cchip_device (upd7811->upd78c11) [AJR].
       - 0.201              : Added C-Chip ROM to Operation Wolf, credit to CAPS0ff for dumping it. Old C-Chip simulation is retained for documentation purposes [Bryan McPhail].
       - 0.200              : Removed MCFG macros [Vas Crabb].
       - 31st October   2017: David Haywood - The C-chip has 2 parts as there are multiple parts inside the package, a UPD78C11 with internal rom, an ASIC and an EPROM. The 78C11 rom was dumped visually by decapping and the internal code heavily analysed (that's how we had some clues to attempt other failed exploits) this is likely the same between games. The EPROM, containing game specific code has never been fully dumped, we have half a dump from Operation Wolf done by trying to wire up the die directly, but complications meant we were never able to obtain a full dump. For overview of how each game uses the protection: B20 (Operation Wolf 1987): Uses it for a lot of game critical things, recently the simulation was improved (after 15+ years of being entirely incorrect) based on a prototype version that showed up. There could still be secrets the C-chip holds tho, so a real dump would help. B22 (Rainbow Islands / EX 1987): Simulation was written by somebody who had extensively studied the games (both uses different C-Chips with different internal data) should in theory be mostly correct, but there are some doubts over how some of the random number generation works, which, if you're serious about the game will actually matter, so a real dump will help. B41 (Bonze Adventure / Jigoku Meguri 1988): Simulation has never been 100%, restart points are incorrect, sometimes the game will crash. Some of the alt MAME builds have different hacks to work around this, but in all honesty none are correct, emulation definitely won't be correct without a real dump. B61 (Superman 1988): C-Chip just seems to supply a chunk of 68k code, very lazy, while the actual 68k code has never been verified against a PCB it's function is very simple, so while a real dump would be good for the sake of completeness, the emulation probably isn't 'incorrect' right now with the simulation code. C04 (Volfied 1989): C-chip seems to manage some game counters / timers that aren't accurately emulated, some commands are basically just ignored right now. Exactly how this impacts the gameplay is unknown, but it's almost guaranteed that current simulation isn't accurate and game isn't playing exactly right. C11 (Mega Blast 1989): C-chip could easily have a blank internal EPROM, game code only ever checks that the C-Chip exists via the initial startup check that is handled entirely by the MCU part of the chip, it doesn't even matter if the chip crashes after that, the game never checks anything beyond startup, very, very lazy on the part of Taito. It will be interesting to see if anything exists in the EPROM, maybe code they never used. Alternatively they might have just recycled old C-Chips on this game, not bothering to reprogram them because the game never triggers any commands. Overall, if we can work how to read the roms from some of these games, which are becoming increasingly uncommon, it will greatly benefit their emulation. even in cases where the emulation is probably ok with the current simulation code we might be able to find some interesting secrets in the undumped part of the rom that could tell us more about the development of the games and their protection.
       - 30th October   2017: CAPS0ff - Looking inside Taito C-Chip: Among the samples received are some TAITO TC0030CMD "C-CHIP" integrated circuits. Although generally little is known about this, a previous decap revealed its a multi-chip module (MCM). Given these are relatively scarce, we started by analyzing an x-ray someone took. The package is filled with all kinds of goodies attached to an etched substrate! This lines up with the previous decap, but also shows the missing bit. Unfortunately, the above sample is missing the MCU section, which is critical for our analysis. After some discussion we decided we need to decap one ourselves to better understand the surrounding circuitry. Preparing for decap. This was then filled with a relatively large pool of fuming nitric acid, heated and rinsed, until the substrate was revealed. And we have a full decap: A NEC uPD4464A SRAM, NEC D27C64 EPROM, NEC 65012-229 ASIC and an uPD78C11 MCU. We then imaged the MCU ROM to allow analyzing the boot ROM firmware for test modes. UPD78C11 mask ROM analysis: The primary aim of analyzing the boot ROM is to find test modes that allow reading out the EPROM. Such methods might include: Find a test mode to directly read out EPROM. Find a way to load code into MCU to have it dump ROM ("trojan"). Repeatedly compute checksums and write bits, seeing if checksum changes. Analyze protection mechanisms, such as those that might require glitching. With that in mind, lets take a look. Here is some early boot code: http://caps0ff.blogspot.de/2017/10/looking-inside-taito-c-chip.html
       - 0.188              : Added machine\taitocchip.cpp/h. Removed machine\cchip.cpp/h. Created C-Chip device with correct CPU type in it and a bunch of notes (pinout etc.). Added missing NO_DUMP definitions to various games using C-Chips with correct size etc. Pump Mega Blast through the device code as really all it ever does is bank the C-Chip window and test the RAM. Load CAPS0ff C-Chip dumps for Operation Wolf and clones, checksum on MASK rom part passes, but game specific EPROM is still bad for the time being. Added small note about what's wrong with the C-Chip EPROM dump [David Haywood]. Put C-Chip stuff in Type X driver [Vas Crabb]. Hooked up the four 'asic ram' shared bytes/semaphores/command registers between external cpu and the C-Chip and got rid of the 'return 0x01' hack for Mega Blast [Lord Nightmare].
       - 0.176              : Fixed all the Operation Wolf gameplay problems by improving the C-Chip protection simulation. Gameplay should be a true 100% match to original now. Put extensive notes in the machine file about what has changed: Fixed bug in 68K->C-Chip simulation that could lead to level 2 boss not appearing after first run [Bryan McPhail].
       - 0.174              : Added machine\cchip.h. Allow separate Taito X driver building. Fake header till C-Chip is converted to device [Miodrag Milanovic].
       - 0.155              : Silvio Grazini added clone Bonze Adventure (World, prototype). Note: Need to verify Z80 rom as the same (was missing from romset provided) also should check to make sure it uses C-Chip in the same way as final. Fixed rom names.
       - 0.150              : Changed includes\cchip.h to includes\taito_x.h. Moved the Superman C-Chip implementation in the driver state [Osso].
       -  2nd November  2010: Smitdogg - We got Bonze Adventure so we can decap the C-Chip.
       - 11th July 2010     : Dr. Decapitator - Work has started on the C-Chip that Taito used in games such as Bonze Adventure and Operation Wolf. You can see some photos of a C-Chip on Guru's page.
       -  6th July      2010: Guru - One of the Taito C-Chips has been decapped. This is quite an interesting chip. Inside is a Z80 CPU, an 8k DRAM (NEC D4464A) and 8k EPROM (NEC D27C64). Games that use C-Chips include Bonze Adventure, Operation Wolf, Volfied, Mega Blast and Rainbow Islands. We have all of the C-Chips from those games except Rainbow Islands (which we're still looking for).
       - 0.118u4            : Stephane Humbert slightly changed the C-Chip emulation for 'Superman' to behave in a similar way as other Taito games. Changed 'Unknown' dipswitches to 'Unused'.
       - 0.118u3            : Stephane Humbert cleaned up several Taito drivers to use common input port macros. Fixed the dipwitches for all games (a few still remain unknown though) and added many notes. Improved the C-Chip emulation for "Operation Wolf" and its clones so it can now handle multiple coinage settings.
       - 0.104u3            : Alex Jackson removed MDRV_MACHINE_INIT(cchip1) from games that don't have a C-Chip (all of them except Superman). Fixed coinage in clone (Japan). Changed 'Unknown' dipswitches to 'Unused'.
       - 0.97u1             : Bryan McPhail added proper C-Chip emulation to Operation Wolf.
       - 0.96u2             : Bryan McPhail improved C-Chip simulation in Volfied to accurate timing and correct colour data for all levels.
       - 0.59               : Robert Gallagher and Tormod Tjaberg fixed Rainbow Islands and Rainbow Islands (Extra) C-Chip emulation. Changed (set 1) to clone 'Rainbow Islands (old version)' and (set 2) to parent 'Rainbow Islands (new version)'. Renamed (rainbow) to (rainbowo) and (rainbowa) to (rainbow).
       - 14th February  2002: Robert Gallagher improved the C-Chip emulation in Rainbow Islands and Rainbow Islands Extra.
       - 0.57               : Improved C-Chip simulation in Bonze Adventure [Stefan Jokisch, Ruben Panossian].
       - 24th November  2001: Stefan Jokisch resubmitted an improvement to the C-Chip emulation for Bonze Adventure.
       -  2nd September 2001: Stefan Jokisch improved the C-Chip emulation in Bonze Adventure.
       - 0.37b16            : Stefan Jokisch added 'Volfied (Japan)' (Taito 1989). Known issues: Color information for the enemy sprites is missing (C-Chip). Some bits in video RAM are not understood. Sound seems a bit rough at times.
       -  5th June      2001: Stefan Jokisch sent in a driver for Volfied, which has incorrect sprite colors for enemy sprites due to the C-Chip protection, but the game is otherwise playable.
       - 0.37b11            : Better fixes to Rainbow C-Chip, the secret rooms now work and display the correct secret codes [Stefan Jokisch]. Changed palettesize from 2048 to 8192 colors.
       -  7th December  2000: David Graves updated the Rainbow Islands driver to work a bit better and added better C-Chip emulation done by Stefan Jokisch.
       - 0.37b10            : Stefan Jokisch improved C-Chip simulation in Rainbow Island, fixing secret rooms.
       - 27th November  2000: Stefan Jokisch submitted a fix for Rainbow Islands secret room bug caused by incomplete C-Chip simulation.
       - 0.35b12            : Mike Coates makes Rainbow Islands playable (using the C-Chip dump from Jumping).
       - 21st April     1999: Mike Coates emulated Rainbow Island's C-Chip more correctly.
       - 0.34b8             : Added machine\cchip.c.
       - 0.34b6             : Howie Cohen and Brad Oliver added Superman (Taito 1988). Note: According to Richard Bush, the C-Chip is an encrypted Z80 which communicates with the main board as a protection feature. In Superman, it's main purpose is to handle player inputs and coins and pass commands along to the sound chip. The 68k queries the C-Chip, which passes back $100 bytes of 68k code which are then executed in RAM. To get around this, we hack in our own code to communicate with the sound board, since we are familiar with the interface as it's used in Rastan and Super Space Invaders '91. TODO: Fix y-scrolling glitch (visible on part 2 of Round 1). Investigate "COIN ERROR" at end of Round 3 (Las Vegas) C-Chip. Optimize rendering. Does high score save work consistently?
       - NOTES: TC0030CMD is a custom Z80 with embedded 8K ram + 8k rom . This Controller or "Command Chip" communicates with the main board as a protection feature. In Superman, the C-Chip's main purpose is to handle player inputs and coins and pass commands along to the sound chip. In Mega Blast, the C-Chip will simply used as RAM, the game doesn't even bother to change banks.
       - PCB: Taito TC0030CMD SDIP64 (Bonze Adventure, Volfield), TC00300MD (Opwolf), TC 0030 CMD (Megab)
       - DRIVERS: asuka.cpp, opwolf.cpp, rbisland.cpp, taito_f2.cpp, taito_x.cpp and volfied.cpp
       - SOURCE: machine\taitocchip.cpp


       TC0040IOC
       - 0.187              : Made TC0040IOC its own device type and separated its functionality from TC0220IOC [AJR].
       - NOTES: Taito's first custom I/O interface TC0040IOC differs a bit from its successors, being a 64-pin DIP with an address port and a data port. Besides digital inputs, coin-related outputs and an integrated watchdog, this chip also handles steering wheel and trackball input conversion in various games (not emulated here yet).
       - DRIVERS: ninjaw.cpp, taito_b.cpp, taito_h.cpp, taito_l.cpp, taito_z.cpp and topspeed.cpp
       - SOURCE: machine\taitoio.cpp


       TC0060DCA
       - 0.276              : Make stream alloc adaptive, make chip stereo and do table lookup at write instead of at stream update. Use 2 handlers for writing volume (taito\tc0060dca.cpp) [hap].
       - 0.275              : Added taito\tc0060dca.cpp/h. Added support for Taito TC0060DCA volume control and hooked up to Operation Wolf [R. Belmont, Stephen Leary]. Updated stream before setting level [Vas Crabb].
       - 0.124u2            : Nicola Salmoria added missing TC0060DCA sound mixer to the Taito Z driver.
       - DRIVERS: opwolf.cpp
       - SOURCE: taito\tc0060dca.cpp


       TC0080VCO
       - 0.276              : Mark gfxram dirty after loadstate [hap].
       - 0.210              : Allow masked priority behavior. Use shorter/correct type values. Fixed spacing. Internalized gfxdecodes. Sprite drawing routines. Simplified handlers. Reduced unnecessary lines and unnecessary configuration values. Fixed spacings. Added notes [cam900].
       - 0.202              : Eliminated register_postload [AJR].
       - 0.193              : Removed space and mem_mask from some TC0080VCO calls [smf].
       - 0.158              : Removed dead code (video\tc0080vco.c) [Alex Jackson].
       - 0.156              : Taito device tilemap assert fixes, and clean up of obsolete stuff (video\tc0080vco.c) [Alex Jackson].
       - 0.154              : Updated TC0080VCO to use inline configs [Fabio Priuli].
       - 0.149u1            : Added video\tc0080vco.c/h. Modernized the TC0080VCO video device. Split up the video devices contained in taitoic.c [Osso].
       - DRIVERS: taito_h.cpp, taito_o.cpp and taitoair.cpp
       - SOURCE: video\tc0080vco.cpp


       TC0090LVC
       - 0.230              : Included Z80 core (machine\tc009xlvc.cpp; interrupt handler not yet ported). Converted banked video RAM handler into internal memory space [cam900].
       - 0.221              : Device-fied TC0090LVC for taito_l.cpp implementation. Use callback for tilemap offset and external bankswitching. Implemented device_reset needs for taito_l.cpp driver. Restrict bitmap and sprite drawing behavior into cliprect (machine\tc009xlvc.cpp) [cam900].
       - NOTES: Taito TC0090LVC
       - DRIVERS: taito_l.cpp
       - SOURCE: machine\tc009xlvc.cpp


       TC0091LVC
       - 0.230              : Included Z80 core (machine\tc009xlvc.cpp; interrupt handler not yet ported). Fixed opaque background used in Gemcrush [cam900].
       - 0.221              : Use callback for tilemap offset and external bankswitching. Implemented device_reset needs for taito_l.cpp driver. Restrict bitmap and sprite drawing behavior into cliprect (machine\tc009xlvc.cpp) [cam900].
       - 0.211              : Internalized on-chip functions (ROM/RAM bankswitching, GFX, IRQ vector and enables the Palette and Vregs). Use address_map_bank_device for ram banks. Use lr8 for bankswitched ROM reading. Simplified handlers. Reduced unnecessary values, lines, pointers and duplicates. Fixed spacings. Use shorter/correct type values. Added notes [cam900].
       - 0.147              : TC009xLVC modernized tilemap [Miodrag Milanovic].
       - 0.146u4            : Added machine\tc009xlvc.c/h. Ported TC0091LVC into a proper file. Hooked up TC0091LVC device to Last Bank and Fruit Dream [Angelo Salese].
       - NOTES: Taito TC0091LVC
       - DRIVERS: dfruit.cpp and lastbank.cpp
       - SOURCE: machine\tc009xlvc.cpp


       TC0100SCN
       - 0.276              : Mark gfxram dirty after loadstate [hap].
       - 0.250              : Fixed longstanding color regression (taito\tc0100scn.cpp) with World Grand Prix [Angelo Salese].
       - 0.233              : Eliminated remaining uses of auto_alloc and friends (video\tc0100scn.cpp) [Aaron Giles].
       - 0.211              : Added sync granularity function with bg gfx. Internalized gfx. Added color base for when color base is differs [cam900].
       - 0.209              : Moved Taito F2 exclusive bankswitch function into taito_f2.cpp driver. Simplifed handlers. Fixed namings. Use shorter type values. Allow masked priority behavior. Internalized text GFX. Reduced duplicates, unnecessary values and functions. Make some draw routine related to cliprect [cam900].
       - 0.202              : Eliminated register_postload [AJR].
       - 0.166              : Removed unneeded drawgfxm.h include (video\tc0100scn.c) [Luca Elia].
       - 0.162              : Fixed TC0100SCN postload, fixes Cameltry save state regression [Osso].
       - 0.158              : Removed dead code (video\tc0100scn.c) [Alex Jackson].
       - 0.156              : Taito device tilemap assert fixes, and clean up of obsolete stuff. Some documentation [Alex Jackson].
       - 0.154              : Updated TC0100SCN to use inline configs [Fabio Priuli].
       - 0.149u1            : Added video\tc0100scn.c/h. Modernized the TC0100SCN video device. Split up the video devices contained in taitoic.c [Osso]. Let's actually initialize things in TC0100SCN to 0. Having uninitialized stuff anywhere is bad. Old 'C' devices would clear everything automatically, new 'C++' ones will not, you must do it manually. This appears to help with the missing layers issue (video\taitoic.c) [David Haywood].
       - 0.125u2            : Phil Bennett fixed black pixel patches present in the TC0100SCN fg layer of Under Fire and Ground Effects.
       - 0.108u4            : Roberto Zandona fixed TC0100SCN flipscreen mode for Liquid Kids and other games using the same Taito graphics chips.
       - 0.100u4            : Bryan McPhail fixed flipscreen in TC0100, which improves Liquid Kids.
       - 0.97u5             : Nicola Salmoria fixed TC0100SCN row scroll (Thunder Fox and Warrior Blade).
       - 0.97u2             : Pierpaolo Prazzoli fixed video problems in Warrior Blade, which broke with the new TC0100SCN colscroll addition.
       - 0.97u1             : Bryan McPhail implemented column scroll in TC0100SCN chip; used on (at least) The Ninja Kids, Gun & Frontier, Growl and Galmedes.
       -  4th December  2000: David Graves added support for a third Taito TC0100SCN chip emulation.
       -  1st December  2000: David Graves updated the TC0100SCN Taito chip emulation to support extra wide tilemaps, making Darius 2, Ninja Warriors and Warrior Blade playable.
       - NOTES: Tilemap generator. Manages two background tilemaps with 8x8 tiles fetched from ROM, and one foreground text tilemap with tiles fetched from RAM. Both background layers support rowscroll and one of them additionally supports columnscroll. The three tilemaps are mixed internally (the text tilemap is always on top, the other two are selectable) and output as 15 bits of pixel data. The TC0100SCN uses 0x10000 bytes of RAM, plus an optional 0x4000 bytes to allow wider tilemaps (mainly used by multiscreen games). It can address up to 0x200000 bytes of ROM (0x10000 tiles), 16 bits at a time.
       - DRIVERS: asuka.cpp, galastrm.cpp, groundfx.cpp, ninjaw.cpp, othunder.cpp, taito_f2.cpp, taito_z.cpp, undrfire.cpp, warriorb.cpp and wgp.cpp
       - SOURCE: video\tc0100scn.cpp


       TC0110PCR
       - 0.282              : Use callback and configuration for color format and address shift. Also use logmacro.h for logging and suppress side effects for debugger reads (taito\tc0110pcr.cpp) [cam900].
       - 0.210              : Implemented device_palette_interface for internal palette. Simplified handlers. Reduced defines. Use shorter/correct type values [AJR].
       - 0.206              : Converted TC0110PCR to a device and cleaned up code. Converted Galactic Storm to TC0110PCR [cam900].
       - 0.202              : Eliminated register_postload [AJR].
       - 0.199              : Added customized MCFG_DEVICE_ADD macros to video\tc0110pcr.h [Ryan Holtz].
       - 0.166              : Removed unneeded drawgfxm.h include (video\tc0110pcr.c) [Luca Elia].
       - 0.162              : Enabled save state support in Ninjaw driver (drivers\ninjaw.c, video\tc0110pcr.c) [Osso].
       - 0.149u1            : Added video\tc0110pcr.c/h. Split up the video devices contained in taitoic.c [Osso].
       - DRIVERS: asuka.cpp, ninjaw.cpp, othunder.cpp, taito_f2.cpp, taito_z.cpp, warriorb.cpp
       - SOURCE: video\tc0110pcr.cpp


       TC0130LNB
       - NOTES: TC0130LNB (Graphics Data and palette addressing related)

       TC0140SYT
       - 0.262              : Use callbacks for interrupt and reset outputs. Also suppress read side effects for debugger accesses (shared\taitosnd.cpp) [cam900].
       - 0.191              : Draw a nominal distinction between PC060HA and TC0140SYT [AJR].
       - 0.154              : Updated TC0140SYT to use inline configs. I have also removed the device from bshark, spacegun, puzznic and a few more given that the previous code was setting as master and slave CPUs some non-existing ones [Fabio Priuli].
       - 0.150              : Improved TC0140SYT NMI handling, preventing lost interrupts (audio\taitosnd.c) [Phil Bennett].
       - DRIVERS: asuka.cpp, darius.cpp, exzisus.cpp, mlanding.cpp, ninjaw.cpp, opwolf.cpp, othunder.cpp, rastan.cpp, rbisland.cpp, slapshot.cpp, taito_b.cpp, taito_f2.cpp, taito_h.cpp, taito_l.cpp, taito_x.cpp, taito_z.cpp, taitoair.cpp, topspeed.cpp, volfied.cpp, warriorb.cpp, wgp.cpp, zn.cpp
       - SOURCE: audio\taitosnd.cpp


       TC0150ROD
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.210              : Allow masked priority behavior. Use shorter/correct type values. Fixed spacing [cam900].
       - 0.166              : Removed unneeded drawgfxm.h include (video\tc0150rod.c) [Luca Elia].
       - 0.155              : TC0150ROD cleanups, no functional change expected [Osso, hap].
       - 0.154              : Updated TC0150ROD to use inline configs [Fabio Priuli].
       - 0.149u1            : Added video\tc0150rod.c/h. Split up the video devices contained in taitoic.c [Osso].
       -  2nd September 2001: David Graves added preliminary support for the Taito TC0150ROD road graphics chip used in the Taito Z games, and he also optimized the sprite drawing in Top Speed.
       - DRIVERS: taito_z.cpp
       - SOURCE: video\tc0150rod.cpp


       TC0160ROM
       - NOTES: TC0160ROM (Graphics ROM addressing related)

       TC0180VCU
       - 0.275              : Changed from 12-bit to 15-bit palette format. Allocate bitmap storage on start but not the bitmap itself and reduced literal tags (taito\tc0180vcu.cpp) [cam900].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.202              : One less callback to configure (MCFG_SCREEN_VBLANK_CALLBACK) [AJR].
       - 0.200              : Identified TC0180VCU as source of interrupts and change these into callbacks. The interval between the two has been changed (no longer being an arbitrary multiple of the CPU clock), but the timing is still more or less guesswork [AJR]. Moved TC0180VCU functions from drivers\taito_b.cpp into video\tc0180vcu.cpp. Convert some arrays into required_shared_ptr. Internalized gfxdecode. Added notes [cam900].
       - 0.166              : Removed unneeded drawgfxm.h include (video\tc0180vcu.c) [Luca Elia].
       - 0.154              : Updated TC0180VCU to use inline configs [Fabio Priuli].
       - 0.149u1            : Added video\tc0180vcu.c/h. Split up the video devices contained in taitoic.c [Osso].
       - 0.147              : Added 'Taito TC0180VCU' device (video\tc0180vcu.c).
       - DRIVERS: taito_b.cpp
       - SOURCE: video\tc0180vcu.cpp


       TC0220IOC
       - 0.187              : Added port 3 write callback for TC0220IOC in othunder.cpp and taito_z.cpp [AJR].
       - 0.186              : Added custom I/O chip TC0220IOC to taito_l.cpp [AJR].
       - 0.147              : Added 'Taito TC0220IOC' device.
       - DRIVERS: asuka.cpp, ninjaw.cpp, othunder.cpp, taito_b.cpp, taito_f2.cpp, taito_h.cpp, taito_l.cpp, taito_z.cpp, taitoair.cpp, topspeed.cpp, warriorb.cpp and wgp.cpp
       - SOURCE: machine\taitoio.cpp


       TC0280GRD / TC0430GRW
       - 0.275              : Made TC0280GRW a separate device (taito\tc0280grd.cpp) [cam900].
       - 0.211              : Internalized gfxdecode. Allow masked priority [cam900].
       - 0.210              : Simplified handlers. Use shorter type values. Reduced unnecessary lines. Fixed spacings [cam900].
       - 0.186              : Changed description to 'Taito TC0280GRD / TC0430GRW'.
       - 0.166              : Removed unneeded drawgfxm.h include (video\tc0280grd.c) [Luca Elia].
       - 0.154              : Updated TC0280GRD to use inline configs. Minor cleanup [Fabio Priuli].
       - 0.149u1            : Added video\tc0280grd.c/h. Modernized TC0280GRD and TC0430GRW device. Split up the video devices contained in taitoic.c [Osso].
       - 0.147              : Added 'Taito TC0280GRD & TC0430GRW' device (video\tc0280grd.c).
       - DRIVERS: taito_f2.cpp
       - SOURCE: video\tc0280grd.cpp


       TC0360PRI
       - 0.227              : Hooked up TC0360PRI priority controller to undrfire.cpp (fixes priorities in Chase Bombers) [cam900].
       - 0.209              : Simplified handlers [cam900].
       - 0.166              : Removed unneeded drawgfxm.h include (video\tc0360pri.c) [Luca Elia].
       - 0.149u1            : Added video\tc0360pri.c/h. Modernized TC0360PRI device. Split up the video devices contained in taitoic.c [Osso].
       - 0.98u1             : Bryan McPhail fixed one of the TC360 sprite blending modes (used in Pulirula round 2 and Liquid Kids attract mode).
       - 0.89u1             : Bryan McPhail added the TC0360PRI blending modes to the games with rotation layers. This includes Pulirula & Liquid Kids. One of the blending modes is new to these games (not used in Gun Frontier) and I have no way to verify it's actually correct - someone with a working board will need to verify (Liquid Kids: Fish going in water in attract mode, Pulirula: Crystals on level 2).
       - DRIVERS: slapshot.cpp, taito_f2.cpp
       - SOURCE: video\tc0360pri.cpp


       TC0480SCP
       - 0.276              : Mark gfxram dirty after loadstate [hap].
       - 0.211              : Internalized gfxdecodes. Correct text rom behavior of bootleg boards [cam900].
       - 0.210              : Allow masked priority behavior. Use shorter/correct type values. Fixed spacing [cam900].
       - 0.209              : Fixed naming. Removed unnecessary handlers. Simplified handlers and duplicates. Use shorter type values. Internalized text GFX. Unnecessary pointers and functions. Default mem_mask values [cam900].
       - 0.202              : Eliminated register_postload [AJR].
       - 0.166              : Removed unneeded drawgfxm.h include (video\tc0480scp.c) [Luca Elia].
       - 0.157              : Fixed Racing Beat (World) save state problem (video\tc0480scp.c) [Osso]. TC0480SCP save state fix [Alex Jackson].
       - 0.156              : Fixed TC0480SCP text layer colors (see Chase Bombers). Some documentation [Alex Jackson].
       - 0.155              : Added missing save states to TC0480SCP and small cleanup, improves but doesn't totally fix Racing Beat save state [Osso].
       - 0.154              : Updated TC0480SCP to use inline configs [Fabio Priuli].
       - 0.149u1            : Added video\tc0480scp.c/h. Split up the video devices contained in taitoic.c [Osso].
       - 14th January   2001: David Graves added double width tilemap support to the TC0480SCP chip emulation and wrote a Slap Shot driver but it has incomplete sprite graphics decoding so some graphical errors remain.
       - DRIVERS: galastrm.cpp, groundfx.cpp, gunbustr.cpp, slapshot.cpp, superchs.cpp, taito_f2.cpp, taito_z.cpp, undrfire.cpp
       - SOURCE: video\tc0480scp.cpp


       TC0510NIO
       - 0.195              : Use cswidth for TC0510NIO access in spacegun. Use 8-bit handler for TC0510NIO in warriorb [AJR].
       - 0.187              : Replaced TC0220IOC with TC0510NIO (newer I/O version) in Space Gun. Added port 3 write callback for TC0510NIO in othunder.cpp and taito_z.cpp. Use TC0510NIO device for inputs in galastrm.cpp, groundfx.cpp, gunbustr.cpp and undrfire.cpp [AJR].
       - 0.186              : Added custom I/O chip TC0510NIO to taito_l.cpp [AJR].
       - 0.147              : Added 'Taito TC0510NIO' device.
       - DRIVERS: galastrm.cpp, groundfx.cpp, gunbustr.cpp, taito_b.cpp, taito_f2.cpp, taito_l.cpp, taito_f2.cpp, taito_f2.cpp and undrfire.cpp
       - SOURCE: machine\taitoio.cpp


       TC0620SCC
       - 0.211              : Added 'Taito TC0620SCC' device (video\tc0100scn.cpp). Added gfx layout for hi 2bpp data of 6bpp gfx roms. Used for all TC0620SCC tile based games [cam900].
       - 0.156              : Improved documentation (TC0620SCC is the 6bpp tilemap chip) [Alex Jackson].
       - DRIVERS: groundfx.cpp and undrfire.cpp
       - SOURCE: video\tc0100scn.cpp


       TC0630FDP
       - 0.142u1            : Angelo Salese converted Taito F3 video chip (TC0630FDP) to have a parallelism of 16-bit.
       - DRIVERS: slapshot.cp, taito_b.cpp and taitojc.cpp
       - SOURCE: machine\taitoio.cpp


       TC0640FIO
       - 0.146u3            : Hooked up TC0640FIO chip to Taito JC driver [hap].
       - DRIVERS: slapshot.cp, taito_b.cpp and taitojc.cpp
       - SOURCE: machine\taitoio.cpp


       TC0780FPA
       - 0.275              : Allocate bitmap storage on start but not the bitmaps themselves (taito\tc0780fpa.cpp) [cam900].
       - 0.235              : Fixed texture issues in Operation Tiger (video\tc0780fpa.cpp) [Ville Linde]. Improved texture wrapping [Naibo].
       - 0.222              : READ/WRITE macros removal [Osso].
       - 0.170              : Swap buffers on command 0 [Ville Linde].
       - 0.169              : Added video\tc0780fpa.cpp/h. Added 'TC0780FPA Polygon Renderer' device. Splitted Taito TC0780FPA into its own device. Double buffering + better FIFO handling. Hook up TC0780FPA to taitopjc.cpp [Ville Linde].
       - DRIVERS: taitojc.cpp and taitopjc.cpp
       - SOURCE: video\tc0780fpa.cpp


       Taito I/O Yoke

       - 0.210              : Simplified handlers. Reduced runtime tag lookups [cam900].
       - 0.189              : Added machine\taitoio_yoke.cpp/h. Wrote a new device for Taito yoke-based inputs (found in Midnight Landing and Top Landing). Added screen raw parameters, fixes pilot acknowledge sound sample timing. Mark missing Mecha rom as undumped [Angelo Salese]. Changed VSync to 54.112554 Hz.
       - DRIVERS: mlanding.cpp and taitoair.cpp
       - SOURCE: machine\taitoio_yoke.cpp





G1.34  Tecmo

       TECMO-3                                                      Spbactn, Stratof
       TECMO-4                                                      Spbactn, Stratof
       TECMO-5     MCU? clock input 6.000MHz on pin15 (SDIP64)      Riot, Spbactn, Stratof, Ginkun
       TECMO-6     or TECMO-06  YM6048       (QFP160)               Riot, Spbactn, Stratof, Ginkun
       TECMO-7     or TECMO-07  YM6621       (QFP160)               Riot
       TECMO-8                               (QFP136)               Riot
       TECMO-9     MN53030XTB                (QFP124)               Riot
       TECMO-10                              (QFP128)               Riot
       TECMO-11    MN51005XTC                (QFP64)                Riot
       TECMO-12    MN51005XTD                (QFP64)                Riot
       TECMO-??    MN50005XTA                                       Stratof
       ???         MN53007TQA    MCU on Toaplan PCB                 Vimana
       TECMO AA02-1927          (QFP160)                            Deroon, Tkdensho
       TECMO AA03-8431          (QFP208)                            Deroon, Tkdensho



       Tecmo Chained Sprites:

       - 0.262              : Use device_gfx_interface to decode graphics ROMs and callback for priority (shared\tecmo_spr.cpp) [cam900].
       - 0.246              : Changed sourcefile to shared\tecmo_spr.cpp.
       - 0.215              : Hardcode behavior based on visible width, not full screen width (video\tecmo_spr.cpp) [AJR].
       - 0.209              : Replaced gfx_element instead gfxdecode_device, reduced unused/unnecessary lines and value and fixed some value type (video\tecmo_spr.cpp) [cam900].
       - 0.154              : Added 'Tecmo Chained Sprites' device. Added Final Star Force (tecmo16.c) logic to video\tecmo_spr.c. Super Pinball Action now uses render to individual bitmaps then mix, fixes a few priority bugs, but there are a lot of uncertain cases (video\spbactn.c and tecmo_spr.c). Removed legacy code in tecmo_spr.c. Pushed the bootlegs through a common code path (video\tecmo_spr.c). Moved some tecmo sprite code around for later refactoring (drivers\tbowl.c, tecmo.c, wc90.c, video\tecmo_spr.c). wc90 sprites refactor [David Haywood].
       - 0.148u1            : Added video\tecmo_spr.c/h. Shuffle some Tecmo sprite code around ready for device conversion / attempting to unify it a bit (video\gaiden.c, galspnbl.c, spbactn.c, tbowl.c and tecmo16.c) [David Haywood].
       - DRIVERS: gaiden.cpp, galspnbl.cpp, spbactn.cpp, tbowl.cpp, tecmo.cpp, tecmo16.cpp and wc90.cpp
       - SOURCE: shared\tecmo_spr.cpp



G1.35  Technos


       TJ-001     TECHNOS  TJ-001        (QFP80)    Agress
       TJ-002                                       Shadfrce, Wwfwfest
       TJ-003                                       Wwfwfest
       TJ-004                                       Shadfrce, Wwfwfest
       TJ-005                                       Shadfrce


G1.36  Toaplan

       Toaplan-02 M70H005 7Z2001                                Truxton
       Toaplan-02 M70H005 7Y2002                                Rallybik

       L7A0498 GP9001 TOA PLAN 9044      (QFP208)               Ghox, Fixeight
       L7A0498 GP9001 TOA PLAN 9150                             Fixeight, Grind Stormer
       L7A0498 GP9001 TOA PLAN 9152                             Truxton II
       L7A0498 GP9001 TOA PLAN NNG 9217 WK94254                 Armed Police Batrider
       L7A0498 GP9001 TOA PLAN 9236                             Battle Garegga
       L7A0498 GP9001 TOA PLAN 9335                             Battle Bakraid
       L7A0498 GP9001 TOA PLAN 9240                             Mahou Daisakusen

       TOAPLAN JAMMA HK-1000 1070001     (48 pin)               Ghox, Fixeight

       BCU-2         Background? GFX     (PQFP160)              Vimana
       FCU-2 8J1     Foreground? GFX     (PQFP136)              Truxton


       GP9001 VDP

       - 0.274              : Fixed regression with vdpcount_r (toaplan\gp9001.cpp) [hap].
       - 0.238              : Added initialization register (0x0E) values for remaining games (Batrider, Battle Bakraid, Battle Garegga, Enma Daio, Kingdom GrandP, Othello Derby, Power Kick and Sorcer Striker; video\gp9001.cpp) [Sergio Galiano].
       - 0.222              : Fixed GP9001 sprite drawing, fixes Truxton II sprites flicker or disappear during certain parts of the game [cam900].
       - 0.220              : Implemented sprite limit per frame/sprite size. Added notes [cam900].
       - 0.211              : Simplified handlers and gfxdecodes. Use callback for gfx bankswitching behavior. Use shorter/correct type values [cam900].
       - 0.204              : Cleanup/Fixed naming. Reduced unnecessary handler. Make tilemap drawing routine related to cliprect and buffered_spriteram16 for sprite RAM (video\gp9001.cpp) [cam900].
       - 0.198              : Minor cleanups. Reduced duplicates. Make sprite draw function related by MAX_SPRITE (it's possibly lower than 256 at real hardware) [cam900].
       - 0.193              : Added line reads for polling sync outputs and privatize a few things [AJR].
       - 0.187              : Generate (and acknowledge) video interrupts within VDP (video\gp9001.cpp) [AJR].
       - 0.158              : Fixed video\gp9001.c (batrider and batriderj: A portion of the boss's ('Gob-Robo') face is missing) [David Haywood].
       - 0.155              : GP9001 cleanup and update [Alex Jackson].
       - 0.154              : Converted GP9001 to device_gfx_interface, cleanups [Alex Jackson].
       - 0.149              : Finished modernizing GP9001 Video Controller [smf].
       - 0.139u2            : David Haywood changed GP9001 (toaplan VDP device) to use DEVICE_SELF. Attempted to implement dual VDP mixing with the equations provided by Quench, doesn't yet work. Removed Toaplan 2 tile limit hack, not needed now since VDP is mixed properly
       - 0.139u1            : Added video\gp9001.c/h. David Haywood started converting the Toaplan2 VDP into a device. More refactoring to the Toaplan 2 / GP9001 VDP device [David Haywood].
       - DRIVERS: batsugun.cpp, dogyuun.cpp, dt7.cpp, fixeight.cpp, ghox.cpp, kbash.cpp, pipibibi.cpp, raizing.cpp, raizing_batrider.cpp, snowbro2.cpp, sunwise.cpp, tekipaki.cpp, truxton2.cpp and vfive.cpp
       - SOURCE: video\gp9001.cpp



       Toaplan Text tilemap generator

       - 0.282              : Added toaplan\toaplan_txtilemap.cpp/h. Merged common text layer emulation in GP9001-based drivers into a device [cam900].
       - Notes: Common Toaplan text tilemap generator usally paired with GP9001
       - DRIVERS: fixeight.cpp, raizing_batrider.cpp, raizing.cpp and truxton2.cpp
       - SOURCE: toaplan\toaplan_txtilemap.cpp



       Toaplan Sprite Controller (SCU)

       - 0.236              : Use single pass priority drawing for sprite vs tilemap priority. Use device-specific delegate for priority mask. Use device_video_interface to find screen (video\toaplan_scu.cpp) [cam900].
       - 0.155              : Toaplan SCU cleanup and update [Alex Jackson].
       - 0.149u1            : Added video\toaplan_scu.c/h. Removed further traces of wardner hack, share sprite controller code with Rally Bike [David Haywood].
       - DRIVERS: toaplan1.cpp, twincobr.cpp and wardner.cpp
       - SOURCE: video\toaplan_scu.cpp



G1.37  V-System

       VS8803
       VS8904 (QFP64)
       VS8905 (QFP80)
       VS9108 =  Fujitsu CG10103 145 9520 Z14    (QFP160)     Sprite chip
       VS9209 4L01F1429 JAPAN 9523EAI            (QFP64)
       VS920A
       VS920B
       VS920C                                    (144pin)
       VS920D 4L04F1689 JAPAN 9524EAI            (QFP160)
       VS920E 4L06F1057 JAPAN 9533EAI            (QFP176)
       VS920F 4L01F1435 JAPAN 9524EAI            (QFP100)
       VS9210 4L06F1056 JAPAN 9525EAI            (QFP176)
       VS9611

       NOTES: Various Video System Co. games using the V-System graphic chips C7-01 GGA, VS8803, VS8904 and VS8905. The VS8904/8905 chips handles sprites and the VS8803 tilemap.


       V-System C7-01 GGA

       - 0.221              : Simplified some handlers (video\vsystem_gga.cpp) [Osso].
       - 0.189              : Document some pins and clocks [AJR].
       - 0.186              : Video System video improvements [Vas Crabb].
       - 0.184              : Added video\vsystem_gga.cpp/h. Added skeleton device for Video System C7-01 GGA [AJR].
       - DRIVERS: aerofgt.cpp, f1gp.cpp, fromance.cpp, ojankohs.cpp, pipedrm.cpp, rpunch.cpp, tail2nos.cpp and welltris.cpp
       - SOURCE: video\vsystem_gga.cpp/h


       VS920A Text Tilemap

       - 0.154: Added video\vs920a.c/h. Reorganized some code for Grand Striker driver (no functional change) [David Haywood].
       - NOTES: The VS920A is a (very) simple tilemap chip with 1 Plane, Tiles 8x8, 4bpp, Map 64x64 and no scrolling or other effects.
       - DRIVERS: gstriker.cpp
       - SOURE: video\vs920a.cpp



G2.    Custom Video


G2.1   Signetics

G2.11  Signetics 2636

- 0.273              : Removed render_first_line and added a start_new_frame instead (machine\s2636.cpp) [hap].
- 0.226              : Update S2636 sound to new stream callbacks [Aaron Giles].
- 0.221              : Simplified handlers [Osso].
- 0.186              : Changed description to 'Signetics 2636 PVI'.
- 0.176              : Check for debugger access for reads with side effects machine\s2636.cpp [Vas Crabb].
- 0.169              : Re-write S2636 from scratch as needed for Sub Hunter: Needs raw screen parameters and calls from scanline timer to work properly. Collision and completion bits generated correctly including duplicates. Supports background and score display. Generates audio tone from line frequency. Probably hurts performance when rendering per frame. Try to fix S2636 offsets in games using legacy screen params. Added drawing optimisation. Added INTREQ/INTACK to S2636, not used by any drivers yet [Vas Crabb].
- 0.154              : Converted S2636 to use inline configs [Fabio Priuli].
- 0.150              : Changed description to 'Signetics 2636'. Merged emu\video\s2636.c/h and emu\sound\s2636.c/h to machine\s2636.c/h. Modernized S2636 sound/video device. Merged S2636 video and sound implementations and moved them to machine\ [Osso].
- 0.139u2            : Added emu\sound\s2636.c/h. Added sound support to Signetics S2636 (by using VC4000 sound support from MESS). Hooked up sound to Malzak, Galaxia and Astro Wars. Hooked up S2636 sound to zac2650.c [Mariusz Wojcieszek].
- 0.135u4            : Fabio Priuli fixed all sets in drivers using S2636 video chip.
- 0.135u3            : Fabio Priuli converted Signetics 2636 video chip to be a MAME device and updated drivers using it accordingly.
- 14th August    2008: Tomasz Slanina - The best implementation of s2636 i've found so far is part of the MESS vc4000 driver. I'll try to "borrow" some code and test. But the main problem remains - how to emulate 3 chips at the same time? Uhh .in fact it's easy to emulate them, like other drivers does, just no interaction / communication between them. In fact they are "chained" somehow. According to datasheet there's possibility for use of mutliple PVIs. But no details. Also the game Galaxia reads external I/O port (instead memory mapped to PVIs )to check ship - enemies collisions.
- 0.126u5            : Tomasz Slanina fixed ROM mapping and added preliminary video emulation to Galaxia.
- 0.37b10            : Added vidhrdw\s2636.c/h.
- NOTES: The Signetics 2636 is a video chip for Sprite-Object/Background collision detection
- GAMES: The Invaders (Zaccaria 1978), Quasar (Zaccaria 1980), Cosmos (Century Electronics 1981), Malzak (Kitronix)
- WEB: http://mess.toseciso.org/datasheets:signetics
- PCB: S 2636N, DIP 40 (Malzak), 2636 40-pin (Galaxia), Signetics 2636 (Catnmous)
- DRIVERS: cvs.cpp, galaxia.cpp, laserbat.cpp, malzak.cpp, quasar.cpp, seabattl.cpp and zac2650.cpp
- SOURCE: machine\s2636.cpp



G2.12  S2637
- Not emulated!
- NOTES: The Emerson Arcadia console used a Signetics 2637 chip for its sound and graphics, and the Signetics 2636 is simply an earlier revision of this chip.
- GAMES: Zaccaria - Cat 'n' Mouse (1982), Lazarian  (1982)



G2.2   Atari

G2.21  TIA

- 0.225              : Update TIA sound to new stream callbacks [Aaron Giles].
- 0.214              : Use device_palette_interface, save bitmaps and converted update method to RGB32 [AJR].
- 0.199              : Miscellaneous machine().device and MCFG cleanups (video\tia.cpp) [Ryan Holtz].
- 0.198              : Eliminated some explicit device tag lookups (video\tia.cpp) [AJR].
- 0.158              : Added save state support to tia_video_device [Osso].
- 0.156              : Prevent Nans [Wilbert Pol].
- 0.153              : Converted tia_video_device to DEVCB2 [Osso].
- 0.152              : Added Atari 2600 NTSC palette notes [Robert Tuccitto].
- 0.151              : Per "Television Interface Adapter [TIA]" tech doc and "Atari VCS POP Field Service Manual" in harmony with original hardware results, updated NTSC palette to better simulate colors on a CRT display. Documented phase shifts 24.7 thru 27.7 degrees in 0.5 increments. Enabled 26.2 degrees as default being a logical choice as the system should be initially calibrated for Hue 1x and 15x (F$) to visual match (~25.7 degrees) displaying 'gold'/'goldenrod' via system's manual pot adjustment, while moderate system runtime automatically creates a higher phase shift. Results collaborate with additional tech docs (I.E. "Stella Programmer's Guide") placing 1x as 'gold', 2x as 'orange' and 15x (F$) as 'light orange' (hue between 1x and 2x). Colors measured from midpoint of brightness scale [Robert Tuccitto].
- 0.148u2            : Fixed uninitialized members in video\tia.c [Oliver Stoeneberg].
- 0.147u2            : Wilbert Pol fixed some initial settings which caused out of bounds access (video\tia.c). Fixed uninitialized variables in video\tia.c (according to valgrind) [Oliver Stoeneberg].
- 0.146              : Wilbert Pol fixed TIA crashes caused by uninitialized variable (video\tia.c).
- 0.145u7            : Made TIA modern device (video\tia.c) [Miodrag Milanovic].
- 0.117u3            : Wilbert Pol added an optional vsync callback to the TIA emulation to allow a driver to dynamically change the screen configuration.
- 0.117u2            : More TIA improvements [Wilbert Pol]: Fixed some minor missile graphics positioning issues. Moved some initialization code from tia_init to tia_reset.
- 0.116u4            : Some more TIA graphics and sound improvements [Wilbert Pol]: INPT4 and INPT5 are now read when needed instead of by a timed function. This removes the need for the tia_init_pal function. Improved handling of the HMOVE functionality. Added code to reduce the flickering caused by some Atari 2600 games. Improved the sound poly generation. Improved the handling of POLY5_DIV3 sound mode.
- 0.116              : More TIA updates from MESS [Wilbert Pol]: Rewrote drawing of playing graphics. Improved handling of player graphics reset signals. Improved handling of HMOVE signals.
- 0.115u3            : Wilbert Pol updated TIA graphics code (code comes from the MESS repository). Also updated Tournament Table driver to accommodate the changes.
- 0.111u5            : Nathan Woods updated the TIA video driver to use the new BITMAP_ADDR* macros instead of using the line[] array.
- 0.111u2            : Nathan Woods changed TIA code to only allow initialization at init time.
- 0.111u1            : Nathan Woods fixed reset problem in the TIA emulation (video\tia.c).
- 0.97u3             : Wilbert Pol fixed a minor bug in TIA emulation (video\tia.c), taken from the MESS code.
- 0.82u3             : Minor fix from the MESS side to vidhrdw\tia.c [Nathan Woods].
- 0.68               : Added vidhrdw\tia.c.
- NOTES: TIA Video (NTSC). TIA = Television Interface Adapter
- DRIVERS: tourtabl.cpp
- SOURCE: video\tia.cpp


G2.22  GTIA

- 0.250              : Misc connection notes (atari\gtia.cpp) [Angelo Salese].
- 0.249              : Fixed player/missile width rendering (atari\gtia.cpp), fixes (MESS) Atari 800 Jumpman Junior at very least. Fixed readback of undocumented read registers and consol direction readback. Added better cold boot initial values (atari\gtia.cpp), fixes (MESS) Atari 800 test suite Acid800 "GTIA: default value" and "GTIA: CONSOL test" items. Make CHECK_GRACTL macro switch to actually compile [Angelo Salese].
- 0.221              : Removed dummy_space() calls [smf]. Simplified handlers (video\gtia.cpp) [Osso].
- 0.196              : Removed first_screen usage from GTIA [Ryan Holtz].
- 0.173              : Changed video\atari.cpp to video\atari400.cpp [Tafoid].
- 0.156              : Fixed usage of uninitialized members in gtia_device [Oliver Stoeneberg].
- 0.155              : Reduced a bit the GTIA #define obfuscation. Untangle GTIA and ANTIC some more. Converted GTIA to be a device. Removing a bunch of static vars along the way [Fabio Priuli].
- 0.134u4            : Mariusz Wojcieszek fixed TRIG3 register handling in GTIA for Atari XL/XE.
- 0.106u6            : Added vidhrdw\gtia.h.
- NOTES: GTIA = Graphics Television Interface Adapter - Atari 400/800. Based on Atari 400/800 MESS driver by Juergen Buchmueller
- DRIVERS: bartop52.cpp and maxaflex.cpp
- SOURCE: video\gtia.cpp + video\atari400.cpp



G2.23  ANTIC

- 0.249              : VBL status is always held no matter enable irq reg (atari\antic.cpp), fixes (MESS) Atari 800 Anteater hangs. Use pixel_period() for steal_cycles timer (atari\antic.cpp). Fixes (MESS) Atari 800 Elektra Glide, Galaxian and Blaster (Prototype) crashes, Pitfall II score display, 'Alf in the Color Caves' stuck on first hole, 'Halftime Battlin' Bands' GFX faces on gameplay, M*A*S*H and 'Boulders and Bombs' flickering and likely more. Display area is 240 in both NTSC and PAL (atari\antic.cpp), fixes cut top/bottom in (MESS) Atari 800 Crystal Raiders and Math Mileage. Guard against side_effects reads for WSYNC. Make m_scanline to be consistant across soft resets (atari\antic.cpp). Reset chand/chxor helpers, fixes (MESS) Atari 800 Track and Field timer/length hidden text (atari\antic.cpp) [Angelo Salese]. Double pixels for Mode 9 graphics (atari\antic.cpp), fixes (MESS) Atari 800 Caverns of Mars title screen. Removed long-obsolete "used colors" tables (atari\antic.cpp). Removed hardcoded input port name and make it a GTIA callback instead (atari\antic.cpp) [AJR].
- 0.236              : Fixed Atari 'ANTIC' DLISTL and DLISTH writing to only affect the high and low byte component that is spread between m_dpage and m_doffs (video\antic.cpp). Fixes artifact colors in (MESS) Atari 800 Choplifter, David's Midnight Magic, Lode Runner, Diamond Mine and Ultima IV [Golden Child].
- 0.221              : Simplified handlers (video\antic.cpp) [Osso].
- 0.216              : Eliminated auto_alloc (video\antic.cpp) [AJR].
- 0.210              : Modernize logging (video\antic.cpp) [AJR].
- 0.198              : Eliminated some explicit device tag lookups (video\antic.cpp) [AJR].
- 0.165              : Reduced tagmap lookups (video\antic.c) [Wilbert Pol].
- 0.156              : Pass device_video_interface and kill some machine().first_screen() (video\antic.c) [Osso].
- 0.155              : Added video\antic.h. Untangle GTIA and ANTIC some more. Moved ANTIC start procedure from video\atari.c to video\antic.c. Another small ANTIC bit. Some more ANTIC refactorization. Reduced number of define'd functions. Small WIP. Removed ANTIC_RENDERER. Converted ANTIC to be a device [Fabio Priuli].
- 0.134u4            : Moved the renderer function into ANTIC [Atari Ace].
- 0.128u6            : Introduced function macros for ANTIC_RENDERER. Pushed the running_machine * passing through these functions. In other locations added "running_machine *machine = Machine" to the top of functions to isolate the dependencies [Atari Ace].
- 0.88u4             : Added vidhrdw\antic.c.
- NOTES: Video controller. Based on Atari 400/800 MESS briver by Juergen Buchmueller.
- DRIVERS: bartop52.cpp and maxaflex.cpp
- SOURCE: video\antic.cpp



G2.24  AMD 29C101

- NOTES: The early-to-mid 90's Atari raster games use RLE-compressed sprites. These sprites were decoded, colored and scaled on the fly using an AMD 29C101 ALU unit. The instructions for the ALU were read from 3 512-byte PROMs and fed into the instruction input (see video\atarirle.c).
- GAMES: Atari Games - Hydra(1990), Primal Rage


G2.25  MB87316
- NOTES: FUJITSU MB87316, 40-pin => Atari 137536-001 "Line_Buffer (LB)" custom ASIC
- PCB: MB87316 (Thunderj, Xybots)


G2.26  ASIC65

- 0.245              : Converted machine\asic65.cpp to use logmacro [Ryan Holtz].
- 0.210              : Updated ASIC65. Simplified handlers. Use shorter type values. Reduced unnecessary lines. Fixed debugger issues and spacing [cam900].
- 0.155              : Fixed index out-of-bounds access in asic65_device::read() [Oliver Stoeneberg].
- 0.152              : Device-ified asic65.c [Osso].
- 0.141u3            : Atari Ace removed unneeded #include lines in asic65.c.
- 0.128u2            : Atari Ace added missing const/statics, added/removed entries in header files, and fixed a few potential multisession issues by explicitly adding initializers. asic65.c has significant changes to accomodate using a struct instead of 16 variables, otherwise the changes are modest and obvious.
- 0.77               : Aaron Giles improved ASIC65 logic for Road Riot 4WD - almost playable. Added support for Guardians of the Hood.
- 0.62               : Added machine\asic65.h.
- 0.59               : Added machine\asic65.c.
-  6th February  2002: Aaron Giles added the missing ASIC65 source file.
- NOTES: The ASICs are used to speed up the simulation, so they likely perform complex math operations or graphics operations. Road Riot 4WD (1991): (Aaron Giles) The core hardware is pretty similar to Hydra, but the emulation suffers from the lack of understanding of a custom ASIC on the board. Apparently this ASIC is used for complex math operations, and improper emulation of it leads to incorrectly drawn roads and crashes. It is likely this game also uses a SLOOP (son-of-slapstik) chip for protection. The sound board is a standard Atari 6502, YM2151 and ADPCM board. Guardians of the 'Hood (1992): (Aaron Giles) Runs on the same hardware as Road Riot 4WD, but seems to have a much simpler chip in place of the custom ASIC. On the other hand, it is still unplayable due to a lack of understanding of the SLOOP protection chip. The Namco System II board is a 5 ( only 4 are emulated ) CPU system. The complete system consists of two boards: CPU + GRAPHICS. It contains a large number of custom ASICs to perform graphics operations, there is no documentation available for these parts.
- DRIVERS: atarig42.cpp and harddriv.cpp
- SOURCE: machine\asic65.cpp




G2.3   MOS

G2.31  MOS 6560 / 6561 VIC

- 0.265              : Mask offset to fix possible array out of bounds access (sound\mos6560.cpp) [hap].
- 0.225              : Update MOS6560 sound to new stream callbacks [Aaron Giles]. Changed MOS6560 sound device back to using std::unique_ptr<T []> for things that don't need to change size [Vas Crabb].
- 0.220              : Simplified some handlers [Osso].
- 0.186              : Changed description to 'MOS 656X VIC (Attack UFO)'.
- 0.153              : Cleaned up DEVCB2 usage [Curt Coder].
- 0.150              : Fixed MOS6560 warning (if (m_tone1samples == 0)) [Curt Coder].
- 0.148u5            : Fixed missing MOS656X sound in Attack Ufo [hap].
- 0.148u2            : Modernized the MOS6560 device [Curt Coder]. Fixed uninitialized member in sound\mos6560.c [Oliver Stoeneberg].
- 0.147              : Refactored MOS6560 interface to use DEVCB. Refactored VIC to a modern device. Refactored to use an RGB32 bitmap [Curt Coder].
- 0.136u4            : Added sound\mos6560.c/h. Fabio Priuli imported MOS6560 device emulation from MESS for Attack Ufo and removed the existent custom audio/video emulation. Added also driver_data struct and save states to Attack Ufo. Replaced 'Attack Ufo Custom' sound with 'MOS 6560 / 6561 VIC'.
- 0.129u4            : Changed Custom sound to 'Attack Ufo Custom'.
- 15th August    2005: Tomasz Slanina - Game is running on VIC6560 - like chip MOS6560, with few changes in the internal structure. Video, colors and sounds are emulated now (based on PeT's 6560 code from MESS).
-  7th August    2005: Tomasz Slanina - Weird (and probably rare) invaders clone from 1980. The main CPU is a 6502. Gfx is tilebased (128 dynamic tiles in RAM + 128 static in ROM). Screen size is strange - 176x184 (22x23 8*8 tiles). Colors are unknown. Sound hw is unknown too, possible discrete.
- NOTES: 6560 = NTSC; 6561 = PAL. Video and sound emulation based on MOS 656x driver by PeT (MESS)
- PCB: VIC 6560 40pin IC "C" (Attckufo)
- DRIVERS: attckufo.cpp
- SOURCE: sound\mos6560.cpp



G2.32  MOS 7360

- 0.245              : Converted mos7360.cpp to arrays rather than individually-numbered members [Ryan Holtz].
- 0.225              : Update MOS7360 sound to new stream callbacks [Aaron Giles].
- 0.222              : Simplified some handlers [Osso].
- 0.201              : Replaced MCFG macro with DEVCB. Removed totally unnecessary use of machine().device [AJR].
- 0.184              : Disabling the screen uses the border colour [smf].
- 0.157              : Added missing save state to mos7360_device, fixes (MESS) plus4.c save state problem [Osso].
- 0.155              : Save stating some members in MOS7360 [Wilbert Pol].
- 0.148u2            : Moved mos7360.c to emu\sound\. Modernized the MOS7360 device [Curt Coder]. Fixed uninitialized memory in sound\mos7360.c. Removed unused member from sound\mos7360.h [Oliver Stoeneberg].
- NOTES: MOS 7360/8360 Text Edit Device (TED) emulation
- DRIVERS: (MESS) plus4.cpp
- SOURCE: sound\mos7360.cpp



G2.4   Nintendo

G2.41  2C0X PPU

- 0.280              : Removed disused callback (video\ppu2c0x.cpp) [AJR].
- 0.277              : Cleaned up code: Implemented 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 (video\ppu2c0x.cpp) [cam900].
- 0.251              : Improved behavior of OAM writes during PPU rendering (video\ppu2c0x.cpp). Noticeably improves (MESS) NES High Hopes demo [kmg].
- 0.241              : A few background palette fixes (video\ppu2c0x.cpp): Added function to unify grayscale and palette emphasis flags application. Flags now applied to background pixels (including separate cases: 0 tile pixel, disabled background lines and blanked 8-pixel left column). Fixed special case where background is disabled and scanline color is set by PPU address latch pointing to palette RAM (used in Micro Machines). Plus a few minor simplifications and cleanups [kmg].
- 0.226              : Added '2C04 Clone PPU' device and use the real palette ROMs for the bootlegs. Implemented most PPU behavior differences for VS System bootlegs. Added the 2c04 clone's delayed sprite rendering (video\ppu2c0x.cpp) [Devin Acker].
- 0.225              : Made use of the code that was already partially present in the NES PPU code to handle emphasis modes, used to highlight tally bars etc. in (MESS) 'nes rampart', apply a red tint to (MESS) 'fds bublbobl' and dim the screen in a number of other games (video\ppu2c0x.cpp) [David Haywood].
- 0.220              : Simplified some handlers [Osso].
- 0.209              : Replaced VDP bitmap access with screen().pixel() for lightgun emulation [Enik Land]. Fixed order of nametable/attribute reads (video\ppu2c0x.cpp) [AJR].
- 0.206              : Don't use float on cycles_to_attotime (video\ppu2c0x.cpp) [hap].
- 0.198              : Make palette internal to device (video\ppu2c0x.cpp). Changed NMI to line callback [AJR].
- 0.186              : Privatize video\ppu2c0x.h & includes\vsnes.h variables [Angelo Salese]. Added wrappers for SNES PPU operations so members can be made protected [Vas Crabb].
- 0.184              : Added '2C02 PPU', '2C07 PPU' and 'Generic PAL Clone PPU' device. Improved PAL clone timings [kazblox].
- 0.183              : Changed mame\video\ppu2c0x.cpp/h to devices\video\ppu2c0x.cpp/h.
- 0.154              : Converted NES PPU to use inline config and removed some unused config values [Fabio Priuli].
- 0.153              : Hacked around the limitations of our PPU code (video\ppu2c0x.c), so to support the different (MESS) NES CHR registers. Improved PRG-RAM handling. First attempt to added split screen mode, still broken. The hack only deals with the way MMC-5 monitors PPU activity, not with the actual effect. When i get to the point of completing my not-yet-abandoned PPU rewrite, the new calls in ppu2c0x.h will go away [Fabio Priuli].
- 0.149u1            : Fixed array out-of-bounds access in ppu2c0x_device::draw_sprites() [Oliver Stoeneberg].
- 0.148u3            : Made PPU use delegates instead of callbacks and PPU NMI also delegate and now inline config. Did latch delegate for PPU [Miodrag Milanovic].
- 0.145u7            : Wilbert Pol removed some leftovers in PPU2C0x from the conversion to a modern device.
- 0.144u7            : Converted NES PPU to be a modern device [Fabio Priuli].
- 0.137u3            : Alex Jackson removed the bogus 2C0X PPU "color remap tables" in favor of external palettes containing data reverse-engineered (several years ago) from original hardware. Each vsnes set, as well as the playch10 bios, now requires one of these palettes.
- 0.137u2            : Fabio Priuli added save states to NES PPU and performed some minor cleanups.
- 0.133u2            : More NES work: Fixed 4-screen mirroring (PPU regression). Fixed Chameleon 24 driver. Improved sprite overflow emulation of NES PPU (this fixes the first of Blargg's Sprite Overflow tests) [Robert Bohms].
- 0.133u1            : Rewrite of NES PPU [Robert Bohms]: Ported ppu2c0x to use a device memory map. Ported all rendering to access PPU address space through memory map. Updated MAME drivers to install read handlers or memory banks in PPU memory map, as appropriate. Removed all mirroring and banking code from the ppu, as the backing memory is documented to be external. Supplied replacement banking alternatives for all MAME drivers (vsnes.c, playch10.c, cham24.c and multigam.c).
- 0.130u4            : Nathan Woods changed the PPU2C0x implementation to be a device.
- 0.124u5            : NES/PlayChoice 10 changes [Mariusz Wojcieszek]: Added support for mapping ROM and RAM in PPU video memory space.
- 0.117u2            : Removed video\ppu2c03b.h.
- 0.116              : Removed video\ppu2c03b.c.
- 0.111u5            : Nathan Woods updated the Nintendo 2C03B PPU video driver to use the new BITMAP_ADDR* macros instead of using the line[] array.
- 0.108u1            : Added video\ppu2c0x.c/h. Major cleanup/rewrite of the NES PPU rendering code [Brad Oliver]. This should improve the accuracy of the NES-based games (playch10.c and vsnes.c). Report anything odd or broken at MAMETesters.
- 0.104u5            : Nathan Woods changed the NES PPU interfaces to follow new struct conventions.
- 0.102u3            : Rob Bohms fixed $4014 sprite DMA in NES PPU.
- 0.97u2             : Andrew Church fixed NES PPU video timing.
- NOTES: The RP2C04 PPU chips are functionally interchangeable, but the colors will be different than normal. This code is heavily based on Brad Oliver's MESS implementation.
- PCB: RC2C03B (Duckhunt, Vstennis), RP2C03C (Smgolf, Vspinbal), RP2C04 (Bnglngby, Hogalley, Iceclimb, Machridr, Vsbball), RC2C05 (Jajamaru)
- DRIVERS: cham24.cpp, famibox.cpp, multigam.cpp, nes_arcade_bl.cpp, playch10.cpp and vsnes.cpp
- SOURCE: video\ppu2c0x.cpp



G2.42  VT03 PPU

- 0.279              : Removed unnecessary offset parameters from some handlers [AJR].
- 0.278              : Split VT32 PPU into its own derived device. Added VT32 specific support for a bitswap on PPU character data pulls used by some titles (some of the bonus games in myaasa etc.) [David Haywood].
- 0.225              : Fixed a number of issues with VT palette modes that was causing black screens in many games, allowing them to be promoted (video\ppu2c0x_vt.cpp) [David Haywood].
- 0.220              : Simplified some handlers [Osso].
- 0.204              : Allow palette to be set before mode is selected. Fixes Konami logo in recently added (MESS) 'Dance Dance Revolution Disney Mix' (Disney 2001) (video\ppu2c0x_vt.cpp) [David Haywood].
- 0.194              : Added machine\m6502_vtscr.cpp/h. SY-889 DMA and memory map correct and RGB palette support (drivers\nes_vt.cpp). Multiple nes_vt Improvements: Work on lexcyber. Fixed VT03 colours, Video mode tweaks for various VTxx systems. Improved VTxx colours. Added some more VTxx systems (all currently broken). Further graphical improvements for newer VTxx systems. Tweak colours for newer VTxx systems. Fixed mirroring in VTxx games. Promoted some VTxx systems from MACHINE_NOT_WORKING. Added BittBoy, remove non-VTxx systems, general ordering. Work on MMC3 compatibility in VT03 driver. Address decoding fixes. Connect BittBoy ROM A24 to GPIO. More machine promotions following various fixes. Fixes for dgun2500. VTxxx tidying, remove debugging. Fixed nes_vt compilation after merge. Several nes_vt Fixes and improvements: Added 89 in 1 mini console. Added mc_cb280, similar to sy889. More VTxx ROMs. Added more nes_vt systems. Added SY888B. Added support for VTxx systems with scrambled instructions (FC Pocket, DGUN2573). Added support for Family Pocket, and more FC Pocket games. Small fixes and reclassifications. Support for VTxx scrambled banking (thanks NewRisingSun for help). New palette code from NewRisingSun, etc. Various VT03 fixes, several systems including ZDog now working. nes_vt comment/status updates. Refactor m6502_vtscr [David Shah].
- 0.186              : Added video\ppu2c0x_vt.cpp/h. Basic VT03 video support. Some support for extended sprite addressing used by (MESS) Cyber Arcade 120-in-1 [David Haywood].
- DRIVERS: (MESS) nes_vt.cpp
- SOURCE: video\ppu2c0x_vt.cpp



G2.43  Nintendo Super NES Video/Sound

- 0.277              : S-DSP updates/cleanups: Fixed pitch modulation emulation, save state support reference (https://snes.nesdev.org/wiki/SNESdev_Wiki), indent, typenames and input clock. Reduced unnecessary lines. More std::clamp uses. Use BIT for single bit flags, lowercase hexadecimal values and reference for voice state reference (https://snes.nesdev.org/wiki/S-SMP). Use logmacro.h for logging and BIT for single bit flags (sound\s_dsp.cpp) [cam900].
- 0.241              : Partial revert DMA cycle function (machine\snes.cpp). Fixes (MESS) snes wildguns flickers heavily after entering gameplay in the first level [cam900].
- 0.238              : Fixed SNES timing and interrupt (machine\snes.cpp) [cam900].
- 0.229              : Fixed issues detected by Coverity Static Analysis (software) (video\snes_ppu.cpp) [Robbbert].
- 0.227              : Use device_palette_interface for palette, fixed CGRAM size and direct color behavior (video\snes_ppu.cpp) [cam900]. Initialized variables that were causing crashes in DRVNOCLEAR build (machine\snes.cpp) [Osso].
- 0.222              : READ/WRITE macros removal (video\snes_ppu.cpp) [Osso].
- 0.221              : Split audio\snes_snd.cpp/h (S-SMP and S-DSP) into machine\s_smp.cpp and sound\s_dsp.cpp. Converted both memory handler into device_memory_interface. Internalized ROM region of S-SMP. Use callback for S-DSP interface. Splitted internal and external memory space. Converted WRAM into shared_ptr. Reduced #define macros (sound\s_dsp.cpp). Converted WRAM into shared_ptr [cam900].
- 0.220              : Simplified some handlers (video\snes_ppu.cpp) [Osso].
- 0.217              : Allow saving members of structures in n-dimensional arrays. Reduced the number of save registrations (video\snes_ppu.cpp) [Vas Crabb].
- 0.216              : Fixed rapid vertical scrolling in rexronan and other games (video\snes_ppu.cpp). Fixed MAME crashes when starting a game with (MESS) SNES (PAL). Apply raw parameters as (MESS) SNES, fixes black screen in snesb.cpp. Fixed doubled-up frames on interlaced games, off-by-one-line graphical glitches in some games and out-of-bounds vector accesses on interlaced SNES games. Ported over more of BSNES's PPU-fast implementation. Fixes many bugs, possibly causes more. Fixed (MESS) Super Mario World sprite blending regression (video\snes_ppu.cpp). Converted OAM code from BSNES ppu-fast [Ryan Holtz].
- 0.215              : Run HTOTAL double only if needed. Also run HDMA when vpos=0 (video\snes_ppu.cpp and machine\snes.cpp). Fixed (MESS) Vortex & Judge Dreed graphics [AmatCoder]. The SNES only has 64kbytes of VRAM, not 128kbytes (video\snes_ppu.cpp). Fixes graphics in (MESS) Yoshi's Island, probably others. Fixed background layer drawing based on higan ppu-fast [Ryan Holtz, byuu]. Adjusted HBlank timing interval to the most common case. Fixes off-by-one parallax in (MESS)  Yoshi's Island [byuu]. Fixed some breakage from the port of BSNES ppu-fast. Added support for screens that vary horizontal width mid-frame (emu\screen.cpp), and hooked it up to the SNES driver. Fixes (MESS) dkongcu intro and others [Ryan Holtz].
- 0.210              : Fixed sound issue when autosave is enabled in (MESS) SNES (audio\snes_snd.cpp) [Osso].
- 0.209              : Simplified handlers. Added input clock (shared to SPC700 or independent?) and device_clock_changed. Use shorter type values. Reduced unnecessary lines. Fixed spacings. Added notes (audio\snes_snd.cpp) [cam900].
- 0.194              : TnDIV divides by 256 when setting written is 0 in SNES sound. Merged timer counters into one single function (audio\snes_snd.cpp) [Angelo Salese].
- 0.186              : Added wrappers for SNES PPU operations so members can be made protected [Vas Crabb]. Fixed obvious bugs found by GCC 7.1 (video\snes_ppu.cpp) [Miodrag Milanovic].
- 0.174              : Moved around STAT78 PAL variable (video\snes_ppu.cpp and machine\snes.cpp) [Angelo Salese].
- 0.159              : (MESS) Converted input code to use slot devices. This means that you now change the emulated controllers (Joypad, Mouse, Multitap, Super Scope) via the Slot Device menu of the UI interface and not anymore from the System Configurations menu. Also, changing controller now requires to reset the system, so please take some time to choose the desired controller *before* starting the game, if you want to play a game that uses special controllers. Fixed Mouse emulation so that it does not jump back erratically if you keep moving beyond the window border. Fixed Multitap Adapter emulation so games properly recognize the device and inputs from all 5 controllers are accepted by the games. Added emulation of the Pachinko controller used by a few pachinko games for Super Famicom. Added emulation of the Yonezawa Twin Tap controllers, which allow to play with up to 8 players a quiz games for Super Famicom. Added emulation of the Epoch Barcode Battler unit (even if only as Super Famicom controller, and not as a standalone unit) which is necessary to play Conveni Wars Barcode Battler Senki for Super Famicom [Fabio Priuli].
- 0.157              : Removed unneeded running_machine parameter were it wasn't needed and removed some machine().first_screen() calls (video\snes_ppu.c) [Osso].
- 0.156              : Initialized more class variables (video\snes_ppu.c) [Fabio Priuli]. Fixed usage of uninitialized member in snes_ppu_device (video\snes_ppu.c) (happened with e.g. (MESS) snes -cart sdf1gpp) [Oliver Stoeneberg].
- 0.155              : Added a few more members to SNES save state and initialized some unintialized members (video\snes_ppu.c and machine\snes.c) [Wilbert Pol].
- 0.154              : Changed video\snes.c video\snes_ppu.c. Added video\snes_ppu.h. Converted SNES PPU to be a device [Fabio Priuli]. Fixed usage of uninitialized members in snes_ppu_device [Oliver Stoeneberg].
- 0.149              : Timers from the base state class should be still considered by the derived class (includes\snes.h). Modernized the SNES sound device (audio\snes_snd.c/h) [Fabio Priuli].
- 0.148u5            : Minor cleanup machine\snes.c used by NSS and other SNES-based arcade drivers. Added save registration of a bunch of scanline-related variables (video\snes.c) [Fabio Priuli].
- 0.148u4            : Miodrag Milanovic fixed snesb regression (includes\snes.h and machine\snes.c). Removed not needed state variables (includes\snes.h).
- 0.147              : Moved snes_oam in the state machine, allows to be showable in the debugger (video\snes.c and includes\snes.h). Fixed vertical sprite wrap-around in SNES driver. State-ized CG RAM and snes_vram. Fixed SNES VRAM size. Bunch of SNES changes (machine\snes.c/snes_w_io) [Angelo Salese].
- 0.141u3            : Fabio Priuli fixed save state error (snes_snd.c).
-  7th April     2010: Angelo Salese - I'm currently improving again stuff in the Super NES driver. Right now, I have a major task to do: Implement the master cycle "steals" that the devices does on that HW. Starting by the simplest one (the DMA) it starts to give reasonable results, The Smurfs - Travel the World, Mario Paint, Pachio Kun Special 2 and Super Cup Soccer all boots and Libble Rabble, Major Title and Super Tetris 2 + Bombliss have working inputs. Probably something regressed for now, but we'll do death count once that all of this is correctly implemented...
- 0.137u1            : Added audio\snes_snd.c/h. Removed audio\snes.c. Fabio Priuli reworked SNES OAM drawing routines. Implemented correct range over and time over flags (sprite limits) and FirstSprite priority. Moving more variables to driver data class and refactoring/cleaning up some code. Updated SNES sound device to use device handlers, to store its internals in a struct, and to save them. Added some SNES internal refactoring, some new debug functions, a small mode7 fix. Updated SNES DSP1, DSP2, DSP3, DSP4, OBC1, SRTC and ST010 addon chips to store their variables in struct and to save them. Added proper sprite priorities. Added pseudo-hires effect. Changed 'SNES Custom' sound to 'SNES Custom DSP (SPC700)'. Added save states to the SPC700 core.
- 0.137              : Fabio Priuli simplified the SNES drawing routines, added support for offset-per-tile, cleaned up the code, fixed remaining issues in hires modes, fixed serial joystick reads and slightly simplified palette handling. Added very preliminary driver_data class for SNES based drivers (it only contains input-related items for the moment, because these are needed to add support for additional controller types in MESS). Fixed scrolling problems. Refactored joypad inputs to be consistent with other input devices (used in MESS). jbo_85 fixed Offset-per-tile graphics. jbo_85 and Fabio Priuli fixed OAM overflow.
- 0.136u4            : Minor SNES refactorization. Temporarily reverted implementation of mult/div through timers since it breaks some SNES games on the MESS side [Fabio Priuli].
- 0.136u3            : SNES WIP [Fabio Priuli]: Added a couple of registers to snes_ppu struct. Moved color blending (background & subscreen color addition/subtraction) at the end of the drawing process. Removed some unused (and not working anymore) debug code. Fixed the remaining debug functionalities. Moved colour struct to be another layer (simplifying some code). Updated hires blending to work with two pixel at time. Fixed clipmasks with hires modes.
- 0.136              : Hardware multiplication and division on the SNES takes 8 machine cycles to complete [Wilbert Pol].
- 0.135u4            : Fabio Priuli moved SNES timer allocation to MACHINE_START.
- 0.134u1            : Angelo Salese fixed SNES CG ram reading address and an incorrectly SNES setted DMA register read, fixes DMA Memory in the test cartridge. Changed region user6 to addons.
- 0.134              : Added machine\snesdsp3.c, snesdsp4.c/h. ZSNES Team and Fabio Priuli added emulation for the SNES DSP-3 and DSP-4 add-on chips, based on latest ZSNES.
- 0.133u5            : Added machine\snesrtc.c and snessdd1.c. SNES updates [R. Belmont, Harmony]: Correct ROM loading behavior for SuperFX games. Added more ROM mirroring needed by certain SuperFX 2 games. Correct the behavior of certain bit-restricted SuperFX registers. Doom, Yoshi's Island, Dirt Trax FX and Voxel Demo show things now. Improved S-DD1 emulation, neither game using S-DD1 boots yet. SuperFX updates [Harmony]: Inlined a number of functions for possible speed increase. Removed some memory buffering cruft, to be re-added later. Fixed behavior of ASR opcode. With additional MESS-side changes, Stunt Race FX is playable, and Vortex shows much more. Hooked up RAM and ROM buffering. Inlined several more functions. Removed debug spew. Added the ability to define an external IRQ line callback, and hooked it up to the 65C816. Fixed flag calculation for HIB opcode. Hooked SuperFX chip up to the SNES machine driver. Fixed carry handling in ADC, ADCI, SBC and SBCI opcodes. Fixes many SNES SuperFX bugs. Made numerous corrections to SNES S-DD1 chip emulation, SFA2 and Star Ocean still do not boot. SuperFX updates [Anonymous]: Fixed disassembly of LMULT/FMULT ops. Fixed reads using LDW/LDB. Fixed writes using STW/STB. Fixed SBC carry behavior. Fixed GETC ROM access behavior. Some SuperFX games begin to show things in MESS. At least partly fixed PLOT and RPIX behavior. This fixes many gfxs in Star Fox and Vortex, but no polys yet.
- 0.133u4            : SNES improvements [Angelo Salese]: Fixed half colour blending behaviour.
- 0.133u3            : SNES Updates [Angelo Salese]: Fixed direct color gfxs in mode 7. Fixed direct color gfxs in mode 3/4. Fixed a vram out-of-bounds bug. Fixed a blending bug involving main/sub color maths. Fixed interlace mode gfxs when not in gfx modes 5/6. Fixed a GDMA boundary bug. Made the OAM address reset more accurate. Fixed HDMA mid-frame inits. Added clip colors to black window function. Converted color clipping to use struct entries. Made dynamic H resolutions to be called only at vblank start and fixed gfx mode switching 1/5 and 5/1. Made the gfx mode switches more accurate. Correct a bunch of SPC registers behaviour. Improved joypad read/write handling and fixed a serial port quirk. Fixed serial port for player 2 as well. Improved cart mode 20 reserved access behaviour. Added OBJ interlace support.
- 0.133u2            : SNES video updates [Fabio Priuli]: Re-enabled video debug functionalities in debug build (to toggle background layers). Added proper priority tables for various bg/obj layers. Largely simplified tile and line drawing routines, and fixed small bits here and there. Further simplification of tile drawing routines. Added palette index to 8bpp tiles (correct color_shift still unsure, though). Reworked video drawing routine to simplify the various graphic mode drawing and to allow proper implementation of priority orders (especially bg3 priority bit and mode 7 priority order). Improved mode 7 extbg (still missing mosaic). Added some more debugging options. Improved Mode 7 math precision (but still some issues remain) and added a few elements to PPU struct. Implemented Mosaic in Mode 7. Merged OAM functions. Added a few elements to PPU struct (this might be handy if we ever come to convert SNES PPU to a device). Fixed Mode 7 shared scrolling/matrix registers. Slightly optimized Mode 7 math (by using Anomie's recursive formula). Moved some more register contents to PPU struct. Added PPU1/PPU2 Open Bus support, STAT77/STAT78 registers should be more accurate (even if still not perfect). Simplified window masking code and moved some more regs to PPU struct.
- 0.133              : Several MESS-specific SNES fixes for rendering [Angelo Salese].
- 0.129u4            : Changed Custom sound to SNES Custom.
- 0.129u1            : Atari Ace made all SNES obc1_, DSP1_ and DSP2_ exports static.
- 0.127u7            : Tomasz Slanina fixed problem with OAM address reset at start of vblank (machine\snes.c). Fabio Priuli and BYUU added emulation for SNES special chips DSP-2 & OBC-1: Added sources snesdsp2.c & snesobc1.c. Removed special chips detection from MAME. Modified memory handlers to account for the new chips.
- 0.127u6            : Fabio Priuli changed the NSS/SNES loading code to support more cart/memory layouts and generally be more in line with the MESS way of handling SNES cartridges. Also some minor NSS/SNES cleanups.
- NOTES: Nintendo/Sony S-SMP and Nintendo/Sony S-DSP
- DRIVERS: nss.cpp, sfcbox.cpp, snesb.cpp and snesb51.cpp
- SOURCE: video\snes_ppu.cpp, machine\s_smp.cpp and sound\s_dsp.cpp



G2.44  Capcom CX4

- 0.258              : Replaced pi constant with M_PI (nintendo\cx4fn.ipp and cx4ops.ipp) [hap].
- 0.233              : Eliminated reach-around calls to fetch the main CPU in the SNES CX4. Only the original address space is needed, there's no need to pass the machine around [Aaron Giles].
- 0.174              : Changed machine\cx4data.inc, cx4fn.inc, cx4oam.inc and cx4ops.inc to cx4data.hxx, cx4fn.hxx and cx4oam.hxx and cx4ops.hxx.
- 0.148u2            : Moved machine\snescx4.c/h, cx4data.c, cx4fn.c, cx4oam.c and cx4ops.c to src\mess.
- 0.134u1            : Added machine\snescx4.c/h, cx4fn.c, cx4oam.c, cx4ops.c, cx4data.c. Harmony ported Capcom CX4 implementation over from BSNES (original code by zsKnight, Anomie and Nach). Mega Man X2 and X3 are now playable in MESS, with bugs.
- DRIVERS: (MESS) snes.cpp
- SOURCE: nintendo\cx4fn.cpp and nintendo\snescx4.cpp


G2.45  Seta ST-010
- 0.141u1            : Removed machine\snesst10.c.
- 0.134u1            : Added machine\snesst10.c. Fabio Priuli ported ST010 support from BSNES. Harmony fixed an issue where running ST010 games would hang MESS.
- SOURCE: machine\snesst10.cpp
- PCB: ST010 (Drifto94)




G2.5   Philips

G2.51  SAA5020
- PCB: Philips SAA 5020, DIP 24 (Malzak), Special Function TV Interface Circuit - Teletext Timing Chain Display Contoller


G2.52  SAA5050

- 0.278              : Fixed some Flash and Hold control issues (video\saa5050.cpp) [Nigel Barnes].
- 0.227              : Implemented TLC (Transmitted Large Character) output line [Nigel Barnes].
- 0.204              : Replaced dump of SAA5050 internal character generator ROM with verified copy from decap. This also matches the Signetics and Mullard SAA5050 datasheet pixel listings [Sean Riddle, ClawGrip, The Dumping Union].
- 12th  November 2018: Smitdogg - Sean Riddle decapped and extracted the internal ROM of the SAA-5050 Teletext chip used on Philips P2000T/Acorn System 2/BBC Micro.
- 0.184              : Fixed romsize for SAA5050 [Tafoid].
- 0.168              : SAA5050 outputs all 20 scanlines [Nigel Barnes].
- 0.167              : Implemented graphics generator, no longer read from fake ROM. Added character rounding. Improved control code handling. Added ROMs for variants saa5051, saa5053, saa5054, saa5055, saa5056 and saa5057 [Nigel Barnes].
- 0.153              : Converted SAA5050 to DEVCB2 [Curt Coder].
- 0.148u2            : Fixed uninitialized variables and member in video\saa5050.c [Oliver Stoeneberg].
- 0.147              : Rewrote the SAA5050 Teletext character generator. Refactored Malzak driver to use the new implementation [Curt Coder].
- 0.146u5            : Curt Coder fixed double high character mode, and forced character data to 7-bit.
- 0.139u1            : Miodrag Milanovic updated SAA5050 to form 12x20 chars as noted in documentation. Updated malzak driver to support SAA5050 changes.
- 0.135u4            : Fabio Priuli imported SAA5050 emulation from MESS and made it a device. Updated malzak.c to use it, removing the almost identical implementation in the driver.
- 0.97u1             : Barry Rodewald added clone Malzak II, improved SAA 5050 emulation and fixed S2636 port. Changed cpu1 rom ($c00) to user2 (screen data).
- 0.77u3             : Barry Rodewald added Malzak (Kitronix 19??).
- NOTES: Mullard SAA5050 Teletext Character Generator. http://smitdogg.mameworld.info/du/nov11-2018/1.jpg
- PCB: SAA5050, DIP 28 (Malzak)
- DRIVERS: malzak.cpp
- SOURCE: video\saa5050.cpp/h


G2.53  SAA5051

- 0.204              : Fixed SAA5051 internal character ROM to match datasheet (one pixel was missing on the 'j' character) [Lord Nightmare].
- DRIVERS:
- SOURCE: video\saa5050.cpp/h


G2.54  SAA5070

- 0.263              : Added machine\saa5070.cpp/h. New SAA5070 Viewdata Input/Output Peripheral (VIOP) device. Avoid double reset of UART's [Nigel Barnes].
- NOTES: SAA5070 Viewdata Input/Output Peripheral + SAA5070 UART. https://bitsavers.org/components/philips/_dataBooks/1985_IC02Na_Philips_Bipolar_MOS_Video_and_Associated_Systems.pdf
- SOURCE: machine\saa5070.cpp



G2.6   Blitter
- 13th April     2005: Aaron Giles - Picking up from my last article on blitters, the next thing I was going to talk about was how to time a blitter. At a rough guess, if you have schematics handy, you can look at a blitter chip and do an approximation of how long a blit will take. A blitter chip, like a CPU, needs a clock, so that's a good starting point. For example, the blitter on the classic Williams games (Joust, Robotron, etc) runs at 4MHz. That means it's going to be limited to 4 million operations in a second. But you can go beyond that. If you look at the width of the data bus that the blitter has, then you can tell how many bits it can operate on at a time. The Williams blitters have a 4-bit bus, and there are two of them running in parallel, so that's 8 bits per operation, or 2 4-bit pixels. Taking the guessing game one step further, if there is only one address bus on the chip (as is the case for the Williams blitters), then it can't read graphics data from the source and write to a target at the same time. In fact, it will need to constantly swap back and forth between the source address and the destination address. So, assuming that it takes one clock to read a source byte, one clock to swap to the target address, one clock to write a target byte, and one clock to swap back to the source address, you're looking at 4 clocks per operation. So, putting all this together, I'd have a first guesstimate that the Williams blitter could handle (4000000 clocks / 4 clocks per operation) * (8 bits per operation / 8 bits per byte) = 1 million bytes per second, give or take. So that's the ballpark to expect. I'm currently working on an update to the early Williams games that will factor this in, in the hopes that Robotron might slow down enough to match the arcade (a number of folks have noticed that Robotron runs too fast in MAME at the higher levels). Of course, the ideal situation would be if we could measure this directly. Unfortunately with the Williams games, there's no obvious way to do it because the blitter HALTs the main CPU while the blit is happening, in order to gain full control over the systemwide address and data busses. If I had an oscilloscope and a PCB to play with, I could probably do some measurements that way. But there's no obvious software path to do it. (Okay, I lied, there is one: I could program the sound CPU to measure the timing, and then send start/stop signals to the sound CPU just before/after the blit is done. That might be worth trying). Fortunately, most later hardware that used blitters decided that it didn't really make sense to suspend the main CPU while a blit was happening, so they were designed to operate in parallel with the main CPU. These are generally known as an "asynchronous blitters". The Incredible Technologies blitters are like this. The nice thing is that this setup makes it relatively straightforward to measure how long blits of different sizes take to complete. Having done this now for the 8-bit IT games, I'll describe the gory details in my next blitter-related post.
-  6th April     2005: Aaron Giles - A number of games I've done drivers for (Williams, Strata, Art & Magic, etc) use blitters as their way of drawing graphics on the screen. This is different from the way most arcade games work, and is actually much more similar to a modern computer. In these games (and in computers), there is a large chunk of video memory which is called the "frame buffer". The frame buffer contains 'n' bits of information for each pixel you see on the screen. Now, one immediate problem you run into with a frame buffer is that there is some hardware that is constantly scanning through this memory and pushing that data to the screen. If you are in the middle of modifying a bunch of pixels and the scanner intersects the area you are drawing to, then you can produce an effect called "tearing", where a partially rendered object is displayed (this is a simplification, but it illustrates the general idea). To get around this, most blitter-based games have two frame buffers. At any given time, one of the frame buffers is actively being scanned and displayed to the screen, while drawing happens to the other frame buffer. After the beam has scanned to the bottom of the display, the two buffers are swapped. This is known as "page flipping". The early Williams games didn't have enough video RAM to do page flipping, so they had to be very aware of what scanline was currently being displayed. Once the scanning beam had passed below the area of video RAM they wanted to animate, then they could make their changes without fear of tearing. This is generally referred to as "drawing behind the beam". So where does a blitter come into play? Well, in general it was entirely possible to sit there and muck about with the frame buffer using the main CPU. In fact, Defender doesn't have a blitter at all - it is all drawn by the main CPU. The problem is that it takes a lot of CPU power to draw lots of pixels on the screen. And although a CPU can certainly accomplish a lot, it is not specifically designed for drawing lots of pixels at high speeds. One solution to this could be to add a second CPU that is responsible for drawing the graphics, based on commands from the first CPU. In fact, a number of games such as Gyruss and the Cinematronics/Leland games (Quarterback, Ataxx, Super Off Road, etc) do just that. However, a CPU is an expensive part. And it's not optimized for doing graphics. So a number of folks caught onto the idea of designing custom ICs that were dedicated to performing very fast graphics operations. In general, it's not enough to just draw pixels, these chips also had to do a lot of bit manipulation and address computations to handle things like X and Y flipping, transparency, scaling, etc. The term that has come up over time to describe this kind of operation (copying large arrays of data and manipulating them during the copy) is a "blit". And custom chips that are dedicated to this sort of work are called blitters. So, you can think of a blitter as a custom chip that is designed to copy graphics (which are normally stored in ROM or RAM) to a frame buffer while manipulating the data in a programmed fashion. So what makes this tricky in MAME? Well, first off, every company designed their own blitter. There is no standard way of blitting. Generally, this just takes some reverse engineering power and a lot of patience to figure out what's happening. The really tricky part is the fact that blitters don't perform their operations instantaneously - it takes some time to actually shuffle through all that data and render it to the frame buffer. As a simplification, most blitters in MAME are implemented as "instantaneous" blitters, meaning they complete instantly. The problem is that many games rely on the speed of the blitter to limit their speed, or else overtax the blitter so that the original game slowed down when too much was being drawn at one time. Figuring out how fast the blitters operated is the trick, and I'll talk more about that next time.
- 0.95u2             : Aaron Giles rewrote blitter implementation to be much simpler (no more macros) and measured and implemented accurate blitter timing (fixes some speed problems).


G2.61  Fujitsu MB1551x
- NOTES: Halley's use 2x Fujitsu MB15510, MB15511 and MB15512 blitter coprocessors for rendering graphics layers.
- GAMES: Halley's Comet (Taito 1986)


G2.62  ITV4400
- NOTES: ITV4400 custom blitter for rendering
- GAMES: Wheel Of Fortune (1989), Dyno Bop (1990), Hot Shots Tennis (1990) and Ninja Clowns (1991)
- SOURCE: drivers\itech8.c and video\itech8.cpp
- PCB: Incredible Technologies ITV4400 CF93458FN (Dynobop, Hstennis)


G2.63  GA9201
- NOTES: The GA9201 is a custom blitter chip (120pin IC).
- GAMES: Shanghai III (1993), Blocken (1994), Hebereke no Popoon (1994)
- PCB: GA9201 KA01-0249 JAPAN 9332EAI, QFP120 (Heberpop)



G2.7   Collision chips

- 26th November  1999: Zsolt Vasvari added The Percussor to the Zodiack driver, and he fixed the collision detection in Crazy Balloon and in the TaitoSJ games.
- 26th October   1999: Phil Stroffolino got collision detection working in Vulcan Venture with help from Dave Spicer and Nao.
-  7th September 1999: Nicola improved Vendetta collision detection.
- 29th August    1999: Ernesto Corvi finally added sprite-sprite collisions to Thunder Cross.
- 16th August    1999: Ernesto Corvi emulated the collision chip in Vendetta, and the game is now fully playable.


G2.71  PC3259
- NOTES: The PC3259 is a sprite/char collision detection
- SOURCE: grchamp.c, crbaloon.c, bking2.cpp


G2.8   TLC34076

- 0.228              : Initialized more pointers and variables (video\tlc34076.cpp) [AJR].
- 0.207              : Removed unnecessary address_space arguments in TLC34076 [cam900].
- 0.206              : Removed MCFG macros (video\tlc34076.h) [Osso].
- 0.201              : Modern configuration accessors [Ryan Holtz].
- 0.198              : Converted implementation to use device_palette_interface. m_pens is unnecessary now [AJR].
- 0.197              : Converted m_pens and m_local_paletteram into std::unique_ptr. Minor cleanup [cam900].
- 0.186              : Changed description to 'TI TLC34076 VIP'.
- 0.148u1            : Fully modernised the TLC34076 device (drivers\artmagic.c, btoads.c, coolpool.c, itech8.c, skeetsht.c, tickee.c, vcombat.c and xtheball.c) [Phil Bennett].
- 0.147              : Added 'TLC34076 VIP' device.
- 0.139u2            : Phil Bennett converted TLC34076 to a device.
- 0.122u6            : Zsolt Vasvari changed TLC34076 and games using it to RGB32. Removed global machine variable where possible.
- 0.64               : Added vidhrdw\tlc34076.c.
- 17th January   2003: Aaron Giles abstracted the TLC34076 palette chip emulation used by Art & Magic, Battletoads and a few other drivers.
- DRIVERS: artmagic.cpp, btoads.cpp, coolpool.cpp, itech8.cpp, skeetsht.cpp, tickee.cpp, vcombat.cpp and xtheball.cpp
- SOURCE: video\tlc34076.cpp


G2.9   YGV608

- 0.267              : Replaced ygv608_draw_mosaic fn -> draw_mosaic (namco\ygv608.cpp) [Angelo Salese].
- 0.261              : Use util::sext for sign extension (namco\ygv608.cpp) [AJR].
- 0.251              : Clean up some indentation in YGV608 VDP [hap].
- 0.221              : Simplified some handlers (video\ygv608.cpp) [Osso].
- 0.217              : Initialized stuff in the constructor [Osso].
- 0.210              : Internalized palette [AJR].
- 0.203              : Updated save state support, fixed namcond1.cpp games save state regression [Osso].
- 0.202              : Eliminated register_postload [AJR].
- 0.199              : Eliminated customized MCFG_YGV608_ADD macros [Ryan Holtz].
- 0.198              : Eliminated some explicit device tag lookups (video\ygv608.cpp) [AJR].
- 0.194              : Added mosaic effect for NCV1 'Galaga Arrangement' ending/staffroll (video\ygv608.cpp). Guessed that R#13 is used for transparent color, fixes 'COLOR TEST' in ND-1 self test. Fixed a small graphics glitch in 'RALLY-X Arrangement' (video\ygv608.cpp) [Agiri].
- 0.191              : Rewrote built in RAM access control and added screen control 7, 8 & 9. Fixed page select boundaries for tilemap drawing, fixes Namco Classic Collection Vol.2 garbage gfxs in attract mode. Reset pattern name table states on mode changes (video\ygv608.cpp), fixes corrupt tiles in 'Mappy Arrangement' of Namco Classic Collection Vol.1 [Angelo Salese].
- 0.188              : YGV608 accessors are 8-bits not 16. Moved a few statics out from r/w handlers. Converted ports to AM_DEVICE. Log registers into own space, handling will follow up. Added CRTC function and moved irqs in handler callbacks. Added preliminary raster irq hookup (limited usage in NCV2). Moved base address out of legacy switch case and ROZ registers out of the legacy code. Return h/vblank status bits. Misc IRQ changes. Address pointer clean-ups. YGV608 pattern name table pointer access and log mosaic. Added border color (makes the POST screens to be black and not green) [Angelo Salese].
- 0.183              : Enabled preliminary ROZ effects in YGV608 core. Needs testing and references, they are certainly off for e.g. Galaga Arrange Challenge stages [Angelo Salese].
- 0.150              : Added 'YGV608 VDP' device. Make YGV608 a device [Miodrag Milanovic]. GCC 4.8.1 compile fix (video\ygv608.c; i<512 -> i<256) [R. Belmont].
- 0.141u4            : Further decoupled some driver files to help driver_device conversions [Atari Ace]: YGV608 is made independent of Namco ND-1 Driver.
- 0.99u9             : Aaron Giles removed tilemap_dispose call and fixed the two drivers that were using it. This fixes improper save state registrations in megasys1 and ygv608 games.
- 0.86u4             : Mark McDougall added tile flipping in NCV2.
- 25th March     2003: David Haywood fixed the incorrect graphics in Namco Classics Vol.2 but it still crashes when trying to start a game.
-  4th July      2001: Mark McDougall added Namco Classics Vol.2 to the ncv1 driver, but it doesn't quite work because of missing rotation / zoom emulation.
- 0.37b16            : Added vidhrdw\ygv608.c.
- 11th June      2001: Mark McDougall worked on adding Namco Classics Vol.2, but the driver isn't complete yet.
-  8th June      2001: Mark McDougall sent in his Namco Classics Collection Vol.1 driver, which lacks some graphical effects and sound.
- NOTES: Yamaha YGV608 - PVDC2 Pattern mode Video Display Controller 2. Controlls screen size, rotation, split-screen scrolling, scaling...
- PCB: Yamaha YGV608-F video controller, QFP100 (Ncv1, Ncv2)
- DRIVERS: namcond1.cpp
- SOURCE: namco\ygv608.cpp


G2.A   Midway ICs

- 0.265              : Reduced hardcoded tags and cleaned up code. Suppress side effects for debugger reads. Use C++ style line comments for single line comments. Reduced use of literal tags (midway\midwayic.cpp) [cam900].
- 0.246              : Changed sourcefile to midway\midwayic.cpp.
- 0.224              : Removed few unneeded HLE hacks. Added debugger access guards (machine\midwayic.cpp) [MetalliC].
- 0.222              : READ/WRITE macros removal (machine\midwayic.cpp) [Osso].
- 0.221              : Removed some dummy_space() calls [smf].
- 0.207              : Reduced unnecessary arguments in handlers [cam900].
- 0.206              : Added serial number input kludge from PIC to generate serial data [Ryan Holtz, Ted Green].
- 0.200              : Removed runtime tag lookups (machine\midwayic.cpp) [Ted Green].
- 0.188              : Added auxillary output callback (machine\midwayic.cpp) [Ted Green].
- 0.185              : Block register updates until unlocked (machine\midwayic.cpp) [Ted Green].
- 0.155              : Fixed missing streaming BGM/Sounds during gameplay in gauntleg, gauntdl and carnevil [Phil Bennett].
- 0.154              : Modernized Midway ICs [Miodrag Milanovic].
- 0.149              : Removed unnecessary idectrl.h include [smf].
- 0.82u2             : Aaron Giles added support for sfrushrk PIC, timeout on PIC reads to speed up sfrushrk and fixed missing sound reset latch at startup.
- 0.81u5             : Aaron Giles added faux support for setting the real time clock (to pass diags). Added shuffle map for Vapor TRX. Implemented crude loopback in UART (to pass diags).
- 0.78               : Aaron Giles added sound auto acknowledgement option, added new PIC mapping for Gauntlet: Dark Legacy and fixed initial sound IRQ state. DCS: Fixed reporting of input full/output empty states.
- NOTES: Emulation of various Midway ICs
- DRIVERS: atlantis.cpp, midvunit.cpp, midwunit.cpp, midzeus.cpp, seattle.cpp and vegas.cpp
- SOURCE: midway\midwayic.cpp



G2.B   Amiga AGA

- 0.132u4            : Better fix for Amiga AGA ddf_stop_pixel, to avoid breaking Amiga 1200 startup screen [Mariusz Wojcieszek].
- 0.132u3            : Fixed AGA display window start and stop (fixes startup screen and lsrquiz & lsrquiz2 missing graphics) [Mariusz Wojcieszek].
- 0.132u2            : Amiga AGA update [Mariusz Wojcieszek]: Fixed sprite data fetching and sprite colors.
- 0.130u2            : Added video\amigaaga.c. WIP driver for Cubo CD32 [Mariusz Wojcieszek]: AGA palette. AGA bitplane data fetching. support for up to 8 standard bitplanes. HAM8 mode.
- SOURCE: video\amigaaga.c + drivers\cubo.cpp


G2.C   AMI S68047
- NOTES: The S68047 is a Video Display Generator from 1978, that functions like the Motorola MC6847. Include is a six alhpanumeric, four full-color four-graphics and four full graphics two-color modes. The on-chip ROM provides 64 ASCII 5x7 dot matrix characters on a 16x32 display matrix. The full graphics density can go up to a maximum of 192*256 dots. The 40-pin package, plus a minimal number of support components, connects directly with the TV or color monitor's video circuits. Build in are all the controls for interfacing with the host AMI 6800 MPU, as well as addresses for the video display RAM and/or ROM.
- PCB: American Microsystems Inc. AMI S68047 (ceramic), S68047P (plastic)
- SOURCE: mess\drivers\sv8000.c and spc1000.cpp


G2.D   RAMDAC

- 0.220              : Simplified handlers for RAMDAC device [Osso].
- 0.154              : Hooked up RAMDAC device to following drivers: adp.c, bmcbowl.c, coinmvga.c, highvdeo.c, magicard.c and segajw.c [Angelo Salese].
- 0.144u5            : Added RAMDAC device to mediagx.c [Angelo Salese].
- 0.144u4            : Converted gamtor.c to use the RAMDAC device [Angelo Salese].
- 0.144u3            : Converted Sliver to RAMDAC device [Angelo Salese].
- 0.144u2            : Added 'RAMDAC' device (video\ramdac.c). Written a generic RAMDAC device, hooked it up to the sfbonus.c as an example. Updated blitz68k.c to use the new ramdac device, added read handlers to the device. Hooked up RAMDAC to Reality Tennis, added new interface flag for separated read/write registers. Converted chsuper.c driver to use the new RAMDAC device, and cleaned up the vram in it [Aaron Giles].
- 0.143u7            : Implemented RAMDAC for gamtor.c [Angelo Salese].
- SOURCE: video\ramdac.cpp


G2.E   Buffered Sprite RAM

- 0.250              : Added length() getter [hap].
- 0.220              : Simplified handlers for 'Buffered Sprite RAM' devices [Osso].
- 0.184              : Added 'Buffered 8-bit Sprite RAM', 'Buffered 16-bit Sprite RAM', 'Buffered 32-bit Sprite RAM' and 'Buffered 64-bit Sprite RAM' device (video\bufsprite.cpp).
- 0.145u4            : Added 'Buffered Sprite RAM' (video\bufsprite.h). Create new devices buffered_spriteram<n>_device, which manage buffered spriteram. Removed core support for legacy buffered spriteram, and updated all drivers to use the new devices instead. Removed required/optional_shared_size helpers. Instead the existing required/optional_shared_ptr helpers now have a bytes() method that can be used to query the size of the shared region [Aaron Giles].
- DRIVERS (8-bit): blktiger.cpp, commando.cpp, contra.cpp, dec8.cpp, dooyong.cpp, exedexes.cpp, galivan.cpp, gng.cpp, hcastle.cpp, lwings.cpp, sidearms.cpp, sigmab98.cpp, slapfght.cpp, srumbler.cpp, ssrj.cpp and wardner.cpp
- DRIVERS (16-bit): armedf.cpp. bbusters.cpp, bionicc.cpp, boogwing.cpp, cbuster.cpp, cninja.cpp, crshrace.cpp, darkseal.cpp, dassault.cpp, ddragon3.cpp, dec0.cpp, dooyong.cpp, drgnmst.cpp, dynduke.cpp, gaelco2.cpp, gaiden.cpp, goal92.cpp, hyprduel.cpp, inufuku.cpp, kaneko16.cpp, karnov.cpp, lastduel.cpp, lemmings.cpp, m72.cpp, m92.cpp, mcatadv.cpp, metro.cpp, mirage.cpp, r2dx_v33.cpp, raiden.cpp, raiden2.cpp, rohga.cpp, shadfrce.cpp, srmp6.cpp, supduck.cpp, tecmo16.cpp, terracre.cpp, tigeroad.cpp, toaplan2.cpp, toki.cpp, toki_ms.cpp, twin16.cpp, twincobr.cpp and vaportra.cpp
- DRIVERS (32-bit): deco32.cpp and psikyo.cpp
- SOURCE: video\bufsprite.cpp


2.F   MPEG video

- 0.276              : Hookup Codec and Video register handlers (video\zr36060.cpp). Hookup video frontend handlers and interrupt routing (pci\zr36057.cpp) [Angelo Salese].
- 0.275              : Added video\saa7110.cpp/h and video\zr36060.cpp/h. Implemented enough to make it reach I2C negotiations. Sort out header notes (pci\zr36057.cpp). Added SAA7110A stub. Added type-in OCF1 receiver writes (video\saa7110.cpp). Preliminary PostOffice interactions, kick off enough glue logic with a ZR36060 so that DC10+ passes board tests [Angelo Salese].
- 0.262              : Added pci\zr36057.cpp/h. Added ZR36057 stub (Zoran ZR36057 / ZR36067 PCI-based chipsets: PCI glue logic for multimedia MJPEG, MPEG1 & DVD) [Angelo Salese].
- 0.255              : Added video\zr36110.cpp/h. Added skeleton driver for Zoran ZR36110 MPEG video decoder (video\zr36110.cpp) [O. Galibert].
- NOTES: Zoran ZR36110 MPEG video decoder
- DRIVERS: hrdvd.cpp
- SOURCE: pci\zr36057.cpp and video\zr36110.cpp





G3.    2D Graphic

G3.1   Monochrome

- 0.246              : Make the code look more like the other MAME code: Indent initialiser lists by one level. Indent parameters by two levels when they need to be wrapped. Don't use const on parameters passed by value (not part of signature). Changed C-style casts to function-syntax casts (reduces parentheses) (video\fixfreq.cpp) [Vas Crabb].
- 0.224              : Improved handling of interlaced video. Will now detect half lines before vsync and determine field (video\fixfreq.cpp) [Couriersud].
- 0.218              : Added machine configuration switches for netlist drivers using the fixed frequency monitor (video\fixfreq.cpp). These are intended for debugging and setting up new netlist drivers. As a side effect one can emulate e.g. loss of synchronization. This commit also fixes a crash on Windows/BGFX by limiting screen refresh rates. This commit may trigger false positives on regression testing [Couriersud].
- 0.208              : Separated interface from implementation/logic [Couriersud].
- 0.206              : FixFreq code maintenance and added RGB channel functionality. Implemented sub-pixel horizontal resolution. This is not yet used and missing static initialization interface. Electron beams in CRTs are not discrete. They are continous on a scanline. This modification allows a higher horizontal resolution to better model "subpixel" timing [Couriersud].
- 0.186              : Changed description to 'Fixed-Frequency Monochrome Monitor'.
- 0.162              : Added adjustable gain to video\fixfreq.c. Doubled horizontal resolution in Breakout because pixelclock has 2:1 and 1:1 duty cycles. Adjusted screen boundaries (video\fixfreq.c and drivers\pong.c) [Couriersud].
- 0.155              : Converted fixfreq to use inline configs [Fabio Priuli].
- 0.154              : Changed description to 'Fixed Frequency Monochrome Monitor'.
- 0.153              : Fixed a scaling bug (video\fixfreq.c) [Couriersud].
- 0.152              : Don't process hsyncs while we are vsyncing (video\fixfreq.c). Fixes video jitter/jumps in Pong [Couriersud].
- 0.151              : Added video\fixfreq.c/h. Added 'FIXFREQ' device. Added a fixed frequency monitor emulation ('FIXFREQ') to emu\video. This implementation takes an analog composite signal, extracts hsync, vsync and field information in addition to greyscale video. Pong now uses the new analog monitor device. Now supports reset (video\fixfreq.c) [Couriersud]. Clang fix (video\fixfreq.c) [R. Belmont].
- NOTES: Fixed frequency monochrome monitor emulation for games which provide an analog video signal. VSYNC and HSYNC levels are used to create the bitmap.
- DRIVERS: aleisttl.cpp, bailey.cpp, chicago.cpp, crazybal.cpp, electra.cpp, exidyttl.cpp, fungames.cpp, meadwttl.cpp, monacogp.cpp, pong.cpp, pse.cpp, ramtek.cpp, segattl.cpp, taitottl.cpp and usbilliards.cpp
- SOURCE: video\fixfreq.cpp


G3.2   MDA

- 0.280              : Modernized driver. Always use black foreground for inverse video. Use screen frame counter (isa\mda.cpp) [Patrick Mackinlay].
- 0.222              : Simplified signatures of most handlers (isa\mda.cpp) [AJR].
- 0.216              : Splitted Ericsson High resolution Monochrome Graphics Board 1070 out in its own file as being an oddity [Joakim Larsson Edstrom].
- 0.215              : Introduced logmacro.h [Joakim Larsson Edstrom].
- 0.209              : Added dump of Mazovia Polish alternate character set (Hercules) [MCbx Old Computer Collection].
- 0.187              : Fixed "isa_ibm_mda" description typo [ArcadeShadow].
- 0.156              : (MESS) ec184x: MDA clone [Sergey Svishchev]. MDA clone has downloadable fonts [Miodrag Milanovic].
- 0.152              : Changed mess\video\isa_mda.c to bus\isa\mda.c. Shuffle ISA and some more PC related devices around [Miodrag Milanovic].
- 0.147              : Added mess\video\isa_mda.c. Merge of MESS sources [Miodrag Milanovic].
- NOTES: IBM Monochrome Display and Printer Adapter (MDA)
- DRIVERS: (MESS) pt68k4.cpp and rtpc.cpp
- SOURCE: bus\isa\mda.cpp


G3.3   AMGDA

- 0.281              : Added bus\isa\amgda.cpp/h. Added IBM Advanced Monochrome Graphics Display Adapter (aka APA8). Use tap for shared interrupt level clear [Patrick Mackinlay].
- NOTES: IBM Advanced Monochrome Graphics Display Adapter (also known as All-Points-Addressable-8, or APA8). This adapter is an entry level, bitmap-addressable, monochrome graphics adapter designed for use with the IBM RT PC. It is intended to be paired with an IBM 6153 Advanced Monochrome Graphics Display, a 12", monochrome, white phosphor CRT. The combination produces an interlaced 720x512 pixel image with a 92Hz field rate and 46Hz frame rate. The adapter features 64KiB of video RAM, which can be accessed in several modes applying a variety of masks, shifts and logic functions to data from the host or read from video RAM. The 16 bit ISA data bus is connected byte-swapped to the adapter video RAM and registers. When accessed by the host RT PC, the byte-swapping performed by the IOCC makes these registers appear to be in host byte order (i.e., big-endian).
- DRIVERS: (MESS)
- SOURCE: bus\isa\amgda.cpp


G3.4   AGA

- 0.222              : Simplified signatures of most handlers (isa\aga.cpp) [AJR].
- 0.215              : Misc cleanup [Vas Crabb].
- 0.153              : Moved video\pc_aga.c/h to emu\bus\isa\. AGA is ISA device now. AGA cleanup. Note that aga should be extended out of isa_cga in future [Miodrag Milanovic]. Fixed aga_pc200 char gen for (MESS) amstr_pc.c [Carl].
- 0.148u1            : Fixed uninitialized memory in video\pc_aga.c [Oliver Stoeneberg].
- 0.147              : Added mess\video\pc_aga.c. Added Merge of MESS sources [Miodrag Milanovic].
- DRIVERS: (MESS) europc.cpp
- SOURCE: bus\isa\aga.cpp


G3.5   CGA

- 0.283              : Improved CGA-compatible 320*200*2 mode emulation for Tandy 1000. Use indirect colours so palette registers can be visualised (pc\pc_t1t.cpp) [Vas Crabb].
- 0.239              : Make ISA Wyse 700 it not completely crash (isa\cga.cpp) [O. Galibert].
- 0.222              : Try to work around issues (isa\cga.cpp) [Carl]. READ/WRITE macros removal [Osso].
- 0.221              : Correct cga_m24 CRTC type [AJR].
- 0.194              : Fixed 400 line text mode for (MESS) Olivetti M24 [Carl].
- 0.192              : Added Compaq Portable III video, text modes and color need to be fixed. Supported 400 line text modes. (MESS) Olivetti M24 also has 400 line text mode [Carl].
- 0.189              : Mark CGA device as imperfect (bus\isa\cga.h) [Lord Nightmare].
- 0.168              : Treat CGA as fixed sync monitor [Carl].
- 0.162              : Added 640x400x1 mode for (MESS) Olivetti M24 [Carl].
- 0.157              : Added save state support to isa8_cga_device, fixes at least (MESS) pt68k4.c save state problem (isa\cga.c) [Osso].
- 0.156              : (MESS) iskr103x: CGA clone [Sergey Svishchev]. Both CGA clones have unique chargens [Miodrag Milanovic].
- 0.153              : Removed video\pc_cga.c/h. Changed mess\video\isa_cga.c/h to bus\isa\cga.c/h. Added proper CGA device to Cuatro en Linea. CPU logic is quite off tho [Angelo Salese].
- 0.148u2            : Fixed uninitialized members and memory in video\isa_cga.c [Oliver Stoeneberg].
- 0.148u1            : Reduced ioport tagmap lookups (video\isa_cga.c) [Wilbert Pol].
- 0.147u4            : Added proper char roms for Wyse700. NOTE: They are not properly hooked yet (video\isa_cga.c) [John Elliott].
- 0.147u3            : Initial support for Wyse-700 graphics card based on findings of John Elliott (video\isa_cga.c + mess\drivers\at.c).
- 0.147              : Use proper macro for devices (video\isa_cga.c) [Miodrag Milanovic].
- 0.146u3            : Fix for blink on CGA by shattered, also applied on other places as well [Miodrag Milanovic].
- 0.146u2            : MESS: Various improvements of MC1502 driver (video\pc_cga.c) [Sergey Svishchev].
- 0.146u1            : MESS: MC1502 emulation improvements (video\pc_cga.c/h, drivers\pc.c) [Sergey Svishchev].
- 0.144u7            : Support for CGA emulation for VGA [Angelo Salese]. Fixed CGA port find regression [Miodrag Milanovic].
- 0.144u5            : Added video\cgapal.c/h and pc_cga.c/h. Ported PC CGA device emulation from MESS to MAME, and updated Filetto and Tetris (KR) to use it accordingly. Added preliminary superimposing flag for CGA, and implemented for Tetris KR, now it properly mixes between CGA graphics and external background [Angelo Salese].
- 0.129u1            : Made several improvements to the driver [Angelo Salese]: Rearranged & cleaned up the palette initialization, now 0x000-0x1ff offsets are for the char modes and 0x200-0x2ff are for the bitmap modes. Fixed color attributes bits. Cleaned up and fixed colors in CGA bitmap mode for Filetto.
- NOTES: CGA = Color Graphics Adapter
- DRIVERS: 4enlinea.cpp and pcxt.cpp
- SOURCE: bus\isa\cga.cpp


G3.6   EGA

- 0.283              : Added read mode 1. Invert color don't care and make mode 1 work in the debugger (isa\ega.cpp) [Carl].
- 0.277              : The mask only applies to the latch not the vram (isa\ega.cpp) [Carl].
- 0.265              : Latch the row preset (video\crtc_ega.cpp) [Carl].
- 0.258              : Fixed colors [Carl].
- 0.253              : Be less strict about valid display settings (video\crtc_ega.cpp). Fixes EGA card crashes MAME when loading (MESS) ibm5150 Digger [Carl].
- 0.245              : Palette and memory map fixes (isa\ega.cpp). Added irq and row preset (isa\ega.cpp and video\crtc_ega.cpp). Latch start address (video\crtc_ega.cpp), fixes (MESS) PC (EGA) screen flickers and doesn't refresh properly [Carl].
- 0.222              : Simplified signatures of most handlers [AJR].
- 0.215              : Converted to logmacro.h [Joakim Larsson Edstrom].
- 0.207              : Simplified read/write handlers [AJR].
- 0.201              : Eliminated some region_alloc abuse [AJR].
- 0.185              : Added 'IBM Enhanced Graphics Adapter' device (bus\isa\ega.cpp).
- 0.154              : Updated EGA to use DEVCB2, inline configs and delegates [Fabio Priuli].
- 0.153              : Removed emu\scrlegcy.h. Moved mess\video\isa_ega.c/h to bus\isa\ and mess\video\crtc_ega.c/h to video\.
- 0.148u2            : Fixed uninitialized variables and members in video\crtc_ega.c. Fixed crtc_ego configuration via crtc_ega_interface. Fixed several occurances of uninitialized memory [Oliver Stoeneberg]. Initialized the rest of the variables [Wilbert Pol].
- 0.147u1            : Removed not necessary code (video\isa_ega.c) [Miodrag Milanovic].
- NOTES: EGA = Enhanced Graphics Adapter   and   crtc_ega.cpp = 'IBM EGA CRT Controller'
- DRIVERS: (MESS) eispc.cpp, pc1512.cpp and pt68k4.cpp
- SOURCE: bus\isa\ega.cpp + video\crtc_ega.cpp


G3.7   PGC

- 0.222              : Simplified signatures of most handlers (isa\pgc.cpp) [AJR].
- 0.197              : Implemented accelerated VRAM writes + cleanups [Sergey Svishchev].
- 0.166              : Added bus\isa\pgc.c/h. Added isa_ibm_pgc skeleton driver. Reinstall ROM mapping at reset time [Sergey Svishchev].
- NOTES: PGC = IBM Professional Graphics Controller
- DRIVERS: isa\isa_cards.h
- SOURCE: bus\isa\pgc.cpp


G3.8   Q-Bus

- 0.265              : Added qbus\qg640.cpp. Added dump of Matrox QG-640 Color Display Processor Card and skeleton device implementation [AJR, Bitsavers].
- NOTES: Matrox QG-640 640x480x8 graphics card (1985 Matrox Electronics, Ltd.)
- SOURCE: qbus\qg640.cpp


G3.9   VGA

- 0.277              : Only set the ramdac color when all three values are written (video\pc_vga.cpp) [Carl].
- 0.274              : Vsync interrupt support (video\pc_vga.cpp) [Dirk Best].
- 0.272              : Implemented extended start address register. Added ET4KW32I_VGA and hookup overflow high register. Added offset bit 8. Stub ACL/MMU infrastracture. Preliminary HW cursor. MMU placeholders and direct writes (video\pc_vga_tseng.cpp) [Angelo Salese].
- 0.264              : Standardized DEFINE_DEVICE_TYPE descriptions (video\pc_vga_*). Bulk rename s3_vga_device -> s3trio64_vga_device. Retire vblank_timer_cb override and added a latch_start_addr fn in place (video\pc_vga.cpp) [Angelo Salese].
- 0.263              : Added pci\oti_spitfire.cpp/h, video\pc_vga_oak.cpp/h and video\pc_vga_alliance.cpp/h. Added OAK OTI Spitfire (VGA). Added segment, aperture and basic SVGA pixel modes. Preliminary HW cursor and added path for 32bpp color mode (video\pc_vga_oak.cpp). Fixed BAR2 IO flag and added revision register (pci\oti_spitfire.cpp). CRTC logmacro and fixed a bunch of masks towards SVGA (video\pc_vga.cpp). Added Alliance VGA core stub (video\pc_vga_alliance.cpp) [Angelo Salese].
- 0.262              : Added sketchy PLL signatures. Allows BeOS 4 to not hang during card detection bootstrap (video\pc_vga_matrox.cpp) [Angelo Salese].
- 0.259              : Implemented RAMDAC palette_update fn (video\pc_vga.cpp). Preliminary HW cursor and added a debug VRAM viewer (video\pc_vga_matrox.cpp). Implemented 8-bit palette DAC writes using palette_update fn (video\pc_vga_matrox.cpp) [Angelo Salese].
- 0.258              : Added video\pc_vga_matrox.cpp/h. Make CRTC $37 r/w, restores 1MB memory detection (video\pc_vga_tseng.cpp). Added base infrastructure for Matrox MGA2064W VGA (video\pc_vga_matrox.cpp). Added mgabase1 accessing alias, identify RAMDAC. Implemented RAMDAC extended indexed mechanism. Added basic SVGA mode switcher and screen extension bit hook ups. Documented TVP3026 indexed registers, added RAMDAC ID, fixed SVGA offset and Targa SVGA mode. Implemented cursor color (video\pc_vga_matrox.cpp). Implemented line_compare_mask getter (video\pc_vga.cpp), fixes 1600x1200x8 in (MESS) video\mga2064w.cpp [Angelo Salese].
- 0.257              : Part 2 of interface modernization (video\pc_vga.cpp): Update QA and moved SVGA related function to bottom of file. Intermediate step to convert crtc/seq/attribute/gc_reg_read/write to maps from violating parties. Converted pc_vga sequencer regs to space memory. Make sure that address_space_config is preserved when inheriting. Converted ATC to attribute_map, GC to gc_map and CRTC to crtc_map. Reorder functions. Modernized VGA main I/O interfaces. Use yet another custom address_map_constructor in place of the non-working memory_view pattern. Preliminary implementation of an interlace_mode virtual getter (video\pc_vga.cpp). Address self review [skip ci] (video\ibm8514a.cpp) [Angelo Salese].
- 0.256              : Added video\ati_mach8.cpp/h, video\ibm8514a.cpp/h, video\pc_vga_ati.cpp/h, video\pc_vga_nvidia.cpp/h and video\pc_vga_tseng.cpp/h. Changed isa\trident.cpp/h to video\pc_vga_trident.cpp/h. Moved everything that doesn't belong to main VGA/SVGA interfaces to per-manufacturer family files (video\pc_vga.cpp). Temporary moved gamtor_vga_device from video\pc_vga.cpp to misc\gamtor.cpp. Rework and fixed VGA input sense (necessary to allow Riva 128 to survive POST) [Angelo Salese].
- 0.252              : Fixed pixel_xfer transfer shifting, makes Windows 95 to be usable in SVGA 8bpp mode (video\pc_vga.cpp) [Angelo Salese].
- 0.251              : Fixed Read Mode 1 target color for comparison. Fixes at least transparent pen sprite-like in ibm5150:lombrall and ibm5150:intsocch and missing text in ibm5150:pcglobe sets. Preliminary implemention for line_compare in vga_vh_ega mode. Converted isa\trident.cpp to logmacro, override trident_set_video_mode in tvga9000_device, makes Paint 'N Puzzle to set a sane refresh rate [Angelo Salese].
- 0.241              : Made video RAM size configurable at machine configuration [Osso].
- 0.222              : Simplify 8-bit handler signatures (isa\vga.cpp, vga_ati.cpp, video\pc_vga.cpp) [AJR]. READ/WRITE macros removal (isa\vga.cpp, vga_ati.cpp, video\pc_vga.cpp) [Osso].
- 0.211              : VGA display parameter correction (bus\isa\vga.cpp and vga_ati.cpp) [AJR].
- 0.198              : Cleanup machine().device [AJR].
- 0.196              : Use device_video_interface and configured screens instead of first_screen (vga.cpp and vga_ati.cpp). Internalized palette [AJR].
- 0.194              : Avoid crash in (MESS) Windows 95 'A-10 Cuba!' [Angelo Salese].
- 0.193              : CRTC start address is supposed to be shifted left by 2, from 86Box (video\pc_vga.cpp) [MoochMcGee].
- 0.184              : Updated CRTC usage comments (video\pc_vga.h). Save expanded attribute registers (video\pc_vga.cpp). Added palette configuration to save state. Fixed broken port reads on state load. VGA card now saves vga.dac to the state, as the MAME palette is clobbered periodically with data from here. Changed the type of vga.dac.colour to a flat uint8_t array seeing as save_item isn't struct-friendly. Fixes Liero. Saved more VGA flags, including vga.miscellaneous_output, which despite the vague name is needed for reading from the ports [Scott Percival, moralrecordings/pcfix].
- 0.172              : Added 'Trident TVGA9000' device (bus\isa\trident.cpp). Make post text screen work with Trident VGA (isa\trident.cpp). Added support for doubled horiz width in TVGA9000 [Carl].
- 0.163              : Used a latch for the VGA PEL shift register, should fix jerkiness in games that use it (it does in Raiden, at least). Force PEL shift to 0 after a line compare, and move latch release to the end of VBLANK. Fixes (MESS) Jazz Jackrabbit scrolling (do let me know if there are any regressions) (video\pc_vga.c) [Barry Rodewald].
- 0.156              : Added bus\isa\num9rev.c/h. Added Number Nine Revolution 512x32/Revolution 1024x8 (http://en.wikipedia.org/wiki/Number_Nine_Visual_Technology). Only the demo programs tested for now [Carl].
- 0.155              : Added isa\trident.c/h. Correct access to attribute register when PAS bit is set, allows XFree86 to detect ISA VGA [Peter Ferrie].
- 0.153              : Changed mess\video\isa_vga.c/h to bus\isa\vga.c/h. Set pc_vga default DAC mask to 0xff, (MESS) Indiana University 68030 now shows text [Carl]. Fixed extraneous logging I'd left on [R. Belmont]. Fixed incomplete rendering of VGA modes using more than 1MB of VRAM [Barry Rodewald].
- 0.149              : Virtual Pool IDs the Tseng via the two special registers (video\pc_vga.c) [Angelo Salese].
- 0.148u5            : Made VGA offset calculation an overridable method, instead of a macro. Fixes display in XF86_S3. Added a little bit to svga_dm, but still needs a lot of work [Barry Rodewald].
- 0.148u4            : Made clipping rectangle checks against Destination X/Y when doing BitBLT (isa_vga_ati.c) [Barry Rodewald].
- 0.148u3            : A text character's attribute bit 3 selects set A, not set B (video\pc_vga.c). Added source X/Y read registers used by XF86_MACH8 (video\isa_vga_ati.c) [Barry Rodewald].
- 0.148              : Fixed VGA PEL shift register and putted start address update behind a timer (that updates at vblank time). Fixes horizontal scrolling with anything that uses it. Guess this crashes, let's fix it ( --> added m_vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vga_device::vblank_timer_cb),this));  ) [Angelo Salese].
- 0.147u1            : Fixed 256 colour SVGA modes when used by the gfxultra. Just renaming a few functions in gfxultra (video\pc_vga.c and isa_vga_ati.c). Made logerror output from 8514/A related functions optional (video\pc_vga.c). Bit more function renaming and variable shuffling. Moved 8514/A specific functions and variables to the ATI device, as the Mach8 is properly 8514/A compatible, and made the S3 device derived from the ATI device (instead of vice versa). Moved 8514/A and Mach8 implementations to separate devices. Fixed uninitialised structs causing issues with SVGA and 8514/A devices in debug builds [Barry Rodewald]. Used read8_delegate instead of read8_space_func for vga port read (drivers\calchase.c, gamtor.c, magtouch.c, midqslvr.c, pangofun.c, pcat_dyn.c, pcat_nit.c, photoply.c, pntnpuzl.c, queen.c, savquest.c, su2000.c, taitowlf.c, voyager.c and xtom3d.c). Made Cirrus SVGA card just another VGA implementation, and removed a need for additional parameter (drivers\calchase.c, gammagic.c, gamtor.c, magtouch.c, midqslvr.c, pangofun.c, pcat_dyn.c, pcat_nit.c, photoply.c, pntnpuzl.c, queen.c, savquest.c, su2000.c, taitowlf.c, voyager.c, xtom3d.c and indiana.c). Removed need for pc_vga_io_init also made accessors for linear access to VGA memory needed for some models. Some cleanup (video\pc_vga.c). Converted VGA to be multiple devices, this will require some cleanup in future. Moved structs to classes [Miodrag Milanovic].
- 0.147              : Fixed potentially uninitialized variable when building with MSVC. Fixed compiling with MSVC, code was probably wrong (video\pc_vga.c) [smf]. Added IBM VGA card [Carl]. Added preliminary ATi Graphics Ultra support. Added extended bits for display start and cursor start. Expanded cursor_start to UINT32 to accomodate (gfxultra). Fixed video memory paging (video\pc_vga.c). Fixed for blank screen after starting MS-DOS Editor or QBasic (gfxultra). Very basic implementation of the linedraw register, enough to pass the BIOS' test (gfxultra) [Barry Rodewald].
- 0.146u1            : Added DAC mask register operation in VGA [Angelo Salese].
- 0.145u1            : Fully rewritten VGA gc registers from scratch. Various changes, preliminary implementation of RGB888 (still not working, at all). Fixed vram size, fixed regression with at486 (MESS) and makes Alien Breed (MESS) vertical scrolling to work properly. Latched pel shift register in VGA mode for Alien Breed, H scrolling is still jerky for some reason. Added crtc protection mechanism. First batch of CRTC clean-up. Changed ET4K file name & ISA name properly. Nuked crtc.data array from standard VGA functions. Preliminary hook-up for proper vblank calculation [Angelo Salese]. Improved ET4000 RGB8 detection [Carl]. Work on ET4000 16bbp and 24bbp video modes [Carl].
- 0.145              : Fixed a VGA crash. Added blinking to text modes, fixed a color attribute register bug. Fixed double scan in text mode. Fixed a bunch of errors as seen in vgatest.exe. Fixed reading in read mode 1, might fix Street Games [Angelo Salese].
- 0.144u7            : Fixed VGA and VGA Double Scan / Maximum Scan Lines condition, and removed a bunch of kludges. First attempt at adding proper VGA refresh rates [Angelo Salese]. Some VGA cleanup and refactoring and exposing read/write handlers of pc_vga [Miodrag Milanovic]. Fixed VGA video [Judge]. Support for CGA emulation for VGA [Angelo Salese]. Fixed CGA port find regression [Miodrag Milanovic]. Avoid a freeze when the VGA crtc is not initialized faster than light [O. Galibert]. Fixed pc_vga start address in text mode [Barry Rodewald]. Major overhaul of VGA memory handlers, added monochrome emulation and fixed text banking while at it [Angelo Salese]. Tseng Labs VESA support [Angelo Salese]. Fixed VGA memory map writes [Grull Osgo].
- 0.144u6            : Angelo Salese fixed a bug with VGA mask line compare.
- 0.142u5            : Removed emu\video\pc_video.c/h.
- 0.138u2            : Added emu\video\pc_vga.c/h and pc_video.c/h. Mariusz Wojcieszek moved some common PC code to machine\pcshare.c and added VGA emulation from MESS.
- NOTES: VGA = Video Graphics Array
- DRIVERS (VGA): fruitpc.cpp, gammagic.cpp, midqslvr.cpp, pangofun.cpp, paokaipc.cpp, pcat_nit.cpp, queen.cpp, su2000.cpp and xtom3d.cpp
- DRIVERS (GAMTOR VGA): gamtor.cpp
- SOURCE: video\pc_vga.cpp



G3.91  S3 Graphics VGA

- 0.276              : Added virgevx_pci stub (S3 86C988 ViRGE/VX; pci\virge_pci.cpp). Added stub Serial Port implementation and retire s3virgedx_rev1_vga_device (video\s3virge.cpp) [Angelo Salese]. Hookup Leadtek WinFast 3D S600DX BIOS alt to virgedx_pci (pci\virge_pci.cpp) [Devin Acker].
- 0.266              : Initial steps for major structural refactoring. Flatten s3dvirge.s3d down to one struct (m_bitblt), get rid of src_stride and dest_stride fns, updated QA. RAMDAC runs in unpacked mode if streams processor disabled. Added primary streams stride override, fix Ubuntu flavor gfxs. Moved NOP logic in dequeue fn. Merged draw & command timers in one, simplify state logic, workaround GFX corruption issue. Refine a bit FIFO status. Base conversion to FIFO (video\s3virge.cpp) [Angelo Salese].
- 0.264              : Added pci\vision.cpp/h. Added 'S3 86C864 Vision864', 'S3 86C964 Vision964' and 'S3 86C968 Vision968' cards (bus\pci\vision.cpp). Start implementing new MMIO for Vision 968. Separated Vision864/964/968 from Trio64 and fixed SDD UVCONFIG.EXE detection. Fixed start address shift in extended video mode and heavy 'Prize Zone Gold' flicker and SDD scroll tests (video\pc_vga_s3.cpp) [Angelo Salese].
- 0.262              : Changed video\virge_pci.cpp to pci\virge_pci.cpp. Added interlace mode and fixed offset behaviour. Fixes 800x600 and 1024x768 basic drawing (video\pc_vga_s3.cpp). Moved new MMIO mapping to map_extra. Fixed Ubuntu-flavored & BeOS 3.x black screen when switching to display managers. Fixed BAR compliance (pci\virge_pci.cpp). Denote hack in background pen BitBlt (video\s3virge.cpp) [Angelo Salese].
- 0.258              : Added DPSDxax ROP to video\s3virge.cpp, fixed regression with Win98SE 256 colors [Angelo Salese].
- 0.257              : Changed isa\s3virge.cpp/h to video\s3virge.cpp/h. Moved s3virge out of bus/isa [Angelo Salese].
- 0.256              : Changed sourcefile to video\pc_vga_s3.cpp.
- 0.253              : Added 'S3 86C325 ViRGE PCI' and 'S3 86C375 ViRGE/DX PCI' device (video\virge_pci.cpp).
- 0.252              : S3 86C3xx ViRGE PCI: Fixed remapping, allow (MESS) pcipc with ibm5170_hdd:win98se to boot without hacks in 256 color mode. Hookup VGA ports to MMIO, makes HW mouse cursor usable. Update BAR fix to catchup lower address config (video\virge_pci.cpp). S3 86C3xx: Implemented DPna, DSna, DSno, DSPDxax and DSo ROP opcodes. Fixed device_reset inheritance, make s3d to start in idle state. Fixed source pitch stride. Make bitblt_colour_step / bitblt_monosrc_step a bit less verbose. Stride follows up what's reading it. Clip against de bit. Initialize pattern variable in mono mode. Fixed mistake with shift << 8 in 8bpp pattern path, fixes (MESS) Windows tooltips/Windows XP welcome setup screen. QA notes (isa\s3virge.cpp). Added Sn ROP for Windows 98 invert colors in Magnifier (isa\s3virge.cpp) [Angelo Salese].
- 0.245              : Moved unusually large (for a header) functions into .cpp from header (isa\s3virge.cpp) [Ryan Holtz].
- 0.229              : Added BIOS for S3 86C775/785 and ExpertColor M50-02 86C775 (both V.1.01.04) [jordigahan, ClawGrip].
- 0.222              : Simplify 8-bit handler signatures (video\virge_pci.cpp, s3virge.cpp, svga_s3.cpp) [AJR]. READ/WRITE macros removal (s3virge.cpp, svga_s3.cpp, virge_pci.cpp) [Osso].
- 0.220              : Plumbed out linear framebuffer support (isa\s3virge.cpp and svga_s3.cpp). Fixes graphics in (MESS) 'Analog 801' demoscene demo [Ryan Holtz].
- 0.218              : Make hardware cursor display correctly in 15bpp and 24bpp video modes for svga_s3 and s3virge (video\pc_vga.cpp). Get started on BitBLT support, gets Windows 3.1 usable with S3 Virge drivers (bus\isa\s3virge.cpp, video\virge_pci.cpp). Make hardware cursor display correctly in 15bpp and 24bpp video modes for svga_s3 and s3virge (video\pc_vga.cpp). Fixed height of mono pattern BitBLTs in 8 and 15/16 bpp (bus\isa\s3virge.cpp) [Barry Rodewald].
- 0.213              : Added video\virge_pci.cpp/h. Added PCI interface to S3 ViRGE and linear framebuffer support [Barry Rodewald]. Remove wrong warning about uninitialized variable (isa\s3virge.cpp) [yz70s].
- 0.211              : SVGA display parameter correction (bus\isa\svga_s3.cpp) [AJR].
- 0.196              : Use device_video_interface and configured screens instead of first_screen (isa\svga_s3.cpp) [AJR].
- 0.185              : Added 'Diamond Stealth 3D 2000 Pro', 'Number Nine 9FX Vision 330 (S3 764) Graphics Card', 'S3 ViRGE Graphics Card' and 'S3 ViRGE/DX Graphics Card' device (bus\isa\svga_s3.cpp).
- 0.154              : Set s3 and s3virge power-on strapping bits on reset, and allow them to be written (if unlocked). Prevent writing past the end of VRAM, should fix XF86_SVGA crashing (cirrus_vga_device mem_r/w) [Barry Rodewald]. Added Diamond Stealth 3D 2000 Pro card [Malice, Barry Rodewald].
- 0.153              : Moved mess\video\isa_svga_s3.c/h to bus\isa\svga_s3.c/h, mess\video\s3virge.c/h to bus\isa\s3virge.c/h and mess\video\cirrus.c/h to bus\pci\. Correct Trio64 video clock setting, based on datasheet. Correct S3 ViRGE dot clock calculation to match the Trio. Correct svga_s3 ID values, based on S3ID. Added derived s3virgedx device so that the Virge/DX can return the correct ID bytes. Also cleaned up clock calculation a bit. Added configuration registers for Trio/Virge chipsets. Are read-only for now. Added S3 "colour mode 8" to the Trio, correct divisor for 32bpp modes [Barry Rodewald].
- 0.148u5            : Made VGA offset calculation an overridable method, instead of a macro. Fixes display in XF86_S3. Added a little bit to svga_dm, but still needs a lot of work [Barry Rodewald].
- 0.148u4            : Setting the Mix to DST actually does draw pixels. Fixes background rendering in XF86_S3 (video\pc_vga.c). Added read/write registers, and implemented read masking in BitBLTs (used by XF86_S3). Made clipping rectangle checks against Destination X/Y when doing BitBLT (s3, mach8: video\pc_vga.c, isa_svga_s3.c and s3virge.c). Added MMIO registers for read and write masks (s3: video\pc_vga.c). Added bits 8 and 9 of VGA Offset register (s3, s3virge: video\pc_vga.c and s3virge.c) [Barry Rodewald].
- 0.148u3            : Added video\s3virge.c/h. Made S3 ID registers read from member variables. Added S3 ViRGE video card. Made a start at fixing up some of the S3 ViRGE VESA video modes. Moved s3virge to separate source file [Barry Rodewald].
- 0.147u1            : Added 'S3 Graphics VGA' device (video\pc_vga.c).
- 0.147              : Added mess\video\isa_svga_s3.c/h. Merge of MESS sources [Miodrag Milanovic].
- SOURCE: video\pc_vga_s3.cpp, pci\virge_pci.cpp, video\s3virge.cpp and isa\svga_s3.cpp


G3.92  ProMotion 3210

- 0.262              : Added pci\promotion.cpp/h and video\pc_vga_alliance.cpp. Added ProMotion 3210 PCI card stub and Alliance VGA core stub (pci\promotion.cpp, video\pc_vga_alliance.cpp) [VGA Legacy MKIII, Angelo Salese].
- NOTES: Alliance Semiconductor ProMotion 3210, ProMotion 6410, ProMotion 6422, ProMotion 6424, ProMotion aT24, ProMotion aT3d and ProMotion aT25.
- SOURCE: pci\promotion.cpp



G3.A   XGA

- 0.256              : Added video\pc_xga.cpp/h.
- 0.237              : Added 'IBM XGA Coprocessor' device. Added 'IBM XGA Coprocessor' skeleton (video\pc_vga.cpp) to konmedal020.cpp. Added XGA blits [Carl].
- NOTES: Extended Graphics Array (XGA)
- DRIVERS: konmedal020.cpp
- SOURCE: video\pc_xga.cpp



G3.B   SVGA

- 0.284              : Scaffold extended space access (video\pc_vga_paradise.cpp) [Angelo Salese].
- 0.281              : Allow external vclk2 selection. Make (MESS) teradrive to output a normalized ~60 Hz in Video mode (video\pc_vga_paradise.cpp) [Angelo Salese].
- 0.280              : (Try to) pull cnf15 high for wd90c11 graphics card. Refactor all cards to use ISA remap. Fixed wd90c33_zz going in MDA mode in ct486 BIOS menu (isa\svga_paradise.cpp). Hookup DDR callback for PR11 writes. Fixed (MESS) Teradrive and MegaPC going in MDA video mode (video\pc_vga_paradise.cpp). Glue in 16-bit ISA memory interactions with MD space and changed (MESS) Teradrive VGA to be romless (isa\svga_paradise.cpp) [Angelo Salese].
- 0.273              : Fetch configuration pins when entering VGA setup mode (video\pc_vga_paradise.cpp) [Angelo Salese].
- 0.272              : ET4000AX is a ISA16 card. Added ET4000/W32i variant (isa\svga_tseng.cpp) [Angelo Salese].
- 0.270              : Converted EGASW/CNF(15)-CNF(12) as externally settable pins (video\pc_vga_paradise.cpp) [Angelo Salese].
- 0.268              : Separate extended CRTC unlock by r/w (video\pc_vga_paradise.cpp) [Angelo Salese].
- 0.264              : Replaced svga_et4k default map with wd90c31_lr (MESS) (pc\pcipc_sis.cpp, isa\svga_paradise.cpp) [Angelo Salese].
- 0.263              : Added pci\wd9710_pci.cpp/h. Added base x86 interface for atirageiidvd_device (video\atirage.cpp). Placeholder for extended clock modes, reformat sequencer logging. Added extend QA notes. Documented remaining sequencer regs (video\pc_vga_sis.cpp). Added WD9710 Paradise Pipeline card (pci\wd9710_pci.cpp) [Angelo Salese].
- 0.257              : Added isa\svga_paradise.cpp/h, video\pc_vga_paradise.cpp/h and video\wd90c26.cpp. Moved SiS630 SVGA portion from machine\sis630_gui.cpp to video\pc_vga_sis.cpp. Added Paradise Systems PVGA1 ISA16 card. Added basic extended GC interface. Preliminary WD90C00 implementation. Added more (not working) wd90c00 dump and new ISA option for WD90C11. Preliminary implementation of WD90C11A and added basic Extended CRTC to WD90C00. Can setup VESA modes 100h to 104h. Bank bit 7 is actually used by Win 95 in 800x600 res. Added WD90C30. Removed m_ext_gc_view and use custom handlers in place. Added device stubs for WD90C31 and WD90C33. Converted (MESS) macpb180c to use a WD90C26 VGA device (video\pc_vga_paradise.cpp). Added PVGA1A-JK and WD90C90-JK variants. Fixed boot regression with PVGA1A. Added WD90C31-LR, WD90C31A_LR, WD90C31A_ZS and W90C33_ZZ ISA cards (isa\svga_paradise.cpp) [Angelo Salese].
- 0.256              : Hookup ATI Rage II + DVD variant to P5TX-LA board (video\atirage.cpp) [Angelo Salese]. Fixed uninitialized variable that was causing a crash on some builds (video\ati_mach32.cpp) [R. Belmont].
- 0.255              : Added video\atirage.cpp/h. Changed isa\mach32.cpp/h to video\ati_mach32.cpp/h. Extremely preliminary emulation of PCI ATI 3D Rage family SVGA chips. Hooked up ATI Rage II video to (MESS) Power Macintosh G3, you can now enter and interact with Open Firmware. Finished and tested GPIO implementation [R. Belmont]. Fixed -Wmaybe-uninitialized issue (video\atirage.cpp) [hap]. Added TVGA9000 ISA card (isa\svga_trident.cpp). Added earlier ColorImage ET4000AX variant and Kasan Hangulmadang-16 Korean variant ISA (isa\svga_tseng.cpp) [Angelo Salese].
- 0.245              : Added 'SiS 630 SVGA' device (machine\sis630_gui.cpp).
- 0.241              : Removed duplicate save state registration (isa\mach32.cpp) [Osso].
- 0.222              : Simplify 8-bit handler signatures (isa\mach32.h, svga_cirrus.cpp, svga_trident.cpp, svga_tseng.cpp, trident.cpp) [AJR]. READ/WRITE macros removal (isa\mach32.cpp, svga_cirrus.cpp, svga_trident.cpp, svga_tseng.cpp, trident.cpp) [Osso].
- 0.211              : SVGA display parameter correction (bus\isa\svga_cirrus.cpp, svga_trident.cpp and svga_tseng.cpp) [AJR].
- 0.199              : Moved memory mappings to remap routine (isa\svga_tseng.cpp) [yz70s].
- 0.196              : Use device_video_interface and configured screens instead of first_screen (isa\svga_cirrus.cpp, svga_trident.cpp and svga_tseng.cpp) [AJR].
- 0.194              : S3 hardware pointer colour select is now reset on reading CR45, as per documentation. ATI MACH8/MACH32: Limit sourcex/y to 11 bits, fixes MACH32 detection in bundled Win9x drivers. Mapped MACH32 hardware pointer registers. Added 8514/A compatible DAC registers, fixes I/O port conflict in DOS MACH32 utilities and 8ppp colours under Win9x. Added Scan To X command to MACH8, used by Win9x drivers to write cursor data. Get MACH32 hardware cursor to display. Correct MACH32 display of 16bpp video mode in Windows 9x (hardware pointer still needs work) [Barry Rodewald].
- 0.172              : Fixed potential crash when svga_s3 hardware pointer is at the edge of VRAM, and fixed viewport scrolling in Red Hat Linux / XF86_S3 [Barry Rodewald].
- 0.162              : Added non-writable area if VRAM bank is set past the end of available VRAM on the S3 Trio64 and Virge. S3 BIOSes will now correctly probe RAM size and store it in the strapping registers [Barry Rodewald].
- 0.161              : Added a bit more to the Cirrus SVGA extensions. Made a start on the Cirrus hardware pointer, fixed reading of the lock register (Touchstar Bonanza works again). Splitted Cirrus video devices to separate files (VGA, SVGA, GD5428 and GD5430). Cirrus WIP, Virtual Pool VESA and non-accel GD54xx drivers are playable. Made Cirrus ISA cards 16-bit, rather than 8-bit. Fixing some possible crashes, BitBLT destinations, fixing some errors in handling VGA CRTC registers and found using MFGTST [Barry Rodewald].
- 0.156              : Moved bus\pci\cirrus.c/h to bus\lpci\. Changed Trident ISA device to be 16-bit, which is likely more correct. Map Trident memory clock, video clock and LUTDAC registers [Barry Rodewald]. Added zero() to (s)vga_device: zeroes all private variables but vtbls. The vga.memory is resized to 0. svga_device::zero() does it all [Juergen Buchmueller]. Updated comments/TODOs about invalid vptr warnings (build\flags_clang.mak, bus\isa\s3virge.c, trident.c and video\pc_vga.c). Use vga_device::zero() in cirrus_vga_device::device_start() as well (video\pc_vga.c) [Oliver Stoeneberg].
- 0.155              : Added isa\svga_trident.c/h. Added hookup for Trident TGUI9680 video card. Fixed Mach32 and Mach64 crash when reading vblank state [Barry Rodewald]. Added video card BIOSes: S3 9503-62 (not working), Elsa Winner 1000/T2D, S3 ViRGE BIOS v1.00-10 and ATi mach64V1 113-34404-104 [rfka01, Barry Rodewald]. Added CLKSYN test register (SR17), gets stock Trio64V2/DX BIOS to boot (video\pc_vga.c). Changed 'Trident VGA' to 'Trident TGUI9680' and moved device into its own source file. Added ID register, banking and clock selection (isa\trident.c). Added Trident DAC command register, so that we can tell when in a 15 or 16 bit mode. Forced Trident doubleword offset when using an SVGA video mode, fixes display in Eggs Playing Chicken. Some Trident WIP, added CRTC offset bit 8 and start address bits 16-18. Extended 3d8/3d9/CR0E new mode SVGA bank size. BIOS now detects 2MB VRAM (but WIN95 is still clueless). Fixed Trident busy bit, added logging of 2D acceleration registers. Implemented basic bitblt and bresenham line functions. Added mono bitmaps generated by writing to VRAM. Added 2D acceleration support for 15/16/32bpp video modes to Trident (untested since XFree86 3.3 requires linear addressing, which in turn requires VLB or PCI support). Improved mono pattern drawing in Trident, fixing foreground colour, adding background colour and clipping it. Added Trident XOR drawing, added XNEG and YNEG reverse directions for mono pattern BitBLT. Improved Trident Bresenham line drawing, it now at least draws in the right direction. Added hardware cursor. Added programmable clock, previous clock select was for TGUI9440CXi and TVGA cards, still lacks a divisor for higher refresh rates, but up to 70Hz modes should be correct now. Hopefully found the clock divider bit used by the BIOS, refresh rates should now be pretty correct. Fixed programmable clock selection when running XFree86. Reworked Bresenham line drawing. It's better, but I'm still not convinced it's completely accurate. Trident MMIO WIP. To test with Win95, set the card ID to 0xe3 [Barry Rodewald].
- 0.154              : Added bus\isa\mach32.c/h. Added preliminary ATi Graphics Ultra Pro (Mach32) ISA video card. Added ATI mach64 ISA card [Barry Rodewald].
- 0.153              : Moved mess\video\cirrus.c/h to bus\pci\ [Barry Rodewald].
- 0.148u5            : Made VGA offset calculation an overridable method, instead of a macro. Fixes display in XF86_S3. Added a little bit to svga_dm, but still needs a lot of work [Barry Rodewald].
- 0.148u2            : Just a few minor updates to svga_s3 (video\pc_vga.c) [Barry Rodewald].
- 0.148              : A bunch of MMIO hooks for S3 card, used on Win 95 16-bit color mode. Fixed HW cursor color in RGB16 mode [Angelo Salese].
- 0.147u3            : Added S3 SVGA extra bits for Horizontal/Vertical VGA registers, re-enabled dot clock selection, and fixed it up a bit. 800x600x16bit in X11 is now usable (but still not correct) [Barry Rodewald].
- 0.147u2            : Correct S3 SVGA rendering of 15/16/32-bit colour modes. This allows X11 to display correctly in high-colour. It's still not perfect, however, but 640x480x64k works fine. Commented out dot S3 SVGA clock selection for now, as it caused issues with WIN95 [Barry Rodewald].
- 0.147u1            : Added extra extended start address and banking registers to S3 SVGA. Bit more function renaming and variable shuffling. Moved 8514/A and Mach8 implementations to separate devices. Fixed uninitialised structs causing issues with SVGA and 8514/A devices in debug builds [Barry Rodewald].
- 0.147              : Added mess\video\cirrus.c/h, isa_svga_cirrus.c/h and isa_svga_tseng.c/h. Converted svga_s3 to 16-bit ISA device. The S3 chipsets have 16-bit wide registers, and can only be used on AT systems. Preliminary work on S3 764. Added support for S3 SVGA WAIT bit on rectangle drawing, fixed rectangle width and height. Added bitblt function. Minor fixes relating to S3 SVGA text drawn at negative coordinates. Fixed S3 SVGA rectangle wait drawing to work under DirectX 5. Implemented S3 SVGA background and foreground mix registers. Fixed text rendering when full acceleration is set in WIN95. Implemented S3 SVGA pattern fills, fixed some BG/FG mix functions, fixed a bug when drawing wait rectangles in reverse direction. Added memory-mapped I/O ports, and various other updates. Made co-ordinates always relative to the start of VRAM. This fixes Virtual Pool using accelerated S3 video drivers. Added basic support for Bresenham lines. Added S3 SVGA Hardware Graphics Cursor. Works fine under Windows 95, allowing hardware acceleration to be set to full, but doesn't work right under Windows 3.1. Added vector line drawing and short stroke vectors (svga_s3/gfxultra) [Barry Rodewald]. Merge of MESS sources [Miodrag Milanovic].
- 0.145u1            : Some SVGA specific fixes [Angelo Salese]: Hooked up dummy functions for S3 SVGA card. First batch of S3 SVGA support. Added RGB16 for S3 video card, used by Grand Theft Auto title screen. Kaylee added basic wrapper for Diamond Multimedia (Cirrus Logic based) ISA SVGA.
- 0.145              : Implemented preliminary support for Trident SVGA cards, fixes graphics in California Chase loading screen [Grull Osgo, Angelo Salese]. Added ID [Angelo Salese].
- NOTES: SVGA = Super Video Graphics Adapter
- DRIVERS: (MESS)
- SOURCE: bus\isa\svga_cirrus.c, svga_trident.c and svga_tseng.cpp


G3.B1  Cirrus Logic GD54xx

- 0.275              : Rectify linear addressing enable (video\pc_vga_cirrus.cpp) [Angelo Salese].
- 0.273              : Replaced cirrus_define_video_mode with VGA arch recompute_params. Workaround crash for zorro\picasso2 and fixed bit 3 in blitting status (video\pc_vga_cirrus.cpp) [Angelo Salese].
- 0.264              : Added pci\clgd5446.cpp/h. Preliminary remap callback for gd542x (isa\svga_cirrus.cpp). Misc cleanups and bulk replace device naming (video\pc_vga_cirrus.cpp). Added Cirrus Logic GD5446 card (pci\clgd5446.cpp). Added start address bit 19 for GD5430+ (video\pc_vga_cirrus.cpp). Fixed pitch offset (video\pc_vga_cirrus.cpp) [Angelo Salese].
- 0.259              : Fixed graphics don't display properly in MegaTouch XL 6000 (video\pc_vga_cirrus.cpp) [Angelo Salese].
- 0.257              : Changed video\clgd542x.cpp/h to video\pc_vga_cirrus.cpp/h. Preliminary implementation of hidden DAC mode for Cirrus Logic CL-GD542x. Fixed misc\gambl186.cpp regression [Angelo Salese]. A collection of BIOS ROMs for different Cirrus Logic chipsets [rfka01]. Added CL-GD510/520 [rfka01, Vlask], CL-GD610/620-C [Vlask], CL-GD5320 [Vlask], CL-GD5401 [jvernet, chukaev.ru54, Vlask], CL-GD5402 [Vlask], CL-GD542x [rfka01, Vlask, douglar, SomeGuy, chukaev.ru54, Palcal], CL-GD54M30 [Vlask], CL-GD543x, [rfka01, BeginnerGuy, Vlask, Pirx], CL-GD5440 [Vlask],Diamond Speedstar PRO [Vlask], Diamond Speedstar 64, STB Nitro 64 [kixs] and Octek VL-Combo [hasat, aitotat].
- 0.222              : Simplify 8-bit handler signatures (video\clgd542x.cpp) [AJR]. READ/WRITE macros removal (video\clgd542x.cpp) [Osso].
- 0.163              : Fixed CLGD542X display of 16-bit video modes, added support for some acceleration features in 16-bit video modes [Barry Rodewald].
- 0.162              : Added system-to-video BitBLTs and fixed up patterned BitBLTs. Fixed shadowed variables. Fixed BitBLTs being short by one scanline, and correct colours used when using both patterns and colour expansion together. Added reverse direction BitBLTs, and improved colour-expanded pattern handling (still not quite perfect, though). Added transparency support, fixed some lockup issues with colour expanded system-to-VRAM BitBLTs. Fixed background and foreground colours in XFree86, which does not enable extended writes that the manuals say enable the extra bits in GR0/GR1 [Barry Rodewald].
- 0.161              : Added video\clgd542x.c/h. Added 'Cirrus Logic GD5428' device. Splitted Cirrus Logic SVGA video devices into separate files. No differences between them yet, other than chip ID. Cirrus WIP, Virtual Pool VESA and non-accel GD54xx drivers are playable. Added generic GD542x ISA card (GD5428 and GD5430). Hardware cursor is working, but other acceleration features still need a lot of work. Made a start at implementing extended write modes 4 and 5 [Barry Rodewald].
- DRIVERS: gambl186.cpp, mtouchxl.cpp, pcat_nit.cpp and photoply.cpp
- SOURCE: isa\svga_cirrus.cpp and video\pc_vga_cirrus.cpp



G3.C   MagicEyes VRender0 Video Engine

- 0.284              : Use templates and function pointer arrays for draw functions. Use device_memory_interface for external memory. Minor fixes in single color fill function. Use pal5bit/pal6bit functions for color field extraction (video\vrender0.cpp) [cam900].
- 0.281              : Updates and cleanups (machine\vrender0.cpp) [cam900].
- 0.255              : More accurate VRender0 pipeline inner workings (video\vrender0.cpp), fixes 'Donggul Donggul Haerong' split screen [Angelo Salese].
- 0.254              : Removed idle skip hack (it causes stability issues) (machine\vrender0.cpp) [David Haywood].
- 0.222              : READ/WRITE macros removal (video\vrender0.cpp and machine\vr0uart.cpp) [Osso].
- 0.217              : Initialized stuff in machine\vrender0.h [Osso].
- 0.215              : Correct pixel clock crystal value (machine\vrender0.cpp) [Vas Crabb].
- 0.214              : Added machine\vr0uart.cpp. Added 'MagicEyes VRender0 UART' device. Various improvements over Vrender0 based systems: Made some experimental work with menghong based HW, allowing 'Crazy Dou Di Zhu II' to boot and improving menghong colors. Internalized video and audio components inside the SoC. Wrote a preliminary UART subdevice. Made external video clock to be settable by the host driver [Angelo Salese]. Moved mame\video\vrender0.cpp to devices\video\, fixes Linux compiling [O. Galibert].
- 0.213              : Added machine\vrender0.cpp/h. Major refactoring of VRender0 SoC device: Improved encapsulation between video and machine SoC periperals. Split up HWs in individual files where they don't belong to Crystal System HW, makes future development easier. Untangled reads/writes to draw/display bankswitches from screen_update, now they can be unthrottled safely. Added CRTC screen raw parameters. Added DMA hold feature and clear irq on mask writes, specific for P's Attack. Improved Cross Puzzle flash loading, currently failing at POST for a SPU error [Angelo Salese].
- 0.168              : Allow VRender0 Video resolutions higher than 512x240 [Luca Elia].
- 0.154              : Converted VRender0 to use inline config [Fabio Priuli].
- 0.153              : Fixed bad graphics in Donggul Donggul Haerong (video\vrender0.c) [ElSemi].
- 0.150              : Modernized VRender0 video device [Osso].
- 0.137u4            : Converted VRender0 to be a device [Fabio Priuli].
- 0.93               : Aaron Giles fixed a VRender0 clipping bug that was lurking there (negative clipping wrapped to positive values -- noticeable at 32-bits).
- 0.90               : Added vidhrdw\vrender0.c/h. VRender Zero emulation [ElSemi].
- NOTES: MagicEyes VRender0 Video Engine, MagicEyes VRender0 SoC and MagicEyes VRender0 UART. The VRender0 is a very special 2D sprite renderer. The spec says it's based on 3D technology. The device processes "display lists" that contain pointers to the texture, tex coords and the step increments on x and y (dxx,dxy,dyx,dyy) allowing ROZ effects on sprites. It supports alphablend with programmable factors per channel and for source and dest color. The CRYSTAL SYSTEM using a VRender0 System on a Chip. The chip contains: CPU Core SE3208 (info at www.adc.co.kr) @ 43MHz, 2 DMA chans, 4 Timers, 32 PIO pins, PWM output, 32 channels wavetable synth (8bit linear, 16bit linear and 8bit ulaw sample format) and Custom 2D video rendering device (texture mapping, alphablend, roz)
- PCB: MESGraphics VRenderZERO (all-in-one main CPU/Graphics/Sound, QFP240) (Crysking)
- DRIVERS: crospuzl.cpp, crystal.cpp, ddz.cpp, menghong.cpp, psattack.cpp and trivrus.cpp
- SOURCE: video\vrender0.cpp + machine\vrender0.cpp



G4.    3D Graphic

G4.1   Polygon games

       Game                          Manufacturer         Source         Notes

       Tunnel Hunt                   Atari (1979)         tunhunt.c      The video hardware includes: box-on-box expansion in hardware (effectively one of the earliest polygon rendering games) for rendering the tunnel. Scalable sprites for targeting cursor and player shots. These can be tiled fullscreen for the shield (grid) effect. Hardware decompression and stretching of run-length-encoded motion-object data for enemy shots, ships and the title screen graphic and alphanumeric text layer.
       "I, Robot"                    Atari (1983)         irobot.c       M6809 (1.5MHz)
       Hard Drivin'                  Atari (1988)         harddriv.c     TMS34010 to render the polygons and graphics
       S.T.U.N. Runner               Atari (1989)         harddriv.c     TMS34010 to render the polygons and graphics
       F-15 Strike Eagle             Microprose (1990)    micro3d.cpp
       Galaxian^3                    Namco (1990)                        6-player laserdiscs polygon game
       Race Drivin'                  Atari (1990)         harddriv.c     TMS34010 to render the polygons and graphics
       Solvalou                      Namco (1991)         namcos21.cpp
       Starblade                     Namco (1991)         namcos21.cpp
       Steel Talons                  Atari (1991)         harddriv.c     TMS34010 to render the polygons and graphics
       Winning Run 91                Namco (1991)         namcos21.cpp
       Air Combat                    Namco (1992)         namcos21.cpp
       Battle of the Solar System    Microprose (1992)    micro3d.cpp
       Cyber Sled                    Namco (1993)         namcos21.cpp
       Ridge Racer                   Namco (1993)         namcos22.cpp
       Ace Driver                    Namco (1994)         namcos22.cpp
       Ridge Racer 2                 Namco (1994)         namcos22.cpp
       Air Combat 22                 Namco (1995)         namcos22.cpp
       Alpine Racer                  Namco (1995)         namcos22.cpp
       Avengers In Galactic Storm    Data East (1995)     deco_mlc.cpp
       Cyber Commando                Namco (1995)         namcos22.cpp
       Cyber Cycles                  Namco (1995)         namcos22.cpp
       Rave Racer                    Namco (1995)         namcos22.cpp
       Prop Cycle                    Namco (1996)         namcos22.cpp


- 0.283              : Cleaned up code (video\poly.h) [Vas Crabb].
- 0.282              : Added dpdy information to extents to be able to compute mipmap lod index per pixel (video\poly.h) [NoName]. Fixed portability issues in round_coordinate. Fixes bad graphics in Namco System 22 games like Ridge Racer (video\poly.h) [Seleuco].
- 0.236              : Added docs\source\techspecs\poly_manager.rst. Removed unused flags, expose object data array directly and added ability to register other poly_arrays. Minor naming/consistency cleanups (video\poly.h). Added docs for poly_manager [Aaron Giles].
- 0.234              : Removed video\polylgcy.cpp/h. Various improvements: Exposed poly_array class for broader use. Changed poly_array to intelligently determine maximum size. Added logic to track multiple "last" instances in poly_array. Extended logic to support up to 16m work items. Removed MaxPolys parameter from poly_manager template. Added Flags parameter to poly_manager template. Added POLY_FLAG_NO_CLIPPING flag to remove clipping code when not needed. poly_manager now supports a MaxParams value of 0. Made paramcount a template parameter for render_* functions. Added reset_after_wait() method to be overridden by derived classes. Switched to using std:: helpers instead of internal methods. Removed useless dependency on screen_device. TRACK_POLY_WAITS now produces more complete statistics. Removed legacy implementation of polygon renderer (video\polylgcy.cpp). 'Early out of waits' if no outstanding work (video\poly.h) [Aaron Giles].
- 0.203              : Initialize m_unit_bucket in constructor (video\poly.h) [yz70s].
- 0.201              : Bumped up the default number of scanlines per bucket (video\poly.h) [Ryan Holtz].
- 0.181              : Added method triangles_drawn to get private member m_triangles (video\poly.h) [yz70s].
- 0.157              : Compile fix from QMC2 (video\poly.h) [Miodrag Milanovic].
- 0.153              : Changed video\poly.c/h to video\polylgcy.c/h and video\polynew.h to video\poly.h [Oliver Stoeneberg].
- 0.137u2            : Make the parameter interpolation in poly.c more robust [O. Galibert].
- 0.120u4            : Removed video\polynew.c/h. Aaron Giles updated model2.c, taitojc.c and gticlub.c to use the new polygon routines. Deprecated the old poly.c and renamed polynew.* to poly.*. Unified poly.c callbacks so that tri and quad callbacks work the same way.
- 0.120u3            : Aaron Giles expanded polynew.c to support quad rendering. Converted midvunit.c over to using the new quad rendering, which fixes a number of rendering issues that have plagued the driver since the start. Added Z-clipping logic to polynew.c. Converted namcos22 over to using that code. Simplified namcos22 significantly, working in quads throughout the lower-level pipeline and then handing the results off to polynew.c. Updated model3.c to use the new poly code, and changed much of the low-level implementation to make things easier.
- 0.120u1            : Aaron Giles created new module polynew.c which combines triangle setup, rasterization and Voodoo-like multiprocessor support. Coverted Gaelco3D, Midway V-Unit, Namco System 22 and Voodoo drivers over to the new system. Added threadid parameter to work item callbacks. This allows for keeping per-thread information by the callbacks.
- NOTES: Polygon rendering
- DRIVERS: aleck64.cpp, atarisy4.cpp, chihiro.cpp, cobra.cpp, gaelco3d.cpp, galastrm.cpp, hng64.cpp, midvunit.cpp, midzeus.cpp, model2.cpp, model3.cpp, namcos22.cpp, namcos23.cpp, rollext.cpp, taitojc.cpp, taitotz.cpp, video\k001005.h and video\n64.h
- SOURCE: video\poly.h



G4.2   Sprites games

G4.21  Sega 16-bit hardware

- 0.277              : Got rid of simple_list and fixed_allocator (video\sprite.cpp) [Vas Crabb].
- 0.266              : Fixed a class memory access warning (sega\segaic16.cpp) [Vas Crabb].
- 0.246              : Changed sourcefile to sega\segaic16.cpp.
- 0.215              : Code cleanup, reorganization and decoupling [AJR].
- 0.210              : Moved palette shadow/hilight toggle bit function into palette handler (excpect hangon; it has external shadow/hilight toggle bit). Simplified some handlers. Fixed debugger issues and spacing. Use shorter/correct type values (machine\segaic16.cpp) [cam900].
- 0.199              : Added customized MCFG_DEVICE_ADD macros to video\sega16sp.h and video\segaic16.h [Ryan Holtz].
- 0.195              : Make sega_315_5250 sound read/write delegates standard device callbacks [AJR].
- 0.149u1            : Added 'Sega 16-bit Video' device (video\segaic16.c).
- 0.141u2            : Alex Jackson replaced anonymous timers used in video\segaic16.c, drivers\segaorun.c and drivers\segaxbd.c with allocated timers, making it possible to add save state support to these drivers.
- 0.139u2            : Treat unsupported read and write accesses (segaic16.c) to defined devices/memory as open-bus reads or unmapped writes instead of falling through to the memory-mapping registers [Phil Bennett].
- 0.138u2            : Atari Ace added some missing static qualifiers to MAME. Also, renamed some generically named exports from segaic16.c.
- 0.129u5            : Atari Ace fixed crash/freeze while starting games using segaic16.
- 0.128u6            : Atari Ace fixed the widely used segaic16 video core to no longer reference the global Machine.
- 22nd March     2005: There were several problems with Line of Fire. Particular that game, all of which are interesting, and none of which had anything to do with the CPU interleaving that I originally thought was the source of my troubles. In the end, it mostly came down to the divide chip. As I mentioned previously, the game will sometimes attempt to divide by zero. Now, the divide chip has flags to let you know that you've caused an error, but the game never reads them. It would then take the result of the divide-by-zero, look it up in a table, and use the resulting value in future calculations. The problem is that the table was only ~32 entries long, so when I tried returning 32767 as the result of a divide by zero, it read some random ROM location and used that instead of a valid value. To work around this, I am guessing that divide by zero either returns 0 or 1. I'll have to work with Charles to figure the exact details out. But all that served to fix was the fast/slow/fast/slow speed at which you moved through the level, and which eventually ended up hanging the game. Once that was all better, the game would hang right near the end of the first level. At least that part was consistent. First, though, I had to fix the jittery sprites. I was pretty sure there was no way this game would be that poorly done (though at the same time I think the Sega fanboys make a few too many assumptions that Sega would never have graphics glitches in their games). I first started guessing that the divide chip actually didn't do a full 32-bit by 16-bit divide, but rather maybe a 24-bit by 16-bit divide, or some other reduced accuracy version. This actually produced smoother results, but it screwed up a lot of other stuff too. Eventually I noticed that the value 0x8000 was being used as the divisor quite often, while at other times it was using values in the 0x7f00 range. If I treat those values as signed 16-bit values, then the 0x8000 would suddenly flip from +32000 to -32000, which seemed kind of odd. So I tried going back to a full 32-bit by 16-bit divide, but treating the values as unsigned, and suddenly things were much easier to look at. But back to the hang at the end of level 1. I eventually put a trace on both the CPUs right near the end of the level, in order to see what was happening. It turned out that the main CPU would execute some code, then jump backwards into the middle of an instruction. This is a clear sign that something seriously bad was happening. On a hunch, I tried loading up the Japanese version of the game and looking at the equivalent code. Turns out one word in the World version ROM was wrong. But if the ROM dump was bad, then it wouldn't have passed the memory test in service mode. The only other logical explanation is that there must be a small error in the decryption key for the World version. Hopefully "The Doctor" will figure that out for me. Related to the divide chip issue was the bug that made GP Rider behave strangely. My original divide chip implementation had us recomputing the results every time the dividend or divisor was changed. But it turns out (and is actually pretty clear from the schematics, now that I've looked at them again) that the divide is actually explicitly triggered by writing to a higher address. The reason this was important for GP Rider is that they would trigger one divide, and then load the dividend for the next divide before reading the result of the previous divide. With my original code, writing the dividend for the second divide was trashing the results of the first divide.
- 0.94u5             : Aaron Giles fixed several divide chip behaviors (segaic16.c), fixing Line of Fire and GP Rider (divide by zero just returns the divisor (needs to be verified), mode 1 divides are unsigned and divides are only triggered by a write with A4 set).
- 0.94u2             : Aaron Giles implemented Y-board sprite priorities (not fully understood, but seems to work), found missing 8th bit in Outrun/X-board sprite pitch, implemented Outrun/X-board road priorities according to logic dump from Leopardcats, hooked up road RAM double buffering that was missing for Outrun/X-board and disabled direct scanline mode for Outrun road, which doesn't support it (video\segaic16.c). Changed divide-by-zero case to return a value (machine\segaic16.c).
- 0.91               : Aaron Giles added support for 3 multiply chips and 3 divide chips. Fixed timer/compare chip implementation to match real PCB (machine\segaic16). Added tilemap flipping support and sprite flipping support for 16A and 16B sprites (video\segaic16).
- 0.90u4             : Aaron Giles cleaned up tilemap handling using the new user_data feature. Added pixel-accurate scaling to System 16B sprites (video\segaic16.c). Based on this knowledge, tweaked Hang On, Space Harrier, and 16A sprite systems. Fixed documentation on Hang On/Space Harrier road chip.
- 0.90u1             : Aaron Giles unified all memory mapping code and moved it into machine\segaic16.c, unified all tilemap, sprite and road code and moved it into video\segaic16.c and improved documentation on the various register layouts on the video side. Note that in the process, I broke the title screen animation for Laser Ghost, and there is now a 1-pixel column error on ddcrew's attract mode. These are known issues that I will try to address soon.
- 0.89u5             : Aaron Giles cleaned up the math chip emulation (machine\segaic16.c), should be much closer now.
- 0.89u3             : Added machine\segaic16.c/h. Sega System16 updates [Aaron Giles]: Xreated new machine\segaic16.c to hold non-video common hardware. Preliminary multiply/compare implementation moved there. Changed segaic_init_palette to take a number of palette entries.
- DRIVERS: segas16b.cpp, segaxbd.cpp and segaybd.cpp
- SOURCE: sega\segaic16.cpp


                 CPU      Tiles      Sprites   Priority  Color     SCPU  Sound                Other
  System C       68000    315-5313                       315-5242  Z80   ym3438               315-5296(IO)
  Space Harrier  68000x2                                 (c)       Z80   ym2203 pcm(b)
  System 16B     68000    315-5197   315-5196  GAL       (c)       Z80   ym2151 upd7759       315-5195
  After Burner   68000x2  315-5197   315-5211A GAL       315-5242  Z80   ym2151 315-5218      315-5250(a) 315-5248(x2) 315-5249(x2) 315-5275(road)
  System 18      68000    315-536x   315-536x            315-5242  Z80   ym3834(x2) RF5c68(d) 315-3296(IO) 315-5313(vdp)
  Galaxy Force   68000x3             315-5296+ 315-5312  315-5242  Z80   ym2151 315-5218      315-5296(IO)

  Hang-on hardware        : The first one. Two tilemap planes, one sprite plane, one road plane. The shadow capability doesn't seem to be used, the highlight/shadow switch in the 5242-equivalent is global for all colors.
  Space harrier hardware  : Similar to hang-on, with per-color highlight/shadow selection, and the shadows are used.
  System16a / Pre-system16: Space harrier without the road generator.
  System16b               : 4-layer tilemap hardware in two pairs, with selection between each members on the pairs on a 8-lines basis. Slightly better sprites.
  System18                : System 16b plus a genesis vdp.
  Outrun                  : System 16b with sprites with better zooming capabilities, plus a road generator able to handle two roads simultaneously.
  X-Board                 : Outrun with a better fillrate and an even more flexible road generator.
  Y-Board                 : New design, with two sprite planes and no tilemaps. The back sprite planes has a huge fillrate and the capability to have its frame buffer completely rotated. Also, it has a palette indirection capability to allows for easier palettes rotations. The front sprite plane is 16b.



G4.22  Sega 16-bit Video

- 0.215              : Moved remaining portion of sega_16bit_common_base (all to do with palettes) into video\segaic16.cpp [AJR].
- 0.157              : Added missing save state support to segaic16_video_device, fixes clone Quartet 2 (8751 317-0010) save state problem [Osso].
- 0.149u1            : Added 'Sega 16-bit Video' device (video\segaic16.c).
- DRIVERS: segahang.cpp, segaorun.cpp, segas16a.cpp, segas16b.cpp, segas18.cpp, segaxbd.cpp, segaybd.cpp and system16.cpp
- SOURCE: sega\segaic16.cpp



G4.23  Sega 16-bit Road Generator

- 0.266              : Fixed a class memory access warning (sega\segaic16_road.cpp) [Vas Crabb].
- 0.210              : Simplified handlers. Removed hardcoded tags and unnecessary pointer. Reduced unnecessary lines. Fixed debugger issues. Use shorter/correct type values (video\segaic16_road.cpp) [cam900].
- 0.199              : Added customized MCFG_DEVICE_ADD macros to video\segaic16_road.h [Ryan Holtz].
- 0.166              : Make a couple of things (FD1094 decryption) more friendly to multiple instances (drivers\segahang.c, segaorun.c, segas16a.c, segas16b.c, segas18.c, segas24.c, segaxbd.c, machine\fd1094.c, video\segaic16.c and segaic16_road.c/h) [David Haywood].
- 0.149u1            : Added video\segaic16_road.c/h. Added 'Sega 16-bit Road Generator' device. Split out the roadgen (drivers\segahang.c/h, segaorun.c/h, segaxbd.c/h, mame.mak, video\segahang.c, segaic16.c/h, segaorun.c and segaxbd.c) [David Haywood].
- DRIVERS: segahang.cpp, segaorun.cpp and segaxbd.cpp
- SOURCE: sega\segaic16_road.cpp



G4.24  Sega System24

- 0.230              : Fixed out-of-bounds access in sprite drawing with inverted clipping (could crash during Crack Down attract mode) [Vas Crabb].
- 0.214              : Implemented clip reverse y logic, fixes Crack Down pre-title screen sprite priorities (video\segaic24.cpp) [Angelo Salese].
- 0.199              : Added customized MCFG_DEVICE_ADD macros to video\segaic24.h [Ryan Holtz].
- 0.196              : Added xhout and xvout register callbacks (video\segaic24.cpp), and hooked them up to Model 2 driver, fixing 3D viewport positions [Angelo Salese].
- 0.195              : Kill tile32/char32 tranpolines (video\segaic24.h) [Angelo Salese].
- 0.71u3             : Fixed compile problems in vidhrdw\segaic24.c [Brad Oliver].
- 0.68               : Added vidhrdw\segaic24.c/h.
- NOTES: The odd one out hardware. Medium resolution. Entirely ram-based, no graphics roms. 4-layer tilemap hardware in two pairs, selection on a 8-pixels basis. Tile-based sprites(!) organised as a linked list. The tilemap chip has been reused for model1 and model2, probably because they had it handy and it handles medium res.
- DRIVERS: model1.cpp, model2.cpp, segam1.cpp and segas24.cpp
- SOURCE: sega\segaic24.cpp

                 CPU      Tiles      Sprites   Priority  Color     SCPU  Sound                Other
  System 24      68000x2  315-5292   315-5293  315-5294  315-5242        ym2151 dac           315-5195(x3) 315-5296(IO)
  System 32      V60      315-5386A  315-5387  315-5388  315-5242  Z80   ym3834(x2) RF5c68(d) 315-5296(IO)



G4.25  Sega System32

-  5th July      2005: Aaron Giles - System 32 is certainly a curious beast, and one of the most intriguing parts of the system is the mixer chip. The mixer chip is the bit that takes input from 8 different video sources - 4 tilemap layers, one text layer, one bitmap layer, one background layer, and one sprite layer - and determines which layer is visible for each pixel. Beyond that, it is also responsible for looking up the palette entry of that pixel and generating the final RGB values for it. Along the way, it has the capability to adjust the RGB values and perform some blending, along with a host of other wacky functions. In short, it's a mess, and rather difficult to understand. When faced with these kinds of situations in arcade hardware, it's best to try and "be the ball" - think like a piece of hardware, understand its capabilities, its inputs, its outputs, its clock speed, and try to come up with limitations on its behavior that can help explain what's going on. For example. It's been known for a while that the System 32 mixer chip has an alpha blending feature. In order to perform alpha blending, you need to take the RGB values of one pixel, apply a multiplier, and add them to the RGB values of a second pixel, after applying the opposite multiplier. It's also been known that you can turn on alpha blending for each layer, so that, say, two of the background layers are both alpha blended with the pixels underneath them. Now, if that's the case, then you should in theory be able to turn on alpha blending for all 8 layers if you wanted. Ah, but wait. For each layer, in order to do alpha blending, you would have to know that layer's RGB values. How do you get the RGB values? Well, you have to look them up in palette RAM. Hmmmm. That's a memory access, which requires a clock to the RAM chips to fetch the data. If I had to do 8 palette RAM lookups, I would need to use 8 clocks to perform 8 separate reads from palette RAM. But the input clock to the mixer is not fast enough to cram 8 memory accesses into it, especially given the maximum speed rating on the palette RAM memory chips. In fact, one memory access seems to be the most we can reasonably expect to get per pixel. So how can we even do alpha blending at all? Well, looking at the board, palette RAM is 32k long, separated into two 16k banks. That's interesting. At the time the boards were produced, it was certainly possible to use larger RAM chips, so why did they use two banks of smaller chips instead of one bank of larger chips? Well, as it turns out, the busses for each bank of chips go to different parts of the mixer. So the mixer can apparently access separate entries in each half of palette RAM independently. Okay, but how does this look from a software point of view? Tests have verified that I can read and write independent values across all 32k of palette RAM. Ah, but I hadn't enabled alpha blending! If I turn that bit on in the mixer, some interesting magic happens: I can read the full 32k of palette RAM normally, but all writes I make get automatically mirrored to the opposite 16k chunk. Which means that if I enable blending in the mixer, and then fill the low 16k of palette RAM, the upper 16k will automatically be filled with an exact copy. This means that the mixer can look up two pixel indexes and get their RGB values at the same time, by looking one up in the lower 16k and the other in the upper 16k. So we now have an explanation for how we can get two palette lookups per pixel. How do we limit it to 2, given that each layer could result in an alpha blend? Well, thinking about things in the absence of alpha blending, the mixer needs to figure out which pixel is "on top" out of all the layers. Then it will look up the RGB value of that pixel and output the result. It makes sense, then, that for alpha blending, it would figure out not only which layer's pixel is "on top", but also which layer's pixel is the 2nd from the top. Then, if alpha blending is enabled for the "on top" pixel, the mixer can alpha blend between the topmost and 2nd-to-topmost pixel. This isn't perfect, because it is assuming that the 2nd-to-topmost layer didn't also have alpha blending enabled, but in practice, this is exactly what the hardware does. As a final point, it's actually even more complicated than this. Each layer specifies with a bitmask exactly which other layers it can alpha blend against. So when the mixer figures out which layer's pixel is on top, and which layer's pixel is 2nd-from-top, it then has to see if alpha blending is enabled between those two layers specifically. If it's not, then the topmost pixel is displayed normally; otherwise, the alpha blend takes place.
- NOTES: There are still MANY issues with the system 32 driver, mostly video related. The system use a 5-layer tilemap hardware consisting of 4 independant rom-based layers with linescroll, lineselection, linezoom and window clipping capability and one simpler ram-based text plane. Mixed ram/rom sprite engine with palette indirection, per-color priority (thankfully not actually used). The sprite list includes jumping and clipping capabilities, and advanced hot-spot positioning. The mixer chip adds totally dynamic priorities, alpha-blending of the tilemaps, per-component color control, and some other funnies we have not been able to decypher.
- GAMES: F1 Exhaust Note (1991), Sonic The Hedgehog (1992), Jurassic Park (1994)
- SOURCE: drivers\segas32.cpp


                 CPU      Tiles      Sprites   Priority  Color     SCPU  Sound                Other
  System 32      V60      315-5386A  315-5387  315-5388  315-5242  Z80   ym3834(x2) RF5c68(d) 315-5296(IO)




G4.26  Sega ST-V

- NOTES: The ultimate 2D system. Even more advanced tilemaps, with 6-dof roz support, alpha up to the wazoo and other niceties, known as the vdp2. Ths sprite engine, vdp1, allows for any 4-point streching of the sprites, actually giving polygonal 3D capabilities. Interestingly, the mixer capabilities took a hit, with no real per-sprite mixer priority, which could be considered annoying for a 2D system. It still allowed some beauties like Radiant Silvergun.
- GAMES: Funky Head Boxers (1995), Die Hard Arcade (1996), Steep Slope Sliders (1998)
- SOURCE: machine\stvcd.c + scudsp.c and drivers\saturn.cpp






G4.3   Other 3D games

       TX-1                          Tatsumi (1983)       tx1.cpp
       Buggy Boy                     Tatsumi (1985)       tx1.cpp
       Top Landing                   Taito (1988)         taitoair.cpp
       Four Trax                     Namco (1989)         namcos2.cpp
       World Grand Prix              Taito (1989)         wgp.cpp
       Air Inferno                   Taito (1990)         taitoair.cpp
       Over Drive                    Konami (1990)        overdriv.cpp
       Double Axle                   Taito (1991)         taito_z.cpp
       Grand Prix Star               Jaleco (1991)        cischeat.cpp
       Racing Beat                   Taito (1991)         taito_z.cpp
       Road Riot 4WD                 Atari (1991)         atarig42.cpp
       Cool Pool                     Catalina (1992)      coolpool.cpp
       Ground Effects                Taito (1992)         groundfx.cpp
       Moto Frenzy                   Atari (1992)         atarigx2.cpp
       Outrunners                    Sega (1992)          multi32.cpp
       Stadium Cross                 Sega (1992)          multi32.cpp
       Suzuka 8 Hours                Namco (1992)         namcos2.cpp
       9-Ball Shootout               E-Scape (1993)       coolpool.cpp
       Racin' Force                  Konami (1994)        konamigx.cpp
       Road Riot's Reveng            Atari (1994)         atarigx2.cpp
       T-MEK                         Atari (1994)         atarigt.cpp
       Slipstream                    Capcom (1995)        system22.cpp
       Snow Board Championship       Gaelco (1996)        gaelco.cpp




G4.4   Textures games
- 28th October   2002: Aaron Giles sent in a TMS32031 CPU core and Williams V-Unit driver supporting Cruis'n USA and Cruis'n World complete with perfect sound emulation. P4 - 4 GHz or Athlon XP 4000+ recommended.
- GAMES: Midway V-Unit - Cruis'n USA (1994), War Gods (1995), Cruis'n World (1996), Off Road Challenge (1997)



G4.5   PSX GPU

- 0.250              : Modernized logging calls (video\psx.cpp) [AJR].
- 0.222              : READ/WRITE macros removal (video\psx.cpp). Initialized a couple of variables that were causing problems in DEVNOCLEAR debug builds [Osso].
- 0.218              : Set NTSC mode refresh rate to 59.82 for 240 and 59.94 for 480 screenheight. Fixes sync issues regarding beatmania IIDX games (video\psx.cpp) [hoholee12]. Refresh rate more decimals [hap].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.203              : Copy the textures STP bit, which improves (MESS) Silent Hill (Sony PlayStation) [smf].
- 0.202              : Added textured dot rendering. Fixed building with PSXGPU_DEBUG_VIEWER. Implemented transparent dots & lines, which fixes weird background color for score recap in Usagi and declare variables on first use. Implemented GPU STP draw and checking, which is used on Aquarush for water effects (video\psx.cpp) [smf]. Eliminated register_postload [AJR].
- 0.201              : Use device_palette_interface. Real hardware is connected with triple 8-bit video DAC; so allow RGB24 display. Some old GPU has only 16bit video output. Fixed debug mesh display [cam900].
- 0.199              : Added missing primitives [krom].
- 0.196              : Added device_video_interface and eliminated first_screen (video\psx.cpp) [AJR].
- 0.186              : Fixed compile with PSXGPU_DEBUG_VIEWER on [Angelo Salese].
- 0.167              : Fixed PSX GPU 24bit rendering of video sequences on MESS games such as GranTurismo and Digimon World 3 (video\psx.c) [Felipe Sanches].
- 0.153              : Fixed m_debug struct is uninitialised in a non-debug build (video\psx.c) [Barry Rodewald]. Fixed Clang compile (video\psx.h) [R. Belmont]. Fixed rendering issue in Psyvariar and Ray Crisis attract and removed some casting (video\psx.c). #if DEBUG_VIEWER instead of #if defined() (video\psx.c) [smf].
- 0.149u1            : Modernised psx palette_init [smf].
- 0.148u4            : smf added triangle culling, most noticeably fixes NASCAR Thunder 2004 (video\psx.c).
- 0.148u3            : Some changes to the psx mesh display for debugging (video\psx.c). Treat x & y coordinates as 11 bit signed, Ridge Racer Revolution loading game sets unused bits (video\psx.c). Treat x & y coordinates as 11 bit signed on dots, lines & rectangles. This fixes sprites in Zaynac X Zaynac (fc version) in MESS (video\psx.c). Tweak to the mesh display. Apply draw offset later to avoid the coordinates wrapping when truncated, which may fix recent polygon issues (video\psx.c). Band aid fix for Tobal No. 1, some graphics issues remain. VRAM & mesh viewer switch to 1024x1024. Truncate x & y coordinates in mesh before adding the draw offset (video\psx.c). Stop mesh being displayed all the time when MAME_DEBUG is set. psxgpu_device::update_screen clears the border area [smf].
- 0.148u1            : Changed the rendering back to quads as less people complained about the old graphical issues compares to the new ones. Clamp framebuffer reading to frame buffer coordinates. Not sure this is accurate, but it stops it crashing when negative coordinates are used (video\psx.c) [smf].
- 0.147u3            : Uses MCFG_SCREEN_UPDATE_DEVICE (video\psx.c) [smf].
- 0.142u5            : Moved mame\video\psx.c to emu\video\psx.c/h. smf converted PlayStation GPU to a device. PlayStation GPU splits 4 point polygons into triangles [smf].
- 0.142u3            : R. Belmont adjusted MDEC timing to avoid lockups (psx.c). Most FMVs now have fluent video.
- 0.130u1            : Minor video\psx.c changes that were needed for Ray Crisis [David Haywood].
- 28th June      2005: smf - It took about half an hour to get Tenkomori Shooting up and running as there were alot more protection checks than other System 12 games. There were a couple of problems with the graphics though. I spent some more time studying the protection checks, which allowed me to remove all the rom patches from the games that previously required them. Unfortunately this didn't help and it hasn't got Soul Calibur or Tekken Tag any closer to being emulated either. I started looking closer to home and I discovered it was using a little known feature of the PSX, that allows you to flip sprites. None of the unofficial GPU docs mention it at all and Pete Bernert has only supported x flipping in his GPU plugins, no game had used y flipping until now. After adding x & y flipping it looks much better. I had to verify which was which as they were always setting both or none. So after verifying the sprite flipping bits on a console I sent the information to Pete to add to his renderers. The only issue now was the intro didn't look quite right. This took a while to track down, eventually I realised that they were dma'ing 1792 bytes at a time from the mdec output. Each block is 512 bytes, which makes 3 and a half blocks. The code in MAME & most other emulators can't cope with this. With a fix for this issue the intro looks great too. It's not over yet. Although Pete had added the y sprite flip to the GPU plugins, the game wouldn't even boot in ZiNc. It took alot of tracing and comparing to MAME, but I eventually found it. I had to retrofit the MDEC fix onto ZiNc's MDEC decoder as well.
- 0.94u4             : smf fixed bugs in PSX texture window (pitch in libero grande & playfield in aquarush).
- 0.78               : PSX core improvements [smf]. Fixed MVMVA disassembly, SWC bit in SR is ignored, fixed MVMVA with LM bit set, added SQR & CC opcodes, added preliminary looped DMA detection, improved root counter emulation, improved SIO emulation, preliminary PSXSPU emulation, preliminary screen flipping / blanking support, added GPU packet 41, 52 & 77, Supports uploading 1024 pixel wide textures and esetting GPU sets default texture window.
- 0.71               : Added vidhrdw\psx.c, machine\psx.c and includes\psx.h.
- PCB: CXD8514Q, CXD8538Q, CXD8561CQ, CXD8561Q, CXD8654Q (Sony GPU, QFP208)
- DRIVERS: konamigq.cpp, konamigv.cpp, ksys573.cpp, namcos10.cpp, namcos11.cpp, namcos12.cpp, taitogn.cpp, twinkle.cpp and zn.cpp
- SOURCE: video\psx.cpp + machine\psx.cpp



G4.6   3dfx Graphic

G4.61  Voodoo

- 0.263              : Fixed Voodoo 1 PCI default values, allows SiS 85C496 chipset to detect card (video\voodoo_pci.cpp) [Angelo Salese].
- 0.259              : Use util::sext and rotate inline (video\voodoo_render.cpp) [AJR].
- 0.243              : Changed vsync counter to start immediately after vblank. Based on documentation of vretrace register (video\voodoo.cpp) [Ted Green].
- 0.235              : Address minor coverity complaints [Aaron Giles].
- 0.234              : Added video\voodoo_regs.h and voodoo_render.cpp/h. Removed video\vooddefs.ipp and voodoo_rast.ipp. Major Voodoo rewrite: Changed to use modern poly.h instead of polylgcy.h. Moved helper classes into separate voodoo namespace. Derived device classes from video_device_interface. Split classes so that later versions derive from earlier versions. Created device maps to be directly included. Redesigned register mapping to use helper classes and delegates. Rewrote rasterizers to use C++ templates instead of macros. Added logic to compute equations for color/texture combine units. Added special generic identity-texel rasterizer cases. Removed pipeline stalls on texture and palette changes. Removed pipeline stalls on most all parameter changes. Generally re-thought and cleaned up logic throughout. Parameterized cycle stealing on status reads; updated all existing voodoo consumers to configure it as it was before. Restore some cycle stealing on vretrace to allow San Francisco Rush to boot. Increased vretrace cycles to 2 so mace will boot again. Added missing rasterizers for later gtfore games. Removed outdated comments. Improved LOD calculation accuracy. Removed stw_helper as any benefit it provides is within the noise. Improved pixel pipeline throughput for LFB writes. Helps gtfore and related games. Improved fidelity of synchronization points. Added synchronization back to NOP to fix flicker in gtfore06. Fixed dither subtraction. Fixes squares around balls in Virtual Pool. Return 0 on invalid reads (video\voodoo.cpp), seems to fix Funky Ball. Improved logging of unexpected accesses to include register name [Aaron Giles].
- 0.233              : Fixed Hornet games POST crash (video\voodoo.cpp) [Ville Linde]. Eliminated remaining uses of auto_alloc and friends (video\voodoo.cpp and video\polylgcy.cpp) [Aaron Giles].
- 0.224              : Disabled debug statistics popup (video\voodoo.cpp) [Ted Green].
- 0.223              : Disabled backbuf debug key (L), it interferes with player 3 default controls. Only flag texture controls as changed if they are actually changed (video\voodoo.cpp). SSE use shift left by 8 instead of floating point multiply by 256 for perspective correction calculation (video\vooddefs.ipp and voodoo.h). Fixed outdated missing MAX macros used for statistics (video\polylgcy.cpp) [Ted Green].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.218              : Eliminated auto_alloc [AJR].
- 0.217              : Some cleanup and fixes. Hopefully enough to stop it from crashing when device memory isn't pre-cleared [Vas Crabb].
- 0.215              : Changed video\vooddefs.h to vooddefs.ipp and video\voodoo_rast.hxx to voodoo_rast.ipp.
- 0.210              : Simplified handlers [cam900].
- 0.206              : Removed MCFG macros (video\voodoo.h and voodoo_pci.cpp) [Osso].
- 0.204              : Mark frame buffer as changed after direct LFB write (video\voodoo.cpp). Fixes missing text during NBA Showtime Gold power on tests [Ted Green].
- 0.202              : Changed readback value of PCI config 0x40 based on Voodoo card type (video\voodoo_pci.cpp). Fixes NFL Blitz hangs on a black screen if the power on self test is enabled. Misc cleanup from MCFG removal [Ted Green].
- 0.199              : Reinstate texture address masking. Fixes segmentation fault in War: The Final Assault [Ted Green].
- 0.198              : Use device finders instead of machine().device [Ryan Holtz]. Deal with needing to be able to configure screen/CPU or set them at start in a safer way (video\voodoo.cpp) [Vas Crabb]. Created devices for each of the voodoo PCI cards [smf].
- 0.197              : Fixed vsync timing and removed anonymous timer [Ted Green].
- 0.196              : Added rasterizers for cartfury, roadburn, sfrushrk and warfa (video\voodoo_rast.hxx) [Ted Green].
- 0.194              : Calculate screen size and timing for vegas.cpp driver using Voodoo CRTC and PLL registers. Use CRTC registers for vblank start (video\voodoo.cpp) [Ted Green].
- 0.193              : Set number of SGRAM chips to 2 for 16M cards [Ted Green].
- 0.192              : Use SSE routines for texture perspective correction. Suppress function-like macro expansion for MSVC [Ted Green].
- 0.191              : Use optimized routine to get color data (video\vooddefs.h). Use table lookup for RGB565 conversion (video\vooddefs.h). Added some code optimizations. Reorganized a few function calls to make profiling easier (video\vooddefs.h, video\voodoo.cpp). Incorporated some more SSE optimizations (video\rgbsse.h). Check for starting x outside of clipping rectangle and fix clipping xstop (video\vooddefs.h) [Ted Green].
- 0.190              : Removed wrapping after y origin conversion so that proper y-clipping is performed (video\vooddefs.h and voodoo.cpp). Fixes pool cue wrapping out of top the screen in Virtual Pool. Changed 2x2 dither matrix values. Allows ITEagle driver power-on video memory tests to pass (video\voodoo.h). Fixed depth buffering for Voodoo 2 cards and greater (video\voodoo.cpp). Declare scale_imm_and_clamp as inline to ensure that it compiles as fully inlined in voodoo rasterizers (video\rgbsse.cpp) [Ted Green].
- 0.189              : Updated comments for PCI config registers (video\voodoo_pci.cpp) [Ted Green].
- 0.188              : Fixup logging and implement actual vRetrace and hvRetrace functions [Ted Green].
- 0.187              : Calculate dither pointer when needed for fogging. Fixes graphics crash in San Francisco Rush 2049. Separate vblank (external) and pci interrupt (internal) callbacks. Write register data to intrCtrl [Ted Green].
- 0.186              : Added save states to Iteagle driver (video\voodoo_pci.cpp). Added additional PCI configuration registers for Vegas support [Ted Green]. Some more Voodoo cleanup [Vas Crabb].
- 0.185              : Changed multi base address selection to fix Funky Ball textures (video\voodoo.cpp). Reverted texture base address calculation to fix seattle driver [Ted Green].
- 0.175              : Rasterizers for Gradius 4 (video\voodoo_rast.hxx) [Ville Linde].
- 0.174              : Changed video\voodoo_rast.inc to voodoo_rast.hxx. Prep work for GPU acceleration. Added default PCI BAR locations (video\voodoo_pci.cpp). Stopped blocking of non-fifo'd register writes (video\voodoo.cpp). Fixed up PCI VGA legacy register mapping [Ted Green].
- 0.170              : Added video\voodoo_rast.inc. Shuffle some code around, move included code to .inc file, easier to read / understand than the self-include. also kill off the old rasterizer path, the new one seems to work fine, so it's essentially dead code, hopefully nobody has an issue with this [David Haywood].
- 0.164              : Added INLINE before ATTR_FORCE_INLINE (video\vooddefs.h). Converted rasterizer path to use rgbaint_t types. Switched to new reciplog function (video\vooddefs.h). Converted entire pixel pipe path to use rgbaint_t types (video\voodoo.c). Added define for turning off cycle eating during regiser reads [Ted Green].
- 0.163              : Added some custom RASTERIZER_ENTRY lines for Golden Tee Fore! series, seems to help with performance when lots of transparencies are used [David Haywood]. Re-organized macros into function calls to help in optimization identification (video\vooddefs.h). The old macros can still used by setting USE_OLD_RASTER to 1. Default to old rasters until new are verified. Made new functions use SSE2 implementation. Added immediate add and mult add functions (video\rgbgen.h). Added SSE2 implementation of immediate add and mult functions (video\rgbsse.h). Added comments for rasters (video\voodoo.c). Clean up rasters for gtfore. Fixed Voodoo compile for 32-bit. Small correction in genTexture (video\vooddefs.h). Separate direct fb write to help performance (video\voodoo.c). Stop trying to read from null pointers (video\vooddefs.h) [Ted Green].
- 0.162              : Fixed Voodoo direct LFB reads from PCI memBase1 (non-3D). Fixed depth selection for pixel pipeline write. Fixed depth selection for rasterizer. Fixed depth biasing for fog selection. Minor fix for color expansion in rasterizer. Minor initialization changes so that address masks are correct. Added different Voodoo card types and configuration options (video\voodoo_pci.c). Fixed voodoo_1 PCI initialization. Added pre-fetchable flag to BAR [Ted Green].
- 0.161              : Attempt to fix LFB pipelined pixel write in Voodoo and fixed fogmode lookup (video\voodoo.c and vooddefs.h) [Ted Green].
- 0.155              : Fixed Voodoo 3D graphics have no palette in hangplt and thrilld (video\vooddefs.h). Reverted r31185 in video\voodoo.c (Passing of attotime as const references). This fixed emulation hangs in gauntdl and gauntdl24 after initialization [Phil Bennett]. Added support for writes to trexInit1 register, to return TMU configuration data [Peter Ferrie].
- 0.154              : Fixed an edge case where CMDFIFO execution would get stuck if the first word in CMDFIFO buffer is written out of order [Ville Linde]. Fixed texture with alpha channel is not drawn properly in gauntdl, gauntdl24, gauntleg and gauntleg12. Fixed alpha test to run on the alpha combiner output and not on a_other. Do the test before the color combiner steps to potentially save some effort (video\vooddefs.h) [Phil Bennett]. Voodoo modernization. Fixed Viper driver regression (video\voodoo.c). Converted Voodoo to DEVCB2. Removed unused config struct [Miodrag Milanovic]. Fixed typo in Voodoo (video\vooddefs.h) [Aaron Stover].
- 0.148u4            : Voodoo is using now device callbacks and some minor cleanups in few drivers (video\voodoo.c/h, vooddefs.h, drivers\funkball.c, gticlub.c, hornet.c, magictg.c, nwk-tr.c, seattle.c, vegas.c and viper.c) [Miodrag Milanovic].
- 0.148              : Added Voodoo3-specific targets for cmdfifo packet type 5 [Ville Linde].
- 0.147u1            : Fixed potential out of array access in src\emu\video\voodoo.c logerror() (MAME crash when try to read the voodoo region) [Oliver Stoeneberg].
- 0.147              : Added '3dfx Voodoo Graphics' device.
- 0.146u5            : Fixed build error, something about ui_show_mouse is declared void that I couldn't figure out but it's not needed anyway (video\voodoo.c) [Phill W.].
- 0.131u4            : Aaron Giles added new file devtempl.h which can be used to generate the DEVICE_GET_INFO function. Updated all the Namco I/O devices to use this, along with the 6821PIA and Voodoo.
- 0.128u6            : Voodoo devices now require a CPU to be defined in the configuration in order to know whom to steal cycles from or stall when FIFOs get full. Updated all voodoo users to specify one [Aaron Giles].
- 0.125u7            : Aaron Giles converted Voodoo into a proper device. Updated drivers accordingly. Added save state support to the Voodoo emulator. Fixed poor default CLUT handling in the Voodoo driver.
- 0.123u5            : Voodoo now takes a device_config for the screen [Zsolt Vasvari].
- 0.122u5            : Simplified Y-unit DMA rendering, fixing bugs and removing the macro voodoo [Aaron Giles].
- 0.121              : Atari Ace fixed bug in Voodoo statistics accumulation.
- 0.120u1            : Couriersud and Aaron Giles improved multiprocessor Voodoo performance by reducing contention during rendering. Extended the system to allow for more overlap between rendering and emulation.
- 0.120              : Aaron Giles made several more traditional optimizations to the voodoo emulations, gaining a few percent improvement.
- 0.119u4            : Aaron Giles updated Voodoo code to use the new work functions. It now queues small scanline chunks as independent items rather than using shared items. Updated code to also copy some parameters to allow for greater overlapping of emulation and rendering.
- 0.119u3            : Aaron Giles changed the 3dfx Voodoo emulation code to take advantage of the new threading mechanisms. It now creates a work queue with the WORK_QUEUE_FLAG_MULTI flag set, and uses shared work items to spread rasterization work across multiple processors. Note that this support should be considered experimental; under some circumstances it is known to deadlock. If you encounter problems, set OSDPROCESSORS to 1 to effectively produce the previous behavior. Added new work item flag WORK_ITEM_FLAG_SHARED. When specified on a work item that is queued to a work queue created with the WORK_QUEUE_FLAG_MULTI hint, it means that all threads will be dispatched to process the one work item, instead of the first thread removing it. These "shared" work items are only considered complete when all processing threads have returned [Aaron Giles].
- 0.119u1            : Aaron Giles fixed Voodoo video timing according to the manual, including blanking periods and vsync interrupts. This makes Carnevil and some other games run once again at their proper speed. Updated Voodoo drawing code to track changes to the front buffer and allow skipping unrendered frames for more even framerates.
- 0.114u2            : Ville Linde hooked up vblank interrupt to Voodoo in all Voodoo-based games.
- 0.113u3            : Aaron Giles fixed bug in voodoo emulation that caused improper framerates to be computed.
-  8th April     2007: Ville Linde - I fixed some multi-processor issues in the SHARC core, and some Voodoo-related issues in the NWK-TR/Hang Pilot graphics board emulation. As a result, Hang Pilot sprung to life in its whole 3D glory. There seems to be some texture problems still to be fixed though.
- 0.102u5            : More Voodoo updates [Aaron Giles]: Fixed overflow in Voodoo 1/W calculation that messed up some textures. Added missing color combine mode used by Gauntlet Dark Legacy.
- 0.102u4            : More Voodoo updates [Aaron Giles]: Fixed bug that trashed fbzMode when the fogMode was changed. Added preliminary Voodoo 2 support; Gauntlet Legends works again. Changed float-to-int conversion to be done manually.
- 0.102u3            : More Voodoo updates [Aaron Giles]: Added support for CLUT/gamma ramps; enables fade in/out effects. Changed stall callback to notify both start and end of stalling. Decreased bilinear resolution to 4 bits for Voodoo 1. Fixed statistics and added some new ones. Now properly masking off unsupported bits for earlier chipsets. Fixed NOP command so it doesn't always reset statistics. Fixed bug that caused the refresh rate to never be updated. Fixed 16-bit writes to the frame buffer. Fixed crashing bug after resetting the chip. Added support for Voodoo 2's new fog, colorpath and chromaRange modes. Added correct wrapping for ARGB, W and Z values. Fixed bug where depth was written to the Z buffer without bias. Now aggregates shorter commands to reduce the number of context switches.
-  4th December  2005: Aaron Giles - So I thought I had everything figured out. I found a nice depth buffer bug that fixes numerous problems in the Voodoo games (and which happened to be there in the old implementation as well). I figured out the weird alpha blending problem. And the only thing that was left was understanding why Carnevil was no longer rendering its polygons correctly relative to the background movie. I looked everywhere for the problem, and it turned out to be much more subtle than I realized. It turns out that a number of the games use the DMA functionality of the Galileo GT64010A chipset to send data to the Voodoo. This actually makes a lot of sense. The Voodoo has a limited size FIFO where the data goes in, and when that is full, whoever is sending the data has to stall until the Voodoo has had a chance to finish whatever it was backed up doing. Far better to let the DMA system stall than letting the main CPU stall when it could be doing real work. In the old implementation, I made all commands to the Voodoo complete instantly. This meant that any DMA transfer, no matter how long, finished instantaneously, even if it was rendering tons and tons of polygons or clearing the screen. In the new implementation, I changed the code to actually approximate the amount of time each polygon and screen clear takes. The problem with this is that DMAs no longer complete instantly, and this has revealed a subtle problem. Many of the games kick off a nice long DMA to the Voodoo and let it complete asynchronously while the main CPU is off busy doing other things. The problem is, there is code in most of the games that also directly accesses the Voodoo without checking to see if there is still a DMA in progress. When this happens, new commands were being inserted into the rendering queue at the wrong spot. The most obvious side effect was in Carnevil, where they would write a command in the middle of a DMA that turns off depth buffering, meaning that all subsequent triangles were rendered without doing any depth comparisons. The trick is figuring out what the behavior should be. I've tried hacking it so that if the CPU writes to the Voodoo while the DMA is in progress, then the CPU stalls until the DMA completes, and only then does the write go through. This works but introduces other glitches in the system. So now I have to come up with another theory.
- 0.102u2            : Added video\vooddefs.h. Removed vidhrdw\vooddraw.h, voodlfb.h, voodrast.h, voodregs.h, voodrgen.h and voodrx86.h. Rewrote the Voodoo emulation code to be more accurate to the original [Aaron Giles]: Support for multiple simultaneous boards (hello Silent Scope). Pixel-pipelined framebuffer accesses now work. Alpha buffer operations now supported. Triple buffering now supported. Proper memory allocation and handling based on configuration. Proper FIFO handling, including low/high water marks and stalling. Approximate timing calculations based on quoted fill rate specs. Detail textures implemented. All math is done in fixed point. Proper edges calculated for polygons (stars appear in Gradius 4 now). Much easier to add specific rasterizers now. This is a work in progress; some stuff is not quite right yet. Voodoo 2 emulation is completely broken.
- 28th November  2005: Aaron Giles - I've never been quite happy with how the Voodoo emulation code ended up. It's a pretty big system to emulate, and in order to get things working quickly, I took several shortcuts. I ignored a few features (detail textures, trilinear filtering, alpha buffers), simplified the math (using floating point, even though the original works in fixed point), cheated on the PCI interface (did not fully emulate the FIFOs), and faked the timing (completely ignored it, that is). This was expedient toward getting the first games up and running, but now it's time to go back and do it right. So I'm rewriting everything from scratch. Fortunately, I'm mostly done. I still have to add fogging, fix a few precision issues with far-away textures, and correct a few other glitches before it's ready. But the code is much simpler and better organized, and operates more closely to the original. Which brings up another point: I recently acquired a Voodoo 2 card for my "oldie" PC (thanks, Tim!), which I'm using to verify some of the behaviors. Although I won't claim perfect pixel accuracy, this new version should be much closer. The new Voodoo will be in time for 0.102u2, but Voodoo 2 emulation is completely busted at the moment and will have to be brought up to the new system afterwards. One step at a time...
- 0.102u1            : Aaron Giles fixed some minor problems with the LOD calculations in the Voodoo driver.
- 0.102              : Aaron Giles implemented pixel-accurate dithering in the Voodoo emulation.
- 0.101u5            : Added video\voodrx86.h and voodrgen.h. Aaron Giles added very experimental rasterizer generator for the Voodoo emulator, which generates X86 assembly blitters optimized for each case. Unfortunately, it doesn't help performance much and they are still too buggy so they are disabled for now. Enable them in the makefile. Made some of the hack optimizations runtime enableable in the Voodoo emulator, and added a frameskipper. Use Ctrl+1-6 to control frameskipping, Ctrl+F/H/Q to run at full/half/quarter resolution.
- 0.88               : Aaron Giles fixed Voodoo code broken by cleanup in 0.87u3.
- 0.84u2             : Added vidhrdw\vooddraw.h, voodlfb.h, voodrast.h and voodregs.h. Removed vidhrdw\voodblit.c. Aaron Giles refactored the Voodoo code, fixing several errors in the LOD calculations and the Voodoo 2 command FIFO.
- 0.82u2             : Aaron Giles cleaned up Voodoo logging. All stats now accessible via the backslash key. Got rid of ugly red/blue swap hack. Fixed missing truncation on vertex coordinates (fixes vaportrx graphics). Added support for alternate LFB write modes.
- 0.81u5             : Aaron Giles added full memory FIFO emulation. Removed hack for fastfill operations after a buffer swap. Added compile time option to reduce the resolution. Added client callbacks for VBLANK synchronization. Cleaned up handling of statistics and debugging info. Added optional R/B component swapping (for vaportrx). Fixed crashing problems when executing Midway POSTs. Now dynamically computing refresh rate based on hSync/vSync registers.
- 0.77u3             : Aaron Giles added code to clip the Voodoo vertexes to 1/16th of a pixel increments, fixed writes to the palette RAM on the Voodoo, fixed small errors in the Voodoo rendering when bilinear filtering and fixed handling of local alpha blending on the Voodoo.
-  5th December  2003: Aaron Giles - Turns out that California Speed revealed a few bugs in my 3dfx emulation. Bilinear filtering was adding too much error to allow for chroma keying, which is used a whole bunch. There was also a misunderstanding in how the "a_other" term was computed, which prevented all FMV sequences from displaying anything. And finally, this is the first game to use palettized 8-bit textures, and there was a bug in how the palettes were uploaded. The upshot is the game still crashes, but it looks much prettier along the way! I also spent a little bit of time looking at the Vegas sound system, which has some quirks of its own....
- 0.77               : Added vidhrdw\voodoo.c/h and vidhrdw\voodblit.c. 3dfx Voodoo Graphics SST-1 emulator [Aaron Giles].
- GAMES: Atari - Mace: The Dark Age (1996), San Francisco Rush (1996), Vapor TRX (1998); Midway - NFL Blitz (1997), CarnEvil (1998)
- DRIVERS: funkball.cpp, gticlub.cpp, hornet.cpp, iteagle.cpp, magictg.cpp, nwk-tr.cpp, savquest.cpp, seattle.cpp, vegas.cpp and viper.cpp
- SOURCE: video\voodoo.cpp



G4.62  Voodoo 2

- 0.264              : Fixed Voodoo 2 PCI config values (video\voodoo_pci.cpp) [Angelo Salese].
- 0.263              : Hookup Voodoo 2 card to Game Magic (misc\gammagic.cpp) [Angelo Salese].
- 0.234              : Added video\voodoo_2.cpp/h.
- 0.190              : Fixed depth buffering for Voodoo 2 cards and greater (video\voodoo.cpp) [Ted Green].
- 0.187              : Extend PCI interrupt support to Voodoo 2 and above [Ted Green].
- 0.162              : Added different Voodoo card types and configuration options (video\voodoo_pci.c) [Ted Green].
- 0.146u3            : Fixed video dimensions register on Voodoo 2. Fixed the rest of the video timing registers to have one extra bit [Ville Linde].
- 21st December  2005: Aaron Giles - Been taking another look at the Vegas drivers again now that the Voodoo 2 emulation is working. Gauntlet Legends was working again in 0.102u4, which is a good sign. A couple more fixes and Gauntlet Dark Legacy was working again - at least as well as it had been before, which is to say fine until you actually got in-game, at which point all the environment graphics were drawn all-black. Looking into this problem a bit more revealed that the Dark Legacy engine had added light maps to the rendering, using a multiplication between two textures to produce the final result. The Voodoo rasterizers support this just fine, but what was new is that they were now using a new mode in the Voodoo 2 which specifically selects the texture color rather than a color computed through other means. Since this mode didn't exist in the original Voodoo, the code was just using '0' for this case and producing a black background. Adding support for this made the graphics appear. Yay!
- 0.102u4            : Aaron Giles added preliminary Voodoo 2 support; Gauntlet Legends works again.
- 0.84u2             : Aaron Giles refactored the Voodoo code, fixing several errors in the LOD calculations and the Voodoo 2 command FIFO.
- 0.78               : Aaron Giles added initial Voodoo 2 support. Removed hack to toss what I thought were bogus triangles. Improved W buffer handling. Improved accuracy of depth buffer handling.
- 19th December  2003: Wow, that was a tricky bug. Turns out nobody was ever saving the FPU condition codes in the R5000 core, so if you took an interrupt between a compare and a branch on the result of that compare, you would hose the compare. This led to all kinds of nasty. The graphics are still very glitchy (I took a bunch of screen shots and this was the best one), but we're seeing most of the geometry now. However, the glitches in most of the Seattle games are now gone as a result. I also fixed the W-buffering on the 3dfx emulation to be closer to what I think is correct. This fixes some minor glitches in a few of the Seattle games.
- 12th December  2003: Aaron Giles - Several of the Atari and Midway Vegas games are now booting. They look pretty. The Voodoo 2 emulation is mostly working for FMV and static screens, but it's falling over when actual geometry is being rendered. In addition, the games are kind of flaky at the moment, crashing MAME sometimes, and none of them work yet with the dynarec R5000 core. And finally, though Gauntlet: Dark Legacy and War: Final Assault work with the new ADSP-2104-based DCS sound core, the others fall over at the moment unless I help them along. So all in all, some exciting developments, but there's still quite a ways to go to get things stabilized.
-  9th December  2003: Aaron Giles - Well, after a frustrating night trying to get this to work, I'm finally getting somewhere with my Voodoo 2 emulation....
- DRIVERS: hornet.cpp, savquest.cpp and vegas.cpp
- SOURCE: video\voodoo.cpp




G4.63  Voodoo Banshee

- 0.262              : Added Voodoo Banshee x86 BIOSes [VGA Legacy MKIII]. Implemented legacy VGA clock setups (video\voodoo_banshee.cpp) [Angelo Salese].
- 0.234              : Added video\voodoo_banshee.cpp/h.
- 0.162              : Added different Voodoo card types and configuration options (video\voodoo_pci.c) [Ted Green].
- 0.160              : Added video\voodoo_pci.c/h. Work-in-progress [Ted Green]: Hooked up PCI devices and bridge correctly using new PCI subsystem. Fixed BIOS selection.
- 0.146u4            : Cleaned up Banshee 2D blitter code [Ville Linde].
- 0.103u3            : Many Voodoo updates to add Voodoo Banshee and Voodoo 3 support [Aaron Giles].
- 16th January   2006: Aaron Giles - Took a decent amount of hacking, but I'm finally into the attract mode in NBA Showtime. The game crashes out pretty quickly and there are other problems, but at least now I can verify that the CHD dump is good (and it is).
- 27th December  2005: Aaron Giles - There's a part of me that wants to try and start on the Voodoo Banshee emulation, but I also really want to get the Voodoo 2 games working first. Plus, the Banshee requires a whole bunch more glue to support the 2D side of things, so that means faking VGA grossness. I only hope the games don't actually use the 2D stuff for anything except setting the display mode! Fortunately, the 3D section is pretty compatible with the Voodoo 2.
- DRIVERS: vegas.cpp
- SOURCE: video\voodoo.cpp



G4.64  Voodoo 3

- 0.162              : Added different Voodoo card types and configuration options (video\voodoo_pci.c) [Ted Green].
- 0.160              : Added video\voodoo_pci.c/h.
- 0.148              : Added Voodoo3-specific targets for cmdfifo packet type 5 [Ville Linde].
- 0.147u1            : Implemented Voodoo 3 overlay scaling [Ville Linde].
- 0.143u8            : Preliminary Voodoo 3 support [Ville Linde].
- 0.103u3            : Many Voodoo updates to add Voodoo Banshee and Voodoo 3 support [Aaron Giles].
- DRIVERS: iteagle.cpp, vegas.cpp and viper.cpp
- SOURCE: video\voodoo.cpp



G4.65  Voodoo chips + cards

       Chips:
       3Dfx 500-0003-03 FBI    PIXELFX    Pixel processor                QFP240    (Gradius4, Sscope)
       3Dfx 500-0004-02 TMU    TEXELFX    Texture processor              QFP208    (Gradius4, Sscope)
       3Dfx 500-0009-01                   Pixel processor                QFP256    (Gauntleg, Sscope2, Konami-HornetSystem)
       3Dfx 500-0010-01                   Texture processor              QFP208    (Gauntleg, Sscope2)

       Voodoo cards:
       Obsidian2 PCI 650-0818-03D         Quantum 3D Voodoo2 card                  (Gauntdl, Gauntleg)

       Extra:
       TI TVP3409-170CFN                  RAM DAC?                                 (Wg3dh, Blitz99)
       GT64010                 GALILEO    PCI Bridge/System Controller     ?       (Blitz99)
       PC87415                            Harddisk IDE controller




G4.7   PowerVR 2

- 0.255              : Fixed PowerVR 2 hardlocks demofist and chocomk when coined up with -drc (sega\powervr2.cpp). Disabled a printf [Angelo Salese].
- 0.244              : NAOMI Rendering fixes. Allow rendering non-textured sprites (filled boxes), causes spritetest to render properly. Fixed alpha blending for textures to key off of the right value. Some code cleanup [Jennifer Taylor].
- 0.243              : Clang fixes [smf].
- 0.240              : YUV pitch follows U size, fixes Kurukuru Chameleon corrupted Starfish-SD GFX logo. Moved Elan related stuff back into naomi2_state. Streamlined logging across chips to use logmacro.h, removed popmessages and printfs in production code (video\powervr2.cpp) [Angelo Salese]. Make ISP/TSP irq to be slower, fixes regression bug with Capcom fighters having frame hiccups [David Haywood, Angelo Salese].
- 0.239              : Added support for render mode 5 [Jennifer Taylor].
- 0.238              : Fixed the BG offset to be based on the param base so non-zero bases get backgrounds [Jennifer Taylor].
- 0.202              : Store different types of polygons in different lists. Make opaque polygons opaque. Previously, MAME's PowerVR 2 implementation treated all polygons as transparent. This resolves missing graphics in certain games which were rendering opaque polygons with alpha values which would make them transparent if they weren't on the opaque list. In the future, punch-through polygons will also require special consideration. These are polygons which support transparency but not blending (every pixel is either entirely transparent or entirely opaque). For now, they're still treated the same as transparent polygons [snickerbockers].
- 0.201              : Turn some per-pixel branches into per-polygon branches. Note: In MAME 0.200 I did something stupid from a performance standpoint, which was to select the shading function on a per-pixel basis even though it can only change on a per-polygon basis. This commit uses c++ templates and inline functions to so that the compiler's constant folding can eliminate the switch statement that selects shading functions (thus making the choice a per-polygon one). I also did the same thing for the texture and bilinear filtering checks. This brings back a little less than half of the performance hit on my PC, so things still aren't as fast as they used to be. Benchmark (running a full cycle of Crazy Taxi NAOMI's attract) on my PC: Before MAME 0.200: 30%, after MAME 0.200: 23% and with this commit: 26%. Regarding the other 4% of the drop, that is coming from the pixel shading. When I hardcode powervr2 to always use shading instruction 0, performance jumps up to 29.5%, but when I hardcode it to use shading instruction 3 performance falls a bit down to 25%. Shading instruction 3 is the most complicated of the four and shading instruction 0 is the simplest, so I think that proves that the shading instructions themselves are a major bottleneck. I don't have any ideas about how to make them faster yet [snickerbockers].
- 0.200              : Improved PowerVR 2 color handling. Note: PowerVR2 represents color using two components: A base color and an optional offset color. The base color is combined with the incoming texture sample (if any) according to the fixed-function specified by the tsinstruction in the per-polygon parameters, and then the offset is added to this color (with the exception of alpha; the offset color has an alpha component but it does not appear to ever be used). The base color and offset color can be specified on a per-vertex basis (as either a group of four 8-bit integers or a group of four single-precision floating points) or they can be specified on a per-polygon basis (in floating-point only) and then scaled based on per-vertex scalar values (also floating point) [snickerbockers].
- 0.188              : Improved -romident performance by dynamically allocating large arrays at device_start time (video\powervr2.cpp) [Phil Bennett].
- 0.175              : Added PowerVR2 hack (hacky end of render delay for Capcom games, otherwise they works at ~1/10 speed). Documentation update and new DC/NAOMI security system findings [MetalliC].
- 0.174              : UV clamp/flip (video\powervr2.cpp) [MetalliC].
- 0.154              : Fixed usage of uninitialized members in powervr2_device [Oliver Stoeneberg].
- 0.152              : Sanitize screen format in video\powervr2.c, fixes assert after OK (debug build) [O. Galibert].
- 0.150              : Fixed ARGB0888 fb format in PowerVR2, fixes licensed by Sega screen. Correct refresh rate (naomi.c and video\powervr2.c). Fixed blank polarity in POWERVR2. Experimental scanline code, to be improved on a later date. Fixed H-Blank IN regression, made CH2 DMA to fire irq via CPU cycles (machine\saturn.c, dc.c and video\powervr2.c). Make the hblank-in scanline counter to reset at proper screen height (video\powervr2.c). Improved timing of end-of-render irq (video\powervr2.c). Added Maple HW trigger (includes\dc.h, machine\gdrom.c, maple-dc.c/h and video\powervr2.c). Added SPG control register to PowerVR2, used to change pixel clock dynamically. Added preliminary YUV converter to PowerVR2. De-hacked PowerVR2 framebuffer conversion, fixes YUV gfxs in NFL 2k1 and Tetris 4D. Fixed PowerVR2 left-most green line in YUV conversion. Hooked up AICA-to-SH-4 irqs. Bump accumulation buffer src bitmap in PowerVR2, fixes F355 Challenge assert. Fixed PowerVR2 vblank irq trigger when interlace mode is used. Added 888rgb24 conversion types to PowerVR2 and YUV_TW texture hook-up, used by Soul Calibur (MESS - Dreamcast). Support for PowerVR2 non-textured polygons with packed and floating colors. Attempt to improved GD-ROM timings. Device-ized AICA RTC device, passes RW comp test, doesn't pass clock test. Fixed AICA DSP. Fixed ARMRST behaviour (machine\dc.c). Preliminary startx/starty support, display is repeated on left-right edges, to be improved (video\powervr2.c). Fixed fb out-of-bounds writes (video\powervr2.c). Added useful fatalerror (video\powervr2.c) [Angelo Salese].
- 0.149              : Added 'PowerVR 2' device (video\powervr2.c).
- NOTES: 'PowerVR 2' Dreamcast video
- DRIVERS: dc_atomiswave.cpp, naomi.cpp and segasp.cpp
- SOURCE: sega\powervr2.cpp


4.71  PowerVR Neon

- 0.270              : Added bus\pci\neon250.cpp/h. Added 'VideoLogic PowerVR Neon 250' stub [Angelo Salese].
- NOTES: VideoLogic PowerVR Neon 250 (PMX1)
- DRIVERS: aristmk6.cpp
- SOURCE: pci\neon250.cpp




G4.8   Gaelco 3D
- SOURCE: video\gaelco3d.cpp
- GAMES: Gaelco - Speed Up (1996), Surf Planet (1997), Radikal Bikers (1998)
- PCB: 3D-3G, QFP206 square smd (Radikalb, Speedup, Surfplnt)


G4.9   Real3D 1000

- 0.132u3            : Phil Bennett fixed Model 3 Real3D DMA source addressing.
- 19th January   2005: Ville Linde - Fixed a bug in the Real3D DMA emulation. This fixes the 3D graphics in Virtual On 2 and Harley Davidson & L.A. Riders. Virtual On 2 still doesn't have working controls and Harley Davidson has lots of glitches and crashes before getting ingame.
- 0.89u3             : Ville Linde added preliminary 53c810 SCSI emulation. Lost World now tries to download everything necessary to the Real3D stuff.
- SOURCE: drivers\model3.cpp


G4.A   3DO
- SOURCE: drivers\konamim2.cpp
- GAMES: Beavis and Butt-head (Atari 1995 prototype), Die Alien Scum!! (Warner 1996 prototype), Tobe! Polystars (Konami 1997), Heat of Eleven '98 (Konami 1998)
- PCB: 3DO chip 9701 B861131 VY21118- CDE2 3DO 02473-001-0F (QFP208) (Polystar), B861132-VY21118-CDE2-3DO-02473-001-0F (Heatof11)



G4.B   nVidia Riva 128

- 0.262              : Changed sourcefile to pci\riva128.cpp/h.
- 0.257              : Added nVidia Riva 128 ZX variant [Angelo Salese].
- 0.256              : Added video\riva128.cpp/h. Added a very preliminary implementation of nVidia Riva 128 PCI card, added as a temp target in pc\pcipc.cpp (pcinv3) (video\riva128.cpp). Rework and fixed VGA input sense (necessary to allow Riva 128 to survive POST) (video\pc_vga.cpp) [Angelo Salese].
- NOTES: SGS-Thompson/nVidia Riva 128 (NV3) and SGS-Thompson/nVidia Riva 128 ZX (NV3T)
- SOURCE: pci\riva128.cpp



G4.C   nVidia Riva TNT

- 0.262              : Changed sourcefile to bus\pci\rivatnt.cpp/h.
- 0.257              : Added video\rivatnt.cpp/h. Added nVidia Riva TNT/TNT2/TNT2 Ultra/Vanta/TNT2 Model 64 [Angelo Salese].
- NOTES: nVidia Riva TNT (NV4), nVidia Riva TNT2 (NV5), nVidia Riva TNT2 Ultra (NV5), nVidia Vanta (NV5) and nVidia Riva TNT2 Model 64 (NV5)
- DRIVERS: ez2d.cpp
- SOURCE: pci\rivatnt.cpp



G4.D   nVidia GeForce 256

- 0.262              : Changed sourcefile to bus\pci\geforce.cpp/h.
- 0.257              : Added video\geforce.cpp/h. Added nVidia Geforce 256/Geforce 256 DDR/Quadro [Angelo Salese].
- NOTES: nVidia GeForce 256 SDR (NV10), nVidia GeForce 256 DDR (NV10), nVidia GeForce 256 Ultra (NV10) and nVidia Quadro (NV10)
- DRIVERS: ???
- SOURCE: pci\geforce.cpp



G4.E   NVidia GeForce 7600GS

- 0.263              : Added basic legacy VGA control (video\gf7600gs.cpp) [Angelo Salese].
- 0.157              : Changed video\gf6800gt.c/h to gf7600gs.c/h. PCI expansion rom management (video\gf6800gt.c). Match card and video bios [O. Galibert].
- 0.156              : Added video\gf6800gt.c/h. Experiments in PCI land [O. Galibert].
- DRIVERS: lindbergh.cpp
- SOURCE: video\gf7600gs.cpp



G4.F   Cirrus Logic CL-GD5465 Laguna 3D

- 0.264              : Added Laguna 3D as AGP slot option [Angelo Salese]. Changed video\clgd546x_laguna.cpp/h to pci\clgd546x_laguna.cpp/h.
- 0.257              : Added video\clgd546x_laguna.cpp/h. Added base PCI for Cirrus Logic CL-GD5465 Laguna 3D [Angelo Salese].
- NOTES: Cirrus Logic GD-5465 "Laguna 3D"
- DRIVERS: (MESS) pc\pcipc.cpp
- SOURCE: pci\clgd546x_laguna.cpp



G4.G   3Dlabs Permedia 2
- 0.282              : Added pci\permedia2.cpp/h. Added '3Dlabs Permedia 2' device. Added skeleton driver for (MESS) Sun Enterprise 250 [ClawGrip, ArcadeHacker].
- DRIVERS: (MESS) e250.cpp
- SOURCE: pci\permedia2.cpp



G4.H   Direct3D
 - 23rd October  2003: Leon van Rooij sent in an update to the Windows Direct3D code, fixing a bug that caused a black screen in rotated ST-V games.
 - 11th June     2003: Leon van Rooij fixed various bugs and crashes in the Direct3D video output.
 - 30th May      2003: Leon van Rooij fixed the Direct3D problem that caused timing problems in various drivers due to worse floating point math precision.
 - 19th May      2003: Leon van Rooij sent in another update to the Direct3D video output, adding a few new options.
 - 18th May      2003: Leon van Rooij fixed some small problems in the Direct3D video output.
 - 16th May      2003: Leon van Rooij sent in a major update to the Direct3D output, adding RGB effects, scanlines, hardware accelerated -effect sharp and various other useful things.
 -  1st May      2003: Leon van Rooij submitted basic Direct3D support, giving the ability to turn off bi-linear filtering when using hardware stretch.




G5.    Video controller

G5.1   Actel

       A1010     A1010A-1, A1010b A-22096                     S.S. Mission (Comad 1992), Shadow Force (Technos 1993), Area51
       A1020     A1020A, A1020B             (PLCC84)          Gumbo (1994), Magic Bubble (Yun Sung 199x), Burglar X (Unico 1997)      NOTES: The ACTEL A1020A PL84C (PLCC84) is the same graphics controller chip as the Texas Instruments TPC 1020.
       A1425     Actel A1425A-2 PQ100C 9536 (QFP100)          NBAJamExtreme
       A4MX09                                                 Ssriders
       A40MX04   ACTEL A40MX04-F, A40MX04F  (PLCC84)          Multi Champ (ESD 1998), The Legend of Silkroad (Unico 1999), Head Panic (ESD 2000)
       A54SX16A  Actel A54SX16A             (QFP208)          Fire Hawk (ESD 2001)

G5.2   Altera

       EP1800                                                 Twinfalc (Philko 19xx)
       EP1810    EP1810lc-45, EP1810LC20T, EP1810LC-35T       West Story (1990), Street Fighter II (1992), Primal Rage (Atari 1994), Guardians of the Hood (Atari 1992)



G5.3   Brooktree

       Bt101      BT101KC30                                F15se                          NOTES: 8-bit digital to analog converter.
       Bt121      BT121KPJ50 (50MHz), Bt121KPJ80 (80MHz)   Timekill, Eggventrm Lethalj    NOTES: The Brooktree Bt121KPJ80 features: 80 MHz pipelined operation (RAMDAC), Triple 8-bit D/A converters, Optional internal voltage reference, TTL-compatible inputs, +5 V CMOS monolithic construction, PLCC44 package and Typical power: 600 mW
       Bt476      Bt476KP35                                Wfortune                       NOTES: 6-bit DAC
       Bt478      BT478KPJ50                               Wheelfir
       Bt481      Bt481AKPJ110, QFP44                      Policetr, Sshooter             NOTES: 256-Word Color Palette 15, 16 & 24-bit Color Power-Down RAMDAC, QFP44


       WIP:
       - 0.277              : Make 16-color variants generate visible colors (video\bt45x.cpp). Enable Bt473 device (video\bt47x.cpp) [R. Belmont].
       - 0.276              : Added video\bt450.cpp/h. Make accessors public (video\bt431.h and bt45x.h). New RAMDAC device (Brooktree Bt450 16x12 Color RAMDAC) [Patrick Mackinlay].
       - 0.274              : Added video\bt48x.cpp/h. Implemented RAMDAC with hardware cursor (video\bt48x.cpp). Use Brooktree BT481 device in Police Trainer [Dirk Best].
       - 0.255              : Added 'Brooktree Bt479 1024 Color RAMDAC' device (video\bt47x.cpp) [Patrick Mackinlay].
       - 0.228              : Added 'Brooktree Bt471, Bt475, Bt476, Bt477, Bt478 256 Color RAMDAC' device. Hooked up actual Bt477 device for palette in the video-based games (jpmimpct.cpp and jpmimpctsw.cpp) [David Haywood].
       - 0.220              : Added 'Brooktree Bt451, Bt453, Bt454, Bt455, Bt457, Bt458, Bt467 256 Color RAMDAC' device.
       - 0.211              : Added video\bt47x.cpp/h. Added new Brooktree Bt47x 256 Color RAMDAC device [Patrick Mackinlay].
       - NOTES: Brooktree Bt471 / Bt473 / Bt474 / Bt475 / Bt476 / Bt477 / Bt478 / Bt479 Bt481 / Bt482 256 Color RAMDAC. Sources: http://www.bitsavers.org/components/brooktree/_dataBooks/1991_Brooktree_Product_Databook.pdf
       - NOTES: A RAMDAC (RAM Digital-to-Analog Converter) is a combination of three fast digital-to-analog converters (DACs) with a small static random-access memory (SRAM) used in computer graphics display controllers to store the color palette and to generate the analog signals (usually a voltage amplitude) to drive a color monitor.
       - DRIVERS: jpmimpct.cpp, merit3xx.cpp and vlc34010.cpp
       - SOURCE: video\bt45x.cpp, bt47x.cpp and bt48x.cpp



G5.4   Cosmac

       CDP1861
       - 0.220              : Simplified handlers for RCA CDP1861 device [Osso].
       - 0.201              : Converted callbacks to DEVCB3. Hook in screens efficiently without using MCFG. Fixed have_screen_update(), which was broken and returned false under any valid configuration, and rename the function has_screen_update(). This fixes regressions in 'Granny and the Gators' and other drivers using custom update functions with CDP1861, CDP1864 and TMS992x VDPs (emu\screen.h) [AJR].
       - 0.153              : Cleaned up DEVCB2 [Curt Coder].
       - 0.150              : Fixed colors and video in (MESS) visicom [Curt Coder].
       - 0.149              : Converted CDP1861 to DEVCB2 [Curt Coder].
       - 0.148u2            : Fixed uninitialized member in emu\video\cdp1861.c [Oliver Stoeneberg].
       - 0.147              : Death to palettes (palette_set_color_rgb) [Curt Coder].
       - 0.142u1            : Added video\cdp1861.c/h.
       - NOTES: RCA CDP1861 Video Display Controller
       - DRIVERS: (MESS) elf.cpp, studio2.cpp, vip.cpp and tmc1800.cpp
       - SOURCE: video\cdp1861.cpp


       CDP1862
       - 0.220              : Simplified handlers for RCA CDP1862 device [Osso].
       - 0.201              : Converted callbacks to DEVCB3 [AJR].
       - 0.153              : Cleaned up DEVCB2 [Curt Coder].
       - 0.149              : Converted CDP1862 to DEVCB2 [Curt Coder].
       - 0.147              : Death to palettes (palette_set_color_rgb) [Curt Coder].
       - 0.142u1            : Added video\cdp1862.c/h.
       - NOTES: RCA CDP1862 Video Display Controller
       - DRIVERS: (MESS) bus\vip\vp590.cpp
       - SOURCE: video\cdp1862.cpp


       CDP1870/76 Video Interface System

       - NOTES: The Cosmac CDP70/76 Video Interface System (VIS).
       - WEB: http://homepage.mac.com/ruske/cosmacelf/cdp1869.pdf
       - SOURCE: sound\cdp1869.cpp




G5.5   Hitachi

       HD6845     The HD6845SP is a videocard controller        68A45 (Qix, Zookeep), UM6845 (Xyonix), HD6845SP (PBallon), HD68455P (Fantasy), HD6845SP (Hitpoker), MC6845P (Magiccrd, Poker), HD468458SP (R2dtank), HD6445 (Cyclwarr)
                  UM6845RA (CRT controller, supports alphanumeric and graphics modes, addresses up to 16 KB of video memory, 2 MHz) (Steaser)
       HD45055    Hitachi HD465055P CRTC - from manual of IDsoccer
       HD46505    HD46505SP (40 pin) drivers\tugboat.c          Satansat, Hanamai, Hnayayoi, Spiders, R2dtank, HD46505R (LaserBase), HD465055P (Fantasy)
          6505s = HD46505S CRT Controller ???                   BlitzVideoPoker
       HD63484    Hitachi HD63484PS8 Video controller, SDIP64   Shangha2, SOURCE: drivers\shanghai.c - HD63484_start



       HD6345

       - 0.224              : Added all registers and implemented screen split [Nigel Barnes].
       - 0.216              : Derive from hd6845s to maintain compatibility [Nigel Barnes].
       - 0.186              : Changed description to 'Hitachi HD6345 CRTC'. Added (partial) correct register mappings to HD6345 [BartmanAbyss].
       - 0.184              : Added 'HD6345 CRTC' device (video\mc6845.c).
       - 0.142u5            : Curt Coder added HD6345 CRTC-II variant to mc6845.c.
       - DRIVERS: (MESS) bus\ecbbus\grip.cpp
       - SOURCE: video\mc6845.cpp


       HD6845

       - 0.270              : Lift horizontal display and mode control from being zeroed in device_reset. Fixes (MESS) bml3 getting stuck on soft resets [Angelo Salese].
       - 0.225              : Fixed off-by-one error in calculating bottom of DE window [AJR].
       - 0.219              : Hook up 6845 CRTC to Mahjong Sisters and Xyonix. Added screen raw parameters [Dirk Best].
       - 0.214              : Specialized the cursor emulation. For the HD6845 the cursor does not wrap around as it does for the MC6845 [68bit].
       - 0.210              : Changed description to 'Hitachi HD6845S CRTC'. More consistent identification of HD6845S variant (HD6845S same as HD46505S and HD6845 same as HD46505R) [AJR].
       - 0.196              : Use HD6845 CRTC for video in hnayayoi.cpp and improved screen parameters [AJR].
       - 0.186              : Changed description to 'Hitachi HD6845 CRTC'.
       - 0.169              : Use HD6845 in (MESS) ACT Apricot PC [Dirk Best].
       - 0.168              : Display Start Address is write-only on MC6845 and read-write on HD6845S [Barry Rodewald]. Fixed HD6845 rasters in interlace mode. (MESS) BBC now uses correct HD6845 [Nigel Barnes].
       - 0.142u4            : Added 'HD6845 CRTC' device (video\mc6845.c).
       - 0.123u6            : James Wallace converted the MPU4 driver to use an HD6845, as the Hitachi part was on the PCB, while also using it to generate the VBLANK, rather than hardcoding a value. Added the pulldown resistor to the network, and added all the conditional inputs. Please note that on the later Cabinet Types (Ready Steady Go-1 onwards), the 10p slot is locked out (location of the true register for this is unknown), but the input setting is correct - you have to use Coin 2 or higher to get money in. Zsolt Vasvari fixed screen != NULL assert.
       - 0.123u5            : Zsolt Vasvari changed the MC6845 to take and pass device_config's only. The following shook out from this that are applicable to other devices as well: Running_machine is no longer taken, passed or stored MC6845_t is now private. Since passing device_config's is not device type safe, I added a get_safe_token() to mc6845.c to check the device passed in for the valid type. Changed MC6845 to take a screen tag instead of a screen number. Fixed flickering in Electric Yo-Yo. Changed qix driver to use the MC6845's VSYNC notification for interrupts. Added some new 6845 varieties: MC6845-1, H46505, HD6845 and SY6545-1.
       - DRIVERS: flipjack.cpp, mpu4dealem.cpp, twincobr.cpp and wardner.cpp
       - SOURCE: video\mc6845.cpp


       HD63484

       - 0.221              : Simplified and unified handlers. The actual bus interface makes no provision for the upper/lower byte masking performed by the previous implementation [AJR].
       - 0.195              : Added external skew kludge to prevent display cutoff in Kyuukyoku no Othello [AJR].
       - 0.186              : Changed description to 'Hitachi HD63484 ACRTC'.
       - 0.174              : Removed video\hd63484.cpp/h. Removed HD63484 CRTC (Legacy) device. Changed video\h63484.cpp/h to hd63484.cpp/h. Converted Real Puncher (taito_b.cpp) to use the modern HD63484 device [Sandro Ronco].
       - 0.172              : Converted Shanghai driver to use the non-legacy HD63484 video device [Angelo Salese].
       - 0.158              : Added save state support to HD63484 [Osso].
       - 0.154              : Updated HD63484 to use inline configs [Fabio Priuli]. Fixed usage of uninitialized member in HD63484 device, this fixed debug assertion in Shanghai driver [Oliver Stoeneberg]. Fixed CP position after PTN command in HD63484 and some cleanups [Sandro Ronco].
       - 0.153              : HD63484 updates [Sandro Ronco]: Converted to use a 16-bits address map. Implemented RPR, MOD, SCLR, SCPY, LINE, PLG, PLL, CRCL, ARC, FRCT, PAINT, DOT, PTN, GCPY commands. Added pattern RAM emulation. Added 2 other commands to HD63484 used by Fashion Gambler. Converted HD63484 to use delegates. Added 8-bit mode. Converted sigmab52.c driver to use the new HD63484.
       - 0.151              : Removed not needed include in video\h63484.c [Osso].
       - 0.150              : Modernized HD63484. This should be merged with video\h63484.c [Osso].
       - 0.143u6            : Added video\h63484.c/h. Started rewriting of HD63484, using ADP driver as a starting base [Angelo Salese].
       -  7th February  2010: Roberto Zandona - Assuming that the memory map of the HD63484 (thanks to Dox and its notes in the driver sigmab52) is: 00000-3ffff = RAM, 40000-7ffff = ROM, 80000-bffff = unused and c0000-fffff = unused by offering access to videoram you see these screens: Skat TV, Fashion Gambler and Funny Land de Luxe.
       -  7th February  2010: Roberto Fresca - I started to write a driver for Sigma B52 system. This platform is a complex gaming system based on 2x M6809 CPU's, 1x YM3812 sound device, and a very complex video controller (H63484 ACRTC). Thanks to Tomasz Slanina that kindly joined efforts hooking the ACRTC stuff, and Fabio Priuli converting this controller to a device. The ACRTC implementation is a bit hacky due to its preliminary emulation state. Here are some snaps from Joker's Wild (B52) and a new game dumped by TeamEurope: Treasure Island from Subsino. We're working with Angelo Salese and David Haywood to get it working.
       - 0.136u2            : Moved hd63484.c/h to emu\video. Fabio Priuli converted HD63484 ACRTC to be device.
       - 0.129u5            : Roberto Zandona impemented CRCL command in HD63484 (used in skattv test mode).
       - 0.129u4            : Phil Bennett added Read Parameter Register support to the hd63484. Moved logging behind a define.
       - 0.127u1            : HD63484 improvements [Roberto Zandona]: Fixed cpx and cpy when a ptn or a agcpy command is executed. Fixed for PTN command: copy direction and dot color. First implementation of PAINT command (for now only 4bpp and 8bpp supported and the pattern is not supported).
       - 0.127              : Roberto Zandona improved HD63484 core to support some initial graphics.
       - 0.126u5            : Added video\hd63484.c/h. Some improvements to shanghai video drivers [Roberto Zandona]: Convert framebuffer's ram from 8 bit to 16 bit. Convert DMA command from 8 bit to 16 bit. Convert gfx command from 8 bit to 16 bit. Implemented all gfx mode: 1,2,4,8,16 bpp. Now we can use this gfx chip for adp driver that use 4bpp.
       - DRIVERS: adp.cpp, segajw.cpp, shanghai.cpp, sigmab52.cpp, taito_b.cpp and wildpkr.cpp
       - SOURCE: video\hd63484.cpp and video\h63484.cpp



G5.6   Motorola

       MC6845
       - 0.280              : Removed hack that resets line counter when screen parameters are changed (fixes split screen mode in (MESS) Elite on BBC Micro) (video\mc6845.cpp) [Nigel Barnes].
       - 0.263              : Mark set_show_border_area and set_visarea_adjust as hack setters (video\mc6845.h) [Angelo Salese].
       - 0.262              : Don't enable line timer until valid parameters are set (video\mc6845.cpp), fixes hang in Multi-Action 7551-20-R3T [Mark Garlanger].
       - 0.254              : Added video\mos8563.cpp/h. Split MOS8563 device source from MC6845 [AJR].
       - 0.245              : Fixed unwanted L chrs for (MESS) mbee -bios 1 (video\mbee.cpp and video\mc6845.cpp) [Robbbert].
       - 0.226              : Fixed some uninitialised variables [Vas Crabb]. Enabled strobe output (RA4) in transparent mode [Robbbert].
       - 0.222              : Added video\ams40041.cpp/h. Use disable enable signal with machines that blank part of the screen (MESS drivers\applix.cpp, duet16.cpp and h19.cpp) [Carl]. Move PC1512 VDU emulation down into device (AMS40041 VDU) and use make_unique_clear to initialize video RAM [AJR].
       - 0.221              : Max visible lines might not be what really is displayed, see (MESS) IBM PC 5150t demo 8088mph [Carl].
       - 0.220              : Hook up MC6845 CRTC to drw80pkr.cpp. Added screen raw parameters [Dirk Best].
       - 0.215              : More logging and reduced (not eliminated) warning spam significantly at startup when register values doesn't make sense [Joakim Larsson Edstrom].
       - 0.214              : Improved the cursor emulation. Implemented partial cursors. The MC6845 shows a full cursor if the cursor end raster address is greater than the maximum raster address, restore that case in general. The issue on the BBC, that uses the HD6845S, might be the use of the maximum raster address here, it appears to be programmed differently on the HD6845S and also to depend on the interlaced mode. This patch fixes the BBC while preserving the cursor emulation for the MC6845. Added address cursor display edge case in interlaced mode. It appears that the cursor is not displayed when the start raster address is equal to the maximum raster address in the 'interlace and video' mode. At least this addresses a claimed regression in the (MESS) apricot machine. To be explore further on hardware. The maximum raster address was also off by one in these calculations [68bit]. Fixed height of cursor on (MESS) BBC Micro [AJR].
       - 0.210              : Use standard device method to adjust input clock (video\mc6845.cpp) [AJR].
       - 0.209              : Fixed/Recomputed MC6845 clock parameters. Improved logging. Note: After the screen is reconfigured for the (MESS) Alphatronic PC 80-column mode, the calls to reset_origin become more frequent than the screen device's frame updates. This is a nasty CRTC/screen timing bug [AJR].
       - 0.208              : Reset line counter only if ((!m_reconfigure_cb.isnull() && (!postload)) (video\mc6845.cpp). Fixes graphics issues in (MESS) Amstrad CPC6128 games Galactic Tomb, The Living Daylights and Terminator 2. Games like Profanation 2 works now. Check if vsync should be enabled when frame is reset. Fixes (MESS) Amstrad CPC464/CPC6128 game Hundra gets stuck in a black screen after leaving main menu [AmatCoder]. Check for vsync on frame reset only if vsync witdh is supported [AJR].
       - 0.207              : Simplified read/write handlers [AJR].
       - 0.199              : (MESS) C128: Use device_palette_interface for MOS8563 instead of creating palette subdevice [AJR].
       - 0.192              : Minor transparent update refactoring [AJR].
       - 0.184              : Generate blink state in a way more likely to represent hardware and removed kludged-in MC6845 accessor [AJR].
       - 0.183              : Scroll fix for (MESS) Osborne-1 (Nuevo Video) (video\mc6845.cpp) [Robbbert]. Fixed scanout of MC6845. The device should not try to scan-out more lines than has been programmed into the 'visible' register [Mark Garlanger].
       - 0.179              : Added readback for cursor blink state to MC6845 [AJR].
       - 0.171              : Fixed MC6845/H46505 save state regression found during Tafoid's latest round of tests (i.e. futflash, docastle, usgames, madalien) [Osso].
       - 0.170              : Fixed speed is always 90-98% when throttled in several drivers using MC6845 [Carl].
       - 0.169              : Added AMS40489 CRTC [Barry Rodewald]. Use HD6845 in (MESS) ACT Apricot PC and cleanup MC6845 [Dirk Best].
       - 0.168              : Display Start Address is write-only on MC6845 and read-write on HD6845S [Barry Rodewald].
       - 0.167              : MC6845 screen reconfig callback [Carl].
       - 0.163              : Always set bit 0 of maximum raster address in MC6845 interlace video mode, fixes (MESS) Apricot screen height. Only apply the interlace adjust to the (MESS) Apricot since it causes issues with other systems. Really need proper interlace support [Dirk Best].
       - 0.161              : Hooked up MC6845 CRT controller to Card Line [Couriersud].
       - 0.154              : Converted MC6845 to DEVCB2, delegates and inline configs. While at it, cleaned up the args of the mc6845 delegates as well (no need to pass back and forth pieces of the driver class, now that delegates belong to it as well). Even if I tested the changes extensively, I might have missed something among the 177 source files using this, so please report any regressions you see [Fabio Priuli]. Don't make visible area larger than screen size with SHOW_BORDER_AREA; it causes vblank duration to be negative, which is all kinds of weird and wrong (video\mc6845.c) [Alex Jackson].
       - 0.153              : Fixed total freeze of MESS when interlace&video mode was selected on super80v. Also added some comments [Robbbert]. Added screen visarea adjustment to MC6845 config interface [hap]. Added display enable and horizontal/vertical back porch widths to the update function. Updated some MESS drivers to make use of this [Curt Coder].
       - 0.152              : Robbbert fixed vertical resolution increase in drivers using the MC6845 device.
       - 0.149u1            : Added rudimentary support for MC6845 'interlace and video' mode [jedwidz].
       - 0.148u2            : Fixed uninitialized variable and members and removed unused member in video\mc6845.c [Oliver Stoeneberg].
       - 0.148u1            : Angelo Salese added a preliminary boolean flag to MC6845 interface structure: "show border area". If true, it will show the whole video area including border + blanking areas. Bulk replaced const mc6845_interface -> MC6845_INTERFACE (emu\video\pc_cga.c, mame\drivers\4roses.c, 5clown.c, albazg.c, amaticmg.c, aristmk4.c, avt.c, blitz.c, blitz68k.c, buster.c, calomega.c, carrera.c, chance32.c, coinmstr.c, flipjack.c, fortecar.c, funworld.c, goldnpkr.c, hitpoker.c, jokrwild.c, jubilee.c, kingdrby.c, laserbas.c, luckgrln.c, magicfly.c, majorpkr.c, merit.c, miniboy7.c, mpu12wbk.c, mpu4dealem.c, murogem.c, nyny.c, othello.c, peplus.c, progolf.c, r2dtank.c, rgum.c, slotcarn.c, snk6502.c, speedatk.c, spiders.c, ssingles.c, supercrd.c, tapatune.c, tmspoker.c, truco.c, usgames.c, vcombat.c, vlc.c, whitestar.c, mame\video\madalien.c, qix.c and twincobr.c). (MESS) Enabled SMC-777 to show the border area in MC6845 interface, changed various video related function accordingly. (MESS) Enabled Sharp X1 (drivers\x1.c) to show border area, fixes Shilver Ghost gameplay and Nobunaga no Yabou error display if a single floppy is in [Angelo Salese].
       - 0.148              : Stop spamming the MC6845 log file [Curt Coder].
       - 0.147              : (MESS) c128: Refactored to use the new VIC-IIe, and rewrote the MOS8563 VDC as an MC6845 variant. The VIC-IIe and VDC now have their own screens. Not fully working yet. Fixed MOS8563 attributes [Curt Coder].
       - 0.145u8            : Show errors with logerror instead of popmessage (video\mc6845.c) [hap].
       - 0.144u6            : Major bitmap-related changes throughout the system [Aaron Giles]. All video devices are now hard-coded to either ind16 or rgb32 bitmaps. The most notable in the MC6845 which is rgb32, and required changes to a number of consumers.
       - 0.143u2            : Added the AMS40041 variant (used in the Amstrad PC1512) to mc6845.c [Curt Coder].
       - 0.143              : Curt Coder added DE, CURSOR, HSYNC and VSYNC line read members to MC6845.
       - 0.142u5            : Roberto Fresca fixed MC6845 related crash on Four Roses (encrypted, set 1) and clone (encrypted, set 2). Wilbert Pol fixed hang at black screen w/border in some games using MC6845.
       - 0.142u4            : Wilbert Pol converted mc6845.c to C++.
       - 0.141u4            : Curt Coder implemented MC6845 row/column addressing mode.
       - 0.140u3            : Curt Coder added Synertek SY6845E subtype to mc6845.c.
       - 0.140              : Aaron Giles added new method reset_origin() to screen devices to allow manual synchronization of VBLANK start against an external timing source. Updated the MC6845 device to call reset_origin() on its screen at the start of each frame if a screen is present.
       - 0.139u3            : Rewritten mc6845.c to allow mid frame changes to the counter registers. This enables drivers to use advanced split screen and scrolling effects using a regular MC6845 [Wilbert Pol].
       - 0.136u2            : Popmessages can now be used in drivers which have an MC6845 [Robbbert].
       - 0.133u4            : hap fixed NULL timers crash in the MC6845. This fixed an access violation of some drivers using the MC6845.
       - 0.133u3            : Roberto Lavarone implemented transparent mode access for some 6845 model sy6845.
       - 0.132u1            : Curt Coder refactored MC6845 to use DEVCB and added cursor callback (for MESS).
       - 0.129u2            : Wilbert Pol force recalculation of screen parameters when only the MC6845 input clock changes.
       - 0.129              : Phil Bennett correctly setup the MC6845 device in the calomega, carrera, coinmstr, funworld, goldnpkr, rockola and usgames drivers. This fixed games crashed with an error on startup before OK.
       - 0.128u4            : MC6845 Hsync needs to toggle on every scanline [Curt Coder]. This fixed games using the MC6845 displaying the message "Mode Control 88 is not supported!!!".
       - 0.128u3            : Curt Coder reverted MC6845 changes as they broke a number of things. This fixed crash/hanging in many games using the MC6845. Hooked up 6845 to PEPlus driver [Couriersud]: Hooked up 6845 in a daisy chain way into existing "6845 emulation". Clocks from schematics. Video size issues - 6845 code related, discussion started on list.
       - 0.128u2            : Curt Coder fixed skewing and display area in MC6845.
       - 0.128u1            : MC6845 changes [Curt Coder]: Added cursor and display enable skewing. Added preliminary support for SY6545-1's transparent addressing mode. Hsync should be pulsed even when vsync is active.
       - 0.124              : Zsolt Vasvari added option in MC6845 to programatically set the clock pin. This is needed by at least one MESS driver. Added mc6845_set_hpixels_per_column() for the Hercules gfx adapter.
       - 0.123u6            : James Wallace converted the MPU4 driver to use an HD6845, as the Hitachi part was on the PCB, while also using it to generate the VBLANK, rather than hardcoding a value. Added the pulldown resistor to the network, and added all the conditional inputs. Please note that on the later Cabinet Types (Ready Steady Go-1 onwards), the 10p slot is locked out (location of the true register for this is unknown), but the input setting is correct - you have to use Coin 2 or higher to get money in. Zsolt Vasvari fixed screen != NULL assert.
       - 0.123u5            : Zsolt Vasvari changed the MC6845 to take and pass device_config's only. The following shook out from this that are applicable to other devices as well: Running_machine is no longer taken, passed or stored MC6845_t is now private. Since passing device_config's is not device type safe, I added a get_safe_token() to mc6845.c to check the device passed in for the valid type. Changed MC6845 to take a screen tag instead of a screen number. Fixed flickering in Electric Yo-Yo. Changed qix driver to use the MC6845's VSYNC notification for interrupts. Added some new 6845 varieties: MC6845-1, H46505, HD6845 and SY6545-1.
       - 0.123u4            : MC6845 updates [Zsolt Vasvari]: Now signalling both 0->1 and 1->0 transitions of syncing pins. Added mc6845_assert_light_pen_input; uses a timer for latching the light pen address. Added reset device function. Implemented VSYNC height computation difference between the Motorola and the Rockwell devices. Since the Commodore 40xx computers program an HSYNC width that extends past the end of the scanline, I am clamping it in lack of anything better to do. Added support for the Commodore 6545-1 device type. Added support for the status register. Better variable names. More asserts. Aaron Giles converted MC6845 read/write handlers to READ/WRITE8_DEVICE_HANDLERs. Updated all MC6845-using drivers to use the new macros and call the updated functions. Removed the many little helper functions that used to do this work.
       - 0.123u3            : Zsolt Vasvari added support for cursors in the MC6845 emulation. All 4 blinking modes are supported.
       - 0.123u2            : Zsolt Vasvari changed all drivers using the MC6845 chip to use the new device interface. Removed mc6845_config.
       - 0.123u1            : Changed emu\video\crtc6845.c/h to emu\video\mc6845.c/h. MC6845 updates [Zsolt Vasvari]: Changed the 6845 to be handle based -- adjusted all drivers. Allow reading registers 12 and 13. Reading write-only registers return 0. Updated comments in header.
       - 0.115u2            : Zsolt Vasvari changed the CRTC6845 emulator to optionally control the screen configuration and video rendering. Updated the Qix and Spiders driver to use the new functionality. Added notifications for when the display enable pin changes in order to drive blanking signals.
       - 0.115              : Aaron Giles hooked up 6845 CRTC to the qix-based games. All games now generate display resolutions and frame rates on the fly. Cleaned up memory maps and a few other bits along the way. Added save state support.
       - 0.107u1            : Updates to the MagicFly driver [Robert Fresca]: Figured out the MC6845 (mapped at $0800-$0801). Fixed the screen size based on MC6845 registers. Fixed the visible area based on MC6845 registers. Fixed gfx rom region. Solved the NMI/vblank issue. Now attract works. Changed CPU clock to 625 kHz. Added new findings to the technical notes. Marked magicfly PAL as NO_DUMP (read protected).
       - 0.33b5             : Added vidhrdw\crtc6845.c/h. Added Motorola 6845 CRT Controller interface driver.
       - DRIVERS: 4enlinea.cpp, 4roses.cpp, 5clown.cpp, amaticmg.cpp, avt.cpp, buster.cpp, calomega.cpp, cardline.cpp, carrera.cpp, coinmstr.cpp, de_3.cpp, drw80pkr.cpp, fastinvaders.cpp, filetto.cpp, fortecar.cpp, freeway.cpp, funworld.cpp, gi6809.cpp, gluck2.cpp, goldnpkr.cpp, gts3a.cpp, jackpot.cpp, jokrwild.cpp, jubilee.cpp, kingdrby.cpp, laserbas.cpp, madalien.cpp, magicfly.cpp, majorpkr.cpp, merit.cpp, miniboy7.cpp, mpu12wbk.cpp, murogem.cpp, ncarrera.cpp, nibble.cpp, nyny.cpp, pntnpuzls.cpp, progolf.cpp, qix.cpp, r2dtank.cpp, rgum.cpp, sanremo.cpp, sealy_8031.cpp, sigma21.cpp, slotcarn.cpp, snk6502.cpp, spiders.cpp, ssingles.cpp, supercrd.cpp, tetriskr.cpp, tmspoker.cpp, truco.cpp, trvmadns.cpp, usgames.cpp, vcombat.cpp, vlc.cpp, whitestar.cpp and xyonix.cpp
       - SOURCE: video\mc6845.cpp



       6847

       - 0.279              : Removed fake PAL variants and replaced with a configuration option (video\mc6847.cpp) [Nigel Barnes].
       - 0.263              : AMI S68047 has different colors from MC6847 and graphics mode 5 has a different resolution (video\mc6847.cpp) [hap].
       - 0.262              : Fixed synchronization on (MESS) Dragon (PAL) machines [dave-br].
       - 0.260              : Fixed synchronization between MC6847 video display generator and screen device (video\mc6847.cpp) [dave-br].
       - 0.246              : Did a detailed study of the font inside the various 6847s. And there is now a decode form the decap. This fixes all the issues (video\mc6847.cpp) [Tim Lindner].
       - 0.212              : Fixing MC6847 to be responsive to live changes of artifacting config [Nathan Woods].
       - 0.210              : Working PAL color blend emulation. Next step is only perfom blend based on the colors luma values. Working blend based on the colors luma values. Modified palette with colors taken from real composite video captures. Full support of PAL color blend [robcfg].
       - 0.206              : Eliminated MCFG macros and modernize screen auto-configuration. N.B. The system shine had a PAL screen configured despite using a MC6847_NTSC device. This was probably a mistake and is no longer the case [AJR].
       - 0.194              : (MESS) CoCo/Dragon clock correction [AJR].
       - 0.188              : Fixed "Semigraphics 6" mode on (MESS) CoCo/MC-10 (issue reported by Jim Gerrie: https://youtu.be/VmsWqdiwH2o). Displays "stripes" for video bytes $00-$7F because INT/EXT is asserted but A/S is not, and there is no external ROM [Nathan Woods].
       - 0.177              : Fixed a bug from where video data was sampled that could cause too many samples to be loaded in low MC6847 resolution video modes [Nathan Woods].
       - 0.170              : Fixed (MESS) Goldstar FC-100 and Sanyo PHC-25 crash at start and Samsung SPC-1000 crash when a letter key is pressed [Osso].
       - 0.154              : Added internal character generator ROM and M5C6847P-1 variant [Curt Coder, Anna Wu]. Added character generator ROM for S68047. Added memory region for MC6847 chargen ROM [Curt Coder]. Fixed usage of uninitialized member in mc6847_base_device [Oliver Stoeneberg]. Avoid MC6847 one-time buffer underflow when (MESS) Goldstar FC-100 is starting up [Robbbert]. Converted MC6847 to use DEVCB2, delegates and inline configs [Fabio Priuli]. Removing seemingly inert chargen area; even if this is the way to go, this needs to be implemented in a better way [Nathan Woods].
       - 0.153              : Fixed MC6847 text display with external rom. Fixes (MESS) spc1000 and phc25 [Robbbert]. HSync and fsync are part of MC6847 so DEVCB2 conversion was needed there not in gime, this fixes (MESS) coco3 issue [Miodrag Milanovic].
       - 0.150              : Small PALETTE_INIT cleanup in video\mc6847.h [Oliver Stoeneberg].
       - 0.148u3            : Turning off MC6847 logging left on. MC6847 optimizations [Nathan Woods].
       - 0.148u2            : Moved mess\video\mc6847.c/h to mame\scr\emu\video\ [Curt Coder]. Fixed uninialized MC6847 variables and member [Oliver Stoeneberg]. Fixed array out of bounds access in mess\video\mc6847.c (MT05116: Invalid read of size 1) [Oliver Stoeneberg]. Changed the amount of scanlines on the 6847 PAL emulation. That said, the 6847 versions for PAL surely are doing more than this... At least laser1 on the MESS side works better [Nathan Woods].
       - 0.148u1            : (MESS) CoCo: Made the MC6847 emulation support mid-scanline video mode changes. This will enable the video in the CoCo 2 game "Dragon Fire" to work correctly when we get a cycle exact 6809 emulation [Nathan Woods]. Workaround for MC6847 "comparison is always true due to limited range of data type" warning which makes Apple GCC unhappy [Fabio Priuli].
       - 0.147              : Added mess\video\mc6847.c/h.
       - NOTES: Implementation of Motorola 6847 video hardware chip.
       - DRIVERS: (MESS) apf.cpp, mc10.cpp, pc6001.cpp, spc1000.cpp, sv8000.cpp, vtech1.cpp, includes\atom.h, coco12.h, mc1000.h, phc25.h, z80ne.h and video\gime.h
       - SOURCE: video\mc6847.cpp


G5.7   Philips

       SCC66470

       - 0.247              : Added machine\scc66470.cpp/h. Added Philips SCC66470 Video and System controller device [Paul Arnold].
       - NOTES: Philips SCC66470 Video and System controller. This does not render the image to the display. It is up to the user to provide their own screen_update function. Pixel (palette offset) data can be obtained by calling line( line number ) for each line.
       - DRIVERS: magicard.cpp
       - SOURCE: machine\scc66470.cpp


G5.8   Texas Instruments

       TMS3556    Video Display Processor
       TMS9128    TMS-9128NL video processor          CliffHanger
       TMS9918                       NOTES: The TMS9918(A), TMS9928(A) and TMS9929(A) are used by the Coleco, MSX, SG-1000 console and TI99/4(A). Color palette, multi color- and screen modes, sprite rendering and collision. SOURCE: video\tms9928a - Document at http://www.msxnet.org/tech/tms9918a.txt
       TMS9927    TMS9927 VTAC       NOTES: The video controller registers effect screen size (currently hard-coded on a per-game basis in MAME). SOURCE: video\tief.c  GAMES: Pacific Novelty - Shark Attack (1980), Thief (1981), NATO Defense(1982)
       TMS9928    TMS9928A VDP
       TMS9929                       NOTES: Model TMS9929(a) is the PAL variant of TMS9918 video chip. It runs at 50Hz instead of 60Hz  SOURCE: video\tms9928a
       TMS9937    TMS9937NL          Trivquiz, TriviaQuizI+III
       TMS34061   TMS34061FNL        NOTES: Video controller (User's Guide available on www.spies.com/arcade)   Capbowl, Dynobop, Hstennis, Rimrockn, Stratab
       TMS34070                      NOTES: Video Output Graphics Controller (Video Palette, CRT Driver)        Amerdart

       TPC1020    TI TPC1020AFN-084C is the same as the ACTEL A1020A PL84C (PLCC84)  (Cupsoc, TMEK, Powerins, Wrally)
       - PCB: TPC 1020 (Fantasia), TPC 1020AFN-084c (Stlforce), TPC1020AFN-084C1 (Nbajam), TPC1020BFN-068C2 (Primrage, Tmek), TPC1020BFN-084 (Maddonna, Wheelfir), TPC1024AFN-084C (Paradise, Perestro), TI 32005BWBL - TPC1020AFN-084C (Mstworld), TI9206BL-1183715-TPC1020AFN-084C (THoop), 9206BL-6161569-TPC1020AFN-084C (Sf2ce), Texas 2260BXEBL-TPC1020AFN-084C (Drtomy)


       TMS3556
       - 0.222              : Clean up register access handlers [AJR].
       - 0.221              : Stop defaulting device clock and disable read side effects for debugging [AJR].
       - 0.220              : Simplified handlers for TMS3556 VDP device [Osso].
       - 0.206              : Removed MCFG macros (video\tms3556.h) [Osso].
       - 0.196              : Added device_video_interface [AJR].
       - 0.154              : Fixed usage of uninitialized member in TMS3556 device, this fixed (MESS) Exeltel and EXL 100 crashed with -aviwrite or -mngwrite [Oliver Stoeneberg].
       - 0.149              : Use memmove() instead of memcpy() in tms3556_device::draw_line() for now since it overlaps for exeltel [Oliver Stoeneberg].
       - 0.148u2            : Moved mess\machine\tms3556.c/h to emu\video\ [Curt Coder].
       - NOTES: Texas Instruments TMS3556 Video Display Processor
       - DRIVERS: (MESS) exelv.cpp
       - SOURCE: emu\video\tms3556.cpp


       TMS9118
       - 0.152: Jim Stolis added 'Super Six Plus II English Mark Darts' (Arachnid 1990). The video is processed via a TMS9118 (U11) with two TMS4416 (U12/U13) as RAM
       NOTES: TMS9118 VDP is similar to TMS9918a, slightly different bus interface and timings.
       SOURCE: emu\video\tms9928a.cpp


       TMS9128
       - 0.143u3: Converted to a C++ device (drivers\cliffhgr.c and re900.c) [Wilbert Pol]. Added TMS9128 VDP to Buena Suerte '94 and Ruleta RE-900.
       SOURCE: emu\video\tms9928a.cpp


       TMS9927
       - 0.220              : Simplified handlers for TMS9927 VTC device [Osso].
       - 0.209              : Support a custom visible area [Dirk Best].
       - 0.202              : Eliminated TMS9927 MCFG macros and register_postload and removed "wr_" from callback getters [AJR].
       - 0.196              : Configure TMS9927 using character clock rather than dot clock [AJR].
       - 0.195              : Fixed excessive sync width after recomputing parameters during sync. Adjust vertical positioning of cursor by upscroll value [AJR].
       - 0.194              : Added BL line read for future use. Correct sync timings and added untested HSYN callback. Added 80-column/132-column display clock switch for (MESS) Visual 100. Disabled side effects for reads [AJR].
       - 0.183              : Modded TMS9927 to allow for driver-specific overscan areas. Aligned (MESS) STIC video and TMS9927 graphics properly. Changed (MESS) intvkbd to use generic TMS9927 support [Frank Palazzolo].
       - 0.182              : Scrollup fix for the TMS9927 family: Avoid reconfiguring all the CRTC parameters on any cursor shape change, which was resetting the scroll counter. Fixes scrollup for the (MESS) Otrona Attache [zx70].
       - 0.174              : Added scrolling to TMS9927 for (MESS) ITT3030 [Carl].
       - 0.172              : Added additional sanity checking to the TMS9927/CRT5027 core [Lord Nightmare].
       - 0.154              : Fixed usage of uninitialized members in tms9927_device [Oliver Stoeneberg]. Converted TMS9927 to use inline configs [Fabio Priuli].
       - 0.153              : Added VSYNC callback to TMS9927 [Curt Coder].
       - 0.149              : Modernized the TMS9927 device (drivers\statriv2.c and thief.c). Removed unneeded devlegcy.h include (video\tms9927.h) [Fabio Priuli]. Disabled unused private field in video\tms9927.h report by Clang [Oliver Stoeneberg].
       - 0.131              : Added video\tms9927.c/h. Aaron Giles added basic implementation of the TMS9927 video controller.
       - NOTES: TI TMS9927 and compatible CRT controller emulation
       - DRIVERS: statriv2.cpp and thief.cpp
       - SOURCE: video\tms9927.cpp


       TMS9928
       - 0.227              : Fixed failure to output initial interrupt state [AJR].
       - 0.208              : Removed space and mem_mask from read/write handlers [AJR].
       - 0.201              : TMS9928 configuration modernization: Replaced callback configuration macros with DEVCB3 (slightly shortening function names in the process). Changed configured clock to be twice the dot clock (as on hardware), rather than equal to it. Allow the VDP to configure the screen in device_config_complete (taking into account 60 Hz/50 Hz variations), making MCFG_TMS9928A_SCREEN_ADD_NTSC/_PAL macros obsolete. Added notes on clock outputs. Fixed number of vertical lines for NTSC devices. Eliminated the clock validity check, which has fulfilled its purpose. Fixed have_screen_update(), which was broken and returned false under any valid configuration, and rename the function has_screen_update(). This fixes regressions in 'Granny and the Gators' and other drivers using custom update functions with CDP1861, CDP1864 and TMS992x VDPs (emu\screen.h) [AJR].
       - 0.199              : Exposed internal palette using device_palette_interface [AJR].
       - 0.173              : Added GROMCLK pin. Optionally provides clock for GROMs. Added general read/write methods to TMS9928a, allowing address lines to select functions [Michael Zapf].
       - 0.154              : Converted TMS9928a to DEVCB2 [Osso].
       - 0.153              : Moved palette setting into method to avoid undefined rgb_t instances; included log control flags (video\tms9928a.c) [Michael Zapf].
       - 0.149              : Inserted checks to prevent debugger access [Michael Zapf].
       - 0.148              : Fixed table mask on TMS91xx. Update note (video\tms9928a.h) [hap].
       - 0.147u1            : Palette init can't be made inside any other place then main machine config, therefore palette in this case must be set in device_start. RB: better move this to RGB32 so no need of palette, otherwise will not work with other video devices [Miodrag Milanovic]. Converted TMS9928/9 to using RGB32 bitmap so chips can coexist with other video screens [R. Belmont].
       - 0.147              : Relocated scanline timer start at the first active pixel instead of left border, this makes accurate timing interrupt VDP (video\tms9928a.c) [hap].
       - 0.146u3            : Now using TMS9928a own address space for attached video memory, appears in memory selection list in debugger. Introduced symbolic constants for TMS99xx CPUs interrupt lines. Added a special RESET line handled by the CPU, not by the emulator core. TMS9928a/V9938: Introduced dedicated RESET line [Michael Zapf].
       - 0.145              : Aaron Giles fixed Cliff Hanger TMS9928a depends on the screen parameters matching output exactly, but for ld games it doesn't since they are externally clocked.
       - 0.143u7            : Wilbert Pol fixed TMS9928a colission detection regression.
       - 0.143u3            : Wilbert Pol converted TMS9928a to a C++ device.
       - 0.143u2            : hap fixed wrong TMS9928a address write and wrong sprite overflow.
       - 0.141u3            : Fixed colors in TMS9928a multicolor mode [Michael Zapf].
       - 0.132u1            : Fabio Priuli fixed drivers using the TMS9928 (type of frameskip causes crash).
       - 0.117              : Zsolt Vasvari simplified code in TMS9928 video system.
       - 0.111u5            : Aaron Giles removed gross TMS9928a configuration in place of more standard techniques. Updates the Cliffhanger and sg1000a drivers accordingly.
       - 0.111u4            : R. Belmont fixed TMS9928 so it recalculates the pattern mask when its dependancies change so we don't end up in weird half-modes.
       - 0.77u1             : Fixes and updates from MESS to tms9928a.c [Nathan Woods].
       - 0.68               : Added vidhrdw\tms9928a.c/h.
       - DRIVERS: byvid.cpp, forte2.cpp, kingpin.cpp, pachifev.cpp and sg1000a.cpp
       - SOURCE: video\tms9928a.cpp


       EFO90501 VDP
       - 0.208              : Tweak EFO90501 VDP dots per line to get closer to typical PAL rates [AJR].
       - 0.201              : Added 'EFO90501 VDP' device (video\tms9928a.cpp). Make EFO90501 VDP its own device type (might be a custom mask variant). Set EFO90501 refresh rate tentatively to 50 Hz (this is now a device setting) [AJR].
       - NOTES: The Night Mare (Spain) board has two graphics devices (VDP) similar to TMS9928 (Texas Instruments), marked as EFO 90501.
       - DRIVERS: nightmare.cpp
       - SOURCE: video\tms9928a.cpp


       TMS34061
       - 0.260              : Added accessors to get the horizontal and vertical visible resolution and totals (video\tms34061.h) [R. Belmont].
       - 0.233              : Eliminated remaining uses of auto_alloc and friends [Aaron Giles].
       - 0.208              : Simplified handlers. Use shorter type values [cam900].
       - 0.206              : Removed MCFG macros (video\tms34061.h) [Osso].
       - 0.201              : Added DEVCB3 accessors [Ryan Holtz].
       - 0.160              : Added save state support to TMS34061 [Osso].
       - 0.153              : Converted TMS34061 to DEVCB2 [Osso].
       - 0.149u1            : Converted TMS34061 to be a device (video\tms34061.c, drivers\capbowl.c, guab.c, itech8.c and jpmsys5.c) [Osso].
       - 0.128u6            : Atari Ace modified the tms34061.h interface to eliminate some more global Machine variables. More deprecat.h includes eliminated.
       - 0.123u5            : Zsolt Vasvari converted atarigen and TMS34061 to be handle based.
       - 0.95u2             : Aaron Giles cleaned up TMS34061 implementation to remove dirty pixel tracking and fixed scanline calculations in TMS34061 code and updated the Capcom Bowling driver to use it.
       - 0.33b5             : Added vidhrdw\tms34061.c/h. Added TMS34061 video controller.
       - DRIVERS: capbowl.cpp, guab.cpp, itech8.cpp and jpmsys5.cpp
       - SOURCE: emu\video\tms34061.cpp


G5.9   Other

       06B53P       The 06B53P IC is a custom video controller. The Lucky 74 PCB has two of them. Each one handle one graphics bank, the respective video (and color) RAM, and switch the dual-state color circuitry to generate its own palette.
       ADV476KN50   PCB: Analog Devices ADV476KN50E CMOS Monolithic 256x18 Color Palette RAM-DAC, DIP28 (Ghosthunt, Stonebal, Rapidfire, Tickee)
       ADV476KN80   PCB: ADV476KN80E, DIP28 (Stonebal)
       ADV7120KP30  PCB: ADV7120KP30, PLCC44 (Harley)
       AT76C176     PCB: Atmel AT76C176 1-Channel 6-Bit AD/DA Convertor with Clamp Circuit, DIP28 (Sliver)
       CM602, CM607P PCB: Magiccrd, Fortecar
       CRTC99       PCB: ESD CRTC99 Graphics Controller, QFP240 (Mchampdx, Tangtang), ESD_CRTC99 (Hedpanic)
       CXA1179      PCB: Sony CXA1779P TV/Video Circuit RGB Pre-Driver, DIP28 (NamcoSystem12)
       EL2386       PCB: Elantec Semiconductor 250MHz Triple Current Feedback Op Amp with Disable, SOIC16 (Ppcar)
       GD5401       PCB: Cirrus Logic CL GD5401-42QC-B-31063-198AC  standard VGA chip
       GM6845       PCB: Goldstar GM68B45S is the same as Hitachi HD6845 CTR Controller (Bmcbowl)
       HM86171      PCB: Hualon Microelectronics HMC HM86171 VGA 256 colour RAMDAC, DIP28 (Dunhuang, Lastfght)
       ICS5342      PCB: ICS GenDAC ICS5342-3, PLCC68, surface mounted (A51site4, Gauntleg, Gauntdl)
       IMSG176      PCB: Inmos IMSG176P 6-bit DAC (Gtg, Gtg2, CoolPool, Rimrockn, Stratab)   SOURCE: drivers\coolpool.cpp
       IR3P32       PCB: Sharp IR3P32A Special Function TV Interface Circuit, Conversion of color diff sig. & lumin. to RGB, NDIP30 (NintendoSuperSystem)
       KDA0476BCN   PCB: Bmcbowl  RAMDAC
       MB89322B     NOTES: CMOS Programmable CRT Controller (LockOn)
       MC6845       NOTES: CRT Controller    PCB: MC68B45P (Intgames), Screen Controller chip UMC UM6845B (Twincobr, Xyonix)
       MS176        PCB: Mosel MS176, 6-bit DAC (Dynobop, Neckneck, Slikshot)
       S951060      SOURCE: Video IC in Othello Derby is S951060-VGP.
       TD6358N      Toshiba TD6358N Frequency Synthesizer for TV/CATV, SOIC8 (NamcoSystem12)
       TR9C1710     Music Semiconductors TR9C1710 Graphics Color Palette / Combination Look-up Table and Triple Video DAC, with 6-bit DACs  (9ballsht)
       UM70C178     UMC UM70C178 HiColor RAMDACs, 256 x 18 Bit Colorpalette with 3x 6-bit DACs (Cheesech)


       CRT5037 VTAC
       - 0.209       : Hooked up CRT5037 in ltcasino.cpp [Dirk Best].
       - 0.194       : Changed description to 'CRT5037 VTAC'.
       - 0.184       : Added 'CRT5037' device (video\tms9927.cpp).
       - PCB: CRT5037 (sharkatt, statriv2, trivquiz)
       - DRIVERS: ltcasino.cpp
       - SOURCE: video\tms9927.cpp


       DP8350
       - 0.223       : Fixed initializations issues that were causing problems in DEVNOCLEAR debug builds (video\dp8350.cpp) [Osso].
       - 0.214       : Apply some subtle timing fixes and save one more variable [AJR].
       - 0.204       : Added customized CRTC (DP835X) for (MESS) Univac and configure CTC using verified input frequencies [AJR].
       - 0.203       : More complete line-by-line emulation of timing outputs. Added DP8350 to Monza GP and Vega. Support cursor and scrolling through CRTC registers for (MESS) sbrain.cpp [AJR].
       - 0.202       : Added video\dp8350.cpp/h. Preliminary emulation of National DP8350 CRT controller family. More timing outputs [AJR].
       - NOTES: National Semiconductor DP8350 Series CRT Controllers: These dedicated CRTC devices are "programmable" by specifying a long list of mask parameters. The number of parameters adjustable through software is relatively small, there being no dedicated microprocessor data bus. In practice, however, the CPU's D0 and D1 are usually tied to the Register Select lines, due to shared use of the address bus for DMA purposes. National released the DP8350 and a few other standard versions. DP8367 appears to have originally been a custom mask variant ordered by Hewlett-Packard, though it is listed as option in later datasheets; its parameters have been derived from the information presented in Manual Part No. 13220-91087 (The 8367 designation also comes from there, since the actual IC is merely marked with its HP part number, 1820-2373.).
       - PCB: National DP8350N (Video Output Graphics Controller - CRT Controller) (monzagp)
       - DRIVERS: monzagp.cpp and vega.cpp
       - SOURCE: video\dp8350.cpp


       EF9369
       - 0.220              : Simplified some handlers [Osso].
       - 0.186              : Changed description to 'Thomson EF9369 Single Chip Color Palette'.
       - 0.181              : Added video\ef9369.cpp/h. Updated guab.cpp and mpu4vid.cpp to use Thomson EF9369 video device [Dirk Best].
       - DRIVERS: guab.cpp and mpu4vid.cpp
       - SOURCE: video\ef9369.cpp


       i8275
       - 0.263       : Moderate change to API and major expansion of configuration possibilities. Changed the "draw character" callback to pack all attribute flags in a single parameter. A bit enum is provided to facilitate unpacking the bits. Allow for configurations in which up to four CRTCs are attached to the same character clock and screen. The secondary CRTCs are not fully emulated with regard to timing and some output callbacks, but their character and attribute outputs may be merged with those of the primary screen through the same display callback (video\i8275.cpp) [AJR].
       - 0.227       : Fixed a case where the DRQ output could remain unexpectedly set due to DMA cycles happening too quickly [AJR].
       - 0.215       : Simplified read/write handlers [AJR].
       - 0.212       : Continue DMA bursts when display is stopped. Added LC output callback. Calculate refresh rate from software-configured parameters [AJR].
       - 0.211       : Cancel out reverse video for hidden attribute characters. Improved and simplify handling of field attributes [AJR].
       - 0.199       : I8275 DMA refinements: Exclude FIFO characters from counting towards filling character buffer. Extended DMA up to one character past an "end of DMA" control code. Clean up code slightly [AJR].
       - 0.198       : Blank top and bottom row lines when underline is greater than 7. Start offloading parts of the device_timer routine to helper functions. Allow side effects of reads to be disabled [AJR].
       - 0.195       : Handle invisible field attributes and "end of row - stop dma" special code better; honor Video Enable bit. Fixes display is not stable and flickers in (MESS) Radio-86RK (4K ROM). No visual change on (MESS) mikromik, zorba and radio86 clones. Make Preset Counters command useful. Fixes visuals in (MESS) tim100 and hp64k [Sergey Svishchev].
       - 0.192       : Added check to avoid potential buffer overflow. This fixes debug assert shortly after start in dwarfd driver [Frank Palazzolo].
       - 0.186       : Changed description to 'Intel 8275 CRTC'.
       - 0.163       : Preliminary version of (MESS) HP 64000 driver (+ fixes to video\i8275.c) [F. Ulivi].
       - 0.161       : Improved visual attribute decoding and cursor appearance [F. Ulivi].
       - 0.155       : Added assert for index out-of-bounds access with dwarfd and dwarfda [Oliver Stoeneberg].
       - 0.154       : Removed video\i8275x.c/h. Fixed i8275x DMA burst length. It is specified in received characters, not character clocks. Replaced i8275x with new i8275 implementation. Added character attributes and special character codes. Cleanup driver [Curt Coder]. i8275 fixes: Codes f0-f3 should be invisible. Fixed rubbish on (MESS) Zorba intro screen [Robbbert]. Fixed usage of uninitialized member in i8275_device [Oliver Stoeneberg]. Swapped buffers before drawing the last row [Carl]. Added missing save states to i8275, fixes dwarfd save state regression [Osso].
       - 0.153       : i8275x DEVCB2 and driver cleanup. Converted to use delegates [Curt Coder].
       - 0.150       : Converted i8275x to DEVCB2 [Curt Coder]. Flagged device as deprecated (video\i8275.h) [Oliver Stoeneberg].
       - 0.148u2     : Fixed uninitialized member in video\i8275x.c [Oliver Stoeneberg].
       - 0.148       : Added video\i8275x.c/h. Added 'I8275 CRTC' device. Modernized i8275. Added a new implementation of the Intel 8275 with accurate DMA timing [Curt Coder].
       - 0.147u4     : Refactored i8275 to use bitmap_rgb32 [Curt Coder].
       - 0.142u3     : Added video\i8275.c/h.
       - NOTES: Intel 8275 Programmable CRT Controller implementation
       - PCB: P8275 Intel iP8275 Video Output Graphics Controller - Programmable CRT Controller, DIP40 (Dwarfd)
       - DRIVERS: dwarfd.cpp and fastinvaders.cpp
       - SOURCE: video\i8275.cpp


       SMC CRT9007
       - 0.265              : Added support to test cursor location (video\crt9007.cpp) [Dirk Best].
       - 0.220              : Simplified handlers for SMC CRT9007 device [Osso].
       - 0.203              : Converted callbacks to DEVCB3 and removed MCFG macros. Added frame timer [AJR].
       - 0.148u2            : Fixed uninitialized member in video\crt9007.c [Oliver Stoeneberg].
       - 0.142              : Added video\crt9007.c/h.
       - NOTES: SMC CRT9007 CRT Video Processor and Controller (VPAC) emulation.
       - DRIVERS: (MESS) altos2.cpp, d400.cpp, tandy2k.cpp, v102.cpp, vt220.cpp
       - SOURCE: video\crt9007.cpp


       SMC CRT9021
       - 0.220              : Simplified some handlers [Osso].
       - 0.153              : Converted CRT9021 to DEVCB2 [Osso].
       - 0.147              : Death to palettes (palette_set_color_rgb) [Curt Coder].
       - 0.142              : Added video\crt9021.c/h.
       - NOTES: SMC CRT9021 Video Attributes Controller (VAC) emulation.
       - DRIVERS: (MESS)
       - SOURCE: video\crt9021.cpp

       SMC CRT9212
       - 0.220              : Simplified some handlers [Osso].
       - 0.153              : Converted CRT9212 to DEVCB2 [Osso].
       - 0.142              : Added video\crt9212.c/h.
       - NOTES: SMC CRT9212 Double Row Buffer (DRB) emulation.
       - DRIVERS: (MESS)
       - SOURCE: video\crt9212.cpp


       SY6545
       - 0.123u3     : Nathan Woods added a stub implementation of the Rockwell 6545.
       - NOTES: Synertek SY6545, 6545-1   CRT Controller (Pottnpkrr)


       V9938
       - 0.262       : QA notes [Angelo Salese].
       - 0.243       : Fixed out-of-bounds errors from invalid command writes in certain modes [AJR].
       - 0.208       : Removed space and mem_mask from read/write handlers [AJR].
       - 0.202       : Removed V9938 MCFG macros [AJR].
       - 0.195       : Improved logging options with logmacro (video\v9938.cpp) [Michael Zapf].
       - 0.194       : V9938 should abort a command when the mode is switched before completion [Michael Zapf].
       - 0.192       : Converted V9938 to use RGB32 bitmaps. Palette has been retained mostly for the sake of the palette viewer, and now reflects the actual programmed values, rather than being a fixed RRRGGGBBB encoding plus a hacky mess for the V9958's YJK colors. V9938-on-V9938 transparent overlay is fixed for meritm.cpp (was broken a few releases ago) [AJR].
       - 0.186       : Changed description to 'Yamaha V9938 VDP'.
       - 0.185       : New device interface for palettes. Created device_palette_interface, which takes over most functionality from palette_device except for the initialization/decoding routines and RAM interface. Updated screen_device and device_gfx_interface to use a device_palette_interface object rather than a palette_device. This necessitates slight alterations to a few drivers and devices. Modified v9938 and v9958 to use the new device_palette_interface rather than a subdevice. This entails breaking a cyclic dependency between device_video_interface and screen_device for this case. A little cleanup V9938 [AJR].
       - 0.166       : Fixed (MESS) MSX2 and MSX2+ wrong screen resolutions, borders and refresh rates. Fixed also visible area and VSync in (MAME) big10.c, csplayh5.c, kas89.c, kurukuru.c, meritm.c, sangho.c, sfkick.c, sothello.c and tonton.c. Fixed off by one for PAL timing [Wilbert Pol].
       - 0.165       : Added clock to device configuration for V9938 [Wilbert Pol].
       - 0.164       : Colour mask should not influence the pattern mask as in the TMS911x VDP (video\v9938.c). Fixes MT05711 on MSX2 machines. Removed set_resolution() method, simplifying the code a bit. All drivers were defaulting to the 'HIGH' setting anyway. This also puts the drivers back in charge of setting the screen parameters [Wilbert Pol].
       - 0.154       : Let's make V9938 a bit safer; fixes black screens in (MESS) hotbit20 and expert20 MSX drivers [Wilbert Pol].
       - 0.153       : Fixed V9938 graphics regression in debug version only of (MESS) Philips NMS-8220 [Osso].
       - 0.152       : Fixed crash in debug builds (video\v9938.c) [Wilbert Pol].
       - 0.148u3     : V9938 to use DEVCB2 (video\v9938.c/h, drivers\big10.c, csplayh5.c, kas89.c, kurukuru.c, meritm.c, sangho.c, sfkick.c, sothello.c, tonton.c and geneve.c) [Miodrag Milanovic].
       - 0.147u3     : Wilbert Pol removed the V9938 "ignore-sprite-limit" hack entirely.
       - 0.147       : Miodrag Milanovic fixed memleak for csplayh5 driver, please check do not have CHD (video\v9938.c).
       - 0.146u3     : Now using V9938 own address space for attached video memory, appears in memory selection list in debugger. Also cleaned up V9938. Introduced symbolic constants for TMS99xx CPUs interrupt lines. Added a special RESET line handled by the CPU, not by the emulator core. TMS9928a/V9938: Introduced dedicated RESET line [Michael Zapf].
       - 0.144u6     : Added 'V9938 VDP' device. Removed video\v9938mod.c. Reorganized the v9938 device as a modern C++ device. Removed v9938mod.c in favor of template functions in v9938.c directly [Aaron Giles].
       - 0.139u4     : Michael Zapf set V9938 default value for status register 4 and 6.
       - 0.136u4     : Curt Coder added scanline timer-based vblank interrupt to the Merit Megatouch driver to work around the broken V9938 interrupts. Megatouch games are now working again.
       - 0.122u8     : Aaron Giles replaced use of cycles_currently_ran() in v9938 code with mame_rand(), since that is effectively the same thing.
       - 0.111u5     : Nathan Woods updated the Yamaha V9938 MSX2 video driver to use the new BITMAP_ADDR* macros instead of using the line[] array.
       - 0.106u6     : Added vidhrdw\v9938.c/h and v9938mod.c.
       - NOTES: Yamaha V9938C, MSX2 Video Processor, Video Output Graphics Controller, Res. 512 x 212 (Mega Touch 3)
       - DRIVERS: big10.cpp, csplayh5.cpp, kas89.cpp, kurukuru.cpp, meritm.cpp, sangho.cpp, sfkick.cpp, sothello.cpp and tonton.cpp
       - SOURCE: video\v9938.cpp


       V9958
       - 0.251       : Implemented V9958 registers 26 and 27 for graphic23 and graphic4 modes, fixes (MESS) FS-A1FX + Space Manbow choppy background scroll [Wilbert Pol].
       - 0.202       : Removed V9958 MCFG macros [AJR].
       - 0.192       : Convert V9958 to use RGB32 bitmaps. Palette has been retained mostly for the sake of the palette viewer, and now reflects the actual programmed values, rather than being a fixed RRRGGGBBB encoding plus a hacky mess for the V9958's YJK colors. V9938-on-V9938 transparent overlay is fixed for meritm.cpp (was broken a few releases ago).
       - 0.186       : Changed description to 'Yamaha V9958 VDP'.
       - 0.185       : New device interface for palettes. Created device_palette_interface, which takes over most functionality from palette_device except for the initialization/decoding routines and RAM interface. Updated screen_device and device_gfx_interface to use a device_palette_interface object rather than a palette_device. This necessitates slight alterations to a few drivers and devices. Modified v9938 and v9958 to use the new device_palette_interface rather than a subdevice. This entails breaking a cyclic dependency between device_video_interface and screen_device for this case [AJR].
       - 0.154       : Added 'V9958 VDP' device.
       - 0.152       : Added preliminary V9958 screen modes 10/11/12, used by Puzzle Star and Sexy Boom [Angelo Salese, Wilbert Pol]. (MESS) Hooked up V9958 to MSX2+, used by a bunch of games/apps. (MAME) Fixed for good YJK color issues and palette length (previous one was actually wrong) [Angelo Salese].
       - DRIVERS: csplayh5.cpp and sangho.cpp
       - SOURCE: video\v9938.cpp



G5.A   Palette resistors

- 0.229              : Code cleanup (video\resnet.cpp) [AJR].
- 0.154              : Documented reason for identical code in resnet.c line 613 [Couriersud].
- 0.120u4            : Altered TTL low high levels in res_net.c. This will broaden the color range a bit. Since the results are normalized, there is only a limited effect visible [Couriersud].
- 0.116u3            : Changed video\res_net.c/h to video\resnet.c. Couriersud created a new resistor network interface for computing palettes from color PROMs and component values on the PCB. Fixed several issues with the previous implementation.
- 0.94u2             : Added includes\rc.h.
- 0.91u2             : Added video\res_net.c.
- NOTES: Compute weights for resistors networks. Function can evaluate from one to three networks at a time. The output weights can either be scaled with automatically calculated scaler or scaled with a 'scaler' provided on entry.
- GAMES: mazerbla.c, shougi.c, sbowling.c and wallc.cpp
- SOURCE: video\resnet.cpp (RESNET)





G6.    Video D/A converter


G6.1   CXD1178
- PCB: SONY CXD1178Q is a 8-bit RGB 3-channel D/A converter, QFP48 (Alpinerd, MrDriller2, Propcycl)

G6.2   MC44200
- NOTES: The Motorola MC44200FT is a 3 Channel 8-bit video D/A converter
- PCB: MC44220 (Sscope), MC44200FT, QFP44 (NamcoSystem12, Primrag2, Sscope2), XC44200, QFP44 (GTIClub, NamcoSystem11)




G6.3   NPC

G6.31  SM5840
- PCB: (Scud)

G6.32  SM5877
- PCB: NPC SM5877AM - 3rd Order 2-Channel D/A Converter - SOIC24 (Sscope2, Graduis4, GTIClub)




G7.    RGB Pre-Driver

G7.1   RES NET
- 0.84u5             : Jarek Burczynski added new function: compute_resistor_net_outputs() in res_net.h. This function calculates outputs (not weights) of color circuits where the hardware consists of open collector PROMs.
- 0.61               : Added vidhrdw\res_net.h.
NOTES: Compute weights for resistors networks. Function can evaluate from one to three networks at a time. The output weights can either be scaled with automatically calculated scaler or scaled with a 'scaler' provided on entry.
GAMES: Strike Bowling (Taito 1982)
SOURCE: video\res_net.h

G7.2   Sony

G7.21  CXA1145
- PCB: Sony CXA1145P (Topshoot)

G7.22  CXA1634
- PCB: Sony CXA1634P (Topshoot)

G7.23  CXA1779
- PCB: Sony CXA1779P is a TV/Video circuit RGB Pre-Driver, DIP28 (Gp500, Namco System12 - Aquarush, Soulclbr)

G7.24  CXA2067
- PCB: Sony CXA2067AS is a TV/Video circuit RGB Pre-Driver, SDIP30 (Mrdrilr2)


G7.3   000180
- PCB: The 000180 is used for driving the RGB output (Cryptklr, Konami-GV)





G8.    Video Display


G8.1   Hitachi

G8.11  HD44102

- 0.266              : Added missing break [hap].
- 0.248              : Added intermediate render buffer [hap].
- 0.220              : Simplified some handlers [Osso].
- 0.142u1            : Added video\hd44102.c/h.
- NOTES: HD44102 Dot Matrix Liquid Crystal Graphic Display Column Driver.
- DRIVERS: (MESS) gamepock.cpp and kyocera.cpp
- SOURCE: video\hd44102.cpp


G8.12  HD44352

- 0.278              : Support alternate screen dimensions for HD44352 [Devin Acker].
- 0.205              : Removed MCFG macros [Ryan Holtz].
- 0.153              : Converted HD44352 device to DEVCB2 [Osso].
- 0.148u2            : Moved mess\machine\hd44352.c/h to emu\video\ [Curt Coder].
- NOTES: Hitachi HD44352 LCD controller.
- DRIVERS: (MESS) pb1000.cpp
- SOURCE: video\hd44352.cpp


G8.13  HD44780

- 0.282              : Reorganized the classes so that the a0* bad dump do not propagate to systems not using it (video\hd44780.cpp). Removed the parent roms stuff because we do not have a parent concrete device anymore (video\hd44780.h) [O. Galibert].
- 0.266              : Simplify some code (video\hd44780.cpp). KS0066U f00 rom validated on a live PSR [O. Galibert].
- 0.262              : Implemented timing (busy/status and blink interval) based on the input clock. Added notes about device variants [Lord Nightmare]. Adjust blink timer in device_clock_changed. Set typical clock to 270khz [hap].
- 0.261              : Explicitly define a clock for all HD44780 and derivative LCD controllers and added a validity check to ensure the defined clock is non-zero. Replaced HD44780A00 rom with corrected version from 1985 datasheet (which matches videos of vintage devices). Added HD44780UA00 variant device with rom from 1999 datasheet. Added HD44780UA02 device and hook it to the (MESS) avrmax.cpp driver, as the international characters from UA02 are required for some strings in (MESS) CC2-Schachzwerg (German). Fixed two incorrectly transcribed characters from the Epson SED1278 datasheet [Lord Nightmare]. Cleaned up mess in ROM selection code [Vas Crabb].
- 0.222              : Allow function set register to be updated again right after changing the data length. Added (MESS) Epson SED1278-0B variant with European character generator ROM [AJR].
- 0.216              : Make initialization procedure slightly less strict than datasheet implies. Turn logging back off [AJR].
- 0.214              : Added alternate interface using direct writes to bus control lines. This is necessitated by an odd edge case where the LCD controller is addressed in 4-bit mode and the busy flag is polled continuously by setting R/W = 1, RS = 0 and E = 0 and then just waiting for DB7 to be cleared. In this case, the ordinary read operation will select an alternate nibble each time, resulting in spurious values. Hitachi's HD44780 datasheet does not actually recommend this polling method, so it might actually be for one of the many compatible LCD controllers from other manufacturers [AJR].
- 0.186              : Changed description to 'Hitachi HD44780 A00 LCD Controller'.
- 0.174              : hd44780_pixel_update_func to delegate [Miodrag Milanovic].
- 0.154              : Setting address is allowed before function set. Correct ac after function set too [hap].
- 0.148u3            : Added 'HD44780 A00' device.
- 0.148u2            : Moved mess\machine\hd44780.c/h to emu\video\hd44780.c [Curt Coder].
- NOTES: Hitachi HD44780 LCD controller.
- DRIVERS: model1.cpp, model2.cpp, piggypas.cpp and speedbsk.cpp
- SOURCE: video\hd44780.cpp


G8.14  HD61602
- 0.278              : Added video\hd61602.cpp/h. Emulated HD61602 device [m1macrophage].
- NOTES: Hitachi HD61602 LCD Driver
- DRIVERS: (MESS) roland_tr707.cpp
- SOURCE: video\hd61602.cpp


G8.15  HD61830

- 0.233              : Fixed character blink mode. When Cursor=Off and Blink=On, the controller is in "Character Blink" mode, according to the data sheet. This means that the character cell at the position of the cursor is turned fully ON at a 50% blink duty cycle. Verified on a device with a real HD61830 (Atari Portfolio) [Jaen Saul]. Fixed cursor in d2 [Carl].
- 0.220              : Simplified some handlers [Osso].
- 0.213              : Number of characters must be even 2-128 [Nigel Barnes].
- 0.196              : Supported d2 in text mode [Carl].
- 0.186              : Changed description to 'Hitachi HD61830B LCD Controller'.
- 0.153              : Changed description to 'HD61830 LCDC'. Converted HD61830 to DEVCB2. Refactored nbmj8688 driver to use HD61830 device [Curt Coder]. Reworked HD61830 graphic mode rendering a bit, to handle 16-bits at a time, as per the datasheet. Fixes rendering on (MESS) Husky Hunter 2. Made character mode also work in 16-bit chunks. Fixes text display on the Hunter 2. Added bitmap bounds checking, fixes nbmj8688 LCD games crash/assert [Barry Rodewald]. Added assert for nbmj8688 driver AddressSanitizer heap-buffer-overflow (video\hd61830.c) [Oliver Stoeneberg].
- 0.148u2            : Fixed uninitialized member in video\hd61830.c [Oliver Stoeneberg].
- 0.148u1            : Reduced tagmap lookups in HD61830 [Wilbert Pol].
- 0.142              : Added video\hd61830.c/h. Added 'Hitachi HD61830' device. Imported some common C++ devices from MESS to emu folder [Curt Coder].
- NOTES: Hitachi HD61830B LCD Controller
- DRIVERS: nbmj8688.cpp
- SOURCE: video\hd61830.cpp


G8.16  HD66421

- 0.220              : Simplified some handlers [Osso].
- 0.148u2            : Moved mess\machine\hd66421.c/h to mame\ [Curt Coder].
- NOTES: Hitachi HD66421 LCD Controller/Driver
- DRIVERS: (MESS)
- SOURCE: video\hd66421.cpp



G8.2   OKI

G8.21  MSM6222B
- 0.148              : Added mess\machine\msm6222b.c/h.
- NOTES: A somewhat HD44780-compatible LCD controller.



G8.22  MSM6255

- 0.220              : Simplified some handlers [Osso].
- 0.154              : Cleanup MSM6255 [Curt Coder].
- 0.149              : Added MSM6255 device address map [Curt Coder].
- 0.142              : Added video\msm6255.c/h.
- NOTES: OKI MSM6255 Dot Matrix LCD controller implementation.
- DRIVERS: (MESS) bw2.cpp
- SOURCE: video\msm6255.cpp



G8.3   R10788

- 0.236              : Various fixes. Still not working though [Robbbert].
- 0.221              : Simplified handlers [Osso].
- 0.157              : Added machine\r10788.c/h. Skeleton Rockwell 10788 chip emulation (Keyboard and Display circuit) and use in gts1.c driver (WIP). Added logging to R10788 and fixed timer setup [Juergen Buchmueller]. Small r10788_device initialization cleanup [Oliver Stoeneberg].
- NOTES: Rockwell 10788 General Purpose Keyboard and Display circuit
- DRIVERS: gts1.cpp
- SOURCE: machine\r10788.cpp


G8.31  Rockwell 10937

- 0.282              : Changed sourcefile to video\roc10937.cpp/h.
- 0.251              : Correct duty cycle on reset. Preserve internal data buffers on POR (machine\roc10937.cpp), fixes blanked display in JPM IMPACT [James Wallace].
- 0.249              : Ignore transitions on SCLK while POC is active and don't reset input line states on POC (machine\roc10937.cpp) [O. Galibert, James Wallace, AJR, Vas Crabb].
- 0.229              : Added state output for the brightness(duty) value. Can be accessed as 'vfddutyX' where X is the port number. Examples of it in use have been added to the generic MPU4, JPM System 5 and Impact layouts, and a full SVG based version in the JPM Sonic the Hedgehog layout [James Wallace].
- 0.227              : Initialized one variable in the constructor to avoid race condition (machine\roc10937.cpp) [Osso].
- 0.196              : Cleanup [Vas Crabb].
- 0.186              : Changed description to 'Rockwell 10937 VFD controller'.
- 0.184              : Fixed CID: 138793 "Logically dead code" [Sergey Svishchev].
- 0.154              : ROC10937 has now proper device line accessors for the clock (sclk), reset (por) and data (data). All affected drivers have been updated to use these [James Wallace].
- 0.146u5            : Correct an error in the ROC10935/7 lookup table for the '7' character [Lord Nightmare].
- 0.146u4            : Added 'Rockwell 10937 VFD controller and compatible' device. ROC10937 converted to a modern device [James Wallace]: Still needs proper character clock timing for the brightness effects. Displays now have to be added to the CONFIG_START, and take the form 'MCFG_ROC10937_ADD(tag,port,RIGHT_TO_LEFT/LEFT_TO_RIGHT)'. The last option represents the direction for moving from start to end on the display. Converted all drivers that used the old form (bfmsys85.c, globalfr.c, jpmimpct.c, jpmsys5.c, maygay1b.c, mpu3.c, mpu4.c, mpu4vid.c and proconn.c), adding improved serial communications where documentation is known. Converted ROC10937 and bfm_bd1.c output code to use BITSWAP macros.
- 0.117u3            : Added machine\roc10937.c/h.
- NOTES: Alphanumeric Display Controller. The 10937 will drive displays with up to 16 characters with 14 or 16 segments plus a decimal point and comma tail. Segment decoding within each device provides for the ASCII character set (upper case only).
- SOURCE: video\roc10937.cpp


G8.32  OKI MSC1937

- 0.184              : Added 'OKI MSC1937 VFD controller' device (machine\roc10937.cpp).
- 0.109              : Made MSC1937 operation more accurately match datasheet and wiring diagram. Added indexed getters to the output system to match the newly introduced setters [El Condor].
- 0.108u2            : El Condor cleaned up the vacfdisp module to display 14 and 16 segment displays. Added a separate character set for the OKI MSC1937. Changes Scorpion 2 to the new system. Tidied up the 6840 emulator a bit.
- NOTES: VFD (Vacuum Fluorescent Display) controllers of the BFM BD1 vfd display (OKI MSC1937) have a built in character table, which converts the displayable characters into on/off signals for the various segments. However, each controller has its own way of assigning the segments, making standardisation a problem. Currently, the model used by the OKIMSC1937 is considered as a standard with the BD1 model converted to it at drawing time.
- NOTES: The OKI MSC1937 is a clone of Rockwell 10937/10957.
- DRIVERS: bfmsys85.cpp, mpu3.cpp, mpu4avan.cpp, mpu4bwb.cpp, mpu4concept.cpp, mpu4crystal.cpp, mpu4dealem.cpp, mpu4empire.cpp, mpu4mdm.cpp, mpu4misc.cpp, mpu4mod2sw.cpp, mpu4mod4oki.cpp, mpu4mod4yam.cpp, mpu4plasma.cpp, mpu4redpoint.cpp, mpu4union.cpp, mpu4unsorted.cpp and mpu4vid.cpp
- SOURCE: machine\roc10937.cpp


G8.33  Samsung 16LF01

- 0.229              : Changed description to 'Samsung 16LF01 Series VFD'.
- 0.186              : Changed description to 'Samsung 16LF01 Series VFD controller'.
- 0.154              : Added support for the Samsung 16LF01 series of VFDs (a Rockwell clone with different segment drive order). Changed all affected systems to use it (drivers\globalfr.c, jpmimpct.c, jpmsys5.c, maygay1b.c and proconn.c) [James Wallace].
- NOTES: Samsung 16LF01 (Rockwell 10937 clone)
- DRIVERS: globalfr.cpp, jpmimpctsw.cpp, jpmsys5sw.cpp, maygay1bsw.cpp and proconn.cpp
- SOURCE: machine\roc10937.cpp


G8.4   uPD7227
- 0.149              : Added video\upd7227.c/h. Added skeleton for uPD7227 LCD controller + WIP [Curt Coder].
- NOTES: uPD7227 LCD Controller


G8.5   SCN2672

- 0.207              : Blank display line by line [AJR].
- 0.204              : Reduced VRAM addressing [AJR].
- 0.202              : Removed SCN2672 MCFG macros [AJR].
- 0.199              : Added baud rate generators and SCN2672 independent buffer access to (MESS) Visual 550 [AJR].
- 0.196              : Added preliminary support for SCN2672 variant. Added SCN2672 device to (MESS) QVT-201 [AJR].
- DRIVERS: (MESS) ampex210.cpp, pcd.cpp, qvt201.cpp, ti931.cpp, tv965.cpp, v550.cpp and wy50.cpp
- SOURCE: video\scn2674.cpp


G8.51  SCN2674

- 0.264              : Fixed row table addressing mode as per documentation [Miodrag Milanovic].
- 0.222              : Delayed commands use display pointer address, not screen 2 address [AJR].
- 0.218              : Fixed premature address rollover with 16-bit extended addresses [AJR].
- 0.207              : Row buffering and timing improvements. Added optional read callbacks for row buffering DMA. Added MBC output. Correct timing of BREQ and VBLANK outputs. Improved character blink and cursor blink timings. Fixed line counter desyncing in (MESS) PCX video. Blank display line by line (video\scn2674.cpp) [AJR].
- 0.206              : Eliminated space and mem_mask arguments from read/write handlers [AJR].
- 0.204              : Added BREQ output; get a bit smarter about screen reconfiguration [AJR].
- 0.202              : Added hack to allow (MESS) PC-X to get its first interrupt and make PC-X display work again in new resolution. Removed SCN2674 MCFG macros [AJR].
- 0.200              : Added optional second space and associated buffers for attribute RAM [AJR].
- 0.197              : In row table mode double size in cached in screen start 1 [Carl].
- 0.196              : Use same character width for text and graphics modes. This change has been made partly to bring the implementation in line with other character-based video devices. It is also consistent with the documented ability of the SCN2674 to combine text and graphics modes on the same screen, which rules out bitmap resolution changes. Massive register/command processing/logging cleanup [AJR].
- 0.194              : Splitted up logging. Hook up SCN2674 to (MESS) Micro-Term 420. Avert screen_device::update_partial assert failure during debugging in debug build [AJR].
- 0.192              : More standard device configuration for SCN2674 display controller [AJR].
- 0.180              : Correct the row on which a split occurs, fixes (MESS) Octopus display of the last row before the status line split. Added command 0xA6, fixes (MESS) Octopus status line in Concurrent DOS and BIOS character block write function [Barry Rodewald].
- 0.178              : Make (MESS) Octopus look better (video\scn2674.cpp) [Carl].
- 0.166              : Forced IR0 to a non zero value at startup, fixes v4cmaze startup but needs investigation (video\scn2674.c) [James Wallace]. Always run the linecounter (video\scn2674.c), fixes mpu4vid [Carl].
- 0.160              : Added cursor (video\scn2674.c) and floppy 2 to (MESS) Siemens PC-D [Carl].
- 0.159              : Changed description to 'Signetics SCN2674 AVDC'. Moved mame\video\scn2674.c/h to emu\video\. Reworked SCN2674 Video Display Controller for (MESS) Siemens PC-D. In the mpu4vid driver the SCN2674 sometimes flickers a bit but otherwise looks the same AFAICT [Carl].
- 0.154              : Made MPU4Vid chips properly 8-bit where possible, still doesn't fix 6850 issues though, but does fix CHR regression (video\scn2674.c) [James Wallace].
- 0.146u5            : Added video\scn2674.c/h. Added 'SCN2674 VDC' device.
- NOTES: Signetics SCN2674 Advanced Video Display Controller (AVDC)
- DRIVERS: mpu4vid.cpp
- SOURCE: video\scn2674.cpp



8.6   Still Image

- 0.213              : Added imagedev\picture.cpp/h. Added still-frame PNG image device for use by digitizers/cameras/etc (imagedev\picture.cpp). Other formats can be added, we already have libjpeg in 3rdparty [R. Belmont].
- NOTES: Image device for still pictures
- DRIVERS: ???
- SOURCE: imagedev\picture.cpp


8.7   PWM Display

- 0.266              : Fixed potential time travel issue [hap].
- 0.242              : Added support for multi-state outputs per brightness level [hap].
- 0.232              : Added separate handlers for matrix x/y sides (video\pwm.cpp) [hap].
- 0.231              : Removed the need to manually call update (video\pwm.cpp) [hap].
- 0.217              : Added 'PWM Display' to Cosmo Gang (US).
- 0.211              : Added video\pwm.cpp/h. Make PWM Display a device [hap].
- NOTES: The 'PWM Display' is a generic helper for PWM(strobed) display elements, to prevent flickering and optionally handle perceived brightness levels. Common usecase is to call matrix(selmask, datamask), a collision between the 2 masks implies a powered-on display element (eg, a LED, or VFD sprite). The maximum matrix size is 64 by 64, simply due to uint64_t constraints. If a larger size is needed, create an array of pwm_display_device. If display elements are directly addressable, you can also use write_element or write_rowto set them. In this case it is required to call update() to apply the changes. Display element states are sent to output tags "y.x" where y is the matrix row number, x is the row bit. It is also sent to "y.a" for all rows. The output state is 0 for off, and >0 for on, depending on brightness level. If segmask is defined, it is also sent to "digity", for use with multi-state elements, eg. 7seg leds.If you use this device in a slot, or use multiple of them (or just don't want to use the default output tags), set a callback. Brightness tresholds (0.0 to 1.0) indicate how long an element was powered on in the last frame, eg. 0.01 means a minimum on-time for 1%. Some games use two levels of brightness by strobing elements longer.
- DRIVERS: atarifb.cpp, cgang.cpp, speedbsk.cpp and trvmadns.cpp
- SOURCE: video\pwm.cpp



==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


ROM/RAM TYPES

  1.    ROM
  2.    PROM
  2.1   EAROM
  2.11  ER2055
  2.2   EEPROM
  2.21  Serial EEPROM
  2.22  Parallel EEPROM
  2.23  EPROM Emulator
  2.24  EPROM Types
  2.3   Flash Memory
  2.31  Flash ROM
  2.32  Flash Memory + Switching Regulator

  3.    RAM
  3.1   SRAM
  3.11  MB8421
  3.12  CY7C131
  3.13  IDT 71321
  3.2   SGRAM
  3.3   DRAM
  3.4   EDO RAM
  3.5   VRAM

  4.    NVRAM
  4.1   DALLAS
  4.11  DS1220
  4.12  DS1225
  4.13  DS1230
  4.14  DS1235
  4.2   X2210
  4.21  X2212
  4.3   FM1208

  5.    NOVRAM
  5.1   2212
  5.2   2816

  6.    Buffer
  6.1   81LS95
  6.2   CY7B991
  6.3   4050

  7.    FIFO
  7.1   LH5496
  7.2   LH540202
  7.3   7200
  7.31  7201
  7.32  7201
  7.33  7203
  7.4   ACT7814
  7.5   KM75C02
  7.6   40105

  8.    Battery backed RAM + Timekeeper
  8.1   M4T28
  8.11  MK48T02
  8.12  MK48T08
  8.13  M48T35
  8.14  MK48T12
  8.15  M48T37
  8.16  M48T58
  8.17  MK48Z02
  8.18  MK48Z08
  8.2   449
  8.3   5164

  9.    Battery
  9.1   2032
  9.2   2325
  9.3   5104
  9.4   QTC85

..................................................................................................................................................................................................................................



R1.    ROM
-----------


WIP:

- 16th August   2009: Charles MacDonald - I've developed a universal device reader/programmer for 8-bit memory chips. It has the following features: * Read mask ROMs, OTPROMs, EPROMs, EEPROMs. * Read PROMs (mainly the larger variety). * Test SRAM. * Read, write, erase flash memory. * Read, write, erase and test NVRAM. * Control non-standard memory. * Device sizes of 24, 28, 32, 36, 40 pins supported, +5V only. * High speed USB interface. * Here's a picture of the unit. On the solder side, the wire link in the upper right is to correct a mistake and the center two are to route two signals which I ran out of room for. There are also components underneath the two DIP sockets on both sides of the board. The holes are for standoffs so you can mount the reader in an enclosure. LEDs are provided to indicate power (red), a fault condition such when the power distribution switch overheats or is shorted (yellow), and when USB enumeration has completed (green). The device reader assumes the target device has D0-D7 and A0-A13 in the standard location (some exceptions can be made) and uses a IDT7132 2Kx8 dual-port RAM to route eleven different inputs (RD,WR,CS,A14-A21) to eight pins of the device. This makes it simple to do things like swap A16 and /OE, merge signals such as /CE and /OE, and generally change the high-order address bus layout which is what differs the most between memory chips. As a RAM is used to configure the pin assignments of the target device, there are no physical changes to make such as adjusting jumpers, switches, or family modules. Device descriptions are loaded from a human-readable configuration file so you can add new parts and comment how they operate. As always I'll make the source code available so devices with special requirements can be added. Here's a list of devices which I have personally tested so far: EPROM 27C128, 27C256, 27C512, 27C010, 27C020, 27C040, 27C080, 27C100, 27C1000, 27C2001, 27C4000; ROM MB834000, MB838000, MB831001, MB832011: SRAM HM62256, MB8464, M5M51008, AS6C4008; NVRAM DS1230, DS1250, DS1265, DS1270 and Flash ST29EE010, Am29F010 and Am29F040. I am quite pleased with the Fujitsu MB831001/MB832011 working as the inspiration for this project came from a need to get the MegaTech version of Great Football dumped for The Dumping Union. These chips have integrated ROM banking hardware with dedicated registers and manage their own address decoding. Previous dumps for MAME were made with my SMS Cartridge Reader, but for dealing with ROMs directly (rather than cartridges) a different solution was needed. I used a Texas Instruments TPS2054 four-channel power distribution switch intended for USB hubs to route power to several pins. Unlike the ST890C I used in the PAL Device Reader, the TPS2054 doesn't need a resistor to limit the current flow and was better behaved during power-up. I also used a Microchip MCP130 reset generator after having problems with the Maxim DS1233. Both of these parts have functioned ideally and had very good documentation. I appreciate TI maintaining forums where people can get advice from their engineers, and for offering free samples of their newer chips. The PAL device reader is still under construction, and while I've made some progress analyzing feedback use in some parts, it still does not work correctly with every case. I'm definitely on the right path now, but it will just take more time and more effort. All I can ask for is continued patience.
-  3rd February 2008: Guru - Some time ago I bought an adapter for one of my EPROM Programmers for support of a 128M TSOP48 maskROM. It turns out that the same chip is used in Atomiswave carts and is easily dumped. I think I might have actually bought it for that purpose 3 years ago! The main problem now is it takes 2 1/2 hours to read one chip and to verify it with 3 reads will take an unacceptably long time. Oh yeah, so I have decided to upgrade that unit to the latest high speed USB2 model. That will set me back around AU$1800 and also requires a separate universal TSOP48 module which is another AU$400. But ahh, it's for the good of MAME-kind.


Texas Instruments (TMS 25xx/27xx):

2516        =    2048 =    2k        (TI TMS2516JL) (Astrob, Centiped)
2532        =    4096 =    4k        (TI TMS2532JDL, TMS2532JL, SGSM2532, MCM2532C) (Liberatr, Mspacman)
2564        =    8192 =    8k        (TI 2564, TMS2564JL, HSRM2564) (Kick, Paranoia)

2708        = >  8 kbit =  8 x 1024 bit = 1024 bytes = 1 kbyte = 1k  (1k x 8, DIP24 - TMS2708JL, Mitsubushi 2708, OKI MSM2708, National Semiconductor MM2708Q, F2708, 82S2708, MCM2708)
2716        = > 16 kbit = 16 x 1024 bit = 2048 bytes = 2k            (2k x 8 - TMS2716, AM2716, SGS M2716, D2716D, MBM2716, M5L2716K, MSM2716AS, Mostek MK2716J, ID2716, Toshiba TMM323D-2716, AMD2716)
2732        =    4096 =    4k        (4k x 8, AMD2732DC, AM2732DC, Fujitsu 2732A, NEC D2732D, ID2732A, M5L2732K, ET2732Q, MBM2732)
2758        =    2048 =    2k        (MM2758Q, Intel B2758, TMS2758JD) (Hustler, DiscoFever, Mooncrst)
2763        =    8192 =    8k        (Intel D2763)
2764        =    8192 =    8k        (TMS2764, Fujitsu MBM2764K, Mitsubushi M5L2764K, ML52764, Intel P2764, D2764A, SGS M2764, TMM2764, ID2764, SGS M2764, AN482764G, HN482764G, F-DIL-28, SEEQ DQ2764, SEEQ2764)
27080       = 2097152 = 2048k = 2MB  (NEC uPD27080)
27128       =   16384 =   16k        (TMS27128J, Mitsubishi M5L27128K, M27128A, D27128, AM27128, HN4827128G, I27128A, P27128A)
27256       =   32768 =   32k        (AM27256, TMM27256AD, Intel P27256, HN27256, NEC D27256D, MBM27256, TMS27256JL, F-DIL-28)
27301       =  131072 =  128k
27512       =   65536 =   64k        (AM27512, SGS/Thomson M27512-2FIST, HN27512P, TMM27512D, M27512FI, TMS27PC512)
27CX322     =    4096 =    4k        (F1gpstar)
27CX642     =    8192 =    8k        (Wildplt)
27C64       =    8192 =    8k
27C010      =  131072 =  128k        (AMD 27C010, AM27C010, TI TMS27C010A, D27C010A, NM27C010Q)
27C020      =  262144 =  256k        (AM27C020, D27C020, ID27C020, Atmel AT27C020 - OTP Mask, Intel 27C020)
27C040      =  524288 =  512k        (4MBit Mask, DIP32) (AM27C040, M27C040Q, TI 27C040, W27C040)
27C080      = 1048576 = 1024k = 1MB  (ATMEL AT27C080, F-DIL-32, 1M x 8)
27C100      =  131072 =  128k        (AM27C100, 27C100A)
27C101      =  131072 =  128k        (M5M27C101K, HM27C101AG)
27C128      =   16384 =   16k
27C160      = 2097152 = 2048k = 2MB  (M27C160, ST 27C160, 16Mbit/16 bit, DIP42)
27C201      =  262144 =  256k
27C202      =  262144 =  256k
27C210      =  131072 =  128k
27C220      =  262144 =  256k
27C240      =  524288 =  512k
27C256      =   32768 =   32k        (AM27C256, GI27C256, M27C256, MBM27C256A, NEC 27C256AC, NMC27C256Q, ST27C256, S27C256, 27C256B, DIP28)
27C301      =  131072 =  128k        (HN27C301P)
27C322      = 4194304 = 4096k = 4MB  (32MB DIP42, M27C322) (DemonFront)
27C400      =  524288 =  512k
27C402      =  524288 =  512k
27C512      =   65536 =   64k        (AM27C512, MBM27C512, NEC D27C512C, ST M27C512, TMS27C512, 27C512P, DIP28, F-DIL-28)
27C642      =    8192 =    8k        (Atmel AT27HC642R) (Armchmp2)
27C800      = 1048576 = 1024k = 1MB
27C801      = 1048576 = 1024k = 1MB  (ST M27C801, ST27C801, SGS 27C801; DIP32)
27C802      = 1048576 = 1024k = 1MB  (MSM27C802CZ)
27C0248     =  262144 =  256k        (Gticlub)
27C1000     =  131072 =  128k        (M271000ZB, D27C1000D, DIP32)
27C1001     =  131072 =  128k        (271001, DIP32, F-DIL-32) (Poundfor)
27C1024     =  131072 =  128k        (F-DIL-40, DIP40)
27C1602     = 2097152 = 2048k = 2MB  (MSM271602CZ, MSM27C1602CZ, DIP42) (Gnbarich)
27C1652     = 2097152 = 2048k = 2MB  (MSM27C1652CZ) (Gnbarich)
27C2000     =  262144 =  256k        (Macronix MX27C2000, 2MBit, DIP32 EPROM)
27C2001     =  262144 =  256k        (ST M27C2001, NEC 27C2001, F-DIL-32)
27C2048     =  262144 =  256k
27C2100     =  262144 =  256k        (mx27c2100 - Nitrobal)
27C3202     = 4194304 = 4096k = 4MB  (32MB TSOP48 Type II OTP Mask) (MartialMaster)
27C3252     = 4194304 = 4096k = 4MB  (MR27C3252CZ, 32MBit, SOP44) (NamcoSystem12)
27C4000     =  524288 =  512k        (Macronix MX27C4000, D27C4000D, DIP32)
27C4001     =  524288 =  512k        (ST M27C4001, SGS 27c4001, F-DIL-32)
27C4002     =  524288 =  512k        (ST-M27C4002, DIP40, F-DIL-40)
27C4096     =  524288 =  512k        (AM27C4096, D27C4096, 274096, Hitachi HN27C4096, 256k x 16, DIP40)
27C4100     =  524288 =  512k        (Macronix MX27C4100)
27C4200     =  524288 =  512k
27C8000     = 1048576 = 1024k = 1MB  (uPD27C8000, MX27C8000, 42 pin 8MBit Mask)
27C8001     = 1048576 = 1024k = 1MB




Other:

303         =    ?    =    ?         (IGSD0303, 256x16) (Drgnwrld)
406         =    1024 =    1k        (NEC B406, 1024 x 4)
426         =    1024 =    1k        (NEC uPB426, B426)
2864        =    8192 =    8k        (Jedi)
3622        =            512 bytes   (512 x 4) (Ace)
3758        =    1024 =    1k        (MSM3758AS) (Headon2)
4716        =    2048 =    2k        (AM4716) (Bradley, Tugboat)
4764        =    8192 =    8k        (Sstrngr2)
5317        =            256 bytes   (PR5317.76) (Brain)
6253        =    ?    =    ?         (MSM6253RS, OKI M6253, OKI 6253, General Purpose Mask Programmable ROM, DIP18) (Sega-System24, SuperKanekoNovaSystem, Strkfgtr)
8148        =    1024 =    1k        (NEC R8148IY, 1024 x 4 SRAM) (Pengo)
8316        =    2048 =    2k        (8316E) (Orbit)
8422        =    2048 =    2k        (Fujitsu MB8422)
8423        =    2048 =    2k        (GI8423)
8437        =    8192 =    8k        (GI8437)
9016        =  131072 =  128k        (Fujitsu 9016, DIP28) (Ainferno)
9218        =    2048 =    2k        (AMD AM9218B) (Tempest)
9316        =    2048 =    2k        (GI9316B) (Boothill, Centiped)
23090       =  131072 =  128k        (Sharp LH23090) (Rallybik)
23128       =   16384 =   16k
23160       = 2097152 = 2048k = 2MB  (M5M23160, 16MBit, 42 pins mask)
23256       =   32768 =   32k
26512       =   65536 =   64k        (MX26C512APC) (Dreamwld, Moremorp)
40986       =  131072 =  128k        (Pang)
58732       =    1024 =    1k        (M58732S) (Spacefev)
83400       = 2097152 = 2048k = 2MB  (MB83400)
83800       = 2097152 = 2048k = 2MB  (MB83800)
231011      =  131072 =  128k        (KM231011) (Chequered Flag)
231024      =  131072 =  128k        (RP231024D) (Ddragon2)
231600      = 2097152 = 2048k = 2MB  (23C1600) (Powerins)
231610      = 2097152 = 2048k = 2MB  (23C1610, MX23C1610T, SOP44, TSOP48) (Rdft)
232100      =    ?    =    ?         (23C2100) (Kouryu)
233210      = 4194304 = 4096k = 4MB  (GM23C32100A 32MBit DIP42, MX23C3210TC TSOP48)
234000      =  524288 =  512k        (MN234000, 23C4000, 4MBit Mask, 32 pins) (Bonzeadv)
234001      =  524288 =  512k        (NEC D23C4001)
234100      =  524288 =  512k        (MX23C4100, SOP40, DIP40)
234200      =  524288 =  512k        (COPX-D2)
236410      = 8388608 = 8192k = 8MB  (MX23C6410, 64MBit MaskROM, SOP44)
238000      = 1048576 = 1024k = 1MB  (MX23C8000, D23C8000SCZ, SOP32)
238001      = 1048576 = 1024k = 1MB  (NEC D23C8001, 23C8001E)
261600      = 2097152 = 2048k = 2MB  (MT26C1600)
275308      =   32768 =   32k        (AMIC 275308) (Hidnctch)
531000      =  131072 =  128k        (Toshiba TC531000P - 28 pin and pin 22 is the extra address pin)
531024      =  131072 =  128k        (TC531024, DIP24)
533202      =  262144 =  256k        (M533202, SOP44 mask)
534000      =  524288 =  512k        (TC534000AP, TC534000P, MB534000)
534002      =  524288 =  512k        (M534002C-13, SOP40 mask, BIOS rom) (Rvschool, Sfex, Ts2)
538200      = 1048576 = 1024k = 1MB  (TC538200AP)
541000      =  131072 =  128k        (TC541000)
541001      =  131072 =  128k        (TC541001)
571000      =  131072 =  128k        (TC571000)
571001      =  131072 =  128k        (Toshiba TC571001D, 57C1001, 571001D) (Midres)
571025      =  131072 =  128k        (TC57H1025AD)
574000      =  524288 =  512k        (TC574000AD, TC574000D) (Topshoot, NintendoSuperSystem)
574200      =  524288 =  512k        (TC574200, 57C4200 256k X 16, DIP40)
578200      = 1048576 = 1024k = 1MB  (57C8200)
831000      =  131072 =  128k        (MB831000, DIP28)
831600      = 2097152 = 2048k = 2MB  (MB831600)
831620      = 2097152 = 2048k = 2MB  (Arabfgt, Brival, Dbz2)
832000      =  131072 =  128k        (MB832000) (Gollygho)
832001      =  131072 =  128k        (MB832001, DIP32)
834000      =  524288 =  512k        (MB834000, DIP32)
834100      =  524288 =  512k        (MB834100)
838000      = 1048576 = 1024k = 1MB  (MB838000)
838200      = 1048576 = 1024k = 1MB  (MB838200B, DIP42)
2316000     = 2097152 = 2048k = 2MB  (KM23C16000, KM2316000, uPD23C16000GX, 2316000, 16MBit SOP44 mask)
2332000     = 4194304 = 4096k = 4MB  (KM23C32000, uPD23C32000GX)
2332020     = 4194304 = 4096k = 4MB  (uPD23C32020A, uPD23C32020CZ, 32MBit, DIP42 mask) (Sfex2)
2364000     = 8388608 = 8192k = 8MB  (Sharp 23C64000F, surface mounted)
5316200     = 2097152 = 2048k = 2MB  (TC5316200CP)
5332204     = 4194304 = 4096k = 4MB  (TC5332204AP) (Kof99, Vsnetscr)
5716200     = 2097152 = 2048k = 2MB  (TC5716200)
5716200     = 2097152 = 2048k = 2MB  (57C16200) (Donpatchi)
8316200     = 2097152 = 2048k = 2MB  (MB8316200B, SOP44, DIP42)



   8 MEG    =  8 MegaBit = 1MBbytes
  16 MEG    = 16 MegaBit = 2MB
  32 MEG    = 32 MegaBit = 4MB

  1M Mask   =   131072 =   128k            (DIP28) (Champbwl)
  2M Mask   =   262144 =   256k            (DIP32) (Champbwl)
  4M Mask   =   524288 =   512k            (DIP42) (Rezon)
  8M Mask   =  1048576 =  1024k = 1MB
 16M Mask   =  2097152 =  2048k = 2MB
 32M Mask   =  4194304 =  4096k = 4MB      (DIP42 or SOP44) (Drgw2)
 64M Mask   =  8388608 =  8192k = 8MB
128M Mask   = 16777216 = 16384k =16MB

2megcust    =   262144 =   256k             (Fixeight)
COPX-D1     =   524288 =   512k             (DIP40) (Cupsoc)
COPX-D2     =   524288 =   512k             (RISE CORP  4M MASK, DIP40) (Godzilla, Denjinmk), 2M-16bit ? (Sdgndmrb)
F16MB       =  2097152 =  2048k = 2MB       (Sftm)
623B01      =  2097152 =  2048k = 2MB       (16MBit MASKROM) (Heatof11, Polystar)
23V32000    =  4194304 =  4096k = 4MB       (32MBit MASKROM, DIP42, IGSD0301 UM23V32000) (Drgnwrld)
NUS-ZHAJ    =  8388608 =  8192k = 8MB       (64Mbit MASKROM), DIP28) (11beat)


Hitachi ROM's:

462532      =    4096 =    4k        (HN462532G = 2532)
462708      =    1024 =    1k        (HN462708 = 2708)
462716      =    2048 =    2k        (HN462716G = 2716) (HM462716G) (Sbugger)
462732      =    4096 =    4k        (HN462732G = 2732) (HN422732G) (Promutrv)
62302       =  262144 =  256k        (HN62302)
62318       = 1048576 = 1024k = 1MB  (HN62318)
62344       =  524288 =  512k        (HN62344BPC84)
62404       =  524288 =  512k        (HN62404, QFP44)
62412       =  262144 =  256k        (Punkshot)
62414       =  524288 =  512k        (HN62414)
62415       =  524288 =  512k        (HN62415P)
62418       = 1048576 = 1024k = 1MB  (HN62418)
62428       = 1048576 = 1024k = 1MB  (HN62428P)
62434       =  524288 =  512k        (HN62434)
62444       =  524288 =  512k        (HN62444) (Racin' Force)
624017      = 2097152 = 2048k = 2MB  (HN624017P)
624116      = 2097152 = 2048k = 2MB  (HN624116, DIP42)
624316      = 2097152 = 2048k = 2MB  (HN624316, SOP44 16M mask)




Sharp ROM's:

LH5762      =    8192 =    8k          (labelled 04544191) (Finalap3, Gollygho)
LH5763      =    8192 =    8k          (Sharp LH5763J)
LH530800    =  131072 =  128k          (LH530800A, SOP32)
LH53100     =  131072 =  128k
LH532       =  262144 =  256k
LH53200     =  262144 =  256k
LH532048    =  262144 =  256k          (LH532048, SOP40)
LH532100    =  262144 =  256k          (DIP32)
LH532200    =  262144 =  256k          (LH532200)
LH532500    =  262144 =  256k
LH53400     =  524288 =  512k
LH534100    =  524288 =  512k          (Sharp LH534100, DIP32)
LH534200    =  524288 =  512k          (LH534200)
LH534500    =  524288 =  512k          (LH534500, 256k x 16, DIP40)
LH537019    = 2097152 = 2048k = 2MB    (SOP44, 16M mask, Bangball - YMF278B wave data ROM)
LH53800     = 1048576 = 1024k = 1MB    (LH53805N, LH53806N, LH53808N, LH53809N...) (F1gp)
LH538000    = 1048576 = 1024k = 1MB    (LH538100, SOP32)
LH538100    = 1048576 = 1024k = 1MB    (LH538100, DIP/SOP32)
LH538500    = 1048576 = 1024k = 1MB    (LH538500)
LH5364000   = 8388608 = 8192k = 8MB    (Sfex2)

LH532A      =  262144 =  256k          (Pipedrm - roms a29 and a30)
LH532G      =  262144 =  256k          (F1gp)
LH532J      =  262144 =  256k          (Quiz18k, Welltris)
LH534G      =  524288 =  512k          (Quiz18k, F1gp2)
LH534J      =  524288 =  512k          (Pipedrm, Welltris)
LH537F      = 2097152 = 2048k = 2MB    (F1gp2)
LH537K      = 2097152 = 2048k = 2MB    (Gogomile)
LH5370H     = 2097152 = 2048k = 2MB    (Gogomile)
LH538N      = 1048576 = 1024k = 1MB    (Gogomile)
LH538P      = 1048576 = 1024k = 1MB    (F1gp)





R2.    PROM (Programmable ROM)
------------------------------

NOTES: Color Prom (Red/Green/Blue), Alpha Numerics PROM, Sync prom, Sprite Prom, Decoder prom...
READER: Needham EMP-20 PROM reader



AM (27Sxx) - Bi-polar PROMs:

27S08 = AM27S08                   =   32 bytes
27S13 = AM27S13                   =  512 bytes  (Quiz211)
27S18 = AM27S18                   =   32 bytes
27S19 = AM27S19, AM27S19DC        =  256 bytes
27S21 = AM27S21, AM27S21APC       =  256 bytes  ( 256 x 4)
27S29 = AM27S29APC                =  512 bytes
27S33 = AM27S33PC                 = 1024 bytes  (1024 x 4)


Fujitsu PROMs:

7051 = MB7051                     =   32 bytes  (  32 x 8)
7052 = MB7052                     =  256 bytes  ( 256 x 4)
7054 = MB7054                     = 1024 bytes  (1024 x 8)
7056 = MB7056                     =   32 bytes  (  32 x 8)
7112 = MB7112                     =   32 bytes  (  32 x 8)
7114 = MB7114E, MB7114H, MB7114L  =  256 bytes  ( 256 x 4)
7116 = MB7116, MB7116H            =  512 bytes  ( 512 x 4) (Chinagat, SchmeizerRobo)
7118 = MB7118, MB7118E            =  256 bytes  ( 256 x 8) (Luckywld, ThunderCeptor2)
7122 = MB7122E, MB7122H, MB7122Y  = 1024 bytes  (1024 x 4, DIL18) (Aso, Csilver, Wizdfire, Robocop)
7124 = MB7124E, MB7124H           =  512 bytes  ( 512 x 8)
7128 = MB7128E, MB7122H           = 2048 bytes  (2048 x 4)
7132 = MB7132, MB7132E            = 1024 bytes  (1024 x 8)
7134 = MB7134, MB7134E            =     ?                  (Victroad)
7138 = MB7138                     = 2048 bytes  (2048 x 8)

8516 = MB8516                     = 2048 bytes  (2048 x 8) (Cosmica)
8518 = MB8518                     = 1024 bytes  (1024 x 8) (Rotaryf)
8532 = MB8532                     = 4096 bytes  (4096 x 8) (Gomoku, Ckong)



Harris PROMs:

7602 = M3-7602-5                           =   32 bytes  (  32 x 8) (Dwarfd, Gldarrow)
7603 = Harris 7603, M3-7603                =   32 bytes  (  32 x 8) (Dambust)
7609                                       = 1024 bytes  (1024 x 8) (Gunfight)
7611 = Harris 7611, Harris M3-7611-5       =  256 bytes  ( 256 x 4)
7621 = 7621                                =  512 bytes             (Arkanoid)
7641 = Harris 7641, M3-7641-5-7802         =  512 bytes  ( 512 x 8) (Circus, Sinistar)
7643 = Harris MI-7643A-5                   = 1024 bytes  (1024 x 4)
7649 = Harris M3-7649A-5                   =  512 bytes  ( 512 x 8) (Mysticm)



Intersil PROMs:

5600 = IM5600, Intersil 5600      =   32 bytes
5610 = IM5610, IM5610CPE          =   32 bytes  (32 x 8, bipolar)
5623 = IM5623, IM5623CPE          =  256 bytes  (Rallyx)



MMI (63sxxx) PROMs:

6301   = MMI6301                  =  256 bytes  (256 x 4, 16-pin)
6306        ?                          ?                            (Arkanoid, Shootgal)
6330   = MMI6330-1J               =   32 bytes                      (Cosmic Alien)
6331   = MMI6331-1J, 6331-1N      =   32 bytes  (32 x 8, Bi-polar)  (MrKourgar)
6336   =    ?                     =   32 bytes                      (N-Sub, Nmouse)
6349   = MMI6349                  =  512 bytes  (512 x 8)           (Airattck, Quiz211,Travrusa)
6350   = MMI6350                  =   32 bytes                      (Travusa)
6353   = MMI6353     Bi-polar     = 1024 bytes  (1024 x 4)          (Depthch, Fieldday)
63S080 = MMI63S080N               =   32 bytes                      (Halleys)
63S081 = MMI63S081N               =   32 bytes
63S140 = MMI63S140N               =  256 bytes  (256 x 4)           (Monzagp)
63S141 = MMI63S141N  Bi-polar     =  256 bytes  (256 x 4, DIP16)    (Tokio, Avengers, Mainevt, Kikikai = 63S141AN)
63S281 = MMI63S281N               =  256 bytes  (256 x 8)           (Darkmist, Panic Road, AirRaid, SOURCE: Mustache = 4096 bytes !? )
63S441 = NMI63S441N               = 1024 bytes



Signetics (82SXXX) PROMs:

82S23  =   32 bytes  (N82S23)
82S29  =  256 bytes  (N82S29N, 256 x 4  bipolar PROM)
82S100 =  256 bytes  (256 x 8) (Catnmous, Laserbat) - NOTES: In MAME is the 82s100.13m from Catnmous is a 245 bytes PLD)
82S115 =  512 bytes  (512 x 8)
82S123 =   32 bytes  (N82S123AN, N82S123N, 32 x 8  bipolar PROM)
82S126 =  256 bytes  (256 x 4)
82S129 =  256 bytes  (N82S129AN, 256 x 4)
82S130 =  512 bytes  (512 x 4) (Quasar, Galaxia)
82S131 =  512 bytes  (SN82S131N, 512 x 4)
82S135 =  256 bytes  (N82S135, 82S135N, 256 x 8)
82S136 = 1024 bytes  (?)
82S137 = 1024 bytes  (N82S137N, 1024 x 4  bipolar PROM)
82S141 =  512 bytes  (512 x 8)
82S147 =  512 bytes  (SN82S147N, Philips N82S147AN, 512 x 8  bipolar PROM, DIP20)
82S153 = 1024 bytes  (1024 x 4)
82S158 = 2048 bytes  (2048 x 8) (Arkanoid)
82S181 = 1024 bytes  (1024 x 8)
82S185 = 2048 bytes  (N82S185, 2048 x 4)
82S191 = 2048 bytes  (82S191N, 2048 x 8)


       82s129
       - 0.221              : Simplified handlers [Osso].
       - 0.180              : Added machine\82s129.cpp/h. Added 82S126/82S129 256x4-bit PROM [Ryan Holtz].
       - NOTES: 82S126/82S129 256x4-bit PROM or 1K-bit TTL bipolar PROM
       - SOURCE: machine\82s129.cpp



Texas Instruments PROMs:

74S188 =   32 bytes     (SN74S188N, DM74S188A, 32 x 8, DIP16) (Ad2083, Sprint1)
74S287 =  256 bytes     (DM74S287AN, DM74S287N, 256 x 4, DIP 16, PLCC20) (Soccer, Sprint1, Skyraid)
74S288 =   32 bytes     (SN74S288N, DM74S288N, 32 x 8, bipolar PROM, DIP16) (Spaceg)
74S471 =  256 bytes     (SN74S471N) (Astrof)
74S472 =  512 bytes     (512 x 8, DIP20) (Guardian)
74S474 =  512 bytes     (512 x 8, DIP24) (Sidetrac)
74S476 = 1024 bytes     (1024 x 4) (Dribling, Superbug)
74S516 =  512 bytes     (SN74S516, 512 x 8) (Tx1)
74S571 =  512 bytes     (512 x 4, PLCC20) (Dodgem, Sprint1)
74S572 = 1024 bytes     (1024 x 4, DIP18) (Vangrd2)


Texas Instruments (TBPxxSxx) PROMs:

TBP18S030 =   32 bytes     (TBP18S030N, 256-bit 32 x 8)
TBP21S41  = 1024 bytes
TBP21S42  =  512 bytes     (Pettanp)
TBP24S10  =  256 bytes     (TBP24S10N, 256x4)
TBP24S41                   (Atari Soccer, Turbo)
TBP24S030 =  256 bytes
TBP28S42  =  512 bytes     (Pettanp, TX1)
TBP28S46  =  512 bytes     (TBP28S46N, Bking)
TBP28L22  =  256 bytes     (TBP28L22N, 256 x 8, Bi-polar)
TBP42S10  =  256 bytes



Others PROMs:

93427                    =  256 bytes    (93427PC) (Brdrline, Centiped)
93448                    =  512 bytes    (TESLA 93448, 93448PC-F7809, MBH93448C) (512 x 8) (Circus)
93451                    = 1024 bytes    (Dodgem)
93453                    = 1024 bytes    (1024 x 4) (Depthch)
93511                    = 2048 bytes    (93Z511DC) (Portrait)
EB16.22                  =  256 bytes    (Data Prom) (Bioatack, Sfposeid, Timetunl)
S68E08                   =  512 bytes    (Denjinmk, Godzilla, Sdgndmrb)
Cypress CY7C291          =  256 bytes    (Bi-polar) (Mspacman)
Cypress   7C292A         = 2048 bytes    (2048 x 8)
Cypress   7C264          = 8192 bytes    (8192 x 8)
NS 47S287                = 2048 bytes
XILINX 1718DPC           = 144 x 1bit    One Time Programmable Serial Configuration PROM, PLCC-20     (Kdeadeye)
XILINX 1736DPC           = 288 x 1bit    One Time Programmable Serial Configuration PROM, PLCC-20     (MetalManiax)
XILINX 1765DPC           = 536 x 1bit    One Time Programmable Serial Configuration PROM, PLCC-20     (MetalManiax)



R2.1   EAROM

- 0.200              : Removed machine\atari_vg.cpp/h. Eliminated "Atari VG EAROM" in favor of newer ER2055 device. Removed spurious address space and added pin diagram (machine\er2055.cpp) [AJR].
- 0.166              : Significant accuracy improvements, documentation and other updates to the ER-2055 EAROM emulation used for several Atari games, based on schematics and datasheets. It now uses a state machine to keep track of the current EAROM bus state (machine\atari_vg.c) [Lord Nightmare].
- 0.145              : Converted ATARIVGEAROM to modern devices [Miodrag Milanovic].
- 0.139u4            : Modernized liberator driver and added save state support. Moved generalized EAROM handling to machine\atarigen.c [Aaron Giles].
- 0.129u5            : Proper device nvram handling for atari_vg. Removed EAROM from Battle Zone. This fixed vector drawing corruption when using a save state [Couriersud].
- 0.27               : Added machine\atari_vg.c/h. Added generic EAROM routines for the Atari Vector games.
- NOTES: EAROM is an Electrically Alterable ROM to save the top 3 high scores and other things.
- DRIVERS: asteroid.cpp, bwidow.cpp, bzone.cpp, centiped.cpp, galaga.cpp, runaway.cpp and tempest.cpp
- SOURCE: machine\atari_vg.cpp



R2.11  ER2055

- 0.196              : Separated CLK writes to make emulation usable for (MESS) CIT-101 [AJR].
- 0.139u4            : Added machine\er2055.c/h. Aaron Giles added ER2055 device. Changed Liberator (Atari 1982) over to using it. Other Atari games to follow.
- NOTES: ER2055 512 BIT Electrically Alterable READ ONLY Memory.
- PCB: ER2055 (Qwak), ER-2055 (Caterpillar Olympia 1980)
- NOTES: ER2055 EAROM = GI 512 bit electrically alterable read-only memory.
- DRIVERS: liberatr.cpp
- SOURCE: machine\er2055.cpp



R2.2   EEPROM

- 0.280              : Added default NVRAM for LuxorABC 1600 to pass systest (machine\nmc9306.cpp and luxor\abc1600.cpp) [Curt Coder].
- 0.278              : Added configuration parameter for DO tristate level (machine\eepromser.cpp) [AJR].
- 0.274              : One variable was missing from savestates (machine\eepromser.cpp) [hap].
- 0.268              : Read overflow initializing NVRAM (MT 08524). Actual rom size may be less than AT28C64B_DATA_BYTES. a2bus/booti, as a motivating example, has a ROM size of 0x2000 (machine\at28c64b.cpp) [ksherlock].
- 0.267              : Converted printfs to logmacro (machine\m6m80011ap.cpp) [Angelo Salese].
- 0.262              : Fixes and adjustments to 'Dallas DS2430A 1-Wire EEPROM'. Undo incorrect swapping of tPDL and tPDH and make latter slightly longer. Remember to pull up data line after reading last bit from ROM (machine\ds2430a.cpp). Use DS2430A device emulation in viper.cpp driver [AJR]. Miscellaneous cleanup (machine\ds2430a.cpp, machine\eeprom.cpp/h) [Vas Crabb].
- 0.255              : Silence logging (machine\ds2430a.cpp) [AJR].
- 0.254              : Added machine\ds2430a.cpp/h. Added 'Dallas DS2430A 1-Wire EEPROM' device [AJR].
- 0.253              : Fixed NMC9306 NVRAM communications [Curt Coder].
- 0.250              : Correct data out level (machine\eepromser.cpp) [Patrick Mackinlay].
- 0.245              : Removed unnecessary debug logging (machine\at28c64b.cpp) [R. Belmont].
- 0.221              : Simplified handlers (machine\at28c16.cpp) [Osso].
- 0.208              : Simplified read/write handlers (machine\at29x.cpp) [AJR].
- 0.205              : Serial EEPROMs don't actually have reset lines, so remove the device_reset handler that automatically switches back to STATE_IN_RESET at machine reset time (machine\eepromser.cpp). This change might cause erratic behavior in some systems which should be deasserting CS by clearing their EEPROM latches on reset, but is more appropriate for some MCU-based systems which actually depend on CS being automatically asserted through pull-ups when their quasi-bidirectional ports are reset [AJR].
- 0.202              : Added AM28F020 [Patrick Mackinlay].
- 0.201              : Removed EEPROM and M6M80011AP MCFG macros [Ryan Holtz].
- 0.199              : Eliminated customized MCFG_AT28C16_ADD macros [Ryan Holtz].
- 0.192              : Added machine\28fxxx.cpp/h. Added device emulating 28F010 Flash memory and family (not compatible with JEDEC Flash protocol). Converted (MESS) Interpro to use this device [Patrick Mackinlay].
- 0.191              : Removed endianness check (machine\eeprom.cpp) [Patrick Mackinlay].
- 0.175              : Removed device_memory_interface in machine\eeprom.cpp [O. Galibert].
- 0.165              : Changed machine\at29040a.c/h to at29x.c/h. New AT29 flash EEPROM circuits [Michael Zapf].
- 0.154              : Removed machine\er59256.c/h. Fixed communications in machine\at45dbxx.c [O. Galibert].
- 0.151              : Modernized ER59256 device [Osso].
- 0.150              : Renamed eeprom_device to serial_eeprom_device in anticipation of adding a parallel EEPROM device. Splitted eeprom.c into a base class base_eeprom_device and a serial-specific subclass serial_eeprom_device. Moved the latter into its own file eepromser.c and significantly cleaned up/simplified the code. The new code should be functionally the same as the previous code, but expect that to change soon. As a side-effect, the size and bus width of the EEPROM is now specified in the ADD macro rather than in the interface structure. Rewrite serial EEPROM devices, breaking them out into separate chips of the proper size and protocol. Update all drivers, removing custom implementations, and replacing them with standard ones. Moved core read, write, erase functionality into the EEPROM base class a simulated delays in write/erase cycles. Still some more testing/verification work left to do. RDY/BUSY on ER5911 is always live regardless of CS state. Fixes G.I. Joe and probably others (machine\eepromser.c). Make sure shift register is clear at the start of a read to simulate the dummy 0 bit. Fixed polarity of CS/CLK lines in mitchell.c. Fixed most regressions due to EEPROM changes. Remaining issues are noted at the top of eepromser.c. Added eeprompar.*, implementing a simple interface for parallel EEPROMs. Created atari_eeprom_device which wraps a 2804 or 2816 EEPROM with the standard Atari write-locking mechanism. Updated all drivers to use this, and removed all EEPROM stuff from atarigen [Aaron Giles]. Small DEVICE_STOP cleanup in machine\er59256.c [Oliver Stoeneberg].
- 0.149              : Removed unused at28c16_interface (machine\at28c16.h) [smf].
- 0.148u5            : Finished modernizing AT28c16 (drivers\namcond1.c, namcos11.c, namcos12.c, taitogn.c, vegaeo.c and zn.c) [smf].
- 0.148u2            : Fixed uninitialized memory in machine\nmc9306.c. Fixed uninitialized and disabled unused member in machine\at45dbxx.c [Oliver Stoeneberg]. Moved mess\machine\at29040a.c/h, at45dbxx.c/h and er59256.c/h to emu\machine\ [Curt Coder].
- 0.147              : Added machine\m6m80011ap.c/h [Angelo Salese].
- 0.145u8            : Various Clang warning cleanups in machine\eeprom.c [Balrog].
- 0.144u4            : Changed the 'erase' function to force all data bits of the specified address to 1s [Wilbert Pol].
- 0.143              : O. Galibert added tag name in EEPROM's verbosity.
- 0.142u4            : Aaron Giles removed legacy trampolines from eeprom_device, taking advantage of new input port support for delegates.
- 0.142              : Added machine\nmc9306.c/h (National Semiconductor NMC9306 256-Bit Serial EEPROM emulation).
- 0.138u4            : smf converted AT28C16 to a C++ device and tidied up comments.
- 0.138u2            : Aaron Giles converted the OKI M6295 and EEPROM devices to the new model. These were necessary because they both require multiple interfaces to operate and it didn't make sense to create legacy device templates for these single cases (okim6295 needs the sound interface and the memory interface, while EEPROM requires both the NVRAM and memory interfaces).
- 0.136u1            : Aaron Giles fixed typo in 8-bit EEPROM case that broke operation in some games. The starting value for an output port is now the default value, which is based on whether it is active high or low. So the device will be called the first time the line becomes active. Changed the EEPROM device to assume that the reset and clock are cleared until it's told otherwise [smf].
- 0.136              : Removed machine\eepromdev.c/h. EEPROM changes [Aaron Giles]: Fixed auto EEPROM region to properly handle 16-bit data. Changed EEPROM device to initialize EEPROM at NVRAM load time rather than init time, giving DEVICE_INIT handlers a chance to muck with the data first. Removed _NODEFAULT_ forms of EEPROM driver macros. If you need to add default data, follow the MDRV_EEPROM_ADD() with MDRV_EEPROM_DATA(). Updated remaining drivers to the new EEPROM device code. Many of them now require a default EEPROM to be loaded along with the ROMs, rather than hard-coded data in the driver. Exposed an address space for EEPROM devices, meaning the memory is now visible in the debugger and can be accessed via expressions. Updated all systems that muck directly with EEPROM memory to use memory accessors instead on the EEPROM address space. Removed old EEPROM implementation.
- 0.135u4            : Aaron Giles and Fabio Priuli changed EEPROM usage in many drivers to use the new device version. Aaron Giles cleaned up EEPROM device implementation a bit. EEPROM device now looks for a matching memory region to fetch the default values from. Fixed bug in ROM loader that would change the memory region flags to match devices with no address bus. Updated groundfx to use the new default loading scheme [Aaron Giles].
- 0.135u1            : Fabio Priuli added PORT_CUSTOM(eepromdev_bit_r) for EEPROM devices. Added a MDRV_EEPROM_NODEFAULT_ADD macro for drivers which do not need default data size / data.
- 0.130u3            : Added machine\eepromdev.c/h. Samuele Zannoli added device-based implementations of the EEPROM and i2c devices.
- 0.129u6            : Pierpaolo Prazzoli changed EEPROM erase command to write 0xff values.
- 0.129              : smf fixed AT28C16 so that a write isn't allowed to start if there is one in progress and a write isn't started if the data is already correct. This allows my dream horse to boot again. Further investigation is needed.
- 0.127              : smf changed AT28C16 memory handlers to 8 bits and perform the conversion in the memory mapping.
- 0.126u1            : Aaron Giles changed direct access EEPROM interface to return the "bus width" of the EEPROM data, and the size is in terms of units, not bytes. Updated all drivers accordingly.
- 0.125u3            : Aaron Giles renamed EEPROM_* to eeprom_*. Updated all drivers accordingly. Typedef'ed a real eeprom_interface structure.
- 0.84               : Added machine\at28c16.c/h.
- 0.82u2             : Changed to EEPROM_interface eeprom_interface_93C46 (please check games using this to make sure non broke) [Tomasz Slanina].
- 0.81u7             : Ville Linde added 93C46 EEPROM to RF2 single and RF2 2K. It's not hooked up though.
- 20th June      2001: Luca Elia added generic support for the 93C46 which is the most commonly used EEPROM.
- 19th January   2001: David Haywood updated the Cave driver, adding default EEPROM support so that the games are pre-set to factory default settings.
- 0.37b2             : Added a new parameter to the end of the EEPROM interface to enable multiple reads to occur after a single read command. Added an EEPROM_set_data() routine that can be used to explicitly initialize the contents of the EEPROM if the NVRAM file isn't found [Aaron Giles].
- 0.35RC1            : Added machine\eeprom.c/h.
- SOURCE: machine\eeprom.cpp + at28c16.cpp



R2.21  Serial EEPROM

- 0.199              : Removed nearly all custom MCFG macros from machine\eepromser.cpp [Ryan Holtz]. Prevent ambiguity between clock and streaming enable (machine\eepromser.cpp) [Vas Crabb].
- 0.198              : Set default EEPROM clock to zero (machine\eepromser.h and drivers\popeye.cpp) [smf].
- 0.192              : Added serial EEPROM using new DO write callback for (MESS) TTI SBC (machine\eepromser.cpp). Added reference info for X2444 commands [AJR].
- 0.186              : Added support for Seiko S-29X90 16-bit EEPROMs (machine\eepromser.cpp) [Luca Elia].
- 0.155              : Added Support for MSM16911 Serial EEPROM (machine\eepromser.c) [Felipe Sanches].
- 0.154              : Added support for X24C44 used by Fireball (machine\eepromser.c) [ANY]. Use eepromser in (MESS) rmnimbus.c and removed er59256 [Carl].
- 0.150              : Added machine\eepromser.c/h. Renamed eeprom_device to serial_eeprom_device in anticipation of adding a parallel EEPROM device. Splitted eeprom.c into a base class base_eeprom_device and a serial-specific subclass serial_eeprom_device. Moved the latter into its own file eepromser.c and significantly cleaned up/simplified the code. The new code should be functionally the same as the previous code, but expect that to change soon. As a side-effect, the size and bus width of the EEPROM is now specified in the ADD macro rather than in the interface structure. Rewrite serial EEPROM devices, breaking them out into separate chips of the proper size and protocol. Update all drivers, removing custom implementations, and replacing them with standard ones. Moved core read, write, erase functionality into the EEPROM base class a simulated delays in write/erase cycles. Still some more testing/verification work left to do. RDY/BUSY on ER5911 is always live regardless of CS state. Fixes G.I. Joe and probably others (machine\eepromser.c). Make sure shift register is clear at the start of a read to simulate the dummy 0 bit. Fixed polarity of CS/CLK lines in mitchell.c. Fixed most regressions due to EEPROM changes. Remaining issues are noted at the top of eepromser.c. Added eeprompar.*, implementing a simple interface for parallel EEPROMs. Created atari_eeprom_device which wraps a 2804 or 2816 EEPROM with the standard Atari write-locking mechanism. Updated all drivers to use this, and removed all EEPROM stuff from atarigen [Aaron Giles]. Small DEVICE_STOP cleanup in machine\er59256.c [Oliver Stoeneberg].
- SOURCE: machine\eepromser.cpp



R2.22  Parallel EEPROM

- 0.190              : Improvements to 28XX parallel EEPROM emulation. Emulated direct manipulation of /OE line for read/write mode control. Special handling for data polling before a write has completed. Allow optional configuration of device to lock EEPROM after each write, as often used by Atari. Eliminate the Atari EEPROM interface devices, since their special features have been incorporated into the base device. To continue using old NVRAM files, renamed them from eeprom_eeprom to eeprom (machine\eeprompar.cpp; drivers\arcadecl.cpp, atarig1.cpp, atarig42.cpp, atarigt.cpp, atarigx2.cpp, atarisy1.cpp, atarisy2.cpp, badlands.cpp, batman.cpp, blstroid.cpp, cyberbal.cpp, eprom.cpp, gauntlet.cpp, klax.cpp, mastboy.cpp, offtwall.cpp, rampart.cpp, relief.cpp, shuuz.cpp, skullxbo.cpp, thunderj.cpp, toobin.cpp, vindictr.cpp, xybots.cpp, includes\harddriv.h and machine\atarigen.cpp) [AJR].
- 0.150              : Added machine\eeprompar.c/h. Renamed eeprom_device to serial_eeprom_device in anticipation of adding a parallel EEPROM device. Splitted eeprom.c into a base class base_eeprom_device and a serial-specific subclass serial_eeprom_device. Moved the latter into its own file eepromser.c and significantly cleaned up/simplified the code. The new code should be functionally the same as the previous code, but expect that to change soon. As a side-effect, the size and bus width of the EEPROM is now specified in the ADD macro rather than in the interface structure. Rewrite serial EEPROM devices, breaking them out into separate chips of the proper size and protocol. Update all drivers, removing custom implementations, and replacing them with standard ones. Moved core read, write, erase functionality into the EEPROM base class a simulated delays in write/erase cycles. Still some more testing/verification work left to do. RDY/BUSY on ER5911 is always live regardless of CS state. Fixes G.I. Joe and probably others (machine\eepromser.c). Make sure shift register is clear at the start of a read to simulate the dummy 0 bit. Fixed polarity of CS/CLK lines in mitchell.c. Fixed most regressions due to EEPROM changes. Remaining issues are noted at the top of eepromser.c. Added eeprompar.*, implementing a simple interface for parallel EEPROMs. Created atari_eeprom_device which wraps a 2804 or 2816 EEPROM with the standard Atari write-locking mechanism. Updated all drivers to use this, and removed all EEPROM stuff from atarigen [Aaron Giles]. Small DEVICE_STOP cleanup in machine\er59256.c [Oliver Stoeneberg].
- SOURCE: machine\eeprompar.cpp



R2.23  EPROM Emulator

- 10th June      2010: Charles MacDonald - I've been working on a new 512K EPROM emulator for future work with several 68020-based Atari boards and an upcoming trojaning effort. The PCB design is finished, so the next step is to get the boards fabricated, assembled and write the client software.
-  1st June      2008: Charles MacDonald - Last year I designed a 16-bit EPROM emulator based around the IDT7025 8Kx16 dual-port static RAM, a very useful chip that supports 8 and 16-bit access independently on either of its RAM ports. This is what I used for running tests on my Model 1 and Jaleco Mega System 32 boards, the latter needing two emulators in parallel to emulate four EPROMs. The software to control it was a modified version of the 8-bit EPROM emulator utility. Support for multiple devices isn't implemented quite right, so just use it for controlling a single device. This ended up being my first project that used almost all surface mount parts, as well as PLCC chips. I'm quite proud of the way it came out, and so far it has been invaluable for running tests on 16-bit and 32-bit systems. Here is the PCB layout, documentation, utility program and source code: http://cgfm2.emuviews.com/zip/ds-060108.zip. At some point I was thinking of making adapter PCBs that would support 27C4096 and 27C400 type pinouts as I have a few boards with those chips instead of two 8-bit EPROMs in parallel. It's just a wiring difference but this would be a neater solution and simplify cable assembly.
-  8th November  2007: Charles MacDonald - 16-bit EPROM Emulator: I've been interested in doing some research on the Jaleco Mega System 32 hardware, which is emulated in MAME but has a few remaining issues. Guru generously donated a "Desert War" board for testing, and now I had to figure out the best way to run my own programs on it. Being a 32-bit system, the two 8-bit EPROM emulators that were developed for the Gaelco "Master Boy" dumping project wouldn't be enough as Desert War uses four 8-bit ROMs. I decided to make a new EPROM emulator based around the IDT7025, a 16K dual-port RAM. What makes this device useful is that it allows control of the individual byte lanes for both ports. This allows the RAM to be interfaced with CPUs of varying bus widths and endianness without any glue logic. On the PCB the left port connects to a FT2232 chip in Host Bus Emulation mode (an 8051-alike bus) and the right port is buffered and goes to headers for DIP cables to plug into two 8-bit ROM sockets of the target board. The real challenge with this project was assembly; the IDT7025 chips I had came in an 84-pin PLCC package. I used a Mill-Max SMT socket to attach the RAM to the board, but this meant soldering the socket to the board using a regular iron. To simplify this process, I increased the pad size of the LCC footprint inward so there was more surface area leading up to the pin pad. This greatly simplified tacking the socket in place, kept solder from bridging with adjacent pins, and made soldering all 84 pins in place a snap. I've tested the first one on a Sega Model 1 board and it works as expected, I was able to re-use the 8-bit ROM emulator code to control it so the software is done. I'll make another and that should be all that's needed to start running test programs on the Jaleco Mega System 32 hardware. I'll also put up the project files (schematic, source code, and instructions) for it soon.
- 21st September 2007: Charles MacDonald - EPROM emulator update: I've added a memory test feature to check if the RAM being used is OK. Oddly enough the Model 1 hardware draws enough power that my DS1230 NVRAM refuses to operate. Thought it was bad, but it works fine in other systems. I switched it out with a new Hitachi HM62256LP SRAM and everything is working again.



R2.24  EPROM Types

       CMOS serial EEPROMs (DIP or SIO - 8)

       24C01        128 bytes x 8   Atmel 24C01A serial EEPROM (DIP8)
       24C02        256 bytes x 8
       24C04        512 bytes x 8   24c04a (Hotblock)
       24C08       1024 bytes x 8
       24C16       2048 bytes x 8
       24C32       4096 bytes x 8
       24C64       8192 bytes x 8
       24C128     16384 bytes x 8   Toshiba TMM24128AP
       24C256     32768 bytes x 8   Toshiba TMM24256AP
       24C512     65536 bytes x 8   Toshiba TMM24512P (Robocop, Sqix)

       28C16       2048 bytes x 8   SOP24 / DIP24; Atmel AT28C16A, AT28C16 (Maxforce), BR28C16A, 28C16A-15/P, CSI CAT28C16, DIP24, (Machbrkr, Glpracr, Badlands, Outfxies, Stonebal)
       28C64       8192 bytes x 8   AT28C64 (Propcycl, Alpine Racer)


       Microwire (CMOS serial EEPROMs  DIP8 or SIO8)

       93C45        128 bytes x 8 /  64 x 16      AKM93C45, equivalent to 93C46 (Fixeight, Nslasher, Avengrgs)
       93C46        128 bytes x 8 /  64 x 16      93C46 DIP8 (Polystar, Glpracr), 93C46A (Fromanc2), 93LC46B (Gauntleg), SGS Thomson ST93C46CB1 (Sailormn, Agallet), NMC 9346N (Lordrun), 93LC46BX (1K Low-power 64 x 16-bit organization serial EEPROM) (Deerhunt)  NOTE: In Hvysmsh the 93C46 chip has identical halves and fixed bits.
       93C56        256 bytes x 8 / 128 x 16      93LC56 (Loderndf, Gunbird2, Daraku, Hotgmck) SOURCE: drivers\psikyo4.cpp
       93C66        512 bytes x 8 / 256 x 16      ATMEL AT93C66, PSOP8 (Bbakraid, Policetr, Sshooter)
       93C76               1k x 8 / 512 x 16
       93C86               2k x 8 /  1k x 16
       93C96                                      93CF96-2 (Komani-GV)


       BIOS EEPROM

       27L1000         Macronix MX27L1000QC-12 (128k x 8 EEPROM, PLCC32)       (Crysking)
       SST29EE020      2 Megabyte, PLCC32, surface mounted, Phoenix BIOS      (A51site4)


       Other      Type (Game)

       16911      OKI M16911                                       (Gaiapols)
       2205       ER2205, ER-2205                                  (Centiped, Qwakprot)
       2430       DS2430 EEPROM                                    (P9112)
       2914       Seiko S2914 EEPROM, DIP8                         (Gdfs)
       5032       Altera EPM5032DC, EPM5032                        (Tantr, Zunkyou, Tfreac, Columns, Mahmajn, Mahmajn2)
       58C65      HN58C65                                          (Luckywld, Gollygho)
       5911       ER5911                                           (Moo, Mystwarr)
       68234      Motorola 68234 EPROM                             (Frontlin)
       80011      Mitsubishi M6M80011, 64 x 16 Serial EEPROM, DIP8 (NintendoSuperSystem)





R2.3   Flash Memory

R2.31  Flash ROM

- 0.282              : Added ST_M29W640FT and implemented unlock bypass command. Support for Winbond W29C020C + preliminary Winbond SDP mode (machine\intelfsh.cpp) [Angelo Salese].
- 0.281              : Added SST_39SF020 and fixed sector size for SST_39SF0*0 (machine\intelfsh.cpp) [Dirk Best].
- 0.273              : Added SST_39SF010 variant. Added missing address mask check to erase command (machine\intelfsh.cpp) [Dirk Best].
- 0.271              : Added ATMEL_29C020 and support for SDP & added missing state save registrations (machine\intelfsh.cpp) [smf].
- 0.269              : Added ST M29W640GB 8K Flash device (machine\intelfsh.cpp) [Wilbert Pol].
- 0.268              : Added Toshiba TC58256AFT flash device (machine\nandflash.cpp) [Windy Fairy].
- 0.266              : Changed machine\ataflash.cpp to bus\pccard\ataflash.cpp and machine\pccard.h to bus\pccard\pccard.cpp/h. ATA Flash PC Card (ataflash.cpp) creates a generic CIS and identify buffer if it is missing from the CHD, also the card can be detected [smf].
- 0.265              : Added Macronix 29F1610MC Flash device (machine\intelfsh.cpp) [Windy Fairy].
- 0.262              : Implemented fast mode for Fujitsu flash (machine\intelfsh.cpp) [Windy Fairy].
- 0.261              : Removed machine\serflash.cpp/h. Only reset page address on read or program command. Added Samsung K9F1G08U0M and K9F2G08U0M (machine\nandflash.cpp). Migrated cv1k.cpp and nexus3d.cpp to use newer Flash memory emulation (machine\nandflash.cpp) [buffi].
- 0.259              : Support reading the busy/ready pin for Flash chips that have one (machine\intelfsh.cpp) [R. Belmont].
- 0.254              : Added Intel 28F640J5 device (machine\intelfsh.cpp) [Windy Fairy].
- 0.250              : Retire variant enum (machine\intelfsh.cpp). Added Toshiba TC58FVT800 Flash for (MESS) Phusion [AJR].
- 0.248              : Added Macronix 29F008TC Flash (1M*8, 4K*8 pages) [Vas Crabb].
- 0.246              : Added ATA CompactFlash device (bus\ata\idehd.cpp) [Miodrag Milanovic].
- 0.244              : Fixed address mask for SST 39SF040 [Miodrag Milanovic].
- 0.241              : Implemented new operations and security features for X76F041/100 Secure SerialFlash (machine\x76f041.cpp and x76f100.cpp) [Windy Fairy].
- 0.222              : Added (MESS) MSX Matra ink cartridge (AMD 29F040) (machine\intelfsh.cpp) [hap]. Fujitsu updates: Added MBM29LV800B type. Identified MBM29F160TE and MBM29DL164BD types more specifically. Correct device ID for MBM29F160TE [AJR]. READ/WRITE macros removal (machine\ataflash.cpp) [Osso].
- 0.221              : Simplified handlers (machine\serflash.cpp) [Osso].
- 0.220              : Added SST 39SF040 Flash (machine\intelfsh.cpp) [Roberto Fernandez, Nigel Barnes, Ed Snider].
- 0.218              : 'ATA Flash PC Card's does not spin (machine\ataflash.h) [MetalliC].
- 0.217              : SST 49LF020 Flash does not support certain commands in certain states [yz70s]. Added Fujitsu 29LV002TC Flash [MetalliC].
- 0.210              : Added 'SST 49LF020 Flash' to machine\intelfsh.cpp. (MESS) Nvidia nForce PC BIOS is stored in a 'SST 49LF020 Flash' chip [yz70s].
- 0.208              : Simplified read/write handlers (machine\strata.cpp) [AJR].
- 0.204              : Added support for page size configuration and fixed block erase command and read/write past last page (machine\serflash.cpp) [cam900].
- 0.202              : Removed X76F041 and X76F100 MCFG macros [Osso].
- 0.201              : Set default clocks to 0 (machine\intelfsh.h) [Ryan Holtz].
- 0.190              : Added 29F800B flash boot device for (MESS) D-box [Joakim Larsson Edstrom].
- 0.188              : Fixed global variables (machine\intelfsh.cpp) [AJR].
- 0.178              : 16-bit hook-up for the Sharp LH28F016S flash memory (machine\intelfsh.cpp) [Luca Elia].
- 0.175              : Removed device_memory_interface in machine\intelfsh.cpp [O. Galibert]. Fixed E28F400B erase, fixed 16 bit writing, removed extraneous (machine\intelfsh.cpp) [smf].
- 0.170              : Added Intel TE28F320 Flash (machine\intelfsh.cpp) [Miodrag Milanovic].
- 0.165              : Added support for TMS29F040 variant (machine\intelfsh.c). Fixed typos in machine\intelfsh.c (AMD_29F400T and AMD_29F800T) [Luca Elia].
- 0.158              : Refactor Funky Ball driver flash access to use intelfsh.c via bankdev, doesn't improve anything tho [David Haywood].
- 0.156              : Added support for AMD 29F400T, AMD 29F800T and FUJITSU 29F160T (machine\intelfsh.c) [Joe Sturm]. Intel component is not MXTC, it's MTXC in calchase.c, gamecstl.c, midqslvr.c, queen.c, savquest.c, taitowlf.c, voyager.c and xtom3d.c [Peter Ferrie].
- 0.153              : Fixed FLASH_INTEL_E28F400B block erase. Added basic support for FLASH_AMD_29LV200T [hap].
- 0.152              : Removed machine\secflash.c/h. Remodernised x76f041/x76f100 & ZS01 so that logging becomes easy again & uses READ_LINE_MEMBER/WRITE_LINE_MEMBER so the pins can be bound to directly. Hooked up x76f041 to the early beatmania IIDX games. They all pass the security check eventually but it takes a long time as it repeatedly reads the first byte, it's possible that the contents aren't correct as the game says the security is OK even when the data returned is not what it's checking for [smf].
- 0.150              : Added Macronix 29LV160TMC sub-type to intelfsh.c, used by Sega Dreamcast [Angelo Salese]. Fixed typo in machine\serflash.c (drivers\nexus3d.c) [David Haywood].
- 0.149u1            : ATA flash device derives from IDE HDD device and added pccard interface, instead of using an IDE controller. Moved the GNET protection command processing to ataflash.c [smf].
- 0.149              : Added machine\ataflash.c/h and machine\serflash.c/h. Split ATA flash functionality from taitogn.c into their own devices. The pccard slot has had to revert to use memory handlers instead of device maps for the moment. Move & 7. I'm pretty sure that line is never called, at least in the old code it could never reach the equivalent line (machine\ataflash.c) [smf]. Added serial Flash device (machine\serflash.c) [David Haywood].
- 0.148u2            : Moved SST39VF020/SST39VF400A emulation into intelfsh. Added READ/WRITE_MEMBER to the intelfsh device and removed some trampolines [Sandro Ronco].
- 0.148              : Added emulation of SST 28SF040 flash [Sandro Ronco].
- 0.146u3            : Added emulation of AMD 29F010 Flash for mess\drivers\geniusiq.c [Sandro Ronco].
- 0.146              : Intel 28F320J3D flash support [Lukasz Markowski].
- 0.145u7            : IDE64 WIP (MESS), now booting and fixed boot screen text (machine\intelfsh.c) [Curt Coder].
- 0.145u7            : Support for ATMEL 29C010 chip [Curt Coder].
- 0.145u1            : Support for AMD 29F040 chip [Curt Coder].
- 0.143u7            : Sandro Ronco updated intelfsh.c in order to support AMD 29F080 chip.
- 0.142u3            : Sandro Ronco added support for Fujitsu 29DL16X (intelfsh.c).
- 0.141u3            : Added machine\secflash.c/h.
- 0.141u2            : Support Flash ROMs that have a bankswitch command (machine\intelfsh.c) [Tim Schuerewegen].
- 0.139u3            : Aaron Giles converted intelfsh to a device, updated all users. Added memory interface to the intelfsh device so you can access/view the data in the debugger and via the standard memory interfaces. Removed the old memory() method in favor of new functions read_raw()/write_raw() which do direct reads/writes of the data.
- 0.138u2            : Flash 4k sectors should erase in 1/8th the time of 64k. extend core to support GBA chip types [R. Belmont].
- 0.112u3            : smf added X76F100 emulation and ZS01 emulation (HLE of System 573 PIC).
- 0.109u5            : smf improved flash emulation and added support for Fujitsu 29F016A flash chips. Switches Konami games over to new flash chips.
- 0.104u6            : Ville Linde added the missing commands and proper maker/device IDS to the flash memory handlers for Fujitsu MBM29F016A, used by Konami Firebeat hardware (not yet emulated).
- 0.97u3             : Nathan Woods added some sanity checking, and changed a printf() to logerror() to intelfsh.c.
- 0.95u3             : smf increased FLASH_CHIPS_MAX in machine\intelfsh.h. Merged 8 & 16 bit Intel Flash NVRAM handler & passes the chip number as a parameter.
- 0.95u1             : Flash updates [smf]: Implemented state saving for Flash chips. Fixed block erase on 16bit Flash chips. Increased maximum number of Flash chips.
- 0.94u1             : Intel Flash improvements [smf].
- 0.93u1             : Flash ROM support update [R. Belmont]: Added support for arbitrary manufacturer and chip IDs instead of hardcoding. Added support for the extended chip ID protocol favored by AMD and Fujitsu. Bumped limit up to 8 chips.
- 0.86u2             : R. Belmont added word-wide flash ROM support (specifically IDs itself as the Sharp LH28F400 found on Konami "Beat the Champ" PCBs).
- 0.80u3             : Added machine\intelfsh.c/h. R. Belmont support Intel Flash ROM emulation.
-  7th January   2004: R. Belmont - Figured out how Konami's glue chip that talks to 4 Intel Flash ROMs on Simpsons Bowling works, with some cool results...
- SOURCE: machine\ataflash.cpp, intelfsh.cpp and secflash.cpp


       28F200   =    262144 =   256k           Intel Flash        PA28F200BX              2MBit                    (Dunkmnia, NamcoSystem11)
       28F400   =    524288 =   512k           Intel Flash        E28F400                 4M                       (GNET-System, Capcom ZN2), Sharp LH28F400 (btchamp)
       28F008   =   1048576 =  1024k =  1MB    Intel Flash        E28F008SA     TSOP40    8M    Sharp LH28F008     (Propcycl, Tekken2, Rfjet)
       28F016   =   2097152 =  2048k =  2MB    Intel Flash        E28F016S5     TSOP40   16M                       (PacaPacaPassionSpecial)
       28F040   =         ? =
       28F032   =   4194304 =  4096k =  4MB    Intel Flash        E28E320J5     TSOP56   32M    DA28F320J5, E28F0320         (Soulclbr, Xfiles)
       28F640   =   8388608 =  8192k =  8MB    Intel Flash        DA28F640J5    SSOP56   64M                       (Mrdrilr2)
       28F128   = 167772126 = 16384k = 16MB    Intel Flash        E28F128J3A    TSOP56  128M                       (Crysking)

       29F040   =    524288 =  512k                                                                                (Bballoon)
       29F080   =
       29F400   =    524288 =  512k            Fujitsu Flash      MBM29F400B    SOP44     4M    29F400TA           (MrDriller, Tekkentt)
       29F550   =    524288 =  512k  ?         ?                  TM29F550ZX               ?                       (Go2000)
       29F8100  =   1048576 = 1024k  =  1MB    Macronix                         SOP44     8M                       (Jumppop)
       29F016   =   2097152 = 2048k  =  2MB    Fujitsu Flash      MBM29F016     TSOP48   16M    29F016A            (MrDriller, Tekkentt, KonamiSystem 573)
       29F1610  =   2097152 = 2048k  =  2MB    Macronix           MX29F1610MC   SOP44    16M    29F1610ML          (Silkroad, Vshoot), MX29F1610ML (Mchampdx), MX 29F1610 (Mosaicf2, Vasara2)

       29W32000 =   4194304 =  4096k =  4MB    Samsung NAND Flash KM29W32000AT  TSOP44   32M    3.3V Serial EEPROM, KM29W32000AT, KM29N32000TS (SeeSeeFindOut)
       8F1600   =         ? =     ?k =  ?MB    Hitachi            HN98F1600T10  TSOP56    ?M    (CPS2)
       9F2808   =  16777216 = 16384k = 16MB    Samsung NAND Flash K9F2808U0B    TSOP48  128M                       (NamcoSystem10)
       9F5608   =  33554432 = 32768k = 32MB    Samsung NAND Flash K9F5608U0B    TSOP48  256M                       (Bballoon)
       X76F100  =



       X76F100
       - 0.112u3: Added mame\machine\x76f100.c/h. smf added X76F100 emulation and ZS01 emulation (HLE of System 573 PIC).
       NOTES: The X76F100 is a Password Access Security Supervisor, containing one 896-bit Secure SerialFlash array. Access to the memory array can be controlled by two 64-bit passwords. These passwords protect read and write operations of the memory array.
       SOURCE: machine\x76f100.cpp

       ZS01
       - 0.112u3: Added machine\zs01.c/h. smf added X76F100 emulation and ZS01 emulation (HLE of System 573 PIC).
       SOURCE: machine\zs01.cpp




R2.32  Flash Memory + Switching Regulator

       - 0.279: Allow Juicebox to load raw ROMs from the software list (hash\juicebox.xml, machine\smartmed.cpp) [David Haywood].
       - 0.254: Added machine\nandflash.cpp/h. Separated NAND Flash from SmartMedia (machine\nandflash.cpp) [Windy Fairy].
       - 0.239: Patched up code that was rotting behind UNUSED_FUNCTION and switched to [[maybe_unused]] attribute (machine\smartmed.cpp) [Vas Crabb].
       - 0.233: Eliminated remaining uses of auto_alloc and friends (machine\smartmed.cpp) [Aaron Giles].
       - 0.203: Added 'NAND Flash Memory' and 'SmartMedia Flash card' devices.
       - 0.170: Moved machine\smartmed.cpp to devices\machine\.
       - 0.167: Moved mess\machine\smartmed.c to mame\machine\.
       - 0.147: Added mess\machine\smartmed.c.
       - SOURCE: machine\smartmed.cpp


       MAX232         Maxim MAX232CPE Dual EIA-232 Driver/Receiver, DIP16     (CPS-2, 11beat, Mtetrisc)
       MAX232         Maxim MAX232CPE Multichannel RS-232 Driver/Receiver     (Ppcar)
       MAX705                                                                 (Kinst, Kinst2)
       MAX734         Flash Memory Programming Supply Switching Regulator (+12V 120mA), SOIC8     (MrDriller2, Gp500), 6734 (NamcoSystem12)


       MB3759         Fujitsu MB3759 Switching Regulator Controller, DIP16 (Model1)


       X76F041
       - 0.152              : Remodernised x76f041/x76f100 & ZS01 so that logging becomes easy again & uses READ_LINE_MEMBER/WRITE_LINE_MEMBER so the pins can be bound to directly. Hooked up x76f041 to the early beatmania IIDX games. They all pass the security check eventually but it takes a long time as it repeatedly reads the first byte, it's possible that the contents aren't correct as the game says the security is OK even when the data returned is not what it's checking for [smf].
       - 0.112u3            : smf added write support to X76F041 emulation.
       - 0.109u4            : Added machine\x76f041.c/h.
       NOTES: The X76F041 is a Password Access Security Supervisor, containing four 128 x 8 bit SecureFlash arrays. Access can be controlled by three 64-bit programmable passwords, one for read operations, one for write operations and one for device configuration. The data sheet has an incorrect diagrams for sequential read with password, there shouldn't be an extra address after the 0xc0 command.
       SOURCE: machine\x76f041.cpp
       GAMES: Konami System 573 games



R3.    RAM

- 0.284              : Allocate memory with suitable alignment for any type (machine\ram.cpp) [Vas Crabb].
- 0.232              : Update RAM device notes. Set default fill value to 0xff instead of 0xcd (machine\ram.cpp) [hap].
- 0.201              : Set default clocks to 0 (machine\ram.h) [Ryan Holtz].
- 0.197              : Show RAM options in XML output that can actually be controlled from the command line - the others are practically useless (machine\ram.cpp and mame\info.cpp). Expose RAM size in "minimaws" [Vas Crabb].
- 0.155              : Added ram.c/h.
- 0.146              : Fixed ram size validation regression (machine\ram.c) [Miodrag Milanovic].
- 0.144u1            : Added 'RAM' device (machine\ram.c).
DRIVERS: de_3.cpp, de_3b.cpp, konamigv.cpp, ksys573.cpp, model3.cpp, mtouchxl.cpp, namcos10.cpp, namcos11.cpp, namcos12.cpp, naomi.cpp, pcxt.cpp, taitogn.cpp, twinkle.cpp, whitestar.cpp and zn.cpp
SOURCE: machine\ram.cpp

----------

 256   = Hitachi S256KLP (Umanclub)
 314   = TMM314 (Invadpt2, Monsterz)
 411   = 411A (Wldarrow), uPD411 (Unkmeyco)
 416   = TMM416, NEC D416 (Jollyjgr, Kangaroo)
1023   = TMS1023 (Idsoccer)
2009   = Toshiba TMM2009 (Ppking)
2015   = Toshiba TMM2015 (2k x 8, DIP24)
2016   = Toshiba TMM2016AP, TMM2016BP, SRM2016C15, S2016C, 2016 (2k x 8 SRAM, DIP24) (Tehkanwc, Truxton, Turbosub, Bronx)
2018   = Toshiba TMM2018D, Motorola MCM2018AN45 (2k x 8 SRAM, DIP24)
2063   = Toshiba TMM2063AP (8k x 8 SRAM, DIP28)
2064   = Toshiba TMM2064, SRM2064C (8k)
2088     (Groundfx)
2101   = (256 x 4 SRAM)
2102   = (1k x 8)
2108   = Toshiba TMM2108 (2k x 8)
2111     (256 bytes x 4 SRAM) (Ipminvad, Headoni)
2114   = M5L2114, TMS2114, MM2114N, NEC uPD2114LC, Hitachi HM572114P, 2114UCE, 2114 (1k x 4 SRAM = 512 bytes, DIP18) (Calorie, Astrof, Monzagp, Starspnr)
2115     (Rockclim)
2125   = D2125A (1k x 1) (Bcruzm12, Carjmbre, Cclimber, Monsterz, Tankbatt)
2128   = OKI MSM2128, 2128SL (16kbit = 2k x 8)
2144     (Blasto)
2147   = (1k x 4) (Noboranb)
2148   = MBM2148L-55 (1k x 4 SRAM, DIP18)
2364   = TMM2364 (Turbo)
2416   = Winbond W2416K  (Karianx, Paranoia, Wbbc97)
2700   = 27ls00 (256 x 1 SRAM, with 3-state outputs, 55ns access time) (Botanic - sprite buffer ram)
2701   = AM2701-50JC (256 x 1 RAM, open collector outputs) (Botss, F15se)
3106   = (256 x 1) (Ace)
3517   = SANYO LC3517A
3564   = SANYO LC3564SM-85 (SMD) (Jchan)
3664   = SANYO LC3664 (8k x 8 SRAM, SOIC28)
4015   = MK4015N (Carnival)
4016   = NEC D4016, TMS4016 (Lastfero, Lastfort, CliffHanger)
4027   = MOSTEK MK4027-4, ITT 4027 4D, MCM4027 (4k RAM, DIP16) (Spaceg, Astrof, Shuttlei)
4044   = Mitsubishi M5T4044P (Astinvad)
4045   = TMS4045 (RAM, DIP18) (Shuttlei, Spaceg)
4060   = TMS4060 (Sbowling)
4069   = (2k x 8) (Carnival, Springer)
4116   = (16k x 1) (Beezer, Sharkatt)
4164   = (64k x 1) (Idsoccer)
4334   = 4334 (Qix), HM4334P (SRAM) (Unknown Sega game)
4416   = TMS4416 (16k x 4 DRAM) (Hcrash, Dogfgt)
4461   = TMS4461
4517   = MCM4517 (Gt102b)
4801   = MN4801AN-3IRL (Conquer)
5101   = 5101 (Carjmbre, Malzak, Skybase, Statriv2, Trivquiz), SCM5101E, D5101LC (SRAM) (Cclimber)
5116   = LH5116D, P5116, (2k x 8) (Brapboys, Heatbrl)
5160   = Sharp LH5160D
5164   = Sharp LH5164D (8k x 8 RAM) (Tdragon2, Tharrier, Nss_con3)
5168   = Sharp LH5168D, LH5168N (8k x 8 SRAM, SOP28)
5264   = (8k x 8 ?) (Robokid)
5268   = Sharp LH5268AN (8k x 8 SRAM, SOP28) (MK3, Capcom ZN1/2)
5280     (Invaders)
5493   = ISSI 5493R45-001 (128k x 8 SRAM, SOJ32)
5497   = Sharp LH5497D (Jchan)
5501   = Toshiba TC5501P (256 x 4 SRAM, DIP22)
5563   = TC5563 (Drgpunch, Mmpanic)
5565   = Toshiba TC5565 (8k x 8 SRAM, DIP28)
5588   = Toshiba TC5588P (8k x 8 SRAM, DIP28)
6064     (Omegaf  ram ?)
6114   = UM6114 (1k x 4 SRAM) (Ninjemak)
6116   = Hitachi HM6116LP, HY6116AP, Vitalec V61C16S45L, 61C16 (2k x 8 RAM, DIP24) (Wwfwfest)
6117   = HM6117P (Gs4002, Gt102b)
6148   = Hitachi HM6148HP (1k x 4 SRAM, DIP18)
6164   = Unicorn Microelectronics UM6164DS-12, UM6164BK, 61C64 (8k x 8 SRAM, SOJ28) (Daitorid, Puzzli)
6166     (Psychic5 ram ? = 6116 (!))
6168   = LH6168, ISSI IS61C68 (Dblewing, CyberSled)
6206   = MCM6206 (32k x 8 SRAM, SOJ28)
6216   = BR6216B (2k x 8) (Fromanc2)
6262     (Cairblad)
6264   = MCM6264CP35, UT6264PC (Dunhuang), UT6264 (SOIC28), Hyundai HY6264P, 6264ALSP, CDM6264LE12, Mosel MS6264, Hitachi HM6264LP  (8k x 8 SRAM, DIP28), UM6264 (Funybubl)
6265   = BR6265BF
6514   = M3-6514 ram? (Dwarfd)
6516   = Mosel MS6516 (2k x 8) (Gtg, Stratab)
6810   = MC6810, MCM68A10P (128x8 SRAM) (Shooting Gallery, Victory)
7063   = MB7063
8114     (Espial)
8116     (FieldGoal, Progolf)
8148     (1k x 4 SRAM) (Grobda)
8216   = Mitsubishi M5L8216  (256 bytes x 1 SRAM, DIP16) (Amidar, Headoni, Spaceg), uPB8216 (Sbugger), MPB8216 (Monsterz), P8216
8264     (64k x 4 DRAM) (Buckrog)
8416   = Fujitsu MB8416 (2k x 8 SRAM, DIP24)
8421   = Fujitsu MB8421 (Dual Port SRAM, SDIP52) (Model1, Opwolf3, Robocop)
8431   = Fujitsu MB8431 (RAM?, SDIP52) (Model1)
8464   = Fujitsu MB8464A (8k x 8 SRAM, SOP28, DIP28) (CPS2, SegaSystem32)
9114     (D-Day)
9122   = AM9122 (256 x 4 SRAM) (Turbosub, Bcruzm12)
18128  = TC18128CFWL (Bel)
18318    (Portrait)
24258  = W24258S (SOP28)
25520  = SHARP LH25520 (Nslasher)
29128  = AM29128 (2k x 8) (Turbosub)
35256  = SANYO LC35256 (32k x 8 SRAM, SOP28)
41101  = D41101C-1 (Snowbros)
41256  = PDM41256SA20P (32k x 8 SRAM)
41264  = D41264
41464  = Toshiba TMM41464 (64k x 8) (Berlwall, Sparkz, Sega System24)
42101  = D42101C (DIP24)
43001  = NEC D43001GU (32k x 8 SRAM, Cbaj)
43256  = NEC D43256C, NEC 43256, uPD43256, D43256BGU (32k x 8 SRAM, DIP28) (Contcirc, Rfjet)
44001  = MT4C4001, 4C4001 (1M x 4 DRAM, SOJ28) (Kinst, Kinst2)
44251  = TMS44251 (28 pin ZIP) (Stonebal)
50464  = HM50464 (Pbillian)
511664 = M511664, TC511664
51257  = M51257 (256k SRAM)
51821  = TC51821 (Cyclwarr)
51832  = TC51832AFL (32k x 8 SRAM, SOP28)
52250  = LH52250AN (32k x 8 SRAM, SOP28)
52256  = LH52256ALSP, LH52256CN (32k x 8 SRAM)
52258  = Sharp LH52258 (32k x 8 SRAM)
53461  = HM53461, HM53461ZP (64k x4 Multiport CMOS VRAM) (Galsnew, Radm, Titlef)
53462    (Drgpunch)
53464  = V53C464AP80 (Pitbossm)
54260  = MCM54260 (SOJ40) (Stonebal)
55257  = Toshiba TC55257CFL, TC55257DFL, TC55257N (32k x 8 SRAM, TSOP28)
55328  = TC55V328AJ, TC55328AJ (SSOP28)
57725  = MB57725
58275    (Kingfut)
58725  = M58725P, MB58725
58754  = M58754 (Astinvad)
61256  = Unicorn Microelectronics UM61256FK, UM61256FS, UM61256AK, IS61C256AH, 61C256, Epson SRM2B61256 (32k x 8 SRAM, DIP28/SOJ28 Cache RAM)
61640  = 61C640 (Balcube)
62068  = MCM62068AEJ25 (SSOP28)
62256  = Hitachi HM62256ALSP, HM62256LFP, HM62256LP, HY62256A, Mosel 62256, UM62256D, UM62256E (32k x 8 SRAM, SOJ28/DIP28)
65738  = HM3-65738BK
64256  = (32k x 8) (Bubl2000)
65256  = Hitachi HM65256BLSP, 65256BLFP (surface-mounted, 32k x 8 SRAM, DIP28, SOP28)
65728  = HM3-65728BK (Sderby, Madmotor)
65756    (Aligator, Biomtoy)
65764  = HM65764, HM3-65764
71024  = IDT71024
71124  = MB71124, IDT71V124 (128k x 8 SRAM, SOJ32) (Gp500)
71256  = IDT71256, DT71256, CAT71C256 (32k x 8 SRAM, SOIC/SOJ28) (B-RapBoys)
74201  = 74S201 (256-bit RAM) (Conquer, Hotshock, Mirax, Zigzag)
84256  = Fujitsu MB84256A, 84256 (32k x 8 SRAM, SOP28, DIP28)
93419  = (64 x 8+1 SRAM)  (Battlex, Changela, Taito SJ)   NOTES: Palette RAM chip 93419 (64 x 9 (nine!!!)): bits A0-used as the 8-th bit data input (d0-d7->normal, a0->d8), SRAM with open-collector outputs
93422  = AMD AM93422DC, 93L422DC (256 x 4 SRAM) (40love, Pturn, Turbosub, Ad2083)
93425    (Mrflea, Portrait)
241024 = W241024AI, W241024AK-15 (1Meg SRAM) (Sscope2)
341256 = NKK N341256SJ, N341256P, 34256 (32k x 8 SRAM, SOJ28) (Raiden2)
414260 = Panasonic MN414260SJ
424800 = NEC 424800 (CryptKiller)
431000 = NEC D431000AGW
511632 = TC511632FL
514252 = M514252A
514260 = Toshiba TC514260BJ, OKI M514260C, Hitachi HM514260AJ8, HM514260CJ7, HY514260 (256k x 16 DRAM, SOIC40, SOJ40)
514262 = M514262 (Ddenlovr)
514270 = HM514270CJ7 (Bel, Harley)
514400 = TC514400, Hatachi HM514400BS7 (1M x 4 DRAM) (Gdfs, Eaglshot)
514800 = TC514800 (Mayjisn2)
518128 = Toshiba TC518128 (Rfjet)
521002 = LH521002AK
524256 = TC524256BZ, TC524256Z (Lockload, Mjchuuka)
528126   (9ballsht, coolpool)
528128 = Vitelic V52C8128K70 (possibly 128k x8 DRAM, SOJ40) (9ballsht, Pairs)
528256 = Sharp LH528256, LH52B256D (Bloodwar, Desertwr, Speglsht)
528257 = TC528257 (Landgear, Speglsht)
524258 = Toshiba TC524258BZ, Vitelic V52C4258Z (256k x8 SRAM, ZIP28) (Ghosthunt, Tickee, Tutstomb)
528267 = Toshiba TC528267J (RapidFire)
534256 = Hyundai HY534256 (256K x 4, 1MBit DRAM, DIP20) (Sliver)
538254 = HM538254BJ (Bel)
538256 = V53C8256HP45 (256k x 8, Fast Page Mode CMOS DRAM) (Megat6)
544256 = Toshiba TC544256BZ (Cheesech)
544260 = TC544260 (Vcircle)
551001 = Toshiba TC551001BFL (128k x 8 SRAM, SOP32)
551664 = Toshiba TC551664J5, TC55V1664AJ (1MBit SRAM, 64k x 16, SOJ44)
611024 = ISSI IS61C1024 (128k x8 SRAM, SOJ32)
616416 = IS61C6416 (Legendoh)
621024 = IS62C1024 (Trophyh)
628032 = ST M628032 (32k x 8 SRAM, SOIC28)
628256 = LH628256 (256k x 8 SRAM, DIP28) (Gtmr2)
628512 = (512k x 8 SRAM)
658128 = Hitachi HM658128ADFP-10 (128k ? x 8 SRAM, SOP32) (CPS2 System) (16k x 8 SRAM, DIP32) (Model1)
658512 = Hitachi HM658512LP-8 (64k x 8 SRAM, DIP32) (Model1)
725608 = LG GLT725608 (SOIC28) (Gunbird/2)
2316162 = T2316162 (SOJ44) (Gunpey, Xfiles)
4116256 = ISSI IC41C16256 (256k x 16 DRAM, TSOP44) (Legendoh)
4216800 = ISSI IC42S16800 (4(2)M x 8(16) Bits x 4 Banks, 128MBit SDRAM)
4516161 = NEC uPD4516161ag5-A10 (1M x 16 SDRAM, TSOP)
5118160 = Toshiba TC5118160BJ (256k x 16 DRAM, SOJ42) (CPS3)
5216165 = Hitachi HM5216165 (1M x 16 SDRAM, TSOP48)
5316258 = V53C16258HK40 (256k x 16 RAM) (Blitz99)
5425632 = OKI 54V25632 (256k x 32 SGRAM, QFP100) (Gamshara)
81141622  (Gticlub)





Cypress RAM                  PCB note
------------------------------------------------------------------------------------------------------------
CY7C109         1M SRAM
CY7C128         2k x 8 SRAM                      CY7C128A, CY7128A
CY7C132         DIP48, RAM?                                                     (Luckywldm, Gollygho)
CY7C141         1k (Drivedge - dual ported shared RAM btw 68k and TMS)
CY7C182         8k x 9 SRAM, SOJ28
CY7C185         8k x 8 SRAM, SOP28, DIP28        CY7C185, CY7B185               (Gticlub, Model1)
CY7C188                                                                         (Bel)
CY7C195                                                                         (Gstriker, Vgoalsoc)
CY7C199         32k x 8 SRAM, SOIC28             CY7C1399                       (GP500, Gauntdl)
CY7C382                                          CY7C382-0JC                    (Honeydol)
CY7C384                                          CY7C384A-XJC                   (Honeydol, Maddonna)
CY7C421                                                                         (Rfjet)
CY7C1019        128k x 8 SRAM, SOJ32             CY7C1019BV33-15VC              (Gamshara)




LGS + Goldstar RAM           PCB note
------------------------------------------------------------------------------------------------------------
71C4260         SOJ40                            LGS GM71C4260AJ70              (Metmqstr)
76C28           2k x 8 SRAM                      LGS GM76C28A, GM76C28K, Goldstar GM76C28A, GS GM76C28 (Twincobr), KT76C28K (Crazywar)
76C88           8k x 8, SOP28                    LGS GM76C88ALFW
76C256          32k x 8 SRAM, SOP28              LGS GM76C256BLL, Goldstar GM76C256ALL (Fortecar), GM76256 (Crysking)




Mitsubishi RAM               PCB note
------------------------------------------------------------------------------------------------------------
M5M410092       TQFP128                          M5M410092FP                    (Harley)
M5M44170                                         M5M44170CJ                     (Bel)
M5M442256                                        M5M442256AJ, M5M442256AL       (Eggventr)
M5M44260        256k x 16 DRAM, 4MBit                                           (Cbaj, Capcom ZN1/2)
M5M4464                                                                         (Brapboys, SegaSystem24)
M5M4V4169                                                                       (Harley)
M5M4V4265       256k x 16 DRAM, TSOP40/44                                       (NamcosSystem32)
M5M51008        SOP32                            M5M51008AFP                    (Outfxies)
M5M5165                                                                         (Angelkds)
M5M5178         8k x 8 SRAM, DIP28               M5M5178AFP, M5M5178AP          (Model1, NamcoSystem22)
M5M5179                                          M5M5179AJ                      (Airco22b, Gollygho, Luckywld)
M5M5189                                                                         (Cybsled)
M5M5256         SOP28                            M5M5256BFP                     (Vshoot)
M5M5278                                          M5M5278P                       (Titlef)
M5M5517         2048 x 8 SRAM                    M5M5517P, M5517P               (40love, Gyrodine)




SEC + Samsung RAM            PCB note
------------------------------------------------------------------------------------------------------------
KM4116V256                                       KM4116V256G, KM416C256         (Gaia)
KM416S1020      16M SDRAM, TSOB48                                               (GP500, NamcoSystem23)
KM416V256                                        KM416V256BLT                   (Konami-GV)
KM416C1200                                       KM416C1200CJ                   (Gauntdl)
KM416C1204        2M x 8 DRAM, SOJ42             KM416C1204AJ, KM416C1204CJ     (Finalgdr, Ppcar, Ssfindo)
KM416V1204        1M x 16 EDO DRAM, TSOP44       KM416V1204BT, KM416V1204CT     (NamcoSystem12, GNET-System)
KM4216C256      256k x 16                                                       (Radikalb, Surfplnt)
KM4216V256                                                                      (Cryptklr)
KM424C257                                                                       (Alpinerc)
KM428C256       256k x 8 Dual Port DRAM, SOJ40   KM428C256J, KM428C256TR        (Aligator, Bang)
KM44C256                                         KM44C256BT                     (Pntnpuzl)
KM48V514        512k x 8 (4MBit) DRAM, SOJ28     KM48V514BJ, KM48V514DJ         (Capcom-ZN-1+2, Tecmowcm)
KM6161002        64k x 16 CMOS SRAM, SOJ44       KM6161002BJ, KM6161002CJ       (Xfiles, Kdynastg)
KM62256                                          KM62256BLS, KM62256CLP         (Fromanc2, Wbbc97)
KM6264                                           KM6264AL, KM6264BLS            (Jollycrd, Brapboys)
KM681000       128k x 8 SRAM, SOP32, SMD         KM681000ALP, KM681000BLG       (Splash, Silkroad)
KM681002       128k x 8 SRAM, SOJ32                                             (CPS3)
KM68257                                                                         (Scud, Hotdogst)
KM68658                                                                         (Kickgoal)




Sony RAM                     PCB note
------------------------------------------------------------------------------------------------------------
CXK5808         1k x 8                           CXK5808-55, CXK5808P           (Wiz, Ghosts'n Goblins)
CXK5813         2k x 8   SRAM                    CXK5813D                       (Robowres)
CXK5814                                          CXK5814P                       (Pairsnb)
CXK5816                  SRAM                    CXD5816SP                      (Bcstry, Meijinsn, Shougi)
CXK58256        32k x 8  SRAM                    58256                          (NeoGeo)
CXK58257        32k x 8  SRAM, SOP28             CXK58257ASP, CXK58257AP        (Drivedge, 32k)
CXK58258                                         CXK58258BP                     (Powerins)
CXK5863         8k x 8   SRAM, DIP28             CXK5863BP, CXK58638P, 5863P    (CPS2, Fromanc2)
CXK5864         64k      SRAM                    CXK5864ASP, CXK5864PS          (Le2, Truxton, Wildfang)
CXK581000                                                                       (Grdians)
CXK581001                                                                       (Gundamex)




Signetics RAM                PCB note
------------------------------------------------------------------------------------------------------------
8202            RAM or ROM?                      INS8202N, 8202                 (Astrof, Portrait)
82S09           RAM or ROM?                      N82S09                         (Spaceg, StrikesAndSpares, Turbo, Wwjgtin )
8205            RAM or ROM?                      INS82LS05N                     (Astrof)
82S16           256bytes x 1bit Bipolar DRAM     N82S16N                        (Wwjgtin, Amspdwy, Rescue, Tripool, Striv)
82S19           RAM on the Video Board                                          (Mrflea)



Other RAM
---------
AAA16K4P (Wildfang)
AAA64K1P (Powerins)
Nintendo RDRAM18-NUS (Mtetrisc)






R3.1   SRAM

R3.11  MB8421

- 0.216              : Changed descriptions to 'Fujitsu MB8421 8-bit Dual-Port SRAM with Interrupts' and 'Fujitsu MB8421/MB8431 16-bit Dual-Port SRAM with Interrupts'. Support variable size and data width. Use template for base device. Add notes [cam900].
- 0.207              : Eliminated address_space argument from MB8421 read/write handlers [AJR].
- 0.201              : Changed descriptions to 'MB8421 8-bit Dual-Port SRAM with Interrupts' and 'MB8421/MB8431 16-bit Dual-Port SRAM with Interrupts'. Converted MB8421 callbacks to DEVCB3 and update to recent coding standards [AJR].
- 0.189              : Changed description to 'MB8421 8-bit Dual-Port SRAM'. Added 'MB8421/MB8431 16-bit Dual-Port SRAM' device. Created MB8421/MB8431 16-bit expanded variant and added it to Thunder Zone/Desert Assault [AJR].
- 0.187              : Use MB8421 for communication RAM in audio\taito_en.cpp (Taito Ensoniq ES5505-based sound) [AJR].
- 0.186              : Use MB8421 for taito_l.cpp, less HOLD_LINE (fixes sound in Evil Stone) [AJR].
- 0.185              : Use MB8421 device for V25 communications in Golden Axe 2 [AJR].
- 0.155              : Added machine\mb8421.c/h. Added MB8421 device (16KBIT dual port SRAM with 2 interrupt pins). Added MB8421 to segaybd.c game 'Power Drift (Japan, Link Version)' (untested, since linkcpu doesn't enable interrupts?). Removed assumption that DSP common ram is an MB8421 for taitojc.c (MB8421 used on the sound part) [hap].
- NOTES: Fujitsu MB8421/22/31/32-90/-90L/-90LL/-12/-12L/-12LL CMOS 16K-bit (2KB) dual-port SRAM
- PCB: DEM-01 (Data East custom chip) = Fujitsu MB8421 Dual port SRAM, SDIP52, Robocop
- DRIVERS: dassault.cpp, galastrm.cpp, groundfx.cpp, gunbustr.cpp, model1.cpp, model2.cpp, segam1.cpp, segas32.cpp, segaybd.cpp, superchs.cpp, taito_f3.cpp, taito_l.cpp, taitojc.cpp, undrfire.cpp
- SOURCE: machine\mb8421.cpp



R3.12  CY7C131

- 0.259              : Use CY7C131 device in konami\konendev.cpp [Osso].
- 0.216              : Added 'Cypress CY7C131 8-bit Dual-Port SRAM with Interrupts' device. Device-fied CY7C131 Dual port SRAM [cam900].
- NOTES: Cypress CY7C131 8-bit Dual-Port SRAM with Interrupts
- DRIVERS: firebeat.cpp, konendev.cpp and twinkle.cpp
- SOURCE: machine\mb8421.cpp



R3.13  IDT 71321

- 0.216              : Changed description to 'IDT 71321 8-bit Dual-Port SRAM with Interrupts'. Added IDT7130 Dual port SRAM placeholder to (MESS) esqmr.cpp [cam900].
- 0.201              : Added 'IDT71321 8-bit Dual-Port SRAM with Interrupts' device (machine\mb8421.cpp).
- NOTES: IDT 71321 8-bit Dual-Port SRAM with Interrupts
- DRIVERS: hng64.cpp
- SOURCE: machine\mb8421.cpp



61L256S           = (32K x 8 bit High Speed CMOS SRAM) (Finalgdr)
BS616LV1010       = (64k x 16 SRAM, TSOP44)   (DemonFront)
IMS1630           = IMS1630LH, IMS1630LN (General-Purpose Static RAM, DC Output (25mA), 2V Data Retention, Low Power) (Palamed)
MT4C1M16E5DJ      = (72 PIN SIMM Memory modules) (A51site4)
MT48LC1M16AT      = (Gauntdl)
MT5C1008          = (128k x 8 SRAM) (MetalManiax)
24257             = Winbond W24257, W24257S, W24257AJ (32k x 8 SRAM)
435101            = Hitachi HM435101 (General-Purpose Static RAM) (Fastdraw)


R3.2   SGRAM

54V25632          =  OKI 54V25632 (256k x32 SGRAM, QFP100)                                      (Gamshara)
KM4132G271        =  Samsung KM4132G271Q,KM4132G271BQ  (128k x 32 x 2 banks SGRAM, QFP100)      (Glpracr)
4811650           =  NEC uPD4811650GF, 16M-BIT SYNCHRONOUS GRAM, 256K-WORD BY 32-BIT BY 2-BANK  (Harley)



R3.3   DRAM

MB461       (Beezer)
MB8118      (Chboxing, Chwrestl, Laserbas)
MB8128    = Fujitsu MB8128 (2k x 8 SRAM, DIP24) (Robowres, Sega-System16a)
MB8146    = MB8146A (USG32)
MB81416   = Fujitsu MB81416, MB81416A, MB-81416 (4bit x 16384, DRAM) (40love)
MB81464     (Luckywld)
MB81466   = Fujitsu MB81C466 (System 24)
MB814256  = Fujitsu 81C4256 (256k x 4 DRAM, SOJ24)
MB814260  = Fujitsu 814260  (256k x 16 DRAM 4MBit, SOJ40) (Beastrzr, Loderndf)
MB8178    = Fujitsu MB81C78A (8k x 8 SRAM ?, SOP28) (SegaSystem24, Cyclwarr, Smgp)

4464      = NEC D4464c, Panasonic MN4464M (64k x 4 DRAM, DIP18)
45160     = TI TMS45160DZ (256k x 16 DRAM)
418160    = TI TMS418160ADZ (1MB x 16 DRAM)
424210    = uPD424210 (256k x 16 DRAM, SideBs2)
424260    = NEC 424260, NEC 42S4260 (SMD, Jchan, Mk3) (256k x 16 DRAM, SOIC40, SideBs2)
424805    = 424805AL (512k x 8, 4MBit DRAM, SOJ28)
4218160   = (2MB x 8 / 1MB x 16 DRAM) (Sidebs, Sidebs2)

591616    = Toshiba TC59S1616AFT (512k-Words x 2-Banks x 16-Bits SDRAM, TSOP50) (11beat, Harley, Sega-Model3)
514256    = M514256, TC514256BZ, MCM514256, HM5142560JP8, OKI M514256  (1M DRAM)
514260    = M514260C (SOIC40), HY514260B, Hitachi HM514260JP8, TC51V4260BJ (256k x 16 DRAM, 4MBit DRAM, SOJ40)
5118164   = Hyundai HY5118164CJC, HY51V18164BJC (SOJ42) (16M x 16 DRAM) (Misncrft, Sscope2)
57651620  = Hyundai HY57V651620 (4MB x 16 SDRAM, SSOP54) (Crysking)

71C18160  = LG Semiconductor GM71C18160CJ6 (1M x 16 DRAM, SOJ42) (Klondkp)



R3.4   EDO RAM

321664    = Sanyo LC321664AJ   64k x 16 EDO DRAM (SOP40)              (Raystorm)
41LV16100 = ISSI IS41LV16100S 1M        EDO DRAM (TSOP50/44) Type II  (Mrdrilr2)
41LV16256 = ISSI IS41LV16256  256k x 16 EDO DRAM TSOP44/40   Type II  (Mrdrilr2), 16256 (Spotty)
416V1204  = Samsung KM416V1204BT-L5- 1M x16 EDO DRAM  (TSOP44/40)     (Sfex2, NamcoSystem12, GNET-System)
416V2540  = Samsung KM416V2540  256k x16 EDO DRAM (TSOP40/44)         (Gp500)
4E151611  = Samsung K4E151611C-JC60 1M x16Bit CMOS EDO DRAM (SOJ44)   (Kdynastg)
71C18163  = LG Semi GM71C18163, Hynix GM71C18163, 1M x16 EDO DRAM (SOJ44) (Suplup)
81C256K16 = Silicon Magic SM81C256K16CJ 100MHz EDO RAM, 4Meg          (Gauntleg, Gauntleg, Gradius4, Sscope2)




R3.5   VRAM

55160   = TMS55160DGH      256k x 16                            (MetalManiax)
81461   = MB81461          256k VRAM                            (Volfied)
548262  = M548262          256k x 8, Fastpage VRAM              (Pkgnsh, Realbrk)
44C251  = TMS44C251        256k x 4 Dual Port VRAM, ZIP28       (Mjdchuka)
482445  = NEC D482445LGW   Video Dynamic RAM - Hyper Page Mode, 4M bits, Number of Words=256k, Bits Per Word=16 (Btchamp, Sidebs/2, KonamiGVSystem)
42C4064 = MT42C4064Z        64k x 4 VRAM                        (Gtg, Hstennis, Ninclown, Wfortune)
42C8128                                                         (Mk3)



R4.    NVRAM (Non Volatile RAM)

- 0.282              : Removed DEFAULT_RANDOM init (machine\nvram.cpp) [hap].
- 0.263              : Delete NVRAM file on save if there's a write error or result file is 0 bytes (emu\machine.cpp) [hap].
- 0.262              : Miscellaneous cleanup (machine\nvram.cpp) [Vas Crabb].
- 0.247              : Separate backup-enable parameter (which prevents both loading and saving) from nvram_can_save (emu\dinvram.cpp) [AJR].
- 0.222              : Don't save 0byte file (machine\nvram.h, emu\dinvram.h and emu\machine.cpp). Renamed 'pre write/save' to 'can write/save' (emu\dinvram.h) [hap].
- 0.201              : Modern configuration accessors [Ryan Holtz].
- 0.194              : Added option to disable saving NVRAM on exit (emu\emuopts.cpp and machine.cpp) [AJR].
- 0.149              : Added NVRAMs for devices in software item named folder (machine\generic.c). This should help storing per game EEPROMs and other NVRAMs. NVRAM of root device is only stored in main folder in this case, since that is main machine NVRAM if any. Used parent image names so it will work for cmd parameters, also multiple images are supported [Miodrag Milanovic].
- 0.147u1            : NVRAM_HANDLER removal (drivers\bfm_sc2.c, bfm_sc4h.c, bmcbowl.c, dgpix.c, gal3.c, mitchell.c, includes\bfm_sc45.h and includes\mitchell.h) [Aaron Giles].
- 0.144u7            : Aaron Giles fixed NVRAM file naming.
- 0.144u6            : NVRAM custom init delegate are now device_delegates (capbowl.c, itech32.c and merit.c) [Aaron Giles].
- 0.143u8            : NVRAM devices each have their own files, when applicable. The output of such will be "NVRAM\setname\devicefile.". Some cases will still use the old "NVRAM\setname.NV" method until they have been converted properly [smf].
- 0.143u1            : In case of multiple BIOSes, system NVRAM will be saved in form systemname_biosnum.nv in cases when non-default BIOS is used. For default BIOS selection all stay the same [Miodrag Milanovic].
- 0.141u4            : Aaron Giles removed some legacy NVRAM_HANDLERs in favor of NVRAM devices.
- 0.141u3            : Aaron Giles removed public nvram_open() and fixed jchan/kaneko16 to stop directly saving NVRAM.
- 0.139u4            : Death to more NVRAM_HANDLERS [Aaron Giles].
- 0.139u3            : Added machine\nvram.c/h. Aaron Giles created a new generic NVRAM device. It can be configured to default to 0-fill, 1-fill, random-fill, or custom fill. In all cases, a same-named memory region overrides the default fill. The address range where the NVRAM can be found is now identified by an AM_SHARE() region of the same tag as the NVRAM device. Drivers can also explicitly configure a separately-allocated NVRAM region via nvram_device::set_base(). Aaron Giles replaced all instances of MDRV_NVRAM_HANDLER(generic_*) with MDRV_NVRAM_ADD_*("nvram"). Replaced all AM_BASE_GENERIC/AM_SIZE_GENERIC(nvram) with AM_SHARE("nvram"). For all remaining drivers that referenced the generic.nvram directly, changed them to hold a required_shared_ptr<UINTx> to the NVRAM in their driver state, and use that instead. Removed NVRAM and nvram_size from the generic_ptrs. Aaron Giles replaced largely redundant NVRAM handlers with NVRAM devices for namcos2 and a bunch of the Nichibutsu mahjong games. Also did it for the Atari games, moving the old hard-coded EEPROM data out into files finally.
- 0.138u2            : Added emu\dinvram.c/h.
- 0.131              : Aaron Giles changed generic NVRAM behavior so that all the variants look for a memory region named "nvram". If it is found and is of the same length as the generic_nvram_size, data is copied from there instead of filling the RAM with the fallback pattern.
- 0.130              : Aaron Giles added muting just before saving the NVRAM, and de-mute just after loading the NVRAM. Should cure the stuck sound issue for games with large NVRAM.
- 0.128u7            : Aaron Giles changed various NVRAM devices to fetch their default memory region from the device->region rather than specifying it in the configuration.
- 0.104              : Mathis Rosenhauer fixed NVRAM handling in Star Wars/ESB (only affects test mode).
- 0.103u1            : smf hooked up NVRAM in Frenzy memory map.
- 0.99               : Brian Troha hooked up NVRAM for World Class Bowling Tournament (v1.40).
- 0.96u4             : Aaron Giles added thrash protection emulation to the NVRAM in coolpool.c.
- 0.88u2             : Frank Palazzolo added NVRAM handling to Robby Roto and Professor PacMan (still not working always but self-tests pass) and support stereo in Wizard of Wor, Robby Roto, Gorf and Professor PacMan (Sounds great now!!). Added 'Reset on powerup', 'Halt on error', 'Beep', 'ROM' and 'Unknown' dipswitch.
- 0.84u5             : smf hooked up NVRAM for Namco system 12 correctly.
- 0.83               : Justin Szczap added NVRAM to Spiders.
- 0.77               : Curt Coder fixed Cue Brick NVRAM handler.
- 0.76u2             : Aaron Giles added some pre-initialization to the WarGods NVRAM.
- 0.58               : Basic generic NVRAM handlers have been added. For a number of games, it is sufficient to point the global variables 'generic_nvram' and 'generic_nvram_size' to the location and size of the NVRAM area. In the machine driver, you can now specify 'generic_0fill' or 'generic_1fill' to request a generic NVRAM handler. The 0fill and 1fill refer to how the memory is initialized in the absence of an .nv file.
- 18th June      2002: HobbesAtPlay submitted a patch to add saving the NVRAM in Tri-Sports.
- 18th January   2001: David Graves added NVRAM emulation to Slap Shot.
-  4th December  2000: Aaron Giles fixed a NVRAM bug in Rim Rockin' Basketball.
- 0.36b14            : Added OSD_FILETYPE_NVRAM. Note: Non volatile ram is now saved to a new directory, NVRAM (instead of the old HI). You must create that directory manually, otherwise the files will not be saved. Removed *hiscore_load and *hiscore_save from the GameDriver structure. To manage nvram/eeprom/cmos/etc the new *nvram_handler in struct MachineDriver must be used. High score save is temporarily disabled. It will be added again in a future release using an external .dat file [Nicola Salmoria].
- PCB: 5101 (Defender), 5114 and 6514 (2nd Generation Williams games)



R4.1   DALLAS

R4.11  DS1220
- PCB: DALLAS DS1220Y  16k  DIP24 (Ghosthunt, RapidFire, Strvmstr, Tickee)

R4.12  DS1225
- PCB: DALLAS DS1225Y  16k Non-volitile RAM (MegaTouch 3/5)

R4.13  DS1230
- PCB: DS1230 NV RAM (Megat6)

R4.14  DS1235
- PCB: DALLAS DS1235Y non-volatile SRAM (Passsht)



R4.2   X2210

- 0.192              : Changed description to 'Xicor X2210 64x4 NOVRAM'.
- 0.186              : Changed description to 'Xicor X2210 64x4 NVRAM'.
- 0.184              : Added 'X2210' device (machine\x2212.cpp).
- 0.153              : Added support for the 2210 (64x4) [Barry Rodewald]. MSVC compilation fix [Nathan Woods].
- PCB: Xicor XD2210, CDIP18/20  NVRAM (Portrait)
- DRIVERS: (MESS) altos2.cpp, d400.cpp, trs80dt1.cpp and wicat.cpp
- SOURCE: machine\x2212.cpp



R4.21  X2212

- 0.221              : Simplified handlers [Osso].
- 0.200              : Eliminated MCFG_X2212 macros from drivers and added pin diagram [AJR].
- 0.199              : Removed memory interface and clean up code. Added address sanity checking [AJR].
- 0.194              : Eliminated alloca() [AJR].
- 0.192              : Changed description to 'Xicor X2212 256x4 NOVRAM'.
- 0.186              : Changed description to 'Xicor X2212 256x4 NVRAM'.
- 0.139u4            : Aaron Giles converted X2212 to a modern device. Changed X2212 device to return unmapped bits for the upper 4 bits. Added e2prom address space to X2212 so that the latched contents can be viewed. Updated starwars and firefox. Hooked up X2212 in foodf. Changed Crystal Castles and Cloud 9 to use the X2212 instead of the hacked-up fake version they had.
- 0.138u2            : X2212 now uses device template. Also changed all handlers to use DEVCB prototypes. Default NVRAM contents should be in region named same like device tag. Hooked up X2212 in starwars [Couriersud].
- 0.127u4            : Added machine\x2212.c/h.
- NOTES: Xicor X2212 Nonvolatile Static RAM (256 x 4 bit)
- DRIVERS: balsente.cpp, ccastles.cpp, cloud9.cpp, firefox.cpp, foodf.cpp, irobot.cpp, jedi.cpp, quantum.cpp and starwars.cpp
- SOURCE: machine\x2212.cpp


R4.3   FM1208
- PCB: RAMTRON FM1208S 4096bit Nonvolatile Ferroelectric RAM, 512 x 8, DIP24 (Raystom, Taito GNET-System)



R5.    NOVRAM

R5.1   2212
- SOURCE: drivers\starwars.c  - AM_RANGE(0x4500, 0x45ff)  = 256
- PCB: Xicor 2212, 256x4, NOVRAM (Esb)

R5.2   2816
- PCB: Little 2x12 pin chips labeled XICOR X2816BP (Klax), KM2816A (Cheyenne)



R6.    Buffer

R6.1   81LS95
- PCB: The DM81LS95 is a 3-STATE Octal Buffer or TriState buffer (Portrait), DM18LS95N or DM18LS97N (Astrof)

R6.2   CY7B991
- PCB: Programmable Skew Clock Buffer, PLCC32 (Sidebs, Sidebs2, Landgear)

R6.3   4050
- PCB: Toshiba TC4050BP Non-Inverting Hex Buffer / Converter, DIP16 (Champbwl), 4050 (Pairlove, 11beat, Magical, Mtetrisc)



R7.    FIFO

R7.1   LH5496
- PCB: Sharp LH5496D-50 Asynchronous FIFO, DIP28 (Ejanhs, Rdft, Rdft2, Rfjet, Senkyu, Viprp1)

R7.2   LH540202
- PCB: LH540202U  CMOS 1024 x 9 Asynchronous FIFO, PLCC32 (Cbaj, ZN1/2)


R7.3   7200

- 0.238              : Fixed triggering of half-full flag [Nigel Barnes].
- 0.222              : READ/WRITE macros removal [Osso].
- 0.210              : Separated device types by size. Allow side effects to be disabled for reads [AJR]. Changed description to 'IDT7200 FIFO (256x9)'.
- 0.201              : Removed MCFG and old DEVCB macros [Ryan Holtz].
- 0.185              : When built with MSVC, clear() resets m_buffer size to 0 and m_buffer[0] throws an exception (machine\7200fifo.cpp) [smf].
- 0.157              : Added missing 7200 FIFO save state, fixes Seibuspi save state problem [Osso].
- 0.152              : Flag pins are inverted in 7200 FIFO [hap].
- 0.149              : Added machine\7200fifo.c/h. hap added 7200 FIFO chip device (drivers\zn.c).
- NOTES: IDT7200 FIFO (256x9) = IDT7200 series 9-bit Asynchronous FIFO
- PCB: Integrated Devices Technology IDT7200  256 x 9 CMOS Asynchronous FIFO (NamcoSystem23)
- DRIVERS: (namcos23.cpp)
- SOURCE: machine\7200fifo.cpp


R7.31  7201

- 0.210              : Separated device types by size. Added 'IDT7201 FIFO (512x9)' device [AJR].
- PCB: IDT 7201 LA 35J, 512 x 9 Async FIFO (Blitz99), AMD AM7201-35JC (Gauntleg)
- NOTES: IDT7201 FIFO (512x9)
- DRIVERS: seibuspi.cpp
- SOURCE: machine\7200fifo.cpp


R7.32  7202

- 0.210              : Separated device types by size. Added 'IDT7202 FIFO (1024x9)' devicee [AJR].
- PCB: Am7202-25RC, 1024x9 FIFO (4 parts) (bus\interpro\sr\edge.cpp)
- NOTES: IDT7202 FIFO (1024x9)
- DRIVERS: zn.cpp
- SOURCE: machine\7200fifo.cpp


R7.33  7203
- PCB: AM7203A (GTIClub)

R7.4   ACT7814
- PCB: ACT7814-25  64 x 18 strobed FIFO (MetalManiax)

R7.5   KM75C02
- PCB: Samsung KM75C02 FIFO RAM, DIP28 (Sliver)


R7.6   40105

- 0.221              : Simplified handlers [Osso].
- 0.181              : Further attempts to improved accuracy of 40105 emulation [AJR].
- 0.154              : Fixed usage of uninitialized member in cmos_40105_device [Oliver Stoeneberg].
- 0.150              : Added machine\40105.c/h. (MESS) C64 Magic Voice WIP with CMOS 40105 [Curt Coder].
- NOTES: CMOS 40105 FIFO Register
- DRIVERS: cedar_magnet.cpp
- SOURCE: machine\40105.cpp


R7.6   2812

- 0.210: Added machine\2812fifo.cpp/h. Added AMD/Plessey 2812 FIFO device (for WIP Star Rider driver) [Vas Crabb].
- NOTES: 2812 32*8 First-In First-Out Memory (AMD, Plessey, and others)
- DRIVERS: starrider.cpp
- SOURCE: machine\2812fifo.cpp


R8.    Battery backed RAM + Timekeeper

- 0.271              : Suppress side effects for debugger reads [cam900].
- 0.252              : Use device_rtc_interface to acquire base time (machine\timekpr.cpp) [AJR].
- 0.213              : Fixed bcd wrap in machine\timehelp.h [Patrick Mackinlay].
- 0.207              : Removed unnecessary arguments in handlers (machine\timekpr.cpp) [cam900, Vas Crabb].
- 0.204              : Fixed watchdog delay setting (machine\timekpr.cpp) [Ted Green].
- 0.202              : Switched to use the new logmacro system. Fixes issue that could cause updates to be missed [Ryan Holtz].
- 0.201              : Default input clock for all devices (machine\timekpr.h) [AJR].
- 0.152              : Removed unused structure (machine\timekpr.h) [smf].
- 0.148u5            : Finished modernizing timekeeper (machine\timekpr.c/h, drivers\cdi.c, drivers\cobra.c, cps1.c, hornet.c, itech32.c, ksys573.c, midzeus.c, multfish.c, nwk-tr.c, slapshot.c, tomcat.c, vegas.c, viper.c, includes\cps1.h and midzeus.h) [smf].
- 0.109u4            : Nathan Woods normalized realtime clock accesses across drivers. Now ensure that realtime clocks are reset when recording/saving INP files (machine\timekpr.c).
- SOURCE: machine\timekpr.cpp


R8.1   M4T28
- PCB: ST M4T28-BR12SH1 Timer Keeper Snap Hat RAM (Gauntleg, Gauntdl)


R8.11  MK48T02

- 0.199              : Eliminated customized MCFG_M48T02_ADD macros [Ryan Holtz].
- 0.142u3            : Added 'M48T02 Timekeeper' device (machine\timekpr.c).
- 0.139u2            : Harmony updated the M48T02 device to no longer be legacy.
- 0.93u2             : Added machine\timekpr.c/h.
- PCB: MK48T02B-15 TIMEKEEPER RAM (MetalManiax)
- SOURCE: machine\timekpr.cpp


R8.12  MK48T08

- 0.199              : Eliminated customized MCFG_MK48T08_ADD macros [Ryan Holtz].
- 0.187              : M48T08 doesn't have watchdog [Ted Green].
- 0.139u2            : Harmony updated the MK48T08 device to no longer be legacy.
- 0.101u4            : smf removed code that reset the timer when reading/writing on the MK48T08 timekeeper chip. Updated the save state interfaces. Added new macro state_save_register_item_pointer() for dynamically allocated arrays.
- 0.95u3             : smf commented out logerror's in timekpr.c.
- 0.93u2             : Added machine\timekpr.c/h.
- PCB: ST MK48T08B-10 TimeKeeper Ram - Lithuim Battery backed RAM chip (8k x 8) (Opwolf3), MK48T08B-10 Battery Backup SRAM (Slapshot)
- SOURCE: machine\timekpr.cpp


R8.13  MK48T12
- 0.199              : Eliminated customized MCFG_MK48T12_ADD macros [Ryan Holtz].
- 0.196              : Correct size of MK48T12 timekeeper RAM [smf].
- DRIVERS: goldstar.cpp and sun4.cpp
- SOURCE: machine\timekpr.cpp


R8.14  M48T35

- 0.199              : Eliminated customized MCFG_M48T35_ADD macros [Ryan Holtz].
- 0.142u3            : Added 'M48T35 Timekeeper' device (machine\timekpr.c).
- 0.139u2            : Harmony updated the M48T35 device to no longer be legacy.
- 0.127              : smf identified compatible timekeeper used by Midway Zeus II. Removed all the timekeeper memory handlers, except for 8 bit & changed the drivers to use the conversion built into the memory system.
- DRIVERS: midzeus.cpp
- SOURCE:machine\timekpr.cpp


R8.15  M48T37

- 0.201              : Converted M48T37 callbacks to DEVCB3 [AJR].
- 0.199              : Eliminated customized MCFG_M48T37_ADD macros [Ryan Holtz].
- 0.188              : Use actual M48T37 timekeeper in atlantis.cpp [Ted Green].
- 0.187              : Added watchdog function to M48T37 timekeeper [Ted Green].
- 0.142u3            : Added 'M48T37 Timekeeper' device (machine\timekpr.c).
- 0.141u4            : Aaron Giles added M48T37 variant to timekpr.c. Fixed some bugs that caused registers to be initialized to 0xff and caused odd behavior. Updated to modern device timers. Converted vegas.c to use M48T37 instead of its own implementation.
- DRIVERS: atlantis.cpp and vegas.cpp
- SOURCE: machine\timekpr.cpp


R8.16  M48T58

- 0.262              : Fixed 'Code One Dispatch Ver 1.21' M48T58 NVRAM and DS2430 content [Windy Fairy].
- 0.199              : Eliminated customized MCFG_M48T58_ADD macros [Ryan Holtz].
- 0.146              : Zerod out the date and time in the M48T58 timekeeper rom of Hyper Bishi Bashi [smf].
- 0.142u3            : Added 'M48T58 Timekeeper' device (machine\timekpr.c).
- 0.139u2            : Updated the M48T58 device to no longer be legacy [Harmony].
- 0.127u2            : Converted timekeeper to a device, all default contents are loaded from disk [smf].
- 0.93u2             : Added machine\timekpr.c/h. M48T58 / M48T58Y emulation, used by hornet and others [smf].
- PCB: M48T58Y-70PC1 ST Mirco Timekeeper RAM with internal lithuim battery, 8k x 8, DIP32 (Dstage, Gradius4)
- SOURCE: machine\timekpr.cpp


R8.17  MK48Z02
- PCB: MK48Z02B-15 ZEROPOWER RAM (MetalManiax, Amerdart)

R8.18  MK48Z08
- PCB: M48Z08-100PC1 Zero Power RAM (Monglfir)

R8.2   449
- PCB: Battery backed up NEC D449C ram (Gepoker)

R8.3   5164
- PCB: P5164SL battery SRAM (Gtg2, Stratab), P5164  8k x 8 RAM (Gtg), P5164S (Hstennis, Peggle, Slikshot)



R9.    Battery

R9.1   2032
- PCB: Sony CR2032 3 Volt Coin Battery (Stmblade, Sega System24), CR-2032 battery (Hyperspt), 3 Volt coin battery for use with DS2404S (Viprp1)

R9.2   2325
- PCB: 2325 battery (Blitz99)

R9.3   5104
- NOTES: The Tadiran TL-5104 3.6V lithium (AA-sized) is for battery backup's.
- GAMES: Ataxx (Leland 1990)

R9.4   QTC85
- PCB: Battery QTC85 AA 3B960 (Truco)



==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


ARCADE SYSTEMS


  1.    Amiga
  1.1   Amiga 500 board
  1.2   Arcadia Multi Select System
  1.3   Sente Super System
  1.4   American Laser Game
  1.5   Cubo CD32

  2.    Atari
  2.1   Atari System 1
  2.2   Atari System 2
  2.3   Atari G1
  2.4   Atari G42
  2.5   Atari GX2
  2.6   Atari GT
  2.7   Atari CoJag
  2.8   Atari/Midway Seattle
  2.9   Atari/Midway Vegas
  2.A   Atari MediaGX

  3.    Bally/Sente SAC-1 system

  4.    Capcom
  4.1   Capcom System 1
  4.2   Capcom System 2
  4.3   Capcom System 3

  5.    Century Electronics
  5.1   CVS

  6.    Data East
  6.1   DECO Cassette System
  6.2   Data East PC-Engine
  6.3   Data East 32
  6.4   Data East MLC

  7.    Exidy
  7.1   Exidy 6502
  7.2   Exidy 440
  7.3   Max-A-Flex

  8.    IGS
  8.1   PGM

  9.    Irem
  9.1   M62
  9.2   M72
  9.3   M92
  9.4   M107

 10.    Jaleco
 10.1   Mega System 1
 10.2   Mega System 32

 11.    Kaneko
 11.1   Super Nova System

 12.    Konami
 12.1   GX-Boards
 12.2   GX611
 12.3   GX777
 12.4   GX797
 12.5   GX973
 12.6   System GX
 12.7   System GV

 13.    Metro

 14.    Midway
 14.1   MCR-1 System
 14.2   MCR-2 System
 14.3   MCR-3 System
 14.4   MCR-68k System
 14.5   Midway T-Unit System
 14.6   Midway V-Unit System
 14.7   Midway Wolf-Unit System
 14.8   Williams/Midway Y/Z-unit system

 15.    Namco
 15.1   Namco System 86
 15.2   Namco System 1
 15.3   Namco System 2
 15.4   Namco System NA-1 / NA-2
 15.5   Namco System NB-1
 15.6   Namco System ND-1
 15.7   Namco System 11
 15.8   Namco System 12
 15.9   Namco System 21
 15.10  Namco System 22
 15.11  Namco System 23

 16.    Nintendo
 16.1   Playchoice 10
 16.2   Super System

 17.    Sega
 17.1   G-80 Raster
 17.2   G-80 Vector
 17.3   System 1/2
 17.4   SG-1000
 17.5   System 16A
 17.6   System 16B
 17.7   System 18
 17.8   System 24
 17.9   System 32
 17.10  System C
 17.11  System C2
 17.12  MegaPlay
 17.13  Mega Tech
 17.14  Multi-32
 17.15  Model 1
 17.16  Model 2
 17.17  Model 3
 17.18  ST-V

 18.    Seibu
 18.1   SPI

 19.    Seta
 19.1   SSV

 20.    SNK
 20.1   SNK
 20.2   SNK68

 21.    Sony
 21.1   ZN1/ZN2

 22.    Taito
 22.1   Taito Air System
 22.2   Taito B System
 22.3   Taito F2 System
 22.4   Taito F3 System
 22.5   Taito H System
 22.6   Taito L System
 22.7   Taito SJ System
 22.8   Taito X System
 22.9   Taito Z System
 22.A   Taito GNET System

 23.    Tecmo
 23.1   Tecmo 68k system
 23.2   Tecmo System

 24.    Board Serial Numbers / Labels

 25.    Hardware WIP
 25.1   Model 2

..................................................................................................................................................................................................................................



H1.    Amiga

H1.1   Amiga 500 board
- CPU   : 68000 (7159090 Hz)
  SOUND : Amiga Paula (3579545 Hz), 2x Channels
  VIDEO : 671x216 (59.997 Hz, palettesize 4096)
- SOURCE: drivers\upscope.cpp
- GAMES : Up Scope (Grand Products 1986)


H1.2   Arcadia Multi Select System
- CPU   : 68000 (7159090 Hz)
  SOUND : Amiga Paula (3579545 Hz), 2x Channels
  VIDEO : 671x216 (59.997 Hz, palettesize 4096)
- NOTES : In the late 80s, Arcadia collaborated with Mastertronic to create their own ten-interchangeable-game arcade platform called the Arcadia Multi Select system, using the same hardware as the beloved Commodore Amiga computer. In fact, the Multi Select's main PCB is an A500 motherboard, to which the ROM cage is attached through the external expansion port. Reportedly the system was also (or was originally) supposed to have been released in two five-game Super Select versions--"Arcade Action" and "Sports Simulation"- but no specimens of these have ever been seen. Piggyback 1.5mb rom board, a 8255 parallel peripheral interface, DALLAS DS1220Y NVRAM and PAL16L8.
- SOURCE: drivers\arcadia.cpp
- GAMES : Magic Johnson's Fast Break (Arcadia Systems 1988)


H1.3   Sente Super System
- CPU   : 68000 (7159090 Hz)
  SOUND : Amiga Paula (3579545 Hz), ES5503 (7159090 Hz), 2x Channels
  VIDEO : 671x216 (59.997 Hz, palettesize 4096)
- SOURCE: drivers\mquake.cpp
- GAMES : Moonquake (Sente 1987)


H1.4   American Laser Game
- CPU   : 68000 (7159090 Hz)
  SOUND : Amiga Paula (3579545 Hz) + Laserdisc Analog sound
  VIDEO : 671x216 (59.997002 Hz, palettesize 4096)
- NOTES : Amiga 500 + Sony LDP1450 Laserdisc Player
- SOURCE: drivers\alg.cpp
- GAMES : Mad Dog McCree (American Laser Game 1990)


H1.5   Cubo CD32

- CPU   : 68EC020 (14187580 Hz)
  SOUND : Amiga Paula (3579545 Hz) + CD/DA sound
  VIDEO : 703x272 (50 Hz, palettesize 4096)
- NOTES : Original Commodore CD32, additional hardware and games by CD Express, Milan, Italy)
- SOURCE: drivers\cubo.cpp
- GAMES : Laser Quiz Italy (CD Express 1995)



H2.    Atari

H2.1   Atari System 1
- CPU   : 68010 (7159090 Hz), M6502 (1789772 Hz)
  SOUND : YM2151 (3579545 Hz), POKEY (1789772 Hz), TMS5220 (650826 Hz), 2x Channels
  VIDEO : 336x240 (59.922743 Hz, palettesize 1024)
- SOURCE: drivers\atarisy1.cpp
- GAMES : Marble Madness (1984), Peter Pack-Rat (1984), Indiana Jones (1985), Road Runner (1985), Road Blasters (1987)


H2.2   Atari System 2
- CPU   : T11 (10 MHz), M6502 (1789772 Hz)
  SOUND : YM2151 (3579545 Hz), 2x POKEY (1789772 Hz), TMS5220 (625000 Hz), 2x Channels
  VIDEO : 512x384 (60.096154 Hz, palettesize 256)
- SOURCE: drivers\atarisy2.cpp
- GAMES : Paperboy (1984), 720 Degrees (1986), Championship Sprint (1986), Super Sprint (1986), APB (1987)


H2.3   Atari G1
- CPU   : 68000 (14318180 Hz), M6502 (1789500 Hz)
  SOUND : YM2151 (3579000 Hz), OKI6295 (9037 Hz), 1 Channel
  VIDEO : 336x240 (59.922743 Hz, palette 1280)
- SOURCE: drivers\atarig1.cpp
- GAMES : Hydra (1990), Pit Fighter (1990)


H2.4   Atari G42
- CPU   : 68000 (14318180 Hz), TMS32010 (20 MHz), M6502 (1789500 Hz)
  SOUND : YM2151 (3579000 Hz), OKI6295 (9037 Hz), 1 Channel
  VIDEO : 336x240 (59.922743 Hz, palette 2048)
- SOURCE: drivers\atarig42.cpp
- GAMES : Road Riot 4WD (1991), Guardians of the 'Hood (1992)


H2.5   Atari GX2
- CPU   : 68EC020 (14318180 Hz), M6502 (1789500 Hz)
  SOUND : YM2151 (3579000 Hz), 2x OKI6295 (9037 Hz), 2x Channels
  VIDEO : 336x240 (59.922743 Hz, palette 2048)
- SOURCE: drivers\atarigx2.cpp
- GAMES : Moto Frenzy (1992), Space Lords (1992), Road Riot's Revenge (1994)


H2.6   Atari GT
- CPU   : 68EC020 (25 MHz), TMS32031 (33868800 Hz)
  SOUND : 4x DMA-driven DAC, 2x Channels
  VIDEO : 336x240 (59.922743 Hz, palette 32768)
- SOURCE: drivers\atarigt.cpp
- GAMES : Primal Rage (1994), T-MEK (1994)


H2.7   Atari CoJag
- CPU   : R3041 (40 MHz), Jaguar GPU (26 MHz), Jaguar DSP (26 MHz)
  SOUND : 2x DAC, 2x Channels
  VIDEO : 360x240 (59.922743 Hz, palette 65534)
- NOTES : The hardware is a variant of the Jaguar home console. The interesting thing about the CoJag system is that the designer had the option of using either a 68010 or a MIPS R3000 as the primary CPU. The CoJag also had an IDE interface so you could hook up a hard disk, which is what Area 51 uses. As far as I know, nobody has yet attempted to emulate the CoJag hardware.
- SOURCE: drivers\cojag.cpp
- GAMES : Fishin' Frenzy (prototype 1995), Area 51 (1995), Freeze (prototype 1996), Maximum Force (1996), Vicious Circle (1996)


H2.8   Atari/Midway Seattle
- CPU   : R5000 (little) (200MHz), TMS32031 (33868800 Hz)
  SOUND : 2x DMA-driven DAC, 2x Channels
  VIDEO : 640x480 (57 Hz, palette 65536)
  EXTRA : 3dfx Voodoo Card, Harddisk
- SOURCE: drivers\seattle.cpp
- GAMES : San Francisco Rush (Atari 1996), Wayne Gretzky's 3D Hockey (Atari 1996), NFL Blitz (Midway 1997), CarnEvil (Midway 1998)


H2.9   Atari/Midway Vegas
- CPU   : R5000 (little) (200MHz), ADSP2104 (16 MHz)
  SOUND : 2x DMA-driven DAC, 2x Channels
  VIDEO : 640x480 (57 Hz, palette 65536)
  EXTRA : Voodoo Banshee/2/3, Harddisk
- SOURCE: drivers\vegas.cpp
- GAMES : Gauntlet Legends (1998), Tenth Degree (1998), Road Burners (1999)


H2.A   Atari MediaGX
- CPU   : MEDIAGX (166 MHz)
  SOUND : 2x DAC, 2x Channels
  VIDEO : 640x240 (60 Hz, palette 16)
- SOURCE: drivers\mediagx.cpp
- GAMES : Area 51: Site 4 (1998)



H3.    Bally/Sente SAC-1 system
- CPU   : M6809 (1.25 MHz), Z80 (4 MHz)
  SOUND : 6x CEM3394, 1 Channel
  VIDEO : 256x240 (59.185606 Hz, palette 1024)
- SOURCE: drivers\balsente.cpp
- GAMES : Trivial Pursuit (1984), Stocker (1984), Mini Golf (1985), Name That Tune (1986), Rescue Raider (1987)



H4.    Capcom

H4.1   Capcom System 1
- CPU   : 68000 (10 MHz), Z80 (3579545 Hz)
  SOUND : YM2151 (3579545 Hz), OKI6295 (1 MHz), 1 Channel
  VIDEO : 384x224 (59.61 Hz, palette 3072)
- SOURCE: drivers\cps1.cpp
- GAMES: Capcom - Forgotten Worlds (1988), Ghouls'n Ghosts (1988), Willow (1989), Mercs (1990), Varth (1992)


H4.2   Capcom System 2
- CPU   : 68000 (16 MHz), Z80 (8 MHz)
  SOUND : Q-Sound (4 MHz), 2x Channels
  VIDEO : 384x224 (59.629403 Hz, palette 3072)
- SOURCE: drivers\cps2.cpp
- GAMES : Super Street Fighter 2: The New Challengers (1993), X-Men: Children of the Atom (1994), X-Men Vs. Street Fighte(1996)


H4.3   Capcom System 3
- CPU   : SH-2 (25 MHz)
  SOUND : CPS3 Custom (14318166 Hz), 2x Channels
  VIDEO : 384x224 (59.583393 Hz, palette 65536)
- Hardware: Arcade CD + encryption cartridge
- SOURCE: drivers\cps3.cpp
- GAMES : Red Earth (1996), Streetfighter III (1997)



H5.    Century Electronics

H5.1   CVS
- CPU   : 3x S2650 (894886 Hz)
  SOUND : 2x DAC, TMS5110 (640000 Hz), 1 Channel
  VIDEO : 248x240 (60 Hz, palette 2089)
- SOURCE: drivers\cvs.cpp
- GAMES : Cosmos (1981), Wall Street (1982), Hunchback (1983)



H6.    Data East

H6.1   DECO Cassette System
- CPU   : 2x M6502 (750000 Hz, 500000 Hz), I8041 (6 MHz)
  SOUND : 2x AY-3-8910A (1500000 Hz), 1 Channel
  VIDEO : 240x240 (57.444853 Hz, palette 56)
- SOURCE: drivers\decocass.cpp
- NOTES : The games are protected with dongles. There are five types of dongles (PROM/EPROM with 32, 2048, 4096, 32768 bytes data or NOP's). The tape use a leader-BOT-data-EOT-trailer format: A cassette has a transparent piece of tape on both ends, leader and trailer. And data tapes also have BOT and EOT holes, shortly before the leader and trailer. The holes and clear tape are detected using a photo-resitor. When rewinding, the BOT/EOT signal will show a short pulse and if rewind continues a constant high signal later. The specs say the holes are "> 2ms" in length.
- GAMES : Highway Chase (1980), Lock'n'Chase (1981), Burger Time (1983), Boulder Dash (1985)


H6.2   Data East PC-Engine
- CPU   : 2x HuC6280 (7159066 Hz)
  SOUND : YM2203 (1500000 Hz), MSM5205 (384000 Hz), HuC6280 (3579545 Hz), 2x Channels
  VIDEO : 256x232 (60 Hz, palette 512)
- SOURCE: drivers\decocass.cpp
- NOTES : This board is a modified PC Engine PCB, differences from PC-Engine console: Input ports are different (2 dips, 2 joysticks, 1 coin port), _Interface_ to palette chip is different, palette data is the same. Extra sound chips, and extra processor to drive them. Twice as much VRAM.
- GAMES : Battle Rangers (1988)


H6.3   Data East 32
- CPU   : ARM (7 MHz), HuC6280 (4027500 Hz)
  SOUND : YM2151 (3580000 Hz), 2x OKI6295 (1006875 Hz + 2013750 Hz), 2x Channels
  VIDEO : 320x240 (60 Hz, palette 2048)
- SOURCE: drivers\deco32.cpp
- GAMES : Captain America (1991), Dragon Gun (1993), Night Slashers (1994)


H6.4   Data East MLC
- CPU   : ARM (7 MHz)
  SOUND : YMZ280B (14 MHz), 2x Channels
  VIDEO : 320x240 (58 Hz, palette 2048)
- SOURCE: drivers\deco_mlc.cpp
- NOTES : The MLC system is basically an 8" x 6" x 2" plastic box with a JAMMA connector on it. The PCBs are very compact and have almost entirely surface mounted components on both sides of both boards. One board contains the RAM, sound hardware and I/O, the other board contains the CPU and ROMs. All main boards are identical between the MLC games and can be changed just by plugging in another game and pressing test to reset the EEPROM defaults.
- GAMES : Avengers In Galactic Storm (1995), Hoops '96 (1996), Skull Fang (1996)



H7.    Exidy

H7.1   Exidy 6502
- CPU   : M6502 (705562 Hz) or 2x M6502
  SOUND : Samples, DAC, 1 Channel or Exidy SFX+PSG
  VIDEO : 256x256 (59.996811 Hz, palette 8)
- SOURCE: exidy.cpp
- GAMES : Side Track (1979), Spectar (1980), Targ (1980), Mouse Trap (1981)


H7.2   Exidy 440
- CPU   : 2x M6809 (1622400 Hz + 811200 Hz)
  SOUND : Exidy 440 CVSD (50700 Hz), 2x Channels
  VIDEO : 320x240 (60 Hz, palette 256)
- SOURCE: exidy440.cpp
- GAMES : Crossbow (1983), Cheyenne (1984), Chiller (1986), Showdown (1988)


H7.3   Max-A-Flex
- CPU   : M6502 (1789790 Hz), M68705 (3579545 Hz)
  SOUND : POKEY (1789790 Hz), Speaker, 1 Channel
  VIDEO : 336x225 (59.923329 Hz, palette 256)
- SOURCE: maxaflex.cpp
- NOTES : The Max-A-Flex system from First Star Software is basically an Atari 600XL computer inside an arcade cabinet. There is additional hardware that controls the length of time that you may play the game.
- GAMES : Astro Chase (1982), Bristles (1983), Flip & Flop (1983), Boulder Dash (1984)



H8.    IGS

H8.1   PGM
- CPU   : 68000 (20 MHz), Z80 (8468000 Hz) + ARM7 (20 MHz)
  SOUND : ICS2115, 1 Channel
  VIDEO : 448x224 (60 Hz, palette 2304)
- SOURCE: drivers\pgm.cpp
- NOTES : PGM = PolyGame Master. A flexible cartridge based platform, it only uses a 68000 for the main processor and a Z80 to drive the sound. Resolution is 448x224, 15 bit colour. Sound system is ICS WaveFront-2115 Wavetable MIDI syntesizer, used in some actual sound cards (Turtle Beach). The later games would appear to be encrypted.
- GAMES : Oriental Legend (1997), Dragon World II (1997), Knights of Valour (1999)



H9.    Irem
H9.1   M62
- CPU: Z80 (4 MHz), M6803 (sound)   Sound: 2x AY-8910, 2x MSM5205     Video: 384x256, 512 colors
- GAMES: Irem - Lode Runner (1984), Spelunker (1985), Kid Niki (1986)

H9.2   M72
- CPU: NEC V30 (16 MHz), Z80 (sound)   Sound: YM-2151, DAC     Video: 384x256, 1024 colors and Nanao video controller
- Video capabilities: Sprites and the two backgrounds layers
- GAMES: Irem - R-Type (1987), Battle Chopper (1987), Ninja Spirit (1988), Image Fight (1988)

H9.3   M92
- CPU: NEC V33 (18 MHz), NEC V30 (sound)   Sound: YM-2151, GA20     Video: 320x240, 1024 colors
- GAMES: Irem - Gunforce (1991), Hook (1992), R-Type Leo (1992), In The Hunt (1993)

H9.4   M107
- CPU: NEC V33 (28 MHz), NEC V30 (sound)   Sound: YM-2151, GA20     Video: 240x320, 2048 colors
- GAMES: Irem - Fire Barrel (1993), Dream Soccer '94 (1994)


H10.    Jaleco
H10.1   Mega System 1
- CPU: M68000 (12MHz), M68000 (Sound)     Sound: YM-2151, 2x MSM6295       Video: 256x224, 1024 colors
- GAMES: Jaleco - P-47 (1988), RodLand (1990), Avenging Spirit (1991), Cybattler (1993)

H10.2   Mega System 32
- CPU: V70, Z80        Sound: YMF271, YAC513      Video: 320x224, 32768 colors
- GAMES: Jaleco - Best Bout Boxing (1994), Desert War (1995)


H11.    Kaneko
H11.1   Super Nova System
- CPU: Hitachi SH-2      Sound: YMZ280B      Video: 320x240, 32768 colors
- NOTES: System use a BIOS
- GAMES: Cyvern (1998), Puzz Loop (1998)


H12.    Konami
H12.1   GX-Boards
- NOTES: Konami boards are from GX300 to GX9910. Some examples: Finalizer (GX523), Double Dribble(GX690), Flak Attack (Konami GX669), Fast Lane(GX752), Labyrinth Runner (GX771), Gangbusters(GX878) and Gradius 3 (GX945)

H12.2   GX611
- CPU: HD6309, Z80 (Sound)    Sound: YM-2203, uPD7759    Video: 256x224, 128 colors
- GAMES: Konami - Combat School (1988)

H12.3   GX777
- CPU: HD6309, Z80 (Sound)    Sound: 2x YM-3812    Video: 224x256, 128 colors
- GAMES: Konami - Battlantis (1987), The Hustler (1987)

H12.4   GX797
- CPU: HD6309, M6809 (Sound)    Sound: YM-2203, uPD7759    Video: 224x256, 48 colors
- GAMES: Konami - Blades of Steel (1987)

H12.5   GX973
- CPU: KONAMI, Z80 (Sound)    Sound: YM-2151    Video: 288x224, 1024 colors
- GAMES: Konami - Block Hole (1989)

H12.6   System GX
- CPU: M68020, M68000 (Sound)   Sound: ???   Video: ???

H12.7   System GV
- NOTES: SCSI CD-based PSX hardware
- CPU: PSX CPU                 Sound: PSX SPU + CD Audio (Sound)   Video: 640x480, 65536 colors

H13.    Metro
- CPU: M68000, uPD7810       Sound: OKIM6295+YM2413 or YMF278B+YRW801-M   Video: 360x224, 8192 colors
- GAMES: Metro - Pang Poms (1992), Poitto! (1993), Puzzli (1995), Bal Cube(1996)


H14.    Midway
H14.1   MCR-1 system
- CPU: Z80 (2.5MHz), Z80 (sound)   Sound: 2x AY-8910     Video: 480x512, 32 colors
- GAMES: Midway - Solar Fox (1981), Kick (1981)

H14.2   MCR-2 system
- CPU: Z80 (2.5MHz), Z80 (sound)     Sound: 2x AY-8910     Video: 480x512, 64 colors
- GAMES: Midway - Satan's Hollow (1981), Tron (1982), Two Tigers (1984)

H14.3   MCR-3 system
- CPU: Z80 (5 MHz), Z80 (sound)   Sound: 2x AY-8910     Video: 512x480, 128 colors
- GAMES: Midway - Tapper (1983), Timbern (1984)

H14.4   MCR-68k system
- CPU: M68000 (7.6MHz), M68000 (sound)   Sound: DAC     Video: 512x480, 128 colors
- GAMES: Midway - Zwackery (1984), Xenophobe (1987), Blasted (1988)

H14.5   Midway T-Unit System
- CPU: TMS34010 (6.25 MHz), M6809 (sound)   Sound: YM2151, DAC, MSM6295      Video: 395x254, 32768 colors
- GAMES: Midway - Mortal Kombat (1992), Judge Dredd (1993), NBA Jam (1993)

H14.6   Midway V-Unit System
- CPU: TMS32031 (50 MHz), ADSP2105 (sound)   Sound: Custom      Video: 512x400, 32768 colors
- GAMES: Midway - Cruis'n USA (1994), Cruis'n World (1996)

H14.7   Midway Wolf-Unit System
- CPU: TMS32031 (6.25 MHz), ADSP2105 (sound)   Sound: Custom      Video: 395x253, 32768 colors
- GAMES: Midway - Mortal Kombat 3 (1994), Rampage: World Tour (1997)

H14.8   Williams/Midway Y/Z-unit system
- CPU: TMS34010 (6 MHz), M6809 (sound)   Sound: YM2151, DAC, HC55516      Video: 400x256, 4096 colors
- GAMES: Narc (Williams 1988), Smash T.V. (1990), Total Carnage (1992)


H15.    Namco
H15.1   Namco System 86
- CPU: 2x M6809 (Main and Sound), HD63701     Sound: YM-2151, Namco, PCM sound ROM, Custom       Video: 288x224, 512 colors
- GAMES: Namco - Hopping Mappy (1986), Sky Kid Deluxe (1986), The Return of Ishtar (1986), Rolling Thunder (1986)

H15.2   Namco System 1
- CPU: 3x M6809 (Main, Sub and Sound), HD63701 (Input,EEPROM,DAC)     Sound: YM-2151+YM-3012, Namco, DAC       Video: 224x288, 5121 colors
- Graphics: 3 scrolling 64x64 tilemapped playfields, 1 scrolling 64x32 tilemapped playfield and 2 fixed 36x28 tilemapped playfields
- GAMES: Namco - Pac-Mania (1987), Galaga '88 (1987), Dangerous Seed (1989), Tank Force (1991)

H15.3   Namco System 2
- CPU: 2x M68000 (Mainand Sub), M6809 (Sound), HD63705 (Dips/Input), CPU5     Sound: C140, YM-2151       Video: 224x288, 8192 colors
- Graphics Board: 1 x Rotate/Zoom tile plane (256x256 tiles) and 128 Sprites (128 Sprites displayable, but 16 banks of 128 sprites)
- Text/tile plane generator: 2 x Static tile planes (36x28 tiles) and 4 x Scolling tile planes (64x64 tiles)
- NOTES: CPU5 is a Serial I/F Controller and it is not emulated by MAME yet.
- GAMES: Namco - Assault (1988), Finest Hour (1989), Rolling Thunder 2 (1990), Super World Stadium (1992)

H15.4   Namco System NA-1 / NA-2
- CPU: M68000 (8 MHz)    Sound: ???    Video: 304x224, 8192 colors
- GAMES: Namco - Knuckle Heads (1992), Emeraldia (1993)

H15.5   Namco System NB-1
- CPU: M68EC020 (12.5MHz)   Sound: ???    Video: 288x224, 8192 colors
- GAMES: Namco - Point Blank (1994), Super World Stadium '96 (1996)

H15.6   Namco System ND-1
- CPU: M68000 (12.28 MHz)    Sound: ???    Video: 224x288, 256 colors
- GAMES: Namco - Namco Classics Collection Vol.1 (1995), Namco Classics Collection Vol.2 (1996)

H15.7   Namco System 11
- CPU: PSX_CPU (16 MHz)    Sound: Namco C352    Video: 640x480, 65536 colors
- GAMES: Namco - Tekken (1994), Xevious 3D (1995), Soul Edge (1995), Star Sweep (1997)

H15.8   Namco System 12
- CPU: PSX_CPU (16 MHz)    Sound: ???    Video: 640x480, 65536 colors
- GAMES: Namco - Tekken 3 (1996), Aqua Rush (1999)

H15.9   Namco System 21
- CPU: 68EC020 (25 MHz)   Sound: ???    Video: 640x480, 32768 colors
- GAMES: Namco - Prop Cycle (1996)

H15.10  Namco System 22
- CPU: 2x M68000 (12.288 MHz), M6809, HD63705    Sound: C140, YM2151     Video: 496x480, 32768 colors
- GAMES: Namco - Solvalou (1991), Starblade (1991)

H15.11  Namco System 23
- CPU: R4650 (MIPS III) 166 MHz                  Sound: Video: 768x512, 8192 colors
- GAMES: Namco - GP500 (1999)


H16.    Nintendo
H16.1   Playchoice 10
- CPU: Z80, N2A03           Sound: Nintendo, DAC         Video: 256x480, 320 colors
- GAMES: Nintendo PlayChoice-10 - Mario Bros. (1983), Ninja Gaiden (1989), Solar Jetman (1990)

H16.2   Super System
- CPU: G65C816 (2.68 MHz)   Sound: SPC700, Custom        Video: 256x240, 32768 colors
- GAMES: Nintendo Super System cart - F-Zero, Super Tennis, Super Mario World, Lethal Weapon (1993)


H17.    Sega
H17.1   G-80 Raster
- CPU: Z80, I8035 or N7751 (Sound)     Sound: Mixture of TMS36XX, DAC, Custom, Speech Synthesis, discrete sound circuitry   Video: 224x256, 65 colors or 129 colors
- NOTES: The board uses security chips (315-0064, 315-0070, 315-0076, 315-0082). And a 315-0062  for Astro Blaster and a 315-0063 for Space Odyssey. Sindbad Mystery does *not* use the standard G-80 security chip; rather, it uses the Sega System 1 encryption. Also the Sega raster games don't have a color PROM. Instead, it has a color RAM that can be filled with bytes of the form BBGGGRRR.
- GAMES: Sega - Astro Blaster (1981), 005 (1981), Space Odyssey (1981), Monster Bash (1982), Pig Newton (1983), and Sindbad Mystery (1983)

H17.2   G-80 Vector
- CPU: Z80     Sound: Samples (EPROMs), Custom        Video: Vector Screen, 256 colors
- NOTES: The Sega vector games don't have a color PROM, it uses RGB values for the vector guns.
- GAMES: Sega: Space Fury (1981), Zektor (1982), Tac/Scan (1982), Star Trek (1982)   Gremlin: Eliminator (1981)

H17.3   System 1/2
- CPU: 2x Z80 (4MHz)   Sound: 2x SN76496     Video: 224x240 or 224x256, 1536 colors
- GAMES: Sega - Up'n Down (1983), Flicky (1984), Spatter (1984), Pitfall II (1985), Choplifter (1985), Wonder Boy (1986)

H17.4   SG-1000
- GAMES: Sega - Champion Boxing (1984), Champion Pro Wrestling (1985)

H17.5   System 16A
- CPU: M68000 (10 MHz), Z80 (Sound)   Sound: YM-2151, NEC uPD7751 ADPCM decoder, DAC Sound   Video: 320x224, 4096 colors
- GAMES: Sega - Alex Kidd (1986), Fantasy Zone (1986), Quartet II (1986)

H17.6   System 16B
- CPU: M68000 (10 MHz), Z80 (Sound)   Sound: YM-2151, NEC uPD7759 ADPCM decoder    Video: 320x224, 4096 colors
- GAMES: Sega - Alien Syndrome (1987), Shinobi (1987), Altered Beast (1988), Riot City (1991)

H17.7   System 18
- CPU: M68000 (10 MHz), Z80 (Sound)   Sound: 2x YM-3438, Sega RF5C68 PCM Sound   Video: 320x224, 4096 colors
- GAMES: Sega - Shadow Dancer (1989), Alien Storm (1990)

H17.8   System 24
- CPU: 2x M68000      Sound: YM2151 and Sega Custom PCM (YM3012 DAC)
- NOTES: The System 24 is the first Sega system that needs a medium resolution arcade monitor to work. It's also the first Sega system that read the program from a floppy disk (80 tracks (0-79)). There are also versions of some games using a rom board instead of the disk (Bonanza Bros at least).
- GAMES: Sega - Hot Rod (1988), Scramble Spirits (1998), Bonanza Bros. (1990), Rough Racer (1990)

H17.9   System 32
- CPU: NEC V60 (1.34 MHz), Z80 (Sound)   Sound: 2x YM3438, RF5C68    Video: 320x224, 16384 colors
- GAMES: Sega - Spiderman (1991), Holosseum (1992), Sonic (1992), Alien 3 (1993)

H17.10  System C
- CPU: M68000 (10 MHz)                   Sound: YM-2612, SN76496     Video: 320x224, 2048 colors
- GAMES: Sega - Columns (1990), Columns II (1990)

H17.11  System C2
- CPU: M68000 (10 MHz), Z80 (Sound)   Sound: YM-2612, SN76496, uPD7759    Video: 320x224, 2048 colors
- NOTES: Sega's C2 was used between 1989 and 1994, the hardware being very similar to that used by the Sega MegaDrive/Genesis Home Console Sega produced around the same time.
- GAMES: Sega - Borench (1990), Tant-R (1992), Poto Poto (1994)

H17.12  MegaPlay
- CPU: M68000 (7.67 MHz), Z80 (Sound)   Sound: YM2612, SN76496    Video: 320x224, 2048 colors
- NOTES: A Sega Genesis-Mega Drive based arcade system.
- GAMES: Sega cartridge - Sonic The Hedgehog

H17.13  Mega Tech
- CPU: M68000 (7.67 MHz), Z80 (Sound)   Sound: YM2612, SN76496    Video: 320x224, 2048 colors
- NOTES: A time-based Sega Genesis-Mega Drive / Master System based arcade system.
- GAMES: Sega cartridge - Super Monaco GP, World Championship Soccer

H17.14  Multi-32
- CPU: NEC V60, Z80   Sound: YM3438, Sega Custom PCM
- GAMES: Sega - Hard Dunk (1992), Title Fight (1992), Stadium Cross (1992), Out Runners (1993)

H17.15  Model 1
- CPU: NEC V60 (uPD-70616), Co-Processors: Fujitsu TGP (x4), M68000 (10MHz/Sound)    Sound: Sega PCM    Video Resolution 496x384, 65536 colors
- Rendering specs: 180,000 polygons/s, 540,000 vectors/s, 1,200,000 pixels/s. Video capabilities: Flat Shading, Diffuse Reflection, Specular Reflection, 2 Layers of Background Scrolling, Alpha Channel
- GAMES: Sega - Wing Wars (1992), Virtua Racing (1993), Virtua Fighter (1993)


H17.16  Model 2
- CPU   : i960KB (25MHz) + 68000 (10MHz) + MB86233 (16MHz)
  SOUND : YM3438 + 2x Sega/Yamaha 315-5560
  VIDEO : 496x384 (60 Hz, palettesize 8192)
- SOURCE: drivers\model2.cpp
- NOTES: The Model 2 system did a two version (2A and 2B).
- GAMES : Daytona USA (Sega 1993)


H17.17  Model 3
- CPU   : PowerPC 603e (100MHz) + 68000 (12MHz)
  SOUND : 2x SCSP
  VIDEO : 496x384 (60 Hz, palettesize 32768)
- SOURCE: drivers\model3.cpp
- GAMES : Scud Race (Sega 1996)


H17.18  ST-V (Sega Titan Video)
- CPU   : 2x SH-2 (28636400 Hz)
  SOUND : SCSP
  VIDEO : 704x512 (60 Hz, palettesize 6144)
- SOURCE: drivers\saturn.cpp
- GAMES : Baku Baku Animal (Sega 1995)
- NOTES: Sega ST-V (Sega Titan Video)



H18.    Seibu
H18.1   SPI
- CPU: Intel 386 DX 25MHz / 33MHz    Sound: Z80 8MHz, YMF271F      Video: 320x240, 6144 colors
- NOTES: The Seibu SP system consists of a main board and a plug-in cartridge containing the game software. The games on SPI hardware can be swapped by changing the top cartridge and then moving jumper JP072 to the alternative position. This re-flashes some ROMs for a few minutes (accompanied by a techno music track). Afterwards, a message tells you to put the jumper back to the original position and reboot the PCB. The new game then plays. There were a few revisions of this hardware, though most are the same with only minor changes such as different IC revisions etc.


H19.    Seta
H19.1   SSV
- CPU: NEC V60    Sound: Ensoniq ES5506     Video: 336x240, 32768 colors
- NOTES: Seta, Sammy, Visco = SSV
- GAMES: Survival Arts (1993), Drift Out '94 (1994), Monster Slider (1997), Change Air Blade (1999)


H20.    SNK
H20.1   SNK
- CPU: 3x Z80      Sound: 2xYM3526 or YM3526 + Y8950      Video: 288x216, 1024 colors
- GAMES: SNK - TNK III (1985), Ikari Warriors (1986), Bermuda Triangle (1987), Chopper I (1988)

H20.2   SNK68
- CPU: M68000, Z80, Sound: YM3812, uPD7759      Video: 256x224, 2048 colors
- GAMES: SNK - P.O.W. (1988), Street Smart (1989), Ikari III (1989)


H21.    Sony
H21.1   ZN1/ZN2
- CPU: PSXCPU, Z80   Sound: Sony Playstation
- GAMES: Capcom - Battle Arena Toshinden 2 (1995), Tetris The Grand Master (1998), Strider Hiryu 2 (1999)


H22.    Taito
H22.1   Taito Air System
- CPU: M68000, Z80, TMS320C25      Sound: YM-2610       Video: 512x400, 8192 colors
- NOTES: TMS320C25 needs to be emulated.
- GAMES: Taito - Top Landing (1988), Air Inferno (1990)

H22.2   Taito B System
- CPU: M68000 (12MHz), Z80 (Sound)     Sound: YM-2610       Video: 320x224, 4096 colors
- Graphics: It supports 4 separate layers of graphics - one 64x64 tiled scrolling background plane of 8x8 tiles, a similar foreground plane, a sprite plane capable of sprite zooming and a text plane which may be 'pageable.
- GAMES: Taito - Nastar (1988), Rambo 3 (1989), Ashura Blaster (1990), Space Invaders DX (1994)

H22.3   Taito F2 System
- CPU: M68000 (12MHz), Z80 (Sound)     Sound: YM-2610       Video: 320x224, 4096 colors
- Graphics: The main board supports three 64x64 tiled scrolling background planes of 8x8 tiles, and a powerful sprite engine capable of handling all the video chores by itself (used in e.g. Super Space Invaders). The front tilemap has characters which are generated in RAM for maximum versatility (fading effects etc.). The expansion board can have additional gfx chip e.g. for a zooming/rotating tilemap, or additional tilemap planes.
- GAMES: Taito - Final Blow (1988), Camel Try (1989), Liquid Kids (1990), Metal Black (1991)

H22.4   Taito F3 System
- CPU: M68EC020 (16 MHz), M68000 (Sound)     Sound: ES5505       Video: 320x232, 8192 colors
- Custom chips: TC0630 FDP - Playfield generator?, TC0640 FI0 - I/O & watchdog?, TC0650 FDA - Priority mixer?, TC0660 FCM - Sprites?
- GAMES: Taito - Ring Rage (1992), Gunlock (1993), Elevator Action Returns (1994), Bubble Memories (1995), Landmaker (1998)

H22.5   Taito H System
- CPU: M68000 (12MHz), Z80 (Sound)     Sound: YM-2610      Video: 320x240
- GAMES: Taito - Syvalion (1988), Recordbreaker (1988), Dynamite League (1990)

H22.6   Taito L System
- CPU: Z80 (6 MHz)                      Sound: YM-2203       Video: 320x224, 256 colors
- NOTES: The Taito L-System boards are Monoprocessor games (1 main Z80, no sound Z80).
- GAMES: Taito - Puzznic (1989), Palamedes (1990), Play Girls (1992), Cachat (1993)

H22.7   Taito SJ System
- CPU: Z80 (4 MHz), Z80 (Sound)         Sound: 4x AY-8910, DAC    Video: 256x224, 64 colors
- GAMES: Taito - Space Seeker (1981), Jungle King (1982), Elevator Action (1983 + M68705 Protection)

H22.8   Taito X System
- CPU: M68000 (8 MHz), Z80 (Sound)      Sound: YM-2610        Video: 384x240, 2048 colors
- GAMES: Taito - Superman (1988), Twin Hawk (1989), Balloon Brothers (1992)

H22.9   Taito Z System
- CPU: M68000 (12/16MHz), Z80 (Sound)   Sound: YM-2610        Video: 320x240
- NOTES: The Taito Z system has a number of similarities with the Taito F2 system, and uses some of the same custom Taito components.
- GAMES: Taito - Chase HQ (1988), Battle Shark (1989), Aqua Jack (1990)

H22.A   Taito GNET System
- NOTES: The Taito GNET System uses a Sony ZN-2 Motherboard (Main CPU/GPU/SPU, RAM, BIOS, EEPROM & peripheral interfaces), Taito FC PCB (Sound hardware & FLASHROMs for storage of PCMCIA cart contents) and Taito CD PCB (PCMCIA cart interface)
- GAMES: Go By RC! (Taito 1999), Psyvair Medium Unit (Success 2000), Souten-Ryu (Taito 2000), Nightraid (Takumi 2001)


H23.    Tecmo
H23.1   Tecmo 68k system
H23.2   Tecmo System


H24.    Board Serial Numbers / Labels


        Board                                   Manufacturer            Games                                         Notes

        60138-0083                              SunA                    Hardhead
        800-0058, 800-0107, 800-3157            Sega                    005, Carnival, Elim2
        833-6599, 833-6072, 833-10545           Sega                    Angelkds, Bodyslam, Jpark, Spidey
        834-0131, 834-5120, 834-5386            Sega                    Buckrog, Scobra, Tapper
        837-11542, 838-11587, 837-11861         ST-V system, Model 3    Bakubaku, Colmns97, Harley
        838-12885                               Sega                    RyuKyu
        84P0100B, 84P0501A                      Nichibutsu              Tubep, Rjammer
        86117                                   CAPCOM                  1943
        8661961000 (8661971000)                 Namco                   Ehrgeiz, Fgtlayer, Soulclbr
        8661961101 (8661971101)                 Namco                   Aquarrush, Mrdrillr
        97695-1                                 CAPCOM ZN-2             Sfex2, Sfexp, Strider2, Techromn
        A007203, A009787, A036434               Atari                   Boxer, SkyDiver, Warloards
        A74-PWB-A-(A), A77-PWB-A-(A)            Home Data               Mhgaiden, Hourouki
        AA017756, AA017757, AA017xxx            Taito                   Ballbomb, Galxwars, Invatpt2
        AM007B1094                              Art & Magic             Stonebal
        AT-9301033D, AT-C03                     Atlus                   Ddonpach, Naname
        BP922, BP923, BP924                     Banpresto               Dbz, Umanclub, Neobattl
        C2 Board                                Sega System C/C2        Puyopuyo, Tantr
        COH-100, COH-110, COH-700               Namco System11/12       Starswep, Aquarush
        COH-1002M, COH-3002C                    ZN-1/ZN-2 BIOS          Glpracr2
        COMAD-01, COMAD-0953                    Comad                   Bballs, Fantsy95
        CP-SYTEM II  # 93646B-7                 CAPSOM System 2         Mmatrix
        CV070005                                Taito                   Ballbomb, Galxwars, Invatpt2, Ozmawars         Audio/IO board
        D0208298L1, D039198L-0                  Dyna Electronic         Dondenmj, Hnayayoi
        D0706088L1-0, D0908288L1-0, D1708228L1  Dynax                   Mjdiplb, Tontonb
        D5512068L1-2                            Dynax                   Mjangels, Quiztvqq
        DE-0030, DE-0298, DE-0346               Data East               Alphaho, Mutantf, Thedeep
        DEC-22VO, DEC-22V0                      Data East               CharlieNinja, DoubleWings, LadyKiller2
        DSP-3, DSP-5, DSP-9                     Data East               Disco, Lnc, Cburnrub
        E90, E92                                Seta                    11beat, Mtetrisc
        ES-9206, ES-9309B-B                     Excellent Systems       Aquarium, Vmetal
        GDP-01, GDP-02                          Amenip                  Nmouse, Woodpecker, Piranha
        GN672, GN678, GN715                     Konami                  GTIClub, Sscope2
        GP-11, GP-13, GP-15                     Namco System11/12       Starswep, Daneyes, MrDrillr
        GX973                                   Konami                  Blockhl
        ISP-1244-1A                             Data Amusements         Sucasino
        J1100004A                               Taito                   40love, FieldDay, VictoriousNine
        K1100010A, K1100388A, K1100470A         Taito                   Bonzeadv, Cadash, Crimec
        KA302C                                  Psikyo                  Gunbird, Btlkroad
        ZO1DK-002                               Kaneko                  Brapboys, Shogwarr
        KRB-14, KRB-17                          SunA                    Hardhead, Starfigh
        KT-4109-2                               Konami                  Tazmania, Losttomb
        L-1200-B, L1200                         Konami cpu/sound board  Superbon, Miminkey, Tazmania
        LINDA2, LINDA25                         Wintechno, Face         Mcatadv, Nost
        M4300056B, M4300140A                    Taito                   Bigevglf, Topspeed, Ninjaw
        M6100070A, M6100326A, M6100109A         Taito, SNK              Twineagl, Tsamurai, Tnk3
        M62-A-B, M62-E-A                        IREM M62 Hardware       Battroad, Ldrun
        M92-A-B, M92-B-G                        IREM M92 Hardware       Gunforc2, Majtitl2
        MACS-SUB, MACS2-SUB                     Multi Amenity Cassette System     Cultname, Yujan
        MB-94166 EB91022-20101, MB-9314         Jaleco Mega System 32   Kirarast, Gametngk, Tetrisp
        MJ-8956                                 Mahjong games           47pie2, Kakumei2, Suchipi
        MPG DW-00011C, MPG 010-00018-002        MicroProse              Botss, F15se
        MTR5260-A                               Metro/Banpresto         Daitorid, Poitto, Pururun, Puzzli
        NB6853, NB67634                         Nichibutsu              Aparel, Mjuraden
        NEO-MVH MV1                             Neo-Geo                 Nightmare in the Dark
        P0-055B, P0-057A, P0-051A, PO055D       Seta, Visco, Taito      Wits, Twinhawk, Blockcar, Thunderl
        PB91008, BP954KA                        Banpresto               Sdgndmps, Gundhara
        PCB-100102                              Acclaim                 Nbajamex
        PI-500802, P1-500810, P1-500861         Nintendo                Helifire, Spacefev, Spacelnc
        PO-063A, PO-102A, PO-114A               Banpresto, Seta, Sammy  MadShark, Rezon, Zingzip
        PS4                                     Psikyo                  Hotgmck, Hgkairak, Hotdebut, Loderndf
        PWB 351535A, PWB 352011A, PWB454204A    Konami                  Crimfght, Mainevt, Punkshot, Thunderx, Winspike
        RA9503, RA9701, RA-MA7893-01            Eighting/Raizing        Battleg, Beastrzr
        RB-91105A EB911009-20045-1              Jaleco                  Bigstrik, Cybattlr
        SEI-8611M, SEI-8712A                    Seibu                   PanicRoad, Deadang
        SH403, SH404                            Psikyo                  S1945, Tengai
        SXX2C ROM SUB                           SPI system              Ejanhs, Senkyu
        TA-0017-1, A-0021, TA-0023, TA-0031     Technos                 Maniach, Chinagat, Ddragon, Wwfwfest
        TKG4                                    DK/Jr Conversion board  Drakton, Spcfrcii
        TP-020, TP-023, TP-027                  Toaplan                 Grind Stormer, Batsugun
        TPS                                     Tecmo                   Glpracr, Glpracr2, Todemo
        UPL-83001, UPL-90058, UPL-90064         UPL                     Mouser, Mustang, Vandyke
        VG330-B, VG340-A                        Make Software / Elf     Mahjong Doukyuhsei
        VG420                                   Metro                   Skyalert, Lastfort
        X73-PWB-A(C), X77-PWB-A-(A)             Home Data               Mjkojink, Mjhokite
        YS-2002, YS-2113                        Yunsung                 Pclubys, Tgtball
        ZN-2                                    Sony (Playstation)      Sfex2, Sfexp
        ZPU                                     Stern                   Berzerk, Frenzym, Mazerbla, Cliffhanger


H25.    Hardware WIP

H25.1   Model 2

- 29th January   2009: Model 2 Emulator v0.9 Final: Fixed TGP emulation bugs and added missing opcodes. Virtua Fighter 2 and Virtua Cop 2 are now playable. There is still a bug with VF2 hair/body collisions, probably another TGP bug, but it's quite hard to find... * Fixed I960 bug that caused daytona invisible walls/holes in the road. * Fixed timer bug that caused missing hair in Fighting vipers, tails in sonic and slow cars in Sega Rally (although they still don't work properly). * Added support for "return to neutral". Enable it with HoldGears=1 option in emulator.ini. This setting will cause the emu to return to neutral when no gear button is pressed. * Redone rasterizer color decoding and texture mapping. Now it works the same way the real hardware does, performing all the same table lookups and calculations, so color should be accurate now. The color decoding is now done at pixel shader level so you'll need a PS 2.0 capable video card in order to run the emulator now. * Fixed white borders in some transparent textures. * Redone texture caching code. Improved dirty texture detection. Fixes wrong textures in some games when a new texture overlaps partially with an existing one. * Changed ManxTT sound roms to the Twin ones. The previous romset was using the Deluxe ones that have 2 sound boards. Fixes the "japanese speech when braking" bug :).Set the machine to Twin. * Added 2 mice support for shooting games. Enable it with RawInput=1 in emulator.ini. Read some other options there to tell the emu how to map a mouse to a player. When using RawInput the mouse will be locked to the emulator window. In order to switch to another window, either press Alt to bring the menu and unlock the mouse or use Alt-Tab to switch to another application. * Fixed Alt key not activating the window menu. * Fixed MB86235 bug when handling denormalized numbers that caused top skater and overrev lock the emu sometimes. * Fixed corrupt textures sometimes when loading a savestate. * Fixed frameskipping bug that caused some data not being updated in the TGP memory when frameskipping (daytona windows not updating windows after entering/leaving the tunnel). * Added an option to hide the crosshair in shooting games (DrawCross=0 in emulator.ini). * Fixed Daytona to the maxx rom loading that caused wrong and missing graphics. * Improved FM emulation support to the SCSP for some HOTD tunes requiring it. * Fixed various bugs in the new MultiPCM sound emulation, causing some wrong loops and sounds. * Fixed meshed transparencies size. Now they will scale to the selected resolution. * Fixed specular highlights calculation. * Added Daytona USA '93 edition and Daytona USA: GTX 2004. * Added Rail Chase 2. * Added Virtua Cop 2. * Added Virtua Fighter 2, Rev A, Rev B and 2.1. * Added Sega Water Ski. The current sound rom dump seems to be bad so the game will run without sound. This game will start in Japan region mode. To change the region, enter Test menu (F2) and press the sequence up,up,down,down,service (f1),test (f2). * Added Indianapolis 500 Rev A. * Changed romsets to match MAME as much as possible.
-  6th December  2008: Model 2 Emulator v0.9 WIP - Peabo: The bug with the strange textures near the edge of the road on the expert course of Daytona is fixed. I did a complete redump of the Daytona rom, and it turned out to be identical to the current dump, byte for byte. So it was not due to a bad dump after all, and ElSemi fixed it very quickly. This is good news for anyone worried about needing yet another version of the Daytona rom.
- 28th November  2008: Model 2 Emulator v0.9 WIP - Peabo: Daytona needs to be redumped for 0.9 as it turns out that the ROM everyone has been using all this time is actually a bad dump and has some corrupted textures on the Expert track. If you look at the apex as you exit the difficult building-turn at the start of the track, it becomes a squished version of the road texture. This also happens intermittently around the track on other turns. I checked it compared to the boards and it's definitely a result of a bad dump.
-  9th November  2008: Model 2 Emulator v0.9 WIP - Lucisac: The Model 2 Emulator BETA4 brings significant improvements over BETA3 bringing emulation of Model 2 hardware to the next level. Changes include a set of new features, new games and revisions, graphical improvements, audio improvements and many bug fixes both in the major and minor categories. New Features: Dual mouse support for shooting games (via new .ini entry "UseRawInput"). The crosshair can now be set on and off (via new .ini entry "DrawCursor"). New Games: Daytona USA GTX2004, Indianapolis 500 Deluxe Rev A and Top Skater (USA). Improvements: The colour tables have been correctly emulated resulting in accurate colour reproduction for all games. Shooting the corners of the screen in gun games whilst in fullscreen mode no longer alters the emulator window or exits by use of the new .ini entry "UseRawInput". When the game fades in or out to and from white, there is no longer a significant performance hit, and the appearance of the transition is now accurate. When selecting the course in Wave Runner, the clouds are no longer red. In Zero Gunner, the audio effect of the boss chopper no longer prematurely sounds during the game. There is no longer a performance drop during certain scenes at the final boss stage in Virtual On Cybertroopers. The BGM volume no longer drops dramatically (almost mute) during a game of Zero Gunner. All analogue controls now function in Wave Runner. The ambience effects (wind/lightening/water etc) now sound during the demo and gameplay in Virtua Fighter 2. The audio in Virtua Cop now supports full FM Synth mode resulting in accurate sound reproduction. In the 2nd lap of the long course in Super GT 24h, there is no longer texture corruption. When setting the country to export in Sky Target with Advertise sound ON, pressing F3 no longer causes the BGM to not play on the first cycle. During the initial entry screen in Sega Touring Car Championship, the BGM now loops instead of terminating prematurely. The sky in some courses in Over Rev are no longer red and display the correct colour. Indy 500 no longer experiences a pause during the "ladies and gentlemen start your engines" screen. There is no longer a performance hit in Fighting Vipers in the Jane stage. There are no longer green artefacts in the facial features in Dead or Alive and Virtua Fighter 2. Daytona USA to the Maxx has now been restored and loads up. White pixels that plagued Daytona USA car rear window bars and race lights have been fixed. There is no longer a performance hit when racing up the hill in Daytona USA advanced course. The music no longer ends abruptly when completing Behind Enemy Lines. The semi-dotted line no longer appears in many games in backdrops like Sega Rally, Dead or Alive, Behind Enemy Lines, Super GT24h, Over Rev and perhaps others. After losing to the final boss in Virtual On Cybertroopers, the explosion no longer disables the BGM.
- 20th October   2008: Model 2 Emulator v0.9 WIP - ElSemi: The way the LOD selection for mipmaps that the model2 hardware performs is still not understood, and it's quite complex, as it requires several conversion tables and parameters that are stored in the display list, polygon header and texture header. I have some clues on how it might work, but it's still not correct and not working yet. If you set AutoMip=1, then the emu tells direct3D to generate all the mipmaps from the highest resolution one. The rest of mipmaps stored in the texture sheets aren't used. The LOD selection is left to D3D internal method, and it causes to switch to lower levels too near from the view point, causing very blurry textures. If you set Trilinear=1, the emu uploads the mipmaps from the texture sheets to D3D textures. There is no (known) indication in the texture header on how many mipmaps the texture sheet contains, so the emu always loads the maximum number (5 LODs). The LOD selection is left to D3D internal method too, so when it chooses to use a LOD that the game didn't upload a mipmap for, it causes black or wrong textures to appear, depending on whether that given texture area is just blank, of it was used to store another texture. In model 2, the part I know works as follows: The display list can upload a table of coefficients to scale the distance (dot product of Vertex0 with normal) of a polygon (let's call this d), this table has 32 different coeffs, let's call them C. It also uploads a table to computes the fractional part of the base 2 logarithm of a given value (it's used for d). There is a command to select a LOD offset. Let's call this L. In the polygon header, it can select one of these 32 scaling coeffs (C) to apply to the distance (d). When sending a poly to the rasterizer, the geometrizer multiplies C by d and by L and sends it along with the transformed vertices and the luminance and front/rear face bit to the rasterizer port. Then little is known on how this value inside the rasterizer selects the LOD level to use, except that it uses the base 2 logarithm of this value. Once I know how to get this value (from 0 to 4) I could sample it from a given lod from the pixel shader (by using tex2dlod, but it will require Pixel Shader 3). Sampling from the given lod, and the next one, and interpolating with the fractional part of the LOD will get a trilinear filtering. Update: I forgot to write that what daytona does in the course selection screen is changing the lod offset (L value) so it forces the hw to select the lower resolution lods as if the polys were very far, so the rasterizer uses the low detail textures, then slowly decreases it so they "come closer" (virtually, as they are at the same view distance), making the HW use the higher resolution textures as they approach.
- 13th October   2008: Model 2 Emulator v0.9 WIP - Peabo: Original model 2 games now display the correct brightness/contrast settings for their cabinet modes. The clouds in Virtua Cop that weren't displaying correctly with the old saturation shader (now completely removed) are working fine now. Another update: Masked texturemaps will no longer have little white pixes around the edges.
-  8th October   2008: Model 2 Emulator v0.9 WIP - Peabo: Virtua Fighter 2 with improved colours: http://www.youtube.com/watch?v=DoVOIPYnYsg&fmt=18. Another game that's looking much better: Virtual On. Viper 2's paint is no longer fading. And a few more: fv1 and sonic1.
-  5th October   2008: Model 2 Emulator v0.9 WIP - Wesker: Rewritten part of video emulation: now more colors show correctly. Added "Indianapolis 500 (Rev A)". Lucisac: One of the most important advancements in 0.9 is the correctly emulated color mixer (2nd last update in the list above) that has just occurred recently. Personally I am really excited about this improvement. Although you will need a Pixel Shader 2.0 card or above to take advantage of the benefits, they include resolution of many clipping issues, accurate color reproduction in all games (except 2 being worked on), which means no more need for the saturation shader (but thanks to the guy who cooked it up) and more. This change also brings a potential performance improvement that may be quite noticeable. ElSemi has rewritten the majority of the rasterizer and texture cache so textures are now cached in the original format (unpacked), meaning less memory usage and a reduction in texture updating that will fix many performance problems like the fade ins and outs of white. There is still work being done to optimize the change in code so stay tuned.
- 14th September 2008: Model 2 Emulator v0.9 WIP - Peabo: I've sent a new 2A board to Elsemi so I suppose he could capture it and check to make sure. No new hair updates yet, no. And subsequently nothing on GTX either as ElSemi is still working on a solution to dump the strange board. He will most certainly figure it out though! The problem is (and I'm paraphrasing here) that there are 2 banks to dump, but both he and I have only been able to dump the first bank. There is an instruction that Daytona GTX would give during the game to tell the board when to switch between banks for whatever reason. The problem is manually sending the board that instruction so that it's possible to read the 2nd bank and make the complete rom. And the emulator will also need a small code adjustment to make this work, although that apparently will be easy.
- 10th September 2008: Model 2 Emulator v0.9 WIP - Lucisac: Thanks to SuperRayman who reported the issue with missing instruments in Virtua Cop 1, they have now been emulated.
-  8th September 2008: Model 2 Emulator v0.9 WIP - Peabo: The Daytona GTX board has arrived and a bit of bad news: The 2A board really is dead. Must have been damaged in transit. I will try and source another one though.
-  6th September 2008: Model 2 Emulator v0.9 WIP - Lucisac: This morning ElSemi has been improving the communication between the main CPU & sound CPU. What was occurring before was the sound stack became full and the last sounds were missed and not executed. One scenario was in Sega Rally Championship, where if you accelerated and stopped too quickly during the countdown, the word "GO" would not sound, and sometimes the BGM would stop. These are ElSemi's words summarised. Peabo: ElSemi is busy working on some other extremely cool things which are equally as amazing as m2emulator, so progress at the moment is slow. But he is very close to being finished with them. It's also important to remember that he had a well deserved holiday recently. The GTX board will arrive next week as well as a proper switched mode PSU so that he can power up the 2A board finally. This does not necessarily mean that any new developments will be made, but it will certainly make things easier as he had to run the 2A game DSP tables on the Daytona board originally. It also means he can see what VF2 is supposed to look like since the game will hopefully boot this time.
- 30th August    2008: Model 2 Emulator v0.9 WIP - Peabo: I suppose people are desperate for new news so here is a small bit: Daytona GTX still needs to be properly dumped. We tried all sorts of stuff to dump the extra board that came with it but to no avail. It has 2 ICs on it as well as some other strange stuff to make them work in conjunction. We can get it to read one bank, but are unable to tell the board to access the 2nd one using the dumping software. ElSemi is building his own interface to read & dump both ICs properly. I will be sending him the GTX stuff when he's completed it.
- 29th July      2008: Model 2 Emulator v0.9 WIP - Peabo: The ambient sounds in VF2 are now working.
- 28th July      2008: Model 2 Emulator v0.9 WIP - Lucisac: After extensive testing of the Model 2 Emulator 0.9 BETA3, I have been able to mark 17 bugs as resolved (BETA2 to BETA3). This is great news, also on top of that some new features are due to be on it's way, once tested as working, you will be the first to know! Hair and props in Fighting Vipers now move (collision problems still under analysis). The audio in House Of The Dead now supports full FM Synth mode. The smoke from the tyres in Over Rev is now correctly aligned. The board check in Rail Chase 2 now functions. The speed of the AI cars in Sega Rally Championship is now correct. The music in Virtua Cop 2 no longer stops when shooting down the Pier St sign. The music in Virtua Cop 2 is no longer delayed during the demo. The placement of the heads in Virtua Fighter 2 is now adjusted correctly. The framerate of Virtua Cop 2 is now correct. The framerate of Virtua Fighter 2 is now correct. 7 games suffering from the 'invalid opcode' error were fixed (hitting F3 to reset a game).
- 27th July      2008: Model 2 Emulator v0.9 WIP - Peabo: ElSemi says: Hair shows now, and gravity works (sort of). but object/body collisions don't work and the hair crosses the body. Update: Hair is working in both VF2 & FV. Sega Rally cars are now running at the correct speed.
- 25th July      2008: Model 2 Emulator v0.9 WIP - Peabo: All games will look bad compared to the original arcade. The monitors they used were specifically designed to ONLY handle the model 2 resolution of medium-res 496x384 so the resulting image would be very smooth.All model 2 games will look blocky since the architecture does not support gourad shading. If you're alluding to the difference in brightness, this cannot have anything to do with the colours since you'll observe the exact same behaviors with colormode 1. This is a geometrizer (lighting) problem. The 'color mixer' even if emulated correctly will not change the way Daytona's colours look as of 0.9. As I have said many times, the colours are correct, there is no ambiguity, they are definitely correct. I have the original arcade which I can look at to make comparison. Any differences you see are due to different lighting. This is apparent from looking at 0.8a where the same problems with darker windscreens can be observed. If it was a colour issue then colormode1 & 2 would exhibit different characteristics in this area. All the games have different methods for handling the colours. That is why VF2, FV and Sonic Fighters all have the same problems whereas Sega Rally & Indy 500 both look great. There is no magic fix for the colour mixer to make everything right. Daytona is completely different from Top Skater. If those problems were related, we'd be seeing pink signs in Daytona too. No approaches have been abandoned. If there is a way to emulate everything perfectly without the use of a 3rd part shader, then that would be great. The thing is that Daytona looks right now so it's been left so that other things can be worked on. That is why we now have VF2 and FV. Once all the annoying bugs have been ironed out, the drive board roms are correctly emulated and a few other little things are fixed, maybe work can be done on perfect colour emulation for all games. Maybe in 1.0 for example. Please try not to worry. I'm not saying that the way Daytona is emulated is the perfect approach, but the end result is the same, and for the moment at least, it is fine. Force feedback is fine the way it is, but ElSemi had to approximate a lot since he didn't know that FFB was handled by a different board. I personally don't have any issues with the vibrating. I'm pretty sure your wheel is meant to vibrate when you start a game on sega rally to simulate the engine effect, but I could be wrong. But regardless, he should now be able to do it more accurately. Previously it was being handled for every game using the same type of signals that Daytona outputs, but in reality each game's drive board has a slightly different rom, so each game will send different signals to the motor. You probably won't even notice the difference, but it's one step closer to perfect emulation.
- 24th July      2008: Model 2 Emulator v0.9 WIP - Peabo: ElSemi is working on getting the hair and other elements working in VF2 and FV.
- 23rd July      2008: Model 2 Emulator v0.9 WIP - Peabo: The disappearing player models bug in VF2 is definitely fixed now, so the game is playable. The characters just have no hair sometimes.
- 22nd July      2008: Model 2 Emulator v0.9 WIP - Peabo: ElSemi narrowed the hairs gravity problem down to an i960 bug since Fighting Vipers also has no hair though it uses a totally different DSP program. It's also the i960 that's causing the slow opponents in Sega Rally.
- 21st July      2008: Model 2 Emulator v0.9 WIP - Peabo: Guru may have a bit of trouble redumping VCop 2 because he doesn't have the boards handy and would have to go to where the cabinet is located or get the cabinet sent to him to do it. I will try to borrow the EPROMs that were bad and redump them myself in the meantime, and also try and redump that bad Manx TT sound rom (I'm sure you're tired of hearing a Japanese lady every time you skid). Update: Guru was able to find some VCop 2 roms, so it's been redumped. Hopefully it's a good dump!
- 20th July      2008: Model 2 Emulator v0.9 WIP - Peabo: Vcop 2 is a bad dump apparently! Guru will need to redump it. Vcop works fine, but the rom is bad so some polygons are missing. VF2 has upside-down characters at the moment, but that's being worked on. Update: Fixed upside down fighters. Update2: VF2 still has colour problems very similar to what Daytona used to. The same goes for Fighting Vipers, Sonic Fighters (same engine) and a few others.
- 19th July      2008: Model 2 Emulator v0.9 WIP - Peabo: VF2 isn't working yet. The 2A board still hasn't been powered up properly due to issues with the PSU. But for now ElSemi is running some of the 2A chips on the Daytona rom board. He has already seen differences in the DSP output. Progress is being made.
- 18th July      2008: Model 2 Emulator v0.9 WIP - Peabo: I've ordered Daytona GTX which will be dumped and added to 0.9.
- 13th July      2008: Model 2 Emulator v0.9 WIP - Peabo: Fixed Daytona colours.
- 12th July      2008: Model 2 Emulator v0.9 WIP - Peabo: The version of VF2 I sent is apparently the original version (revision A). The current dumped ones were rev B and 2.1. Also the dump of Daytona Deluxe '93 was successful too. Update: ElSemi is having a few problems getting the VF2 board to boot, but I'm sure it's because he's using a regular PC power supply. Those things need a decent amount of voltage to get them running. I know I can make Daytona crash if I turn the voltage down on my PSU. There are no error LEDs on the board when it turns on so hopefully it's fine.
-  1st July      2008: Model 2 Emulator v0.9 WIP - Peabo: The colours are almost perfect now. There are a few problems with the dark greens, blues & grays (the grass, tires and sky reflection are the most prominent examples of this), but they can certainly be fixed as they were fine when ElSemi originally tired this method to fix the colours in early versions of 0.5. It must have been something else that was changed between 0.5 and 0.8 that makes them so dark in the new screenshots. Unfortunately ElSemi forgot exactly what he changed! Luckily I can run the boards to look at the actual colours for reference. ElSemi's ones run a bit too bright on his monitor, unfortunately. It's probable that they will be perfect (at least in Daytona) in 0.9. By the way, there is a new feature in 0.9: meshed textures that are resolution dependent. So you will still see them if you run Daytona at a high res. On a side note, I've sent 2 EEPROMs to ElSemi which should enable him to look at the DSP tables on VF2 and VCop2 (using the Daytona board) in order to hopefully get those games functioning. They should be with him in a day or two.
- 28th June      2008: Model 2 Emulator v0.9 WIP - Added an option to regulate the Gamma values of the RGB (separately). Eliminated the errors related to invisible walls in Daytona the USA. Fixed a problem in the sound of Model 2, that caused loops in some samples.
- 24th June      2008: ElSemi - Model 2 emulator 0.8a: Fixed missing trigger buttons in gun games. Fixed Desert Tank locked into test mode. Improved main cpu/sound CPU sync in Model2 Original games.
- 23rd June      2008: ElSemi - Model 2 emulator 0.8: Rewritten the MultiPCM sound chip emulation. It fixes Original Model2 games sounds and music. Fixed eye paremeters being read as unsigned by the display list parser, causing bad geometry in daytona 4 players attract and sega rally 2 players attract. Fixed network board detection for sgt24h and overrev. Now you don't need to enable network to have them boot. Adjusted daytona steering limits to the real machine limits (according to the service manual). It should have a more accurate handling now. Added force feedback for car driving games. You need to enable it in the .ini using the option EnableFF=1 in the Input section. You can tweak more force parameters in that section. Also some games only enable the force feedback if the cabinet type is set to Deluxe in the test mode. Added XInput support. You can enable XInput support in the .ini in the Input section. XInput allows direct access to XBox360 compatible controllers for vibration (they don't support vibration through DirectInput). Keep in mind that the windows XInput libraries only support vibration force feedback so an XBox360 driving controller won't have working force effects. Added optional meshed polygons for translucency (like the hardware does). Enable it with MeshTransparency=1 in the ini. This option requires a Pixel Shader 3 capable videocard. Fixed HOTD rom loading that caused missing tilemap graphics (how to play, map on gameover). Added preliminary savestates support. The sound engine state is not being saved yet. I've added this so I can ask for states to try to fix the invisible walls problem in daytona.
-  4th June      2008: ElSemi - Model 2 emulator 0.7a: Fixed network code not fully working (I accidentally left a part disabled in the last build). Improved daytona video & sound sync.
-  3rd June      2008: ElSemi - Model 2 emulator 0.7: More accurate emulation of some TGP by using the data tables from the mainboard. You'll need these table roms in Model2.zip or inside the game zip. Thanks to Peabo for the donation of a Daytona board that helped to understand how they worked. This has fixed most of the bugs in daytona usa (reverse and most invisble wall hits) and sega rally (automatic transmission). Improved color table decoding that gives more bright colors for some games. Improved SCSP timing. It should be more accurate and musics should not sound out of sync anymore. As a bonus feature i've left in a debug sound player that allows you to load a SSF (Saturn Sound Format) file for playing. To use it, load a game using SCSP (model 2a,b or c) and enter test mode (so it doesn't send sound commands) then press LeftControl+F5 and choose the ssf file to play. Improved clipping. By moving to vertex/pixel shaders i've got rid of all the clipping issues that happened with ATI video cards and recent NVIDIA ones. Remember to remove set SoftwareVertexProcessing to 0. You'll need a pixel shader 1.1 and vertex shader 1.1 capable card. It's the lowest shader version so any video should work. As a side effect of this change, there is only a geometrizer now, so the Geometrizer opion in the ini file is not used. Fixed problems with textures ending in the lowest line of the texture sheet not being uploaded to direct3d (Sega Rally black background in 2nd stage and Topskater missing floors). Added Wave Runner (Model 2C). Added support for direct3d automimpap generation (see emulator.ini AutoMip option). Added network emulation.
-  3rd January   2008: ElSemi - Model 2 emulator 0.6: So many changes that I can't remember. Lighting fixes, control fixes and sound fixes. ManxTT is working, but sound is broken. Merged some features from the CPS3 emu (vsync, custom fullscreen res,...).
- 29th May       2007: ElSemi - Model 2 emulator 0.5a: Fixed (hopefully at last) the analog wraparound bug. Fixed wrong colour table translation in vcop madium and expert levels. Added a couple of useful features: Launch game from commandline (just add the driver name. ex: Emulator.exe stcc) and Auto-switch to fullscreen after game loading (the option is in the Video menu).
- 24th May       2007: ElSemi - Model 2 emulator 0.5: This release fixes several playability bugs in Daytona USA (analog controls wraparound and windows disappearing when going to fullscreen) and adds a new playable game: Motor Raid. It also contains a modified color lookup table processing that improves the colors in the original model 2 games (daytona, vcop and dtank). The emulator now includes a nice icon and background image, thanks to jordigahan and Peabo for them.
-  3rd April     2007: ElSemi - Model 2 emulator 0.4: The Model 2 Emulator supporting some Model 2 and Model 2 A-CRX boards (Daytona anyone? ). This version of the emulator includes a preliminary emulation of the Fujitsu MB86234 DSP present in these boards. Keep in mind that the emulation is still preliminary, as there is no documentation on this chip, and it has been done by reverse engineering the binary programs and comparing with the model 2B and 2C programs and the MAME Model 1 HLE. I'd like to thank Olivier Galibert and Ernesto Corvi for their help in making possible this DSP emulation. Check the include README.TXT for instructions (especially how to set Daytona to Standalone machine as Multiplayer is not implemented) and known emulation bugs in the games.
- 11th February  2007: ElSemi - Model 2 emulator 0.3 MultiCPU Experimental: This is an experimental Model 2 emulator build using multithreaded code for parallel CPU, GPU and Sound emulation. It's designed to have a huge performance boost in Multi-Core CPUs (Dual Core and Core Duo) as it will allow the emulator to use both cores in parallel. As a bonus, this emulator contains an experimental recompiler SCSP DSP emulation.
- 22nd August    2006: ElSemi - Model 2 emulator 0.3: After more than 2 years without updates here is a new version of my Model 2 Emulator. The main changes are all speed related. The emu should be faster now. Also it now supports Frameskip and AutoFrameskip. This will probably be the last version of the emulator unless some Fujitsu TGP MB86234 docs appear to finish the emulation of the 2 and 2A cores.



==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


DECLARATION



Hex table
---------

              16  = 0x10
              32  = 0x20
              64  = 0x40
             128  = 0x80
             256  = 0x100
             512  = 0x200
  1k  =     1024  = 0x400
  2k  =     2048  = 0x800
  4k  =     4096  = 0x1000
  8k  =     8192  = 0x2000
 16k  =    16384  = 0x4000
 32k  =    32768  = 0x8000
 64k  =    65536  = 0x10000
128k  =   131072  = 0x20000
256k  =   262144  = 0x40000
512k  =   524288  = 0x80000
 1MB  =  1048576  = 0x100000
 2MB  =  2097152  = 0x200000
 4MB  =  4194304  = 0x400000
 8MB  =  8388608  = 0x800000
16MB  = 16777216  = 0x1000000
32MB  = 33554432  = 0x2000000
64MB  = 67108864  = 0x4000000





Hexadecimal / Binary
--------------------

 0  = 0000
 1  = 0001
 2  = 0010
 3  = 0011
 4  = 0100
 5  = 0101         Examples: $9A = 0x9A = 1001 1010
 6  = 0110                   $17        = 0001 0111
 7  = 0111                   $EF        = 1110 1111
 8  = 1000
 9  = 1001
 A  = 1010
 B  = 1011
 C  = 1100
 D  = 1101
 E  = 1110
 F  = 1111



ASCII code
----------


30 31 32 33 34 35 36 37 38 39
-----------------------------
 0  1  2  3  4  5  6  7  8  9


41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A
-----------------------------------------------------------------------------
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z


61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A
-----------------------------------------------------------------------------
 a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z


20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F    3A 3B 3C 3D 3E 3F 40    5B 5C 5D 5E 5F 60
-----------------------------------------------    --------------------    -----------------
    !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /     :  ;  <  =  >  ?  @     [  \  ]  ^  _  `





Resistor table
--------------

Color     Value    Multiply        Tolerance

Silver              x 0.01         +/-  10 %
Gold                x 0.1          +/-   5 %
Black       0       x 1                            * To get the ohm value of a resistor you
Braun       1       x 10           +/-   1 %         must read the colors rings from left to
Red         2       x 100          +/-   2 %         right. The last two rings on the right side
Orange      3       x 1k                             are the Multiply and the Tolerance ring.
Yellow      4       x 10k
Green       5       x 100k                           Example:
Cyan        6       x 1M                             A resistor with the following colors:
Violet      7       x 10M                            Red (2), Black (0), Orange (1k) and Gold
Grey        8                                        has 20k Ohm (20 x 1k) and a 5% tolerance.
White       9                      +/-  20 %         This is RES_K(20) in the MAME C-source.




NAMES TABLE
-----------

A/D      = Analog Digital
AC       = Alternate Current
ADC      = Analog Digital Converter
ADPCM    = Adaptive Delta Pulse Code Modulation
ADSP     = Analog Device Single Processor
AGP      = Accelerated Graphics Port
AI       = Audio Interface
ALU      = Arithmetic Logic Unit
ANSI     = American National Standards Institute
API      = Application Program Interface
ARP      = Address Resolution Protokoll
ASCII    = American Standard Code of Information Interchange
AT       = Advanced Technology
ATA      = Advanced Technology Attachment
ATAPI    = Advanced Technology Attachment with Packet Interface
BBS      = Bulletin Board System
BCD      = Binary Coded Decimal
BDOS     = Basic Disk Operating System
Bit      = Binary Digit (0 or 1)
BIOS     = Basic Input/Output System
BPP      = Bits Per Plane
BRG      = Baud Rate Generator
Byte     = 1 Byte = 8 bits
CCP      = Control Command Processor
CDDA     = Compact Disc Digital Audi (CD-DA)
CDROM    = Compact Disk - Read Only Memory
CGA      = Color Graphics Adapter
CHD      = Compressed Hunks of Data
CIA      = Complex Interface Adapter
CISC     = Complex Instruction Set Computer
CP/M     = Control Program for Microcomputers
CPU      = Central Processing Unit
CR       = Control Register
CTC      = Counter/Timer Controller
D/A      = Digital Analog
DAC      = Digital Analog Converter
DAT      = Digital Audio Tape
DC       = Direct Current
DD/2D    = Double Density (floppy disk)
DDR      = Data Direction Register / Double Data Rate (RAM)
Disk     = Floppy Disk (Format: 3 1/2 and 5 1/4 inch)
DOS      = Disk Operating System
DS       = Double Sided (floppy disk)
DMA      = Direct Memory Addressing (NOT the usual term of Direct Memory Access)
DNS      = Domain Name Service
DRAM     = Dynamic Random Access Memory
DSP      = Digital Single Processor
DRC      = Dynamic ReCompiling
DUART    = Dual Universal Asynchronous Receiver Transmitter (=2*UART)
EAROM    = Electrically Alterable ROM
EEPROM   = Electrically Erasable Programmable ROM
EDORAM   = Extended Data Output RAM
EIA      = Electronics Industries Association
EIDE     = Enhanced Intelligent/Integrated Drive Electronics
EOT      = End Of Transmission
EPROM    = Erasable Programmable ROM
eSATA    = external Serial ATA
FIFO     = First In - First Out (buffer)
FILO     = First In - Last Out (buffer)
FMV      = Full Motion Video
FM       = Frequency modulation
FPGA     = Field Programmable Gate Array
FTP      = File Transfer Protocol
GAL      = Gate Array Logic
GPU      = Graphics Processing Unit
HD       = High Density (floppy disk)
HDD      = Hard Disk Drive
HTTP     = Hypertext Transfer Protokoll
IC       = Integrated Circuit
IDE      = Integrated Drive Electronics
IEEE     = Institute of Electrical and Electronics Engineers
I/O      = Input/Output
IP       = Internet Protocol
IPX      = Internetwork Paket Exchange Protocol
IRQ      = Interrupt ReQuest line
ISA      = Industrie-Standard-Architektur
ISDN     = Integrated Services Digital Network
JEDEC    = Joint Electron Device Engineering Council
JFET     = Junction Field Effect Transistor
ISO      = International Standards Organization
JPEG     = Joint Photographics Expert Group
LAN      = Local Area Network
LCD      = Liquid Crystal Display
LED      = Light Emitting Diode
LFO      = Low Frequency Oscillator
LLC      = (Logical Link Control
LPC      = Linear Predictive Coding
LPT      = Line Print Terminal
LRC      = Longitudinal Redundancy Check
MCU      = Micro Controller Unit
MDA      = Monochrome Display Adapter
MHS      = Message Handling System
MIPS     = Million Instructions Per Second
Modem    = Modulator/Demodulator
MOS      = Metal Oxide Semiconductor
MPEG     = Motion Picture Expert Group
MPU      = Micro Processing Unit
MSI      = Medium Scale Integration
NMI      = Non Maskable Interrupt
NTSC     = National Television System Commitee
NVRAM    = Non Volatile RAM
OTP      = One Time Programmable
OPTO     = Light Sensor Package (Chip)
PAL      = Programmable Array Logic
PAL TV   = Phase-Alternation-Line TV
PDR      = Port Direction Register
PCI      = Peripheral Component Interconnect
PCIe     = Peripheral Component Interconnect Express
PCM      = Pulse Code Modulation
PCMCIA   = Personal Computer Memory Card International Association
PWM      = Pulse Width Modulation
PPCM     = Packed PCM
PIA      = Peripheral Interface Adapter
PIC      = Programmable Interrupt Controller
PIO      = Parallel Input Output
PIT      = Programmable Interval Timer
PLD      = Programmable Logic Device
PPI      = Programmable Peripheral Interface
PPP      = Point To Point Protokoll
PRAM     = Phase Change Random Access Memory
PROM     = Programmable ROM
RAM      = Random Access Memory
RAMDAC   = Random Access Memory Digital-to-Analog Converter
RGB      = Red Green Blue
RIOT     = RAM I/O TIMER
RISC     = Reduced Instruction Set Computer
ROM      = Read Only Memory
ROZ      = ROtate and Zoom
RS-232   = Recommended Standard 232
RTL      = Resistor Transistor Logic
SAP      = Service Advertising Protocol
SATA     = Serial Advanced Technology Attachment
SCI      = Serial Controller Interface
SCSI     = Small Computer System Interface
SD/1D    = Single Density (floppy disk)
SDRAM    = Synchronous Dynamic RAM
SGRAM    = Synchronous Graphics RAM
SI       = Standard Interface
SIMD     = Single Instruction and Multiple Data
SIMM     = Single Inline Memory Module
SIO      = Serial Input/Output
SM       = Surfaced Mounted
SMB      = Server Message Block-Protokoll
SMTP     = Simple Mail Transfer Protocol
SNA      = SubNet Access Protocol
SPI      = Serial Peripheral Interface
SPU      = Sound Processsor Unit
SPX      = Sequenced Packet Exchange
SQL      = Structured Query Language
SRAM     = Static RAM
SS       = Single Sided (floppy disk)
SVGA     = Super Video Graphics Adapter
TCP      = Transmission Control Protocol
TGA      = Tandy Graphics Adapter
TTL      = Transistor Transistor Logic
UDMA     = Ultra Direct Memory Access
VGA      = Video Graphics Adapter
VFO      = Variable Frequence Oscillation
VIA      = Versatile Interface Adapter
VPU      = Visual Processing Unit
UART     = Universal Asynchronous Receiver and Transmitter
USART    = Universal Synchronous/Asynchronous Receiver/Transmitter
USB      = Universal Serial Bus
UDP      = User Datagram Protocol
VIDEODAC = Video Digital-to-Analog Converter
VRAM     = Video RAM
WRAM     = Windows RAM
WWW      = World Wide Web


CRC32    = Cyclic Redundancy Code
MD5      = Message Digest number 5
SHA-1    = Secure Hash Algorithm


PACKAGE NAMES
-------------
P = Plastic, C = Ceramic and M = Metal

BGA    = Ball Grid Array
CPLD   = Complex Programmable Logic Device
CZIP   = Ceramic Zig-Zag Inline Package
DIP    = Dual Inline Package
DIL    = Dual In-Line
LCC    = Leaded Chip Carrier
LSI    = Large Scale Integration
MQFP   = Metal Quad Flat Package
MSI    = Medium Scale Integration
PGA    = Pin Grid Array
PLCC   = Plastic Leaded Chip Carrier
PQFP   = Plastic Quad Flat Package
QFP    = Quad Flat Package
SDIP   = Shrink Dual Inline Package
SIL    = Single Inline
SIP    = Single Inline Package
SMD    = Surface Mounted Device
SOIC   = Small Outline IC (Integrated Circuit)
SOJ    = J-Leaded Small Outline Package
SOP    = Small Outline Package
SSOP   = Shrink Small Outline Package
TQFP   = Thin Quad Flat Package
TSOP   = Thin Small Outline Package
VLSI   = Very Large Scale Integration
VSOP   = Very Small Outline Package
ZIP    = Zig-Zag Inline Package



BOARD
-----

68k    = Motorola 68000
ACPI   = Advanced Configuration and Power Interface
AMP    = Amplifier
AUX    = Auxiliary
BATT   = Battery
BD     = Board
BG     = BackGround
BKG    = BackGround
BPROM  = Bi-polar Prom
CLK    = Clock Crystal
CLR    = Color Prom
CNx    = Connection
CHR    = Character
CRAM   = Colour RAM
CRC    = Checksum
CRT    = Graphic/Video
CRTC   = Video Controller
DIPSW  = Dipswitch (dual in-line package)
DSW    = Dipswitch
DTH    = Dr Math PCB
EPR    = EPROM
FG     = ForeGround
GFX    = Graphics/Video PCB
GIB    = Gun Interface PCB
HD     = Hard Drive
HST    = Host PCB
HSync  = Horizontal Syncronization
ID     = File IDentification
LB     = Lower Board
LOC    = Location
LSB    = Least Significant Bit
nS     = nano Seconds
MB     = Middle Board
MCLK   = Main Clock Crystal
MUX    = Multiplexer
OBJ    = Object/Sprite
OBN    = Motion Objects
OSC    = Oscillator/Clock Crystal
OST    = Oscillator
PCB    = Printed Circuit Board
PGM    = Program ROM
Piggy  = Piggy-backed
POT    = Potentiometer  (BASS, TREBLE, BALANCE, LEFT/RIGHT and VOLUME)
PQFP   = Plastic Quad Flat Package
PSG    = Programmable Sound Generator
PWR    = Power Supply
QFP    = Quad Flat Package
RTC    = Real Time Clock
SCN    = Screen/Background
SND    = Sound / Sound PCB
SPTHX  = Special Thanks
SSB    = Speech/Sound PCB
SW     = Dipswitch
TB     = Top Board
TQFP   = Thin Quad Flat Package
TX     = Text (Scroll)
VGB    = Video Graphics PCB
VID    = Video
VDC    = Volt Direct Current (=> +5vdc)
VDP    = Video Display Processor
VRAM   = Video RAM
VSync  = Vertical Syncronization
XTAL   = Crystal (also X1, X2,...)



PREFIX      MANUFACTURER                         EXAMPLES
-----------------------------------------------------------------------

ADM         Analog Devices                       ADM690
AM          AMD                                  AM27C512
AK          Asahi Kasei Microsystems             AK4309
AT          Atmel                                AT27C080, AT28C16
CY          Cypress                              CY7C109
CXK5        Sony                                 CXK5808
D           NEC                                  D2732D
DS          Dallas                               DS1220
EL          Elantec Semiconductor                EL2386
GLT         LG                                   GLT725608
GM          Goldstar, LGS                        GM76C28K, GM76C88ALFW, GM76C256BLL
HN          Hitachi                              HN27C4096, HN462708
HY          Hyundai                              HY6264
ICS         Integrated Circuit Systems           ICS9120
IDT         Integrated Devices Technology        IDT7200
INS         National Semiconductor               INS8080AD
IS          ISSI                                 ISSI IS61C68
JRC         Japan Radio Co.                      JRC2902
KM          Samsung, SEC                         KM29W32000AT, KM4116V256G
LC          Sanyo                                LC3517
LH          Sharp                                LH5763J
LM          National Semiconductor               LM385, LM833
LSI         Lear Siegler, Inc.
LT          Linear Technology                    LT1084
M           ST Microelectronics                  M271000ZB, M533202
M5          Mitsubushi                           M5L2764K, M5L27128K
MC          Motorola                             MC68B09EP, MC68705P5
MB          Fujitsu                              MB8422
MK          MOSTEK                               MK4027
MM          National Semiconductor               MM5437
MMI         Monolithic Memories Inc.             MMI6301
MN          Panasonic                            MN414260
MP          Micro Power Systems                  MP1210
MR          OKI                                  MR27V12800, MR27C3252CZ
MS          Mosel                                MS6516
MSM         OKI                                  MSM2128
MX          Macronix                             MX27C2000
N           NKK                                  N341256
NJM         New Japan Radio Co., Ltd.            NJM3414
NMC         NS                                   NMC27C256Q
P           Intel                                P27256
PT          Proton                               PT8010AF
SLA         Sanken Electric Co.                  SLA4060
SN          Signetics                            SN82S131N, N82S137N
SM          Silicon Magic                        SM81C256K16CJ
SMC         Standard Microsystems                SMC FDC37C932
ST          ST Microelectronics                  ST7705C
SY          Synertek                             SY6545
TC          Toshiba                              TC531000, TMM2009
TDA         Philips                              TDA1519, TDA1543
TMS         Texas Instruments (TI)               TMS27C010
UCN         Allegro MicroSystems                 UCN5801A
UMC         Unicorn Microelectronics             UM6164DS
uPB         NEC                                  uPB426
uPD         NEC                                  uPD7810
V           Vitelic                              V52C8128K70
W           Winbond                              W24257
X           Xicor                                X2212

Afega  = Art-Fiction Electronic Game
CAPCOM = Japan Capsule Computers
CPS    = Capcom Play System
IREM   = International Rental Electronics Machines
PSE    = Project Support Engineering
SNK    = Shin Nihon Kikaku
SSS    = Success Corp.
SSV    = Seta, Sammy and Visco



==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


MEMO


OTHER
-----
21859 = Altera PLCC Seattle A-21859: Blitz99
2465: Krzybowl
3631 (DIP18): Mjchuuka, Mjdchuka
5216: Lastfort
70337: Firebarr (NEC uPD70337, NEC V35 Software Guard, 16-Bit Single Chip CMOS Microcomputer - from source and datasheet)
71AJC46A (SOIC8): Harley, Sega-Model3
7801 (Square Konami Chip labeled "7801"): Fastlane
7can2 4k, SOIC, Texas Instruments: Blitz99
9312 = TRW9312HH: Dcheese
9325-AG (Elliptical Filter): Bmcbowl
9343T (QFP44): Bloodwar
AMT001: IQBlock
BI 898-3-R 22  8920  (?, DIP16, tied to HD63484): Kothello (BI Technologies Dual In-Line Thick Film Resistor Network 898-3-R22 - from datasheet)
BU6244KS = BIG BODY 2 BU6244KS 704 157, QFP56: Polystar (mfg. by Matsushita - from source)
C118 = NEC C118H: Espial
D31B3100: Murogem (Mfg. = Celduc, 5V dual-inline reed relay - from datasheet)
GEN6480830 (Texas Instruments): PachiFever
GW6582: Chameleon 24-in-1 (Sound Interface Device 9V ? = SID6581)
HM9253101: Zombraid (probably memory, Hitachi/Renesas)
L4A0270: Atomicp - LSI LOGIC L4A0270
L5220574: Megat3
LVX125: 11beat, Mtetrisc (could be Quad Bus Buffer 3-state (ON Semi MC74LVX125, Toshiba TC74LVX125, Fairchild 74LVX125 - from datasheets)
M24CL16-S: Bballoon = 16Kb FRAM Serial 3V Memory (maybe Ramtron FM24CL16-S - from datasheet)
M60067 = Mitsubishi M60067-0901FP 452100 (QFP208, GA1): Gogomile, Pbancho
M9524LT = Possibly some sort of RGB video output chip: Ncv1/2
MB14282: R2dtank, Spiders
MB14368: R2dtank
MB89372 = Fujitsu MB89372P-SH, SDIP64 (RAM ?): SuperMonacoGP (CMOS LSI multiprotocol serial interface / data communications controller - from Google)
MDP1601-102G, MDP1603: Dwarfd (Dale/Vishay, Thick Film Resistor Networks, DIP, Molded - http://datasheet.octopart.com/MDP16-01-102G-Vishay-datasheet-6405.pdf)
MO-92000 (DIP64): 47pie2, Suchipi
NTA0002 (QFP80): Chameleon 24-in-1
P620B: Polepos2
RY050012 (Texas Instruments, DIP40): PachiFever
S9052AB (PLCC 80): Steeltal
SH2-102, SH3-555: Wiping
SIS6091 or S1S6091 QFP80  (Graphics controller?): Kothello
SPR800E OP-CX1, QFP208: 1945kiii
T062 Op AMP?, SOIC8: NamcoNA2 (Probably TI TL062 Op Amp)
TA-06SD 9933 B816453 128 pin square SMD: Puckpkmn
TA891945 = Y-BOX TA891945 100 pin SMD: Puckpkmn
TI 8CA00YF: Gauntdl
TV16B 0010 ME251271, 160 pin SMD: Puckpkmn
UA010: Rocktris
uPD82157 = NEC uPD82157N7-002 TBGA (huge): Gauntleg
W2466: IQblock (Winbond, DIP28)
W31001, W31002, W31003, W31004 (Custom ICs ?): CyberTank
ZC407615CFN (infralink): Hitpoker - (Motorola/Freescale, PLCC)

---------------------------------------------------------------------------------------------------------------------



Links:
CHIP SEARCH: http://www.xs4all.nl/~ganswijk/chipdir/
http://www.datasheetcatalog.net/
http://www.alldatasheet.com/
http://www.datasheetarchive.com/
http://www.datasheets.org.uk/
http://www.chipdocs.com/pnsearch/search.html?rstart=0&firm=0&keyword=????
http://www.stormaster.com/Spies/arcade/simulation/processors/index.html
http://www.dsplib.com/chips/sp025x.html
http://www.coinopexpress.com/products/pcbs/pcb/Chameleon_24_2839.html
http://www.jmpc.com/Starcade/stargames.htm
http://www.elektronik-kompendium.de/
http://www.digchip.com


Hardware:
www.andysarcade.net/

Manuals:
http://pdf.textfiles.com/manuals/ARCADE/
http://pdf.textfiles.com/manuals/ARCADE/SMALLFILENAME/
http://www.cityofberwyn.com/manuals/index.htm
http://www.crazykong.com/manuals/
http://www.vernimark.com/arcade/
http://www.basementarcade.com/arcade/library/ManualsLink3.htm
http://arcarc.xmission.com/
http://andysarcade.de/gen_links_d.html

Dipswitch settings:
http://www.solvalou.com/subpage/arcade_dips/
http://www.aut0maten.de/arcadeswitch.php

Arcade Pinouts: http://www.ionpool.net/arcade/pinouts/pinouts.html

Decapped chip cores:
http://www.flylogic.net/blog/
http://www.bunniestudios.com/


Homepage : http://www.mameworld.info/mameinfo/
E-Mail   : mameinfo@ewetel.net
PCB-Infos: http://www.mameworld.info/mameinfo/download/PCB-infos0153.zip



(c) 2000-2025  M.A.S.H

