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

  1. From: markz@ssc.UUCP (Mark Zenier)
  2. Newsgroups: alt.sources
  3. Subject: Frankenstein Cross Assemblers, RCA 1805 flavor, Part 1 of 1
  4. Message-ID: <623@ssc.UUCP>
  5. Date: 7 Dec 90 00:13:52 GMT
  6.  
  7. ---- Cut Here and feed the following to sh ----
  8. #!/bin/sh
  9. # This is Frankasm/As1805, a shell archive (shar 3.43)
  10. # made 12/04/1990 08:44 UTC by markz@ssc.uucp
  11. # Source directory /usr/mark/frank.shar
  12. #
  13. # existing files will NOT be overwritten unless -c is specified
  14. # This format requires very little intelligence at unshar time.
  15. # "if test", "echo", "true", and "sed" may be needed.
  16. #
  17. # This shar contains:
  18. # length  mode       name
  19. # ------ ---------- ------------------------------------------
  20. #   1478 -r--r----- as1805.1
  21. #   4222 -r--r----- as1805.doc
  22. #   3893 -r--r----- as1805.tst
  23. #   8896 -r--r----- as1805.tut
  24. #  31719 -r--r--r-- as1805.y
  25. #
  26. # ============= as1805.1 ==============
  27. if test -f 'as1805.1' -a X"$1" != X"-c"; then
  28.     echo 'x - skipping as1805.1 (File already exists)'
  29. else
  30. echo 'x - extracting as1805.1 (Text)'
  31. sed 's/^X//' << 'SHAR_EOF' > 'as1805.1' &&
  32. X.TH AS1805 1L
  33. X.SH NAME
  34. Xas1805, as1802 \- cross assemblers for microcomputers
  35. X.SH SYNOPSIS
  36. X.nf
  37. Xas1805 [-p cpu] [-l listfile] [-o hexfile] [-d] [-s symbolfile] input
  38. Xas1802 [-p cpu] [-l listfile] [-o hexfile] [-d] [-s symbolfile] input
  39. X.fi
  40. X.SH DESCRIPTION
  41. XThe as1805, as1802 command(s) assembles the input file into a
  42. Xtext output file representing the program memory for a microcomputer.
  43. X
  44. XOptions
  45. X.IP "-p cpu"
  46. XOverride the instruction set selection.
  47. X.RS 10
  48. XValid Values for Cpu
  49. X.RS 5
  50. X1802, 1804, 1805, 1806
  51. X.RE
  52. X.RE
  53. X.IP "-l listfile"
  54. XOutput a file formated with the memory address, data, and source input lines.
  55. X.IP "-o hexfile"
  56. XOutput the memory data image in a form accepted by most prom programmers.
  57. X.IP "-h hexfile"
  58. XSame as \-o.
  59. X.IP \-d
  60. XSave the intermediate data file (see FILE) and abort the execution at the
  61. Xend of processing.
  62. X.IP "-s symbolfile"
  63. XPrint the symbol table values and names, one per line in the specified file.
  64. X.SH FILES
  65. X/usr/tmp/frtXXXXXX
  66. X.SH SEE ALSO
  67. XFrankenstein Cross Assemblers Users Manual (file base.doc)
  68. XAppendix for as1805 Frankenstein Assembler (file as1805.doc)
  69. X.SH NOTES
  70. XThere is only one input file.
  71. X
  72. XThe program can select which subset of instructions is accepted.
  73. XThe program first uses the name with which it is invoked.
  74. XThis is scanned for a substring which indicates which set to use.
  75. XThe -p options overrides this selction by performing the same substring
  76. Xsearch.
  77. X
  78. XThere should only be one executable file with all of its names linked to it.
  79. SHAR_EOF
  80. true || echo 'restore of as1805.1 failed'
  81. fi
  82. # ============= as1805.doc ==============
  83. if test -f 'as1805.doc' -a X"$1" != X"-c"; then
  84.     echo 'x - skipping as1805.doc (File already exists)'
  85. else
  86. echo 'x - extracting as1805.doc (Text)'
  87. sed 's/^X//' << 'SHAR_EOF' > 'as1805.doc' &&
  88. X.HM A 1 1 1 1 1 1
  89. X.H 1 "Appendix for as1805 Frankenstein Assembler"
  90. X.H 2 "Pseudo Operations"
  91. X.H 3 "Standard Pseudo Operation Mnemonics"
  92. X.VL 40 5 1
  93. X.LI "End"
  94. XEND
  95. X.LI "File Inclusion"
  96. XINCL
  97. XINCLUDE
  98. X.LI "If"
  99. XIF
  100. X.LI "Else"
  101. XELSE
  102. X.LI "End If"
  103. XENDI
  104. X.LI "Equate"
  105. XEQU
  106. X.LI "Set"
  107. XSET
  108. X.LI "Org"
  109. XORG
  110. X.LI "Reserve Memory"
  111. XRESERVE
  112. XRMB
  113. X.LI "Define Byte Data"
  114. XBYTE
  115. XDB
  116. XFCB
  117. X.LI "Define Word Data"
  118. XDW
  119. XFDB
  120. XWORD
  121. X.LI "Define String Data"
  122. XFCC
  123. XSTRING
  124. X.LI "Define Character Set Translation"
  125. XCHARSET
  126. X.LI "Define Character Value"
  127. XCHARDEF
  128. XCHD
  129. X.LI "Use Character Translation"
  130. XCHARUSE
  131. X.LE
  132. X.H 2 "Instructions"
  133. X.H 3 "Instruction List"
  134. X.TS H
  135. X;
  136. Xl l l.
  137. XOpcode    Syntax    Selection Criteria
  138. X.sp
  139. X.TH
  140. X.sp
  141. XADC    
  142. X.sp
  143. XADCI     '#' expr
  144. X.sp
  145. XADD    
  146. X.sp
  147. XADI     '#' expr
  148. X.sp
  149. XAND    
  150. X.sp
  151. XANI     '#' expr
  152. X.sp
  153. XB1     expr
  154. X.sp
  155. XB2     expr
  156. X.sp
  157. XB3     expr
  158. X.sp
  159. XB4     expr
  160. X.sp
  161. XBCI     expr    TS1805
  162. X.sp
  163. XBDF     expr
  164. X.sp
  165. XBGE     expr
  166. X.sp
  167. XBL     expr
  168. X.sp
  169. XBM     expr
  170. X.sp
  171. XBN1     expr
  172. X.sp
  173. XBN2     expr
  174. X.sp
  175. XBN3     expr
  176. X.sp
  177. XBN4     expr
  178. X.sp
  179. XBNF     expr
  180. X.sp
  181. XBNQ     expr
  182. X.sp
  183. XBNZ     expr
  184. X.sp
  185. XBPZ     expr
  186. X.sp
  187. XBQ     expr
  188. X.sp
  189. XBR     expr
  190. X.sp
  191. XBXI     expr    TS1805
  192. X.sp
  193. XBZ     expr
  194. X.sp
  195. XCID        TS1805
  196. X.sp
  197. XCIE        TS1805
  198. X.sp
  199. XDACI     '#' expr    TS1805
  200. X.sp
  201. XDADC        TS1805
  202. X.sp
  203. XDADD        TS1805
  204. X.sp
  205. XDADI     '#' expr    TS1805
  206. X.sp
  207. XDBNZ     expr ',' expr    TS1805
  208. X.sp
  209. XDEC     expr
  210. X.sp
  211. XDIS    
  212. X.sp
  213. XDSAV        TS1805
  214. X.sp
  215. XDSBI     '#' expr    TS1805
  216. X.sp
  217. XDSM        TS1805
  218. X.sp
  219. XDSMB        TS1805
  220. X.sp
  221. XDSMI     '#' expr    TS1805
  222. X.sp
  223. XDTC        TS1805
  224. X.sp
  225. XETQ        TS1805
  226. X.sp
  227. XGEC        TS1805
  228. X.sp
  229. XGHI     expr
  230. X.sp
  231. XGLO     expr
  232. X.sp
  233. XIDL    
  234. X.sp
  235. XINC     expr
  236. X.sp
  237. XINP     expr
  238. X.sp
  239. XIRX    
  240. X.sp
  241. XLBDF     expr
  242. X.sp
  243. XLBNF     expr
  244. X.sp
  245. XLBNQ     expr
  246. X.sp
  247. XLBNZ     expr
  248. X.sp
  249. XLBQ     expr
  250. X.sp
  251. XLBR     expr
  252. X.sp
  253. XLBZ     expr
  254. X.sp
  255. XLDA     expr
  256. X.sp
  257. XLDC        TS1805
  258. X.sp
  259. XLDI     '#' expr
  260. X.sp
  261. XLDN     expr
  262. X.sp
  263. XLDX    
  264. X.sp
  265. XLDXA    
  266. X.sp
  267. XLSDF    
  268. X.sp
  269. XLSIE    
  270. X.sp
  271. XLSKP    
  272. X.sp
  273. XLSNF    
  274. X.sp
  275. XLSNQ    
  276. X.sp
  277. XLSNZ    
  278. X.sp
  279. XLSQ    
  280. X.sp
  281. XLSZ    
  282. X.sp
  283. XMARK    
  284. X.sp
  285. XNBR    expr
  286. X.sp
  287. XNLBR    expr
  288. X.sp
  289. XNOP    
  290. X.sp
  291. XOR    
  292. X.sp
  293. XORI     '#' expr
  294. X.sp
  295. XOUT     expr
  296. X.sp
  297. XPHI     expr
  298. X.sp
  299. XPLO     expr
  300. X.sp
  301. XREQ    
  302. X.sp
  303. XRET    
  304. X.sp
  305. XRLDI     expr ',' '#' expr    TS1805
  306. X.sp
  307. XRLXA     expr    TS1805
  308. X.sp
  309. XRNX     expr    TS1805
  310. X.sp
  311. XRSHL    
  312. X.sp
  313. XRSHR    
  314. X.sp
  315. XRSXD     expr    TS1805
  316. X.sp
  317. XSAV    
  318. X.sp
  319. XSCAL     expr ',' expr    TS1805
  320. X.sp
  321. XSCM1        TS1805
  322. X.sp
  323. XSCM2        TS1805
  324. X.sp
  325. XSD    
  326. X.sp
  327. XSDB    
  328. X.sp
  329. XSDBI     '#' expr
  330. X.sp
  331. XSDI     '#' expr
  332. X.sp
  333. XSEP     expr
  334. X.sp
  335. XSEQ    
  336. X.sp
  337. XSEX     expr
  338. X.sp
  339. XSHL    
  340. X.sp
  341. XSHLC    
  342. X.sp
  343. XSHR    
  344. X.sp
  345. XSHRC    
  346. X.sp
  347. XSKP    
  348. X.sp
  349. XSM    
  350. X.sp
  351. XSMB    
  352. X.sp
  353. XSMBI     '#' expr
  354. X.sp
  355. XSMI     '#' expr
  356. X.sp
  357. XSPM1        TS1805
  358. X.sp
  359. XSPM2        TS1805
  360. X.sp
  361. XSRET     expr    TS1805
  362. X.sp
  363. XSTM        TS1805
  364. X.sp
  365. XSTPC        TS1805
  366. X.sp
  367. XSTR     expr
  368. X.sp
  369. XSTXD    
  370. X.sp
  371. XXID        TS1805
  372. X.sp
  373. XXIE        TS1805
  374. X.sp
  375. XXOR    
  376. X.sp
  377. XXRI     '#' expr
  378. X.TE
  379. X.H 3 "Selection Criteria Keywords"
  380. X.VL 25 5 
  381. X.LI TS1805
  382. XInstruction is only valid for the 1804A/1805A/1806A instruction sets.
  383. X.LE
  384. X.H 3 "Apostrophes"
  385. XThe apostrophes in the syntax field are a notation used for the
  386. Xparser generator and are not put in the assembler source statement.
  387. X.H 2 "Notes"
  388. X.H 3 "Instruction Set Selection"
  389. XThe default is the 1805 instruction set. 
  390. XTo restrict the instruction set, use the -p 1802 optional arguement on
  391. Xthe command line, or rename or link the program file with a name containing
  392. Xthe string 1802 (or just "02").
  393. X.H 3 "Register and Port expressions"
  394. XThe register and port numbers are specified as expressions.
  395. XFor registers, the value must be between 0 and 15 (1 and 15 for the LDN 
  396. Xinstruction).
  397. XFor input/output ports, the value must be between 1 and 7.
  398. XThe value must be computable when processed in the first pass.
  399. XThe SET and EQU statements can be used to setup symbols for registers and
  400. Xports.
  401. XIt is recomended that a standard include file be setup to assign 
  402. Xa set of symbols (like R0 to R15) for registers.
  403. X.H 3 "Branch Target Expression Validity"
  404. XThe "expression fails validity test" error message can occur if the
  405. Xdestination of a short branch is not on the same page as the the last
  406. Xbyte of the instruction.
  407. XThe "expression exceeds available field width" can also occur for this
  408. Xcase.
  409. XUsually the validity message occurs when the destination is at a lower
  410. Xpage, and the width message occurs when the destination is at a higher page. 
  411. X.H 3 "Immediate Data"
  412. XThe immediate data expressions for the RLDI (as well as the arithmetic and
  413. Xlogic operations) are required to be on same line as the opcode.
  414. X.H 3 "Reserved Symbols"
  415. X.H 4 "Standard Reserved Symbols"
  416. XAND
  417. XDEFINED
  418. XEQ
  419. XGE
  420. XGT
  421. XHIGH
  422. XLE
  423. XLOW
  424. XLT
  425. XMOD
  426. XNE
  427. XNOT
  428. XOR
  429. XSHL
  430. XSHR
  431. XXOR
  432. Xand
  433. Xdefined
  434. Xeq
  435. Xge
  436. Xgt
  437. Xhigh
  438. Xle
  439. Xlow
  440. Xlt
  441. Xmod
  442. Xne
  443. Xnot
  444. Xor
  445. Xshl
  446. Xshr
  447. Xxor
  448. X.TC 1 1 7
  449. SHAR_EOF
  450. true || echo 'restore of as1805.doc failed'
  451. fi
  452. # ============= as1805.tst ==============
  453. if test -f 'as1805.tst' -a X"$1" != X"-c"; then
  454.     echo 'x - skipping as1805.tst (File already exists)'
  455. else
  456. echo 'x - extracting as1805.tst (Text)'
  457. sed 's/^X//' << 'SHAR_EOF' > 'as1805.tst' &&
  458. X    org 2300h
  459. Xexpr    equ *
  460. Ximmed    equ $55
  461. X     adc
  462. X     adci # immed
  463. X     add
  464. X     adi # immed
  465. X     and
  466. X     ani # immed
  467. X     b1 expr
  468. X     b2 expr
  469. X     b3 expr
  470. X     b4 expr
  471. X     bci expr
  472. X     bdf expr
  473. X     bge expr
  474. X     bl expr
  475. X     bm expr
  476. X     bn1 expr
  477. X     bn2 expr
  478. X     bn3 expr
  479. X     bn4 expr
  480. X     bnf expr
  481. X     bnq expr
  482. X     bnz expr
  483. X     bpz expr
  484. X     bq expr
  485. X     br expr
  486. X     bxi expr
  487. X     bz expr
  488. X     cid
  489. X     cie
  490. X     daci # immed
  491. X     dadc
  492. X     dadd
  493. X     dadi # immed
  494. X     dbnz 0 , expr
  495. X     dbnz 1 , expr
  496. X     dbnz 10 , expr
  497. X     dbnz 11 , expr
  498. X     dbnz 12 , expr
  499. X     dbnz 13 , expr
  500. X     dbnz 14 , expr
  501. X     dbnz 15 , expr
  502. X     dbnz 2 , expr
  503. X     dbnz 3 , expr
  504. X     dbnz 4 , expr
  505. X     dbnz 5 , expr
  506. X     dbnz 6 , expr
  507. X     dbnz 7 , expr
  508. X     dbnz 8 , expr
  509. X     dbnz 9 , expr
  510. X     dec 0
  511. X     dec 1
  512. X     dec 10
  513. X     dec 11
  514. X     dec 12
  515. X     dec 13
  516. X     dec 14
  517. X     dec 15
  518. X     dec 2
  519. X     dec 3
  520. X     dec 4
  521. X     dec 5
  522. X     dec 6
  523. X     dec 7
  524. X     dec 8
  525. X     dec 9
  526. X     dis
  527. X     dsav
  528. X     dsbi # immed
  529. X     dsm
  530. X     dsmb
  531. X     dsmi # immed
  532. X     dtc
  533. X     etq
  534. X     gec
  535. X     ghi 0
  536. X     ghi 1
  537. X     ghi 10
  538. X     ghi 11
  539. X     ghi 12
  540. X     ghi 13
  541. X     ghi 14
  542. X     ghi 15
  543. X     ghi 2
  544. X     ghi 3
  545. X     ghi 4
  546. X     ghi 5
  547. X     ghi 6
  548. X     ghi 7
  549. X     ghi 8
  550. X     ghi 9
  551. X     glo 0
  552. X     glo 1
  553. X     glo 10
  554. X     glo 11
  555. X     glo 12
  556. X     glo 13
  557. X     glo 14
  558. X     glo 15
  559. X     glo 2
  560. X     glo 3
  561. X     glo 4
  562. X     glo 5
  563. X     glo 6
  564. X     glo 7
  565. X     glo 8
  566. X     glo 9
  567. X     idl
  568. X     inc 0
  569. X     inc 1
  570. X     inc 10
  571. X     inc 11
  572. X     inc 12
  573. X     inc 13
  574. X     inc 14
  575. X     inc 15
  576. X     inc 2
  577. X     inc 3
  578. X     inc 4
  579. X     inc 5
  580. X     inc 6
  581. X     inc 7
  582. X     inc 8
  583. X     inc 9
  584. X     inp 1
  585. X     inp 2
  586. X     inp 3
  587. X     inp 4
  588. X     inp 5
  589. X     inp 6
  590. X     inp 7
  591. X     irx
  592. X     lbdf expr
  593. X     lbnf expr
  594. X     lbnq expr
  595. X     lbnz expr
  596. X     lbq expr
  597. X     lbr expr
  598. X     lbz expr
  599. X     lda 0
  600. X     lda 1
  601. X     lda 10
  602. X     lda 11
  603. X     lda 12
  604. X     lda 13
  605. X     lda 14
  606. X     lda 15
  607. X     lda 2
  608. X     lda 3
  609. X     lda 4
  610. X     lda 5
  611. X     lda 6
  612. X     lda 7
  613. X     lda 8
  614. X     lda 9
  615. X     ldc
  616. X     ldi # immed
  617. X     ldn 1
  618. X     ldn 10
  619. X     ldn 11
  620. X     ldn 12
  621. X     ldn 13
  622. X     ldn 14
  623. X     ldn 15
  624. X     ldn 2
  625. X     ldn 3
  626. X     ldn 4
  627. X     ldn 5
  628. X     ldn 6
  629. X     ldn 7
  630. X     ldn 8
  631. X     ldn 9
  632. X     ldx
  633. X     ldxa
  634. X     lsdf
  635. X     lsie
  636. X     lskp
  637. X     lsnf
  638. X     lsnq
  639. X     lsnz
  640. X     lsq
  641. X     lsz
  642. X     mark
  643. X     nbr *+3
  644. X     nlbr expr
  645. X     nop
  646. X     or
  647. X     ori # immed
  648. X     out 1
  649. X     out 2
  650. X     out 3
  651. X     out 4
  652. X     out 5
  653. X     out 6
  654. X     out 7
  655. X     phi 0
  656. X     phi 1
  657. X     phi 10
  658. X     phi 11
  659. X     phi 12
  660. X     phi 13
  661. X     phi 14
  662. X     phi 15
  663. X     phi 2
  664. X     phi 3
  665. X     phi 4
  666. X     phi 5
  667. X     phi 6
  668. X     phi 7
  669. X     phi 8
  670. X     phi 9
  671. X     plo 0
  672. X     plo 1
  673. X     plo 10
  674. X     plo 11
  675. X     plo 12
  676. X     plo 13
  677. X     plo 14
  678. X     plo 15
  679. X     plo 2
  680. X     plo 3
  681. X     plo 4
  682. X     plo 5
  683. X     plo 6
  684. X     plo 7
  685. X     plo 8
  686. X     plo 9
  687. X     req
  688. X     ret
  689. X     rldi 0 , # expr
  690. X     rldi 1 , # expr
  691. X     rldi 10 , # expr
  692. X     rldi 11 , # expr
  693. X     rldi 12 , # expr
  694. X     rldi 13 , # expr
  695. X     rldi 14 , # expr
  696. X     rldi 15 , # expr
  697. X     rldi 2 , # expr
  698. X     rldi 3 , # expr
  699. X     rldi 4 , # expr
  700. X     rldi 5 , # expr
  701. X     rldi 6 , # expr
  702. X     rldi 7 , # expr
  703. X     rldi 8 , # expr
  704. X     rldi 9 , # expr
  705. X     rlxa 0
  706. X     rlxa 1
  707. X     rlxa 10
  708. X     rlxa 11
  709. X     rlxa 12
  710. X     rlxa 13
  711. X     rlxa 14
  712. X     rlxa 15
  713. X     rlxa 2
  714. X     rlxa 3
  715. X     rlxa 4
  716. X     rlxa 5
  717. X     rlxa 6
  718. X     rlxa 7
  719. X     rlxa 8
  720. X     rlxa 9
  721. X     rnx 0
  722. X     rnx 1
  723. X     rnx 10
  724. X     rnx 11
  725. X     rnx 12
  726. X     rnx 13
  727. X     rnx 14
  728. X     rnx 15
  729. X     rnx 2
  730. X     rnx 3
  731. X     rnx 4
  732. X     rnx 5
  733. X     rnx 6
  734. X     rnx 7
  735. X     rnx 8
  736. X     rnx 9
  737. X     rshl
  738. X     rshr
  739. X     rsxd 0
  740. X     rsxd 1
  741. X     rsxd 10
  742. X     rsxd 11
  743. X     rsxd 12
  744. X     rsxd 13
  745. X     rsxd 14
  746. X     rsxd 15
  747. X     rsxd 2
  748. X     rsxd 3
  749. X     rsxd 4
  750. X     rsxd 5
  751. X     rsxd 6
  752. X     rsxd 7
  753. X     rsxd 8
  754. X     rsxd 9
  755. X     sav
  756. X     scal 0 , expr
  757. X     scal 1 , expr
  758. X     scal 10 , expr
  759. X     scal 11 , expr
  760. X     scal 12 , expr
  761. X     scal 13 , expr
  762. X     scal 14 , expr
  763. X     scal 15 , expr
  764. X     scal 2 , expr
  765. X     scal 3 , expr
  766. X     scal 4 , expr
  767. X     scal 5 , expr
  768. X     scal 6 , expr
  769. X     scal 7 , expr
  770. X     scal 8 , expr
  771. X     scal 9 , expr
  772. X     scm1
  773. X     scm2
  774. X     sd
  775. X     sdb
  776. X     sdbi # immed
  777. X     sdi # immed
  778. X     sep 0
  779. X     sep 1
  780. X     sep 10
  781. X     sep 11
  782. X     sep 12
  783. X     sep 13
  784. X     sep 14
  785. X     sep 15
  786. X     sep 2
  787. X     sep 3
  788. X     sep 4
  789. X     sep 5
  790. X     sep 6
  791. X     sep 7
  792. X     sep 8
  793. X     sep 9
  794. X     seq
  795. X     sex 0
  796. X     sex 1
  797. X     sex 10
  798. X     sex 11
  799. X     sex 12
  800. X     sex 13
  801. X     sex 14
  802. X     sex 15
  803. X     sex 2
  804. X     sex 3
  805. X     sex 4
  806. X     sex 5
  807. X     sex 6
  808. X     sex 7
  809. X     sex 8
  810. X     sex 9
  811. X     shl
  812. X     shlc
  813. X     shr
  814. X     shrc
  815. X     skp
  816. X     sm
  817. X     smb
  818. X     smbi # immed
  819. X     smi # immed
  820. X     spm1
  821. X     spm2
  822. X     sret 0
  823. X     sret 1
  824. X     sret 10
  825. X     sret 11
  826. X     sret 12
  827. X     sret 13
  828. X     sret 14
  829. X     sret 15
  830. X     sret 2
  831. X     sret 3
  832. X     sret 4
  833. X     sret 5
  834. X     sret 6
  835. X     sret 7
  836. X     sret 8
  837. X     sret 9
  838. X     stm
  839. X     stpc
  840. X     str 0
  841. X     str 1
  842. X     str 10
  843. X     str 11
  844. X     str 12
  845. X     str 13
  846. X     str 14
  847. X     str 15
  848. X     str 2
  849. X     str 3
  850. X     str 4
  851. X     str 5
  852. X     str 6
  853. X     str 7
  854. X     str 8
  855. X     str 9
  856. X     stxd
  857. X     xid
  858. X     xie
  859. X     xor
  860. X     xri # immed
  861. SHAR_EOF
  862. true || echo 'restore of as1805.tst failed'
  863. fi
  864. # ============= as1805.tut ==============
  865. if test -f 'as1805.tut' -a X"$1" != X"-c"; then
  866.     echo 'x - skipping as1805.tut (File already exists)'
  867. else
  868. echo 'x - extracting as1805.tut (Text)'
  869. sed 's/^X//' << 'SHAR_EOF' > 'as1805.tut' &&
  870. X00002300 expr             00000055 immed            
  871. X  0x2300                     org 2300h
  872. X 0x2300                 expr    equ *
  873. X 0x55                   immed    equ $55
  874. X2300 74              adc
  875. X2301 7c 55              adci # immed
  876. X2303 f4              add
  877. X2304 fc 55              adi # immed
  878. X2306 f2              and
  879. X2307 fa 55              ani # immed
  880. X2309 34 00              b1 expr
  881. X230b 35 00              b2 expr
  882. X230d 36 00              b3 expr
  883. X230f 37 00              b4 expr
  884. X2311 68 3e 00              bci expr
  885. X2314 33 00              bdf expr
  886. X2316 33 00              bge expr
  887. X2318 3b 00              bl expr
  888. X231a 3b 00              bm expr
  889. X231c 3c 00              bn1 expr
  890. X231e 3d 00              bn2 expr
  891. X2320 3e 00              bn3 expr
  892. X2322 3f 00              bn4 expr
  893. X2324 3b 00              bnf expr
  894. X2326 39 00              bnq expr
  895. X2328 3a 00              bnz expr
  896. X232a 33 00              bpz expr
  897. X232c 31 00              bq expr
  898. X232e 30 00              br expr
  899. X2330 68 3f 00              bxi expr
  900. X2333 32 00              bz expr
  901. X2335 68 0d              cid
  902. X2337 68 0c              cie
  903. X2339 68 7c 55              daci # immed
  904. X233c 68 74              dadc
  905. X233e 68 f4              dadd
  906. X2340 68 fc 55              dadi # immed
  907. X2343 68 20 23 00          dbnz 0 , expr
  908. X2347 68 21 23 00          dbnz 1 , expr
  909. X234b 68 2a 23 00          dbnz 10 , expr
  910. X234f 68 2b 23 00          dbnz 11 , expr
  911. X2353 68 2c 23 00          dbnz 12 , expr
  912. X2357 68 2d 23 00          dbnz 13 , expr
  913. X235b 68 2e 23 00          dbnz 14 , expr
  914. X235f 68 2f 23 00          dbnz 15 , expr
  915. X2363 68 22 23 00          dbnz 2 , expr
  916. X2367 68 23 23 00          dbnz 3 , expr
  917. X236b 68 24 23 00          dbnz 4 , expr
  918. X236f 68 25 23 00          dbnz 5 , expr
  919. X2373 68 26 23 00          dbnz 6 , expr
  920. X2377 68 27 23 00          dbnz 7 , expr
  921. X237b 68 28 23 00          dbnz 8 , expr
  922. X237f 68 29 23 00          dbnz 9 , expr
  923. X2383 20              dec 0
  924. X2384 21              dec 1
  925. X2385 2a              dec 10
  926. X2386 2b              dec 11
  927. X2387 2c              dec 12
  928. X2388 2d              dec 13
  929. X2389 2e              dec 14
  930. X238a 2f              dec 15
  931. X238b 22              dec 2
  932. X238c 23              dec 3
  933. X238d 24              dec 4
  934. X238e 25              dec 5
  935. X238f 26              dec 6
  936. X2390 27              dec 7
  937. X2391 28              dec 8
  938. X2392 29              dec 9
  939. X2393 71              dis
  940. X2394 68 76              dsav
  941. X2396 68 7f 55              dsbi # immed
  942. X2399 68 f7              dsm
  943. X239b 68 77              dsmb
  944. X239d 68 ff 55              dsmi # immed
  945. X23a0 68 01              dtc
  946. X23a2 68 09              etq
  947. X23a4 68 08              gec
  948. X23a6 90              ghi 0
  949. X23a7 91              ghi 1
  950. X23a8 9a              ghi 10
  951. X23a9 9b              ghi 11
  952. X23aa 9c              ghi 12
  953. X23ab 9d              ghi 13
  954. X23ac 9e              ghi 14
  955. X23ad 9f              ghi 15
  956. X23ae 92              ghi 2
  957. X23af 93              ghi 3
  958. X23b0 94              ghi 4
  959. X23b1 95              ghi 5
  960. X23b2 96              ghi 6
  961. X23b3 97              ghi 7
  962. X23b4 98              ghi 8
  963. X23b5 99              ghi 9
  964. X23b6 80              glo 0
  965. X23b7 81              glo 1
  966. X23b8 8a              glo 10
  967. X23b9 8b              glo 11
  968. X23ba 8c              glo 12
  969. X23bb 8d              glo 13
  970. X23bc 8e              glo 14
  971. X23bd 8f              glo 15
  972. X23be 82              glo 2
  973. X23bf 83              glo 3
  974. X23c0 84              glo 4
  975. X23c1 85              glo 5
  976. X23c2 86              glo 6
  977. X23c3 87              glo 7
  978. X23c4 88              glo 8
  979. X23c5 89              glo 9
  980. X23c6 00              idl
  981. X23c7 10              inc 0
  982. X23c8 11              inc 1
  983. X23c9 1a              inc 10
  984. X23ca 1b              inc 11
  985. X23cb 1c              inc 12
  986. X23cc 1d              inc 13
  987. X23cd 1e              inc 14
  988. X23ce 1f              inc 15
  989. X23cf 12              inc 2
  990. X23d0 13              inc 3
  991. X23d1 14              inc 4
  992. X23d2 15              inc 5
  993. X23d3 16              inc 6
  994. X23d4 17              inc 7
  995. X23d5 18              inc 8
  996. X23d6 19              inc 9
  997. X23d7 69              inp 1
  998. X23d8 6a              inp 2
  999. X23d9 6b              inp 3
  1000. X23da 6c              inp 4
  1001. X23db 6d              inp 5
  1002. X23dc 6e              inp 6
  1003. X23dd 6f              inp 7
  1004. X23de 60              irx
  1005. X23df c3 23 00              lbdf expr
  1006. X23e2 cb 23 00              lbnf expr
  1007. X23e5 c9 23 00              lbnq expr
  1008. X23e8 ca 23 00              lbnz expr
  1009. X23eb c1 23 00              lbq expr
  1010. X23ee c0 23 00              lbr expr
  1011. X23f1 c2 23 00              lbz expr
  1012. X23f4 40              lda 0
  1013. X23f5 41              lda 1
  1014. X23f6 4a              lda 10
  1015. X23f7 4b              lda 11
  1016. X23f8 4c              lda 12
  1017. X23f9 4d              lda 13
  1018. X23fa 4e              lda 14
  1019. X23fb 4f              lda 15
  1020. X23fc 42              lda 2
  1021. X23fd 43              lda 3
  1022. X23fe 44              lda 4
  1023. X23ff 45              lda 5
  1024. X2400 46              lda 6
  1025. X2401 47              lda 7
  1026. X2402 48              lda 8
  1027. X2403 49              lda 9
  1028. X2404 68 06              ldc
  1029. X2406 f8 55              ldi # immed
  1030. X2408 01              ldn 1
  1031. X2409 0a              ldn 10
  1032. X240a 0b              ldn 11
  1033. X240b 0c              ldn 12
  1034. X240c 0d              ldn 13
  1035. X240d 0e              ldn 14
  1036. X240e 0f              ldn 15
  1037. X240f 02              ldn 2
  1038. X2410 03              ldn 3
  1039. X2411 04              ldn 4
  1040. X2412 05              ldn 5
  1041. X2413 06              ldn 6
  1042. X2414 07              ldn 7
  1043. X2415 08              ldn 8
  1044. X2416 09              ldn 9
  1045. X2417 f0              ldx
  1046. X2418 72              ldxa
  1047. X2419 cf              lsdf
  1048. X241a cc              lsie
  1049. X241b c8              lskp
  1050. X241c c7              lsnf
  1051. X241d c5              lsnq
  1052. X241e c6              lsnz
  1053. X241f cd              lsq
  1054. X2420 ce              lsz
  1055. X2421 79              mark
  1056. X2422 38 25              nbr *+3
  1057. X2424 c8 23 00              nlbr expr
  1058. X2427 c4              nop
  1059. X2428 f1              or
  1060. X2429 f9 55              ori # immed
  1061. X242b 61              out 1
  1062. X242c 62              out 2
  1063. X242d 63              out 3
  1064. X242e 64              out 4
  1065. X242f 65              out 5
  1066. X2430 66              out 6
  1067. X2431 67              out 7
  1068. X2432 b0              phi 0
  1069. X2433 b1              phi 1
  1070. X2434 ba              phi 10
  1071. X2435 bb              phi 11
  1072. X2436 bc              phi 12
  1073. X2437 bd              phi 13
  1074. X2438 be              phi 14
  1075. X2439 bf              phi 15
  1076. X243a b2              phi 2
  1077. X243b b3              phi 3
  1078. X243c b4              phi 4
  1079. X243d b5              phi 5
  1080. X243e b6              phi 6
  1081. X243f b7              phi 7
  1082. X2440 b8              phi 8
  1083. X2441 b9              phi 9
  1084. X2442 a0              plo 0
  1085. X2443 a1              plo 1
  1086. X2444 aa              plo 10
  1087. X2445 ab              plo 11
  1088. X2446 ac              plo 12
  1089. X2447 ad              plo 13
  1090. X2448 ae              plo 14
  1091. X2449 af              plo 15
  1092. X244a a2              plo 2
  1093. X244b a3              plo 3
  1094. X244c a4              plo 4
  1095. X244d a5              plo 5
  1096. X244e a6              plo 6
  1097. X244f a7              plo 7
  1098. X2450 a8              plo 8
  1099. X2451 a9              plo 9
  1100. X2452 7a              req
  1101. X2453 70              ret
  1102. X2454 68 c0 23 00          rldi 0 , # expr
  1103. X2458 68 c1 23 00          rldi 1 , # expr
  1104. X245c 68 ca 23 00          rldi 10 , # expr
  1105. X2460 68 cb 23 00          rldi 11 , # expr
  1106. X2464 68 cc 23 00          rldi 12 , # expr
  1107. X2468 68 cd 23 00          rldi 13 , # expr
  1108. X246c 68 ce 23 00          rldi 14 , # expr
  1109. X2470 68 cf 23 00          rldi 15 , # expr
  1110. X2474 68 c2 23 00          rldi 2 , # expr
  1111. X2478 68 c3 23 00          rldi 3 , # expr
  1112. X247c 68 c4 23 00          rldi 4 , # expr
  1113. X2480 68 c5 23 00          rldi 5 , # expr
  1114. X2484 68 c6 23 00          rldi 6 , # expr
  1115. X2488 68 c7 23 00          rldi 7 , # expr
  1116. X248c 68 c8 23 00          rldi 8 , # expr
  1117. X2490 68 c9 23 00          rldi 9 , # expr
  1118. X2494 68 60              rlxa 0
  1119. X2496 68 61              rlxa 1
  1120. X2498 68 6a              rlxa 10
  1121. X249a 68 6b              rlxa 11
  1122. X249c 68 6c              rlxa 12
  1123. X249e 68 6d              rlxa 13
  1124. X24a0 68 6e              rlxa 14
  1125. X24a2 68 6f              rlxa 15
  1126. X24a4 68 62              rlxa 2
  1127. X24a6 68 63              rlxa 3
  1128. X24a8 68 64              rlxa 4
  1129. X24aa 68 65              rlxa 5
  1130. X24ac 68 66              rlxa 6
  1131. X24ae 68 67              rlxa 7
  1132. X24b0 68 68              rlxa 8
  1133. X24b2 68 69              rlxa 9
  1134. X24b4 68 b0              rnx 0
  1135. X24b6 68 b1              rnx 1
  1136. X24b8 68 ba              rnx 10
  1137. X24ba 68 bb              rnx 11
  1138. X24bc 68 bc              rnx 12
  1139. X24be 68 bd              rnx 13
  1140. X24c0 68 be              rnx 14
  1141. X24c2 68 bf              rnx 15
  1142. X24c4 68 b2              rnx 2
  1143. X24c6 68 b3              rnx 3
  1144. X24c8 68 b4              rnx 4
  1145. X24ca 68 b5              rnx 5
  1146. X24cc 68 b6              rnx 6
  1147. X24ce 68 b7              rnx 7
  1148. X24d0 68 b8              rnx 8
  1149. X24d2 68 b9              rnx 9
  1150. X24d4 7e              rshl
  1151. X24d5 76              rshr
  1152. X24d6 68 a0              rsxd 0
  1153. X24d8 68 a1              rsxd 1
  1154. X24da 68 aa              rsxd 10
  1155. X24dc 68 ab              rsxd 11
  1156. X24de 68 ac              rsxd 12
  1157. X24e0 68 ad              rsxd 13
  1158. X24e2 68 ae              rsxd 14
  1159. X24e4 68 af              rsxd 15
  1160. X24e6 68 a2              rsxd 2
  1161. X24e8 68 a3              rsxd 3
  1162. X24ea 68 a4              rsxd 4
  1163. X24ec 68 a5              rsxd 5
  1164. X24ee 68 a6              rsxd 6
  1165. X24f0 68 a7              rsxd 7
  1166. X24f2 68 a8              rsxd 8
  1167. X24f4 68 a9              rsxd 9
  1168. X24f6 78              sav
  1169. X24f7 68 80 23 00          scal 0 , expr
  1170. X24fb 68 81 23 00          scal 1 , expr
  1171. X24ff 68 8a 23 00          scal 10 , expr
  1172. X2503 68 8b 23 00          scal 11 , expr
  1173. X2507 68 8c 23 00          scal 12 , expr
  1174. X250b 68 8d 23 00          scal 13 , expr
  1175. X250f 68 8e 23 00          scal 14 , expr
  1176. X2513 68 8f 23 00          scal 15 , expr
  1177. X2517 68 82 23 00          scal 2 , expr
  1178. X251b 68 83 23 00          scal 3 , expr
  1179. X251f 68 84 23 00          scal 4 , expr
  1180. X2523 68 85 23 00          scal 5 , expr
  1181. X2527 68 86 23 00          scal 6 , expr
  1182. X252b 68 87 23 00          scal 7 , expr
  1183. X252f 68 88 23 00          scal 8 , expr
  1184. X2533 68 89 23 00          scal 9 , expr
  1185. X2537 68 05              scm1
  1186. X2539 68 03              scm2
  1187. X253b f5              sd
  1188. X253c 75              sdb
  1189. X253d 7d 55              sdbi # immed
  1190. X253f fd 55              sdi # immed
  1191. X2541 d0              sep 0
  1192. X2542 d1              sep 1
  1193. X2543 da              sep 10
  1194. X2544 db              sep 11
  1195. X2545 dc              sep 12
  1196. X2546 dd              sep 13
  1197. X2547 de              sep 14
  1198. X2548 df              sep 15
  1199. X2549 d2              sep 2
  1200. X254a d3              sep 3
  1201. X254b d4              sep 4
  1202. X254c d5              sep 5
  1203. X254d d6              sep 6
  1204. X254e d7              sep 7
  1205. X254f d8              sep 8
  1206. X2550 d9              sep 9
  1207. X2551 7b              seq
  1208. X2552 e0              sex 0
  1209. X2553 e1              sex 1
  1210. X2554 ea              sex 10
  1211. X2555 eb              sex 11
  1212. X2556 ec              sex 12
  1213. X2557 ed              sex 13
  1214. X2558 ee              sex 14
  1215. X2559 ef              sex 15
  1216. X255a e2              sex 2
  1217. X255b e3              sex 3
  1218. X255c e4              sex 4
  1219. X255d e5              sex 5
  1220. X255e e6              sex 6
  1221. X255f e7              sex 7
  1222. X2560 e8              sex 8
  1223. X2561 e9              sex 9
  1224. X2562 fe              shl
  1225. X2563 7e              shlc
  1226. X2564 f6              shr
  1227. X2565 76              shrc
  1228. X2566 38              skp
  1229. X2567 f7              sm
  1230. X2568 77              smb
  1231. X2569 7f 55              smbi # immed
  1232. X256b ff 55              smi # immed
  1233. X256d 68 04              spm1
  1234. X256f 68 02              spm2
  1235. X2571 68 90              sret 0
  1236. X2573 68 91              sret 1
  1237. X2575 68 9a              sret 10
  1238. X2577 68 9b              sret 11
  1239. X2579 68 9c              sret 12
  1240. X257b 68 9d              sret 13
  1241. X257d 68 9e              sret 14
  1242. X257f 68 9f              sret 15
  1243. X2581 68 92              sret 2
  1244. X2583 68 93              sret 3
  1245. X2585 68 94              sret 4
  1246. X2587 68 95              sret 5
  1247. X2589 68 96              sret 6
  1248. X258b 68 97              sret 7
  1249. X258d 68 98              sret 8
  1250. X258f 68 99              sret 9
  1251. X2591 68 07              stm
  1252. X2593 68 00              stpc
  1253. X2595 50              str 0
  1254. X2596 51              str 1
  1255. X2597 5a              str 10
  1256. X2598 5b              str 11
  1257. X2599 5c              str 12
  1258. X259a 5d              str 13
  1259. X259b 5e              str 14
  1260. X259c 5f              str 15
  1261. X259d 52              str 2
  1262. X259e 53              str 3
  1263. X259f 54              str 4
  1264. X25a0 55              str 5
  1265. X25a1 56              str 6
  1266. X25a2 57              str 7
  1267. X25a3 58              str 8
  1268. X25a4 59              str 9
  1269. X25a5 73              stxd
  1270. X25a6 68 0b              xid
  1271. X25a8 68 0a              xie
  1272. X25aa f3              xor
  1273. X25ab fb 55              xri # immed
  1274. X ERROR SUMMARY - ERRORS DETECTED 0
  1275. X               -  WARNINGS       0
  1276. SHAR_EOF
  1277. true || echo 'restore of as1805.tut failed'
  1278. fi
  1279. # ============= as1805.y ==============
  1280. if test -f 'as1805.y' -a X"$1" != X"-c"; then
  1281.     echo 'x - skipping as1805.y (File already exists)'
  1282. else
  1283. echo 'x - extracting as1805.y (Text)'
  1284. sed 's/^X//' << 'SHAR_EOF' > 'as1805.y' &&
  1285. X%{
  1286. X
  1287. X/*
  1288. XHEADER:     ;
  1289. XTITLE:         Frankenstein Cross Assemblers;
  1290. XVERSION:     2.0;
  1291. XDESCRIPTION: "    Reconfigurable Cross-assembler producing Intel (TM)
  1292. X        Hex format object records.  ";
  1293. XKEYWORDS:     cross-assemblers, 1805, 2650, 6301, 6502, 6805, 6809, 
  1294. X        6811, tms7000, 8048, 8051, 8096, z8, z80;
  1295. XSYSTEM:     UNIX, MS-Dos ;
  1296. XFILENAME:     as1805.y;
  1297. XWARNINGS:     "This software is in the public domain.  
  1298. X        Any prior copyright claims are relinquished.  
  1299. X
  1300. X        This software is distributed with no warranty whatever.  
  1301. X        The author takes no responsibility for the consequences 
  1302. X        of its use.
  1303. X
  1304. X        Yacc (or Bison) required to compile."  ;
  1305. XSEE-ALSO:     as1805.doc,frasmain.c;    
  1306. XAUTHORS:     Mark Zenier;
  1307. XCOMPILERS:     Microport Sys V/AT, ATT Yacc, Turbo C V1.5, Bison (CUG disk 285)
  1308. X        (previous versions Xenix, Unisoft 68000 Version 7, Sun 3);
  1309. X*/
  1310. X/* RCA 1802 instruction generation file */
  1311. X/* November 17, 1990 - character set support */
  1312. X
  1313. X/*
  1314. X    description    frame work parser description for framework cross
  1315. X            assemblers
  1316. X    history        February 2, 1988
  1317. X            September 11, 1990 - merge table definition
  1318. X            September 12, 1990 - short file names
  1319. X            September 14, 1990 - short variable names
  1320. X            September 17, 1990 - use yylex as external
  1321. X*/
  1322. X#include <stdio.h>
  1323. X#include "frasmdat.h"
  1324. X#include "fragcon.h"
  1325. X
  1326. X#define yylex lexintercept
  1327. X
  1328. X#define CPUMASK        0xc000
  1329. X#define CPU1802        0x4000    
  1330. X#define CPU1805        0xc000
  1331. X#define TS1802PLUS    0x4000    /* mask and match values in table */
  1332. X#define TS1805    0x8000    /* if select value & mask == mask */
  1333. X#define ST_INH 0x1
  1334. X#define ST_IMM 0x2
  1335. X#define ST_EXP 0x4
  1336. X#define ST_IO 0x1
  1337. X#define ST_REG 0x1
  1338. X#define ST_LDN 0x1
  1339. X#define ST_RLDI 0x1
  1340. X#define ST_DBNZ 0x1
  1341. X    
  1342. X    int    cpuselect = CPU1805;
  1343. X    static char    genbdef[] = "[1=];";
  1344. X    static char    genwdef[] = "[1=]x"; /* x for normal, y for byte rev */
  1345. X    char ignosyn[] = "[Xinvalid syntax for instruction";
  1346. X    char ignosel[] = "[Xinvalid operands/illegal instruction for cpu";
  1347. X
  1348. X    long    labelloc;
  1349. X    static int satsub;
  1350. X    int    ifstkpt = 0;
  1351. X    int    fraifskip = FALSE;
  1352. X
  1353. X    struct symel * endsymbol = SYMNULL;
  1354. X
  1355. X%}
  1356. X%union {
  1357. X    int    intv;
  1358. X    long     longv;
  1359. X    char    *strng;
  1360. X    struct symel *symb;
  1361. X}
  1362. X%token <intv> KOC_BDEF
  1363. X%token <intv> KOC_ELSE
  1364. X%token <intv> KOC_END
  1365. X%token <intv> KOC_ENDI
  1366. X%token <intv> KOC_EQU
  1367. X%token <intv> KOC_IF
  1368. X%token <intv> KOC_INCLUDE
  1369. X%token <intv> KOC_ORG
  1370. X%token <intv> KOC_RESM
  1371. X%token <intv> KOC_SDEF
  1372. X%token <intv> KOC_SET
  1373. X%token <intv> KOC_WDEF
  1374. X%token <intv> KOC_CHSET
  1375. X%token <intv> KOC_CHDEF
  1376. X%token <intv> KOC_CHUSE
  1377. X%token <intv> KOC_opcode
  1378. X%token <intv> KOC_ioop
  1379. X%token <intv> KOC_regop
  1380. X%token <intv> KOC_ldn
  1381. X%token <intv> KOC_rldi
  1382. X%token <intv> KOC_dbnz
  1383. X
  1384. X%token <longv> CONSTANT
  1385. X%token EOL
  1386. X%token KEOP_AND
  1387. X%token KEOP_DEFINED
  1388. X%token KEOP_EQ
  1389. X%token KEOP_GE
  1390. X%token KEOP_GT
  1391. X%token KEOP_HIGH
  1392. X%token KEOP_LE
  1393. X%token KEOP_LOW
  1394. X%token KEOP_LT
  1395. X%token KEOP_MOD
  1396. X%token KEOP_MUN
  1397. X%token KEOP_NE
  1398. X%token KEOP_NOT
  1399. X%token KEOP_OR
  1400. X%token KEOP_SHL
  1401. X%token KEOP_SHR
  1402. X%token KEOP_XOR
  1403. X%token KEOP_locctr
  1404. X%token <symb> LABEL
  1405. X%token <strng> STRING
  1406. X%token <symb> SYMBOL
  1407. X
  1408. X%token KTK_invalid
  1409. X
  1410. X%right    KEOP_HIGH KEOP_LOW
  1411. X%left    KEOP_OR KEOP_XOR
  1412. X%left    KEOP_AND
  1413. X%right    KEOP_NOT
  1414. X%nonassoc    KEOP_GT KEOP_GE KEOP_LE KEOP_LT KEOP_NE KEOP_EQ
  1415. X%left    '+' '-'
  1416. X%left    '*' '/' KEOP_MOD KEOP_SHL KEOP_SHR
  1417. X%right    KEOP_MUN
  1418. X
  1419. X
  1420. X%type <intv> expr exprlist stringlist
  1421. X
  1422. X%start file
  1423. X
  1424. X%%
  1425. X
  1426. Xfile    :    file allline
  1427. X    |    allline
  1428. X    ;
  1429. X
  1430. Xallline    :     line EOL
  1431. X            {
  1432. X                clrexpr();
  1433. X            }
  1434. X    |    EOL
  1435. X    |    error EOL
  1436. X            {
  1437. X                clrexpr();
  1438. X                yyerrok;
  1439. X            }
  1440. X    ;
  1441. X
  1442. Xline    :    LABEL KOC_END 
  1443. X            {
  1444. X                endsymbol = $1;
  1445. X                nextreadact = Nra_end;
  1446. X            }
  1447. X    |          KOC_END 
  1448. X            {
  1449. X                nextreadact = Nra_end;
  1450. X            }
  1451. X    |    KOC_INCLUDE STRING
  1452. X            {
  1453. X        if(nextfstk >= FILESTKDPTH)
  1454. X        {
  1455. X            fraerror("include file nesting limit exceeded");
  1456. X        }
  1457. X        else
  1458. X        {
  1459. X            infilestk[nextfstk].fnm = savestring($2,strlen($2));
  1460. X            if( (infilestk[nextfstk].fpt = fopen($2,"r"))
  1461. X                ==(FILE *)NULL )
  1462. X            {
  1463. X                fraerror("cannot open include file");
  1464. X            }
  1465. X            else
  1466. X            {
  1467. X                nextreadact = Nra_new;
  1468. X            }
  1469. X        }
  1470. X            }
  1471. X    |    LABEL KOC_EQU expr 
  1472. X            {
  1473. X                if($1 -> seg == SSG_UNDEF)
  1474. X                {
  1475. X                    pevalexpr(0, $3);
  1476. X                    if(evalr[0].seg == SSG_ABS)
  1477. X                    {
  1478. X                        $1 -> seg = SSG_EQU;
  1479. X                        $1 -> value = evalr[0].value;
  1480. X                        prtequvalue("C: 0x%lx\n",
  1481. X                            evalr[0].value);
  1482. X                    }
  1483. X                    else
  1484. X                    {
  1485. X                        fraerror(
  1486. X                    "noncomputable expression for EQU");
  1487. X                    }
  1488. X                }
  1489. X                else
  1490. X                {
  1491. X                    fraerror(
  1492. X                "cannot change symbol value with EQU");
  1493. X                }
  1494. X            }
  1495. X    |    LABEL KOC_SET expr 
  1496. X            {
  1497. X                if($1 -> seg == SSG_UNDEF
  1498. X                   || $1 -> seg == SSG_SET)
  1499. X                {
  1500. X                    pevalexpr(0, $3);
  1501. X                    if(evalr[0].seg == SSG_ABS)
  1502. X                    {
  1503. X                        $1 -> seg = SSG_SET;
  1504. X                        $1 -> value = evalr[0].value;
  1505. X                        prtequvalue("C: 0x%lx\n",
  1506. X                            evalr[0].value);
  1507. X                    }
  1508. X                    else
  1509. X                    {
  1510. X                        fraerror(
  1511. X                    "noncomputable expression for SET");
  1512. X                    }
  1513. X                }
  1514. X                else
  1515. X                {
  1516. X                    fraerror(
  1517. X                "cannot change symbol value with SET");
  1518. X                }
  1519. X            }
  1520. X    |    KOC_IF expr 
  1521. X            {
  1522. X        if((++ifstkpt) < IFSTKDEPTH)
  1523. X        {
  1524. X            pevalexpr(0, $2);
  1525. X            if(evalr[0].seg == SSG_ABS)
  1526. X            {
  1527. X                if(evalr[0].value != 0)
  1528. X                {
  1529. X                    elseifstk[ifstkpt] = If_Skip;
  1530. X                    endifstk[ifstkpt] = If_Active;
  1531. X                }
  1532. X                else
  1533. X                {
  1534. X                    fraifskip = TRUE;
  1535. X                    elseifstk[ifstkpt] = If_Active;
  1536. X                    endifstk[ifstkpt] = If_Active;
  1537. X                }
  1538. X            }
  1539. X            else
  1540. X            {
  1541. X                fraifskip = TRUE;
  1542. X                elseifstk[ifstkpt] = If_Active;
  1543. X                endifstk[ifstkpt] = If_Active;
  1544. X            }
  1545. X        }
  1546. X        else
  1547. X        {
  1548. X            fraerror("IF stack overflow");
  1549. X        }
  1550. X            }
  1551. X                        
  1552. X    |    KOC_IF 
  1553. X            {
  1554. X        if(fraifskip) 
  1555. X        {
  1556. X            if((++ifstkpt) < IFSTKDEPTH)
  1557. X            {
  1558. X                    elseifstk[ifstkpt] = If_Skip;
  1559. X                    endifstk[ifstkpt] = If_Skip;
  1560. X            }
  1561. X            else
  1562. X            {
  1563. X                fraerror("IF stack overflow");
  1564. X            }
  1565. X        }
  1566. X        else
  1567. X        {
  1568. X            yyerror("syntax error");
  1569. X            YYERROR;
  1570. X        }
  1571. X                }
  1572. X                        
  1573. X    |    KOC_ELSE 
  1574. X            {
  1575. X                switch(elseifstk[ifstkpt])
  1576. X                {
  1577. X                case If_Active:
  1578. X                    fraifskip = FALSE;
  1579. X                    break;
  1580. X                
  1581. X                case If_Skip:
  1582. X                    fraifskip = TRUE;
  1583. X                    break;
  1584. X                
  1585. X                case If_Err:
  1586. X                    fraerror("ELSE with no matching if");
  1587. X                    break;
  1588. X                }
  1589. X            }
  1590. X
  1591. X    |    KOC_ENDI 
  1592. X            {
  1593. X                switch(endifstk[ifstkpt])
  1594. X                {
  1595. X                case If_Active:
  1596. X                    fraifskip = FALSE;
  1597. X                    ifstkpt--;
  1598. X                    break;
  1599. X                
  1600. X                case If_Skip:
  1601. X                    fraifskip = TRUE;
  1602. X                    ifstkpt--;
  1603. X                    break;
  1604. X                
  1605. X                case If_Err:
  1606. X                    fraerror("ENDI with no matching if");
  1607. X                    break;
  1608. X                }
  1609. X            }
  1610. X    |    LABEL KOC_ORG expr 
  1611. X            {
  1612. X                pevalexpr(0, $3);
  1613. X                if(evalr[0].seg == SSG_ABS)
  1614. X                {
  1615. X                    locctr = labelloc = evalr[0].value;
  1616. X                    if($1 -> seg == SSG_UNDEF)
  1617. X                    {
  1618. X                        $1 -> seg = SSG_ABS;
  1619. X                        $1 -> value = labelloc;
  1620. X                    }
  1621. X                    else
  1622. X                        fraerror(
  1623. X                        "multiple definition of label");
  1624. X                    prtequvalue("C: 0x%lx\n",
  1625. X                        evalr[0].value);
  1626. X                }
  1627. X                else
  1628. X                {
  1629. X                    fraerror(
  1630. X                     "noncomputable expression for ORG");
  1631. X                }
  1632. X            }
  1633. X    |          KOC_ORG expr 
  1634. X            {
  1635. X                pevalexpr(0, $2);
  1636. X                if(evalr[0].seg == SSG_ABS)
  1637. X                {
  1638. X                    locctr = labelloc = evalr[0].value;
  1639. X                    prtequvalue("C: 0x%lx\n",
  1640. X                        evalr[0].value);
  1641. X                }
  1642. X                else
  1643. X                {
  1644. X                    fraerror(
  1645. X                     "noncomputable expression for ORG");
  1646. X                }
  1647. X            }
  1648. X    |    LABEL KOC_CHSET
  1649. X            {
  1650. X                if($1 -> seg == SSG_UNDEF)
  1651. X                {
  1652. X                    $1 -> seg = SSG_EQU;
  1653. X                    if( ($1->value = chtcreate()) <= 0)
  1654. X                    {
  1655. X        fraerror( "cannot create character translation table");
  1656. X                    }
  1657. X                    prtequvalue("C: 0x%lx\n", $1 -> value);
  1658. X                }
  1659. X                else
  1660. X                {
  1661. X            fraerror( "multiple definition of label");
  1662. X                }
  1663. X            }
  1664. X    |        KOC_CHUSE
  1665. X            {
  1666. X                chtcpoint = (int *) NULL;
  1667. X                prtequvalue("C: 0x%lx\n", 0L);
  1668. X            }
  1669. X    |        KOC_CHUSE expr
  1670. X            {
  1671. X                pevalexpr(0, $2);
  1672. X                if( evalr[0].seg == SSG_ABS)
  1673. X                {
  1674. X                    if( evalr[0].value == 0)
  1675. X                    {
  1676. X                        chtcpoint = (int *)NULL;
  1677. X                        prtequvalue("C: 0x%lx\n", 0L);
  1678. X                    }
  1679. X                    else if(evalr[0].value < chtnxalph)
  1680. X                    {
  1681. X                chtcpoint = chtatab[evalr[0].value];
  1682. X                prtequvalue("C: 0x%lx\n", evalr[0].value);
  1683. X                    }
  1684. X                    else
  1685. X                    {
  1686. X            fraerror("nonexistent character translation table");
  1687. X                    }
  1688. X                }
  1689. X                else
  1690. X                {
  1691. X                    fraerror("noncomputable expression");
  1692. X                }
  1693. X            }
  1694. X    |        KOC_CHDEF STRING ',' exprlist
  1695. X            {
  1696. X        int findrv, numret, *charaddr;
  1697. X        char *sourcestr = $2, *before;
  1698. X
  1699. X        if(chtnpoint != (int *)NULL)
  1700. X        {
  1701. X            for(satsub = 0; satsub < $4; satsub++)
  1702. X            {
  1703. X                before = sourcestr;
  1704. X
  1705. X                pevalexpr(0, exprlist[satsub]);
  1706. X                findrv = chtcfind(chtnpoint, &sourcestr,
  1707. X                        &charaddr, &numret);
  1708. X                if(findrv == CF_END)
  1709. X                {
  1710. X            fraerror("more expressions than characters");
  1711. X                    break;
  1712. X                }
  1713. X
  1714. X                if(evalr[0].seg == SSG_ABS)
  1715. X                {
  1716. X                    switch(findrv)
  1717. X                    {
  1718. X                    case CF_UNDEF:
  1719. X                        {
  1720. X                if(evalr[0].value < 0 ||
  1721. X                    evalr[0].value > 255)
  1722. X                {
  1723. X            frawarn("character translation value truncated");
  1724. X                }
  1725. X                *charaddr = evalr[0].value & 0xff;
  1726. X                prtequvalue("C: 0x%lx\n", evalr[0].value);
  1727. X                        }
  1728. X                        break;
  1729. X
  1730. X                    case CF_INVALID:
  1731. X                    case CF_NUMBER:
  1732. X                fracherror("invalid character to define", 
  1733. X                    before, sourcestr);
  1734. X                        break;
  1735. X
  1736. X                    case CF_CHAR:
  1737. X                fracherror("character already defined", 
  1738. X                    before, sourcestr);
  1739. X                        break;
  1740. X                    }
  1741. X                }
  1742. X                else
  1743. X                {
  1744. X                    fraerror("noncomputable expression");
  1745. X                }
  1746. X            }
  1747. X
  1748. X            if( *sourcestr != '\0')
  1749. X            {
  1750. X                fraerror("more characters than expressions");
  1751. X            }
  1752. X        }
  1753. X        else
  1754. X        {
  1755. X            fraerror("no CHARSET statement active");
  1756. X        }
  1757. X            
  1758. X            }
  1759. X    |    LABEL 
  1760. X            {
  1761. X            if($1 -> seg == SSG_UNDEF)
  1762. X            {
  1763. X                $1 -> seg = SSG_ABS;
  1764. X                $1 -> value = labelloc;
  1765. X                prtequvalue("C: 0x%lx\n", labelloc);
  1766. X
  1767. X            }
  1768. X            else
  1769. X                fraerror(
  1770. X                "multiple definition of label");
  1771. X            }
  1772. X    |    labeledline
  1773. X    ;
  1774. X
  1775. Xlabeledline :    LABEL genline
  1776. X            {
  1777. X            if($1 -> seg == SSG_UNDEF)
  1778. X            {
  1779. X                $1 -> seg = SSG_ABS;
  1780. X                $1 -> value = labelloc;
  1781. X            }
  1782. X            else
  1783. X                fraerror(
  1784. X                "multiple definition of label");
  1785. X            labelloc = locctr;
  1786. X            }
  1787. X                
  1788. X    |    genline
  1789. X            {
  1790. X                labelloc = locctr;
  1791. X            }
  1792. X    ;
  1793. X
  1794. Xgenline    :    KOC_BDEF    exprlist 
  1795. X            {
  1796. X                genlocrec(currseg, labelloc);
  1797. X                for( satsub = 0; satsub < $2; satsub++)
  1798. X                {
  1799. X                    pevalexpr(1, exprlist[satsub]);
  1800. X                    locctr += geninstr(genbdef);
  1801. X                }
  1802. X            }
  1803. X    |    KOC_SDEF stringlist 
  1804. X            {
  1805. X                genlocrec(currseg, labelloc);
  1806. X                for(satsub = 0; satsub < $2; satsub++)
  1807. X                {
  1808. X                    locctr += genstring(stringlist[satsub]);
  1809. X                }
  1810. X            }
  1811. X    |    KOC_WDEF exprlist 
  1812. X            {
  1813. X                genlocrec(currseg, labelloc);
  1814. X                for( satsub = 0; satsub < $2; satsub++)
  1815. X                {
  1816. X                    pevalexpr(1, exprlist[satsub]);
  1817. X                    locctr += geninstr(genwdef);
  1818. X                }
  1819. X            }    
  1820. X    |    KOC_RESM expr 
  1821. X            {
  1822. X                pevalexpr(0, $2);
  1823. X                if(evalr[0].seg == SSG_ABS)
  1824. X                {
  1825. X                    locctr = labelloc + evalr[0].value;
  1826. X                    prtequvalue("C: 0x%lx\n", labelloc);
  1827. X                }
  1828. X                else
  1829. X                {
  1830. X                    fraerror(
  1831. X                 "noncomputable result for RMB expression");
  1832. X                }
  1833. X            }
  1834. X    ;
  1835. X
  1836. Xexprlist :    exprlist ',' expr
  1837. X            {
  1838. X                exprlist[nextexprs ++ ] = $3;
  1839. X                $$ = nextexprs;
  1840. X            }
  1841. X    |    expr
  1842. X            {
  1843. X                nextexprs = 0;
  1844. X                exprlist[nextexprs ++ ] = $1;
  1845. X                $$ = nextexprs;
  1846. X            }
  1847. X    ;
  1848. X
  1849. Xstringlist :    stringlist ',' STRING
  1850. X            {
  1851. X                stringlist[nextstrs ++ ] = $3;
  1852. X                $$ = nextstrs;
  1853. X            }
  1854. X    |    STRING
  1855. X            {
  1856. X                nextstrs = 0;
  1857. X                stringlist[nextstrs ++ ] = $1;
  1858. X                $$ = nextstrs;
  1859. X            }
  1860. X    ;
  1861. X
  1862. X
  1863. Xgenline : KOC_opcode 
  1864. X            {
  1865. X        genlocrec(currseg, labelloc);
  1866. X        locctr += geninstr( findgen( $1, ST_INH, cpuselect
  1867. X                ));
  1868. X            }
  1869. X    ;
  1870. Xgenline : KOC_opcode  '#' expr
  1871. X            {
  1872. X        genlocrec(currseg, labelloc);
  1873. X        pevalexpr(1, $3);
  1874. X        locctr += geninstr( findgen( $1, ST_IMM, cpuselect
  1875. X                ));
  1876. X            }
  1877. X    ;
  1878. Xgenline : KOC_opcode  expr
  1879. X            {
  1880. X        genlocrec(currseg, labelloc);
  1881. X        pevalexpr(1, $2);
  1882. X        locctr += geninstr( findgen( $1, ST_EXP, cpuselect
  1883. X                ));
  1884. X            }
  1885. X    ;
  1886. Xgenline : KOC_ioop  expr
  1887. X            {
  1888. X        genlocrec(currseg, labelloc);
  1889. X        pevalexpr(1, $2);
  1890. X        if(evalr[1].seg != SSG_ABS
  1891. X            || evalr[1].value < 1
  1892. X            || evalr[1].value > 7 )
  1893. X        {
  1894. X            fraerror("invalid IO port");
  1895. X            evalr[1].value = 0;
  1896. X        }
  1897. X        locctr += geninstr( findgen( $1, ST_IO, cpuselect
  1898. X                ));
  1899. X            }
  1900. X    ;
  1901. Xgenline : KOC_regop  expr
  1902. X            {
  1903. X        genlocrec(currseg, labelloc);
  1904. X        pevalexpr(1, $2);
  1905. X        if(evalr[1].seg != SSG_ABS
  1906. X            || evalr[1].value < 0
  1907. X            || evalr[1].value > 15  )
  1908. X        {
  1909. X            fraerror("invalid register expression");
  1910. X            evalr[1].value = 0;
  1911. X        }
  1912. X        locctr += geninstr( findgen( $1, ST_REG, cpuselect
  1913. X                ));
  1914. X            }
  1915. X    ;
  1916. Xgenline : KOC_ldn  expr
  1917. X            {
  1918. X        genlocrec(currseg, labelloc);
  1919. X        pevalexpr(1, $2);
  1920. X        if(evalr[1].seg != SSG_ABS
  1921. X            || evalr[1].value < 1
  1922. X            || evalr[1].value > 15  )
  1923. X        {
  1924. X            fraerror("invalid register expression");
  1925. X            evalr[1].value = 0;
  1926. X        }
  1927. X        locctr += geninstr( findgen( $1, ST_LDN, cpuselect
  1928. X                ));
  1929. X            }
  1930. X    ;
  1931. Xgenline : KOC_rldi  expr ',' '#' expr
  1932. X            {
  1933. X        genlocrec(currseg, labelloc);
  1934. X        pevalexpr(1, $2);
  1935. X        pevalexpr(2, $5);
  1936. X        if(evalr[1].seg != SSG_ABS
  1937. X            || evalr[1].value < 0
  1938. X            || evalr[1].value > 15  )
  1939. X        {
  1940. X            fraerror("invalid register expression");
  1941. X            evalr[1].value = 0;
  1942. X        }
  1943. X        locctr += geninstr( findgen( $1, ST_RLDI, cpuselect
  1944. X                ));
  1945. X            }
  1946. X    ;
  1947. Xgenline : KOC_dbnz  expr ',' expr
  1948. X            {
  1949. X        genlocrec(currseg, labelloc);
  1950. X        pevalexpr(1, $2);
  1951. X        pevalexpr(2, $4);
  1952. X        if(evalr[1].seg != SSG_ABS
  1953. X            || evalr[1].value < 0
  1954. X            || evalr[1].value > 15  )
  1955. X        {
  1956. X            fraerror("invalid register expression");
  1957. X            evalr[1].value = 0;
  1958. X        }
  1959. X        locctr += geninstr( findgen( $1, ST_DBNZ, cpuselect
  1960. X                ));
  1961. X            }
  1962. X    ;
  1963. Xexpr    :    '+' expr %prec KEOP_MUN
  1964. X            {
  1965. X                $$ = $2;
  1966. X            }
  1967. X    |    '-' expr %prec KEOP_MUN
  1968. X            {
  1969. X                $$ = exprnode(PCCASE_UN,$2,IFC_NEG,0,0L,
  1970. X                    SYMNULL);
  1971. X            }
  1972. X    |    KEOP_NOT expr
  1973. X            {
  1974. X                $$ = exprnode(PCCASE_UN,$2,IFC_NOT,0,0L,
  1975. X                    SYMNULL);
  1976. X            }
  1977. X    |    KEOP_HIGH expr
  1978. X            {
  1979. X                $$ = exprnode(PCCASE_UN,$2,IFC_HIGH,0,0L,
  1980. X                    SYMNULL);
  1981. X            }
  1982. X    |    KEOP_LOW expr
  1983. X            {
  1984. X                $$ = exprnode(PCCASE_UN,$2,IFC_LOW,0,0L,
  1985. X                    SYMNULL);
  1986. X            }
  1987. X    |    expr '*' expr
  1988. X            {
  1989. X                $$ = exprnode(PCCASE_BIN,$1,IFC_MUL,$3,0L,
  1990. X                    SYMNULL);
  1991. X            }
  1992. X    |    expr '/' expr
  1993. X            {
  1994. X                $$ = exprnode(PCCASE_BIN,$1,IFC_DIV,$3,0L,
  1995. X                    SYMNULL);
  1996. X            }
  1997. X    |    expr '+' expr
  1998. X            {
  1999. X                $$ = exprnode(PCCASE_BIN,$1,IFC_ADD,$3,0L,
  2000. X                    SYMNULL);
  2001. X            }
  2002. X    |    expr '-' expr
  2003. X            {
  2004. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SUB,$3,0L,
  2005. X                    SYMNULL);
  2006. X            }
  2007. X    |    expr KEOP_MOD expr
  2008. X            {
  2009. X                $$ = exprnode(PCCASE_BIN,$1,IFC_MOD,$3,0L,
  2010. X                    SYMNULL);
  2011. X            }
  2012. X    |    expr KEOP_SHL expr
  2013. X            {
  2014. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SHL,$3,0L,
  2015. X                    SYMNULL);
  2016. X            }
  2017. X    |    expr KEOP_SHR expr
  2018. X            {
  2019. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SHR,$3,0L,
  2020. X                    SYMNULL);
  2021. X            }
  2022. X    |    expr KEOP_GT expr
  2023. X            {
  2024. X                $$ = exprnode(PCCASE_BIN,$1,IFC_GT,$3,0L,
  2025. X                    SYMNULL);
  2026. X            }
  2027. X    |    expr KEOP_GE expr
  2028. X            {
  2029. X                $$ = exprnode(PCCASE_BIN,$1,IFC_GE,$3,0L,
  2030. X                    SYMNULL);
  2031. X            }
  2032. X    |    expr KEOP_LT expr
  2033. X            {
  2034. X                $$ = exprnode(PCCASE_BIN,$1,IFC_LT,$3,0L,
  2035. X                    SYMNULL);
  2036. X            }
  2037. X    |    expr KEOP_LE expr
  2038. X            {
  2039. X                $$ = exprnode(PCCASE_BIN,$1,IFC_LE,$3,0L,
  2040. X                    SYMNULL);
  2041. X            }
  2042. X    |    expr KEOP_NE expr
  2043. X            {
  2044. X                $$ = exprnode(PCCASE_BIN,$1,IFC_NE,$3,0L,
  2045. X                    SYMNULL);
  2046. X            }
  2047. X    |    expr KEOP_EQ expr
  2048. X            {
  2049. X                $$ = exprnode(PCCASE_BIN,$1,IFC_EQ,$3,0L,
  2050. X                    SYMNULL);
  2051. X            }
  2052. X    |    expr KEOP_AND expr
  2053. X            {
  2054. X                $$ = exprnode(PCCASE_BIN,$1,IFC_AND,$3,0L,
  2055. X                    SYMNULL);
  2056. X            }
  2057. X    |    expr KEOP_OR expr
  2058. X            {
  2059. X                $$ = exprnode(PCCASE_BIN,$1,IFC_OR,$3,0L,
  2060. X                    SYMNULL);
  2061. X            }
  2062. X    |    expr KEOP_XOR expr
  2063. X            {
  2064. X                $$ = exprnode(PCCASE_BIN,$1,IFC_XOR,$3,0L,
  2065. X                    SYMNULL);
  2066. X            }
  2067. X    |    KEOP_DEFINED SYMBOL
  2068. X            {
  2069. X                $$ = exprnode(PCCASE_DEF,0,IGP_DEFINED,0,0L,$2);
  2070. X            }
  2071. X    |    SYMBOL
  2072. X            {
  2073. X                $$ = exprnode(PCCASE_SYMB,0,IFC_SYMB,0,0L,$1);
  2074. X            }
  2075. X    |    '*'
  2076. X            {
  2077. X                $$ = exprnode(PCCASE_PROGC,0,IFC_PROGCTR,0,
  2078. X                    labelloc, SYMNULL);
  2079. X            }
  2080. X    |    CONSTANT
  2081. X            {
  2082. X                $$ = exprnode(PCCASE_CONS,0,IGP_CONSTANT,0,$1,
  2083. X                    SYMNULL);
  2084. X            }
  2085. X    |    STRING
  2086. X            {
  2087. X                char *sourcestr = $1;
  2088. X                long accval = 0;
  2089. X
  2090. X                if(strlen($1) > 0)
  2091. X                {
  2092. X                    accval = chtran(&sourcestr);
  2093. X                    if(*sourcestr != '\0')
  2094. X                    {
  2095. X                        accval = (accval << 8) +
  2096. X                            chtran(&sourcestr);
  2097. X                    }
  2098. X
  2099. X                    if( *sourcestr != '\0')
  2100. X                    {
  2101. X    frawarn("string constant in expression more than 2 characters long");
  2102. X                    }
  2103. X                }
  2104. X                $$ = exprnode(PCCASE_CONS, 0, IGP_CONSTANT, 0,
  2105. X                    accval, SYMNULL);
  2106. X            }
  2107. X    |    '(' expr ')'
  2108. X            {
  2109. X                $$ = $2;
  2110. X            }
  2111. X    ;
  2112. X
  2113. X
  2114. X%%
  2115. X
  2116. Xlexintercept()
  2117. X/*
  2118. X    description    intercept the call to yylex (the lexical analyzer)
  2119. X            and filter out all unnecessary tokens when skipping
  2120. X            the input between a failed IF and its matching ENDI or
  2121. X            ELSE
  2122. X    globals     fraifskip    the enable flag
  2123. X*/
  2124. X{
  2125. X#undef yylex
  2126. X
  2127. X    int rv;
  2128. X
  2129. X    if(fraifskip)
  2130. X    {
  2131. X        for(;;)
  2132. X        {
  2133. X
  2134. X            switch(rv = yylex())
  2135. X
  2136. X            {
  2137. X            case 0:
  2138. X            case KOC_END:
  2139. X            case KOC_IF:
  2140. X            case KOC_ELSE:
  2141. X            case KOC_ENDI:
  2142. X            case EOL:
  2143. X                return rv;
  2144. X            default:
  2145. X                break;
  2146. X            }
  2147. X        }
  2148. X    }
  2149. X    else
  2150. X        return yylex();
  2151. X#define yylex lexintercept
  2152. X}
  2153. X
  2154. X
  2155. Xsetreserved()
  2156. X{
  2157. X
  2158. X    reservedsym("and", KEOP_AND, 0);
  2159. X    reservedsym("defined", KEOP_DEFINED,0);
  2160. X    reservedsym("eq", KEOP_EQ, 0);
  2161. X    reservedsym("ge", KEOP_GE, 0);
  2162. X    reservedsym("gt", KEOP_GT, 0);
  2163. X    reservedsym("high", KEOP_HIGH, 0);
  2164. X    reservedsym("le", KEOP_LE, 0);
  2165. X    reservedsym("low", KEOP_LOW, 0);
  2166. X    reservedsym("lt", KEOP_LT, 0);
  2167. X    reservedsym("mod", KEOP_MOD, 0);
  2168. X    reservedsym("ne", KEOP_NE, 0);
  2169. X    reservedsym("not", KEOP_NOT, 0);
  2170. X    reservedsym("or", KEOP_OR, 0);
  2171. X    reservedsym("shl", KEOP_SHL, 0);
  2172. X    reservedsym("shr", KEOP_SHR, 0);
  2173. X    reservedsym("xor", KEOP_XOR, 0);
  2174. X    reservedsym("AND", KEOP_AND, 0);
  2175. X    reservedsym("DEFINED", KEOP_DEFINED,0);
  2176. X    reservedsym("EQ", KEOP_EQ, 0);
  2177. X    reservedsym("GE", KEOP_GE, 0);
  2178. X    reservedsym("GT", KEOP_GT, 0);
  2179. X    reservedsym("HIGH", KEOP_HIGH, 0);
  2180. X    reservedsym("LE", KEOP_LE, 0);
  2181. X    reservedsym("LOW", KEOP_LOW, 0);
  2182. X    reservedsym("LT", KEOP_LT, 0);
  2183. X    reservedsym("MOD", KEOP_MOD, 0);
  2184. X    reservedsym("NE", KEOP_NE, 0);
  2185. X    reservedsym("NOT", KEOP_NOT, 0);
  2186. X    reservedsym("OR", KEOP_OR, 0);
  2187. X    reservedsym("SHL", KEOP_SHL, 0);
  2188. X    reservedsym("SHR", KEOP_SHR, 0);
  2189. X    reservedsym("XOR", KEOP_XOR, 0);
  2190. X
  2191. X}
  2192. X
  2193. Xcpumatch(str)
  2194. X    char * str;
  2195. X{
  2196. X    int msub;
  2197. X
  2198. X    static struct
  2199. X    {
  2200. X        char * mtch;
  2201. X        int   cpuv;
  2202. X    } matchtab[] =
  2203. X    {
  2204. X        {"02", CPU1802 },
  2205. X        {"05", CPU1805 },
  2206. X        {"04", CPU1805 },
  2207. X        {"06", CPU1805 },
  2208. X        {"", 0} 
  2209. X    };
  2210. X
  2211. X    for(msub = 0; matchtab[msub].cpuv != 0; msub++)
  2212. X    {
  2213. X        if(strcontains(str, matchtab[msub].mtch))
  2214. X        {
  2215. X            cpuselect = matchtab[msub].cpuv;
  2216. X            return TRUE;
  2217. X        }
  2218. X    }
  2219. X
  2220. X    return FALSE;
  2221. X}
  2222. X
  2223. X
  2224. Xstrcontains(s1, sm)
  2225. X    char * s1, *sm;
  2226. X{
  2227. X    int l1 = strlen(s1), lm = strlen(sm);
  2228. X
  2229. X    for(; l1 >= lm; l1--, s1++)
  2230. X    {
  2231. X        if(strncmp(s1, sm, lm) == 0)
  2232. X        {
  2233. X            return TRUE;
  2234. X        }
  2235. X    }
  2236. X    return FALSE;
  2237. X}
  2238. X
  2239. X/*
  2240. X    description    Opcode and Instruction generation tables
  2241. X    usage        Unix, framework crossassembler
  2242. X    history        September 25, 1987
  2243. X*/
  2244. X
  2245. X#define NUMOPCODE 143
  2246. X#define NUMSYNBLK 121
  2247. X#define NUMDIFFOP 121
  2248. X
  2249. Xint gnumopcode = NUMOPCODE;
  2250. X
  2251. Xint ophashlnk[NUMOPCODE];
  2252. X
  2253. Xstruct opsym optab[NUMOPCODE+1]
  2254. X    = {
  2255. X    {"invalid", KOC_opcode, 2, 0 },
  2256. X    {"ADC", KOC_opcode, 1, 2 },
  2257. X    {"ADCI", KOC_opcode, 1, 3 },
  2258. X    {"ADD", KOC_opcode, 1, 4 },
  2259. X    {"ADI", KOC_opcode, 1, 5 },
  2260. X    {"AND", KOC_opcode, 1, 6 },
  2261. X    {"ANI", KOC_opcode, 1, 7 },
  2262. X    {"B1", KOC_opcode, 1, 8 },
  2263. X    {"B2", KOC_opcode, 1, 9 },
  2264. X    {"B3", KOC_opcode, 1, 10 },
  2265. X    {"B4", KOC_opcode, 1, 11 },
  2266. X    {"BCI", KOC_opcode, 1, 12 },
  2267. X    {"BDF", KOC_opcode, 1, 13 },
  2268. X    {"BGE", KOC_opcode, 1, 14 },
  2269. X    {"BL", KOC_opcode, 1, 15 },
  2270. X    {"BM", KOC_opcode, 1, 16 },
  2271. X    {"BN1", KOC_opcode, 1, 17 },
  2272. X    {"BN2", KOC_opcode, 1, 18 },
  2273. X    {"BN3", KOC_opcode, 1, 19 },
  2274. X    {"BN4", KOC_opcode, 1, 20 },
  2275. X    {"BNF", KOC_opcode, 1, 21 },
  2276. X    {"BNQ", KOC_opcode, 1, 22 },
  2277. X    {"BNZ", KOC_opcode, 1, 23 },
  2278. X    {"BPZ", KOC_opcode, 1, 24 },
  2279. X    {"BQ", KOC_opcode, 1, 25 },
  2280. X    {"BR", KOC_opcode, 1, 26 },
  2281. X    {"BXI", KOC_opcode, 1, 27 },
  2282. X    {"BYTE", KOC_BDEF, 0, 0 },
  2283. X    {"BZ", KOC_opcode, 1, 28 },
  2284. X    {"CHARDEF", KOC_CHDEF, 0, 0 },
  2285. X    {"CHARSET", KOC_CHSET, 0, 0 },
  2286. X    {"CHARUSE", KOC_CHUSE, 0, 0 },
  2287. X    {"CHD", KOC_CHDEF, 0, 0 },
  2288. X    {"CID", KOC_opcode, 1, 29 },
  2289. X    {"CIE", KOC_opcode, 1, 30 },
  2290. X    {"DACI", KOC_opcode, 1, 31 },
  2291. X    {"DADC", KOC_opcode, 1, 32 },
  2292. X    {"DADD", KOC_opcode, 1, 33 },
  2293. X    {"DADI", KOC_opcode, 1, 34 },
  2294. X    {"DB", KOC_BDEF, 0, 0 },
  2295. X    {"DBNZ", KOC_dbnz, 1, 35 },
  2296. X    {"DEC", KOC_regop, 1, 36 },
  2297. X    {"DIS", KOC_opcode, 1, 37 },
  2298. X    {"DSAV", KOC_opcode, 1, 38 },
  2299. X    {"DSBI", KOC_opcode, 1, 39 },
  2300. X    {"DSM", KOC_opcode, 1, 40 },
  2301. X    {"DSMB", KOC_opcode, 1, 41 },
  2302. X    {"DSMI", KOC_opcode, 1, 42 },
  2303. X    {"DTC", KOC_opcode, 1, 43 },
  2304. X    {"DW", KOC_WDEF, 0, 0 },
  2305. X    {"ELSE", KOC_ELSE, 0, 0 },
  2306. X    {"END", KOC_END, 0, 0 },
  2307. X    {"ENDI", KOC_ENDI, 0, 0 },
  2308. X    {"EQU", KOC_EQU, 0, 0 },
  2309. X    {"ETQ", KOC_opcode, 1, 44 },
  2310. X    {"FCB", KOC_BDEF, 0, 0 },
  2311. X    {"FCC", KOC_SDEF, 0, 0 },
  2312. X    {"FDB", KOC_WDEF, 0, 0 },
  2313. X    {"GEC", KOC_opcode, 1, 45 },
  2314. X    {"GHI", KOC_regop, 1, 46 },
  2315. X    {"GLO", KOC_regop, 1, 47 },
  2316. X    {"IDL", KOC_opcode, 1, 48 },
  2317. X    {"IF", KOC_IF, 0, 0 },
  2318. X    {"INC", KOC_regop, 1, 49 },
  2319. X    {"INCL", KOC_INCLUDE, 0, 0 },
  2320. X    {"INCLUDE", KOC_INCLUDE, 0, 0 },
  2321. X    {"INP", KOC_ioop, 1, 50 },
  2322. X    {"IRX", KOC_opcode, 1, 51 },
  2323. X    {"LBDF", KOC_opcode, 1, 52 },
  2324. X    {"LBNF", KOC_opcode, 1, 53 },
  2325. X    {"LBNQ", KOC_opcode, 1, 54 },
  2326. X    {"LBNZ", KOC_opcode, 1, 55 },
  2327. X    {"LBQ", KOC_opcode, 1, 56 },
  2328. X    {"LBR", KOC_opcode, 1, 57 },
  2329. X    {"LBZ", KOC_opcode, 1, 58 },
  2330. X    {"LDA", KOC_regop, 1, 59 },
  2331. X    {"LDC", KOC_opcode, 1, 60 },
  2332. X    {"LDI", KOC_opcode, 1, 61 },
  2333. X    {"LDN", KOC_ldn, 1, 62 },
  2334. X    {"LDX", KOC_opcode, 1, 63 },
  2335. X    {"LDXA", KOC_opcode, 1, 64 },
  2336. X    {"LSDF", KOC_opcode, 1, 65 },
  2337. X    {"LSIE", KOC_opcode, 1, 66 },
  2338. X    {"LSKP", KOC_opcode, 1, 67 },
  2339. X    {"LSNF", KOC_opcode, 1, 68 },
  2340. X    {"LSNQ", KOC_opcode, 1, 69 },
  2341. X    {"LSNZ", KOC_opcode, 1, 70 },
  2342. X    {"LSQ", KOC_opcode, 1, 71 },
  2343. X    {"LSZ", KOC_opcode, 1, 72 },
  2344. X    {"MARK", KOC_opcode, 1, 73 },
  2345. X    {"NBR", KOC_opcode, 1, 74 },
  2346. X    {"NLBR", KOC_opcode, 1, 75 },
  2347. X    {"NOP", KOC_opcode, 1, 76 },
  2348. X    {"OR", KOC_opcode, 1, 77 },
  2349. X    {"ORG", KOC_ORG, 0, 0 },
  2350. X    {"ORI", KOC_opcode, 1, 78 },
  2351. X    {"OUT", KOC_ioop, 1, 79 },
  2352. X    {"PHI", KOC_regop, 1, 80 },
  2353. X    {"PLO", KOC_regop, 1, 81 },
  2354. X    {"REQ", KOC_opcode, 1, 82 },
  2355. X    {"RESERVE", KOC_RESM, 0, 0 },
  2356. X    {"RET", KOC_opcode, 1, 83 },
  2357. X    {"RLDI", KOC_rldi, 1, 84 },
  2358. X    {"RLXA", KOC_regop, 1, 85 },
  2359. X    {"RMB", KOC_RESM, 0, 0 },
  2360. X    {"RNX", KOC_regop, 1, 86 },
  2361. X    {"RSHL", KOC_opcode, 1, 87 },
  2362. X    {"RSHR", KOC_opcode, 1, 88 },
  2363. X    {"RSXD", KOC_regop, 1, 89 },
  2364. X    {"SAV", KOC_opcode, 1, 90 },
  2365. X    {"SCAL", KOC_dbnz, 1, 91 },
  2366. X    {"SCM1", KOC_opcode, 1, 92 },
  2367. X    {"SCM2", KOC_opcode, 1, 93 },
  2368. X    {"SD", KOC_opcode, 1, 94 },
  2369. X    {"SDB", KOC_opcode, 1, 95 },
  2370. X    {"SDBI", KOC_opcode, 1, 96 },
  2371. X    {"SDI", KOC_opcode, 1, 97 },
  2372. X    {"SEP", KOC_regop, 1, 98 },
  2373. X    {"SEQ", KOC_opcode, 1, 99 },
  2374. X    {"SET", KOC_SET, 0, 0 },
  2375. X    {"SEX", KOC_regop, 1, 100 },
  2376. X    {"SHL", KOC_opcode, 1, 101 },
  2377. X    {"SHLC", KOC_opcode, 1, 102 },
  2378. X    {"SHR", KOC_opcode, 1, 103 },
  2379. X    {"SHRC", KOC_opcode, 1, 104 },
  2380. X    {"SKP", KOC_opcode, 1, 105 },
  2381. X    {"SM", KOC_opcode, 1, 106 },
  2382. X    {"SMB", KOC_opcode, 1, 107 },
  2383. X    {"SMBI", KOC_opcode, 1, 108 },
  2384. X    {"SMI", KOC_opcode, 1, 109 },
  2385. X    {"SPM1", KOC_opcode, 1, 110 },
  2386. X    {"SPM2", KOC_opcode, 1, 111 },
  2387. X    {"SRET", KOC_regop, 1, 112 },
  2388. X    {"STM", KOC_opcode, 1, 113 },
  2389. X    {"STPC", KOC_opcode, 1, 114 },
  2390. X    {"STR", KOC_regop, 1, 115 },
  2391. X    {"STRING", KOC_SDEF, 0, 0 },
  2392. X    {"STXD", KOC_opcode, 1, 116 },
  2393. X    {"WORD", KOC_WDEF, 0, 0 },
  2394. X    {"XID", KOC_opcode, 1, 117 },
  2395. X    {"XIE", KOC_opcode, 1, 118 },
  2396. X    {"XOR", KOC_opcode, 1, 119 },
  2397. X    {"XRI", KOC_opcode, 1, 120 },
  2398. X    { "", 0, 0, 0 }};
  2399. X
  2400. Xstruct opsynt ostab[NUMSYNBLK+1]
  2401. X    = {
  2402. X/* invalid 0 */ { 0, 1, 0 },
  2403. X/* invalid 1 */ { 0xffff, 1, 1 },
  2404. X/* ADC 2 */ { ST_INH, 1, 2 },
  2405. X/* ADCI 3 */ { ST_IMM, 1, 3 },
  2406. X/* ADD 4 */ { ST_INH, 1, 4 },
  2407. X/* ADI 5 */ { ST_IMM, 1, 5 },
  2408. X/* AND 6 */ { ST_INH, 1, 6 },
  2409. X/* ANI 7 */ { ST_IMM, 1, 7 },
  2410. X/* B1 8 */ { ST_EXP, 1, 8 },
  2411. X/* B2 9 */ { ST_EXP, 1, 9 },
  2412. X/* B3 10 */ { ST_EXP, 1, 10 },
  2413. X/* B4 11 */ { ST_EXP, 1, 11 },
  2414. X/* BCI 12 */ { ST_EXP, 1, 12 },
  2415. X/* BDF 13 */ { ST_EXP, 1, 13 },
  2416. X/* BGE 14 */ { ST_EXP, 1, 14 },
  2417. X/* BL 15 */ { ST_EXP, 1, 15 },
  2418. X/* BM 16 */ { ST_EXP, 1, 16 },
  2419. X/* BN1 17 */ { ST_EXP, 1, 17 },
  2420. X/* BN2 18 */ { ST_EXP, 1, 18 },
  2421. X/* BN3 19 */ { ST_EXP, 1, 19 },
  2422. X/* BN4 20 */ { ST_EXP, 1, 20 },
  2423. X/* BNF 21 */ { ST_EXP, 1, 21 },
  2424. X/* BNQ 22 */ { ST_EXP, 1, 22 },
  2425. X/* BNZ 23 */ { ST_EXP, 1, 23 },
  2426. X/* BPZ 24 */ { ST_EXP, 1, 24 },
  2427. X/* BQ 25 */ { ST_EXP, 1, 25 },
  2428. X/* BR 26 */ { ST_EXP, 1, 26 },
  2429. X/* BXI 27 */ { ST_EXP, 1, 27 },
  2430. X/* BZ 28 */ { ST_EXP, 1, 28 },
  2431. X/* CID 29 */ { ST_INH, 1, 29 },
  2432. X/* CIE 30 */ { ST_INH, 1, 30 },
  2433. X/* DACI 31 */ { ST_IMM, 1, 31 },
  2434. X/* DADC 32 */ { ST_INH, 1, 32 },
  2435. X/* DADD 33 */ { ST_INH, 1, 33 },
  2436. X/* DADI 34 */ { ST_IMM, 1, 34 },
  2437. X/* DBNZ 35 */ { ST_DBNZ, 1, 35 },
  2438. X/* DEC 36 */ { ST_REG, 1, 36 },
  2439. X/* DIS 37 */ { ST_INH, 1, 37 },
  2440. X/* DSAV 38 */ { ST_INH, 1, 38 },
  2441. X/* DSBI 39 */ { ST_IMM, 1, 39 },
  2442. X/* DSM 40 */ { ST_INH, 1, 40 },
  2443. X/* DSMB 41 */ { ST_INH, 1, 41 },
  2444. X/* DSMI 42 */ { ST_IMM, 1, 42 },
  2445. X/* DTC 43 */ { ST_INH, 1, 43 },
  2446. X/* ETQ 44 */ { ST_INH, 1, 44 },
  2447. X/* GEC 45 */ { ST_INH, 1, 45 },
  2448. X/* GHI 46 */ { ST_REG, 1, 46 },
  2449. X/* GLO 47 */ { ST_REG, 1, 47 },
  2450. X/* IDL 48 */ { ST_INH, 1, 48 },
  2451. X/* INC 49 */ { ST_REG, 1, 49 },
  2452. X/* INP 50 */ { ST_IO, 1, 50 },
  2453. X/* IRX 51 */ { ST_INH, 1, 51 },
  2454. X/* LBDF 52 */ { ST_EXP, 1, 52 },
  2455. X/* LBNF 53 */ { ST_EXP, 1, 53 },
  2456. X/* LBNQ 54 */ { ST_EXP, 1, 54 },
  2457. X/* LBNZ 55 */ { ST_EXP, 1, 55 },
  2458. X/* LBQ 56 */ { ST_EXP, 1, 56 },
  2459. X/* LBR 57 */ { ST_EXP, 1, 57 },
  2460. X/* LBZ 58 */ { ST_EXP, 1, 58 },
  2461. X/* LDA 59 */ { ST_REG, 1, 59 },
  2462. X/* LDC 60 */ { ST_INH, 1, 60 },
  2463. X/* LDI 61 */ { ST_IMM, 1, 61 },
  2464. X/* LDN 62 */ { ST_LDN, 1, 62 },
  2465. X/* LDX 63 */ { ST_INH, 1, 63 },
  2466. X/* LDXA 64 */ { ST_INH, 1, 64 },
  2467. X/* LSDF 65 */ { ST_INH, 1, 65 },
  2468. X/* LSIE 66 */ { ST_INH, 1, 66 },
  2469. X/* LSKP 67 */ { ST_INH, 1, 67 },
  2470. X/* LSNF 68 */ { ST_INH, 1, 68 },
  2471. X/* LSNQ 69 */ { ST_INH, 1, 69 },
  2472. X/* LSNZ 70 */ { ST_INH, 1, 70 },
  2473. X/* LSQ 71 */ { ST_INH, 1, 71 },
  2474. X/* LSZ 72 */ { ST_INH, 1, 72 },
  2475. X/* MARK 73 */ { ST_INH, 1, 73 },
  2476. X/* NBR 74 */ { ST_EXP, 1, 74 },
  2477. X/* NLBR 75 */ { ST_EXP, 1, 75 },
  2478. X/* NOP 76 */ { ST_INH, 1, 76 },
  2479. X/* OR 77 */ { ST_INH, 1, 77 },
  2480. X/* ORI 78 */ { ST_IMM, 1, 78 },
  2481. X/* OUT 79 */ { ST_IO, 1, 79 },
  2482. X/* PHI 80 */ { ST_REG, 1, 80 },
  2483. X/* PLO 81 */ { ST_REG, 1, 81 },
  2484. X/* REQ 82 */ { ST_INH, 1, 82 },
  2485. X/* RET 83 */ { ST_INH, 1, 83 },
  2486. X/* RLDI 84 */ { ST_RLDI, 1, 84 },
  2487. X/* RLXA 85 */ { ST_REG, 1, 85 },
  2488. X/* RNX 86 */ { ST_REG, 1, 86 },
  2489. X/* RSHL 87 */ { ST_INH, 1, 87 },
  2490. X/* RSHR 88 */ { ST_INH, 1, 88 },
  2491. X/* RSXD 89 */ { ST_REG, 1, 89 },
  2492. X/* SAV 90 */ { ST_INH, 1, 90 },
  2493. X/* SCAL 91 */ { ST_DBNZ, 1, 91 },
  2494. X/* SCM1 92 */ { ST_INH, 1, 92 },
  2495. X/* SCM2 93 */ { ST_INH, 1, 93 },
  2496. X/* SD 94 */ { ST_INH, 1, 94 },
  2497. X/* SDB 95 */ { ST_INH, 1, 95 },
  2498. X/* SDBI 96 */ { ST_IMM, 1, 96 },
  2499. X/* SDI 97 */ { ST_IMM, 1, 97 },
  2500. X/* SEP 98 */ { ST_REG, 1, 98 },
  2501. X/* SEQ 99 */ { ST_INH, 1, 99 },
  2502. X/* SEX 100 */ { ST_REG, 1, 100 },
  2503. X/* SHL 101 */ { ST_INH, 1, 101 },
  2504. X/* SHLC 102 */ { ST_INH, 1, 102 },
  2505. X/* SHR 103 */ { ST_INH, 1, 103 },
  2506. X/* SHRC 104 */ { ST_INH, 1, 104 },
  2507. X/* SKP 105 */ { ST_INH, 1, 105 },
  2508. X/* SM 106 */ { ST_INH, 1, 106 },
  2509. X/* SMB 107 */ { ST_INH, 1, 107 },
  2510. X/* SMBI 108 */ { ST_IMM, 1, 108 },
  2511. X/* SMI 109 */ { ST_IMM, 1, 109 },
  2512. X/* SPM1 110 */ { ST_INH, 1, 110 },
  2513. X/* SPM2 111 */ { ST_INH, 1, 111 },
  2514. X/* SRET 112 */ { ST_REG, 1, 112 },
  2515. X/* STM 113 */ { ST_INH, 1, 113 },
  2516. X/* STPC 114 */ { ST_INH, 1, 114 },
  2517. X/* STR 115 */ { ST_REG, 1, 115 },
  2518. X/* STXD 116 */ { ST_INH, 1, 116 },
  2519. X/* XID 117 */ { ST_INH, 1, 117 },
  2520. X/* XIE 118 */ { ST_INH, 1, 118 },
  2521. X/* XOR 119 */ { ST_INH, 1, 119 },
  2522. X/* XRI 120 */ { ST_IMM, 1, 120 },
  2523. X    { 0, 0, 0 } };
  2524. X
  2525. Xstruct igel igtab[NUMDIFFOP+1]
  2526. X    = {
  2527. X/* invalid 0 */   { 0 , 0, 
  2528. X        "[Xnullentry" },
  2529. X/* invalid 1 */   { 0 , 0, 
  2530. X        "[Xinvalid opcode" },
  2531. X/* ADC 2 */   { 0 , 0, 
  2532. X        "74;" },
  2533. X/* ADCI 3 */   { 0 , 0, 
  2534. X        "7c;[1=];" },
  2535. X/* ADD 4 */   { 0 , 0, 
  2536. X        "f4;" },
  2537. X/* ADI 5 */   { 0 , 0, 
  2538. X        "fc;[1=];" },
  2539. X/* AND 6 */   { 0 , 0, 
  2540. X        "f2;" },
  2541. X/* ANI 7 */   { 0 , 0, 
  2542. X        "fa;[1=];" },
  2543. X/* B1 8 */   { 0 , 0, 
  2544. X        "34;[1=].Q.ff00&-~.0<T!;" },
  2545. X/* B2 9 */   { 0 , 0, 
  2546. X        "35;[1=].Q.ff00&-~.0<T!;" },
  2547. X/* B3 10 */   { 0 , 0, 
  2548. X        "36;[1=].Q.ff00&-~.0<T!;" },
  2549. X/* B4 11 */   { 0 , 0, 
  2550. X        "37;[1=].Q.ff00&-~.0<T!;" },
  2551. X/* BCI 12 */   { TS1805 , TS1805, 
  2552. X        "68;3e;[1=].Q.ff00&-~.0<T!;" },
  2553. X/* BDF 13 */   { 0 , 0, 
  2554. X        "33;[1=].Q.ff00&-~.0<T!;" },
  2555. X/* BGE 14 */   { 0 , 0, 
  2556. X        "33;[1=].Q.ff00&-~.0<T!;" },
  2557. X/* BL 15 */   { 0 , 0, 
  2558. X        "3b;[1=].Q.ff00&-~.0<T!;" },
  2559. X/* BM 16 */   { 0 , 0, 
  2560. X        "3b;[1=].Q.ff00&-~.0<T!;" },
  2561. X/* BN1 17 */   { 0 , 0, 
  2562. X        "3c;[1=].Q.ff00&-~.0<T!;" },
  2563. X/* BN2 18 */   { 0 , 0, 
  2564. X        "3d;[1=].Q.ff00&-~.0<T!;" },
  2565. X/* BN3 19 */   { 0 , 0, 
  2566. X        "3e;[1=].Q.ff00&-~.0<T!;" },
  2567. X/* BN4 20 */   { 0 , 0, 
  2568. X        "3f;[1=].Q.ff00&-~.0<T!;" },
  2569. X/* BNF 21 */   { 0 , 0, 
  2570. X        "3b;[1=].Q.ff00&-~.0<T!;" },
  2571. X/* BNQ 22 */   { 0 , 0, 
  2572. X        "39;[1=].Q.ff00&-~.0<T!;" },
  2573. X/* BNZ 23 */   { 0 , 0, 
  2574. X        "3a;[1=].Q.ff00&-~.0<T!;" },
  2575. X/* BPZ 24 */   { 0 , 0, 
  2576. X        "33;[1=].Q.ff00&-~.0<T!;" },
  2577. X/* BQ 25 */   { 0 , 0, 
  2578. X        "31;[1=].Q.ff00&-~.0<T!;" },
  2579. X/* BR 26 */   { 0 , 0, 
  2580. X        "30;[1=].Q.ff00&-~.0<T!;" },
  2581. X/* BXI 27 */   { TS1805 , TS1805, 
  2582. X        "68;3f;[1=].Q.ff00&-~.0<T!;" },
  2583. X/* BZ 28 */   { 0 , 0, 
  2584. X        "32;[1=].Q.ff00&-~.0<T!;" },
  2585. X/* CID 29 */   { TS1805 , TS1805, 
  2586. X        "68;0d;" },
  2587. X/* CIE 30 */   { TS1805 , TS1805, 
  2588. X        "68;0c;" },
  2589. X/* DACI 31 */   { TS1805 , TS1805, 
  2590. X        "68;7c;[1=];" },
  2591. X/* DADC 32 */   { TS1805 , TS1805, 
  2592. X        "68;74;" },
  2593. X/* DADD 33 */   { TS1805 , TS1805, 
  2594. X        "68;f4;" },
  2595. X/* DADI 34 */   { TS1805 , TS1805, 
  2596. X        "68;fc;[1=];" },
  2597. X/* DBNZ 35 */   { TS1805 , TS1805, 
  2598. X        "68;20.[1#]|;[2=]x" },
  2599. X/* DEC 36 */   { 0 , 0, 
  2600. X        "20.[1#]|;" },
  2601. X/* DIS 37 */   { 0 , 0, 
  2602. X        "71;" },
  2603. X/* DSAV 38 */   { TS1805 , TS1805, 
  2604. X        "68;76;" },
  2605. X/* DSBI 39 */   { TS1805 , TS1805, 
  2606. X        "68;7f;[1=];" },
  2607. X/* DSM 40 */   { TS1805 , TS1805, 
  2608. X        "68;f7;" },
  2609. X/* DSMB 41 */   { TS1805 , TS1805, 
  2610. X        "68;77;" },
  2611. X/* DSMI 42 */   { TS1805 , TS1805, 
  2612. X        "68;ff;[1=];" },
  2613. X/* DTC 43 */   { TS1805 , TS1805, 
  2614. X        "68;01;" },
  2615. X/* ETQ 44 */   { TS1805 , TS1805, 
  2616. X        "68;09;" },
  2617. X/* GEC 45 */   { TS1805 , TS1805, 
  2618. X        "68;08;" },
  2619. X/* GHI 46 */   { 0 , 0, 
  2620. X        "90.[1#]|;" },
  2621. X/* GLO 47 */   { 0 , 0, 
  2622. X        "80.[1#]|;" },
  2623. X/* IDL 48 */   { 0 , 0, 
  2624. X        "00;" },
  2625. X/* INC 49 */   { 0 , 0, 
  2626. X        "10.[1#]|;" },
  2627. X/* INP 50 */   { 0 , 0, 
  2628. X        "68.[1#]|;" },
  2629. X/* IRX 51 */   { 0 , 0, 
  2630. X        "60;" },
  2631. X/* LBDF 52 */   { 0 , 0, 
  2632. X        "c3;[1=]x" },
  2633. X/* LBNF 53 */   { 0 , 0, 
  2634. X        "cb;[1=]x" },
  2635. X/* LBNQ 54 */   { 0 , 0, 
  2636. X        "c9;[1=]x" },
  2637. X/* LBNZ 55 */   { 0 , 0, 
  2638. X        "ca;[1=]x" },
  2639. X/* LBQ 56 */   { 0 , 0, 
  2640. X        "c1;[1=]x" },
  2641. X/* LBR 57 */   { 0 , 0, 
  2642. X        "c0;[1=]x" },
  2643. X/* LBZ 58 */   { 0 , 0, 
  2644. X        "c2;[1=]x" },
  2645. X/* LDA 59 */   { 0 , 0, 
  2646. X        "40.[1#]|;" },
  2647. X/* LDC 60 */   { TS1805 , TS1805, 
  2648. X        "68;06;" },
  2649. X/* LDI 61 */   { 0 , 0, 
  2650. X        "f8;[1=];" },
  2651. X/* LDN 62 */   { 0 , 0, 
  2652. X        "00.[1#]|;" },
  2653. X/* LDX 63 */   { 0 , 0, 
  2654. X        "f0;" },
  2655. X/* LDXA 64 */   { 0 , 0, 
  2656. X        "72;" },
  2657. X/* LSDF 65 */   { 0 , 0, 
  2658. X        "cf;" },
  2659. X/* LSIE 66 */   { 0 , 0, 
  2660. X        "cc;" },
  2661. X/* LSKP 67 */   { 0 , 0, 
  2662. X        "c8;" },
  2663. X/* LSNF 68 */   { 0 , 0, 
  2664. X        "c7;" },
  2665. X/* LSNQ 69 */   { 0 , 0, 
  2666. X        "c5;" },
  2667. X/* LSNZ 70 */   { 0 , 0, 
  2668. X        "c6;" },
  2669. X/* LSQ 71 */   { 0 , 0, 
  2670. X        "cd;" },
  2671. X/* LSZ 72 */   { 0 , 0, 
  2672. X        "ce;" },
  2673. X/* MARK 73 */   { 0 , 0, 
  2674. X        "79;" },
  2675. X/* NBR 74 */   { 0 , 0, 
  2676. X        "38;[1=].Q.ff00&-~.0<T!;" },
  2677. X/* NLBR 75 */   { 0 , 0, 
  2678. X        "c8;[1=]x" },
  2679. X/* NOP 76 */   { 0 , 0, 
  2680. X        "c4;" },
  2681. X/* OR 77 */   { 0 , 0, 
  2682. X        "f1;" },
  2683. X/* ORI 78 */   { 0 , 0, 
  2684. X        "f9;[1=];" },
  2685. X/* OUT 79 */   { 0 , 0, 
  2686. X        "60.[1#]|;" },
  2687. X/* PHI 80 */   { 0 , 0, 
  2688. X        "b0.[1#]|;" },
  2689. X/* PLO 81 */   { 0 , 0, 
  2690. X        "a0.[1#]|;" },
  2691. X/* REQ 82 */   { 0 , 0, 
  2692. X        "7a;" },
  2693. X/* RET 83 */   { 0 , 0, 
  2694. X        "70;" },
  2695. X/* RLDI 84 */   { TS1805 , TS1805, 
  2696. X        "68;c0.[1#]|;[2=]x" },
  2697. X/* RLXA 85 */   { TS1805 , TS1805, 
  2698. X        "68;60.[1#]|;" },
  2699. X/* RNX 86 */   { TS1805 , TS1805, 
  2700. X        "68;b0.[1#]|;" },
  2701. X/* RSHL 87 */   { 0 , 0, 
  2702. X        "7e;" },
  2703. X/* RSHR 88 */   { 0 , 0, 
  2704. X        "76;" },
  2705. X/* RSXD 89 */   { TS1805 , TS1805, 
  2706. X        "68;a0.[1#]|;" },
  2707. X/* SAV 90 */   { 0 , 0, 
  2708. X        "78;" },
  2709. X/* SCAL 91 */   { TS1805 , TS1805, 
  2710. X        "68;80.[1#]|;[2=]x" },
  2711. X/* SCM1 92 */   { TS1805 , TS1805, 
  2712. X        "68;05;" },
  2713. X/* SCM2 93 */   { TS1805 , TS1805, 
  2714. X        "68;03;" },
  2715. X/* SD 94 */   { 0 , 0, 
  2716. X        "f5;" },
  2717. X/* SDB 95 */   { 0 , 0, 
  2718. X        "75;" },
  2719. X/* SDBI 96 */   { 0 , 0, 
  2720. X        "7d;[1=];" },
  2721. X/* SDI 97 */   { 0 , 0, 
  2722. X        "fd;[1=];" },
  2723. X/* SEP 98 */   { 0 , 0, 
  2724. X        "d0.[1#]|;" },
  2725. X/* SEQ 99 */   { 0 , 0, 
  2726. X        "7b;" },
  2727. X/* SEX 100 */   { 0 , 0, 
  2728. X        "e0.[1#]|;" },
  2729. X/* SHL 101 */   { 0 , 0, 
  2730. X        "fe;" },
  2731. X/* SHLC 102 */   { 0 , 0, 
  2732. X        "7e;" },
  2733. X/* SHR 103 */   { 0 , 0, 
  2734. X        "f6;" },
  2735. X/* SHRC 104 */   { 0 , 0, 
  2736. X        "76;" },
  2737. X/* SKP 105 */   { 0 , 0, 
  2738. X        "38;" },
  2739. X/* SM 106 */   { 0 , 0, 
  2740. X        "f7;" },
  2741. X/* SMB 107 */   { 0 , 0, 
  2742. X        "77;" },
  2743. X/* SMBI 108 */   { 0 , 0, 
  2744. X        "7f;[1=];" },
  2745. X/* SMI 109 */   { 0 , 0, 
  2746. X        "ff;[1=];" },
  2747. X/* SPM1 110 */   { TS1805 , TS1805, 
  2748. X        "68;04;" },
  2749. X/* SPM2 111 */   { TS1805 , TS1805, 
  2750. X        "68;02;" },
  2751. X/* SRET 112 */   { TS1805 , TS1805, 
  2752. X        "68;90.[1#]|;" },
  2753. X/* STM 113 */   { TS1805 , TS1805, 
  2754. X        "68;07;" },
  2755. X/* STPC 114 */   { TS1805 , TS1805, 
  2756. X        "68;00;" },
  2757. X/* STR 115 */   { 0 , 0, 
  2758. X        "50.[1#]|;" },
  2759. X/* STXD 116 */   { 0 , 0, 
  2760. X        "73;" },
  2761. X/* XID 117 */   { TS1805 , TS1805, 
  2762. X        "68;0b;" },
  2763. X/* XIE 118 */   { TS1805 , TS1805, 
  2764. X        "68;0a;" },
  2765. X/* XOR 119 */   { 0 , 0, 
  2766. X        "f3;" },
  2767. X/* XRI 120 */   { 0 , 0, 
  2768. X        "fb;[1=];" },
  2769. X    { 0,0,""} };
  2770. X/* end fraptabdef.c */
  2771. SHAR_EOF
  2772. true || echo 'restore of as1805.y failed'
  2773. fi
  2774. exit 0
  2775.