Development Log

2000/9/12
Rewrote graphics renderer: 44% speed-up and rasterfx supported. Added IPS in-memory patch loading.

2000/8/6
Corrected memory-to-VRAM DMA that has prohibited area RAM mirror as the source. Added detection for out-of-range sprite pointers, and circular sprite lists. Fixed a bug in SH2 interrupts that affected the release build. Fixed a bug that caused AGES to lock up on certain versions of Windows. Cleaned up a bunch of source code. Finished SH2 DMA emulation (added CH1). Fixed some bugs in 32X PWM interrupt generation. Corrected IO CTRL3 initial value. Quick hack to frameswapper to fix blinking errors. Fixed gui bug: selecting region AUTODETECT after a ROM is loaded now works properly. Changed autodetector so that it falls back on your first choice region if it cannot detect which region to use. Fixed a bug in 32X VDP autofill handler.

2000/7/31
Implemented SH2 INT emulation; though still haven't added interrupts to the various peripherals. Added framework for Sega Mouse, Sega Menacer, and Sega Teamplayer support. Implemented some DirectSound framework and tested it a little. Made some speed-ups to gfx renderer. Genesis emulation is now 44% faster, 32X emulation is now 16.5% faster. Worked on pausing mechanism, and added GUI events to it. Fixed a bug in Z80 bank reg. Added 32X BIOS loading. Fixed M68 interrupt handling. Fixed VDP address masking bug. Added MOVEP instructions to M68 EMU. Fixed 2 bugs in the internal graphics mode caching. Added STOP instruction to M68 EMU. More accurate IO emulation. Changed S32 bank regs to be GEN bank regs and added module messages for them. Cleaned up internal file IO code. Fixed many bugs in the caching system--hopefully there are no more.

2000/6/30
Fixed configuration defaulting for options not present in the INI. Fixed a bug in control port access. Added configuration for autodetect search order. Implemented region autodetection. Fixed frame swap render bug. Fixed SH2 disassembly for relative GBR indirect TST, AND, OR, XOR instructions. Fixed 32X dual frame buffer bugs. Rewrote 32X RLE gfx mode renderer and added double resolution and scanline support to it. Rewrote some 1.5 year old Genesis VDP code and fixed many bugs in it. Rewrote 2 year old Genesis IO code fixing many bugs, adding messages to EMV, and making it expandable. Added 6 button controller support.

2000/6/26
Added loading of saved battery RAM file to ROM loading procedures. Touched up DirectX code. Minimum requirement lowered to DirectX 3. Added configuration option for GSV path. Added controller configuration. Added saving of controller configuration to INI. Added Joystick support. Fixed input configuration. Fixed fullscreen toggler.

2000/6/04
Added double resolution graphics modes. Added half-intensity and blank scanline support. Added fullscreen mode. Added screensize and scanline options to menu. Added screensize and scanline options to INI. Added country autodetect option to menu and INI (autodetect is not yet implemented). Implemented loading of country setting from INI. Fixed INI saving of Z80 disabled option. Added filter index saving to INI. Added .GEN extension to Genesis ROMs filter. Fixed a bug in M68 PCFIXUP for 32X bank.

2000/5/23
Fixed some Z80 instructions. Implemented dynamic recompiling for SH2s. Debugged and somewhat optimized it. Fixed SH2 MAC.W and MAC.L instructions. Fixed layering bug for 32X graphics mode 1.

2000/5/1
Fixed Genesis sprite rendering in 32X mode. Fixed error in SH2TAS instruction. Reconditioned most SH2 instructions to work with DRC. Wrote Gen Z80 MMU. Worked on adding Z80 emulation to Genesis. Added Gen Z80 messages and Gen Z80 MMU message to EMV.

2000/4/13
Added Genesis window layer emulation and debugged it and debugged it and debugged it... Sped up emulator by 4.4% (not much but hey). Fixed a bug in M68CMPA.W instruction handler. Fixed input bugs. All games should respond to the keyboard now. Fixed bug in PWM scheduler. Fixed MMU access to DREQ registers. Corrected bug in autofill routine. Added frameswap bit support. Corrected DREQLEN emulation. Added ommitted functionality of SH2 DIV peripheral. Fixed M68DIVS bug. Added a caching scheme which has sped up emulator by 18.7%. Fixed PWM so it withholds interrupts when sound channels are off. Added V flag to ASL instructions. Optimized M68 interrupt checking.

2000/3/24
Added control pad emulation back into AGES. Fixed Genesis interrupts. Fixed Horizontal scrolling bug. Added battery RAM emulation, loading, and saving. Added battery RAM memory segment to memory viewers. Fixed bug in byte writes to 32X framebuffer. Fixed a bug in SH2 DIV peripheral overflow predetection. Added BIOS loading, BIOS is no longer embedded in AGES executable. Fixed a bug in configuration loading. Added proper screensize emulation. Fixed Genesis boot area remapping in PC FIXUP routines. Fixed some Z80 and SMS driver bugs. Here are some random screenshots.

Afterburner NFL Quarterback Club Blackthorne Space Harrier

2000/3/10
Fix GENMMU access to PWM. Fixed bug in SH2 DMA address decoding. Rewrote Genesis graphics rendering code with MMX for 600% frameskip=0 speed increase. Began work on full screen mode. Reimplemented and fixed Genesis sprite rendering. Fixed a size access bug in handlers for M68 ADDQ/SUBQ with Dn destination. Fixed a bug in fill DMA. Fixed predecrement addressing mode for M68 read/write/modify instructions. Fixed M68 NOT.L instruction. Fixed 16-bit relative PC calculation for M68 DBcc instruction.

2000/3/2 -- AGES v0.17a (Mars)
Fixed 32X VDP Status Palette Enable bit. Added MMU support for mirrored DIV perihperal DVDN registers. Split 32X INTMASK register into two registers, one for each SH2. Fixed a bug in M68 DIVU and DIVS instruction. Implemented PWM queueing. Implemented PWM full and empty bits. Corrected DREQFIFO read routines. Fixed DREQFIFO and PWM queue overruns. Worked on basic SMS driver. Fixed many Z80 bugs. Added SMS Z80, MMU, and IO messages to EMV. Added GENMMU vdp data port and vdp control port messages to EMV. Fixed GENVDP register 10 and H-Int masking. Fixed some M68 bugs. Added Genesis scrolling. Fixed some SH2 bugs. Added overflow and divide-by-0 pre-detection to SH2 DIV peripheral. Added SH2 SRL, SH2 DIV, and SH2 INT register viewers. Fixed S32 SYS and S32 PWM register viewers. Added SH2 INT MMU messages to EMV. Added SH2 DIV messages to EMV. Added SH2 FRT messages to EMV. Fixed PWM FIFO byte access. Fixed PWM CTL byte access. Fixed DREQSOURCE and DREQDEST word access.

2000/2/8 -- AGES v0.16a (Mars)
Fixed a bug in M68 DIVS and DIVU instructions. Add SH2 DIV access routines to MMUs. Added SH2 DIV module access messages to MMUs and EMV. Implemented 32X INTMASK register. Fix peripheral address decode tables. Implemented SH2 DIV peripheral.

Afterburner Space Harrier

2000/2/06
Implemented 32X scrolling. Fixed PC increment bug in ANDICCR, ORICCR, and EORICCR. Added PWM interrupts, but left them disabled. Implemented HV counter. Fixed word access of 32X SYS registers and 32X VDP registers in MMUs. Fixed the stupid icon bug. Fixed a bug in M68 PC relative addressing mode. Changed window title to display ROM filename. Implemented 32X RLE graphics mode.

KolibriBlackthorne
Brutal: Above the ClawDoom
Spiderman: Web of FireVirtua Racing Deluxe
World Series Baseball

2000/2/03
Fixed the access/adapter register bug. Fixed dreqctl size access bugs. Corrected framebuffer byte writes. Added framebuffer overwrite emulation. Added framebuffer overwrite access messages to MMU's. Added autofill function to S32VDP and added autofill message to EMV. Implemented DMA peripheral. Corrected a minor decoding bug for SH2 instrcution CMP/PL. Some games are now working! See these screenshots:

Kolibri Spiderman
KolibriSpiderman
Star Trek Star Trek
Star TrekStar Trek
Star Trek Star Trek
Star TrekStar Trek
Star Trek
Star Trek

2000/1/23
Fixed all invalid sized access to 32X registers by MMUs. Added SCI emulation to SH2 MMUs. Rewrote SH2 interrupt handling and added SCI interrupts. Added dreq FIFO emulation. Added bank control and bank area access emulation. Fixed CMD interrupt bits.

2000/1/20
I have rewritten the FRT access routines in the 32X SH2 MMUs. I have also corrected the Genesis boot area remapping by the 32X. Most importantly, though, I have converted the 32X diagnostic demo srec files into binary files and merged them into a single 32X ROM. This ROM tests nearly every feature of the Genesis and the 32X. I will be working closely with this ROM in order to make the 32X emulation more accurate.

Diagnostic 32X Demo
Diagnostic 32X Demo

2000/1/17
I fixed a bug involving post and predecrement access of A7 in the M68 emu. The only game that works better because of this is Shinobi 3. I also wrote the timeslice code for the 32X free running timers. The timers do not work yet because of an internal compatiblity problem. I will need to rewrite the FRT access routines in the 32X SH2 MMUs.

2000/1/2 -- AGES v0.14a (Mars)
Much work on the internal framework for YM2612 emulation has been done. FM timers and FM read registers are fully emulated. A few M68000 CPU core bugs have been corrected including a nasty bug in read/modify/write instructions using pre-decrement/post-increment addressing modes. Genesis compatiblity has steeply risen. Oddly enough, there are some very new games which work and yet there are still some old games which do not. I also fixed the User/Supervisor mode bugs.

99/12/22
I have finally taken the plunge. The AGES schedulers are now based on cycle counts rather than intruction counts.

99/12/16 -- AGES v0.13a (Mars)
The user interface is now much improved. AGES can be paused without locking. AGES can now handle loading a new ROM and still work. AGES can now reset the current ROM and still work. AGES can direct itself into the Genesis/32X scheduler or the SMS/GG scheduler. AGES now saves its configuration into an .INI file. More cycle timing has been added to M68 CPU core.

99/7/26 -- AGES v0.12a (Mars)
Z80 emulation has been added. Preliminary support for SMS hardware emulation has been added. CPU controls dialog box has received a facelift. All CPU cores have begun to receive cycle timing information.

99/5/20 -- AGES v0.11a (Mars)
Added 32x comm area viewer and PWM, FRT, and DMA register viewers. Split 32X MMU into two MMUs, one for each SH2. Added SH2 internal cache to MMUs and PC segment fixup routine. Heavily cleaned up source code. Worked on configuration system. Fixed many, many bugs.

99/4/13
Fixed a bug in SH2 IRQs. Added DMA registers read/write and FRT registers read/write operations to S32MMU. Added Vblanking and Hblanking bits to the 32X VDPSTS register. Also fixed a bug in packed pixel mode frame renderer in the graphics engine. Doom 32X is becoming more interesting, check these screenshots out.

Celtic 32X Demo Doom 32X
Celtic 32X DemoDoom 32X

99/4/11
Have been working on adding IRQs to SH2s. I am working closely with Doom 32X and so far it sets the graphics mode, does a frame buffer clear, and then waits for a V interrupt.

99/4/09 -- AGES v0.10a (Mars)
Celtic 32X Demo is displaying graphics today! I made a quick hack to the graphics engine so the results could be visually manifested. I am officially on my way!

Celtic 32X Demo
Celtic 32X Demo

99/4/08
Wrote the remaining 2 multiply instructions. Re-worked many data-tables and hashing routines in S32MMU, improving expandabilty. Added S32PALETTE access to S32MMU. Added 32X registers routines to S32MMU. Cloned SH2EMU for master and slave modules. Fixed a major oversight in M68 and SH2 PC segment fixup routines. Added S32MMU and Master and Slave SH2 module messaging. Fixed numerous bugs in SH2 CPU core and S32MMU core. Added 32X VDP registers routines to S32MMU. Added 32X SYS and 32X VDP registers viewers to the debugging tools.

99/4/01
Added S32VDP registers access to GENMMU. 36 Holes displays a garbled country error message.

36 Holes
36 Holes

99/3/31 -- AGES v0.08a
SH2PC segment bug fixed today. Invalid SH2PC checking added to the "safe" version of AGES. 5 out of 7 multiply instructions added.

99/3/30
Well, I finally fixed the M68PC segment bug after a year or so of it being a problem in certain ROMs. I have also added invalid M68PC checking to the "safe" version of AGES. I am in the process of integrating the currently written 32X-related code into the main AGES source.

99/3/28
32X ROM loading enabled. Also, I have added the 32X mini-program copy to the 32X ROM loading routine. My guess is that this is supposed done by the 32X BIOS but since I don't have it I don't really know.

99/3/22 -- AGES v0.07a
Okay, so I had unrealistic conception of how fast a M68000 could run. Based on my new average-cycles-per-instruction constant and the many many many major speed-ups to M68 CPU core as well as other various other module cores I now conclude that the M68 CPU core is averaging around 18 MHz. The IRQ frequencies have been restored to their rightful values. Two misconceptions of mine reflected in the GenVDP DMA handling routines have been corrected. A bug in VRAM reading routines has been corrected. AGES now defaults to the real Genesis palette instead of the pre-cooked palette. (Alt-C toggles.) ROM loading routines have been improved and debugged. Furthermore, the emulation thread is spawned in paused mode at AGES start up instead of at the load time of the first ROM loaded. The SH2 CPU core has recieved a complete over-haul and is 10 instruction handlers away from completeness. Preliminary work on the 32X MMU and the 32X additions the Genesis MMU have begun. The SH2 CPU core and 32X MMU have not been incorporated yet and 32X ROM loading is still disabled.

99/1/12 -- AGES v0.06a
AGES will soon be split into three builds, the first is the unsafe, speed-optimized, suited-for-playing version, the second is the super-defensive slightly-slower, game-playing-oriented version, the third is like the second but with a built-in debugger and is oriented towards improvement of the emulator and providing a development environment for Genesis game programming. MMU decoder has been recoded to use larger data tables and less hashing for increased speed, increased stablity, greater ease of expansion, and neater code. The IRQ generator has been rewritten to use flat data tables instead of complex arithmetic/logical manipulation for increased cpu speed, increased accuracy, greater ease of expansion, and neater code. Temporarily, IRQs have been made to occur 4 times as often as they should to bring the user-perceived speed of the emulator back up to normal. It amuses me that right now my M68 CPU core runs at about 0.53 MHz, and yet a simple IRQ frequency hike is all it takes to make games run full-speed. :) SH2 disassembler is nearly complete.

98/12/07 -- AGES v0.05b
All bugs that were causing setbacks have been fixed. Graphics Engine now runs in its own thread and updates 60 times a second. Many games are behaving more like they should. Observe:

Phantasy Star 2
Phantasy Star 2
Space Harrier 2
Space Harrier 2
Streets of Rage
Streets of Rage
Ghouls and Ghosts
Ghouls and Ghosts

98/11/13 -- AGES v0.05a
Much has happened. The developer's version of AGES has migrated to the Win32/DirectX platform. The continuation of the DOS version is unknown. I can say that no work will be done on it until there is significant improvement in the core version. Preliminary support for Genecyst save state loading has been added. The graphics engine is being updated with drivers for each display mode. Currently the only working display mode is 320x240 windowed though it is still a bit buggy. This screenshot is taken from a loaded Genecyst save state.

Still buggy
Still buggy

98/5/17
It turns out the CRAM was being written to with non-zero values in Ghouls and Ghosts by chance. I fixed a CPU core bug and it stopped working. However, try some of these games with the new version of AGES. Outrun (animates Sega logo), Phantasy Star 3 (animates Sega logo), Sega CD Japanese BIOS (gives error message), Shinobi 3 (gives country error message)

98/5/11
Most instructions now fixed. VDP IO emulation heavily improved. M68000 core sped up. Graphics engine sped up. Here is a new screenshot. Don't expect a new version until this weekend. I have APs to take all throughout this week with the Computer Science AP today...

Stay tuned...
Stay tuned...

98/4/29 -- AGES v0.02a
A new version has been posted. Version 0.01x has been skipped due to 2 significant improvements occuring simultaneously.

98/4/26
More instructions fixed. DMA has been massively debugged and more fully implemented. Graphics engine has been somewhat modified in preparation for the addition of scrolling code. Also, there is more error checking for illegal memory writes and reads. This should never have been a problem in the first place but apparently some Genesis programmers had bad form. Here is a screenshot of the results though.

Alex Kidd Enchanted Castle
Alex Kidd Enchanted Castle

98/4/19
More instructions fixed. Some VDP and MMU procedures fixed.

Hmmmm...
Hmmmm...

98/4/18
Few more instructions fixed. Sega CD image recognition added.

98/4/17
Crash on exit bug fixed. Debugger greatly enhanced. "MOVEM" instructions in debugger now display their register list. Many instructions Pentium optimized and debugged. Hblanking added. Joy pad 1 now debugged (3-button only.)

98/3/17
New breakthrough! For two and a half months after the last update (97/12/13) there was no progress on AGES due to a snag with the Assembler. Now that I have migrated to a better one, I have had made much progress. Playfields and sprites fully implemented with priority, DMA mostly implemented, horizontal and vertical interrupts implemented, CRAM fully implemented, joypad 1 implemented with a few trivial bugs. SRAM (scrolling), and sound/z80/etc have NOT been implemented yet. In addition to all of this, the core has been sped up A LOT. AGES is still very slow, however. I have not been able to successfully run any non-demo ROMs to the point of graphics. Dr. Robotnik's Mean Bean Machine does display a message of "Premiere" which is part of a demo that was inserted into the ROM by the guy who copied it.

97/12/13
Playfield A and Playfield B are implemented. Tile Priority is somewhat implemented. Tile horizontal and vertical flipping implemented. V blanking bit in VDP Status Register implemented.

97/12/09
After programming today, I noticed that Sonic the Hedgehog makes the screen turn red. A new version has NOT been posted yet.

97/12/08
Added Vblanking Interrupt and interrupt masking. I have also fixed a number of bugs. I have not achieved graphics with any other ROM but I have only tried a few. I suspect that more may work now because VBLINT has been added.

97/12/05
Added VRAM, CRAM, and SRAM dump commands, added CRAM emulation, added tile and playfield A support. Screenshot available below.

Charles Doty's Racing demo
Charles Doty's Racing demo

97/12/01
Many important bug fixes today. More games crash now, but the emulation is more accurate or something. Debugger commands Dump and Go now accept addresses as arguments. Arguments are optional. G (address) goes until the PC reaches (address). If none is specified, it goes forever. D (address) dumps memory starting at (address). If no argument is supplied, D starts where last D ended or 00000000 if no D was used before.

97/11/24
SH2 emulation is coming along. 101 instructions are implemented.

97/11/19
Many instructions debugged, MMU debugged. VDP and VRAM writes seem to work correctly now.

97/11/8
I have been working on the SH2 CPU emulator recently, 33 instructions have been emulated. I have also fixed some bugs in M68k CPU emulation.

97/11/5 -- AGES v0.00d
Ages can now load SMD and MD ROM images. 10 new instructions were added to the ToDo list. The CCR V and CCR C bugs were fixed. 14 instructions were coded. All coded instructions now display their assembler syntax. Interrupts were added to CPU emulation. MMU ROM/RAM access bugs were fixed. Debugger was enhanced. (D now dumps sequential blocks, Set and Clear flag commands added, and debugger now takes string commands instead of one character commands.)

97/10/24
Ages now loads correct PC entry point, and stack pointer. Z and N flags are fixed. A few more opcodes were debugged and perfected.

97/10/20
As the debugger advances, I am fixing more and more bugs. I fixed a decoder bug which I was very shocked to learn existed.

97/10/17
Fixing bugs, working on debugger.

97/10/14 -- AGES v0.00c
Much work done, very little noticeable progress. Debugger is more advanced. Fixed many bugs.

97/9/28
In the past four days, I have written another MMU procedure, added graphics mode switch to initialization, cleaned up my code, started programming graphics routines, and began programming the internal debugger (F12 to enter).

97/9/24
Removed 4 and added 10 procedures to MMU, and programmed 6 of them. I now have 10 out of 20 MMU procedures done. Also worked on M68k/Z80 communication and Z80 timing.

97/9/23
What I thought was one little bug has turned out to be a few bugs, the last of which was the hardest to find. I have made a temporary fix for it. Addressing Mode Resolution procedures all fixed today!

97/9/22
Some CPU bugs (inconsistencies in emulation) fixed today.

97/9/20
I have done some work on the MMU, it has 7 x 2 support procedures. The reason is different areas of memory are treated differently. I have written the MMU decoder. 4 out of 14 MMU procedures written.

97/9/19
Debugging CPU emulator today. Addressing mode resolution is somewhat debugged.

97/9/18 -- AGES v0.00b
Addressing mode resolution is complete! I have made a list of CPU emulation bugs that need to be fixed.

97/9/15
Addressing mode resolution is about half complete.

97/9/13
Eek has cancelled his 32Xulator. I now have the Star Wars ROM, and hopefully the 32X Development Kit soon. I already have sample 32X source code and SNASM (A 32X ROM Assembler), but I suspect that there is more in the devkit than that. Only two support procedures and 16 instructions remain for CPU emulation.

97/9/12
I have the video mode working now. I was worried that I would have to write graphics drivers for a bunch of different cards. It seems to be reasonably fast, though it brings the minimum requirement up to VESA 1.2. Hopefully it won't get any higher. ("I am altering the deal. Pray I don't alter it further!" -- Darth Vader)

97/9/9
16 instructions are left. Support routines are being worked on. Rash temporary measures have been taken in order to find out what need be done to speed up the CPU emulation. With these measures I can achieve 16 million M68000 instructions per second. I know what I have to do but it is a pain and I will thus do it at the last minute before program-wide optimizations and first public release.

97/9/6 -- AGES v0.00a
I have started this document. Much debugging, some more testing and more optimization. M68000 emulator now runs without crashing. 18 instructions have still not been emulated and the MMU is not programmed except for initialization.

97/9/5
M68000 CPU emulator up and running. It is by no means, complete. More and more debugging. Some speed testing and optimization done.

97/9/4
First attempt to run the emulator. Started debugging.

97/8/? - 97/9/4
M68000 opcode emulation being programmed. Goal becomes multiple console emulator. (Genesis, 32X, and maybe Sega CD)

Early 97/8
Conception of idea. Ends meet, goal is 32X emulator.