-
-
Save freem/34424b449ab812c6cbf97dfd5abebac3 to your computer and use it in GitHub Desktop.
| NBA Jam Tournament Edition | |
| ========================== | |
| This is an attempt to get the NBA Jam Tournament Edition source code into | |
| a buildable state. | |
| The original code is available from: | |
| https://github.com/historicalsource/nba-jam-tournament-edition | |
| Currently, the original, non-Tournament Edition NBA Jam is not accounted for. | |
| The NBA Jam source code released under the historicalsource github account is | |
| from some point during the development of NBA Hangtime. There is an "old" | |
| directory, but it appears to have code from Tournament Edition. | |
| Requirements | |
| ------------ | |
| * DOSBox or a computer running DOS | |
| This is for older tools that don't have a modern equivalent at the moment. | |
| * gspa.exe, gsplnk.exe | |
| These are the assembler and linker for the GSP/TMS34010. | |
| This repository currently assumes the use of the files found in the Revolution X | |
| repository: https://github.com/historicalsource/revolution-x | |
| You may be able to get away with using later versions, but you might need to | |
| edit a few things. | |
| * OPUS MAKE | |
| "oh, I have GNU Make, will that work?" | |
| Well, that probably won't work; not without some changes, anyways. | |
| Like the assembler and linker, this has been sourced from the Revolution X repo. | |
| * LOADIMG | |
| This tool is responsible for building the game's image library. | |
| The NBA Jam Tournament Edition source code references various files that are not | |
| included in the repository. These are files such as "imgtbl.glo", "bkgdtbl.glo", | |
| and so on. | |
| There are two versions of this program available. It's not known what the | |
| actual differences are, but I'm assuming the larger version includes debugging | |
| information. (Or rather, I'm *hoping* that's the case.) | |
| The smaller version ("load2.exe") is available from the NBA Hangtime repository | |
| in the "NEWLOAD2" directory: | |
| https://github.com/historicalsource/nba-hangtime | |
| There is a help file, "load2.hlp", in this repository, along with example | |
| .lod scripts from Mortal Kombat. | |
| The larger version ("load20.exe") is found in the "IMG" directory of the | |
| Revolution X repository. | |
| * preasm | |
| ...which doesn't exist in any of the extant source repositories. | |
| From what I can tell, prefixing a value with '>' means to put a 'H' at the end. | |
| Possibly also adds a leading zero to any value starting with a hex character. | |
| Prefixing a label with '#' does something as well... probably a local label? | |
| Since all the .axx files are deleted, we don't really have an idea of what | |
| the actual transforms are. | |
| Notes | |
| ----- | |
| * Only relevant files are included. | |
| For the source code, this is any file mentioned in the linker script (BB.CMD). | |
| One notable exception to this rule is "d3.asm", also known as the "tank game". | |
| "scream.asm" is not yet removed, since it may still be used... | |
| Removed files: | |
| - apunzip.asm | |
| - rackup.asm | |
| - unzip.asm | |
| Instructions | |
| ------------ | |
| The source code relies on some files created by LOADIMG, so that's our first step. | |
| Dealing with this program is a pain, as it normally assumes you're connected to | |
| real hardware (T-Unit, Y-Unit, whatever). To get around this, use the /X parameter. | |
| LOADIMG also makes some assumptions about default directories that we need to | |
| handle... It's probably best to quote "load2.hlp": | |
| --- | |
| Valid <flags>... | |
| /X -DO NOT download to GSP. (If not present, it does) | |
| /Dx -Specify directory for .lod file (see below for 'x' description) | |
| /Tx -Build image table files (see below for 'x' description) | |
| /Fx -Build raw file (see below for 'x' description) | |
| /Ox -Override dir. for all files in .lod file (see below for 'x') | |
| /Ux -Override dirs. within all Universe files (see below for 'x') | |
| NOTE! The above flags are independent and may be used in any combination. | |
| /Rx -Load from a raw image file. (see below for 'x' description). | |
| /H -Print an explanation of .lod file directives. | |
| /V -Verbose mode, report lots of stuff. | |
| /I -Write background data to image roms | |
| /B -Make Bits Per Pixel based on Image data, not Palette size | |
| /P -Pad images to multiple of 4 bits | |
| /L -aLign images to 16 bit boundaries | |
| /A -Append to (i.e. do not erase and recreate) default table files. | |
| /S -Write sequences in .uni files to univseq.new | |
| /E -ED adjustment (Dual banked image memory (not available in load20) | |
| The T,F,R,D,O and U options use a secondary flag shown above as 'x'. | |
| If x is I, the affected file uses IMGDIR. | |
| If x is S, the affected file uses SRCDIR. | |
| If x is C, the affected file uses the current dir. | |
| If x is =, supply a directory on the command line. | |
| --- | |
| NBA Jam Tournament Edition uses multiple .LOD files, so we need to be careful | |
| about build order and overwriting data. | |
| Originally, I was able to get "bb.lod" built using the following command: | |
| load2 bb /X /DC /FC /TC | |
| However, you may also need to use "/I", "/P", /"L", and/or "/A". | |
| The current assumed order, which may be wrong: | |
| - bb.lod | |
| - bb2.lod | |
| - bb3.lod | |
| - bbmug.lod | |
| - bbpal.lod | |
| - bbtest.lod | |
| - bbtst.lod | |
| The data found in the .IRW files is mostly close to the final graphics ROM | |
| output, but it contains a header with currently unknown information. | |
| The graphics ROMs must also be split between four files... | |
| First file has the first byte, second file has the second byte, | |
| third file has the third byte, and fourth file has the fourth byte. | |
| Repeat for the rest of the file, looping back to the first file after the | |
| fourth byte. | |
| Graphics ROM set 1: ug14, uj14, ug19, uj19 | |
| Graphics ROM set 2: ug16, uj16, ug20, uj20 | |
| Graphics ROM set 3: ug17, uj17, ug22, uj22 | |
| Graphics ROM set 4: ug18, uj18, ug23, uj23 | |
| Graphics ROM set 1 starts with data from BB2.IRW, 0x200000 bytes worth (out of 0x3BF110 total) | |
| https://github.com/historicalsource is good | |
| there are three sources I care about at the moment: | |
| * nba-jam | |
| * nba-jam-tournament-edition | |
| * open-ice | |
| they are talked about at length below | |
| ================================================================================ | |
| [nba-jam] | |
| You'd think this was NBA Jam, but it appears to be in the process of being | |
| converted to NBA Hangtime... The "OLD" folder contains NBA Jam source code, but | |
| it's actually NBA Jam Tournament Edition (version undetermined). | |
| You probably also want IMG/OLD instead of just IMG... I have no way of viewing | |
| these files at the moment, though. | |
| -------------+----------------------------------------------------------------------- | |
| Filename | Description | |
| -------------+----------------------------------------------------------------------- | |
| APUNZIP.ASM | "Amusement Park Unzipper"; used for movie sequences? (Halftime Report) | |
| ATTRACT.ASM | "attract mode" | |
| BB.ASM | "NBA JAM Basketball game program", "first game module" (description from bb.cmd) | |
| BB.CMD | "Game linker command file" | |
| BB2.ASM | "Basketball game program"; looks like some small debugging thing | |
| DRONE.ASM | "basketball drone code", NBA Jam version? | |
| DRONE2.ASM | "basketball drone code", "Smarter for tournament ed." | |
| DUNKS.ASM | dunk data definitions? | |
| GAME.EQU | "All .equ constants to be used throughout the game" | |
| IMGPAL.ASM | image palettes | |
| IMGPAL2.ASM | image palettes part 2 | |
| IMGPAL3.ASM | image palettes part 3 | |
| IMGPALM.ASM | image palettes | |
| IMGPALP.ASM | image palettes | |
| IMGTBL.ASM | image table(s) | |
| MAKEFILE | | |
| PLYR.ASM | "basketball player code" | |
| PLYR.EQU | "Player/game constants and structures" | |
| PLYR2.ASM | "basketball player code" | |
| PLYR3.ASM | "basketball player code" | |
| PLYRAT.ASM | "basketball player code"; player attributes | |
| PLYRAT2.ASM | "basketball player code"; player attributes part 2 | |
| PLYRDSEQ.ASM | "basketball plyr sequence code"; dunks? | |
| PLYRLSEQ.ASM | "basketball plyr sequence code"; layups? | |
| PLYRSEQ.ASM | "basketball plyr sequence code" | |
| PLYRSEQ2.ASM | "basketball plyr sequence code" | |
| PLYRSTND.ASM | "basketball plyr sequence code" | |
| RECORD.ASM | "CMOS records etc" | |
| SCORE.ASM | "score stuff" | |
| SCORE2.ASM | "score stuff" | |
| SELECT.ASM | "name & team selection" | |
| SELECT2.ASM | "name & team selection"; this one has the initials + birthdates of the hidden players | |
| SOUNDS.ASM | "sound processor" | |
| SPEECH.ASM | "announcer speech etc..." | |
| STRING.ASM | "string printing stuff" | |
| TEXT.ASM | "font tables" | |
| -------------+----------------------------------------------------------------------- | |
| Many files referenced in the source are not included in this directory. | |
| It's assumed that you can use the ones from the main folder as-is, but I have | |
| not checked that. Worst case scenario, you can probably grab them from Jam TE. | |
| ================================================================================ | |
| [nba-jam-tournament-edition] | |
| assumed to be a more complete version of the "OLD" folder found in nba-jam. | |
| -------------+----------------------------------------------------------------------- | |
| Filename | Description | |
| -------------+----------------------------------------------------------------------- | |
| ADJUST.ASM | adjustments menu | |
| APUNZIP.ASM | "Amusement Park Unzipper" | |
| ATTRACT.ASM | "attract mode" | |
| AUDIT.ASM | "audits and ajustments handling" | |
| AUDIT.EQU | audit equates | |
| BAKGND.ASM | "background handlers", "background generator" | |
| BB.ASM | "NBA JAM Basketball game program", "first game module" | |
| BB.CMD | "Game linker command file" | |
| BB.HDR | ????? | |
| BB.TVS | information for ToddView? | |
| BB2.ASM | "Basketball game program"; looks like some small debugging thing | |
| BGNDPAL.ASM | background palettes | |
| BGNDTBL.ASM | background tables | |
| BKUP.BAT | backup script using xcopy | |
| COLL2.ASM | "collision routines" | |
| D3.ASM | "Mega 3d polygon code"; probably tank game | |
| DIAG.ASM | board diagnostics | |
| DIPEQU.ASM | dipswitch equates | |
| DISP.EQU | "Display proc equates" | |
| DRONE.ASM | "basketball drone code" | |
| DRONE2.ASM | "basketball drone code", "Smarter for tournament ed." | |
| DUNKS.ASM | dunk data definitions? | |
| GAME.EQU | "All .equ constants to be used throughout the game" | |
| GSP.EQU | graphics hardware-related equates? | |
| HSTD.ASM | "robo high-score-to-date management" | |
| IMGPAL.ASM | image palettes, "image palettes generated by loadimg" | |
| IMGPAL2.ASM | image palettes part 2 | |
| IMGPAL3.ASM | image palettes part 3 | |
| IMGPALM.ASM | image palettes | |
| IMGPALP.ASM | image palettes | |
| IMGTBL.ASM | image table(s), "image stub" | |
| LINK.EQU | ??? | |
| MAC2.ASM | various macros? | |
| MAIN.ASM | "initialization and interrupts" | |
| MAKE.INI | | |
| MAKEFILE | | |
| MENU.ASM | "test menus" | |
| MENU.EQU | menu equates | |
| MPROC.ASM | "GSP multi-processing system", "multi-tasker" | |
| MPROC.EQU | equates and macros for mproc | |
| NDSP1.ASM | "GSP display processor V 4.3", "image handler" | |
| PAL.ASM | "palette allocator and fader control" | |
| PATCH.ASM | ??? | |
| PLYR.ASM | "basketball player code" | |
| PLYR.EQU | "Player/game constants and structures" | |
| PLYR2.ASM | "basketball player code" | |
| PLYR3.ASM | "basketball player code" | |
| PLYRAT.ASM | "basketball player code"; player attributes | |
| PLYRAT2.ASM | "basketball player code"; player attributes part 2 | |
| PLYRDSEQ.ASM | "basketball plyr sequence code"; dunks? | |
| PLYRLSEQ.ASM | "basketball plyr sequence code"; layups? | |
| PLYRSEQ.ASM | "basketball plyr sequence code" | |
| PLYRSEQ2.ASM | "basketball plyr sequence code" | |
| PLYRSTND.ASM | "basketball plyr sequence code" | |
| RACKUP.ASM | "total carnage game program" (total carnage leftover, I suppose) | |
| RECORD.ASM | "CMOS records etc" | |
| SCORE.ASM | "score stuff" | |
| SCORE2.ASM | "score stuff" | |
| SCREAM.ASM | | |
| SELECT.ASM | "name & team selection" | |
| SELECT2.ASM | "name & team selection"; this one has the initials + birthdates of the hidden players | |
| SHAWN.HDR | "Macro defines, include after mproc.equ" | |
| SOUNDS.ASM | "sound processor" | |
| SPEECH.ASM | "announcer speech etc..." | |
| STRING.ASM | "string printing stuff" | |
| SYS.EQU | "T/Z-UNIT SYSTEM SPECIFIC EQUATES" | |
| TEST.ASM | "test program" | |
| TEXT.ASM | "font tables" | |
| UNZIP.ASM | "pkzip unzipper" | |
| UTIL.ASM | "utility subroutines" | |
| -------------+----------------------------------------------------------------------- | |
| the IMG folder has some very interesting files, including "KENGRIF.IMG". | |
| A lot of .glo files are referenced, but not included: | |
| - bgndtbl.glo ("background equates"; built as a part of bb.lod) | |
| - imgtbl.glo (default global image table; various .lod scripts build to this) | |
| - imgtbl2.glo | |
| - imgtbl3.glo (built as a part of bbmug.lod) | |
| - imgtbl4.glo (built as a part of bb3.lod) | |
| - imgtblm.glo | |
| - imgtblp.glo | |
| - mainimg.glo | |
| they are probably built from the .lod files in the IMG directory | |
| .glo files commented out: | |
| - imgcrwd.glo (bb.asm) | |
| - imgtbl2.glo (diag.asm) | |
| Referenced by files, but not included: | |
| - ap.h (apunzip.asm) | |
| - string.h (apunzip.asm) | |
| - arrow.tbl (score.asm) [bb.lod] | |
| - ball.tbl (plyr2.asm) [bb2.lod] | |
| - city.tbl (score.asm) [bb.lod] | |
| - court.tbl (bb.asm, bb2.asm) [bb.lod] | |
| - crowd.tbl (bb.asm) [bb2.lod] | |
| - fireseq.tbl (plyrdseq.asm, plyrseq2.asm) [bb3.lod] | |
| - frame.tbl (unzip.asm) [???] | |
| - layup.tbl (plyrlseq.asm) [bb2.lod] | |
| - mugshot.tbl (select2.asm) [bbmug.lod] | |
| - pass.tbl (plyrseq2.asm) [bb2.lod] | |
| - plyrdseq.tbl (plyrdseq.asm) [bb2.lod] | |
| - plyrd2se.tbl (plyrlseq.asm) [bb2.lod] | |
| - plyrhd.tbl (plyrat2.asm) [bb.lod] | |
| - plyrhd2.tbl (plyr3.asm) [bb.lod] | |
| - plyrhd3.tbl (plyr3.asm) [bbmug.lod] | |
| - plyrhd4.tbl (plyrat.asm) [bb3.lod] | |
| - plyrseq.tbl (plyrseq.asm) [bb2.lod] | |
| - plyrseq2.tbl (plyrseq2.asm) [bb2.lod] | |
| - stand.tbl (plyrstnd.asm) [bb.lod] | |
| - text.tbl (text.asm) [bb2.lod] | |
| load2 bb /X /TC | |
| this command builds bb.lod, which results in 14 new files. | |
| ignore L2TEMP, and it's 13. see below for full details | |
| if you're going to run this in dosbox, you might want to up the CPU cycles, | |
| since big .lod files take longer to process. | |
| load2 bb /X /FC | |
| attempts to build "bb.irw", but load2 errors out saying | |
| "ERROR *** Cannot create temp file, save_temp_file!!" | |
| "bb.irw" is built and is 173KB. it mostly consists of the contents of court.bin, | |
| HOWEVER! doing... | |
| load2 bb /X /DC /FC /TC | |
| will work. you may need even more flags, depending on how things go. | |
| some command line options you might need; descriptions blatantly stolen from LOAD2.HLP | |
| /I -Write background data to image roms | |
| /P -Pad images to multiple of 4 bits | |
| /L -aLign images to 16 bit boundaries | |
| /A -Append to (i.e. do not erase and recreate) default table files. | |
| various LOD files and what they make | |
| ------------------------------------ | |
| [bb.lod] | |
| (this one is big, hold your horses) | |
| glo: IMGTBL.GLO | |
| asm: COURT.TBL | |
| uses: | |
| - COURT (FRM definition) | |
| - ADS.IMG | |
| - COURTZ.IMG | |
| - CHEERS.IMG | |
| asm: PLYRHD.TBL | |
| uses: | |
| - HDS1.IMG | |
| - HDS2.IMG | |
| - HDS3.IMG | |
| - HDS4.IMG | |
| - HDS5.IMG | |
| - HDS6.IMG | |
| asm: PLYRHD2.TBL | |
| uses: | |
| - HDS7.IMG | |
| asm: IMGTBL.ASM | |
| uses: | |
| - BALL.IMG | |
| asm: STAND.TBL | |
| uses: | |
| - WST.IMG | |
| asm: IMGTBL.ASM | |
| uses: | |
| - REFTIP.IMG | |
| (defines imgtbl.asm again for whatever reason before these next images) | |
| - BALLTIME.IMG | |
| - TVSCORE.IMG | |
| - TVSCORE2.IMG | |
| - FONT6.IMG | |
| (defines imgtbl.asm for a third time) | |
| - SPARKS.IMG | |
| - HOOP.IMG | |
| - TVTEXT.IMG | |
| - OSGEMD.IMG | |
| - LOGOS.IMG | |
| - CITIES.IMG | |
| - LGMD.IMG | |
| - STATSTXT.IMG | |
| - SGMD8.IMG | |
| - OGMD10.IMG | |
| - INFOWIN.IMG | |
| asm: ARROW.TBL | |
| uses: | |
| - ARROWS.IMG | |
| asm: CITY.TBL | |
| uses: | |
| - CITNAMES.IMG | |
| asm: IMGTBL.ASM | |
| uses: | |
| - TROPHY.IMG | |
| - XPLOSION.IMG | |
| (defines imgtbl.asm again) | |
| - NSCRN2.IMG | |
| asm: IMGTBL.ASM | |
| glo: BGNDTBL.GLO | |
| uses (all are BBB/background type): | |
| - HISCORE | |
| - EMPTYJAM | |
| - YESNO | |
| - SELBACK | |
| - TEAMSEL | |
| - MATCHBAK | |
| - STATSCRN | |
| - NEWTITLE (TITLE in non-TE Jam) | |
| - CONGRATS | |
| - LADDER2 | |
| - CHRVIC | |
| - SELBACKK | |
| - SUBST | |
| - VIEWHP | |
| - blankjam | |
| glo: IMGTBL.GLO | |
| uses: | |
| - TSMLOGO.IMG | |
| - FLASH.IMG | |
| [bb2.lod] | |
| (assumes imgtbl.glo per loadimg defaults?) | |
| asm: leds.tbl | |
| uses: | |
| - leds1.img | |
| asm: junkxxxx | |
| uses: | |
| - diagp.img | |
| asm: pass.tbl | |
| uses: | |
| - wnlp.img | |
| asm: plyrseq.tbl | |
| uses: | |
| - todd.img | |
| - willie.img | |
| - willie2.img | |
| asm: plyrd2seq.tbl | |
| uses: | |
| - todd.img | |
| asm: plyrdseq.tbl | |
| uses: | |
| - willie2.img | |
| - dunks.img | |
| asm: plyrd2seq.tbl | |
| still using dunks.img? | |
| asm: plyrdseq.tbl | |
| still using dunks.img? | |
| asm: plyrseq.tbl | |
| uses: | |
| - willie3.img | |
| asm: layup.tbl | |
| uses: | |
| - willie3.img (from above definition) | |
| - layups.img | |
| asm: plyrseq.tbl | |
| uses: | |
| - willie4.img | |
| asm: plyrseq2.tbl | |
| uses: | |
| - willie4.img (from above definition) | |
| asm: plyrseq.tbl | |
| uses: | |
| - willie4.img (from above definition) | |
| asm: plyrseq.tbl | |
| uses: | |
| - willie5.img | |
| asm: TEXT.TBL | |
| uses: | |
| - trogf15.img | |
| - trogf7.img | |
| - squadplt.img | |
| asm: ball.tbl | |
| uses: | |
| - ball.img | |
| asm: crowd.tbl | |
| uses: | |
| - courtz.img | |
| [bb3.lod] | |
| glo: IMGTBL.GLO | |
| asm: fireseq.tbl | |
| uses: | |
| - firefall.img | |
| - ndunks5.img | |
| glo: IMGTBL4.GLO | |
| asm: plyrhd4.tbl | |
| uses: | |
| - ourhds2.img | |
| - ourhds3.img | |
| - raiden.img | |
| [bbmug.lod] | |
| glo: IMGTBL.GLO | |
| asm: mugshot.tbl | |
| uses: | |
| - nmugs.img | |
| - mugshots.img | |
| - mugshot3.img | |
| glo: IMGTBL3.GLO | |
| asm: plyrhd3.tbl | |
| uses: | |
| - HDS8.img | |
| - HDS9.IMG | |
| - HDS10.IMG | |
| - HDS11.IMG | |
| - HDS12.IMG | |
| [bbpal.lod] | |
| "flesh and uniform pals" | |
| glo: IMGTBL.GLO | |
| asm: junkxxxx | |
| uses: | |
| - pals.img | |
| - crwdpals.img | |
| [bbtest.lod] | |
| asm: plyrseq2.tbl | |
| uses: | |
| - firefall.img | |
| [bbtst.lod] | |
| glo: IMGTBL.GLO | |
| asm: plyrhd.tbl | |
| uses: | |
| - hds1.img | |
| ================================================================================ | |
| [open-ice] | |
| Luckily, 2 on 2 Open Ice Challenge did not get overwritten during the process of | |
| making a sequel. However, it's no less challenging to navigate. | |
| the directories: | |
| - bill | |
| - code | |
| - img | |
| - macros | |
| - other | |
| ================================================================================ | |
| [other archives I pulled down] | |
| these aren't listed in the main section because I'm mainly grabbing them for | |
| other reasons... | |
| nba-hangtime: doc folder | |
| revolution-x: tools! | |
| ================================================================================ | |
| [assorted notes] | |
| .glo files are just a bunch of ".globl" definitions... | |
| -------------------------------------------------------------------------------- | |
| .vda files, as rare as they are in these archives, are similar to TGA files. | |
| These are meant to go through a multi-step process: | |
| 1) vda to "frm", which splits the vda into "hdr" and "frm" files. | |
| hdr contains the important parts of the header, namely image size, bpp, and the | |
| palette data (for a 16 bit image, each color is 1555). | |
| frm contains the image data itself. | |
| 2) the frm file is zipped with an older version of pkzip. | |
| How old? "Version 1.1 03-15-90" | |
| 3) the zip file is passed into a program called "zip2bin", which performs | |
| transformations that are currently unknown to me. | |
| -------------------------------------------------------------------------------- | |
| .bdb files are text, and are probably paired with the corresponding .bdd file. | |
| These are somewhat described in loadbg.doc from NBA Hangtime docs directory. | |
| However, that document assumes the reader has an unspecified fax with more | |
| complete information on the format. | |
| .bdb file info | |
| -------------- | |
| first line: | |
| NAME xlength ylength zlength numMods numPals numBlocks | |
| module definition: | |
| NAME upper_lft_x lower_rt_x upper_lft_y lower_rt_y | |
| followed by numBlocks entries in the following format: | |
| univ_Z univ_X univ_Y Hdr Palette | |
| .bdd file info | |
| -------------- | |
| for the two header lines ending in 0x0A, all values are ASCII. | |
| space seems to be the value separator for line 2. | |
| number of images, 0x0A | |
| old_hdr width height big_pal, 0x0A | |
| old_hdr seems to be incremented by 3 for each entry? (from viewing yesno.bdd) | |
| image and palette data follow | |
| palettes seem to be... | |
| name entries, 0x0A | |
| with values being 1555 ?RGB. | |
| -------------------------------------------------------------------------------- | |
| .lod files are some sort of script? | |
| loadimg.doc from the NBA Hangtime docs directory gives this information: | |
| "The format for the .lod file is... | |
| A fully qualified .img filename starting in column 1. | |
| A series of lines starting with "---> " followed by as many | |
| image names as will fit on a line separated by commas. | |
| A line that starts with "BBB> " expects a list of Blimp | |
| background files." | |
| upon viewing multiple .lod files, the format is clearly not that simple. | |
| load2.hlp from NBA Hangtime's "newload2" directory gives more info... | |
| Any line beginning with ';' or '/' is a comment. | |
| The first four characters of a non-comment line are checked for a command. | |
| If a valid command is not found, "the line is assumed to contain a WIMP .img | |
| filename". | |
| ---> img1[:stcol][*{2-4}],img2[:stcol][*{2-4}],...,imglast[:stcol][*{2-4}] | |
| Starts an image list using the active .img file. | |
| "stcol" is optional; it denotes an index into the color palette for all non-zero | |
| values in the image. | |
| the asterisk is also optional; it tells load2 (the .lod parser) to create multiple | |
| sizes of the image for scaling purposes. The value following the asterisk must be | |
| a number; it determines how many different scale levels are made. | |
| ***> hex_address[,end_address][,bank] | |
| Set the current address counter to the specified address. | |
| When starting load2, the default address is 2000000h. | |
| end_address is optional, and will tell load2 to check if the requested data can | |
| fit within the range given. | |
| bank is also optional, and is only usable with the /E flag (indicating dual-banked | |
| image memory). The value can be 0 or 1, and is 0 by default. | |
| GLO> global_filename | |
| Set the filename for future global labels to be written to. | |
| By default, this is "imgtbl.glo". | |
| ASM> imghdr_filename[,section_name] | |
| Set the filename for all future image headers to be written to. | |
| By default, this is "imgtbl.asm". | |
| section_name is optional; if omitted, a ".data" line will be written at | |
| the beginning of the .asm file. | |
| ROM> staddr,endaddr | |
| Specifies an area for image data to NOT be downloaded to. | |
| PPP> digit | |
| Sets the pixel packing level for DMA2. | |
| 0 (the default) packs images to the smallest possible level. | |
| non-zero values from 1-8 represent the number of bits per pixel. | |
| ZON> | |
| ZOF> | |
| Enable or disable DMA2's "zero compression" feature. This is best described by | |
| stealing from load2.hlp: | |
| "When on, load2 computes the leading and trailing zeros for each line of each | |
| image and sets the appropriate bits in the DMA control field of the image header. | |
| When off (the default), load2 downloads the data as it always has in the past. | |
| Zero compression is AUTOMATICALLY turned off for scaled images!" | |
| CON> | |
| COF> | |
| Enable or disable checksums. | |
| Again, load2.hlp has a better description than I could write: | |
| "These keywords turn checksums on and off. | |
| When on (the default), load2 computes a checksum for each image to see if it | |
| matches a previous image. If so, it creates a new image header pointing to | |
| the previous data, and does not download the identical data. | |
| When off, identical data will be downloaded separately." | |
| PON> | |
| POF> | |
| "These keywords turn the palette entry in the image header on and | |
| off when the /T option is in effect. | |
| When on (the default), load2 includes the palette field in the image header | |
| table (assuming it is part of the IHDR format). | |
| When off, the palette field is not included in the image header. | |
| THIS IS REALLY OBSOLETE SINCE YOU CAN DO THE SAME THING WITH THE IHDR COMMAND." | |
| XON> | |
| XOF> | |
| "These keywords turn on extra zero pixels along the right and bottom edge | |
| of images so the DMA's scaling computation doesn't truncate them prematurely." | |
| FRM> bin_filename1,bin_filename2,... | |
| "Compressed movie footage is contained in files with a .bin extension. | |
| These need to be loaded using the FRM> keyword." | |
| BBB> bg_filename1,bg_filename2,... | |
| "Loads a BLIMP background file. This causes the following tables to be | |
| created when the /T option is in effect... | |
| bgndequ.h, bgndtbl.asm, bgndpal.asm" | |
| UFN> uni_file_num | |
| Used with /A option to set the starting "universe number". | |
| By default, this is 0, which could overwrite previous data if you're not careful. | |
| UGL> user_glo_file | |
| "This sets a file name which will be included in a file that load2 generates. | |
| The user_glo_file is one file for all universes which you create and maintain | |
| containing image, sequence and/or damage table names which you want to be global, | |
| but are not automatically set to be by load2. | |
| The only reason you are supplying the name here is so load2 can put a .include | |
| line in univtbl.glo." | |
| UNI> uni_fname[;override_directory][,uni_fname[;override_dir]...] | |
| Load a BGTOOL universe file. | |
| "The image files contained within the universe file must come from IMGDIR | |
| or the override directory (if specified). | |
| The following tables are created when the /T option is in effect... | |
| univtbl.glo (for the first UNI> encountered) | |
| unixx.asm,uniseqxx.asm,unixx.tbl,univtbl.glo" | |
| IHDR FLD1:S,FLD2:S,...,FLDn:S | |
| Specify an image header format. Fields are defined as name:size. | |
| load2.hlp has this information: | |
| VALID FIELDS ARE LIMITED TO THE FOLLOWING... | |
| SIZX x size | |
| SIZY y size | |
| SAG image address | |
| CTRL DMA2 control field | |
| ANIX x anim pt | |
| ANIY y anim pt | |
| PAL palette name | |
| ALT alternate palettes (if there are any) | |
| NOTE: these are terminated with a -1. | |
| If an image has none, a -1 is still placed in its table. | |
| PTnx Point Table values | |
| (n = 0-9 x = X or Y) | |
| VALID SIZES ARE LIMITED TO THE FOLLOWING.. | |
| B .byte | |
| W .word | |
| L .long | |
| By default, load2 assumes the following image header: | |
| IHDR SIZX:W,SIZY:W,SAG:L,ANIX:W,ANIY:W,CTRL:W,PAL:L | |
| "DMA2 control field" likely maps to DMA2 register 1: | |
| FEDCBA98 76543210 | |
| ||_||||| |||||__| | |
| | | |||| |||| | | |
| | | |||| |||| +-- Pixel Operations | |
| | | |||| |||+----- (HFL) Horizontal Flip | |
| | | |||| ||+------ (VFL) Vertical Flip | |
| | | |||| |+------- (CLP) DMA Clip | |
| | | |||| +-------- (CMP) DMA Compress Mode | |
| | | |||+---------- (LM0) DMA Compression Lead Pixel Multiplier bit 0 | |
| | | ||+----------- (LM1) DMA Compression Lead Pixel Multiplier bit 1 | |
| | | |+------------ (TM0) DMA Compression Trailing Pixel Multiplier bit 0 | |
| | | +------------- (TM1) DMA Compression Trailing Pixel Multiplier bit 1 | |
| | +--------------- (PIX) Pixel Size (0=8 bits) | |
| +----------------- (DGO) DMA Go/Halt | |
| Fields used by NBA Jam .lod files that are not mentioned above: | |
| PWRD1:W,PWRD2:W,PWRD3:W | |
| -------------------------------------------------- | |
| Commands not mentioned in the help file, but found in the executable: | |
| ZAL> | |
| probably grouped with ZOF> and ZON> commands | |
| MOF> | |
| MON> | |
| unknown functionality | |
| BOF> | |
| BON> | |
| unknown functionality | |
| -------------------------------------------------------------------------------- | |
| .img format is the one we all really want to know about, so let's examine... | |
| the first 16 bytes of "kengrif.img": | |
| 08 00 06 00 90 30 00 00 3F 06 00 00 00 00 00 00 | |
| grouping them slightly... | |
| 0800 0600 90300000 3F06 0000 0000 0000 | |
| |__| |__| |______| |__| |__| |__| |__| | |
| | | | | | | | | |
| | | | | | | +---- ??? | |
| | | | | | +--------- number of anim. scripts? | |
| | | | | +-------------- number of anim. sequences? | |
| | | | +------------------- WIMP version number used to generate this file | |
| | | +-------------------------- directory info address | |
| | +--------------------------------- ??? | |
| +-------------------------------------- number of images? | |
| and the second 12 bytes, just in case... | |
| CD AB 00 00 00 00 00 00 00 00 00 00 | |
| grouped | |
| CDAB 0000 0000 0000 0000 0000 | |
| |__| |__| |__| |__| |__| |__| | |
| thanks to "wlib.exe", we can get some information about this file: | |
| 8 images in C:\BIN\kengrif.img | |
| GRIFFEY KEN_MUG KGRIF05 KGRIF04 | |
| KGRIF03 KGRIF02 KGRIF01 KGRIF16 | |
| 3 palettes in C:\BIN\kengrif.img | |
| scorep KEN_MUGP KGRIF_P | |
| wlib lists the following other possible data types: | |
| - animation sequences | |
| - animation scripts | |
| - point tables | |
| - alternate palette tables | |
| - damage tables | |
| wlib is also capable of determining what version of WIMP the .img file was | |
| made from... kengrif.img was made with v6.63 of WIMP, apparently. | |
| so if I had to guess, the first two bytes store the number of images. | |
| the next two bytes are ??? | |
| the third set of two bytes is the file address where directory info begins? | |
| for this file, the directory info is at 0x3090. | |
| - each image entry is 0x32 bytes long? | |
| - each palette entry is 0x1A bytes long? | |
| - each anim sequence entry is 0xE0 bytes long? | |
| - each anim script entry is 0x74 bytes long? | |
| - point table, altpals, damage: unknown at the moment | |
| ; image "GRIFFEY" (size 42x9, xani 21, yani 0, palette "scorep") | |
| 47 52 49 46 46 45 59 00 20 07 20 07 20 07 20 07 | |
| 20 00 [15 00] [00 00] [2A 00] [09 00] [03 00] [E0 02 00 00] | |
| 4A 3A 25 55 00 00 FF FF FF FF FF FF FF FF FF FF | |
| FF FF | |
| ; image "KEN_MUG" (size 65x61, xani 0, yani 61, palette "KEN_MUGP") | |
| 4B 45 4E 5F 4D 55 47 00 20 20 20 20 20 20 20 00 | |
| 00 00 [00 00] [3D 00] [41 00] [3D 00] [04 00] [6C 04 00 00] | |
| 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF | |
| FF FF | |
| ; image "KGRIF05" (size 25x37, xani 11, yani 33, palette "KGRIF_P") | |
| 4B 47 52 49 46 30 35 00 20 20 20 20 20 20 20 00 | |
| 00 00 [0B 00] [21 00] [19 00] [25 00] [05 00] [A0 14 00 00] | |
| 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF | |
| FF FF | |
| ; image "KGRIF04" (size 36x36, xani 18, yani 32, palette "KGRIF_P") | |
| 4B 47 52 49 46 30 34 00 20 20 20 20 20 20 20 00 | |
| 00 00 [12 00] [20 00] [24 00] [24 00] [05 00] [AC 18 00 00] | |
| 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF | |
| FF FF | |
| ; image "KGRIF03" (size 39x35, xani 20, yani 32, palette "KGRIF_P") | |
| 4B 47 52 49 46 30 33 00 20 20 20 20 20 20 20 00 | |
| 00 00 [14 00] [20 00] [27 00] [23 00] [05 00] [BC 1D 00 00] | |
| 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF | |
| FF FF | |
| ; image "KGRIF02" (size 32x33, xani 18, yani 31, palette "KGRIF_P") | |
| 4B 47 52 49 46 30 32 00 20 20 20 20 20 20 20 00 | |
| 00 00 [12 00] [1F 00] [20 00] [21 00] [05 00] [34 23 00 00] | |
| 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF | |
| FF FF | |
| ; image "KGRIF01" (size 27x33, xani 13, yani 31, palette "KGRIF_P") | |
| 4B 47 52 49 46 30 31 00 20 20 20 20 20 20 20 00 | |
| 00 00 [0D 00] [1F 00] [1B 00] [21 00] [05 00] [54 27 00 00] | |
| 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF | |
| FF FF | |
| ; image "KGRIF16" (size 34x40, xani 32, yani 34, palette "KGRIF_P") | |
| 4B 47 52 49 46 31 36 00 19 00 24 00 21 00 0C 00 | |
| 00 00 [20 00] [22 00] [22 00] [28 00] [05 00] [F0 2A 00 00] | |
| 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF | |
| FF FF | |
| ; palette "scorep" | |
| 73 63 6F 72 65 70 00 55 AC 04 10 06 [3F 00] [1C 00 | |
| 00 00] 86 72 00 00 00 00 AC 00 | |
| ; palette "KEN_MUGP" | |
| 4B 45 4E 5F 4D 55 47 50 00 04 00 08 [E5 00] [9A 00 | |
| 00 00] 86 72 00 00 00 00 AC 00 | |
| ; palette "KGRIF_P" | |
| 4B 47 52 49 46 5F 50 00 00 04 00 06 [3E 00] [64 02 | |
| 00 00] 86 72 00 00 00 00 AC 00 | |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
| ; from pals.img, "?BLANK" has a points table assigned to it. | |
| here's the value in the directory table | |
| 3F 42 4C 41 4E 4B 00 20 20 20 20 20 20 20 20 00 | |
| 00 00 [00 00] [00 00] [0E 00] [16 00] 03 00 [FC 47 00 00] | |
| 00 00 00 00 00 00 FF FF FF FF FF FF FF FF 00 00 | |
| FF FF | |
| and the points table value, which is 0x28 bytes long and is at PALS.IMG offset 0xDE74 | |
| "1 Point Table in C:\BIN\pals.img | |
| Image ?BLANK: | |
| 7344,7345 7346,7347 7348,7349 7350,7351 7352,7353 | |
| 7354,7355 7356,7357 7358, -1 -1, -9 7362,7363 " | |
| [B0 1C, B1 1C] [B2 1C, B3 1C] [B4 1C, B5 1C] [B6 1C, B7 1C] [B8 1C, B9 1C] | |
| [BA 1C, BB 1C] [BC 1C, BD 1C] [BE 1C, FF FF] [FF FF, F7 FF] [C2 1C, C3 1C] | |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
| ; raiden.img has some animation scripts and sequences | |
| 2 animation sequences in C:\BIN\raiden.img | |
| blite light | |
| 2 animation scripts in C:\BIN\raiden.img | |
| blite lite | |
| raiden.img header | |
| 0E00 0400 1E0C0000 3E06 0200 0200 0000 CDAB 0000 0000 0000 0000 0000 | |
| "blite" anim sequence directory entry | |
| 62 6C 69 74 65 00 61 6D 65 29 20 20 20 20 20 00 | |
| 40 00 07 00 4A 34 B8 5B 36 34 B8 5B 22 34 B8 5B | |
| 0E 34 B8 5B FA 33 B8 5B E6 33 B8 5B D2 33 B8 5B | |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 00 00 00 00 0A 00 0A 00 FF FF FF FF FF FF 00 00 | |
| 00 00 00 00 00 00 06 00 01 00 00 00 00 00 00 00 | |
| 00 00 00 00 00 00 00 00 05 00 01 00 00 00 00 00 | |
| 00 00 00 00 00 00 00 00 00 00 04 00 01 00 00 00 | |
| 00 00 00 00 00 00 00 00 00 00 00 00 03 00 01 00 | |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 | |
| 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 | |
| "light" anim sequence directory entry | |
| 6C 69 67 68 74 00 61 6D 65 29 20 20 20 20 20 00 | |
| 40 00 07 00 3A 35 B8 5B 26 35 B8 5B 12 35 B8 5B | |
| FE 34 B8 5B EA 34 B8 5B D6 34 B8 5B C2 34 B8 5B | |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 00 00 00 00 0A 00 0A 00 FF FF FF FF FF FF 00 00 | |
| 00 00 00 00 00 00 0D 00 01 07 00 00 00 00 00 00 | |
| 00 00 00 00 00 00 00 00 0C 00 01 0E 00 00 00 00 | |
| 00 00 00 00 00 00 00 00 00 00 0B 00 01 0E 00 00 | |
| 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 01 07 | |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 00 | |
| 01 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 08 00 01 07 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 00 00 07 00 01 0A 00 00 00 00 00 00 00 00 00 00 | |
| "blite" anim script directory entry | |
| 62 6C 69 74 65 00 61 6D 65 29 20 20 20 20 20 00 | |
| 00 00 01 00 B2 35 B8 5B AE 25 B6 6C C2 25 B6 6C | |
| D6 25 B6 6C EA 25 B6 6C FE 25 B6 6C 12 26 B6 6C | |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 00 00 00 00 E4 00 7A 00 FF FF FF FF FF FF 00 00 | |
| 00 00 00 00 00 00 00 00 01 07 00 00 00 00 00 00 | |
| 00 00 00 00 | |
| "lite" anim script directory entry | |
| 6C 69 74 65 00 4E 61 6D 65 29 20 20 20 20 20 00 | |
| 00 00 01 00 2A 36 B8 5B 26 90 B5 5C 3A 90 B5 5C | |
| 4E 90 B5 5C 62 90 B5 5C 76 90 B5 5C 8A 90 B5 5C | |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
| 00 00 00 00 60 00 98 00 FF FF FF FF FF FF 00 00 | |
| 00 00 00 00 00 00 01 00 01 00 00 00 00 00 00 00 | |
| 00 00 00 00 |
Are you able to match up the Assembly with the rom location?
Yes; the general layout seems to match the order of files listed in "BB.CMD"
More so with the revision 1 roms?
I have been primarily looking at the NANI Edition, in order to figure out what changes were made there. Though I haven't started working on previous versions, I have been writing small notes in a local copy of the disassembly for changes made throughout the development process (e.g. text changes, background changes, the commenting out of MK2 characters, etc.)
@freem all this effort this is really great, the truth is that it is really possible to compile nba-jam-tournament-edition? What tools are needed? Visual Studio 2019? Visual Code? gcc? fasm? turbo assembler?
I can't figure out, BB.CMD command its input? I used like below
C:\source\nba-jam-tournament-edition>GCC BB.CMD
C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:BB.CMD: file format not recognized; treating as linker script
C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:BB.CMD:2: syntax error
collect2.exe: error: ld returned 1 exit status
I will appreciated if you have the time to explain how to do it, I have a lot of memories with that game.
Thanks a lot for your time
@droussos Hi, sorry for the late reply on this; finally found the time to get my notes and uploaded them as another file in this post: https://gist.github.com/freem/34424b449ab812c6cbf97dfd5abebac3#file-gistfile1-txt
I never actually got around to testing the built ROMs in MAME, though, as I wasn't sure how the output was meant to be split.
A lot of the files mentioned/you'll need are in the Revolution X repository: https://github.com/historicalsource/revolution-x
Are you able to match up the Assembly with the rom location? More so with the revision 1 roms? I have mess with changing some stuff in revision 1. From reading through the source code. I see that magic Johnson was supposed to be in the game along with Shaq and some other players.