PDA

View Full Version : REV 0 Altair 8800 stock, SERIAL NO. 221876K



leiy
January 26th, 2015, 07:32 PM
REV 0 Altair 8800 stock, SERIAL NO. 221876K

I purchased this Altair in 2014, cost me nearly 4K USD.

I tested the computer, deposite and exameine memory locations, run simple front penal programs well.

There has no 8800 silver strip on the buttom of front penal.

http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/27/115634kku4cj9488kt4lt3.jpg

http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/27/115637z5mzxg9a3x98xz1r.jpg

http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/27/122636l361jh6p73h3bjy6.jpg

http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/27/115641rr5jmhekrahz0h3h.jpg

http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/27/115644f1l1rn9p6m1c4y9i.jpg

http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/27/115646selmdc49kgdvxdnm.jpg

http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/27/115650q66j78tvmf8fk068.jpg

Computer hobbyist can grab and republish these photos, but please retain the web stamp on photos, thanks.

Nama
January 27th, 2015, 12:23 PM
Wow! looks almost new!

Corey986
January 27th, 2015, 02:24 PM
Interesting pics. I finally was able to view them. It seems my ISP doesn't like your site. I can open them from my 4g connection.

Anyway... Looks like the builder put the nuts on the wrong side of the switches. I wouldn't change it because the front panel is most likely scratched from them. There is an metal panel underneath which the nuts are used to mount the switches. The front panel is just held in by the assembly being pushed against the frame. If you look at a lot of unassembled Altair they tend to have pencil marks on the metal panel so they could be tested without the silk screened panel.

Cheers,
Corey

snuci
January 27th, 2015, 03:38 PM
Hi Leiy,

Nice pics. I've been watching your pics on cpu-world.com. You are "pcfans", yes? Keep up the good work!

leiy
January 27th, 2015, 05:01 PM
Interesting pics. I finally was able to view them. It seems my ISP doesn't like your site. I can open them from my 4g connection.

Anyway... Looks like the builder put the nuts on the wrong side of the switches. I wouldn't change it because the front panel is most likely scratched from them. There is an metal panel underneath which the nuts are used to mount the switches. The front panel is just held in by the assembly being pushed against the frame. If you look at a lot of unassembled Altair they tend to have pencil marks on the metal panel so they could be tested without the silk screened panel.

Cheers,
Corey

I was wondered why the builder make the front penal so unique when I first received the machine. When I disassemble the front panel to resolder some broken wires, I found the washer is pasted on every hole underneath of the second metal plate, that makes the insallation process much more complex than ordinary procedure. I finally realize the original builer assembling the front panel on that way inmind so that have an effort to make toggle switch very fastened and strengthened durability that prevent user from frequently wobble and toggle the switch over time to make the the base inside the toggle switch finally loosened.

And I also found the nuts are not scratched the front panel paint cover. :)

Since the front panel looks very nice and useful, and I really want to retian this front panel status it build since 1975. I will not intend to reverse it.

By the way, I just found the Altair 8800 front penal assembly method is as the same as Altair Disk:

and the front panel of altair disk is also not scratched by the nuts(REV 0 disk)
http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/28/122957gbw23bg5rbsv6b2z.jpg

http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/28/130418fmggvug4mh7n0csi.jpg



I have a Altair 8800b that is not luck than the Altair 8800 "SERIAL NO. 221876K", the 8800b front panel is installed just on regular 8800 way, many toggle switch are useless and loosened aganist the PCB.

leiy
January 27th, 2015, 05:26 PM
Yes, is me. I want to make this computer to connect more boards use a S100 plate from a California computer system. Like install four 16K static memory boards, turnkey or bytesaver boards, 88 SIO A board or dazzler etc.

Corey986
January 27th, 2015, 08:43 PM
Strange, I've never had a problem with loose switches on any Altair. I guess the way yours was built it allowed the builder to tighten them periodically. Mine are all on with washers and nuts underneath.
Cheers,
Corey

leiy
January 27th, 2015, 08:58 PM
Strange, I've never had a problem with loose switches on any Altair. I guess the way yours was built it allowed the builder to tighten them periodically. Mine are all on with washers and nuts underneath.
Cheers,
Corey

The toggle switch of my Altair 8800b and Altair 8800 are the same brand (not C&K) and manufacturer. Toggle switch condition on my 8800b is bad, many are loosened and switch base can wobble when toggling.

Corey986
January 28th, 2015, 03:44 AM
I havent' torn apart a "b", but doesn't the toggles secure to a thick metal panel with lock washers/nuts and the "front" silk screen panel is just decorative that slides over the remaining stems of the switches which is held in place by the front bezel just like an earlier altair. The thick metal panel is not "paint" smooth on the earlier Altair, I assume the same for the "b", which is why when you tighten the nuts and use the correct washers it shouldn't loosen up. Painted and powder coated surfaces like the silk screen panel don't work well with washers and nuts, you have to tighten them periodically as the paint on the surface is not as hard as the unpainted metal and over time can loosen.

22485

snuci
January 28th, 2015, 04:16 AM
I've take apart all three (8800, 8800a, 8800b) and this is what my face plate looks like with nuts behind the face plate. I had taken it apart to fix some switches that were broken. It's like you mentioned, Corey, with markings on it so it could be tested without the face plate on it. This was the first of my three Altairs that I took apart and the only nuts on this one were the indented ones. The others do not have nuts at all. I have not had any loose switches but it may not have been as used as Leiy's.

22486

Corey986
January 28th, 2015, 04:40 AM
I have to check I may have a bag of correct Apem nuts, I know I did at one point. If I still do I'll mail you a bunch for your Altair so you never have a problem.

Cheers,
Corey

snuci
January 28th, 2015, 05:22 AM
Thanks Corey. I have a couple because of the replacements so I will take it apart again and let you know how many I need. Much appreciated if you can find them. Taking that front face plate off is easy. Putting it back on is a whole other matter :)

leiy
January 28th, 2015, 08:11 AM
I havent' torn apart a "b", but doesn't the toggles secure to a thick metal panel with lock washers/nuts and the "front" silk screen panel is just decorative that slides over the remaining stems of the switches which is held in place by the front bezel just like an earlier altair. The thick metal panel is not "paint" smooth on the earlier Altair, I assume the same for the "b", which is why when you tighten the nuts and use the correct washers it shouldn't loosen up. Painted and powder coated surfaces like the silk screen panel don't work well with washers and nuts, you have to tighten them periodically as the paint on the surface is not as hard as the unpainted metal and over time can loosen.

22485

I will take this in consideration, thank you.

leiy
January 30th, 2015, 09:17 PM
Here's S-100 board/plate "inter-connector",I can connect REV 0 plate to California S-100 plate with this.

I hand wired two s-100 development board to get job done. (1mm square copper wire)

I install the "inter-connector" to REV 0 Altair 8800, leave the CPU board along on REV 0 plate, install memory board on California S-100 plate. Run a Kill a bit game from front panel switch, it works!

With the "inter-connector", I can bring the computer to full future without any damage to the original motherboard, I can restore Altair 8800 to original REV 0 status at any time when needed.

http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/31/140846mmuuakao99yzulfl.jpg

http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/31/141000wvdvutqu7gc8uug2.jpg

This is the original board from 1975
http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/17/111223p27r822vf2xx2f7h.jpg

Here's some defect on PCB replication process
http://w305251.s101-45.myverydz.com/data/attachment/forum/201501/31/142552fbnoz3b4yiliinqb.jpg

Chuck(G)
January 30th, 2015, 09:58 PM
I still am troubled by memories of all those bloody frail white wires--I improved my cursing considerably. Why on earth did MITS not use ribbon cable like any sane engineer would?

leiy
January 31st, 2015, 12:14 AM
I still am troubled by memories of all those bloody frail white wires--I improved my cursing considerably. Why on earth did MITS not use ribbon cable like any sane engineer would?

It take's me long time to bind the two board together.

leiy
January 31st, 2015, 12:19 AM
And finally success! I successfully connect two plate together without any damage to original REV 0 MITS S-100 motherboard.

This time with full 64K STATIC RAM populated on California S-100 plate.

I finally figured out some command of RMON V1.0 monitor from MITS Turnkey board, some command is the same as original MITS Turnmon monitor.

From right to left: CPU board, "Inter-connector", MITS 16KB static ram, MITS 16KB static ram, MITS 16KB static ram, Digital Micro System 16KB static ram, MITS Turnkey board.

http://i4004.info/data/attachment/forum/201501/31/171848sq3w5wkz0026od25.jpg

http://i4004.info/data/attachment/forum/201501/31/172712mqnh0byzqhy9ytkx.jpg

http://i4004.info/data/attachment/forum/201501/31/172925gjpjv5dq0yj8atvy.jpg

http://i4004.info/data/attachment/forum/201501/31/173218o9dxpw9qy7sxgxw7.jpg

http://i4004.info/data/attachment/forum/201501/31/174435y6bjtkpgi85gp858.jpg

http://i4004.info/data/attachment/forum/201501/31/174841ghz0mrcay80hihim.jpg

http://i4004.info/data/attachment/forum/201502/01/163700ipn3hca2t5h5zaws.jpg

http://i4004.info/data/attachment/forum/201502/01/163707xu7d6z7bokvdbazj.jpg

http://i4004.info/data/attachment/forum/201502/01/163704pgkl2k4m89fmqzl8.jpg

Corey986
January 31st, 2015, 02:58 AM
Great Job!!!! Next up run some Micro-soft basic stuff.

Great idea on the "reversible" motherboard idea. Just be careful of powersupply draw. The stock supply isn't good for more than about 8-10 cards depending on what they are.

I went a slightly different way. I sourced another MITS 4 slot motherboard. Got one with two connectors then sourced two original connectors and had a NOS spool of the same white wire MITS used. I happen to be rewiring mine anyway. After the third broken brittle wire from the front panel to motherboard, this was my only practical option to having a reliable machine. My plan was to build a money no object at the time machine that MITS would have provided so I obstained from anything that wasn't available Jan 76. Knowing how MITS trickled out the boards as they were ready it seemed plausible that someone would have gotten their Altair and as MITS started delivering something they would buy it. This is sort of a museum mentality for something like this. Put a date stake in the ground and make an "exhibit".

Still I bet you will be able to run CPM when Mike finishes his new controller card. I can't, but that's the direction I chose.

Finally now you need a plexiglass cover so you can show off the insides of your Altair. Just don't forget side vents to let the air out of the case when the fan is running.
Cheers,
Corey

leiy
January 31st, 2015, 04:44 AM
Great Job!!!! Next up run some Micro-soft basic stuff.

Great idea on the "reversible" motherboard idea. Just be careful of powersupply draw. The stock supply isn't good for more than about 8-10 cards depending on what they are.

I went a slightly different way. I sourced another MITS 4 slot motherboard. Got one with two connectors then sourced two original connectors and had a NOS spool of the same white wire MITS used. I happen to be rewiring mine anyway. After the third broken brittle wire from the front panel to motherboard, this was my only practical option to having a reliable machine. My plan was to build a money no object at the time machine that MITS would have provided so I obstained from anything that wasn't available Jan 76. Knowing how MITS trickled out the boards as they were ready it seemed plausible that someone would have gotten their Altair and as MITS started delivering something they would buy it. This is sort of a museum mentality for something like this. Put a date stake in the ground and make an "exhibit".

Still I bet you will be able to run CPM when Mike finishes his new controller card. I can't, but that's the direction I chose.

Finally now you need a plexiglass cover so you can show off the insides of your Altair. Just don't forget side vents to let the air out of the case when the fan is running.
Cheers,
Corey

Very valuable advice, thank you. I consider use one 64K DRAM board to replace four 16KB static ram boards, so it can unburden the power supply unit. Mike is developing a controller interface that can bring Altair Disk back to life that is great idea.

leiy
February 1st, 2015, 02:45 AM
After bring the machine to maxium 64KB RAM and test it ok, I packed the stock 1KB static rev 0 ram to aluminum bag.

http://i4004.info/data/attachment/forum/201502/01/193900itteei71763iiiit.jpg

http://i4004.info/data/attachment/forum/201502/01/194901vq5tu5mmuzutmjuv.jpg

leiy
February 12th, 2015, 04:12 AM
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

deramp5113
February 12th, 2015, 07:21 AM
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

Marty
February 12th, 2015, 07:49 AM
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

leiy
February 12th, 2015, 09:17 PM
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.

xprt
February 14th, 2015, 10:28 AM
I disassembled your monitor:

;
; 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:

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.

leiy
February 15th, 2015, 08:35 PM
I disassembled your monitor:

;
; 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:

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.