[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: More thoughts about Lode Runner & other multiload games...



On Friday, September 28, 2012 10:54:26 PM UTC-5, Hot Rod wrote:
> On Friday, September 28, 2012 1:50:00 PM UTC-5, Steve Nickolas wrote:
> 
> > On Fri, 28 Sep 2012, Antoine Vignau wrote:
> 
> > 
> 
> > 
> 
> > 
> 
> > > The truth is out there, oops, just a click away...
> 
> > 
> 
> > > http://www.hackzapple.com/phpBB2/viewtopic.php?t=191
> 
> > 
> 
> > >
> 
> > 
> 
> > > LoGo
> 
> > 
> 
> > > Sept. 2012 :-)
> 
> > 
> 
> > >
> 
> > 
> 
> > 
> 
> > 
> 
> > Hm.  That confirms a couple things - confirms I can gut 0900-0EFF and 
> 
> > 
> 
> > B700-BFFF for more space if I need.
> 
> > 
> 
> > 
> 
> > 
> 
> > It also confirms the $6000 start address that I found by brute force. (In 
> 
> > 
> 
> > fact I start the program running at 6008, but note the proper start is 
> 
> > 
> 
> > 6000.)
> 
> > 
> 
> > 
> 
> > 
> 
> > And it confirms the high score table's address in RAM, which would be 
> 
> > 
> 
> > useful for locating the routines to hit that.  And that RWTS is used.
> 
> > 
> 
> > 
> 
> > 
> 
> > But as I'm not familiar with RWTS (anytime I try to understand it my head 
> 
> > 
> 
> > explodes) I haven't been able to find the RWTS calls.
> 
> > 
> 
> > 
> 
> > 
> 
> > It is possible one of the functions is located at 6359.
> 
> > 
> 
> > 
> 
> > 
> 
> > -uso.
> 
> 
> 
> 
> 
> OK, so in taking a quick peek at LoGo's version of LR, it looks like the high score table is on track $0C, sector $0F. And that this is stored in memory at $1F00, and is either read or written via the routine at $6359.  You can see where it's called with the A-reg set to either a #$01 (for reads) or #$02 (for writes) and then stores that operation code first, followed by setting up the track, sector, and buffer address (i.e. track $0C, sector $0F, buffer $1F00) as part of the IOB, before calling RWTS with the address of the IOB ($B7E8) loaded in A and Y regs.  This routine at $6359 is called from a few different places though, and I didn't explore them all.  It might be worth first confirming that this is the high score table you're after (track $0C, sector $0F).


And if a level is loaded into $D00, and is 224 bytes longs, then it looks like that's done by calling the routing at $630E (calling it with a #$01 in the A-reg to read it or a #$02 to write it out.