2. Moving Text There are also methods of moving the text itself, when in the cursor mode. The direction, in which the text moves, is set by pressing the '+' key (a forward direction) or the '-' key (a backward direction) prior to pressing the L, P, or A keys. A) The L key will move the text up or down one line. B) The P key will move the text up or down one full page. C) The A key will set the text in continuous scrolling motion. You can move to the beginning or end of the text by pressing the Esc key first and then the '-' key or the '+' key respectively. 3. Deleting Text This function deletes text from the screen and the memory if the Apple, but not from the disk. There are three methods of deleting text: A) Ctrl-D Any character may be deleted by positioning the cursor over the character and pressing Ctrl-D. B) Ctrl-G Any line, or portion of a line, may be deleted by positioning the cursor over a character and pressing Ctrl-G. This will delete the character and the rest of the line that follows it. C) Esc Ctrl-Z All of the text, presently in the text-editor may be deleted by pressing Esc and then Ctrl-Z. You will have to confirm the command by pressing the # key. This protects against accidental erasures. 4. Block Operations This function allows you to mark a portion of the current source code, and then manipulate that block to another place in the file. You must designate the beginning and the end of a block by placing block markers at those two points. To insert a block marker immediately after the cursor, press Ctrl-V to mark the beginning and end of th block, and it will be represented on the screen by a flashing ')' sign. Only one block can exist in a file at any one time and any attempt to insert a block mark when a block has already been defined will result in the error message "BLOCK ALREADY MARKED". When a block is marked, press Esc V and the block options will be displayed on the bottom of the screen. They are Copy, Delete, and Unmark. To copy a block, move the cursor to the location in the file where you want to insert the copy of the block and press C. This is a non-destructive copy. To delete a block. Pressing D will remove the block and the block markers from memory. To unmark the block press U. You may also remove markers with normal delete commands. Remember, these changes only exits in the memory and not on the disk. 5. Find Operations Fo find all occurrences of a word or phrase in a file, use the find command. Press Ctrl-F and you will be prompted wit the "FIND:>" message. At this point, type in the word or phrase you wish to locate and press return. The first occurrence of the word or phrase will be displayed in the center of the screen. To find all subsequent occurrences press Ctrl-F and Return. You need not enter the word each time, the search will always begin at the current cursor location and search in the direction that the indicator in the lower left corner of the screen shows. 6. Printing Source Code Files To print the source code on a printer, press Ctrl-P. The screen will prompt you to type in the printer slot number. Once this has been done, and the RETURN key has been pressed, the text will print out. 7. Adding Text Position the cursor to where you want to begin adding text and enter the add mode by pressing Ctrl-A. To return from add mode to cursor mode, press Esc twice. 8. Loading files To load a file into memory which was previously saved on disk press Ctrl-L. The loading operation works similar to loading any other file. 9. Saving Files To save a file on disk, press Ctrl-S. Use the space bar to select the file name from disk, or type one in. Press RETURN when done. 10. Entering the Assembler To save the current robot program and enter the assembler, press Ctrl-R. This will save the text as it appears in the memory on the disk, and then exit the text-editor to the assembler. Before a robot can be assembled, it must have been given a name by being saved to disk. The Assembler The Assembler translates source code programs into robot-understandable object code. It also checks for errors in the source code and displays a message if one is found. The assembler can be entered from the Main Menu by selecting option 2, or from the editor by pressing Ctrl-R. If the assembler is entered from the editor, a robot source program is loaded and ready to assemble. It is possible to assemble a robot from source code on the disk, or load an assembled robot from disk to test. There is also an option to print the assembled robot on the printer. Assembly Errors There are eight errors that the RobotWar assembler can detect. When the assembler detects an error it will display a message such as: NO DATA FIELD IN LINE 27 10 + TO C ^ The error message indicates the type of error, the program line number and the position in the line (^) where it occurred. Following are the possible error messages: 1. NO DATA FIELD - There is no register or number after a command. 2. UNKNOWN ITEM - You have tried to use a register or a label that is not defined. 3. LARGE NUMBER - You have tried to store a number greater than 1,024, or less than -1,024 into a register. 4. PROGRAM TOO LONG - Program is too big for the allotted program storage area. Programs have a maximum length of 256 object code instructions. 5. FATAL JUNK - You have included something that the computer cannot understand, like an illegal statement. 6. STORE IN NUMBER - You have tried to store a value in a number instead of a register. 7. RESERVED LABEL - You have tried to use a register name as a label. 8. NO PROGRAM CODE - There are no instructions in the program. Object Code Exercise The following pages list the object code's commands and registers and the translation of the sample robot's source code. Using the list and the two codes for the sample robot, compare and identify the source code and it's object code translation. It will be very useful to understand the object code when learning to use the test bench in the next chapter. List of Object Code Instructions Instruction Action , Load accumulator with next data item IF Load accumulator with next data item + Add next data item to accumulator - Subtract next data item from accumulator * Multiply accumulator by next data item / divide accumulator by next data item = Skips the next command unless the accumulator is equal to next data item > Skips the next command unless the accumulator is greater than the next data item < Skips the next command unless the accumulator is less than next data item # Skips the next command if the accumulator is equal to next data item TO Store accumulator in next dat item GOTO Branch to the address given GOSUB GOSUB to the address give ENDSUB REturn from a subroutine Assembly of Robot Sample Code Building ==== ======== SCAN 0 , AIM 1 + 5 2 TO AIM 3 , AIM 4 TO RADAR LOOP 5 IF RADAR 6 < 0 7 GOSUB FIRE 8 GOTO SCAN FIRE 9 , 0 10 - RADAR 11 TO SHOT 12 ENDSUB Code Statistics === ========== 140 Letters 13 Instructions 3 Labels 2 References The Test Bench The test bench is a micro-computer simulator of a robot. With the test bench, you can monitor a robot's performance without actually putting it on the battlefield. This simulator will prove an important device, as you learn to debug robots, because it allows you to monitor the object code and the contents of the registers. Load a robot into the test bench by selecting option 2 from the assembler menu or from the main menu. Operating the Test Bench As the test bench runs the program, each instruction (in object code) will appear on the left side of the screen as it is executed. On the right side of the screen are displayed the robot's position and register contents. Also shown are the instruction number being executed (program counter) and the accumulator. Controlling the Test Bench The test bench can be interrupted by pressing the space bar. Press the space bar again to execute one more instruction. This can be useful when analyzing a program to see if it is acting as you had planned. Pressing RETURN will start the test bench running again. To change the speed of the test bench, press a number from 0 to 9. Simulating Radar Pressing the R key will cause the radar display to light up and the RADAR register will display a negative number to simulate an enemy robot in view. This will allow your program to go into it's "enemy spotted" routine. Simulating Damage Each time the G key is pressed, a random amount, up to 10% will be subtracted from the DAMAGE register. This allows th program the opportunity to use it's damage detection routine. The DAMAGE register will also indicate damage if the simulated robot crashes into a wall. The test bench will automatically stop when the DAMAGE register reaches 0. Tracing Registers The trace is used to check the contents of registers not normally displayed on the test bench. Press the T key to access the tracer. The test bench will stop, and the following question will be displayed: "NAME REGISTER TO TRACE?" Enter the name of the register you want to trace and press RETURN. The test bench will continue, with the contents of the traced register displayed on the line above "X POSITION". The Esc key will exit from the test bench. Storing Robots There is a limited amount of space on the RobotWar disk to store robot files. However, robot files can be transferred to and from auxiliary storage disks. Auxiliary storage disks are used only to store robot files. Robot files on auxiliary disks must be transferred back to the RobotWar program disk before they can be tested, assembled, edited, or battled. There is a utility in the menu to initialize a data disk. Only disks initialized by RobotWar can be used as data disks. To save or load a robot to or from a data disk simply remove the RobotWar disk after entering the robot name and before pressing return. After the file is loaded, swap the disks back again before continuing with the program. To delete a robot from a disk, exit to basic, and delete the file with the DOS 3.3 command DELETE filename and press RETURN. When done, enter PR#6 to re-start RobotWar. Summary of Editor Keys Cursor Mode: Moving keys + Set forward direction - Set backward direction Esc + Move to end of text Esc - Move to beginning of text A Sets text in continuous scrolling motion RETURN Move cursor up one line Esc RETURN Move cursor to top of page / Move cursor one line down Esc / Move cursor to bottom of page <- Move one space left -> Move one space right Esc -> Move cursor to right end of line Esc <- Move cursor to left margin P Move up or down one full page L Move text up or down one line Text deleting keys Ctrl-D Delete the character at the cursor Ctrl-G Delete the line at the cursor Esc Ctrl-Z Delete the whole file File handling keys Ctrl-L Clear memory and load a source file Ctrl-S Save text as a source file Ctrl-R Save current file and enters assembler Control keys Esc Ctrl-Q Exits to main menu Ctrl-F Executes FIND operation Ctrl-P Prints file in memory Ctrl-V Places block marker at cursor Esc-V Displays block options C-Copy block D-Delete block U-Remove block markers Add Mode Text adding keys Ctrl-A Start adding text Esc Esc Stop adding text <- Backspace, erases as it goes -> Moves text to the right RETURN Acts as a carriage return From the Assembler Space Bar Stop the assembler or move it one step RETURN Start the assembler operating again 0-9 Adjust the speed at which the assembler is scrolling From the Test Bench RETURN Start the assembler operating again 0-9 Adjust the speed at which the assembler is scrolling R Simulate Radar G Simulate a shell hit T Trace a Register Esc Exit the test bench the DOS 3.3 command DELETE filename and press RETURN. When done, enter PR#6 to re-start RobotWar. Summary of Editor Keys Cursor Mode: Moving keys + Set forward direction - Set backward direct -END-