--------------------------- - HARDWARE MAME 0.105u5 - --------------------------- CPU SOUND PROTECTION INPUT/OUTPUT OTHER VIDEO / GRAFIK ARCADE SYSTEMS ROM/RAM TYPES DECLARATION MEMO ================================================================================================================================================================================================================================================================================= CPU 0. MAME CPU Interface 1. Zilog 1.1 Z80 1.2 Z80 Versions 1.3 Compatible/enhanced Z80 CPUs 1.4 Z8000/Z8002 2. MOS-Tech 2.1 M6502 2.11 M65C02 2.12 M65SC02/M65CE02 2.13 M6509 2.14 M6510 2.15 M4510 3. Motorola 3.1 M6800 3.2 M6802 3.3 M6805 3.4 M6808 3.5 M6809 3.51 M6809E 3.6 M68000 3.61 M68008 3.62 M68010 / 68010 3.63 M68020/68EC020 3.64 M68030 3.65 M68040 3.7 DSP56156 4. Signetics 4.1 S2650 5. CCPU 6. Intel 6.1 I8035 6.2 I8039 6.3 I8X41 6.4 I8048 6.5 8080 6.6 8085A 6.7 I8086 6.8 I8088 6.9 I80C86/I80C88 6.10 I80186 6.11 I80188 6.12 I80286 6.13 I386 6.14 I486 6.15 I750 6.16 I960 7. Texas Instruments 7.1 TMS99xx 7.11 TMS9900 7.12 TMS9940 7.13 TMS9980A/TMS9981 7.14 TMS9995 7.15 TMS99100 7.16 TMS99105A 7.17 TMS99110A 7.2 TMS32025 7.3 TMS32026 7.4 TMS32031 7.5 TMS32051 7.6 TMS34010 7.7 TMS34020 8. Hitachi 8.1 HD6309 8.2 HD6803 / M6803 8.3 HD63701 8.31 HD63705 8.4 HD64180 8.5 HD6413002 / H8/3002 8.6 HD6473258 8.7 HD64F3337 / H8/3337 8.8 HD647180 / Z180 8.9 FD1089 8.10 FD1094 8.11 FD1149 8.12 SH-2 / SH7600 family 9. NEC 9.1 D70008 9.2 uPD7751 / N7751 9.3 uPD780C 9.4 MC8123 9.5 uPD7807 9.6 uPD7810 9.7 V20 9.71 V30 9.711 D80000 9.712 NANAO 08J27291 9.72 V33 9.73 V53 9.74 V60 9.75 V70 9.76 V810 10. Data East 10.1 DECO CPU16 10.2 DECO 45 / HuC6280 10.3 DECO 59 10.4 DECO 101 / ARM 10.5 DECO 102 10.6 DECO 156 10.7 ARM7 10.8 DECO ??? 10.9 DECO 222 11. Nintendo 11.1 N2A03 11.2 G65C816 11.3 SPC700 11.4 DSP-1 11.5 RSP 12. Atari 12.1 DEC T11 12.2 ADSP21xx 12.21 ADSP2100 12.22 ADSP2101 12.23 ADSP2104 12.24 ADSP2105 12.25 ADSP21062 / SHARC 12.26 ADSP2112 12.27 ADSP2115 12.28 ADSP2181 12.3 DSP32C 12.4 ASAP 12.5 Jaguar GPU 12.6 Jaguar DSP 13. Toshiba 13.1 TMPZ84C 13.11 TMP90C841 13.12 TMP91P640N 13.13 TLCS-90 13.2 TMP8039 13.3 TMP8085 13.4 TMP68HC000 13.41 TMP68301 13.5 T5182 14. KONAMI 15. MIPS CPUs 15.1 x86 dynamic recompiler 15.2 R3000 15.21 R3560 15.3 R4300 15.31 R4600 15.32 IDT R4650 (little) 15.33 IDT R4650 (big) 15.34 R4700 15.4 R5000 15.5 RM7000 15.6 QED5271 15.7 PSX CPU 16. AMD 16.1 AMD 2901 16.2 AM29000 16.3 AM29116 16.4 AM29323 17. Hyperstone 17.1 E1-16T 17.2 E1-32N 17.3 E1-32XT 17.4 GMS30C2116 17.5 GMS30C2216 17.6 GMS30C2132 17.7 GMS30C2232 18. Fujitsu 18.1 MB86233 18.2 MB86235 19. IBM 19.1 PowerPC 4xx/6xx 19.11 PPC403 19.12 PPC602 19.13 PPC603 19.14 Konami PowerPC based 3D games 19.15 PowerPC MMU 19.16 PowerPC FPU 20. SE3208 21. Others 21.1 GenSync 21.2 CP1610 21.3 CDP1802 21.4 Fairchild 3850 21.5 KABUKI 21.6 ST-0016 21.7 TS-001-Turbo 21.8 SCU DSP 21.9 M7700 21.91 M37702 21.92 M37710 21.A MN1020012 22. Sound Communication 22.1 Seibu SEI0100BU 22.2 Taito TC0140SYT 22.3 Konami K054986 .................................................................................................................................................................................................................................. 0. MAME CPU Interface - 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. Aaron also 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(). Aaron also 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. - 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. - 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.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.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.80 : Nathan Woods added an entry for the TMS99100 processor in src\cpuintrf.h - 0.79u2 : Nathan Woods fixed the CP1610 core src\cpuintrf.c and the declaration of activecpu_set_irq_callback(). - 8th January 2004: smf sent in a small fix for compiling cpuintrf.c in DJGPP. - 29th August 2001: Aaron Giles sent another CPU interface cleanup update, removing redundant code and improving the interface. - 0.54 : Aaron Giles made major changes to the CPU interface. As a result of this, some games are temporarily broken, most notably CPS2. - 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. - 20th July 2000: Juergen Buchmueller submitted some new functionality to the CPU interfaces. - 0.35b7 : Major overhaul to the cpu cores. [Juergen Buchmueller] - 0.35b6 : Major changes to the whole CPU interface and cores. [Juergen Buchmueller] - 2nd March 1999: Eric Hustvedt updated the CPU interface, resulting in a little speed boost. - 0.30 : Aaron Giles redesigned cpuintrf.c to be more modular and readable. - 0.29 : Moved the memory code from cpuintrf.c to memory.c. - 0.27 : New support functions in cpuintrf.c: 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 : 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.16 : Nicola 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. 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. 1. Zilog 1.1 Z80 - 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 : 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 : Nicola Salmoria and Aaron Giles made 8-bit A,B,C,D,E,H and L registers available in the Z80 debugger. - 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. - 0.98u2 : Aaron Giles rewroted the Z80/Z180 daisy chaining logic to work a little closer to the hardware (added cpu\z80\z80daisy.c). Updated the Z80 CTC and PIO modules 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. - 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 Z80 OTIR/INIR instructions affect the PF flag and removed the look-up tables [Ramsoft, Sean Young] - 0.77 : 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. - 29th July 2000: Juergen Buchmueller fixed the Z80 problems in Brute Force. - 9th May 2000: Juergen Buchmueller fixed some Z80 core bugs. - 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 : Juergen Buchmueller makes some improvements to the Z80 emulator. - 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. - 14th April 1999: Juergen Buchmueller fixed a Z80 bug which affected Astrocade emulation (on the MESS side). - 13th April 1999: Jürgen 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 & starjack 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. - 0.35b3 : [DOS] X86 asm Z80 core. [Juergen Buchmueller] - 27th February 1999: Jürgen has made the z80 code faster with memory accesses. - 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.35b1 : 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.31 : Tatsuyuki Satoh supported Z80 daisy chain interrupts. - 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. - 0.27 : Source: Tatsuyuki Satoh added Z80PIO and Z80CTC emulator, in COMMON.C - 0.21 : Source: Nicola 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 : Source: Nicola 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 reenabled. 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 : 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). 1.2 Z80 Versions Z80 Familie Z80A CPU = Z0840004 PSC DIL-40 Z80B CPU = Z0840006 PSC DIL-40 Z80A CTC = Z0843004 PSC DIL-40 CTC = Counter Timer Controller Z80B CTC = Z0843006 PSC DIL-40 Z80A PIO = Z0842004 PSC DIL-40 Z80B PIO = Z0842006 PSC DIL-40 Z80A SIO-0 = Z0844004 PSC DIL-40 Z80B SIO-0 = Z0844006 PSC DIL-40 Z80A DART = Z0847004 PSC DIL-40 Z8530 AB1 = Z0847006 PSC DIL-40 ZiLOG Data-Communictions Z85230 DIL-40 Z85C30 DIL-40 PCB: F15se Enhanced Z80 Microprocessors Z84C00 CPU DIL-40 6/10Mhz Z84C20 PIO DIL-40 10Mhz Z84C30 CTC DIL-40 6Mhz Z84C40 SIO-0 DIL-40 10Mhz Z84C90 KIO PLCC-84 10Mhz - 0.100u4 : Aaron Giles added save state support to the Z80 CTC system. - 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. - PCB: Z80, Z80A, Z80-A, Z80B, Z80-B, Z80CTC, Z80-CTC, Z80PIO - PCB: Z840006 (QFP44), Z84C0006PEC, Z84C0008PEC, Z84C00A85, TMPZ84C000AP-8, TMPZ84C011AF-6, TMPZ84C011BF-6, TMPZ84C015BF-8, Goldstar Z8400B PS, Z8400APS, 84C000AM-6 (ZN1/2) - PCB: Lwings: Z80(custom) and Z80A(sound), Exerion: SHARP LH0080A(Z80A), Myhero: Z80A + Z80A-PIO, Starforc: Z80A CPU + Z80PIO + Z80CTC..., 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 - PCB: Dbz2: SHARP LH0080E (Z80E), MOSTEK MK3880N-4 (Lsasquad, Tactcian), LZ8420M (Btlkroad), KL5C80A12CFP (Mjreach1, Hkagerou, NeoGeoHyper64) 1.3 Compatible/enhanced Z80 CPUs 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) 1.4 Z8000/Z8002 - 0.35b2 : Z8000 emulator. [Juergen Buchmueller] - GAMES: Pole Position (Namco 1982), Pole Position II (Namco 1983) 2. MOS-Tech (Metal Oxid Semiconductor) 2.1 M6502 - 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, M65C02, 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 that allows drivers to override the indexed addressing mode in cpu/m6502/m6502.c + m6502/ops02.h (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 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. - 25th November 2000: Peter Trauner fixed some problems in the M6502 CPU core. - 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] - 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 : 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 : Source: 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 : Aaron Giles supports 6502 bank switching via cpu_setbank(). - 0.27 : Bernd Wiebelt sincerely hopes he fixed the BCD-emulation in the 6502 emulation. Source: 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 : Source: Nicola 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 : 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. - 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 : 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 Marat Fayzullin's engine. - GAMES: Astro Fighter (Data East 1980), Mouse Trap (Exidy 1981), Burger Time (Data East 1982) - PCB: R6502 (Centiped), SynerTek SY6502A (Fantasy), UM6502A CPU + R6502P SND (Pcktgal), 8333 (SY 6502A) (Liberate) - PCB: 6502, 6502A, R6502, R6502P, Rockwell R6502AP, R65C02P2, RP6502, RP6502A, RP65C02, RP65C02A, UM6502, UM6502A 2.11 M65C02 - 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.34b2 : 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 M65C02 has not illegal opcodes from the M65XX series, but has additional commands. So not full compatible to 6502 series. - GAMES: Seta - Thundercade (1987), Twin Eagle (1988), Caliber 50 (1989), Meta Fox (1989) - PCB: RP65C02 (Lastmiss), RP65C02A (Birdtry), R65C02P2 (Thedeep) 2.12 M65SC02/M65CE02 - 0.94u5 : Nathan Woods removed RUNTIME_LOADER in cpu/m6502/m65ce02.c. - 0.36RC1: 65sc02 and 65ce02 cpu cores. [Peter Trauner] - NOTES: The M65sc02 is M65c02 compatible and has additional commands. - GAMES: Bonus Card, Jolly Card, Jolly Poker - PCB: G65SC02P (Igpoker) 2.13 M6509 - 0.90u1 : Nathan Woods fixed the M6509 core to appease the new compiler. - 0.79u3 : Nathan Woods updated m4510 and m6509 CPU cores to MAME 0.79 - 11th February 2004: Nathan Woods updated the MESS specific CPU cores (such as I286, M4510 and M6509) with latest changes. 2.14 M6510 - 0.101u3 : Nathan Woods added internal memory maps for the m6510 and m4510 CPU cores. Updated m4510 to use address translation hooks. 2.15 M4510 - 0.101u3 : Nathan Woods added internal memory maps for the m6510 and m4510 CPU cores. Updated m4510 to use address translation hooks. - 0.79u3 : Nathan Woods updated m4510 and m6509 CPU cores to MAME 0.79 - 11th February 2004: Nathan Woods updated the MESS specific CPU cores (such as I286, M4510 and M6509) with latest changes. - 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 3. Motorola 3.1 M6800 - 0.100u4 : Aaron Giles added missing registers to the 6800 core's save state. - 5th June 2002: Jarek Burczynski added a new opcode to the M6800/NSC8105 CPU core. - 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 : Tatsuyuki Satoh fixes and improvements to the 6800 family emulator. - 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: Jürgen has fixed some bugs in the 6800 core. - 8th February 2000: Tatsuyuki Satoh did a few bugfixes and optimized the m6800 core. - 0.35b2 : Brad Oliver added Sky Diver (Atari 1978 - first game uses the M6800 CPU) - GAMES: Atari - Drag Race (1977), Sky Diver (Atari 1978), Monte Carlo (1979) - PCB: 68A00 (Sflush, Fgoal), 6800 (Triplhnt) 3.2 M6802 - 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), S6802P (Murogem) 3.3 M6805 - 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 : 6805 emulator, needed by Arkanoid. [Aaron Giles] 3.4 M6808 - 14th February 2001: With Nicola Salmoria's help, Juergen Buchmueller fixed some 6808 CPU core bugs that prevented Fire Truck from working. - 0.35b3 : Brad Oliver fixed a couple of bugs in the 6808 core. - 0.33b7 : Source: [DOS] 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 : New 6808 emulator [John Butler]. Ernesto Corvi added support for HD63701YO extra opcodes to the M6808 emulation. Larry Bank fixed bug in the 6808 emulation of TSX and TXS. - GAMES: Williams - Defender (1980), Stargate (1981), Robotron (1982), Blaster (1983), Joust2 (1986) 3.5 M6809 - 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.78u3 : Change name 'M6809E' to 'M6809'. Aaron Giles fixed the hd63705_get_info in the M6809 core, it crached in 0.78u2. - 0.78u2 : Change name 'M6809' 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 : Juergen Buchmueller cleaned up the 6809 and Konami-2 emulations. - 25th October 1999: Jürgen 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. - 2nd March 1999: Juergen Buchmueller has fixed Rolling Thunder MCU problems by simplifying the 6809 interrupt handling and corrected CWAI emulation. - 26th February 1999: Jürgen has also 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.29 : M6809 emulators natively support bank switching. Aaron Giles and Tatsuyuki Satoh did some optimizations to the 6809, and 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. - 0.28 : 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.23 : Modifications were done to M6809 emulator to support FIRQ. - 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. - GAMES: Namco - Super Pac-Man (1982 - 2x), Mappy (1983 - 2x), Motos(1985 - 2x), Pac-Mania (1987 - 3x) - PCB: MC6809 (Rockrage), HD6809EP (Chinagat), 68A09EP (Metrocrs), 6809EP (Csilver), MC68B09EP (Contra, Ddribble), MC68A09EP (MegaZone), EF68B09 (Timekill), EF68B09EP (MK), Fujitsu MBL68B09E (Lemnangl), S22GD-EF68B09EP (Mk) 3.51 M6809E - GAMES: Turbo Sub (1986), Capcom Bowling (1988), Bowl-O-Rama (1991) 3.6 M68000 (ASM, C core and DASM) - 0.104u4 : More global system cleanup [Aaron Giles, Atari Ace]: Moved 68000-specific build rules to cpu.mak and updated the 68000 disassembler to use the new interfaces. - 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 and fixed several issues with 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). Aaron fixed also a 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 : Fixed cycle counts for several 68000 instructions. [Andrew Seed] - 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: corrected 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 corrected. 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 - 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. - 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. - 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 : 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 : 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: Jürgen 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: Jürgen fixed the slow initialization of m68k (it caused small sound hiccups at the beginning of every m68k game) - 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 : 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. - 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 : 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 : 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. - 0.34b5 : x86 ASM 68000 core. This is a major speed improvement. [Mike Coates, Darren Olafson] - 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 : Darren Olafson slightly improved speed of the 68000 emulator. Brian Verre did close to accurate 68000 instruction timing. - 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. - 0.31 : Aaron Giles fixed 68000 emulator to properly handle interrupt priorities. Source: [Aaron Giles] 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(). - 0.30 : Aaron Giles made some changes to the 68000 emulator memory interface, and a new 68000 disassembler. Improved the 68000 cpu interface. - 0.28 : 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), Signetics SCN68000CAN64 (Badlands, Tmnt), TM68HC000p-16 (Mcatadv), HD68000 (Hvoltage, Splndrbt), Hitachi HD68HC000PS8 (MegaPlay), 68HC000FN16 (Bang), TS 68000 (Rainbow), MC68000P12 OB26M8829 64 pin (Pntnpuzl) - PCB: 68HC000FN10, PLCC68 (Grdnstrm) - PCB: 59 <- Data East Code (Mutantf, Rohga), DATA EAST 74 - surface scratched (Sotsugyo) 3.61 M68008 - 0.82 : Curt Coder added MC68008 support to the MC68000 core. - NOTES: The M68008 must use ROM_LOAD16_WORD_SWAP to load ROMs. 3.62 M68010 / 68010 - 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: Change name 'MC68010' to '68010'. - 17th August 1999: Aaron Giles fixed an embarrassing 68010/68020 mode selection bug. - NOTES: The M68010 has extra opcodes. 3.63 M68020 / 68EC020 - 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. - 0.37b14 : Change name '68000' to '68EC020' (listinfo). - 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 reenabled 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 (Elvactr), MC68EC020FG25 (Machbrkr), MC68EC020RP25 (Groundfx), TMP68EC020F (Samuraia) 3.64 M68030 - NOTES: Supported by disassembler only. - SOURCE: cpu\m68000, m68kdasm.c 3.65 M68040 - 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. - GAMES: Taito System JC - Landing Gear (1995), Side By Side (1997) - PCB: MC68040RC25 PGA type (Landgear, Sidebs, Sidebs2) - SOURCE: cpu\m68000\ 3.7 DSP56156 - 0.99u3 : 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. - SOURCE: cpu\dsp56k\dsp56k.c and drivers\plygonet - PCB: Motorola DSP56156FE40 or XC56156 DSP - GAMES: Polygonet Commanders (Konami 1993) 4. Signetics 4.1 S2650 - 0.101u2 : Aaron Giles added save state support to the S2650 CPU. - 0.98u3 : Improvements to the S2650 core [Manfred Schneider]: Fixed LPSU opcode and 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 : 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) 5. CCPU - 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 : 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 and TMS32C010 cores are now full 16-bit cores. Appropriate changes to the drivers that use them have already been made. This fixes the input ports on the Cinematronics games, and gameplay in several Toaplan games. [Aaron Giles] - 6th September 2000: Brad Oliver fixed a small bug in the CCPU core. - NOTES: The CCPU code comes from the Retrocade emulator (1998). - GAMES: Space Wars (Cinematronics 1978), Barrier (Vectorbeam 1979), Armor Attack (Cinematronics 1980), Star Castle (Cinematronics 1980), Demon (Rock-ola 1982) 6. Intel 6.1 I8035 - 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: The Emulation of the I8035 sound CPU based on the 8048 emulator by Dan Boris - GAMES: Radar Scope (Nintendo 1980), Donkey Kong (Nintendo 1981), Astro Blaster (Sega 1981) - SOURCE: i8039.c - PCB: W8035 (Spcforce), MBL8035N (MCU, RAM 64byte, ROM N/A) ShootingGallery 6.2 I8039 - 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.72 : Olivier Galibert fixed i803x jumps. - 16th January 2002: Quench corrected 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.35b2 : Brian Stern fixed some bugs in the I8039 emulation. - 0.34b4 : Dan Boris fixed bug in the I8039 external interrupt handling. - 0.33b7 : Andrea Mazzoleni added the I8039 to the debugger, using Mike Cuddy's disassembler. - 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] - 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) 6.3 I8X41 - 0.90 : Juergen Buchmueller fixed crash in i8x41 cpu core reading uninitialized internal RAM. - 13th January 2003: Quench improved the i8x41 CPU core. - 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 6.4 I8048 - NOTES: Based on the I8048 emulator by Dan Boris - GAMES: 'Sai Yu Gou Ma Roku' (bootleg 1988- China Gate clone) - SOURCE: i8039.c 6.5 8080 - 0.104u5 : Kopromaster fixed incorrect flags emulation in the 8080 CMA instruction. - 0.72u2 : Change name 'I8080' to '8080'. - 0.62 : Change name '8080' 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. - SOURCE: cpu\i8085\i8085.c - GAMES: Midway - Gun Fight (1975), Sea Wolf (1976), Laguna Racer (1977), Space Invaders (1978) - PCB: 8080A (Polaris, Sheriff, Stactics), Mitsubushi M5L8080AP (Dynadice) 6.6 8085A - 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 : Change name 'I8085A' 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 : Change name '8085A' 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. - 0.37b15 : Change name '8085' to '8085A' (Listinfo). - 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 : I8085 emulator. [Juergen Buchmueller] - SOURCE: cpu\i8085\i8085.c - GAMES: Phoenix (Amstar 1980), Meteoroids (Venture Line 1981), Red Alert (Irem 1981) - PCB: D8085A (Triv Quiz), NEC D8085AHC (Paranoia) 6.7 I8086 - 0.101u3 : Nathan Woods updated i86 and i286 cores to hook into the new i386 disassembler. - 0.89u5 : Nathan Woods fixed disassembler calls in the I86 and I286 core, so that instructions are not falsely disassembled as 32-bit. - 0.87u4 : Juergen Buchmueller changed instr86.c based on comment below: In the cpu/i86 code emulating the CMPSW instruction there is what seems to be a cut+paste bug: It calls the SUBB() macro where it should call SUBW(). Line 524 of instr86.c. - 0.75 : Nathan Woods fixes REP CMPSW so that it uses words and not bytes (cpu\i86\instr86.c). - 1st August 2003: 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 : Change name 'I86' 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. - 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 : Lots of changes to some CPU cores (mostly i86). [Peter Trauner, Juergen Buchmueller, Aaron Giles] - 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 : 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.24 : Fabrice Frances submitted a new faster I86 emulator. The entire I86 directory is changed, and most of Gottlieb games are now faster. - 0.18 : 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 : Fabrice Frances submitted an 8086 CPU emulator. Initial work based on David Hedley's pcemu. - NOTES: 20 bit adress bus, 16 bit data bus and registers. 6 bytes prefetch queue. - GAMES: Q*bert (Gottlieb 1982), Mad Planets (Gottlieb 1983), Curve Ball (Mylstar 1984) 6.8 I8088 - NOTES: The I8088 is a I8086 with 8 bit data bus. Prefetch queue only 4 byte, and refilled when 1 byte empty. - GAMES: M.A.C.H. 3 (Mylstar 1983 - Laser Disc game). MAME uses the I8086. - PCB: P8088-1 (Hotblock), AMD P8088-2 (Borntofi) 6.9 I80C86/I80C88 - NOTES: Theses are I8086/8088 CPU's and the CPU command "mov cs, " are ignored. 6.10 I80186 - 0.62 : Change name 'I186' 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. - NOTES: The I80186/I80188 has integrated pic8259, pit8253, dma8253 (but not at standard pc addresses) and additional instructions. - GAMES: Leland - Quarterback (1987), Viper (1988), Pigout (1990), Danny Sullivan's Indy Heat (1991) 6.11 I80188 - NOTES: The I80188 has a 8bit data bus. - SOURCE: I86.c 6.12 I80286 - 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 in the I86 and I286 core, so that instructions are not falsely disassembled as 32-bit. - 0.79u3 : Nathan Woods updated the I286 CPU core to MAME 0.79 - 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. - 1st August 2003: 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.31 : Fabrice Frances cleaned up the I86 emulator, including 286 instructions (but with 8088 timing). - NOTES: The I80286 is not supported yet. MAME uses the I8086 emulator. The I80286 is a 80186 with additional instructions and 24 bit address bus 6.13 I386 - 0.103u5 : Nathan Woods added support for the various x86 8-bit and 16-bit derived registers, as hidden registers in the i386 core. Nathan also 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 : 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 Linda 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 NEC V-series encrypted opcodes in i386 disassembler (for Irem games). - 0.90 : Nathan Woods fixed the i386 algorithm for identifying 32-bit segments, near branches now won't force a segment reload, implemented RET imm16 under 16-bit mode, ixed SBB instruction (the borrow was deducted from the second operand, not the result), fixed LDS, LSS, LES, LFS, LGS under 32-bit mode and 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 in the I386 core and marked retf instruction as DASMFLAG_STEP_OUT in the I386 disassembler. - 0.89u4 : Nathan Woods added support for DASMFLAG_STEP_OVER and DASMFLAG_STEP_OUT flags in i386 core. - 0.84u5 : Ville Linde improved i386 disassembly format. - 0.84u3 : Ville Linde added some missing i386 opcodes. - 0.82u3 : Nathan Woods revamped interrupt handling (i386ops.c); a bonafide line is now implemented and also implemented IRQ callback. Also fixed CALL absolute instruction under 16 bit mode (i386op16.c). - 0.82u2 : Nathan Woods update the i386 opcodes: CALL16 opcode will now only adjust IP instead of EIP when in 16-bit mode, minor bug fix in RETF opcode, hanged REP and REPNE opcode implementations to use the same code and INTO will now interrupt even if IF is zero. - 0.82 : Nathan Woods implemented zeroing out A20 lines, XLAT opcode, state save support and DAA fixes. And the Unknown instructions now disassemble as '???'. - 0.81u8 : Nathan Woods implemented partially far CALL and JMP instruction, PUSH rm8 instruction, usage of segment limits (or whatever they are called) and 16-bit interrupts. Also 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 and actual cycle count is now returned. Added a distinction between maskable and non maskable interrupts (like int 3, illegal instruction etc) and 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 and minor disassembler fixes. Ville Linde bugfixed Nathan's REP. - 0.81u7 : 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 also improve the i386. He fixed a bug in i386_set_info() when changing the EIP register in cpu\i386\i386.c. And he implemented ES, BOUND, DAA, DAS, AAS, INSB, INSW, OUTSB, OUTSW, LES, LDS, HLT, LSS, LFS, LGS, IMUL with a 32 bit adjustment and fixed some compilation errors under non-GCC compilers. Also adds 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. Ville Linde 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 : Ville Linde update the i386 core and the SPI driver. 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 : Ville Linde fixes the i386 core and improve the SPI system. Senkyu and E-Jan High School now do something. - 0.81 : 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). - SOURCE: cpu\i386\i386.c - PCB: Seibu SPI - AM386 DX40 QFP132 (rdft2), Advanced Micro Devices AM386DX/DXL-25 QFP132 (Rdft), Intel NG80386DX25 (Viprp1) 6.14 I486 - 0.103u2 : I486 CPU patch [Nathan Woods]: Implemented XADD, INVLPG and CMPXCHG instructions and 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. 6.15 I750 - PCB: Intel i750 = Intel 82750 (Dragngun, Lockload) 6.16 I960 - 0.104u4 : Aaron Giles fixed bug i9600104u2ora (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". i9600104u2ora Malice) - 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. - 0.87u1 : i960 updates [R. Belmont]. Fixed some errors in interrupt handling. Solves corrupt graphics in fvipers and crashes in fvipers, schamp and dynamcop. Added support for the following opcodes: nor, addc, subc, atanr, sinr, cosr, tanr, atanrl, logrl, sinrl, cosrl, tanrl, logepr, cvtri, scanbit, NAND, EDIV, SCALER, SCALERL, ROUNDR, ROUNDRL, EXPRL, MOVRE, CPYSRE and REMR. 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). Fixed cmpr and cmprl - they were comparing garbage instead of the correct registers. Fixed stt to only store 3 words instead of 4. Rewrote flushreg, it was *totally* wrong before and HOTD now runs, among others. Added the new opcodes to the disassembler. Improve the disassembler. Added disassembly for movrl. Added parens for the compiler warning. - 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.84u2 : 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) and 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 and TESTx opcodes to the disassembler. - 0.82 : Olivier Galibert added a bunch of floating point opcodes and stylistic fixes to the i960 core. - 0.81u9 : Olivier Galibert cleanups the i960 core, so the disassembler compiles. - 0.81u8 : 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 7. Texas Instruments 7.1 TMS99xx - 0.96u1 : Brad Oliver fixed PPC assembly code in the TMS99xx core. - 0.36b13 : Raphael Nabet added other members of the TMS99xx family. 7.11 TMS9900 - 0.95u4 : 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.34b6 : TMS9900 emulator. [Andy Jones, based on original code by Ton Brouwer] - NOTES: This is the original processor from 1976. 7.12 TMS9940 - NOTES: The embedded version (1979) of the TMS9900. 7.13 TMS9980A/TMS9981 - 0.77u3 : TMS9900 inline asm update [Brad Oliver] - The syntax for the inline ppc assembly in the tms9900 core has changed slightly. - 0.36b11 : Raphael Nabet made some changes to the TMS9900 emulation that completely screw up Cosmic Guerilla. - 0.36b9 : Raphael Nabet updated the TMS9900 emulator. - 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: Jürgen 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. - GAMES: Cosmic Guerilla (Universal 1979), Looping (Venture Line 1982), Sky Bumper (Venture Line 1982) - PCB: TMS9980 (Looping) 7.14 TMS9995 - 0.37b12 : TMS9995 emulator. - NOTES: Improved TMS9980 and quite faster as a TMS9900. - GAMES: Venture Line - Looping (1982), Sky Bumper(1982) 7.15 TMS99100 - 0.80: Nathan Woods added an entry for the TMS99100 processor in src\cpuintrf.h 7.16 TMS99105A - NOTES: late variant, widely improved, 1981 7.17 TMS99110A - NOTES: Same as above, with floating point support, (c) 1981 7.2 TMS32025 - 0.96u2 : Aaron Giles fixed bug in MAC instructions in the TMS32025 core. Fixed cycle counting problems that led to inaccurate internal timers. Also 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 : Phil Stroffolino fixed DSP math bugs. The DSP communications RAM latch mode hooked up in the namcos22 driver, this fixes graphics for many titles. - 0.81u8 : Phil Stroffolino fixed lst and lst1 opcodes and 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 : 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. - Source: namcos22.c, taitoair.c - GAMES: Taito - Top Landing (1988), Air Inferno (1990), Prop Cycle (1996) - PCB: TMS320C25 (Topland), TI320C25 DSP (printed as C71), WYBUX1G1 QCC68 = TMS320C25 int 544 word RAM, 4k ROM (Aircombj) 7.3 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. - SOURCE: cpu\tms32025\tms32025.c - GAMES: Cool Pool (Catalina 1992), 9-Ball Shootout (E-Scape EnterMedia 1993) - PCB: 320C26 (9ballsht) 7.4 TMS32031 - 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!) - 24th February 2004: Aaron Giles removed some test code from the memory system and fixed a bug in the TMS32031 CPU core that caused wrong polygons in Radikal Bikers. - 16th February 2004: 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 : Aaron Giles did many fixes to the TMS32031 core. - 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. - 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 - Cruis'n USA (1994), Cruis'n World (1996), Primal Rage (Atari 1994), T-Mek (Atari 1994) - NOTES: The TMS320C31PQL is a 32bit DSP with 33MFLOPs (Primrage) - PCB: TMS32C031 (DriversEdge), Taito E07-11 TMS320C31 QFP132 (SideBySide2) 7.5 TMS32051 - 0.105u1 : 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. - SOURCE: cpu\tms32051\tms32051.c 7.6 TMS34010 - 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 a 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 : Aaron Giles make several changes and improvements to the TMS34010 emulation and to the Williams games using CVSD sound. - 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 : Aaron Giles make improvements to the 34010 emulation. - 16th October 1999: Aaron Giles sent in a TMS34010 update with a few structural changes and bugfixes. - 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.34b2 : TMS34010 emulator. [Alex Pasadyn, Zsolt Vasvari] - GAMES: Narc (Williams 1988), Smash T.V. (Williams 1990), Mortal Kombat (Midway 1992) - PCB: TMS34010FNL-50 (50MHz, QCC68) (Nbajam), TMS34010FNL-40 (CheeseChase), TMS 34010 (Mk) 7.7 TMS34020 - 18th November 2001: Aaron Giles sent in some TMS34020 CPU core changes and a driver for Revolution X. - GAMES: Revolution X (Midway 1994), Battle Toads (Rare 1994) 8. Hitachi 8.1 HD6309 - 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 SEXW instruction (hd6309\6309ops.c) and Cycle Counts Page (hd6309\6309tbl.c). - 0.90 : Nathan Woods fixed the undocumented bit test opcodes in hd6309 cpu core. - 0.80 : Nathan Woods fixed the ABCD opcode in cpu\hd6309\6309ops.c - 0.79u1 : Nathan Woods changed a few HD6309 indexing modes to be illegal. - 30th January 2004: Nathan Woods sent in minor timing enhancements to the 6309 CPU core and the K051649 sound core. - 0.37b6 : Tim Lindner did true HD6309 emulation (instead of using the M6809). - 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: Change name 'M6309' to 'HD6309'. - 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) - SOURCE: cpu\hd6309\hd6309.c - PCB: 63C09E (Combasc, Thehustl), HD63C09EP (Lethalen), HD63B09EP (source) 8.2 HD6803 / M6803 - 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) 8.3 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 : Tatsuyuki Satoh made some fixes to HD63701 IRQ handling, and support for ICI (Input Capture Interrupt). - 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: 637B01 (Darktowr), 60A1 DIP40 (Drgnbstr, 3D Thunder Ceptor2), 64A1 (Dangseed, BoxyBoy, Splatter), 64A1 = 6809 based Namco custom CPU (Bakutotu, Berabohm) 8.31 HD63705 - NOTES: The HD63705 is a IO Microcontroller for Dips/input ports. - GAMES: Namco - Assault (1988), Ordyne (1988), Cosmo Gang the Video (1991) 8.4 HD64180 - NOTES: HD64180RP8 is a 8 bit processor, dual channel DMAC, memory mapped I/O, used for multigame link. - SOURCE: drivers\asuka.c - GAMES: Cadash (Taito 1989) 8.5 HD6413002 / H8/3002 - 0.105u1 : Tomasz Slanina added several missing H8 opcodes to the core and color DAC to driver lastfght.c. - 0.103u3 : H8/3002 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 and 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 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 h83002 - 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 a core for the Hitachi H8/3002 MCU [R. Belmont]. It was originally written by the Zinc authors The_Author & DynaChicken for Zinc. I've 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) - NOTES: 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. - SOURCE: cpu\h83002\h83002.c - GAMES: Namco Classic Collection Vol. 2 (1996) - PCB: Hitachi H8/3002 HD6413002F17 MCU (Tekkentt) 8.6 HD6473258 - PCB: Hitachi H8/325 HD6473258P10 MCU (Vgoalsoc, Les Fiches), H8/320 (Twrldc94) 8.7 HD64F3337 / H8/3337 - PCB: Hitachi H8/3337 HD64F3337CP16 (Elvis) 8.8 HD647180 / Z180 - 0.98u2 : Aaron Giles rewrote the Z80/Z180 daisy chaining logic to work a little closer to the hardware (added cpu\z80\z80daisy.c). - 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. - 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: HD647180 is a sound cpu (Z180) with internal rom (32k). The Z180 is a 8-bit microprocessor (DIP64), code compatible with the Zilog Z80. - SOURCE: drivers\toaplan1/2.c - GAMES: Mosaic (Space 1990), Fire Shark (Toaplan 1990), Vimana (Toaplan 1991) - not dumped yet - PCB: Hitachi 1D2 R HD647180X0FS6 (Ghox), UC06 DIP64 surface scrached (Mosaic) 8.9 FD1089 - 0.92u1 : FD1089 Update [Nicola Salmoria, Charles MacDonald]. Complete table for 317-0033 (Alien Syndrome) and 317-0034 (Super Hang-On). - 0.90u4 : Nicola Salmoria and Charles MacDonald improved the FD1089 decryption logic. Added complete table for Enduro Racer and more data to Super Hang On Table. - 0.90u1 : 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 680000 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) tables. Decryption works on 16-bit words, but only 8 bits are affected, the other 8 are left untouched. Opcodes are always encrypted; data can be not encrypted, 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 only contains the code of the table 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 they did it. 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. - SOURCE: machine\fd1089.c - GAMES: Action Fighter (Sega 1986), Dunk Shot (1987) - PCB: Hitachi FD1089A 317-0018 (Afighter) 8.10 FD1094 - 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 : Nicola Salmoria updated the FD1094 decryption. - 0.94u4 : Nicola Salmoria changed FD1094 state change behavior slightly to keep Gain Ground happy. - 0.89u1 : Thierry and Gerald added new keys for several FD1094 games. - 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 : More FD1094 improvements, 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. [Nicola Salmoria] - 0.88u2 : 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 : Charles MacDonald and Nicola Salmoria improve the FD1094 emulation. More sets now run (eswatu, fpoint, goldnaxc, cltchitr). - 0.88 : 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 : Nicola Salmoria added the code to decrypt FD1094 CPU 317-0092 in states 0x00-0xff (0x00 is reset, 0x10 is IRQ) - code is not hooked up yet (machine\fd1094\317-0092). - 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 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. - SOURCE: machine\fd1094.c - 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) 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.11 FD1149 - NOTES: The FD1149 CPU is undumpable yet! - GAMES: Sega - Burning Rival F1 (1992), Dark Edge (1992), Super Lap (1993), Dragon Ball Z (1994) 8.12 SH-2 / SH7600 family - 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.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 : Olivier Galibert cleaned up SH-2 core a bit. - 12th October 2003: Olivier Galibert and Aaron Giles fixed more bugs in the timer system and SH-2 CPU core. - 0.74u1 : Olivier Galibert made various SH2 fixes improving Master/Slave support (this improves Shienryu on ST-V but its not yet playable due to incomplete ST-V emulation). - 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. - 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. - 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. - 7th February 2001: Sylvain Glaize fixed some bugs in the SH-2 CPU core. - ??? 2000: Juergen Buchmueller added the SH-2 CPU core. - NOTES: The Hitachi SH-2 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. - SOURCE: 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. - GAMES: Psikyo - Strikers 1945 II (1997), Space Bomber (1998), Gunbird 2 (1998) - PCB: Hitachi SH2 HD6417604F28 - QFP144 (Gnbarich, Gunbird2), HD6417095 (STV-PCB), Hitachi SH7032 HD6417032F20 (Coolridr), SH2 (Avengrgs) 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 uPD7751 / N7751 - 0.35b2 : Mike Balfour added support for the 7751 sound chip in Monster Bash. Two samples are still needed (discrete circuits). - NOTES: The N7751 is a 8048 CPU derivative and 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 D7751C (Bodyslam), NEC7751 (source) 9.3 uPD780C - NOTES: The NEC D780C is a Z80A compatible processor for program and sound. - PCB: NEC D780C-1 (Flstory), D780C (Devstors) 9.4 MC8123 - 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 : 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. - SOURCE: machine\mc8123.c - PCB: NEC MC8123B 651 (Block Gal, Shinobi), MC-8123A 317-5012 (GanbareChinsanOoshoubu) 9.5 uPD7807 - 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) 9.6 uPD7810 - 0.82u3 : Eisuke Watanabe fixed the upd7810 gta, gti, dgt and working reg opcodes and SIO input and added sound in the Metro games. - 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 : 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: The NEC uPD7810 CPU controlls soundchips like + MSM6295 + YM2413 or YRW801-M + YMF278B (unemulated). The work based on the NEC Electronics User's Manual, April 1987. - GAMES: Metro - Puzzli (1995), Dai Toride (1995), Pang Poms (Metro 1992) - SOURCE: upd7810.c -> uPD7810/11, 7810H/11H, 78C10/C11/C14 emulator - PCB: NEC D78C10ACW (Lastfreo, Lastfort), NEC D78C10ACN (Karatour), NEC78C10 (Dharma) 9.7 V20 - 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 9.71 V30 - 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. - 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) 9.711 D80000 - 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. - 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. - SOURCE: machine\irem_cpu.c - PCB: D800001A1 (Rtypeleo) D8000011A1 (Inthunt) D8000019A1 (Riskchal) D8000020A1 023 9320NK700 (Shisen2) D8000021A1 (Wpksoc) D8000022A1 (Psoldier) D8000023A1 (Dsoccr94) 9.712 NANAO 08J27291 - NOTES: The NANAO 08J27291 is a custom V30 CPU like the D80000. It uses a simple opcode lookup encryption. - SOURCE: machine\irem_cpu.c - 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) 9.72 V33 - 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. - 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. - GAMES: Irem - Hook (1992), R-Type Leo (1992) - 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) 9.73 V53 - 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. Sereial 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), µPD70236 9.74 V60 - 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 : Removed abort() calls from V60 CPU driver. [Brad Oliver] - 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 : Olivier Galibert made some V60 improvements (LDTASK, STTASK, ABSF and some missing \n.). - 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). - 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 : Tomasz Slanina did a workaround for a v60 crash causing ultra-x not to run on some systems. - 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 : Aaron Giles optimized the V60/V70 memory access. - 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 : 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. - GAMES: Survival Arts (Sammy 1993), Drift Out '94 (Visco 1994), Monster Slider (Visco 1997) - PCB: NEC D70616R-16 16Mhz (RadRally), NEC D70615GD-16-S (Drifto94, Vasara2) 9.75 V70 - 0.65 : Aaron Giles optimized the V60/V70 memory access. - 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. - GAMES: Jaleco - Best Bout Boxing (1994), Desert War (1995), Gratia (1996) - PCB: NEC D70632GD-20 (Bbbxing, Desertwr, P47aces), NEC D70632R-20 9314X9 V70 (Titlef) 9.76 V810 - 0.103u1 : Atari Ace fixed out-of-bounds array writes in the V810 core. - 0.84u5 : Preliminary NEC V810 core [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 - SOURCE: cpu\v810\v810.c - GAMES: Mayjinsen (Seta 1994), Mayjinsen 2 (Seta 1994), Joryuu Syougi Kyoushitsu (Visco 1997) - PCB: UPD70732-25 V810 (Mayjinsn), NEC JAPAN D70732GD-25 (C)NEC1991 V810 9651MK007 (Jsk) 10. Data East 10.1 DECO CPU16 - 0.63 : 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: CPU CPU16 - PGA package (Kamikcab), CPU16 M1018 (Liberate), CPU 16 (Kamikcab) 10.2 DECO 45 / HuC6280 - 0.104u1 : Buddabing added save state support to the Hu6280 CPU core. - 0.103u2 : H6280 updates [Rob Bohms]: Added T-flag emulation and fixed read calls in the HuC6280 CPU and sound CPU. - 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. Corrected 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. - 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 : 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). - GAMES: Data East - Robocop (1988), Midnight Resistance (1989), Sly Spy (1989), Boulder Dash (1990) - Source: cpu\h6280\h6280.c - PCB: Hudson Soft Hu6280A (Dragngun), Hu C6280, Hu6280 (Mutantf), Data East custom chip 45 - 80 pins (Funkyjet, Mutantf, Rohga, Tumblep) 10.3 DECO 59 - NOTES: The DECO Custom Chip 59 is a M68000 CPU. - SOURCE: darkseal.c, madmotor.c and vaportra.c - PCB: DECO Custom Chip 59 - PQFP64 (Funkyjet, Mutantf, Rohga, Wizdfire) 10.4 DECO 101 / ARM - 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 and several mode change bugs. Added 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 : 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. - 20th July 2000: Juergen Buchmueller submitted a preliminary ARM cpu core. - NOTES: MAME emulted the ARM 2/3 CPU. TODO: Software interrupts unverified (nothing uses them so far, but they should be ok). Timing - Currently very approximated, nothing relies on proper timing so far. IRQ timing not yet correct (again, nothing is affected by this so far). - SOURCE: cpu\arm\arm.c - GAMES: Captain America (Data East 1991) - PCB: ARM DE101 (Lockload), 101 (Dragngun) 10.5 DECO 102 - 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 - SOURCE: machine\deco102.c - PCB: DE102 (Pktgaldx, Boogwing) 10.6 DECO 156 - 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. - SOURCE: machine\deco156.c - PCB: DE156 - QFP100 (Skullfng), 156 932EV 301801 (Nslasher), 156 (Backfire, Charlien, Osman, Stadhr96) 10.7 ARM7 - 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]. - 0.90u2 : ARM7 CPU core [Steve Ellenoff] - SOURCE: cpu\arm7\arm7.c - PCB: Cirrus Logic CL-PS7500FE-56QC-A 84903-951BD ARM 9843J (ARM710C, QFP240) (Ssfindo) 10.8 DECO ??? - NOTES: The SH-2 CPU is placed on the Game side of the Data East MLC cart. - SOURCE: drivers\deco_mlc.c - PCB: SH-2 CPU, surface scratched - QFP144 (Avengrgs) 10.9 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.c - PCB: C10707-1 (Boomrang, Kamikcab, Oscar, ProSoccer, Sdtennis) 8303 C10707-1 (Shootout), DECO 222 (dec8.c) 11. Nintendo 11.1 N2A03 - 0.102u4 : Rob Bohms fixed one invalid N2A03 opcode. - 0.102u3 : Rob Bohms implemented some N2A03 undocumented opcodes. - 9th September 1999: Juergen Buchmueller added the Nintendo 2A03 CPU to the 6502 core. - NOTES: The N2A03 is a modified 6502 with built-in input ports and two (analog?) outputs. - NOTES: There is also the N2A03 sound CPU. - GAMES: Nintendo - Donkey Kong 3 (1983) PlayChoice-10 games (1983-1991) 11.2 G65C816 - 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 : Nathan Woods added to src/cpu/g65816/g65816op.h a patch which 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 G65C816 DASM error. - 0.90u2 : Nathan Woods cleaned up the code a bit; make some functions static and added step over/out support to the disassembler. - 0.72 : Angelo Salese fixed the BCD conversion when using the Decimal Flag in ADC and SBC. - 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. - SOURCE: cpu\g65816\g65816.c - GAMES: Nintendo Super System games (1992-...) 11.3 SPC700 - 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 and 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 : 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" and fixed SPC700 CMP instruction flags. - 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. - GAMES: Nintendo Super System games (1992-...) - SOURCE: cpu\spc700\spc700.c 11.4 DSP-1 - 0.102u3 : 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.c 11.5 RSP - 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. - 0.104u6 : RSP CPU core [Ville Linde]: Major update to the Aleck64 driver. Still not fully working yet. - NOTES: Nintendo/SGI Reality Signal Processor (RSP) - SOURCE: cpu\rsp\rsp.c - GAMES: Eleven Beat (Hudson 1998), Magical Tetris Challenge (Capcom 1998) 12. Atari 12.1 DEC T11 - 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 : T11 CPU emulator. This is used by the Atari System 2 drivers. [Aaron Giles] - GAMES: Atari Games - Paperboy (1984), 720 Degrees (1986), Championship (1986), Sprint Super Sprint (1986), APB (1987) 12.2 ADSP21xx - 0.104u1 : Buddabing added save state support to the ADSP-21xx CPUs core. - 0.103u3 : Aaron Giles added timer support to the ADSP cores and hooked it up for the DCS games. - 21st March 2003: Brad Oliver fixed a problem in the ADSP-210x CPU core that occurred in MacMAME. 12.21 ADSP2100 - 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. - 6th December 1999: Aaron Giles sent in a preliminary ADSP-2100 core. - NOTES: ADSP2100 is a Analog Device Single Processor. - SOURCE: cpu\adsp2100\adsp2100.c - GAMES: Atari - S.T.U.N. Runner (1989), Hard Drivin' (1988) 12.22 ADSP2101 - SOURCE: cpu\adsp2100\adsp2100.c - GAMES: Atari - Steel Talons (1991), Hard Drivin's Airborne (1993) 12.23 ADSP2104 - 0.77u3 : Aaron Giles added the ADSP2104 variant to 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. - SOURCE: cpu\adsp2100\adsp2100.c - PCB: GauntletLegends 12.24 ADSP2105 - 0.78u4 : 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] - 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] - SOURCE: cpu\adsp2100\adsp2100.c - GAMES: Midway - MK II (1993), MK III (1993), WWF: Wrestlemania (1995), Rampage: World Tour (1997) - PCB: Nbajam: ADSP-2105-KP40 (DSP, 10MHz, QCC68), ADSP-2105 (4 Channel) (Nbahangt) 12.25 ADSP21062 / SHARC - 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 : Ville Linde reworked the SHARC internal ram implementation so that multiple instances of the core work and added data address space. - 0.97u2 : Improvements to the SHARC CPU core [Ville Linde]: Correct IRQ handling and added many more opcodes, including floating-point - 0.97u1 : 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 - SOURCE: cpu\sharc\sharc.c - 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) 12.26 ADSP2112 - PCB: Speed Up (Gaelco 1996) 12.27 ADSP2115 - 0.63 : ADSP-2115 CPU support. [Aaron Giles] - GAMES: Midway - War Gods (1996), 12.28 ADSP2181 - 0.103 : Aaron Giles did some cleanup in the ADSP-21xx core to support program memory more correctly and support execution from multiple banks. - 0.102u5 : Aaron Giles implemented some more functionality of the ADSP-2181 needed for Road Burners. - 0.84 : Aaron Giles added ADSP2181 variant to the ADSP21xx CPU cores. - PCB: ADSP-2181, QFP128 (NBAJamExtreme), ADSP2181 (Batmanfr) 12.3 DSP32C - 0.62 : 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. - SOURCE: cpu\dsp32\dsp32.c - GAMES: Atari - Race Drivin' (1990), Hard Drivin's Airborne (prototype 1993) 12.4 ASAP - 0.37b10 : 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 - GAMES: BeatHead (prototype) (Atari Games 1993) 12.5 Jaguar GPU - 0.79u3 : Nathan Woods adding a missing case to jaguargpu_get_info() - 0.72u1 : Nathan Woods fixed a bug in the NORMI opcode. - 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. - 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) 12.6 Jaguar DSP - 0.72u1 : Nathan Woods changed around one of the #include paths (due to ProjectBuilder on Mac issues). - 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) 13. Toshiba 13.1 TMPZ84C - NOTES: DIP40 - see Z80. - PCB: TMPZ84C00AP (Tkdensho), TMPZ84C011AF (Bakuhatu), TMPZ84C011BF (Mjegolf), TMPZ84C015BF (Hanakanz, Quizchq) 13.11 TMP90C841 - NOTES: Not emulated. - SOURCE: nmk16.c - Looks like the TMP90C841 is a microcontroller from Toshiba compatible with the z80 instruction set and luckily it isn't one of the versions with embedded ROM. - PCB: TMP90C841 (Raphero) 13.12 TMP91P640N - 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. - NOTES: Not emulated. - PCB: TMP91P640N-10 running at 10.7375MHz (Mahjong Tenkaigen - Dynax 1991) 13.13 TLCS-90 - 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 - not emulated. 13.2 TMP8039 - NOTES: See I8039. - PCB: TMP8039P-6 (Megazone) 13.3 TMP8085 - NOTES: See I8085. - PCB: TMP8085AP (Hvoltage, Splndrbt) 13.4 TMP68HC000 - NOTES: DIP64 - see M68000. - PCB: TMP68HC000N (Bbakraid, Rezon), TMP68HC000P (Tetrisp2), TMP68H000P (Mouja), TMP68000 (Kickoff)) 13.41 TMP68301 - NOTES: The Toshiba TMP68301 is a 68HC000 + serial I/O, parallel I/O, 3 timers, address decoder, wait generator, interrupt controller, all integrated in a single chip. - SOURCE: machine\tmp68301.c - GAMES: MS Gundam Ex Revue (Banpresto 1994), Puzzle De Bowling (Nihon System 1999) - PCB: TMP68301AF (Grdians, Kiwame, Niyanpai), TMP68301 (Penbros, Pzlbowl) 13.5 T5182 - NOTES: The Toshiba T5182 is a encrypted custom cpu. - GAMES: Mustache Boy (1987), Dark Mist (Taito 1986), Panic Road (Taito 1986) - SOURCE: drivers\mustache.c for T5182 schematics 14. KONAMI - 0.101u4 : Aaron Giles updated the KONAMI disassembler to new format. - 23rd October 1999: Juergen Buchmueller did some Konami CPU fixes. - 0.36b4 : Ernesto Corvi fixed a Konami CPU bug which caused problems with Parodius. - 24th August 1999: Ernesto Corvi fixed a Konami CPU bug which affected 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 : 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) 15. MIPS CPUs - 0.104u4 : R. Belmont hooked up the R4650 properly in the MIPS recompiler. - 0.104u3 : R. Belmont and Aaron Giles added support for IDT-specific MIPS MUL instruction in the MIPS3 core, recompiler and disassembler. - 0.102u5 : Aaron Giles fixed subtle bug in the MIPS3 recompiler that prevented Tenth Degree from working. - 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.102 : Aaron Giles 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. - 0.101u4 : R. Belmont added missing SC/LL opcodes to the MIPS3 interpreter. smf updated dismips to handle the new disassemblers. - 0.101u3 : Aaron Giles 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 : Aaron Giles 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. - 0.96u3 : Nathan Woods added better debugging support to the MIPS core. - 0.96u2 : Nathan Woods 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). - 0.84u3 : Aaron Giles fixed crash in the MIPS core introduced with the u2 changes. - 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). - 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 : Aaron Giles fixes MIPS core interrupt, added MIPS core MIPS3DRC_FLUSH_PC option for accurate PC handling when debugging and fixed MIPS bug when directly accessing 2-byte values in big endian mode. - 12th April 2004: Aaron Giles fixed a bug in the MIPS CPU core where software interrupts were masked by the global IE flag. - 19th February 2004: smf added preliminary PSX SPU sound emulation and fixed the standalone MIPS disassembler. - 0.76u2 : Aaron Giles fixed MIPS3DRC FP rounding glitches and now actually respecting the global FP rounding mode. - 0.76u1 : Rename driver mips.c to psx.c - 0.72u1 : Nathan Woods removed use of the GCC specific varargs on macros feature in mips.c - 0.63 : MIPS III/IV CPU cores. [Aaron Giles] - 8th December 2002: Aaron Giles added CPU cores for MIPS III/IV architectures - 0.37b3 : 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 x86 dynamic recompiler - 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. - 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 : Aaron Giles fixes the x86 dynamic recompiler for MIPS. 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. - 29th May 2003: Aaron Giles did some minor tweaks and optimizations to the MIPS3 dynarec core. - 0.67 : 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. 15.2 R3000 - 0.101u4 : Aaron Giles updated R3000 core to the new disassembler interfaces and to new format. - 0.78u2 : Change name 'R3000' to 'R3000__big_'. - 0.76u2 : Aaron Giles fixed instruction timings for MULT/DIV - 0.75u1 : Aaron Giles fixed the speedup for R3000 version of Area 51 / Max. Force Duo - 3rd March 2002: Aaron Giles fixed a bug in the swl/swr instructions in the R3000 CPU core. - GAMES: Maximum Force (Atari 1996), Vicious Circle (Atari 1996 prototype), Police Trainer (P&P Marketing 1996) - PCB: IDT 79R3041-25J XB9647P, SDT 79R3041 (Policetr), IDT79R3041 (Sshooter), IDT79R3051-25J 9407C (SuperEagleShot), sdt79r3041 (Area51) 15.21 R3560 - NOTES: Super Real Mahjong P5 uses in MAME the R3000 (big) CPU instead of the R3560. - PCB: R3560 (Srmp5) 15.3 R4300 - PCB: NEC D30200GD-100 VR4300 QFP120 (NeoGeoHyper64), CPU-NUS A (11beat, Mtetrisc) 15.31 R4600 - 0.78u2 : Change name 'R4600' 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. - GAMES: Killer Instinct (Rare 1994), Killer Instinct 2 (Rare 1994) - PCB: SDT79R4600-100MS <50MHz (Kinst) 15.32 IDT R4650 (little) - 0.104u4 : R. Belmont hooked up the R4650 properly in the MIPS recompiler. 15.33 IDT R4650 (big) - 0.104u4 : R. Belmont hooked up the R4650 properly in the MIPS recompiler. - PCB: NKK NR4650-167 QFP208 = R4600-based 64bit RISC CPU (Gp500) 15.34 R4700 - 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: TI TVP3409-170CFN (Wg3dh) 15.4 R5000 - 0.84u2 : Aaron Giles added support for non-integral clock multipliers in the MIPS3 core. - 0.78u2 : Change name 'R5000' to 'R5000__little_' or 'R5000__big_'. - 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.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 (Gauntlet Legends) 15.5 RM7000 - 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.6 QED5271 - 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.7 PSX CPU - 0.102u4 : smf fixes 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. - 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 and dismips.mak - 0.92 : smf improved root counter emulation and dma acknowledge emulation. Changes visible area immediately instead of during video update. Added new board notes from Guru and removed 8.3 restrictions on namco system 11 rom names. - 0.88u4 : smf updated the 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 and R. Belmont, smf fixed several endian issues in the PSX-related drivers. - 0.82u1 : smf fixed another PSX SIO bug. - 0.82 : smf made more improvements to the PSX SIO. - 26th April 2004: smf sent in an update to the PSX hardware improving the SIO ports. - 0.81u6 : smf fixed the GPL12 opcode. This fixes the 'Cool Boarders Arcade Jam' graphics. - 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 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 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. - GAMES: Star Sweep (Axela 1997) - PCB: Sony CXD8530AQ/CXD8530CQ/CXD8661R, SONY CXD8661R L9A0088 WE19960 NNM 9738 (Soulclbr) 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. - SOURCE: vidhrdw\vertigo.c - GAMES: Top Gunner (Exidy 1986) 16.2 AM29000 - 16th May 2004: Philip 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: Philip 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) - SOURCE: drivers\micro3d.c 16.3 AM29116 - NOTES: http://www.bitsavers.org/pdf/amd/_dataSheets/29116_dataSheet_Mar86.pdf - PCB: AM29116DC = 16-bit bipolar microprocessor (Turbosub) 16.4 AM29323 - NOTES: Co-processor for AM29000 - SOURCE: drivers\micro3d.c - PCB: AM29C323 = 32 x 32bit parallel floating point multiplie (Botss, F15se) 17. Hyperstone - 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 corrected Hyperstone Iram mirroring and Tomasz Slanina improved the Hyperstone based drivers. - 0.90 : Pierpaolo Prazzoli fixed 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 : Pierpaolo Prazzoli workaround for excessive RAM use in Hyperstone based games. - 0.88u5 : Brad Oliver fixed Hyperstone compile errors. - 0.88u4 : Pierpaolo Prazzoli added other Hyperstone models to the core. - 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 : Pierpaolo Prazzoli cleanup the hyperstone debugger. - 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 and Pierpaolo Prazzoli Added interrupts-block for delay instructions, fixed get_emu_code_addr, added LDW.S and STW.S instructions and 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 and 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 and some other little fixes. - 7th July 2004: Tomasz Slanina - Fixing bugs in Hyperstone core. - 0.81u6 : 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 and always set the new entry table. - 0.81u4 : 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. - 10th March 2004: Pierpaolo Prazzoli cleaned up the register get/set functions in the Hyperstone CPU core. - 0.80 : Pierpaolo Prazzoli made various Hyperstone core improvements. - 28th February 2004: Pierpaolo Prazzoli sent in some fixes to the Hyperstone CPU core. - 0.76u2 : Mooglyguy and Pierpaolo Prazzoli made some Hyperstone fixes / improvements. - 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 - NOTES: 16bit Hyperstone model. MAME emulates the E1-16T, E1-16XT, E1-16XS and E1-16XSR - SOURCE: cpu\e132xs\e132xs.c - GAMES: Cool Mini, Super Lup Lup Puzzle (1999) and Vamp 1/2 (1999) 17.2 E1-32N - NOTES: 32bit Hyperstone model - SOURCE: cpu\e132xs\e132xs.c - GAMES: Hidden Catch, Land Breaker and Raccoon World 17.3 E1-32XT - 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?) - SOURCE: cpu\e132xs\e132xs.c - GAMES: X-Files (dgPix 1999), Racoon World (Eolith) and others 17.4 GMS30C2116 - NOTES: 16bit Hynix model - SOURCE: cpu\e132xs\e132xs.c - PCB: GMS 30C2116 based on Hyperstone technology (Misncrft) 17.5 GMS30C2216 - NOTES: 16bit Hynix model - SOURCE: cpu\e132xs\e132xs.c 17.6 GMS30C2132 - NOTES: 32bit Hynix model - SOURCE: cpu\e132xs\e132xs.c 17.7 GMS30C2232 - NOTES: 32bit Hynix model - SOURCE: cpu\e132xs\e132xs.c 18. Fujitsu 18.1 MB86233 - 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. - GAMES: SEGA Model 1, 2 & 2A 18.2 MB86235 - 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. - NOTES: Is the Fujitsu MB86235 like the MB86233 a coprocessor? - GAMES: Behind Enemy Lines (Sega 1998) 19. IBM 19.1 PowerPC 4xx/6xx - 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 : 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 and added SRR0 and SRR1 to the debug view. - 0.97u5 : Nathan Woods added hooks to support a future MMU in the PowerPC core. - 0.97u4 : 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). Ville Linde made another fix to the PowerPC counters, reimplementing them from scratch. - 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 and some timebase problems, so LeMans 24 is now working. Nathan Wood made the DRC PowerPC core compilable when HAS_PPC403 is 0. - 0.97u2 : Nathan Woods implemented the MCRXR instruction in the PowerPC core and fixed usage of change_pc(). - 0.97u1 : Ville Linde made additional progress on the PowerPC DRC (faster), support for more exceptions, better support for the PPC internal serial ports. Nathan Woods added debugger support for the decrementer register in the PowerPC core. - 0.96u4 : Nathan Woods implemented in the PowerPC core the SMI input line and added a placeholder for the TLBISYNC input line (doesn't do anything yet). - 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 : Ville Linde added dynamic recompiler for PowerPC cores. Brad Oliver fixed big endian issues in the PPC core. - 0.90u3 : Lawrence Gold fixed some PPC core compiler warnings. 19.11 PPC403 - 0.86 : 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. - SOURCE: cpu\powerpc\ppc.c and ppc404.c (IBM/Motorola PowerPC 4xx/6xx emulator) - PCB: IBM PowerPC 403GA (Gticlub), PPC403GA-JC33C1 (Gradius4, SilentScope1+2) 19.12 PPC602 - 0.91 : Improvements to PPC core / Model 3 driver [Ville Linde]. Some step 2.0 games now show something. - 0.90u2 : Support for PPC602 [Ville Linde] - SOURCE: cpu\powerpc\ppc602.c - PCB: EMPPC602FB66 (Heatof11) 19.13 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 : 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. - 0.89u1 : 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). - SOURCE: cpu\powerpc\ppc603.c - PCB: PowerPC603ev QFP240 HEATSINKED (Harley) 19.14 Konami PowerPC based 3D games - 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 SHARC core and Konami PPC drivers [Ville Linde]. - 0.97u2 : Improvements to the Konami PPC games [Ville Linde]: Fixed Gradius 4 data ROM mapping, PPC/SHARC communications, NVRAM protection on some games and stubbed out LAN interface - 0.97u1 : Progress on the Konami PowerPC drivers [Ville Linde]. Cleaned up and consolidated 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. - 21st August 2004: Ville Linde - Submitted a MAME version of SuperModel's PowerPC core plus the WIP Konami PPC drivers. - GAMES: GTI Club (Konami 1996), Konami ZR107 System, Konami NWK-TR System and Konami Hornet System - SOURCE: machine\konppc.c 19.15 PowerPC MMU - 0.103u1 : Nathan Woods added PowerPC MMU code, but enabled only for MESS due to breakage of the Model 3 games. 19.16 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.103 : Brad Oliver fixed several endian issues with the SE3208 core and the Crystal System driver. - 0.90 : SE3208 cpu core 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) - GAMES: The Crystal of Kings (Brezzasoft 2001), Evolution Soccer (Evoga 2001) 21. Others 21.1 GenSync - 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 (this game has no ROMs). - NOTES: GenSync = Generic Video Synchronization CPU replacement for non-CPU games - GAMES: Pong (Atari 1972) 21.2 CP1610 - 0.79u2 : Nathan Woods fixed the CP1610 core (cpuintrf.c) and the declaration of activecpu_set_irq_callback(). - 0.79u1 : Renamed CPU_CP1600 to CPU_CP1610. - NOTES: General Instrument CP1600 emulator by Frank Palazzolo 21.3 CDP1802 - 23rd August 2000: Peter Trauner added a Cosmac CDP1802 CPU core. 21.4 Fairchild 3850 - NOTES: Juergen Buchmueller: This work is based on Frank Palazzolo's F8 emulation in a standalone Fairchild Channel F emulator and the 'Fairchild F3850 CPU' data sheets. 21.5 KABUKI - 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. - SOURCE: machine\kabuki.c - PCB: KABUKI, BUNRAKU and SHARAKU (Capcom/Mitchell games), DL-030P (Capcom System 2) 21.6 ST-0016 - 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. - 0.81u7 : R. Belmont and Tomasz Slanina added ST-0016 stereo sound to the ST0016 driver. Neratte Chu and Renju Kizoku now have sound. - NOTES: The Seta custom chip ST-0016 is a all in one z80, gfx and sound chip (http://www.slanina.pl/arc.html) - GAMES: Renju Kizoku (Visco 1994), Seta - Mayjinsen(1994), Super Eagle Shot (1994), Neratte Chu (1996) - PCB: SETA ST-0016 TC6187AF JAPAN 9348YAA, QFP208 (Speglsht) 21.7 TS-001-Turbo - 0.88 : Added MSM6295 sound via command tables in Batsugun and Knuckle Bash. - NOTES: The Toaplan secondary cpu TS-001-Turbo is likely an NEC V25+ with some internal rom code and controls the YM2151 and OKI M6295 sound on some boards. - SOURCE: sndhrdw\toaplan2.c - PCB: TS-001-TURBO QFP94 (Fixeight), TS-002-MACH (Dogyuun), TS-004-DASH (Knuckle Bash), TS-007-SPY (Grind Stormer, VFive) 21.8 SCU DSP - 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 : 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] - 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. - SOURCE: machine\scudsp.c, drivers\stv.c 21.9 M7700 - 0.85u2 : R. Belmont added a WIP Mitsu M7700 series CPU core, specifically targeting the M37710. 21.91 M37702 - 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 - SOURCE: sndhrdw\namcoc7x.c - PCB: (printed as C74) System 22 21.92 M37710 - 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 : R. Belmont added another addressing mode for SBCB opcade and fixed MPY to clear the carry flag in M37710. - 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 externally-pulsed timers (Prop Cycle uses this to read the pedals). - 0.86u2 : R. Belmont added 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 and fixed disassembly for RLA. - 0.86u1 : R. Belmont added ROR B, LDB direct indexed, MPY stack relative and DIV direct opcode. - 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 changes [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 and 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 : 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) 21.A MN1020012 - PCB: Panasonic MN1020012A sound CPU QFP128 (Taito GNET-System, Ftimpacta, Gdarius, Raystorm) 22. Sound Communication 22.1 Seibu 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. - SOURCE: sndhrdw\seibu.c - 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) 22.2 Taito TC0140SYT - PCB: TCO140SYT (Sci, Aquajack) - SOURCE: sndhrdw\taitosnd.c 22.3 Konami K054986 - GAMES: Konami - Lethal Enforcers (1992), X-Men (1992), Martial Champion (1993), Polygonet Commanders (1993), Violent Storm (1993) - PCB: 054986A (Viostorm, Xmen) ============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== SOUND 1. MAME Sound Interface 1.1 Streams 1.2 Mixer 1.3 Discrete Components 1.4 Custom 1.5 Analog 1.6 Samples 1.7 ADPCM 1.8 Sound filter 2. DAC (Digital Analog Converter) 2.1 Analog Devices 2.11 AD561 2.12 AD1851 2.13 AD1866 2.14 AD1868 2.2 NEC 2.21 MC1408 2.22 MC14016 2.3 Philips 2.31 TDA1306 2.32 TDA1543 2.33 TDA1545 2.34 DA1311 2.4 Sanyo 2.41 LC7528 2.42 LC7881 2.43 LC78815 2.44 LC78820 2.45 LC78832 2.5 Other 2.51 DAC-08CQ 2.52 SND01 2.53 MB88347 3. Texas Instruments 3.1 SN76477 3.2 SN76489 3.3 SN76496 3.4 TMS36XX 3.5 TMS57002 4. Atari 4.1 TIA 4.2 POKEY 5. Yamaha 5.1 FM Sound Core 5.2 YM2149 5.3 YM2151 5.4 YM2203 5.5 YM2413 5.6 YM2608 5.7 YM2610 5.71 YM2610B 5.8 YM2612 5.9 YM3012 5.10 YM3014 5.11 YM3016 5.12 YM3438 5.13 YM3526 5.14 YM3528 5.15 YM3812 5.16 YMF262 5.17 YMF268-F 5.18 YMF271 5.19 YMF278B 5.20 YMF286-K 5.21 SCSP 5.22 YMZ280B 5.23 YMZ284 5.24 AY8910 5.25 Y8950 5.26 YAC513 5.27 YAC515 5.28 YAC516 5.29 Yamaha DELTA-T ADPCM 6. Bally/Midway/Sente 6.1 Astrocade 6.2 CEM3394 7. Exidy 7.1 Exidy 440 8. Namco 8.1 Namco sound 8.2 Namco 15XX 8.21 Namco 52XX 8.22 Namco 54XX 8.3 Namco CUS30 8.4 Namco 63701X 8.5 Namco System 1 8.6 Namco NA 8.7 C140 8.8 C352 9. OKI 9.1 MSM5205 9.2 MSM5232 9.3 OKI6295 9.4 MSM6585 10. Nintendo 10.1 N2A03 / NES APU 10.2 SNES Custom 12. Konami 12.1 K005289 12.2 K007232 12.3 K051649 12.4 K053260 12.5 K054539 12.6 K054544 13. Sega 13.1 Sega PCM 13.2 RF5C68 13.3 RF5C320 13.4 RF5C400 13.5 MultiPCM 14. Seta 14.1 X1-010 14.2 ST0016 15. Hudson Soft 15.1 HuC6280 16. Philips 16.1 SAA1099 16.2 SAA71111 17. Capcom 17.1 Q-Sound 17.2 CAPCOM-Q1 18. Nanao 18.1 GA20 19. Ensoniq 19.1 ES5503 19.2 ES5505 19.3 ES5506 19.4 ES5510 20. Brian Schmidt Music Technology 20. BSMT2000 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 Midway sound boards 24.11 Chip Squeak Deluxe 24.12 Turbo Chip Squeak 24.13 Sounds Good 24.14 Midway/Williams Audio Boards 24.2 Sega 24.21 G80 Universal sound 24.3 Atari Audio Board II 24.4 Leland 24.5 DMA-driven_DAC 24.51 CAGE 24.52 Midway DCS audio board 24.6 MSX AUDIO 24.7 Amiga custom sound 24.8 Seibu Sound System 24.9 Vegas sound system 24.A Data East Pinball soundboard 25. Wavetable 25.1 ICS2115 25.2 QS1000 25.3 VRender0 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.3 Votrax SC-01 26.4 GI 26.41 SP0250 26.42 SP0256 26.5 Hitachi HD38880 and HD38882 26.6 HC55516 26.7 VLM5030 26.8 SSI263 26.9 NEC 26.91 uPD7756 26.92 UPD7759 26.A Alpha 88 27. Other 27.1 Melody Generator 27.2 Sample Generating CPU 27.3 Noise Generator 27.31 MM5437 27.32 MM5837 27.4 DSP 27.41 Zoom Corp ZSG-2 28. Extern 28.1 Cassette Tape 28.11 Clarion 809 28.2 CD Audio 29. Extra 29.1 TC4066 29.2 MB87078 29.3 BA3121 29.4 SSM2047 29.41 SSM2300 30. Audio Amplifier 30.1 AMD 30.11 AM7201 30.12 AM7203 30.2 Fujitsu 30.21 MB3615 30.22 MB3712 30.23 MB3730 30.24 MB3731 30.25 MB3735 30.26 MB3771 30.27 MB3773 30.28 MB3790 30.3 Hitachi 30.31 HA13001 30.32 HA13118 30.33 HA1366W 30.34 HA17408 30.35 HA17555 30.4 Japan Radio Co. 30.41 JRC3404 30.42 JRC4560 30.43 JRC4556 30.44 JRC4741 30.5 National Semiconductor 30.51 LM324 30.52 LM339 30.53 LM348 30.54 LM358 30.55 LM380 30.56 LM833 30.57 LM383 30.58 LM1203 30.59 LM1877 30.5A LM3900 30.6 NJMxxxx 30.61 NJM2060 30.62 NJM2100 30.63 NJM3414 30.64 NJM5532 30.7 Philips 30.71 TDA1515 30.72 TDA1518 30.73 TDA1519 30.74 TDA1554 30.75 TDA2003 30.76 TDA7240 30.8 Other 30.81 NE5532 30.82 LMC6484 30.85 NTE1423 30.9 NEC 30.91 uPC844 30.92 uPC3403 30.A Sanyo 30.A1 LA4445 30.A2 LA4460 30.A3 LA4705 30.A4 LA6324 30.B Toshiba 30.B1 TA7222 30.B2 TA7630 30.B3 TA7900 30.B4 TA8030 30.B5 TA8139 30.B6 TA8201 30.B7 TA8205 30.B8 TA8210 30.B9 TA8225 30.C TL0xx 30.C1 TL074 30.C2 TL084 31. Potentiometers 31.1 VR 31.2 RV 31.3 DS1267 .................................................................................................................................................................................................................................. S1. MAME Sound Interface - 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.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 : Sound System update [Aaron Giles]. 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. - SOURCE: src\sndintrf.c S1.1 Streams - 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 : Removed extraneous clipping when passing streams from one output to the next input [Aaron Giles] - 0.93u1 : Sound system update fixes [Aaron Giles]. Added streams engine oversamples by averaging now, removed some obsolete code from the streams code and removed obsolete macro in sound/streams.c. - 0.93 : Sound System update [Aaron Giles]. 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. - SOURCE: sound\streams.c S1.2 Mixer - 0.85u2 : Aaron Giles fixed bug that prevented the mixer from loading data unless all channels had been modified. - 0.84u5 : Andrea Mazzoleni fixed the mixer code so it doesn't crash if the OSD layer returns an error. - 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. - 0.37b12 : New filtering code for the audio mixer. It is applied to audio streams generated at a sampling rate different from the sound card's one, improving quality. Some examples with a very audible difference are: fantasy, polyplay, galaxian (the background effect when playing), nibbler, vanguard and all the Seta games. - 19th December 2000: Hiromitsu Shioya added some expanded volume setting functions to the mixer system. - 0.36b15 : Source: Added gain support to mixer.c, through the new MIXERG() macro (extension of MIXER()). Removed the gain filed from AY8910, YM2204, YM2610 structures. S1.3 Discrete Components - 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 : 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.94u2 : Nathan Woods changed wavwrite type from 'void *' type to an opaque pointer 'wav_file *' in src/sound/discrete.c. - 0.94u1 : 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]. Discrete Sound Changes: 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 : Change name 'Discrete_Components' 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). Added op-amp bandpass filtering circuit to sound\namco54.c - 0.90 : Discrete Sound Update [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]. Moved discrete sound code from drivers and put in sndhrdw\. Removed the memory mapping system from the discrete inputs. Modified all current drivers to use new code. 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. 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 a bug in the discrete code. 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.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 : 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, 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 and changed all games using adjusters to use the new system. - Derrick: 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 and 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: New DISCRETE_LOGIC_DFLIPFLOP type, changed the way multichannel output is done; affects some existing drivers, support for up to 16 channels of sound and 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. DISCRETE_RCFILTER - fixed bug that allowed module to use nodes not available to it. New Discrete Modules Added: DISCRETE_CRFILTER - high pass R/C filter, DISCRETE_COUNTER - Presettable up/down counter, external clock with selectable count edge, DISCRETE_COUNTER_FIX - Presettable up/down counter with bult-in frequency generator, DISCRETE_ONESHOT - Fixed it. Added selectable: edge trigger; re-trigger; output active state and DISCRETE_ONESHOTR - Same as DISCRETE_ONESHOT but with reset. R. Belmont fixed discrete sound system crash with -nosound. - 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 : Derrick Renaud and Keith Wilkins make a 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. - 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. - 17th January 2001: Bernd Wiebelt fixed a bug causing static in the discrete sound functions. - 0.37b11 : Keith Wilkins made some support for discrete component sound emulation. Change name 'Custom' to 'Discrete_Components' (Listinfo). - 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. - 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: Driver by Keith Wilkins. See sound\discrete.h for for documentation on usage. S1.4 Custom - 0.93 : 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] - GAMES: galaxian.c games, Dead Eye (Meadows 1978), Galaxian (Namco 1979), Phoenix (Amstar 1980), Sky Base (Omori 1982) S1.5 Analog - 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. S1.6 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. - 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.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.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 : Peter Clare support 16 bit samples in sndhrdw/samples.c - 0.31 : Howie Cohen added support for missing samples to Donkey Kong Jr. - 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 loadaed by the main engine, not the single drivers. This is done via the new field samplenames in the GameDriver structure. Samples can then be retrieved by the drivers in Machine->samples. - GAMES: Namco - Rally X (1980), Galaga (1981), Xevious (1982), Pole Position (1982) - SOURCE: sound\samples.c S1.7 ADPCM - 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, Bad Dudes. - 0.31 : Aaron Giles improved ADPCM support. Jarek Burczynski fixed ADPCM sample support in Rastan. - 0.24 : Fixed problems with ADPCM decoding, so now Kung Fu Master doesn't need separate samples anymore (I 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.8 Sound filter - 0.93 : 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. - 0.34b3 : Francesco Caporali added RC filter emulation to Gyruss. This improves some sound effects, e.g. the force field noise. S2. DAC (Digital Analog Converter) - 0.104u6 : Aaron Giles added 4x oversampling support to the DAC sound system. - 0.80 : Nathan Woods fixed a small typo in the DMADAC interface line in src\sndintrf.c - 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. - 0.30 : 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! - GAMES: Lazer Comand (Meadows 1976), Defender (Williams 1980), The Fairyland Story (Taito 1985) - SOURCE: sound\dac.c S2.1 Analog Devices S2.11 AD561 - PCB: 2 AD561 DAC's (Omegrace) S2.12 AD1851 - PCB: D/A converter, 16bit, 0.008% THD (Nbajam, MK3) S2.13 AD1866 - PCB: AD1866R Analog Devices dual 16-bit audio DAC (GauntletLegends, Nbajamex) S2.14 AD1868 - PCB: The Konami custom chips 054544/054986A have a Analog Devices AD1868R inside. S2.2 NEC S2.21 MC1408 - SOURCE: drivers\zaccaria.c - PCB: 10 bit DAC (Trog), AM1408 (Vsgongf) S2.22 MC14016 - GAMES: Rock Climber (Taito 1981) - SOURCE: drivers\rockclim.c S2.3 Philips S2.34 TDA1311 - PCB: Philips DA1311A DAC SOIC8 (Crysking, Misncrft, PPCar) S2.31 TDA1386 - PCB: Philips TDA1306T Noise Shaping Filter DAC, SOIC24 (CPS3), TDA1386T (Sega Model3, Bel, Harley) S2.32 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.33 TDA1545 - PCB: DA1545A (Xfiles) S2.4 Sanyo S2.41 LC7528 - PCB: LC7528CN (Botss, F15se) S2.42 LC7881 - PCB: Sanyo LC7881 (Luckywld, Gollygho, BackFire, Wcvol95) S2.43 LC78815 - PCB: LC78815 (Ncv1/2) S2.44 LC78820 - PCB: LC78820 (Titlef) S2.45 LC78832 - PCB: Sanyo LC78832M 2-Channel 16-Bit D/A Converter LSI with 2 On-Chip Digital Filters, SOIC20 (NamcoSystem12, GP500) S2.5 Other S2.51 DAC-08CQ - PCB: AMD DAC-08CQ (Cntsteer) S2.52 SND01 - PCB: Konami SND01 715-057P 842200 DIP40 (Finalizr) S2.53 MB88347 - PCB: Fujitsu MB88347 8bit 8 channel D/A converter with OP AMP output buffers, SOIC16 (Gp500) S3. Texas Instruments S3.1 SN76477 - 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 and fixes the 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 : Preliminary SN76477 emulation. [Juergen Buchmueller] - 16th February 2000: Zsolt Vasvari and Juergen Buchmueller added preliminary DAC and SN76477 sound to Bandido. Jürgen also 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. - GAMES: Space Invaders (Midway 1978), Galaxy War (Taito 1979), Ozma Wars (SNK 1979), Sheriff (Nintendo 1980) - PCB: SN76477N (Satansat), TI76477 (Speakres), SN76477 DIP28 (Malzak) S3.2 SN76489 - 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: This sound chip is not emulated. MAME uses the SN76496. - PCB: TI SN76489 PSGs (Chameleo), SN76489AN (Myhero), SN-76489 (Appoooh), 76489 (Chboxing, Sbugger) S3.3 SN76496 - 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 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.95u2 : Sebastien Chevalier updated the SN76496 Write functions (according to the SN76489 document found on SMSPower). - 0.34b3 : Nicola Salmoria rewritten the SN76496 emulator. This fixes speech in Choplifter. - 0.31 : Tatsuyuki Satoh supported 16 bit samples in AY8910 and SN76496. 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 : Tatsuyuki Satoh make changes in SN76496 emulation (added SN76496UpdateB function to emulate 2 chips on 8 channel PCM sound cards) - 0.18 : Nicola finally added some lousy, very inaccurate, noise to the 76496 emulator. This affects Lady Bug and Green Beret. - NOTES: MAME emulates the Texas Instruments SN76489 / SN76496 programmable tone /noise generator. Also known as (or at least compatible with) TMS9919. Noise emulation is not accurate due to lack of documentation. The noise generator uses a shift register with a XOR-feedback network, but the exact layout is unknown. It can be set for either period or white noise. - GAMES: Lady Bug (Universal 1981), Mr Do (Universal 1982), Sindbad Mystery (Sega 1983), Kick Rider (1984), Return of the Invaders (Taito 1985) S3.4 TMS36XX - 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 : 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.c - PCB: TMS3615-25 (Naughtyb) S3.5 TMS57002 - NOTES: The TI TMS57002 is a effects DSP. - GAMES: Konami System GX - Source: machine\konmigx.c - Emulation by Olivier Galibert - PCB: TMS57002DPHA DSP - QFP80 (G-Darius, Raystorm), TMS570020PHA (Le2, RacinForce) S4. Atari S4.1 TIA - 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.97u3 : Wilbert Pol fixed a minor bug in TIA emulation (vidhrdw\tia.c), taken from the MESS code. - 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 */ - 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] - SOURCE: sound\tiasound.c + vidhrdw\tia.c - GAMES: Atari - Tournament Table (1978) S4.2 POKEY - 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 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.93 : Change name 'Pokey' 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 the ALLPOT handlers behavior 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 : Juergen Buchmueller has rewritten the Pokey emulator for greater accuracy. - 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 : Juergen Buchmueller fixed the hangs in Tempest caused by the Pokey protection. - 0.35b2 : Zsolt Vasvari added Centipede (bootleg with AY8910 instead of Pokey). - 0.34b8 : Juergen Buchmueller improved the Pokey emulation. - 0.30 : Aaron Giles make same changes to the POKEY interface. - 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 : 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.Source: 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 : 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). Fixed bug which sometimes caused 6502 games not to run (actually they did run, but interrupts didn't happen). - 0.12 : Sound in Centipede, through Ron Fries' POKEY emulator. - 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. - GAMES: Atari - Tempest (1980), Centipede (1980), Missile Command (1980) S5. Yamaha S5.1 FM Sound Core - 0.99u8 : Fixed pointer of FM channels and FM basic status. - 0.99u7 : Aaron Giles removed gross cur_chip hack from the OPN emulator. - 3rd August 2003: Jarek Burczynski fixed YM2608 initial values (after the reset), fixed flag and irqmask handling (YM2608) and fixed BUFRDY flag handling (YM2608). - 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, corrected 'off by one' error in feedback calculations (when feedback is off), corrected 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 corrected 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 corrected YM2610 ADPCM type A algorithm and tables (verified on real chip) - 11th June 2001: Jarek Burczynski corrected 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. - 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. - 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 : 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 : 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.23 : "And there was MUSIC!". Thanks to Ishmair's 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. - SOURCE: sound\fm.c S5.2 YM2149 - 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. - GAMES: Lode Runner (Irem 1984 - 2x), Gridiron Fight (Tehkan 1985 - 2x), Solomon's Key (Tecmo 1986 - 3x), Shanghai III (Sunsoft 1993) - PCB: Yamaha YM2149F Qty 2 (Slapfigh), WB 5300 (American Poker), WB5300 (Cherry Master), Winbond WF19054 (Bmcbowl, Cherry Master II, Paranoia) S5.3 YM2151 - 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 : 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 : Change name 'YM-2151' to 'YM2151' (Listinfo). - 29th August 2001: Jarek Burczysnki improved the YM2151 LFO emulation. - 0.54 : Jarek Burczynski made fixes to the YM2610 and YM2151 emulation, verified on the real chip. - 20th August 2001: Jarek Burczynski further improved the accuracy of the YM2151 LFO emulation. - 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 : Change 'YM2151a' to 'YM2151'. 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. Jarek Burczynski did improvements to the YM2151 emulator. - 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. Jarek Burczynski improvements to the other YM2151 emulator too. - 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 : New YM2151 emulator [Jarek Burczynski]. Tatsuyuki Satoh improved YM2203 and YM2151 emulator, and DAC interface, with 16 bit samples support. - 0.30 : YM2151 emulation. [Tatsuyuki Satoh] - NOTES: The YM2151 has a CMS speech mode with internal timer. - GAMES: Marble Madness (Atari 1984), Gauntlet (Atari 1985), WEC Le Mans (Konami 1986) - PCB: BS901 DIP24 (RShark, Grdnstrm, Rapidfire), 3569 9142s 827620r (Drgnbowl), KA51 c9235 (28 pin IC - in 24 pin socket (2 legs outside socket on each side !!!)) (Hyperpac, 3in1, Suplup), CA5101 (Finalttr), CA101 (Metlsavr) S5.4 YM2203 - 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. - 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 : Change 'YM-2203' to 'YM2203' (Listinfo). - 27th August 2001: Tatsuyuki Satoh added support for using AY8910 and YM2203 at the same time, making it possible to add correct 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.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.35b2 : 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 : 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.23 : "And there was MUSIC!". Thanks to Ishmair's 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), TM2203 (Empcity, Shootout) S5.5 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 : Source - 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 : A beginning for a YM2413 emulator. It pushes data through the YM3812. [Paul Leaman, Ernesto Corvi] - GAMES: Pang (Mitchell 1989), Buster Bros (Capcom 1989), Rampart (Atari 1990) - PCB: YM2413 DIL18 (Ddenlovr), YM2413 DAC (Btlfield, Timesold), UM3567 9323-AM (Cabaret), UM3567 compatible with YM2413 (Grndtour), 6868A DIP18 (Mjchuuka) S5.6 YM2608 - 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). - 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. - 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. - 0.37b3 : Aaron Giles fixed YM2608 adpcm support. - 22nd May 2000: Aaron Giles fixed some YM2608 core bugs. - 12th April 1999: Tatsuyuki Satoh has updated the FM engine, adding preliminary support for YM-2608. - 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. - GAMES: World Cup '90 (Tecmo 1989), Tail to Nose (V-System Co. 1989), Hatris (Video System Co. 1990) - PCB: YM2608B (Mechatt, Tail2nos) S5.7 YM2610 - 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.70u2 : Jarek Burczynski makes various sound improvements to YM2610, YM2608 and Y8950, inspired by Frits Hilderink (NLMSX emulator author). - 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. - 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, YM2204, YM2610 structures. - 0.35b6 : 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 : 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 : YM2610 emulator [Hiromitsu Shioya]. 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. - SOURCE: sound\2610intf.c - GAMES: Taito - Superman (1988), Rambo III (1989), Sonic Blast Man (1990), Warrior Blade (1991), Slap Shot (1994) S5.71 YM2610B - 7th December 2001: Paul Hampson submitted a modification that allows the YM2610 sound chip to be compiled without needing YM2610B as well. - SOURCE: sound\2610intf.c - Games: Taito - Sonic Blast (1990), Puzzle Bobble (1994), Magical Date (1996) - PCB: YM2610B (Pbobble, Sbm, Silentd, Warriorb) S5.8 YM2612 - 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). - 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. S5.9 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) S5.10 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), U6614 (Multchmp), U6614B (Svolley), KA12 = Compatible to Y3012 or Y3014 (Vamphalf, 3in1semi) S5.11 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) S5.12 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\2612intf.c S5.13 YM3526 - 0.60 : Jarek Burczynski did complete rewrite the YM3812/YM3526/Y8950 emulation, verified on the real chip. - 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. In the DOS version it is disabled because we are using the 100% compatible SoundBlaster OPL chip. [Carl-Henrik Skårstedt] 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) S5.14 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) S5.15 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 : Jarek Burczynski did complete rewrite the YM3812/YM3526/Y8950 emulation, verified on the real chip. - 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.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 Skårstedt] - 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 : YM3812 and YM3526 software emulator. In the DOS version it is disabled because we are using the 100% compatible SoundBlaster OPL chip. [Carl-Henrik Skårstedt] 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] - GAMES: Armed Formation (Nichibutsu 1988 - YM3812), Out Zone (Toaplan 1990 - YM3812), Break Thru (Data East 1986 - YM3526) - PCB: YM 3812 (Ghostb, Gondo), U6612 = YM3812 (Crospang, Multchmp), YM3812 (OPL2) (Ikari3, Prehisle) S5.16 YMF262 - 23rd April 2003: Jarek Burczynski sent in some minor fixes to the YMF262 sound core. - 0.66 : 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). - GAMES: Tecmo System - Deroon DeroDero (1996), Touki Denshou - Angel Eyes (1996) S5.17 YMF268-F - NOTES: MAME uses the YMF278B instead of the YMF268-F. - GAMES: Psikyo - Sol Divide (1997), Taisen Hot Gimmick (1997) S5.18 YMF271 - 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 and note pitch calculation. Added envelope generator, stereo panning and fixed other volume calculations and 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 : 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. - GAMES: Jaleco - Best Bout Boxing (1994), Desert War (1995), P-47 Aces (199x) - PCB: YMF271-F QFP128 (Beastrzr, Rfjet), YMF-271-F (F1superb) S5.19 YMF278B - 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. - 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 : 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). - GAMES: Psikyo - Strikers 1945 (1995), Sengoku Blade (1996), Space Bomber (1998) - PCB: YMF278B-F QFP80 (Bangball, Gunbird), YMF278 (Asurabld) S5.20 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) S5.21 SCSP - 0.97u1 : Ville Linde fixed a minor bug in the SCSP timer handling. - 0.93 : Change name 'YMF292-F_SCSP' to 'SCSP'. - 0.88 : Fixed YMF292-F SCSP undersized array causing stack trashing (thanks to Mame32Plus). - 0.81u9 : ElSemi fixed envelope rates to be correct and added key rate scaling and 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. - 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. - GAMES: Virtua Fighter 2 (1995), Dead or Alive (1996) - SOURCE: sound\scsp.c + scsplfo.c - PCB: 315-5687 QFP128 YMF292-F LAKE (DeadOrAlive, Harley) S5.22 YMZ280B - 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.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 [Aaron Giles] This code is just terrible now compared to when I first wrote it! - 0.81u6 : R. Belmont added Shiriru's YMZ280B sound fix - 12th December 2001: Aaron Giles fixed the crackling sounds in the YMZ280B sound chip emulation. - 0.37b11 : Shiriru submitted some fixes to YMZ280B emulation. - 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 : 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. - GAMES: Cave - Dodonpachi (1997), Dangun Feveron (1998), Uo Poko (1998), ESP Ra.De. (1998) - NOTES: YMZ280B is a 8 Channel PCM/ADPCM decoder - PCB: YMZ280B-F QFP64 (Bbakraid), YMZ280B MONAURAL OUTPUT (Bishi), YMZ 280 B-F (Tetrisp2) S5.23 YMZ284 - 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) S5.24 AY8910 - 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.93u1 : AY8910 no longer attempts to free memory allocated with auto_malloc [Aaron Giles] - 0.93 : Aaron Giles cleaned up the AY8910 interface for the YM chips to access this. Change name 'AY-3-8910' to 'AY8910'. - 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 : Change name 'AY-8910' 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. - 27th August 2001: Tatsuyuki Satoh added support for using AY8910 and YM2203 at the same time, making it possible to add correct sound in City Connection. - 16th August 2001: Zsolt Vasvari fixed AY8910's behaviour with Lock'n'Chase. - 0.36b15 : Source: Added gain support to mixer.c, through the new MIXERG() macro (extension of MIXER()). Removed the gain filed from AY8910, YM2204, YM2610 structures. - 0.35b2 : Zsolt Vasvari added Centipede (bootleg with AY8910 instead of Pokey). - 0.34b2 : Tatsuyuki Satoh updated the FM emulation and the way the 8910 updates its buffers. - 0.33b7 : Nicola 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 : Tatsuyuki Satoh supported 16 bit samples in AY8910 and SN76496. - 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. Nicoal 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 : Nicola changed the 8910 sound chip emulation interface to allow updates more frequent than 60 per second. 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. - 0.20 : Source: Changed 8910intf to support 5 PSGs (Gyruss have them!). 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). - 0.18 : Fixed bug in the 8910 emulation which caused noise to be played in Crazy Kong when you jumped over a barrel. - 0.16 : Source: Nicola wrote some general purpose routines to simplify interface with the AY8910. They are in 8910intf.c. - 0.13 : As promised, I 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, I temporarily switched to using the default one. This affects sound in Crazy Climber, Crazy Kong and Bagman. - 0.05 : By popular demand, reverted to the old AY-3-8910 emulation code. - 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. - NOTES: D-Day (Olympia 1982) uses two GI 8912 -> MAME uses two AY-8910. - 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), 95101 DIP40 (Mjchuuka), AY3-8912 (Quizmstr) S5.25 Y8950 - 0.76u2 : Jarek Burczynski 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. - 0.70u2 : Jarek Burczynski makes various sound improvements to YM2610, YM2608 and Y8950, inspired by Frits Hilderink (NLMSX emulator author). - 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.60 : Jarek Burczynski did complete rewrite the YM3812/YM3526/Y8950 emulation, verified on the real chip. Acho A. Tang made fixes to Y8950 sample playback. - 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) S5.26 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.27 YAC515 - GAMES: GunBarich (Psikyo 2001) - PCB: YAC515-M (Gnbarich) S5.28 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.29 Yamaha DELTA-T ADPCM - 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 - Corrected 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. - 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: sound\ymdeltat.c S6. Bally/Midway/Sente S6.1 Astrocade - 14th April 1999: Juergen Buchmueller fixed a Z80 bug which affected Astrocade emulation (on the MESS side). - 0.34b4 : Frank Palazzolo support emulation of the Astrocade sound chip (Gorf, Wizard of Wor, etc.) - NOTES: Driver by Frank Palazzolo. Portions copied from the Pokey emulator by Ron Fries - SOURCE: sound\astrocde.c - GAMES: Midway - Wizard of Wor (1980), Extra Bases (1980), Gorf (1981) S6.2 CEM3394 - 0.104u3 : Aaron Giles added oversampling and save state support to the CEM3394 emulator. - NOTES: CEM-3394 is an analog synth chip. - GAMES: Bally/Sente with 6x CEM3394 (!) - Trivial Pursuit (1984), Stocker (1984), Mini Golf (1985), Name That Tune (1986), Rescue Raider (1987) - SOURCE: sound\cem3394.c S7. Exidy - 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] - SOURCE: sndhrdw\exidy.c - drivers\exidy.c and \victory.c S7.1 Exidy 440 - 7th September 1999: Aaron Giles made the Exidy 440 sound output much clearer. - 0.36b5 : Aaron Giles improved sound in the Exidy 440 games. - NOTES: The Exidy 440 sound system based on the Retrocade CVSD decoder by Zonn Moore and Neil Bradley. - SOURCE: sndhrdw\exidy440.c - GAMES: Exidy - Crossbow (1983), Cheyenne (1984), Combat (1985), Who Dunit (1988) S8. Namco S8.1 Namco sound - 0.93u1 : Sound system update fixes [Aaron Giles]. As an experiment, removed oversampling from namco.c now that the sound core will do it for you - 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 : Added noise generator to the Namco sound emulation. [Takahiro Nogi] - 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 : Aaron Giles merged the old and new Namco sound subsystem, and added support for stereo output. - 0.30 : Nicola Salmoria and Aaron Giles completely rewritten the Namco waveform audio subsystem. This gets rid of some artefacts in Pac Man (eating a ghost) and Ms Pac Man (eating dots while a fruit is bouncing). Also better emulation of the custom I/O chip in the Namco games. - 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) - SOURCE: sound\namco.c - GAMES: Namco PuckMan (1980), Rally X (1980), Galaga (1981) S8.2 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. - GAMES: Super Pac-Man (1982) - PCB: 1502 Sound Generator (Grobda) S8.21 Namco 52XX - 14th January 2005: Derrick Renaud - Added filtering circuit to sound\namco52.c and converted it to stream based. Also added proper filters to the Namco52 sample player of Bosconian, Galaga, Pole Position and Xevious. Adjusted relative effect volumes per schematics. - 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. - 0.30 : Martin Scragg fixed Bosconian crashing: This was the speech processor being used for a protection check. - NOTES: The Namco 52XX is instance of the Fujitsu MB8852 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) S8.22 Namco 54XX - 0.93 : Derrick Renaud swapped Namco 54xx filters on Port A & C. This fixed Xevious sound. - 0.90u2 : Derrick Renaud added op-amp bandpass filtering circuit to sound\namco54.c and updated the Namco 54xx noise sound and added the R/C values to Bosconian, Galaga, Pole Position and Xevious. - 0.89u5 : Jarek Burczynski improved the Namco 54xx Noise Generator (Type A and B emulated, type C algo still unknown). - 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. - NOTES: The Namco 54XX is instance of the Fujitsu MB8852 MCU and is programmed to act as a noise generator (mostly for explosions). - GAMES: Xevious (1982) S8.3 Namco CUS30 - 0.99u2 : BUT adjusted Namco CUS30 noise frequency. - 0.89 : 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) - SOURCE: sound\namco.c - GAMES: Namco - Dragon Buster (1984), Pac-Land (1984), Metro-Cross (1985), Rolling Thunder (1986), Wonder Momo (1987) S8.4 Namco 63701X - 0.80 : 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.c - 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 : 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 : Many improvements to NamcoNA sound [cync]. - 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 : 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.c - GAMES: Namco - Exvania (1992), Knuckle Heads (1992), Tinkle Pit (1993) S8.7 C140 - 0.95u4 : Mamesick fixed C140 sound routing in the Namco games (namcos2/21.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 : 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 corrected CWAI emulation. - SOURCE: drivers\namcos2.c - The C140 is a 24 Channel Stereo PCM Sample player. - GAMES: Namco - Assault (1988), Dragon Saber (1990), Cosmo Gang the Video (1991) S8.8 C352 - 0.101u5 : The hoot development team made several fixes and improvements to the C352 sound emulator. - 0.101u1 : Many 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 : R. Belmont and Cap adjusted the C352 pitch. - 0.86u3 : R. Belmont fixed the wave start/end/bank handling and added chain mode support (thanks to cap @ VivaNonno for the tips). - 0.86 : R. Belmont remove C352 debug printf that accidentally snuck in. - 0.84u2 : Added a preliminary core for the Namco C352 PCM chip. [R. Belmont] It was originally written by the Zinc authors for Zinc and has been adapted for MAME by me 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 - SOURCE: sound\c352.c - Games: Namco - Tekken 3 (1996), Soul Calibur (1998), Aqua Rush (1999) - PCB: C352 QFP100 (Ncv1/2) S9. OKI S9.1 MSM5205 - 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 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. - 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) S9.2 MSM5232 - 0.57 : 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. - GAMES: Taito - Buggy Challenge (1984), The FairyLand Story (1984) - PCB: MSM5232RS (Fieldday, Onna34ro), MSM5332 (Nycaptor), OKI M5232 (Splndrbt), M3M5232RS (Kouyakyu) S9.3 OKI6295 - 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.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.63 : Change name 'MSM6295' to 'OKI6295'. - 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 : Change name 'OKI6295' 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. - GAMES: Forgotten Worlds (Capcom 1988), Pang (Mitchell 1989), Mad Gear (Capcom 1989), 1941 (Capcom 1990) - PCB: M6295GS (Naname), M6296 (Hotdogst, Tumblep, CycleWarriors), AD-65 QFP44 (Bmcbowl, Grdnstrm), AD65 (Egghunt, Popspops), AR17961 (Chindrag, Paradise, Pwrinst2), K-665-9249 (Powerins), K-665 9546 (blktiger.c), MK28 (Bmcbowl), 6606 QFP44 (Mjchuuka) S9.4 MSM6585 - 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. - GAMES: Grand Cross (Excellent System 1994) - SOURCE: drivers\gcpinbal.c - PCB: M6585 DIP18 (Gcpinbal, Vmetal) S10. Nintendo S10.1 N2A03 / NES APU - 0.104u3 : Aaron Giles added save state support to the NES APU sound chip. - 0.102u5 : Change name 'NES' 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 : Change name 'Nintendo' 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 : 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 - NOTES: Based on the Nofrendo/Nosefart NES N2A03 sound emulation core written by Matthew Conte and redesigned for use in MAME/MESS. - NOTES: There is also the N2A03 CPU !!! - SOURCE: sound\nes_apu.c - GAMES: dkong.c, playch10.c, punchout.c and vsnes.c S10.2 SNES Custom - DRIVER: Based on the original MESS driver by Lee Hammerton - NOTES: 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). - SOURCE: sndhrdw\snes.c - GAMES: nss.c - Nintendo Super System games (The Addams Family, Contra 3, Lethal Weapon(1992)) S12. Konami S12.1 K005289 - 0.93 : Change name '005289' to 'K005289'. - 7th December 1999: CAB and Bryan McPhail fixed some problems with 005289/051649 sound chip emulators. - 0.36b11 : 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) S12.2 K007232 - 0.93 : Change name '007232' 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 : Konami 007232 sound chip emulator. This is used by TMNT [Hiromitsu Shioya]. Howie Cohen added the 007232 to TMNT. - GAMES: Konami - Salamander (1986), Gang Busters (1988), Devastators (1988), TMNT (1989) - SOURCE: chqflag.c - 007232 volume & panning control is almost certainly wrong. S12.3 K051649 - 0.93 : Change name '051649' to 'K051649'. - 30th January 2004: Nathan Woods sent in minor timing enhancements to the 6309 CPU core and 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 : 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 051649 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 - GAMES: Konami - City Bomber (1987), Kitten Kaboodle (1988), Haunted Castle (1988), Hexion (1992) - PCB: 051649(SCC) (Hexion) S12.4 K053260 - 0.93 : Change name '053260' to 'K053260'. - 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 : Konami 053260 sound chip emulation [Ernesto Corvi]. Ernesto Corvi added 053260 emulation in Punk Shot. - GAMES: Konami - Punk Shot (1990), The Simpsons (1991), Sunset Riders (1991) S12.5 K054539 - 0.93 : Change name '054539' to 'K054539'. - 0.69b : R. Belmont fixed bug in K054539 causing bad vocals in Dadandarn. - 1st June 2003: R. Belmont fixed the K054539 sound chip emulation to ignore writes to an active voice's position register, fixing the vocals in Kyukyoku Sentai Dadandarn. - 16th April 2003: Minachun improved the panning and volume adjustment in the K054539 sound core. - 21st January 2003: Acho A. Tang fixed reversed stereo in some games that use the K054539 sound chip. - 0.57 : Olivier Galibert added reverb to the 054539, improving sound in Xexex and Twinbee Yahhoo. - 14th August 2001: Olivier Galibert fixed a bug with 16-bit samples in the K054539 sound chip emulation. - 0.37b12 : Source - 054539 sound emulation, used in X-Men, Xexex, GI Joe. [Olivier Galibert] - 14th February 2001: Olivier Galibert fixed a small bug in the K054539 sound chip emulation that caused a few missing sounds in X-Men. - 29th January 2001: Olivier Galibert wrote 054539 sound chip emulation (thanks to CAB), and now Xexex and X-Men have sound. - NOTES: The eight PCM channels of a K054539 do not have seperate volume controls. - GAMES: Konami - Xexex (1991), X-Men (1992), GI Joe (1992) - PCB: QFP160 (Mmaulers) S12.6 K054544 - PCB: Xmen - 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. S13. Sega S13.1 Sega PCM - 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.94 : SegaPCM now does stream_update on reads/writes for slightly better accuracy [Aaron Giles] - 0.76u1 : Olivier Galibert fixes 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. - 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. - 15th September 2003: Olivier Galibert sent in another fix to the SegaPCM sound chip emulation. - 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.36b2 : Sega PCM and RFC68 sound emulators, used by System 16. [Hiromitsu Shioya] - GAMES: Sega - Enduro Racer (1987), Out Run (1986), Super Hang-On (1992) S13.2 RF5C68 - 0.104u9 : Aaron Giles fixed engine noise looping (sound\rf5c68.c). - 0.96u4 : Aaron Giles rewrote the RF5C68 sound emulator from the specs, improving sound in the System 18/32 games. - 0.89u1 : Aaron Giles fixed a rf5c68 memory access bug. - 8th February 2004: R. Belmont reverted the RF5c68 sound emulation to an earlier version, to fix some tuning problems. - 26th October 2003: Olivier Galibert rewrote the RF5C68 sound chip emulation. - 11th March 2003: R. Belmont fixed a small typo in the RF5C68 sound core - 0.36b2 : Sega PCM and RFC68 sound emulators, used by System 16. [Hiromitsu Shioya] - SOURCE: sound\rf5c68.c - RICOH RF5C68 PCM controller - GAMES: Sega - Shadow Dancer (1989), Alien Storm (1990), Moon Walker (1990) - PCB: 315-5476A (Radr, Sega System32) S13.3 RF5C320 - PCB: CPS2-B RF5C320 CAPCOM DL-3129 (QFP208) - GAMES: Capcom - Street Fighter EX (1996), Rival Schools (1997), Gallop Racer (Tecmo 1996) S13.4 RF5C400 - 0.103 : Some RF5C400 improvements [hoot development team] - 0.102u1 : Ville Linde added very, very preliminary emulation of the Ricoh RF5C400. - SOURCE: sound\rf5c400.c - PCB: RICOH RF5C400 - PQFP (GTIClub, Gradius4) S13.5 MultiPCM - 0.97u5 : Aaron Giles cleaned up bank handling in Sega Multi-PCM sound core. - 0.93 : Change name 'Sega_315-5560' 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 : 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: Sega System 32 Multi/Model 1 custom PCM chip (315-5560) emulation. - SOURCE: sound\multipcm.c - GAMES: Sega - Outrunners (1992), Hard Dunk (1994) S14. Seta S14.1 X1-010 - 0.65 : 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). - DRIVER: Thundercade (Seta 1987) uses a YM2203 + YM3812 instead of X1-010. S14.2 ST0016 - 0.93 : Change name 'ST-0016' to 'ST0016'. - 0.81u7 : R. Belmont and Tomasz Slanina added ST-0016 stereo sound to the ST0016 driver. - 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 custom ST-0016 chip sound emulation by R. Belmont, Tomasz Slanina and David Haywood - GAMES: Mayjinsen (Seta 1994), Neratte Chu (Seta 1996), Renju Kizoku (Visco 1994) - SOURCE: sound\st0016.c - PCB: SETA ST-0016 TC6187AF (Speglsht), SETA ST-0016 TC6210AF (Mayjisn2, Nratechu, ), ST-0016 (Srmp5) S15. Hudson Soft S15.1 HuC6280 - 0.103u2 : H6280 updates [Rob Bohms]: Added T-flag emulation and fixed read calls in the HuC6280 CPU and sound CPU. - 0.67 : 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. - GAMES: Battle Rangers/Bloody Wolf (Data East 1988) - Source: sound\c6280.c S16. Philips S16.1 SAA1099 - 20th July 2000: Manuel Abadia submitted a Philips SAA1099 sound chip emulator. - GAMES: Xor World (Gaelco 1990) - PCB: SAA1099P (Xorworld) S16.2 SAA71111 - PCB: Philips SAA71111AH2 20505650 bP0219, QFP64 (Chameleon 24-in-1) S17. Capcom S17.1 Q-Sound - 0.94u1 : Aaron Giles fixed '3 speaker problem' with Qsound. - 0.93 : Change name 'QSound' 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 : QSound player (preliminary) [CAB, Paul Leaman] - 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. - 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) S17.2 CAPCOM-Q1 - 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). - GAMES: Capcom - Street Fighter EX (1996), Rival Schools (1997), Gallop Racer (Tecmo 1996) - PCB: DSP-16P DL1425 (Sfexp, Sfex2), DL-1425 DSP-16A (C) 92 AT&T - CAPCOM-Q1 QSound Processor (CPS2). S18. Nanao S18.1 GA20 - 0.93 : Sound System update [Aaron Giles]. Acho cod... transmission lost. - 0.89u5 : Stephen Behling fixed a IremGA20 64-bit crash. - 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's 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 : 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. - SOURCE: sound\iremga20.c - GAMES: Irem - Hook (1992), R-Type Leo (1992), In The Hunt (1993) - PCB: Nanao GA20, QFP80 (Gunforc2), Nanao-GA20 (Inthunt, Uccops) S19. Ensoniq S19.1 ES5503 - 0.105u3 : 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. - NOTE: 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. - SOURCE: sound\es5503.c - GAMES: Moonquake (Sente 1987) S19.2 ES5505 - 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.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. - 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. - GAMES: Taito - Arabian Magic (1992), Gunlock (1993) - PCB: Ensoniq OTISR2 5505, DIP48 (Elevactr, Twinqix, Undrfire, Groundfx) S19.3 ES5506 - 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.98u3 : Jarek Burczynski fixed subtle bug in ES5505/6 interpolation code. - 0.37b11 : 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. - GAMES: Time Killers (Strata 1992), Storm Blade (Visco 1996), Monster Slider (Visco 1997) - PCB: OTTOR2 ES5506000102 (Macrossp), ENSONIQ OTTO R2 (Quizmoon) S19.4 ES5510 - SOURCE: sndhrdw\taito_f3.c - PCB: Ensoniq 5510 (Superchs), ESPR5 5510 ESP, DIP48 (Scfinals), 5701000101 (Elevactr, Twinqix), ESPR6 ES5510 (SideBySide2), ENSONIC ESP-R6 (groundfx), EnsoniqESP-R6 (Undrfire) S20. Brian Schmidt Music Technology S20. BSMT2000 - 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 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.57 : BSMT2000 sound emulator. [Aaron Giles] - NOTES: BSMT2000 = Brian Schmidt Music Technology - SOURCE: sound\bsmt2000.c - GAMES: Double Cheese (1993), Battle Toads (Rare 1994), Police Trainer (P&P Marketing 1996) - PCB: BSMT2000 D15505N (Dcheese) S21. Gaelco S21.1 Gaelco GAE1 - 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) S21.2 Gaelco CG1V - 0.93: Change name 'GAELCO_CG-1V' to 'GAELCO_CG1V'. - 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) S22. Sony S22.1 SPU - 0.93 : Change name 'PSX_SPU' to 'SPU'. - 0.84 : 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 and DMA read/writes are limited to the SPU ram. - 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: Preliminary PSXSPU emulation [smf] - NOTES: The Sony Playstation custom chips CXD2922 and CXD2925 are SPU's - SOURCE: sound\psx.c - PCB: Sony CXD2922CQ QFP100 (Rvschool, Sfex, Sfex2), CXD2925Q (Brvblade), CXD2922BQ + CXD2925Q (Konami GV System) S23. Excellent Systems S23.1 ES8712 - 0.95u6 : Quench added new ES8712 sound core, and hooked up sound in Varia Metal. - NOTES: The ES8712 chip from Excellent Systems generates a singel channel ADPCM stream. Samples are currently looped, but whether they should and how, is unknown. Interface to the chip is also not 100% clear. Should there be any status signals signifying busy, end of sample - etc?. Core is heavily borrowed from the OKI M6295 source. - SOURCE: sound\es8712.c - PCB: ES-8712 or es8712 (Vmetal), ES-88712 (Gcpinbal) S24. Sound Systems S24.1 Bally Midway sound boards S24.11 Chip Squeak Deluxe - 0.97u5 : Aaron Giles updated memory maps for the MCR Chip Squeak Deluxe and Sounds Good boards. - NOTES: Chip Squeak Deluxe is a 68000 CPU and DAC sound. - SOURCE: src\sndhrdw\mcr.c - GAMES: Bally Midway - Spy Hunt (1983), Zwackery (1984), Turbo Tag (prototype 1985) S24.12 Turbo Chip Squeak - NOTES: Turbo Chip Squeak is a M6809 CPU and DAC sound. - GAMES: Bally Midway - Demolition Derby (1984), Sarge (1985), Max RPM (1986), Spy Hunter 2 (1987) S24.13 Sounds Good - 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. - SOURCE: src\sndhrdw\mcr.c - GAMES: Bally Midway - Power Drive (1986), Rampage (1986), Star Guards (1987), Xenophobe (1987), Blasted (1988) S24.14 Midway/Williams Audio Boards - 0.101u1 : Aaron Giles added save state support to the Williams sound boards. Cleaned up and fully mapped the Williams sound boards. - SOURCE: sndhrdw\williams.c S24.2 Sega S24.21 G80 Universal sound - PCB: Ixion, Razmataz S24.3 Atari Audio Board II - 0.95u3 : Sebastien Volpe cleaned up error.log messages by correcting sound chip info in atarijsa.c. - 0.89u5 : Fixed Atari Audio Board II (sndhrdw\atarijsa.c) memcpy (from Mame32Plus). - 27th April 2001: Aaron Giles fixed Atari JSA sound boards' CPU and sound chip frequency calculation. - SOURCE: sndhrdw\atarijsa.c Atari Audio Board II - GAMES: Atari - Xybots (1987), Toobin (1988), Batman (1991) - PCB: JSA Audio II PCB (Hydra), External sound board JSA III PCB with YM2151 and 6502A CPU (Roadriot) S24.4 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: sndhrdw\leland.c - Driver by Aaron Giles and Paul Leaman S24.5 DMA-driven_DAC - 19th February 2004: Aaron Giles added support for a DMA-driven DAC sound device. - GAMES: Midway - MK2 (1993), War Gods (1995), Carnevil (1998); Atari - Primal Rage (1994), TMEK (1994), Vapor TRX (1998) S24.51 CAGE - 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 : Aaron Giles fixed frequency computation - it 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: PCB Nr. A053304 (Tmek, Primrage, Metal Maniax) S24.52 Midway DCS audio board - 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.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. - 31st October 2003: Aaron Giles recently submitted an updated DCS sound engine that works 100% for WarGods. - 0.72u2 : Removed DCS Speed-Ups - 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: Theses drivers uses the DCS audio: kinst.c, midtunit.c, midvunit.c, midwunit.c and midxunit.c - SOURCE: sndhrdw\dcs.c - GAMES: DCS2 = Gauntlet Legends, Tenth Degree; DCS3 = Road Burners and San Francisco Rush 2049 S24.6 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.7 Amiga custom sound - 0.105u1 : Aaron Giles rewroted 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. - GAMES: Arcadia Systems games (1987/1988) - SOURCE: sndhrdw\amiga.c S24.8 Seibu Sound System - 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. - SOURCE: sndhrdw\seibu.c S24.9 Vegas sound system - NOTES: Not yet emulated! - SOURCE: - GAMES: Atari/Midway Seattle games S24.A 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.c - PCB: Soundboard 520-5077-00 R (Tattass) S25. Wavetable S25.1 ICS2115 - 0.81u3 : Olivier Galibert added preliminary PGM sound emulation. It has bad sounds now and causes crashes for now. - NOTES: 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). - GAMES: All PGM (Polygame Master) games S25.2 QS1000 - 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) - SOURCE: drivers\eolith.c, ssfindo.c, vamphalf.c - PCB: QDSP QS1000 AdMOS 9638R QFP100 (Ssfindo, Misncrft, Raccoon) Wavetable roms for the QS1000 are: QS1001: QDSP QS1001A Wavetable audio chip, 1M ROM, manufactured by AdMOS (Now LG Semi.), SOP32 (Misncrft, Raccoon) 1008S: HWASS 1008S-1 Wavetable Audio Samples chip, 1MB x 8 MaskROM, SOP32 (Ssfindo) S25.3 VRender0 - 0.93 : Change name 'VRender_Zero' to 'VRender0'. - 0.90u3 : Lawrence Gold fixed Vrender0 sound broken in 0.90u2. - 0.90 : 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) - SOURCE: sound\vrender0.c - GAMES: The Crystal of Kings (Brezzasoft 2001), Evolution Soccer (Evoga 2001) - PCB: MESGraphics VRenderZERO (all-in-one main CPU/graphics/sound, QFP240) (Crysking) 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 addes 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\tms5520.c S26.22 TMS5100 - GAMES: Shooting Gallery (Seaton Grove/Zaccaria 1984) - PCB: TMS5100ANL (Speech) S26.23 TMS5110 - 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.101 : Aaron Giles added save state support to the 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. And fixed signed/unsigned error in the TMS5110 core. - 0.92 : Jarek Burczynski added real noise generator to TMS5110. - 0.37b6 : 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. - GAMES: CVS games, Valadon Automation - Bagman (1982) and Super Bagman (1984) S26.24 TMS5200 - 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.93u1 : Aaron Giles adding missing memset when initializing the TMS5110 and TMS5220 structures; should prevent the crashes. - NOTES: This sound chip isn't emulated in MAME yet. MAME use for Jack Rabbit the TMS5220, so sound isn't accurate. - GAMES: Zaccaria - Money Money (1983), Jack Rabbit (1984) S26.25 TMS5220 - 0.100u4 : Aaron Giles added save state support to the TMS5220 chip. - 0.80 : Nathan Woods added a security margin in the estimate of the delay for speech synthesis ready line to come low (needed for a MESS side bug fix) in sound\tms5220.c - 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 : Rename TMS5520 to TMS5220 (listinfo). - 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 : 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. - GAMES: Looping (Venture Line 1982), Star Wars (Atari 1983), Gauntlet (Atari 1985), Road Blasters (Atari 1987) - PCB: TSP5220 (720, Eprom), TMS5220 (Looping), 5220 (Victory) S26.3 Votrax SC-01 - 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. - 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. - SOURCE: sndhrdw\astrocde.c, gorf.c and gottlieb.c S26.4 GI S26.41 SP0250 - 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 : Change name 'GI_SP0250' to 'SP0250'. - 0.72 : Support for GI SP0250 speech [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 - SOURCE: sound\sp0250.c - Issues: Exact noise algorithm, exact noise pitch (probably ok), exact main frequency (probably ok), exact amplitude decoding (aka mantissa:exponent), 7 bits output mapping and whether the pitch starts counting from 0 or 1. - GAMES: Sega - Astro Blaster (1981), Space Fury (1981), Star Trek (1982), Zektor (1982) - PCB: G-80 Speech Synthesis chip (Astrob), GI SP-0250 S26.42 SP0256 - NOTES: The SP0256-AL2 is a text to speech controller. It synthesizes 'alophones' to somethink like 'speech primitives'. - PCB: GI-SP0256A-AL (Sauro) S26.5 Hitachi HD38880 and HD38882 - NOTES: The Hitachi HD38880 is a speech chip with a HD38882 interface. Got-Ya just sends it a sound command (0-0x1a) - GAMES: Fantasy (SNK 1981), Got-Ya (Game-A-Tron 1981) and Vanguard - PCB: HD38880BP, HD38882PA06 (Fantasy, Thehand) S26.6 HC55516 - 0.101u1 : Aaron Giles added save state support to the HC55516 sound chip. - 0.36b9 : Aaron Giles make several changes and improvements to the TMS34010 emulation and to the Williams games using CVSD sound. - 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 : Aaron Giles rewritten the HC55516 CVSD decoder. This affects Sinistar, Joust 2, Arch Rivals, Pigskin, Tri-Sports, Smash TV, Trog, Narc. - 11th October 1999: Aaron Giles sent in a CVSD/HC55516 rewrite, which sounds a little better. - 0.35b2 : 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 - SOURCE: sound\hc55516.c - GAMES: Mouse Trap (Exidy 1981), Sinistar (Williams 1982), Joust 2 (Williams 1986), Narc (Williams 1988) - PCB: Harris 55564 CVSD (Trog), HC3-55536 (Olibochu), HARISS HCI-55536-5 (Jangou) S26.7 VLM5030 - 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. - 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. - GAMES: Punch-Out!! (Nintendo 1984), Road Fighter (Konami 1984), Yie Ar Kung-Fu (Konami 1985) - SOURCE: sound\vlm5030.c S26.8 SSI263 - PCB: SSI263 Speech Synthesizer - Thayer's Quest (RDI 1984) S26.9 NEC S26.91 uPD7756 - NOTES: The uPD7756 is a speech processor with internal rom and not emulated yet. - PCB: D7756 - Moero Pro Yakyuu Homerun (Jaleco 1988) S26.92 UPD7759 - 0.93 : Chnage name 'uPD7759' to 'UPD7759'. - 0.91u2 : uPD7759 rewrite, fixing sound in System 16 games [Aaron Giles] - 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 : Olivier Galibert rewote the UPD7759 emulator (used by TMNT etc). - 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: Jürgen made the uPD7759 sound a little better and fixed some other things. - 0.35b2 : NEC uPD7759 emulation. This is used by TMNT, System 16, and others. [Juergen Buchmueller, Mike Balfour, Howie Cohen]. uPD7759 support in Golden Axe, Shinobi, Passshtb, Alien Syndrome, Altered Beast. [Howie Cohen] - NOTES: The 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. - SOURCE: sound\upd7759.c - GAMES: Shinobi (Sega 1987), Altered Beast (1988), Combat School (Konami 1988), E-Swat (Sega 1989) - PCB: uPD7758C or D7759C (TMNT), uPD7759C (Rabiolep), D7759C (Tmnt), D7759GC (Elvis), NEC 7759 (Pow) S26.A 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) 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: sndhrdw\segar.c S27.2 Sample Generating CPU - 13th December 2002: Zsolt Vasvari hooked up the background color and sample generating CPU in SF-X. S27.3 Noise Generator S27.31 MM5437 - PCB: National Semiconductor MM5437 pseudo-random noise generator chip, DIP8 (Pairs) S27.32 MM5837 - NOTES: The MM5837 is a noise generator. MAME has the code stolen straight from POKEY.c - GAMES: Bally/Sente SAC-1 system games (balsente.c), Gridlee (Videa 1983) - SOURCE: machine\balsente.c + drivers\gridlee.c - PCB: 5837N (Buckrog/Zoom909) S27.4 DSP S27.41 Zoom Corp ZSG-2 - NOTES: DSP = Digital Signal Processor - PCB: Zoom Corp ZSG-2 sound DSP QFP100 (Taito GNET-System), ZOOM ZSG-2 (Ftimpcta, Gdarius, Raystorm) 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.93 : Change name 'CD_Audio' to 'CD/DA'. - 0.80u3 : R. Belmont added Preliminary CD-ROM support for CHDMAN. CDROM emulation primitives, including Red Book audio playback. - 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.c - GAMES: STV, Konami GV-System 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 TC4066 - NOTES: In Fantasy (SNK 1981) switched the 4066 IC the SN76477 sound output on/off - SOURCE: sndhrdw\ ataridis.c, geebee.c, pleiads.c and rockola.c - PCB: TC4066 (Fantasy), 4066 (Buckrog, Naughtyb, Spaceg, Tripool) S29.2 MB87078 - 0.37b14 : 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. - Source: machine\mb87078.c - PCB: MB87078P, SOIC24 (Gp500, Landgear, Spacedx) S29.3 BA3121 - PCB: Ground Isolation Amplifier/ Noise Eliminator, SOIC8 (Mrdrilr2) S29.4 SSM2047 - PCB: SSM2047 = Sound generator circuit (Botss, F15se) S29.41 SSM2300 - PCB: SSM2300 = Sample and hold amplifier (F15se) S30. Audio Amplifier S30.1 AMD S30.11 AM7201 - PCB: AMD AM7201-35JC (GauntletLegends), AM2701-50JC: Botss, F15se S30.12 AM7203 - PCB: AM7203A (GTIClub) S30.2 Fujitsu S30.21 MB3615 - PCB: Shadfrce, Agress S30.22 MB3712 - PCB: Fujitsu MB3712 5.7 Watt Power AMP, SIP8 (Champbwl, Tripool) S30.23: MB3722 - PCB: Hcrash S30.23 MB3730 - PCB: Rezon, Thepit S30.24 MB3731 - NOTES: The Fujitsu MB3731 is a Audio AMP. - GAMES: Forty-Love (Taito 1984), Fujitsu MB3731 SIP12 (Tokio) S30.25 MB3735 - PCB: 15W Power AMP with dual output used for stereo sounds (Sci, Viofight, Nastar) S30.26 MB3771 - PCB: MB3771F DIP/SOIC8 (Evilston, Gollygho, Gunbird2, Luckywld, S1948II) S30.27 MB3773 - NOTES: The Fujitsu MB3773 is a power supply monitor with watch dog timer. - SOURCE: machine\mb3773.c - PCB: Fujitsu MB3773, DIP8 (Gstriker, VGoalSoccer) S30.28 MB3790 - PCB: Drifto94 S30.3 Hitachi S30.31 HA13001 - PCB: Dual 5.5W Power amplifier IC (Nintendo Super System, NeoGeo Motherboard, Gotcha) S30.32 HA13118 - PCB: 18W audio amplifier (Loderndf, rdft2) S30.33 HA1366W - PCB: Audio amplifier (Hyperspt, Trackfld) S30.34 HA17408 - PCB: Kabukiz S30.35 HA17555 - PCB: Wwjgtin S30.4 Japan Radio Co. S30.41 JRC3404 - PCB: Japan Radio Co. JRC3404 Low Power Quad Op AMP, DIP8 (Champbwl) S30.42 JRC4560 - PCB: Japan Radio Co. JRC4560 Op Amp IC, DIP8 (Ejanhs, Rdft, Viprp1), 4560D (Brvblade, rdft2) S30.43 JRC4556 - PCB: JRC 4556-15268B Audio Support? (Xmen) S30.44 JRC4741 - PCB: JRC4741 (Psikyo PS3-V1 hardware) S30.5 National Semiconductor S30.51 LM324 - PCB: LM324N (Vanvan, Riot, Rockclim, Sichuan2, Spaceg, Youma) S30.52 LM339 - PCB: Embargo S30.53 LM348 - PCB: Carnival S30.54 LM358 - PCB: Low Power Dual Operational Amplifier, SOIC8 (Cbaj, Gp500, Glpracr, Sfex2, Surfplnt), LN358N (Penocup) S30.55 LM380 - PCB: Spaceg, Chameleon 24-in-1 S30.56 LM833 - PCB: Dual Audio Operational Amplifier (CPS2, Rvschool), LM833N = ST Microelectronics LM833N Low Noise Audio Dual Op-Amp, DIP8 (CPS3) S30.57 LM383 - PCB: LM383T is a 5 pin audio Amp (Pntnpuzl) S30.58 LM1203 - NOTES: Video out - DIP28, CRT output/drive PreAMP & Comparitor - PCB: LM1203N (Namco Classics Vol.1/2 (1995/6), Mega Touch 3/5) S30.59 LM1877 - PCB: Astro Invader (Stern 1989) S30.5A LM3900 - PCB: Headoni, Ladyfrog, Spaceg, Victnine S30.6 NJMxxxx S30.61 NJM2060 - PCB: (Beastrzr) S30.62 NJM2100 - PCB: (Raystrom, Taito GNET-System) S30.63 NJM3414 - PCB: 70mA Dual Op Amp, SOIC8 (Gp500, Mrdilr2) S30.64 NJM5532 - PCB: NJM5532 DIP8 (GTIClub) S30.7 Philips S30.71 TDA1515 - PCB: (Kdynastg) S30.72 TDA1518 - PCB: (Titlef) S30.73 TDA1519 - PCB: Philips TDA1519A Dual 6W Power Amplifier (Crysking, Jumppop), Philips 2x 6W Stereo Power AMP SIL9 (PGM system) S30.74 TDA1554 - PCB: tda1554q amplifier (Area51) S30.75 TDA2003 - PCB: Cyclshtg, NYcaptor S30.76 TDA7240 - PCB: TDA7240A is a 20W Bridge Amplifier (Nbajamex, Mk3) S30.8 Other S30.81 NE5532 - NOTES: Philips or Fairchild Dual (Low Noise) Operational Amplifier - PCB: NE5532 DIP8 (Glpracr, Gradius4, Capcom System 2), NE5532AN (Sscope2), NJM5532 (Gticlub) S30.82 LMC6484 - PCB: CMOS Quad Rail-to-Rail Input and Output Operational Amplifier (Nbajamex, Harley) S30.85 NTE1423 - PCB: NTE1423 5.7W (SIP8) Power Amplifier (Ghosthunt, Tutstomb) S30.9 NEC S30.91 uPC844 - PCB: NEC uPC844C Quad High Speed Wide Band Operational Amplifier, DIP14 (PGM-System, Titlef) S30.92 uPC3403 - PCB: NEC uPC3403 High Performance Quad Operational Amplifier, DIP14 (Vmetal), MC3403 (Gunforce, Pairs), 3403 (Pairs) S30.A Sanyo S30.A1 LA4445 - PCB: (Rockrage) S30.A2 LA4460 - PCB: (Baraduke, Bruckrog, Bonkadv, SnowBros) S30.A3 LA4705 - PCB: Sanyo LA4705 15W 2-channel Power Amp, SIP18 (MrDriller2, NamcoSystem12) S30.A4 LA6324 - NOTES: LA6324N = High-performance quad operational amplifier, DIP14 - PCB: Fantasy S30.B Toshiba S30.B1 TA7222 - PCB: 5.8 Watt Audio Power Amplifier, SIP10 (Headoni, Vmetal) S30.B2 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.c, flstory.c, msisaac.c, nycaptor.c, buggychl.c S30.B3 TA7900 - PCB: Toshiba? TA7900S (Gberet) S30.B4 TA8030 - PCB: TA8030S - WatchDog Timer, might be controlled by JP1 ??? (Dfeveron) S30.B5 TA8139 - PCB: TA8139S (11beat, Mtetrisc) S30.B6 TA8201 - PCB: 11beat, Mtetrisc S30.B7 TA8205 - PCB: TA8205AH (Nslasher), TA8205 (Nitrobal, Schmeisr) S30.B8 TA8210 - NOTES: TA8210 is a Audio AMP. - GAMES: Seta SSV system S30.B9 TA8225 - PCB: Toshiba TA8225L 45W BTL Audio Amplifier, ZIP17 (Capcom System 2) S30.C TL0xx S30.C1 TL074 - PCB: JFET Lo Noise Quad OP Amp (Sci, Goundfx, Nastar, Viofight) S30.C2 TL084 -PCB: Buckrog, Flytiger, Gollygho, Luckywld, Sega-System16B S31. Potentiometers S31.1 VR - NOTES: Potentiometer for volume of sounds - 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 1. Motorola 1.1 M68705 1.11 M68705 MCU rom 1.2 MC68HC11 2. Texas Instruments 2.1 TMS32010 2.2 TMS32015 2.3 TMS32020 3. Intel 3.1 I8742 3.2 I8748 3.3 I8751 3.4 I8752 3.5 I8051 4. Konami 4.1 051550 4.2 051733 4.3 052591 4.4 052295 4.5 052627 4.6 Konami ESC 5. Namco 5.1 Cxx 5.2 C68 5.3 C69 5.4 C70 5.5 C71 5.6 C74 5.7 C75 5.8 C76 6. Nichibutsu 6.1 1411M1 6.2 1412M2 6.3 1413M3 6.4 1414M4 6.5 NSC8105 7. Atari 7.1 Slapstik 7.2 SLOOP 8. Fujitsu 8.1 MB8841 8.2 MB8851 8.3 MB8852 9. COP420 10. Microchip PIC-MCU 10.1 PIC16C54 10.2 PIC16C55 10.3 PIC16C57 11. DALLAS 11.1 DS1204 11.2 DS5002FP 12. Alpha Electronics 12.1 8201 12.2 8301 12.3 8302 12.4 8303 12.5 8304 12.6 8333 12.7 8404 12.8 8511 12.9 8713 13. NEC 13.1 8741 13.2 8749 14. Mitsubishi M50747 15. Philips 87c52 16. Signetics 87c751 17. Programmable Logic Devices (PLDs) 17.1 PAL 17.2 GAL 17.3 CPLD 17.4 FPGA 17.5 Others 18. Security 18.1 Epoxy block 18.2 Toshiba T5324 18.3 CAT702 18.4 Playchoice security chip 18.5 Nintendo 18.51 Aleck64 18.52 Nintendo VS System 19. Other 19.1 Opcode encryption 19.2 Sega encryption 19.3 ASIC 19.4 Address lines scrambling 19.5 C-Chip 19.6 Dongle 19.7 Random Number Generator 19.8 Program Protection .................................................................................................................................................................................................................................. P1. Motorola P1.1 M68705 - 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 M68705 (MC68705P5) 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) P1.11 M68705 MCU rom - NOTES: The rom for the M68705 MCU is protected (2048 bytes, 28 pins - Motorola). - PCB: Motorola 15-00011-01 DA68235 - labeled 8909 (Fieldday), DA68305 (Flstory) P1.2 MC68HC11 - 0.91 : Motorola MC68HC11 CPU core [Ville Linde] - NOTES: Microcontroller with 64k internal ROM - PCB: MC68HC11M0 QFP80 (Landgear, Sidebs, Sidebs2) P2. Texas Instruments P2.1 TMS32010 - 0.80u2 : Quench fixed some problems with the 32010 update. Cycle counts for invalid opcodes 7F1E and 7F1F are now 0. - 2nd March 2004: Quench added internal data memory map to the TMS32010 CPU core and fixed overflow in the ADDH instruction, and adjusted the Twin Cobra / Wardner, Toaplan1 and Hard Drivin' drivers accordingly. - 0.78u4 : 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] - 30th May 2003: Aaron Giles fixed the BIO pin handling in the TMS32010 CPU core. - 0.62 : Change name '320C10' to 'TMS32010'. - 0.37b9 : The CCPU and TMS32C010 cores are now full 16-bit cores. Appropriate changes to the drivers that use them have already been made. This fixes the input ports on the Cinematronics games, and gameplay in several Toaplan games. [Aaron Giles] - 0.35b3 : TMS32010 emulator [Quench]. 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) P2.2 TMS32015 - NOTES: The TMS32015 controlls palette, sounds and inputs and has a built-in ROM. - GAMES: TMS320E15 (AmeriDarts), TMS320P15FNL (Hdrivair) P2.3 TMS32020 - 0.78u4 : 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.c P3. Intel P3.1 I8742 - NOTES: Size: 2048 bytes - SOURCE: cpu\i8x41\i8x41.h - PCB: i8742 (Drtoppel), D8742 (Tnzs), M-CHIP B44-8742.MCU (Chukatai), M-CHIP 40-pin (Arknoid2) P3.2 I8748 - NOTES: MAME uses for 'Sai Yu Gou Ma Roku' (Japanese version of China Gate) a I8048. - PCB: i8748H (Chinagat), 8751/8748 (Csilver), D8748D (Gigasm2b), 8748 (Sstingry) P3.3 I8751 - 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 corrected 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). Source - 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. - NOTES: All dec.8 games use a 6502 for sound (some are encrypted), all games except Cobracom use an Intel 8751 for protection & coinage. For these games the coinage dip switch is not currently supported, they are fixed at 1 coin 1 credit. - SOURCE: - GAMES: Data East - Side Pocket (1986), Fire Trap (1986), Karnov (1987), Capcom - F1 Dream (1988) - PCB: MPU 8751 (Ghostb, Gondo), C8751H (Blktiger, Srdarwin), D8751H (Airduel, Sf1), i8751 (Garyoret, Wndrplnt) P3.4 I8752 - SOURCE: - PCB: Intel P8752 MCU (Finalttr) P3.5 I8051 - 0.89u1 : Aaron Giles fixed the I8051 cpu core. 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 : 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: Philip 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: Philip 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. - SOURCE: cpu\i8051\i8051.h - PCB: SC80C31BCCN40 MCU = 8051 family (Botss, F15se) P4. Komami P4.1 051550 - Notes: The Coin Counters are handled by the Konami Custom 051550 - PCB: Citybomb, Ultraman, Kittenk, Tricktrp P4.2 051733 - 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: The protection of the Konami 051733 is not fully understood. The enemies in Chequered Flag might not appear correctly. - GAMES: Konami - Fast Lane (1987), Blades of Steel (1987), Chequered Flag (1988) P4.3 052591 - 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. - GAMES: Konami - Thunder Cross (1988), Hexion (1992) P4.4 052295 - PCB: 052295 = PAL16L8 (Citybomb) P4.5 052627 - PCB: 052627 = PAL16L8 (Kittenk) P4.6 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 P5. Namco P5.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. P5.2 C68 - 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 P5.3 C69 - 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 P5.4 C70 - 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 P5.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) P5.6 C74 - 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. - NOTES: The Mitsubishi M37702 (printed as C74) is a sound MCU with mask ROM - SOURCE: sndhrdw\namcoc7x.c - PCB: (printed as C74) System 22 P5.7 C75 - SOURCE: sndhrdw\namcoc7x.c - PCB: NAMCO 75 (M37702 MCU) (Speedrcr, NamcoFL-System), NB-1 and NB-2 P5.8 C76 - SOURCE: sndhrdw\namcoc7x.c - PCB: NamcoSystem11 P6. Nichibutsu P6.1 1411M1 - GAMES: Nichibutsu - Pastel Gal (1985) P6.2 1412M2 - NOTES: The 1412M2 is a protection chip (not emulated by MAME yet), used by the sound CPU - in Mighty Guy a Z80 CPU. - GAMES: Nichibutsu - Mighty Guy (1986), Amazon (1986), Sei Senshi Amatelass (1986) P6.3 1413M3 - 0.86u2: Takahiro Nogi added some process to the 1413M3 custom chip. And adjusted the interrupt of drivers using machine/nb1413.c/h. So, some titles are broken. - NOTES: This custom chip is use by many Mahjong games (drivers\nbmj8688.c) - SOURCE: machine\nb1413m3.h - driver by Takahiro Nogi P6.4 1414M4 - GAMES: Nichibutsu - Terra Force (1987) P6.5 NSC8105 - 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) - GAMES: Nichibutsu - Frisky Tom (1981), Radical Radial (1982), Seicross (1984) - PCB: NSC81050-102 8127 E37 (Seicross) P7. Atari P7.1 Slapstik - 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). - 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. - 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. - 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. - SOURCE: machine\slapstic.c P7.2 SLOOP - 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 P8. Fujitsu P8.1 MB8841 - NOTES: The Fujitsu MB8841 is a 4-bit microprocessor. It generates a protection NMI in games after the startup. The custom CPU also controls the video flip control line. MAME patched this protection. - GAMES: Sun Electronics - Route 16 (1981), Kangaroo (1982), Arabian (1983), Fly-Boy ??? (Kaneko 1982) P8.2 MB8851 - NOTES: 4-bit MCU (DIP42) - SOURCE: machine\namcoio.c P8.3 MB8852 - NOTES: 4-bit MCU (DIP28) - SOURCE: machine\namcoio.c - GAMES: Namco Bosconian (1981) and Pole Position (1982) P9. COP420 - 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. - NOTES: The COP420 is a microcontroller and manages CPU communnication. - Games : Looping (Venture Line 1982), Thayer's Quest (1984) P10. Microchip PIC-MCU - 14th February 2004: Quench updated the PIC16C5x CPU core to support internal memory maps, and he updated the relevant drivers to use the functionality as well. - 0.78u4 : 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 : Aaron Giles 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. - 0.77u3 : Aaron Giles 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. - 0.69b : Quench various fixes to the PIC16C5x core. - 31st May 2003: Quench sent in various fixes to the PIC16C5x core and added sound to Big Twin. - 0.69 : Fixed a problem with missing 'returns' in the PIC CPU core [Bryan McPhail] - 17th May 2003: Bryan McPhail fixed a small bug in the PIC CPU core where it didn't return a value properly. - 0.67 : PIC16C5x CPU core. [Quench] - 5th April 2003: Quench sent in a PIC16C5x CPU core and added sound emulation to Dragon Master using it. - SOURCE: cpu\pic16c5x\pic16c5x.c P10.1 PIC16C54 - 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) - SOURCE: drivers\itech32.c - 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), P10.2 PIC16C55 - GAMES: Dragon Master (Unico 1994) - PCB: PIC16C55 (Drgnmst), PIC16C55 SND.MCU (Tumblep - bootleg set) P10.3 PIC16C57 - 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 - GAMES: Tengai / Sengoku Blade (Psikyo 1996), World Beach Volley (Playmark 1995), Big Twin (Playmark 1995), Strikers 1945 (Psikyo 1995), Kick Goal (TCH 1995), Mortal Kombat 3 (Midway 1994), WWF: Wrestlemania (Midway 1995) - SOURCE: cpu\pic16c5x\pic16c5x.c - PCB: PIC16C57-X T/P (MK3, Wwfmania), PIC16C57C (Gauntleg) P11. DALLAS P11.1 DS1204 - PCB: Data Key - MegaTouch (Merit) P11.2 DS5002FP - 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) - PCB: DS5002 (Touchgo) P12. Alpha Electronics P12.1 8201 - 0.104u8 : Tatsuyuki Satoh added emulation of the Alpha 8201/8301 MCU, and connected it to champbbj, champbb2, talbot, shougi, shougi2 and exctsccr. - NOTES: Shougi (Alpha 198x) use a custom MCU ALPHA 8201 (DIP42). It's connected to the RAM that is shared with the first CPU. P12.2 8301 - 0.104u8 : Tatsuyuki Satoh added emulation of the Alpha 8201/8301 MCU, and connected it to champbbj, champbb2, talbot, shougi, shougi2 and exctsccr. P12.3 8302 - 12th September 2004: Pierpaolo Prazzoli added Exciting Soccer II protection (still at least one issue because you can't control the player). - NOTES: 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.c P12.4 8303 - 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 (Bullfgtr), ALPHA-8303 (Splndrbt), 8303 (Liberate), unknown 8303 (Shootout), ProSoccer, KamikazeCabbie, BoomerRang P12.5 8304 - PCB: ALPHA-8304 (Hvoltage) P12.6 8333 - PCB: 8333 = SY 6502A (Liberate) P12.7 8404 - SOURCE: equites.c - The 8303/8404 have a lack of tech info. All MCU results are wild guesses. - PCB: Hvoltage says ALPHA-8304 !!! P12.8 8511 - PCB: ALPHA-8511 (Skysoldr, TimeSold, Jongbou) P12.9 8713 - PCB: ALPHA-8713 (Goldmedl) P13. NEC P13.1 8741 - 0.104u9: Tatsuyuki Sato fixed Joshi Volleyball and Great Swordsman, which was broken in an earlier update. - 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) - SOURCE: machine\tait8741.c - GAMES: Taito - Joshi Volleyball (1983), Great Swordsman (1984), Gladiator (1986) P13.2 8749 - NOTES: The NEC D8749HC is a protection MCU. - SOURCE: 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), NEC D8749 (raiga), D8749 (Chinagat) P14. Mitsubishi M50747 - NOTES: Single-chip 8-bit CMOS Microcontroller (6502 CORE), 8192 ROM, 256 RAM, SDIP64 - PCB: M50747 (Daireika, Kamumei, Mjzoomin) P15. Philips 87c52 - 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. - 12th November 2003: David Haywood emulated the protection (87c52) in Hatch Catch, so it's now fully playable with sound. - GAMES: SemiCom - Hatch Catch (1995), Hyper Pacman (1995), More More Plus (199?), Cookie and Bibi 2 (1996) - PCB: 87c52ebpn Philips (Hyperpac), P87C52EBPN (BCStory), 87C52 (Htchctch) P16. Signetics 87c751 - NOTES: The 87C751 is a 8051 based MCU (DIP24) with 2kx8 OTP EPROM and 64kx8 SRAM. In Super Slam is the MCU for sound simulated. - SOURCE: drivers\sslam.c P17. Programmable Logic Devices (PLDs) P17.1 PAL PAL = Programmable Array Logic - 0.105u4 : 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. PAL10H8 Suprglob PAL10L8 Gaplus, Maniach PAL12L6 Cchasm, ZeroTarget, PAL12H6 (Archrivl) PAL12L10 Metlhawk, Cosmo PAL14L4 Citycon PAL16B4 Ssozumo PAL16H2 Seicross PAL16L8 PAL168ACN (Ddragon), PAL16L8BCN, MMI PAL16L8ACN, AMD AMPAL16L8APC, TIBPAL16L8 (20 pins) The PAL16L8ACN encrypted the data in roms. An encryption table can you find in drivers\galaxian.c (-> init_checkman) PAL16R4 Chplft, Crzrally PAL16R6 Aso, Crzrally, Chopper PAL16R8 Captaven, Skullxbo PALCE16V8 PALCE16V8H (Oisipuzl), PLCE16V8 (Spacedx), PAL20L8BCN (NamcoFL-System) PAL20L8 PAL20L8BCNS (Darius2), Archrivl, Cadash PAL20L10 PAL20X10 (Trisport), PAL20X10 (Archrivl), Luckywld, Elvactr PAL20V8 Luckywld PALCE20V8 PALCE20V8H DIP24 (Rfjet), PLCE20V8 (Spacedx) PALCE22V10 Propcycl, Alpinerc EPL10P8 (Legend), EPLIOP8BP (Stratof) EPL12P8 EPL12P6A (Airwolf), EPL12P6 (Legend) EPL16P4 Ricoh EPL16RP4BP (F1GP) EPL16P8 Ricoh EPL16P8BP (Ashnojoe, Spinlbrk), EPLIOP8BP (Stratof) ATF16V8 Atmel ATF16V8-10PC DIP20 (Crysking, Metmqstr) 18CV8 18CV8PC (Mgcrystl), AMI 18CV8 (Riot), 18CV8 (Sailormn), HY18CV8S (Rebus), ICT PEEL 18CV8P DIP20 stamped 'SXX005-5' or 'SXX011B' (Bmcbowl, Rfjet) 22CV10 Hayaosi1, BoogieWings Signetics PLS153 PLS153A (Smathtv), PLS 153N (Xenophob) PLHS18P8 Othunder, Gollygho, Airco22b NAMCO SYS87B-1 = SYS87B-2B = PAL16L8 SYS21C1 = SYS21PC1 = PAL20L8 SYS87B-3 = PAL20L10 PCB: Airco22b, Gollygho Incredible Technologies ITVS.PLD PAL16L8 (GTG, Stratab) ITVS-2 PAL??? (Rimrockn - Lower board) ITVS-3 PAL??? (Hstennis, Peggle, Neckneck) ITVS-4 PAL??? (Rimrockn - Sound board) ITVS-5 PAL16L8 (Ninclown, Pokrdice, Slikshot) ITVS-7 20 pins TIBPAL 16R4-15CN (Timekill) ITVS-8 20 pins TIBPAL 16R4-15CN (Timekill) ITVS-9 24 pins GAL20V8A (Timekill) ITVS-10 20 pins TIBPAL 16L8-15CN (Timekill) ITVS-11A 20 pins TIBPAL 16L8-15CN (Timekill) ITVS-12 (Pairs) ITVS-13 (Pairs) ITVS-14 (Pairs) ITVS-15 (Pairs) ITVS-16A (Pairs) P17.2 GAL GAL = Gate Array Logic GAL16V8 PLCC-20, DIL-20 or DIP20, GAL16V8A (Finalb, Pitfight), GAL16V8B (Gogomile), GAL16V8D stamped 'MCTL01'(Gnbarich, Rfjet) GAL20V8 PLCC-28 or DIL-24 (Timekill (GAL20V8A 15LP L244D02), MK3 (GAL20V8B)) GAL22V10 PLCC-28 or DIL-24 GAL6001 GuardiansOfTheHood GAL6001 - 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. P17.3 CPLD 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, GauntletLegends, 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) Cypress CY37064 CPLD KEYCUS, PLCC44, labelled KC048 or KC053 (Aquarush, MrDriller) CY37128 CY37128VP160 CPLD TQFP160 (MrDriller) Lattice pLSI 1016 LATTICE pLSI1016 PLCC44 (suprnova.c), Taiwan Chess Legend pLSI 1032 pLSI1032 (Stagger), Lattice pLSI 1032-60LJ (Hyperpac), PLCI 1032 (Newfant) pLSI 2032 Lattice pLSI 2032-80LJ (Behind Enemy Lines, Jchan) 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, SilentScope2) XC9572 XILINX CPLD (TQFP100) (GauntletLegends) XC95108 XILINX (PQFP100, Flash Complex PLD) (Bbakraid, Gunpey) XC95144 XILINX (TQFP100, Flash Complex PLD) (Bbakraid) P17.4 FPGA FPGA = Field Programmable Gate Array (document: xc3042.pdf) Altera EPF10K10QC208 ALTERA EPF10K10QC208-4 FPGA NeoGeoHyper64 EPF6016TC144 ALTERA EPF6016TC144-2 FLEX 6000 PLD TQFP144 GauntletLegends Actel A128oxc Actel A128oxc pq16oc, square smd (Speedup) 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) (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) XCS10XL XILINX (FPGA, QFP100, Konami no. 4C) (SilentScope2) XCS236A XILINX XCZ236A-25 (Cheesech) P17.5 Others 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 Quicklogic QL2003-XPL84C 0003BA PLD (PLCC84) 1945iii, 3in1semi, Pclubys, Ssfindo, Suplup, Vamphalf QL2007-XPQ208C Bcstry P18. Security P18.1 Epoxy block - 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) - SOURCE (shangkid.c): The BBX coprocessor is burried in an epoxy block. It contains: A surface-mounted Z80 (TMPZ84C00P), LS245 logic IC and the battery backed ram chip Fujitsu MB8464. 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. P18.2 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) P18.3 CAT702 - NOTES: The CAT702 is a ZN security chip. It's a DIP20 chip with 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 - SOURCE: machine\znsec.c - PCB: CAT702 103090-ET02 = Raizing (Beastrzr), CAT702 103090-MG03 (Cbaj), CAT702 CP06 = Capcom (Rvschool), TT10 or TT16 (Taito GENT-System) P18.4 Playchoice security chip - NOTES: The 16 bytes security data is stored on prom RP5H01. - SOURCE: drivers\playch10.c 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) P18.5 Nintendo P18.51 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.c + vidhrdw\n64.c P18.52 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 P19. Other P19.1 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.2 Sega encryption - 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 : Nicola Salmoria cleaned up sega Z80 encryption code. - 0.34b1 : Nicola Salmoria moved the Sega encryption code used by Flicky, Future Spy, and many others, to machine/segacrpt.c. - 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.c P19.3 ASIC - SOURCE: machine\pgmprot.c ASIC3 Oriental Legend (1997 IGS) ASIC022 Dragon World 3 (1998 IGS) ASIC025 Dragon World 3 (1998 IGS) ASIC28 Knights of Valour (1999 IGS) P19.4 Address lines scrambling - SOURCE: drivers\afega.c P19.5 C-Chip - 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. - 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. - 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. - 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. - NOTES: The Controller or "Command Chip" is an encrypted Z80 which 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. - SOURCE: machine\chip.c - PCB: Taito TC0030CMD (Volfield, Megab), TC00300MD (Opwolf) 19.6 Dongle - 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. P19.7 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.8 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. ============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== INPUT/OUTPUT 1. I/O chips 2. RIOT 2.1 6532 2.2 8155 3. PIA 3.1 MC6821 3.2 C148 4. VIA 4.1 6522 4.2 6526 5. CIA 5.1 6526 5.2 8510 5.21 8520 5.22 8530 6. UART 6.1 8251 6.2 MC68681 6.3 MB89371 6.4 D7001 7. Interrupt controller 7.1 8259 7.2 71059 8. DMA controller 8.1 MC6844 8.2 uPD8257 9. Interfaces 9.1 8255 PPI 9.2 RP5H01 9.3 RS232 9.31 MC6850 9.32 DS1228 9.33 ICL232CPE 9.4 2651 9.5 C139 9.6 I/O Boards 9.61 Super Sound I/O 10. Other 10.1 NEC 10.11 8243 10.12 8250 10.13 8279 10.2 AM2950 10.3 TE7750 10.4 Toshiba 82265 10.5 ADC 10.6 Input/Coins/Leds 10.61 Discrete Control 10.611 Flasher 10.612 Lamp Sequencer 10.613 Lamp Driver 10.62 PC3092 10.63 PAL16r6 10.64 Analog pedal 10.65 TC4584 10.66 NEC uPD4701 10.67 TD62003 10.68 TD62064 10.7 Connectors 10.71 G6A-474P 10.8 Touchscreen 10.81 MicroTouch Systems 10.82 Touchmaster 11. Cassette / Cartridge / Floppy / Harddisk / CD 11.1 Cassette System 11.11 DECO Cassette System 11.12 Multi Amenity Cassette System (MACS) 11.2 Cartridge 11.21 Max-A-Flex 11.22 PlayChoice-10 11.23 Sega MegaTech 11.24 Sega MegaPlay 11.25 SNK NeoGeo 11.26 Nintendo Super System (NSS) 11.3 Floppy disk 11.31 Floppy disk types 11.4 Hard Drives 11.41 Harddisk images / CHD (Compressed Hunks of Data) 11.5 CD ROM 12, Controller 12.1 IDE 12.2 EIDE 12.3 SCSI 12.31 53CF96 12.32 53C810 12.4 PCI 12.41 MPC105 12.42 MPC106 12.43 GT64010 12.5 USB 12.6 PCMCIA 13. Network 13.1 91C94 13.2 20020 13.3 2485 13.4 66220 13.5 LAN 14. Transceiver 14.1 ADM485 14.11 ADM619 14.12 ADM708 14.2 SP485 14.21 HYC2485 14.3 DS8921 ................................................................................................................................................................................................................................. I1. I/O chips - 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.34b2 : Frank Palazzolo fixed bug in the Z80 block I/O instructions (INI, IND, INIR, INDR, OUTI, OUTD, OTIR, and OTDR). - 0.30 : Better emulation of the custom I/O chip in the Namco games. - 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 6532 - 0.82u2 : Judge added a 6532 RIOT patch (fixes some things in MESS). - 0.78u5 : Nicola Salmoria rewrote machine\6522via.c and machine\6532riot.c. This fixed the gfx problems and bad sound in the Gameplan driver, vidhrdw\gameplan.c is no longer needed, machine\6532riot: added PA7 adge detect and irq callback and machine\6522via: fixed port writes 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. - NOTES: 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 sndhrdw\starwars.c). - GAMES: Victory (Exidy 1982), Star Wars (Atari 1983) - SOURCE: machine\6532riot.c I2.2 8155 - NOTES: The 8155 is also a RIOT, but it has not an extra source code in MAME like the 6532 RIOT. - PCB: TMP8155 (Equites), M5L8155P (Splndrbt), NEC D8155HC (Hvoltage, Paranoia), 8155 (Bullfgtr) I3. PIA I3.1 MC6821 - 0.105u2 : Nathan Woods did some cleanup on the 6821 PIA functions, converting to new MAME struct conventions and enforcing that configuration/initialization happens only at init time. - 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. - 8th August 2003: 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 : Changed the 6821 PIA interface. [Aaron Giles] - NOTES: The Motorola 6821 PIA is a Peripheral Interface Adapter for sound/coin-switch/player control devices. - GAMES: Taito - Qix (1981), The Electric Yo-Yo (1981), Zoo Keeper (1982) - SOURCE: machine\6821pia.c - PCB: Mototola 6821 PIA (Qix), MC68A21 (Spiders), MC68B21 (Royalcrd, Strkforc), MC6821P (Magiccrd), HD6821 (BigBoy, R2dtank), HD46821P (Spiders), hd46821p (Tugboat) I3.5 C148 - 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 - GAMES: Namco System 2 games I4. VIA I4.1 6522 - 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 and machine\6532riot.c. This fixed the gfx problems and bad sound in the Gameplan driver, vidhrdw\gameplan.c is no longer needed, machine\6532riot: added PA7 adge detect and irq callback and machine\6522via: fixed port writes 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 : Fixes and updates from MESS to 6522via.c [Nathan Woods] - 3rd May 2002: Zsolt Vasvari cleaned up the Leprechaun / Pot of Gold drivers and added proper VIA 6522 chip emulation. - 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. - SOURCE: machine\6522via.c - DRIVERS: atarisy1.c, beezer.c, bmcbowl.c, gameplan.c, itech8/32.c and leprechn.c - GAMES: Kaos (GamePlan 1981), Beezer (Tong Electronic 1983), all itech8 and 32 games. - PCB: Rockwell R6522 (Timekill), Synertek SY6522A VIA (Bmcbowl), UM6522A 8926S (Pntnpuzl) I5. CIA I5.1 6526 - 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: src\machine\6526cia.c + machine\amiga.c - PCB: CIA 6526 (Attckufo) I5.2 8510 - NOTES: Amiga CIA (Complex Interface Adapter) - GAMES: Moonquake (Sente 1987) I5.21 8520 - SOURCE: src\machine\6526cia.c + machine\amiga.c I5.22 8530 - 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. I6. UART I6.1 8251 - SOURCE: drivers\gladiatr.c - 8251 (Debug port ?) - PCB: 8251 (Mmpanic, PPKing), 8251A (Fortecar), i8251A USART (Turbosub) I6.2 MC68681 - SOURCE: drivers\micro3d.c - PCB: MC68681 PIA (Groundfx, Scfinals), MC68681P (UART) (F15se), Signetics SCN68681c1n40 (Touchmaster3000/4000) I6.3 MB89371 - SOURCE: drivers\konamigq.c (UART) - GAMES: Crypt Killer (Konami 1995) I6.4 D7001 - SOURCE: drivers\ssv.c - uPD71051/uPD7001C (UART) - PCB: uPD7001C (Sxyreact), uPD71051 (Mslider), D71051GU-10 (Bel), NEC D71051 (Harley) I7. Interrupt controller I7.1 8259 - NOTES: The 8259 is a interrupt controller. - GAMES: Mr. F.Lea (1982) I7.2 71059 - NOTES: NEC D71059C interrupt controller - 8259 compatible - PCB: NEC D71059C (Dsoccr94, Inthunt, Gunforce), (Rtypeleo) I8. DMA controller I8.1 MC6844 - NOTES: The MC6844 is a DMA controller - SOURCE: sndhrdw\exidy440.c - GAMES: 6844 Showdown (1988) - Exidy System 440 I8.2 uPD8257 - PCB: upD8257C DMA Controller (Shooting Gallery 1984) I9. Interfaces I9.1 8255 PPI - 0.104u2 : Nathan Woods did 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. - 0.101 : Aaron Giles added save state support to the 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. - NOTES: The 8255 is a parallel peripheral interface. It has three 8-bit outputs. 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) - SOURCE: machine\8255ppi.c - PCB: 8255A (Rescue), D8255 (Buckrog), NEC D8255AC-2 DIP40 (Bodyslam, Pipeline), uPD8255AC-2 PIA (Hangonjr), UM82C55A-PC (Spinkick), M5M82C255ASP (Countrun), M5L8255AP-5 (Triplep), TMP8255AP-5 (Taxidrvr), Intel P8255A (Dealer), EC 8255AC (RoundUp), AMD AM8255APC (Quiz211) I9.2 RP5H01 - GAMES: Playchoice 10, Nintendo VS-System - SOURCE: machine\rp5h01.c I9.3 RS232 I9.31 MC6850 - 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) I9.32 DS1228 - NOTES: DALLAS DS1228 RS232 communications interface - PCB: DS1228 (RS232 port for debug) (F15se) I9.33 ICL232CPE - PCB: ICL232CPE RS232 port for communication to Host PCB (Botss, F15se) I9.4 2651 - PCB: Signetics SCN2651CC1N28 communications interface (Botss, F15se) I9.5 C139 - NOTES: The C139 SCI is a serial controller. - SOURCE: drivers\namcos22.c I9.6 I/O Boards I9.61 Super Sound I/O - NOTES: SSIO or Super Sound I/O boards can you find in MCR1/2/3 games. - 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. ==================================================== CPU #2 (Super Sound I/O) ==================================================== 0000-3FFF R xxxxxxxx Program ROM 8000-83FF R/W xxxxxxxx Program RAM 9000-9003 R xxxxxxxx Audio latches 1-4 A000 W xxxxxxxx AY-8910 #1 control A001 R xxxxxxxx AY-8910 #1 status A002 W xxxxxxxx AY-8910 #1 data B000 W xxxxxxxx AY-8910 #2 control B001 R xxxxxxxx AY-8910 #2 status B002 W xxxxxxxx AY-8910 #2 data C000 W xxxxxxxx Audio status E000 W xxxxxxxx Unknown F000 R xxxxxxxx Audio board switches ==================================================== I10. Other I10.1 NEC I10.11 8243 - NOTES: ??? - PCB: NEC D8243C (BodySlam) I10.12 8250 - NOTES: ??? - PCB: (Rocnrope) I10.13 8279 - SOURCE: machine\turbo.c - PCB: D8279 (Buckrog, Turbo) I10.2 AM2950 - NOTES: The AMD AM2950DC is a I/O port to the sound processor. - PCB: BegasBattle (DataEast 1983) I10.3 TE7750 - SOURCE: taito_f2.c - footchmp, ninjak I10.4 Toshiba 82265 - NOTES: I/O Custom chip - SOURCE: taifo_f2 - PCB: TMP82C265BF: Growl (Taito 1990), Quiz-HQ (Taito 1990), Solitary Fighter (Taito) I10.5 ADC (Analog Digital Converter) - 0.96u1 : smf fixed ADC overflow condition in ADC083x code. - 0.95u3 : Cycle accurate emulation of ADC0831/ADC0832/ADC0834/ADC0838 serial analogue to digital converters [smf]. Added driver machine\adc083x.c - 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. - SOURCE: machine\adc083x.c ADC0804 (Dday, SuperMonacoGP) NOTES: DIP20 ADC0808 ADC0808CCN (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.c ADC0848 NSC ADC0848CCN (GauntletLegends) ADC12138 NSC ADC12138 (Gradius4) NOTES: 12-bit + serial I/O ADC with MUX, self calibrating AD558 AD558JN (Showdown) AD813 (11beat, Mtetrisc) AD7582 AD7582KN (MetalManiax) NOTES: 12-bit ADC I10.6 Input/Coins/Leds I10.61 Discrete Control I10.611 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.c I10.612 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.c I10.613 Lamp Driver - 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: drivers\mcr3.c I10.62 PC3092 - NOTES: Chip for coin inputs and start buttons. - SOURCE: drivers\crbaloon.c I10.63 PAL16r6 - NOTES: This chip is custom logic used for guards controlling. - GAMES: Valadon Automation - Bagman (1982), Pickin (1983), Super Bagman (1984) I10.64 Analog pedal - 8th September 1999: Aaron Giles added better analog pedal support for APB and other Atari System 1/2 games. I10.65 TC4584 - NOTES: The TC4584 is used for trackball/spinner control. - PCB: Fitegolf, EagleShot, GigasMark3 I10.66 NEC uPD4701 - NOTES: The NEC uPD4701 used by Caliber 50 is a mouse interface IC. It controls probably a trackball, has 6 pin connector hooked up to a 4584 Logic IC. Joystick appears to be used also for selecting stance, club and direction. - GAMES: Forgotten Worlds (Capcom 1988), Caliber 50 (Seta 1989), EagleShotGolf (Sammy 1994), Backfire (Data East 1995) - PCB: NEC D4701AC (EagleShot), NEC4701 (Krzybowl), uPD4701c I10.67 TD62003 - PCB: TD62003 PNP 50V 0.5A DIP16 Quad Darlinton Switch for driving coin meters (Crysking, Sci), TD62003P is a lamps/LEDs driver (40love) I10.68 TD62064 - NOTES: TD62064 NPN 50V 1.5A Quad Darlinton Switch for driving coin meters (Sci) - PCB: Evilston, TD62064AP DIP16 (Radikal Bikers) I10.7 Connectors 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 I10.71 G6A-474P - PCB: OMRON G6A-474P is a four pole double throw relay (F1GP, Tail2nos) I10.8 Touchscreen I10.81 MicroTouch Systems - NOTES: Paint & Puzzle is a touch screen game and use this system. - PCB: 2x ICs = ICS1578N 9334 19-507 Rev 2 (c) 1992 (28 pin IC) and IC Intel MicroTouch 5603670 REV 1.0 L3372718E P8798 (Pntnpuzl) I10.82 Touchmaster - PCB: Touchscreen games Touchmaster 3000 and 4000 I11. Cassette / Cartridge / Floppy / Harddisk / CD I11.1 Cassette System I11.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. I11.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 I11.2 Cartridge I11.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) I11.22 PlayChoice-10 - SOURCE: drivers\playch10.c I11.23 Sega MegaTech - SOURCE: drivers\segac2.c - PCB: Just 2 ROMs in the cartridge (Goldnaxe) I11.24 Sega MegaPlay - SOURCE: drivers\segac2.c - PCB: (Mp_sonic) I11.25 SNK NeoGeo - NOTES: MVS version, MGD-2 and MGD-II format - SOURCE: drivers\neogeo.c I11.26 Nintendo Super System (NSS) - SOURCE: drivers\nss.c - PCB: (Nss_lwep) I11.3 Floppy disk - 2nd April 2002: Aaron Giles removed a ROM length limitation from the ROM loading system, to better support floppy disk images. I11.31 Floppy disk types Maxell Super RD MF2-256HD (RoughRacer, Qsww) I11.4 Hard Drives HDD2141 PCB: HDD2141 MK4313MAT (8944 CYL, 15 Heads, 63 Sectors and 4GB) (Bmcorerm) HDD2718 PCB: HDD2718 MK2104MAV (4200 CYL, 16 Heads, 63 Sectors and 2GB) (Bmcompmx) Quantum ???? PCB: 2.1 GB (Jdredd) Quantum Fireball EL PCB: Gauntlet Legends (2.5 GB) ST9150AG PCB: Kinst ST9420AG PCB: Wg3dh - Seagate Laptop Drive model ST9420AG (988 CYL, 16 Heads, 52 Sectors and 420.8MB) TOSHIBA MK1924FBV PCB: TOSHIBA MK1924FBV - 2.5" 543MB SCSI hard drive, contains GFX + main program (CryptKiller) TOSHIBA ??? PCB: 988U.A01 4.3 Gig Toshiba hard drive (Bmcompm2) I11.41 Harddisk images / CHD (Compressed Hunks of Data) - 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 : René 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. Also converted some CD images to CHD. 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. - 0.81u7 : smf fixed a couple of issues with hard disks without checksums. - 0.80 : Nathan Woods added some completion messages, and fixed the code that was falsely assuming that progress() was a function pointer in src\chdman.c - 0.79u3 : Nathan Woods added -createblankhd and -copydata commands, new arguments to -createhd and 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 in 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.77u2 : 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 : 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. - 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.71u1 : Stefan Jokisch fixed MAME not looking in parent directory for Hard Drive images. - 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. - 8th March 2002: Aaron Giles added hard disk support and emulation for a standard IDE controller. I11.5 CD ROM - 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 and 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 : 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 : 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. - 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) - GAMES: cps3.c, konamigv.c, konamim2.c, stv.c (sfish2) - PCB: CAP-WZD-5 (CD labeled as 703EAA02 (Heatof11) I12. Controller I12.1 IDE - 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 _H protection (src\harddisk.h + chd.h). - 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. - 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. - PCB: VIA VT83C461 - IDE Hard Drive controller, QFP100 (Promrag2) I12.2 EIDE - PCB: PC1646U2 CMD EIDE Controller for HDD Quantum Fireball (GauntletLegends) I12.3 SCSI - 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" and 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. - 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. I12.31 53CF96 - 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: 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. - SOURCE: machine\am53cf96.c - PCB: NCR 53CF96-2 QFP100, hard drive control IC (CryptKiller) I12.32 53C810 - 0.102 : Nathan Woods and R. Belmont began adding support for SCRIPTS programs to the 53C810 emulation. - 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 the memory interfaces and improved 53C810 SCSI emulation. - 0.90u2 : 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 : Ville Linde added preliminary 53c810 SCSI emulation. Lost World now tries to download everything necessary to the Real3D stuff. - NOTES: LSI Logic LSI53C810A PCI to SCSI I/O Processor - SOURCE: machine\53c810.c - PCB: 53C810 (Harley) I12.4 PCI I12.41 MPC105 - 0.89u3: Ville Linde improved the MPC105 emulation and R. Belmont added init for mpc105 bridge (Motorola MPC105 PCI Bridge/Memory Controller - drivers\model3.c) - 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.... - GAMES: Atari - California Speed, San Francisco Rush and Wayne Gretzky's 3D Hockey. I12.42 MPC106 - 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.c - PCB: MOTOROLA XPC106ARX66CE MPC106+, BGA304 (Harley) I12.43 GT64010 - NOTES: Galileo GT64010 PCI Bridge/System Controller. PDF datasheet at http://www.datasheetarchive.com - SOURCE: seattle.c I12.5 USB - 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. I12.6 PCMCIA - PCB: Ricoh RF5C296 PCMCIA controller - TQFP144 (Taito GNET-System) I13. Network I13.1 91C94 - 0.82u2 : Aaron Giles implemented the SMC91C94 ethernet controller (only loopback mode supported). - NOTES: SMC ISA/PCMCIA Ethernet & Modem Controller - SOURCE: machine\smc91c9x.c - PCB: SMC91C94QFP (GauntletLegends) I13.2 20020 - NOTES: Network communmication IC - PCB: SMC_COM20020I (SideBySide2), SMC COM20020-5ILJ PLCC28 (NeoGeoHyper64), COM20020 (Groundfx) I13.3 2485 - NOTES: SMC ARCNET Media Transceiver, RS485 5Mbps-2.5Mbps (SilentScope2) - PCB: Hyundai HYC2485S I13.4 66220 - PCB: The M66220FP is a 256 x 8bit Mail-Box Inter-MPU data transfer (Raystorm, Taito GNET-System) I13.5 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 (SilentScope2), uPD72105C - LAN hookup for multiple machines (Dblaxle, Wgp) I14. Transceiver I14.1 ADM485 - PCB: ADM485JR = Low Power EIA RS485 transceiver, SOIC8 (Gp500) I14.11 ADM619 - PCB: ADM619AR is a 900MHz RF Transceiver - SOIC16, compatible to AD6190 (Nbajamex) I14.12 ADM708 - PCB: ADM708AR (Taito GNET-System) I14.2 SP485 - PCB: Sipex SP485CS is a low power half-duplex RS485 transceiver (SilentScope2) I14.21 HYC2485 - PCB: HYC2485S is a SMC ARCNET Media Transceiver - RS485 5Mbps-2.5Mbps (SilentScope2) I14.3 DS8921 - PCB: DS8921 - National RS422/423 Differential Line Driver and Receiver Pair - SOIC8 (Gp500) ============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== OTHER 1. Transistors 1.1 TTL (Transistor Transistor Logic) IC's 1.2 C-MOS (LOC - MOS) 1.3 Logic Gates 2. Timer & Clock ICs 2.1 NE555 2.12 NE556 2.2 MC6840 2.3 MB8873 2.4 8253 2.5 NEC D71054 3. Real Time Clock 3.1 DALLAS 3.11 DS1221 3.12 DS1302 3.13 DS1643 3.14 DS2404 3.15 DS17487 3.2 MSM6242 3.3 72421 3.31 72423 3.4 R4543 3.41 RTC62423 3.5 8521 3.6 MPC948 3.61 MPC950 3.7 PD4990A 4. Key chip 5. Clock Crystal 5.1 CY2291 5.2 AV9170 5.3 Resonator 6. Reset IC 6.1 Mitsubishi, NEC 6.11 PST518 6.12 PST532 6.13 PST575 6.14 PST592 6.2 Dallas 6.21 DS1232 6.22 DS1233 6.3 Other 6.31 ADM690 6.32 MM1035 6.33 TL7700 6.34 ST7705 6.35 HA16103 7. Motorola 7.1 ULN2003 7.2 ULN2064 8. Fujitsu 8.1 MB14241 9. 7808 10. S301 11. S551 12. Debug Mode 13. BIOS 14. Instruction Cards .................................................................................................................................................................................................................................. O1. Transistors D633 - PCB: The D633 is a Si NPN POWER transistor used in 68k reset circuit (TIP122 compatible) (Sci) M54532 - NOTES: Mitsubishi M54532P / M54532FP, DIP16 = 4-unit 1.5A darlington transistor array with clamp diode - PCB: M54532 (Rvschool, Glpracr, Sfex2) TIP120 - PCB: TIP120 (UpScope) TIP122 - NOTES: General-Purpose NPN Darlington Transistor - PCB: TIP122 TO-220 (Ghosthunt, Tutstomb) 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) O1.1 TTL (Transistor Transistor Logic) ICs 7474 - 0.101 : Aaron Giles added save state support to the 7474 TTL. - 6th July 2002: Zsolt Vasvari fixed the missing sound in Mr. Kougar. - SOURCE: machine\7474.c - NOTES: TTL7474 is apositive-edge-triggered D-type flip-flop with preset, clear and complementary outputs. - GAMES: Car Polo (Exidy 1977), Mr. Kougar (ATW 1984) 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. 74123/LS123 - 0.88 : Derrick Renaud added a macro that calculates the pulse time of a 74LS122 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. - NOTES: The TTL74123 is a monoflop, there are 2 monoflops per chips (see machine\74123.c) - GAMES: Sound in Sheriff (Nintendo 1980) 74148 - 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 - GAMES: Car Polo (Exidy 1977) 74153 - NOTES: TTL74153 is a Dual 4-line to 1-line data selectors/multiplexers - GAMES: Car Polo (Exidy 1977) 74181 - 0.103u1: 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 - GAMES: Berzerk (Stern 1980), Frenzy (Stern 1982) 74189 - PCB: 74s189 ram (Revenger, Tripool) 74259 - NOTES: The 74LS259 is a 8-bit addressable latch. - SOURCE: shougi.c - PCB: Dkongjr, Boggy84, MetalManiax 74384 - 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.c NOTES: - Texas Instruments (TI SN74xxxx) and Signetics (LSxxxx) types: 74LS00, 74LS02, 74LS04, 74LS05, 74LS08, 74LS10, 74LS20, 74LS23, 74LS32, 74LS37, 74LS74, 74LS86, 74LS107, 74LS138, 74LS139, 74LS148, 74LS153, 74LS157, 74LS161, 74LS163, 74LS174, 74LS175, 74LS194, 74LS201, 74LS240, 74LS241, 74LS245, 74LS246, 74LS273, 74LS283, 74LS367, 74LS368, 74LS374, 74LS377, 74LS393, 74HC00, 74HC04, 74HC14, 74HC139, 74HC245 and 74HCT374 (see types description below at 'TTL - ICs') - PCB: Bagman, Statriv2: 7402, 74138, 74139, 74161, 74244 - PCB: Mitsubishi M53357P (=LS157) in 40love - PCB: MC14584b = Motorola HEX Schmitt Trigger (EagleShotGolf, SSV) - This chip is used for the trackball trigger / reading / converting values. Joystick appears to be used also for selecting stance, club and direction. - PCB: 7438, 74393, 74374 (UpScope) - PCB: 74F04PC, 74F138, F138 (Snowbros), 74F139, 74F273, 74F244, 74F245 (Namco System11, MetalManiax) - PCB: 74HC00, 74HC04, 74HC14, 74HC138, 74HC245, 74HCT374 (Crysking, F1GP, MetalManiax, Moonwalk, Stonebal, Zeropnt2) - PCB: 74LVT244 (NamcosSystem12), 74ACTT244N (Cbaj), 74LVT245 (Kdeadeye, NamcosSystem12) OTHER: LS161 - PCB: Ckong - The bank switch on the graphics ROMS was controlled by pin 3 of J9 (LS161). LS273 - NOTES: The LS273 is a Octal +ve edge trigger D-type flip-flop with Reset - SOURCE: machine\ajax.c 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) TTL - ICs/Types 7400 Quad 2-input NAND gates. Pins 14 7401 Quad 2-input open-collector NAND gates. Pins 14 7402 Quad 2-input NOR gates. Pins 14 7403 Quad 2-input open-collector NAND gates. Pins 14 7404 Hex inverters. Pins 14 7405 6x Hex open-collector inverters. Pins 14 7406 6x Hex open-collector high-voltage inverters. Maximum output voltage is 30V. Pins 14 7407 6x Hex open-collector high-voltage buffers. Maximum output voltage is 30V. Pins 14 7408 Quad 2-input AND gates. Pins 14 7409 Quad 2-input open-collector AND gates. Pins 14 7410 Triple 3-input NAND gates. Pins 14 7411 Triple 3-input AND gates. Pins 14 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 7415 Triple 3-input open-collector AND gates. Pins 14 7416 Hex open-collector high-voltage inverters. Maximum output voltage is 15V. Pins 14 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 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 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 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 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 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 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 7448 BCD to 7-segment decoders/drivers. Pins 16 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 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 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 Gated full adders. 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 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 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 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 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 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 74137 3 to 8 line decoders/demultiplexers with address latches. Pins 16 74138 3 to 8 line decoders/demultiplexers. Pins 16 74139 Dual 2 to 4 line decoders/demultiplexers. Pins 16 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 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 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 74158 Quad 2 to 1 line data selectors/multiplexers. Pins 16 74159 4 to 16 line decoders/demultiplexers. Pins 24 74160 Synchronous 4-bit counters (decade, direct clear). Pins 16 74161 Synchronous 4-bit counters (binary, direct clear). Pins 16 74162 Synchronous 4-bit counters (decade, synchronous clear). Pins 16 74163 Synchronous 4-bit counters (binary, synchronous clear). Pins 16 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 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 74174 Hex d-type flip-flops (single-rail ouputs, common direct clear). Pins 16 74175 Quad d-type flip-flops (complementary outputs, common direct clear). Pins 16 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 ?? 74189 64-bit ramdom-access-memories (16 4-bit words, 3 state outputs). Pins 16 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 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 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 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 74241 Octal buffers/Line drivers/Line receivers (non-inverted 3 state outputs). Pins 20 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 74245 Octal bus tranceivers (non-inverted 3 state outputs). Pins 20 74246 BCD to seven segment decoders/drivers with ripple blanking. Pins 16 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 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 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 adders. Pins 16 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 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 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 74368 Hex bus drivers (inverted 3-state outputs organised to facilitate handling of 4-bit data). Pins 16 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 74374 Octal d-type flip-flops (3-state outputs, common output control, common clock). Pins 20 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 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 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 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 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 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 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 74573 Octal d-type transparent latches (functionally equivalent to 'LS373 & 'S373). Pins 20 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 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 -> sndhrdw\phoenix.c 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 4042 4-bit Auffang register. Pins 16 4047 Monostable / astable multivibrator. Pins 14 4049 6x inverted drivers. Pins 16 4071 Quad 2-input OR gates. Pins 14 4076 Quad d-type flip-flops. Pins 16 4081 Quad 2-input AND gates. Pins 14 4093 Quad 2-input NAND with schmitt-trigger inputs. Pins 14 4511 8 - 4 - 2 - 1 - BCD / 7-segment decoder. Pins 16 4512 8-line multiplexer. Pins 16 4528 Dual monostable multivibrators. Pins 16 4539 Dual addressable 4-bit multiplexer. Pins 16 4520 Hitachi HD14520 Dual Up Counter, DIP16 (Champbwl) O1.3 Logic Gates GATE FUNCTION Examples (A1, A2 = data input; x = output) AND = AND x = a * b A1 = 0, A2 = 1 => x = 0 , A1 = 1, A2 = 1 => x = 1 OR = OR x = a + b A1 = 0, A2 = 1 => x = 1 , A1 = 1, A2 = 1 => x = 1 _ NOT = INVERT x = a A1 = 0 => x = 1 , A1 = 1 => x = 0 _______ NAND = NOT AND x = (a * b) A1 = 0, A2 = 1 => x = 1 , A1 = 1, A2 = 1 => x = 0 _______ NOR = NOT OR x = (a + b) A1 = 0, A2 = 1 => x = 0 , A1 = 1, A2 = 1 => x = 0 _ _ XOR = Exclusive OR x = (a * b) + (a * b) A1 = 0, A2 = 1 => x = 1 , A1 = 1, A2 = 1 => x = 0 _ _ XNOR = Exclusive NOR x = (a * b) + (a * b) A1 = 0, A2 = 1 => x = 0 , A1 = 1, A2 = 1 => x = 1 O2. Timer ICs O2.1 NE555 - 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), NEC uPD555 (11beat, Mtetrisc) O2.12 NE556 - PCB: 556 (Naughtyb, Rockclimb) O2.2 MC6840 - 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. - 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. - SOURCE: machine\6840ptm.c + mpu4.c - Games: Beezer (Tong Electronic 1982), Victory (Exidy 1982), Midway MCR-68k system games O2.3 MB8873 - NOTES: The MB-8873E is a timer IC. - Games: Ginga NinkyouDen (Jaleco 1987) O2.4 8253 - 0.102: Mathis Rosenhauer fixed save/restore of 8253 PIT, removed shift register since it just seems to be needed to compensate for different DAC speeds, added 8254 PIT from PC emulation and added state saving. - NOTES: The 8253 is a programmable interval timer chip. - SOURCE: machine\pit8253.c - GAMES: Victory (Exidy 1982), Clay Shoot (Allied Leisure 1979), balsente.c, exidy.c - PCB: NB5K8253 (LaserBase) O2.41 8254 - NOTES: The 8254 is a programmable interval timer chip. Different to 8253: The 8254 has an additional readback feature. - SOURCE: machine\pit8253.c O2.5 NEC D71054 - NOTES: The NEC D71054 is a timer chip (timer write handle, MACHINE_INIT and other functions) - PCB: D71054C (Wrofaero) - SOURCE: drivers\seta.c O3. Real Time Clock (RTC) O3.1 DALLAS O3.11 DS1221 - NOTES: The DALLAS DS1221 chip preserved Time and date. - PCB: Ataxx O3.12 DS1302 - NOTES: RTC+BACKUP RAM - SOURCE: machine\ds1302.c - PCB: DS1302 DIP8 (Crysking) O3.13 DS1643 - NOTES: NonVolatile TimeKeeping RAM - PCB: DALLAS DS1643 (Heatof11) O3.14 DS2404 - NOTES: RTC + NVRAM - SOURCE: machine\ds2404.c - PCB: Dallas DS2404S EconoRAM Time Chip, SOIC16 (Rfjet) O3.15 DS17487 - PCB: Hitpocker - DALLAS REAL TIME CLK DS17487-5 O3.2 MSM6242 - SOURCE: drivers\ddenlovr.c - PCB: REAL TIME CLOCK MSM6242 (Hanakanz), RTC M6242B (Pkgnsh, Quizchq, Yarunara), M62X42B (Meosism), M62X42 (suprnova.c), 6242 (Mmpanic) O3.3 72421 - 0.90u2: Ville Linde added Epson RTC-72421 emulation - NOTES: 4-bit RTC-Modul 10ppm - PCB: RTC 72421B 4382, DIL18 (Ddenlovr) O3.31 72423 - PCB: RTC72423 (Harley) O3.4 R4543 - PCB: EPSON Real Time Clock Module (SOIC14) (Gp500) O3.41 RTC62423 - PCB: EPSON RTC62423 (SOP24) O3.5 8521 - Source: TC8521AP (RTC?) - PCB: 8521 (Sonofphx) O3.6 MPC948 - PCB: The Motorola MPC948 is a low voltage clock chip (GauntletLegends). O3.61 MPC950 - PCB: MPC950 QFP32 (Harley) O3.7 PD4990A - 0.104u6 : Xvi added save state support to PD4990a device for NeoGeo. - NOTES: The NEC PD4990A is a serial I/O Calendar & Clock IC used in the NEO GEO and probably a couple of other machines. - SOURCE: machine\pd4990a.c - PCB: D4990A (Neogeo motherboard) O4. Key chip - 3rd March 2000: Vernon C. Brooks fixed some key chip problems with World Stadium. O5. Clock Crystal - NOTES: Xtal = Crystal = Quartz = Oscillator = X1 = X2 or X101 169NDK19 (Xfiles) A33.868 KDS 7M (NeoGeo Hyper64) A40.000 KDS 7L (NeoGeo Hyper64) D180A7 (Heatof11) D320L7 (NeoGeo Hyper64) K SSJ1 (Boggy84) M33.333 KDS 7M (NeoGeo Hyper64) M50.113 KDS 7L (NeoGeo Hyper64) M53.693 KDS 745 (Soulclbr) M53.693 KDS 920 (Aquarush) M.S.C. (Horekid) Nymph C016018 (Darktowr, Tstrike) RXD MP-18 (Horekid) V100.00 KDS 745 (Soulclbr) V100.00 KDS 928 (Aquarush) O5.1 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.2 AV9170 - PCB: ICS AV9170 is a Clock synchroniser and multiplier (Gradius4, SilentScope2) O5.3 Resonator - NOTES: In Dragonball Z 2 there is a CSB1056J Resonator (1056 * 1000 / 132 = 8000 = 8kHz sample rate for the MSM6295) located near the MSM6295. - PCB: CSB380E (DDragonb), CSB1056J (Dbz2), OKI MSM5205 + Resonator 384kHz (RoboWrestle2001) O6. Reset IC O6.1 Mitsubishi, NEC O6.11 PST518 - PCB: Mineswpr O6.12 PST532 - PCB: PST532 IC for system reset and battery backup switching (Realbrk) O6.13 PST575 - PCB: System Reset IC - SOIC4 (Gp500) O6.14 PST592 - PCB: PST592J - SOIC4, System Reset IC with 2.7V detection circuit (MrDriller2) O6.2 Dallas O6.21 DS1232 - PCB: Dallas DS1232S reset IC, SOIC16 (Primrag2), DS1232 DIP8 (RapidFire), DALLAS DS1232 MicroMonitor ? (MetalManiax) O6.22 DS1233 - PCB: Dallas DS1233 master reset IC, SOIC4 (Crysking) O6.3 Other O6.31 ADM690 - PCB: Analog Devices ADM690 4.65V Reset, Battery Switchover, Watchdog Timer, Power Fail Input IC (DIP8) O6.32 MM1035 - PCB: Mitsumi Monolithic IC MM1035 System Reset and Watchdog Timer, DIP8 (Vmetal) O6.33 TL7700 - PCB: Texas Instruments TL7700 Supply-Voltage Supervisor/Power-On Reset IC, DIP8 (Tokio) O6.34 ST7705 - PCB: ST7705C Reset/Watchdog IC, SOIC8 (Xfiles, Kdynastg) O6.35 HA16103 - PCB: Hitachi HA16103FPJ Watchdog Timer, SOIC20 (CPS-3) O7. Motorola O7.1 ULN2003 - PCB: ULN2003 for coin counter output (Chboxing, Chwrestl, Sauro) O7.2 ULN2064 - PCB: ST ULN2064B, DIP16 (A51site4, MK3, Kinst) O8. Fujitsu O8.1 MB14241 - NOTES: MB14241 did custom operations. In Field Goal (Taito 1979) it shifts the data. - SOURCE: drivers\fgoal.c - PCB: MB14241 (40love, Fieldday, Jollyjgr) O9. 7808 - PCB: Voltage regulator for TV output (Chboxing, Chwrestl) O10. S301 - PCB: Slide switch for stereo or mono sound output (Rvschool, Sfex2, Taito GNET system). O11. S551 - PCB: Dip switch - 4 position, defaults all OFF (Rvschool, Sfex2, Taito GNET system). O12. 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) O13. BIOS ARCADE SYSTEMS with a 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.c 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 O14. Instruction Cards Joshi Volleyball (1983) G3000261A (Instruction card #1) G3000262A (Instruction card #2) Prebillian (Taito 1986) G2000578A (Service Instructions) G2000577A (Board Adjustment Manual) G3000410A (Instruction card #1) G3000411A (Instruction card #2) 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. Custom chips 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 Jaleco 1.14 Kaneko 1.15 Konami 1.16 LSI Logic 1.17 Nakanihon 1.18 Namco 1.19 Nanao 1.20 NEC 1.21 Nintendo 1.22 NMK 1.23 Other 1.24 Philko 1.25 Psikyo 1.26 Seibu 1.27 Sega 1.28 Seta 1.29 SNK 1.30 SONY 1.31 SSV 1.32 Taito 1.33 Tecmo 1.34 Technos 1.35 Toaplan 1.36 V-System 2. Custom Video 2.1 Signetics 2.11 S2636 2.12 S2637 2.2 Atari 2.21 TIA 2.22 GTIA 2.23 ANTIC 2.24 AMD 29C101 2.25 ASIC65 2.3 MOS 2.31 MOS6560 2.32 VIC6560 2.4 Nintendo 2.41 2C03B PPU 2.5 Philips 2.51 SAA 5050 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 Data East Ace/Jack 3. 2D Graphic 3.1 VRender Zero 4. 3D Graphic 4.1 Polygon games 4.2 Sprites games 4.21 Sega 16-bit hardware 4.22 Sega System24 4.23 Sega System32 4.24 Sega ST-V 4.3 Other 3D games 4.4 Textures games 4.5 PSX GPU 4.6 3dfx Voodoo Graphic 4.61 Voodoo 2 4.62 Voodoo Banshee 4.63 Voodoo 3 4.7 Gaelco 3D 4.8 Real3D 1000 4.9 Konami 4.91 K001005 4.92 K001006 4.A 3DO 4.B Direct3D 5. Video controller 5.1 Actel 5.2 Altera 5.3 Hitachi 5.4 Texas Instruments 5.5 Brooktree 5.6 Other 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 Sony 7.11 CXA1145 7.12 CXA1634 7.13 CXA1779 7.14 CXA2067 7.2 000180 .................................................................................................................................................................................................................................. G1. Custom chips 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) 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 System 2 DL-030P DIP40 KABUKI Custom encrypted Z80, running at 8.000MHz, manufactured by VLSI Technology. On most PCB's 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 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 System 3 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 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 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) 038 9808WX003 (Dfeveron) 038 9838WX001 (Dfeveron, Gaia) G1.5 Data East TC110G21 Sdgndmps, SD Gundam Sangokushi, Raiden DX (TC110G21AF) TC110G38 F15se (TC110G38AF) TC15G008 Cross Shooter, Liberate, Metlclsh (TC15G008AP), Panic Road (TC15G008AP-0048) TC15G032 Counter Steer, Garyoret, Lastmisn, Metlclsh, Shootout (TC15G032AY,TC156032AY, TOSHIBA TC15G032CY, TC15GO32AY 0013 8623A DSPC10) TC17G005 Cross Shooter, Panic Road (TC17G005AN) TC17G008 Cross Shooter, Panic Road (TC17G008AN) TC17G014 Mustache (TC17G014AP-0048) TC17G032 Hanamai, Hana Oriduru (DYNAX TC17G032AP-0246 JAPAN 8828EAI) TC25SC900 SD Gundam Sangokushi, Heated Barrel, Olympic Soccer'92 (TC25SC900AF) L7B0072 Boulder Dash, Robo Cop, The Deep (L7A0072 DATA EAST BAC 06 VAE8713) L7B0073 Boulder Dash, Robo Cop, The Deep (L7B0073 DATA EAST MXC 06 8746) 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 machine\decocrpt.c QFP160 Prtytime, Rhoga, Fghthist DE59 M68000 QFP64 Rhoga, Mutamtf, Edrandy DE60 Protection/IO machine\decoprot.c Edrandy DE66 Protection/IO machine\decoprot.c QFP100 Edrandy DE71 Sprites Rhoga DE74 24220F009 GFX encryption machine\decocrpt.c QFP160 Lockload, Fghthist, Nslasher DE75 Protection/IO machine\decoprot.c Captaven, Robocop2 DE77 9303K9200 SOP28 Captaven, Dblewing (?) DE99 L7A0967 'Ace' chip (Special alpha blending?) QFP208 Nslasher DE101 ARM CPU Dragngun, Lockload DE102 68000 QFP128 Pktgaldx DE104 L7A0717 9148 Protection/IO machine\decoprot.c QFP100 Nslasher, L7A0717 9143 (Dblewing) DE113 Alpha Blending Lockload, Dragngun DE141 24220F008 GFX encryption machine\decocrpt.c QFP160 Nslasher, Wcvol95 DE145 Lockload DE146 L7A0680 Protection/IO machine\decoprot.c 100 pin Dragngun, Fghthist, Stadhr96 DE150 GFX controller Avengrgs, Skullfng DE153 L7A0888 9328 QFP144 Nslasher DE156 932EV 301801 Encrypted ARM7-based 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: - 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. DECO custom chips in dec8.c games HMC20 = M60232 - Ghostb, Gondo, Shackled, Shootout, Garyoret, Lastmisn SSC10 = M60324 - Boomrang, Cobracom, Kamikcab, Liberation, Shootout (SSC10 M60324 3Y4I - 42 pin) VSC30 = M60348 - Ghostb, Gondo, Shackled, Shootout, Garyoret, Lastmis G1.6 Dooyong DOOYONG H2A11004 SCU Gulfstrm DY001-A Hyundai DOOYONG PLCC84 Flytiger, Gulfstrm DY002-A Hyundai DOOYONG PLCC84 Flytiger, Gulfstrm DOOYONG DY-PL-1 H2A16011 QFP160 Sadari DY160 DY-PL-1 Superx DY208 DY-OBJ-01 Superx DOOYONG DY-OBJ-01 H2B34027 Popbingo DOOYONG DY-PL-1 H2A32067 Popbingo G1.7 Dynax 1108 Dynax 1108F0405 Mmpanic, Quizchq 1427 Dynax 1427F0071 Mmpanic, Quizchq TC17G032AP-0246 JAPAN 8828EAI Hanamai, Mjfriday 70C160F009 QFP208 Mjchuuka 70C160F011 Hkagerou, Mjreach1 G1.8 Excellent Systems ES-9203 Gcpinbal ES-9207 Aquarium, Gcpinbal ES-9208 Aquarium, Gcpinbal ES 9303 Aquarium ES-8712 ADPCM sound Gcpinbal, Vmetal 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 MB605E53U or MB60553 Tilemap Gstriker, Vgoalsoc 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 SOURE: vidhrdw\gstriker.c - The Fujitsu MB60553 tilemap chip has 1 Plane, Tiles 16x16 and 4bpp, Map 64x64, Scrolling and Indexed banking (8 banks) SOURE: vidhrdw\gstriker.c 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 (=8255) Chindrag, Lordgun IGS005 QFP144 IGS006 QFP144 IGS007 QFP144 IGS008 QFP160 IGS011 F5XD 174 QFP160, GFX controller? Chindrag, Vbowl IGS012 9441EK001 QFP80, possible MCU? Drgw2, Vbowl IGS022 ASIC Drgw3 IGS025 ASIC PLCC68 Drgw2, Drgw3, Olds IGS027A QFP120 ARM7 based CPU with internal 64k ROM Ddp2 IGS028 QFP100 Olds IGSD0301 SOUND CPU?, DIP42 Chindrag G1.12 Imagetek 14100 Imagetek 14100 052 9309EK701, QFP208 (Poitto), Imagetek 14100 052 9227KK701 (Pangpoms) NOTES: Imagetek 14100 is a custom video chip used in Metro Games. 14220 Imagetek 14220 071 9338EK707, QFP208, I4220 071 9403EK701 (Balcube, Blzntrnd, Toride2g, Vmetal) NOTES: The Imagetek 14220 is a Video Chip for 8 bit sprites and tiles used by Metro Games 14300 14300 095 (Mouja, Dokyusei, Dokyusp, Gakusai, Gakusai2) 15000 Imagetek 15000 (2ch video & 2ch sound) (Tmmjprd, Rabbit) G1.13 Jaleco 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 QFP160 GS91022-03 9343PP718 QFP100 GS91022-04 9334PP710 or 9721PD00 QFP100 GS91022-05 048 9726HX002 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) G1.14 KANEKO KANEKO BABY004 9511EX009 VT-171 QFP44 (Galpani3, Jchan, SuperKanekoNovaSystem) KANEKO VEGA BY005-197 QFP144 (SuperKanekoNovaSystem) KANEKO ALTAIR BY006-224 QFP208 (SuperKanekoNovaSystem) KANEKO DENEB BY007-32F QFP208 (SuperKanekoNovaSystem) KANEKO CALC3 508 QFP74, MCU KANEKO HELP1-CHIP (Blazeon) KANEKO I/O JAMMA MC-8282 047 46 pin 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 MUX2-CHIP QFP64 (Mgcrystl) KANEKO PISCES (Gpan2qiz) KANEKO SPCII-A JH-4181 QFP208 (SuperKanekoNovaSystem) KANEKO TBS0P01 452 9430HK001 / TBSOP01 square, SMD , ToyBox MCU KANEKO TBSOP02 454 9451MK002 QFP74, Custom MCU? (Gmtr2) KANEKO VIEW2-CHIP 23160-509 9047EAI QFP144 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) KANEKO Pandora-Chip PX79C480FP-3, PANDORA (sprite chip) (Djboy, Snowbros, Galpanic) -> vidhrdw\snowbros.c 699205P QFP44 (Bakubrkr, Mgcrystl) 699206P QFP44 (Bakubrkr, Mgcrystl) G1.15 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) 0005295 Hcrash (SDIP64) 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 007593 Blkpanthr, Kittenk, Citybomb (custom ceramic flat pack with 56 legs) 007644 Lethalen, Tmnt (22pin MSI package) 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 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, 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) 054539 Lethalen (PCM sound chip) 054968A Lethalen 055550 Dadandrn (QFP64) 055555 Dadandrn, Le2 (Priority Encoder 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 056469 Dadandrn, Gaiapolis (PAL16L8 for CPU/GFX) 056540 RacinForce 056602 Cryptklr, Konami GV (A/D converter ?) 056734 Daiskiss, Puzldama 056766 Le2 (Sprites) 056800 Le2, Gradius4 056832 gijoe.c, konamigx.c, moo.c, mystwarr.c and xexex.c (Tiles) 056879 Le2 058141 CryptKiller (PCM sound chip) 058143 Hmcompm2, Bmcompm2 (Tiles) 058146 Soccerss, Konami System GX 058239 (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 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 E9825 (SOIC8) Gradius4 0000033906 Gradius4 0000037122 Konami custom 37122 SilentScope KonamiIC - 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. - Source: vidhrdw\konamiic.c 051316 - 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. 052109 - 0.95u3 : R. Belmont added dx/dy settings to K052109, similar to those known to exist in the '156 and later chips. 053250 - 8th June 2003: Acho A. Tang did another small improvement on the K053250 graphics emulation. 053936 - 5th March 2001: Nicola Salmoria added K053936 graphics chip emulation to Blazing Tornado, and improved the K054157 emulation a bit. 054157 - 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. 056832 - 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. Corrected 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 and tileline code. - 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. K001604 - 0.104u1: GTI Club updates [Ville Linde]: Improved K001604 tilemap emulation, very preliminary K001005 & K001006 3D graphics emulation and added some more SHARC opcodes. G1.16 LSI Logic L1A3787 Mk L1A6017 (MAX1 EXIT) Dcheese L1A7968 Williams Electronics 5410-1346500 Crusnusa L4A0270 Atomicp 5410-12862-00 Mk3, Wwfmania 5410-13465-00 Crusnusa 5410-14120-00 MK3 5410-14589-00 QFP164 Gauntleg 5410-14590-00 QFP80 Gauntleg G1.17 Nakanihon NL-001 DYNAX NL-001 WD10100 Mmpanic NL-002 RongRong, Quizchq NL-005 208 pin, square, surface-mounted Ddenlovr 4L10F2467 QFP160 Realbrk, Pkgnsh, Pkgnshdx 4L10F2468 QFP160 Realbrk, Pkgnsh, Pkgnshdx G1.18 Namco - 0.88u1: Shaun Stephenson confirmed Libble Rabble Custom IO chip numbers. - 0.79u1: Better emulation of 50XX custom, no more need for hacks in bosconian [Nicola Salmoria]. - 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. - 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. 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) [1] 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 29XX (CUS29) Sprite line buffer and sprite/tilemap mixer CUS27 DIP40 Clock divider 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 [2] [3] CUS42 QFP80 Dual scrolling tilemap address generator CUS43 SDIP64 Dual tilemap generator CUS47 Address decoder CUS48 SDIP64 Sprite address generator 50XX pins 28 Player score control (only used as protection check) 51XX pins 42 I/O (coin management built-in) 52XX pins 42 Sample player 53XX pins 42 I/O (steering wheel support) 54XX pins 28 Explosion sound (noise) generator 56XX (CUS56) I/O (coin management built-in) (pins 42) 58XX (CUS58) I/O (coin management built-in) (pins 42) CUS60 MCU (63701) CUS64 MCU (63701) 62XX (CUS62) I/O and explosion generator (pins 28) CUS95 I/O interface 98XX (CUS98) Lamp/coin output 99XX (CUS99) Sound volume CUS115 Expansion board ROM banking [4] 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 (Grobda - Namco 1984): 0042 Video Ram Addresser 0433 Motion Object Controller 0763 Clock Divider/Sync Generator 0773 Clock Divider/Sync Generator 1108 Datashift Playfield Register 1204 Motion Object Position 1603 I/O control 1502 Sound Generator 5604 I/O interface 5806 I/O interface C27 DIP40 GFX motion obj. C29 SDIP64 (Pacland) C30 SDIP64 C34 DIP24 (Pacland) C36 SDIP64 (Pacland) C39 Video C45 QFP80 Land Generator (Luckywld) C48 GFX motion obj. C65 MCU I/O Controller (Sgunner) C67 PLCC68 C68 QFP80 C70 QFP80 (Namco NA-1/2 System) C71 PLCC68 TI320C25 DSP C74 M37702 Sound MCU C75 QFP80 M37702 Sound MCU C76 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 Yamaha YM2151 Sound Gen 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 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 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 C186 QFP160 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) WIP: - 0.78u5: Phil Stroffolino 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. C356 (Cgangpzl) C357 (Swcourt) C358 C359 KeyCustom C361 QFP120 C362 KeyCustom C365 (32 pin) (Quiztou) C366 KeyCustom C367 C368 DIP32 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 DIP32 KeyCustom 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 C447 QFP256 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) S11MOT* = Standard System 11 PALs (S11MOT1A, S11MOT2A, S11MOT3A...) G1.19 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) G1.20 NEC D6376 Renju, Scud, Speglsht D6379GR 2-channel 16-bit D/A converter 10mW typ. (SOIC8) PGM-System, Taito GNET-System D65006C Bigrun D65081R077 8833K9 or D6508|R077 8805k9 Truxton, Rallybik D65012GF303 9050KX016 (QFP80) 47pie2, Suchipi D65024GF035 8805KK019 (QPFP100) Rallybik, Truxton, Vimana D65054GF102 (QFP100) Scud (D65654GF102) D71051GU ssv.c: uPD71051/uPD7001C (UART) 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 G1.21 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.22 NMK NMK004 - 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 : 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 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. - SOURCE: machine\nmk004.c - PCB/Source: The NMK004 CPU might be a Toshiba TLCS-90 class CPU (is similar to Z80 but with different opcodes ?) with internal ROM (?) in the 0000-3fff range. NMK112 - 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. - SOURCE: machine\nmk112.c NMK002 QFP80 NMK004 QFP64 Sound CPU? Acrobatm, Blkheart, Gunnail, Mustang, Vandyke NMK005 QFP64 possible MCU? NMK008 QFP84 NMK009 QFP100 NMK111 QFP64 NMK112 QFP64 Custom IC for bankswitching NMK214 NMK215 NMK901 QFP80 NMK902 QFP44 NMK903 QFP44 G1.23 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 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 QFP100 Incredible Tech IT42 QFP208 Pairs, Timekill Mahjong games NB19010 and NB22090 Nihon System 06B49P DIP28 Countrun, FreeKick P&P Marketing AJ001 5380-JY3306A, AT001 QFP160 Policetr, Sshooter Tatsumi TZB315 = TZ8315 Round Up, CycleWarriors Texas Instruments TI 52C1HXW and TI 52ALROW Penocup Unico MDE-2001 Stoffy Williams Special Chip 2 (custom BIT/BLT chip) Mysticm G1.24 Philko PK8701 PK8701 8720 Outrun PK8702 Philko PK8702 8717 Atomicp, Outrun PK8703 Outrun PK8704 Outrun PK8705 Outrun PK8801 Twinfalc, Xyonix G1.25 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.26 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 G1.27 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) 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 Sprite line comparitor (Enduror, Hangon) 315-5012 Sprite generator control (Enduror, Hangon) 315-5013 Encryption Super Zaxxon, Ixion 315-5014 Encryption Buckrog 315-5018 Encryption Yamato 315-5025 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 Tilemaps (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-5093 Encryption Pitfall II 315-5098 Encryption Ninja Princess (same key as Up'n Down) 315-5102 Encryption Sega Ninja 315-5106 PAL (Enduror) 315-5107 PAL, Horizontal timing control (Hangon) 315-5108 PAL, 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-5141 PAL, Z80 address decoding 315-5143 PAL, Sprite-related? 315-5144 PAL, Sprite-related?, DIP20 315-5147 PAL, Sprite-related? 315-5149 PAL, Video mixing, DIP20 315-5150 16A 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 PA, 68000/MCU interface & address decoding 315-5195 315-5196 315-5197 Tilemap (System 16B) (108 8944 Y95) (PGA135) 315-5202 (Bodyslam) 315-5203 PAL (Robowres) 315-5211 (136 8802 Y29) (PGA179) (Aburner2) 315-5213 PAL16R6, DIP20 (System16b) 315-5214 Signetics CK2605, DIP20 (System16b) 315-5218 (134 8939 W00) SEGA PCM CHIP, QFP100 (Aburner2, Shangon) 315-5242 (0301) Color encoder (Custom ceramic DIP32 package) (QFP44) 315-5246 315-5248 (406AU 8939 W18) (QFP100) (Strkfgtr) 315-5249 (186BU 8917 W70) (QFP120) 315-5250 (423U 8940 W13) Compare/Timer chip, QFP120 (Aburner2, Loffire) 315-5251 PAL (Shangon) 315-5254 (9Y01) (Loffire) 315-5275 QFP100 (Aburner, Smgp) 315-5278 PAL (Smgp) 315-5280 PAL (Loffire, Smgp) 315-5290 PAL (Loffire) 315-5291 PAL (Loffire) 315-5292 Tilemap generator, QFP160 (System 24, Model 1) (Mahmajn, VF) 315-5293 Object generator, QFP160 (Mahmajn) 315-5294 Mixer, QFP100 (Mahmajn) 315-5295 Address decoder/interrupt controller, QFP100 (Mahmajn) 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-5304 PAL (Smgp, Loffire) 315-5305 (Strkfgtr) 315-5306 (Strkfgtr) 315-5312 (Strkfgtr) 315-5313 7101 9Z 04 65 C, Big array IC (Columns2, Tfrceac) 315-5330 (Sega MegaPlay) 315-5336 PAL (Smgp) 315-5337 PAL (Smgp) 315-5349 PAL16L8BCN (Sega MegaPlay) 315-5373 PLS153 (Mwalk) 315-5385 Sprites?, QFP128 (Radr, Titlef) 315-5386 Tiles, QFP184 (Radr, Titlef) 315-5387 Sprites, QFP160 (Radr, Titlef) 315-5388 Priority, QFP160 (Radr, Titlef) 315-5391 GAL22V10 (Clutch Hitter) 315-5394 (Tfrceac) 315-5395 (Tfrceac) 315-5433 (Sega MegaPlay) 315-5441 GAL16V8A (Radr, Sega System32) 315-5442 PAL (Radr) 315-5452 (Tfrceac) 315-5476 RF5C68 PCM sound, 80 pins square chip (Sega System32) 315-5507 PAL (Radr) 315-5552 GAL16V8A/B (Jparc, Sonic) 315-5560 MultiPCM sound chip, QFP80 (Titlef) 315-5591 QFP100 (Titlef) 315-5596 Lattice GAL16V8A, DIP20 (Titlef) 315-5598 Lattice GAL16V8A, DIP20 (Titlef) 315-5625 PQFP144 (Doa, VF) 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) 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 ? 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 FD1094 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 ? 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 Where's Wally (Japan) 317-0197B FD1094 Where's Wally (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 Sukeban Jansi Ryuko 317-5023 FD1094 Ryu Kyu 317-5039-COM 317-5040-COM 317-5041-COM 317-5042-COM 317-5043-COM 317-5044-COM 317-5049-COM WIP: 315-5250: - 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. 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-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. G1.28 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 X1-004 Input related functions - connected to joystick/input controls (SDIP52) X1-005 X0-005 X1-006 X0-006 (65c02) X1-007 Video DAC? - connected to RGB output (SDIP42) X1-010 Sound Chip, 16Bit PCM (QFP80) X1-011 Tilemaps Generators (QFP100) X1-012 Tilemaps Generators (QFP100) X1-014 Sprites? G1.29 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 G1.30 SONY CXD1095Q (QFP64) MegaPlay System, SuperMonacoGP CXD2922CQ PSX SPU (QFP100) RivalSchools, StreetFighterEX, BattleArenaToshinden2 CXD2923AR Cryptkiller, NamcoSystem11 Board CXD2925Q PSX SPU CXD2938Q (QFP208) MrDriller2 CXD8514Q PSX GPU CXD8530BQ Cryptklr, KonamiGV, NamcoSystem11, Ts2 CXD8530CQ PSX CPU (QFP208) RivalSchools, StreetFighterEX, BattleArenaToshinden2 CXD8538Q PSX GPU CryptKiller CXD8561Q PSX GPU (QFP208) RivalSchools, StreetFighterEX, BattleArenaToshinden2, MrDriller2 CXD8606BQ (QFP208) MrDriller2 CXD8654Q PSX GPU Paca Paca Passion Special, TekkenTagTournament CXD8661R PSX CPU L9A0088 WE19960 NNM 9738 Paca Paca Passion Special, TekkenTagTournament G1.31 SSV System SSV (drifto94, srmp4) 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 DX-101 Grdians, Pzlbowl, Pembros DX-102 I/O Grdians, Meosism, Pzlbowl, Pembros G1.32 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.c PC050CM Coin I/O SOURCE: drivers\rastan.c 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 consolidated 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 TC0030OMD 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? TC0030OMD 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 TC0780FPA QFP240 TC0840GLU QFP144 TC0870HVP QFP208 WIP: TC0100SCN - 0.100u4 : Bryan McPhail fixed flipscreen in TC0100, which improves Liquid Kids. - 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. - SOURCE: vidhrdw\taitoic.c TC0150ROD - 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. TC0360PRI - 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). TC0480SCP - 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. G1.33 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) DeroonDeroDero, ToukiDenshou TECMO AA03-8431 (QFP208) DeroonDeroDero, ToukiDenshou G1.34 Technos TJ-001 TECHNOS TJ-001 (QFP80) Agress TJ-002 Shadfrce, Wwfwfest TJ-003 Wwfwfest TJ-004 Shadfrce, Wwfwfest TJ-005 Shadfrce G1.35 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 G1.36 V-System - 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. - PCB: Aerofgt, F1gp, Pipedrm, Pspikes, Quiz18k, Tail2nos, Welltris V-System C7-01 GGA VS8803 VS8904 (QFP64) VS8905 (QFP80) - PCB: F1gp, F1gp2, Fromancr, Fromanc2, Fromanc4, Gstriker, Inufuku Suprslam, Taotaido, 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: - The VS920A is a (very) simple tilemap chip with 1 Plane, Tiles 8x8, 4bpp, Map 64x64 and no scrolling or other effects. SOURE: vidhrdw\gstriker.c G2. Custom Video G2.1 Signetics G2.11 S2636 - NOTES: The Signetics 2636 is a video chip for Sprite-Object/Background collision detection - SOURCE: vidhrdw\s2636.c + drivers\cvs.c, malzak.c, quasar.c and zac2650.c - GAMES: The Invaders (Zaccaria 1978), Quasar (Zaccaria 1980), Cosmos (Century Electronics 1981), Malzak (Kitronix), 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 - NOTES: TIA = Television Interface Adapter - SOURCE: vidhrdw\tia.c - GAMES: Tournament Table (1978) G2.22 GTIA - NOTES: GTIA = Graphics Television Interface Adapter - Atari 400/800. Based on Atari 400/800 MESS driver by Juergen Buchmueller - SOURCE: vidhrdw\gtia.c + vidhrdw\atari.c - GAMES: Exidy Max-A-Flex games G2.23 ANTIC - NOTES: Video controller. Based on Atari 400/800 MESS briver by Juergen Buchmueller. - SOURCE: vidhrdw\antic.c - GAMES: Exidy Max-A-Flex games 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 vidhrdw\atarirle.c). - GAMES: Atari Games - Hydra(1990), Primal Rage G2.25 ASIC65 - 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. - NOTES: 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. - GAMES: Namco System II, Atari G42 - SOURCE: machine\asic65.c G2.3 MOS G2.31 MOS6560 - NOTES: See VIC6560 G2.32 VIC6560 - 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). - NOTES: Video and sound emulation based on MOS 656x driver by PeT (MESS) - NOTES: Differences between 6560 and Attack Ufo derivative chip: No invert mode, no multicolor and 16 col chars. - GAMES: Added Attack Ufo (Ryoto Electric Co. 1980) - SOURCE: vidhrdw\attckufo.c and sndhrdw\attckufo.c - PCB: VIC 6560 40pin IC "C" (Attckufo) G2.4 Nintendo G2.41 2C03B PPU - 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. - SOURCE: vidhrdw\ppu2c03b.c (This code is heavily based on Brad Oliver's MESS implementation) - PCB: RC2C03B (Duckhunt, Vstennis), RP2C03C (Smgolf, Vspinbal) G2.5 Philips G2.51 SAA 5050 - NOTES: Teletext character generator - SOURCE: vidhrdw\malzak.c - PCB: SAA5050, DIP 28 (Malzak) 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 vidhrdw\itech8.c - 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.c G2.8 TLC34076 - 17th January 2003: Aaron Giles abstracted the TLC34076 palette chip emulation used by Art & Magic, Battletoads and a few other drivers. G2.9 YGV608 - 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. - 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... - SOURCE: vidhrdw\ygu608.c - PCB: Yamaha YGV608-F video controller QFP100 (Ncv1, Ncv2) G2.A Midway ICs - 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 and 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. - SOURCE: machine\midwayic.c G2.B Data East Ace/Jack - NOTES: Dragon Gun (1993) and Tattoo Assassins (1994) use an unemulated chip (Ace/Jack) for special blending effects. It's exact effect is unclear. - Source: drivers\deco32.c G3. 2D Graphic G3.1 VRender Zero - 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 : VRender Zero emulation [ElSemi] - DRIVER: 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) - NOTES: 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. - SOURCE: vidhrdw\vrender0.c - PCB: MESGraphics VRenderZERO (all-in-one main CPU/Graphics/Sound, QFP240) (Crysking) 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.c 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.c Starblade Namco (1991) namcos21.c Steel Talons Atari (1991) harddriv.c TMS34010 to render the polygons and graphics Winning Run 91 Namco (1991) namcos21.c Air Combat Namco (1992) namcos21.c Battle of the Solar System Microprose (1992) micro3d.c Cyber Sled Namco (1993) namcos21.c Ridge Racer Namco (1993) namcos22.c Ace Driver Namco (1994) namcos22.c Ridge Racer 2 Namco (1994) namcos22.c Air Combat 22 Namco (1995) namcos22.c Alpine Racer Namco (1995) namcos22.c Avengers In Galactic Storm Data East (1995) deco_mlc.c Cyber Commando Namco (1995) namcos22.c Cyber Cycles Namco (1995) namcos22.c Rave Racer Namco (1995) namcos22.c Prop Cycle Namco (1996) namcos22.c G4.2 Sprites games G4.21 Sega 16-bit hardware - 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 (vidhrdw/segaic16.c). In machine/segaic16.c he changed divide-by-zero case to return a value. - 0.91 : Aaron Giles added support for 3 multiply chips and 3 divide chips and fixed timer/compare chip implementation to match real PCB (machine/segaic16). Also added tilemap flipping support and sprite flipping support for 16A and 16B sprites (vidhrdw/segaic16). - 0.90u4 : Aaron Giles cleaned up tilemap handling using the new user_data feature and added pixel-accurate scaling to System 16B sprites (vidhrdw/segaic16.c). - 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 vidhrdw/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 : Aaron Giles created a new machine/segaic16.c to hold non-video common hardware, preliminary multiply/compare implementation moved there and changed segaic_init_palette to take a number of palette entries. - SOURCE: machine\segaic16.c + vidhrdw\segaic16.c and drivers\segahang.c + segaorun.c + segas16b.c + segas18.c + segaxbd.c + segaybd.c - GAMES: Space Harrier (1985), Out Run (1986), After Burner II (1987), Thunder Blade (1987), Super Hang-On (1987), Galaxy Force 2 (1988), A.B. Cop (1990), Strike Fighter (1991) 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 System24 - 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. - SOURCE: vidhrdw\segaic24.c and drivers\system24.c + model1.c + model2.c - GAMES: Virtua Racing (1992), Daytona USA (1993), Star Wars Arcade (1993), Virtua Fighter (1993), Wing War (1994), Manx TT Superbike (1995) 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.23 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. - SOURCE: drivers\segas32.c - GAMES: F1 Exhaust Note (1991), Sonic The Hedgehog (1992), Jurassic Park (1994) 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.24 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. - SOURCE: machine/stvcd.c + scudsp.c and drivers\stv.c - GAMES: Funky Head Boxers (1995), Die Hard Arcade (1996), Steep Slope Sliders (1998) G4.3 Other 3D games TX-1 Tatsumi (1983) tx1.c Buggy Boy Tatsumi (1985) tx1.c Top Landing Taito (1988) taitoair.c Four Trax Namco (1989) namcos2.c World Grand Prix Taito (1989) wgp.c Air Inferno Taito (1990) taitoair.c Over Drive Konami (1990) overdriv.c Double Axle Taito (1991) taito_z.c Grand Prix Star Jaleco (1991) cischeat.c Racing Beat Taito (1991) taito_z.c Road Riot 4WD Atari (1991) atarig42.c Cool Pool Catalina (1992) coolpool.c Ground Effects Taito (1992) groundfx.c Moto Frenzy Atari (1992) atarigx2.c Outrunners Sega (1992) multi32.c Stadium Cross Sega (1992) multi32.c Suzuka 8 Hours Namco (1992) namcos2.c 9-Ball Shootout E-Scape (1993) coolpool.c Racin' Force Konami (1994) konamigx.c Road Riot's Reveng Atari (1994) atarigx2.c T-MEK Atari (1994) atarigt.c Slipstream Capcom (1995) system22.c Snow Board Championship Gaelco (1996) gaelco.c 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 - 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 (PSX GPU - vidhrdw\psx.c). This fixes pitch in Libero Grande and playfield in Aqua Rush. - 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. - NOTES: Preliminary software renderer - SOURCE: vidhrdw\psx.c + machine\psx.c - GAMES: Sony ZN1/ZN2 - Battle Arena Toshinden 2 (1995), Gallop Racer (1996), Dead Or Alive (1998) Namco System 11 - Tekken (1994), Dunk Mania (1995), Soul Edge (1996) Namco System 12 - Tekken 3 (1996), Soul Calibur (1998) Konami GV - Hyper Athlete (1996), Powerful Baseball '96 (1996) - PCB: CXD8514Q, CXD8538Q, CXD8561Q, CXD8654Q G4.6 3dfx Voodoo Graphic - 0.102u5 : Aaron Giles fixed overflow in Voodoo 1/W calculation that messed up some textures and 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 and 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. And 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 Vooodoo 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 : 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 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 : 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. Also 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 Vvoodoo code broken by cleanup in 0.87u3. - 0.84u2 : 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 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) and 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 and 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 : 3dfx Voodoo Graphics SST-1 emulator [Aaron Giles] - SOURCE: vidhrdw\voodoo.c, drivers\seattle.c - GAMES: Atari - Mace: The Dark Age (1996), San Francisco Rush (1996), Vapor TRX (1998); Midway - NFL Blitz (1997), CarnEvil (1998) G4.61 Voodoo 2 - 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 and 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.... Voodoo chips 3Dfx 500-0003-03 Pixel processor (PIXELFX) QFP240 (Gradius4, SilentScope) 3Dfx 500-0004-02 Texture processor (TEXELFX) QFP208 (Gradius4, SilentScope) 3Dfx 500-0009-01 Pixel processor QFP256 (GauntletLegends, SilentScope2) 3Dfx 500-0010-01 Texture processor QFP208 (GauntletLegends, SilentScope2) Voodoo cards: Quantum 3D - Obsidian2 PCI (3DFx Voodoo2) Gauntlet Legends (Atari 1998) G4.62 Voodoo Banshee - 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. G4.63 Voodoo 3 - 0.103u3: Many Voodoo updates to add Voodoo Banshee and Voodoo 3 support [Aaron Giles]. - GAMES: San Francisco Rush 2049 G4.7 Gaelco 3D - SOURCE: vidhrdw\gaelco3d.c - GAMES: Gaelco - Speed Up (1996), Surf Planet (1997), Radikal Bikers (1998) - PCB: 3D-3G QFP206 square smd (Radikalb, Speedup, Surfplnt) G4.8 Real3D 1000 - 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 major bugfixes to the PPC603 emulation, especially the FPU. Improved MPC105 emulation and added preliminary 53c810 SCSI emulation (Lost World now tries to download everything necessary to the Real3D stuff). G4.9 Konami G4.91 K001005 - 0.104u1 : GTI Club updates [Ville Linde]: Improved K001604 tilemap emulation, very preliminary K001005 & K001006 3D graphics emulation and added some more SHARC opcodes. - 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 Pixel Renderer chip (KS10071) - SOURCE: drivers\gticlub.c G4.92 K001006 - 0.104u1: GTI Club updates [Ville Linde]: Improved K001604 tilemap emulation, very preliminary K001005 & K001006 3D graphics emulation and added some more SHARC opcodes. - SOURCE: drivers\gticlub.c G4.A 3DO - NOTES: - SOURCE: drivers\konamim2.c - 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 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 TPC1020AFN-084C. 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 Hitachi HD6845 The HD6845SP is a videocard controller 68A45 (Qix, Zookeep), HD6845SP (PBallon), HD68455P (Fantasy), HD6845SP (Hitpoker), MC6845P (Magiccrd, Poker), HD468458SP (R2dtank), HD6445 (Cyclwarr) vidhrdw\crtc6845.c 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 G5.4 Texas Instruments 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: vidhrdw\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: vidhrdw\tief.c GAMES: Pacific Novelty - Shark Attack (1980), Thief (1981), NATO Defense(1982) TMS9928 TMS9928A VDP WIP: - 0.77u1: Fixes and updates from MESS to tms9928a.c [Nathan Woods]. SOURCE: vidhrdw\tms9928a TMS9929 NOTES: Model TMS9929(a) is the PAL variant of TMS9918 video chip. It runs at 50Hz instead of 60Hz SOURCE: vidhrdw\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 TPC1020 TI TPC1020AFN-084C is the same as the ACTEL A1020A PL84C (PLCC84) (Cupsoc, TMEK, Powerins, Wrally) - PCB: TPC 1020, TPC1020AFN-084C1, TPC1020BFN-068C2, TPC1020BFN-084, TPC1024AFN-084C WIP: - 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. G5.5 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 Bt481 Bt481AKPJ110, QFP44 Policetr, Sshooter NOTES: 256-Word Color Palette 15, 16 & 24-bit Color Power-Down RAMDAC, QFP44 G5.6 Other ADV476KN50E PCB: Analog Devices ADV476KN50E CMOS Monolithic 256x18 Color Palette RAM-DAC DIP28 (Ghosthunt, Stonebal, Tickee) ADV476KN80E PCB: ADV476KN80E DIP28 (Stonebal) ADV7120KP30 PCB: ADV7120KP30 PLCC44 (Harley) CM602, CM607P PCB: Magiccrd, Fortecar CRT5037 PCB: Sharkatt, Statriv2 CRTC99 PCB: ESD CRTC99 Graphics Controller, QFP240 (Mchampdx); ESD_CRTC99 (Hedpanic) GM6845 PCB: Goldstar GM68B45S is the same as Hitachi HD6845 CTR Controller (Bmcbowl) ICS5342-3 PCB: RAMDAC (GauntletLegends) KDA0476BCN PCB: Bmcbowl RAMDAC MC6845 NOTES: CRT Controller PCB: MC68B45P (Intgames), Screen Controller chip UMC UM6845B (Twincobr) S951060 SOURCE: Video IC in Othello Derby is S951060-VGP. G6. Video D/A converter G6.1 CXD1178 - PCB: SONY CXD1178Q - QFP48, 8-bit RGB 3-channel D/A converter (Alpinerd, MrDriller2, Propcycl) G6.2 MC44200 - NOTES: The Motorola MC44200FT is a 3 Channel 8-bit video D/A converter - PCB: 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 Sony G7.11 CXA1145 - PCB: Sony CXA1145P (Topshoot) G7.12 CXA1634 - PCB: Sony CXA1634P (Topshoot) G7.13 CXA1779 - PCB: Sony CXA1779P is a TV/Video circuit RGB Pre-Driver - DIP28 (Gp500, Namco System12 - Aquarush, Soulclbr) G7.14 CXA2067 - PCB: Sony CXA2067AS is a TV/Video circuit RGB Pre-Driver - SDIP30 (Mrdrilr2) G7.2 000180 - PCB: The 000180 is used for driving the RGB output (Cryptklr, Konami-GV) ============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== ARCADE SYSTEMS 1. Arcadia System 2. Atari 2.1 Atari System 1 2.2 Atari System 2 2.3 Atari G1 2.4 Atari CoJag 2.5 Atari/Midway Seattle 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 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 Titan-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. Laser Disc 25. Board Serial Numbers / Labels .................................................................................................................................................................................................................................. H1. Arcadia System - 29th June 1999: Ernesto Corvi sent a preliminary Arcadia system driver, which is basically just an Amiga 500 modified for arcade usage. - NOTES: Arcadia Multi Select System: Piggyback 1.5mb rom board, a 8255 parallel peripheral interface, DALLAS DS1220Y NVRAM and PAL16L8. - GAMES: Up Scope (Grand Products 1986), Magic Johnson's Fast Break (1988) H2. Atari H2.1 Atari System 1 - CPU: M68010, M6502 Sound: YM-2151, Pokey and TMS5220 Video: 336x240, 1024 colors - GAMES: Atari - Marble Madness (1984), Peter Pack-Rat (1984), Indiana Jones (1985), Road Runner (1985), Road Blasters (1987) H2.2 Atari System 2 - CPU: T11, M6502 Sound: YM-2151, 2x Pokey and TMS5220 Video: 512x384, 256 colors - GAMES: Atari - Paperboy (1984), 720 Degrees (1986), Super Sprint (1986), APB (1987) H2.3 Atari G1 - CPU: M68000, M6502 Sound: YM-2151, MSM6295 Video: 336x240, 1280 colors - GAMES: Atari - Hydra (1990), Pit Fighter (1990) H2.4 Atari CoJag - CPU: M68EC020, Jaguar_GPU, Jaguar_DSP (Sound) Sound: 2x DAC Extra: Harddisk Video: 320x240, 65536 colors - 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. - GAMES: Atari - Area 51 (1995), Maximum Force (1996) H2.5 Atari/Midway Seattle - CPU: R5000, ADSP2115 or TMS32031 (Sound) Sound: Custom Extra: Harddisk, 3dfx Voodoo Card Video: 512x384, 65536 colors - NOTES: - GAMES: Atari - Wayne Gretzky's 3D Hockey (1996), San Francisco Rush (1996), Midway - NFL Blitz (1997), CarnEvil (1998) H3. Bally/Sente SAC-1 system - CPU: M6809 (1.25 MHz), Z80 (Sound) Sound: 6x CEM3394 Video: 256x240, 1024 colors - GAMES: Bally/Sente - Trivial Pursuit (1984), Stocker (1984), Mini Golf (1985), Name That Tune (1986), Rescue Raider (1987) H4. Capcom H4.1 Capcom System 1 - CPU: M68000, Z80 (Sound) Sound: YM-2151, MSM6295 Video: 384x224, 4096 colors - GAMES: Capcom - Forgotten Worlds (1988), Ghouls'n Ghosts (1988), Willow (1989), Mercs (1990), Varth (1992) H4.2 Capcom System 2 - CPU: M68000 (11.8 MHz), Z80 (Sound) Sound: QSOUND Video: 384x224, 4096 colors - 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 - Hardware: Arcade CD + encryption cartridge. - GAMES: Warzard (1996), Streetfighter III (1997) H5. Century Electronics H5.1 CVS - CPU: 2x Signetics S2650 (298295 Hz) Sound: 2x DAC, TMS5110 (Speech) Video: 248x256, 16 colors - NOTES: CVS = Century Video System, Games + BIOS - GAMES: Century Electronics - Cosmos (1981), Wall Street (1982), Hunchback (1983) H6. Data East H6.1 DECO Cassette System - CPU: 2x M6502, I8X41 Sound: 2x AY-3-8910 Video: 240x240, 32 colors - 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 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: Cassette - Highway Chase (1980), Lock'n'Chase (1981), Burger Time (1983), Boulder Dash (1985) H6.2 Data East PC-Engine - CPU: HuC6280, HuC6280 (Sound) Sound: YM-2203, MSM5205 Video: 256x232, 512 colors - 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: Data East - Battle Rangers (1988) H6.3 Data East 32 - CPU: ARM, HuC6280 Sound: YM2151, 2x MSM6295 Video: 320x240, 2048 colors - GAMES: Data East - Captain America (1991), Dragon Gun (1993) H6.4 Data East MLC - CPU: ARM or SH-2 Sound: YMZ280B, YAC513 Video: 320x240, 4096 colors - NOTES: The MLC system is basically an 8" x 6" x 2" plastic box with a JAMMA connector on it. The PCB's 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: Data East - Avengers In Galactic Storm (1995), Skull Fang (1996) H7. Exidy H7.1 Max-A-Flex - NOTES: The Max-A-Flex system 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: First Star Software - Astro Chase (1982), Flip and Flop (1983), Boulder Dash (1984) H8. IGS H8.1 PGM - CPU: M68000, Z80 (Sound) Sound: ICS WaveFront-2115 Wavetable Video: 448x224, 2304 colors - 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: IGS 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 (12 MHz), 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.5 MHz), 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.5 MHz), 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.6 MHz), 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.5 MHz) 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: I960, M68000 Sound: YMF292-F - NOTES: The Model 2 system did a two version (2A and 2B). - GAMES: Sega - Daytona USA (1993) H17.17 Model 3 - GAMES: Sega - Virtua Fighter 3 (1996), Lost World, Virtua Striker 2 (1998) H17.18 Titan-V - 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 (12 MHz), 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 (12 MHz), 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 (12 MHz), 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. Laser Disc Hitachi VIP-9500/9550 Galaxy Range (Sega 1984) Pioneer 7820 Dragon's Lair (Cinematronics 1983 Pioneer LDV1000, LD-V1100 Badlands (Konami 1984) Pioneer PR-8210A M.A.C.H. 3 (Mylstar 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/ H25. 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, SilentScope2 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 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 ============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== ROM/RAM TYPES 1. ROM 2. PROM 2.1 EA ROM 2.2 EEPROM 2.3 Flash Memory 2.31 Flash ROM 2.32 Flash Memory + Switching Regulator 2.4 Flash MCU (In-System-Programmable) 3. RAM 3.1 SRAM 3.2 DRAM 3.3 EDO RAM 3.4 VRAM 4. NVRAM 4.1 2055 5. Buffer 5.1 81LS95 5.2 CY7B991 5.3 4050 6. FIFO 6.1 LH5496 6.2 LH540202 6.3 IDT7200 6.4 ACT7814 5. Battery backed RAM 5.1 MB8464 5.2 P5164 5.3 MK48Z02 5.4 MK48T08 5.41 M48T58 5.42 MK48T02 6. Battery 6.1 TL-5104 6.2 CR2032 6.3 QTC85 .................................................................................................................................................................................................................................. R1. ROM ----------- Texas Instruments (TMS 25xx/27xx): 2516 = 2048 = 2k (TI TMS2516JL - astrob) 2532 = 4096 = 4k (TI TMS2532JDL - liberatr) 2564 = 8192 = 8k (TI 2564 - Kick) 2708 = > 8 kbit = 8 x 1024 bit = 1024 bytes = 1 kbyte = 1k (1k x 8, DIP24 - TMS270, Mitsubushi 2708) 2716 = > 16 kbit = 16 x 1024 bit = 2048 bytes = 2k (2k x 8 - TMS2716, AM2716) 2732 = 4096 = 4k (4k x 8 - AMD2732DC, Fujitsu 2732A, NEC D2732D) 2763 = 8192 = 8k (Intel) 2764 = 8192 = 8k (F-DIL-28 TMS2764, Fujitsu MBM2764K, Mitsubushi M5L2764K, Intel P2764) 27080 = 2097152 = 2048k = 2MB (NEC uPD27080) 27128 = 16384 = 16k (Mitsubishi M5L27128K, M27128A, D27128) 27256 = 32768 = 32k (F-DIL-28 AM27256, TMM27256AD, Intel P27256, HN27256) 27301 = 131072 = 128k 27512 = 65536 = 64k (SGS/Thomson M27512-2FIST, HN27512P) 27CX322 = 4096 = 4k (F1gpstar) 27CX642 = 8192 = 8k (Wildplt) 27C64 = 8192 = 8k 27C010 = 131072 = 128k (AMD 27C010, AM27C010, TI TMS27C010A) 27C020 = 262144 = 256k (AM27C020, D27C020, Atmel AT27C020 - OTP Mask, Intel 27C020) 27C040 = 524288 = 512k (AM27C040, M27C040Q - 4MB Mask, DIP32) 27C080 = 1048576 = 1024k = 1MB (F-DIL-32 1M x 8 ATMEL AT27C080) 27C100 = 131072 = 128k (AM27C100, 27C100A) 27C101 = 131072 = 128k (M5M27C101K, HM27C101AG) 27C128 = 16384 = 16k 27C160 = 2097152 = 2048k = 2MB (16MB DIP42, M27C160, ST 27C160) 27C201 = 262144 = 256k 27C202 = 262144 = 256k 27C210 = 131072 = 128k 27C220 = 262144 = 256k 27C240 = 524288 = 512k 27C256 = 32768 = 32k (AM27C256, M27C256, MBM27C256, NEC 27C256AC, NMC27C256Q, ST27C256, 27C256B) 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, DIP28, F-DIL-28) 27C800 = 1048576 = 1024k = 1MB 27C801 = 1048576 = 1024k = 1MB (ST M27C801, SGS 27C801) 27C802 = 1048576 = 1024k = 1MB (MSM27C802CZ) 27C0248 = 262144 = 256k (Gticlub) 27C1000 = 131072 = 128k (M271000ZB, D27C1000D - DIP32) 27C1001 = 131072 = 128k (271001, F-DIL-32) (Poundfor) 27C1024 = 131072 = 128k (F-DIL-40, DIP40) 27C1602 = 2097152 = 2048k = 2MB (MSM271602CZ, MSM27C1652CZ, DIP42) (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) 27C4000 = 524288 = 512k (D27C4000D) 27C4001 = 524288 = 512k (M27C4001, SGS 27c4001, F-DIL-32) 27C4002 = 524288 = 512k (ST-M27C4002, DIP40, F-DIL-40) 27C4096 = 524288 = 512k (D27C4096, 274096, Hitachi HN27C4096, 256k x 16, DIP40) 27C4100 = 524288 = 512k (Macronix MX27C4100) 27C4200 = 524288 = 512k 27C8000 = 1048576 = 1024k = 1MB (42 pin 8M Mask) 27C8001 = 1048576 = 1024k = 1MB Other: 406 = 1024 = 1k NEC B406 (1024 x 4) 426 = 1024 = 1k NEC uPB426 2864 = 8192 = 8k (Jedi) 3622 = 512 bytes (512 x 4 - Ace) 3758 = 1024 = 1k (MSM3758AS - Headon2) 4716 = 2048 = 2k (Bradley, Tugboat - Qix use 32x 4716 DRAM ????) 4764 = 8192 = 8k (Sstrngr2) 5317 = 256 bytes (PR5317.76 - Brain) 8148 = 1024 = 1k (NEC R8148IY/B426 - 1024 x 4 SRAM) 8316 = 2048 = 2k (8316E - Orbit) 8422 = 2048 = 2k (Fujitsu MB8422) 8423 = 2048 = 2k (GI8423) 8437 = 8192 = 8k (GI8437) 8532 = 4096 = 4k 9016 = 131072 = 128k (Fujitsu 9016, DIP28 - Ainferno) 9316 = 2048 = 2k (GI9316B - Boothill, Centiped) 58732 = 1024 = 1k (M58732S - Spacefev) 23090 = 131072 = 128k (Sharp LH23090 - Rallybik) 23128 = 16384 = 16k 23160 = 2097152 = 2048k = 2MB (M5M23160 - 16MBit, 42 pins mask) 23256 = 32768 = 32k 234000 = 524288 = 512k (MN234000 - Bonzeadv) 23C1610 = 2097152 = 2048k = 2MB (SOP44) (Rdft) 23C2100 = ? = ? (Kouryu) 23C3210 = 4194304 = 4096k = 4MB (MX32C210 SOP44) 23C4000 = 524288 = 512k (32 pins) 23C4001 = 524288 = 512k 23C4100 = 524288 = 512k (40 pins) 23C6410 = 8388608 = 8192k = 8MB (64MBit MaskROM, SOP44) 23C8000 = 1048576 = 1024k = 1MB (238000, D23C8000, SOP32) 23C8001 = 1048576 = 1024k = 1MB 23C1600 = 2097152 = 2048k = 2MB (Powerins) 23C16000 = 2097152 = 2048k = 2MB (Km23C16000, uPD23C16000GX, 16MBit SOP44 mask) 23C32000 = 4194304 = 4096k = 4MB (KM23C32000, uPD23C16000GX) 23C32020 = 4194304 = 4096k = 4MB (uPD23c32020A, 32MBit DIP42 mask - Sfex2) 23C64000 = 8388608 = 8192k = 8MB (Sharp 23C64000F surface mounted) 83400 = 2097152 = 2048k = 2MB (MB83400) 83800 = 2097152 = 2048k = 2MB (MB83800) 231011 = 131072 = 128k (KM231011 - Chequered Flag) 234000 = 524288 = 512k (MN234000) 275308 = 32768 = 32k (AMIC 275308 - Hidnctch) 530800 = 131072 = 128k (LH530800A, SOP32) 531000 = 131072 = 128k (Toshiba TC531000P - 28 pin and pin 22 is the extra address pin) 531024 = 131072 = 128k (TC531024 - DIP24) 532048 = 262144 = 256k (LH532048, SOP40) 532100 = 262144 = 256k 532500 = 262144 = 256k 533202 = 262144 = 256k (M533202, SOP44 mask) 534000 = 524288 = 512k 534002 = 524288 = 512k (M534002C-13, SOP40 mask, Nbajamex BIOS) RivalSchools, StreetFighterEX, BattleArenaToshinden2 534100 = 524288 = 512k 538000 = 1048576 = 1024k = 1MB (LH538100, SOP32) 538100 = 1048576 = 1024k = 1MB (LH538100, SOP32) 538200 = 1048576 = 1024k = 1MB (TC538200AP) 538500 = 1048576 = 1024k = 1MB (LH538500) 5316200 = 2097152 = 2048k = 2MB (TC5316200CP) 541000 = 131072 = 128k (TC541000) 571000 = 131072 = 128k (TC571000) 571001 = 131072 = 128k (Toshiba TC571001D, 571001D, 571001) 574000 = 524288 = 512k (TC574000AD, TC574000D (Topshoot, NintendoSuperSystem) 574200 = 524288 = 512k (TC574200 - 256k X 16, DIP40) 5716200 = 2097152 = 2048k = 2MB (TC5716200) 57C16200 = 2097152 = 2048k = 2MB (Donpatchi) 57C4200 = 524288 = 512k 57C8200 = 1048576 = 1024k = 1MB 831600 = 2097152 = 2048k = 2MB (MB831600) 831620 = 2097152 = 2048k = 2MB 8316200 = 2097152 = 2048k = 2MB (MB8316200B, SOP44) 831000 = 131072 = 128k (MB831000, DIP28) 832000 = 131072 = 128k (MB832000 - Gollygho) 832001 = 131072 = 128k (MB832001 - DIP32) 834000 = 524288 = 512k (MB834000) 834100 = 524288 = 512k (MB834100) 838000 = 1048576 = 1024k = 1MB (MB838000) 838200 = 1048576 = 1024k = 1MB (MB838200B, DIP42) 23C16000 = 2097152 = 2048k = 2MB (2316000, KM2316000, uPD23C32000GX) 26C1600 = 2097152 = 2048k = 2MB 57H1025 = 131072 = 128k (TC57H1025AD) 8 MEG = 8 MegaBit = 1MBbytes 16 MEG = 16 MegaBit = 2MB 32 MEG = 32 MegaBit = 4MB 1M Mask = 131072 = 128k (1M MaskROM, DIP28) (Champbwl) 2M Mask = 262144 = 256k (2M MaskROM, DIP32) (Champbwl) 4M Mask = 524288 = 512k (4M MaskROM, DIP42) (Rezon) 8M Mask = 1048576 = 1024k = 1MB 16M Mask = 2097152 = 2048k = 2MB 32M Mask = 4194304 = 4096k = 4MB (32MBit MaskROM, 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) NUS-ZHAJ = 8388608 = 8192k = 8MB (64Mbit, DIP28 serial MASKROM) (11beat) Hitachi: 462532 = 4096 = 4k (HN462532G = 2532) 462708 = 1024 = 1k (HN462708 = 2708) 462732 = 4096 = 4k (HN462732G = 2732) 62302 = 262144 = 256k (HN62302) 62318 = 1048576 = 1024k = 1MB (HN62318) 62344 = 524288 = 512k (HN62344BPC84) 62404 = 524288 = 512k (HN62404 - QFP44) 62412 = 262144 = 256k ( 62412) (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 LH53xxxx: LH5762 = 8192 = 8k labelled 04544191 (Finalap3, Gollygho) LH5763 = 8192 = 8k (Sharp LH5763J) LH53100 = 131072 = 128k LH532 = 262144 = 256k LH53200 = 262144 = 256k LH532100 = 262144 = 256k (DIP32) LH532500 = 262144 = 256k LH534 = 524288 = 512k LH53400 = 524288 = 512k LH534100 = 524288 = 512k (DIP32) LH534500 = 524288 = 512k (256k x 16, DIP40) LH5364000 = 8388608 = 8192k = 8MB (Sfex2) LH537 = 2097152 = 2048k = 2MB LH537019 = 2097152 = 2048k = 2MB (SOP44, 16M mask, Bangball - YMF278B wave data ROM) LH538 = 1048576 = 1024k = 1MB LH53800 = 1048576 = 1024k = 1MB (LH53805N, LH53806N, LH53808N, LH53809N...) (F1gp) LH538000 = 1048576 = 1024k = 1MB LH538100 = 1048576 = 1024k = 1MB (DIP32) LH538500 = 1048576 = 1024k = 1MB LH532G16 = 262144 = 256k (F1gp) LH532G17 = 262144 = 256k (F1gp) LH534G71 = 524288 = 512k (Pipedrm) LH534G72 = 524288 = 512k (Pipedrm) LH534GW2 = 524288 = 512k (F1gp2) LH534GW3 = 524288 = 512k (F1gp2) LH534G7K = 524288 = 512k (F1gp2) 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: 27S08 = AM27S08 = 32 bytes 27S13 = AM27S13 = 512 bytes (Quiz211) 27S18 = AM27S18 = 32 bytes 27S19 = AM27S19 = 256 bytes 27S21 = AM27S21APC = 256 bytes ( 256 x 4) 27S29 = AM27S29 = 512 bytes 27S33 = AM27S33PC = 1024 bytes (1024 x 4) Fujitsu: 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 = MB7118E = 256 bytes ( 256 x 8) (Luckywld, ThunderCeptor2) 7122 = MB7122E = 1024 bytes (1024 x 4) 7124 = MB7124E, MB7124H = 512 bytes ( 512 x 8) 7128 = MB7128E = 2048 bytes (2048 x 4) 7132 = MB7132E = 1024 bytes (1024 x 8) 7134 = MB7134E = ? (Victroad) 7138 = MB7138 = 2048 bytes (2048 x 8) 8516 = MB8516 = 2048 bytes 8518 = MB8518 = 1024 bytes Harris: 7603 = Harris 7603, M3-7603 = 32 bytes ( 32 x 8) 7609 = 1024 bytes (1024 x 8) (Gunfight) 7611 = Harris 7611, Harris M3-7611-5 = 256 bytes ( 256 x 4) 7641 = Harris 7641 = 512 bytes ( 512 x 8) (Sinistar) 7643 = Harris MI-7643A-5 = 1024 bytes (1024 x 4) 7649 = Harris M3-7649A-5 = ? (Mysticm) Intersil: 5600 = IM5600, Intersil 5600 = 32 bytes 5610 = IM5610, IM5610CPE = 32 bytes (32 x 8, bipolar) 5623 = IM5623 = 256 bytes (Rallyx) MMI (63sxxx): 6301 = MMI6301 = 256 bytes (256 x 4, 16-pin) 6306 ? ? (Arkanoid, Shootgal) 6330 = MMI6330-1J = 32 bytes (Cosmic Alien) 6331 = MMI6331-1J Bi-polar = 32 bytes (MrKourgar) 6336 = ? = 32 bytes (N-Sub, Nmouse) 6349 = MMI6349 = 512 bytes (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 63S141 = MMI63S141N Bi-polar = 256 bytes (256 x 4, DIP16) (Tokio, Avengers, Mainevt, Kikikai = 63S141AN) 63S281 = MMI63S281N ?= 256 bytes (256 x 4) (Panic Road, AirRaid, SOURCE: Mustache = 4096 ? ) 63S441 = NMI63S441N = 1024 bytes Signetics (82SXXX): 82S23 = 32 bytes (N82S23) 82S29 = 256 bytes (N82S29N, 256 x 4 BPROM) 82s100 = 256 bytes? (256 x 8)(Cat 'N Mouse) 82S115 = 512 bytes ( 512 x 8) 82S123 = 32 bytes (N82S123AN, N82S123N, 32 x 8 BPROM) 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) 82S137 = 1024 bytes (N82S137N, 1024 x 4 BPROM) 82S141 = 512 bytes ( 512 x 8) 82S147 = 512 bytes (SN82S147N, Philips N82S147AN, 512 x 8 BPROM, 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) Texas Instruments (74SXXX): 74S188 = 32 bytes (32 x 8, DIP16) 74S201 (Conquer, Hotshock, Zigzag) 74S287 = 256 bytes (256 x 4, DIP 16 / PLCC20 - Soccer, Sprint1, Skyraid) 74S288 = 32 bytes (DM74S288N, 32 x 8, bipolar PROM, DIP16) 74S471 = 256 bytes (AstroBattle) 74S472 = 512 bytes (512 x 8, DIP20, Guardian) 74S474 = 512 bytes (512 x 8, DIP24 - Sidetrac) 74S476 = 1024 bytes (Dribling, Superbug) 74S516 = 512 bytes (SN74S516, Tx1) 74S571 = 512 bytes (512 x 4, PLCC20, Dodgem, Sprint1) 74S572 = 1024 bytes (1024 x 4, DIP18 - Vangrd2) Texas Instruments (TBPxxSxx): TBP18S030 = 32 bytes (32 x 8) TBP21S41 = 1024 bytes TBP21S42 = 512 bytes (Pettanp) TBP24S10 = 256 bytes (TBP24S10N 256x4) TBP24S41 (Atari Soccer) TBP24S030 = 256 bytes TBP28S42 = 512 bytes (Pettanp, TX1) TBP28S46 = 512 bytes (TBP28S46N, Bking) TBP28L22 = 256 bytes (TBP28L22N) TBP42S10 = 256 bytes Others: 93451 = 1024 bytes (Dodgem) 93511 = 93Z511DC = 2048 bytes (Portrait) EB16.22 = 256 bytes (Data Prom - Space Seeker 1981) S68E08 = 512 bytes (Denjinmk, Godzilla, Sdgndmrb) Cypress CY7C291 (Bi-polar, SuperZolaPacGal) Cypress 7C292A = 2048 bytes (2048 x 8) Cypress 7C264 = 8192 bytes (8192 x 8) NS 47S287 = 2048 bytes R2.1 EA ROM (earom) - NOTES: EA ROM is an Erasable Reprogrammable rom to save the top 3 high scores and other things. - GAMES: Atari - Centipede (1980), Tempest (1980), Asteroid Deluxe(1980), Black Widow (1982), Cloud9 (1983) R2.2 EEPROM - 0.82u2 : Tomasz Slanina make changes to the eeprom_interface_93C46 (please check games using this to make sure non broke). - 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. - SOURCE: machine\eeprom.c, machine\at28c16.c - PCB: 93C46 = 128 Bytes EEPROM (Glpracr), 93C46A (Fromanc2) CMOS serial EEPROMs (DIP or SIO - 8) 24C01 128 bytes x 8 Amtel 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 TMM24256 24C512 65536 bytes x 8 Toshiba TMM24512 (Robocop) Microwire (CMOS serial EEPROMs DIP or SIO - 8) 93C45 128 bytes x 8 / 64 x 16 (AKM93C45, equivalent to 93C46 - Fixeight, Nslasher, Avengrgs) 93C46 128 bytes x 8 / 64 x 16 (93LC46B - Gauntlet Legends), SGS Thomson ST93C46CB1 (Sailormn, Agallet) and all cave.c games 93C56 256 bytes x 8 / 128 x 16 (93LC56 - Loderndf, Gunbird2, Daraku, Hotgmck. SOURCE: drivers\psikyo4.c 93C66 512 bytes x 8 / 256 x 16 (AMTEL AT93C66 (PSOP8) Bbakraid, Policetr, Sshooter) 93C76 1k x 8 / 512 x 16 93C86 2k x 8 / 1k x 16 93CF96 (93CF96-2) Komani-GV) Other Type (Game) 16911 OKI M16911 (Gaiapols) 2205 ER2205, ER-2205 (Centiped, Qwakprot) 27L1000 Macronix MX27L1000QC-12 128k x8 EEPROM, PLCC32 (Crysking BIOS) 28C16 ATMEL AT28C16 (Machbrkr), Atmel AT28C16 2k x8 EEPROM SOP24 (Glpracr), 28C16A-15/P (Badlands), BR28C16 (Outfxies), CSI CAT28C16 DIP24 (Stonebal) 28C64 AT28C64 (Propcycl, Alpine Racer) 2914 Seiko S2914 EEPROM, DIP8 (Gdfs) 5032 EPM5032 (Tantr, Zunkyou, Tfreac, Columns), EPM5032DC-25 (Mahmajn, Mahmajn2) 52764 ML52764 (Brubber) 58C65 HN58C65 (Luckywld, Gollygho) 5911 ER5911 (Moo, Mystwarr) 68234 Motorola 68234 EPROM (Frontlin) R2.3 Flash Memory R2.31 Flash ROM - 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 sanity checking and changed a printf() to logerror() to intelfsh.c. - 0.95u3 : smf increased FLASH_CHIPS_MAX in src\machine\intelfsh.h and 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 and 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 : 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\intelfsh.c 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 (Propcycl, Tekken2), Sharp LH28F008 (Rfjet) 28F016 = 2097152 = 2048k = 2MB Intel Flash E28F016S5 TSOP40 16M (PacaPacaPassionSpecial) 28F032 = 4194304 = 4096k = 4MB Intel Flash E28E320J5 TSOP56 32M (Soulclbr, Xfiles) 28F640 = 8388608 = 8192k = 8MB Intel Flash DA28F640J5 SSOP56 64M (Mrdrilr2) 28F128 = 167772126 = 16384k = 16MB Intel Flash E28F128J3A TSOP56 128M (Crysking) 29F400 = 524288 = 512k Fujitsu Flash MBM29F400B SOP44 4M (MrDriller, Tekkentt) 29F8100 = 1048576 = 1024k = 1MB Macronix SOP44 8M (Jumppop) 29F016 = 2097152 = 2048k = 2MB Fujitsu Flash MBM29F016 TSOP48 16M (MrDriller, Tekkentt) 29F1610 = 2097152 = 2048k = 2MB Macronix MX29F1610MC SOP44 16M (Silkroad, Vshoot) 29W32000 = 4194304 = 4096k = 4MB Samsung NAND Flash KM29W32000AT TSOP44 32M 3.3V Serial EEPROM (SeeSeeFindOut) R2.32 Flash Memory + Switching Regulator MAX232 Maxim MAX232CPE Dual EIA-232 Driver/Receiver (DIP16) (CPS-2, 11beat, Mtetrisc) MAX232 Maxim MAX232CPE Multichannel RS-232 Driver/Receiver (Ppcar) MAX690 CPA (Dynobop) MAX693 Maxim max693acwe (watchdog) (Blitz99, MK3) MAX705 (Kinst, Kinst2) MAX734 Flash Memory Programming Supply Switching Regulator (+12V 120mA), SOIC8 (MrDriller2, Gp500) R2.4 Flash MCU (In-System-Programmable) AMTEL 89C40 AT89C40 51-24PC (Beastrzb) 89C51 AT89C51 (Chameleon 24-in-1) 89C52 MCU + internal 8K flash AT89C52 (3in1) R3. RAM ---------- 256 = Hitachi S256KLP (Umanclub) 314 = TMM314 (Invadpt2) 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 (2k x 8 SRAM - Total Qty 6 = 2+2+1+1), SRM2016C15 (Tehkanwc, Truxton), S2016C (Turbosub), 2016 (DIP24 - Bronx) 2018 = Toshiba TMM2018D = Motorola MCM2018AN45 (2k x 8 SRAM, DIP24) 2063 = Toshiba TMM2063 (8k x 8 SRAM, DIP28) 2064 = Toshiba TMM2064 = SRM2064C (8k) 2088 (Groundfx) 2101 = (256 x 4 SRAM) 2102 = (1k x 8) 2111 (256 bytes x 4 SRAM) (Ipminvad, Headoni) 2114 = M5L2114 (1k x 4 SRAM), NEC uPD2114LC (1k x 8 DRAM, DIP18) (Starspnr) 2115 (Rockclim) 2125 = D2125 (Bcruzm12, Carjmbre, Cclimber) 2128 = OKI MSM2128 = 2128SL (16Kbit = 2k x 8) 2144 (Blasto) 2147 (Noboranb) 2148 = MBM2148L-55 (1k x 4 SRAM) 2364 = TMM2364 (Turbo) 2416 = Winbond W2416K (Karianx, Paranoia, Wbbc97) 3106 (256 x 1 - Ace uses 3x 3101 = 3bits: 0, 1, 2) 3517 = SANYO LC3517A 3564 = SANYO LC3564SM-85 (SMD)(Jchan) 3664 = SANYO LC3664 (8k x 8 SRAM, SOIC28) 4015 = MK4015N (Carnival) 4027 = MOSTEK MK4027-4 (RAM, DIP16) (Spaceg) 4044 = Mitsubishi M5T4044P-45 M58754 (Astinvad) 4045 = TMS4045-45NL (RAM, DIP18 - Spaceg) 4060 = TMS4060 (Sbowling) 4069 (2k x 8) (Carnival, Springer) 4116 (Beezer, Sharkatt) 4164 (Idsoccer) 4334 = HM4334P-4 SRAMs (Qix, Unknown Sega game) 4416 = TMS4416 (16k x 4 DRAM) (Hcrash, Dogfgt) 4461 = TMS4461 4517 = MCM4517 (TriviaGreyhoundElectronics) 4801 = MN4801AN-3IRL (Conquer) 5101 = SCM5101E = D5101LC (SRAM) 5116 = LH5116D = P5116 = (2k x 8) (Brapboys, Heatbrl) 5160 = Sharp LH5160D 5168 = Sharp LH5168D (8k x 8 SRAM) 5264 (Robokid) 5268 = Sharp LH5268AN (8K x 8 SRAM, SOP28) (MK3, Capcom ZN1/2) 5280 (Invaders) 5497 = Sharp LH5497D (Jchan) 5501 = Toshiba TC5501P (256 x 4 SRAM, DIP22) 5563 = TC5563 (Drgpunch, Mmpanic) 5565 = TC5565 5588 = Toshiba TC5588P 6064 (Omegaf ram ?) 6116 = Hitachi HM6116LP = HY6116AP (2k x 8 RAM, DIP24) 6117 (TriviaGreyhoundElectronics) 6148 = Hitachi HM6148HP (1k x 4 SRAM, DIP18) 6164 = Unicorn Microelectronics UM6164DS-12, UM6164BK (8k x 8 SRAM, SOJ28) 6166 (Psychic5 ram ? = 6116 (!)) 6168 = LH6168 (Dblewing) 6206 = MCM6206 (32k x 8 SRAM) 6216 = BR6216B (2k x 8) (Fromanc2) 6262 (Cairblad) 6264 = MCM6264CP35 = UT6264 (SOIC28) = Hyundai HY6264P = 6264ALSP = CDM6264LE12 = Mosel MS6264 = Hitachi HM6264LP (8k x 8 SRAM, DIP28) 6265 = BR6265BF 6516 = Mosel MS6516 (2k x 8) (Gtg, Stratab) 6810 = MC6810 (128x8 SRAM) (Shooting Gallery, Victory) 7063 = MB7063 8114 (Espial) 8116 (FieldGoal) 8148 (1k x 4 SRAM) (Grobda) 8216 = Mitsubishi M5L8216 (256 bytes x 1 SRAM, DIP16) (Amidar, Headoni, Spaceg) 8264 (Buckrog) (64k x 4 DRAM) 8416 = MB8416 8421 = Fujitsu MB8421-90LP (SDIP52) (Dual Port SRAM) (Opwolf3) 9114 (D-Day) 9122 = AM9122 (256 x 4 SRAM) (Turbosub, Bcruzm12) 18128 = TC18128CFWL (Bel) 18318 (Portrait) 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 = D42101 (DIP24) 43001 = D43001 (32k x 8 SRAM, Cbaj) 43256 = NEC 43256 (32k x 8 SRAM), D43256BGU (Rfjet) 44251 = TMS44251 (28 pin ZIP) (Stonebal) 50464 = HM50464 (Pbillian) 511664 = M511664 = TC511664 51257 = M51257 (256k SRAM) 51821 = TC51821 (Cyclwarr) 51832 = TC51832AFL (SOP28) (32k x 8 SRAM) 52250 = LH52250AN (32k x 8 SRAM) (SOP28) 52256 = LH52256ALSP (32k x 8 SRAM) 52258 = Sharp LH52258 (32k x 8 SRAM) 53461 = HM53461 (Radm), HM53461ZP (Titlef) 53462 (Drgpunch) 54260 = MCM54260 (SOJ40) (Stonebal) 55257 = Toshiba TC55257CFL (32k x 8 SRAM, TSOP28) 55328 = TC55V328AJ = TC55328AJ (SSOP28) 57725 = MB57725 58275 (Kingfut) 58725 = M58725P = MB58725 61256 = Unicorn Microelectronics UM61256FK (32k x 8 SRAM DIP28/SOJ28 Cache RAM) 62068 = MCM62068AEJ25 (SSOP28) 62256 = HM62256ALSP = Hitachi HM62256LFP = HY62256A = Mosel 62256 = UM62256D = Samsung KM62256CLP (32k x 8 SRAM, SOJ28/DIP28) 64256 = (32k x 8) (Bubl2000) 65256 = Hitachi HM65256BLSP = 65256BLFP (surface-mounted, SOP28) 65728 = HM3-65728BK (Sderby, Madmotor) 65756 (Aligator, Biomtoy) 65764 = HM65764 = HM3-65764 71024 = IDT71024 71124 = IDT71V124 (128k x 8 SRAM, SOJ32) (Gp500) 71256 = IDT71256 = DT71256 (SOIC28) (32k x 8 SRAM, SOJ28) 84256 = Fujitsu MB84256A = 84256 (32k x 8 SRAM, SOP28) 93422 = AMD AM93422DC (256 x 4 SRAM) (40love, Pturn, Turbosub) 241024 = W241024AK-15 (1Meg SRAM) 341256 = NKK N341256SJ = N341256P (32k x 8 SRAM) = 34256 (Raiden2) 431000 = NEC D431000AGW 414260 = Panasonic MN414260SJ 424800 = NEC 424800 (CryptKiller) 511632 = TC511632FL 514252 = M514252A 514260 = Toshiba TC514260BJ (256K x 16 DRAM, SOJ40) 514262 = M514262 (Ddenlovr) 514270 = HM514270CJ7 (Bel, Harley) 514400 = TC514400 (Gdfs), HM514400 (Eaglshot) 514800 = TC514800 (Mayjisn2) 518128 = Toshiba TC518128 (Rfjet) 521002 = LH521002AK 524256 = TC524256BZ (Lockload) 528126 (9ballsht, coolpool) 528128 = Vitelic V52C8128K70 (possibly 128k x8 DRAM, SOJ40) (9ballsht, Pairs) 528256 = Sharp LH528256-70 (Desertwr), LH52B256D (Bloodwar, Speglsht) 528257 = TC528257 (Landgear, Speglsht) 524258 = Toshiba TC524258BZ 528267 = Toshiba TC528267J (RapidFire) 538254 = HM538254BJ (Bel) 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) 628032 = ST M628032 (32k x 8 SRAM, SOIC28) 628256 = LH628256 (256k x 8 SRAM) (Gtmr2) 628512 = (512k x 8 SRAM) 725608 = LG GLT725608-12J3 (SOIC28) (Gunbird) 4516161 = NEC uPD4516161ag5-A10 (1M x 16 SDRAM, TSOP) 2316162 = T2316162 (SOJ44) (Gunpey, Xfiles) 4C1M16E5 = MT4C1M16E5DJ-6 (4x located on a 72 PIN SIMM Memory modules) (A51site4) 4C4001 = MT4C4001 (1M x 4 DRAM, SOJ28) (Kinst, Kinst2) 61C16 = Vitalec V61C16S45L (Wwfwfest) 61C256 = IS61C256AH 61C64 (Daitorid, Puzzli) 61C640 (Balcube) 61C68 = ISSI IS61C68 (CyberSled) 71C256 = CAT71C256 (B-RapBoys) Cypress RAM PCB note --------------------------------------- CY7C109 1M SRAM CY7C128 2k x 8 SRAM (Colour RAM) (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, SOP28 CY7C188 (Bel) CY7C195 (Gstriker, Vgoalsoc) CY7C199 32k x 8, SOIC28 (CY7C1399 - GP500) CY7C384A CY7C421 (Rfjet) LGS + Goldstar RAM PCB note --------------------------------------- 71C4260 LGS GM71C4260AJ70 (SOJ40) (Metmqstr) 76C28 LGS GM76C28A, GM76C28K, Goldstar GM76C28A (2k x 8 SRAM), GS GM76C28 (Twincobr) 76C88 LGS GM76C88ALFW-15 (8k x 8, SOP28) 76C256 LGS GM76C256BLL-70, Goldstar GM76C256ALL (Fortecar), GM76256 (32k x 8 SRAM, SOP28)(Crysking) Mitsubishi RAM PCB note --------------------------------------- M5M4464 (Brapboys, SegaSystem24) M5M5165 (Angelkds) M5M5178 M5M5178AFP M5M5179 M5M5179AJ (Airco22b, Gollygho, Luckywld) M5M5189 (Cybsled) M5M5256 M5M5256BFP (SOP28) (Vshoot) M5M5278 M5M5278P (Titlef) M5M5517 M5M5517P, M5517P (2048 x 8 SRAM) (40love) M5M44170 M5M44170CJ (Bel) M5M44260 (256k x 16 DRAM - 4MBit) (Cbaj, Capcom ZN1/2) M5M51008 M5M51008AFP (SOP32) (Outfxies) M5M410092 M5M410092FP (TQFP128) (Harley) M5M442256 M5M442256AJ, M5M442256AL (Eggventr) M5M4V4169 (Harley) M5M4V4265 (256k x 16 DRAM, TSOP40/44) (NamcosSystem32) SEC + Samsung RAM PCB note ---------------------------------------------------------------------------------- KM4116V256G KM416C256 (Gaia) KM4132G271Q QFP100, 128k x 32 x 2 banks, 32MBit SGRAM (Glpracr) KM416S1020 16M SDRAM KM416V256BLT (Konami-GV) KM416V1204 KM416C1204CJ, SOJ42 (Mrdrillr, SeeSeeFindOut) KM4216V256 KM4216C256G, 256k x 16 (Cryptklr, Radikalb, Surfplnt) KM424C257 (Alpinerc) KM428C256TR-7 (Bang) KM44C256BT KM44C256BT-8 22BY 20 pin (Pntnpuzl) KM48V514BJ KM6161002CJ 64k x 16Bit CMOS SRAM, SOJ44 (Xfiles, Kdynastg) KM6264BLS KM6264AL KM681000 KM681000ALP, KM681000BLG, 128k x 8 SRAM , SOP32, Surface-mounted (Splash, Silkroad) KM68257 (Scud, Hotdogst) KM68658 (Kickgoal) Sony RAM PCB note -------------------------------------------------------------- CXK5813 CXK5813D (Robowres) CXK5814 CXK5814P (Pairsnb) CXK5816 CXD5816SP (Bcstry, Meijinsn, Shougi) CXK58257 CXK58257ASP, CXK58257AP, CXK58257p (Drivedge, 32k) CXK5863 8k x 8 SRAM, DIP28 CXK5863BP, CXK5863P (CPS2, Fromanc2) CXK5864 64k SRAM 5864ASP, 5864PS (Le2, Truxton, Wildfang) CXK58638 CXK58638P (Bbakraid) CXK581000 (Grdians) CXK581001 (Gundamex) Signetics RAM (82SXXX) --------------------------------------- 82S09 N82S09 (Spaceg, StrikesAndSpares, Turbo, Wwjgtin ) RAM or ROM? 82S16 N82S16N (Wwjgtin, Amspdwy, Rescue, Tripool), 256bytes x 1bit Bipolar DRAM (Striv) 82S19 (Mrflea) Other 81141622 (Gticlub) NEC D4016 (Lastfero, Lastfort), TMS4016 (CliffHanger) Nintendo RDRAM18-NUS (Mtetrisc) R3.1 SRAM BS616LV1010 = (64k x 16 SRAM, TSOP44) (DemonFront) MT5C1008 = (128k x 8 SRAM) 24257 = Winbond W24257, W24257S, W24257AJ (32k x 8 SRAM) V52C4258Z80 = Vitelic V52C4258Z80 ?? possibly (256k x8 SRAM, ZIP28) (Ghosthunt, Tutstomb) R3.2 DRAM MB461 (Beezer) MB8118 (Chboxing, Chwrestl, Laserbas) MB8128 MB8146 = MB8146A (USG32) MB81416 = Fujitsu MB81416-10, MB81416A, MB-81416 = (4bit x 16384) DRAM chips (40love) 814260 = Fujitsu 814260 (256k x 16 DRAM 4MBit, SOJ40) (Beastrzr, Loderndf) MB81C466 (System 24) MB81464 (Luckywld) MB81C4256 = Fujitsu 81C4256 (256k x 4 DRAM, SOJ24) MB81C78A = (8k x 8 SRAM ?, SOP28) (Cyclwarr, Smgp) 4464 = NEC D4464c, Panasonic MN4464M (64k x 4 DRAM, DIP18) 514256 = M514256, TC514256BZ, MCM514256, HM5142560JP8 (1M DRAM) 514260 = M514260C (SOIC40) = HY514260B = Hitachi HM514260JP8 (256k x 16 DRAM) 5118164 = Hyundai HY5118164CJC (16M x 16 DRAM) (Misncrft, Sscope2) 658128 = Hitachi HM658128ADFP-10 (128k x 8 SRAM, SOP32) (CPS2 System) 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) (SOIC40, 256k x 16 DRAM, SideBs2) 424805 = 424805AL (512k x 8, 4MBit DRAM, SOJ28) 51V18164 = HY51V18164BJC (SOJ42) 51V4260 = TC51V4260BJ (256k x 16, 4MBit DRAM, SOJ40) 57V651620 = Hyundai HY57V651620 (4MB x 16 SDRAM, SSOP54) (Crysking) R3.3 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) 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 1M x16 EDO DRAM (SOJ44) (Suplup) 81C256K16 = Silicon Magic SM81C256K16CJ 100MHz EDO RAM, 4Meg (Gauntleg, GauntletLegends, Gradius4, Sscope2) R3.4 VRAM 55160 = TMS55160DGH 256k x 16 (MetalManiax) 81461 = MB81461 256k VRAM (Volfied) 548262 = M548262 256k x 8 (Fastpage VRAM - Pkgnsh, Realbrk) 42C4064 = MT42C4064Z 64k x 4 VRAM (Gtg, Hstennis, Ninclown, Wfortune) 42S4260 (Mk3) 42C8128 (Mk3) R4. NVRAM - 0.81u7 : Ville Linde added preliminary Dallas DS2404 (RTC/CMOS) emulation to the Seibu SPI system. - 18th January 2001: David Graves added NVRAM emulation to Slap Shot. - 4th December 2000: Aaron Giles fixed a NVRAM bug in Rim Rockin' Basketball. - PCB: DALLAS DS1220Y 16k DIP24 (Ghosthunt, RapidFire, Strvmstr, Tickee) DALLAS DS1225Y 16k (MegaTouch 3/5) FM1208S RAMTRON 4096bit Nonvolatile Ferroelectric RAM DIP24 (Raystom, Taito GNET-System) R4.1 2055 - NOTES: NOVRAM used by Atari games to save high scores. - PCB: ER2055 (Qwak), ER-2055 (Caterpillar Olympia 1980) R5. Buffer R5.1 81LS95 - PCB: The DM81LS95 is a TriState buffer (Portrait). R5.2 CY7B991 - PCB: Programmable Skew Clock Buffer, PLCC32 (Sidebs, Sidebs2, Landgear) R5.3 4050 - PCB: Toshiba TC4050BP Non-Inverting Hex Buffer / Converter, DIP16 (Champbwl), 4050 (Pairlove, 11beat, Magical, Mtetrisc) R6. FIFO R6.1 LH5496 - PCB: Sharp LH5496D-50 Asynchronous FIFO, DIP28 (Ejanhs, Rdft, Rdft2, Rfjet, Senkyu, Viprp1) R6.2 LH540202 - PCB: LH540202U CMOS 1024 x 9 Asynchronous FIFO, PLCC32 (Cbaj, ZN1/2) R6.3 IDT7200 - PCB: Integrated Devices Technology IDT7200 256 x 9 CMOS Asynchronous FIFO (NamcoSystem23) R6.4 ACT7814 - PCB: ACT7814-25 64 x 18 strobed FIFO (MetalManiax) R5. Battery backed RAM R5.1 MB8464 - NOTES: The Fujitsu MB8464 is a battery backed ram chip (8k x 8 SRAM). - Source: shangkid.c R5.2 P5164 - PCB: P5164SL battery SRAM (Gtg2, Stratab), 5164 (4x Tharrier), P5164 8k x 8 RAM (Gtg), P5164S (Hstennis, Peggle, Slikshot) R5.3 MK48Z02 - PCB: MK48Z02B-15 ZEROPOWER RAM (MetalManiax, Amerdart) R5.4 MK48T08 - 0.101u4 : smf removed code that reset the timer when reading/writing on the mk48t08 timekeeper chip. - 0.95u3 : smf commented out logerror's in timekpr.c. - SOURCE: machine\timekpr.c - PCB: ST TimeKeeper Ram MK48T08B-10 - Lithuim Battery backed RAM chip (8k x 8) (Opwolf3), MK48T08B-10 Battery Backup SRAM (Slapshot) R5.41 M48T58 - 0.93u2: M48T58 / M48T58Y emulation, used by hornet and others [smf] - SOURCE: machine\timekpr.c - PCB: M48T58Y-70PC1 = ST Timekeeper RAM (Gradius4) R5.42 MK48T02 - PCB: MK48T02B-15 TIMEKEEPER RAM (MetalManiax) R6. Battery R6.1 TL-5104 - NOTES: The Tadiran TL-5104 3.6V lithium (AA-sized) is for battery backup's. - GAMES: Ataxx (Leland 1990) R6.2 CR2032 - PCB: Battery # CR2032 - 3 volt (Stmblade, Sega System24), CR-2032 battery (Hyperspt), 3 Volt coin battery for use with DS2404S (Viprp1) R6.3 QTC85 - PCB: Battery QTC85 AA 3B960 (Truco) ============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== DECLARATION Hexadecimal / Binary -------------------- 0 = 0000 1 = 0001 2 = 0010 3 = 0011 4 = 0100 5 = 0101 6 = 0110 7 = 0111 8 = 1000 9 = 1001 a = 1010 b = 1011 c = 1100 d = 1101 e = 1110 f = 1111 Hex table --------- 32 = 0x20 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 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 gold or silver tolerance ring Orange 3 x 1k is always on the right side. 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 % Or for the MAME source: RES_K(20) Names table ------------ A/D = Analog Digital AC = Alternate Current ADSP = Analog Device Single Processor ALU = Arithmetic Logic Unit ANSI = American National Standards Institute API = Application Program Interface ARP = Address Resolution Protokoll ASCII = American Standard Code of Information Interchange BBS = Bulletin Board System BDOS = Basic Disk Operating System Bit = Binary Digit (0 or 1) BIOS = Basic Input Output System Byte = 1 Byte = 8 bits CAS = CCP = Control Command Processor CDROM = Compact Disk - Read Only Memory CGA = CHD = Compressed Hunks of Data CIA = Complex Interface Adapter CISC = Complex Instruction Set Computer CP/M = Control Program for Microcompters CPU = Central Processing Unit CPLD = Complex Programmable Logic Device 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 = 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 = Device Single Processor DUART = Dual Universal Asynchronous Receiver Transmitter (=2*UART) EAROM = Electrically Alterable ROM EEPROM = Electrically Erasable Programmable ROM EIA = Electronics Industries Association EOT = End Of Transmission EPROM = Erasable Programmable ROM FMV = Full Motion Video FPGA = Field Programmable Gate Array FTP = File Transfer Protocol GAL = Gate Array Logic HD = High Density (floppy disk) HTTP = Hypertext Transfer Protokoll IC = Integrated Circuit IDE = 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 ISO = International Standards Organization LAN = Local Area Network LCD = Liquid Crystal Display LED = Light Emitting Diode LLC = (Logical Link Control LPC = Linear Predictive Coding LRC = Longitudinal Redundancy Check LSI = Large Scale Integration MCU = Micro Controller Unit MHS = Message Handling System MIPS = Million Instructions Per Second Modem = Modulator/Demodulator MOS = Metal Oxide Semiconductor MPU = Micro Processing Unit MSI = Medium Scale Integration NTSC = National Television System Commitee NVRAM = Non Volatile RAM PAL = Programmable Array Logic PAL TV = Phase-Alternation-Line TV PLD = Programmable Logic Device PCM = Pulse Code Modulation (sample playback) PWM = PPCM = Packed PCM PIA = Peripheral Interface Adapter PIO = Parallel Input Output PIT = Programmable Interval Timer PLD = Programmable Logic Device PPI = Parallel Peripheral Interface PPP = Point To Point Protokoll PROM = Programmable ROM RAM = Random Access Memory RAS = 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 SCI = Serial Controller Interface SCSI = Small Computer System Interface SD/1D = Single Density (floppy disk) SI = Standard Interface SIO = SM = Surfaced Mounted SMB = Server Message Block-Protokoll SMTP = Simple Mail Transfer Protocol SNA = SubNet Access Protocol SPX = Sequenced Packet Exchange SQL = Structured Query Language SRAM = Static RAM SS = Single Sided (floppy disk) SSI = Small Scale Integration TCP = Transmission Control Protocol TTL = Transistor Transistor Logic VCE = VGA = VIA = Versatile Interface Adapter UART = Universal Asynchronous Receiver and Transmitter USART = Universal Synchronous/Asynchronous Receiver/Transmitter UDP = User Datagram Protocol WWW = World Wide Web BOARD ----- 68k = Motorola 68000 ADC = Analog Digital Converter AMP = Amplifier BATT = Battery BD = Board BG = BackGround BKG = BackGround BPROM = Bi-polar Prom AUX = Auxiliary CLK = Clock Crystal CLR = Color Prom CNx = Connection CHR = Character CRC = Checksum CRT = Graphic/Video CRTC = Video Controller DIP = Dual Inline Package DIPSW = Dipswitch DSW = Dipswitch DTH = Dr Math PCB EPR = EPROM FG = ForeGround GFX = Graphics/Video PCB GIB = Gun Interface PCB HD = Hard Drive HST = Host PCB ID = File IDentification LB = Lower Board LOC = Location LSB = nS = nano Seconds MB = Middle Board MCLK = Main Clock Crystal MUX = Multiplexer OBJ = Object/Sprite OBN = Motion Objects OSC = Clock Crystal OST = Oscillator PCB = Printed Circuit Board PGA = PGM = Program ROM Piggy = Piggy-backed PLCC = POT = Potentiometer (BASS, TREBLE, BALANCE, LEFT/RIGHT and VOLUME) PQFP = Package Quad Flat Pack PSG = QFP = Quad Flat Pack RCA = RTC = Real Time Clock SCN = Screen/Background SND = Sound / Sound PCB SMD = Surface Mounted Device SOIC = SOP = SSB = Speech/Sound PCB SW = Dipswitch TB = Top Board TSOP = TX = Text (Scroll) VGB = Video Graphics PCB VID = Video VDC = Volt Direct Current (=> +5vdc) VDP = CRT controller XTAL = Crystal (also X1, X2,...) PREFIX MANUFACTURER EXAMPLES ----------------------------------------------------------------------- AM AMD AM27C512 AT Atmel AT27C080, AT28C16 CY Cypress CY7C109 CXK5 Sony CXK5808 D NEC D2732D DS Dallas DS1220 GLT LG GLT725608 GM Goldstar, LGS GM76C28K, GM76C88ALFW, GM76C256BLL HN Hitachi HN27C4096, HN462708 HY Hyundai HY6264 IDT Integrated Devices Technology IDT7200 IS ISSI ISSI IS61C68 KM Samsung, SEC KM29W32000AT, KM4116V256G LC Sanyo LC3517 LH Sharp LH5763J LM National Semiconductor LM385, LM833 M ST Microelectronics M271000ZB, M533202 M5 Mitsubushi M5L2764K, M5L27128K MC Motorola MC68B09EP, MC68705P5 MB Fujitsu MB8422 MK MOSTEK MK4027 MM National Semiconductor MM5437 MMI ? MMI6301 MN Panasonic MN414260 MR OKI MR27V12800, MR27C3252CZ MS Mosel MS6516 MSM OKI MSM2128 MX Macronix MX27C2000 N NKK N341256 NMC NS NMC27C256Q P Intel P27256 SN Signetics SN82S131N, N82S137N SM Silicon Magic SM81C256K16CJ TC Toshiba TC531000, TMM2009 TDA Philips TDA1519, TDA1543 TMS Texas Instruments (TI) TMS27C010 UM Unicorn Microelectronics UM6164DS uPB NEC uPB426 uPD NEC V Vitelic V52C8128K70 W Winbond W24257 CAPCOM = Japan Capsule Computers IREM = International Rental Electronics Machines PSE = Project Support Engineering SSV = Seta, Sammy and Visco ============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== MEMO OTHER ----- BU9480: 11beat, Mtetrisc = BU9480F 16-bit stereo D/A converter for audio application SOP8 (?) 1765 = XILINX 1765DPC: MetalManiax 1718 = XILINX 1718DPC: Kdeadeye 2061 = IC Designs 2061ASC-1 SOIC16, also found on Namco System 11 PCBs: Gp500 2465: Krzybowl 2621N: Laserbat 27ls00 (sprite buffer ram): Botanic 32005 = TI 32005BWBL (Mstworld) 34070 = TMS34070 ?: Amerdart 3631 (DIP18): Mjchuuka 4040 = HCF4040 ?: Chameleon 24-in-1, Unknown Sega 4064: Lastfort 4218160: (SideBySide2) 4316 = Asahi Kasei AK4316-VS: MetalManiax or AKM_AK4310VM (Beastrzr, Area51) 45055: IDsoccer 4558 = KA4558 (Xfiles), GL4558 (Matchit, Sichuan2), 4558 (NeoGeo Motherboard) 4L10F2467/8 - QFP160: Realbrk 51516 = audio chip (Amigo) = M51516 (Xsleena, Agress) 5216: Lastfort, Buckrog 53323: Buckrog (=Mitsubishi M533xx ?) 53354: AttackUfo (=Mitsubishi M533xx ?) 57C55LK: Penocup 57S22 = DL57S22 (14 pin): Survival (drivers\phoenix.c) 58256: NeoGeo 6262: Cairblad 6269: Lstfort 6520 = SY6520: JackPottensPoker 6820 = SY6820: Copsnrob, JackPottensPoker 6564L (SOP24) (=OPL?): Chindrag 70337: Firebarr 70C178 = UMC UM70C178 (Ram or gfx ctrl?): Cheesech 71AJC46A (SOIC8): Harley 75365: Buckrog 75LBC176: Radikalb, Surfplnt 7801 (Square Konami Chip labeled "7801"): Fastlane 78081 = NEC_78081G503: ZN games 7910: Rockclim 8049: Stratof 8117yu: Buckrog 8156: Sbugger 8212 = INS/DP8212N P8212 (x2, DIP 24): Malzak, Rjammer, Spacefb 8329X5: Kchamp 9218 = AMD AM9218BPC (maskroms ?): Tempest 9312 = TRW9312HH: Dcheese 9325-AG (Elliptical Filter): Bmcbowl 9343T (QFP44): Bloodwar 93419 (in socket marked 93219): Battlex 93425: Mrflea, Portrait A082: Jail Break AAA16K4P-35: Wildfang ADV476KN50E (DIP28): Tickee, Stonbal, Rapidfire AKM_AK4310VM: Sfex2, Brvblade, Raystorm, Taito GNET-System AL9106(QFP64) ALPHA?: MahjongTenkaigen AMT001: IQBlock AN6914: Hcrash AN7130: Taxidrvr (AD/DA Wandler) AN7395S (SOIC20): GTIClub ASSP 5C105: Radm BI 898-3-R 22 8920 (?, DIP16, tied to HD63484): KyuukyokuNoOthello C118 = NEC C118H (audio chip?): Espial C159 = NEC C159A: Buckrog CD4098BE: Murogem CF37201: IDsoccer CYC9101 = CY7C9101 ALU, 16bit ?: Primrage, T-Mek, Guardian D31B3100: Murogem D481165 = D4811650GF: Harley D482445 = D482445LGW-A70 = DRAM?: SideBySide2, KonamiGVSystem D49307: suprnova.c D71011 = NEC D71011 (DIP18): Kyuukyoku no Othello D780: Buckrog (NEC) DAC76: Beezer ESP = EnsoniqESP-R6 F119708APCM = Nbajam F16MB: Sftm (One mask ROM on the sound board labelled F16MB that contains the instrument sample data) FCU-2 = FCU-2 8J1: Truxton GEN6480830 (Texas Instruments): PachiFever GL358 N16: Topshoot GLU = ENSONIC SUPER GLU: groundfx, undrfire GW6582 = 6502 CPU?: Chameleon 24-in-1 HD10124 (RAM?): Yachtsman HM9253101: Zombraid HSRM2564LM10, HSRM2564LM12: Paranoia HuC6260 = Hudson HuC6260A: Paranoia HuC6270 = Hudson HuC6270: Battlera (vidhrdw\battlera.c), Paranoia IMS1630: Palamed IMSG176 = Inmos IMSG176P 6-bit DAC (Gtg, Gtg2, CoolPool, Rimrockn, Stratab) SOURCE: drivers\coolpool.c IR2C24AN: Speedrcr, Namco FL-System ICT 22cv10aj: Area51 K-664: Wbbc97 K-666 = YM3812 ?: Karianx, Wbbc97 KS0164 = SEC KS0164 (QFP100) Sound CPU (running at 16.9MHz): Xfiles, Kdynastg,Fishing Maniac 3 KS8001, KS8002: Magicbub L4A0270: Atomicp - LSI LOGIC L4A0270 LGS GD75232 (SOIC20): A51site4 LGS GMS80C301 (RAM?): Puzzlekg LGS Prime 3C 9930R (QFP100), Prime 3C 9849R: SeeSeeFindOut, Ppcar LT1084: Mtetrisc LVX125: 11beat, Mtetrisc M37450 = M37450S2FP (QFP80): Gollygho M4T28-BR12SH1 = ST Timer Keeper Snap Hat RAM: GauntletLegends M5L8226 (RIOT?): R2dtank M5255 = OKI M5255 9203: Ampoker2 M53214: Headoni M58715 = Mitsubishi M58715-051P: Mario (Sound?) M58990: LockOn M60067 = Mitsubishi M60067-0901FP 452100 (QFP208, GA1): Gogomile, Pbancho M6395: Dharma (Custom chip?) M9524LT = Possibly some sort of RGB video output chip: Ncv1/2 MB112S146: arkanoid MB14282: r2dtank, spiders MB14368: r2dtank MB4107: Sega System24 MB4391: Buckrog, 005 (sndhrdw\segar.c) MB87316: Thunderj, Xybots (40-pin) MB89237 = MB89237A: Radr MB89311: Sega System24 MB89322B: LockOn MB89372 = Fujitsu MB89372P-SH, SDIP64: SuperMonacoGP MB89374: Radr MC14175 = TTL74175 ?: Buckrog MC3417, MC3418L: Showdown MC33274: Sidebs, Sidebs2, Landgear MC44220: SilentScope MC68901P (peripheral): F15se, Botss MC88916 (SOIC20): GTIClub MC88915FN70: Harley MO-92000 (DIP64): 47pie2, Suchipi MP1210HN: 9ballsht MS176 = Mosel MS176 = 6-bit DAC (RAMDAC/Color/Sound ???): Dynobop, Neckneck, Slikshot MSM5218 = MSM5218RS (sound?) Jangou Lady MX8330 (Crystal?): Mtetrisc NB19010 and NB22090: Mahjong games N8T26AN: Unkmeyco N8T245N: Strvmstr Nanao 70H016, Nanao 91H014: Kikcubic NTA0002 (QFP80): Chameleon 24-in-1 NVC285: Puckman, Dodgem P5C060 = INTEL P5C060: Mk PC165500N: MegaTouch3 PC900 = SHARP PC900 (DIP6), SHARP PC910 (DIP8), Sharp PC9D10: Cybsled, Luckywld, Speedrcr PU11256, PU13478: Punisher QS32X384: Mtetrisc RY050012 (Texas Instruments): PachiFever s2688: Buckrog S9052AB: Steeltal SAA 5020 = timer? (DIP 24): Malzak SAM448 = UV erasable microprogram sequencer: F15se SCX6218UTP: Stunrun SCX62180UTP: Harddriv SCX621BUTP = SC621BUTP = National Semiconductor SB942 SCX621BUTP: Hdrivair, Racedriv SH2-102, SH3-555: Wiping SIS6091: KyuukyokuNoOthello SPR800E OP-CX1 QFP208: 1945kiii ST T74L6245BI = 74LS245 ?: Bmcbowl ST010: Drifto94 SY6545: JackPottensPoker T6R8139: Hallyes T91B-06: Fantasy95, Hotpinbl - DIP32 T91B-07: Hotpinbl - DIP32 TA-06SD 9933 B816453 128 pin square SMD: Puckpkmn TA7252: Pkgnshdx TA891945 = Y-BOX TA891945 100 pin SMD: Puckpkmn TBA820: Poker TC59S1616AFT TSOP50: 11beat, Harley tea6320t: Area51 TLC549: Surfplnt TR9C1710 = TR9C1710 6-bit DAC like in CoolPool ? (9ballsht) SOURCE: drivers\coolpool.c TV16B 0010 ME251271 160 pin SMD: Puckpkmn TZ8315: CycleWarriors UCN5801: Gotcha uPC324 = uPC324C / C324C: Hcrash, Mjkojink, Wrofaero, Mjkojink, DDragon, SegaSystem16b - DAC sound (?) uPC624C: Buck Rogers (Rev E)- DAC sound (?) UPC4064: Titlef uPC1241H: HatchCatch, Pipeline uPD82157 = NEC uPD82157N7-002: GauntletLegends V9938 = Yamaha V9938: Mega Touch 3 W2466: IQblock W31001, W31002, W31003, W31004 (Custom ICs ?): CyberTank XD2210: Portrait ZC407615CFN (infralink): Hitpoker --------------------------------------------------------------------------------------------------------------------- Links: ------ CHIP SEARCH: http://www.xs4all.nl/~ganswijk/chipdir/ 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.alldatasheet.com Dip switch settings: http://www.solvalou.com/subpage/arcade_dips/ Arcade Pinouts: http://www.ionpool.net/arcade/pinouts/pinouts.html Homepage : http://www.mameworld.net/mameinfo E-Mail : mameinfo@arcor.de PCB-Infos: http://www.mameworld.net/mameinfo/update/PCB-infos096u3.zip (c) 2000-2006 M.A.S.H.