------------------------------------------------------------------------------- ## ## ###### ####### ## ## ###### ###### ####### ## ## # ## # ## ## ## # ## # ## ####### ## ## ## ### ## ## ## ## ## ## # ## ###### ##### # ## ###### ####### ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ####### ## ## ## ## ## ## ## ------------------------------------------------------------------------------- MODULE "MICRO BUG EXTRA" (FINAL RELEASE) ------------------------------------------------------------------------------- AUTHOR: EINAR GATTONI SAUKAS ------------------------------------------------------------------------------- =============================================================================== INTRODUCTION ============ The operating module "EXTRA" for the MICRO BUG system is composed by a set of generic commands designed to extend the SGM system. I started to implement it in 1985 (soon after the original MICRO BUG project was released) but it was never finished and released, probably because I lost interest around 1986 due to getting involved with many other (mostly ZX Spectrum) projects... Later in December of 1996 two things happened: I was finally able to load the original MICRO BUG program from my tapes (after an entire day of attempts) and I found some of my lost hand-written listings of the implementation of this operating module. A few days before Xmas, I released on the internet a package called "tkpak001.zip" containing detailed information about the MICRO BUG system, and a preliminary version of "EXTRA" (with commands "S" and "U") as a practical example of how to write a new operating module for MICRO BUG. Afterwards I forgot about everything for a very long time, until August 2023 when I unexpectedly found the remaining of my lost hand-written listings! Now I'm finally releasing this project as originally intended, by taking the latest version of each routine from my old notes, typing them again, testing and documenting everything. Enjoy it! =============================================================================== COMMANDS ======== ------------------------------------------------------------------------------- "S [address][,step]" - Display memory sums ------------------------------------------------------------------------------- Display a sequence of memory blocks sums calculated at regular intervals (parameter "step"). It's useful to check data blocks after typing them from a printed listing. This command is equivalent to "P address,address+step]" except it scrolls up/down and supports SHIFT-A to display sums in hex/dec format. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- "T start,end,cc,dd" - Replace byte code within memory area ------------------------------------------------------------------------------- Search memory area between addresses "start" and "end", replacing any occurrence of byte code "cc" with byte code "dd", and displaying number of replaced bytes as result. Examples: T 1E00,2000,3F,3D - replace every character 'Z' with 'X' within a memory area T 1E00,2000,76,76 - count number of newlines within a memory area ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- "U [address]" - Display memory blocks with sums ------------------------------------------------------------------------------- Present the same output of original command "D" except showing also the sum from each row of 8 bytes. Most programs listed in magazine articles used this listing format to help readers to validate assembler blocks typed-in manually. It supports all control keys from command "D", also SHIFT-A to select sum format (hex/dec). ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- "V start,end" - Verify memory area saved on tape ------------------------------------------------------------------------------- Compare tape content with memory area between addresses "start" and "end", displaying result as either "OK" or "ERRO". Use SHIFT-F to select tape speed (normal=300 bps, high=1600 bps), SPACE to break. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- "W [address]" - Edit memory with CHR$ ------------------------------------------------------------------------------- Present the same output of original command "M" except showing also the memory content as character or token. It supports same control keys from command "M". ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- "X [address1,address2]" - Compare memory addresses to find next difference ------------------------------------------------------------------------------- Compare 2 memory areas starting at provided addresses, showing only mismatched addresses side-by-side. Press any key to see next difference, or BREAK to interrupt. If addresses are not provided, it will resume from last execution. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- "Y [start][,end][,pattern]" - Find pattern in memory area ------------------------------------------------------------------------------- Find the provided pattern within a certain memory area. The pattern can be a single byte or another memory area. If no pattern is provided, it will ask you afterwards to input a pattern directly as string. If no end address is provided, it will search from start address until end of memory. If no parameters are provided, it will resume last search. For each match found, it will display the address and first few bytes. Press any key to see next match, or BREAK to interrupt. Examples: Y 1E00 - Ask for string, then search for it starting at 1E00 Y 1E00,2000 - Ask for string, then search for it within memory area Y 1E00,2000,76 - Search for byte code 76 (newline) within memory area Y 1E00,2000,6E00,6E05 - Search for a sequence of 5 bytes within memory area ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- "Z start[,end][,pattern]" - Fill memory area with pattern ------------------------------------------------------------------------------- Fill a certain memory area with the provided pattern. The pattern can be a single byte or another memory area. If no pattern is provided, it will ask you afterwards to input a pattern directly as string. If no end address is provided, it will simply copy provided pattern to start address. The original pattern location may overlap the memory area to be filled. If the pattern is larger than memory area then it will be truncated, if smaller then it will be repeated as needed. As result, it will display the affected memory area size. Examples: Z 7000 - Ask for string, then store it starting at address 7000 Z 7000,7030 - Ask for string, then repeat it to fill a memory area Z 7000,7030,76 - Fill memory area with byte code 76 (newline) Z 7000,7030,6E00,6E10 - Fill memory area with copies of a smaller memory area Z 7000,7010,6E00,6E30 - Copy 16 bytes from 6E00 to 7000 (same as "O 6E00,6E10,7000") ------------------------------------------------------------------------------- Notes: - In case of commands that require the specification of a memory area (as "start,end"), the last byte (located at address "end") is not considered. - Symbols "[" and "]" indicate an optional parameter. If all parameters are ommited, the command will resume from last execution point (when allowed). =============================================================================== CONTROL KEYS ============ +-----------+-----------------------------+ | KEY | DESCRIPTION | +-----------+-----------------------------+ | "K" (+) | Forward | | "J" (-) | Backward | | SPACE | Break | | SHIFT-3 | Output format (hex/dec) | | SHIFT-4 | Output format (hex/token) | | SHIFT-E | Address format (hex/dec) | | SHIFT-S | Print speed (slow/fast) | | SHIFT-A | Sum format (hex/dec) | | SHIFT-D | Input format (hex/dec) | | SHIFT-F | Tape speed (slow/fast) | | SHIFT-9 | Graphics mode (on/off) | | SHIFT-Q | Clear screen | | SHIFT-1 | Reset to initial screen | | SHIFT-T | Copy screen to printer | +-----------+-----------------------------+ =============================================================================== THE END ===============================================================================