• Please review our updated Terms and Rules here

REV 0 Altair 8800 stock, SERIAL NO. 221876K

I dump the 1K RMON V1.0 Monitor content from MITS Turnkey board to screen use command "D".

The starting address of this weird RMON V1.0 Monitor is C000 (hex), can anyone figure out the full future of this RMON V1.0 Monitor??????

C000 ~ C3FF of RMON V1.0 Monitor:

=DC000

C000 31 FF C7 3E 03 D3 02 3E 15 D3 02 21 53 C0 CD 48
C010 C0 CD 05 C2 FE 44 CA 97 C2 FE 4D CA 66 C2 FE 46
C020 CA C0 C2 FE 47 CA 5E C2 FE 42 CA 72 C0 FE 54 CA
C030 0F C3 FE 4C CA D0 C3 FE 53 CA D4 C3 21 5F C0 CD
C040 48 C0 21 5C C0 C3 0E C0 4E CD 0C C1 79 07 D8 23
C050 C3 48 C0 52 4D 4F 4E 20 56 31 2E 30 0D 0A BD 2D
C060 2D 43 4F 4D 4D 41 4E 44 20 45 52 52 4F D2 44 49
C070 53 CB CD 2A C2 04 C2 3C C0 7D 21 00 00 FE 0B C2
C080 84 C0 26 40 22 00 C4 3E 01 32 02 C4 21 00 10 22
C090 05 C4 CD AA C1 06 81 CD 78 C1 06 15 CD 78 C1 CD
C0A0 B6 C1 CA 00 10 C3 D3 C0 E5 CD AA C1 CD 1F C1 CD
C0B0 19 C1 E1 C5 D5 E5 4A CD 27 C1 22 05 C4 7B 3C C2
C0C0 C8 C0 CD DA C1 C3 C8 C0 CD B6 C1 FE 00 CA DF C0
C0D0 31 FF C7 21 6E C0 CD 48 C0 21 67 C0 C3 3F C0 E1
C0E0 11 80 00 19 D1 C1 05 C8 14 7A FE 1B DA B3 C0 16
C0F0 01 0C C5 CD 19 C1 C1 C3 B3 C0 DB 02 E6 01 CA FA


=DC100

C100 C0 DB 03 E6 7F FE 03 CA 00 C0 C9 4F DB 02 E6 02
C110 CA 0C C1 79 D3 03 C9 0E 00 79 32 00 C4 C9 79 E6
C120 01 0F 0F 32 01 C4 C9 79 32 02 C4 C9 69 60 22 05
C130 C4 C9 11 00 C4 21 04 C4 1A BE C2 53 C1 2B 13 1A
C140 BE C2 57 C1 7E 2B B6 06 21 CD 79 C1 2A 05 C4 0E
C150 80 97 C9 77 2B 13 1A 77 3C 06 21 CD 79 C1 23 7E
C160 A7 CA 73 C1 06 11 CD 79 C1 06 09 CD 78 C1 2B CA
C170 44 C1 C9 06 0D C3 6B C1 97 D3 C1 78 D3 C0 97 D3
C180 C0 D3 C1 DB C0 0F DA 83 C1 E6 14 C9 C3 B8 C1 15
C190 CA B1 C1 06 0B CD 78 C1 21 01 C4 7E 3C 06 21 CD
C1A0 79 C1 06 0D CD 78 C1 C2 8F C1 21 FF FF 22 03 C4
C1B0 C9 F1 3E 01 A7 C9 16 0A CD 32 C1 C2 D4 C1 06 03
C1C0 CD 79 C1 C2 D4 C1 3E 40 D3 C0 DB C0 77 23 0D C2
C1D0 CA C1 97 C9 CD 8F C1 C3 B8 C1 16 05 CD 32 C1 C2
C1E0 FF C1 3E 30 D3 C0 7E D3 C1 23 0D C2 E6 C1 97 D3
C1F0 C0 06 05 CD 78 C1 C2 FF C1 06 07 CD 78 C1 C8 CD


=DC200

C200 8F C1 C3 DC C1 CD FA C0 4F C3 0C C1 CD 52 C2 CD
C210 13 C2 65 7C 07 07 07 07 CD 1C C2 7C E6 0F C6 30
C220 FE 3A DA 0B C1 C6 07 C3 0B C1 21 00 00 54 44 CD
C230 05 C2 FE 0D CA 57 C2 D6 30 D8 FE 0A DA 47 C2 FE
C240 11 D8 D6 07 FE 10 D0 29 29 29 29 B5 6F 16 FF C3
C250 2F C2 0E 0D CD 0C C1 0E 0A 06 FF C3 0C C1 CD 2A
C260 C2 04 C2 3C C0 E9 CD 2A C2 22 07 C4 CD 0F C2 0E
C270 20 CD 0C C1 2A 07 C4 66 CD 13 C2 0E 20 CD 0C C1
C280 CD 2A C2 04 C2 42 C0 14 7D 2A 07 C4 C2 90 C2 77
C290 23 22 07 C4 C3 6C C2 CD 2A C2 22 07 C4 CD 0C C2
C2A0 2A 07 C4 0E 20 CD 0C C1 66 CD 13 C2 2A 07 C4 23
C2B0 22 07 C4 7D A7 CA 42 C0 E6 0F C2 A3 C2 C3 9D C2
C2C0 CD D7 C2 79 FE 2C C2 3C C0 CD 2A C2 04 C2 3C C0
C2D0 4D CD FF C2 C3 42 C0 CD 2A C2 79 FE 2C C2 3C C0
C2E0 22 07 C4 CD 2A C2 EB 2A 07 C4 7B 95 5F 7A 94 57
C2F0 DA 3C C0 EB 22 09 C4 7D B4 CA 3C C0 C9 0E 00 2A


=DC300

C300 09 C4 EB 2A 07 C4 71 23 1B 7A B3 C2 06 C3 C9 CD
C310 D7 C2 04 C2 3C C0 CD FD C2 41 21 44 C3 22 0B C4
C320 48 2A 0B C4 46 23 7D FE 66 C2 34 C3 C5 CD 79 C3
C330 C1 21 44 C3 22 0B C4 2A 09 C4 EB 2A 07 C4 CD 66
C340 C3 C3 20 C3 01 00 02 00 04 00 08 00 10 00 20 00
C350 40 00 80 00 FF FE FF FD FF FB FF F7 FF EF FF DF
C360 FF BF FF 7F FF 00 7E B9 C4 86 C3 70 7E B8 C4 91
C370 C3 23 1B 7A B3 C2 66 C3 C9 0E 2C C3 0C C1 EB E3
C380 D5 F5 C5 F5 D5 E9 C5 41 CD 7E C3 21 BB C3 C3 98
C390 C3 C5 CD 7E C3 21 BF C3 CD 48 C0 21 C4 C3 CD 48
C3A0 C0 E1 CD 0F C2 CD 79 C3 E1 CD 13 C2 CD 79 C3 E1
C3B0 CD 13 C2 CD 52 C2 F1 E1 D1 C1 C9 52 45 41 C4 57
C3C0 52 49 54 C5 20 45 52 52 4F 52 20 4C 4F 43 4E AE
C3D0 97 C3 D6 C3 3E FF F5 CD D7 C2 29 44 04 C5 CD 2A
C3E0 C2 55 C1 4C 2A 07 C4 F1 5F 97 CD A8 C0 C3 42 C0
C3F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 
Looks like the command set is:

D (dump)
M (modify memory?)
F (fill memory?)
G (go to address and execute)
B
T
L
S

RAM is required from C400-C7FF. I'll have to do more digging to figure out what the commands really do.

Mike
 
Hi All;
Leiy, Decoding line C050, starting at location 4, it reads RMON V1.0.. Which agrees with what You already know..
So I would copy it and Run it, in the Altair Simulator, which also might have a Dis-Assembler for it as well..
It could be hand Dis-Assembled, which I have done on other Stuff that I have.. But, letting the machine do it for You, puts You somewhat ahead, of Hand Dis-assembly, and from there, taking any thing that doesn't make sense code wise, see if it makes sense turning it into ASCII characters.. That should tell You What possible Key Strokes, jump to what Routines.. Which after Dis-assembly then point to what the code actually Does, for each Key Stroke..
While I was typing my posting Deramp gave You most of the Answer.. It looks very Similar to What Grant had in His Modified Monitor Program.. If it is the same, then
D is for Dumping
M is for Changing Memory
F is filling memory Location with a value
G is like a Jump to a location..
Its been awhile, so I am not sure of M and F and what is the difference, also when using this Monitor Your Entries have to be in CAPS..

THANK YOU Marty
 
Last edited:
Thanks for all help.

I believe there has a disk loader in the RMON V1.0 monitor.

The turnkey board original paired with an s-100 Interface board, I will paste image latter.
 
I disassembled your monitor:
Code:
				;
				;	Disassembled by:
				;		DASMx object code disassembler
				;		(c) Copyright 1996-2003   Conquest Consultants
				;		Version 1.40 (Oct 18 2003)
				;
				;	File:		monitor.bin
				;
				;	Size:		1024 bytes
				;	Checksum:	023E
				;	CRC-32:		ADCADC8C
				;
				;	Date:		Fri Feb 13 15:37:49 2015
				;
				;	CPU:		Intel 8080 (MCS-80/85 family)
				;
				;
				;
					org	0C000H
				;
C000				LC000:
C000 : 31 FF C7		"1  "		lxi	sp,0C7FFH	;set SP to C7FF
C003 : 3E 03		"> "		mvi	a,003H		;set up uart
C005 : D3 02		"  "		out	002H
C007 : 3E 15		"> "		mvi	a,015H
C009 : D3 02		"  "		out	002H
C00B : 21 53 C0		"!S "		lxi	h,0C053H	;address of welcome message
C00E				LC00E:
C00E : CD 48 C0		" H "		call	LC048		;output string
C011 : CD 05 C2		"   "		call	LC205		;get and echo a char
C014 : FE 44		" D"		cpi	044H		
C016 : CA 97 C2		"   "		jz	LC297		;process D command
C019 : FE 4D		" M"		cpi	04DH		
C01B : CA 66 C2		" f "		jz	LC266		;process M command
C01E : FE 46		" F"		cpi	046H		
C020 : CA C0 C2		"   "		jz	LC2C0		;process F command
C023 : FE 47		" G"		cpi	047H		
C025 : CA 5E C2		" ^ "		jz	LC25E		;process G command
C028 : FE 42		" B"		cpi	042H		
C02A : CA 72 C0		" r "		jz	LC072		;process B command
C02D : FE 54		" T"		cpi	054H		
C02F : CA 0F C3		"   "		jz	LC30F		;process T command
C032 : FE 4C		" L"		cpi	04CH		
C034 : CA D0 C3		"   "		jz	LC3D0		;process L command
C037 : FE 53		" S"		cpi	053H		
C039 : CA D4 C3		"   "		jz	LC3D4		;process S command
C03C				LC03C:
C03C : 21 5F C0		"!_ "		lxi	h,0C05FH	;address of error message
C03F				LC03F:
C03F : CD 48 C0		" H "		call	LC048		;output string
C042				LC042:
C042 : 21 5C C0		"!\ "		lxi	h,0C05CH	;address of cr/lf
C045 : C3 0E C0		"   "		jmp	LC00E		;back to input loop
				;
C048				LC048:				;output string at m terminated by bit 7 set
C048 : 4E		"N"		mov	c,m		
C049 : CD 0C C1		"   "		call	LC10C		;output a char	
C04C : 79		"y"		mov	a,c
C04D : 07		" "		rlc
C04E : D8		" "		rc			;return if high bit set
C04F : 23		"#"		inx	h
C050 : C3 48 C0		" H "		jmp	LC048
				;
C053 : 52 4D 4F 4E	"RMON"		db	052H, 04DH, 04FH, 04EH
C057 : 20 56 31 2E	" V1."		db	020H, 056H, 031H, 02EH
C05B : 30 0D 0A BD	"0   "		db	030H, 00DH, 00AH, 0BDH
C05F : 2D 2D 43 4F	"--CO"		db	02DH, 02DH, 043H, 04FH
C063 : 4D 4D 41 4E	"MMAN"		db	04DH, 04DH, 041H, 04EH
C067 : 44 20 45 52	"D ER"		db	044H, 020H, 045H, 052H
C06B : 52 4F D2 44	"RO D"		db	052H, 04FH, 0D2H, 044H
C06F : 49 53 CB		"IS "		db	049H, 053H, 0CBH
				;
C072				LC072:					;B command
C072 : CD 2A C2		" * "		call	LC22A
C075 : 04		" "		inr	b
C076 : C2 3C C0		" < "		jnz	LC03C
C079 : 7D		"}"		mov	a,l
C07A : 21 00 00		"!  "		lxi	h,00000H
C07D : FE 0B		"  "		cpi	00BH
C07F : C2 84 C0		"   "		jnz	LC084
C082 : 26 40		"&@"		mvi	h,040H
C084				LC084:
C084 : 22 00 C4		""  "		shld	XC400
C087 : 3E 01		"> "		mvi	a,001H
C089 : 32 02 C4		"2  "		sta	XC402
C08C : 21 00 10		"!  "		lxi	h,01000H
C08F : 22 05 C4		""  "		shld	XC405
C092 : CD AA C1		"   "		call	LC1AA
C095 : 06 81		"  "		mvi	b,081H
C097 : CD 78 C1		" x "		call	LC178
C09A : 06 15		"  "		mvi	b,015H
C09C : CD 78 C1		" x "		call	LC178
C09F : CD B6 C1		"   "		call	LC1B6
C0A2 : CA 00 10		"   "		jz	L1000
C0A5 : C3 D3 C0		"   "		jmp	LC0D3
				;
C0A8				LC0A8:
C0A8 : E5		" "		push	h
C0A9 : CD AA C1		"   "		call	LC1AA
C0AC : CD 1F C1		"   "		call	LC11F
C0AF : CD 19 C1		"   "		call	LC119
C0B2 : E1		" "		pop	h
C0B3				LC0B3:
C0B3 : C5		" "		push	b
C0B4 : D5		" "		push	d
C0B5 : E5		" "		push	h
C0B6 : 4A		"J"		mov	c,d
C0B7 : CD 27 C1		" ' "		call	LC127
C0BA : 22 05 C4		""  "		shld	XC405
C0BD : 7B		"{"		mov	a,e
C0BE : 3C		"<"		inr	a
C0BF : C2 C8 C0		"   "		jnz	LC0C8
C0C2 : CD DA C1		"   "		call	LC1DA
C0C5 : C3 C8 C0		"   "		jmp	LC0C8
				;
C0C8				LC0C8:
C0C8 : CD B6 C1		"   "		call	LC1B6
C0CB : FE 00		"  "		cpi	000H
C0CD : CA DF C0		"   "		jz	LC0DF
C0D0 : 31 FF C7		"1  "		lxi	sp,0C7FFH
C0D3				LC0D3:
C0D3 : 21 6E C0		"!n "		lxi	h,0C06EH
C0D6 : CD 48 C0		" H "		call	LC048
C0D9 : 21 67 C0		"!g "		lxi	h,0C067H
C0DC : C3 3F C0		" ? "		jmp	LC03F
				;
C0DF				LC0DF:
C0DF : E1		" "		pop	h
C0E0 : 11 80 00		"   "		lxi	d,00080H
C0E3 : 19		" "		dad	d
C0E4 : D1		" "		pop	d
C0E5 : C1		" "		pop	b
C0E6 : 05		" "		dcr	b
C0E7 : C8		" "		rz
C0E8 : 14		" "		inr	d
C0E9 : 7A		"z"		mov	a,d
C0EA : FE 1B		"  "		cpi	01BH
C0EC : DA B3 C0		"   "		jc	LC0B3
C0EF : 16 01		"  "		mvi	d,001H
C0F1 : 0C		" "		inr	c
C0F2 : C5		" "		push	b
C0F3 : CD 19 C1		"   "		call	LC119
C0F6 : C1		" "		pop	b
C0F7 : C3 B3 C0		"   "		jmp	LC0B3
				;
C0FA				LC0FA:				;return a char in a
C0FA : DB 02		"  "		in	002H		;wait for uart ready
C0FC : E6 01		"  "		ani	001H
C0FE : CA FA C0		"   "		jz	LC0FA
C101 : DB 03		"  "		in	003H		;get char
C103 : E6 7F		"  "		ani	07FH
C105 : FE 03		"  "		cpi	003H		;control c?
C107 : CA 00 C0		"   "		jz	LC000		;if so, restart
C10A : C9		" "		ret
				;
C10B				LC10B:				;output char in a
C10B : 4F		"O"		mov	c,a
C10C				LC10C:				;output char in c
C10C : DB 02		"  "		in	002H
C10E : E6 02		"  "		ani	002H
C110 : CA 0C C1		"   "		jz	LC10C
C113 : 79		"y"		mov	a,c
C114 : D3 03		"  "		out	003H
C116 : C9		" "		ret
				;
C117 : 0E 00		"  "		db	00EH, 000H
				;
C119				LC119:
C119 : 79		"y"		mov	a,c
C11A : 32 00 C4		"2  "		sta	XC400
C11D : C9		" "		ret
				;
C11E : 79		"y"		db	079H
				;
C11F				LC11F:
C11F : E6 01		"  "		ani	001H
C121 : 0F		" "		rrc
C122 : 0F		" "		rrc
C123 : 32 01 C4		"2  "		sta	XC401
C126 : C9		" "		ret
				;
C127				LC127:
C127 : 79		"y"		mov	a,c
C128 : 32 02 C4		"2  "		sta	XC402
C12B : C9		" "		ret
				;
C12C : 69 60 22 05	"i`" "		db	069H, 060H, 022H, 005H
C130 : C4 C9		"  "		db	0C4H, 0C9H
				;
C132				LC132:
C132 : 11 00 C4		"   "		lxi	d,XC400
C135 : 21 04 C4		"!  "		lxi	h,0C404H
C138 : 1A		" "		ldax	d
C139 : BE		" "		cmp	m
C13A : C2 53 C1		" S "		jnz	LC153
C13D : 2B		"+"		dcx	h
C13E : 13		" "		inx	d
C13F : 1A		" "		ldax	d
C140 : BE		" "		cmp	m
C141 : C2 57 C1		" W "		jnz	LC157
C144				LC144:
C144 : 7E		"~"		mov	a,m
C145 : 2B		"+"		dcx	h
C146 : B6		" "		ora	m
C147 : 06 21		" !"		mvi	b,021H
C149 : CD 79 C1		" y "		call	LC179
C14C : 2A 05 C4		"*  "		lhld	XC405
C14F : 0E 80		"  "		mvi	c,080H
C151 : 97		" "		sub	a
C152 : C9		" "		ret
				;
C153				LC153:
C153 : 77		"w"		mov	m,a
C154 : 2B		"+"		dcx	h
C155 : 13		" "		inx	d
C156 : 1A		" "		ldax	d
C157				LC157:
C157 : 77		"w"		mov	m,a
C158 : 3C		"<"		inr	a
C159 : 06 21		" !"		mvi	b,021H
C15B : CD 79 C1		" y "		call	LC179
C15E : 23		"#"		inx	h
C15F : 7E		"~"		mov	a,m
C160 : A7		" "		ana	a
C161 : CA 73 C1		" s "		jz	LC173
C164 : 06 11		"  "		mvi	b,011H
C166 : CD 79 C1		" y "		call	LC179
C169 : 06 09		"  "		mvi	b,009H
C16B				LC16B:
C16B : CD 78 C1		" x "		call	LC178
C16E : 2B		"+"		dcx	h
C16F : CA 44 C1		" D "		jz	LC144
C172 : C9		" "		ret
				;
C173				LC173:
C173 : 06 0D		"  "		mvi	b,00DH
C175 : C3 6B C1		" k "		jmp	LC16B
				;
C178				LC178:
C178 : 97		" "		sub	a
C179				LC179:
C179 : D3 C1		"  "			0C1H
C17B : 78		"x"		mov	a,b
C17C : D3 C0		"  "		out	0C0H
C17E : 97		" "		sub	a
C17F : D3 C0		"  "		out	0C0H
C181 : D3 C1		"  "		out	0C1H
C183				LC183:
C183 : DB C0		"  "		in	0C0H
C185 : 0F		" "		rrc
C186 : DA 83 C1		"   "		jc	LC183
C189 : E6 14		"  "		ani	014H
C18B : C9		" "		ret
				;
C18C : C3 B8 C1		"   "		db	0C3H, 0B8H, 0C1H
				;
C18F				LC18F:
C18F : 15		" "		dcr	d
C190 : CA B1 C1		"   "		jz	LC1B1
C193 : 06 0B		"  "		mvi	b,00BH
C195 : CD 78 C1		" x "		call	LC178
C198 : 21 01 C4		"!  "		lxi	h,XC401
C19B : 7E		"~"		mov	a,m
C19C : 3C		"<"		inr	a
C19D : 06 21		" !"		mvi	b,021H
C19F : CD 79 C1		" y "		call	LC179
C1A2 : 06 0D		"  "		mvi	b,00DH
C1A4 : CD 78 C1		" x "		call	LC178
C1A7 : C2 8F C1		"   "		jnz	LC18F
C1AA				LC1AA:
C1AA : 21 FF FF		"!  "		lxi	h,0FFFFH
C1AD : 22 03 C4		""  "		shld	XC403
C1B0 : C9		" "		ret
				;
C1B1				LC1B1:
C1B1 : F1		" "		pop	psw
C1B2 : 3E 01		"> "		mvi	a,001H
C1B4 : A7		" "		ana	a
C1B5 : C9		" "		ret
				;
C1B6				LC1B6:
C1B6 : 16 0A		"  "		mvi	d,00AH
C1B8				LC1B8:
C1B8 : CD 32 C1		" 2 "		call	LC132
C1BB : C2 D4 C1		"   "		jnz	LC1D4
C1BE : 06 03		"  "		mvi	b,003H
C1C0 : CD 79 C1		" y "		call	LC179
C1C3 : C2 D4 C1		"   "		jnz	LC1D4
C1C6 : 3E 40		">@"		mvi	a,040H
C1C8 : D3 C0		"  "		out	0C0H
C1CA				LC1CA:
C1CA : DB C0		"  "		in	0C0H
C1CC : 77		"w"		mov	m,a
C1CD : 23		"#"		inx	h
C1CE : 0D		" "		dcr	c
C1CF : C2 CA C1		"   "		jnz	LC1CA
C1D2 : 97		" "		sub	a
C1D3 : C9		" "		ret
				;
C1D4				LC1D4:
C1D4 : CD 8F C1		"   "		call	LC18F
C1D7 : C3 B8 C1		"   "		jmp	LC1B8
				;
C1DA				LC1DA:
C1DA : 16 05		"  "		mvi	d,005H
C1DC				LC1DC:
C1DC : CD 32 C1		" 2 "		call	LC132
C1DF : C2 FF C1		"   "		jnz	LC1FF
C1E2 : 3E 30		">0"		mvi	a,030H
C1E4 : D3 C0		"  "		out	0C0H
C1E6				LC1E6:
C1E6 : 7E		"~"		mov	a,m
C1E7 : D3 C1		"  "		out	0C1H
C1E9 : 23		"#"		inx	h
C1EA : 0D		" "		dcr	c
C1EB : C2 E6 C1		"   "		jnz	LC1E6
C1EE : 97		" "		sub	a
C1EF : D3 C0		"  "		out	0C0H
C1F1 : 06 05		"  "		mvi	b,005H
C1F3 : CD 78 C1		" x "		call	LC178
C1F6 : C2 FF C1		"   "		jnz	LC1FF
C1F9 : 06 07		"  "		mvi	b,007H
C1FB : CD 78 C1		" x "		call	LC178
C1FE : C8		" "		rz
C1FF				LC1FF:
C1FF : CD 8F C1		"   "		call	LC18F
C202 : C3 DC C1		"   "		jmp	LC1DC
				;
C205				LC205:				;input a char and echo it
C205 : CD FA C0		"   "		call	LC0FA		;input a char
C208 : 4F		"O"		mov	c,a
C209 : C3 0C C1		"   "		jmp	LC10C		;output char
				;
C20C				LC20C:
C20C : CD 52 C2		" R "		call	LC252		;output carriage return
C20F				LC20F:				;output m in hex
C20F : CD 13 C2		"   "		call	LC213		;output h in hex
C212 : 65		"e"		mov	h,l		;move l to h to output in hex
C213				LC213:				;output h in hex
C213 : 7C		"|"		mov	a,h		;mov h to a and rotate top 4 bits to bottom 4 bits
C214 : 07		" "		rlc
C215 : 07		" "		rlc
C216 : 07		" "		rlc
C217 : 07		" "		rlc
C218 : CD 1C C2		"   "		call	LC21C		;output 4 bits as hex (top 4)		
C21B : 7C		"|"		mov	a,h		;restore h to a
C21C				LC21C:				;output bottom 4 bits as hex char
C21C : E6 0F		"  "		ani	00FH
C21E : C6 30		" 0"		adi	030H
C220 : FE 3A		" :"		cpi	03AH
C222 : DA 0B C1		"   "		jc	LC10B
C225 : C6 07		"  "		adi	007H
C227 : C3 0B C1		"   "		jmp	LC10B
				;
C22A				LC22A:				;input hex digits into m
C22A : 21 00 00		"!  "		lxi	h,00000H	;zero h,l,d,b
C22D : 54		"T"		mov	d,h
C22E : 44		"D"		mov	b,h
C22F				LC22F:				;input hex digits into m
C22F : CD 05 C2		"   "		call	LC205		;input and echo a char
C232 : FE 0D		"  "		cpi	00DH		;carriage return?
C234 : CA 57 C2		" W "		jz	LC257		;yes
C237 : D6 30		" 0"		sui	030H		;subtract '0'
C239 : D8		" "		rc			;return if zero
C23A : FE 0A		"  "		cpi	00AH		;greater than '9'?
C23C : DA 47 C2		" G "		jc	LC247		;no
C23F : FE 11		"  "		cpi	011H		;greater than 'A'?
C241 : D8		" "		rc			;no, invalid char so return
C242 : D6 07		"  "		sui	007H		;subtract 7 to get top 4 bits
C244 : FE 10		"  "		cpi	010H		;greater than 'F'?
C246 : D0		" "		rnc			;yes, invalid char so return
C247				LC247:
C247 : 29		")"		dad	h		;shift m left by 4 bits
C248 : 29		")"		dad	h
C249 : 29		")"		dad	h
C24A : 29		")"		dad	h
C24B : B5		" "		ora	l		;set lower 4 bits to a
C24C : 6F		"o"		mov	l,a
C24D : 16 FF		"  "		mvi	d,0FFH		;set d to FF, flag a valid number
C24F : C3 2F C2		" / "		jmp	LC22F		;process next char
				;
C252				LC252:				;output carriage return				
C252 : 0E 0D		"  "		mvi	c,00DH		
C254 : CD 0C C1		"   "		call	LC10C
C257				LC257:
C257 : 0E 0A		"  "		mvi	c,00AH		;c gets line feed	
C259 : 06 FF		"  "		mvi	b,0FFH		;b gets FF on successful return
C25B : C3 0C C1		"   "		jmp	LC10C		;output line feed and return
				;
C25E				LC25E:				;G command - go to address
C25E : CD 2A C2		" * "		call	LC22A		;input hex digits into m
C261 : 04		" "		inr	b		;check if valid input
C262 : C2 3C C0		" < "		jnz	LC03C		;no, go back to command input loop
C265 : E9		" "		pchl			;yes, jump to it
				;
C266				LC266:				;M command
C266 : CD 2A C2		" * "		call	LC22A		;input hex digits into m
C269 : 22 07 C4		""  "		shld	XC407		;save m in C407
C26C				LC26C:
C26C : CD 0F C2		"   "		call	LC20F		;output m in hex		
C26F : 0E 20		"  "		mvi	c,020H		;output a space
C271 : CD 0C C1		"   "		call	LC10C
C274 : 2A 07 C4		"*  "		lhld	XC407		;restore m from C407		
C277 : 66		"f"		mov	h,m		;get the by in [m]
C278 : CD 13 C2		"   "		call	LC213		;output it
C27B : 0E 20		"  "		mvi	c,020H		;output a space
C27D : CD 0C C1		"   "		call	LC10C
C280 : CD 2A C2		" * "		call	LC22A		;input hex digits into m		
C283 : 04		" "		inr	b		;check b if successful
C284 : C2 42 C0		" B "		jnz	LC042		;no, return to command loop
C287 : 14		" "		inr	d		;increment d
C288 : 7D		"}"		mov	a,l		;save l
C289 : 2A 07 C4		"*  "		lhld	XC407		;restore m
C28C : C2 90 C2		"   "		jnz	LC290		;check d if successful
C28F : 77		"w"		mov	m,a		;yes, store l in [m]
C290				LC290:
C290 : 23		"#"		inx	h		;go to next byte
C291 : 22 07 C4		""  "		shld	XC407		;restore m
C294 : C3 6C C2		" l "		jmp	LC26C		loop to next address
				;
C297				LC297:				;D command - output a page of memory in hex
C297 : CD 2A C2		" * "		call	LC22A		;get hex digits into m
C29A : 22 07 C4		""  "		shld	XC407		;save in C407
C29D				LC29D:
C29D : CD 0C C2		"   "		call	LC20C		;output m in hex
C2A0 : 2A 07 C4		"*  "		lhld	XC407		;restore m from C407
C2A3				LC2A3:
C2A3 : 0E 20		"  "		mvi	c,020H		;output a space
C2A5 : CD 0C C1		"   "		call	LC10C
C2A8 : 66		"f"		mov	h,m		;get the byte in [m]
C2A9 : CD 13 C2		"   "		call	LC213		;output it
C2AC : 2A 07 C4		"*  "		lhld	XC407		;restore m from C407
C2AF : 23		"#"		inx	h		;go to next byte
C2B0 : 22 07 C4		""  "		shld	XC407		;save m
C2B3 : 7D		"}"		mov	a,l		;check if l is zero
C2B4 : A7		" "		ana	a
C2B5 : CA 42 C0		" B "		jz	LC042		;if so, we're done
C2B8 : E6 0F		"  "		ani	00FH		;check if bottom 4 bits of l are zero
C2BA : C2 A3 C2		"   "		jnz	LC2A3		;no, process next byte
C2BD : C3 9D C2		"   "		jmp	LC29D		;yes
				;
C2C0				LC2C0:				;F command - fill a range with a value F<start>,<stop>,<value>
C2C0 : CD D7 C2		"   "		call	LC2D7		;input two addresses, and store first address in C407, number of bytes to copy in C409
C2C3 : 79		"y"		mov	a,c		
C2C4 : FE 2C		" ,"		cpi	02CH		;check if last char input was a comma
C2C6 : C2 3C C0		" < "		jnz	LC03C		;no, output error message and return to command input loop
C2C9 : CD 2A C2		" * "		call	LC22A		;input hex digits into m
C2CC : 04		" "		inr	b		;check for valid input
C2CD : C2 3C C0		" < "		jnz	LC03C		;output error message and return to command input loop
C2D0 : 4D		"M"		mov	c,l
C2D1 : CD FF C2		"   "		call	LC2FF		;copy c to memory starting at [C407], number of bytes in [C409]
C2D4 : C3 42 C0		" B "		jmp	LC042		;output a carriage return and back to command input loop
				;
C2D7				LC2D7:
C2D7 : CD 2A C2		" * "		call	LC22A		;input hex digits into m
C2DA : 79		"y"		mov	a,c
C2DB : FE 2C		" ,"		cpi	02CH		;check if last char input was comma
C2DD : C2 3C C0		" < "		jnz	LC03C		;no, output error message and return to command input loop
C2E0 : 22 07 C4		""  "		shld	XC407		;store first address in C407
C2E3 : CD 2A C2		" * "		call	LC22A		;input hex digits into m
C2E6 : EB		" "		xchg			;save in DE
C2E7 : 2A 07 C4		"*  "		lhld	XC407		;restore first address into m
C2EA : 7B		"{"		mov	a,e		;subtract DE from HL for number of bytes to transfer
C2EB : 95		" "		sub	l
C2EC : 5F		"_"		mov	e,a
C2ED : 7A		"z"		mov	a,d
C2EE : 94		" "		sub	h
C2EF : 57		"W"		mov	d,a		;is it negative?
C2F0 : DA 3C C0		" < "		jc	LC03C		;yes, output error message and return to command input loop
C2F3 : EB		" "		xchg
C2F4 : 22 09 C4		""  "		shld	XC409		;store number of bytes in C409	
C2F7 : 7D		"}"		mov	a,l
C2F8 : B4		" "		ora	h		;is it zero?
C2F9 : CA 3C C0		" < "		jz	LC03C		;yes, output error message and return to command input loop
C2FC : C9		" "		ret
				;
C2FD				LC2FD:
C2FD : 0E 00		"  "		mvi	c,000H
C2FF				LC2FF:				;put number of bytes in DE, first address in HL
C2FF : 2A 09 C4		"*  "		lhld	XC409
C302 : EB		" "		xchg
C303 : 2A 07 C4		"*  "		lhld	XC407
C306				LC306:				;copy DE bytes of C to HL
C306 : 71		"q"		mov	m,c
C307 : 23		"#"		inx	h
C308 : 1B		" "		dcx	d
C309 : 7A		"z"		mov	a,d
C30A : B3		" "		ora	e
C30B : C2 06 C3		"   "		jnz	LC306
C30E : C9		" "		ret
				;
C30F				LC30F:				;T command - test memory?  T<start address>,<stop address>
C30F : CD D7 C2		"   "		call	LC2D7		;input two addresses, and store first address in C407, number of bytes to copy in C409
C312 : 04		" "		inr	b		;valid input
C313 : C2 3C C0		" < "		jnz	LC03C		;no, output error message and return to command input loop
C316 : CD FD C2		"   "		call	LC2FD		;zero out the memory range
C319 : 41		"A"		mov	b,c		;b, c are zero
C31A : 21 44 C3		"!D "		lxi	h,0C344H	
C31D : 22 0B C4		""  "		shld	XC40B		;store C344 in location C40B
C320				LC320:
C320 : 48		"H"		mov	c,b
C321 : 2A 0B C4		"*  "		lhld	XC40B
C324 : 46		"F"		mov	b,m
C325 : 23		"#"		inx	h
C326 : 7D		"}"		mov	a,l
C327 : FE 66		" f"		cpi	066H
C329 : C2 34 C3		" 4 "		jnz	LC334
C32C : C5		" "		push	b
C32D : CD 79 C3		" y "		call	LC379
C330 : C1		" "		pop	b
C331 : 21 44 C3		"!D "		lxi	h,0C344H
C334				LC334:
C334 : 22 0B C4		""  "		shld	XC40B
C337 : 2A 09 C4		"*  "		lhld	XC409
C33A : EB		" "		xchg
C33B : 2A 07 C4		"*  "		lhld	XC407
C33E : CD 66 C3		" f "		call	LC366
C341 : C3 20 C3		"   "		jmp	LC320
				;
C344 : 01 00 02 00	"    "		db	001H, 000H, 002H, 000H
C348 : 04 00 08 00	"    "		db	004H, 000H, 008H, 000H
C34C : 10 00 20 00	"    "		db	010H, 000H, 020H, 000H
C350 : 40 00 80 00	"@   "		db	040H, 000H, 080H, 000H
C354 : FF FE FF FD	"    "		db	0FFH, 0FEH, 0FFH, 0FDH
C358 : FF FB FF F7	"    "		db	0FFH, 0FBH, 0FFH, 0F7H
C35C : FF EF FF DF	"    "		db	0FFH, 0EFH, 0FFH, 0DFH
C360 : FF BF FF 7F	"    "		db	0FFH, 0BFH, 0FFH, 07FH
C364 : FF 00		"  "		db	0FFH, 000H
				;
C366				LC366:
C366 : 7E		"~"		mov	a,m
C367 : B9		" "		cmp	c
C368 : C4 86 C3		"   "		cnz	LC386
C36B : 70		"p"		mov	m,b
C36C : 7E		"~"		mov	a,m
C36D : B8		" "		cmp	b
C36E : C4 91 C3		"   "		cnz	LC391
C371 : 23		"#"		inx	h
C372 : 1B		" "		dcx	d
C373 : 7A		"z"		mov	a,d
C374 : B3		" "		ora	e
C375 : C2 66 C3		" f "		jnz	LC366
C378 : C9		" "		ret
				;
C379				LC379:					;output comma
C379 : 0E 2C		" ,"		mvi	c,02CH
C37B : C3 0C C1		"   "		jmp	LC10C
				;
C37E				LC37E:
C37E : EB		" "		xchg
C37F : E3		" "		xthl
C380 : D5		" "		push	d
C381 : F5		" "		push	psw
C382 : C5		" "		push	b
C383 : F5		" "		push	psw
C384 : D5		" "		push	d
C385 : E9		" "		pchl							;INFO: index jump
				;
C386				LC386:
C386 : C5		" "		push	b
C387 : 41		"A"		mov	b,c
C388 : CD 7E C3		" ~ "		call	LC37E
C38B : 21 BB C3		"!  "		lxi	h,0C3BBH		;location of "READ"
C38E : C3 98 C3		"   "		jmp	LC398
				;
C391				LC391:
C391 : C5		" "		push	b
C392 : CD 7E C3		" ~ "		call	LC37E
C395 : 21 BF C3		"!  "		lxi	h,0C3BFH		;location of "WRITE"
C398				LC398:
C398 : CD 48 C0		" H "		call	LC048			;output string
C39B : 21 C4 C3		"!  "		lxi	h,0C3C4H		;location of "ERROR"
C39E : CD 48 C0		" H "		call	LC048			;output string
C3A1 : E1		" "		pop	h
C3A2 : CD 0F C2		"   "		call	LC20F			;output m in hex;
C3A5 : CD 79 C3		" y "		call	LC379			;output comma
C3A8 : E1		" "		pop	h
C3A9 : CD 13 C2		"   "		call	LC213			;output h in hex
C3AC : CD 79 C3		" y "		call	LC379			;output comma
C3AF : E1		" "		pop	h
C3B0 : CD 13 C2		"   "		call	LC213			;output h in hex
C3B3 : CD 52 C2		" R "		call	LC252			;output carriage return
C3B6 : F1		" "		pop	psw
C3B7 : E1		" "		pop	h
C3B8 : D1		" "		pop	d
C3B9 : C1		" "		pop	b
C3BA : C9		" "		ret
				;
C3BB : 52 45 41 C4	"REA "		db	052H, 045H, 041H, 0C4H
C3BF : 57 52 49 54	"WRIT"		db	057H, 052H, 049H, 054H
C3C3 : C5 20 45 52	"  ER"		db	0C5H, 020H, 045H, 052H
C3C7 : 52 4F 52 20	"ROR "		db	052H, 04FH, 052H, 020H
C3CB : 4C 4F 43 4E	"LOCN"		db	04CH, 04FH, 043H, 04EH
C3CF : AE		" "		db	0AEH
				;
C3D0				LC3D0:					;L command
C3D0 : 97		" "		sub	a
C3D1 : C3 D6 C3		"   "		jmp	LC3D6
				;
C3D4				LC3D4:					;S command
C3D4 : 3E FF		"> "		mvi	a,0FFH
C3D6				LC3D6:
C3D6 : F5		" "		push	psw
C3D7 : CD D7 C2		"   "		call	LC2D7			;input two addresses, and store first address in C407, number of bytes to copy in C409
C3DA : 29		")"		dad	h
C3DB : 44		"D"		mov	b,h
C3DC : 04		" "		inr	b
C3DD : C5		" "		push	b
C3DE : CD 2A C2		" * "		call	LC22A			;input hex digits into m
C3E1 : 55		"U"		mov	d,l
C3E2 : C1		" "		pop	b
C3E3 : 4C		"L"		mov	c,h
C3E4 : 2A 07 C4		"*  "		lhld	XC407
C3E7 : F1		" "		pop	psw
C3E8 : 5F		"_"		mov	e,a
C3E9 : 97		" "		sub	a
C3EA : CD A8 C0		"   "		call	LC0A8
C3ED : C3 42 C0		" B "		jmp	LC042
				;
C3F0 : 00 00 00 00	"    "		db	000H, 000H, 000H, 000H
C3F4 : 00 00 00 00	"    "		db	000H, 000H, 000H, 000H
C3F8 : 00 00 00 00	"    "		db	000H, 000H, 000H, 000H
C3FC : 00 00 00 00	"    "		db	000H, 000H, 000H, 000H

;--------------------------------------------------------------
Symbol table
============

Value		Type	Name
-----		----	----
1000		Code	L1000
C000		Code	LC000
C00E		Code	LC00E
C03C		Code	LC03C
C03F		Code	LC03F
C042		Code	LC042
C048		Code	LC048
C072		Code	LC072
C084		Code	LC084
C0A8		Code	LC0A8
C0B3		Code	LC0B3
C0C8		Code	LC0C8
C0D3		Code	LC0D3
C0DF		Code	LC0DF
C0FA		Code	LC0FA
C10B		Code	LC10B
C10C		Code	LC10C
C119		Code	LC119
C11F		Code	LC11F
C127		Code	LC127
C132		Code	LC132
C144		Code	LC144
C153		Code	LC153
C157		Code	LC157
C16B		Code	LC16B
C173		Code	LC173
C178		Code	LC178
C179		Code	LC179
C183		Code	LC183
C18F		Code	LC18F
C1AA		Code	LC1AA
C1B1		Code	LC1B1
C1B6		Code	LC1B6
C1B8		Code	LC1B8
C1CA		Code	LC1CA
C1D4		Code	LC1D4
C1DA		Code	LC1DA
C1DC		Code	LC1DC
C1E6		Code	LC1E6
C1FF		Code	LC1FF
C205		Code	LC205
C20C		Code	LC20C
C20F		Code	LC20F
C213		Code	LC213
C21C		Code	LC21C
C22A		Code	LC22A
C22F		Code	LC22F
C247		Code	LC247
C252		Code	LC252
C257		Code	LC257
C25E		Code	LC25E
C266		Code	LC266
C26C		Code	LC26C
C290		Code	LC290
C297		Code	LC297
C29D		Code	LC29D
C2A3		Code	LC2A3
C2C0		Code	LC2C0
C2D7		Code	LC2D7
C2FD		Code	LC2FD
C2FF		Code	LC2FF
C306		Code	LC306
C30F		Code	LC30F
C320		Code	LC320
C334		Code	LC334
C366		Code	LC366
C379		Code	LC379
C37E		Code	LC37E
C386		Code	LC386
C391		Code	LC391
C398		Code	LC398
C3D0		Code	LC3D0
C3D4		Code	LC3D4
C3D6		Code	LC3D6
C400		Data	XC400
C401		Data	XC401
C402		Data	XC402
C403		Data	XC403
C405		Data	XC405
C407		Data	XC407
C409		Data	XC409
C40B		Data	XC40B

Number of symbols:			82

;--------------------------------------------------------------

I added some comments for D, M, F, G
It looks like:
D<address> Dumps memory from address to the end of the page
M<address> Modify memory at address
F<start>,<stop>,<value> Inserts value from start to stop, comma delimited
G<address> Start executing at address
T<start>,<stop> Looks like test memory from start to stop address?
B<number> Boot?
L<start>,<stop>,<number> Load?
S<start>,<stop>,<number> Store?

Just guessing on T,B,L,S

I was able to load an run it in SIMH:
Code:
C:\SIMH>altairz80.exe

Altair 8800 (Z80) simulator V3.9-0 build 1625 (scp created Feb 10 2013 at 09:37:
45 with gcc 4.2.4)

sim> set cpu 8080
sim> set sio ansi
sim> set sio upper
sim> set sio port=2/0/1/0/2/T/3/F
sim> set sio port=3/0/1/0/2/F/3/T
sim> load monitor.bin c000
1024 bytes [4 pages] loaded at c000.
sim> go c000
RMON V1.0
=D

0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=

It looks like B,L,S access a device on port C0, maybe a disk drive?

The monitor binary is attached.
 

Attachments

  • Monitor.zip
    997 bytes · Views: 1
I disassembled your monitor:
Code:
				;
				;	Disassembled by:
				;		DASMx object code disassembler
				;		(c) Copyright 1996-2003   Conquest Consultants
				;		Version 1.40 (Oct 18 2003)
				;
				;	File:		monitor.bin
				;
				;	Size:		1024 bytes
				;	Checksum:	023E
				;	CRC-32:		ADCADC8C
				;
				;	Date:		Fri Feb 13 15:37:49 2015
				;
				;	CPU:		Intel 8080 (MCS-80/85 family)
				;
				;
				;
					org	0C000H
				;
C000				LC000:
C000 : 31 FF C7		"1  "		lxi	sp,0C7FFH	;set SP to C7FF
C003 : 3E 03		"> "		mvi	a,003H		;set up uart
C005 : D3 02		"  "		out	002H
C007 : 3E 15		"> "		mvi	a,015H
C009 : D3 02		"  "		out	002H
C00B : 21 53 C0		"!S "		lxi	h,0C053H	;address of welcome message
C00E				LC00E:
C00E : CD 48 C0		" H "		call	LC048		;output string
C011 : CD 05 C2		"   "		call	LC205		;get and echo a char
C014 : FE 44		" D"		cpi	044H		
C016 : CA 97 C2		"   "		jz	LC297		;process D command
C019 : FE 4D		" M"		cpi	04DH		
C01B : CA 66 C2		" f "		jz	LC266		;process M command
C01E : FE 46		" F"		cpi	046H		
C020 : CA C0 C2		"   "		jz	LC2C0		;process F command
C023 : FE 47		" G"		cpi	047H		
C025 : CA 5E C2		" ^ "		jz	LC25E		;process G command
C028 : FE 42		" B"		cpi	042H		
C02A : CA 72 C0		" r "		jz	LC072		;process B command
C02D : FE 54		" T"		cpi	054H		
C02F : CA 0F C3		"   "		jz	LC30F		;process T command
C032 : FE 4C		" L"		cpi	04CH		
C034 : CA D0 C3		"   "		jz	LC3D0		;process L command
C037 : FE 53		" S"		cpi	053H		
C039 : CA D4 C3		"   "		jz	LC3D4		;process S command
C03C				LC03C:
C03C : 21 5F C0		"!_ "		lxi	h,0C05FH	;address of error message
C03F				LC03F:
C03F : CD 48 C0		" H "		call	LC048		;output string
C042				LC042:
C042 : 21 5C C0		"!\ "		lxi	h,0C05CH	;address of cr/lf
C045 : C3 0E C0		"   "		jmp	LC00E		;back to input loop
				;
C048				LC048:				;output string at m terminated by bit 7 set
C048 : 4E		"N"		mov	c,m		
C049 : CD 0C C1		"   "		call	LC10C		;output a char	
C04C : 79		"y"		mov	a,c
C04D : 07		" "		rlc
C04E : D8		" "		rc			;return if high bit set
C04F : 23		"#"		inx	h
C050 : C3 48 C0		" H "		jmp	LC048
				;
C053 : 52 4D 4F 4E	"RMON"		db	052H, 04DH, 04FH, 04EH
C057 : 20 56 31 2E	" V1."		db	020H, 056H, 031H, 02EH
C05B : 30 0D 0A BD	"0   "		db	030H, 00DH, 00AH, 0BDH
C05F : 2D 2D 43 4F	"--CO"		db	02DH, 02DH, 043H, 04FH
C063 : 4D 4D 41 4E	"MMAN"		db	04DH, 04DH, 041H, 04EH
C067 : 44 20 45 52	"D ER"		db	044H, 020H, 045H, 052H
C06B : 52 4F D2 44	"RO D"		db	052H, 04FH, 0D2H, 044H
C06F : 49 53 CB		"IS "		db	049H, 053H, 0CBH
				;
C072				LC072:					;B command
C072 : CD 2A C2		" * "		call	LC22A
C075 : 04		" "		inr	b
C076 : C2 3C C0		" < "		jnz	LC03C
C079 : 7D		"}"		mov	a,l
C07A : 21 00 00		"!  "		lxi	h,00000H
C07D : FE 0B		"  "		cpi	00BH
C07F : C2 84 C0		"   "		jnz	LC084
C082 : 26 40		"&@"		mvi	h,040H
C084				LC084:
C084 : 22 00 C4		""  "		shld	XC400
C087 : 3E 01		"> "		mvi	a,001H
C089 : 32 02 C4		"2  "		sta	XC402
C08C : 21 00 10		"!  "		lxi	h,01000H
C08F : 22 05 C4		""  "		shld	XC405
C092 : CD AA C1		"   "		call	LC1AA
C095 : 06 81		"  "		mvi	b,081H
C097 : CD 78 C1		" x "		call	LC178
C09A : 06 15		"  "		mvi	b,015H
C09C : CD 78 C1		" x "		call	LC178
C09F : CD B6 C1		"   "		call	LC1B6
C0A2 : CA 00 10		"   "		jz	L1000
C0A5 : C3 D3 C0		"   "		jmp	LC0D3
				;
C0A8				LC0A8:
C0A8 : E5		" "		push	h
C0A9 : CD AA C1		"   "		call	LC1AA
C0AC : CD 1F C1		"   "		call	LC11F
C0AF : CD 19 C1		"   "		call	LC119
C0B2 : E1		" "		pop	h
C0B3				LC0B3:
C0B3 : C5		" "		push	b
C0B4 : D5		" "		push	d
C0B5 : E5		" "		push	h
C0B6 : 4A		"J"		mov	c,d
C0B7 : CD 27 C1		" ' "		call	LC127
C0BA : 22 05 C4		""  "		shld	XC405
C0BD : 7B		"{"		mov	a,e
C0BE : 3C		"<"		inr	a
C0BF : C2 C8 C0		"   "		jnz	LC0C8
C0C2 : CD DA C1		"   "		call	LC1DA
C0C5 : C3 C8 C0		"   "		jmp	LC0C8
				;
C0C8				LC0C8:
C0C8 : CD B6 C1		"   "		call	LC1B6
C0CB : FE 00		"  "		cpi	000H
C0CD : CA DF C0		"   "		jz	LC0DF
C0D0 : 31 FF C7		"1  "		lxi	sp,0C7FFH
C0D3				LC0D3:
C0D3 : 21 6E C0		"!n "		lxi	h,0C06EH
C0D6 : CD 48 C0		" H "		call	LC048
C0D9 : 21 67 C0		"!g "		lxi	h,0C067H
C0DC : C3 3F C0		" ? "		jmp	LC03F
				;
C0DF				LC0DF:
C0DF : E1		" "		pop	h
C0E0 : 11 80 00		"   "		lxi	d,00080H
C0E3 : 19		" "		dad	d
C0E4 : D1		" "		pop	d
C0E5 : C1		" "		pop	b
C0E6 : 05		" "		dcr	b
C0E7 : C8		" "		rz
C0E8 : 14		" "		inr	d
C0E9 : 7A		"z"		mov	a,d
C0EA : FE 1B		"  "		cpi	01BH
C0EC : DA B3 C0		"   "		jc	LC0B3
C0EF : 16 01		"  "		mvi	d,001H
C0F1 : 0C		" "		inr	c
C0F2 : C5		" "		push	b
C0F3 : CD 19 C1		"   "		call	LC119
C0F6 : C1		" "		pop	b
C0F7 : C3 B3 C0		"   "		jmp	LC0B3
				;
C0FA				LC0FA:				;return a char in a
C0FA : DB 02		"  "		in	002H		;wait for uart ready
C0FC : E6 01		"  "		ani	001H
C0FE : CA FA C0		"   "		jz	LC0FA
C101 : DB 03		"  "		in	003H		;get char
C103 : E6 7F		"  "		ani	07FH
C105 : FE 03		"  "		cpi	003H		;control c?
C107 : CA 00 C0		"   "		jz	LC000		;if so, restart
C10A : C9		" "		ret
				;
C10B				LC10B:				;output char in a
C10B : 4F		"O"		mov	c,a
C10C				LC10C:				;output char in c
C10C : DB 02		"  "		in	002H
C10E : E6 02		"  "		ani	002H
C110 : CA 0C C1		"   "		jz	LC10C
C113 : 79		"y"		mov	a,c
C114 : D3 03		"  "		out	003H
C116 : C9		" "		ret
				;
C117 : 0E 00		"  "		db	00EH, 000H
				;
C119				LC119:
C119 : 79		"y"		mov	a,c
C11A : 32 00 C4		"2  "		sta	XC400
C11D : C9		" "		ret
				;
C11E : 79		"y"		db	079H
				;
C11F				LC11F:
C11F : E6 01		"  "		ani	001H
C121 : 0F		" "		rrc
C122 : 0F		" "		rrc
C123 : 32 01 C4		"2  "		sta	XC401
C126 : C9		" "		ret
				;
C127				LC127:
C127 : 79		"y"		mov	a,c
C128 : 32 02 C4		"2  "		sta	XC402
C12B : C9		" "		ret
				;
C12C : 69 60 22 05	"i`" "		db	069H, 060H, 022H, 005H
C130 : C4 C9		"  "		db	0C4H, 0C9H
				;
C132				LC132:
C132 : 11 00 C4		"   "		lxi	d,XC400
C135 : 21 04 C4		"!  "		lxi	h,0C404H
C138 : 1A		" "		ldax	d
C139 : BE		" "		cmp	m
C13A : C2 53 C1		" S "		jnz	LC153
C13D : 2B		"+"		dcx	h
C13E : 13		" "		inx	d
C13F : 1A		" "		ldax	d
C140 : BE		" "		cmp	m
C141 : C2 57 C1		" W "		jnz	LC157
C144				LC144:
C144 : 7E		"~"		mov	a,m
C145 : 2B		"+"		dcx	h
C146 : B6		" "		ora	m
C147 : 06 21		" !"		mvi	b,021H
C149 : CD 79 C1		" y "		call	LC179
C14C : 2A 05 C4		"*  "		lhld	XC405
C14F : 0E 80		"  "		mvi	c,080H
C151 : 97		" "		sub	a
C152 : C9		" "		ret
				;
C153				LC153:
C153 : 77		"w"		mov	m,a
C154 : 2B		"+"		dcx	h
C155 : 13		" "		inx	d
C156 : 1A		" "		ldax	d
C157				LC157:
C157 : 77		"w"		mov	m,a
C158 : 3C		"<"		inr	a
C159 : 06 21		" !"		mvi	b,021H
C15B : CD 79 C1		" y "		call	LC179
C15E : 23		"#"		inx	h
C15F : 7E		"~"		mov	a,m
C160 : A7		" "		ana	a
C161 : CA 73 C1		" s "		jz	LC173
C164 : 06 11		"  "		mvi	b,011H
C166 : CD 79 C1		" y "		call	LC179
C169 : 06 09		"  "		mvi	b,009H
C16B				LC16B:
C16B : CD 78 C1		" x "		call	LC178
C16E : 2B		"+"		dcx	h
C16F : CA 44 C1		" D "		jz	LC144
C172 : C9		" "		ret
				;
C173				LC173:
C173 : 06 0D		"  "		mvi	b,00DH
C175 : C3 6B C1		" k "		jmp	LC16B
				;
C178				LC178:
C178 : 97		" "		sub	a
C179				LC179:
C179 : D3 C1		"  "			0C1H
C17B : 78		"x"		mov	a,b
C17C : D3 C0		"  "		out	0C0H
C17E : 97		" "		sub	a
C17F : D3 C0		"  "		out	0C0H
C181 : D3 C1		"  "		out	0C1H
C183				LC183:
C183 : DB C0		"  "		in	0C0H
C185 : 0F		" "		rrc
C186 : DA 83 C1		"   "		jc	LC183
C189 : E6 14		"  "		ani	014H
C18B : C9		" "		ret
				;
C18C : C3 B8 C1		"   "		db	0C3H, 0B8H, 0C1H
				;
C18F				LC18F:
C18F : 15		" "		dcr	d
C190 : CA B1 C1		"   "		jz	LC1B1
C193 : 06 0B		"  "		mvi	b,00BH
C195 : CD 78 C1		" x "		call	LC178
C198 : 21 01 C4		"!  "		lxi	h,XC401
C19B : 7E		"~"		mov	a,m
C19C : 3C		"<"		inr	a
C19D : 06 21		" !"		mvi	b,021H
C19F : CD 79 C1		" y "		call	LC179
C1A2 : 06 0D		"  "		mvi	b,00DH
C1A4 : CD 78 C1		" x "		call	LC178
C1A7 : C2 8F C1		"   "		jnz	LC18F
C1AA				LC1AA:
C1AA : 21 FF FF		"!  "		lxi	h,0FFFFH
C1AD : 22 03 C4		""  "		shld	XC403
C1B0 : C9		" "		ret
				;
C1B1				LC1B1:
C1B1 : F1		" "		pop	psw
C1B2 : 3E 01		"> "		mvi	a,001H
C1B4 : A7		" "		ana	a
C1B5 : C9		" "		ret
				;
C1B6				LC1B6:
C1B6 : 16 0A		"  "		mvi	d,00AH
C1B8				LC1B8:
C1B8 : CD 32 C1		" 2 "		call	LC132
C1BB : C2 D4 C1		"   "		jnz	LC1D4
C1BE : 06 03		"  "		mvi	b,003H
C1C0 : CD 79 C1		" y "		call	LC179
C1C3 : C2 D4 C1		"   "		jnz	LC1D4
C1C6 : 3E 40		">@"		mvi	a,040H
C1C8 : D3 C0		"  "		out	0C0H
C1CA				LC1CA:
C1CA : DB C0		"  "		in	0C0H
C1CC : 77		"w"		mov	m,a
C1CD : 23		"#"		inx	h
C1CE : 0D		" "		dcr	c
C1CF : C2 CA C1		"   "		jnz	LC1CA
C1D2 : 97		" "		sub	a
C1D3 : C9		" "		ret
				;
C1D4				LC1D4:
C1D4 : CD 8F C1		"   "		call	LC18F
C1D7 : C3 B8 C1		"   "		jmp	LC1B8
				;
C1DA				LC1DA:
C1DA : 16 05		"  "		mvi	d,005H
C1DC				LC1DC:
C1DC : CD 32 C1		" 2 "		call	LC132
C1DF : C2 FF C1		"   "		jnz	LC1FF
C1E2 : 3E 30		">0"		mvi	a,030H
C1E4 : D3 C0		"  "		out	0C0H
C1E6				LC1E6:
C1E6 : 7E		"~"		mov	a,m
C1E7 : D3 C1		"  "		out	0C1H
C1E9 : 23		"#"		inx	h
C1EA : 0D		" "		dcr	c
C1EB : C2 E6 C1		"   "		jnz	LC1E6
C1EE : 97		" "		sub	a
C1EF : D3 C0		"  "		out	0C0H
C1F1 : 06 05		"  "		mvi	b,005H
C1F3 : CD 78 C1		" x "		call	LC178
C1F6 : C2 FF C1		"   "		jnz	LC1FF
C1F9 : 06 07		"  "		mvi	b,007H
C1FB : CD 78 C1		" x "		call	LC178
C1FE : C8		" "		rz
C1FF				LC1FF:
C1FF : CD 8F C1		"   "		call	LC18F
C202 : C3 DC C1		"   "		jmp	LC1DC
				;
C205				LC205:				;input a char and echo it
C205 : CD FA C0		"   "		call	LC0FA		;input a char
C208 : 4F		"O"		mov	c,a
C209 : C3 0C C1		"   "		jmp	LC10C		;output char
				;
C20C				LC20C:
C20C : CD 52 C2		" R "		call	LC252		;output carriage return
C20F				LC20F:				;output m in hex
C20F : CD 13 C2		"   "		call	LC213		;output h in hex
C212 : 65		"e"		mov	h,l		;move l to h to output in hex
C213				LC213:				;output h in hex
C213 : 7C		"|"		mov	a,h		;mov h to a and rotate top 4 bits to bottom 4 bits
C214 : 07		" "		rlc
C215 : 07		" "		rlc
C216 : 07		" "		rlc
C217 : 07		" "		rlc
C218 : CD 1C C2		"   "		call	LC21C		;output 4 bits as hex (top 4)		
C21B : 7C		"|"		mov	a,h		;restore h to a
C21C				LC21C:				;output bottom 4 bits as hex char
C21C : E6 0F		"  "		ani	00FH
C21E : C6 30		" 0"		adi	030H
C220 : FE 3A		" :"		cpi	03AH
C222 : DA 0B C1		"   "		jc	LC10B
C225 : C6 07		"  "		adi	007H
C227 : C3 0B C1		"   "		jmp	LC10B
				;
C22A				LC22A:				;input hex digits into m
C22A : 21 00 00		"!  "		lxi	h,00000H	;zero h,l,d,b
C22D : 54		"T"		mov	d,h
C22E : 44		"D"		mov	b,h
C22F				LC22F:				;input hex digits into m
C22F : CD 05 C2		"   "		call	LC205		;input and echo a char
C232 : FE 0D		"  "		cpi	00DH		;carriage return?
C234 : CA 57 C2		" W "		jz	LC257		;yes
C237 : D6 30		" 0"		sui	030H		;subtract '0'
C239 : D8		" "		rc			;return if zero
C23A : FE 0A		"  "		cpi	00AH		;greater than '9'?
C23C : DA 47 C2		" G "		jc	LC247		;no
C23F : FE 11		"  "		cpi	011H		;greater than 'A'?
C241 : D8		" "		rc			;no, invalid char so return
C242 : D6 07		"  "		sui	007H		;subtract 7 to get top 4 bits
C244 : FE 10		"  "		cpi	010H		;greater than 'F'?
C246 : D0		" "		rnc			;yes, invalid char so return
C247				LC247:
C247 : 29		")"		dad	h		;shift m left by 4 bits
C248 : 29		")"		dad	h
C249 : 29		")"		dad	h
C24A : 29		")"		dad	h
C24B : B5		" "		ora	l		;set lower 4 bits to a
C24C : 6F		"o"		mov	l,a
C24D : 16 FF		"  "		mvi	d,0FFH		;set d to FF, flag a valid number
C24F : C3 2F C2		" / "		jmp	LC22F		;process next char
				;
C252				LC252:				;output carriage return				
C252 : 0E 0D		"  "		mvi	c,00DH		
C254 : CD 0C C1		"   "		call	LC10C
C257				LC257:
C257 : 0E 0A		"  "		mvi	c,00AH		;c gets line feed	
C259 : 06 FF		"  "		mvi	b,0FFH		;b gets FF on successful return
C25B : C3 0C C1		"   "		jmp	LC10C		;output line feed and return
				;
C25E				LC25E:				;G command - go to address
C25E : CD 2A C2		" * "		call	LC22A		;input hex digits into m
C261 : 04		" "		inr	b		;check if valid input
C262 : C2 3C C0		" < "		jnz	LC03C		;no, go back to command input loop
C265 : E9		" "		pchl			;yes, jump to it
				;
C266				LC266:				;M command
C266 : CD 2A C2		" * "		call	LC22A		;input hex digits into m
C269 : 22 07 C4		""  "		shld	XC407		;save m in C407
C26C				LC26C:
C26C : CD 0F C2		"   "		call	LC20F		;output m in hex		
C26F : 0E 20		"  "		mvi	c,020H		;output a space
C271 : CD 0C C1		"   "		call	LC10C
C274 : 2A 07 C4		"*  "		lhld	XC407		;restore m from C407		
C277 : 66		"f"		mov	h,m		;get the by in [m]
C278 : CD 13 C2		"   "		call	LC213		;output it
C27B : 0E 20		"  "		mvi	c,020H		;output a space
C27D : CD 0C C1		"   "		call	LC10C
C280 : CD 2A C2		" * "		call	LC22A		;input hex digits into m		
C283 : 04		" "		inr	b		;check b if successful
C284 : C2 42 C0		" B "		jnz	LC042		;no, return to command loop
C287 : 14		" "		inr	d		;increment d
C288 : 7D		"}"		mov	a,l		;save l
C289 : 2A 07 C4		"*  "		lhld	XC407		;restore m
C28C : C2 90 C2		"   "		jnz	LC290		;check d if successful
C28F : 77		"w"		mov	m,a		;yes, store l in [m]
C290				LC290:
C290 : 23		"#"		inx	h		;go to next byte
C291 : 22 07 C4		""  "		shld	XC407		;restore m
C294 : C3 6C C2		" l "		jmp	LC26C		loop to next address
				;
C297				LC297:				;D command - output a page of memory in hex
C297 : CD 2A C2		" * "		call	LC22A		;get hex digits into m
C29A : 22 07 C4		""  "		shld	XC407		;save in C407
C29D				LC29D:
C29D : CD 0C C2		"   "		call	LC20C		;output m in hex
C2A0 : 2A 07 C4		"*  "		lhld	XC407		;restore m from C407
C2A3				LC2A3:
C2A3 : 0E 20		"  "		mvi	c,020H		;output a space
C2A5 : CD 0C C1		"   "		call	LC10C
C2A8 : 66		"f"		mov	h,m		;get the byte in [m]
C2A9 : CD 13 C2		"   "		call	LC213		;output it
C2AC : 2A 07 C4		"*  "		lhld	XC407		;restore m from C407
C2AF : 23		"#"		inx	h		;go to next byte
C2B0 : 22 07 C4		""  "		shld	XC407		;save m
C2B3 : 7D		"}"		mov	a,l		;check if l is zero
C2B4 : A7		" "		ana	a
C2B5 : CA 42 C0		" B "		jz	LC042		;if so, we're done
C2B8 : E6 0F		"  "		ani	00FH		;check if bottom 4 bits of l are zero
C2BA : C2 A3 C2		"   "		jnz	LC2A3		;no, process next byte
C2BD : C3 9D C2		"   "		jmp	LC29D		;yes
				;
C2C0				LC2C0:				;F command - fill a range with a value F<start>,<stop>,<value>
C2C0 : CD D7 C2		"   "		call	LC2D7		;input two addresses, and store first address in C407, number of bytes to copy in C409
C2C3 : 79		"y"		mov	a,c		
C2C4 : FE 2C		" ,"		cpi	02CH		;check if last char input was a comma
C2C6 : C2 3C C0		" < "		jnz	LC03C		;no, output error message and return to command input loop
C2C9 : CD 2A C2		" * "		call	LC22A		;input hex digits into m
C2CC : 04		" "		inr	b		;check for valid input
C2CD : C2 3C C0		" < "		jnz	LC03C		;output error message and return to command input loop
C2D0 : 4D		"M"		mov	c,l
C2D1 : CD FF C2		"   "		call	LC2FF		;copy c to memory starting at [C407], number of bytes in [C409]
C2D4 : C3 42 C0		" B "		jmp	LC042		;output a carriage return and back to command input loop
				;
C2D7				LC2D7:
C2D7 : CD 2A C2		" * "		call	LC22A		;input hex digits into m
C2DA : 79		"y"		mov	a,c
C2DB : FE 2C		" ,"		cpi	02CH		;check if last char input was comma
C2DD : C2 3C C0		" < "		jnz	LC03C		;no, output error message and return to command input loop
C2E0 : 22 07 C4		""  "		shld	XC407		;store first address in C407
C2E3 : CD 2A C2		" * "		call	LC22A		;input hex digits into m
C2E6 : EB		" "		xchg			;save in DE
C2E7 : 2A 07 C4		"*  "		lhld	XC407		;restore first address into m
C2EA : 7B		"{"		mov	a,e		;subtract DE from HL for number of bytes to transfer
C2EB : 95		" "		sub	l
C2EC : 5F		"_"		mov	e,a
C2ED : 7A		"z"		mov	a,d
C2EE : 94		" "		sub	h
C2EF : 57		"W"		mov	d,a		;is it negative?
C2F0 : DA 3C C0		" < "		jc	LC03C		;yes, output error message and return to command input loop
C2F3 : EB		" "		xchg
C2F4 : 22 09 C4		""  "		shld	XC409		;store number of bytes in C409	
C2F7 : 7D		"}"		mov	a,l
C2F8 : B4		" "		ora	h		;is it zero?
C2F9 : CA 3C C0		" < "		jz	LC03C		;yes, output error message and return to command input loop
C2FC : C9		" "		ret
				;
C2FD				LC2FD:
C2FD : 0E 00		"  "		mvi	c,000H
C2FF				LC2FF:				;put number of bytes in DE, first address in HL
C2FF : 2A 09 C4		"*  "		lhld	XC409
C302 : EB		" "		xchg
C303 : 2A 07 C4		"*  "		lhld	XC407
C306				LC306:				;copy DE bytes of C to HL
C306 : 71		"q"		mov	m,c
C307 : 23		"#"		inx	h
C308 : 1B		" "		dcx	d
C309 : 7A		"z"		mov	a,d
C30A : B3		" "		ora	e
C30B : C2 06 C3		"   "		jnz	LC306
C30E : C9		" "		ret
				;
C30F				LC30F:				;T command - test memory?  T<start address>,<stop address>
C30F : CD D7 C2		"   "		call	LC2D7		;input two addresses, and store first address in C407, number of bytes to copy in C409
C312 : 04		" "		inr	b		;valid input
C313 : C2 3C C0		" < "		jnz	LC03C		;no, output error message and return to command input loop
C316 : CD FD C2		"   "		call	LC2FD		;zero out the memory range
C319 : 41		"A"		mov	b,c		;b, c are zero
C31A : 21 44 C3		"!D "		lxi	h,0C344H	
C31D : 22 0B C4		""  "		shld	XC40B		;store C344 in location C40B
C320				LC320:
C320 : 48		"H"		mov	c,b
C321 : 2A 0B C4		"*  "		lhld	XC40B
C324 : 46		"F"		mov	b,m
C325 : 23		"#"		inx	h
C326 : 7D		"}"		mov	a,l
C327 : FE 66		" f"		cpi	066H
C329 : C2 34 C3		" 4 "		jnz	LC334
C32C : C5		" "		push	b
C32D : CD 79 C3		" y "		call	LC379
C330 : C1		" "		pop	b
C331 : 21 44 C3		"!D "		lxi	h,0C344H
C334				LC334:
C334 : 22 0B C4		""  "		shld	XC40B
C337 : 2A 09 C4		"*  "		lhld	XC409
C33A : EB		" "		xchg
C33B : 2A 07 C4		"*  "		lhld	XC407
C33E : CD 66 C3		" f "		call	LC366
C341 : C3 20 C3		"   "		jmp	LC320
				;
C344 : 01 00 02 00	"    "		db	001H, 000H, 002H, 000H
C348 : 04 00 08 00	"    "		db	004H, 000H, 008H, 000H
C34C : 10 00 20 00	"    "		db	010H, 000H, 020H, 000H
C350 : 40 00 80 00	"@   "		db	040H, 000H, 080H, 000H
C354 : FF FE FF FD	"    "		db	0FFH, 0FEH, 0FFH, 0FDH
C358 : FF FB FF F7	"    "		db	0FFH, 0FBH, 0FFH, 0F7H
C35C : FF EF FF DF	"    "		db	0FFH, 0EFH, 0FFH, 0DFH
C360 : FF BF FF 7F	"    "		db	0FFH, 0BFH, 0FFH, 07FH
C364 : FF 00		"  "		db	0FFH, 000H
				;
C366				LC366:
C366 : 7E		"~"		mov	a,m
C367 : B9		" "		cmp	c
C368 : C4 86 C3		"   "		cnz	LC386
C36B : 70		"p"		mov	m,b
C36C : 7E		"~"		mov	a,m
C36D : B8		" "		cmp	b
C36E : C4 91 C3		"   "		cnz	LC391
C371 : 23		"#"		inx	h
C372 : 1B		" "		dcx	d
C373 : 7A		"z"		mov	a,d
C374 : B3		" "		ora	e
C375 : C2 66 C3		" f "		jnz	LC366
C378 : C9		" "		ret
				;
C379				LC379:					;output comma
C379 : 0E 2C		" ,"		mvi	c,02CH
C37B : C3 0C C1		"   "		jmp	LC10C
				;
C37E				LC37E:
C37E : EB		" "		xchg
C37F : E3		" "		xthl
C380 : D5		" "		push	d
C381 : F5		" "		push	psw
C382 : C5		" "		push	b
C383 : F5		" "		push	psw
C384 : D5		" "		push	d
C385 : E9		" "		pchl							;INFO: index jump
				;
C386				LC386:
C386 : C5		" "		push	b
C387 : 41		"A"		mov	b,c
C388 : CD 7E C3		" ~ "		call	LC37E
C38B : 21 BB C3		"!  "		lxi	h,0C3BBH		;location of "READ"
C38E : C3 98 C3		"   "		jmp	LC398
				;
C391				LC391:
C391 : C5		" "		push	b
C392 : CD 7E C3		" ~ "		call	LC37E
C395 : 21 BF C3		"!  "		lxi	h,0C3BFH		;location of "WRITE"
C398				LC398:
C398 : CD 48 C0		" H "		call	LC048			;output string
C39B : 21 C4 C3		"!  "		lxi	h,0C3C4H		;location of "ERROR"
C39E : CD 48 C0		" H "		call	LC048			;output string
C3A1 : E1		" "		pop	h
C3A2 : CD 0F C2		"   "		call	LC20F			;output m in hex;
C3A5 : CD 79 C3		" y "		call	LC379			;output comma
C3A8 : E1		" "		pop	h
C3A9 : CD 13 C2		"   "		call	LC213			;output h in hex
C3AC : CD 79 C3		" y "		call	LC379			;output comma
C3AF : E1		" "		pop	h
C3B0 : CD 13 C2		"   "		call	LC213			;output h in hex
C3B3 : CD 52 C2		" R "		call	LC252			;output carriage return
C3B6 : F1		" "		pop	psw
C3B7 : E1		" "		pop	h
C3B8 : D1		" "		pop	d
C3B9 : C1		" "		pop	b
C3BA : C9		" "		ret
				;
C3BB : 52 45 41 C4	"REA "		db	052H, 045H, 041H, 0C4H
C3BF : 57 52 49 54	"WRIT"		db	057H, 052H, 049H, 054H
C3C3 : C5 20 45 52	"  ER"		db	0C5H, 020H, 045H, 052H
C3C7 : 52 4F 52 20	"ROR "		db	052H, 04FH, 052H, 020H
C3CB : 4C 4F 43 4E	"LOCN"		db	04CH, 04FH, 043H, 04EH
C3CF : AE		" "		db	0AEH
				;
C3D0				LC3D0:					;L command
C3D0 : 97		" "		sub	a
C3D1 : C3 D6 C3		"   "		jmp	LC3D6
				;
C3D4				LC3D4:					;S command
C3D4 : 3E FF		"> "		mvi	a,0FFH
C3D6				LC3D6:
C3D6 : F5		" "		push	psw
C3D7 : CD D7 C2		"   "		call	LC2D7			;input two addresses, and store first address in C407, number of bytes to copy in C409
C3DA : 29		")"		dad	h
C3DB : 44		"D"		mov	b,h
C3DC : 04		" "		inr	b
C3DD : C5		" "		push	b
C3DE : CD 2A C2		" * "		call	LC22A			;input hex digits into m
C3E1 : 55		"U"		mov	d,l
C3E2 : C1		" "		pop	b
C3E3 : 4C		"L"		mov	c,h
C3E4 : 2A 07 C4		"*  "		lhld	XC407
C3E7 : F1		" "		pop	psw
C3E8 : 5F		"_"		mov	e,a
C3E9 : 97		" "		sub	a
C3EA : CD A8 C0		"   "		call	LC0A8
C3ED : C3 42 C0		" B "		jmp	LC042
				;
C3F0 : 00 00 00 00	"    "		db	000H, 000H, 000H, 000H
C3F4 : 00 00 00 00	"    "		db	000H, 000H, 000H, 000H
C3F8 : 00 00 00 00	"    "		db	000H, 000H, 000H, 000H
C3FC : 00 00 00 00	"    "		db	000H, 000H, 000H, 000H

;--------------------------------------------------------------
Symbol table
============

Value		Type	Name
-----		----	----
1000		Code	L1000
C000		Code	LC000
C00E		Code	LC00E
C03C		Code	LC03C
C03F		Code	LC03F
C042		Code	LC042
C048		Code	LC048
C072		Code	LC072
C084		Code	LC084
C0A8		Code	LC0A8
C0B3		Code	LC0B3
C0C8		Code	LC0C8
C0D3		Code	LC0D3
C0DF		Code	LC0DF
C0FA		Code	LC0FA
C10B		Code	LC10B
C10C		Code	LC10C
C119		Code	LC119
C11F		Code	LC11F
C127		Code	LC127
C132		Code	LC132
C144		Code	LC144
C153		Code	LC153
C157		Code	LC157
C16B		Code	LC16B
C173		Code	LC173
C178		Code	LC178
C179		Code	LC179
C183		Code	LC183
C18F		Code	LC18F
C1AA		Code	LC1AA
C1B1		Code	LC1B1
C1B6		Code	LC1B6
C1B8		Code	LC1B8
C1CA		Code	LC1CA
C1D4		Code	LC1D4
C1DA		Code	LC1DA
C1DC		Code	LC1DC
C1E6		Code	LC1E6
C1FF		Code	LC1FF
C205		Code	LC205
C20C		Code	LC20C
C20F		Code	LC20F
C213		Code	LC213
C21C		Code	LC21C
C22A		Code	LC22A
C22F		Code	LC22F
C247		Code	LC247
C252		Code	LC252
C257		Code	LC257
C25E		Code	LC25E
C266		Code	LC266
C26C		Code	LC26C
C290		Code	LC290
C297		Code	LC297
C29D		Code	LC29D
C2A3		Code	LC2A3
C2C0		Code	LC2C0
C2D7		Code	LC2D7
C2FD		Code	LC2FD
C2FF		Code	LC2FF
C306		Code	LC306
C30F		Code	LC30F
C320		Code	LC320
C334		Code	LC334
C366		Code	LC366
C379		Code	LC379
C37E		Code	LC37E
C386		Code	LC386
C391		Code	LC391
C398		Code	LC398
C3D0		Code	LC3D0
C3D4		Code	LC3D4
C3D6		Code	LC3D6
C400		Data	XC400
C401		Data	XC401
C402		Data	XC402
C403		Data	XC403
C405		Data	XC405
C407		Data	XC407
C409		Data	XC409
C40B		Data	XC40B

Number of symbols:			82

;--------------------------------------------------------------

I added some comments for D, M, F, G
It looks like:
D<address> Dumps memory from address to the end of the page
M<address> Modify memory at address
F<start>,<stop>,<value> Inserts value from start to stop, comma delimited
G<address> Start executing at address
T<start>,<stop> Looks like test memory from start to stop address?
B<number> Boot?
L<start>,<stop>,<number> Load?
S<start>,<stop>,<number> Store?

Just guessing on T,B,L,S

I was able to load an run it in SIMH:
Code:
C:\SIMH>altairz80.exe

Altair 8800 (Z80) simulator V3.9-0 build 1625 (scp created Feb 10 2013 at 09:37:
45 with gcc 4.2.4)

sim> set cpu 8080
sim> set sio ansi
sim> set sio upper
sim> set sio port=2/0/1/0/2/T/3/F
sim> set sio port=3/0/1/0/2/F/3/T
sim> load monitor.bin c000
1024 bytes [4 pages] loaded at c000.
sim> go c000
RMON V1.0
=D

0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=

It looks like B,L,S access a device on port C0, maybe a disk drive?

The monitor binary is attached.

Awesome! Thank you.
 
Back
Top