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.