3/1/1999 CodeBuster by Tom Wells (C)1984 This zip file contains CodeBuster and it's help file in an ATR file. The ATR file contains DOS 2.0 and a menu. The help file has been converted and is also presented here in this file so you can read it a bit easier. I wrote CodeBuster in 1984. It is a disassembler, memory scanning, executable probing, sector reading, file reading and writing tool. It will disassembler a load module and optionally create labels for the jumps and branches. I am presenting it here for hysterical purposes (funny history). I had a lot of fun writing it and using it. A friend of mine put it on Compuserve years ago but it didn't get downloaded much. As my friend said "This means that Codebuster isn't really much of a videogame." Here is the text of the help file as it was written way back then: Codebuster is a delightful tool for the experienced ATARI hacker. It is a disassembler that will load any DOS file into a buffer and display the contents as ASCII, hex, or 6502 instructions. It will write out this same file as a binary load file. More than one file may be loaded into the buffer and then rewritten out as one combined file. It will read boot files, but it won't write out boot files. Press RETURN to go on to the next page or enter a 'Q' to exit HELP. The next few screens contain the formats of the commands available in this program. All of the commands are entered through the standard OS input routines and thus must be followed by pressing the RETURN key. The commands are entered as single characters followed by the required and/or optional positional parameters. All addresses must be entered in hex (hhhh). All other numbers will be in decimal (dddd). Codebuster does not check for valid hex or decimal numbers. Here are all the commands available: Attach, Boot, Change, Display, Enter, Find, Help, List, Memory, Open, Read, Send, Unopen, Virtual, Write, eXit, Zero, %labels, @compress, -=+lister options, Get Put Place holders * , - Filenames do not need the "D:". Attach labels to the disassembly. A This will turn on the label attaching logic. Entering the command a second time will turn it off. However the labels must first be Entered. Read the Boot file. B dddd The decimal number is the max number of sectors to load. If none is specified all the sectors in the boot file will be loaded. Change memory C hhhh hhhhhhhhhhhhhhhhhhhhhhh or C hhhh 'abScefgh...' Change the contents of memory at hhhh to the hex string or the ASCII string. Remember you will be changing a virtual address which should relate to a section of code in the code buffer. You can change memory anywhere in the machine so be careful. Using a place holder in the address will change memory at the last found address. Display the contents of memory. D hhhh dddd Display memory at address hhhh for the next dddd bytes. This will be a virtual memory address unless a V is entered to turn off virtual addressing. If only a 'D' is entered the next default number of bytes will be displayed. A place holder may be used for the address to change the default number of bytes without changing the address. Enter the label file. E filename.ext Enter the standard named DOS file to be used to build a table for the label attacher. Each entry must have a $ to start the hex value. LABEL = $hhhh ;comments or LABEL EQU $hhhh ;comments The labels will be placed at the end of the program moving the user code buffer up in memory. If you were looking at some code it will be over- written and the virtual addressing will be incorrect. Find a string F (F,A) hhhhhhhhhhhhhhhhhhhh or F (F,A) 'abcdefghij The second F tells codebuster to find the first occurance in the code buffer. If it is not specified the next occurance will be searched for. The A requests codebuster to start at the front of the buffer and find ALL occurances of the string. When the end of the buffer is reached a message is printed and the find pointer is reset to the front of the buffer. Get sectors from the disk G hhhh dddd hhhh Get dddd sectors starting with sector hhhh (first hhhh) and put them at virtual address (second hhhh). If no address is given put sectors at bottom of code buffer. If no count of sectors is given get 1. If no sector is given get the first sector. List machine language code. L hhhh dddd List machine language code beginning at hex hhhh for the next dddd instructions. If the number of instructions is entered it becomes the new default. The standard default is a full screen (21). If only an 'L' is entered the next default number of instructions will be listed. A place holder may be used in the address field to change the default without changing the address. Display the Memory location and the size of the user code buffer. M This probably is of little use to you but it helped me during development and I didn't have the heart to take it out. Open the listing disk file. O filename.ext This is the file where all output can be sent with the Send command. The file must be opened before issuing a Display or List command with send pointing to the disk. Once it is open you may leave it open and Send the output to the screen or the disk. When you are done you must close (Unopen) the file before output can be sent to another file. Many other screen messages will go to this file like the boot file record and binary load file load ranges. Put sectors to the disk P hhhh dddd hhhh Put dddd sectors starting at sector hhhh (first hhhh) from the virtual address (second hhhh). If no address is given put sectors from the bottom of the code buffer. If no count of sectors is given put 1. If no sector is given put to the first sector. Read a binary load file into memory. R filename.ext As each block of binary load file is encountered the program will prompt you for a response. This allows you to skip, load, or concantenate certain portions of a binary file. A range that is loaded is placed at the bottom of the buffer. If you load a second load range it will overwrite the first and the virtual addressing will be set to that of the second load range. You may also concantenate a load range if it will fit in the buffer. A concantenated load range will be placed in the buffer according to the virtual address setting. For example if the front of the buffer was set to virtual address $5000 and you tried to concantenate a load range of $4000 Codebuster would not allow you to because that would place the load range below the buffer in the program area. The address could also be to high. That is beyond the top of free RAM. Send output to screen, printer, disk S D Send output to the open disk file. S P Send output to the printer. S S Send output to the screen only. This cancels Send printer and Send disk. Output can be sent to the printer and the disk at the same time. This entire help file may be printed by Sending it to the printer. Unopen the listing disk file. U This file must be closed in order to save anything written to it before leaving CODEBUSTER. If you leave with an eXit it will close this file for you, but if you just system reset the file will be lost. Sorry about the silly name. I needed the "C" for the change function. Set Virtual addressing. V hhhh If a "V" is entered by its self virtual addressing will be turned off and you will be looking at real addresses. If an address is entered the start of the code buffer can be referenced by the address you gave. It is like relocating code in memory. The program starts up with virtual turned off, or in real mode. Write binary file W filename.ext lo-addr hi-addr run-addr init-addr alt-addr This command will create a binary load file from the code buffer. You must specify the start and end of the block of memory to write. You may specify an alternate address (changing the virtual address will do the same thing). Either run and or init addresses may be specified. Place holding characters may be used on run-addr and init-addr. eXit the CODEBUSTER. X This will close the listing file and return you to DOS. Zero out the user code buffer. Z This will zero out all of the addresses specified in the Memory command. When looking at a section of code the zeros will help identify where the code ends. % invoke the internal label processor % filename.ext The input file is an assembly listing from CODEBUSTER. Create the file by Opening a listing file, listing some code and Unopening the listing file. Then give the label processor the file name The labeler will gather up all references and then verify which ones are internal and convert all internal addresses to labels. All undefined opcodes are converted to AMAC DB commands. @ Toggle the compress option @ This will place MEDIT tab characters in and shorten the the output from the labeler. It is a space saving feature. Lister options - list found address - 1 = list found address + display found address When "finding" ASCII or hex strings these options determine how to tell you where the string is. The addess may be displayed or listed. Listing minus one will allow you to see the instruction that is associated with immediate values or addresses in instructions. Listing or displaying the address found allows you to see ASCII strings or assembler instructions. This program is public domain and therefore free for the giving and getting. My best wishes to all fellow hackers. Don't forget - Who ya gonna call .... `````````````` ` ` ` CODEBUSTER ` ` ` ``````````````