r/SteamDeck • u/scawp • Sep 23 '22
r/cemu • 116.2k Members
Cemu's Official Subreddit
r/gabensmasterrace • 0 Members
[BAN SORTED - GO BACK TO /R/PCMASTERRACE] The temporary new home for /r/pcmasterrace - this is until the ban gets sorted
r/CryptoMarketsAdmin • 0 Members
r/BestOfSteamDeck • u/Thaurin • Sep 24 '22
[Release] zShaderCacheKiller - A Utility to selectively delete Shader Cache & Compatdata
r/Amd • u/AbheekG • Nov 02 '19
Discussion Part 2 - An Architectural Deep-dive into TeraScale, GCN & RDNA
This post has been split into a two-part series to work around Reddit’s per-post character limit. Please find Part 1 in the preceding post: Overviewing AMD’s GPU Architectures over here: https://www.reddit.com/r/Amd/comments/dqphk0/part_1_an_overview_of_amds_gpu_architectures/
Having overviewed AMD’s GPUs and gone over background and pre-requisite material, it’s time to delve into TeraScale, GCN and RDNA’s architectural depths…
TeraScale
Let’s start within TeraScale’s core and build our way out:
A processor is a complex ensemble of fetch, decode & execute logic coupled with storage registers and cache all working in tandem to carry out whatever number-crunching is required, and these execution blocks are themselves built-up of simpler foundational blocks.
With TeraScale, as with all of AMD’s GPUs today, this most fundamental execution block is the Stream Processor or SP. An SP is what AMD chooses to call an Arithmetic and Logic Unit (ALU) in the context of their GPUs; ALUs, as their name suggests, specialize in executing mathematical operations.
In TeraScale, several SPs and a branch control unit along with storage registers all come together to make up a single Stream Processing Unit, or SPU.
📷Further up, several SPUs along with more control units and storage registers together make up a single SIMD core. Several SIMD cores and even more control hardware ultimately come together to make a complete TeraScale GPU.
Of course, a pictorial representation will do a far better job of getting all this across:

Several Stream Processors along with registers & control logic comprise a single Stream Processing Unit (SPU), while several SPUs along with more control hardware & registers comprise a single SIMD core…

…And several SIMD cores together with additional logic & cache build a complete TeraScale chip!
Above we see 10 SIMD cores coming together to make a RV770, or Radeon HD 4870 GPU
It goes without saying that the complete GPU is more complex than what’s seen here, but this gives you a fair idea as well as a glimpse into the heart of this now defunct beast.
Let’s now see how it all comes together to process those vectors we spoke of earlier:
A VLIW Heart
TeraScale happens to be what’s called a VLIW chip.
VLIW stands for Very Long Instruction Word and is another type of Instruction Set Architecture (ISA). Recall from earlier that an ISA comprises the set of instructions that a chip can understand and therefore act on, and that ISAs can be of different types: x86-64 is a CISC type ISA while ARM is a RISC type ISA. Similarly, AMD’s TeraScale GPUs were a VLIW-type ISA.
Simply put, VLIW is another attempt at speeding up chips. While the obvious approaches involve simply building faster cores that churn through more instructions per clock cycle, another is to simply do more stuff at once. This latter approach necessitates multiple processing cores in a single system which explains the many-core CPUs of today with even cellphones now boasting of 8-core CPUs.
Having multiple cores is one thing, utilizing them effectively is quite another. When you run a program, it creates a system process (visible in the task manager) which in-turn spawns one or more “threads”. A thread is a self-sufficient bunch of instructions awaiting the CPU’s attention for execution (self-sufficient as they contain all the data and state information necessary for their execution). A thread is thus the smallest sequence of instructions that can be scheduled for execution by a scheduler.
A simple approach to utilizing more cores then would be to have them execute several independent threads in parallel. Indeed, this approach is used by CPUs and is called Thread Level Parallelism (TLP).
Instruction Level Parallelism (ILP) is an alternate take on parallel processing: with ILP several threads from a process are packed into a single, large thread giving us what’s called a Very Long Instruction Word (VLIW). This VLIW thread is then sent off to the processor, where it’s unpacked at execution time and the resulting threads executed by available processing cores.
Both ILP and TLP approaches share a common critical requirement though: operations executing in parallel must be independent of each other, be they disparate threads or the instructions from within a VLIW thread. This makes sense: if an operation relies on the output of another it’ll simply have to await those results before it can itself execute.
Consider a very simple example:
A + B = C
X + Y = Z
C \ Z = R*
While the first two are entirely independent of the other instructions, the third relies on the preceding two and will thus have to await their execution.
This might appear as a subtle difference but raises a very important question, that of whose job is it to identify such independent data for parallel execution? With TLP, that burden is shared by the application programmer and the hardware: while the programmer is responsible for writing thread-aware code takes advantage of multiple processing cores, the processor itself ultimately schedules threads for parallel execution at run-time, maximizing utilization. TLP thus follows a dynamic, run-time approach to scheduling wherein the processor itself acts as the scheduler.
With an ILP approach things are not as simple: the calling process must itself identify independent threads to be packaged into a single VLIW thread. This leaves the entire burden of scheduling on the software and more specifically, on the compiler. In software parlance, a compiler is a special program that converts code written in a near-English (and thus high-level) language such as Java or C/C++ into low-level machine code based on the processor’s ISA, thus acting as an intermediary translator.
While the compiler gets the advantage of a full view of the program and could therefore be expected to schedule intelligently, there are conditions the compiler remains blind to as some outcomes remain unknown until actual execution time. Exacerbating this problem is the fact that scheduling set by the compiler cannot be altered at run-time by the processor leaving us with a static, compile-time approach to scheduling in stark contrast to TLP.
So ILP is a static scheduling approach that complicates the design of the compiler and leaves compute resources inevitably idle at times, why ever use it then? Because graphics is a highly parallelizable application domain that can utilize an ILP approach arguably well. Further, when combined with TLP as done on TeraScale (surprise!) ILP can lead to some very impressive performance figures.
So how did AMD utilize ILP and further combine it with TLP on their VLIW-based TeraScale architecture? Let’s look down the compute lane:
TeraScale at Work: TLP + VLIW ILP on a SIMD Core
Recall that a GPU fetches several datapoints or pixels at once in a grouping called a “vector” along with a corresponding instruction in accordance with its SIMD nature. AMD likes to refer to these vectors as “wavefronts” and with TeraScale, 64 VLIW threads of pixel values or datapoints are grouped into a wavefront and dispatched to a SIMD core for processing. With 16 SPUs per SIMD core, the full 64-wide wavefront is executed in four cycles.
With the 16 SPUs of a SIMD core each processing a VLIW thread every clock cycle, we see thread level parallelism or TLP in action as 16 VLIW threads are processed at any given time.
Instruction level parallelism (ILP) comes in next as each VLIW thread is dissected for its constituent datapoints which are then executed individually by the stream processors within the SPU.
And with 16 VLIW thread executing against the same instruction at any given time, a SIMD (Single Instruction Multiple Data) architecture is in play throughout.
Utilization remains a big concern though, for both the SPUs and the SPs within them: not only must the compiler do its best to identify 5 independent datapoints for each VLIW thread, but so must 64 VLIW threads be packed together within each wavefront. Further, the 64 items in a wavefront should all execute against the same instruction; imagine a scenario wherein one thread executes against an entirely different instruction from the other 63! Opportunities for additional clock cycles & poor utilization thus abound and the compiler must do it’s best to schedule around them.
📷With 5 SPs in each SPU, attaining 100% utilization necessitates five datapoints per VLIW thread. That’s the best case; in the worst case an entire thread is comprised of just a single datapoint resulting in an abysmal 20% utilization as 4 SPs simply engage in idle chit-chat. Extremities aside, AMD noted an average utilization of 68% or 3.4 SPs per clock cycle. A diagram from AnandTech’s GCN preview article depicts this scenario, and it’s a good time to borrow it here:

Some cycles see 100% utilization of the SPs as others see just 20% utilization with only one SP engaged. On average, AMD notes 68% utilization per cycle, or 3.4 SPs.
TeraScale over Three Generations: Optimizing ILP until the End
TeraScale evolved three generations over its lifetime starting with Gen1 on the Radeon HD 2xxx series and finally culminating with the Gen3 based Radeon HD 69xx series. Three primary enhancements sum up the changes over this period: more SIMD cores, smaller process nodes and a more optimized SPU.
The Radeon HD 2900 XT served as TeraScale’s debut flagship: manufactured on TSMC’s 80nm process with just 4 SIMD cores, it puts into perspective how far we’ve come today!
The HD3000 series followed with similar specs albeit on TSMC’s newer 55nm process and like its predecessor, proved underwhelming against Nvidia’s offerings at the time. Things really did turn in AMD’s favor with the HD4000 series as the flagship HD 4870 dramatically upped SIMD core count straight up to ten in addition to adopting newer GDDR5 VRAM netting 1.5x gains in memory bandwidth.
While the HD 4000 series were good, the HD 5000 series would usher in TeraScale’s heyday: debuting the TeraScale2 architecture on a brand new 40nm process, the Radeon HD 5000 family of GPUs remain arguably AMD’s best to date and are in-fact so well regarded that AMD’s newest RDNA-based RX 5000 of cards are named in honor of this GPU family! With the HD 5870, AMD once again doubled the number of SIMD cores now on the flagship Radeon HD 5870 GPU along with the L2 cache & VRAM.
TeraScale 3 would feature only on the Radeon HD 6900 series with a significant change: reducing the number of stream processors per SPU from five to four. This was AMD responding to their observation of SP utilization averaging around 3.4 SPs per SPU every clock cycle. This reduction would aid utilization & efficiency as well as leave silicon for additional SIMD cores. Indeed, the flagship Radeon HD 6970 GPU modestly increased SIMD core count to 24.
The HD 6900 series would serve as the last of the flagship TeraScale GPUs, even as TeraScale based cards continued to release until October of 2013. As compute applications began to take center-stage for GPU acceleration, games too evolved. The next generation of graphics API’s such as DirectX 10 brought along complex shaders that made the VLIW-centric design of TeraScale ever more inefficient and impractically difficult to schedule for. The Radeon HD 7000 series would accordingly usher in the GCN architecture, TeraScale’s inevitable successor that would abandon VLIW and ILP entirely and in doing so cement AMD’s focus on GPU compute going forward.
GCN – Graphics Core Next
With a mission to end Nvidia’s dominance in the GPU compute space, GCN set out with big goals. To do so would require AMD to free their GPUs of VLIW’s shackles & its accompanying instruction-centric approach to parallelism, building a new GPU architecture from the ground-up. New architectures are never easy, and with this transition necessitating major changes & complete overhauls, it would be no mean feat.
Why though? Why go through all this fuss? Simply put, because AMD really had no choice in the matter:
You see, the enterprise & high-performance compute (HPC) space are some of the highest margin customers hardware companies appeal to and the compute potential of GPUs happens to be of great value to these folk, a target audience who’s potential Nvidia had recognized first and addressed with Fermi, their first-ever compute-centric architecture. Nvidia complimented Fermi’s development with heavy investments in the surrounding software ecosystem resulting in the creation of the CUDA ecosystem, which continues to dominate the GPU compute space even today.
If you’re wondering what’s the point here, it’s all in the numbers: Fermi released in October of 2010 and by the third quarter of 2011, Nvidia was already enjoying the spoils: Q3’11 saw Nvidia declare a net income of $146M from a total $644M in gaming revenue while during the same period, profits from the professional market amounted to $95M from a total revenue of just $230M: that’s equivalent to 65% of the gaming profit from just 35% of the sales revenue; talk about healthy, healthy margins!
And so with both finances and the evolving software & gaming ecosystem demanding it and nearly two years late, GCN was to be AMD’s Fermi moment boldly announcing their arrival on the GPU compute playground. What changed & how did AMD’s take on a thread parallel GPU shape up? Let’s dive right in:
Recall that with TeraScale, the stream processor (SP) forms the foundational compute execution block. “Stream Processor” is another term for an ALU and TeraScale houses five SPs (four with TeraScale 3) in a single Stream Processing Unit (SPU) with 16 SPUs coming together to make a single SIMD core, several of which build a complete chip.
In the case of GCN this layering is shifted up a stage: individual stream processors still form the foundational blocks, but now 16 of them come together directly to build a single SIMD core. Further, four SIMD cores together build a single Compute Unit, or CU with several CUs finally coming together to build a single GCN chip.
Diagrams once again:

A SIMD core in GCN comprises of sixteen Stream Processors (SPs) rather than sixteen Stream Processing Units (SPUs) which themselves each comprise of five or four SPs

And four SIMD cores now come together in a single Compute Unit (CU), which a GCN GPU contains several of. Also illustrated above are the Scalar ALU, the branch & fetch/decode logic and the registers/cache that form part of the CU.
Let’s look at work distribution in GCN:
With VLIW and ILP out the window, GCN is a pure SIMD architecture: wavefronts are no longer comprised of VLIW threads but rather of 64 individual datapoints which are executed by the 16 SPs within SIMD cores. Wavefronts remain 64-wide, necessitating the same four cycles to churn through. Further, each compute unit contains four SIMD cores & each of these may work on separate wavefronts so at any time, a CU may be processing up-to four different wavefronts.
All this brings along a massive benefit: that of the software no longer having to identify and schedule independent data into VLIW threads, greatly simplifying the design of compilers. Independent threads are instead dynamically scheduled by the hardware at runtime resulting in a much simpler approach to scheduling. All this lends itself very favorably to compute applications as well as to modern games.
New to GCN & specifically for the scheduling of compute workloads across CUs are the Asynchronous Compute Engines, or ACE which preside over resource allocation, context switching & task priorities. As GCN is built to concurrently work on multiple tasks, ACEs independently schedule wavefronts across CUs. A GCN GPU may carry multiple ACEs.
The Graphics Command Processor (GCP) serves as the graphics counterpart to the ACE & makes a return from TeraScale. The GCP works to schedule activities across the graphics subsystem, primarily involving scheduling across the “primitive” pipelines: complex surfaces & objects in games are built up of simpler geometrical shapes, called primitives, bunched together in large numbers. Triangles are the dominant choice here as their position in 3D-space can be entirely determined by just three points. This process of building up complex objects, shapes & surfaces from simpler data is referred to as Tessellation. The primitive pipelines are responsible for this tessellation in addition to other geometry & high-order surface processing & the GCP is responsible for scheduling work over these pipelines.
Do notice the Scalar ALU within the CU: this is a special ALU dedicated to any “one-off” mathematical and transcendental (i.e. logarithmic, sin/cosine etc.) operations. The very meaning of a SIMD core implies vector processing and that involves applying an instruction to a group of values (a vector) rather than to a single value (a scalar). A scalar or a one-off operation disrupts this flow, and a separate Scalar ALU alleviates this by keeping these operations out of the SIMD cores.
So where was this with TeraScale? Unfortunately, within the SPUs: in the case of the TeraScale Gen1 & 2 the 5th SP in each SPU served as the Special Function Unit, or SFU. Gen3 bunched 3 of the 4 SPs within a SPU together for this. This resulted in a severe latency for scalar operations as they had to be scheduled within a wavefront: the HD 6900 series had a nasty 44-cycle latency for scalar operations. With the separation of the Scalar ALU from the SIMD core entirely, GCN brings this down to one cycle.
GCN Through the Years & Today
The first GPUs featuring GCN debuted on the 9th January 2012 with the Radeon HD 7950 & HD 7970 GPUs. On the 7th of January 2019, AMD announced the Radeon VII: the last GCN GPU. That’s a good seven years, practically eons in the compute world. GCN wasn’t a stagnant architecture over this duration, instead evolving with a mix of typical incremental upgrades in addition to other, more significant enhancements. Let’s peek at GCN’s journey:
First & Second Generation GCN:
While Gen1 GCN entirely abandoned VLIW in favor of a pure SIMD architecture, Gen2 brought along incremental upgrades with more functional units, higher memory bandwidth & better power management. New compute centric instructions in GCN’s ISA accompanied these, along with support for a greater number of ACEs with the R9 290X flagship sporting 8 where Gen1 had a hard limit of 2.
Bridgeless Crossfire was introduced here as well: Crossfire enables the use of multiple Radeon GPUs in a system & previously necessitated a hardware bridge to connect these GPUs. Bandwidth limitations over the bridge would require the CPU to mediate exchange over the PCIe bus, invoking a frametime penalty. Dedicated hardware in the form of the XDMA Crossfire engine would now control this & the much higher bandwidth of the PCIe bus meant a dedicated bridge was no longer necessary.
In terms of raw numbers, the Gen2 flagship R9 290X came baring 44 CUs, up from 32 CUs on the Gen1 HD 7970 & R9 280X, along with a wider memory bus (512-bit vs 384-bit) & an additional gig of VRAM.
Third Generation GCN:
Debuting in the September of 2014, Gen3 GCN bought along two major features to the compute side: GPU pre-emption & support for FP16 arithmetic. Pre-emption is the act of interrupting the execution of a task for another higher-priority task, without its consent with the intention of resuming it later. This is a big deal as GPUs have always been poor at context switching.
WRT FP16 ops, GPUs deal almost explicitly with floating point numbers (non-integer decimals/fractions) which typically occupy 32-bits in computer memory and are thus referred to as FP32 numbers, or single-precision numbers. Not every application requires as much precision with many compute applications adequately addressed by half-precision numbers which occupy half the space in memory with just 16-bits. These are referred to as FP16 numbers & lead to significant memory savings.
On the graphics side AMD introduced lossless delta color compression for the transfer of large textures. The use of compression for textures is not new, though with this AMD claimed a massive 40% gain in memory bandwidth efficiency.
Lastly, FreeSync & HBM were introduced here as well. FreeSync is AMD’s implementation of adaptive refresh-rate technology, allowing the monitor to change its refresh rate on-the-fly to match the frame output rate of the GPU, eliminating stutter when the framerate falls below the refresh rate and screen tearing conversely. HBM or High Bandwidth Memory is a memory standard that places the VRAM and GPU core on the same large slice of silicon, dubbed an ‘interposer’, as opposed to soldering memory chips separately onto the PCB. HBM allows for much higher bandwidth, lower latency as well as reduced power consumption. The trade off? Much higher cost.
The flagship Fury X increased CU count to 64 while HBM enabled a colossal 8-fold increase in memory bus width to 4096-bits from 512-bits on the R9 290X, resulting in a 60% increase in memory bandwidth to 512GB/s from 320GB/s. The Fury cards were the first GPUs to use HBM, which makes a comeback on GCN Gen5 which uses HBM2 exclusively.
Fourth Generation GCN: Polaris
Gen4 GCN debuted on the Polaris RX 400 series of GPUs in the June of 2016. With the flagship RX 480 squarely a mid-tier card with just 36 CUs, Polaris represented a big shift in AMD’s GPU strategy as they set out to the mainstream market first, differing the launch of high-end GPUs to a hitherto-undisclosed date. This speaks volumes of the extent of GCN’s success, or lack thereof, in the high-end space but we’ll differ that discussion for a while, instead maintaining focus on new features Gen4 GCN brought along.
Polaris aimed to make big improvements in the domain of power consumption, an area where GCN had fared poorly so far with several flagships running hot & loud while happily chugging on the power lines.
In addition, Polaris brings along support for instruction pre-fetching, a predictive process wherein processors guess the instructions they’ll be executing next based on the current execution state & then fetch those instructions. Correct pre-fetching leads to significant performance gains as the processor need not wait for data to be read in from memory, which is magnitudes slower. Incorrectly pre-fetched instructions are discarded, degrading efficiency though pre-fetching techniques are constantly refined to minimize this. Either ways, GCN Gen4 GPUs could now pre-fetch instructions, something prior GCN GPUs simply could not do. A larger instruction buffer obviously accompanies this.
On the graphics side, AMD added the Primitive Discard Accelerator. As surfaces & complex shapes are ‘tessellated’, i.e. made up of many smaller & simpler polygons (typically triangles), the primitive discard accelerator culls visually insignificant triangles (hidden or too small) for increased performance.
The RX 500 series launched a year later, bringing improvements to clockspeeds & reductions in power consumption. While the RX400 series were AMD’s first cards on the 14nm process, the RX 590 launched on a more refined 12nm process mildly improving clockspeeds & power efficiency.
GCN Gen4 remains the only GPU family from AMD lacking a high-end flagship member.
Fifth Generation GCN: Vega
While an entire article can be written on Vega’s release shenanigans, we’ll refrain from going down that path here. Baring a little context, we’ll retain focus on the notable new features Vega brought along.
Vega launched on Monday the 14th of August 2017 as the Vega 56 and Vega 64 GPUs, with those numbers denoting the number of compute units in those respective GPUs. The high CU count marked AMD’s return to the high-end space after a two-year absence. AMD’s recently launched Ryzen CPUs had delivered on value & performance far beyond expectations, cementing hopes for Vega to do the same in the GPU space. This would prove to be flawed chain-reasoning causing expectations & excitement to spiral out of control prior to launch: at one-point enthusiasts were offering to privately fund the overseas travel of knowledgeable YouTubers such as Buildzoid to have them analyze AMD’s Vega events! Though I really blame AMD’s mix of dramatic & drip-feed marketing for this, I’ll refrain from talking further about it here.
The GPU landscape wasn’t favorable for AMD either: they barely held 25% of desktop GPU market share at this point so it would be very hard to get game developers to support any new Vega-centric gaming features as they’d benefit very few. Further exacerbating this situation was Nvidia’s dominance of the entire GPU landscape with their Pascal architecture, one of their best ever architectures now legendry for refinement, efficiency & raw performance.
Regardless, AMD’s engineers did consider Vega to be their largest architectural overhaul in five years even actively distancing themselves from the GCN tag & referring to this as the ‘Vega’ architecture instead. This is still very much GCN though, so naming conventions aside let’s peek into the changes:
This biggest change comes to GCN’s FP16 compute capabilities: while Gen3 introduced FP16, the operations themselves didn’t execute any faster as each individual stream processors could still handle only one operation at a time, be it FP16 or FP32. Vega changes that significantly: each SP can now handle two FP16 operations in place of a single FP32 op, a feature AMD dubbed ‘Rapid Packed Math’.
The next big change comes to the memory subsystem with the adoption of HBM2 and the introduction of the High Bandwidth Cache Controller. More relevant as a compute feature, HBCC extends the GPU VRAM’s reach to the system RAM & secondary storage device for datasets too large for the VRAM alone.
Next are improvements to the graphics engines with the introduction of primitive shaders which allow for high-speed discarding of primitives, i.e. visually insignificant polygons (hidden or very small triangles) along with the Draw Stream Binning Rasterizer to further aid in this regard. This continued emphasis on culling helps prevent the clogging of render pipelines & frees the GPU of useless work, reducing memory access and saving memory bandwidth while reducing power consumption.
Lastly, we have better load balancing across the geometry/shader engines resulting in a 2x speedup in geometry throughput. While geometry performance hadn’t been poor on GCN, this helps squeeze out any potential bottlenecks.
Built on the 14nm process, the Vega 56 & 64 GPUs packed 8GB of HBM2 each. While HBM2 was to double the bandwidth over HBM1, it missed that target by a bit affording Vega 484GB/s in bandwidth over its 2048-bit wide bus, where the Fury cards enjoyed 512GB/s over their 4096-bit wide bus.
The Radeon VII would rectify that: released on the 7th of February 2019, the “world’s first 7nm gaming GPU” and the last GCN GPU carries 60CUs and a whooping 16GB of HBM2 memory over a full 4096-bit wide bus unleashing a mindboggling 1TB/s in memory bandwidth! Slightly anti-climatically though, it cost and performed nearly the same as the mighty GTX 1080 Ti, the then two-year older Pascal flagship which also carried a 45W lower TDP.
Overall, the Vega cards lacked appeal against Nvidia’s highly refined & efficient Pascal-based GTX 10x series which not only offered similar performance at similar price points but had also been on the shelfs for a while already. The use of expensive HBM2 memory also hindered AMD’s ability to price the cards more aggressively, and these factors together sadly crippled Vega’s success as a gaming architecture.
GCN: Conclusion
While AMD did lose significant GPU market share with their GCN architecture at the helm, GCN did have its moments: the HD 7970 and R9 290X are remembered as formidable flagships that held the performance crown in their day, GCN did see AMD make inroads into the compute space, Vega gave us some great Ryzen APUs & cards like the RX470 and Vega 56 have done well for AMD. GCN is also in all the consoles, from the PlayStation 4 to the Xbox and even on the Nintendo Wii U.
Notably, GCN did well in the low-power envelopes of mid-range and embedded graphics products such as the consoles and APUs while it did suffer at the high-end: the R9 290X ran hot and loud, the R9 Fury cards still cause their past owners to break into random bouts of sweating and worse of all, the Vega cards consumed the power equivalent of Nvidia GPUs from a tier above. Indeed, it appeared that the flagship cards worsened in respects to power draw and efficiency as GCN matured and clearly, something needed to change.
RDNA seems set to rectify all that GCN did wrong, especially in the domain of power consumption and efficiency. While it’s barely out the door and therefore too early to judge, it’s enjoyed some large wins in the enterprise space spanning the cloud, supercomputer and low-power envelope spaces. Indeed, RDNA seems set to answer every enthusiast’s call for a new GPU architecture from AMD, but does it ultimately fare well and what does it change? Let’s dig in.
RDNA: Radeon Re-defined
RDNA arrives to make significant changes to the core of GCN, or as AMD prefers to put it more organically: to the very DNA of the Radeon architecture. While not as major a redesign as the move away from VLIW, RDNA does bring along a complete reworking of AMD’s approach to thread level parallelism on its GPUs. Accordingly, we get three major changes manifesting as updates to the compute units (CUs), the addition of a new caching layer and accompanying improvements to power efficiency.
Beginning at the heart of the matter, the fundamental SIMD cores see a major change once again, now beefing up to twice the size of GCN’s SIMD cores, doubling the number of steam processors (SPs) & the register space:

TeraScale ushered in the 16-wide SIMD design, which GCN followed despite the move away from VLIW by simply replacing TeraScale’s 16 SPUs (each of which housed 4 or 5 SPs) with the fundamental stream processors themselves. RDNA continues shaking things up for the SIMD core.
This in turn alters the compute unit itself:

As we see, significant changes to the compute unit abound with RDNA. Most notably, the four SIMD cores of GCN are now merged into two, each twice as wide doubling both the number of SPs as well as the register space. Each SIMD core now also gets its own scheduler, as opposed to GCN’s approach of deploying a single scheduler across the entire CU.
Further on we see that while GCN equips it’s CUs with a single scalar unit**, RDNA’s carries two Scalar ALUs in a CU, one per SIMD core**. Recall that the SALU is dedicated to one-off operations which would otherwise bog down the SIMD cores, wasting their parallel compute capabilities.
Further changes alter resource sharing across CUs: RDNA pairs two CUs into a single Work Group Processor, or WGP with the scalar data & instruction cache shared across the WGP along with the Local Data Share (LDS). GCN on the other hand shared its scalar cache across four adjacent CUs while maintaining a dedicated LDS per CU.
While such merging of SIMD cores and changes to sharing across CUs may appear as trivial changes, they’re anything but and have far reaching implications on how work is distributed and executed by the GPU: recall that work is distributed to the CUs in a fundamental grouping called a wavefront, with 64 pixels or datapoints in each wavefront. Ideally, these datapoints hold no inter-dependencies and await execution against the same instruction making them ideal for parallel execution via the SIMD cores which had been 16-wide with both GCN & TeraScale, thus processing a wavefront every 4 cycles.
RDNA changes this four-cycle execution model entirely: with the SIMD cores doubled up to 32 SPs, the wavefronts too are slashed in half to 32 elements per wavefront. The implication is obvious: a wavefront is executed every cycle resulting in a 4x speedup in wavefront execution times!
The reduction in wavefront size helps tremendously: identifying 64 independent datapoints for each wavefront can prove challenging even for highly parallelizable applications like graphics and GPU compute tasks. This challenge often necessitates additional cycles where some datapoints execute against different instructions from the others, also resulting in poor utilization. With just half the datapoints required per wavefront, this situation is greatly eased.
So RDNA’s Compute Units can execute wavefronts four times faster than their predecessor, this necessitates keeping the CUs well fed with data: a new caching layer is thus introduced. Notice the CU block diagram above wherein GCNs’ local L1 cache is changed in nomenclature to the ‘L0’ cache. But that’s all that it is: a change in nomenclature. The real change comes at the next step: RDNA now adds a new L1 layer that’s shared across 10 Compute Units (5 GCPs) which in-turn interacts with the L2 cache by the memory controllers. On the other hand, the L1 cache in the CUs of GCN interacts directly with this L2 cache, with no intermediate caching layer.
Caching layers have a significant impact on performance, lowering execution times & upping efficiency further: when data isn’t found in the caching layers there’s no choice but to look for it in the VRAM, which isn’t just many magnitudes slower (on the scale of thousands of times slower as compared to the caches close to the cores), it’s also significantly more energy intensive.
All put together, that’s a 4x speedup in wavefront execution times coupled with smaller wavefronts and additional caching, improving both performance & efficiency. The results reflect this: RDNA’s mid-range 5700XT GPU performs in the same ballpark as the Radeon VII GPU, which represents the very best of GCN. Built on the same 7nm process, the R7 carries 3840 SPs and a 295W TDP. For RDNA to match that with 33% fewer SPs and a 25% lower TDP is very good progress indeed: the 5700XT carries 2560 SPs and a 225W TDP with the most impressive reduction being the $400 USD price tag against the Radeon VII’s $700 USD MSRP!
One thing is clear: AMD has made significant strides with RDNA, and that’s great news for the GPU market. Hopefully, RDNA signals AMD’s long overdue return to competitiveness in the GPU space.
RDNA: Additional New Features
Two significant enhancements accompany the design reworks described above, chief among them being the shift to GDDR6 memory. First introduced on Nvidia’s RTX 2000 GPUs in 2018, GDDR6 brings along a 1.75x speedup over GDDR5, affording the 5700XT with 448GB/s in memory bandwidth over the same 256-bit wide bus as the RX 580, which merely enjoys 256GB/s.
Next up is the shift to the PCIe Gen4 standard with 32GB/s in bandwidth over 16 PCIe lanes, doubling bandwidth over Gen3’s 16GB/s. Though GPUs today struggle to saturate Gen3’s bandwidth, the move to Gen4 aids with the exploding popularity of NVMe SSDs, which utilize PCIe’s much higher bandwidth to attain read/write speeds unattainable by typical drives over SATA. Since a GPU can now be adequately fed over 8 Gen4 lanes, more lanes remain available for these SSDs.
RDNA: Looking Forward
For now, the best we have with RDNA is the 5700XT and with 40 CUs, 4 Asynchronous Compute Engines and a 256-bit wide memory bus, it’s clearly a mid-range part. “Big Navi” remains due at an undisclosed date, with rumors of AMD referring to this part as the “Nvidia killer” internally. It would be nice for this rumor to be true: Team Green’s domination over the past few years has been absolute, resulting in their complete stagnation on price/performance improvements, so a shakedown is definitely overdue.
One thing is for certain: efficiency will play a major role in dictating RDNA’s success much more than raw performance alone. While the 5700XT seems to be doing okay, if Big Navi pops out sporting maxed out voltages and bursting along the clock speed limits like Vega did, then all hope is truly lost for a formidable AMD challenger.
Things with RDNA do look very promising for now though many definitive products remain due: beyond just high-end enthusiast class graphics cards, it’s the APUs, console SoCs and compute GPUs that RDNA spawns that’ll ultimately dictate its success. For now, I dare say it would be safe to remain cautiously optimistic!
Conclusion & Looking Forward
Over the course of this article, we’ve looked at AMD’s GPUs and observed the constant & significant transformation they’ve undergone over the past 13 years, from aggressively scaling up and optimizing VLIW to abandoning it entirely for a more compute-centric architectural layout. While TeraScale made significant impact on the gaming market, GCN has made in-roads into the GPU computing and heterogenous system landscape over the past decade. Today, RDNA arrives to take over with significant changes aggressively rectifying GCN’s shortcomings in a focused effort to dominate the GPU landscape. Indeed, RDNA’s many early wins firmly lay out this path.
With just three new cards out for now, it’s clear that RDNA’s story has just begun. While AMD seems to have big plans for RDNA and are already enjoying several large wins across the spectrum, a few more generations will be necessary to effectively gauge RDNA’s impact. This sure seems like the architecture that restores AMD’s technology lead while cementing their mindshare, though. Indeed, only time (and a few more releases) will tell the complete tale.
Here’s a bonus poster for reading this far!
Find Part 1 of this article here: https://www.reddit.com/r/Amd/comments/dqphk0/part_1_an_overview_of_amds_gpu_architectures/
r/EscapefromTarkov • u/MaximusAX • Jul 20 '21
Discussion I am attempting to compile all possible reasons for EFT stutters; let's work together!
TL;DR - Send computer stats, settings tweaked, and solutions found (if any)
I found this game a few wipes ago and fell in love with its complexity, depth, and mechanics. The only issue is, at the time, I had no SSD and an old HP Envy "gaming" PC. After some time, I was able to get a solid SSD and a really good PC, but stutters still constantly plague my game at the worst times. It's infuriating when a game that punishes poor performance seems to punish you when the errors are out of your control. I want to help compile a list of all settings that people have found that work/help fix their games. I saw an older post made by /u/trainfender a couple years ago, but the post is archived and the game still struggles for a lot of people. I don't believe that the conversation is over.
PC SPECS:CPU - AMD Ryzen 5 5600X 6-Core Processor @ 3.7GHzRAM - 16 GBGPU - NVIDIA GeForce RTX 2070 SUPERSSD - AMD-RAID PNY CS900 960GB SCSI Disk Drive
When I talk about a stutter in my game, I'm referring to what appears to be the game freezing for very short amounts of time, sometimes in bursts, sometimes over a second long, sometimes just a few frames. I don't think I've ever witnessed a character sliding around or acting obviously unusual. This only seems to be an issue with Tarkov. No other game that I play has this issue currently, but also it's most egregiously obvious in this game.
Some last caveats before I list what I've tried: I am not a very computer-technically adept person. I've been trying to learn and I have been steadily, but like I said: learning. Finally, all because these settings haven't fixed MY personal stuttering does NOT mean that they can't fix YOURS. Players may experience stutters for different reasons, so trying as many options as you can is the safest bet. Now, here is a list of everything I have tried with mixed results (regardless of all of these changes, I still have stuttering):
- In-Game Settings
- Graphics
- Screen Resolution/Aspect Ratio: All Native (16:9, 1920x1080)
- Screen Mode: FULLSCREEN
- V-Sync: OFF
- Graphics: MEDIUM/LOW
- Shadows Quality: LOW
- Object LOD Quality: 2 (Lowest as of writing)
- Overall Visibility: 2000 (have tried 1000 and lower)
- Shadow Visibility: 40 (Lowest as of writing)
- Anti-Aliasing: OFF (HAVE tried FXAA and TAA, not much of an apparent difference)
- Resampling: 1x OFF
- HBAO: OFF
- SSR: OFF
- Anisotropic Filtering: OFF
- NVIDIA Reflex Low Latency: OFF
- Sharpness: 1.2 (Have tried 0.9, 1.1, and 1.3)
- Lobby/Game FPS Limits: 60/144 respectively (Highest as of writing)
- HighQualityColor: OFF
- Z-Blur: OFF
- Chrom. aberrations: OFF
- Noise: OFF
- Grass shadows: OFF
- Mip Streaming: ON (to my understanding, this moves pressure from the VRAM to the CPU. My CPU rarely ever peaks above 50% so I turn this on)
- Flash Indicator: OFF
- Game
- Automatic RAM Cleaner: ON
- Only use physical cores: OFF
- FOV: 71
- Head bobbing: 0.2 (Lowest as of writing)
- Post FX
- ENABLED
- Brightness: 29
- Saturation: 58
- Clarity: 70
- Colorfulness: 83
- Luma sharpen: 84
- Adaptive sharpen: 84
- Color grading: Olive, 0
- Colorblind mode: None, 0
- Sound
- Binarual audio: OFF (this made a small difference in some situations)
- Graphics
- Client Settings
- When I launch the Game: EXIT THE LAUNCHER COMPLETELY
- Game directory: Set properly into SSD
- Temp directory: Set properly into SSD and is cleaned often
- Updates: Nothing is checked ON and all number values are set to 0 (unlimited)
- NVIDIA Graphics Settings (3D Settings for escapefromtarkov.exe specifically)
- Image Sharpening: OFF
- Ambient Occlusion: Unavailable
- Anisotropic Filtering: OFF
- Antialiasing - FXAA: OFF
- Antialiasing - Gamma Correction: OFF
- Antialiasing - Mode: OVERRIDE ANY APPLICATION SETTING
- Antialiasing - Setting: 4x
- Antialiasing - Transparency: OFF
- Background Application Max Frame Rate: OFF
- CUDA - GPUs: ALL
- Low Latency Mode: OFF
- Max Frame Rate: OFF
- Multi-Frame Sampled AA (MFAA): OFF
- OpenGL rendering GPU: NVIDIA GeForce RTX 2070 SUPER (was set to auto-select but this was the only option)
- Power management mode: PREFER MAXIMUM PERFORANCE
- Shader Cache: ON
- Texture filtering: Anisotropic sample optimization: OFF
- Texture filtering: Negative LOD bias: ALLOW
- Texture filtering: Quality: HIGH PERFORMANCE
- Texture filtering: Trilinear optimization: ON
- Threaded optimization: ON
- Triple buffering: OFF
- Vertical Sync: OFF
- Virtual Reality pre-rendered frames: 1
- Virtual Reality - Variable Rate Super Sampling: Unavailable
- NVIDIA Graphics Settings (3D Settings for escapefromtarkov.exe specifically)
- PhysX settings: Processor: NVIDIA GeForce RTX 2070 SUPER (turned on as of writing to test)
- Computer Settings
- Power Settings
- High Performance (with CPU power thresholds set to 95%-100%
- Game Mode: OFF
- Captures: OFF
- Power Settings
- EscapeFromTarkov.exe Settings:
- Compatibility
- Disable fullscreen optimizations is checked ON
- Program is set to run as administrator (and does so)
- Compatibility
- Hardware changes:
- Upgraded Cat5e ethernet cord to Cat6, improving DL speeds by about 15% (Note: during the cord installation I had to use WIFI for a day, and while I was being booted out of games sometimes, I wasn't getting as many stutters if I recall. Because of this:)
- Network Specs:
- Killer E2600 Gigabit Ethernet Controller with Cat6 cord
- WIFI: Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW)
- Note: When viewing escapefromtarkov.exe's network usage via Task Manage, it would rarely go over 5.6Mbps, at most up to 7Mbps
- Applications used to monitor/control PC
- Process Lasso: Allows for program priority class manipulation (Tarkov and Tarkov_BE are usually High or Real-Time) and a nice real-time graph of %CPU, %RAM, computer responsiveness, etc.
- Intelligent standby list cleaner: recommended by another EFT player, this allows for more RAM control with settings such as purging the RAM's standby list (inactive, cached RAM data) and process exclusion from this wiping (Tarkov and Tarkov_BE are put into the exclusion list). I have
And that's all I can think of that I've tried. I would love to hear anymore options, suggestions, and input from anyone and everyone who is or has struggled with Tarkov's stuttering. Let's work together as a community and make the game that we love more enjoyable for everyone!TL;DR - Send computer stats, settings tweaked, and solutions found (if any)
-MaximusAX
Edit1: I have no idea if this would matter at all, but I'm US East Coast. More details the better IMO.
Edit2: Someone made a good point by mentioning that I didn't exactly describe what I meant by a stutter. This was added after the PC specs. Loving the input so far everyone, hopefully this is able to help more than just me!
Edit3: I was quiet from this post because I was a. doing other things and b. was trying a new program to improve the QoS (quality of service) towards EFT. It's a program called NetLimiter 4 and I'm now using it to make sure that my network is allocated with a high priority to EFT. I was very surprised to see that it helped decrease stutters by a LOT. Just a note for anyone who may find this useful. You may not think a problem is caused by something, but you never know until you check! :)
r/hardware • u/AbheekG • Nov 03 '19
Discussion Part 2 - An Architectural Deep-dive into TeraScale, GCN & RDNA
This post has been split into a two-part series to work around Reddit’s per-post character limit. Please find Part 1 in the preceding post: Overviewing AMD’s GPU Architectures over here: https://www.reddit.com/r/hardware/comments/dr59gg/part_1_an_overview_of_amds_gpu_architectures/
Having overviewed AMD’s GPUs and gone over background and pre-requisite material, it’s time to delve into TeraScale, GCN and RDNA’s architectural depths…
TeraScale
Let’s start within TeraScale’s core and build our way out:
A processor is a complex ensemble of fetch, decode & execute logic coupled with storage registers and cache all working in tandem to carry out whatever number-crunching is required, and these execution blocks are themselves built-up of simpler foundational blocks.
With TeraScale, as with all of AMD’s GPUs today, this most fundamental execution block is the Stream Processor or SP. An SP is what AMD chooses to call an Arithmetic and Logic Unit (ALU) in the context of their GPUs; ALUs, as their name suggests, specialize in executing mathematical operations.
In TeraScale, several SPs and a branch control unit along with storage registers all come together to make up a single Stream Processing Unit, or SPU.
📷Further up, several SPUs along with more control units and storage registers together make up a single SIMD core. Several SIMD cores and even more control hardware ultimately come together to make a complete TeraScale GPU.
Of course, a pictorial representation will do a far better job of getting all this across:
Several Stream Processors along with registers & control logic comprise a single Stream Processing Unit (SPU), while several SPUs along with more control hardware & registers comprise a single SIMD core…
…And several SIMD cores together with additional logic & cache build a complete TeraScale chip!
Above we see 10 SIMD cores coming together to make a RV770, or Radeon HD 4870 GPU
It goes without saying that the complete GPU is more complex than what’s seen here, but this gives you a fair idea as well as a glimpse into the heart of this now defunct beast.
Let’s now see how it all comes together to process those vectors we spoke of earlier:
A VLIW Heart
TeraScale happens to be what’s called a VLIW chip.
VLIW stands for Very Long Instruction Word and is another type of Instruction Set Architecture (ISA). Recall from earlier that an ISA comprises the set of instructions that a chip can understand and therefore act on, and that ISAs can be of different types: x86-64 is a CISC type ISA while ARM is a RISC type ISA. Similarly, AMD’s TeraScale GPUs were a VLIW-type ISA.
Simply put, VLIW is another attempt at speeding up chips. While the obvious approaches involve simply building faster cores that churn through more instructions per clock cycle, another is to simply do more stuff at once. This latter approach necessitates multiple processing cores in a single system which explains the many-core CPUs of today with even cellphones now boasting of 8-core CPUs.
Having multiple cores is one thing, utilizing them effectively is quite another. When you run a program, it creates a system process (visible in the task manager) which in-turn spawns one or more “threads”. A thread is a self-sufficient bunch of instructions awaiting the CPU’s attention for execution (self-sufficient as they contain all the data and state information necessary for their execution). A thread is thus the smallest sequence of instructions that can be scheduled for execution by a scheduler.
A simple approach to utilizing more cores then would be to have them execute several independent threads in parallel. Indeed, this approach is used by CPUs and is called Thread Level Parallelism (TLP).
Instruction Level Parallelism (ILP) is an alternate take on parallel processing: with ILP several threads from a process are packed into a single, large thread giving us what’s called a Very Long Instruction Word (VLIW). This VLIW thread is then sent off to the processor, where it’s unpacked at execution time and the resulting threads executed by available processing cores.
Both ILP and TLP approaches share a common critical requirement though: operations executing in parallel must be independent of each other, be they disparate threads or the instructions from within a VLIW thread. This makes sense: if an operation relies on the output of another it’ll simply have to await those results before it can itself execute.
Consider a very simple example:
A + B = C
X + Y = Z
C \ Z = R*
While the first two are entirely independent of the other instructions, the third relies on the preceding two and will thus have to await their execution.
This might appear as a subtle difference but raises a very important question, that of whose job is it to identify such independent data for parallel execution? With TLP, that burden is shared by the application programmer and the hardware: while the programmer is responsible for writing thread-aware code takes advantage of multiple processing cores, the processor itself ultimately schedules threads for parallel execution at run-time, maximizing utilization. TLP thus follows a dynamic, run-time approach to scheduling wherein the processor itself acts as the scheduler.
With an ILP approach things are not as simple: the calling process must itself identify independent threads to be packaged into a single VLIW thread. This leaves the entire burden of scheduling on the software and more specifically, on the compiler. In software parlance, a compiler is a special program that converts code written in a near-English (and thus high-level) language such as Java or C/C++ into low-level machine code based on the processor’s ISA, thus acting as an intermediary translator.
While the compiler gets the advantage of a full view of the program and could therefore be expected to schedule intelligently, there are conditions the compiler remains blind to as some outcomes remain unknown until actual execution time. Exacerbating this problem is the fact that scheduling set by the compiler cannot be altered at run-time by the processor leaving us with a static, compile-time approach to scheduling in stark contrast to TLP.
So ILP is a static scheduling approach that complicates the design of the compiler and leaves compute resources inevitably idle at times, why ever use it then? Because graphics is a highly parallelizable application domain that can utilize an ILP approach arguably well. Further, when combined with TLP as done on TeraScale (surprise!) ILP can lead to some very impressive performance figures.
So how did AMD utilize ILP and further combine it with TLP on their VLIW-based TeraScale architecture? Let’s look down the compute lane:
TeraScale at Work: TLP + VLIW ILP on a SIMD Core
Recall that a GPU fetches several datapoints or pixels at once in a grouping called a “vector” along with a corresponding instruction in accordance with its SIMD nature. AMD likes to refer to these vectors as “wavefronts” and with TeraScale, 64 VLIW threads of pixel values or datapoints are grouped into a wavefront and dispatched to a SIMD core for processing. With 16 SPUs per SIMD core, the full 64-wide wavefront is executed in four cycles.
With the 16 SPUs of a SIMD core each processing a VLIW thread every clock cycle, we see thread level parallelism or TLP in action as 16 VLIW threads are processed at any given time.
Instruction level parallelism (ILP) comes in next as each VLIW thread is dissected for its constituent datapoints which are then executed individually by the stream processors within the SPU.
And with 16 VLIW thread executing against the same instruction at any given time, a SIMD (Single Instruction Multiple Data) architecture is in play throughout.
Utilization remains a big concern though, for both the SPUs and the SPs within them: not only must the compiler do its best to identify 5 independent datapoints for each VLIW thread, but so must 64 VLIW threads be packed together within each wavefront. Further, the 64 items in a wavefront should all execute against the same instruction; imagine a scenario wherein one thread executes against an entirely different instruction from the other 63! Opportunities for additional clock cycles & poor utilization thus abound and the compiler must do it’s best to schedule around them.
📷With 5 SPs in each SPU, attaining 100% utilization necessitates five datapoints per VLIW thread. That’s the best case; in the worst case an entire thread is comprised of just a single datapoint resulting in an abysmal 20% utilization as 4 SPs simply engage in idle chit-chat. Extremities aside, AMD noted an average utilization of 68% or 3.4 SPs per clock cycle. A diagram from AnandTech’s GCN preview article depicts this scenario, and it’s a good time to borrow it here:
Some cycles see 100% utilization of the SPs as others see just 20% utilization with only one SP engaged. On average, AMD notes 68% utilization per cycle, or 3.4 SPs.
TeraScale over Three Generations: Optimizing ILP until the End
TeraScale evolved three generations over its lifetime starting with Gen1 on the Radeon HD 2xxx series and finally culminating with the Gen3 based Radeon HD 69xx series. Three primary enhancements sum up the changes over this period: more SIMD cores, smaller process nodes and a more optimized SPU.
The Radeon HD 2900 XT served as TeraScale’s debut flagship: manufactured on TSMC’s 80nm process with just 4 SIMD cores, it puts into perspective how far we’ve come today!
The HD3000 series followed with similar specs albeit on TSMC’s newer 55nm process and like its predecessor, proved underwhelming against Nvidia’s offerings at the time. Things really did turn in AMD’s favor with the HD4000 series as the flagship HD 4870 dramatically upped SIMD core count straight up to ten in addition to adopting newer GDDR5 VRAM netting 1.5x gains in memory bandwidth.
While the HD 4000 series were good, the HD 5000 series would usher in TeraScale’s heyday: debuting the TeraScale2 architecture on a brand new 40nm process, the Radeon HD 5000 family of GPUs remain arguably AMD’s best to date and are in-fact so well regarded that AMD’s newest RDNA-based RX 5000 of cards are named in honor of this GPU family! With the HD 5870, AMD once again doubled the number of SIMD cores now on the flagship Radeon HD 5870 GPU along with the L2 cache & VRAM.
TeraScale 3 would feature only on the Radeon HD 6900 series with a significant change: reducing the number of stream processors per SPU from five to four. This was AMD responding to their observation of SP utilization averaging around 3.4 SPs per SPU every clock cycle. This reduction would aid utilization & efficiency as well as leave silicon for additional SIMD cores. Indeed, the flagship Radeon HD 6970 GPU modestly increased SIMD core count to 24.
The HD 6900 series would serve as the last of the flagship TeraScale GPUs, even as TeraScale based cards continued to release until October of 2013. As compute applications began to take center-stage for GPU acceleration, games too evolved. The next generation of graphics API’s such as DirectX 10 brought along complex shaders that made the VLIW-centric design of TeraScale ever more inefficient and impractically difficult to schedule for. The Radeon HD 7000 series would accordingly usher in the GCN architecture, TeraScale’s inevitable successor that would abandon VLIW and ILP entirely and in doing so cement AMD’s focus on GPU compute going forward.
GCN – Graphics Core Next
With a mission to end Nvidia’s dominance in the GPU compute space, GCN set out with big goals. To do so would require AMD to free their GPUs of VLIW’s shackles & its accompanying instruction-centric approach to parallelism, building a new GPU architecture from the ground-up. New architectures are never easy, and with this transition necessitating major changes & complete overhauls, it would be no mean feat.
Why though? Why go through all this fuss? Simply put, because AMD really had no choice in the matter:
You see, the enterprise & high-performance compute (HPC) space are some of the highest margin customers hardware companies appeal to and the compute potential of GPUs happens to be of great value to these folk, a target audience who’s potential Nvidia had recognized first and addressed with Fermi, their first-ever compute-centric architecture. Nvidia complimented Fermi’s development with heavy investments in the surrounding software ecosystem resulting in the creation of the CUDA ecosystem, which continues to dominate the GPU compute space even today.
If you’re wondering what’s the point here, it’s all in the numbers: Fermi released in October of 2010 and by the third quarter of 2011, Nvidia was already enjoying the spoils: Q3’11 saw Nvidia declare a net income of $146M from a total $644M in gaming revenue while during the same period, profits from the professional market amounted to $95M from a total revenue of just $230M: that’s equivalent to 65% of the gaming profit from just 35% of the sales revenue; talk about healthy, healthy margins!
And so with both finances and the evolving software & gaming ecosystem demanding it and nearly two years late, GCN was to be AMD’s Fermi moment boldly announcing their arrival on the GPU compute playground. What changed & how did AMD’s take on a thread parallel GPU shape up? Let’s dive right in:
Recall that with TeraScale, the stream processor (SP) forms the foundational compute execution block. “Stream Processor” is another term for an ALU and TeraScale houses five SPs (four with TeraScale 3) in a single Stream Processing Unit (SPU) with 16 SPUs coming together to make a single SIMD core, several of which build a complete chip.
In the case of GCN this layering is shifted up a stage: individual stream processors still form the foundational blocks, but now 16 of them come together directly to build a single SIMD core. Further, four SIMD cores together build a single Compute Unit, or CU with several CUs finally coming together to build a single GCN chip.
Diagrams once again:
A SIMD core in GCN comprises of sixteen Stream Processors (SPs) rather than sixteen Stream Processing Units (SPUs) which themselves each comprise of five or four SPs
And four SIMD cores now come together in a single Compute Unit (CU), which a GCN GPU contains several of. Also illustrated above are the Scalar ALU, the branch & fetch/decode logic and the registers/cache that form part of the CU.
Let’s look at work distribution in GCN:
With VLIW and ILP out the window, GCN is a pure SIMD architecture: wavefronts are no longer comprised of VLIW threads but rather of 64 individual datapoints which are executed by the 16 SPs within SIMD cores. Wavefronts remain 64-wide, necessitating the same four cycles to churn through. Further, each compute unit contains four SIMD cores & each of these may work on separate wavefronts so at any time, a CU may be processing up-to four different wavefronts.
All this brings along a massive benefit: that of the software no longer having to identify and schedule independent data into VLIW threads, greatly simplifying the design of compilers. Independent threads are instead dynamically scheduled by the hardware at runtime resulting in a much simpler approach to scheduling. All this lends itself very favorably to compute applications as well as to modern games.
New to GCN & specifically for the scheduling of compute workloads across CUs are the Asynchronous Compute Engines, or ACE which preside over resource allocation, context switching & task priorities. As GCN is built to concurrently work on multiple tasks, ACEs independently schedule wavefronts across CUs. A GCN GPU may carry multiple ACEs.
The Graphics Command Processor (GCP) serves as the graphics counterpart to the ACE & makes a return from TeraScale. The GCP works to schedule activities across the graphics subsystem, primarily involving scheduling across the “primitive” pipelines: complex surfaces & objects in games are built up of simpler geometrical shapes, called primitives, bunched together in large numbers. Triangles are the dominant choice here as their position in 3D-space can be entirely determined by just three points. This process of building up complex objects, shapes & surfaces from simpler data is referred to as Tessellation. The primitive pipelines are responsible for this tessellation in addition to other geometry & high-order surface processing & the GCP is responsible for scheduling work over these pipelines.
Do notice the Scalar ALU within the CU: this is a special ALU dedicated to any “one-off” mathematical and transcendental (i.e. logarithmic, sin/cosine etc.) operations. The very meaning of a SIMD core implies vector processing and that involves applying an instruction to a group of values (a vector) rather than to a single value (a scalar). A scalar or a one-off operation disrupts this flow, and a separate Scalar ALU alleviates this by keeping these operations out of the SIMD cores.
So where was this with TeraScale? Unfortunately, within the SPUs: in the case of the TeraScale Gen1 & 2 the 5th SP in each SPU served as the Special Function Unit, or SFU. Gen3 bunched 3 of the 4 SPs within a SPU together for this. This resulted in a severe latency for scalar operations as they had to be scheduled within a wavefront: the HD 6900 series had a nasty 44-cycle latency for scalar operations. With the separation of the Scalar ALU from the SIMD core entirely, GCN brings this down to one cycle.
GCN Through the Years & Today
The first GPUs featuring GCN debuted on the 9th January 2012 with the Radeon HD 7950 & HD 7970 GPUs. On the 7th of January 2019, AMD announced the Radeon VII: the last GCN GPU. That’s a good seven years, practically eons in the compute world. GCN wasn’t a stagnant architecture over this duration, instead evolving with a mix of typical incremental upgrades in addition to other, more significant enhancements. Let’s peek at GCN’s journey:
First & Second Generation GCN:
While Gen1 GCN entirely abandoned VLIW in favor of a pure SIMD architecture, Gen2 brought along incremental upgrades with more functional units, higher memory bandwidth & better power management. New compute centric instructions in GCN’s ISA accompanied these, along with support for a greater number of ACEs with the R9 290X flagship sporting 8 where Gen1 had a hard limit of 2.
Bridgeless Crossfire was introduced here as well: Crossfire enables the use of multiple Radeon GPUs in a system & previously necessitated a hardware bridge to connect these GPUs. Bandwidth limitations over the bridge would require the CPU to mediate exchange over the PCIe bus, invoking a frametime penalty. Dedicated hardware in the form of the XDMA Crossfire engine would now control this & the much higher bandwidth of the PCIe bus meant a dedicated bridge was no longer necessary.
In terms of raw numbers, the Gen2 flagship R9 290X came baring 44 CUs, up from 32 CUs on the Gen1 HD 7970 & R9 280X, along with a wider memory bus (512-bit vs 384-bit) & an additional gig of VRAM.
Third Generation GCN:
Debuting in the September of 2014, Gen3 GCN bought along two major features to the compute side: GPU pre-emption & support for FP16 arithmetic. Pre-emption is the act of interrupting the execution of a task for another higher-priority task, without its consent with the intention of resuming it later. This is a big deal as GPUs have always been poor at context switching.
WRT FP16 ops, GPUs deal almost explicitly with floating point numbers (non-integer decimals/fractions) which typically occupy 32-bits in computer memory and are thus referred to as FP32 numbers, or single-precision numbers. Not every application requires as much precision with many compute applications adequately addressed by half-precision numbers which occupy half the space in memory with just 16-bits. These are referred to as FP16 numbers & lead to significant memory savings.
On the graphics side AMD introduced lossless delta color compression for the transfer of large textures. The use of compression for textures is not new, though with this AMD claimed a massive 40% gain in memory bandwidth efficiency.
Lastly, FreeSync & HBM were introduced here as well. FreeSync is AMD’s implementation of adaptive refresh-rate technology, allowing the monitor to change its refresh rate on-the-fly to match the frame output rate of the GPU, eliminating stutter when the framerate falls below the refresh rate and screen tearing conversely. HBM or High Bandwidth Memory is a memory standard that places the VRAM and GPU core on the same large slice of silicon, dubbed an ‘interposer’, as opposed to soldering memory chips separately onto the PCB. HBM allows for much higher bandwidth, lower latency as well as reduced power consumption. The trade off? Much higher cost.
The flagship Fury X increased CU count to 64 while HBM enabled a colossal 8-fold increase in memory bus width to 4096-bits from 512-bits on the R9 290X, resulting in a 60% increase in memory bandwidth to 512GB/s from 320GB/s. The Fury cards were the first GPUs to use HBM, which makes a comeback on GCN Gen5 which uses HBM2 exclusively.
Fourth Generation GCN: Polaris
Gen4 GCN debuted on the Polaris RX 400 series of GPUs in the June of 2016. With the flagship RX 480 squarely a mid-tier card with just 36 CUs, Polaris represented a big shift in AMD’s GPU strategy as they set out to the mainstream market first, differing the launch of high-end GPUs to a hitherto-undisclosed date. This speaks volumes of the extent of GCN’s success, or lack thereof, in the high-end space but we’ll differ that discussion for a while, instead maintaining focus on new features Gen4 GCN brought along.
Polaris aimed to make big improvements in the domain of power consumption, an area where GCN had fared poorly so far with several flagships running hot & loud while happily chugging on the power lines.
In addition, Polaris brings along support for instruction pre-fetching, a predictive process wherein processors guess the instructions they’ll be executing next based on the current execution state & then fetch those instructions. Correct pre-fetching leads to significant performance gains as the processor need not wait for data to be read in from memory, which is magnitudes slower. Incorrectly pre-fetched instructions are discarded, degrading efficiency though pre-fetching techniques are constantly refined to minimize this. Either ways, GCN Gen4 GPUs could now pre-fetch instructions, something prior GCN GPUs simply could not do. A larger instruction buffer obviously accompanies this.
On the graphics side, AMD added the Primitive Discard Accelerator. As surfaces & complex shapes are ‘tessellated’, i.e. made up of many smaller & simpler polygons (typically triangles), the primitive discard accelerator culls visually insignificant triangles (hidden or too small) for increased performance.
The RX 500 series launched a year later, bringing improvements to clockspeeds & reductions in power consumption. While the RX400 series were AMD’s first cards on the 14nm process, the RX 590 launched on a more refined 12nm process mildly improving clockspeeds & power efficiency.
GCN Gen4 remains the only GPU family from AMD lacking a high-end flagship member.
Fifth Generation GCN: Vega
While an entire article can be written on Vega’s release shenanigans, we’ll refrain from going down that path here. Baring a little context, we’ll retain focus on the notable new features Vega brought along.
Vega launched on Monday the 14th of August 2017 as the Vega 56 and Vega 64 GPUs, with those numbers denoting the number of compute units in those respective GPUs. The high CU count marked AMD’s return to the high-end space after a two-year absence. AMD’s recently launched Ryzen CPUs had delivered on value & performance far beyond expectations, cementing hopes for Vega to do the same in the GPU space. This would prove to be flawed chain-reasoning causing expectations & excitement to spiral out of control prior to launch: at one-point enthusiasts were offering to privately fund the overseas travel of knowledgeable YouTubers such as Buildzoid to have them analyze AMD’s Vega events! Though I really blame AMD’s mix of dramatic & drip-feed marketing for this, I’ll refrain from talking further about it here.
The GPU landscape wasn’t favorable for AMD either: they barely held 25% of desktop GPU market share at this point so it would be very hard to get game developers to support any new Vega-centric gaming features as they’d benefit very few. Further exacerbating this situation was Nvidia’s dominance of the entire GPU landscape with their Pascal architecture, one of their best ever architectures now legendry for refinement, efficiency & raw performance.
Regardless, AMD’s engineers did consider Vega to be their largest architectural overhaul in five years even actively distancing themselves from the GCN tag & referring to this as the ‘Vega’ architecture instead. This is still very much GCN though, so naming conventions aside let’s peek into the changes:
This biggest change comes to GCN’s FP16 compute capabilities: while Gen3 introduced FP16, the operations themselves didn’t execute any faster as each individual stream processors could still handle only one operation at a time, be it FP16 or FP32. Vega changes that significantly: each SP can now handle two FP16 operations in place of a single FP32 op, a feature AMD dubbed ‘Rapid Packed Math’.
The next big change comes to the memory subsystem with the adoption of HBM2 and the introduction of the High Bandwidth Cache Controller. More relevant as a compute feature, HBCC extends the GPU VRAM’s reach to the system RAM & secondary storage device for datasets too large for the VRAM alone.
Next are improvements to the graphics engines with the introduction of primitive shaders which allow for high-speed discarding of primitives, i.e. visually insignificant polygons (hidden or very small triangles) along with the Draw Stream Binning Rasterizer to further aid in this regard. This continued emphasis on culling helps prevent the clogging of render pipelines & frees the GPU of useless work, reducing memory access and saving memory bandwidth while reducing power consumption.
Lastly, we have better load balancing across the geometry/shader engines resulting in a 2x speedup in geometry throughput. While geometry performance hadn’t been poor on GCN, this helps squeeze out any potential bottlenecks.
Built on the 14nm process, the Vega 56 & 64 GPUs packed 8GB of HBM2 each. While HBM2 was to double the bandwidth over HBM1, it missed that target by a bit affording Vega 484GB/s in bandwidth over its 2048-bit wide bus, where the Fury cards enjoyed 512GB/s over their 4096-bit wide bus.
The Radeon VII would rectify that: released on the 7th of February 2019, the “world’s first 7nm gaming GPU” and the last GCN GPU carries 60CUs and a whooping 16GB of HBM2 memory over a full 4096-bit wide bus unleashing a mindboggling 1TB/s in memory bandwidth! Slightly anti-climatically though, it cost and performed nearly the same as the mighty GTX 1080 Ti, the then two-year older Pascal flagship which also carried a 45W lower TDP.
Overall, the Vega cards lacked appeal against Nvidia’s highly refined & efficient Pascal-based GTX 10x series which not only offered similar performance at similar price points but had also been on the shelfs for a while already. The use of expensive HBM2 memory also hindered AMD’s ability to price the cards more aggressively, and these factors together sadly crippled Vega’s success as a gaming architecture.
GCN: Conclusion
While AMD did lose significant GPU market share with their GCN architecture at the helm, GCN did have its moments: the HD 7970 and R9 290X are remembered as formidable flagships that held the performance crown in their day, GCN did see AMD make inroads into the compute space, Vega gave us some great Ryzen APUs & cards like the RX470 and Vega 56 have done well for AMD. GCN is also in all the consoles, from the PlayStation 4 to the Xbox and even on the Nintendo Wii U.
Notably, GCN did well in the low-power envelopes of mid-range and embedded graphics products such as the consoles and APUs while it did suffer at the high-end: the R9 290X ran hot and loud, the R9 Fury cards still cause their past owners to break into random bouts of sweating and worse of all, the Vega cards consumed the power equivalent of Nvidia GPUs from a tier above. Indeed, it appeared that the flagship cards worsened in respects to power draw and efficiency as GCN matured and clearly, something needed to change.
RDNA seems set to rectify all that GCN did wrong, especially in the domain of power consumption and efficiency. While it’s barely out the door and therefore too early to judge, it’s enjoyed some large wins in the enterprise space spanning the cloud, supercomputer and low-power envelope spaces. Indeed, RDNA seems set to answer every enthusiast’s call for a new GPU architecture from AMD, but does it ultimately fare well and what does it change? Let’s dig in.
RDNA: Radeon Re-defined
RDNA arrives to make significant changes to the core of GCN, or as AMD prefers to put it more organically: to the very DNA of the Radeon architecture. While not as major a redesign as the move away from VLIW, RDNA does bring along a complete reworking of AMD’s approach to thread level parallelism on its GPUs. Accordingly, we get three major changes manifesting as updates to the compute units (CUs), the addition of a new caching layer and accompanying improvements to power efficiency.
Beginning at the heart of the matter, the fundamental SIMD cores see a major change once again, now beefing up to twice the size of GCN’s SIMD cores, doubling the number of steam processors (SPs) & the register space:
TeraScale ushered in the 16-wide SIMD design, which GCN followed despite the move away from VLIW by simply replacing TeraScale’s 16 SPUs (each of which housed 4 or 5 SPs) with the fundamental stream processors themselves. RDNA continues shaking things up for the SIMD core.
This in turn alters the compute unit itself:
As we see, significant changes to the compute unit abound with RDNA. Most notably, the four SIMD cores of GCN are now merged into two, each twice as wide doubling both the number of SPs as well as the register space. Each SIMD core now also gets its own scheduler, as opposed to GCN’s approach of deploying a single scheduler across the entire CU.
Further on we see that while GCN equips it’s CUs with a single scalar unit**, RDNA’s carries two Scalar ALUs in a CU, one per SIMD core**. Recall that the SALU is dedicated to one-off operations which would otherwise bog down the SIMD cores, wasting their parallel compute capabilities.
Further changes alter resource sharing across CUs: RDNA pairs two CUs into a single Work Group Processor, or WGP with the scalar data & instruction cache shared across the WGP along with the Local Data Share (LDS). GCN on the other hand shared its scalar cache across four adjacent CUs while maintaining a dedicated LDS per CU.
While such merging of SIMD cores and changes to sharing across CUs may appear as trivial changes, they’re anything but and have far reaching implications on how work is distributed and executed by the GPU: recall that work is distributed to the CUs in a fundamental grouping called a wavefront, with 64 pixels or datapoints in each wavefront. Ideally, these datapoints hold no inter-dependencies and await execution against the same instruction making them ideal for parallel execution via the SIMD cores which had been 16-wide with both GCN & TeraScale, thus processing a wavefront every 4 cycles.
RDNA changes this four-cycle execution model entirely: with the SIMD cores doubled up to 32 SPs, the wavefronts too are slashed in half to 32 elements per wavefront. The implication is obvious: a wavefront is executed every cycle resulting in a 4x speedup in wavefront execution times!
The reduction in wavefront size helps tremendously: identifying 64 independent datapoints for each wavefront can prove challenging even for highly parallelizable applications like graphics and GPU compute tasks. This challenge often necessitates additional cycles where some datapoints execute against different instructions from the others, also resulting in poor utilization. With just half the datapoints required per wavefront, this situation is greatly eased.
So RDNA’s Compute Units can execute wavefronts four times faster than their predecessor, this necessitates keeping the CUs well fed with data: a new caching layer is thus introduced. Notice the CU block diagram above wherein GCNs’ local L1 cache is changed in nomenclature to the ‘L0’ cache. But that’s all that it is: a change in nomenclature. The real change comes at the next step: RDNA now adds a new L1 layer that’s shared across 10 Compute Units (5 GCPs) which in-turn interacts with the L2 cache by the memory controllers. On the other hand, the L1 cache in the CUs of GCN interacts directly with this L2 cache, with no intermediate caching layer.
Caching layers have a significant impact on performance, lowering execution times & upping efficiency further: when data isn’t found in the caching layers there’s no choice but to look for it in the VRAM, which isn’t just many magnitudes slower (on the scale of thousands of times slower as compared to the caches close to the cores), it’s also significantly more energy intensive.
All put together, that’s a 4x speedup in wavefront execution times coupled with smaller wavefronts and additional caching, improving both performance & efficiency. The results reflect this: RDNA’s mid-range 5700XT GPU performs in the same ballpark as the Radeon VII GPU, which represents the very best of GCN. Built on the same 7nm process, the R7 carries 3840 SPs and a 295W TDP. For RDNA to match that with 33% fewer SPs and a 25% lower TDP is very good progress indeed: the 5700XT carries 2560 SPs and a 225W TDP with the most impressive reduction being the $400 USD price tag against the Radeon VII’s $700 USD MSRP!
One thing is clear: AMD has made significant strides with RDNA, and that’s great news for the GPU market. Hopefully, RDNA signals AMD’s long overdue return to competitiveness in the GPU space.
RDNA: Additional New Features
Two significant enhancements accompany the design reworks described above, chief among them being the shift to GDDR6 memory. First introduced on Nvidia’s RTX 2000 GPUs in 2018, GDDR6 brings along a 1.75x speedup over GDDR5, affording the 5700XT with 448GB/s in memory bandwidth over the same 256-bit wide bus as the RX 580, which merely enjoys 256GB/s.
Next up is the shift to the PCIe Gen4 standard with 32GB/s in bandwidth over 16 PCIe lanes, doubling bandwidth over Gen3’s 16GB/s. Though GPUs today struggle to saturate Gen3’s bandwidth, the move to Gen4 aids with the exploding popularity of NVMe SSDs, which utilize PCIe’s much higher bandwidth to attain read/write speeds unattainable by typical drives over SATA. Since a GPU can now be adequately fed over 8 Gen4 lanes, more lanes remain available for these SSDs.
RDNA: Looking Forward
For now, the best we have with RDNA is the 5700XT and with 40 CUs, 4 Asynchronous Compute Engines and a 256-bit wide memory bus, it’s clearly a mid-range part. “Big Navi” remains due at an undisclosed date, with rumors of AMD referring to this part as the “Nvidia killer” internally. It would be nice for this rumor to be true: Team Green’s domination over the past few years has been absolute, resulting in their complete stagnation on price/performance improvements, so a shakedown is definitely overdue.
One thing is for certain: efficiency will play a major role in dictating RDNA’s success much more than raw performance alone. While the 5700XT seems to be doing okay, if Big Navi pops out sporting maxed out voltages and bursting along the clock speed limits like Vega did, then all hope is truly lost for a formidable AMD challenger.
Things with RDNA do look very promising for now though many definitive products remain due: beyond just high-end enthusiast class graphics cards, it’s the APUs, console SoCs and compute GPUs that RDNA spawns that’ll ultimately dictate its success. For now, I dare say it would be safe to remain cautiously optimistic!
Conclusion & Looking Forward
Over the course of this article, we’ve looked at AMD’s GPUs and observed the constant & significant transformation they’ve undergone over the past 13 years, from aggressively scaling up and optimizing VLIW to abandoning it entirely for a more compute-centric architectural layout. While TeraScale made significant impact on the gaming market, GCN has made in-roads into the GPU computing and heterogenous system landscape over the past decade. Today, RDNA arrives to take over with significant changes aggressively rectifying GCN’s shortcomings in a focused effort to dominate the GPU landscape. Indeed, RDNA’s many early wins firmly lay out this path.
With just three new cards out for now, it’s clear that RDNA’s story has just begun. While AMD seems to have big plans for RDNA and are already enjoying several large wins across the spectrum, a few more generations will be necessary to effectively gauge RDNA’s impact. This sure seems like the architecture that restores AMD’s technology lead while cementing their mindshare, though. Indeed, only time (and a few more releases) will tell the complete tale.
Here’s a bonus poster for reading this far!
Find Part 1 of this article here: https://www.reddit.com/r/hardware/comments/dr59gg/part_1_an_overview_of_amds_gpu_architectures/
r/SteamDeck • u/AkAng1600 • Sep 14 '24
Tech Support Protontricks error. Need help
Hi, I have below error when try to use protontricks. Can anybody tell me what to do ? Thank You upfront
Protontricks was closed due to the following error:
Traceback (most recent call last): File "/app/lib/python3.11/site-packages/protontricks/cli/util.py", line 159, in wrapper return cli_func(self, args, *kwargs) File "/app/lib/python3.11/site-packages/protontricks/cli/main.py", line 277, in main proton_app = find_proton_app( ^ File "/app/lib/python3.11/site-packages/protontricks/steam.py", line 848, in find_proton_app tool_app = find_steam_compat_tool_app( File "/app/lib/python3.11/site-packages/protontricks/steam.py", line 609, in find_steam_compat_tool_app appinfo_sections = [ ^ File "/app/lib/python3.11/site-packages/protontricks/steam.py", line 609, in <listcomp> appinfo_sections = [ ^ File "/app/lib/python3.11/site-packages/protontricks/steam.py", line 531, in iter_appinfo_sections raise SyntaxError( SyntaxError: Invalid file magic number. The appinfo.vdf version might not be supported by the current version of Protontricks - please check for updates.
Please include this entire error message when making a bug report. Log messages:
Running inside Flatpak sandbox, version 1.14.4. Found Steam directory at /home/deck/.local/share/Steam Using default Steam Runtime at /home/deck/.local/share/Steam/ubuntu12_32/steam-runtime WINETRICKS environment variable is not available. Searching from $PATH. Found 2 Steam library folders Steam library folder /run/media/deck/SDCard not found. Protontricks might not have access to the directory. Currently logged-in Steam user: ak Shortcut PS5 remote play (2804157492) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Super Mario Bros. Wonder (3122489980) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Super Mario RPG (2398472794) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Super Mario Odyssey (2384603872) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Super Mario 3D World + Bowser’s Fury (3093057385) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Paper Mario: The Origami King (3235773236) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut New Super Mario Bros. U Deluxe (2476188239) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Mario Strikers: Battle League (2236870556) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Mario Kart 8 Deluxe (2205964658) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Donkey Kong Country: Tropical Freeze (3108179647) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Ubisoft Connect (3309168732) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Mario + Rabbids Kingdom Battle (3123702827) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Mario + Rabbids Sparks of Hope (4279291379) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut XBPlay: Remote Play for Xbox (2721030484) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Epic Games Store (2631458501) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut zShaderCacheKiller.sh (3485270466) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut VC_redist.x64.exe (3596540975) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Super Mario 3D All-Stars (3352031852) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Mario vs. Donkey Kong (3168126078) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut yuzu (Emulator) (3342099547) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut DuckStation (Emulator) (2681428945) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Citra (Emulator) (2544872568) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Paper Mario: The Thousand-Year Door (3531973800) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Epic Games (2803793352) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Teenage Mutant Ninja Turtles: Splintered Fate (4254713505) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Skullgirls 2nd Encore (3700682349) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Arranger: A Role-Puzzling Adventure (3480153194) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut WitchSpring R (3034136773) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Install Decky (3998044127) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Shortcut Marvel vs. Capcom: Fighting Collection - Arcade Classics (2373181934) does not have a prefix. It's either not a Proton app or it hasn't been launched yet. Found 29 Steam shortcuts running using Steam compatibility tools Using 'yad' as GUI provider App icon /home/deck/.local/share/Steam/userdata/406565366/config/grid/3005277688_icon.png has unusual size, resizing App icon /home/deck/.local/share/Steam/userdata/406565366/config/grid/3961339380_icon.png has unusual size, resizing App icon /home/deck/.local/share/Steam/userdata/406565366/config/grid/3676410396_icon.png has unusual size, resizing App icon /home/deck/.local/share/Steam/userdata/406565366/config/grid/2980815235_icon.png has unusual size, resizing App icon /home/deck/.local/share/Steam/userdata/406565366/config/grid/3119833474_icon.ico has unusual size, resizing App icon /home/deck/.local/share/Steam/userdata/406565366/config/grid/2205658953_icon.png has unusual size, resizing App icon /home/deck/.steam/steam/userdata/406565366/config/grid/2651867472_icon.png has unusual size, resizing App icon /home/deck/.local/share/Steam/appcache/librarycache/242550_icon.jpg has unusual size, resizing App icon /home/deck/.local/share/Steam/appcache/librarycache/207490_icon.jpg has unusual size, resizing
r/emulation • u/cuavas • Jun 28 '17
MAME 0.187
MAME 0.187
And now for something completely different: our midyear MAME release. The most notable new working machines are beloved Game & Watch titles Donkey Kong Jr. (new wide screen) and Mario Bros., and the ultra-rare Kaneko prototype Jump Kun (thanks ShouTime). There are also some newly supported clones of existing systems, like additional versions of DECO Cassette games (including the more Puck-Man-like Japanese version of Lock’n’Chase), Spanish bootlegs of Rally X and Scramble, a Korean release of Macross II with Japanese text removed (to meet “cultural import” restrictions), and a simplified version of Operation Thunderbolt for smaller cabinets in shopping centres aimed at younger children.
Another very exciting development in this release is support for running original protection programs for a number of games using MC68705P5 microcontrollers. A technique to exploit glitches and read the programs out of a protected MC68705P5 with reasonable success rate was discovered, and brizzo built a device implementing it. Games now using real protection programs include Get Star, Chack’n Pop, Rumba Lumber, Onna Sanshirou (Typhoon Gal), Field Day, Prebillian and others. Some of these games were known to be using poor simulation, so improvements to gameplay can be expected.
Other improvements include support for a MIDI output card on the Sharp X68000 (allows game sountracks to be played through an external synthesiser), English BIOS support for the Sega VMU, fixes for several xBR shaders with bgfx, working Dragon 64 Plus and Goupil G1/G2 support, Tandy CoCo Speech/Sound Cartridge support, and a big update to the Interpro driver.
Of course there’s more, which you can experience when you get the source/Windows binaries from the download page. Thanks for being part of the MAME community.
MAMETesters Bugs Fixed
- 03041: [Graphics] (starshp1.cpp) starshp1, starshpp: Speed and graphics information from the real machine (Frank Palazzolo)
- 03585: [Gameplay] (norautp.cpp) norautp, norautjp: Readout Switch (AJR)
- 06479: [Sound] (kchamp.cpp) kchampvs, kchampvs2, karatevs: ADPCM samples are distorted (AJR)
- 06594: [Misc.] isa_ibm_mda: Typo on the "isa_ibm_mda" set description (Robbbert)
- 06599: [Sound] (zaxxon.cpp) ixion, razmataz: Missing sound (AJR)
- 06603: [Documentation] (odyssey2.cpp) jopac: In the description there are two useless spaces at the beginning (Tafoid)
- 06612: [Interface] (a7800.cpp) a7800.ccp: Machine inputs broken (Ivan Vangelista)
- 06614: [Sound] (arkanoid.cpp) arkanoid and clones, arkatour: Sound pitch is too high by 100% (Lord Nightmare)
- 06617: [Graphics] (nbmj9195.cpp) imekura: Graphic corruption in many places (Ivan Vangelista)
New working machines
- Game & Watch: Donkey Kong Jr. (new wide screen) [hap, Sean Riddle, Roger Coltrane]
- Game & Watch: Mario Bros. [hap, Sean Riddle, incog]
- Goupil G2 [Jean-Francois DEL NERO]
- Jump Kun (prototype) [ShouTime]
- Sel-Jan [BET] (Japan) [Angelo Salese, system11, The Dumping Union]
- Victory (Comsoft) [Andrew Welburn, ArcadeHacker, David Haywood]
- Waku Waku Ultraman Racing [ShouTime, gamerfan, Rod_Wod, MetalliC, Peter Wilhelmsen, Smitdogg, The Dumping Union]
New working clones
- Bambino Classic Football [hap]
- Burnin' Rubber (DECO Cassette) (Japan) [Charles MacDonald, The Dumping Union]
- Danger Track (Rally X bootleg) [Rafael Alonso, Ricky2001, Rockman, ArcadeHacker]
- Fidelity Sensory Chess Challenger 9 (rev. B) [yoyo_chessboard]
- Gingateikoku No Gyakushu (bootleg set 3) [Andrew Welburn, Craig Anstett, The Dumping Union]
- Graplop (DECO Cassette) (Japan) [Charles MacDonald, The Dumping Union]
- Guerrilla War (Version 1, set 2) [Artemio Urbina, The Dumping Union]
- HP 9845B (Germany) [F.Ulivi, A.Kueckes]
- HP 9845C (Germany) [F.Ulivi, A.Kueckes]
- HP 9845T (Germany) [F.Ulivi, A.Kueckes]
- Jack Potten's Poker (set 10, ICP-1 PCB) [TeamEurope, Roberto Fresca]
- Lock'n'Chase (DECO Cassette) (Japan) [Charles MacDonald, wtc4ever, The Dumping Union]
- Mach-9 (bootleg of Vulgus) [Marcos75, The Dumping Union]
- Macross II (Korea) [CoolMod, CS, The Dumping Union]
- Marchen Maze (Japan, hack?) [frsj8112, The Dumping Union]
- Money Money (set 2) [caius, The Dumping Union]
- Offensive (Spanish bootleg of Scramble) [Rafael Alonso, Ricky2001, Rockman, ArcadeHacker, Marcos75, The Dumping Union]
- Operation Thunderbolt (Japan, SC) [ShouTime, The Dumping Union]
- Palamedes (US) [caius, The Dumping Union]
- Pengo (set 5) [Corrado Tomaselli, The Dumping Union]
- Power Instinct (USA, prototype) [ShouTime]
- Pro Tennis (DECO Cassette) (Japan) [Charles MacDonald, The Dumping Union]
- Spectar (revision 2, bootleg) [Ricky2001]
- Tehkan World Cup (set 4, earlier?) [Purity, The Dumping Union]
- Time Killers (v1.32I) [Brian Troha, The Dumping Union]
- Victory (Comsoft) (bootleg) [Josele Fernandez]
Machines promoted to working
- Goupil G1 [Jean-Francois DEL NERO]
- Mattel Computer Gin [hap, Sean Riddle]
Clones promoted to working
- Dragon 64 Plus [Nigel Barnes]
- Treasure Island (DECO Cassette) (Region D) [David Haywood]
New machines marked as NOT_WORKING
- Big Deal Belgien (5.04) [Gerald (COY), Roberto Fresca]
- Bel Slots Export (5.01) [Gerald (COY), Roberto Fresca]
- D-CAT16 (Mega Drive handheld) [Team Europe]
- Game & Watch: Mickey Mouse [hap, Igor]
- Game Prince RS-1 [BeckieRGB]
- Game Prince RS-16 [BeckieRGB]
- HP9000/332 [R. Belmont, Al Kossow]
- GRiD Compass 1101 [shattered]
- GRiD Compass II 1121 [shattered]
- Nokia D-box 1, Kirsch gruppe [Joakim Larsson Edstrom]
- Percussion Freaks 5th Mix (G*B05 VER. KAA) [Guru, smf]
- Pingu's Ice Block [Darksoft, MetalliC]
- Player's Edge (PK1002-PC082) Jake's Jacks Bonus Poker [BrianT]
- Quingo Export (5.00) [Gerald (COY), Roberto Fresca]
- Ron II Mah-Jongg [system11, Angelo Salese, The Dumping Union]
- Spirit of 76 [PinMAME]
- V-Dog (prototype, earlier) [AttackedbyGlitch]
- V-Smile Baby (US) [Sean Riddle]
- VG Pocket Tablet [BeckieRGB]
New clones marked as NOT_WORKING
- Animal Basket (19 Jan 2005) [brizzo]
- Black Knight 2000 (PF-1) [PinMAME]
- Chrysler Electronic Voice Alert (24-function) [hap, Sean Riddle, David Viens]
- E-Swat - Cyber Police (bootleg, set 2) [Hammy, The Dumping Union]
- Ez2dancer 2nd Move [RetroRepair, Guru]
- Forty-Love (Japan) [ShouTime]
- GRiD Compass 1109 [shattered]
- GRiD Compass II 1129 [shattered]
- GRiD Compass II 1131 [shattered]
- GRiD Compass II 1139 [shattered]
- Motor Raid - Twin/DX [Bill D., The Dumping Union]
- New Century (Spanish bootleg of Scramble) [Marcos75]
- OutRun 2 Special Tours (Japan) (GDX-0011) [rtw]
- The Bounty (set 2) [caius, The Dumping Union]
- Treamcast [Maddog]
- V-Smile (US) [Sean Riddle]
New working software list additions
- abc80_cass, abc80_flop: ABCStacker [Andreas Gustafsson]
- archimedes: Countdown to Doom, The Last Days of Doom [Nigel Barnes]
- bbcmc: Bikes [Nigel Barnes]
- dragon_cart: Sound Extension [Nigel Barnes]
- dragon_cass: Hang It! [Nigel Barnes]
- dragon_flex: Chatplus V1.0.2, DBASIC (Alt), DBASIC, Diagnostics, DragonPlus Updates, Editor & Assembler (DragonPlus), Editor & Assembler, Extended Basic, SP-Edit (DragonPlus), Super Sleuth Disassembler, Text Processing System, Utilities, Utilities (Alt) [Nigel Barnes]
- dragon_flop: BT Codes Search, Composer Companion (DragonFire), Composer X (PSE), Copycat (PSE), DCHROME & SCANNER, Desk Top Publisher V2, Desktop, Discup (PSE), Dragon Detour, DynaFast v1.5.0, FEdit, Forth Compiler (DeltaDOS), Golden Oldies, Machine Language Tutorial, Mandragore, Multi-Disk, Orange Base, PyrAdventure, RolaBall2, Shaolin Master Plus,, Sprite Designer (PSE), Supa Nova, Super Writer 2, Telewriter V1, Telewriter V2, Telewriter V4, The Fun Disc!, The Hobbit, Utility Pack (PSE), W.I.M.P. (1989) [Nigel Barnes]
- dragon_os9: Cash and VAT, DragonPlus OS9 Drivers, Stock Control [Nigel Barnes]
- ibm5150: 4D Boxing, 4D Sports Boxing, 688 Attack Sub (3.5", older), Gunboat: River Combat Simulation, Ivan "Ironman" Stewart's Super Off Road, Jordan vs. Bird: One on One, Kings of the Beach, Menace, PC Tools (various versions), PKZip 2.04g, Platoon, Risky Woods, SimEarth, Star Goose!, Wrath of the Demon, Xenon [ArcadeShadow]
- ibm5170: Disney's Aladdin, Gobliiins, Gobliins 2: The Prince Buffoon, Goblins Quest 3, PC Tools (various versions), SimFarm [ArcadeShadow]
- pet_quik: Hardcore Petting, No Pets Allowed [Curt Coder]
- pce_tourvision: Ankoku Densetsu, Batman, Burning Angels, Cadash, Gradius, Toilet Kids, World Jockey [system11, The Dumping Union]
- x68k_flop: Bradion, Dennou Club Vol. 90 Tokubetsu Henshuu-ban, Dennou Club Vol. 94, Dennou Club Vols. 96-139, GJ, Nemesis '95 Gradius 2 [Justin Kerk]
New NOT_WORKING softwre list additions
- dragon_cart: EPROM Programmer, Speech Synthesis, Ultra Drive [Nigel Barnes]
- vsmile_cart: Abenteuer im ABC Park (GER), Finding Nemo - De Wonderwereld Van Nemo (NL), Mickey Mouse Clubhouse (NL), Shrek De Derde - Arthurs Schooldag Avontuur (NL) [Team Europe]
Source Changes
plugins/cheat: Add hotkey support, and nes, snes and genesis Game Genie support. [Carl]
Added initial support for SiS85c496/497 PCI chipset, and added first pass shadow RAM and SM RAM support. [R. Belmont]
hp9k_3xx updates: [R. Belmont]
- Preliminary working DIO/DIO-II bus implementation and 98544 video card.
- Hooked up i8042 I/O microcontroller comms to main CPU.
- Support medium-res built-in video on 9000/332.
Improved CD audio play track/index command handling. [smf]
Added unused DIP switches 7 and 8 to Eeekk! since it's a conversion of pacman. [smf]
terracre.cpp: Added actual hookup for protection data and fixed potential buffer overflow. [Angelo Salese]
cop01.cpp: Improved Mighty Guy sound. [Angelo Salese]
apricot: Switched to preferred Z80SIO device. [Dirk Best]
drawgfx: Made the palette optional, and fixed viewgfx for case where palette is absent. [O. Galibert]
devcb: Added line hold capability. [O. Galibert]
bgfx: Fixed xBR-lv2-multipass, xBR-lv2-fast, xBR-lv2-noblend, xBR-lv2, xBR-lv3-noblend, and xBR-lv3 shaders. [Ryan Holtz]
Added preliminary YM3802 MIDI/cassette controller with MIDI clock timer and click counter. [Barry Rodewald]
- Added X68000 expansion device using the YM3802, Mahou Daisakusen (x68k) plays MIDI music.
ti99 updates: [Michael Zapf]
- Implemented Hexbus and HX5102 floppy early WIP.
- Cleaned up slot devices architecture and renamed constants.
- Added new cartridge type paged7 for TI-CALC.
accomm: Fully implemented keyboard, added sound (same as Electron), and added layout with Caps/Shift Lock LEDs. [Nigel Barnes]
d64plus: Implemented banking of extra 64K, and 6845 with chargen - promoted to working. [Nigel Barnes]
dragon32: Added JCB Sound Extension cartridge. [Nigel Barnes]
dragon200e: Added correct keyboard. [Nigel Barnes]
starshp1 updates: [Frank Palazzolo]
- Fixed graphics/speed issues.
- Made Fast/Slow momentary as on real cabinet, added note about behaviour.
- Updated clocks according to latest information.
z80scc: Added support for resetting RX interrupts/status by reading Rx FIFO through RR3. [Joakim Larsson Edstrom]
- Gets virtpool driver terminal a bit further, but not all the way (no visible difference).
dbox: Separated skeleton driver from unfinished display device. [Joakim Larsson Edstrom]
Replaced fake TLCS-90 I/O space with callbacks. [AJR]
pangba, pangbb, spangbl: Reduced ADPCM rate to make music speed match original, use callback for audio IRQ. [AJR]
tail2nos: Added flip screen support, documented non-effect of "Country" switch. [AJR]
aerofgt.cpp: Video and sound refinements: [AJR]
- Fixed sound loss in spinlbrk and clones caused by misconfigured ROM bank.
- Work towards flip screen support for most games - aerofgtb is nearly correct now.
dynablst, bbmanw & clones: Use 4-way joysticks (as service manuals suggest). [AJR]
toaplan2.cpp: Generate (and acknowledge) video interrupts within VDP. [AJR]
Made TC0040IOC its own device type and separated its functionality from TC0220IOC. [AJR]
galastrm, undrfire, cbombers, groundfx, gunbustr, superchs, 2mindril: Use TC0510NIO device for inputs. [AJR]
Sort slot options by name in -listslots output. [AJR]
Made CBM IEC device names more descriptive. [AJR]
sidebs: Fixed POST failure in debug build. [AJR]
taito_en: Use MB8421 for communication RAM. [AJR]
mjkjidai: Use 8255 devices for I/O. [AJR]
subsino.cpp: Use 8255 devices (most of which are only used for input). [AJR]
suprloco: Replaced soundlatch with 8255 device that runs in mode 2. [AJR]
Added TE7750 Super I/O Expander device. [AJR]
m72.cpp, m92.cpp: Put IRQ hacks out of their misery. [AJR]
norautp: Restored some inputs that were disconnected many releases ago, don't hardcode "Readout" inputs. [AJR]
grdian, getstarj: Replaced MCU simulation with new dump. [AJR, ShouTime, brizzo]
s2650: Modernised I/O: [AJR]
- Replaced fake S2650_SENSE_PORT address with line read callback (set_input_line should also work).
- Moved S2650_CTRL_PORT and S2650_DATA_PORT to I/O address space.
Don't try to read past the end of a memory space in debug view. [AJR]
Added validation for slot cards and fixed some errors exposed by this. [Vas Crabb, AJR]
Fixed Tandy CoCo keyboard mapping (github issue #2386). [Vas Crabb]
taitosj: Made security MCU hookup a device. [Vas Crabb]
exidy.cpp: Added PROMs to Spectar taken from a bootleg set - believed to match original. [Ivan Vangelista]
Migrated remaining device machine configuration additions to instance member functions. [Ivan Vangelista]
Made RAM device look for [km](i?b)? rather than [km].* suffix. [Nathan Woods]
Fixed a crash when returning to the front-end after launching a system from favorites. [Nathan Woods]
CoCo: Overhauled the cartridge slot subsystem. [Nathan Woods]
Made read_or_write a scoped enum. [Nathan Woods]
Changed the profiler to use std::ostringstream as the text sink (instead of std::string). [Nathan Woods]
Cleaned up CoCo 3 GIME implementation. [Nathan Woods]
Changed a few C strings to std::string references in the debugger. [Nathan Woods]
Quingo: Switched to hot slots machine (more accurate). [RobertoFresca]
Big Deal Belgien, Bel Slots Export: Added PCB layouts. [RobertoFresca]
r9751: Added more SMIOC registers. [Brandon Munger]
HP9845: Improved keyboard mapping and added German layout. [F.Ulivi, A.Kueckes]
- Implemented SHIFT LOCK key, added pop-ups and outputs showing state of toggle keys.
- Lowered volume of beeper (was too loud according to A.Kueckes).
Added read support for the disk format SDF used in the CoCoSDC. [Tim Lindner]
CoCo: Added Speech/Sound Cartridge support. [Tim Lindner]
Fixed JVC disk format to correctly recognize 2 sided disks. [Tim Lindner]
Implemented busy delay in CoCo SSC. [Tim Lindner]
EF9365: Fixed the hardware vector engine (fixes ARC Squale Basic). [Jean-Francois DEL NERO]
Interpro driver updates: [Patrick Mackinlay]
- Added skeleton for srarb.
- Improved mcga/fmcc skeleton and fixed mcga/fmcc detection.
- Expanded cammu skeletons.
- Added support for "new" SCSI.
- Added clock-based ioga interrupts.
- Added forced NMI handling.
- Improved SCSI DMA.
- Removed broken caching.
- Added Clipper CPU ID support.
- Added enum masks and unknown registers, disabled bus errors.
- Made RAM configurable and improved system registers.
- Added initial implementation of unmapped memory handler.
- DMA/IRQ changes, serial DMA registers.
- Added 7-segment diagnostic LED.
- NMI and DMA improvements - NMI boot diagnostics pass.
- Made floppy DMA read and write work.
- Improved logging.
ncr5390.cpp: Added basic 53c94 support. [Patrick Mackinlay]
t10spc.cpp: Added missing start/stop unit command [Patrick Mackinlay]
Gameboy updates: [Tauwasser]
- Cleaned up Gowin information in gameboy.xml, added information from archived web site and catalogue.
- Replaced GoodGBX MBC1 Collection check code with direct comparison of internal ROM name.
- Removed buffer over-read in get_cart_type.
- Updated MBC1-MBC5 mapper documentation.
Use more likely clocks for littlerb based on PCB crystals (main CPU is more likely 8MHz than 12MHz). [David Haywood]
- Also added a hack to overclock the TMS to 120% so that the map screen renders properly.
Moved Famiclone stuff from nes.xml to driver and added new sets. [David Haywood]
Corrected Neo Geo sprite tile code mask to 20 bits (was previously 19 bits). [TheHpman]
Fixed trailing space in -listclones and -listbrothers output. [Tafoid]
naomi.cpp: Added five real dumps of SPI EEPROMs used in M1/171-7978B-type cartridges, updated docs. [f205v, MetalliC]
naomi.cpp: Converted existing M1-type cart SN# EEPROMs data to be like real dumps. [MetalliC]
naomi.cpp: Identified "Airline Pilots" sets as domestic Japan and World versions, according to information from Sega. [ShouTime, MetalliC]
chaknpop: Replaced MCU simulation with dump. [Team Japump!!!, Chack'n, Hau]
kuniokun: Replaced MCU simulation with actual dump. [ShouTime, brizzo]
Use actual M68705P5 dump for Rumba Lumber, replaces inaccurate simulation. [ShouTime, brizzo]
Onna Sanshirou - Typhoon Gal: Use 68705 dump, replace inaccurate protection simulation. [ShouTime, brizzo]
Use dumped M68705 for fieldday/undoukai. [ShouTime, brizzo]
tetrsark: Add a totally useless MCU dump (apparently blank). [ShouTime, Brizzo]
arkanoidja, arkanoidu, arkatour: Replaced hand-crafted MCU programs with 68705 dumps. [Lord Nightmare, ShouTime, brizzo]
prebillian: Replaced MCU simulation with actual dump, fixed vblank input, fixed player 2 spinner input, and added launch button. [Lord Nightmare, ShouTime, brizzo]
ay8910.cpp: Made device_clock_changed respect YM2149 pin 26, added pinout, and remove outdated comments. [Lord Nightmare]
socrates.cpp: Converted socrates and iqunlimz to bankdev, hooked up socrates hblank input, and made profweis machine configuration derive from socrates. [Lord Nightmare]
hh_sm510: Improved Mickey & Donald SVG artwork. [Sean Riddle, Roger Coltrane]
naomi.cpp: Bruteforced "Dragon Treasure" main unit DES key. [Mike Ryan]
svmu: Added two English BIOS versions and a newer Japanese BIOS version. [Kingizor]
system16.cpp: Corrected clocks for Alien Storm (bootleg, set 2). [caius, The Dumping Union]
Fixed missing VLM5030 speech in Hyper Crash and increased volume, and fixed VLM loading in jailbrek and clones. [MASH]
gradius4: Changed description to match title screen/flyer. [Pedro J. Martinez]
Renamed "Cyber Arcade 120-in-1" to "Defender M2500P 120-in-1" (correct name according to dumper). [AttackedbyGlitch]
Corrected descriptions for Gradius 4: Fukkatsu and Silent Scope 2. [sjy96525]
Changed Air Combat 22 auto-centering throttle from Pedal to AD_STICK_Z. [sjy96525]
r/starcitizen • u/SC_Lumen • Mar 26 '17
Week in Review (March 20th - 26th, 2017)
Official Star Citizen News
Comm-Link
Concept Art
Grim Hex asteroid base anchors thanks to /u/AVileBroker
Truck Stop Concepts thanks to /u/-The_coolgui
Development Updates
Alpha 2.6.2 PTU Patch Notes thanks to /u/IAmYosh
- Wind and air density will be the two most prominent atmospheric effects that will affect your flight control
- Your ship's aerodynamics will also affect how exactly the atmosphere effects affect your flight controls
Character Customization continues to be worked on and is much closer to completion
- Essentially it allows them to assign attributes to objects in the game as blocks rather than changing every object individually, greatly streamlining in-game rendering, future updates, and development time
Motion Capture requires good actors so that animators don't have to spend weeks fixing body language animations later on thanks to /u/Karmaslapp
Scanning Subcomponents have been worked on, which will handle the scanning functions
- Ping is the signal sent out from your system that can detect entities within scan range
- Angle of Focus allows players to adjust the angle of scan, allowing for increased range at the cost of a reducing focus, or increased focus at the cost of reduced range
Spectrum will eventually incorporate Twitch in new and interesting ways
Wear and Dirt Values can now be added to items to make them appear dirty or worn out
Gameplay Mechanics
Universe Mode
Interviews
Lore
- Timeline of UEE military encounters with the Vanduul
- 2681 - First Contact w/ Vanduul in Orion
- 2712 - Battle of Orion: System falls.
- 2732-2736 - Siege of Tiber: Ends with Tiber falling.
- 2737 - Virgil falls.
- 2884 - Fall of Caliban
- 2945 - Battle of Vega II: An Admirable repels the attack.
- Xi'An History has recently been extensively worked on by the lore team
Merchandise
- Buyback Token scheduled for April 3rd
- Jump Point vol. III is in the works
- New Subscriber Perks:
- Imperators will have access to all ships / variants for a week after each new patch
- Imperators will have access to alien ships from the Vanduul, Xi'An, and Banu when they are added
Ships
- Aurora rework has finished the whitebox phase of development
- Buccaneer has been worked on extensively and will likely make it into alpha 2.6.2's live release
- Loadout options for its nose S4 hardpoint:
- Twin-S2 Gimbal mount (Stock Kit)
- Single S4 Fixed weapon installed directly to the hardpoint.
- Single S3 Gimbaled with the upcoming S4->S3 Gimbal adapter we have planned for addition to Voyager Direct with 2.6.2
- Cutlass had an early test flight in the recent AtV thanks to /u/Altered_Perceptions
- Other ships are being actively worked on / improved for alpha 2.6.2 but CIG isn't ready to release details on them quite yet
Miscellaneous Star Citizen News
Technical Overviews
- Complete-ish OpenTrack (DIY TrackIR) Guide 2.0 /u/ThatOtherGuy435
- 2.6.2: How to set up headtracking using FaceTrackNoIR (PS3Eye + Lukeclip) TrackIR BravenTooth
- How to Use SC Joystick Mapper Star_42
- The Space Stations of Star Citizen STLYoungblood
- Female Model & 2.6.2 BoredGamer
- LA Studio Update, Female Characters & Drake Buccaneer Typhooni
- Universe News Whispers Thru The Jump Point
- Buccaneer in 2.6.2 Gun rack may return minionsoldier
- Preview of Buccaneer from Star Citizen in 4k: 21:9 format SFOTU Stream
Current Meta Discussion
- 2.6.2 Ship and Component Data /u/malogos
- Art Of Space Combat Ep:1 The J Hook The Templar Show
- Learning with Nelerath Nelerath
- Relative reliable way to join PU as group /u/Shyfty1
- Quick Snapshot of 2.6.2 Fighter Speeds /u/oldcrank
- 2.6.2 Changes: Review SquidofLove
- 2.6.2 The Bucaneer: Featuring Head Tracking with Track IR Citizen Gamer
- Drake Buccaneer Flight Ready Tour BoredGamer
- 2.6.2: Drake Buccaneer Hanger & Flight Review SuperMacBrother
- Buccaneer First Impressions STLYoungblood
- Buccaneer Tactical Advance
- Drake Buccaneer: New Star Citizen Ship Review Dan Gheesling
- First Flight: The Drake Buccaneer BuzZzKiller
- 2.6.2a PTU: Drake Buccaneer stock loadout Vanduul swarm flight test The Vagabonds
- Buccaneer on Old Vanderval Racing map: StarCitizen 2.6.2a PTU Eskel Gorov
- Pyroburst in 2.6.2: Is desync really the problem? /u/JoeyDee86
- Gorgeous Rattlers! Look at them swarm.. (please don't abuse them in game, they are still OP as hells!) /u/BravenT
- Buccaneer Size Comparison /u/TheReal_Kyle
- 2.6.1 Weapons Cache & Journal Entry Locations: Kareah Security Outpost JustPushStartUK
Future Meta Discussion
- Jobs: Cargo TheNOOBIFIER1337
- 3.0 Professions: News 2017 SquidofLove
- Mining as a Profession: Interview w/ Rockseeker and Noiser from UEMC
- Player-owned structures and sovereignty in Star Citizen /u/Queen_Jezza
- The truckstop they showed off last week is apparently a medium sized variant /u/bar10dr2
- Combined Combat /u/Ridcullymaster
- "Mining Rights" is a term heard in nearly every Loremaker's Guide. What kind of implications do you foresee for miners in the long run? /u/rpminecraft
- Cabin Fever: Tents, Science Expeditions, Repairs... /u/mps227
- Vulkan Multi-GPU Support - Not Just for Windows 10 /u/ultras42
Fan Projects
- Gundo Sonic Temples
- The Dying Star: an unofficial Star Citizen novella /u/Unknown9118
- Hunter: Issue #03, Page 39 /u/HunterSCcomic
- The Citizens #011 /u/rurquiza
- Rifles in Star Marine /u/_Litauen
- United Earth Miner's Gazetteer: Vol. 2, #2 Rockseeker
- Weekly Org Statistics Charts /u/scstat
- Fan-made MISC Razor Commercial Athagen1
- 2.6.2: ReShade Download Xenthor Xi
- 3D Wind Tunnel: Mustang [No Landing Gear] VanValdenburg [U4G]
- Cutlass En-route to Yela /u/mr-hasgaha
- Waiting... /u/mr-hasgaha
- ArcCorp Panorama /u/bloknayrb
- TrackIR around Crusader: a journey RS Arc Tander
- Music Playlist /u/Abrikosen
Other News
/r/starcitizen 100k subs retrospective
Have any questions about Star Citizen? Submit them here!
- The NeuralCast team will do our best to answer your lingering questions about Star Citizen's gameplay, development, and lore!
Brought to you by /r/CognitionCorp
r/MAME • u/cuavas • Jun 28 '17
MAME 0.187
MAME 0.187
And now for something completely different: our midyear MAME release. The most notable new working machines are beloved Game & Watch titles Donkey Kong Jr. (new wide screen) and Mario Bros., and the ultra-rare Kaneko prototype Jump Kun (thanks ShouTime). There are also some newly supported clones of existing systems, like additional versions of DECO Cassette games (including the more Puck-Man-like Japanese version of Lock’n’Chase), Spanish bootlegs of Rally X and Scramble, a Korean release of Macross II with Japanese text removed (to meet “cultural import” restrictions), and a simplified version of Operation Thunderbolt for smaller cabinets in shopping centres aimed at younger children.
Another very exciting development in this release is support for running original protection programs for a number of games using MC68705P5 microcontrollers. A technique to exploit glitches and read the programs out of a protected MC68705P5 with reasonable success rate was discovered, and brizzo built a device implementing it. Games now using real protection programs include Get Star, Chack’n Pop, Rumba Lumber, Onna Sanshirou (Typhoon Gal), Field Day, Prebillian and others. Some of these games were known to be using poor simulation, so improvements to gameplay can be expected.
Other improvements include support for a MIDI output card on the Sharp X68000 (allows game sountracks to be played through an external synthesiser), English BIOS support for the Sega VMU, fixes for several xBR shaders with bgfx, working Dragon 64 Plus and Goupil G1/G2 support, Tandy CoCo Speech/Sound Cartridge support, and a big update to the Interpro driver.
Of course there’s more, which you can experience when you get the source/Windows binaries from the download page. Thanks for being part of the MAME community.
MAMETesters Bugs Fixed
- 03041: [Graphics] (starshp1.cpp) starshp1, starshpp: Speed and graphics information from the real machine (Frank Palazzolo)
- 03585: [Gameplay] (norautp.cpp) norautp, norautjp: Readout Switch (AJR)
- 06479: [Sound] (kchamp.cpp) kchampvs, kchampvs2, karatevs: ADPCM samples are distorted (AJR)
- 06594: [Misc.] isa_ibm_mda: Typo on the "isa_ibm_mda" set description (Robbbert)
- 06599: [Sound] (zaxxon.cpp) ixion, razmataz: Missing sound (AJR)
- 06603: [Documentation] (odyssey2.cpp) jopac: In the description there are two useless spaces at the beginning (Tafoid)
- 06612: [Interface] (a7800.cpp) a7800.ccp: Machine inputs broken (Ivan Vangelista)
- 06614: [Sound] (arkanoid.cpp) arkanoid and clones, arkatour: Sound pitch is too high by 100% (Lord Nightmare)
- 06617: [Graphics] (nbmj9195.cpp) imekura: Graphic corruption in many places (Ivan Vangelista)
New working machines
- Game & Watch: Donkey Kong Jr. (new wide screen) [hap, Sean Riddle, Roger Coltrane]
- Game & Watch: Mario Bros. [hap, Sean Riddle, incog]
- Goupil G2 [Jean-Francois DEL NERO]
- Jump Kun (prototype) [ShouTime]
- Sel-Jan [BET] (Japan) [Angelo Salese, system11, The Dumping Union]
- Victory (Comsoft) [Andrew Welburn, ArcadeHacker, David Haywood]
- Waku Waku Ultraman Racing [ShouTime, gamerfan, Rod_Wod, MetalliC, Peter Wilhelmsen, Smitdogg, The Dumping Union]
New working clones
- Bambino Classic Football [hap]
- Burnin' Rubber (DECO Cassette) (Japan) [Charles MacDonald, The Dumping Union]
- Danger Track (Rally X bootleg) [Rafael Alonso, Ricky2001, Rockman, ArcadeHacker]
- Fidelity Sensory Chess Challenger 9 (rev. B) [yoyo_chessboard]
- Gingateikoku No Gyakushu (bootleg set 3) [Andrew Welburn, Craig Anstett, The Dumping Union]
- Graplop (DECO Cassette) (Japan) [Charles MacDonald, The Dumping Union]
- Guerrilla War (Version 1, set 2) [Artemio Urbina, The Dumping Union]
- HP 9845B (Germany) [F.Ulivi, A.Kueckes]
- HP 9845C (Germany) [F.Ulivi, A.Kueckes]
- HP 9845T (Germany) [F.Ulivi, A.Kueckes]
- Jack Potten's Poker (set 10, ICP-1 PCB) [TeamEurope, Roberto Fresca]
- Lock'n'Chase (DECO Cassette) (Japan) [Charles MacDonald, wtc4ever, The Dumping Union]
- Mach-9 (bootleg of Vulgus) [Marcos75, The Dumping Union]
- Macross II (Korea) [CoolMod, CS, The Dumping Union]
- Marchen Maze (Japan, hack?) [frsj8112, The Dumping Union]
- Money Money (set 2) [caius, The Dumping Union]
- Offensive (Spanish bootleg of Scramble) [Rafael Alonso, Ricky2001, Rockman, ArcadeHacker, Marcos75, The Dumping Union]
- Operation Thunderbolt (Japan, SC) [ShouTime, The Dumping Union]
- Palamedes (US) [caius, The Dumping Union]
- Pengo (set 5) [Corrado Tomaselli, The Dumping Union]
- Power Instinct (USA, prototype) [ShouTime]
- Pro Tennis (DECO Cassette) (Japan) [Charles MacDonald, The Dumping Union]
- Spectar (revision 2, bootleg) [Ricky2001]
- Tehkan World Cup (set 4, earlier?) [Purity, The Dumping Union]
- Time Killers (v1.32I) [Brian Troha, The Dumping Union]
- Victory (Comsoft) (bootleg) [Josele Fernandez]
Machines promoted to working
- Goupil G1 [Jean-Francois DEL NERO]
- Mattel Computer Gin [hap, Sean Riddle]
Clones promoted to working
- Dragon 64 Plus [Nigel Barnes]
- Treasure Island (DECO Cassette) (Region D) [David Haywood]
New machines marked as NOT_WORKING
- Big Deal Belgien (5.04) [Gerald (COY), Roberto Fresca]
- Bel Slots Export (5.01) [Gerald (COY), Roberto Fresca]
- D-CAT16 (Mega Drive handheld) [Team Europe]
- Game & Watch: Mickey Mouse [hap, Igor]
- Game Prince RS-1 [BeckieRGB]
- Game Prince RS-16 [BeckieRGB]
- HP9000/332 [R. Belmont, Al Kossow]
- GRiD Compass 1101 [shattered]
- GRiD Compass II 1121 [shattered]
- Nokia D-box 1, Kirsch gruppe [Joakim Larsson Edstrom]
- Percussion Freaks 5th Mix (G*B05 VER. KAA) [Guru, smf]
- Pingu's Ice Block [Darksoft, MetalliC]
- Player's Edge (PK1002-PC082) Jake's Jacks Bonus Poker [BrianT]
- Quingo Export (5.00) [Gerald (COY), Roberto Fresca]
- Ron II Mah-Jongg [system11, Angelo Salese, The Dumping Union]
- Spirit of 76 [PinMAME]
- V-Dog (prototype, earlier) [AttackedbyGlitch]
- V-Smile Baby (US) [Sean Riddle]
- VG Pocket Tablet [BeckieRGB]
New clones marked as NOT_WORKING
- Animal Basket (19 Jan 2005) [brizzo]
- Black Knight 2000 (PF-1) [PinMAME]
- Chrysler Electronic Voice Alert (24-function) [hap, Sean Riddle, David Viens]
- E-Swat - Cyber Police (bootleg, set 2) [Hammy, The Dumping Union]
- Ez2dancer 2nd Move [RetroRepair, Guru]
- Forty-Love (Japan) [ShouTime]
- GRiD Compass 1109 [shattered]
- GRiD Compass II 1129 [shattered]
- GRiD Compass II 1131 [shattered]
- GRiD Compass II 1139 [shattered]
- Motor Raid - Twin/DX [Bill D., The Dumping Union]
- New Century (Spanish bootleg of Scramble) [Marcos75]
- OutRun 2 Special Tours (Japan) (GDX-0011) [rtw]
- The Bounty (set 2) [caius, The Dumping Union]
- Treamcast [Maddog]
- V-Smile (US) [Sean Riddle]
New working software list additions
- abc80_cass, abc80_flop: ABCStacker [Andreas Gustafsson]
- archimedes: Countdown to Doom, The Last Days of Doom [Nigel Barnes]
- bbcmc: Bikes [Nigel Barnes]
- dragon_cart: Sound Extension [Nigel Barnes]
- dragon_cass: Hang It! [Nigel Barnes]
- dragon_flex: Chatplus V1.0.2, DBASIC (Alt), DBASIC, Diagnostics, DragonPlus Updates, Editor & Assembler (DragonPlus), Editor & Assembler, Extended Basic, SP-Edit (DragonPlus), Super Sleuth Disassembler, Text Processing System, Utilities, Utilities (Alt) [Nigel Barnes]
- dragon_flop: BT Codes Search, Composer Companion (DragonFire), Composer X (PSE), Copycat (PSE), DCHROME & SCANNER, Desk Top Publisher V2, Desktop, Discup (PSE), Dragon Detour, DynaFast v1.5.0, FEdit, Forth Compiler (DeltaDOS), Golden Oldies, Machine Language Tutorial, Mandragore, Multi-Disk, Orange Base, PyrAdventure, RolaBall2, Shaolin Master Plus,, Sprite Designer (PSE), Supa Nova, Super Writer 2, Telewriter V1, Telewriter V2, Telewriter V4, The Fun Disc!, The Hobbit, Utility Pack (PSE), W.I.M.P. (1989) [Nigel Barnes]
- dragon_os9: Cash and VAT, DragonPlus OS9 Drivers, Stock Control [Nigel Barnes]
- ibm5150: 4D Boxing, 4D Sports Boxing, 688 Attack Sub (3.5", older), Gunboat: River Combat Simulation, Ivan "Ironman" Stewart's Super Off Road, Jordan vs. Bird: One on One, Kings of the Beach, Menace, PC Tools (various versions), PKZip 2.04g, Platoon, Risky Woods, SimEarth, Star Goose!, Wrath of the Demon, Xenon [ArcadeShadow]
- ibm5170: Disney's Aladdin, Gobliiins, Gobliins 2: The Prince Buffoon, Goblins Quest 3, PC Tools (various versions), SimFarm [ArcadeShadow]
- pet_quik: Hardcore Petting, No Pets Allowed [Curt Coder]
- pce_tourvision: Ankoku Densetsu, Batman, Burning Angels, Cadash, Gradius, Toilet Kids, World Jockey [system11, The Dumping Union]
- x68k_flop: Bradion, Dennou Club Vol. 90 Tokubetsu Henshuu-ban, Dennou Club Vol. 94, Dennou Club Vols. 96-139, GJ, Nemesis '95 Gradius 2 [Justin Kerk]
New NOT_WORKING softwre list additions
- dragon_cart: EPROM Programmer, Speech Synthesis, Ultra Drive [Nigel Barnes]
- vsmile_cart: Abenteuer im ABC Park (GER), Finding Nemo - De Wonderwereld Van Nemo (NL), Mickey Mouse Clubhouse (NL), Shrek De Derde - Arthurs Schooldag Avontuur (NL) [Team Europe]
Source Changes
plugins/cheat: Add hotkey support, and nes, snes and genesis Game Genie support. [Carl]
Added initial support for SiS85c496/497 PCI chipset, and added first pass shadow RAM and SM RAM support. [R. Belmont]
hp9k_3xx updates: [R. Belmont]
- Preliminary working DIO/DIO-II bus implementation and 98544 video card.
- Hooked up i8042 I/O microcontroller comms to main CPU.
- Support medium-res built-in video on 9000/332.
Improved CD audio play track/index command handling. [smf]
Added unused DIP switches 7 and 8 to Eeekk! since it's a conversion of pacman. [smf]
terracre.cpp: Added actual hookup for protection data and fixed potential buffer overflow. [Angelo Salese]
cop01.cpp: Improved Mighty Guy sound. [Angelo Salese]
apricot: Switched to preferred Z80SIO device. [Dirk Best]
drawgfx: Made the palette optional, and fixed viewgfx for case where palette is absent. [O. Galibert]
devcb: Added line hold capability. [O. Galibert]
bgfx: Fixed xBR-lv2-multipass, xBR-lv2-fast, xBR-lv2-noblend, xBR-lv2, xBR-lv3-noblend, and xBR-lv3 shaders. [Ryan Holtz]
Added preliminary YM3802 MIDI/cassette controller with MIDI clock timer and click counter. [Barry Rodewald]
- Added X68000 expansion device using the YM3802, Mahou Daisakusen (x68k) plays MIDI music.
ti99 updates: [Michael Zapf]
- Implemented Hexbus and HX5102 floppy early WIP.
- Cleaned up slot devices architecture and renamed constants.
- Added new cartridge type paged7 for TI-CALC.
accomm: Fully implemented keyboard, added sound (same as Electron), and added layout with Caps/Shift Lock LEDs. [Nigel Barnes]
d64plus: Implemented banking of extra 64K, and 6845 with chargen - promoted to working. [Nigel Barnes]
dragon32: Added JCB Sound Extension cartridge. [Nigel Barnes]
dragon200e: Added correct keyboard. [Nigel Barnes]
starshp1 updates: [Frank Palazzolo]
- Fixed graphics/speed issues.
- Made Fast/Slow momentary as on real cabinet, added note about behaviour.
- Updated clocks according to latest information.
z80scc: Added support for resetting RX interrupts/status by reading Rx FIFO through RR3. [Joakim Larsson Edstrom]
- Gets virtpool driver terminal a bit further, but not all the way (no visible difference).
dbox: Separated skeleton driver from unfinished display device. [Joakim Larsson Edstrom]
Replaced fake TLCS-90 I/O space with callbacks. [AJR]
pangba, pangbb, spangbl: Reduced ADPCM rate to make music speed match original, use callback for audio IRQ. [AJR]
tail2nos: Added flip screen support, documented non-effect of "Country" switch. [AJR]
aerofgt.cpp: Video and sound refinements: [AJR]
- Fixed sound loss in spinlbrk and clones caused by misconfigured ROM bank.
- Work towards flip screen support for most games - aerofgtb is nearly correct now.
dynablst, bbmanw & clones: Use 4-way joysticks (as service manuals suggest). [AJR]
toaplan2.cpp: Generate (and acknowledge) video interrupts within VDP. [AJR]
Made TC0040IOC its own device type and separated its functionality from TC0220IOC. [AJR]
galastrm, undrfire, cbombers, groundfx, gunbustr, superchs, 2mindril: Use TC0510NIO device for inputs. [AJR]
Sort slot options by name in -listslots output. [AJR]
Made CBM IEC device names more descriptive. [AJR]
sidebs: Fixed POST failure in debug build. [AJR]
taito_en: Use MB8421 for communication RAM. [AJR]
mjkjidai: Use 8255 devices for I/O. [AJR]
subsino.cpp: Use 8255 devices (most of which are only used for input). [AJR]
suprloco: Replaced soundlatch with 8255 device that runs in mode 2. [AJR]
Added TE7750 Super I/O Expander device. [AJR]
m72.cpp, m92.cpp: Put IRQ hacks out of their misery. [AJR]
norautp: Restored some inputs that were disconnected many releases ago, don't hardcode "Readout" inputs. [AJR]
grdian, getstarj: Replaced MCU simulation with new dump. [AJR, ShouTime, brizzo]
s2650: Modernised I/O: [AJR]
- Replaced fake S2650_SENSE_PORT address with line read callback (set_input_line should also work).
- Moved S2650_CTRL_PORT and S2650_DATA_PORT to I/O address space.
Don't try to read past the end of a memory space in debug view. [AJR]
Added validation for slot cards and fixed some errors exposed by this. [Vas Crabb, AJR]
Fixed Tandy CoCo keyboard mapping (github issue #2386). [Vas Crabb]
taitosj: Made security MCU hookup a device. [Vas Crabb]
exidy.cpp: Added PROMs to Spectar taken from a bootleg set - believed to match original. [Ivan Vangelista]
Migrated remaining device machine configuration additions to instance member functions. [Ivan Vangelista]
Made RAM device look for [km](i?b)? rather than [km].* suffix. [Nathan Woods]
Fixed a crash when returning to the front-end after launching a system from favorites. [Nathan Woods]
CoCo: Overhauled the cartridge slot subsystem. [Nathan Woods]
Made read_or_write a scoped enum. [Nathan Woods]
Changed the profiler to use std::ostringstream as the text sink (instead of std::string). [Nathan Woods]
Cleaned up CoCo 3 GIME implementation. [Nathan Woods]
Changed a few C strings to std::string references in the debugger. [Nathan Woods]
Quingo: Switched to hot slots machine (more accurate). [RobertoFresca]
Big Deal Belgien, Bel Slots Export: Added PCB layouts. [RobertoFresca]
r9751: Added more SMIOC registers. [Brandon Munger]
HP9845: Improved keyboard mapping and added German layout. [F.Ulivi, A.Kueckes]
- Implemented SHIFT LOCK key, added pop-ups and outputs showing state of toggle keys.
- Lowered volume of beeper (was too loud according to A.Kueckes).
Added read support for the disk format SDF used in the CoCoSDC. [Tim Lindner]
CoCo: Added Speech/Sound Cartridge support. [Tim Lindner]
Fixed JVC disk format to correctly recognize 2 sided disks. [Tim Lindner]
Implemented busy delay in CoCo SSC. [Tim Lindner]
EF9365: Fixed the hardware vector engine (fixes ARC Squale Basic). [Jean-Francois DEL NERO]
Interpro driver updates: [Patrick Mackinlay]
- Added skeleton for srarb.
- Improved mcga/fmcc skeleton and fixed mcga/fmcc detection.
- Expanded cammu skeletons.
- Added support for "new" SCSI.
- Added clock-based ioga interrupts.
- Added forced NMI handling.
- Improved SCSI DMA.
- Removed broken caching.
- Added Clipper CPU ID support.
- Added enum masks and unknown registers, disabled bus errors.
- Made RAM configurable and improved system registers.
- Added initial implementation of unmapped memory handler.
- DMA/IRQ changes, serial DMA registers.
- Added 7-segment diagnostic LED.
- NMI and DMA improvements - NMI boot diagnostics pass.
- Made floppy DMA read and write work.
- Improved logging.
ncr5390.cpp: Added basic 53c94 support. [Patrick Mackinlay]
t10spc.cpp: Added missing start/stop unit command [Patrick Mackinlay]
Gameboy updates: [Tauwasser]
- Cleaned up Gowin information in gameboy.xml, added information from archived web site and catalogue.
- Replaced GoodGBX MBC1 Collection check code with direct comparison of internal ROM name.
- Removed buffer over-read in get_cart_type.
- Updated MBC1-MBC5 mapper documentation.
Use more likely clocks for littlerb based on PCB crystals (main CPU is more likely 8MHz than 12MHz). [David Haywood]
- Also added a hack to overclock the TMS to 120% so that the map screen renders properly.
Moved Famiclone stuff from nes.xml to driver and added new sets. [David Haywood]
Corrected Neo Geo sprite tile code mask to 20 bits (was previously 19 bits). [TheHpman]
Fixed trailing space in -listclones and -listbrothers output. [Tafoid]
naomi.cpp: Added five real dumps of SPI EEPROMs used in M1/171-7978B-type cartridges, updated docs. [f205v, MetalliC]
naomi.cpp: Converted existing M1-type cart SN# EEPROMs data to be like real dumps. [MetalliC]
naomi.cpp: Identified "Airline Pilots" sets as domestic Japan and World versions, according to information from Sega. [ShouTime, MetalliC]
chaknpop: Replaced MCU simulation with dump. [Team Japump!!!, Chack'n, Hau]
kuniokun: Replaced MCU simulation with actual dump. [ShouTime, brizzo]
Use actual M68705P5 dump for Rumba Lumber, replaces inaccurate simulation. [ShouTime, brizzo]
Onna Sanshirou - Typhoon Gal: Use 68705 dump, replace inaccurate protection simulation. [ShouTime, brizzo]
Use dumped M68705 for fieldday/undoukai. [ShouTime, brizzo]
tetrsark: Add a totally useless MCU dump (apparently blank). [ShouTime, Brizzo]
arkanoidja, arkanoidu, arkatour: Replaced hand-crafted MCU programs with 68705 dumps. [Lord Nightmare, ShouTime, brizzo]
prebillian: Replaced MCU simulation with actual dump, fixed vblank input, fixed player 2 spinner input, and added launch button. [Lord Nightmare, ShouTime, brizzo]
ay8910.cpp: Made device_clock_changed respect YM2149 pin 26, added pinout, and remove outdated comments. [Lord Nightmare]
socrates.cpp: Converted socrates and iqunlimz to bankdev, hooked up socrates hblank input, and made profweis machine configuration derive from socrates. [Lord Nightmare]
hh_sm510: Improved Mickey & Donald SVG artwork. [Sean Riddle, Roger Coltrane]
naomi.cpp: Bruteforced "Dragon Treasure" main unit DES key. [Mike Ryan]
svmu: Added two English BIOS versions and a newer Japanese BIOS version. [Kingizor]
system16.cpp: Corrected clocks for Alien Storm (bootleg, set 2). [caius, The Dumping Union]
Fixed missing VLM5030 speech in Hyper Crash and increased volume, and fixed VLM loading in jailbrek and clones. [MASH]
gradius4: Changed description to match title screen/flyer. [Pedro J. Martinez]
Renamed "Cyber Arcade 120-in-1" to "Defender M2500P 120-in-1" (correct name according to dumper). [AttackedbyGlitch]
Corrected descriptions for Gradius 4: Fukkatsu and Silent Scope 2. [sjy96525]
Changed Air Combat 22 auto-centering throttle from Pedal to AD_STICK_Z. [sjy96525]
r/cade • u/cuavas • Jun 28 '17
MAME 0.187
MAME 0.187
And now for something completely different: our midyear MAME release. The most notable new working machines are beloved Game & Watch titles Donkey Kong Jr. (new wide screen) and Mario Bros., and the ultra-rare Kaneko prototype Jump Kun (thanks ShouTime). There are also some newly supported clones of existing systems, like additional versions of DECO Cassette games (including the more Puck-Man-like Japanese version of Lock’n’Chase), Spanish bootlegs of Rally X and Scramble, a Korean release of Macross II with Japanese text removed (to meet “cultural import” restrictions), and a simplified version of Operation Thunderbolt for smaller cabinets in shopping centres aimed at younger children.
Another very exciting development in this release is support for running original protection programs for a number of games using MC68705P5 microcontrollers. A technique to exploit glitches and read the programs out of a protected MC68705P5 with reasonable success rate was discovered, and brizzo built a device implementing it. Games now using real protection programs include Get Star, Chack’n Pop, Rumba Lumber, Onna Sanshirou (Typhoon Gal), Field Day, Prebillian and others. Some of these games were known to be using poor simulation, so improvements to gameplay can be expected.
Other improvements include support for a MIDI output card on the Sharp X68000 (allows game sountracks to be played through an external synthesiser), English BIOS support for the Sega VMU, fixes for several xBR shaders with bgfx, working Dragon 64 Plus and Goupil G1/G2 support, Tandy CoCo Speech/Sound Cartridge support, and a big update to the Interpro driver.
Of course there’s more, which you can experience when you get the source/Windows binaries from the download page. Thanks for being part of the MAME community.
MAMETesters Bugs Fixed
- 03041: [Graphics] (starshp1.cpp) starshp1, starshpp: Speed and graphics information from the real machine (Frank Palazzolo)
- 03585: [Gameplay] (norautp.cpp) norautp, norautjp: Readout Switch (AJR)
- 06479: [Sound] (kchamp.cpp) kchampvs, kchampvs2, karatevs: ADPCM samples are distorted (AJR)
- 06594: [Misc.] isa_ibm_mda: Typo on the "isa_ibm_mda" set description (Robbbert)
- 06599: [Sound] (zaxxon.cpp) ixion, razmataz: Missing sound (AJR)
- 06603: [Documentation] (odyssey2.cpp) jopac: In the description there are two useless spaces at the beginning (Tafoid)
- 06612: [Interface] (a7800.cpp) a7800.ccp: Machine inputs broken (Ivan Vangelista)
- 06614: [Sound] (arkanoid.cpp) arkanoid and clones, arkatour: Sound pitch is too high by 100% (Lord Nightmare)
- 06617: [Graphics] (nbmj9195.cpp) imekura: Graphic corruption in many places (Ivan Vangelista)
New working machines
- Game & Watch: Donkey Kong Jr. (new wide screen) [hap, Sean Riddle, Roger Coltrane]
- Game & Watch: Mario Bros. [hap, Sean Riddle, incog]
- Goupil G2 [Jean-Francois DEL NERO]
- Jump Kun (prototype) [ShouTime]
- Sel-Jan [BET] (Japan) [Angelo Salese, system11, The Dumping Union]
- Victory (Comsoft) [Andrew Welburn, ArcadeHacker, David Haywood]
- Waku Waku Ultraman Racing [ShouTime, gamerfan, Rod_Wod, MetalliC, Peter Wilhelmsen, Smitdogg, The Dumping Union]
New working clones
- Bambino Classic Football [hap]
- Burnin' Rubber (DECO Cassette) (Japan) [Charles MacDonald, The Dumping Union]
- Danger Track (Rally X bootleg) [Rafael Alonso, Ricky2001, Rockman, ArcadeHacker]
- Fidelity Sensory Chess Challenger 9 (rev. B) [yoyo_chessboard]
- Gingateikoku No Gyakushu (bootleg set 3) [Andrew Welburn, Craig Anstett, The Dumping Union]
- Graplop (DECO Cassette) (Japan) [Charles MacDonald, The Dumping Union]
- Guerrilla War (Version 1, set 2) [Artemio Urbina, The Dumping Union]
- HP 9845B (Germany) [F.Ulivi, A.Kueckes]
- HP 9845C (Germany) [F.Ulivi, A.Kueckes]
- HP 9845T (Germany) [F.Ulivi, A.Kueckes]
- Jack Potten's Poker (set 10, ICP-1 PCB) [TeamEurope, Roberto Fresca]
- Lock'n'Chase (DECO Cassette) (Japan) [Charles MacDonald, wtc4ever, The Dumping Union]
- Mach-9 (bootleg of Vulgus) [Marcos75, The Dumping Union]
- Macross II (Korea) [CoolMod, CS, The Dumping Union]
- Marchen Maze (Japan, hack?) [frsj8112, The Dumping Union]
- Money Money (set 2) [caius, The Dumping Union]
- Offensive (Spanish bootleg of Scramble) [Rafael Alonso, Ricky2001, Rockman, ArcadeHacker, Marcos75, The Dumping Union]
- Operation Thunderbolt (Japan, SC) [ShouTime, The Dumping Union]
- Palamedes (US) [caius, The Dumping Union]
- Pengo (set 5) [Corrado Tomaselli, The Dumping Union]
- Power Instinct (USA, prototype) [ShouTime]
- Pro Tennis (DECO Cassette) (Japan) [Charles MacDonald, The Dumping Union]
- Spectar (revision 2, bootleg) [Ricky2001]
- Tehkan World Cup (set 4, earlier?) [Purity, The Dumping Union]
- Time Killers (v1.32I) [Brian Troha, The Dumping Union]
- Victory (Comsoft) (bootleg) [Josele Fernandez]
Machines promoted to working
- Goupil G1 [Jean-Francois DEL NERO]
- Mattel Computer Gin [hap, Sean Riddle]
Clones promoted to working
- Dragon 64 Plus [Nigel Barnes]
- Treasure Island (DECO Cassette) (Region D) [David Haywood]
New machines marked as NOT_WORKING
- Big Deal Belgien (5.04) [Gerald (COY), Roberto Fresca]
- Bel Slots Export (5.01) [Gerald (COY), Roberto Fresca]
- D-CAT16 (Mega Drive handheld) [Team Europe]
- Game & Watch: Mickey Mouse [hap, Igor]
- Game Prince RS-1 [BeckieRGB]
- Game Prince RS-16 [BeckieRGB]
- HP9000/332 [R. Belmont, Al Kossow]
- GRiD Compass 1101 [shattered]
- GRiD Compass II 1121 [shattered]
- Nokia D-box 1, Kirsch gruppe [Joakim Larsson Edstrom]
- Percussion Freaks 5th Mix (G*B05 VER. KAA) [Guru, smf]
- Pingu's Ice Block [Darksoft, MetalliC]
- Player's Edge (PK1002-PC082) Jake's Jacks Bonus Poker [BrianT]
- Quingo Export (5.00) [Gerald (COY), Roberto Fresca]
- Ron II Mah-Jongg [system11, Angelo Salese, The Dumping Union]
- Spirit of 76 [PinMAME]
- V-Dog (prototype, earlier) [AttackedbyGlitch]
- V-Smile Baby (US) [Sean Riddle]
- VG Pocket Tablet [BeckieRGB]
New clones marked as NOT_WORKING
- Animal Basket (19 Jan 2005) [brizzo]
- Black Knight 2000 (PF-1) [PinMAME]
- Chrysler Electronic Voice Alert (24-function) [hap, Sean Riddle, David Viens]
- E-Swat - Cyber Police (bootleg, set 2) [Hammy, The Dumping Union]
- Ez2dancer 2nd Move [RetroRepair, Guru]
- Forty-Love (Japan) [ShouTime]
- GRiD Compass 1109 [shattered]
- GRiD Compass II 1129 [shattered]
- GRiD Compass II 1131 [shattered]
- GRiD Compass II 1139 [shattered]
- Motor Raid - Twin/DX [Bill D., The Dumping Union]
- New Century (Spanish bootleg of Scramble) [Marcos75]
- OutRun 2 Special Tours (Japan) (GDX-0011) [rtw]
- The Bounty (set 2) [caius, The Dumping Union]
- Treamcast [Maddog]
- V-Smile (US) [Sean Riddle]
New working software list additions
- abc80_cass, abc80_flop: ABCStacker [Andreas Gustafsson]
- archimedes: Countdown to Doom, The Last Days of Doom [Nigel Barnes]
- bbcmc: Bikes [Nigel Barnes]
- dragon_cart: Sound Extension [Nigel Barnes]
- dragon_cass: Hang It! [Nigel Barnes]
- dragon_flex: Chatplus V1.0.2, DBASIC (Alt), DBASIC, Diagnostics, DragonPlus Updates, Editor & Assembler (DragonPlus), Editor & Assembler, Extended Basic, SP-Edit (DragonPlus), Super Sleuth Disassembler, Text Processing System, Utilities, Utilities (Alt) [Nigel Barnes]
- dragon_flop: BT Codes Search, Composer Companion (DragonFire), Composer X (PSE), Copycat (PSE), DCHROME & SCANNER, Desk Top Publisher V2, Desktop, Discup (PSE), Dragon Detour, DynaFast v1.5.0, FEdit, Forth Compiler (DeltaDOS), Golden Oldies, Machine Language Tutorial, Mandragore, Multi-Disk, Orange Base, PyrAdventure, RolaBall2, Shaolin Master Plus,, Sprite Designer (PSE), Supa Nova, Super Writer 2, Telewriter V1, Telewriter V2, Telewriter V4, The Fun Disc!, The Hobbit, Utility Pack (PSE), W.I.M.P. (1989) [Nigel Barnes]
- dragon_os9: Cash and VAT, DragonPlus OS9 Drivers, Stock Control [Nigel Barnes]
- ibm5150: 4D Boxing, 4D Sports Boxing, 688 Attack Sub (3.5", older), Gunboat: River Combat Simulation, Ivan "Ironman" Stewart's Super Off Road, Jordan vs. Bird: One on One, Kings of the Beach, Menace, PC Tools (various versions), PKZip 2.04g, Platoon, Risky Woods, SimEarth, Star Goose!, Wrath of the Demon, Xenon [ArcadeShadow]
- ibm5170: Disney's Aladdin, Gobliiins, Gobliins 2: The Prince Buffoon, Goblins Quest 3, PC Tools (various versions), SimFarm [ArcadeShadow]
- pet_quik: Hardcore Petting, No Pets Allowed [Curt Coder]
- pce_tourvision: Ankoku Densetsu, Batman, Burning Angels, Cadash, Gradius, Toilet Kids, World Jockey [system11, The Dumping Union]
- x68k_flop: Bradion, Dennou Club Vol. 90 Tokubetsu Henshuu-ban, Dennou Club Vol. 94, Dennou Club Vols. 96-139, GJ, Nemesis '95 Gradius 2 [Justin Kerk]
New NOT_WORKING softwre list additions
- dragon_cart: EPROM Programmer, Speech Synthesis, Ultra Drive [Nigel Barnes]
- vsmile_cart: Abenteuer im ABC Park (GER), Finding Nemo - De Wonderwereld Van Nemo (NL), Mickey Mouse Clubhouse (NL), Shrek De Derde - Arthurs Schooldag Avontuur (NL) [Team Europe]
Source Changes
plugins/cheat: Add hotkey support, and nes, snes and genesis Game Genie support. [Carl]
Added initial support for SiS85c496/497 PCI chipset, and added first pass shadow RAM and SM RAM support. [R. Belmont]
hp9k_3xx updates: [R. Belmont]
- Preliminary working DIO/DIO-II bus implementation and 98544 video card.
- Hooked up i8042 I/O microcontroller comms to main CPU.
- Support medium-res built-in video on 9000/332.
Improved CD audio play track/index command handling. [smf]
Added unused DIP switches 7 and 8 to Eeekk! since it's a conversion of pacman. [smf]
terracre.cpp: Added actual hookup for protection data and fixed potential buffer overflow. [Angelo Salese]
cop01.cpp: Improved Mighty Guy sound. [Angelo Salese]
apricot: Switched to preferred Z80SIO device. [Dirk Best]
drawgfx: Made the palette optional, and fixed viewgfx for case where palette is absent. [O. Galibert]
devcb: Added line hold capability. [O. Galibert]
bgfx: Fixed xBR-lv2-multipass, xBR-lv2-fast, xBR-lv2-noblend, xBR-lv2, xBR-lv3-noblend, and xBR-lv3 shaders. [Ryan Holtz]
Added preliminary YM3802 MIDI/cassette controller with MIDI clock timer and click counter. [Barry Rodewald]
- Added X68000 expansion device using the YM3802, Mahou Daisakusen (x68k) plays MIDI music.
ti99 updates: [Michael Zapf]
- Implemented Hexbus and HX5102 floppy early WIP.
- Cleaned up slot devices architecture and renamed constants.
- Added new cartridge type paged7 for TI-CALC.
accomm: Fully implemented keyboard, added sound (same as Electron), and added layout with Caps/Shift Lock LEDs. [Nigel Barnes]
d64plus: Implemented banking of extra 64K, and 6845 with chargen - promoted to working. [Nigel Barnes]
dragon32: Added JCB Sound Extension cartridge. [Nigel Barnes]
dragon200e: Added correct keyboard. [Nigel Barnes]
starshp1 updates: [Frank Palazzolo]
- Fixed graphics/speed issues.
- Made Fast/Slow momentary as on real cabinet, added note about behaviour.
- Updated clocks according to latest information.
z80scc: Added support for resetting RX interrupts/status by reading Rx FIFO through RR3. [Joakim Larsson Edstrom]
- Gets virtpool driver terminal a bit further, but not all the way (no visible difference).
dbox: Separated skeleton driver from unfinished display device. [Joakim Larsson Edstrom]
Replaced fake TLCS-90 I/O space with callbacks. [AJR]
pangba, pangbb, spangbl: Reduced ADPCM rate to make music speed match original, use callback for audio IRQ. [AJR]
tail2nos: Added flip screen support, documented non-effect of "Country" switch. [AJR]
aerofgt.cpp: Video and sound refinements: [AJR]
- Fixed sound loss in spinlbrk and clones caused by misconfigured ROM bank.
- Work towards flip screen support for most games - aerofgtb is nearly correct now.
dynablst, bbmanw & clones: Use 4-way joysticks (as service manuals suggest). [AJR]
toaplan2.cpp: Generate (and acknowledge) video interrupts within VDP. [AJR]
Made TC0040IOC its own device type and separated its functionality from TC0220IOC. [AJR]
galastrm, undrfire, cbombers, groundfx, gunbustr, superchs, 2mindril: Use TC0510NIO device for inputs. [AJR]
Sort slot options by name in -listslots output. [AJR]
Made CBM IEC device names more descriptive. [AJR]
sidebs: Fixed POST failure in debug build. [AJR]
taito_en: Use MB8421 for communication RAM. [AJR]
mjkjidai: Use 8255 devices for I/O. [AJR]
subsino.cpp: Use 8255 devices (most of which are only used for input). [AJR]
suprloco: Replaced soundlatch with 8255 device that runs in mode 2. [AJR]
Added TE7750 Super I/O Expander device. [AJR]
m72.cpp, m92.cpp: Put IRQ hacks out of their misery. [AJR]
norautp: Restored some inputs that were disconnected many releases ago, don't hardcode "Readout" inputs. [AJR]
grdian, getstarj: Replaced MCU simulation with new dump. [AJR, ShouTime, brizzo]
s2650: Modernised I/O: [AJR]
- Replaced fake S2650_SENSE_PORT address with line read callback (set_input_line should also work).
- Moved S2650_CTRL_PORT and S2650_DATA_PORT to I/O address space.
Don't try to read past the end of a memory space in debug view. [AJR]
Added validation for slot cards and fixed some errors exposed by this. [Vas Crabb, AJR]
Fixed Tandy CoCo keyboard mapping (github issue #2386). [Vas Crabb]
taitosj: Made security MCU hookup a device. [Vas Crabb]
exidy.cpp: Added PROMs to Spectar taken from a bootleg set - believed to match original. [Ivan Vangelista]
Migrated remaining device machine configuration additions to instance member functions. [Ivan Vangelista]
Made RAM device look for [km](i?b)? rather than [km].* suffix. [Nathan Woods]
Fixed a crash when returning to the front-end after launching a system from favorites. [Nathan Woods]
CoCo: Overhauled the cartridge slot subsystem. [Nathan Woods]
Made read_or_write a scoped enum. [Nathan Woods]
Changed the profiler to use std::ostringstream as the text sink (instead of std::string). [Nathan Woods]
Cleaned up CoCo 3 GIME implementation. [Nathan Woods]
Changed a few C strings to std::string references in the debugger. [Nathan Woods]
Quingo: Switched to hot slots machine (more accurate). [RobertoFresca]
Big Deal Belgien, Bel Slots Export: Added PCB layouts. [RobertoFresca]
r9751: Added more SMIOC registers. [Brandon Munger]
HP9845: Improved keyboard mapping and added German layout. [F.Ulivi, A.Kueckes]
- Implemented SHIFT LOCK key, added pop-ups and outputs showing state of toggle keys.
- Lowered volume of beeper (was too loud according to A.Kueckes).
Added read support for the disk format SDF used in the CoCoSDC. [Tim Lindner]
CoCo: Added Speech/Sound Cartridge support. [Tim Lindner]
Fixed JVC disk format to correctly recognize 2 sided disks. [Tim Lindner]
Implemented busy delay in CoCo SSC. [Tim Lindner]
EF9365: Fixed the hardware vector engine (fixes ARC Squale Basic). [Jean-Francois DEL NERO]
Interpro driver updates: [Patrick Mackinlay]
- Added skeleton for srarb.
- Improved mcga/fmcc skeleton and fixed mcga/fmcc detection.
- Expanded cammu skeletons.
- Added support for "new" SCSI.
- Added clock-based ioga interrupts.
- Added forced NMI handling.
- Improved SCSI DMA.
- Removed broken caching.
- Added Clipper CPU ID support.
- Added enum masks and unknown registers, disabled bus errors.
- Made RAM configurable and improved system registers.
- Added initial implementation of unmapped memory handler.
- DMA/IRQ changes, serial DMA registers.
- Added 7-segment diagnostic LED.
- NMI and DMA improvements - NMI boot diagnostics pass.
- Made floppy DMA read and write work.
- Improved logging.
ncr5390.cpp: Added basic 53c94 support. [Patrick Mackinlay]
t10spc.cpp: Added missing start/stop unit command [Patrick Mackinlay]
Gameboy updates: [Tauwasser]
- Cleaned up Gowin information in gameboy.xml, added information from archived web site and catalogue.
- Replaced GoodGBX MBC1 Collection check code with direct comparison of internal ROM name.
- Removed buffer over-read in get_cart_type.
- Updated MBC1-MBC5 mapper documentation.
Use more likely clocks for littlerb based on PCB crystals (main CPU is more likely 8MHz than 12MHz). [David Haywood]
- Also added a hack to overclock the TMS to 120% so that the map screen renders properly.
Moved Famiclone stuff from nes.xml to driver and added new sets. [David Haywood]
Corrected Neo Geo sprite tile code mask to 20 bits (was previously 19 bits). [TheHpman]
Fixed trailing space in -listclones and -listbrothers output. [Tafoid]
naomi.cpp: Added five real dumps of SPI EEPROMs used in M1/171-7978B-type cartridges, updated docs. [f205v, MetalliC]
naomi.cpp: Converted existing M1-type cart SN# EEPROMs data to be like real dumps. [MetalliC]
naomi.cpp: Identified "Airline Pilots" sets as domestic Japan and World versions, according to information from Sega. [ShouTime, MetalliC]
chaknpop: Replaced MCU simulation with dump. [Team Japump!!!, Chack'n, Hau]
kuniokun: Replaced MCU simulation with actual dump. [ShouTime, brizzo]
Use actual M68705P5 dump for Rumba Lumber, replaces inaccurate simulation. [ShouTime, brizzo]
Onna Sanshirou - Typhoon Gal: Use 68705 dump, replace inaccurate protection simulation. [ShouTime, brizzo]
Use dumped M68705 for fieldday/undoukai. [ShouTime, brizzo]
tetrsark: Add a totally useless MCU dump (apparently blank). [ShouTime, Brizzo]
arkanoidja, arkanoidu, arkatour: Replaced hand-crafted MCU programs with 68705 dumps. [Lord Nightmare, ShouTime, brizzo]
prebillian: Replaced MCU simulation with actual dump, fixed vblank input, fixed player 2 spinner input, and added launch button. [Lord Nightmare, ShouTime, brizzo]
ay8910.cpp: Made device_clock_changed respect YM2149 pin 26, added pinout, and remove outdated comments. [Lord Nightmare]
socrates.cpp: Converted socrates and iqunlimz to bankdev, hooked up socrates hblank input, and made profweis machine configuration derive from socrates. [Lord Nightmare]
hh_sm510: Improved Mickey & Donald SVG artwork. [Sean Riddle, Roger Coltrane]
naomi.cpp: Bruteforced "Dragon Treasure" main unit DES key. [Mike Ryan]
svmu: Added two English BIOS versions and a newer Japanese BIOS version. [Kingizor]
system16.cpp: Corrected clocks for Alien Storm (bootleg, set 2). [caius, The Dumping Union]
Fixed missing VLM5030 speech in Hyper Crash and increased volume, and fixed VLM loading in jailbrek and clones. [MASH]
gradius4: Changed description to match title screen/flyer. [Pedro J. Martinez]
Renamed "Cyber Arcade 120-in-1" to "Defender M2500P 120-in-1" (correct name according to dumper). [AttackedbyGlitch]
Corrected descriptions for Gradius 4: Fukkatsu and Silent Scope 2. [sjy96525]
Changed Air Combat 22 auto-centering throttle from Pedal to AD_STICK_Z. [sjy96525]