Hi forum,
can anybody suggest the easiest way to rip the multicor charset of a game? In particular I am interested in getting the sprites of demon attack.
Regards,
Reg
Ripping charset
Moderator: Moderators
- AndyH
- Vic 20 Afficionado
- Posts: 370
- Joined: Thu Jun 17, 2004 5:51 am
- Website: https://www.hewco.uk
- Location: UK
- Occupation: Developer
Re: Ripping charset
If you know the game is simply redefining the character set and using a regular character mode, you can examine the value in $9005 which will tell you where the programmer has placed their custom character set:
The addresses will be: $1000, $1400, $1800 or $1c00 based on the bits 3-0 in $9005 - 1100, 1101, 1110 or 1111 respectively.
Type the follow to save a region of memory to your local computer (assuming character memory starts at $1c00 and ends at $1e00, extend this end address if needed):
If the game is creating a bitmap from characters, then I guess the multi-colour data used to render on the character bitmap memory could be stored anywhere and you'd need to hunt around for them. Not sure if there are any tools that would help, not something I have much experience with on the Vic. I guess you could try adding watch points for the character memory to look for writes (store) to it and debug the code to work out what regions it is using when those breakpoint events are hit.
The addresses will be: $1000, $1400, $1800 or $1c00 based on the bits 3-0 in $9005 - 1100, 1101, 1110 or 1111 respectively.
Type the follow to save a region of memory to your local computer (assuming character memory starts at $1c00 and ends at $1e00, extend this end address if needed):
Code: Select all
s "charset.bin" 0 1c00 1e00
Code: Select all
Syntax: watch [load|store|exec] [address [address] [if <cond_expr>]]
Abbreviation: w
Set a watchpoint. If no address is given, the currently valid watch-
points are printed. If a single address is specified, set a watchpoint
for that address. If two addresses are specified, set a watchpoint
for the memory locations between the two addresses.
`load|store|exec' is either `load', `store' or `exec' (or any combina-
tion of these) to specify on which operation the monitor breaks. If
not specified, the monitor breaks on `load' and `store'.
Re: Ripping charset
In which emulator do I have to enter those commands?
- AndyH
- Vic 20 Afficionado
- Posts: 370
- Joined: Thu Jun 17, 2004 5:51 am
- Website: https://www.hewco.uk
- Location: UK
- Occupation: Developer
Re: Ripping charset
This is with VICE, the monitor can be brought up with either ALT+M or I think it is ALT+H on newer versions. You should find it on the menu also.
- Mike
- Herr VC
- Posts: 4856
- Joined: Wed Dec 01, 2004 1:57 pm
- Location: Munich, Germany
- Occupation: electrical engineer
Re: Ripping charset
A good tool is reading (parts of) the executable program into a display bitmap (like that of MINIGRAFIK). If the sprite definitions are stored there literally, it is quite easy to spot them by eye.AndyH wrote:Not sure if there are any tools that would help, not something I have much experience with on the Vic.
Demon Attack redefines most of the display also as screen bitmap, save for the logo at top, and the bottom ground below the cannon. The game draws the demons into the bitmap as hires objects. The demons are 'coloured' by the help of raster effects: inverse mode is used and the background colour is changed on every pixel line.If the game is creating a bitmap from characters, then I guess the multi-colour data used to render on the character bitmap memory could be stored anywhere and you'd need to hunt around for them.