Discan v1.0 by MR. NOP
1. Enhanced instructions 2. Cheats 3. Virus Scanning 4. Technical Notes
1. Enhanced Instructions
This program checks an entire disk for a series of bytes, and allows you to change those bytes if found. This allows you to create game cheats, remove copy protection and to do virus scans. What makes this program useful is that it allows you to modify data in games that don't contain files. With files, it's easy to modify code and create trainer menus. When the data is hidden on sectors though, it's not as simple a process because you need to modify and then re-save the data back to disk.
Begin by entering the hex bytes to scan for, using the "E" option.
Remember that the program will scan for them in the order they are entered.
Example: $CE $00 $CC would translate into DEC $cc00 (not CC, 00, CE and not 00 ce cc).
There's a chance that one disk sector may contain more than one set of your hex codes. In this case a second scan would be necessary to find them, as the program only does a one-pass scan of a sector. For example, if you were searching for A9 00 (LDA #$00) and there were two instances of them within 256 bytes of one another, the program would only find the first.
When a search result is found, you receive a prompt as to whether you want to MODIFY the result or not. What this does is allows you to edit the sector to change the hex bytes you were searching for.
There are two ways presented to you to do this. The first is the most efficient method.
The sector is loaded and displayed on the screen at location $0680. You may then enter your machine language monitor and disassemble the code at $0680. This allows you to not only modify the bytes you searched for, but any other surrounding code. For example if you searched for CE 00 CC (DEC $cc00) looking for infinite lives, you could then disassemble the code as it is displayed on the screen, NOP out the decrement and make changes to any of the code before, or after, the decrement. This is basically the same process you'd go through if the data was in the form of a loadable file, except in this case it's screen RAM you're modifying.
Press S when you've finished modifying the code at $0680 to save the changes.
The second way to modify the data is to press 'I' to manually input hex codes once a match has been found. If you don't have a machine language monitor cartridge (or emulator) and/or you have limited machine language programming knowledge, this would be the preferred method. As long as you know what the old and new hex codes are, you can train the game without any machine language knowledge.
By pressing 'I' after answering yes to the MODIFY prompt, you can now enter in up to ten hex codes. These codes are placed OVER TOP of the old hex.
As an example if you searched for CE 00 CE and the actual code in the sector was: DEC $CE00 LDA $CE00 BEQ $4000
You could enter in three EA's (NOP), or you could enter in just one A9 to change the DEC to a LDA. The three NOP's or the A9 are placed where the DEC $CE00 begins.
This would create infinite lives if location $CE00 held your life value.
I'll say this again - whatever bytes you search for on a sector, if you choose to manually input the hex codes to overwrite the bytes of your search, they go immediately over top of the old bytes.
So if your intention was to leave the DEC $CE00 intact and change the LDA $ce00, you could not do this using the 'I' method. This is because any bytes you input would begin to overwrite the DEC $ce00 code. The bytes you search for are the bytes you replace, when using the 'I' option. The manual input is meant for beginners who want to cheat on games, but may not necessarily know machine language.
You don't need to enter in as many overwrite bytes as you searched for. That is, if you searched for CE 00 CC you can enter in just one value ($A9 for example).
If you want to modify data other than the bytes you've searched for, obviously the first method of disassembling and modifying the screen RAM at $0680 is best.
Regardless of what method you use, you are then presented with an option to save or discard the changes.
I hope that this hasn't confused you.
To summarize: this program accepts up to eight hexadecimal bytes which it will then scan an entire disk for. Should those bytes be found, in the proper order as they were entered, you can then modify those bytes. This is a way of removing copy protection, creating infinite lives and energy, etc.
There are two ways to change data. You can modify the code beginning at $0680 which is where all the sector data is displayed on screen. This allows you to change any of the 256 bytes. You can also enter in manually up to ten hex values, which is suited more to people with little or no machine language knowledge. You can enter in up to 10 hex values or as little as one.
2. Cheats
SKYFOX II =========
Infinite Bombs
Download Skyfox II from Gamebae (gb64.com)
Press E to enter in the following bytes: AD 89 3D These will be found on Track 16, Sector 16.
Debug $0680 to replace the bytes with the following, OR press I to input in the following bytes (then press return): A9 63 EA
Axis Assassin ============= Use the copy from Gamebase64
Infinite Lives
Press E to enter in the following bytes: CE A6 6D These will be found on Track 13, Sector 12
Debug $0680 to change the DEC $6da6 to LDA $6DA6 or press I to input the following byte: AD
Heart of Africa =============== Download from Gamebase64
The hex bytes are: 8C DD 91 8D DE 91
These aren't found on the disk which means the game could be compressed or encrypted. The code is at $1e3B and you'll change the STY and STA to LDA for infinite money.
Saracen =======
Search for bytes E9 01 8D 2F B0
They will be found on track 15
There are however, TWO sets of these bytes on the SAME sector. For this reason you will need to dissassemble the code at $0680 and manually change the two sets of E9 01 to an E9 00. If you use the manual hex entry method where you type in the replacement hex codes at the bottom of the screen, you'll need to (A)bort the scan after it reaches track 16, and scan track 15 again to get both sets of values.
Apache Strike =============
Although the bytes aren't found using the program (encrypted? packed?) you can use a cartridge to search for bytes: AD E5 0D 38 E9 01
Change the E9 01 to E9 00 for infinite lives
Rush'n Attack (Green Beret US Version) ======================================
Search for bytes: CE B3 03 on track 15 Change to: AD B3 03
Ultima 1 =========
Ultima 1 can be trained but I found that the game wouldn't load after modifying the disk.
For infinite HITS, use a monitor and look for: ED C1 81 8D change the 8D to an AD
For infinite food look for: CE 5B 82 18 and change the CE to an AD
Life Force =========== This is the US version of Salamander.
Infinite lives - search for C6 F5 10 1C and replace C6 with A5 You'll need to search track 6, sector 12, track 13 sector 2, and track 29 sector 16.
3. Virus Scanning
This program began as a project to scan for viruses but was changed along the way. I felt it would be more prudent to scan files rather than sectors when looking for viruses. However this program can certainly be used to check if you have any virus' on your disk.
There is a potential for false positives if the bytes are used in legitimate programs.
Here are the bytes to scan for:
HIV Virus: B9 FD 07 20 DD ED C8 D0 HIV 2 Virus: B9 FD 07 20 DD ED C8 CA Starfire: BD FB 08 9D 00 CE E8 D0 Bit Addict Virus: B9 FD 07 20 DD ED C8 CA
If the Bit Addict virus is found, you can remove it this way: - load the infected program, do not run it. - enter your monitor and set location 1 to 35 hex or type BANK 0 in CCS emulator - type T 0900 FFFF 0802 - you're done. Find the end of memory and save program to disk.
4. Technical Notes ===========
This program has been tested only on an emulator with the 1541/1541-II. It hasn't been tested on a real C64. I've noticed one bug, which is the scan will sometimes crash for no apparent reason. Other times it will run an entire disk without issue. I suspect it's something to do with the kernel code being used to read the sectors.
Feel free to examine it and let me know if there's an improvement for it.
Also, there's no current way to undo the changes made to your disk. So should you decide to train your only copy of a game, it would be nice to be able to undo that cheat. This is possible by reversing the search process and searching for the trained code. Ideally a file could be saved to an external disk which would allow you to undo the changes at a later time. For this release, I'm not going to implement such a feature. If people find this program useful then certainly I would be willing to update it.
|
Data |
System | Commodore 64 |
Size | 4.15 KB |
Website |
Download |
|