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.
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.
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.
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 |
Star Trek | Star Trek |
Star 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.
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 |
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!
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.
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 |
Space Harrier 2 |
Streets of Rage |
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.
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...
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.
98/4/19
More instructions fixed. Some VDP and MMU procedures fixed.
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.
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.