ChangeLog ========= ------------------------------------------------------------------------------ 10/27/2003 (jzbiciak) ------------------------------------------------------------------------------ -- Wow, it's been a long, long, LONG time. Far too long between ChangeLog entries. In the past few months I have: -- Implemented full STIC -- Implemented nearly full ECS -- Implemented full paged-ROM support -- Implemented full BIN+CFG support -- Made some minor optimizations to the PSG support -- Rewrote the rate control -- Rewrote the options parsing -- Fixed lots of bugs -- In the past 3 years, I have: -- Added Intellivoice support -- Added Intellicart support -- Split off the development kit as SDK-1600, periodically remerging it back in. -- Started work on a second game, LunarMP, which will become part of the jzIntv package. ------------------------------------------------------------------------------ ..... many months pass ..... ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ 02/02/2000 (tlindner) ------------------------------------------------------------------------------ -- Fixed bug in snd_macos.c where I was not keeping track of the samplesProcessed correctly. Thanks to the quick work of Joe, its all better now. -- I have as1600 compiling under the Macintosh. The changes I made to the were very subtle. The biggest change I made was to comment out mktemp. I _should_ write a mktemp function but decided that it would not cause a problem in the temp file always had the same name. ------------------------------------------------------------------------------ 10/09/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Implemented new periph methods that I've been meaning to implement for awhile: "peek" and "poke". PEEK is a side-effect-free read which is useful for reading hardware registers without triggering side-effect (STIC ColorStack/FGBG register needs this). POKE allows writing to ROM. -- Updates to dasm1600b: -- New "skip xxxx xxxx" directive allows specifying holes in ROM image. Disassembly includes "RMB" directive at appropriate point to cause PC to skip. -- "data" directive accepts ranges. -- New "dbdata" directive works like data, although it specifies that the data is in DBD format. Disassembly issues "BIDECLE" directives instead of "DECLE", and warns if bits get truncated. -- Instructions which overlap data/dbdata, or which extend outside defined ROM area are automagically converted to DECLEs. -- Overhauled how breakpoints and the debugger works. It works much more closely to "how I had intended it to". Although the debugger code itself is still very hackish, the manner in which it is invoked is much cleaner. For instance, now F4 actually interrupts the emulation and drops into the debugger (if debugging is enabled). Also, the debugger runs with rate-control enabled. Also of note: Running the debugger now doesn't slow the whole thing down very much (unlike before). ------------------------------------------------------------------------------ 10/08/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Had a bit of a break from jzIntv for a little while as I caught up on other stuff. Modified the main program to accept an Exec image from either an Inty 1 or an Inty 2. The Inty 2 has an extra 256 words from $0400-$04FF that implement the routines that are packed in GROM on the Inty 1, as well as the protection check. Interesting, for sure. ------------------------------------------------------------------------------ 09/25/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Retargeted "Frankenstein Assembler" to the CP-1600. Seems to work so far. ------------------------------------------------------------------------------ 09/19/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Fixed noise generation problem. Output was essentially off by an octave. -- Added a cheesy screen-shot facility. -- Allow sound to play while copying to raw file. ------------------------------------------------------------------------------ 09/17/1999 (jzbiciak) release_010a ------------------------------------------------------------------------------ -- Added a README.w32 document, and split Makefile.mingw32 into two Makefiles: Makefile.w32 and Makefile.w32x. -- Minor documentation tweaks. -- Sleep during startup to give jzIntv's window a chance to come up. This prevents emulation stutter right at the start of emulation, since the OS has a burst of activity right then as its bringing up the emulator's window, etc. -- Cleaned up most/all of the compiler warnings that I had allowed to creep in. Fixed at least one logic bug along the way. (It hadn't bitten me yet, but it would've as soon as I re-implemented breakpoints the way I'm planning to.) ------------------------------------------------------------------------------ 09/16/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Not much to report. Made 'F10' actually reset the emulator. -- Fixed assembler bug for JSR R6, xxxx. -- Ugh, fix an "overflow by 2" error on full-volume audio that was introduced by the "positive-swing-only" change mentioned below. Only effects programs which play audio at full volume on all three channels. -- Tweak the disassembly cache a little. -- Added "speed_resync()" to handle major preemptions. If jzIntv gets more than one second behind in the simulation, it slips time so that it has a chance of recovering. ------------------------------------------------------------------------------ 09/14/1999 (tlindner) ------------------------------------------------------------------------------ -- I have working keyboard code. The only problem is the modifer keys are not showing up as virtual key codes. I thought this might happen. I plan to switch over to Apple InputSproket by next week to fit this. -- Sound is working very well. We no longer need the -a0 switch. -- Added line in the README describing how to get the AsgardESS source. ------------------------------------------------------------------------------ 09/14/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Fix bug in 'pads' that was causing one controller's inputs to be mirrored on both controllers. ------------------------------------------------------------------------------ 09/13/1999 (tlindner) ------------------------------------------------------------------------------ -- Updated the README.mac concerning some of the changes Joe made. -- I started an event_macos.c. It correctly handles events for menus and windows. It doesn't handle events for the keyboard yet. It does do key equivelents of the quit menu item. -- I made a slight change to cfg.c (added a typecast) in order for it to compile. ------------------------------------------------------------------------------ 09/13/1999 (jzbiciak) release_010 ------------------------------------------------------------------------------ -- Fixed the otherwise utterly broken "disassembly cache". It's much, much happier now. Also, improved its handling of SDBD. -- Added a "change register" command ('G # ####') to the debugger. I really need to reorganize my current debugger command set... :-) -- Made AY8910 samples unsigned, positive-swing-only again, to reduce "popping" that happens if an audio buffer underrun happens. ------------------------------------------------------------------------------ 09/12/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Hooked up the event subsystem. Suprisingly, there was only one real bug in "event.c" to speak of. It works pretty well. I just need to work out a sane keyboard mapping... :-) -- A happy consequence of hooking up the event subsystem is that clicking the little [X] in the corner of the window actually asks jzIntv to exit. -- Started merging in Tim Lindner's Mac port. Note that I've placed his ChangeLog entry in chronological order.... :-) -- Split of the platform-specific "shims" into plat/plat_lib.? and plat/plat_XXX.?, where XXX is a specific platform. For instance, I have a generic implementation of gettimeofday which is in 'plat_lib', whereas Tim has a specific one for Mac that's in 'plat_mac'. -- Added a disassemble command to the debugger. Bound to 'u' for 'unassemble' (similar to DOS DEBUG). With it comes a silly little instruction disassembly cache that's meant to speed up the 'S' step mode. -- More tweaks to controller pad handling. -- Modified to allow both 8-bit and 16-bit GROM images to work. I do a test at runtime and decide whether I need to fix the GROM image. It's just a simple hack for usability. -- Changed 'periph_tick' semantics slightly so that a peripheral can ask for a tick to be cut short. This will allow better support for breakpoints. -- Modified gfx to not do screen updates if window is minimized. ------------------------------------------------------------------------------ 09/07/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Got a fair amount of work done on the event subsystem. I'm adopting a model where all events are translated to key-down/key-up events. (eg. I just convert joystick events into key events). Whenever an event occurs, I use a pair of AND/OR masks to set/clear bits. -- Also did a bunch of work on breaking out "platform initialization", and "configuration", although the cfg stuff is still really not well thought out. ------------------------------------------------------------------------------ 09/07/1999 (tlindner) ------------------------------------------------------------------------------ -- Started Macintosh Port. -- Created project file (.mcp) for the table generator. -- Created project file for the Emulator. -- Changed defined 'MACOS' to the more standard 'macintosh'. -- Added stdlib.h and string.h to disam1600.c becuase they were needed on on the Macintosh. -- Wrote a strdup function. It is in Macstardup.c -- Wrote a timeofday function. It is in Mactimeofday.c -- Ported gfx.c to gfx_macos.c. This is a first attempt. This source does not make a nice Macintosh application. -- Stubbed snd.c to snd_macos.c in order for this to compile. Note: your must use the -a0 switch to turn off sound, otherwise we crash and burn. -- I added a command to the debugger 'M [arg]'. It displays memory in a hex dump fashion. The arg is a hexadecimal number pointing to the start of memory your want to dump to the screen. It will then dump 10 lines of 8 words of memory. If you leave out the argument, it will display the next ten lines. ------------------------------------------------------------------------------ 09/06/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Fixed an embarassing typo in the "Intro to CP-1600" document, where I had some arrows pointing the wrong way. Also, added a binary addition example. -- Tim Lindner has signed up to do a MacOS port. He's already got it up and running, and in a very short time! Currently, he's not using SDL, since SDL/Mac isn't there yet. -- Lots of cleanups to the source-code, particularly in config.h. This will make compiling for Windows, MacOS, Linux, Solaris, etc. much easier w/out having all these annoying tweaks to the code all over the place. :-) -- Cleaned out all the C++ style comments. -- Improved the dynamic range on the AY-8910 output. jzIntv is no longer quite so soft. (It was way, way too quiet before.) -- Changed a few instances of 'unsigned' to 'uint_32'. ------------------------------------------------------------------------------ 09/05/1999 (jzbiciak) ------------------------------------------------------------------------------ -- More documentation in the ay8910 module. -- Hacked in some Hand-Controller Interface reading routines. Requires 'root' to run, which I dislike greatly.... A proper joystick-reading interface should eventually materialize, though. ------------------------------------------------------------------------------ 09/04/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Spent a couple days cleaning thigns up here and there (mostly minor). -- Wrote a separate Makefile for cross-compiling to Win32. Also made some source file tweaks. -- Fix SND to accept a variable snd_buf size from SDL. This seems to be needed to support Win32. ?? ------------------------------------------------------------------------------ 08/30/1999 (jzbiciak) release_009b ------------------------------------------------------------------------------ -- Ooops: Missed a few things! -- Sliding-window averaging was disabled in AY8910 emulation. Re-enabled. -- Forgot to document "-w" and "-a" flags in the usage info. -- Fixed a typo in jzintv.c's opening comment block. -- Tweak sound buffering parameters. Wait a block or so before unpausing audio. -- Automatically calculate averaging window size if window size is -1. Does a pretty good job all the way down to 8000Hz! Note: Default buffer size/buffer count is tuned for 44kHz audio though. If you want to run at 8kHz, reduce the SND_BUF size. -- Fixed emulation error exposed by Dreadnaught Factor, where my $0102 caching trick wasn't truncating the value to 8 bits. -- Added "play sound to raw file" option, "-f filename". ------------------------------------------------------------------------------ 08/29/1999 (jzbiciak) release_009 ------------------------------------------------------------------------------ -- Cleaned up source code readying for Release 009. -- No longer build 'stic_dump' as part of 'stic'. -- At least for now, I will not be mirroring De Re Intellivision and the Dev Kit in jzIntv. ------------------------------------------------------------------------------ 08/27/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Fixed some sprite bounding-box calculations in the STIC. ------------------------------------------------------------------------------ 08/26/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Made some slight CPU timing tweaks for SDBD-prefixed instructions. -- Wrote a tiny little state machine to sequence inputs into the controller pads so that I can get to other video games' audio, not just games which play music at the title screen. -- Rewrote the envelope waveform generator, since it was broken for certain envelope settings. The rewritten version should be marginally faster as well. -- Experimented with different channel counter behaviors. The title music for 'Math Fun' now sounds reasonably close to how I remember it. ------------------------------------------------------------------------------ 08/26/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Made some slight refinements to the sound buffering. I now allocate the buffers dynamically. I could easily change the number of audio buffers now, and I could possibly even make it run-time selectable. It's a 'wishlist' item... :-) -- Playing sound without rate control is amusing. :-) -- A nice side-effect of all of the buffering adaptations I've made to the sound emulation is that it coexists reasonably with the debugger, although without rate control, sound will not play very cleanly. ------------------------------------------------------------------------------ 08/25/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Spent yesterday and today sorting out sound issues. It's really quite stable now. -- Asynchronous writes are still handled asynchronously. I don't queue up writes. Instead, if a write happens to the PSD and I can't sim because my buffers are full, I trigger a drop. This alleviates the buffer saturation that caused the short and allows sound to eventually recover (usually after a couple sound frames). Dropping audio frames is tricky because the drop affects all sound producers. I handle this by dropping frames in the mixer, rather than in the sound producers. -- Added in some cheesy hacks for the case when there's only one sound-producer in the system (which is the case right now and for most Intellivision games). ------------------------------------------------------------------------------ 08/23/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Got the envelope problems sorted out, I'm pretty sure. Sound sounds teriffic! I think it almost sounds better than INTVPC.... <:-) (Of course, the sound of success is always sweet, and so I might just think it sounds good because I got it working at all.) -- That said, I have a big TO DO: I need to handle asynchronous writes to the sound device synchronously, by queueing them up and processing them at tick time. Right now, if sound gets behind, it never recovers. (I'm losing "time" in ay8910_write, that's why...) -- I also should have more dynamic buffers, although I could get in trouble if I buffer too far ahead. -- Modified jzIntv's default cartridge configuration to support two different memory maps SIMULTANEOUSLY, through the miracle of incomplete address decoding. Now 'Deep Pockets' and 'DUNVOO' can run on the same config, allowing me to play with INTV releases as easily as Mattel. One of these days I'll write a real CFG parser... ------------------------------------------------------------------------------ 08/22/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Geeze, August was as busy as July was! I'm starting to break back into coding again: -- Modified the behavior of the shifts a little. -- Started writing some file I/O routines for reading various cartridge formats. -- Looking at sound, joystick, and the rest of video. -- Make exiting via Ctrl-C work better. It still isn't great. -- Bit the bullet and wrote an AY-8910 emulation. It's far from perfect, but it's surprisingly good for less that 24-hrs effort. -- I did borrow one or two observations from the MAME code (namely, the PRN for the noise channel, and the equation for combining noise w/ tone in a given channel.) -- All of the code, though, is my own. -- Envelopes seem to be imperfect at the moment. ------------------------------------------------------------------------------ 07/27/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Dang, this has been a busy month. Haven't had much time to work on jzIntv at all. I did, however, build a cartridge ROM dumper, dumped a bunch of ROMs, had a vacation in there somewhere, and I move this coming Friday. *whew* Eventually, I'll check the QBasic program I wrote to do the dumping into CVS. -- Wrote a couple Intellivision programs over vacation, which I'll eventually check in under a "demos" section or something. These demos can run in without an EXEC present with minimal modification, so that the emulator would require no copyrighted ROMs to run them. -- Somewhere in the middle of it all, I chased down and stamped out an underflow bug in the threshold-decay calculation in the speed throttler device (speed_t). This seemed to be causing some serious emulation runaway problems, usually at startup. These were annoying because they only happened occasionally. I think they're all stamped out now, but I can never be sure.... ------------------------------------------------------------------------------ 06/27/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Added a little tweak to jzintv.c to grab the cartridge name out of a standard-header cartridge and place it in the title bar of the emulation window. ------------------------------------------------------------------------------ 06/22/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Made some final tweaks to "Intro to CP-1600" (mainly, I added glossary entries related to stacks), and checked it in as version 1.5. This version is being placed in an updated Dev Kit 3. ------------------------------------------------------------------------------ 06/14/1999 (jzbiciak) ------------------------------------------------------------------------------ -- I've made several more tweaks to the "Intro to CP-1600" document over the past couple days. I've added truth tables to the boolean logic section, I've re-explained 2s complement arithmetic (this time, without using "modulo"), and I've cleaned up some formatting errors. Also, the boolean logic section is now named boolean logic, not boolean arithmetic. :-) ------------------------------------------------------------------------------ 06/08/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Ack. In my "Intro to CP-1600" doc, I totally flubbed up on my description of unsigned compares and branches. I fixed that, and added some more info to the 2's complement section and fixed all sorts of little grammar nigglies. ------------------------------------------------------------------------------ 06/06/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Added sections on jumps and branches to "Intro to CP-1600" document. Also, rewrote the BASIC descriptions of the conditional branches. Only thing missing is the Examples section. -- Apparently, SDBD is not allowed w/ MVO. For now, I've modified the MVO@ instruction to issue a warning whenever this pairing is encountered. It'll act as though the SDBD were not there, though. I've also changed the "Intro.." doc accordingly. -- Added a rudimentary breakpoint command to the debugger. Still more work to do there. ------------------------------------------------------------------------------ 06/05/1999 (jzbiciak) ------------------------------------------------------------------------------ -- The "Introduction..." document is nearly complete. -- Tuned the rate control algorithm a bit, and cleaned things up slightly. ------------------------------------------------------------------------------ 06/04/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Started cleaning up my CP-1600 documentation a bit. Also started writing an "Introduction to CP-1600 Assembly" that attempts to bridge between other programming and assembly languages and CP-1600. -- Added README files in doc, devkit, dasm1600 directories. -- (Re)implemented bus snooping on CP-1600 so that RAM areas may be cached. Will speed up CPU emulation on code which runs out of RAM. (Usually, that's just the initialization code in the EXEC that's unpacked from the GROM at boot time.) -- Added "__attribute__ ((unused))" to some of the rcs_id's that were giving compile warnings. (cosmetic change only) -- Noticed some possible emulation errors in Star Strike. Current list of possible emulation problems includes that and the Football sequence in the demo cart. ------------------------------------------------------------------------------ 06/03/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Tested jzIntv on a 5x86-133 machine. Previously, this machine ran jzIntv at 35%-55% the speed of an Intellivision. The frame dropping code I added a month ago works like a champ on this machine, bringing performance up to 99%. Now to tweak those coefficients in my feedback loop. ------------------------------------------------------------------------------ 05/29/1999 (jzbiciak) release_008 ------------------------------------------------------------------------------ -- Wrote a Hand-Controller Interface test program under the new "utils" directory based on the instructions given by Scott Nudds. Seems to work pretty well, although it's rather slow because nanosleep() whacks me with a reschedule. Will come up with a better plan for the actual emulator. At least something works right now. :-) ------------------------------------------------------------------------------ 05/27/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Started writing an assembler for the CP-1610. Some portions of the symbol table infrastructure are complete, but currently does not compile. -- While writing the assembler, I caught numerous minor typos in my cp1600.txt documentation -- fixed. ------------------------------------------------------------------------------ 05/05/1999 ... 05/25/1999 ------------------------------------------------------------------------------ -- The black hole: I disappeared. Actually, both my brother and fiancee graduated from college, so I was travelling to see them both. And, I got quite ill after being stuck out in the cold Michigan spring rain in Albion at my brother's graduation. And, I moved my fiancee to Texas. And, then I had to catch up on all the work I missed at my day job. ------------------------------------------------------------------------------ 05/04/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Added adaptive rate control, including frame-dropping support. Sliding window support is utterly broken and I'm too tired to debug it. It works great when window == 1 (eg. no window), so I'm considering not supporting sliding-window averages. (I'm not even sure they make sense.) I tested jzintv running alongside rc5des at various nicenesses to measure frame drop rates on my machine: No rc5des Drops practically no frames. rc5des, nice 19 Drops ~0.25% of frames. rc5des, nice 10 Drops ~18% of frames. rc5des, nice 0 Drops ~30% of frames. As you can see, it's fairly sensitive to system scheduling effects, so I might need to tune it some. -- Wrote a description of what I plan to implement wrt. to dirty-rectangle updating, etc. Basically, it's a plan-of-action for how I'm going to implement the STIC _correctly_. ------------------------------------------------------------------------------ 05/03/1999 (jzbiciak) release_007a ------------------------------------------------------------------------------ -- Fix minor error in "usage info". -- Add missing COPYING document. We're under GPL 2.0 now. -- Add GPL messages to all of the source files. -- Remove stic_allegro.h file. ------------------------------------------------------------------------------ 05/03/1999 (jzbiciak) release_007 (oops, skipped release_006.) ------------------------------------------------------------------------------ -- Finally got it building and running with SDL. Suffered a minor setback in that I haven't integrated the horiz/vert delay and blanking bit support for the STIC yet, but that's only because I'm slowly redoing the STIC emulation the _right_ way. :-) (BTW, it took me this long only because I've only had about 8-9 hours to spend on that, over half of which were discarded as I toyed around with various ideas on how to structure my code. SDL isn't that difficult to use.) TODO: It appears that the Football demo in the demo-cart runs incorrectly. Must fix this!!! ------------------------------------------------------------------------------ 04/25/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Switching over to Sam Lantinga's SDL library instead of Allegro. Gearing up for first public release (010) by first of May. Not much development work has been going on in the last few weeks due to heavier workload at work. ------------------------------------------------------------------------------ 04/02/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Fixed some problems w/ horiz and vert. delay in STIC emulation. ------------------------------------------------------------------------------ 03/30/1999 (jzbiciak) ------------------------------------------------------------------------------ -- FINALLY! FINALLY! FINALLY! I fixed the bug which was keeping Thin Ice from running correctly. It turns out I was implementing subtracts and compares incorrectly, such that the divide routine was running improperly. ------------------------------------------------------------------------------ 03/29/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Removed wait-states throughout entire program. Noticed that BDRDY is tied high in the schematics, and so wait-states can NEVER happen. At least, I think that's the case.... -- Fixed SUBI mnemonic in dasm1600. (Was outputting SUBT.) -- Added an experimental tweak to CP1600 simulator which intercepts accesses to 0x0102. There are alot of polling loops which poll waiting for this to change. I avoid a call to periph_read() by storing a copy in the CPU. :-) ------------------------------------------------------------------------------ 03/28/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Added command line flag parsing (long overdue). The current instantiation is pretty much a hack, but it works. -- More tweaks to the tick model (basically, fixing bugs since the rewrite). -- Experimenting with having the STIC return waitstates for accesses to GRAM during the active display period. It _appears_ that this should happen. Also adding 1 ws for accesses to GRAM during blanking. ------------------------------------------------------------------------------ 03/27/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Changed the peripheral bus tick model to be a little more sane and alot more documented. The way it works now is it sorta load-balances between alot of different peripherals, allowing time to stagger forward in such a way so as to meet all of the peripheral's needs. This should work out really nicely for when I go to add proper sound and graphics support and time synchronization (so that I don't just run at any-old-rate). -- Started thinking about how the gfx module will work. It'll basically be a lightweight wrapper around XWinAllegro that will also be responsible for taking the in-memory bitmap and shuttling it to the display. Decided that the STIC _must_ recalculate the display at 60Hz (in order to preserve sprite collision calculation, etc), but that the actual display can be managed by GFX at whatever frame rate the hardware will allow. In the spirit of everything being a peripheral, GFX will be a peripheral too, with a tick period of 60Hz (or whatever rate the user configures). If the user picks faster than 60Hz, then some frames will be redisplayed -- similar to the 3:2 pulldown that happens when 24Hz movies are shown on 30/60Hz TVs. -- Caught a couple more missing Makefile dependencies. ------------------------------------------------------------------------------ 03/22/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Fix timing bug in STIC. -- Change to 8-bit color depth, get great speedup. Fix some border-related bugs in the process. -- Fix colored-squares mode (duh). Was completely broken before. -- Trial run on a Solaris box: It worked nearly out of the box! (Just had to change an snprintf() to an sprintf(). Urgl.) ------------------------------------------------------------------------------ 03/21/1999 (jzbiciak) release_005 ------------------------------------------------------------------------------ -- Hacked in a simple XWinAllegro driver directly into the STIC module so that I could have some near-realtime feedback on my screen. This release pretty much requires Allegro in order to compile and run, although you can probably get by with .004's stic.c, stic.h if you still want to do batch PPM emulations... :-P -- With the XWinAllegro graphics, I've included a cheesy little "% Real Intellivision Speed" indicator. It's usually over 100% on my crappy brute-force implementation, which is a good sign. According to gprof, my bottlenecks are all in the brute-force graphics, which is good, since I've just written something that works -- I haven't optimized the design at all. -- Split up the FG/BG and Color Stack routines into two new temporary routines. Still not quite the way I'd like it, but I'm in inchin slowly in the right direction. -- jzIntv now accepts a single command line argument to toggle debugging mode. "jzintv" alone runs w/out the debugger, "jzintv -" runs with the debugger. Not real clever yet. Running w/ the debugger disables the % realtime indicator. -- Couple Makefile tweaks (forgot a couple dependencies, wasn't cleaning up everything on a make clean... Ooops!) -- Added De Re Intellivision Chapter 6 to the docs. ------------------------------------------------------------------------------ 03/15/1999 (jzbiciak) release_004 ------------------------------------------------------------------------------ -- Fix a small bug in periph_tick() which was leading to infinite loops when not single-stepping. -- Fix a STIC FG/BG-mode bug (a shift amount was off-by-one) and properly implement FG/BG vs. Color Stack mode switching. TODO: Majorly clean up stick code. -- Added a small tweak to CP1600 model so I can see what instructions have been decoded or invalidated. Nothing major. -- Modify the cartridge memory map to the Mattel default for 16K carts. 0x5000-0x6FFF, 0xD000-0xDFFF, 0xF000-0xFFFF. -- Mark 0xD000-0xDFFF, 0xF000-0xFFFF as cacheable. -- Minor hack in debugger so I could drop into debug when a STIC event occurs. -- Add GRAM aliases from 0x3A00 - 0x3FFF. -- Add STIC aliases at 0x4000 and 0x8000. -- Added check in CP-1610 decoder to see if instrs w/ bits 10-15 are set, to abort simulation. Helps catch when code has gone off in the weeds. -- I can now successfully view batch-generated "movies" of a number of cartridge intros. No MOBs (sprites) have been implemented, so it's not greatly exciting. Currently DUNVOO (Duncan's Thin Ice) crashes, literally -- Duncan skates off the bottom of the screen and onto the stack, trashing it so that the CPU emulation goes off in the weeds. ------------------------------------------------------------------------------ 03/13/1999 (jzbiciak) release_003 ------------------------------------------------------------------------------ -- I've inched closer to a real STIC implementation. Enough closer that I'm snapshotting and uploading this, at least as a patch. -- Gave up (for now) on trying to reverse engineer the AY-3-8915 color set from the I/Q values given in its spec sheet. They seem entirely bogus. -- Also fixed some typos in De Re Intellivision Volume 2. ------------------------------------------------------------------------------ 03/10/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Added README files to 'bin' and 'src/cp1600/tbl' directories, since 'cvs export' didn't see fit to provide these directories otherwise, and I was sick of manually adding them after every export. :-P -- Started working on a "real" STIC implementation. Whee. ------------------------------------------------------------------------------ 03/09/1999 (jzbiciak) release_002 ------------------------------------------------------------------------------ -- Fixed a major boo-boo in mem.c where I was allocating way too little memory. Although the emulator mostly ran correctly on a Sun, it crashed mysteriously with corrupted instructions on my PC. *doh* Changed "1 << width" to "1 << size". *blush* -- Fixed bug in SWAP. Status bits seem to get set based on lower byte. The EXEC's ISR now correctly dispatches to the various internal routines. (It was doing a SWAP, SWAP, BMI that expected the S bit to be set based on the lower byte of the initial register.) -- Made JD, JSRD non-interruptible. Before, they would permit an interrupt to be taken the cycle after they were issued. The sequence "EIS", "JD" will now never take an interrupt. I'm not 100% sure this is correct, but it seems reasonable. -- Determined that the reason ASTROSMASH and UTOPIA weren't booting was not due to my bug, but rather to "copy protection" that had been placed on the ROM images I was using. Out of laziness, I was still using ROMs that I had unpacked out of VOL1.RES, rather than ROMs from the Intellivision Lives! CD-ROM. The ROMs in VOL1.RES have been modified to work only with VOL1.EXE, it appears. (I won't divulge the scheme being employed here.) -- Fixed a minor bug in stic_dump in which I was looking at the wrong bit for advancing the color stack. Yay off-by-one errors. :-P -- Modified the "debugger" output to output regs and disassembly all on one line. Decided I didn't need to see the PC (since it's in R7 in the reg dump) or the encoded instructions (since my instruction decoder is rather stable). Also, implemented a set of simple single-character commands: 'R', 'S', 'D', and 'Q'. (Run, Step, Dump and Quit). 'R' and 'S' both require a single argument, # of instructions. I really need to get around to writing an instruction parser. -- Top level Makefile now builds stic_dump. (Although, stic_dump goes away as soon as I get a "real" STIC implemented.) -- Fixed a minor "cacheable" decoding bug which was exposed while playing with the cacheability bits. ------------------------------------------------------------------------------ 03/08/1999 (jzbiciak) release_001 ------------------------------------------------------------------------------ -- Fixed some more goofiness in the peripheral subsystem. -- Actually register the game cart in the address space (*doh*) -- Added simple interrupt generator to driver. -- Added "dump_state" to driver so I can analyze the state of the CPU "offline". -- Booted my first cartridge! UTOPIA seems to make it to the title screen, although the title screen isn't complete. It stops waiting for hand-controller input, it seems, which implies that something's not-quite-right. -- Wrote a quick-and-dirty STIC 'emulation' that takes a memory dump and generates a PPM of the display (based solely on the cards in BACKTAB and the graphics in GRAM/GROM.) Generated my first two screen-shots this way! -- Chased some apparent SDBD bugs which turned out to be a red herring. Problem was really in the periph subsystem. -- Fixed some bugs in SARC,2 RRC,2 in terms of how they set the 'O' bit. ------------------------------------------------------------------------------ 03/07/1999 (jzbiciak) ------------------------------------------------------------------------------ -- Checked in some speech related docs. -- Broke tables out from op_decode into separate C files. Added .prolog/ .epilog directives to mk_tbl in order to do so. -- Wrote initial quick-and-dirty mem subsystem. -- Modified the peripheral bus "read" functionality to pass the current state of the "read" to each of the devices being read, to allow implementing a bus sniffing device (eg. the debugger). -- Started implementing a simple debugger which simply allows single-stepping the CPU and showing memory events. It includes Frank P's dasm1600 code for disassembing the instruction at the current PC. -- Fixed the tick routines in periph to call ticks in the order that peripherals were registered, rather than in reverse order. -- Wrote a quick-and-dirty main() which loads up a bunch of ROM images and starts them running. The simulator has run its first program in months (although it crashes w/ a HLT -- it's jumping off into the weeds). But, it is progress. ------------------------------------------------------------------------------ 02/28/1999 (jzbiciak) ------------------------------------------------------------------------------ -- A total of four months has passed since I've worked on jzintv seriously. Recent interest from Willy Moeller has gotten me motivated to actually do something. I've included the ChangeLog from my last false-start below. Bear in mind, I'm importing this into CVS for a _third_ time. -- Decided to build fresh source tree and do some significant rearchitecting of the simulator. Old CP1610 sim design was very limiting and overly complex. Will reuse old code for now, but I plan to replace CP-1610 simulator with a much simpler rewrite. -- Built a "peripheral subsystem" which will allow me to connect arbitrary peripherals together, including the CPU. Running the emulator will amount to periodically calling the "periph_tick()" function on the main peripheral bus. ------------------------------------------------------------------------------ 12/27/1998 (jzbiciak) ------------------------------------------------------------------------------ -- Re-imported into CVS after major hard-drive crash (bummer). -- Investigating MAME/MESS infrastructure. With recent release of "Intellivision Lives!" CD-ROM, beginning to consider public release of jzIntv as part of MESS project. ------------------------------------------------------------------------------ 12/06/1998 (jzbiciak) ------------------------------------------------------------------------------ -- Downloaded and installed CVS. Sources are now being placed under CVS. -- Continued to clean up and reorganize directory structure. Eventually, this should be to the point where giving someone the code amounts to "cvs export ...". -- Psyching up for writing the STIC emulator next. Joysticks after that, and AY-891x last. (Although the joysticks plug into the AY-8914 electrically, they can actually be simulated completely separately.) ------------------------------------------------------------------------------ 12/02/1998 (jzbiciak) ------------------------------------------------------------------------------ -- ChangeLog file started. -- INTV source made to build in new, segmented build format. Considering moving from RCS to CVS (even though I just finally started using RCS.) -- Fixed remaining compilation warnings. -- Trying to get reacquainted with code after two month break.