Poly Assembler: Commands: ASMB [Addr1] [Addr2] Assembles source the last address is where it will be located at. The first address is the address that the code will be located to run. If only one address is specified, it will be place and referenced to the same address. If an ORG is used, it will be assembled at that address. Use care not to over write the assmbler at 2000 or the space used after that for source. The source starts at 3443. Doing ' ASMB 2000 8000 ' will put the assembled code at 8000 but assemble as though it were to run at 2000. The DUMPx command doesn't seem to dump to another address other than the absolute. There is a way to cheat it. One can modify the DUMPx to use a code offset. In the above example, the code is to run at 2000 but is located at 8000. The difference is an offset of 6000. Just before doing the DUMP command, modify it so that it doesn't clear location 0C70 ( where the offset is for SAVEx ). Then set 0C70 to the offset. Last, return to the program and use the DUMPx command. As example: ^Z start monitor L2E78 point to memory 68 point to a harmless location L0C70 point to offset J6000 set offset GDUMPP /File/ 2000 2200 assumes 2200 was the end+2 and format is poly. The file that was saved came from 8000 but will load at 2000 as needed. ASMBE [Addr1] [Addr2] Assemble but show errors only. D duplicate label L label error U undefined label O not operation? ASMBS [Addr1] [Addr2] Assemble using symbol table from previous assembly. One can use this to put together a number of smaller files or generate a external sysmbol table for common useage. DELT start [end] Delete line numbers DUMPP & DUMPB start end+2 Dumps the specified memory area to tape as ABSOLUTE BINARY image. Uses a normal END record. Start and end are real addresses. There is a bug that you seem to need to add 2 to the last address. See information in ASMB about dumping from an offset. EXEC addr Goto address and execute code. Use wisely! FREE Display remaining available memory LOADB & LOADP /name/ Load source text lines from tape. Text must be in type 4 records and use a type 6 record as the end record. If one loaded more than one file, it would just concatinate them. This can confuse things because one can have the same line number multiple times. This overloading can be useful if one has a standard set of symbols that one wants to use in multiple files. One just needs to make sure that one doesn't overlap the line numbers. One can also use previous symbols by using the ASMBS options. This allows a number of smaller source files to be built up if the program is too large for memory. One would normally clear memory with a 'DELT 0 9999' before executing this instruction. This loader also seems to get confused if it reads anything but the specified record. Either keep the current source file as the first file on the tape or que it up first with the monitors loader. It is a pain but at least it works. If you use the monitors loader, reenter the assembler from 2000H. I assume that this is a bug that was missed at Polymorphics. I found the error, change the value at 2E03 from F7 to F3 and all will be OK. I didn't modify the image on the tape I made because I'd made these before I understood the problem. One could load into memory and edit it. Then saving it back to a working tape with SMD. Note: After loading, it doesn't seem to have all of the pointers set correctly? To get it going again, enter '9999 ;' and then 'DELT 9999' or just 'RSEQ 0'. The RSEQ method does wipe out the original numbering. In most cases, this is of little consequence. It will then start to work correctly in the editor. If you did overload another file you could concatinate the two by doing a 'RSEQ 0'. This would set the pointer correctly and put sequential numbers onto the added file, regardless of the original numbers. LIST [start] List lines. Only list one screen at a time. MNTR Goto monitor. Note: T many not work correctly because vectors are not restored. To restore tape vectors, use front panel reset. RSEQ [start] [step] Resequences the line numbers by steps. Without parameters, it starts at 0 and renumbers all the lines by a step of 10. If a start is specified, it goes from that number on. If a new line number is spcified as well, it will start the specified renumbering with the new number and step. This can be useful in opening up space for more code. SAVEP & SAVEB /name/ [start] [end] Save source text lines from tape. SYMT Display symbol table. The maximum number of symbols is set by the value located at 2006H. It is normally set to 64H ( 100 ). This can be made smaller or larger for more or less space for text. One can check the current end of source text that should be at 2FA0H, before assembling to make sure one doesn't over write the source. General use of the assembler Source text may be entered by first typing 4 digits for a source line number ( like in basic ). It must be exactly 4 digits to be an entry. The line numbers are only for editing reference and are not address related. Code must have two white space characters between the line number and the assembler code. White space is the space character or TAB ( ^I ). Labels must have only one white space character between line number and label. Code must follow on the same line as a label. Comment lines can start with ; instead of a label. Text after complete code on a line is treated as comments. Examples: 0010 MAIN MOV A,B comment 0020 JMP MAIN Other than the standard 8080 code words, the following have special effects on the assembler: ORG Set assembly address it absolute EQU Set label reference LON LOFF list on/off END Marks the end of the source ENDS If used before the first symbol is defined, it turns of the listing and will show only the symbol table when done. DB, DW, DS used to set byte, word and reserve space You need to put only one byte or word per line when using DB or DW. It looks like they started to code up something to recognize , and ! but I guess the deadline won out. ; Comment line. Use in place of a lable. Note: Instead of PSW use just P. Example 'PUSH P' instead of 'PUSH PSW'. KIL is a RST 0 SVC is a RST FF There isn't anything for RST 1 - RST 6 The assembler is position sensitive. The first position is for labels. The next position is for code. The rest of the line is comment space. The assembler may be started from 2000H as a cold start or from 2003H warm. If you use the 2003H entry after a reset from the front panel or a first load from tape, the assembler doesn't initialize the some interrupt routines. The operations of LOADx SAVEx and DUMPx will hang. If you enter the monitor from a ^Z, these vectors are not reset to the normal monitor function. If you attempt a T from the ^Z, after the assembler loads, it will crash. A front panel reset will restore normal monitor tape loading. If one wanted other space to add to the assembler one could move the assemblers work space up and put concurrent programs there. Location 203CH contains the initial pointer of the work space. Changing this to a larger number will open up this space. It is normally set to 3050H. Program called LISTR: This can be used to send a copy of the program list to the serial port. Because it uses the ASM functions of tape save and restore, when the serial is idle, it sends a continuous stream of 0E6H characters. The software on the other end, needs to strip these fill charcters. The program should be loaded after loading ASM but before a program is entered, once LISTR is installed, do 'SPJ0C72 G', from the monitor. This starts ASM automatically if load first, otherwise it will execute whatever is at 2000H. When it is desired to send the serial port, enter a ^L. This will cause anything sent to the screen to also be sent out the serial port at 2400Baud/8Bit/NoParity. A second ^L will turn of the lister. This is intended to be used with the assemblers ASMB and SYMT commands but can be used any time except during the tape operations DUMP, LOAD and SAVE. If turned on during tape actions, it will be unpredictable. I have written a simple logging program for the PC end. It is called: PLISTR.COM. PLISTR will log to the specified file until any key is hit on the PC keyboard. It will then close the file. It will overwrite the listing file specified so use with care. The command line format can be seen by typing PLISTR without any parameters. Do not use a slow floppy or unbuffered hard disk. There is no handshake and the Poly-88 doesn't wait.