home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2182 < prev    next >
Internet Message Format  |  1990-12-28  |  55KB

  1. From: markz@ssc.UUCP (Mark Zenier)
  2. Newsgroups: alt.sources
  3. Subject: Frankenstein Cross Assemblers, Base source, Part 1 of 3
  4. Message-ID: <592@ssc.UUCP>
  5. Date: 4 Dec 90 07:46:53 GMT
  6.  
  7. Here is a hobby grade cross assembler for Unix and Dos for
  8. a number of microprocessors.  The various flavors of assember
  9. are determined by which Yacc input file is used.
  10.  
  11. 13 sets of "Flavor" files will follow
  12. 1805, 2650, 6301, 6502, 6805, 6809, 6811, tms7000, 8048, 8051, 
  13. 8096, z8 and z80
  14.  
  15. No macros, relocatable linkers, fancy print controls or 
  16. structured control statments.  But its a start.
  17.  
  18. Mark Zenier
  19. markz@ssc.uucp
  20.  
  21. ---- Cut Here and feed the following to sh ----
  22. #!/bin/sh
  23. # This is Frankasm/Base, a shell archive (shar 3.43)
  24. # made 12/04/1990 06:57 UTC by markz@ssc.uucp
  25. # Source directory /usr/mark/frank.shar
  26. #
  27. # existing files will NOT be overwritten unless -c is specified
  28. # This format requires very little intelligence at unshar time.
  29. # "if test", "echo", "true", and "sed" may be needed.
  30. #
  31. # This shar contains:
  32. # length  mode       name
  33. # ------ ---------- ------------------------------------------
  34. #   2536 -r--r----- Makefile
  35. #    780 -r--r--r-- ascii.chd
  36. #  34184 -r--r--r-- base.doc
  37. #     30 -r--r--r-- cleanup.bat
  38. #   4440 -r--r--r-- devnote
  39. #   3545 -r--r--r-- filelist
  40. #   1354 -r--r----- fraebin.h
  41. #    571 -r--r----- fraeuni.h
  42. #   1446 -r--r----- fragcon.h
  43. #  14325 -r--r----- fraosub.c
  44. #  21010 -r--r----- frapsub.c
  45. #   7915 -r--r----- frasmain.c
  46. #   3145 -r--r----- frasmdat.h
  47. #  28586 -r--r----- fryylex.c
  48. #   2542 -r--r----- getopt.h
  49. #   2145 -r--r--r-- makefile.dos
  50. #     58 -r--r--r-- makeone.bat
  51. #
  52. # ============= Makefile ==============
  53. if test -f 'Makefile' -a X"$1" != X"-c"; then
  54.     echo 'x - skipping Makefile (File already exists)'
  55. else
  56. echo 'x - extracting Makefile (Text)'
  57. sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
  58. X# HEADER:    ;
  59. X# TITLE:    Frankenstein Cross Assemblers;
  60. X# VERSION:     2.0;
  61. X# SYSTEM:    Unix (microport system V/AT);
  62. X# FILENAME:    Makefile ;
  63. X# DESCRIPTION: "Reconfigurable Cross-assembler producing Intel (TM)
  64. X#        Hex format object records.  ";
  65. X# KEYWORDS:     cross-assemblers, 1805, 2650, 6301, 6502, 6805, 6809, 
  66. X#        6811, tms7000, 8048, 8051, 8096, z8, z80;
  67. X# WARNINGS:    "This software is in the public domain.  
  68. X#        Any prior copyright claims are relinquished.  
  69. X#    
  70. X#        This software is distributed with no warranty whatever.  
  71. X#        The author takes no responsibility for the consequences 
  72. X#        of its use.
  73. X#    
  74. X#        Yacc (or Bison) required to compile."  ;
  75. X# AUTHORS:    Mark Zenier;
  76. X# COMPILERS:    Microport System V/AT;
  77. X#
  78. X#    usage    
  79. X#        make somename TARGET=somename 
  80. X#        make newmachine       clean out machine dependent *.o
  81. X#        make clean          clean out for release disk
  82. X#
  83. X#    Conditional Compilation Flags
  84. X#
  85. X#    DOSTMP        use the current directory for temporary intermediate
  86. X#            file
  87. X#    NOGETOPT    use the getopt.h file
  88. X#    USEINDEX    redefine the strchr() library function to use
  89. X#            the older equivalent name index()
  90. X#    NOSTRING    use internal definitions if the <string.h> include
  91. X#            file does not exist
  92. X#
  93. X
  94. X
  95. XTARGET = frasm
  96. XPRINTSPOOL = lpr
  97. X
  98. X# LEXERDEBUG = -DDEBUG=1
  99. XLEXERDEBUG =
  100. X
  101. X# for microport and xenix
  102. XCFLAGS = -Ml -g 
  103. XYACCLEXLIB = -ly 
  104. XMAINNEEDS =
  105. XMAINDEPENDS =
  106. X
  107. X# for dos cross compiled on xenix
  108. X# CFLAGS = -dos  -Ml
  109. X# YACCLEXLIB =
  110. X# MAINNEEDS = -DNOGETOPT -DDOSTMP
  111. X# MAINDEPENDS = getopt.h
  112. X
  113. X# for v7
  114. X# CFLAGS = -DUSEINDEX -DNOSTRING
  115. X# YACCLEXLIB = -ly 
  116. X# MAINNEEDS = -DNOGETOPT
  117. X# MAINDEPENDS = getopt.h
  118. X
  119. Xclean :
  120. X    rm -f *.o fraytok.h 
  121. X    rm -f y.tab.[ch]
  122. X    rm -f as*.c as*.h as*.o
  123. X
  124. Xnewmachine :
  125. X    rm -f fraytok.h
  126. X    rm -f fryylex.o
  127. X    rm -f $(TARGET).c $(TARGET).h $(TARGET).o
  128. X
  129. X$(TARGET) : frasmain.o frapsub.o fryylex.o $(TARGET).o fraosub.o
  130. X    cc $(CFLAGS) -o $(TARGET) frasmain.o frapsub.o \
  131. X        fraosub.o fryylex.o $(TARGET).o $(YACCLEXLIB)
  132. X    rm -f fraytok.h
  133. X
  134. Xfrasmain.o : frasmain.c  frasmdat.h $(MAINDEPENDS)
  135. X    cc $(CFLAGS) $(MAINNEEDS) -c frasmain.c
  136. X
  137. X$(TARGET).c $(TARGET).h : $(TARGET).y
  138. X    yacc -d $(TARGET).y
  139. X    mv y.tab.c $(TARGET).c
  140. X    mv y.tab.h $(TARGET).h
  141. X    rm -f fraytok.h
  142. X
  143. Xfraytok.h : $(TARGET).h
  144. X    cp $(TARGET).h fraytok.h
  145. X
  146. X$(TARGET).o : $(TARGET).c  frasmdat.h fragcon.h
  147. X    cc $(CFLAGS) -c $(TARGET).c
  148. X
  149. Xfrapsub.o : frapsub.c fragcon.h frasmdat.h fraeuni.h fraebin.h
  150. X    cc $(CFLAGS) -c frapsub.c
  151. X
  152. Xfraosub.o : fraosub.c  frasmdat.h fragcon.h fraeuni.h fraebin.h
  153. X    cc $(CFLAGS) -c fraosub.c
  154. X
  155. Xfryylex.o : fryylex.c frasmdat.h fraytok.h
  156. X    cc $(CFLAGS) $(LEXERDEBUG) -c fryylex.c
  157. X
  158. SHAR_EOF
  159. true || echo 'restore of Makefile failed'
  160. fi
  161. # ============= ascii.chd ==============
  162. if test -f 'ascii.chd' -a X"$1" != X"-c"; then
  163.     echo 'x - skipping ascii.chd (File already exists)'
  164. else
  165. echo 'x - extracting ascii.chd (Text)'
  166. sed 's/^X//' << 'SHAR_EOF' > 'ascii.chd' &&
  167. Xascii    charset
  168. X    chardef    " !\"#$%&\'",$20,$21,$22,$23,$24,$25,$26,$27
  169. X    chardef    "()*+,-./",$28,$29,$2a,$2b,$2c,$2d,$2e,$2f
  170. X    chardef    "01234567",$30,$31,$32,$33,$34,$35,$36,$37
  171. X    chardef    "89:;<=>?",$38,$39,$3a,$3b,$3c,$3d,$3e,$3f
  172. X    chardef    "@ABCDEFG",$40,$41,$42,$43,$44,$45,$46,$47
  173. X    chardef    "HIJKLMNO",$48,$49,$4a,$4b,$4c,$4d,$4e,$4f
  174. X    chardef    "PQRSTUVW",$50,$51,$52,$53,$54,$55,$56,$57
  175. X    chardef    "XYZ[\\]^_",$58,$59,$5a,$5b,$5c,$5d,$5e,$5f
  176. X    chardef    "`abcdefg",$60,$61,$62,$63,$64,$65,$66,$67
  177. X    chardef    "hijklmno",$68,$69,$6a,$6b,$6c,$6d,$6e,$6f
  178. X    chardef    "pqrstuvw",$70,$71,$72,$73,$74,$75,$76,$77
  179. X    chardef    "xyz{|}~",$78,$79,$7a,$7b,$7c,$7d,$7e
  180. X    chardef    '"', $22 ; not the same table entry as '\"'
  181. X    chardef    "'", $27 ; 
  182. X    chardef    "\n\t\v\b\r\f\a", $0a,$09,$0b,$08,$0d,$0c,$07
  183. X    charuse ascii
  184. SHAR_EOF
  185. true || echo 'restore of ascii.chd failed'
  186. fi
  187. # ============= base.doc ==============
  188. if test -f 'base.doc' -a X"$1" != X"-c"; then
  189.     echo 'x - skipping base.doc (File already exists)'
  190. else
  191. echo 'x - extracting base.doc (Text)'
  192. sed 's/^X//' << 'SHAR_EOF' > 'base.doc' &&
  193. X.TL
  194. XFrankenstein Cross Assemblers Users Manual
  195. X.AU "Mark Zenier"
  196. X.AF
  197. X.MT 4
  198. X.H 1 "Disclaimer"
  199. XThis software is in the public domain.  Any prior copyright claims
  200. Xare relinquished.  
  201. X.P
  202. XThis software is distributed with no warranty whatever.  The author
  203. Xtakes no responsibility for the consequences of its use.
  204. X.H 1 "Introduction"
  205. X.H 2 "This Manual"
  206. XThis manual covers the basic features for the Frankenstein cross assemblers.
  207. XThe specific features for a given target architecture will be covered
  208. Xin the appendix for that cross-assembler.
  209. X.H 2 "Notation"
  210. XItems enclosed in [] are optional. The "[]" are not entered in the
  211. Xsource statement or command line, and are just a notation.
  212. X.H 1 "Invocation"
  213. Xname [-o binary] [-l listing] [-s symbols] [-d] input
  214. X.P
  215. XThe optional operands on the command line can be in any order.
  216. X.H 2 "Input File"
  217. XThe input file must appear after the optional entries on the command line.
  218. XOnly one input file is used with this version. 
  219. XIf the file name is a single minus sign, the standard input is used.
  220. X.H 2 "Listing File"
  221. X.DS I N
  222. X-l filename
  223. X.DE
  224. X.P
  225. XAn annotated listing will only be produced if an optional list file is
  226. Xprovided, otherwise the error messages and summary will be output to the
  227. Xconsole.
  228. XThere is no required suffix or default extension for the file name.
  229. X.H 2 "Hex Output File"
  230. X.DS I N
  231. X-h filename or
  232. X-o filename
  233. X.DE
  234. X.P
  235. XThe binary output will only be produced if the optional file is provided.
  236. XSee the section in the description of the output files for the format
  237. Xof the data records.
  238. XIf any errors occur, the hex output file is either not created
  239. Xor is deleted depending on whether the error occurred in the
  240. Xinput or output phases of processing.
  241. XThere is no required suffix or default extension for the file name.
  242. X.H 2 "Symbol Listing File"
  243. X.DS I N
  244. X-s filename
  245. X.DE
  246. X.P
  247. XThe symbol table is dumped with one entry per line for whatever use is 
  248. Xdesired, normally with the sort utility to produce symbol listings in 
  249. Xa different order that the one provided.
  250. XSee the section on the output files for a description of the format.
  251. XThere is no required suffix or default extension for the file name.
  252. X.H 2 "Debug"
  253. X.SP 
  254. XThe -d debug option
  255. X.DL
  256. X.LI
  257. XSaves the intermediate file in the /usr/tmp directory
  258. X.LI
  259. XCalls the abort() system call to produce a "core" file
  260. X.LE
  261. X.H 2 "Processor Selection"
  262. X.DS I N
  263. Xassembler name or
  264. X-p string
  265. X.DE
  266. X.P
  267. XSome of these assemblers support related families of processors, and
  268. Xcan be limited to specific subsets of the total instructions by sending
  269. Xthe processor number or name as an operand.  The operand is scanned for
  270. Xunique substrings which identify the target processor.
  271. XThe operand can be either the name of the executable, or the operand
  272. Xof the -p option, with the operand of the -p having precedence.
  273. XThe name of the executable may not available in some operating systems.
  274. XThe CPU pseudo-operation has precedence over both the name scan and
  275. Xthe -p operand [see the appendix for the specific processor].
  276. X.DS I N
  277. XExample
  278. X.SP
  279. Xa6800 for the mc6800 instruction set
  280. Xa6801 for the 6801/6803 instruction set
  281. Xa6811 for the mc68hc11 instruction set
  282. X.DE
  283. X.H 1 "Source Input File"
  284. XThe source input is a text file a with one statement per line.
  285. XAdjacent symbols must be separated by spaces or tabs or special characters 
  286. Xsuch as operators or parenthesis. 
  287. X.H 2 "Input Lines"
  288. X.SP
  289. XSource lines consist of up to four parts
  290. X.DS I N
  291. X[Label] [Opcode [Operands] ] [; comments]
  292. X.DE
  293. X.VL +10
  294. X.LI Labels
  295. XA symbol that starts in the first column of the line is a
  296. Xlabel.  
  297. XA label is used as the defining instance of a symbol, the place
  298. Xwhere it is given a value, normally the address of the location
  299. Xin memory where the data generated by the rest of the statement is placed.
  300. XLabels are optional for target machine instructions statements.
  301. XLabel are required on some pseudo-operations, and are not allowed on others.
  302. X.LI Opcode
  303. XThe first symbol in a line that doesn't start in
  304. Xcolumn 1 is treated as an opcode, all symbols after that are
  305. Xtreated as symbol references.
  306. XOpcodes are treated as a separate set of symbols, so a label
  307. Xcan have the same character string as an opcode.  
  308. XOpcodes are converted to uppercase for comparison, so case is not 
  309. Xsignificant.
  310. X.LI Operands
  311. XThe rest of the line is the operands associated with the opcode.
  312. XThese are expressions, symbol references, or other syntactic elements
  313. Xdetermined by the specific operation.
  314. X.LI Comments
  315. XComments start with a ';', anything on a line after a
  316. Xsemicolon is ignored.
  317. XLines that consist of only a comment are treated as empty lines.
  318. X.LE
  319. X.DS I N
  320. XExample
  321. X
  322. X; just a little example
  323. X    org $700
  324. Xlabel    equ *  ; set label to current location
  325. X    adda    #$21 ; a 6800 example
  326. X    end
  327. X.DE
  328. X.H 3 "Limitations"
  329. XInput lines should be shorter than 256 characters.
  330. XAn error message is issued if lines are longer.
  331. X.H 3 "Empty"
  332. XEmpty lines are ignored as input, but are copied to the listing
  333. Xfile.
  334. X.H 2 "Syntactic Elements"
  335. X.H 3 "Symbols"
  336. XSymbols are strings of characters.  The first of which is one of
  337. Xthe following.
  338. X.DS I N
  339. XA-Z a-z ! & ^ _ ~
  340. X.DE
  341. X.P
  342. XThe rest of the string consists of zero or more of the 
  343. Xfollowing.
  344. X.DS I N
  345. X0-9 A-Z a-z ! & ^ _ ~
  346. X.DE
  347. X.P
  348. XThere is no length limit to symbols, all characters are
  349. Xsignificant.  Case is significant.
  350. X.H 3 "Reserved Variables Names"
  351. XMachine specific names, and operator names that can appear in
  352. Xsymbolic expressions share the same symbol table with labels,
  353. Xand cannot be used as labels.  The list will vary from machine
  354. Xto machine.  Case is significant for these symbols. 
  355. X.DS I F
  356. XExamples
  357. X.SP
  358. Xand defined eq ge gt high le low lt mod ne
  359. Xnot or shl shr xor AND DEFINED EQ GE GT HIGH
  360. XLE LOW LT MOD NE NOT OR SHL SHR XOR
  361. X.DE
  362. X.H 3 "Numeric Constants"
  363. Xnumeric constants can be specified in decimal, hexadecimal,
  364. Xoctal, and binary.  Constants are maintained as long 
  365. Xvariables, but the instruction generation will cause an error
  366. Xif the value is too big to fit in its destination field.
  367. X.H 4 "Decimal Constants"
  368. X.DL
  369. X.LI
  370. Xone or more decimal characters (0-9) followed by an
  371. Xoptional "d" or "D" base designator.
  372. X.LE
  373. X.H 4 "Hexadecimal Constants"
  374. X
  375. X.P 1
  376. XEither 
  377. X.DL
  378. X.LI
  379. Xone or more hexadecimal characters
  380. X(0-9 a-f A-F) preceded by a "$" base designator.
  381. X.LI
  382. Xa decimal character (0-9) followed by zero or
  383. Xmore hexadecimal characters (0-9 a-f A-F) 
  384. Xfollowed by a "h" or "H" base designator
  385. X.LE
  386. X.H 4 "Octal Constants"
  387. X
  388. X.P 1
  389. XEither
  390. X.DL
  391. X.LI
  392. Xone or more octal characters (0-7) preceded
  393. Xby a "@" base designator
  394. X.LI
  395. Xone or more octal characters (0-7) followed
  396. Xby a "o" or "O" or "q" or "Q" base designator.
  397. XNote: this is the letter "O" not the number "0".
  398. X.LE
  399. X.H 4 "Binary Constants"
  400. X
  401. X.P 1
  402. XEither
  403. X.DL
  404. X.LI
  405. Xone or more binary characters (0 or 1) preceded
  406. Xby a "%" base designator.
  407. X.LI
  408. Xone or more binary characters (0 or 1) followed
  409. Xby a "b" or "B" base designator.
  410. X.LE
  411. X.H 4 "Examples"
  412. X.VL +15 +5 1
  413. X.LI 123
  414. Xdecimal number
  415. X.LI 123d
  416. Xdecimal number
  417. X.LI $faf 
  418. Xhexadecimal number
  419. X.LI 0fafh
  420. Xhexadecimal number, note leading zero used to differentiate this from symbol 
  421. X"fafh"
  422. X.LI @1234
  423. Xoctal number
  424. X.LI 1234Q
  425. Xoctal number
  426. X.LI %010101
  427. Xbinary number
  428. X.LI 010101b
  429. Xbinary number
  430. X.LE
  431. X.H 3 "String Constants"
  432. XString constants are specified using either the quotation mark
  433. X" or the apostrophe '.  A string starting with one of these 
  434. Xcharacter is terminated by only that character and can contain
  435. Xthe other string delimiter as data.  
  436. XA string with no characters is valid.
  437. X.P
  438. XThe values generated in the binary output can be different from
  439. Xthe host computers character set (the default).  
  440. XSee the section on Defining Target Character Sets.
  441. X.P
  442. XWithin the character string, the backslash is an escape character.
  443. X.VL +20 +5 1
  444. X.LI " \ec Character escapes"
  445. X.LI "\ "
  446. XThe only characters defined for
  447. Xthe default (no) translation are \e\e \e" \e\'.  
  448. XAny other translation, (the control characters '\en', '\er', etc.) require
  449. Xa translation table be defined.
  450. XValues can be set up for any character following the backslash escape 
  451. Xexcept x and 0 through 7.  
  452. X.SP
  453. X.LI " \e777 Octal character escapes"
  454. X.LI "\ "
  455. XAn one, two or three character octal constant.  The one byte value
  456. Xis the binary representation of the number. 
  457. XThe value is masked off for a maximum value of 255.
  458. X.SP
  459. X.LI " \exFF Hexadecimal character escapes"
  460. X.LI "\ "
  461. XA one or two character hexadecimal constant, preceded by a lower
  462. Xcase x.  Upper and lower case characters A through F are valid.
  463. XThe one byte value is the binary representation of the number. 
  464. X.SP
  465. X.LE
  466. X.DS I N
  467. XExamples
  468. X.SP
  469. X    "this isn't illegal"
  470. X    'this is the other delimiter'
  471. X    '"'
  472. X    "\exfe\e0\en"
  473. X.DE
  474. X.H 2 "Expressions"
  475. X.SP
  476. XExpressions consist of
  477. X.DL "" 1
  478. X.LI
  479. XSymbolic References
  480. X.LI
  481. XLocation Counter References
  482. X.LI
  483. XNumeric Constants
  484. X.LI
  485. XString Constants
  486. X.LI
  487. XOperators
  488. X.LE
  489. X.P
  490. XExpressions are used as operands in statements where any numeric value or 
  491. Xmemory address is desired.
  492. X.H 3 "Symbols"
  493. XA symbol reference is the name of an item in the symbol table, which
  494. Xhas a numeric value associated with it.
  495. XThis value is either the memory address of the statement which has this
  496. Xsymbol as a label, or the value of the expression defined in a SET or EQU
  497. Xstatement which has this symbol as a label. 
  498. X.H 4 "Forward References"
  499. XDuring the input phase of processing, a symbol value may not be known if the 
  500. Xdefinition of the symbol has not yet occurred.
  501. XSome pseudo-operations require that their operand expressions have a value
  502. Xat the input phase, so no references to as yet undefined symbols can occur
  503. Xin this case.
  504. XIn the output phase of processing, it will result in an error if any of the
  505. Xsymbols used in expressions do not have values defined.
  506. X.H 4 "Reserved Symbols for Operators"
  507. XUsing reserved symbols as labels will result in a syntax error as they
  508. Xare predefined as a different type of syntactic element than the rest
  509. Xof the symbol table.  
  510. XOperators for which there is no special character representation, and items 
  511. Xlike machine register names and condition code types will be represented by
  512. Xreserved symbols.
  513. XThe set of the reserved symbols will vary for
  514. Xeach target machine, and will be documented in the appendix for each target.
  515. X.H 3 "Location Counter"
  516. XThe special name '*' used in an expression represents the location of the
  517. Xfirst byte of the binary output for the current statement.
  518. XSome assemblers use some other character for source code compatiblity.
  519. X.H 3 "Constants"
  520. XThe form of numeric constants is defined in the previous section.
  521. X.H 3 "Strings"
  522. XString constants, as defined in the previous section, are valid in
  523. Xexpressions.
  524. XHowever, at most the first two characters are used.
  525. XIf the string is the null string, i.e. "", the numeric value is zero.
  526. XIf the string is one character long, the value is the value of
  527. Xthe current character set translation, or the host computers character
  528. Xset if no translation is active.
  529. XIf the string is two or more characters long, the value is 
  530. X256*(the first character) + (the second character).
  531. X.H 3 "Operators"
  532. X.H 4 "Description"
  533. X.VL +20 +5 1
  534. X.LI " '+' expression "
  535. X.LI "\ "
  536. XUnary plus. No real effect.
  537. X.SP
  538. X.LI " '-' expression"
  539. X.LI "\ "
  540. XUnary minus, the result is the negative of the expression.
  541. X.SP
  542. X.LI " NOT expression"
  543. X.LI "\ "
  544. XLogical negation. The result is 0 if the expression is nonzero, 1 if the
  545. Xexpression is 0.
  546. X.SP
  547. X.LI " HIGH expression"
  548. X.LI "\ "
  549. XResult is the High half of a two byte number, equivalent to 
  550. X(expression SHR 8) AND $FF.
  551. X.SP
  552. X.LI " LOW expression"
  553. X.LI "\ "
  554. XResult is the Low order byte of the expression, equivalent to
  555. X(expression AND $FF)
  556. X.SP
  557. X.LI " expression '*' expression"
  558. X.LI " expression '/' expression"
  559. X.LI " expression '+' expression"
  560. X.LI " expression '-' expression"
  561. X.LI "\ "
  562. XStandard arithmetic operations.
  563. X.SP
  564. X.LI " expression MOD expression"
  565. X.LI "\ "
  566. XResult is the remainder of the division of the value of the left expression 
  567. Xby the right.
  568. X.SP
  569. X.LI " expression SHL expression"
  570. X.LI " expression SHR expression"
  571. X.LI "\ "
  572. XShift the value of the left expression left or right by the number of bit
  573. Xpositions given by the right operation.
  574. X.SP
  575. X.LI " expression GT expression"
  576. X.LI " expression GE expression"
  577. X.LI " expression LT expression"
  578. X.LI " expression LE expression"
  579. X.LI " expression NE expression"
  580. X.LI " expression EQ expression"
  581. X.LI " expression '>'  expression"
  582. X.LI " expression '>=' expression"
  583. X.LI " expression '<'  expression"
  584. X.LI " expression '<=' expression"
  585. X.LI " expression '='  expression"
  586. X.LI " expression '<>' expression"
  587. X.LI "\ "
  588. XRelational expressions.  
  589. XIf the relation is true, the value is 1. 
  590. XIf false, the value is 0.
  591. XThe operators are nonassociative, the  expression " 1 < 3 < 5 " is not legal.
  592. X.SP
  593. X.LI " expression AND expression"
  594. X.LI " expression OR expression"
  595. X.LI " expression XOR expression"
  596. X.LI "\ "
  597. XBitwise logical operations.
  598. X.SP
  599. X.LI " DEFINED symbol"
  600. X.LI "\ "
  601. XIf the symbol (not an expression) is defined, i.e. used as a label, before 
  602. Xthis point in the input the value is 1.
  603. XIf not, the value is 0.
  604. X.SP
  605. X.LI " '(' expression ')'"
  606. X.LI "\ "
  607. XParenthesis are available to override the operator precedence.
  608. X.LE
  609. X.H 4 "Precedence"
  610. XThe precedence of the operators from lowest to highest.
  611. X.AL 1 "" 1
  612. X.LI
  613. X HIGH LOW
  614. X.LI
  615. X OR XOR
  616. X.LI
  617. X AND
  618. X.LI
  619. X NOT
  620. X.LI
  621. X GT GE LE LT NE EQ '>' '>=' '<' '<=' '=' '<>'   
  622. X.LI
  623. X '+' '-'
  624. X.LI
  625. X '*' '/' MOD SHL SHR
  626. X.LI
  627. X unary '+' '-'
  628. X.LI
  629. X ( expression )
  630. X.LE
  631. X.H 1 "Statements"
  632. XThe names for the operations and pseudo-operations for each assembler are
  633. Xspecified in the adaptation files,
  634. Xand can be different from the examples given here.
  635. X.H 2 "Label Only Line"
  636. XA line with only a label starting in column 1 will define that symbol
  637. Xwith the current value of the location counter.
  638. X.H 2 "End"
  639. X.DS I N
  640. X[Label] END 
  641. X.DE
  642. X.P
  643. XThe End statement terminates the processing of the current file.
  644. XFor an include file, the file is closed and input resumes in the
  645. Xfile that contained the include statement.
  646. XFor the main file, processing shifts to the following passes of the
  647. Xassembly.
  648. XThe end statement is optional, as the end of file condition is treated in the
  649. Xsame fashion.
  650. XIf the optional label is present, The symbol specified is used as the
  651. Xexecution start address that is output in the binary file.  
  652. XThe symbol must be used as a label somewhere else in the file.
  653. XWhen more than one start address is specified, the last one in the file is 
  654. Xused.
  655. X.H 2 "File Inclusion"
  656. X.DS I N
  657. XINCLUDE "filename"
  658. XINCL "filename"
  659. X.DE
  660. X.P
  661. XThe include statement shifts input from the current file to the file
  662. Xspecified. 
  663. XInput resumes from the file containing the include statement when
  664. Xthe end of file or the End statement is reached in the included file.
  665. XIncludes can be nested up to the limits of the include file stack,
  666. Xcurrently a limit of 20 deep, or the limits of the operating system,
  667. Xwhichever comes first.
  668. XIncludes can be recursive, i.e., a file can include itself.
  669. XIf a file cannot be opened, either do to an bad filename or a lack of
  670. Xsystem resources, an error is issued.
  671. X.H 2 "Conditional Assembly"
  672. X.H 3 "If"
  673. X.DS I N
  674. XIF expression 
  675. X.DE
  676. X.P
  677. XThe IF statement allows selective assembly.
  678. XIf the expression evaluates to a nonzero value, all statements between the 
  679. XIF and the matching ELSE or ENDI are assembled.
  680. XIf the expression evaluates to zero, or the expression in noncomputable due
  681. Xto a forward reference, all statements between the IF and the matching
  682. XELSE or ENDI are ignored.
  683. X.P
  684. XNote: it is safer to use the DEFINED operator when testing for the existence
  685. Xof a symbol than to rely on the noncomputability of an expression.
  686. X.P
  687. XIF statements can be nested to a depth determined by a configuration 
  688. Xconstant, currently 32.
  689. XNo label is allowed on an IF statement.
  690. X.H 3 "Else"
  691. X.DS I N
  692. XELSE 
  693. X.DE
  694. X.P
  695. XThe ELSE statement causes all statements between it and its corresponding
  696. XENDI statement to be treated the opposite of the statements between the
  697. Xmatching IF and this statement.
  698. XWhen the expression on the matching IF is nonzero, the statements between
  699. Xthe ELSE and ENDI are ignored.
  700. XIf the IF expression failed, the statements between the ELSE and the ENDI
  701. Xare assembled.
  702. XLabels are not allowed on ELSE statements.
  703. X.H 3 "End If"
  704. X.DS I N
  705. XENDI 
  706. X.DE
  707. X.P
  708. XThe ENDI statement terminates processing of its matching IF statement.
  709. XLabels are not allowed on ENDI statements.
  710. X.H 2 "Symbolic Constants"
  711. XSymbols can be assigned numeric values with the SET and EQU statements.
  712. XThe expressions cannot have forward references to as yet undefined symbols.
  713. X.H 3 "Equate"
  714. X.DS I N
  715. XLabel EQU expression
  716. X.DE
  717. X.P
  718. XThe EQU statement takes the value of the expression and creates a symbol
  719. Xwith that value.
  720. XSymbols defined in EQU statements cannot already exist, or be redefined.
  721. X.H 3 "Set"
  722. X.DS I N
  723. XLabel SET expr 
  724. X.DE
  725. X.P
  726. XThe SET statement sets the symbol specified in the label field with the
  727. Xnumeric value of the expression.
  728. XThe SET statement can change the value of a symbol, but only if the
  729. Xsymbol is originally defined in a previous SET statement.
  730. X.DS I N
  731. XExample
  732. X.SP
  733. Xcounter set 1
  734. Xcounter set counter+1
  735. Xcounter set counter+1
  736. X.DE
  737. X.H 2 "Location Counter Value Setting"
  738. XThe address of the generated binary data can be changed with the ORG and
  739. Xreserve statements.
  740. X.H 3 "Org"
  741. X.DS I N
  742. X[Label] ORG expression
  743. X.DE
  744. X.P
  745. XThe location counter is set to the numeric value of expression.
  746. XIt is an error if the expression contains references to symbols not
  747. Xyet defined.
  748. XThe optional label is set to the new value of the location counter.
  749. X.H 3 "Reserve Memory"
  750. X.DS I N
  751. X[Label] RMB expression
  752. X[Label] RESERVE expression
  753. X.DE
  754. X.P
  755. XThe reserve memory statement moves the location counter forward by
  756. Xthe number of bytes specified in the expression.
  757. XThe label is set to the first location of this area.
  758. X.H 2 "Data Definitions"
  759. X.H 3 "Define Byte Data"
  760. X.DS I N
  761. X[Label]  BYTE  expression [, expression] ...
  762. X[Label]  FCB   expression [, expression] ...
  763. X[Label]  DB  expression [, expression] ...
  764. X.DE
  765. X.P
  766. XThe define byte statement generates one character of data for each
  767. Xexpression in the expression list.
  768. XThere can be up to 128 expressions on a line, more than the line length will
  769. Xallow.
  770. XThe optional label is set to the first location of this area.
  771. X.H 3 "Define Word Data"
  772. X.DS I N
  773. X[Label]  WORD  expression [, expression] ...
  774. X[Label]  FDB   expression [, expression] ...
  775. X[Label]  DW  expression [, expression] ...
  776. X.DE
  777. X.P
  778. XThe define word statement generates a two byte integer for each expression
  779. Xin the expression list.
  780. XThere can be up to 128 expressions on a line, more than the line length will
  781. Xallow.
  782. XThe byte order of the data is determined by the adaptation files for
  783. Xthe target processor.
  784. XThe optional label is set to the first location of this area.
  785. X.H 3 "Define String Data"
  786. X.DS I N
  787. X[Label] STRING string [, string] ...
  788. X[Label] FCC string [, string] ...
  789. X.DE
  790. X.P
  791. XThe define string statement generates data encoded in the current character 
  792. Xset translation,
  793. Xone byte per character, excluding the delimiter characters.
  794. XThe optional label is set to the first location of this area.
  795. X.H 2 "Defining Target Character Sets"
  796. XThe values generated for String Constants in both the Define String
  797. XData and in expressions can be specified on a character by character
  798. Xbasis.  This is to support cross assembly where the target system
  799. Xhas a different character set from the host computer.
  800. X.H 3 "Define Character Set Translation"
  801. X.DS I N
  802. X.DE
  803. XLabel CHARSET
  804. X.P
  805. XThe define character set translation statement defines a name and creates 
  806. Xan internal table for a character set.  
  807. XThe label symbol is treated like the label on an EQU statement.
  808. XThe value is from an internal counter and has little or no meaning
  809. Xoutside of using it on a CHARUSE statement to specify which translation
  810. Xto use.  There can be up to 5 [configurable] character
  811. Xtranslation sets.
  812. XA CHARSET statement must precede any CHARDEF statements.
  813. X.H 3 "Define Character Value"
  814. X.DS I N
  815. XCHARDEF string, expression [, expression ] ...
  816. XCHD string, expression [, expression ] ...
  817. X.DE
  818. X.P
  819. XThe define character value statement set the translation for one
  820. Xor more characters in the table defined by the preceding CHARSET
  821. Xstatement.
  822. XThere can be more than one character in the string, but the
  823. Xnumber of expression in the value list must match the number
  824. Xof characters.
  825. XOctal and Hexadecimal escape sequences cannot occur in the string.
  826. X.P
  827. XThere are two sets in each translation table.  
  828. XThe first is for the characters, the second for characters escaped with 
  829. Xthe backslash.
  830. X.P
  831. XNote: the characters '"' and '\e"' (and "'" and "\e'") each have an entry in 
  832. Xdifferent halves of the translation tables.
  833. X.H 3 "Use Character Translation"
  834. X.DS I N
  835. XCHARUSE
  836. XCHARUSE expression
  837. X.DE
  838. X.P
  839. XThe use character translation statement changes the translation for the
  840. Xfollowing statements.
  841. XThe statement without an expression turns off the translation, so
  842. Xthe host character set is used.
  843. XThe statement with an expression (the name given on the CHARSET statement)
  844. Xsets the translation to the set defined in the respective CHARSET.
  845. X.DS I N
  846. XExample
  847. X.SP
  848. Xascii    charset
  849. X    chardef    " !\e"#$%&\e'",$20,$21,$22,$23,$24,$25,$26,$27
  850. X    chardef    "()*+,-./",$28,$29,$2a,$2b,$2c,$2d,$2e,$2f
  851. X    chardef    "01234567",$30,$31,$32,$33,$34,$35,$36,$37
  852. X    chardef    "89:;<=>?",$38,$39,$3a,$3b,$3c,$3d,$3e,$3f
  853. X    chardef    "@ABCDEFG",$40,$41,$42,$43,$44,$45,$46,$47
  854. X    chardef    "HIJKLMNO",$48,$49,$4a,$4b,$4c,$4d,$4e,$4f
  855. X    chardef    "PQRSTUVW",$50,$51,$52,$53,$54,$55,$56,$57
  856. X    chardef    "XYZ[\e\e]^_",$58,$59,$5a,$5b,$5c,$5d,$5e,$5f
  857. X    chardef    "`abcdefg",$60,$61,$62,$63,$64,$65,$66,$67
  858. X    chardef    "hijklmno",$68,$69,$6a,$6b,$6c,$6d,$6e,$6f
  859. X    chardef    "pqrstuvw",$70,$71,$72,$73,$74,$75,$76,$77
  860. X    chardef    "xyz{|}~",$78,$79,$7a,$7b,$7c,$7d,$7e
  861. X    chardef    '"', $22 ; not the same table entry as '\e"'
  862. X    chardef    "'", $27 ; 
  863. X    chardef    "\en\et\ev\eb\er\ef\ea", $0a,$09,$0b,$08,$0d,$0c,$07
  864. X    charuse ascii
  865. X.DE
  866. X.H 2 "Machine Instructions"
  867. X.DS I N
  868. X[Label] opcode operands?
  869. X.DE
  870. X.P
  871. XMachine instructions generate the binary output by evaluating the expressions
  872. Xfor the operands, and matching the opcode with the entry in the instruction 
  873. Xgeneration tables. 
  874. X.P
  875. XIf the instruction has more than one format which is selected by the
  876. Xvalue of the operands, the selection criteria must able to be determined at
  877. Xthe input phase of processing.
  878. XFor example, in the mc6800 architecture direct address mode, any memory 
  879. Xvariables that are have an address between 0 and 255 must be defined before 
  880. Xany reference to these symbols. 
  881. X.P
  882. XThe optional label is set to the first location of the generated instruction.
  883. X.H 1 "Output"
  884. X.H 2 "Program Generated Messages and Errors"
  885. X.H 3 "Messages"
  886. X.VL 10 5 1
  887. X.LI "`` ERROR SUMMARY - ERRORS DETECTED {count}''"
  888. X.LI "``               -  WARNINGS       {count}''"
  889. X.LI "\ "
  890. Xoutput at the end of the listing and on the console.
  891. X.LE
  892. X.H 3 "System Errors"
  893. X.VL 10 5 1
  894. X.LI "``cannot open hex output {filename}''"
  895. X.LI "\ "
  896. Xfile cannot be opened for output. The assembly continues
  897. Xas if the -[oh] option was not specified.
  898. X.SP
  899. X.LI "``cannot open input file {filename}''"
  900. X.LI "\ "
  901. Xfile cannot be opened for reading. Fatal error.
  902. X.SP
  903. X.LI "``cannot open list file {filename}''"
  904. X.LI "\ "
  905. Xfile cannot be opened for output. The assembly continues
  906. Xas if the -l option was not specified.
  907. X.SP
  908. X.LI "``cannot open symbol file {filename}''"
  909. X.LI "\ "
  910. Xfile cannot be opened for output. The assembly continues
  911. Xas if the -s option was not specified.
  912. X.SP
  913. X.LI "``cannot open temp file {filename}''"
  914. X.LI "\ "
  915. Xfile cannot be opened for input or output. Fatal error.
  916. X.SP
  917. X.LI "``no input file''"
  918. X.LI "\ "
  919. Xno input operand specified. Fatal error.
  920. X.SP
  921. X.LI "``no match on CPU type {string}, default used''"
  922. X.LI "\ "
  923. Xoperand for a -p option can't be matched.
  924. X.SP
  925. X.LI "``cannot allocate string storage''"
  926. X.LI "\ "
  927. XRequest to operating system for more memory failed.
  928. XFatal error.  The string storage pool is where the
  929. Xcharacter representation of symbols and names for
  930. Xinclude files are stored.
  931. X.SP
  932. X.LI "``cannot allocate symbol space''"
  933. X.LI "\ "
  934. XRequest to operating system for more memory failed.
  935. XFatal error.  The symbol table is full. The symbol
  936. Xspace is the set of arrays where the symbol values
  937. Xand other numeric information is stored.
  938. X.SP
  939. X.LI "``cannot redefine reserved symbol''"
  940. X.LI "\ "
  941. XError in defining reserved symbols. Two calls to
  942. X"reservedsym()" with the same character string value
  943. Xexist in the setup. Fatal error.  Should not occur
  944. Xin a production executable.
  945. X.SP
  946. X.LI "``excessive number of subexpressions''"
  947. X.LI "\ "
  948. XThe first pass ran out of element storage for the expression 
  949. Xparse tree.  The expression is too complex.  Internal error 
  950. Xwhich should never occur.  Fatal error.
  951. X.SP
  952. X.LI "``unable to allocate symbol index''"
  953. X.LI "\ "
  954. XRequest to operating system for more memory failed.
  955. XFatal error.  The symbol table is full.  The symbol index
  956. Xis used in the output pass to direct symbol references to
  957. Xthe symbol table entry.
  958. X.LE
  959. X.H 3 "Error"
  960. X.VL 10 5 1
  961. X.LI "``ELSE with no matching if''"
  962. X.LI "``ENDI with no matching if''"
  963. X.LI "\ "
  964. Xmismatched if/else/endi results in an else/endi left over
  965. X.SP
  966. X.LI "``IF stack overflow''"
  967. X.LI "\ "
  968. Xmore than IFSTKDEPTH (32) nested if statements
  969. X.SP
  970. X.LI "``Overlength/Unterminated Line''"
  971. X.LI "\ "
  972. Xline longer than input buffer, or not terminated with newline
  973. Xcharacter.
  974. X.SP
  975. X.LI "``active IF at end of file''"
  976. X.LI "\ "
  977. Xmismatched if/else/endi results in an unclosed if
  978. X.SP
  979. X.LI "``cannot change symbol value with EQU''"
  980. X.LI "\ "
  981. Xsymbol is already defined.
  982. X.SP
  983. X.LI "``cannot change symbol value with SET''"
  984. X.LI "\ "
  985. Xsymbol is already defined, but not with a Set statement.
  986. X.SP
  987. X.LI "``cannot create character translation table''"
  988. X.LI "\ "
  989. Xthe internal table for a character translation set
  990. Xcannot be allocated due to lack of space, or
  991. Xmore translation sets than the assembler is
  992. Xconfigured for.
  993. X.SP
  994. X.LI "``cannot open include file''"
  995. X.LI "\ "
  996. XThe include file cannot be opened for reading, or not enough 
  997. Xsystem resources are available to open the file.
  998. X.SP
  999. X.LI "``character already defined 'char' ''"
  1000. X.LI "\ "
  1001. Xthe character is already present in a previous CHARDEF
  1002. Xstatement for this translation set.
  1003. X.SP
  1004. X.LI "``expression exceeds available field width''"
  1005. X.LI "\ "
  1006. XThe value of an expression is too large to fit into
  1007. Xthe field of the instruction.  Relative branch target
  1008. Xis too far away.
  1009. X.SP
  1010. X.LI "``expression fails validity test''"
  1011. X.LI "\ "
  1012. XAn explicit test programmed in the generation string for the instruction 
  1013. Xfailed.
  1014. XThese conditions are documented in the appendix for the specific instruction
  1015. Xset.
  1016. X.SP
  1017. X.LI "``expression stack overflow''"
  1018. X.LI "\ "
  1019. XToo many level of parenthesis or complex expression
  1020. Xwith operator precedence that results in the expression
  1021. Xevaluation stack overflowing.  
  1022. X.SP
  1023. X.LI "``include file nesting limit exceeded''"
  1024. X.LI "\ "
  1025. Xinclude files are nested to more than FILESTKDPTH (20)
  1026. Xlevels deep.  "cannot open include file" usually occurs first.
  1027. X.SP
  1028. X.LI "``invalid char in instruction generation''"
  1029. X.LI "\ "
  1030. XInternal error, instruction generation string is not
  1031. Xdefined properly.  Should not occur in a production executable.
  1032. X.SP
  1033. X.LI "``invalid character constant 'char' ''"
  1034. X.LI "\ "
  1035. XA character specification in a string constant isn't 
  1036. Xproperly formed.
  1037. X.SP
  1038. X.LI "``invalid character to define 'char' ''"
  1039. X.LI "\ "
  1040. Xa constant in the string in a CHARDEF statement is of a form
  1041. X(octal, hex, or improperly formed) that does not have a
  1042. Xtranslation table entry.
  1043. X.SP
  1044. X.LI "``invalid opcode''"
  1045. X.LI "\ "
  1046. XNo such string occurs in the opcode symbol table.  Opcode 
  1047. Xstrings are converted to uppercase before comparison, and 
  1048. Xtherefore are case insensitive.
  1049. X.SP
  1050. X.LI "``invalid operands''"
  1051. X.LI "``invalid operands/illegal instruction for cpu''"
  1052. X.LI "\ "
  1053. Xstatement has a valid opcode, with the correct syntax, but
  1054. Xno code generation can be found in the table for these operands
  1055. X.SP
  1056. X.LI "``invalid syntax for instruction''"
  1057. X.LI "\ "
  1058. Xopcode is valid, but not for this syntax form
  1059. X.SP
  1060. X.LI "``more characters than expressions''"
  1061. X.LI "``more expressions than characters''"
  1062. X.LI "\ "
  1063. XA mismatch between the string constant and the number of expressions
  1064. Xin a CHARDEF statement.
  1065. X.SP
  1066. X.LI "``multiple definition of label''"
  1067. X.LI "\ "
  1068. Xlabel symbol is already defined.
  1069. X.SP
  1070. X.LI "``no CHARSET statement active''"
  1071. X.LI "\ "
  1072. Xa CHARDEF statement occurs before any CHARSET statement.
  1073. X.SP
  1074. X.LI "``noncomputable expression for EQU''"
  1075. X.LI "``noncomputable expression for ORG''"
  1076. X.LI "``noncomputable expression for SET''"
  1077. X.LI "``noncomputable result for RMB expression''"
  1078. X.LI "\ "
  1079. Xexpression contains reference to symbols that have not
  1080. Xyet been defined, and thus has no numeric value.
  1081. X.SP
  1082. X.LI "``nonexistent character translation table''"
  1083. X.LI "\ "
  1084. Xexpression in a CHARUSE statement does not
  1085. Xcorrespond to any CHARSET statements label.
  1086. X.SP
  1087. X.LI "``overflow in instruction generation''"
  1088. X.LI "``overflow in polish expression conversion''"
  1089. X.LI "\ "
  1090. XThe intermediate file line being built exceeds the length
  1091. Xof the buffer.  The expression is too complex.
  1092. X.SP
  1093. X.LI "``syntax error at/before character ^{character}''"
  1094. X.LI "``syntax error at/before character {character}''"
  1095. X.LI "``syntax error at/before token {symbol/constant}''"
  1096. X.LI "``syntax error at invalid token {constant/string} ''"
  1097. X.LI "``syntax error at/before string {string} ''"
  1098. X.LI "``syntax error at/before End of Line''"
  1099. X.LI "``syntax error at/before {relational op}''"
  1100. X.LI "``syntax error at/before Undeterminable Symbol''"
  1101. X.LI "``syntax error - undetermined yyerror type''"
  1102. X.LI "\ "
  1103. Xstatement is in a form that the first pass parser cannot
  1104. Xrecognize.  The next syntactic element is inappropriate for
  1105. Xwhatever language element the parser is working on.  
  1106. X.SP
  1107. X.LI "``error or premature end of intermediate file''"
  1108. X.LI "``syntax error - cannot backup''"
  1109. X.LI "``unimplemented width''"
  1110. X.LI "``unknown intermediate file command''"
  1111. X.LI "``yacc stack overflow''"
  1112. X.LI "\ "
  1113. XInternal errors, should not occur.
  1114. X.SP
  1115. X.LI "``undefined character value 'char' ''"
  1116. X.LI "\ "
  1117. XA string constant contains a character not defined in
  1118. Xa CHARDEF statement for the current character translation.
  1119. X.SP
  1120. X.LI "``undefined symbol {symbolname}''"
  1121. X.LI "\ "
  1122. Xsymbol has no definition anywhere in file.
  1123. X.LE
  1124. X.H 3 "Warnings"
  1125. X.VL 10 5 1
  1126. X.LI "``character translation value truncated''"
  1127. X.LI "\ "
  1128. XAn expression in a CHARDEF statment has a value less than zero
  1129. Xor greater then 255.
  1130. X.SP
  1131. X.LI "``forward reference to SET/EQU symbol''"
  1132. X.LI "\ "
  1133. XA symbol in an expression is defined in a set/equ statement 
  1134. Xthat occurs after the line.  For set statements, the value 
  1135. Xof the symbol is that defined in the set statement closest 
  1136. Xto the end of the file.
  1137. X.SP
  1138. X.LI "``string constant in expression more than 2 characters long''"
  1139. X.LI "\ "
  1140. XThe first two characters are used as the numeric value of
  1141. Xthe subexpression.
  1142. X.LE
  1143. X.H 2 "Listing"
  1144. XWhen the -l option is used, the detailed listing is output
  1145. Xto the given file.
  1146. XThis consists of the symbol listing followed by the annotated listing.
  1147. X.H 3 "Symbol Table"
  1148. XThe symbol listing is printed three symbols across, with the
  1149. Xvalue then name of the symbol.  
  1150. XUndefined symbols will have "????????" in their value field.
  1151. XThe symbols are listed in order of first occurrence in the input.
  1152. XOnly the first fifteen characters of a symbol are printed.
  1153. X.H 3 "Instruction Lines"
  1154. XThe source statements are printed in the same form as they were input with
  1155. Xno reformatting.
  1156. XFollowing the source line, will be any error or warning messages associated
  1157. Xwith the line.
  1158. XStatements which generate data will be preceded with the address and
  1159. Xdata for them in hexadecimal format.
  1160. XIf more than six bytes of data are generated, the remainder will be
  1161. Xprinted on the following lines, with up to sixteen bytes per line.
  1162. XAll data generated is printed in the file.
  1163. XStatements that don't generate data but have some value oriented operation, 
  1164. Xlike EQU, SET, ORG, or RESERVE, will print that value in the first 24 
  1165. Xcolumns of the source line.
  1166. X.H 2 "Symbol File"
  1167. XWhen the -s option is used, the symbol table is printed to the given
  1168. Xfile.  The format is one symbol per line, address then symbol name.
  1169. XIf the symbol is undefined, "????????" is printed for the address.  The
  1170. Xsymbols are printed in the order of first occurrence, either definition 
  1171. Xor reference, in the source file.  This feature is provided so the
  1172. Xsystem sort utility can be used to produce symbol tables sorted by
  1173. Xeither address or name.
  1174. XThe entire symbol name is printed.
  1175. X.H 2 "Binary Output"
  1176. X.H 3 "Intel Hex Record Format"
  1177. XThe Intel hex record is a printable text string with an ASCII character
  1178. Xrepresenting 4 bits of a byte.
  1179. XThe characters used are "0" through "9" and "a" through "f", representing 
  1180. Xbinary data 0000 to 01001, and 1010 through 1111.
  1181. XThere are always two ASCII characters used to represent 1 byte, the high
  1182. Xhalf, then the low half.
  1183. XThere is one record per line in a text file. 
  1184. XThis format is accepted by most of prom programmers.
  1185. X.P
  1186. XRecord Layout
  1187. X.VL 15 5
  1188. X.LI :ccaaaattddddddddddkk
  1189. X.LI ':'
  1190. Xindicator character
  1191. X.LI cc
  1192. Xascii-hex representation of an 8 bit count of data characters
  1193. X.LI aaaa
  1194. Xascii-hex representation of 16 bit address
  1195. X.LI tt
  1196. Xascii-hex representation of an 8 bit type
  1197. X.VL +10
  1198. X.LI 00 is a data record
  1199. Xthe address is the first location to store the data
  1200. X.LI 01 is an end of file record
  1201. Xthe address is the location to start execution, the
  1202. Xcount is 00, no data is present.
  1203. X.LE
  1204. X.LI dd...
  1205. Xascii-hex representation of the data, two characters per byte. 
  1206. XThe number of 8 bit bytes is given by the count field.
  1207. X.LI kk
  1208. Xascii-hex representation of an 8 bit checksum.  The sum of the
  1209. Xbinary representation, modulo 256, of the count, the high half 
  1210. Xof the address, the low half of the address, the type, all the 
  1211. Xdata bytes, and the checksum must be zero.
  1212. X.LE
  1213. X.H 1 "Program Limits"
  1214. X.VL +30 ""
  1215. X.LI "Line Length"
  1216. X256 characters including end of line control characters
  1217. X.LI "Number of Symbols"
  1218. X.DL +2
  1219. X.LI
  1220. XThe maximum allocatable block size divided by the size of a pointer.
  1221. XFor a iAPX286, about 16000 entries.
  1222. X.LI
  1223. XThe amount of allocatable memory divided by the amount of space per symbol.
  1224. XFor an iAPX286, 22 + 1 + the length of the string bytes.
  1225. X.LE
  1226. X.LI "Symbol Length"
  1227. XSee line length
  1228. X.LI "Output"
  1229. XA 16 bit address in the output record format limits output to 65536 
  1230. Xbinary bytes.
  1231. X.LI "Expressions per Line"
  1232. X128 (in BYTE and WORD statements)
  1233. X.LI "Strings per Line"
  1234. X128 (in STRING statements)
  1235. X.LI "Nested If Statements"
  1236. X32 levels
  1237. X.LI "Nested Include Files"
  1238. X20 or whatever the operating system allows 
  1239. X.LI "Subexpressions per Line"
  1240. X258 symbols, constants, operators (total)
  1241. X.LI "Character Translation Sets"
  1242. X5 sets, plus the default (host) character set
  1243. X.LE
  1244. X.TC 1 1 7
  1245. SHAR_EOF
  1246. true || echo 'restore of base.doc failed'
  1247. fi
  1248. # ============= cleanup.bat ==============
  1249. if test -f 'cleanup.bat' -a X"$1" != X"-c"; then
  1250.     echo 'x - skipping cleanup.bat (File already exists)'
  1251. else
  1252. echo 'x - extracting cleanup.bat (Text)'
  1253. sed 's/^X//' << 'SHAR_EOF' > 'cleanup.bat' &&
  1254. Xdel *.obj
  1255. Xdel as*.c
  1256. Xdel as*.h
  1257. SHAR_EOF
  1258. true || echo 'restore of cleanup.bat failed'
  1259. fi
  1260. # ============= devnote ==============
  1261. if test -f 'devnote' -a X"$1" != X"-c"; then
  1262.     echo 'x - skipping devnote (File already exists)'
  1263. else
  1264. echo 'x - extracting devnote (Text)'
  1265. sed 's/^X//' << 'SHAR_EOF' > 'devnote' &&
  1266. X
  1267. X1.    Disclaimer
  1268. X
  1269. X    This software is in the public domain.  
  1270. X    Any prior copyright claims are relinquished.  
  1271. X
  1272. X    This software is distributed with no warranty whatever.  
  1273. X    The author takes no responsibility for the consequences 
  1274. X    of its use.
  1275. X
  1276. X2.    Size
  1277. X
  1278. X    You can compile the assemblers small model (64k + 64k).
  1279. X    Getting them any smaller would be a real trick.
  1280. X
  1281. X3.    Compilation 
  1282. X
  1283. X    The C source files that comprise a cross assembler are
  1284. X    in 3 categories.
  1285. X        
  1286. X        Common code (doesn't need recompiling between different
  1287. X        "flavors")
  1288. X            frasmain.c
  1289. X            fraosub.c
  1290. X            frapsub.c
  1291. X
  1292. X        "Flavor" specific files (generated by Yacc, compiled
  1293. X        for every "flavor"))
  1294. X            as*.c
  1295. X            as*.h
  1296. X
  1297. X        Common code that depends on the fraytok.h file (compiled
  1298. X        for every "flavor")
  1299. X            fryylex.c
  1300. X
  1301. X4.    Fraytok.h
  1302. X
  1303. X    The yacc program defines some data structures and assigns values 
  1304. X    to various #define Macros used in the lexical analyzer.  
  1305. X    The lexical analyzer (fryylex.c) file refers to these in the 
  1306. X    fraytok.h include file.  The {assembler name}.h file generated 
  1307. X    by yacc (or renamed in the makefile) for the different .y files 
  1308. X    will be different.  If you compile manually, insure that the correct 
  1309. X    {assembler name}.h file is copied to fraytok.h.
  1310. X
  1311. X5.    Configuration Macros
  1312. X
  1313. X    DOSTEMP
  1314. X
  1315. X    If neither the current directory or /usr/tmp is an acceptable
  1316. X    directory for the temporary intermediate data file, change the 
  1317. X    initialization in frasmain.c.
  1318. X
  1319. X    NOGETOPT
  1320. X
  1321. X    If you use the NOGETOPT to use the provided function, remember
  1322. X    to change the MAINDEPENDS makefile macro.
  1323. X
  1324. X    NOSTRING, USEINDEX
  1325. X
  1326. X    The version 7 system I used to test these for version 1 got sold
  1327. X    for scrap.  Should still work ;-)
  1328. X
  1329. X6.    Dos
  1330. X
  1331. X    If you don't have a MS-DOS (or whatever) Yacc equivalent, but do have 
  1332. X    access to a another computer with Yacc, you can run that step there 
  1333. X    and take the resulting .c and .h files to the (whatever) system.
  1334. X    (I have not inquired at AT&T as to the copyright status of the 
  1335. X    resulting code, although it is rumored that the output of Yacc
  1336. X    is public domain.  Do this at your own risk. [The Yacc program
  1337. X    itself is definitly NOT public domain]).
  1338. X
  1339. X    The combination used (Turbo C and Bison) will report a half
  1340. X    a dozen (varies) shift-reduce conflicts from Bison, and 3 (usually) 
  1341. X    warnings from the C compiler for the parser.  No big deal.
  1342. X
  1343. X    The Bison (the Free Software Foundation's Yacc clone) I used
  1344. X    was disk 285 from the C Users Group.  The version dated 
  1345. X    January 1989.  This is modified from the original, to
  1346. X    adapt it to MS-DOS compilers, conventions, and libraries.
  1347. X
  1348. X    (The following paragraph was copied out of this release)
  1349. X
  1350. X    The C Users' Group (CUG) collects, maintains and distributes
  1351. X    public domain C source code, publishes a magazine, The C Users' Journal
  1352. X    and serves as a resource for C users. Several vendors have named
  1353. X    CUG as the official users group for their implementation of C.
  1354. X    For membership and subscription information contact
  1355. X
  1356. X    The C Users' Group
  1357. X    2601 Iowa
  1358. X    Lawrence, KS 66047
  1359. X    (913) 841-1631
  1360. X
  1361. X7.    Porting to non-ascii machines
  1362. X
  1363. X    The fryylex.c file contains a translate table, chartrantab,
  1364. X    which classifies the input character set for the scanner's
  1365. X    state machine.  The reference to this table masks off the
  1366. X    input character with 0x7f limiting the table to 128 elements.  
  1367. X    So if you want a source file in EBCDIC or to have umlauts in 
  1368. X    your variable names, a new table, and a new mask are called for.
  1369. X
  1370. X    Debug in the lexical analyzer is turned on with a nonzero
  1371. X    value in the DEBUG macro.
  1372. X
  1373. X    Host machines that don't use two-complement negative numbers
  1374. X    will have to compensate in the fraosub.c outeval()
  1375. X    switch statement for cases IFC_EMU8, IFC_EMS7, IFC_EM16,
  1376. X    IFC_EMBR16.
  1377. X
  1378. X8.    History
  1379. X    
  1380. X    These used to be called the Framework cross assemblers, but
  1381. X    there's someone using the name for a database package or 
  1382. X    something like that.  Why Frankenstein?  Well, if you don't
  1383. X    like the way it acts, chop off it's head and sew a new one on.
  1384. X    (It was around Halloween).
  1385. X
  1386. X    The .y files are generated from a more general machine
  1387. X    description by an automated script.  But this isn't
  1388. X    portable enough and is too disgusting to distribute.
  1389. X
  1390. X9.    Bug reports
  1391. X
  1392. X    Report bugs to markz@ssc.uucp.  Especially screwups in the
  1393. X    instruction generation tables.
  1394. X
  1395. X    There is no telephone that I can be reached at.
  1396. X    Please don't phone/fax Specialized Systems Consultants in
  1397. X    reference to this software.  What I do for a hobby, and 
  1398. X    what they do to make money are not connected.
  1399. X
  1400. X    Mark Zenier
  1401. X
  1402. X
  1403. SHAR_EOF
  1404. true || echo 'restore of devnote failed'
  1405. fi
  1406. # ============= filelist ==============
  1407. if test -f 'filelist' -a X"$1" != X"-c"; then
  1408.     echo 'x - skipping filelist (File already exists)'
  1409. else
  1410. echo 'x - extracting filelist (Text)'
  1411. sed 's/^X//' << 'SHAR_EOF' > 'filelist' &&
  1412. XMakefile    Unix makefile
  1413. Xas1805.1    Man page, process with nroff -man
  1414. Xas1805.doc    Appendix, process with tbl and nroff -mm
  1415. Xas1805.tst    Test input file
  1416. Xas1805.tut    Test output, listing file
  1417. Xas1805.y    Yacc and instruction table source file
  1418. Xas2650.1    Man page, process with nroff -man
  1419. Xas2650.doc    Appendix, process with tbl and nroff -mm
  1420. Xas2650.tst    Test input file
  1421. Xas2650.tut    Test output, listing file
  1422. Xas2650.y    Yacc and instruction table source file
  1423. Xas6301.1    Man page, process with nroff -man
  1424. Xas6301.doc    Appendix, process with tbl and nroff -mm
  1425. Xas6301.tst    Test input file
  1426. Xas6301.tut    Test output, listing file
  1427. Xas6301.y    Yacc and instruction table source file
  1428. Xas6502.1    Man page, process with nroff -man
  1429. Xas6502.doc    Appendix, process with tbl and nroff -mm
  1430. Xas6502.tst    Test input file
  1431. Xas6502.tut    Test output, listing file
  1432. Xas6502.y    Yacc and instruction table source file
  1433. Xas6805.1    Man page, process with nroff -man
  1434. Xas6805.doc    Appendix, process with tbl and nroff -mm
  1435. Xas6805.tst    Test input file
  1436. Xas6805.tut    Test output, listing file
  1437. Xas6805.y    Yacc and instruction table source file
  1438. Xas6809.1    Man page, process with nroff -man
  1439. Xas6809.doc    Appendix, process with tbl and nroff -mm
  1440. Xas6809.tst    Test input file
  1441. Xas6809.tut    Test output, listing file
  1442. Xas6809.y    Yacc and instruction table source file
  1443. Xas6811.1    Man page, process with nroff -man
  1444. Xas6811.doc    Appendix, process with tbl and nroff -mm
  1445. Xas6811.tst    Test input file
  1446. Xas6811.tut    Test output, listing file
  1447. Xas6811.y    Yacc and instruction table source file
  1448. Xas7000.1    Man page, process with nroff -man
  1449. Xas7000.doc    Appendix, process with tbl and nroff -mm
  1450. Xas7000.tst    Test input file
  1451. Xas7000.tut    Test output, listing file
  1452. Xas7000.y    Yacc and instruction table source file
  1453. Xas8041.tst    Test input file, for as8048
  1454. Xas8041.tut    Test output, listing file
  1455. Xas8048.1    Man page, process with nroff -man
  1456. Xas8048.doc    Appendix, process with tbl and nroff -mm
  1457. Xas8048.tst    Test input file
  1458. Xas8048.tut    Test output, listing file
  1459. Xas8048.y    Yacc and instruction table source file
  1460. Xas8051.1    Man page, process with nroff -man
  1461. Xas8051.doc    Appendix, process with tbl and nroff -mm
  1462. Xas8051.tst    Test input file
  1463. Xas8051.tut    Test output, listing file
  1464. Xas8051.y    Yacc and instruction table source file
  1465. Xas8096.1    Man page, process with nroff -man
  1466. Xas8096.doc    Appendix, process with tbl and nroff -mm
  1467. Xas8096.tst    Test input file
  1468. Xas8096.tut    Test output, listing file
  1469. Xas8096.y    Yacc and instruction table source file
  1470. Xascii.chd    assembler include file defining the Ascii character set
  1471. X        with the Ansi C control characters
  1472. Xasz8.1        Man page, process with nroff -man
  1473. Xasz8.doc    Appendix, process with tbl and nroff -mm
  1474. Xasz8.tst    Test input file
  1475. Xasz8.tut    Test output, listing file
  1476. Xasz8.y        Yacc and instruction table source file
  1477. Xasz80.1        Man page, process with nroff -man
  1478. Xasz80.doc    Appendix, process with tbl and nroff -mm
  1479. Xasz80.tst    Test input file
  1480. Xasz80.tut    Test output, listing file
  1481. Xasz80.y        Yacc and instruction table source file
  1482. Xbase.doc    Assembler manual, process with nroff -mm
  1483. Xcleanup.bat    MS-DOS cleanup script
  1484. Xdevnote        Notes for development and porting
  1485. Xfilelist    This file
  1486. Xfraebin.h    binary operator expression evaluation include source file
  1487. Xfraeuni.h    unary operator expression evaluation include source file
  1488. Xfragcon.h    generation constants include source file
  1489. Xfraosub.c    output phase routines source file
  1490. Xfrapsub.c    parse phase routines source file
  1491. Xfrasmain.c    main() source file
  1492. Xfrasmdat.h    global data include source file
  1493. Xfryylex.c    lexical analyzer source file
  1494. Xgetopt.h    getopt function (optional) source file
  1495. Xmakefile.dos    Turbo C MS-Dos make file
  1496. Xmakeone.bat    MS-Dos script to compile and test
  1497. SHAR_EOF
  1498. true || echo 'restore of filelist failed'
  1499. fi
  1500. # ============= fraebin.h ==============
  1501. if test -f 'fraebin.h' -a X"$1" != X"-c"; then
  1502.     echo 'x - skipping fraebin.h (File already exists)'
  1503. else
  1504. echo 'x - extracting fraebin.h (Text)'
  1505. sed 's/^X//' << 'SHAR_EOF' > 'fraebin.h' &&
  1506. X
  1507. X
  1508. X/*
  1509. XHEADER:     ;
  1510. XTITLE:         Frankenstein Cross Assemblers;
  1511. XVERSION:     2.0;
  1512. XDESCRIPTION: "    Reconfigurable Cross-assembler producing Intel (TM)
  1513. X        Hex format object records.  ";
  1514. XFILENAME:     fraebin.h;
  1515. XSEE-ALSO:     frapsub.c, fraosub.c;
  1516. XAUTHORS:     Mark Zenier;
  1517. X*/
  1518. X
  1519. X/*
  1520. X    description    switch case actions for binary operators for
  1521. X            both the parse and output phase expression
  1522. X            evaluators
  1523. X*/
  1524. X
  1525. X
  1526. X        case IFC_MUL:
  1527. X            etop *= (estkm1p--)->v;
  1528. X            break;
  1529. X
  1530. X        case IFC_DIV:
  1531. X            etop = (estkm1p--)->v/etop;
  1532. X            break;
  1533. X
  1534. X        case IFC_ADD:
  1535. X            etop += (estkm1p--)->v;
  1536. X            break;
  1537. X
  1538. X        case IFC_SUB:
  1539. X            etop = (estkm1p--)->v - etop;
  1540. X            break;
  1541. X
  1542. X        case IFC_MOD:
  1543. X            etop = (estkm1p--)->v % etop;
  1544. X            break;
  1545. X
  1546. X        case IFC_SHL:
  1547. X            etop = (estkm1p--)->v << etop;
  1548. X            break;
  1549. X
  1550. X        case IFC_SHR:
  1551. X            etop = (estkm1p--)->v >> etop;
  1552. X            break;
  1553. X
  1554. X        case IFC_AND:
  1555. X            etop &= (estkm1p--)->v;
  1556. X            break;
  1557. X
  1558. X        case IFC_OR:
  1559. X            etop |= (estkm1p--)->v;
  1560. X            break;
  1561. X
  1562. X        case IFC_XOR:
  1563. X            etop ^= (estkm1p--)->v;
  1564. X            break;
  1565. X
  1566. X        case IFC_GT:
  1567. X            etop = (estkm1p--)->v > etop ? 1 : 0;
  1568. X            break;
  1569. X
  1570. X        case IFC_GE:
  1571. X            etop = (estkm1p--)->v >= etop ? 1 : 0;
  1572. X            break;
  1573. X
  1574. X        case IFC_LT:
  1575. X            etop = (estkm1p--)->v < etop ? 1 : 0;
  1576. X            break;
  1577. X
  1578. X        case IFC_LE:
  1579. X            etop = (estkm1p--)->v <= etop ? 1 : 0;
  1580. X            break;
  1581. X
  1582. X        case IFC_NE:
  1583. X            etop = (estkm1p--)->v != etop ? 1 : 0;
  1584. X            break;
  1585. X
  1586. X        case IFC_EQ:
  1587. X            etop = (estkm1p--)->v == etop ? 1 : 0;
  1588. X            break;
  1589. X
  1590. SHAR_EOF
  1591. true || echo 'restore of fraebin.h failed'
  1592. fi
  1593. # ============= fraeuni.h ==============
  1594. if test -f 'fraeuni.h' -a X"$1" != X"-c"; then
  1595.     echo 'x - skipping fraeuni.h (File already exists)'
  1596. else
  1597. echo 'x - extracting fraeuni.h (Text)'
  1598. sed 's/^X//' << 'SHAR_EOF' > 'fraeuni.h' &&
  1599. X/*
  1600. XHEADER:     ;
  1601. XTITLE:         Frankenstein Cross Assemblers;
  1602. XVERSION:     2.0;
  1603. XDESCRIPTION: "    Reconfigurable Cross-assembler producing Intel (TM)
  1604. X        Hex format object records.  ";
  1605. XFILENAME:     fraeuni.h;
  1606. XSEE-ALSO:     frapsub.c, fraosub.c;
  1607. XAUTHORS:     Mark Zenier;
  1608. X*/
  1609. X/*
  1610. X    description    switch case actions for unary operators for
  1611. X            both the parse and output phase expression
  1612. X            evaluators
  1613. X*/
  1614. X
  1615. X        case IFC_NEG:
  1616. X            etop = -etop;
  1617. X            break;
  1618. X
  1619. X        case IFC_NOT:
  1620. X            etop = ~ etop;
  1621. X            break;
  1622. X
  1623. X        case IFC_HIGH:
  1624. X            etop = (etop >> 8) & 0xff;
  1625. X            break;
  1626. X
  1627. X        case IFC_LOW:
  1628. X            etop = etop & 0xff;
  1629. X            break;
  1630. X
  1631. SHAR_EOF
  1632. true || echo 'restore of fraeuni.h failed'
  1633. fi
  1634. # ============= fragcon.h ==============
  1635. if test -f 'fragcon.h' -a X"$1" != X"-c"; then
  1636.     echo 'x - skipping fragcon.h (File already exists)'
  1637. else
  1638. echo 'x - extracting fragcon.h (Text)'
  1639. sed 's/^X//' << 'SHAR_EOF' > 'fragcon.h' &&
  1640. X/*
  1641. XHEADER:     ;
  1642. XTITLE:         Frankenstein Cross Assemblers;
  1643. XVERSION:     2.0;
  1644. XDESCRIPTION: "    Reconfigurable Cross-assembler producing Intel (TM)
  1645. X        Hex format object records.
  1646. X
  1647. X        constants used in intermediate file code generation
  1648. X        as the expression node operation value and the polish
  1649. X        expression operation  ";
  1650. XFILENAME:     fragcon.h;
  1651. XSEE-ALSO:     frapsub.c, fraosub.c, as*.y;
  1652. XAUTHORS:     Mark Zenier;
  1653. X*/
  1654. X
  1655. X#define IG_START    '['
  1656. X#define IG_END        ']'
  1657. X#define IG_CPCON    '#'
  1658. X#define IG_CPEXPR    '='
  1659. X#define IG_ERROR    'X'
  1660. X
  1661. X#define IGP_DEFINED    'U'
  1662. X#define IGP_CONSTANT    'V'
  1663. X
  1664. X#define IFC_NEG        '_'
  1665. X#define IFC_NOT        'N'
  1666. X#define IFC_HIGH    'H'
  1667. X#define IFC_LOW        'Z'
  1668. X#define IFC_MUL        '*'
  1669. X#define IFC_DIV        '/'
  1670. X#define IFC_ADD        '+'
  1671. X#define IFC_SUB        '-'
  1672. X#define IFC_MOD        '%'
  1673. X#define IFC_SHL        '{'
  1674. X#define IFC_SHR        '}'
  1675. X#define IFC_AND        '&'
  1676. X#define IFC_OR        '|'
  1677. X#define IFC_XOR        '^'
  1678. X#define IFC_GT        '>'
  1679. X#define IFC_GE        'G'
  1680. X#define IFC_LT        '<'
  1681. X#define IFC_LE        'L'
  1682. X#define IFC_NE        '?'
  1683. X#define IFC_EQ        '='
  1684. X#define IFC_SYMB    'S'
  1685. X#define IFC_PROGCTR    'P'
  1686. X#define IFC_CURRLOC    'Q'
  1687. X#define IFC_LOAD    '.'
  1688. X#define IFC_CLR        '$'
  1689. X#define IFC_CLRALL    'X'
  1690. X#define IFC_POP        '!'
  1691. X#define IFC_DUP        '~'
  1692. X#define IFC_EMU8    ';'
  1693. X#define IFC_EMS7    'r'
  1694. X#define IFC_EM16    'x'
  1695. X#define IFC_EMBR16    'y'
  1696. X#define IFC_WIDTH    'W'
  1697. X#define IFC_SWIDTH    'R'
  1698. X#define IFC_IWIDTH    'I'
  1699. X#define IFC_TESTERR    'T'
  1700. X
  1701. X#define PCCASE_BIN    1
  1702. X#define PCCASE_UN    2
  1703. X#define PCCASE_DEF    3
  1704. X#define PCCASE_SYMB    4
  1705. X#define PCCASE_CONS    5
  1706. X#define PCCASE_PROGC    6
  1707. X
  1708. SHAR_EOF
  1709. true || echo 'restore of fragcon.h failed'
  1710. fi
  1711. true || echo 'restore of fraosub.c failed'
  1712. echo End of part 1, continue with part 2
  1713. exit 0
  1714.