(6) Diagnostics The assembler will only print out a screenful of diagnostics (24) before it stops. When applicable, the file and line number where the error occurred are given. An attempt is made to indicate the line where the error actually occurred, rather than where its effects were first seen. Assembly is stopped at certain points if errors have been detected, since it would make no sense to go on past the given point. The following is an alphabetized listing of diagnostics classified by whether they are fatal or non-fatal. Assembly always stops after the former but will continue after the latter (until the error limit is reached). Internal errors should be reported to me, see the README file at the FTP site csd4.csd.uwm.edu in the directory /pub/8051 or /pub/micro/8051 for more information. If you get an internal error, you should display the object file using the object file display program provided with the assembler. If you want me to resolve the bugs (if any exist) I would need to see this as well. Alternatively, the source for the assembler is yours. If you want to make modifications, try your hand at it, and if something significant results let everyone know by placing it in the public domain. (a) Fatal Errors These diagnostics will cause assembly to stop immediately, they usually represent serious inconsistencies or serious points of confusion for the assembler that makes further processing impossible or pointless. Address out of range The location counter points to the indicated address, which lies outside the address space of the current segment. These address spaces are as follows: Type Low High code 0 65535 (or ffff hexadecimal) xdata 0 65535 (or ffff hexadecimal) data 0 255 (or ff hexadecimal) Attempting to write to a non-code segment. This happens if you try to use any image generating statement (db/byte, dw/word, or any opcode) in a data or xdata segment. Only code segments will accept these statements. Bad opcode initialization. This is an internal error you should never see. It indicates an internal inconsistency in the assembler's opcode tables. These tables are used to process the 8051 mnemonics. Cannot fit segment. The linker tries its best to fit all the relatively addressed segment in the tightest fitting space it can. It may fail to pack them all in, if they can only fit real tightly, or your segments may actually not fit at all. Use the object file display program that accompanies this assembler to look at your object files in some detail. Cannot open An file was lost sometime during processing, or the file named probably does not exist, or is not readible. Cannot open object file for . The object file for the source file indicated was somehow lost or made inaccessible between the time it was created and the time it was processed by the linker. Cannot open output file. For some unexpected reason, the assembler could not create an .hex output file. If you're running this on a UNIX, then you're probably assembling output into a directory where you have no write access. Also possible: you ran out of disk space. Cannot reopen A failure to reopen the current file after processing an include file occurred. This indicates either an internal flaw in the assembler or that something happened to the file during assembly. Corrupt object file . A rudimentary check are made on object files. The file indicated didn't pass that check. It's was either corrupted, or the assembler itself has an internal flaw that made it produce corrupt object files. Could not restore 's position. A failure to resume processing the current file past the most recent include statement occurred. This indicates either an internal flaw in the assembler or that the file undergoing processing was corrupted during assembly. Could not save 's position. A transient error occurred while setting up to include another file. This is either a serious system flaw, or an internal flaw in the assembler. Expression too complex ... aborting. If you see this, you must be Lieutenant Commander Data. An expression has to be pretty complicated before it confuses the assembler. Break it up, by symbolically defining subexpressions first. Internal error (0). An inconsistency was detected by the linker in the object file undergoing processing. A relocation item of undefined type was found. Internal error (1). An inconsistency was detected by the linker in the object file undergoing processing. An undefined expression was found. Internal error (2). A flaw in the assembler made it lose track of all the code segments, even though at least one was defined. Internal error (3). A flaw in the assembler made it think that a ds/rb, or rw statement was reserving memory outside the segment where it was defined. Internal error (4). A flaw in the assembler caused it to try and relocate two or more items to the same address. This can also be caused by a corrupt object file. Internal error (5). A flaw in the assembler caused it to have trouble resolving an expression during linking. This can also be caused by a corrupt object file. Internal error (6). A flaw in the assembler made it fail to sort the list of items to be relocated. A corrupt object file can cause this too. Internal error (7). A flaw in the assembler made it think it was trying to patch up a hole of size other than 1 or 2 bytes. This can also be caused by a corrupt object file. Internal error (8). The assembler is expecting an object file larger than what it sees. This is the result of either an internal flaw or corrupt object file. Invalid object file . The first type bytes of all object files are 55 and aa (hexadecimal). The object file undergoing processing doesn't show this. It's was either corrupted, or the assembler itself has an internal flaw that made it produce corrupt object files. Invalid option: -