This machine language monitor owns the most standard commands together
with some interesting features taken from my C64
assembler and some commands to
do system calls easier.
All addresses and data bytes can be given in hex, decimal (with
preceding "."), octal (with preceding "&") or in binary (with
preceding "%"). The output of the commands M, B, R, D, G and C can
be piped to a file with "> filename", like in the shell.
X exits monitor (goes to shell)
D a b disassemble from address a to b
B a b binary list
M a b hex dump
R shows register contents
; a mnem
A a mnem assembles 6502 mnemonic to address a
+ pc ac xr yr sp sr
sets registers to a new value. a "-" instead of a
value leaves the register unchanged
E a b exchanges environment block a (the a'th MMU register) with
with memory block b
S "name" a b save memory from a (included) to b (not included)
in file "name". The first two bytes in the file are the
memory address
G a Goto address (executes a JSR)
L a b reads b bytes from STDIN and saves them at address a
L "name" a Load file "name" to address a or the included load
address if a is left out
C a b c Compare memory area from a to b with the area starting at c
T a b c Transfer (copy) memory from a to b to the address c
O a b c Occupy (fill) memory from a to b with c
P a b c sets system parameter: a becomes the standard drive (for
load/save), b is the number of bytes printed in a line
with hex dump and c becomes the number of available
memory blocks (a 4kByte) for this task. A "-" leaves the
value unchanged.
U a b c d e change in the memory area from a to b all three byte
assembler opcode addresses pointing to the area between
c and d to the area starting at e
I a b c ...
, a b c ... writes bytes b, c, ... into the memory at address a
F a b string tries to Find the string (which is mixed from bytes,
separated by spaces and strings, enclosed in double quotes)
in the address area from a to b
FA a b addressing
search all assembler codes in memory from a to b, that have
the given addressing mode: "FA a b (**AB)" means to search
all absolute indirect addressing modes with low byte
equal to $AB
FR a b search for relative jumps
F- a b c search in memory from a to b for bytes that are not equal to c
YD a b c DEVCMD with device a, command b and parameter c
YM GETMEM
YF a FREMEM memory block a
YS GETSTR
YR a FRESTR stream a
YE GETENV
YP adr env stdin stdout stderr
FORK
YW sem PSEM
YV sem VSEM
YG a tries to get memory block a with GETBLK
YC d:mask show directory
Memory Map
The shell and the monitor both use the zeropage addresses
from 64-128 ($40-$80) and memory addresses from 768-1024 ($300-$400).
In addition to this, of course the stack ($0100-$01ff) and the PCBUF
Send buffer ($0200-$02ff) are being used.