kato@potpourri.UUCP (Carlos Santiago) (07/23/87)
I recently purchased a CoCo 3 after owning a CoCo 1 for 6 years.
I enjoy playing video games on my CoCo 3, but those games that
use artifacting only display in black an white. For the pasted
two weeks I have been converting these games to display in color.
For those interested the procedure is simple, the only requirement
is that you have a position independent monitor program.
The following procedure assumes a good knowledge of coco graphics
and assembly language.
1. Find the START, END, and EXEC address of the game.
2. Load the monitor program in above the diskbasic roms at
address $E000. You may need to run a rom to ram program to
get access to this area of memory. This allows any game to reside
in memory at the same time as the monitor program since most ML
programs load into memory from $E00 to $7FFF(not all addresses
are used by all programs).
3. Load the a copy of the game to be modified into memory.
4. Search for any occurrences of $FF22 in the area occupied by
the game. This the address of the PIA that is used to control
the video mode.
5. Disassemble the code at the addresses before the address where the
$FF22 was found.
6. If the code is a LDA #$FX, LDB #$FX where X is a hex value from 8
to F, change the code to LDA #$EX or LDB #$EX. Change all occurrences.
NOTE: only change the code if it is followed by a STA $FF22 or a
STB $FF22. This change in code changes the graphics mode from
256 X 192 two color to 128 X 192 four color.
7. The following lines of assembly code must be added to patch the
palette registers for the proper PMODE4 colors ie. BLACK, WHITE,
RED, and BLUE. Note these are the colors I used you may select
any 4 colors from the 64 available.
Find an area in memory that is not used by the game but within the
range of $E00 and $7FFF. If this is range is completely used by the
game an area of memory that is not used within the game code must
be found. The occurrence of $FF, $00, $FF, $00...... in memory
usually indicates unused memory.
STARTN LDD #$0009 $00 black $09 blue
STD $FFB4 $FFB4 palette 5 $FFB5 palette 6
LDD #$243F $24 red $3f white
STD $FFB6 $FFB6 palette 6 $FFB7 palette 7
BRA START START normal start address of game
8. Disassemble the new code from STARTN insure the code is correct.
The BRA instruction may be converted to a LBRA this is not a
problem. Write down the address of the label STARTN this
is the new EXEC address of the game. If the code is added at
the end of the game, find the address after the BRA START and
write it down, this will be the new END address.
9. Save the game using the old START, the new EXEC, and the new END addresses.
Precautions.
When saving the game use a different name, the reason for this is twofold.
First if the game is patched wrong you still have a backup copy. Next
giving the game a new name such racer3 or marble3 allow you to find
the programs patched for the COCO 3 much easier.
If the program uses all address from $E00 to $7FFF this patch may not
work the first time. If the game hangs the machine you must find
another area in memory to use for the patch.
Although this method works fine with most games, it does not work on all
games, simply because some games setup the graphics mode differently.
By this I mean that the value for the graphics mode is not always a literal
value that is an immediate operand to a load instruction. It may
be load from a location in low memory such as page 0.
If you prefer other colors, the values stored at $FFB4-$FFB7 are
decode in the following manner:
BIT 7 6 5 4 3 2 1 0
0 0 R G B R G B Where RGB is RED, GREEN, AND BLUE hence $09 is blue.
Different combinations of these bits yield a total
of 64 different colors.
--
Gould, CSD, Home of the Firebreathers
The opinions expressed are my own.
...siesmo!gould!csantiago
...mcnc!rti-sel!gould!potpourri!kato