I did (as you know already). And I have a number of partially disassembled games (and DiStella config files) on my hard disk, mostly done to hack them.
But currently I am busy with other stuff.
Yes Thomas! I got started years ago following you on [stella]. I've had or needed some 2600 time which has sparked me revisiting some of my partially disassembled work.
I made some headway on Warlords back in 2006. Had most of the RAM usage figured out and 40% of the generic labels given more meaningful names.
I didn't know that. Thanks. I'll take a look.
Very cool Debro, your 4K Pacman is awesome, I'm looking forward to seeing what your version of Video Pinball plays like!
This is also great fun to do with awesome games for other systems that were never released on the Atari.
How woul you describe your approach, do you look at the source code for the game you're reverse engineering or just the game output?
All my work is done from original coding. The reverse engineering projects I do are easier than doing a game from scratch and is a way to get lost source from decades ago archived in some way. I also find it interesting how developers got around the limitations of the system. They seem trivial now but they were pioneers of their time.
I'd request a disassembly of Video Olympics..mostly am looking at it to see how they did a nice 2x2 ball in a 2 line kernel that was smooth (I tried to do it by ANDing the scanline by #$FC, and it gets the ball size correct, but the vertical motion is quantized, so even with vertical delay, it still wobbles...)
That is one of my partially reverse engineered projects. Unfortunately its more partially than anything. I hope this helps.
txa ; 2 move scan line to accumulator
sec ; 2
sbc ballVertPos ; 3 subtract ball vertical position
and #$FC ; 2
php ; 3 = @70
Before coming here, they point the stack to ENABL. They then subtract the scan line from the ball's vertical position. The value is then AND'd with #$FC which is the 1's complement of 3. They then push the status of the AND'ing to the stack which enables or disables the ball. So in essence, if the value is between 0 - 3 then the BALL is enabled because the Z status is set.
In Video Pinball, the ball height is 4 because of the 2LK. Bob Smith does...
lda ballScanline ; 3 get scanline to enable ball
sec ; 2
sbc scanline ; 3 subtract current scanline
cmp #(H_BALL / 2) ; 2
rol ; 2 shift carry to D0 (1 if greater than 2)
asl ; 2 shift carry to D1 (i.e. ENABL)
eor #ENABLE_BM ; 2
rts ; 6
Here he compares the subtraction of the the scan line and the ball's scan line with half of the height of the ball (i.e. 2). He then shifts the carry flag to D1 and flips the value to enable or disable the ball. So if the subtraction value is greater than 1, then the ball is disabled. If the subtraction value is less than 2 then the ball is enabled.
If done correctly, it should execute exactly the same way as the original binary. The purpose of reverse-engineering is to create a reasonable duplication of the author's original source code. Some things, such as variable names, are impossible to recreate. On the other hand, reverse-engineered files are often commented much more extensively than their originals (when an original exists for comparison)...and built as a single document instead of using smaller program modules.
Kurt is correct. Generally the original source wouldn't have as many comments as I add. Carla Meninsky was noted as not having any comments in her code.