-B- SUMMARY OF COMMANDS - optional info & parms in brackets I(NSERT): Inserts text after the last ln of text file I(NSERT) {ln#}: Inserts text before line number "ln#" D(ELETE) ln#: Deletes line number "ln#" D(ELETE) ln#{,ln#}: Deletes line in range specified L(IST): List the entire file L(IST) {ln#): Lists a single line L(IST) {ln#,ln#}: Lists lines in range specified LO(AD): Loads text file from cassette LO(AD) {filename}: Loads file from disk SA(VE): Saves file to cassette SA(VE) {filename}: Saves file to disk W(RITE) filemame: Writes file to disk as a TEXT type file AP(PEND): Loads a file from tape and appends it to text file in memory AP(PEND) {filename}: Loads a file from disk and appends it to the file in memory Control-D: Execute DOS command directly from LISA's command level Control-P: Jump to user defined routine LE(NGTH): Prints the length (in hex) of the current text file A(SM): Assembles current text file BRK: Breaks to Apple monitor F(IND): Searches for the specified label -C- EXPLANATION OF ERRORS Command Level: ILLEGAL COMMAND: User typed in an unrecognizable command at the command level--usually a typo. ILLEGAL LINE #: A digit was expected but not found Edit Time: ILLEGAL SYMBOL IN LABEL: An illegal symbol was detected in the label field. Possible a control character. LABEL TO LONG: A label appeared in the label field which contained more than 6 characters. If 7th or longer in the operand field. ILLEGAL MNEMONIC: Symbol in the mnemonic filed is not a valid LISA mnemonic. Causes-- beginning the mnemonic in column one, beginning the label in other than column one, the mnemonic is missing (perhaps you forgot to delimit a label with a ":"?), or a simple typo. ILLEGAL ADDRESSING MODE: Attempted to use an addressing mode which is not possible for the intended instruction. ILLEGAL OPERAND: General catch-all for syntax errors in the operand field. NOT ENOUGH DIGITS: Occurs when a hex string is entered with an odd number of digits. It take two hex digits to equal one byte and leading zero's must be typed into the HEX string. ILLEGAL HEX DIGIT: A hex digit was expected, but not found (remember, in hex strings you don't use "$"). ILLEGAL BLANK IN OPERAND FIELD: The first non-blank character in the operand filed after the first blank detected was not ";" or return. ILLEGAL CHARACTER IN STRING: Occurs when user did not enclose the entire string in quotes, or attempted to use the " or ' characters without doubling them up. STRING ERROR: Usually occurs when the string does not have closing quotes. Assembly Time Pass One: VALUE EXCEEDS $FF: User attempted to define a zero page location using EPZ, but the value of the expression exceeded $FF. ILLEGAL EXPRESSION: The address expression in the operand field of the EPZ opcode is invalid. MISSING 'END': The end of the text file was encountered but no END opcode was present. This error is an automatic abort. DUPLICATE LABEL: Zero page variable was previously defined ILLEGAL OPERAND IN ADDRESS FIELD: An illegal quantity was present in the address field ("*" is not allowed in EPZ statements). SYMBOL WAS NOT PREVIOUSLY DEFINED IN AN EPZ STATEMENT: Occurs when a symbolic reference is made in the address expression, but the label was not previously defined. PASS TWO: DUPLICATE LABEL: User attempted to redefine a previously defined label. UNDEFINED SYMBOL/ILLEGAL ADDRESS: Occurs when a symbol is found which is not defined in the program. ILLEGAL FORWARD REFERENCE: Occurs when the user attempts to use a symbolic reference in the address expression of an EQU opcode which has not been previously defined. EQU W/O LABEL: an equate was encountered, but no label was present. STY ABS,X NOT ALLOWED: User attempted to use an illegal addressing mode. ABS,Y NOT ALLOWED: User attempted to use an illegal addressing mode, variable must be zero page. ** DAMAGE ** ILLEGAL CHARACTER IN OPERAND: This usually occurs when part of the text file has been destroyed (watch OBJ's & ORG). PASS THREE: UNDEFINDED SYMBOL: Label in expression field was not defined anywhere else in the program. BRANCH OUT OF RANGE: Relative addressing only allows a range of -126 to +129:, this range was exceeded. UNDEFINED SYMBOL - MUST BE ZPAGE: An undefined symbol was encountered. This particular symbol, due to its usage, must be a zero page variable. ADDRESSING MODE REQUIRES ZPAGE VARIABLE: user attempted to use an absolute location where a zero page location is required. -USR PSEUDO OPCODE LISA 2.5 supports a special, user-definable,pseudo opcode. This is a no hold barred, always syntactically correct, user assignable pseudo opcode. Whenever USR opcode is encountered, a JSR to location $E029 is performed. Normally there is an RTS instruction & two NOP instructions at location $E029. You can, replace these three bytes with a jump to your pseudo opcode handler. In order to perform some operations you may need to call some of the routines within the LISA package. Three files in the disk, LISA P1.L LISA P2.L LISA P6.TXT contain sources for portions of LISA ; you may take a look at these files and call any routines within them. Other useful routines are: ERRR- prints an error message and gives the user the chance to abort assembly. ERRR's location is $EBE6, the calling sequence is: JSR ERRR ASC 'ERROR MESSAGE' HEX 00 If user wishes to continue, control will be returned to your program after the HEX 00 statement. GETADR- PNTR points at the beginning of the current line, the Y register contains an index into current line. GETADR converts the address expression found at the spot in the line pointed at by the Y register into a 16-bit value which is returned in location SADR & SADR+1. Carry is returned clear if there was an error, set if there was no error. Two locations are of interest after a call to GETADR: EYET if true, specifies an absolute address expression, if false, a zero page address expression. BIT #6 of AFND: is set if symbolic labels were pre-declared. If there are any forward references (during pass 2, at pass 3 they are undeclared symbols) then AFND has a zero in bit six. Calling address: $EBE9 SYMLUP looks up the symbol pointed at by PNTR and the Y register. EYET should be set to zero before calling SYMLUP. On return, EYET will be set to one if the symbol is not zero page and the carry flag will be set if the symbol was found in the symbol tab Calling address- $EBEC. Useful variables: PNTR: ($EA) points at the beginning of the current line LNUM: ($F2) hold line number of current line SADR: ($91) value of symbol or address expression returned here EYET: ($97) returned with 0 if zero page value, one otherwise LOCC: ($99) location counter.Contains the current program counter address CODE: ($9B) code counter. Contains the address of where the next byte of object code is to be stored. AFND: ($9F) returned with $FF if all symbols in address expression were defined PRTR: ($A1) Set to true (1) if LST option is in effect, false (0) if NLS option in effect CDSP: ($A2) Contains the number of bytes of object code output by this operation. Should be set to zero if no code is output PASS: ($BC) Contains 0 if this is pass two, contains 1 if this is pass three (USR address at $E029 is not called during pass one) FNAME: ($2C0) $2C0-$2DF contain the filename of the current assembling file CODSAV:($2E0-$35F) output code buffer, each byte of output object code is output to this buffer by successive calls to OUTC Upon calling the routine at $E029 several conditions exist. First, if there was a symbol at the beginning of the line it was entered into the symbol table ( during pass two, at pass three the symbol is ignored), PNTR points at the beginning of the line, and the Y register points at the USR mnem. token.To point the Y register at the operand field simply increment it by two.Now you can parse the operand field and do whatever you please with it. The operand field is terminated with a carriage return ($D). You must terminate your user routine with a BIT $C080 and an RTS instruction. XREF/65 A general purpose cross reference generator for LISA 1.5F and LISA 2.x. To use you must have Applesoft ROM or 16K RAM CARD, also a printer interface installed in slot one, & 48K or larger. Make sure program is without errors if not complete insert dummy labels. Before cross reference generate a TEXT type file of your LISA program. (L)oad then W)rite). Boot XREF/65 disk and "RUN XREF/65". SCTOLISA SC ASSEMBLER II 3.2- converts these files to LISA. "BRUN SCTOLISA"- enter SC ASSEMBLER II filename, return, file will be converted to LISA format. The file is written to disk as a TEXT type file. SC-CONVERTED- may be EXEC'd into LISA. Other problems....SCTOLISA does not handle certain types of address expressions very well. SORT 2.0 A symbol table sort routine provide for 2.2 users. BRUN immediately after an assembly in order to print a sorted (numeric & alphabetic) symbol table listing. DISASM/65 This produces a symbolic disassembly listing. You can relocate programs, see how other programs are written, patch up programs.DISAM/65 allows the user to specify hexadecimal, ASCII, address, and pushed address data types. To run- "BRUN DISASM/65". Prompt "ENTER RANGE OF DISASSEMBLY"--answer beginning & ending addresses of section of code you wish disassembled. -HIRES ROUTINES These routines are intended for assembly language programmers only. For the most part these cannot be called from INTEGER BASIC, APPLESOFT, OR TINY PASCAL. Being easy to use the routines are very fast. The subroutine package includes routines which plot a point, erase a point, perform base calculations, draw a line, create a shape matrix, detect if any dots are ON in a specified range, clear the hires screen, turn on the graphics, draw a picture, "OR" a picture to the screen, erase a picture from the screen, "XOR" a picture to the screen, erase a line, and set parameters. A SYMBOL routine allows you to draw any of the 96 printable ASCII characters onto the screen, in a format of 46x30. Most of the routines in HIRES work on the principle of NXM picture. RADAR is used to determine whether or not any bits (i.e. dots) are ON within a specified range. The calling sequence for RADAR is: JSR RADAR HEX WIDTH HEX HEIGHT DRAWLN & ERSLN Draw and erase lines on the hires screen. DXY Allows the programmer to initialize SYMBOL Allows the user to display ASCII characters PICTURE Points to the ASCII representation of the picture PIX Praws the picture verbatim onto the screen ORPIX is similar to PIX except the picture is OR'd onto the screen instead of drawn verbatim ANDDIX Is used to erase a picture on the screen XORPIX Exclusive-OR's the picture to the screen allowing interesting effects