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

MLB Crack: Play the Game



On Thursday, October 18, 2012 6:56:07 PM UTC-5, Hot Rod wrote:
> Hi,
> 
> I'm going to be adding a series of posts here describing my most recent retro computing project - a crack of the Micro League Baseball Box Score/Stat Compiler disk.
> 
> 
> 
> ]HR

Play the Game

On the original Box Score disk, if the P option is selected, the user is prompted to switch to the game disk. And a check is made to ensure it is the game disk.  If the check passes, then the next return address off the stack causes the program to continue by loading sector groups off the game disk.  Why they didn’t just reboot the game disk is a mystery, but so be it; now I had a goal of preserving this approach, but intermixing the cracks of Box Score and the MLB game disk.

The original table for loading the next sector groups from the game disk was:

0825-   04 80 00 BE	;$BE00
0829-   10 84 70 02	;$270
082D-   10 86 00 0C	;$C00
0831-   14 88 00 28	;$2800
0835-   18 84 00 40	;$4000
0839-   1E 86 00 A7	;$A700
083D-   04 83 00 A7	;$A700

Which translates to:
0825: $BE00-$BFFF start Track $02, sector 0 to Track $02, sector 1 [teams roster - common to all disks]
0829: $0270-$036F start Track $08, sector 4 to [TBD]
082D: $0C00-$1FDA start Track $08, sector 6 to [TBD]
0831: $2800-$xxxx start Track $0A, sector 8 to [TBD]
0835: $4000-$xxxx start Track $0C, sector 4 to [TBD]
0839: $A700-$xxxx start Track $0F, sector 6 to [TBD]
083D: $A700-$xxxx start Track $02, sector 3 to Track $04, sector 7 [is game text, and gets loaded by game before start]

Since I wasn’t going to be using these, and they really would require decoding the game disk, I didn’t chase them down.  These were already covered by the MLB crack, and its load routine pulls in the equivalent to these in the replacement load table.  My initial plan was to just patch in the load table to pick up the needed sectors, and let program control flow just like it did in the original.  But I found that on the MLB game disk crack, some of the data to load had been blended with the crack boot and intro screen, so it wasn’t going to be a simple matter of just pointing to the data sectors and loading them; I had to leverage some of the game disk crack boot as well.  So as a compromise, I just swapped in the code at $A00 from the MLB crack boot, and let it continue by itself.  It doesn’t reboot, and just overlays a new sector load table and code to continue.  That’s why you’ll find some unusual hopping about if you study that passage of the code.  

Another issue was that the MLB crack screen and original game screen had both been compressed, and intermixed into one routine.  I’d have liked to separate them, and skip the crack screen, but that would have required some significant reworking.  I was tight on space in that area, and just couldn’t get motivated enough to bother with it. These are already required to work as a ‘crack’ set, so I figured it was a small compromise to leave it in.  Rebooting still would have been easier, but I at least avoided that, and the handoff from the Box Score disk to the game disk flows somewhat like the original at least.

So at this point, I could boot, and the S and P options both seemed to work.  That just left Delete, which required another dive into disk routines.

]HR