1. Use EDITM to create the assembly language source file:
=EDITM
EDITM RELEASE 3.10
COPYRIGHT BY MOTOROLA 1978
READY
?BUILD HELLO
HELLO .SA:0 CREATED
0010 NAM HELLO Sets module name
0020 TTL HELLO Sets title on listing
0030 OPT REL,G,S options: rel for relocatable, g to expand fcc
0040 PSCT Program section
0050 START LDX #PROMPT Point to string
0060 SCALL .DSPLY Display string
0070 SCALL .MDENT Return to MDOS
0080 PROMPT FCC "HELLO, WORLD!"
0090 FCB 13 Carriage return terminates string
0100 BSZ 80 Allocate space for stack
0110 END START Label after END is entry point
0120
?RESE N Eliminate line numbers
READY
?LIST
NAM HELLO
TTL HELLO
OPT REL,G
PSCT
START LDX #PROMPT
SCALL .DSPLY
SCALL .MDENT
PROMPT FCC "HELLO, WORLD!"
FCB 13
BSZ 80
END START
?Q
SAVE IN HELLO1 .SA:0 (Y/N)?Y
READY
?Q
=
2. Assemble, including EQU.SA file. Note that there is no
include
directive, so header files like EQU.SA have to be
specified on the command line.
=RASM EQU,HELLO1;LO=HELLO1
...490 lines from the EQU.SA file...
00491 NAM HELLO
00492 TTL HELLO
00493 OPT REL,G
00494P 0000 PSCT
00495P 0000 CE 0007 P START LDX #PROMPT
00496P 0003 SCALL .DSPLY
00497P 0005 SCALL .MDENT
00498P 0007 48 A PROMPT FCC "HELLO, WORLD!"
P 0008 45 A
P 0009 4C A
P 000A 4C A
P 000B 4F A
P 000C 2C A
P 000D 20 A
P 000E 57 A
P 000F 4F A
P 0010 52 A
P 0011 4C A
P 0012 44 A
P 0013 21 A
00499P 0014 0D A FCB 13
00500P 0015 0050 A BSZ 80
00501 0000 P END START
TOTAL ERRORS 00000--00000
=
3. Link
=RLOAD
MDOS LINKING LOADER REV F3.P0
COPYRIGHT BY MOTOROLA 1977
?IF=T Gives name of temporary file for second pass
?BASE Set base addresses for MDOS
?IDON Enable display of module name information
?LOAD=HELLO Load object file, first pass
HELLO
?OBJA=HELLO Give name of output file, start second pass
HELLO
?MAPF Show map file
NO UNDEFINED SYMBOLS
MAP
S SIZE STR END COMN
B 0000 0020 0020 0000 <-- Base section, for code below $100
C 0000 2000 2000 0000 <-- Common section
D 0000 2000 2000 0000 <-- Data section
P 0065 2000 2064 0000 <-- The code is here, in program section
MODULE NAME BSCT DSCT PSCT
HELLO 0020 2000 2000
?EXIT Exit RLOAD
=
4. Load and run
=LOAD HELLO;G
HELLO, WORLD!
5. Rename it to a command file
=NAME HELLO.LO .CM
6. Now just type the command:
=HELLO
HELLO, WORLD!
=
You should likely modify EQU.SA to suppress its listing.
Add:
* INCLUDING MDOS EQUATE FILE
* LISTING OFF...
OPT NOLIST At the beginning.
Add:
OPT LIST At the end.
* ...LISTING ON
1. Create a MAIN module:
=EDITM
EDITM RELEASE 3.10
COPYRIGHT BY MOTOROLA 1978
READY
?BUILD MAIN
MAIN .SA:0 CREATED
0010 NAM MAIN
0020 TTL MAIN
0030 OPT REL
0040 OPT G
0050 OPT S
0060 PSCT
0070 XREF DOIT
0080 START JSR DOIT
0090 SCALL .MDENT
0100 BSZ 80
0110 END START
0120
?RESE N
READY
?LIST
NAM MAIN
TTL MAIN
OPT REL
OPT G
OPT S
PSCT
XREF DOIT
START JSR DOIT
SCALL .MDENT
BSZ 80
END START
?Q
SAVE IN MAIN .SA:0 (Y/N)?Y
READY
?Q
=
2. Modify HELLO module so that it's a subroutine:
=EDITM
EDITM RELEASE 3.10
COPYRIGHT BY MOTOROLA 1978
READY
?LOAD HELLO
RESEQUENCE NEEDED
READY
?RESE
READY
?LIST
0010 NAM HELLO
0020 TTL HELLO
0030 OPT REL
0040 OPT G
0050 OPT S
0060 PSCT
0070 FRED JMP FRED
0080 START LDX #PROMPT
0090 SCALL .DSPLY
0100 SCALL .MDENT
0110 PROMPT FCC "HELLO, WORLD!"
0120 FCB 13
0130 BSZ 80
0140 END START
?0100 RTS
?0080 DOIT LDX #PROMPT
?0140 END
?0055 XDEF DOIT
?LIST
0010 NAM HELLO
0020 TTL HELLO
0030 OPT REL
0040 OPT G
0050 OPT S
0055 XDEF DOIT
0060 PSCT
0070 FRED JMP FRED
0080 DOIT LDX #PROMPT
0090 SCALL .DSPLY
0100 RTS
0110 PROMPT FCC "HELLO, WORLD!"
0120 FCB 13
0130 BSZ 80
0140 END
?0130
DELETED
?RESE N
READY
?Q
SAVE IN HELLO .SA:0 (Y/N)?Y
READY
?Q
3. Link them
=RLOAD
MDOS LINKING LOADER REV F3.P0
COPYRIGHT BY MOTOROLA 1977
?IF=T
?BASE
?IDON
?LOAD=HELLO
HELLO
?LOAD=MAIN
MAIN
?OBJA=HELLO
HELLO
MAIN
?MAPF
NO UNDEFINED SYMBOLS
MAP
S SIZE STR END COMN
B 0000 0020 0020 0000
C 0000 2000 2000 0000
D 0000 2000 2000 0000
P 006C 2000 206B 0000
MODULE NAME BSCT DSCT PSCT
HELLO 0020 2000 2000
MAIN 0020 2000 2017
DEFINED SYMBOLS
NAME S STR NAME S STR NAME S STR NAME S STR NAME S STR
DOIT P 2003
?EXIT
=
4. Try it
=LOAD HELLO;G
HELLO, WORLD!
=
I think the start addess is the label on END of the last module. I don't think this label can refer to an XREF- it's got to be in the module.
There are three:
Invoke as follows: EDIT input-file,output-file
This is a much simplified TECO clone. TECO is like a screen editor, but without the screen. Instead you have to use your imagination to remember where the cursor is.
An important concept to understand for TECO-like editors is that they allow you to edit large files, but only within a small in-memory buffer window at a time, and without any kind of software or hardware based virtual memory system. The window makes one pass through the file, then you must exit and re-enter the editor.
Two commands facilitate this. Use A to append 255 lines from the beginning of the input file into the buffer. When you are done editing use P to move lines from the buffer to the output file. Now that there is space free for more lines, you can use the A command again to get more lines.
The P command allows you to move lines from any part of the edit buffer to the output file. This can sometimes be useful as a kind of cut and paste feature, but usually you will want to append lines between the cursor and the beginning of the buffer to the end of the output file, so you need to use something like -500P$$ (copy lines starting 500 lines back to the cursor and append to output file).
$ means hit ESC key. It is possible to give several commands separated with ESC before hitting the final ESC.
- [-]nnP$$
- Remove lines from the buffer and append them to the output file.
- A$$
- Bring in 255 lines from the file and append them to the buffer (you need to do this before you can do any editing).
- Itext$$
- Insert text at current position.
- E$$
- Move remaining lines from buffer and input file to output file and exit.
- [-]nnM$$
- Move forward by nn characters
- [-]nnD$$
- Delete characters
- Ntext$$
- Search forward for text. This command automatically runs the A and P commands to bring more text into the editor until the string is found. If the search fails, you need to exit the editor because all of the text will have been written out.
- B$$
- Go to beginning of buffer
- Z$4
- Go to end of buffer
- K$$
- Delete to end of current line including CR
- -T$$
- Type from beginning of previous line to current position
- -1T$$
- Type from beginning of previous line to current position
- T$$
- Type to end of current line
- 1T$$
- Type to end of current line
- 0T$$
- Type from beginning of current line to cursor
- 0TT$$
- Type entire current line
- Stext$$
- Search forward for text. If not found, leave cursor at same position.
- Ctext$replace$
- Search forward for string and replace it.
- Ctext$$
- Search forward for string and delete it.
- [-]nnL$$
- Move cursor forward [-]nn lines
One way to use EDIT defensively is to try to always keep the cursor at the beginning of the line. In this way, it is somewhat like a line editor, which at least requires a little less imagination to use without getting hopelessly lost.
- A$$
- Bring file in from disk
- T$$
- Show current line
- L$$
- Move to beginning of next line
- -L$$
- Move to beginning of previous line
- K$$
- Delete current line
- Itext
$$ - Insert line - remember to include carriage return.
- E$$
- Save and exit
- Stext$$L-L$$
- Find text and move to beginning of line
- Ctext$repl$$L-L$$
- Change text in current line and go back to beginning of line
- L-L$$
- Go to beginning of line
- L-M$$
- Go to end of line
Note: there is no "repeat previous search" that I could find.
Note: there is no way to abort your current edits (so make a backup file first)
This is a screen editor (for an ExorTERM 155) with a line editor mode. This was the only editor I used when I used MDOS professionally. I only used it in line mode ("scroll mode"), because we did not have an ExorTERM 155. Also, I think the version I used had been patched to always start in scroll mode.
Invoke the editor with: E FILENAME;S-N
Option S disables screen editor mode ("crt" mode). Option -N disables automatic line numbering of new files.
If someone knows the control sequences for an ExorTERM 155, please send them to me. I'll add a translater to EXORSIM so that E can be used as a screen editor with ANSI terminal emulators.
Update! I have found the manual for the EXORterm 155 and have implemented an emulator for it so that now E can run in screen editor mode. Check it out:
In this mode, E is a modal editor like vi. You type commands (see the list below) into a prompt. You move the "current line" pointer using the arrow keys, scrolling keys (F3 - F6) or by executing one of the commands. If you do not have line numbers and type the insert (I) command, the cursor jumps into the text at the current line. If you do have line numbers and type the number (N) command, the cursor jumps into the text at the specified line. When you are done inserting new lines, hit F1 to get back to the command prompt.
At any time you can switch between scroll mode or crt mode by hitting F2 or F1.
These strings are in the commnad table: C, CHAN, D, DEL, DELE, DUPL, E,
EX, EXTE, F, FIND, I, INSE, L, LIST, MERG, MOVE, N, NUMB,
PRIN, QUIT, R, RANG, RESE, S, SAVE, SEAR, TAB, V, VERI, X, XTRA.
- F 0
- Go to top of file
- F //
- Go to top of file
- F
- Print current line
- F -1
- Go back one line
- F 1
- Go forward one line
- F /string/
- Search for string starting at beginning of file
- S /string/
- Search for string starting at next line
- S
- Find next instance
- C /old/new/
- Replace old string with new one in current line
- L
- List entire file
- L [-]NN
- List one line relative to current line
- L [-]NN-MM
- List MM lines starting with line [-]NN relative to current line
- QUIT
- Save and exit
- QUIT A
- Abandon and exit
- SAVE
- Save file
- DEL
- Delete current line
- DEL [-]NN
- Delete line [-]NN, relative to current line
- DEL [-]NN-MM
- Delete range of lines
- MOVE [-]NN-MM
- Cut
- XTRA
- Paste
- EX /string/
- Append string to current line
- RESE
- Add line numbers, resequence
- RESE N
- Eliminate line numbers
- N nn[,ii]
- Enter lines with auto-incrementing line numbers starting with line nn, increment ii (default is 10).
- MERG name
- Insert file
- I
- Enter insert mode: Insert lines until you try to enter a blank line (in scroll mode) or hit F1 (in crt mode).
This is a "simple" line editor which requires you to use line numbers (because it has no notion of current line). Since no programming languages except BASIC expect line numbers, you have to "rese n" (delete them) before saving the file.
Documentation for this editor is incuded on some of the MDOS disk images on bitsavers.
- BUILD <file>
- Create a new file
- LOAD <file> [N]
- Load a file. N means no. line no.s in file.
- LIST [NN[-MM]]
- List a file. 9999 means list name too.
- SAVE <file>
- Save file
- NNN <line>
- Add a line
- NNN
- Modify a line
- END,Q,QUIT,EXIT
- Exit editor. Prompts for name.
- C /XXX/YYY/
- Change
- C NN/XXX/YYY/
- C NN-MM/XXX/YYY/
- C NN-MM;KK/XXX/YYY/
- KK is occurance. 'A' means all. _ in XXX or YYY is single character wild card.
- A /XXX/
- Append
- A NN/XXX/
- A NN-MM/XXX/
- F /XXX/
- Find
- F NN/XXX/
- F NN-MM/XXX/
- F NN-MM;KK/XXX/
- P
- List to printer
- P NN
- P NN-MM
- RSQ
- Resequence
- RESE
- Resequence
- RSQ MM
- MM is starting
- RSQ MM,NN
- NN is increment
- RSQ NLN
- Remove record keys
- M NN,MM
- Move
- M NN-MM,LL
- M NN-MM,LL,KK
- LL is new location, KK is new increment (def = 1)
- DEL NN
- Delete
- DEL NN-MM
- D NN,MM
- Duplicate
- D NN-MM,LL
- LL is new location, KK is new increment
- D NN-MM,LL,KK
- B
- Block mode (narrow to last range)
- B OFF
- MERGE file(nn-mm),ll
- Merge file in.