home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 17 / amigaformatcd17.iso / -in_the_mag- / emulation / 68xx_crossasm / newman.doc < prev    next >
Text File  |  1997-07-01  |  65KB  |  2,075 lines

  1.  
  2.  
  3.                     Motorola Free Ware Cross Assemblers
  4.                               release TER_2.0
  5.  
  6.  
  7.  
  8. 1.0       COPY RIGHT NOTICE
  9.  
  10. You may not distribute these cross assemblers and charge more than a
  11. nominal fee for the distribution media itself. This software is the
  12. property of Motorola and is made available as free ware for the purpose of
  13. developing software for their microprocessors only. "Free Ware" means that
  14. no charge is made for copying or for the use of computer software but that
  15. all other rights including but not limited to use of the software in whole
  16. or in part in other programs remains with Motorola.  Software means the
  17. source code and all versions of object code or computer coded instructions
  18. in whole or in part.  All copies must carry this notice.
  19.  
  20. 1.1       Disclaimer
  21.  
  22. The cross assemblers are supplied "as is" without warranty of any kind
  23. expressed or implied.  They are believed to be accurate but the user takes
  24. upon him or herself the entire responsibility and consequences of their
  25. use.  Neither Motorola nor any of the contributing authors warrant that the
  26. software is without errors, will operate without interruption or will be
  27. compatible with any software or hardware possessed or to be possessed by
  28. the user or that the use of the software or any of its parts will result in
  29. any economic advantage or reduction in cost.  Neither Motorola nor any of
  30. the contributing authors will be liable for any special or incidental or
  31. consequential damages, even if informed of the possibility of such damages
  32. in advance.
  33.  
  34. 1.2       Contributing Authors
  35.  
  36. Original Code                 E.J. Rupp 12/11/84
  37.  
  38. Releases beginning with TER   Terry E. Rogers
  39. (modifications & manual only) 6255 Henryk Woods Rd.
  40.                               Clay, New York 13041
  41.  
  42. Note:  This software is a direct descendant of the E.J. Rupp version.
  43. Other versions may exist.
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.                                     page -1-
  62.  
  63.  
  64. 2.0 INDEX
  65.  
  66. 1.0       Copy right notice & Disclaimer
  67. 2.0       Index
  68. 3.0       General
  69.             3.1 Assemblers
  70.             3.2 Command Line Format & Options
  71.             3.3 Compatibility with previous versions
  72.             3.4 Compatibility between host DOS systems and support
  73.                                                          equipment
  74. 4.0       Assembler Source Code Format
  75.             4.1 Labels & Symbols
  76.             4.2 Opcode
  77.             4.3 Operand
  78.                4.3.1 Constants
  79.                4.3.2 Symbols
  80.                4.3.3 Expressions
  81. 5.0       Pseudo Opcodes
  82.             5.1 List of Pseudo Opcodes
  83.             5.2 Symbol value assignment; EQU
  84.             5.3 Memory allocation & definition; ORG, FCC, FDB, FCB, RMB,
  85.                                                            ZMB,BSZ, FILL
  86.             5.4 Conditional Assembly & Include Files; IFD, IFND, ELSE,
  87.                                                        ENDIF, END, INCLUDE
  88.             5.5 Listing Control; PAGE, OPT
  89.                  paging, symbol tables, cycle count
  90.             5.6 Program Counter control; CODE, DATA, BSS, RAM, AUTO
  91.             5.7 Ignored; SPC, TTL, NAME
  92. 6.0       Target Machine Specifics
  93.             6.1 6800
  94.             6.2 6801
  95.             6.3 6804
  96.             6.4 6805
  97.             6.5 6809
  98.             6.6 68HC11
  99. 7.0       Limitations & Errors
  100.             7.1 File & Symbol Table Size
  101.             7.2 Symbol Names
  102.             7.3 Lost & Locked Files
  103.             7.4 Phasing (pass 2 symbol value)
  104.             7.5 Error Listings
  105.             7.6 Warning Listings
  106.             7.7 Fatal Error Listings
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.                                     page -2-
  123.  
  124.  
  125. 8.0       Host Specifics
  126.             8.1 MS-DOS PCs
  127.             8.2 Apple MAC
  128.             8.3 Commodore Amiga
  129.                8.3.1 Shell & CLI
  130.                8.3.2 WorkBench
  131. 9.0       Formats
  132.             9.1 Symbol Table
  133.             9.2 Cross Reference Table
  134.             9.3 Listing
  135. 10.0      Some Techniques
  136. 11.0      Updates & Error Reporting
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.                                     page -3-
  184.  
  185.  
  186. 3.0 GENERAL
  187.  
  188. 3.1 Assemblers
  189.  
  190. These assemblers are updated versions of the original, two pass Motorola 8
  191. bit uC/uP free ware cross assemblers.  The assemblers are named as* where
  192. '*' is any of 0,1,4,5,9 or 11.  On MS-DOS systems, the assemblers have the
  193. extension .EXE.  Other systems do not have extensions.
  194.  
  195.      Example:       AS11                Amiga or MAC 68HC11 cross assembler
  196.                     AS11.EXE            MS-DOS 68HC11 cross assembler
  197.  
  198. Amiga versions have companion *.info files where * is here as5, as11 etc.
  199. The .info files are for WorkBench visibility.  Amiga versions may also
  200. include scripts and companion *.info files titled "Assemble 68HC11" e.g.
  201. which endow the assemblers with extended WorkBench selection of source code
  202. files.  This manual, updates and other documentation have the extension
  203. *.doc on all systems.  *.doc files are linked to system ASCII readers at
  204. GUI (graphic user interface) level on the MAC and Amiga.  (WorkBench is the
  205. Amiga GUI super application program analogous to MAC DeskTop.)  See section
  206. 8 for host OS specifics.
  207.  
  208. The file Update.doc (if any) contains enhancement descriptions.
  209.  
  210. 3.2 Command Line Format and Options
  211.  
  212. The following pertains to MS-DOS and Amiga systems.  The MAC does not have
  213. a command line user interface.
  214.  
  215. The command line looks like this :
  216.  
  217.         as* file1 [file2] ... [ - option1 option2 ...]
  218.  
  219.        Where:
  220.           as*    is one of the assemblers mentioned above
  221.           file<n>is an assembler source code file name complete with path
  222.                  (if not in current directory) in the host DOS format
  223.           option<n>
  224.                  is a UNIX like assembler option or command
  225.  
  226. file1, file2, file<n> are command line files as opposed to include files
  227. (there are subtle differences).  One or more spaces separates as* from
  228. file1, file1 from file2 etc. and file<n> from the minus sign preceding
  229. option1 and option 1 from option2 etc.  At least one assembler source code
  230. file is required.  Options are, of course, not required.
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.                                     page -4-
  245.  
  246.  
  247. file<n> may have the extension *.asm on all systems.  Any other extension
  248. acceptable to the host DOS is also permitted.  The file<n> files are
  249. assembled together with file1[.asm] as if they were all one file (no
  250. linking is performed and all symbols are global) to make file1.S19, a
  251. Motorola S record output in the default directory.  Source code files are
  252. left intact.
  253.  
  254. file<n> must be in "flat ASCII", i.e. must contain only alphanumeric, tab
  255. and end of line characters and must not contain formatting characters other
  256. than tab.  Many word processors will not produce a flat ASCII file even
  257. using a "text only" store or ASCII conversion option.  Form feeds and ANSI
  258. console control characters will probably be present.  Acceptable editors
  259. available on many systems include EMACS, MEMACS, VEDIT, vii (UNIX), ED
  260. (UNIX & AmigaDOS), EDIT (AmigaDOS), EDLIN (MS-DOS) and the integrated
  261. editor in many MS-DOS, MAC and Amiga languages such as C, Compiled BASIC,
  262. FORTRAN etc.  There are many others.  This is not a recommendation for any.
  263.  
  264.        Example:
  265.  
  266.        as5 BlackBox Serial -l cre
  267.  
  268. This command assembles files "BlackBox" and "Serial" using the 6805 cross
  269. assembler with an output listing and a cross reference table producing S
  270. record "BlackBox.S19" or "BLACKBOX.S19".
  271.  
  272. The assemblers accept options from the command line.  These options are the
  273. following:
  274.  
  275. l         enable output listing.
  276. nol       disable output listing (default).
  277. cre       generate cross reference table.
  278. s         generate a symbol table.
  279. c         enable cycle count.
  280. noc       disable cycle count.
  281. crlf      enable <CR,LF> (non MS-DOS systems)
  282. nnf       number include files contiguous with command line files
  283. p50    page break approximately every 50 lines
  284.  
  285. Command line options may not be combined as they may sometimes be in UNIX.
  286. There is only one minus sign.
  287.  
  288. Listings, tables, error messages and warning messages are all directed to
  289. std.out (standard output) which may vary between systems but is usually the
  290. CRT console.  Printed or file output typically must use "indirection" as
  291. defined on that system.  See section 8.
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.                                     page -5-
  306.  
  307.  
  308. 3.3 Compatibility with Previous Versions
  309.  
  310. The cross assemblers will accept source code files written for the original
  311. cross assembler porting to the "IBM PC" (MS-DOS systems) on 4/13/87
  312. providing that the files are supplied as command line arguments as shown
  313. above.  An "end" statement must be supplied as the last executable pseudo-
  314. op to be used as an include file.  A file so modified may be used with
  315. either the original or this version provided no further changes are made.
  316. ("End" is an ignored pseudo-op in the original.)
  317.  
  318. Source code written using the added features in this version are not
  319. compatible with the original.
  320.  
  321. 3.4 Compatibility between Host DOS Systems and Support Equipment
  322.  
  323. MAC and Amiga versions of these cross assemblers will accept source files
  324. originating on MS-DOS machines.  MS-DOS versions will not accept source
  325. code originating on MAC or Amigas without modification.  The end of line
  326. character on MS-DOS machines is <CR,LF> or $0D$0A.  The end of line
  327. character on the Amiga and MAC is <LF> or $0A only.  The MAC and Amiga
  328. versions search for both MS-DOS and their own EOL character.  You may use
  329. the search and replace features of the editors mentioned above (except the
  330. embedded language editors) to replace EOLs for cross system compatibility.
  331. Consult your manual for search and replace and "quote" character.
  332.  
  333. Some PROM burners, simulators and ROM manufacturers will not accept S1
  334. records with a <LF> EOL character.  Use option -crlf to change the S record
  335. output only to MS-DOS <CR,LF> EOL format if using the MAC or Amiga.  Other
  336. output remains in the host (D)OS format.
  337.  
  338. 4.0 ASSEMBLER SOURCE CODE FORMAT
  339.  
  340. The general source code format is:
  341.  
  342.        [<label>][:][...<Opcode>][...<Operand>] [... (; | *)][<comment>]
  343.           or
  344.        [; | *] <comment>
  345.           or
  346.        <...>
  347.             (an Opcode is the Mnemonic)
  348.        where:
  349.           < a  > means 'a' is a user supplied item
  350.           [  ] means optional item
  351.           a | b means either item a OR b is acceptable
  352.           ...  means blanks or blank line (actually any white space '  '|
  353.                                                          '\t' | '\n')
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.                                     page -6-
  367.  
  368.  
  369. A label is optionally followed by a colon.  A label may appear on a line by
  370. itself.  Labels are not required.  White space is a required delimiter
  371. where shown; even preceding comments.  White space is a space, tab or new
  372. line character.  Empty lines are treated as comments.  A line beginning
  373. with '*' or ';' in the first column is also a comment line.  A line having
  374. ';' as the first character, even if not in the first column, is a comment
  375. line.
  376.  
  377. The operand is, of course, optional if the Opcode or Pseudo-Opcode does not
  378. require it.  Comments are preceded by ';' or '*" or just white space if it
  379. can be unambiguously understood that what follows must be a comment.  '*'
  380. is handled in the same manner as in the previous cross assembler; a search
  381. is made for '*' only in the first column on a line.  If you make a mistake
  382. and leave out the Operand when it's required or use '*' to introduce a
  383. comment after a label, the rest of the line will be picked up as the
  384. (Pseudo)Opcode or Operand and produce an error.  However, ';' will
  385. introduce a comment on any line at any point provided that white space is
  386. immediately to the left.  That is, ';' is not a delimiter for Opcodes etc.
  387. Generally it's best to use ';' to introduce comments so as to avoid errors
  388. and confusion with '*' when used in an expression (shown below).
  389.  
  390. 4.1 Labels & Symbols
  391.  
  392. Symbol:
  393.  
  394. A string of  characters  with a  non-initial digit. The string of
  395. characters may be from the set:
  396.  
  397.       [a-z][A-Z]_.[0-9]$@
  398.  
  399. ( . and _ count as non-digits ).  The '$' and '@' count as a digit to
  400. avoid   confusion with  hexadecimal  and octal constants. All characters of
  401. a symbol are  significant,  with  upper and lower  case  characters being
  402. distinct.  The maximum number of characters in a symbol is currently set at
  403. 15.  Symbols have a integer value which may be zero.
  404.  
  405. A symbol ending in the character '@' is redefinable.  That is, its value,
  406. either an address or EQU value, may be altered without causing a redefined
  407. symbol error.  Note that in the cross reference and symbol table print outs
  408. that only the most recent value will be printed.
  409.  
  410. A symbol is defined from the point in the file where it first occurs as a
  411. label onward.  Using a symbol as an Operand (forward reference) does not
  412. define it.  A symbol is logically "undefined" (but still may have a value)
  413. at the beginning of each pass.
  414.  
  415. Label:
  416.  
  417. A symbol starting in the first column is a  label  and may optionally  be
  418. ended  with a ':'.  A label may appear on a line by itself and is then
  419. interpreted as:
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.                                     page -7-
  428.  
  429.  
  430.        Label: EQU *
  431. (That is the value of the symbol is set to the value of the program
  432. counter.  See section 5.2.)
  433.  
  434. A label may also be a redefinable symbol.  This is an alternative to local
  435. symbols when working with large files if the label is "very local" so that
  436. the programmer is able to be certain of the label value (address) when
  437. assembled.  Redefinable symbols should not be used as forward references
  438. i.e. should not occur as an operand as in "BNE LOOP@" before LOOP@ is
  439. defined.  The following is correct.
  440.  
  441.           ldaa #$ff
  442.        loop@             ;busy loop #1
  443.           deca
  444.           bne loop@      ;branches to busy loop #1
  445.  
  446.           ldaa #$ff
  447.        loop@             ;busy loop #2
  448.           deca
  449.           bne loop@      ;branches to busy loop #2
  450.  
  451. The following will not cause an assembler error but will not do what you
  452. expect.  Redefinable symbols are not checked for phasing errors.
  453.  
  454.           cmpa #$3E
  455.           beq loop@      ;branching into the unknown (actually a phasing
  456. error)
  457.           ldaa #0
  458.        loop@:  sba #$10  ;the branch will NOT go here
  459.           ldaa #$FF
  460.        loop@:
  461.           deca           ;it may go here instead (or even below this point)
  462.           bne loop@
  463.  
  464. Check for this type of error if you get a branch out of range.  Another
  465. possible error is caused by conditional assembly and include files.  Do not
  466. nest INCLUDE <file> statements within loops using redefinable variables
  467. (see section 5.4).  They could branch into a redefinable with the same name
  468. inside the include file. For example:
  469.  
  470.        loop@             ;might not branch here
  471.           deca
  472.           ifnd Data
  473.           include  <data.i>
  474.        ;might branch in here instead
  475.           endif
  476.           beq  loop@     ;branching who knows where
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.                                     page -8-
  489.  
  490.  
  491. The problem is especially vexing if symbol Data is sometimes defined and
  492. not during other assemblies.
  493.  
  494. 4.2 Opcode (Mnemonic)
  495.  
  496. Mnemonic (Opcode):  A symbol preceded by at least one whitespace
  497. character.  Upper  case characters in this field are converted to lower
  498. case before being checked as a legal mnemonic. Thus `nop', `NOP' and even
  499. `NoP' are recognized as the same mnemonic.
  500.  
  501. Note that register names that sometimes appear at  the end of  a  mnemonic
  502. (e.g. nega or stu) must not be separated by any  whitespace  characters.
  503. Thus  `clra'   means   clear accumulator A, but that `clr a' means clear
  504. memory location `a'.
  505.  
  506. Mnemonics recognized are those listed in Motorola documentation for a
  507. particular processor or micro-computer.  See section 6.x for the machine
  508. being used.
  509.  
  510. 4.3 Operand
  511.  
  512. Operand:  Follows mnemonic, separated by at  least  one  whitespace
  513. character.   The   contents   of   the  operand  field(s) is interpreted by
  514. each instruction.  In general, it may be a constant, symbol or an
  515. expression.  The assemblers use all after Opcode and before ';' as a
  516. possible Operand(s).
  517.  
  518. 4.3.1 Constants
  519.  
  520. Constants are constructed as:
  521.  
  522.        '       followed by ASCII character
  523.        $ followed by hexadecimal constant
  524.        @ followed by octal constant
  525.        % followed by binary constant
  526.        digit decimal constant
  527.  
  528. note: ASCII constant values are those of the host DOS or OS and may vary if
  529. not the alphanumeric standards.
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.                                     page -9-
  550.  
  551.  
  552. The following are legal constants.
  553.  
  554.        'A           has value $41
  555.        'a           has value $61
  556.        $F2          is 242 decimal
  557.        $12EA        is 4842 decimal
  558.        @73          is 59 decimal
  559.        %10110       is $16
  560.        255          is $FF
  561.  
  562.        Example:     ldaa  #$FF
  563.  
  564. note: The cross assemblers do not check the validity of a constant and will
  565. attempt to interpret errors with unpredictable results.  2F00 = 2 for
  566. example.  The assemblers usually will flag a constant too large for the
  567. operation.  However, the cross assembler itself may crash in a manner
  568. dependent upon the host (D)OS if a constant is too large for the host CPU
  569. type "int" in the C language.
  570.  
  571. 4.3.2 Symbols
  572.  
  573. If the Operand is a symbol, the symbol value is used as the operand.  The
  574. symbol may be an address (label) or data value.  For example:
  575.  
  576.        Max_Char = 10     ;input buffer length = value 10
  577.        ROM EQU $E000     ;ROM address start = $E000
  578.           ORG 0          ;RAM
  579.        InBuf:            ;input buffer
  580.           RMB Max_Char   ;reserve Max_Char=10 bytes
  581.        ...
  582.           ORG ROM        ;change PC to ROM=$E000
  583.        ...
  584.  
  585. The symbol may be redefinable in which case the current symbol value is
  586. used.  One example, "local" branch labels, was given in section 4.2.  You
  587. may also use redefinable symbols as operands for other operations such as
  588. immediate data; again as an alternative to local symbols.  You should use
  589. some restraint and avoid nested include files between data definition and
  590. use as described in section 4.2.
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.                                     page -10-
  611.  
  612.  
  613. 4.3.3 Expressions
  614.  
  615. Expressions may consist of symbols, constants or the character '*'
  616. (denoting the current value of the program counter) joined together by one
  617. of the operators: +-*/%&|^.  The operators are the same as in C.  The
  618. entire expression is treated as one Operand field so no white space is
  619. permitted in the expression.
  620.  
  621. Expression Operators
  622.  
  623.        +  add
  624.        -  subtract
  625.        *  multiply
  626.        /  divide
  627.        %  remainder after division
  628.        &  bitwise and
  629.        |  bitwise or
  630.        ^  bitwise exclusive-or
  631.  
  632. Special Expression Symbol
  633.  
  634.        *  current value of PC
  635.  
  636. Expressions are evaluated left to right and there is no provision for
  637. parenthesized expressions. Arithmetic is carried out in signed twos-
  638. complement integer precision (16 bits MS-DOS, 32 bits on Amiga and MAC).
  639.  
  640. The following are legal expressions.
  641.  
  642.        $FF/Max_Char      (=25 decimal if Max_Char was 10 decimal)
  643.        10+$FF/Max_Char
  644.           (=26 decimal because 10 is added to 255 and the result, 265, is
  645.                                                             divided by 10)
  646.        $FF&Max_Char      (=10 decimal)
  647.        $FF^Max_Char      (=$F5)
  648.  
  649. The following is legal but perhaps not what you want.
  650.  
  651.        BigBuf EQU 250
  652.        BufPtrInc EQU BigBuf   /  Max_Char
  653.  
  654. You may have expected BufPtrInc = 25 but its value will be 250 because "/
  655. Max_Char" is considered a comment.  White space is not permitted in an
  656. expression.
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.                                     page -11-
  672.  
  673.  
  674. 5.0 PSEUDO OPCODES
  675.  
  676. Pseudo Opcodes must start in other than the first column, like other
  677. mnemonics.
  678.  
  679.        <white space> <Pseudo-Op> [Operand(s)]
  680.  
  681. 5.1 List of Pseudo Opcodes
  682.  
  683. The following Pseudo Opcodes are supported.
  684.  
  685.      ORG, FCC, FDB, FCB, EQU,= , RMB, BSZ, ZMB, FILL
  686.      PAGE, INCLUDE, END, OPT, IFD, IFND, ELSE, ENDIF
  687.      CODE, DATA, BSS, RAM and AUTO.
  688.  
  689. Note: Fxx, ZMB, BSZ, FILL pseudo-ops advance the PC and add bytes to the S
  690. record.  They are counted in the "total bytes" issued at the end of
  691. assembly.  RMB advances the PC only and is not counted in the "total
  692. bytes."  However, RMB does cause the current S record line to terminate and
  693. begin a new line.
  694.  
  695. 5.2    Symbol Value Assignment, Equivalence
  696.  
  697.           <label>[:] EQU <*|constant|symbol|expression>
  698.  
  699. EQU may be used to set a symbol to the value of the Operand which may be a
  700. constant, symbol or expression.  EQU causes the value of the PC to be over
  701. printed by the value of the label (symbol) in the listing for convenience.
  702. It does not affect the PC.  "=" is an alternative for "EQU."
  703.  
  704. Examples:
  705.  
  706.        BigBuf EQU 250
  707.        BufPtrInc EQU BigBuf/Max_Char  ;with no white space
  708.        StartPtr = $0A+BufPtrInc
  709.  
  710. However,  EQU *  sets the label to the value of the current PC as in:
  711.  
  712.        Start EQU $E000
  713.           ORG Start      ;set PC to $E000, the value of Start
  714.           MADD EQU *     ;the value of MADD is $E000
  715.           FADD EQU *
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.                                     page -12-
  733.  
  734.  
  735. A redefinable symbol may appear on both sides of the EQU pseudo-op:
  736.  
  737.        X@ EQU $FF        ;X@ = 255 decimal
  738.           ldaa #10
  739.           staa X@        ;stored 10 at address 255
  740.        X@ EQU X@-5       ;X@ = 250 decimal
  741.           staa X@        ;stored 10 at address 250
  742.  
  743. A symbol is defined from the point in the source file where it is first
  744. used as a symbol with EQU (or alternately where the symbol is first used as
  745. a label).  Setting a redefinable symbol to value zero does not "undefine"
  746. it.  All symbols are logically "undefined" at the beginning of each pass
  747. but may well carry a value from one pass to the next.
  748.  
  749. Caution:  Equates for other than redefinable symbols that have forward
  750. references cause Phasing Errors in Pass 2.
  751.  
  752. 5.3 Memory Allocation & Definition
  753.        ORG, FCC, FDB, FCB, RMB, ZMB, FILL
  754.  
  755. ORG <constant | symbol | expression>
  756.  
  757. ORG (originate) sets the PC (program counter) to the value of the operand.
  758. There are no restrictions on how many times or where you may ORG.  The
  759. assemblers will not stop you from ORGing into address space  that doesn't
  760. exist on your processor or that doesn't make sense for the next operations.
  761.  
  762. Examples:
  763.  
  764.        Y_ROMAN EQU $E000
  765.           ORG Y_ROMAN    ;this is my personal favorite, sets PC=$E000
  766.           ORG $E000      ;sets PC=$E000
  767.        ASM EQU $E000
  768.           ORG ASM+10     ;this is a close second, sets PC=$E00A
  769.  
  770. Caution: ORGing without properly defining the segment (CODE, DATA etc. if
  771. you use these) may cause phasing errors on pass 2.
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.                                     page -13-
  794.  
  795.  
  796. FCC  '<ASCII characters>'
  797.  
  798. FCC (form constant characters) is used to sequentially place byte values of
  799. a string of one or more ASCII characters into memory.  Value means the
  800. ASCII code itself.  The value is that of the host system and so may vary if
  801. not the standard alpha-numerics.  The delimiter used is your choice. A '
  802. character is shown above but the assemblers simply take the first character
  803. in the string as the current delimiter which must appear again at the end
  804. to avoid an error.  So the format is actually:
  805.  
  806.           FCC <delim> <ASCII characters> <delim>
  807.  
  808. Examples:
  809.  
  810.        FCC 'No funds available!'
  811.        FCC "Take all the money you want."  ;much better
  812.        FCC dNOT AN ERRORd
  813.  
  814. The first statement would produce the following listing if PC = $E000
  815.  
  816.        E000 4E 6F 20 66 75 6E
  817.        64 73 20 61 76 61
  818.        69 6C 61 62 6C 75
  819.        21
  820.  
  821. A maximum of six hex bytes are printed per line in the listing, the rest
  822. appearing on lines below.
  823.  
  824. FDB <word>[,<word>] [,...etc.]
  825.        where <word> is <constant|symbol|expression>
  826.  
  827. FDB (form double bytes) is used to fill the memory with "long words" or 16
  828. bit quantities.  One could generate long word data tables or more likely,
  829. jump vector tables.  A word of data is optionally followed by another using
  830. ',' as delimiter.  Spaces are not permitted but will not cause an error
  831. during assembly, just termination of FDB.
  832.  
  833. Examples:
  834.  
  835.        FDB 1             ;fills word with $0001
  836.        FDB $E000,25,@674 ;mix constants
  837.        FDB Start,Start+10,Start+20
  838.  
  839. The following does not cause and error but does not do what you want.
  840.  
  841.        FDB $E000  ,$E000+10
  842.        ;just fills memory with $E000 skipping next term
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.                                     page -14-
  855.  
  856.  
  857. FCB <byte> [,<byte>] [,...etc.]
  858.        where <byte> is <constant|symbol|expression>
  859.  
  860. FCB (form constant bytes) is used to fill the memory with "short words" or
  861. 8 bit (byte) quantities.  It's useful in the construction of data tables.
  862. A byte is optionally followed by another using ',' as delimiter.  Spaces
  863. are not permitted in the data but will not cause an error, just termination
  864. of FCB.
  865.  
  866. Examples:
  867.  
  868.        FCB 1             ;fills byte with $01
  869.        FCB $FF,2,@17
  870.        FCB 'A,'B,'C|$80,'D,'E|$80  ;parity table
  871.  
  872. The following does not cause an error but skips all but the first term.
  873.  
  874.        FCB $FF  ,2,@17
  875.  
  876. RMB <constant|symbol|expression>
  877.  
  878. RMB (reserve memory bytes) is useful to mark RAM locations as being the
  879. beginning of buffers, temporary tables, variables etc.  It advances the PC
  880. but does not place any data in the S record.  The Operand contains the
  881. number of bytes to advance the PC.
  882.  
  883. Examples:
  884.  
  885. SizeOfBuf EQU 128        ;128 characters max
  886. Buf: ORG $10   ;Input buffer
  887.        RMB SizeOfBuf     ;make buffer (advance 128 characters)
  888.        NOP               ;PC=$90 for this instruction
  889. Buf2: RMB SizeOfBuf*2    ;Buf2 is 256 long, PC=$91
  890.        NOP               ;PC=$191
  891.        RMB 1000          ;big RAM! Advances PC by 1000 decimal
  892. Scratch: RMB 1 ;one byte
  893.  
  894. ZMB <constant | symbol | expression>
  895. BSZ <constant | symbol | expression>
  896.  
  897. ZMB (zero memory bytes) is similar to RMB except that in addition to
  898. advancing the PC, zero value bytes are written to the S record and would
  899. appear in a ROM if the S record is turned into firmware.  Examples would be
  900. similar to RMB.  BSZ (block store zeros) has the identical function.  The
  901. user is left to think of a use for this pseudo-op.
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.                                     page -15-
  916.  
  917.  
  918. FILL <value>,<byte_count>
  919.        where <value> is <constant | symbol | expression>
  920.                     <byte_count> is <* | constant | symbol | expression>
  921.  
  922. FILL can be used to fill memory with something other than zeros.  Beginning
  923. at the current PC, memory is filled with <byte_count> number of bytes
  924. having <value>.  Spaces are not permitted in the operand.  * stands for the
  925. current value of the PC (be careful; could also be multiply depending upon
  926. context).
  927.  
  928. Examples:
  929.  
  930.        FILL $A5,$10      ;ROM check ($A5 is repeated 16 times)
  931. TopMem EQU $FFE0         ;highest memory location used short of jump
  932.                                                             vectors
  933.        FILL CheckSymbol,TopMem-*  ;fill out the rest of the ROM with a
  934.                                                             given byte
  935.  
  936. In the example above, CheckSymbol would fill up to but not including
  937. location TopMem.  The expression (TopMem-*) computes the number of bytes
  938. left before TopMem by subtracting the current value of the PC indicated by
  939. '*'.
  940.  
  941. 5.4 Conditional Assembly and Include Files
  942.  
  943. INCLUDE <file>
  944.  
  945.  Include files have the following format:
  946.  
  947.           include <path:filename>  ;comment
  948.        or
  949.           INCLUDE "path:file name" ;comment
  950.                ...
  951.                (include file lines)
  952.                ...
  953.                end
  954.  
  955. The pseudo op (key word) INCLUDE may be upper or lower case, beginning in
  956. any column except column one (reserved for labels). An included file name
  957. must be surrounded by either < > or " " (brackets or quotes).  A full path
  958. name must be given; there is no option -<search path>.  The path and  file
  959. names may each contain spaces or any printing character but this may not be
  960. permitted except on the Amiga.  AmigaDOS and most others permit search
  961. paths to be assigned in the calling script or batch file. Another method is
  962. to always use the fictitious path name "assem_lib:" and ASSIGN assem_lib:
  963. <path> in the calling script (AmigaDOS only).  All DOS will search the
  964. current directory first (unless re-set by user).  A comment may follow the
  965. include statement.  Any delimiter or even none is acceptable but use ; or *
  966. for  future compatibility with semi-colon preferred because of its use in
  967. other cross assemblers.
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.                                     page -16-
  977.  
  978.  
  979. Each INCLUDE file must end with the pseudo op (key word) "end" (without
  980. quotes).  Each of the files given as command line arguments may finish with
  981. "end" and it is best to do so as a matter of form.  It has no effect,
  982. however, and assembly will continue after that point with the next command
  983. line file whereas assembly of an include file will terminate at "end."
  984.  
  985. The maximum number of nested include files open at one time is 30 including
  986. the top level.  The number of include files may be as large as the system
  987. permits but they may not nest any further than 30 deep.  Note: The
  988. assembler does not deallocate memory used to store include file names until
  989. the assembly process is finished.  This could be a problem on MS-DOS
  990. systems especially if very many include files are used.  Command line file
  991. names are not deallocated either but they may be handled differently.
  992. Motorola 68000 series base PCs do not have these problems.
  993.  
  994. IFD/IFND/ELSE/ENDIF
  995.  
  996. Conditional assembly is possible using IFD (if defined) and IFND (if not
  997. defined) pseudo operands and any symbol.  The test determines only if the
  998. mentioned symbol has been defined in an active block of code and does not
  999. test or affect the value.  The symbol value may be zero or any other value
  1000. and the symbol may or may not be used as a replacement symbol but it will
  1001. still test TRUE as IFD <symbol> if it has been defined at least once before
  1002. the test.  Using the symbol as an operand does not define it.  It must
  1003. appear beginning in column 1 of a line (label) for definition.
  1004.  
  1005. An active block of code is used by the assembler for code generation. An
  1006. active block is one which appears outside of an IF statement or is between
  1007. two IF/ELSE/ENDIF statements which test TRUE.  The format is:
  1008.  
  1009.      IF[ND] <symbol>
  1010.  
  1011.      ; code, more IFs, comments and definitions
  1012.  
  1013.      ELSE
  1014.  
  1015.      ; code, more IFs, comments and definitions
  1016.  
  1017.      ENDIF
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.                                     page -17-
  1038.  
  1039.  
  1040.  The rules are:
  1041.  
  1042.      1) each IF[ND] must be matched with a corresponding ENDIF.
  1043.  
  1044.      2) ELSE causes a change of state from active to inactive
  1045.      or vice versa if part of an active IF[ND] block.
  1046.  
  1047.      3) IF[ND] blocks contained within an inactive block are defined
  1048.      as inactive in their entirety.  ELSE does not cause a change
  1049.      of state.
  1050.  
  1051.      4) The matching ENDIF for an IF[ND] must occur in the same
  1052.      source file
  1053.  
  1054.  Examples:
  1055.  
  1056.   #1
  1057.           ifnd sysdat    ;ifnd may be upper or lower case
  1058.        sysdat:           ;define so that other files with same
  1059.                          ;data will not call same include file
  1060.           include <sysdat.i>
  1061.        ;system constant declarations
  1062.           endif
  1063.  
  1064.   #2
  1065.  
  1066.           ifnd foo
  1067.        fee: EQU 2        ;this block is active (no foo before)
  1068.        foo:              ;defining foo
  1069.           LDAA #2        ;and is assembled to S record
  1070.           NOP
  1071.           ifd fee
  1072.        ;fee was defined above
  1073.           STAA temp2     ;this block also active
  1074.           NOP
  1075.           else
  1076.           STAA temp1     ;this block not active & not assembled
  1077.           endif
  1078.           LDAB serial    ;this block active
  1079.           endif
  1080.           STAB buffer    ;this is always active & outside all if statements
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.                                     page -18-
  1099.  
  1100.  
  1101. 5.5 Listing Control
  1102.  
  1103. Also see section 3.2 for command line options with the same effect.
  1104.  
  1105. PAGE
  1106.  
  1107. The pseudo-op PAGE causes a form feed and new page heading to be inserted
  1108. into the listing output.  No operand is needed or accepted.  You may also
  1109. use the "p50" option (command line or OPT) to automatically page the
  1110. listing.  PAGE is still useful for placing include files etc. at the top of
  1111. a new page.
  1112.  
  1113. OPT <option>
  1114.  
  1115.   The OPT pseudo-op allows the following operands:
  1116.  
  1117.    nol Turn off output listing
  1118.    l Turn on output listing (default)
  1119.    noc Disable cycle counts in listing (default)
  1120.    c Enable cycle counts in listing (clear total cycles)
  1121.    contc Re-enable cycle counts (don't clear total cycles)
  1122.    cre Enable printing of a cross reference table
  1123.    s generate a symbol table
  1124.    crlf  enable <CR,LF> (non MS-DOS systems)
  1125.    nnf  number include files continuous with command line files
  1126.    p50 turn on page break every 50 lines approximately
  1127.  
  1128. Examples:
  1129.  
  1130.        OPT p50           ;turn on page breaks
  1131.        IFND Expand
  1132.        OPT nol           ;disable include file listing
  1133.        ENDIF
  1134.        include <data.i>
  1135.        OPT l             ;turn listing back on
  1136.  
  1137. 5.6 Program Counter Control (Segment)
  1138.  
  1139. CODE
  1140. DATA
  1141. BSS
  1142. RAM
  1143. AUTO
  1144.  
  1145.  
  1146.  
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153.  
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159.                                     page -19-
  1160.  
  1161.  
  1162. PC control pseudo operands save and restore the PC effectively assigning
  1163. different code and data segments to different physical portions of the
  1164. memory.  CODE, DATA, BSS and AUTO switch the assembler between four
  1165. different program counters which each may have their own ORG statements.
  1166. RAM is an equivalent for BSS (block storage segment).  Although equivalent
  1167. in every way, the names are intended to convey the physical concepts of
  1168. CODE (ROM), DATA (ROM), static variable RAM and dynamic / scratch or
  1169. AUTOmatic ram.  Typically, the user sets each PC to an initial value in a
  1170. global data file. E.g.
  1171.  
  1172.        CODE
  1173.        ORG $E000         ;set start of program ROM
  1174.        DATA
  1175.        ORG $F800         ;set start of data section of ROM
  1176.        BSS
  1177.        ORG $0000         ;set start of RAM
  1178.  
  1179. Then, as files are added or deleted during development or for different
  1180. configurations, the programmer marks each segment according to its purpose
  1181. and the assembler fills that physical memory from the last entry.
  1182. Normally, RMB statements only would occur in a BSS, RAM or AUTO segment for
  1183. the purpose of alloting RAM.  AUTO is suggestive of use as a scratch data
  1184. PC and might be ORGed in every routine.  However, the names are only
  1185. suggestive and may be used as the programmer desires.
  1186.  
  1187. 5.7 Ignored Pseudo-Opcodes
  1188.  
  1189. These Pseudo Opcodes are ignored (cause no action including error).
  1190.  
  1191.        SPC Use blank lines instead
  1192.        TTL use `pr' to get headings and page numbers
  1193.        NAM[E] Did you ever use this one anyway?
  1194.  
  1195. 6.0 TARGET MACHINE SPECIFICS
  1196.  
  1197. (as0) 6800:
  1198.  
  1199. Use for 6802 and 6808 too.
  1200.  
  1201. (as1) 6801:
  1202.  
  1203. You could use this one for  the  6800  and  avoid  LSRD, ASLD, PULX, ABX,
  1204. PSHX, MUL, SUBD, ADDD, LDD  and STD.
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.                                     page -20-
  1221.  
  1222.  
  1223. (as4) 6804:
  1224.  
  1225. The symbols 'a', 'x' and 'y'  are  predefined  as  $FF, $80 and $81
  1226. respectively. Also  defined  as  'A',   'X'   and   'Y'.    Because  of
  1227. the  6804  architecture, this means that 'clr x'  will  work  since  the  x
  1228. register is just a memory location.  To  use  short-direct  addressing,
  1229. the   symbol  involved  must not  be a forward reference (i.e.  undefined)
  1230. and must be in the range $80-$83.  Remember  that bytes  assembled  in  the
  1231. range  $10-$7F  will go into the data space; There is no  program space ROM
  1232. for these locations.
  1233.  
  1234. The syntax for Register indirect addressing is as  follows:
  1235.  
  1236.        menmonic [<x>or<y>]
  1237.  
  1238.        an example is:
  1239.        lda [x]
  1240.        the comma ',' is not allowed.
  1241.  
  1242. The MVI instruction (move immediate) has its own  format :
  1243.  
  1244.        mvi address,#data
  1245.           where address is an 8-bit address in page zero, and data is the
  1246. value to be written to
  1247.           specified location.
  1248.  
  1249. (as5) 6805:
  1250.  
  1251. There is no 'opt cmos' pseudo, so be careful  not  to use STOP or WAIT in a
  1252. program that is destined  for  an  NMOS  version of  the  6805.  The  MUL
  1253. instruction   should   also  be  avoided  on  all  versions of the 6805
  1254. except the C4.  Cycle  times  are for the NMOS versions.
  1255.  
  1256.  (as9) 6809:
  1257.  
  1258. The SETDP pseudo-op is not implemented.  Use the '>' and '<` operators to
  1259. force the size of  operands.
  1260.  
  1261. For compatibility, CPX is equal to CMPX.
  1262.  
  1263.  (as11) 68HC11:
  1264.  
  1265. Bit manipulation operands are separated by  blanks  instead  of commas
  1266. since the 'HC11 has bit manipulation instructions that operate on indexed
  1267. addresses.
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.                                     page -21-
  1282.  
  1283.  
  1284. 7.0 LIMITATIONS AND ERRORS
  1285.  
  1286. 7.1 File and Symbol Table Size
  1287.  
  1288. Source code and output data are stored in memory only line at a time only.
  1289. Therefore, there is practically no limitation on the size of the source
  1290. code except that imposed by the file storage media itself.  Symbol
  1291. definitions and values are stored in memory.  MS-DOS has room for somewhat
  1292. less than 2000 symbols of eight characters (the data requirements have been
  1293. increased over previous versions).  Amiga and MACs are almost always 1 Meg
  1294. RAM or larger and so will have enough room for more than 5000 with room to
  1295. spare for other data and the O/S.  MAC II/X and Amiga 2500 are essentially
  1296. unlimited.
  1297.  
  1298. The maximum number of nested include files is 30 (at one time).
  1299.  
  1300. 7.2 Symbol Names
  1301.  
  1302. The maximum length of each symbol name is 15 characters.
  1303.  
  1304. 7.3 Lost and Locked Files
  1305.  
  1306. Each source file is opened for reading and closed as required.  Each file
  1307. is read twice, once each pass.  It's possible that the media might be
  1308. removed or the file be otherwise made unavailable on the second pass.  This
  1309. would generate a file opening error.  Restart the assembly process if this
  1310. happens (find the lost file first!).  With the Amiga and certain multi-
  1311. tasking versions of MS-DOS (windows), the user can create problems by
  1312. editing files during assembly.  The editor may place a file lock on a
  1313. source code file (MEMACS doesn't) causing a file open error.  Really
  1314. strange things can happen if the user changes a file between first and
  1315. second assembly passes which might not cause an assembly error notice.  On
  1316. some systems, including the Amiga, you may be able to to prevent this by
  1317. protecting and unprotecting the file using a script which also calls the
  1318. assembler (see "protect" and (D)OS manuals).  File locks are not
  1319. implemented in the assembler for cross system compatibility.
  1320.  
  1321. An assembler crash may also leave a file lock on one of the source files.
  1322. See your (D)OS manual if this happens.  Back up the source files!
  1323.  
  1324. 7.4 Phasing Errors
  1325.  
  1326. A phasing error is reported if the value of a symbol is not the same on the
  1327. second pass as it was on the first pass.  A forward reference using EQU
  1328. will cause a phasing error.  However, no value checking is performed for
  1329. redefinable symbols.  Be careful using redefinable symbols.
  1330.  
  1331.  
  1332.  
  1333.  
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.                                     page -22-
  1343.  
  1344.  
  1345. Bad Example:
  1346.  
  1347. BufPtr EQU NextVal       ;but NextVal is not defined yet
  1348. ...
  1349. NextVal EQU $A000
  1350. ...
  1351. On the first pass, NextVal would be evaluated to zero and saved in BufPtr.
  1352. On the second pass NextVal would be $A000 which would not match the value
  1353. stored in BufPtr.
  1354.  
  1355. 7.5 Error Listings
  1356.  
  1357. Error diagnostics are placed in the listing file just before the line
  1358. containing the error.  Format of the error line is:
  1359.  
  1360. <file name>,Line_number: Description of error
  1361.  
  1362. Errors in pass one  cause  cancellation  of  pass two.  Error messages are
  1363. meant to be self-explanatory. The  file  name  precedes the error complete
  1364. with path.
  1365.  
  1366. The following is a listing of errors with some sparse comments where
  1367. required.  You can add more notes as you make the mistakes.
  1368.  
  1369. Auto Inc/Dec by 1 or 2 only
  1370. Auto Inc/Dec Illegal on PC
  1371. Bad fill       need second operand or missing comma
  1372. Bit Number must be 0-7   bit set or clear, only 8 bits on the port!
  1373. Branch out of Range      can happen if label not defined (conditional
  1374. assembly?)
  1375. Can't do both! predec & postinc not both possible
  1376. Can't Pull S from S
  1377. Can't Pull U from U
  1378. Can't Push S on S
  1379. Can't Push U on U
  1380. EQU requires label
  1381. Error: ELSE without IF   improper nesting?
  1382. Error: ENDIF without IF  improper nesting?
  1383. Error:IFD/IFND nested too deep  -maximum of 30 include files active
  1384. Extended Addressing not allowed
  1385. Illegal Register for Indexed
  1386.        -this register doesn't have indexed addressing
  1387. Illegal Register Name
  1388. Illegal Symbol Name      first character must be letter
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.  
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402.  
  1403.                                     page -23-
  1404.  
  1405.  
  1406. Immediate Addressing Illegal
  1407. Immediate Operand Required
  1408. Indexed Addressing Required
  1409. Missing ']'
  1410. Missing ,
  1411. Missing Delimiter        mismatching or no delimiter for FCC
  1412. No Auto Inc/Dec by 1 for Indirect
  1413. Offset must be Zero
  1414. Operand must be $80 or $81
  1415. PCR illegal here
  1416. Phasing Error            did EQU with forward reference?
  1417. Register List Required
  1418. Register Name Required
  1419. Register Size Mismatch
  1420. Symbol Redefined         only symbols ending in '@' may be redefined
  1421. Symbol table full        out of memory - try killing RAM: files or stopping
  1422. other tasks
  1423. Symbol undefined Pass 2  need at least one EQU or use as label
  1424. Syntax    6811 - got lost reading indexed addressing or bset/bclr - see
  1425. manual
  1426. Undefined Operand during Pass One
  1427. Unknown Addressing Mode
  1428. Unrecognized Mnemonic    spelling?
  1429. Unrecognized OPT         spelling?
  1430.  
  1431. 7.6 Warning Listing
  1432.  
  1433. <file name>,Line_number: Warning --- Description of error
  1434.  
  1435. Warnings do  not  cause cancellation of pass two but should cause you to
  1436. wonder where they came from.
  1437.  
  1438. Indexed Addressing Assumed
  1439. Missing ','
  1440. Missing ']'
  1441. No symbol for IFD        presumed undefined
  1442. No symbol for IFND       presumed undefined
  1443. Value truncated          FCB needs value <=255 or other operand too big
  1444. warning:can't open INCLUDE file <file>
  1445.        May not be an error depending upon usage. See section 10.
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.  
  1460.  
  1461.  
  1462.  
  1463.  
  1464.                                     page -24-
  1465.  
  1466.  
  1467. 7.7 Fatal Error Listing
  1468.  
  1469. Some errors are classed as fatal and  cause  an  immediate termination  of
  1470. the assembly.   These can be caused by loss of or mysterious change in a
  1471. source code or forward reference file.
  1472.  
  1473. Pseudo error             real error - assembler is very lost in pseudo ops
  1474. Error in Mnemonic table  assembler very lost in Mnemonic table
  1475. bitop          addressing mode may not accept bit manipulation
  1476. Can't create temp file   can't make file Fwd_ref; protected? disk out?
  1477. Forward ref file has gone
  1478.        remove disk? lock file? Opened by another process or deleted?
  1479. Can't create object file previous S19 file protected? disk out?
  1480. Error: file ended before IFD/IFND/ELSE/ENDIF  -no matching ENDIF for all
  1481. IF[ND]s
  1482. Can't get here from there
  1483.        assembler very lost in conditional assembly
  1484. Fatal Error: file ended before last ENDIF  -can't carry conditional
  1485. statements to next file
  1486.  
  1487. 8.0 HOST SPECIFICS
  1488.  
  1489. 8.1 MS-DOS PCs
  1490.  
  1491. The assemblers are complete executable machine code files ending in *.EXE.
  1492. If using a hard disk system, it may be most convenient to place the
  1493. assemblers in use in the DOS directory which is probably C:\DOS so that
  1494. it's not necessary to change the search path each time you want to use
  1495. them.  Regardless, the path should be set to the assemblers or the
  1496. assemblers should be in the working directory.  PATH=C:\DOS is an example.
  1497. You can show the search path by typing just PATH.
  1498.  
  1499. Command line operation is exactly as explained above.  You must use file
  1500. indirection to produce printed or saved listings.
  1501.  
  1502.      AS11 PROG.ASM SUB1.ASM SUB2.ASM -L CRE S   >PRN:
  1503.  
  1504. Will assemble Prog, Sub1 and Sub2 to Prog.S19 with listing, cross reference
  1505. and symbol table output to the printer.  You may replace PRN: with the name
  1506. of a file such as C:\WORK\DUMP.TXT and then COPY C:\WORK\DUMP.TXT PRN: at a
  1507. latter time.  A batch file will be much more convenient for the long
  1508. assembly command line above.  MS-DOS 3.x batch files will accept command
  1509. line arguments making the batch files much more flexible.  You can read the
  1510. listing more conveniently at the CRT console if you use a "pipe" to "more"
  1511. which should be in the search path (C:\DOS?).  E.g. "as11 myprog.asm -l |
  1512. more" where '|' is the pipe command.  Hit <return> for the next screen.
  1513. The assemblers are interruptable (^C or <control> <break>) if anything goes
  1514. wrong rather than watch a long, useless listing.
  1515.  
  1516. If you do not have a hard disk system, make sure that there is enough room
  1517. on the default floppy disk for FWD_REF and *.S19 files and that the write
  1518. protect is off.
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.                                     page -25-
  1526.  
  1527.  
  1528. 8.2 Apple MAC
  1529.  
  1530. Not available yet.
  1531.  
  1532. 8.3 Commodore Amiga
  1533.  
  1534. The assemblers have no extension and are just as* such as as11.  The Amiga
  1535. is multi-tasking.  Memory can vanish on a small system if you start many
  1536. applications at once.  The icon file supplied, as*.info is just for
  1537. convenience in moving the files about using WorkBench.  The assemblers will
  1538. start by double clicking the icon but will shut down immediately because
  1539. they will find no command line arguments. The assemblers are not written to
  1540. accept messages from WorkBench.  However, there are two other ways to run
  1541. transportable code on the Amiga.  What follows presumes use of AmigaOS 1.3
  1542. or higher.
  1543.  
  1544. Shell/CLI
  1545.  
  1546. The CLI (Command Line Interface) window is a character based console
  1547. similar to MS-DOS.  The command line arguments shown in this document will
  1548. work as shown.  Shell is an improved version of CLI virtually identical to
  1549. UNIX "C Shell" or "Korn Shell."  All CLI commands will work in Shell since
  1550. as in UNIX they are just files in the command directory.  It may be
  1551. convenient if you copy the assemblers to directory c: (command) making them
  1552. just another AmigaDOS command.  Otherwise it may be best to "protect as11
  1553. wd-" for example to eliminate the possibility of over writing or deleting
  1554. them.  Alternately, make the assembler a resident DOS command using
  1555. "Resident <path:assembler>"  It will be added to AmigaDOS.  Do not set the
  1556. "pure" bit if you make the assembler resident.  File and path names should
  1557. use AmigaDOS/UNIX conventions.  Long file and path names with embedded
  1558. spaces are permitted.  Use command line quotes around files having spaces:
  1559. as11 "New Program.asm" -l.
  1560.  
  1561. Unfortunately, the Amiga assemblers are not interruptable from the
  1562. dispatching Shell.  It's preferred that you have two Shells open and that
  1563. if an assembly is producing unbreakable garbage, you go to the second Shell
  1564. and continue until the first finishes.  Use "ChangeTaskPri 1" to get a
  1565. higher priority than the Shell running the failed assembler.  Use the RAM:
  1566. disk to speed up floppy disk systems.  If you use floppy disks, make sure
  1567. that the default directory is on a disk which is not write protected and
  1568. that *.S19 in use and Fwd_ref are not protected.
  1569.  
  1570. File indirection on the Amiga requires that indirection be given
  1571. immediately after the command. E.g. "as11 >prt: MyProg.asm -l cre".  You
  1572. can substitute any device or file for prt:, even "speak:" if you want to
  1573. have the listing read aloud whilst your working on the bench!  It's not
  1574. necessary to use "more" on the Amiga to stop and read a console listing.
  1575. Just hit space to stop the listing and <back space> to start it again.
  1576. However, you may pipe: to More if you want or redirect to ram:dump and read
  1577. that with More.  There can be more than one pipe:, Shell and assembly going
  1578. at  once.
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.                                     page -26-
  1587.  
  1588.  
  1589. Scripts and assembler source code editing can be done with MEMACS included
  1590. on the Utilities disk.  MEMACS is virtually identical to EMACS available on
  1591. UNIX and described in most UNIX manuals.  You can also assign directories
  1592. new temporary names, especially useful with a hard disk system.
  1593.  
  1594. Workbench:
  1595.  
  1596. You can also get the assemblers and all your scripts to operate from
  1597. Workbench by copying an icon to the script or writing them with NotePad
  1598. (must be in some visible directory then like your work directory and not
  1599. s:). Use WorkBench info to reset the default tool to Iconx (Icon Execute).
  1600. Double clicking the script icon will then execute the script, possibly
  1601. assembling your program with new version extension, protecting it and
  1602. sending it down to the EVM or PROM burner in one swell fwoop.  The window
  1603. that opens up is a NEWCON: or Shell type window which accepts the <space
  1604. bar> <back space> scroll commands.  The process behind the window is IconX
  1605. running execute.  You can also get WorkBench to pass command line arguments
  1606. to a script file by using Iconx.  However, IconX can be a little buggy
  1607. handing off more than one argument so it is much better to use Include
  1608. files to pick up other source code.  It should still be possible to
  1609. assemble subroutines etc. using conditional assembly features to pick up
  1610. data as needed and thus work strictly from WorkBench using the assemblers.
  1611. An example script is:
  1612.  
  1613.      .Key file ;accepts one file
  1614.      echo "Assembling with listing"
  1615.      as11 <file>  -l s   ;this is just command line as before
  1616.  
  1617. Type in the above using NotePad (supplied with Amiga) and save in your
  1618. source code directory (perhaps as "DoIt").  Copy "DoIt.info" to source code
  1619. if necessary to give them icons as in "copy DoIt.info to Prg1.asm.info."
  1620. This will leave an Icon for the assembler script and source code as well.
  1621. Select the "DoIt" script Icon and use "info" from Workbench.  Then change
  1622. the default tool to "c:IconX" and possibly delete Tool Types as well
  1623. changing it to some thing like "WINDOW=NEWCON:10/10/620/150/Assembler".
  1624. Select SAVE.  You can pass a command line file to as11 by holding down the
  1625. shift key (extended selection) and selecting DoIt first then the assembly
  1626. (*.asm) file, double clicking the *.asm file.  Consult the AmigaDOS and
  1627. Enhancer 1.3 manuals.  If you use RAM: IconX will pass the name RAM DISK
  1628. which will get fragmented into two names; RAM (without colon) and DISK:
  1629. (with colon).  You may want to "assign DISK: RAM:" in the above script.
  1630. The assembler will announce that it did not find file RAM but will go on to
  1631. discover all the source code anyway.  Avoid using directory names with
  1632. spaces if working through IconX.
  1633.  
  1634. You can get editors that assign Icons automatically (MEMACS doesn't) and
  1635. that will permit you to execute scripts from within a window making
  1636. Motorola free ware cross assemblers a part of an "integrated" package.
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.  
  1647.                                     page -27-
  1648.  
  1649.  
  1650. 9.0 TABLE FORMATS
  1651.  
  1652. 9.1 Symbol Table
  1653.  
  1654. The format of the symbol table is:
  1655.  
  1656.      <label> <value>
  1657.  
  1658. where <label> is the symbol name in ascending, alphabetical order and
  1659. <value> is the value of that symbol in four place hex notation.   The value
  1660. listed for redefinable symbols is the last value assigned.
  1661.  
  1662. 9.2 Cross Reference Table
  1663.  
  1664. The format of the cross reference table is:
  1665.  
  1666.      <label> <value> *<definition_line> [ <line1>] [ <line2] [ ...etc.]
  1667.  
  1668. where <label> is the symbol name in ascending, alphabetical order and
  1669. <value> is the value of that symbol in four place hex notation.   The value
  1670. listed for redefinable symbols is the last value assigned.  The line number
  1671. marked * is that line where the symbol was defined.  Subsequent line
  1672. numbers indicate where that symbol was used as an operand alone or in an
  1673. expression.  Subsequent definitions of redefinable symbols will not be
  1674. listed.
  1675.  
  1676. Line numbers are those appearing in the listing.  If include files are
  1677. numbered separately (default), then the line numbers refer to that include
  1678. file.  Use command line option or OPT nnf to obtain sequential line numbers
  1679. if you do not want to guess which file the symbol is in.
  1680.  
  1681. 9.3 Listing
  1682.  
  1683. The listing format is:
  1684.  
  1685. Assembler Release <release> <version>   (once at beginning of assembly)
  1686. (c) Motorola (free ware)
  1687.  
  1688.                     <file name> <page number>     (each new page)
  1689.  
  1690. [error message]
  1691. <address> <code>    <source line no.> <source line>
  1692. ...
  1693. ...
  1694. Program + Init Data = <byte size>
  1695. Error count = <no. of errors>
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.                                     page -28-
  1709.  
  1710.  
  1711. Error messages precede the line containing the error.  Program + Init data
  1712. is the number of bytes placed in the S record.  If this value is zero but
  1713. there are no errors, check conditional assembly statements to see if the
  1714. entire program was conditionally not assembled.
  1715.  
  1716. 10.0 SOME TECHNIQUES
  1717.  
  1718. Most programmers now use top down structured design.  It may be data or
  1719. procedurally oriented, or a combination of both; object oriented.  Any of
  1720. these techniques breaks software design and coding into smaller, more
  1721. manageable modules.  One would like to assemble and test the modules as
  1722. they are created.  Obviously a linking, macro-assembler would be best, but
  1723. most of the features required are present in this assembler, especially for
  1724. the first two techniques.
  1725.  
  1726. Procedures / functions / subroutines can be assembled and tested apart from
  1727. any other if there is a mechanism to automatically incorporate global data
  1728. and drivers when assembling subroutines only (bottom up coding).  For top
  1729. down coding, there should be a way to include the actual subroutines as
  1730. they are developed and dummy routines if they are not.  Static and dynamic
  1731. (auto) data local to the subroutine should be allocated without conflict
  1732. with other routines taking into account memory partitioning in a (possibly)
  1733. firmware system.
  1734.  
  1735. Conditional assembly and include files may be used to control assembly as
  1736. software is developed.  One technique is to define and test a symbol having
  1737. the same name as the file(s) to be included.  E.g. if Global_Data is not
  1738. defined, then include <Global_Data.i>.  Define the symbol Global_Data
  1739. within that file so that succeeding files which require that data will not
  1740. pick it up and cause a redefine error.  You may want to include a
  1741. subroutine if it exists and a dummy subroutine if it does not.  For this
  1742. reason, a failure to find an include file is a warning and not an error
  1743. (klutzy way of doing IF EXISTS).  For example, you could include
  1744. <Output.asm> and then test symbol OUTPUT which would be defined in
  1745. Output.asm.  IFND OUTPUT, then include <Dummy_Out.asm> (or something with a
  1746. shorter name on MS-DOS).
  1747.  
  1748. Static data and code can be added in sequence to the memory type required
  1749. (RAM or ROM) by using the pseudo-ops CODE, DATA and BSS (or RAM).  These
  1750. three (segment) memory types should be set once using <segment> followed by
  1751. ORG <address>.  After that, use just <segment> and the PC will be set to
  1752. the next available location in the appropriate area.  A naming convention
  1753. can be used in place of local symbols.  E.g. msg.main or msg_m for a symbol
  1754. in routine Main.asm.
  1755.  
  1756. Auto or dynamic memory (sometimes just called scratch memory) is more
  1757. difficult.  Some dynamic storage is available using the stack but that is
  1758. often not enough or convenient.  You could use names such as Scratch1,
  1759. Scratch2 etc. throughout, possibly setting local symbols equivalent as
  1760. needed.  However, the AUTO segment PC is intended to suggest its use as a
  1761. local automatic or dynamic data PC.  That is, use AUTO followed immediately
  1762. by ORG <address> to the area you have established as reusable or scratch.
  1763. Then immediately list the local symbols using RMB statements.
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.                                     page -29-
  1770.  
  1771.  
  1772. If you need more PCs than the four provided, you can manufacture more by
  1773. saving the current value with e.g. TempPC@ = * which will assign the
  1774. current PC value to the redefinable symbol (variable) TempPC@.  You may
  1775. then ORG <address> and continue.  When you are through, save your PC in
  1776. another variable and recover the old thus: ORG TempPC@.
  1777.  
  1778. Example
  1779.  
  1780. The following example is a demonstration of the assembler techniques
  1781. discussed above using AS11 assembler (not of a working piece of code).  It
  1782. assembles properly; it has never been tested.  The command line was "AS11
  1783. Main.asm -l cre".  Files Global_Dat.i and Dum_Output.asm were picked up via
  1784. include statements.  Global_Dat.i is needed by both Main and Dum_Output
  1785. assembly files.  It's included conditionally so that if Dum_Output.asm
  1786. alone is assembled, it receives the global data.  Output.asm is the name of
  1787. the final Output routine, not yet written.
  1788.  
  1789. Assembler release TER_2.0 version 2.09
  1790. (c) Motorola (free ware)
  1791. Main.asm, line no. 42: warning:can't open INCLUDE file Output.asm
  1792. 0001                         ;****************************
  1793. 0002                         ;     Main.asm
  1794. 0003                         ;
  1795. 0004                         ;     Main program
  1796. 0005                         ;****************************
  1797. 0006
  1798. 0007                          IFND GLOB_DAT
  1799. 0000                          include <Global_Dat.i>   ;pick up globals
  1800. 0001                         ;************************************
  1801. 0002                         ;     Global_Dat.i
  1802. 0003                         ;
  1803. 0004                         ;     Global Variables & Data
  1804. 0005                         ;***********************************
  1805. 0006
  1806. 0007 0001                    GLOBAL_DAT EQU 1     ;to prevent further
  1807.                              inclusion
  1808. 0008
  1809. 0009                          OPT p50   ;page breaks
  1810. 0010
  1811. 0011                         ;Memory Map
  1812. 0012
  1813. 0013                          CODE
  1814. 0014 E000                     ORG $E000 ;set CODE
  1815. 0015                          DATA
  1816. 0016 F800                     ORG $F800 ;set data
  1817. 0017                          BSS
  1818. 0018 0040                     ORG 64         ;set static variable RAM
  1819. 0019
  1820. 0020
  1821. 0021
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.                                     page -30-
  1831.  
  1832.  
  1833. 0022                         ;Global Definitions/Equates
  1834. 0023
  1835. 0024 0001                    BYTE EQU 1
  1836. 0025 0002                    WORD EQU 2
  1837. 0026 0002                    APTR EQU 2
  1838. 0027 0000                    EOS  EQU 0 ;end of string
  1839. 0028
  1840. 0029                         ;Global Variables
  1841. 0030
  1842. 0031 0040                    Acc1: RMB WORD
  1843. 0032 0042                    Acc2: RMB WORD
  1844. 0033
  1845. Global_Dat.i
  1846.                                    page   2
  1847. 0035                         ;Global Structures
  1848. 0036
  1849. 0037                          DATA ;set PC to data area
  1850. 0038
  1851. 0039                         ;Device control register tables
  1852. 0040                         ;  each entry is struct Hware where:
  1853. 0041
  1854. 0042                         ;struct Hware definition
  1855. 0043 0000                    U_Limit EQU 0             ;upper limit
  1856. 0044 0001                    L_Limit EQU U_Limit+BYTE  ;lower limit
  1857. 0045 0002                    HErr_Msg EQU L_Limit+BYTE ;*high error message
  1858. 0046 0004                    LErr_Msg EQU HErr_Msg+APTR     ;*low error
  1859.                                                             message
  1860. 0047 0006                    Handler EQU LErr_Msg+APTR ;*handler
  1861. 0048 0008                    SizeOfHware EQU Handler+APTR
  1862. 0049
  1863. 0050                         Reg_Table: ;struct Hware(s) declaration
  1864. 0051 F800 FF 0A               FCB $FF,10     ;struct Hware Reg1
  1865. 0052 F802 F8 19 F8 26 E0 27   FDB Vy_Low_Msg,High_Msg,Handler1
  1866. 0053
  1867. 0054 F808 64 00               FCB 100,0 ;struct Hware Reg2
  1868. 0055 F80A F8 10 F8 26 E0 28   FDB Low_Msg,High_Msg,Handler2
  1869. 0056
  1870. 0057                         ;     etc.
  1871. 0058
  1872. 0059                         ;Global Data
  1873. 0060
  1874. 0061 F810 54 6F 6F 20 6C 6F  Low_Msg: FCC 'Too low!'
  1875.      77 21
  1876. 0062 F818 00                  FCB EOS
  1877. 0063 F819 57 61 79 20 74 6F  Vy_Low_Msg: FCC 'Way too low!'
  1878.      6F 20 6C 6F 77 21
  1879. 0064 F825 00                  FCB EOS
  1880. 0065 F826 57 61 79 20 74 6F  High_Msg: FCC 'Way too high!'
  1881.      6F 20 68 69 67 68
  1882.      21
  1883. 0066 F833 00                  FCB EOS
  1884. 0067
  1885. 0008                          end
  1886. 0009                          ENDIF
  1887. 0010
  1888.  
  1889.  
  1890.  
  1891.                                     page -31-
  1892.  
  1893.  
  1894. 0011                          CODE ;set PC to next code area
  1895. 0012
  1896. 0013 E000 B6 F8 34           Start:     ldaa Reg_dat.m ;data for hardware
  1897. 0014 E003 F6 F8 35            ldab First.m   ;register #
  1898. 0015 E006 BD E0 1C            jsr Output
  1899. 0016
  1900. 0017 E009 F6 F8 36            ldab Second.m  ;reg #
  1901. 0018 E00C BD E0 1C            jsr Output
  1902. 0019
  1903. 0020 E00F 86 FF               ldaa #$FF ;nonsense busy loop
  1904. 0021 E011 B7 00 00            staa Scratch1  ;to use RAM
  1905. 0022 E014 7A 00 00           Loop@:     dec Scratch1
  1906. 0023 E017 26 FB               bne Loop@
  1907. 0024
  1908. 0025 E019 7E E0 00            jmp Start ;get the cables, George
  1909.  
  1910. Main.asm                                     page   3
  1911.  
  1912. 0026
  1913. 0027                         ;local static data
  1914. 0028
  1915. 0029                          DATA      ;set PC to next data area
  1916. 0030 F834 C8                 Reg_dat.m: FCB #200  ;register data
  1917. 0031 F835 00                 First.m:   FCB 0          ;reg nos.
  1918. 0032 F836 01                 Second.m: FCB 1
  1919. 0033
  1920. 0034                         ;local dynamic data
  1921. 0035
  1922. 0036                          AUTO
  1923. 0037 0000                     ORG 0     ;auto area
  1924. 0038
  1925. 0039 0000                    Scratch1: RMB BYTE
  1926. 0040 0001                    Scratch2: RMB WORD
  1927. 0041
  1928. Main.asm, line no. 42: warning:can't open INCLUDE file Output.asm
  1929. 0042                          include <Output.asm>
  1930. 0043
  1931. 0044                          IFND OUTPUT
  1932. 0000                          include <Dum_Output.asm>
  1933. 0001                         ;***********************************
  1934. 0002                         ;     Subroutine Dummy Output
  1935. 0003                         ;
  1936. 0004                         ;     Send data where it belongs
  1937. 0005                         ;***********************************
  1938. 0006
  1939. 0007                          IFND GLOBAL_DAT
  1940. 0008                          include <Global_Dat.i>
  1941. 0009                          ENDIF
  1942. 0009                          ENDIF
  1943. 0010
  1944.  
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.                                     page -32-
  1953.  
  1954.  
  1955. 0011                          CODE      ;get code PC back
  1956. 0012
  1957. 0013 E01C FE F8 00           Output:    ldx Reg_Table  ;get pointer to
  1958.                                         table
  1959. 0014 E01F 36                  psha      ;save data
  1960. 0015 E020 86 08               ldaa #SizeOfHware ;find offset
  1961. 0016 E022 3D                  mul
  1962. 0017 E023 3A                  abx       ;add offset to pointer
  1963. 0018 E024 32                  pula      ;recover data
  1964. 0019 E025 6E 06               jmp Handler,x  ;goto Handler
  1965. 0020
  1966. 0021                         Handler1:
  1967. 0022                          ;do handling
  1968. 0023 E027 39                  rts
  1969. 0024
  1970. 0025                         Handler2:
  1971. 0026                          ;do handling of second sort
  1972. 0027 E028 39                  rts
  1973. 0028
  1974. 0029                          AUTO ;goto auto area
  1975.  
  1976. Dum_Output.asm                                   page   4
  1977.  
  1978. 0030 0000                     ORG 0     ;same ORG cuz same area
  1979. 0031
  1980. 0032 0000                    Itch1:     RMB BYTE
  1981. 0033 0001                    Itch2:     RMB BYTE
  1982. 0034
  1983. 0045                          end
  1984. 0046                          ENDIF
  1985. 0047
  1986. 0048                          end
  1987. Program + Init Data = 96 bytes
  1988. Error count = 0
  1989.  
  1990. APTR       0002 *0026 0046 0047 0048
  1991. Acc1       0040 *0031
  1992. Acc2       0042 *0032
  1993. BYTE       0001 *0024 0044 0045 0039 0032 0033
  1994. EOS        0000 *0027 0062 0064 0066
  1995. First.m    F835 *0031 0014
  1996. GLOBAL_DAT 0001 *0007
  1997. HErr_Msg   0002 *0045 0046
  1998. Handler    0006 *0047 0048 0019
  1999. Handler1   E027 *0021 0052
  2000. Handler2   E028 *0025 0055
  2001. High_Msg   F826 *0065 0052 0055
  2002. Itch1      0000 *0032
  2003. Itch2      0001 *0033
  2004. LErr_Msg   0004 *0046 0047
  2005. L_Limit    0001 *0044 0045
  2006. Loop@      E014 *0022 0023
  2007. Low_Msg    F810 *0061 0055
  2008. Output     E01C *0013 0015 0018
  2009. Reg_Table  F800 *0050 0013
  2010. Reg_dat.m  F834 *0030 0013
  2011.  
  2012.  
  2013.                                     page -33-
  2014.  
  2015.  
  2016. Scratch1   0000 *0039 0021 0022
  2017. Scratch2   0001 *0040
  2018. Second.m   F836 *0032 0017
  2019. SizeOfHware 0008 *0048 0015
  2020. Start      E000 *0013 0025
  2021. U_Limit    0000 *0043 0044
  2022. Vy_Low_Msg F819 *0063 0052
  2023. WORD       0002 *0025 0031 0032 0040
  2024.  
  2025. 11.0 UPDATES & ERROR REPORTING
  2026.  
  2027. Known bugs
  2028.  
  2029.  
  2030.      o Subsequent redefinitions of redefinable symbols are not mentioned
  2031.      in cross reference table.  Suppose records are kept in Fwd_ref but
  2032.      didn't check yet.  No functional description of modules.
  2033.  
  2034.      o Include file listings with separate numbering show wrong line
  2035.      number at turn-over.  Caused by fact that print_line() is last
  2036.      function before going on to next line and line number has already
  2037.      been changed by INCLUDE or END pseudo op.  Line after is correct.
  2038.  
  2039.      o Amiga Iconx calling .KEY file1 file2 (etc.) script with tests
  2040.      for <file(n)>=NULL causes very bizarre error where every line
  2041.      beginning with 'A' is misinterpretted (not and Opcode).  Presume
  2042.      that Iconx or possibly AmigaDOS or Intuition has some how screwed up
  2043.      incoming file but how?  Doesn't happen with single .KEY file argument
  2044.      and can use <include> to cover tracks.  Notice that Iconx calls
  2045.      commands direct if no .KEY but uses Execute command if .KEY statement.
  2046.      Process may not be inheriting input stream correctly or something in
  2047.      path extracting \tA as command.  Path is ->input.device->Iconx->
  2048.      Execute->Assembler with AmigaDOS and Intuition setting up and passing
  2049.      messages via Exec (I think).
  2050.  
  2051.      o Outside loop ENDIF statement is in listing twice.  Difficult to fix
  2052.      cuz inside loop need to be printed even if not assembled.  However,
  2053.      end of loop exits to main assembler routines which print current line,
  2054.      again.
  2055.  
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072.  
  2073.  
  2074.                                     page -34-
  2075.