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

  1. From: markz@ssc.UUCP (Mark Zenier)
  2. Newsgroups: alt.sources
  3. Subject: Frankenstein Cross Assemblers, TI TMS7000 flavor, Part 1 of 1
  4. Message-ID: <617@ssc.UUCP>
  5. Date: 6 Dec 90 07:26:41 GMT
  6.  
  7. ---- Cut Here and feed the following to sh ----
  8. #!/bin/sh
  9. # This is Frankasm/As7000, a shell archive (shar 3.43)
  10. # made 12/04/1990 08:46 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. #    952 -r--r----- as7000.1
  21. #   6878 -r--r----- as7000.doc
  22. #   3991 -r--r----- as7000.tst
  23. #   7347 -r--r----- as7000.tut
  24. #  36162 -r--r--r-- as7000.y
  25. #
  26. # ============= as7000.1 ==============
  27. if test -f 'as7000.1' -a X"$1" != X"-c"; then
  28.     echo 'x - skipping as7000.1 (File already exists)'
  29. else
  30. echo 'x - extracting as7000.1 (Text)'
  31. sed 's/^X//' << 'SHAR_EOF' > 'as7000.1' &&
  32. X.TH AS7000 1L
  33. X.SH NAME
  34. Xas7000 \- cross assembler for microcomputers
  35. X.SH SYNOPSIS
  36. Xas7000 [-p cpu] [-l listfile] [-o hexfile] [-d] [-s symbolfile] input
  37. X.SH DESCRIPTION
  38. XThe as7000 command assembles the input file into a
  39. Xtext output file representing the program memory for a microcomputer.
  40. X
  41. XOptions
  42. X.IP "-p cpu"
  43. XIgnored by this program.
  44. X.IP "-l listfile"
  45. XOutput a file formated with the memory address, data, and source input lines.
  46. X.IP "-o hexfile"
  47. XOutput the memory data image in a form accepted by most prom programmers.
  48. X.IP "-h hexfile"
  49. XSame as \-o.
  50. X.IP \-d
  51. XSave the intermediate data file (see FILE) and abort the execution at the
  52. Xend of processing.
  53. X.IP "-s symbolfile"
  54. XPrint the symbol table values and names, one per line in the specified file.
  55. X.SH FILES
  56. X/usr/tmp/frtXXXXXX
  57. X.SH SEE ALSO
  58. XFrankenstein Cross Assemblers Users Manual (file base.doc)
  59. XAppendix for as7000 Frankenstein Assembler (file as7000.doc)
  60. X.SH NOTES
  61. XThere is only one input file.
  62. SHAR_EOF
  63. true || echo 'restore of as7000.1 failed'
  64. fi
  65. # ============= as7000.doc ==============
  66. if test -f 'as7000.doc' -a X"$1" != X"-c"; then
  67.     echo 'x - skipping as7000.doc (File already exists)'
  68. else
  69. echo 'x - extracting as7000.doc (Text)'
  70. sed 's/^X//' << 'SHAR_EOF' > 'as7000.doc' &&
  71. X.HM A 1 1 1 1 1 1
  72. X.H 1 "Appendix for as7000 Frankenstein Assembler"
  73. X.H 2 "Pseudo Operations"
  74. X.H 3 "Standard Pseudo Operation Mnemonics"
  75. X.VL 40 5 1
  76. X.LI "End"
  77. XEND
  78. X.LI "File Inclusion"
  79. XINCL
  80. XINCLUDE
  81. X.LI "If"
  82. XIF
  83. X.LI "Else"
  84. XELSE
  85. X.LI "End If"
  86. XENDI
  87. X.LI "Equate"
  88. XEQU
  89. X.LI "Set"
  90. XSET
  91. X.LI "Org"
  92. XORG
  93. X.LI "Reserve Memory"
  94. XRESERVE
  95. XRMB
  96. X.LI "Define Byte Data"
  97. XBYTE
  98. XDB
  99. XFCB
  100. X.LI "Define Word Data"
  101. XDW
  102. XFDB
  103. XWORD
  104. X.LI "Define String Data"
  105. XFCC
  106. XSTRING
  107. X.LI "Define Character Set Translation"
  108. XCHARSET
  109. X.LI "Define Character Value"
  110. XCHARDEF
  111. XCHD
  112. X.LI "Use Character Translation"
  113. XCHARUSE
  114. X.LE
  115. X.H 2 "Instructions"
  116. X.H 3 "Differences with the TI defined Syntax"
  117. X.DS
  118. X.TS
  119. X;
  120. Xl l.
  121. XTI syntax    as7000 syntax
  122. X.sp
  123. Xop % immediate , register    op # immediate , register
  124. Xop % immed , register, jump dest    op # immed , register , jump dest
  125. Xop @ label    op label
  126. Xop @ label ( B )    op expr ( B )
  127. Xop *register    op [ register ]
  128. Xmovd % immed ( B ) , register    movd # immed (B), register
  129. X.sp
  130. XConstants
  131. X.sp
  132. X?0101010    %01010101
  133. X>89ab    $89ab
  134. X''''    "'"
  135. X.sp
  136. XComments
  137. X.sp
  138. Xafter the last operand    everything following a semicolon
  139. X.sp
  140. XSymbols
  141. X.sp
  142. XR0-R255    equ with value between 0 and $ff
  143. XR0-R255    0 to 255, Not Recommended !
  144. XP0-P255    equ with value between $100 and $1ff
  145. XP0-P255    256 to 511, Not Recommended !
  146. X.sp
  147. X.TE
  148. X.DE
  149. X.H 3 "Instruction List"
  150. X.TS H
  151. X;
  152. Xl l l.
  153. XOpcode    Syntax    Selection Criteria
  154. X.sp
  155. X.TH
  156. X.sp
  157. XADC     '#' expr ',' expr
  158. XADC     '#' expr ',' expr    DSTA
  159. XADC     '#' expr ',' expr    DSTB
  160. XADC     expr ',' expr
  161. XADC     expr ',' expr    DSTA
  162. XADC     expr ',' expr    DSTB
  163. XADC     expr ',' expr    SRCB DSTA
  164. X.sp
  165. XADD     '#' expr ',' expr
  166. XADD     '#' expr ',' expr    DSTA
  167. XADD     '#' expr ',' expr    DSTB
  168. XADD     expr ',' expr
  169. XADD     expr ',' expr    DSTA
  170. XADD     expr ',' expr    DSTB
  171. XADD     expr ',' expr    SRCB DSTA
  172. X.sp
  173. XAND     '#' expr ',' expr
  174. XAND     '#' expr ',' expr    DSTA
  175. XAND     '#' expr ',' expr    DSTB
  176. XAND     expr ',' expr
  177. XAND     expr ',' expr    DSTA
  178. XAND     expr ',' expr    DSTB
  179. XAND     expr ',' expr    SRCB DSTA
  180. X.sp
  181. XANDP     '#' expr ',' expr
  182. XANDP     expr ',' expr    SRCA
  183. XANDP     expr ',' expr    SRCB
  184. X.sp
  185. XBR     '[' expr ']'
  186. XBR     expr '(' REG ')'    SRCB
  187. XBR     expr
  188. X.sp
  189. XBTJO     '#' expr ',' expr ',' expr
  190. XBTJO     '#' expr ',' expr ',' expr    DSTA
  191. XBTJO     '#' expr ',' expr ',' expr    DSTB
  192. XBTJO     expr ',' expr ',' expr
  193. XBTJO     expr ',' expr ',' expr    DSTA
  194. XBTJO     expr ',' expr ',' expr    DSTB
  195. XBTJO     expr ',' expr ',' expr    SRCB DSTA
  196. X.sp
  197. XBTJOP     '#' expr ',' expr ',' expr
  198. XBTJOP     expr ',' expr ',' expr    SRCA
  199. XBTJOP     expr ',' expr ',' expr    SRCB
  200. X.sp
  201. XBTJZ     '#' expr ',' expr ',' expr
  202. XBTJZ     '#' expr ',' expr ',' expr    DSTA
  203. XBTJZ     '#' expr ',' expr ',' expr    DSTB
  204. XBTJZ     expr ',' expr ',' expr
  205. XBTJZ     expr ',' expr ',' expr    DSTA
  206. XBTJZ     expr ',' expr ',' expr    DSTB
  207. XBTJZ     expr ',' expr ',' expr    SRCB DSTA
  208. X.sp
  209. XBTJZP     '#' expr ',' expr ',' expr
  210. XBTJZP     expr ',' expr ',' expr    SRCA
  211. XBTJZP     expr ',' expr ',' expr    SRCB
  212. X.sp
  213. XCALL     '[' expr ']'
  214. XCALL     expr '(' REG ')'    SRCB
  215. XCALL     expr
  216. X.sp
  217. XCLR     expr
  218. XCLR     expr    DSTA
  219. XCLR     expr    DSTB
  220. X.sp
  221. XCLRC    
  222. X.sp
  223. XCMP     '#' expr ',' expr
  224. XCMP     '#' expr ',' expr    DSTA
  225. XCMP     '#' expr ',' expr    DSTB
  226. XCMP     expr ',' expr
  227. XCMP     expr ',' expr    DSTA
  228. XCMP     expr ',' expr    DSTB
  229. XCMP     expr ',' expr    SRCB DSTA
  230. X.sp
  231. XCMPA     '[' expr ']'
  232. XCMPA     expr '(' REG ')'    SRCB
  233. XCMPA     expr
  234. X.sp
  235. XDAC     '#' expr ',' expr
  236. XDAC     '#' expr ',' expr    DSTA
  237. XDAC     '#' expr ',' expr    DSTB
  238. XDAC     expr ',' expr
  239. XDAC     expr ',' expr    DSTA
  240. XDAC     expr ',' expr    DSTB
  241. XDAC     expr ',' expr    SRCB DSTA
  242. X.sp
  243. XDEC     expr
  244. XDEC     expr    DSTA
  245. XDEC     expr    DSTB
  246. X.sp
  247. XDECD     expr
  248. XDECD     expr    DSTA
  249. XDECD     expr    DSTB
  250. X.sp
  251. XDINT    
  252. X.sp
  253. XDJNZ     expr ',' expr
  254. XDJNZ     expr ',' expr    DSTA
  255. XDJNZ     expr ',' expr    DSTB
  256. X.sp
  257. XDSB     '#' expr ',' expr
  258. XDSB     '#' expr ',' expr    DSTA
  259. XDSB     '#' expr ',' expr    DSTB
  260. XDSB     expr ',' expr
  261. XDSB     expr ',' expr    DSTA
  262. XDSB     expr ',' expr    DSTB
  263. XDSB     expr ',' expr    SRCB DSTA
  264. X.sp
  265. XEINT    
  266. X.sp
  267. XIDLE    
  268. X.sp
  269. XINC     expr
  270. XINC     expr    DSTA
  271. XINC     expr    DSTB
  272. X.sp
  273. XINV     expr
  274. XINV     expr    DSTA
  275. XINV     expr    DSTB
  276. X.sp
  277. XJC     expr
  278. X.sp
  279. XJEQ     expr
  280. X.sp
  281. XJGE     expr
  282. X.sp
  283. XJGT     expr
  284. X.sp
  285. XJHS     expr
  286. X.sp
  287. XJL     expr
  288. X.sp
  289. XJLT     expr
  290. X.sp
  291. XJMP     expr
  292. X.sp
  293. XJN     expr
  294. X.sp
  295. XJNC     expr
  296. X.sp
  297. XJNE     expr
  298. X.sp
  299. XJNZ     expr
  300. X.sp
  301. XJP     expr
  302. X.sp
  303. XJPZ     expr
  304. X.sp
  305. XJZ     expr
  306. X.sp
  307. XLDA     '[' expr ']'
  308. XLDA     expr '(' REG ')'    SRCB
  309. XLDA     expr
  310. X.sp
  311. XLDSP    
  312. X.sp
  313. XMOV     '#' expr ',' expr
  314. XMOV     '#' expr ',' expr    DSTA
  315. XMOV     '#' expr ',' expr    DSTB
  316. XMOV     expr ',' expr
  317. XMOV     expr ',' expr    DSTA
  318. XMOV     expr ',' expr    DSTB
  319. XMOV     expr ',' expr    SRCA
  320. XMOV     expr ',' expr    SRCA DSTB
  321. XMOV     expr ',' expr    SRCB
  322. XMOV     expr ',' expr    SRCB DSTA
  323. X.sp
  324. XMOVD     '#' expr '(' REG ')' ',' expr
  325. XMOVD     '#' expr ',' expr
  326. XMOVD     expr ',' expr
  327. X.sp
  328. XMOVP     '#' expr ',' expr
  329. XMOVP     expr ',' expr    DSTA
  330. XMOVP     expr ',' expr    DSTB
  331. XMOVP     expr ',' expr    SRCA
  332. XMOVP     expr ',' expr    SRCB
  333. X.sp
  334. XMPY     '#' expr ',' expr
  335. XMPY     '#' expr ',' expr    DSTA
  336. XMPY     '#' expr ',' expr    DSTB
  337. XMPY     expr ',' expr
  338. XMPY     expr ',' expr    DSTA
  339. XMPY     expr ',' expr    DSTB
  340. XMPY     expr ',' expr    SRCB DSTA
  341. X.sp
  342. XNOP    
  343. X.sp
  344. XOR     '#' expr ',' expr
  345. XOR     '#' expr ',' expr    DSTA
  346. XOR     '#' expr ',' expr    DSTB
  347. XOR     expr ',' expr
  348. XOR     expr ',' expr    DSTA
  349. XOR     expr ',' expr    DSTB
  350. XOR     expr ',' expr    SRCB DSTA
  351. X.sp
  352. XORP     '#' expr ',' expr
  353. XORP     expr ',' expr    SRCA
  354. XORP     expr ',' expr    SRCB
  355. X.sp
  356. XPOP      STATUS
  357. XPOP     expr
  358. XPOP     expr    DSTA
  359. XPOP     expr    DSTB
  360. X.sp
  361. XPUSH      STATUS
  362. XPUSH     expr
  363. XPUSH     expr    DSTA
  364. XPUSH     expr    DSTB
  365. X.sp
  366. XRETI    
  367. X.sp
  368. XRETS    
  369. X.sp
  370. XRL     expr
  371. XRL     expr    DSTA
  372. XRL     expr    DSTB
  373. X.sp
  374. XRLC     expr
  375. XRLC     expr    DSTA
  376. XRLC     expr    DSTB
  377. X.sp
  378. XRR     expr
  379. XRR     expr    DSTA
  380. XRR     expr    DSTB
  381. X.sp
  382. XRRC     expr
  383. XRRC     expr    DSTA
  384. XRRC     expr    DSTB
  385. X.sp
  386. XSBB     '#' expr ',' expr
  387. XSBB     '#' expr ',' expr    DSTA
  388. XSBB     '#' expr ',' expr    DSTB
  389. XSBB     expr ',' expr
  390. XSBB     expr ',' expr    DSTA
  391. XSBB     expr ',' expr    DSTB
  392. XSBB     expr ',' expr    SRCB DSTA
  393. X.sp
  394. XSETC    
  395. X.sp
  396. XSTA     '[' expr ']'
  397. XSTA     expr '(' REG ')'    SRCB
  398. XSTA     expr
  399. X.sp
  400. XSTSP    
  401. X.sp
  402. XSUB     '#' expr ',' expr
  403. XSUB     '#' expr ',' expr    DSTA
  404. XSUB     '#' expr ',' expr    DSTB
  405. XSUB     expr ',' expr
  406. XSUB     expr ',' expr    DSTA
  407. XSUB     expr ',' expr    DSTB
  408. XSUB     expr ',' expr    SRCB DSTA
  409. X.sp
  410. XSWAP     expr
  411. XSWAP     expr    DSTA
  412. XSWAP     expr    DSTB
  413. X.sp
  414. XTRAP     expr
  415. X.sp
  416. XTSTA    
  417. X.sp
  418. XTSTB    
  419. X.sp
  420. XXCHB     expr
  421. XXCHB     expr    DSTA
  422. XXCHB     expr    DSTB
  423. X.sp
  424. XXOR     '#' expr ',' expr
  425. XXOR     '#' expr ',' expr    DSTA
  426. XXOR     '#' expr ',' expr    DSTB
  427. XXOR     expr ',' expr
  428. XXOR     expr ',' expr    DSTA
  429. XXOR     expr ',' expr    DSTB
  430. XXOR     expr ',' expr    SRCB DSTA
  431. X.sp
  432. XXORP     '#' expr ',' expr
  433. XXORP     expr ',' expr    SRCA
  434. XXORP     expr ',' expr    SRCB
  435. X.TE
  436. X.H 3 "Selection Criteria Keywords"
  437. X.VL 25 5 
  438. X.LI DSTA
  439. XThe instruction will use a short form if the A register is used as the 
  440. Xdestination register.
  441. X.LI DSTB
  442. XThe instruction will use a short form if the B register is used as the 
  443. Xdestination register.
  444. X.LI SRCA
  445. XThe instruction will use a short form if the A register is used as the 
  446. Xsource register.
  447. X.LI SRCB
  448. XThe instruction will use a short form if the B register is used as the 
  449. Xsource register.
  450. X.LE
  451. X.H 3 "Apostrophes"
  452. XThe apostrophes in the syntax field are a notation used for the
  453. Xparser generator and are not put in the assembler source statement.
  454. X.H 2 "Notes"
  455. X.H 3 "Reserved Symbols"
  456. X.H 4 "Machine Dependent Reserved Symbols"
  457. XA
  458. XB
  459. XST
  460. Xa
  461. Xb
  462. Xst
  463. X.H 4 "Standard Reserved Symbols"
  464. XAND
  465. XDEFINED
  466. XEQ
  467. XGE
  468. XGT
  469. XHIGH
  470. XLE
  471. XLOW
  472. XLT
  473. XMOD
  474. XNE
  475. XNOT
  476. XOR
  477. XSHL
  478. XSHR
  479. XXOR
  480. Xand
  481. Xdefined
  482. Xeq
  483. Xge
  484. Xgt
  485. Xhigh
  486. Xle
  487. Xlow
  488. Xlt
  489. Xmod
  490. Xne
  491. Xnot
  492. Xor
  493. Xshl
  494. Xshr
  495. Xxor
  496. X.TC 1 1 7
  497. SHAR_EOF
  498. true || echo 'restore of as7000.doc failed'
  499. fi
  500. # ============= as7000.tst ==============
  501. if test -f 'as7000.tst' -a X"$1" != X"-c"; then
  502.     echo 'x - skipping as7000.tst (File already exists)'
  503. else
  504. echo 'x - extracting as7000.tst (Text)'
  505. sed 's/^X//' << 'SHAR_EOF' > 'as7000.tst' &&
  506. Ximm    equ    $55
  507. Xlabel    equ    $3456
  508. Xport    equ    $102
  509. Xrd    equ    $78
  510. Xrs    equ    $34
  511. X    adc    b,a
  512. X    adc    rs,a
  513. X    adc    rs,b
  514. X    adc    rs,rd
  515. X    adc   #imm,a
  516. X    adc   #imm,b
  517. X    adc   #imm,rd
  518. X    add    b,a
  519. X    add    rs,a
  520. X    add    rs,b
  521. X    add    rs,rd
  522. X    add   #imm,a
  523. X    add   #imm,b
  524. X    add   #imm,rd
  525. X    and    b,a
  526. X    and    rs,a
  527. X    and    rs,b
  528. X    and    rs,rd
  529. X    and   #imm,a
  530. X    and   #imm,b
  531. X    and   #imm,rd
  532. X    andp    a,port
  533. X    andp    b,port
  534. X    andp   #imm,port
  535. X    br    label
  536. X    br    label(b)
  537. X    br    [rs]
  538. X    btjo    b,a,jmpdst
  539. X    btjo    rs,a,jmpdst
  540. X    btjo    rs,b,jmpdst
  541. X    btjo    rs,rd,jmpdst
  542. X    btjo   #imm,a,jmpdst
  543. X    btjo   #imm,b,jmpdst
  544. X    btjo   #imm,rd,jmpdst
  545. X    btjop    a,port,jmpdst
  546. X    btjop    b,port,jmpdst
  547. X    btjop   #imm,port,jmpdst
  548. X    btjz    b,a,jmpdst
  549. X    btjz    rs,a,jmpdst
  550. X    btjz    rs,b,jmpdst
  551. X    btjz    rs,rd,jmpdst
  552. X    btjz   #imm,a,jmpdst
  553. X    btjz   #imm,b,jmpdst
  554. X    btjz   #imm,rd,jmpdst
  555. X    btjzp    a,port,jmpdst
  556. X    btjzp    b,port,jmpdst
  557. X    btjzp   #imm,port,jmpdst
  558. X    call    label
  559. X    call    label(b)
  560. X    call    [rs]
  561. X    clr    a
  562. X    clr    b
  563. X    clr    rd
  564. X    clrc
  565. X    cmp    b,a
  566. X    cmp    rs,a
  567. X    cmp    rs,b
  568. X    cmp    rs,rd
  569. X    cmp   #imm,a
  570. X    cmp   #imm,b
  571. X    cmp   #imm,rd
  572. X    cmpa    label
  573. X    cmpa    label(b)
  574. X    cmpa    [rs]
  575. X    dac    b,a
  576. X    dac    rs,a
  577. X    dac    rs,b
  578. Xjmpdst    dac    rs,rd
  579. X    dac   #imm,a
  580. X    dac   #imm,b
  581. X    dac   #imm,rd
  582. X    dec    a
  583. X    dec    b
  584. X    dec    rd
  585. X    decd    a
  586. X    decd    b
  587. X    decd    rd
  588. X    dint
  589. X    djnz    a,jmpdst
  590. X    djnz    b,jmpdst
  591. X    djnz    rd,jmpdst
  592. X    dsb    b,a
  593. X    dsb    rs,a
  594. X    dsb    rs,b
  595. X    dsb    rs,rd
  596. X    dsb   #imm,a
  597. X    dsb   #imm,b
  598. X    dsb   #imm,rd
  599. X    eint
  600. X    idle
  601. X    inc    a
  602. X    inc    b
  603. X    inc    rd
  604. X    inv    a
  605. X    inv    b
  606. X    inv    rd
  607. X    jc    jmpdst
  608. X    jeq    jmpdst
  609. X    jge    jmpdst
  610. X    jgt    jmpdst
  611. X    jhs    jmpdst
  612. X    jl    jmpdst
  613. X    jlt    jmpdst
  614. X    jmp    jmpdst
  615. X    jn    jmpdst
  616. X    jnc    jmpdst
  617. X    jne    jmpdst
  618. X    jnz    jmpdst
  619. X    jp    jmpdst
  620. X    jpz    jmpdst
  621. X    jz    jmpdst
  622. X    lda    label
  623. X    lda    label(b)
  624. X    lda    [rs]
  625. X    ldsp
  626. X    mov    a,b
  627. X    mov    a,rd
  628. X    mov    b,a
  629. X    mov    b,rd
  630. X    mov    rs,a
  631. X    mov    rs,b
  632. X    mov    rs,rd
  633. X    mov   #imm,a
  634. X    mov   #imm,b
  635. X    mov   #imm,rd
  636. X    movd    rs,rd
  637. X    movd   #imm(b),rd
  638. X    movd   #imm,rd
  639. X    movp    a,port
  640. X    movp    b,port
  641. X    movp    port,a
  642. X    movp    port,b
  643. X    movp   #imm,port
  644. X    mpy    b,a
  645. X    mpy    rs,a
  646. X    mpy    rs,b
  647. X    mpy    rs,rd
  648. X    mpy   #imm,a
  649. X    mpy   #imm,b
  650. X    mpy   #imm,rd
  651. X    nop
  652. X    or    b,a
  653. X    or    rs,a
  654. X    or    rs,b
  655. X    or    rs,rd
  656. X    or   #imm,a
  657. X    or   #imm,b
  658. X    or   #imm,rd
  659. X    orp    a,port
  660. X    orp    b,port
  661. X    orp   #imm,port
  662. X    pop    a
  663. X    pop    b
  664. X    pop    rd
  665. X    pop    st
  666. X    push    a
  667. X    push    b
  668. X    push    rd
  669. X    push    st
  670. X    reti
  671. X    rets
  672. X    rl    a
  673. X    rl    b
  674. X    rl    rd
  675. X    rlc    a
  676. X    rlc    b
  677. X    rlc    rd
  678. X    rr    a
  679. X    rr    b
  680. X    rr    rd
  681. X    rrc    a
  682. X    rrc    b
  683. X    rrc    rd
  684. X    sbb    b,a
  685. X    sbb    rs,a
  686. X    sbb    rs,b
  687. X    sbb    rs,rd
  688. X    sbb   #imm,a
  689. X    sbb   #imm,b
  690. X    sbb   #imm,rd
  691. X    setc
  692. X    sta    label
  693. X    sta    label(b)
  694. X    sta    [rs]
  695. X    stsp
  696. X    sub    b,a
  697. X    sub    rs,a
  698. X    sub    rs,b
  699. X    sub    rs,rd
  700. X    sub   #imm,a
  701. X    sub   #imm,b
  702. X    sub   #imm,rd
  703. X    swap    a
  704. X    swap    b
  705. X    swap    rd
  706. X    trap    00
  707. X    trap    01
  708. X    trap    02
  709. X    trap    03
  710. X    trap    04
  711. X    trap    05
  712. X    trap    06
  713. X    trap    07
  714. X    trap    08
  715. X    trap    09
  716. X    trap    10
  717. X    trap    11
  718. X    trap    12
  719. X    trap    13
  720. X    trap    14
  721. X    trap    15
  722. X    trap    16
  723. X    trap    17
  724. X    trap    18
  725. X    trap    19
  726. X    trap    20
  727. X    trap    21
  728. X    trap    22
  729. X    trap    23
  730. X    tsta
  731. X    tstb
  732. X    xchb    a
  733. X    xchb    b
  734. X    xchb    rd
  735. X    xor    b,a
  736. X    xor    rs,a
  737. X    xor    rs,b
  738. X    xor    rs,rd
  739. X    xor   #imm,a
  740. X    xor   #imm,b
  741. X    xor   #imm,rd
  742. X    xorp    a,port
  743. X    xorp    b,port
  744. X    xorp   #imm,port
  745. SHAR_EOF
  746. true || echo 'restore of as7000.tst failed'
  747. fi
  748. # ============= as7000.tut ==============
  749. if test -f 'as7000.tut' -a X"$1" != X"-c"; then
  750.     echo 'x - skipping as7000.tut (File already exists)'
  751. else
  752. echo 'x - extracting as7000.tut (Text)'
  753. sed 's/^X//' << 'SHAR_EOF' > 'as7000.tut' &&
  754. X00000055 imm              00003456 label            00000102 port             
  755. X00000078 rd               00000034 rs               000000a5 jmpdst           
  756. X  0x55                   imm    equ    $55
  757. X 0x3456                 label    equ    $3456
  758. X 0x102                  port    equ    $102
  759. X 0x78                   rd    equ    $78
  760. X 0x34                   rs    equ    $34
  761. X0000 69             adc    b,a
  762. X0001 19 34             adc    rs,a
  763. X0003 39 34             adc    rs,b
  764. X0005 49 34 78             adc    rs,rd
  765. X0008 29 55             adc   #imm,a
  766. X000a 59 55             adc   #imm,b
  767. X000c 79 55 78             adc   #imm,rd
  768. X000f 68             add    b,a
  769. X0010 18 34             add    rs,a
  770. X0012 38 34             add    rs,b
  771. X0014 48 34 78             add    rs,rd
  772. X0017 28 55             add   #imm,a
  773. X0019 58 55             add   #imm,b
  774. X001b 78 55 78             add   #imm,rd
  775. X001e 63             and    b,a
  776. X001f 13 34             and    rs,a
  777. X0021 33 34             and    rs,b
  778. X0023 43 34 78             and    rs,rd
  779. X0026 23 55             and   #imm,a
  780. X0028 53 55             and   #imm,b
  781. X002a 73 55 78             and   #imm,rd
  782. X002d 83 02             andp    a,port
  783. X002f 93 02             andp    b,port
  784. X0031 a3 55 02             andp   #imm,port
  785. X0034 8c 34 56             br    label
  786. X0037 ac 34 56             br    label(b)
  787. X003a 9c 34             br    [rs]
  788. X003c 66 67             btjo    b,a,jmpdst
  789. X003e 16 34 64             btjo    rs,a,jmpdst
  790. X0041 36 34 61             btjo    rs,b,jmpdst
  791. X0044 46 34 78 5d         btjo    rs,rd,jmpdst
  792. X0048 26 55 5a             btjo   #imm,a,jmpdst
  793. X004b 56 55 57             btjo   #imm,b,jmpdst
  794. X004e 76 55 78 53         btjo   #imm,rd,jmpdst
  795. X0052 86 02 50             btjop    a,port,jmpdst
  796. X0055 96 02 4d             btjop    b,port,jmpdst
  797. X0058 a6 55 02 49         btjop   #imm,port,jmpdst
  798. X005c 67 47             btjz    b,a,jmpdst
  799. X005e 17 34 44             btjz    rs,a,jmpdst
  800. X0061 37 34 41             btjz    rs,b,jmpdst
  801. X0064 47 34 78 3d         btjz    rs,rd,jmpdst
  802. X0068 27 55 3a             btjz   #imm,a,jmpdst
  803. X006b 57 55 37             btjz   #imm,b,jmpdst
  804. X006e 77 55 78 33         btjz   #imm,rd,jmpdst
  805. X0072 87 02 30             btjzp    a,port,jmpdst
  806. X0075 97 02 2d             btjzp    b,port,jmpdst
  807. X0078 a7 55 02 29         btjzp   #imm,port,jmpdst
  808. X007c 8e 34 56             call    label
  809. X007f ae 34 56             call    label(b)
  810. X0082 9e 34             call    [rs]
  811. X0084 b5             clr    a
  812. X0085 c5             clr    b
  813. X0086 d5 78             clr    rd
  814. X0088 b0             clrc
  815. X0089 6d             cmp    b,a
  816. X008a 1d 34             cmp    rs,a
  817. X008c 3d 34             cmp    rs,b
  818. X008e 4d 34 78             cmp    rs,rd
  819. X0091 2d 55             cmp   #imm,a
  820. X0093 5d 55             cmp   #imm,b
  821. X0095 7d 55 78             cmp   #imm,rd
  822. X0098 8d 34 56             cmpa    label
  823. X009b ad 34 56             cmpa    label(b)
  824. X009e 9d 34             cmpa    [rs]
  825. X00a0 6e             dac    b,a
  826. X00a1 1e 34             dac    rs,a
  827. X00a3 3e 34             dac    rs,b
  828. X00a5 4e 34 78         jmpdst    dac    rs,rd
  829. X00a8 2e 55             dac   #imm,a
  830. X00aa 5e 55             dac   #imm,b
  831. X00ac 7e 55 78             dac   #imm,rd
  832. X00af b2             dec    a
  833. X00b0 c2             dec    b
  834. X00b1 d2 78             dec    rd
  835. X00b3 bb             decd    a
  836. X00b4 cb             decd    b
  837. X00b5 db 78             decd    rd
  838. X00b7 06             dint
  839. X00b8 ba eb             djnz    a,jmpdst
  840. X00ba ca e9             djnz    b,jmpdst
  841. X00bc da 78 e6             djnz    rd,jmpdst
  842. X00bf 6f             dsb    b,a
  843. X00c0 1f 34             dsb    rs,a
  844. X00c2 3f 34             dsb    rs,b
  845. X00c4 4f 34 78             dsb    rs,rd
  846. X00c7 2f 55             dsb   #imm,a
  847. X00c9 5f 55             dsb   #imm,b
  848. X00cb 7f 55 78             dsb   #imm,rd
  849. X00ce 05             eint
  850. X00cf 01             idle
  851. X00d0 b3             inc    a
  852. X00d1 c3             inc    b
  853. X00d2 d3 78             inc    rd
  854. X00d4 b4             inv    a
  855. X00d5 c4             inv    b
  856. X00d6 d4 78             inv    rd
  857. X00d8 e3 cb             jc    jmpdst
  858. X00da e2 c9             jeq    jmpdst
  859. X00dc e5 c7             jge    jmpdst
  860. X00de e4 c5             jgt    jmpdst
  861. X00e0 e3 c3             jhs    jmpdst
  862. X00e2 e7 c1             jl    jmpdst
  863. X00e4 e1 bf             jlt    jmpdst
  864. X00e6 e0 bd             jmp    jmpdst
  865. X00e8 e1 bb             jn    jmpdst
  866. X00ea e7 b9             jnc    jmpdst
  867. X00ec e6 b7             jne    jmpdst
  868. X00ee e6 b5             jnz    jmpdst
  869. X00f0 e4 b3             jp    jmpdst
  870. X00f2 e5 b1             jpz    jmpdst
  871. X00f4 e2 af             jz    jmpdst
  872. X00f6 8a 34 56             lda    label
  873. X00f9 aa 34 56             lda    label(b)
  874. X00fc 9a 34             lda    [rs]
  875. X00fe 0d             ldsp
  876. X00ff c0             mov    a,b
  877. X0100 d0 78             mov    a,rd
  878. X0102 62             mov    b,a
  879. X0103 d1 78             mov    b,rd
  880. X0105 12 34             mov    rs,a
  881. X0107 32 34             mov    rs,b
  882. X0109 42 34 78             mov    rs,rd
  883. X010c 22 55             mov   #imm,a
  884. X010e 52 55             mov   #imm,b
  885. X0110 72 55 78             mov   #imm,rd
  886. X0113 98 34 78             movd    rs,rd
  887. X0116 a8 00 55 78         movd   #imm(b),rd
  888. X011a 88 00 55 78         movd   #imm,rd
  889. X011e 82 02             movp    a,port
  890. X0120 92 02             movp    b,port
  891. X0122 80 02             movp    port,a
  892. X0124 91 02             movp    port,b
  893. X0126 a2 55 02             movp   #imm,port
  894. X0129 6c             mpy    b,a
  895. X012a 1c 34             mpy    rs,a
  896. X012c 3c 34             mpy    rs,b
  897. X012e 4c 34 78             mpy    rs,rd
  898. X0131 2c 55             mpy   #imm,a
  899. X0133 5c 55             mpy   #imm,b
  900. X0135 7c 55 78             mpy   #imm,rd
  901. X0138 00             nop
  902. X0139 64             or    b,a
  903. X013a 14 34             or    rs,a
  904. X013c 34 34             or    rs,b
  905. X013e 44 34 78             or    rs,rd
  906. X0141 24 55             or   #imm,a
  907. X0143 54 55             or   #imm,b
  908. X0145 74 55 78             or   #imm,rd
  909. X0148 84 02             orp    a,port
  910. X014a 94 02             orp    b,port
  911. X014c a4 55 02             orp   #imm,port
  912. X014f b9             pop    a
  913. X0150 c9             pop    b
  914. X0151 d9 78             pop    rd
  915. X0153 08             pop    st
  916. X0154 b8             push    a
  917. X0155 c8             push    b
  918. X0156 d8 78             push    rd
  919. X0158 0e             push    st
  920. X0159 0b             reti
  921. X015a 0a             rets
  922. X015b be             rl    a
  923. X015c ce             rl    b
  924. X015d de 78             rl    rd
  925. X015f bf             rlc    a
  926. X0160 cf             rlc    b
  927. X0161 df 78             rlc    rd
  928. X0163 bc             rr    a
  929. X0164 cc             rr    b
  930. X0165 dc 78             rr    rd
  931. X0167 bd             rrc    a
  932. X0168 cd             rrc    b
  933. X0169 dd 78             rrc    rd
  934. X016b 6b             sbb    b,a
  935. X016c 1b 34             sbb    rs,a
  936. X016e 3b 34             sbb    rs,b
  937. X0170 4b 34 78             sbb    rs,rd
  938. X0173 2b 55             sbb   #imm,a
  939. X0175 5b 55             sbb   #imm,b
  940. X0177 7b 55 78             sbb   #imm,rd
  941. X017a 07             setc
  942. X017b 8b 34 56             sta    label
  943. X017e ab 34 56             sta    label(b)
  944. X0181 9b 34             sta    [rs]
  945. X0183 09             stsp
  946. X0184 6a             sub    b,a
  947. X0185 1a 34             sub    rs,a
  948. X0187 3a 34             sub    rs,b
  949. X0189 4a 34 78             sub    rs,rd
  950. X018c 2a 55             sub   #imm,a
  951. X018e 5a 55             sub   #imm,b
  952. X0190 7a 55 78             sub   #imm,rd
  953. X0193 b7             swap    a
  954. X0194 c7             swap    b
  955. X0195 d7 78             swap    rd
  956. X0197 ff             trap    00
  957. X0198 fe             trap    01
  958. X0199 fd             trap    02
  959. X019a fc             trap    03
  960. X019b fb             trap    04
  961. X019c fa             trap    05
  962. X019d f9             trap    06
  963. X019e f8             trap    07
  964. X019f f7             trap    08
  965. X01a0 f6             trap    09
  966. X01a1 f5             trap    10
  967. X01a2 f4             trap    11
  968. X01a3 f3             trap    12
  969. X01a4 f2             trap    13
  970. X01a5 f1             trap    14
  971. X01a6 f0             trap    15
  972. X01a7 ef             trap    16
  973. X01a8 ee             trap    17
  974. X01a9 ed             trap    18
  975. X01aa ec             trap    19
  976. X01ab eb             trap    20
  977. X01ac ea             trap    21
  978. X01ad e9             trap    22
  979. X01ae e8             trap    23
  980. X01af b0             tsta
  981. X01b0 c1             tstb
  982. X01b1 b6             xchb    a
  983. X01b2 c6             xchb    b
  984. X01b3 d6 78             xchb    rd
  985. X01b5 65             xor    b,a
  986. X01b6 15 34             xor    rs,a
  987. X01b8 35 34             xor    rs,b
  988. X01ba 45 34 78             xor    rs,rd
  989. X01bd 25 55             xor   #imm,a
  990. X01bf 55 55             xor   #imm,b
  991. X01c1 75 55 78             xor   #imm,rd
  992. X01c4 85 02             xorp    a,port
  993. X01c6 95 02             xorp    b,port
  994. X01c8 a5 55 02             xorp   #imm,port
  995. X ERROR SUMMARY - ERRORS DETECTED 0
  996. X               -  WARNINGS       0
  997. SHAR_EOF
  998. true || echo 'restore of as7000.tut failed'
  999. fi
  1000. # ============= as7000.y ==============
  1001. if test -f 'as7000.y' -a X"$1" != X"-c"; then
  1002.     echo 'x - skipping as7000.y (File already exists)'
  1003. else
  1004. echo 'x - extracting as7000.y (Text)'
  1005. sed 's/^X//' << 'SHAR_EOF' > 'as7000.y' &&
  1006. X%{
  1007. X
  1008. X/*
  1009. XHEADER:     ;
  1010. XTITLE:         Frankenstein Cross Assemblers;
  1011. XVERSION:     2.0;
  1012. XDESCRIPTION: "    Reconfigurable Cross-assembler producing Intel (TM)
  1013. X        Hex format object records.  ";
  1014. XKEYWORDS:     cross-assemblers, 1805, 2650, 6301, 6502, 6805, 6809, 
  1015. X        6811, tms7000, 8048, 8051, 8096, z8, z80;
  1016. XSYSTEM:     UNIX, MS-Dos ;
  1017. XFILENAME:     as7000.y;
  1018. XWARNINGS:     "The language defined in this file does
  1019. X        not follow the standard Texas Instruments syntax.
  1020. X
  1021. X        This software is in the public domain.  
  1022. X        Any prior copyright claims are relinquished.  
  1023. X
  1024. X        This software is distributed with no warranty whatever.  
  1025. X        The author takes no responsibility for the consequences 
  1026. X        of its use.
  1027. X
  1028. X        Yacc (or Bison) required to compile."  ;
  1029. XSEE-ALSO:     as7000.doc,frasmain.c;    
  1030. XAUTHORS:     Mark Zenier;
  1031. XCOMPILERS:     Microport Sys V/AT, ATT Yacc, Turbo C V1.5, Bison (CUG disk 285)
  1032. X        (previous versions Xenix, Unisoft 68000 Version 7, Sun 3);
  1033. X*/
  1034. X/* TMS7000 instruction generation file */
  1035. X/* November 17, 1990 */
  1036. X
  1037. X/*
  1038. X    description    frame work parser description for framework cross
  1039. X            assemblers
  1040. X    history        February 2, 1988
  1041. X            September 11, 1990 - merge table definition
  1042. X            September 12, 1990 - short file names
  1043. X            September 14, 1990 - short variable names
  1044. X            September 17, 1990 - use yylex as external
  1045. X*/
  1046. X#include <stdio.h>
  1047. X#include "frasmdat.h"
  1048. X#include "fragcon.h"
  1049. X
  1050. X#define yylex lexintercept
  1051. X
  1052. X /*    0000.0000.0000.00xx */
  1053. X#define    DSTMASK        0x3
  1054. X#define    DSTA        0x1
  1055. X#define    DSTB        0x2
  1056. X /*     0000.0000.0000.xx00 */
  1057. X#define    SRCMASK        0xc
  1058. X#define    SRCA        0x4
  1059. X#define    SRCB        0x8
  1060. X#define ST_INH 0x1
  1061. X#define ST_EXPR 0x2
  1062. X#define ST_EXPR2 0x4
  1063. X#define ST_EXPR3 0x8
  1064. X#define ST_IEXPR2 0x10
  1065. X#define ST_IEXPR3 0x20
  1066. X#define ST_INDEX 0x40
  1067. X#define ST_IMMIND 0x80
  1068. X#define ST_RINDIR 0x100
  1069. X#define ST_STATUS 0x200
  1070. X    
  1071. X    static int operselbits;
  1072. X    static char    genbdef[] = "[1=];";
  1073. X    static char    genwdef[] = "[1=]x"; /* x for normal, y for byte rev */
  1074. X    char ignosyn[] = "[Xinvalid syntax for instruction";
  1075. X    char ignosel[] = "[Xinvalid operands/illegal instruction for cpu";
  1076. X
  1077. X    long    labelloc;
  1078. X    static int satsub;
  1079. X    int    ifstkpt = 0;
  1080. X    int    fraifskip = FALSE;
  1081. X
  1082. X    struct symel * endsymbol = SYMNULL;
  1083. X
  1084. X%}
  1085. X%union {
  1086. X    int    intv;
  1087. X    long     longv;
  1088. X    char    *strng;
  1089. X    struct symel *symb;
  1090. X}
  1091. X
  1092. X%token STATUS
  1093. X%token <intv> REG
  1094. X%token <intv> KOC_BDEF
  1095. X%token <intv> KOC_ELSE
  1096. X%token <intv> KOC_END
  1097. X%token <intv> KOC_ENDI
  1098. X%token <intv> KOC_EQU
  1099. X%token <intv> KOC_IF
  1100. X%token <intv> KOC_INCLUDE
  1101. X%token <intv> KOC_ORG
  1102. X%token <intv> KOC_RESM
  1103. X%token <intv> KOC_SDEF
  1104. X%token <intv> KOC_SET
  1105. X%token <intv> KOC_WDEF
  1106. X%token <intv> KOC_CHSET
  1107. X%token <intv> KOC_CHDEF
  1108. X%token <intv> KOC_CHUSE
  1109. X%token <intv> KOC_opcode
  1110. X
  1111. X%token <longv> CONSTANT
  1112. X%token EOL
  1113. X%token KEOP_AND
  1114. X%token KEOP_DEFINED
  1115. X%token KEOP_EQ
  1116. X%token KEOP_GE
  1117. X%token KEOP_GT
  1118. X%token KEOP_HIGH
  1119. X%token KEOP_LE
  1120. X%token KEOP_LOW
  1121. X%token KEOP_LT
  1122. X%token KEOP_MOD
  1123. X%token KEOP_MUN
  1124. X%token KEOP_NE
  1125. X%token KEOP_NOT
  1126. X%token KEOP_OR
  1127. X%token KEOP_SHL
  1128. X%token KEOP_SHR
  1129. X%token KEOP_XOR
  1130. X%token KEOP_locctr
  1131. X%token <symb> LABEL
  1132. X%token <strng> STRING
  1133. X%token <symb> SYMBOL
  1134. X
  1135. X%token KTK_invalid
  1136. X
  1137. X%right    KEOP_HIGH KEOP_LOW
  1138. X%left    KEOP_OR KEOP_XOR
  1139. X%left    KEOP_AND
  1140. X%right    KEOP_NOT
  1141. X%nonassoc    KEOP_GT KEOP_GE KEOP_LE KEOP_LT KEOP_NE KEOP_EQ
  1142. X%left    '+' '-'
  1143. X%left    '*' '/' KEOP_MOD KEOP_SHL KEOP_SHR
  1144. X%right    KEOP_MUN
  1145. X
  1146. X
  1147. X%type <intv> expr exprlist stringlist
  1148. X
  1149. X%start file
  1150. X
  1151. X%%
  1152. X
  1153. Xfile    :    file allline
  1154. X    |    allline
  1155. X    ;
  1156. X
  1157. Xallline    :     line EOL
  1158. X            {
  1159. X                clrexpr();
  1160. X            }
  1161. X    |    EOL
  1162. X    |    error EOL
  1163. X            {
  1164. X                clrexpr();
  1165. X                yyerrok;
  1166. X            }
  1167. X    ;
  1168. X
  1169. Xline    :    LABEL KOC_END 
  1170. X            {
  1171. X                endsymbol = $1;
  1172. X                nextreadact = Nra_end;
  1173. X            }
  1174. X    |          KOC_END 
  1175. X            {
  1176. X                nextreadact = Nra_end;
  1177. X            }
  1178. X    |    KOC_INCLUDE STRING
  1179. X            {
  1180. X        if(nextfstk >= FILESTKDPTH)
  1181. X        {
  1182. X            fraerror("include file nesting limit exceeded");
  1183. X        }
  1184. X        else
  1185. X        {
  1186. X            infilestk[nextfstk].fnm = savestring($2,strlen($2));
  1187. X            if( (infilestk[nextfstk].fpt = fopen($2,"r"))
  1188. X                ==(FILE *)NULL )
  1189. X            {
  1190. X                fraerror("cannot open include file");
  1191. X            }
  1192. X            else
  1193. X            {
  1194. X                nextreadact = Nra_new;
  1195. X            }
  1196. X        }
  1197. X            }
  1198. X    |    LABEL KOC_EQU expr 
  1199. X            {
  1200. X                if($1 -> seg == SSG_UNDEF)
  1201. X                {
  1202. X                    pevalexpr(0, $3);
  1203. X                    if(evalr[0].seg == SSG_ABS)
  1204. X                    {
  1205. X                        $1 -> seg = SSG_EQU;
  1206. X                        $1 -> value = evalr[0].value;
  1207. X                        prtequvalue("C: 0x%lx\n",
  1208. X                            evalr[0].value);
  1209. X                    }
  1210. X                    else
  1211. X                    {
  1212. X                        fraerror(
  1213. X                    "noncomputable expression for EQU");
  1214. X                    }
  1215. X                }
  1216. X                else
  1217. X                {
  1218. X                    fraerror(
  1219. X                "cannot change symbol value with EQU");
  1220. X                }
  1221. X            }
  1222. X    |    LABEL KOC_SET expr 
  1223. X            {
  1224. X                if($1 -> seg == SSG_UNDEF
  1225. X                   || $1 -> seg == SSG_SET)
  1226. X                {
  1227. X                    pevalexpr(0, $3);
  1228. X                    if(evalr[0].seg == SSG_ABS)
  1229. X                    {
  1230. X                        $1 -> seg = SSG_SET;
  1231. X                        $1 -> value = evalr[0].value;
  1232. X                        prtequvalue("C: 0x%lx\n",
  1233. X                            evalr[0].value);
  1234. X                    }
  1235. X                    else
  1236. X                    {
  1237. X                        fraerror(
  1238. X                    "noncomputable expression for SET");
  1239. X                    }
  1240. X                }
  1241. X                else
  1242. X                {
  1243. X                    fraerror(
  1244. X                "cannot change symbol value with SET");
  1245. X                }
  1246. X            }
  1247. X    |    KOC_IF expr 
  1248. X            {
  1249. X        if((++ifstkpt) < IFSTKDEPTH)
  1250. X        {
  1251. X            pevalexpr(0, $2);
  1252. X            if(evalr[0].seg == SSG_ABS)
  1253. X            {
  1254. X                if(evalr[0].value != 0)
  1255. X                {
  1256. X                    elseifstk[ifstkpt] = If_Skip;
  1257. X                    endifstk[ifstkpt] = If_Active;
  1258. X                }
  1259. X                else
  1260. X                {
  1261. X                    fraifskip = TRUE;
  1262. X                    elseifstk[ifstkpt] = If_Active;
  1263. X                    endifstk[ifstkpt] = If_Active;
  1264. X                }
  1265. X            }
  1266. X            else
  1267. X            {
  1268. X                fraifskip = TRUE;
  1269. X                elseifstk[ifstkpt] = If_Active;
  1270. X                endifstk[ifstkpt] = If_Active;
  1271. X            }
  1272. X        }
  1273. X        else
  1274. X        {
  1275. X            fraerror("IF stack overflow");
  1276. X        }
  1277. X            }
  1278. X                        
  1279. X    |    KOC_IF 
  1280. X            {
  1281. X        if(fraifskip) 
  1282. X        {
  1283. X            if((++ifstkpt) < IFSTKDEPTH)
  1284. X            {
  1285. X                    elseifstk[ifstkpt] = If_Skip;
  1286. X                    endifstk[ifstkpt] = If_Skip;
  1287. X            }
  1288. X            else
  1289. X            {
  1290. X                fraerror("IF stack overflow");
  1291. X            }
  1292. X        }
  1293. X        else
  1294. X        {
  1295. X            yyerror("syntax error");
  1296. X            YYERROR;
  1297. X        }
  1298. X                }
  1299. X                        
  1300. X    |    KOC_ELSE 
  1301. X            {
  1302. X                switch(elseifstk[ifstkpt])
  1303. X                {
  1304. X                case If_Active:
  1305. X                    fraifskip = FALSE;
  1306. X                    break;
  1307. X                
  1308. X                case If_Skip:
  1309. X                    fraifskip = TRUE;
  1310. X                    break;
  1311. X                
  1312. X                case If_Err:
  1313. X                    fraerror("ELSE with no matching if");
  1314. X                    break;
  1315. X                }
  1316. X            }
  1317. X
  1318. X    |    KOC_ENDI 
  1319. X            {
  1320. X                switch(endifstk[ifstkpt])
  1321. X                {
  1322. X                case If_Active:
  1323. X                    fraifskip = FALSE;
  1324. X                    ifstkpt--;
  1325. X                    break;
  1326. X                
  1327. X                case If_Skip:
  1328. X                    fraifskip = TRUE;
  1329. X                    ifstkpt--;
  1330. X                    break;
  1331. X                
  1332. X                case If_Err:
  1333. X                    fraerror("ENDI with no matching if");
  1334. X                    break;
  1335. X                }
  1336. X            }
  1337. X    |    LABEL KOC_ORG expr 
  1338. X            {
  1339. X                pevalexpr(0, $3);
  1340. X                if(evalr[0].seg == SSG_ABS)
  1341. X                {
  1342. X                    locctr = labelloc = evalr[0].value;
  1343. X                    if($1 -> seg == SSG_UNDEF)
  1344. X                    {
  1345. X                        $1 -> seg = SSG_ABS;
  1346. X                        $1 -> value = labelloc;
  1347. X                    }
  1348. X                    else
  1349. X                        fraerror(
  1350. X                        "multiple definition of label");
  1351. X                    prtequvalue("C: 0x%lx\n",
  1352. X                        evalr[0].value);
  1353. X                }
  1354. X                else
  1355. X                {
  1356. X                    fraerror(
  1357. X                     "noncomputable expression for ORG");
  1358. X                }
  1359. X            }
  1360. X    |          KOC_ORG expr 
  1361. X            {
  1362. X                pevalexpr(0, $2);
  1363. X                if(evalr[0].seg == SSG_ABS)
  1364. X                {
  1365. X                    locctr = labelloc = evalr[0].value;
  1366. X                    prtequvalue("C: 0x%lx\n",
  1367. X                        evalr[0].value);
  1368. X                }
  1369. X                else
  1370. X                {
  1371. X                    fraerror(
  1372. X                     "noncomputable expression for ORG");
  1373. X                }
  1374. X            }
  1375. X    |    LABEL KOC_CHSET
  1376. X            {
  1377. X                if($1 -> seg == SSG_UNDEF)
  1378. X                {
  1379. X                    $1 -> seg = SSG_EQU;
  1380. X                    if( ($1->value = chtcreate()) <= 0)
  1381. X                    {
  1382. X        fraerror( "cannot create character translation table");
  1383. X                    }
  1384. X                    prtequvalue("C: 0x%lx\n", $1 -> value);
  1385. X                }
  1386. X                else
  1387. X                {
  1388. X            fraerror( "multiple definition of label");
  1389. X                }
  1390. X            }
  1391. X    |        KOC_CHUSE
  1392. X            {
  1393. X                chtcpoint = (int *) NULL;
  1394. X                prtequvalue("C: 0x%lx\n", 0L);
  1395. X            }
  1396. X    |        KOC_CHUSE expr
  1397. X            {
  1398. X                pevalexpr(0, $2);
  1399. X                if( evalr[0].seg == SSG_ABS)
  1400. X                {
  1401. X                    if( evalr[0].value == 0)
  1402. X                    {
  1403. X                        chtcpoint = (int *)NULL;
  1404. X                        prtequvalue("C: 0x%lx\n", 0L);
  1405. X                    }
  1406. X                    else if(evalr[0].value < chtnxalph)
  1407. X                    {
  1408. X                chtcpoint = chtatab[evalr[0].value];
  1409. X                prtequvalue("C: 0x%lx\n", evalr[0].value);
  1410. X                    }
  1411. X                    else
  1412. X                    {
  1413. X            fraerror("nonexistent character translation table");
  1414. X                    }
  1415. X                }
  1416. X                else
  1417. X                {
  1418. X                    fraerror("noncomputable expression");
  1419. X                }
  1420. X            }
  1421. X    |        KOC_CHDEF STRING ',' exprlist
  1422. X            {
  1423. X        int findrv, numret, *charaddr;
  1424. X        char *sourcestr = $2, *before;
  1425. X
  1426. X        if(chtnpoint != (int *)NULL)
  1427. X        {
  1428. X            for(satsub = 0; satsub < $4; satsub++)
  1429. X            {
  1430. X                before = sourcestr;
  1431. X
  1432. X                pevalexpr(0, exprlist[satsub]);
  1433. X                findrv = chtcfind(chtnpoint, &sourcestr,
  1434. X                        &charaddr, &numret);
  1435. X                if(findrv == CF_END)
  1436. X                {
  1437. X            fraerror("more expressions than characters");
  1438. X                    break;
  1439. X                }
  1440. X
  1441. X                if(evalr[0].seg == SSG_ABS)
  1442. X                {
  1443. X                    switch(findrv)
  1444. X                    {
  1445. X                    case CF_UNDEF:
  1446. X                        {
  1447. X                if(evalr[0].value < 0 ||
  1448. X                    evalr[0].value > 255)
  1449. X                {
  1450. X            frawarn("character translation value truncated");
  1451. X                }
  1452. X                *charaddr = evalr[0].value & 0xff;
  1453. X                prtequvalue("C: 0x%lx\n", evalr[0].value);
  1454. X                        }
  1455. X                        break;
  1456. X
  1457. X                    case CF_INVALID:
  1458. X                    case CF_NUMBER:
  1459. X                fracherror("invalid character to define", 
  1460. X                    before, sourcestr);
  1461. X                        break;
  1462. X
  1463. X                    case CF_CHAR:
  1464. X                fracherror("character already defined", 
  1465. X                    before, sourcestr);
  1466. X                        break;
  1467. X                    }
  1468. X                }
  1469. X                else
  1470. X                {
  1471. X                    fraerror("noncomputable expression");
  1472. X                }
  1473. X            }
  1474. X
  1475. X            if( *sourcestr != '\0')
  1476. X            {
  1477. X                fraerror("more characters than expressions");
  1478. X            }
  1479. X        }
  1480. X        else
  1481. X        {
  1482. X            fraerror("no CHARSET statement active");
  1483. X        }
  1484. X            
  1485. X            }
  1486. X    |    LABEL 
  1487. X            {
  1488. X            if($1 -> seg == SSG_UNDEF)
  1489. X            {
  1490. X                $1 -> seg = SSG_ABS;
  1491. X                $1 -> value = labelloc;
  1492. X                prtequvalue("C: 0x%lx\n", labelloc);
  1493. X
  1494. X            }
  1495. X            else
  1496. X                fraerror(
  1497. X                "multiple definition of label");
  1498. X            }
  1499. X    |    labeledline
  1500. X    ;
  1501. X
  1502. Xlabeledline :    LABEL genline
  1503. X            {
  1504. X            if($1 -> seg == SSG_UNDEF)
  1505. X            {
  1506. X                $1 -> seg = SSG_ABS;
  1507. X                $1 -> value = labelloc;
  1508. X            }
  1509. X            else
  1510. X                fraerror(
  1511. X                "multiple definition of label");
  1512. X            labelloc = locctr;
  1513. X            }
  1514. X                
  1515. X    |    genline
  1516. X            {
  1517. X                labelloc = locctr;
  1518. X            }
  1519. X    ;
  1520. X
  1521. Xgenline    :    KOC_BDEF    exprlist 
  1522. X            {
  1523. X                genlocrec(currseg, labelloc);
  1524. X                for( satsub = 0; satsub < $2; satsub++)
  1525. X                {
  1526. X                    pevalexpr(1, exprlist[satsub]);
  1527. X                    locctr += geninstr(genbdef);
  1528. X                }
  1529. X            }
  1530. X    |    KOC_SDEF stringlist 
  1531. X            {
  1532. X                genlocrec(currseg, labelloc);
  1533. X                for(satsub = 0; satsub < $2; satsub++)
  1534. X                {
  1535. X                    locctr += genstring(stringlist[satsub]);
  1536. X                }
  1537. X            }
  1538. X    |    KOC_WDEF exprlist 
  1539. X            {
  1540. X                genlocrec(currseg, labelloc);
  1541. X                for( satsub = 0; satsub < $2; satsub++)
  1542. X                {
  1543. X                    pevalexpr(1, exprlist[satsub]);
  1544. X                    locctr += geninstr(genwdef);
  1545. X                }
  1546. X            }    
  1547. X    |    KOC_RESM expr 
  1548. X            {
  1549. X                pevalexpr(0, $2);
  1550. X                if(evalr[0].seg == SSG_ABS)
  1551. X                {
  1552. X                    locctr = labelloc + evalr[0].value;
  1553. X                    prtequvalue("C: 0x%lx\n", labelloc);
  1554. X                }
  1555. X                else
  1556. X                {
  1557. X                    fraerror(
  1558. X                 "noncomputable result for RMB expression");
  1559. X                }
  1560. X            }
  1561. X    ;
  1562. X
  1563. Xexprlist :    exprlist ',' expr
  1564. X            {
  1565. X                exprlist[nextexprs ++ ] = $3;
  1566. X                $$ = nextexprs;
  1567. X            }
  1568. X    |    expr
  1569. X            {
  1570. X                nextexprs = 0;
  1571. X                exprlist[nextexprs ++ ] = $1;
  1572. X                $$ = nextexprs;
  1573. X            }
  1574. X    ;
  1575. X
  1576. Xstringlist :    stringlist ',' STRING
  1577. X            {
  1578. X                stringlist[nextstrs ++ ] = $3;
  1579. X                $$ = nextstrs;
  1580. X            }
  1581. X    |    STRING
  1582. X            {
  1583. X                nextstrs = 0;
  1584. X                stringlist[nextstrs ++ ] = $1;
  1585. X                $$ = nextstrs;
  1586. X            }
  1587. X    ;
  1588. X
  1589. X
  1590. Xgenline : KOC_opcode 
  1591. X            {
  1592. X        genlocrec(currseg, labelloc);
  1593. X        locctr += geninstr(findgen($1, ST_INH,  0));
  1594. X            }
  1595. X    ;
  1596. Xgenline : KOC_opcode  expr
  1597. X            {
  1598. X        genlocrec(currseg, labelloc);
  1599. X        pevalexpr(1,$2);
  1600. X        operselbits = 0;
  1601. X        if(evalr[1].seg == SSG_ABS)
  1602. X        {
  1603. X            if(evalr[1].value == 0)
  1604. X            {
  1605. X                operselbits |= DSTA;
  1606. X            }
  1607. X            else if(evalr[1].value == 1)
  1608. X            {
  1609. X                operselbits |= DSTB;
  1610. X            }
  1611. X        }    
  1612. X        locctr += geninstr(findgen($1, ST_EXPR, operselbits));
  1613. X            }
  1614. X    ;
  1615. Xgenline : KOC_opcode  expr ',' expr
  1616. X            {
  1617. X        genlocrec(currseg, labelloc);
  1618. X        pevalexpr(1,$2);
  1619. X        pevalexpr(2,$4);
  1620. X        operselbits = 0;
  1621. X        if(evalr[1].seg == SSG_ABS)
  1622. X        {
  1623. X            if(evalr[1].value == 0)
  1624. X            {
  1625. X                operselbits |= SRCA;
  1626. X            }
  1627. X            else if(evalr[1].value == 1)
  1628. X            {
  1629. X                operselbits |= SRCB;
  1630. X            }
  1631. X        }    
  1632. X        if(evalr[2].seg == SSG_ABS)
  1633. X        {
  1634. X            if(evalr[2].value == 0)
  1635. X            {
  1636. X                operselbits |= DSTA;
  1637. X            }
  1638. X            else if(evalr[2].value == 1)
  1639. X            {
  1640. X                operselbits |= DSTB;
  1641. X            }
  1642. X        }    
  1643. X        locctr += geninstr(findgen($1, ST_EXPR2, operselbits));
  1644. X            }
  1645. X    ;
  1646. Xgenline : KOC_opcode  expr ',' expr ',' expr
  1647. X            {
  1648. X        genlocrec(currseg, labelloc);
  1649. X        pevalexpr(1,$2);
  1650. X        pevalexpr(2,$4);
  1651. X        pevalexpr(3,$6);
  1652. X        operselbits = 0;
  1653. X        if(evalr[1].seg == SSG_ABS)
  1654. X        {
  1655. X            if(evalr[1].value == 0)
  1656. X            {
  1657. X                operselbits |= SRCA;
  1658. X            }
  1659. X            else if(evalr[1].value == 1)
  1660. X            {
  1661. X                operselbits |= SRCB;
  1662. X            }
  1663. X        }    
  1664. X        if(evalr[2].seg == SSG_ABS)
  1665. X        {
  1666. X            if(evalr[2].value == 0)
  1667. X            {
  1668. X                operselbits |= DSTA;
  1669. X            }
  1670. X            else if(evalr[2].value == 1)
  1671. X            {
  1672. X                operselbits |= DSTB;
  1673. X            }
  1674. X        }    
  1675. X        locctr += geninstr(findgen($1, ST_EXPR3, operselbits));
  1676. X            }
  1677. X    ;
  1678. Xgenline : KOC_opcode  '#' expr ',' expr
  1679. X            {
  1680. X        genlocrec(currseg, labelloc);
  1681. X        pevalexpr(1,$3);
  1682. X        pevalexpr(2,$5);
  1683. X        operselbits = 0;
  1684. X        if(evalr[2].seg == SSG_ABS)
  1685. X        {
  1686. X            if(evalr[2].value == 0)
  1687. X            {
  1688. X                operselbits |= DSTA;
  1689. X            }
  1690. X            else if(evalr[2].value == 1)
  1691. X            {
  1692. X                operselbits |= DSTB;
  1693. X            }
  1694. X        }    
  1695. X        locctr += geninstr(findgen($1, ST_IEXPR2, operselbits));
  1696. X            }
  1697. X    ;
  1698. Xgenline : KOC_opcode  '#' expr ',' expr ',' expr
  1699. X            {
  1700. X        genlocrec(currseg, labelloc);
  1701. X        pevalexpr(1,$3);
  1702. X        pevalexpr(2,$5);
  1703. X        pevalexpr(3,$7);
  1704. X        operselbits = 0;
  1705. X        if(evalr[2].seg == SSG_ABS)
  1706. X        {
  1707. X            if(evalr[2].value == 0)
  1708. X            {
  1709. X                operselbits |= DSTA;
  1710. X            }
  1711. X            else if(evalr[2].value == 1)
  1712. X            {
  1713. X                operselbits |= DSTB;
  1714. X            }
  1715. X        }    
  1716. X        locctr += geninstr(findgen($1, ST_IEXPR3, operselbits));
  1717. X            }
  1718. X    ;
  1719. Xgenline : KOC_opcode  expr '(' REG ')'
  1720. X            {
  1721. X        genlocrec(currseg, labelloc);
  1722. X        pevalexpr(1,$2);
  1723. X        operselbits = 0;
  1724. X        if($4 == 0)
  1725. X        {
  1726. X            operselbits |= SRCA;
  1727. X        }
  1728. X        else if($4 == 1)
  1729. X        {
  1730. X            operselbits |= SRCB;
  1731. X        }
  1732. X        locctr += geninstr(findgen($1, ST_INDEX,  operselbits));
  1733. X            }
  1734. X    ;
  1735. Xgenline : KOC_opcode  '#' expr '(' REG ')' ',' expr
  1736. X            {
  1737. X        genlocrec(currseg, labelloc);
  1738. X        pevalexpr(1,$3);
  1739. X        pevalexpr(2,$8);
  1740. X        operselbits = 0;
  1741. X        if($5 == 0)
  1742. X        {
  1743. X            operselbits |= SRCA;
  1744. X        }
  1745. X        else if($5 == 1)
  1746. X        {
  1747. X            operselbits |= SRCB;
  1748. X        }
  1749. X        locctr += geninstr(findgen($1, ST_IMMIND,  operselbits));
  1750. X            }
  1751. X    ;
  1752. Xgenline : KOC_opcode  '[' expr ']'
  1753. X            {
  1754. X        genlocrec(currseg, labelloc);
  1755. X        pevalexpr(1,$3);
  1756. X        locctr += geninstr(findgen($1, ST_RINDIR,  0));
  1757. X            }
  1758. X    ;
  1759. Xgenline : KOC_opcode   STATUS
  1760. X            {
  1761. X        genlocrec(currseg, labelloc);
  1762. X        locctr += geninstr(findgen($1, ST_STATUS,  0));
  1763. X            }
  1764. X    ;
  1765. Xexpr    :    '+' expr %prec KEOP_MUN
  1766. X            {
  1767. X                $$ = $2;
  1768. X            }
  1769. X    |    '-' expr %prec KEOP_MUN
  1770. X            {
  1771. X                $$ = exprnode(PCCASE_UN,$2,IFC_NEG,0,0L,
  1772. X                    SYMNULL);
  1773. X            }
  1774. X    |    KEOP_NOT expr
  1775. X            {
  1776. X                $$ = exprnode(PCCASE_UN,$2,IFC_NOT,0,0L,
  1777. X                    SYMNULL);
  1778. X            }
  1779. X    |    KEOP_HIGH expr
  1780. X            {
  1781. X                $$ = exprnode(PCCASE_UN,$2,IFC_HIGH,0,0L,
  1782. X                    SYMNULL);
  1783. X            }
  1784. X    |    KEOP_LOW expr
  1785. X            {
  1786. X                $$ = exprnode(PCCASE_UN,$2,IFC_LOW,0,0L,
  1787. X                    SYMNULL);
  1788. X            }
  1789. X    |    expr '*' expr
  1790. X            {
  1791. X                $$ = exprnode(PCCASE_BIN,$1,IFC_MUL,$3,0L,
  1792. X                    SYMNULL);
  1793. X            }
  1794. X    |    expr '/' expr
  1795. X            {
  1796. X                $$ = exprnode(PCCASE_BIN,$1,IFC_DIV,$3,0L,
  1797. X                    SYMNULL);
  1798. X            }
  1799. X    |    expr '+' expr
  1800. X            {
  1801. X                $$ = exprnode(PCCASE_BIN,$1,IFC_ADD,$3,0L,
  1802. X                    SYMNULL);
  1803. X            }
  1804. X    |    expr '-' expr
  1805. X            {
  1806. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SUB,$3,0L,
  1807. X                    SYMNULL);
  1808. X            }
  1809. X    |    expr KEOP_MOD expr
  1810. X            {
  1811. X                $$ = exprnode(PCCASE_BIN,$1,IFC_MOD,$3,0L,
  1812. X                    SYMNULL);
  1813. X            }
  1814. X    |    expr KEOP_SHL expr
  1815. X            {
  1816. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SHL,$3,0L,
  1817. X                    SYMNULL);
  1818. X            }
  1819. X    |    expr KEOP_SHR expr
  1820. X            {
  1821. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SHR,$3,0L,
  1822. X                    SYMNULL);
  1823. X            }
  1824. X    |    expr KEOP_GT expr
  1825. X            {
  1826. X                $$ = exprnode(PCCASE_BIN,$1,IFC_GT,$3,0L,
  1827. X                    SYMNULL);
  1828. X            }
  1829. X    |    expr KEOP_GE expr
  1830. X            {
  1831. X                $$ = exprnode(PCCASE_BIN,$1,IFC_GE,$3,0L,
  1832. X                    SYMNULL);
  1833. X            }
  1834. X    |    expr KEOP_LT expr
  1835. X            {
  1836. X                $$ = exprnode(PCCASE_BIN,$1,IFC_LT,$3,0L,
  1837. X                    SYMNULL);
  1838. X            }
  1839. X    |    expr KEOP_LE expr
  1840. X            {
  1841. X                $$ = exprnode(PCCASE_BIN,$1,IFC_LE,$3,0L,
  1842. X                    SYMNULL);
  1843. X            }
  1844. X    |    expr KEOP_NE expr
  1845. X            {
  1846. X                $$ = exprnode(PCCASE_BIN,$1,IFC_NE,$3,0L,
  1847. X                    SYMNULL);
  1848. X            }
  1849. X    |    expr KEOP_EQ expr
  1850. X            {
  1851. X                $$ = exprnode(PCCASE_BIN,$1,IFC_EQ,$3,0L,
  1852. X                    SYMNULL);
  1853. X            }
  1854. X    |    expr KEOP_AND expr
  1855. X            {
  1856. X                $$ = exprnode(PCCASE_BIN,$1,IFC_AND,$3,0L,
  1857. X                    SYMNULL);
  1858. X            }
  1859. X    |    expr KEOP_OR expr
  1860. X            {
  1861. X                $$ = exprnode(PCCASE_BIN,$1,IFC_OR,$3,0L,
  1862. X                    SYMNULL);
  1863. X            }
  1864. X    |    expr KEOP_XOR expr
  1865. X            {
  1866. X                $$ = exprnode(PCCASE_BIN,$1,IFC_XOR,$3,0L,
  1867. X                    SYMNULL);
  1868. X            }
  1869. X    |    KEOP_DEFINED SYMBOL
  1870. X            {
  1871. X                $$ = exprnode(PCCASE_DEF,0,IGP_DEFINED,0,0L,$2);
  1872. X            }
  1873. X    |    SYMBOL
  1874. X            {
  1875. X                $$ = exprnode(PCCASE_SYMB,0,IFC_SYMB,0,0L,$1);
  1876. X            }
  1877. X    |    '*'
  1878. X            {
  1879. X                $$ = exprnode(PCCASE_PROGC,0,IFC_PROGCTR,0,
  1880. X                    labelloc, SYMNULL);
  1881. X            }
  1882. X    |    CONSTANT
  1883. X            {
  1884. X                $$ = exprnode(PCCASE_CONS,0,IGP_CONSTANT,0,$1,
  1885. X                    SYMNULL);
  1886. X            }
  1887. X    |    STRING
  1888. X            {
  1889. X                char *sourcestr = $1;
  1890. X                long accval = 0;
  1891. X
  1892. X                if(strlen($1) > 0)
  1893. X                {
  1894. X                    accval = chtran(&sourcestr);
  1895. X                    if(*sourcestr != '\0')
  1896. X                    {
  1897. X                        accval = (accval << 8) +
  1898. X                            chtran(&sourcestr);
  1899. X                    }
  1900. X
  1901. X                    if( *sourcestr != '\0')
  1902. X                    {
  1903. X    frawarn("string constant in expression more than 2 characters long");
  1904. X                    }
  1905. X                }
  1906. X                $$ = exprnode(PCCASE_CONS, 0, IGP_CONSTANT, 0,
  1907. X                    accval, SYMNULL);
  1908. X            }
  1909. X    |    '(' expr ')'
  1910. X            {
  1911. X                $$ = $2;
  1912. X            }
  1913. X    ;
  1914. X
  1915. X
  1916. Xexpr    :    REG
  1917. X        {
  1918. X    $$ = exprnode(PCCASE_CONS,0,IGP_CONSTANT,0,(long)$1,SYMNULL);
  1919. X        }
  1920. X    ;
  1921. X
  1922. X%%
  1923. X
  1924. Xlexintercept()
  1925. X/*
  1926. X    description    intercept the call to yylex (the lexical analyzer)
  1927. X            and filter out all unnecessary tokens when skipping
  1928. X            the input between a failed IF and its matching ENDI or
  1929. X            ELSE
  1930. X    globals     fraifskip    the enable flag
  1931. X*/
  1932. X{
  1933. X#undef yylex
  1934. X
  1935. X    int rv;
  1936. X
  1937. X    if(fraifskip)
  1938. X    {
  1939. X        for(;;)
  1940. X        {
  1941. X
  1942. X            switch(rv = yylex())
  1943. X
  1944. X            {
  1945. X            case 0:
  1946. X            case KOC_END:
  1947. X            case KOC_IF:
  1948. X            case KOC_ELSE:
  1949. X            case KOC_ENDI:
  1950. X            case EOL:
  1951. X                return rv;
  1952. X            default:
  1953. X                break;
  1954. X            }
  1955. X        }
  1956. X    }
  1957. X    else
  1958. X        return yylex();
  1959. X#define yylex lexintercept
  1960. X}
  1961. X
  1962. X
  1963. X
  1964. Xsetreserved()
  1965. X{
  1966. X
  1967. X    reservedsym("and", KEOP_AND, 0);
  1968. X    reservedsym("defined", KEOP_DEFINED,0);
  1969. X    reservedsym("eq", KEOP_EQ, 0);
  1970. X    reservedsym("ge", KEOP_GE, 0);
  1971. X    reservedsym("gt", KEOP_GT, 0);
  1972. X    reservedsym("high", KEOP_HIGH, 0);
  1973. X    reservedsym("le", KEOP_LE, 0);
  1974. X    reservedsym("low", KEOP_LOW, 0);
  1975. X    reservedsym("lt", KEOP_LT, 0);
  1976. X    reservedsym("mod", KEOP_MOD, 0);
  1977. X    reservedsym("ne", KEOP_NE, 0);
  1978. X    reservedsym("not", KEOP_NOT, 0);
  1979. X    reservedsym("or", KEOP_OR, 0);
  1980. X    reservedsym("shl", KEOP_SHL, 0);
  1981. X    reservedsym("shr", KEOP_SHR, 0);
  1982. X    reservedsym("xor", KEOP_XOR, 0);
  1983. X    reservedsym("AND", KEOP_AND, 0);
  1984. X    reservedsym("DEFINED", KEOP_DEFINED,0);
  1985. X    reservedsym("EQ", KEOP_EQ, 0);
  1986. X    reservedsym("GE", KEOP_GE, 0);
  1987. X    reservedsym("GT", KEOP_GT, 0);
  1988. X    reservedsym("HIGH", KEOP_HIGH, 0);
  1989. X    reservedsym("LE", KEOP_LE, 0);
  1990. X    reservedsym("LOW", KEOP_LOW, 0);
  1991. X    reservedsym("LT", KEOP_LT, 0);
  1992. X    reservedsym("MOD", KEOP_MOD, 0);
  1993. X    reservedsym("NE", KEOP_NE, 0);
  1994. X    reservedsym("NOT", KEOP_NOT, 0);
  1995. X    reservedsym("OR", KEOP_OR, 0);
  1996. X    reservedsym("SHL", KEOP_SHL, 0);
  1997. X    reservedsym("SHR", KEOP_SHR, 0);
  1998. X    reservedsym("XOR", KEOP_XOR, 0);
  1999. X
  2000. X    /* machine specific token definitions */
  2001. X    reservedsym("st", STATUS, 0);
  2002. X    reservedsym("a", REG, 0);
  2003. X    reservedsym("b", REG, 1);
  2004. X    reservedsym("ST", STATUS, 0);
  2005. X    reservedsym("A", REG, 0);
  2006. X    reservedsym("B", REG, 1);
  2007. X
  2008. X}
  2009. X
  2010. X
  2011. Xcpumatch(str)
  2012. X    char * str;
  2013. X{
  2014. X    return TRUE;
  2015. X}
  2016. X
  2017. X/*
  2018. X    description    Opcode and Instruction generation tables
  2019. X    usage        Unix, framework crossassembler
  2020. X    history        September 25, 1987
  2021. X*/
  2022. X
  2023. X#define NUMOPCODE 92
  2024. X#define NUMSYNBLK 104
  2025. X#define NUMDIFFOP 213
  2026. X
  2027. Xint gnumopcode = NUMOPCODE;
  2028. X
  2029. Xint ophashlnk[NUMOPCODE];
  2030. X
  2031. Xstruct opsym optab[NUMOPCODE+1]
  2032. X    = {
  2033. X    {"invalid", KOC_opcode, 2, 0 },
  2034. X    {"ADC", KOC_opcode, 2, 2 },
  2035. X    {"ADD", KOC_opcode, 2, 4 },
  2036. X    {"AND", KOC_opcode, 2, 6 },
  2037. X    {"ANDP", KOC_opcode, 2, 8 },
  2038. X    {"BR", KOC_opcode, 3, 10 },
  2039. X    {"BTJO", KOC_opcode, 2, 13 },
  2040. X    {"BTJOP", KOC_opcode, 2, 15 },
  2041. X    {"BTJZ", KOC_opcode, 2, 17 },
  2042. X    {"BTJZP", KOC_opcode, 2, 19 },
  2043. X    {"BYTE", KOC_BDEF, 0, 0 },
  2044. X    {"CALL", KOC_opcode, 3, 21 },
  2045. X    {"CHARDEF", KOC_CHDEF, 0, 0 },
  2046. X    {"CHARSET", KOC_CHSET, 0, 0 },
  2047. X    {"CHARUSE", KOC_CHUSE, 0, 0 },
  2048. X    {"CHD", KOC_CHDEF, 0, 0 },
  2049. X    {"CLR", KOC_opcode, 1, 24 },
  2050. X    {"CLRC", KOC_opcode, 1, 25 },
  2051. X    {"CMP", KOC_opcode, 2, 26 },
  2052. X    {"CMPA", KOC_opcode, 3, 28 },
  2053. X    {"DAC", KOC_opcode, 2, 31 },
  2054. X    {"DB", KOC_BDEF, 0, 0 },
  2055. X    {"DEC", KOC_opcode, 1, 33 },
  2056. X    {"DECD", KOC_opcode, 1, 34 },
  2057. X    {"DINT", KOC_opcode, 1, 35 },
  2058. X    {"DJNZ", KOC_opcode, 1, 36 },
  2059. X    {"DSB", KOC_opcode, 2, 37 },
  2060. X    {"DW", KOC_WDEF, 0, 0 },
  2061. X    {"EINT", KOC_opcode, 1, 39 },
  2062. X    {"ELSE", KOC_ELSE, 0, 0 },
  2063. X    {"END", KOC_END, 0, 0 },
  2064. X    {"ENDI", KOC_ENDI, 0, 0 },
  2065. X    {"EQU", KOC_EQU, 0, 0 },
  2066. X    {"FCB", KOC_BDEF, 0, 0 },
  2067. X    {"FCC", KOC_SDEF, 0, 0 },
  2068. X    {"FDB", KOC_WDEF, 0, 0 },
  2069. X    {"IDLE", KOC_opcode, 1, 40 },
  2070. X    {"IF", KOC_IF, 0, 0 },
  2071. X    {"INC", KOC_opcode, 1, 41 },
  2072. X    {"INCL", KOC_INCLUDE, 0, 0 },
  2073. X    {"INCLUDE", KOC_INCLUDE, 0, 0 },
  2074. X    {"INV", KOC_opcode, 1, 42 },
  2075. X    {"JC", KOC_opcode, 1, 43 },
  2076. X    {"JEQ", KOC_opcode, 1, 44 },
  2077. X    {"JGE", KOC_opcode, 1, 45 },
  2078. X    {"JGT", KOC_opcode, 1, 46 },
  2079. X    {"JHS", KOC_opcode, 1, 47 },
  2080. X    {"JL", KOC_opcode, 1, 48 },
  2081. X    {"JLT", KOC_opcode, 1, 49 },
  2082. X    {"JMP", KOC_opcode, 1, 50 },
  2083. X    {"JN", KOC_opcode, 1, 51 },
  2084. X    {"JNC", KOC_opcode, 1, 52 },
  2085. X    {"JNE", KOC_opcode, 1, 53 },
  2086. X    {"JNZ", KOC_opcode, 1, 54 },
  2087. X    {"JP", KOC_opcode, 1, 55 },
  2088. X    {"JPZ", KOC_opcode, 1, 56 },
  2089. X    {"JZ", KOC_opcode, 1, 57 },
  2090. X    {"LDA", KOC_opcode, 3, 58 },
  2091. X    {"LDSP", KOC_opcode, 1, 61 },
  2092. X    {"MOV", KOC_opcode, 2, 62 },
  2093. X    {"MOVD", KOC_opcode, 3, 64 },
  2094. X    {"MOVP", KOC_opcode, 2, 67 },
  2095. X    {"MPY", KOC_opcode, 2, 69 },
  2096. X    {"NOP", KOC_opcode, 1, 71 },
  2097. X    {"OR", KOC_opcode, 2, 72 },
  2098. X    {"ORG", KOC_ORG, 0, 0 },
  2099. X    {"ORP", KOC_opcode, 2, 74 },
  2100. X    {"POP", KOC_opcode, 2, 76 },
  2101. X    {"PUSH", KOC_opcode, 2, 78 },
  2102. X    {"RESERVE", KOC_RESM, 0, 0 },
  2103. X    {"RETI", KOC_opcode, 1, 80 },
  2104. X    {"RETS", KOC_opcode, 1, 81 },
  2105. X    {"RL", KOC_opcode, 1, 82 },
  2106. X    {"RLC", KOC_opcode, 1, 83 },
  2107. X    {"RMB", KOC_RESM, 0, 0 },
  2108. X    {"RR", KOC_opcode, 1, 84 },
  2109. X    {"RRC", KOC_opcode, 1, 85 },
  2110. X    {"SBB", KOC_opcode, 2, 86 },
  2111. X    {"SET", KOC_SET, 0, 0 },
  2112. X    {"SETC", KOC_opcode, 1, 88 },
  2113. X    {"STA", KOC_opcode, 3, 89 },
  2114. X    {"STRING", KOC_SDEF, 0, 0 },
  2115. X    {"STSP", KOC_opcode, 1, 92 },
  2116. X    {"SUB", KOC_opcode, 2, 93 },
  2117. X    {"SWAP", KOC_opcode, 1, 95 },
  2118. X    {"TRAP", KOC_opcode, 1, 96 },
  2119. X    {"TSTA", KOC_opcode, 1, 97 },
  2120. X    {"TSTB", KOC_opcode, 1, 98 },
  2121. X    {"WORD", KOC_WDEF, 0, 0 },
  2122. X    {"XCHB", KOC_opcode, 1, 99 },
  2123. X    {"XOR", KOC_opcode, 2, 100 },
  2124. X    {"XORP", KOC_opcode, 2, 102 },
  2125. X    { "", 0, 0, 0 }};
  2126. X
  2127. Xstruct opsynt ostab[NUMSYNBLK+1]
  2128. X    = {
  2129. X/* invalid 0 */ { 0, 1, 0 },
  2130. X/* invalid 1 */ { 0xffff, 1, 1 },
  2131. X/* ADC 2 */ { ST_EXPR2, 4, 2 },
  2132. X/* ADC 3 */ { ST_IEXPR2, 3, 6 },
  2133. X/* ADD 4 */ { ST_EXPR2, 4, 9 },
  2134. X/* ADD 5 */ { ST_IEXPR2, 3, 13 },
  2135. X/* AND 6 */ { ST_EXPR2, 4, 16 },
  2136. X/* AND 7 */ { ST_IEXPR2, 3, 20 },
  2137. X/* ANDP 8 */ { ST_EXPR2, 2, 23 },
  2138. X/* ANDP 9 */ { ST_IEXPR2, 1, 25 },
  2139. X/* BR 10 */ { ST_EXPR, 1, 26 },
  2140. X/* BR 11 */ { ST_INDEX, 1, 27 },
  2141. X/* BR 12 */ { ST_RINDIR, 1, 28 },
  2142. X/* BTJO 13 */ { ST_EXPR3, 4, 29 },
  2143. X/* BTJO 14 */ { ST_IEXPR3, 3, 33 },
  2144. X/* BTJOP 15 */ { ST_EXPR3, 2, 36 },
  2145. X/* BTJOP 16 */ { ST_IEXPR3, 1, 38 },
  2146. X/* BTJZ 17 */ { ST_EXPR3, 4, 39 },
  2147. X/* BTJZ 18 */ { ST_IEXPR3, 3, 43 },
  2148. X/* BTJZP 19 */ { ST_EXPR3, 2, 46 },
  2149. X/* BTJZP 20 */ { ST_IEXPR3, 1, 48 },
  2150. X/* CALL 21 */ { ST_EXPR, 1, 49 },
  2151. X/* CALL 22 */ { ST_INDEX, 1, 50 },
  2152. X/* CALL 23 */ { ST_RINDIR, 1, 51 },
  2153. X/* CLR 24 */ { ST_EXPR, 3, 52 },
  2154. X/* CLRC 25 */ { ST_INH, 1, 55 },
  2155. X/* CMP 26 */ { ST_EXPR2, 4, 56 },
  2156. X/* CMP 27 */ { ST_IEXPR2, 3, 60 },
  2157. X/* CMPA 28 */ { ST_EXPR, 1, 63 },
  2158. X/* CMPA 29 */ { ST_INDEX, 1, 64 },
  2159. X/* CMPA 30 */ { ST_RINDIR, 1, 65 },
  2160. X/* DAC 31 */ { ST_EXPR2, 4, 66 },
  2161. X/* DAC 32 */ { ST_IEXPR2, 3, 70 },
  2162. X/* DEC 33 */ { ST_EXPR, 3, 73 },
  2163. X/* DECD 34 */ { ST_EXPR, 3, 76 },
  2164. X/* DINT 35 */ { ST_INH, 1, 79 },
  2165. X/* DJNZ 36 */ { ST_EXPR2, 3, 80 },
  2166. X/* DSB 37 */ { ST_EXPR2, 4, 83 },
  2167. X/* DSB 38 */ { ST_IEXPR2, 3, 87 },
  2168. X/* EINT 39 */ { ST_INH, 1, 90 },
  2169. X/* IDLE 40 */ { ST_INH, 1, 91 },
  2170. X/* INC 41 */ { ST_EXPR, 3, 92 },
  2171. X/* INV 42 */ { ST_EXPR, 3, 95 },
  2172. X/* JC 43 */ { ST_EXPR, 1, 98 },
  2173. X/* JEQ 44 */ { ST_EXPR, 1, 99 },
  2174. X/* JGE 45 */ { ST_EXPR, 1, 100 },
  2175. X/* JGT 46 */ { ST_EXPR, 1, 101 },
  2176. X/* JHS 47 */ { ST_EXPR, 1, 102 },
  2177. X/* JL 48 */ { ST_EXPR, 1, 103 },
  2178. X/* JLT 49 */ { ST_EXPR, 1, 104 },
  2179. X/* JMP 50 */ { ST_EXPR, 1, 105 },
  2180. X/* JN 51 */ { ST_EXPR, 1, 106 },
  2181. X/* JNC 52 */ { ST_EXPR, 1, 107 },
  2182. X/* JNE 53 */ { ST_EXPR, 1, 108 },
  2183. X/* JNZ 54 */ { ST_EXPR, 1, 109 },
  2184. X/* JP 55 */ { ST_EXPR, 1, 110 },
  2185. X/* JPZ 56 */ { ST_EXPR, 1, 111 },
  2186. X/* JZ 57 */ { ST_EXPR, 1, 112 },
  2187. X/* LDA 58 */ { ST_EXPR, 1, 113 },
  2188. X/* LDA 59 */ { ST_INDEX, 1, 114 },
  2189. X/* LDA 60 */ { ST_RINDIR, 1, 115 },
  2190. X/* LDSP 61 */ { ST_INH, 1, 116 },
  2191. X/* MOV 62 */ { ST_EXPR2, 7, 117 },
  2192. X/* MOV 63 */ { ST_IEXPR2, 3, 124 },
  2193. X/* MOVD 64 */ { ST_EXPR2, 1, 127 },
  2194. X/* MOVD 65 */ { ST_IEXPR2, 1, 128 },
  2195. X/* MOVD 66 */ { ST_IMMIND, 1, 129 },
  2196. X/* MOVP 67 */ { ST_EXPR2, 4, 130 },
  2197. X/* MOVP 68 */ { ST_IEXPR2, 1, 134 },
  2198. X/* MPY 69 */ { ST_EXPR2, 4, 135 },
  2199. X/* MPY 70 */ { ST_IEXPR2, 3, 139 },
  2200. X/* NOP 71 */ { ST_INH, 1, 142 },
  2201. X/* OR 72 */ { ST_EXPR2, 4, 143 },
  2202. X/* OR 73 */ { ST_IEXPR2, 3, 147 },
  2203. X/* ORP 74 */ { ST_EXPR2, 2, 150 },
  2204. X/* ORP 75 */ { ST_IEXPR2, 1, 152 },
  2205. X/* POP 76 */ { ST_EXPR, 3, 153 },
  2206. X/* POP 77 */ { ST_STATUS, 1, 156 },
  2207. X/* PUSH 78 */ { ST_EXPR, 3, 157 },
  2208. X/* PUSH 79 */ { ST_STATUS, 1, 160 },
  2209. X/* RETI 80 */ { ST_INH, 1, 161 },
  2210. X/* RETS 81 */ { ST_INH, 1, 162 },
  2211. X/* RL 82 */ { ST_EXPR, 3, 163 },
  2212. X/* RLC 83 */ { ST_EXPR, 3, 166 },
  2213. X/* RR 84 */ { ST_EXPR, 3, 169 },
  2214. X/* RRC 85 */ { ST_EXPR, 3, 172 },
  2215. X/* SBB 86 */ { ST_EXPR2, 4, 175 },
  2216. X/* SBB 87 */ { ST_IEXPR2, 3, 179 },
  2217. X/* SETC 88 */ { ST_INH, 1, 182 },
  2218. X/* STA 89 */ { ST_EXPR, 1, 183 },
  2219. X/* STA 90 */ { ST_INDEX, 1, 184 },
  2220. X/* STA 91 */ { ST_RINDIR, 1, 185 },
  2221. X/* STSP 92 */ { ST_INH, 1, 186 },
  2222. X/* SUB 93 */ { ST_EXPR2, 4, 187 },
  2223. X/* SUB 94 */ { ST_IEXPR2, 3, 191 },
  2224. X/* SWAP 95 */ { ST_EXPR, 3, 194 },
  2225. X/* TRAP 96 */ { ST_EXPR, 1, 197 },
  2226. X/* TSTA 97 */ { ST_INH, 1, 198 },
  2227. X/* TSTB 98 */ { ST_INH, 1, 199 },
  2228. X/* XCHB 99 */ { ST_EXPR, 3, 200 },
  2229. X/* XOR 100 */ { ST_EXPR2, 4, 203 },
  2230. X/* XOR 101 */ { ST_IEXPR2, 3, 207 },
  2231. X/* XORP 102 */ { ST_EXPR2, 2, 210 },
  2232. X/* XORP 103 */ { ST_IEXPR2, 1, 212 },
  2233. X    { 0, 0, 0 } };
  2234. X
  2235. Xstruct igel igtab[NUMDIFFOP+1]
  2236. X    = {
  2237. X/* invalid 0 */   { 0 , 0, 
  2238. X        "[Xnullentry" },
  2239. X/* invalid 1 */   { 0 , 0, 
  2240. X        "[Xinvalid opcode" },
  2241. X/* ADC 2 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2242. X        "69;" },
  2243. X/* ADC 3 */   { DSTMASK , DSTA, 
  2244. X        "19;[1=].8I;" },
  2245. X/* ADC 4 */   { DSTMASK , DSTB, 
  2246. X        "39;[1=].8I;" },
  2247. X/* ADC 5 */   { 0 , 0, 
  2248. X        "49;[1=].8I;[2=].8I;" },
  2249. X/* ADC 6 */   { DSTMASK , DSTA, 
  2250. X        "29;[1=];" },
  2251. X/* ADC 7 */   { DSTMASK , DSTB, 
  2252. X        "59;[1=];" },
  2253. X/* ADC 8 */   { 0 , 0, 
  2254. X        "79;[1=];[2=].8I;" },
  2255. X/* ADD 9 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2256. X        "68;" },
  2257. X/* ADD 10 */   { DSTMASK , DSTA, 
  2258. X        "18;[1=].8I;" },
  2259. X/* ADD 11 */   { DSTMASK , DSTB, 
  2260. X        "38;[1=].8I;" },
  2261. X/* ADD 12 */   { 0 , 0, 
  2262. X        "48;[1=].8I;[2=].8I;" },
  2263. X/* ADD 13 */   { DSTMASK , DSTA, 
  2264. X        "28;[1=];" },
  2265. X/* ADD 14 */   { DSTMASK , DSTB, 
  2266. X        "58;[1=];" },
  2267. X/* ADD 15 */   { 0 , 0, 
  2268. X        "78;[1=];[2=].8I;" },
  2269. X/* AND 16 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2270. X        "63;" },
  2271. X/* AND 17 */   { DSTMASK , DSTA, 
  2272. X        "13;[1=].8I;" },
  2273. X/* AND 18 */   { DSTMASK , DSTB, 
  2274. X        "33;[1=].8I;" },
  2275. X/* AND 19 */   { 0 , 0, 
  2276. X        "43;[1=].8I;[2=].8I;" },
  2277. X/* AND 20 */   { DSTMASK , DSTA, 
  2278. X        "23;[1=];" },
  2279. X/* AND 21 */   { DSTMASK , DSTB, 
  2280. X        "53;[1=];" },
  2281. X/* AND 22 */   { 0 , 0, 
  2282. X        "73;[1=];[2=].8I;" },
  2283. X/* ANDP 23 */   { SRCMASK , SRCA, 
  2284. X        "83;[2=].100-.8I;" },
  2285. X/* ANDP 24 */   { SRCMASK , SRCB, 
  2286. X        "93;[2=].100-.8I;" },
  2287. X/* ANDP 25 */   { 0 , 0, 
  2288. X        "a3;[1=];[2=].100-.8I;" },
  2289. X/* BR 26 */   { 0 , 0, 
  2290. X        "8c;[1=]x" },
  2291. X/* BR 27 */   { SRCMASK , SRCB, 
  2292. X        "ac;[1=]x" },
  2293. X/* BR 28 */   { 0 , 0, 
  2294. X        "9c;[1=].8I;" },
  2295. X/* BTJO 29 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2296. X        "66;[3=].Q.1+-r" },
  2297. X/* BTJO 30 */   { DSTMASK , DSTA, 
  2298. X        "16;[1=].8I;[3=].Q.1+-r" },
  2299. X/* BTJO 31 */   { DSTMASK , DSTB, 
  2300. X        "36;[1=].8I;[3=].Q.1+-r" },
  2301. X/* BTJO 32 */   { 0 , 0, 
  2302. X        "46;[1=].8I;[2=].8I;[3=].Q.1+-r" },
  2303. X/* BTJO 33 */   { DSTMASK , DSTA, 
  2304. X        "26;[1=];[3=].Q.1+-r" },
  2305. X/* BTJO 34 */   { DSTMASK , DSTB, 
  2306. X        "56;[1=];[3=].Q.1+-r" },
  2307. X/* BTJO 35 */   { 0 , 0, 
  2308. X        "76;[1=];[2=].8I;[3=].Q.1+-r" },
  2309. X/* BTJOP 36 */   { SRCMASK , SRCA, 
  2310. X        "86;[2=].100-.8I;[3=].Q.1+-r" },
  2311. X/* BTJOP 37 */   { SRCMASK , SRCB, 
  2312. X        "96;[2=].100-.8I;[3=].Q.1+-r" },
  2313. X/* BTJOP 38 */   { 0 , 0, 
  2314. X        "a6;[1=];[2=].100-.8I;[3=].Q.1+-r" },
  2315. X/* BTJZ 39 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2316. X        "67;[3=].Q.1+-r" },
  2317. X/* BTJZ 40 */   { DSTMASK , DSTA, 
  2318. X        "17;[1=].8I;[3=].Q.1+-r" },
  2319. X/* BTJZ 41 */   { DSTMASK , DSTB, 
  2320. X        "37;[1=].8I;[3=].Q.1+-r" },
  2321. X/* BTJZ 42 */   { 0 , 0, 
  2322. X        "47;[1=].8I;[2=].8I;[3=].Q.1+-r" },
  2323. X/* BTJZ 43 */   { DSTMASK , DSTA, 
  2324. X        "27;[1=];[3=].Q.1+-r" },
  2325. X/* BTJZ 44 */   { DSTMASK , DSTB, 
  2326. X        "57;[1=];[3=].Q.1+-r" },
  2327. X/* BTJZ 45 */   { 0 , 0, 
  2328. X        "77;[1=];[2=].8I;[3=].Q.1+-r" },
  2329. X/* BTJZP 46 */   { SRCMASK , SRCA, 
  2330. X        "87;[2=].100-.8I;[3=].Q.1+-r" },
  2331. X/* BTJZP 47 */   { SRCMASK , SRCB, 
  2332. X        "97;[2=].100-.8I;[3=].Q.1+-r" },
  2333. X/* BTJZP 48 */   { 0 , 0, 
  2334. X        "a7;[1=];[2=].100-.8I;[3=].Q.1+-r" },
  2335. X/* CALL 49 */   { 0 , 0, 
  2336. X        "8e;[1=]x" },
  2337. X/* CALL 50 */   { SRCMASK , SRCB, 
  2338. X        "ae;[1=]x" },
  2339. X/* CALL 51 */   { 0 , 0, 
  2340. X        "9e;[1=].8I;" },
  2341. X/* CLR 52 */   { DSTMASK , DSTA, 
  2342. X        "b5;" },
  2343. X/* CLR 53 */   { DSTMASK , DSTB, 
  2344. X        "c5;" },
  2345. X/* CLR 54 */   { 0 , 0, 
  2346. X        "d5;[1=].8I;" },
  2347. X/* CLRC 55 */   { 0 , 0, 
  2348. X        "b0;" },
  2349. X/* CMP 56 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2350. X        "6d;" },
  2351. X/* CMP 57 */   { DSTMASK , DSTA, 
  2352. X        "1d;[1=].8I;" },
  2353. X/* CMP 58 */   { DSTMASK , DSTB, 
  2354. X        "3d;[1=].8I;" },
  2355. X/* CMP 59 */   { 0 , 0, 
  2356. X        "4d;[1=].8I;[2=].8I;" },
  2357. X/* CMP 60 */   { DSTMASK , DSTA, 
  2358. X        "2d;[1=];" },
  2359. X/* CMP 61 */   { DSTMASK , DSTB, 
  2360. X        "5d;[1=];" },
  2361. X/* CMP 62 */   { 0 , 0, 
  2362. X        "7d;[1=];[2=].8I;" },
  2363. X/* CMPA 63 */   { 0 , 0, 
  2364. X        "8d;[1=]x" },
  2365. X/* CMPA 64 */   { SRCMASK , SRCB, 
  2366. X        "ad;[1=]x" },
  2367. X/* CMPA 65 */   { 0 , 0, 
  2368. X        "9d;[1=].8I;" },
  2369. X/* DAC 66 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2370. X        "6e;" },
  2371. X/* DAC 67 */   { DSTMASK , DSTA, 
  2372. X        "1e;[1=].8I;" },
  2373. X/* DAC 68 */   { DSTMASK , DSTB, 
  2374. X        "3e;[1=].8I;" },
  2375. X/* DAC 69 */   { 0 , 0, 
  2376. X        "4e;[1=].8I;[2=].8I;" },
  2377. X/* DAC 70 */   { DSTMASK , DSTA, 
  2378. X        "2e;[1=];" },
  2379. X/* DAC 71 */   { DSTMASK , DSTB, 
  2380. X        "5e;[1=];" },
  2381. X/* DAC 72 */   { 0 , 0, 
  2382. X        "7e;[1=];[2=].8I;" },
  2383. X/* DEC 73 */   { DSTMASK , DSTA, 
  2384. X        "b2;" },
  2385. X/* DEC 74 */   { DSTMASK , DSTB, 
  2386. X        "c2;" },
  2387. X/* DEC 75 */   { 0 , 0, 
  2388. X        "d2;[1=].8I;" },
  2389. X/* DECD 76 */   { DSTMASK , DSTA, 
  2390. X        "bb;" },
  2391. X/* DECD 77 */   { DSTMASK , DSTB, 
  2392. X        "cb;" },
  2393. X/* DECD 78 */   { 0 , 0, 
  2394. X        "db;[1=].8I;" },
  2395. X/* DINT 79 */   { 0 , 0, 
  2396. X        "06;" },
  2397. X/* DJNZ 80 */   { SRCMASK , SRCA, 
  2398. X        "ba;[2=].Q.1+-r" },
  2399. X/* DJNZ 81 */   { SRCMASK , SRCB, 
  2400. X        "ca;[2=].Q.1+-r" },
  2401. X/* DJNZ 82 */   { 0 , 0, 
  2402. X        "da;[1=].8I;[2=].Q.1+-r" },
  2403. X/* DSB 83 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2404. X        "6f;" },
  2405. X/* DSB 84 */   { DSTMASK , DSTA, 
  2406. X        "1f;[1=].8I;" },
  2407. X/* DSB 85 */   { DSTMASK , DSTB, 
  2408. X        "3f;[1=].8I;" },
  2409. X/* DSB 86 */   { 0 , 0, 
  2410. X        "4f;[1=].8I;[2=].8I;" },
  2411. X/* DSB 87 */   { DSTMASK , DSTA, 
  2412. X        "2f;[1=];" },
  2413. X/* DSB 88 */   { DSTMASK , DSTB, 
  2414. X        "5f;[1=];" },
  2415. X/* DSB 89 */   { 0 , 0, 
  2416. X        "7f;[1=];[2=].8I;" },
  2417. X/* EINT 90 */   { 0 , 0, 
  2418. X        "05;" },
  2419. X/* IDLE 91 */   { 0 , 0, 
  2420. X        "01;" },
  2421. X/* INC 92 */   { DSTMASK , DSTA, 
  2422. X        "b3;" },
  2423. X/* INC 93 */   { DSTMASK , DSTB, 
  2424. X        "c3;" },
  2425. X/* INC 94 */   { 0 , 0, 
  2426. X        "d3;[1=].8I;" },
  2427. X/* INV 95 */   { DSTMASK , DSTA, 
  2428. X        "b4;" },
  2429. X/* INV 96 */   { DSTMASK , DSTB, 
  2430. X        "c4;" },
  2431. X/* INV 97 */   { 0 , 0, 
  2432. X        "d4;[1=].8I;" },
  2433. X/* JC 98 */   { 0 , 0, 
  2434. X        "e3;[1=].Q.1+-r" },
  2435. X/* JEQ 99 */   { 0 , 0, 
  2436. X        "e2;[1=].Q.1+-r" },
  2437. X/* JGE 100 */   { 0 , 0, 
  2438. X        "e5;[1=].Q.1+-r" },
  2439. X/* JGT 101 */   { 0 , 0, 
  2440. X        "e4;[1=].Q.1+-r" },
  2441. X/* JHS 102 */   { 0 , 0, 
  2442. X        "e3;[1=].Q.1+-r" },
  2443. X/* JL 103 */   { 0 , 0, 
  2444. X        "e7;[1=].Q.1+-r" },
  2445. X/* JLT 104 */   { 0 , 0, 
  2446. X        "e1;[1=].Q.1+-r" },
  2447. X/* JMP 105 */   { 0 , 0, 
  2448. X        "e0;[1=].Q.1+-r" },
  2449. X/* JN 106 */   { 0 , 0, 
  2450. X        "e1;[1=].Q.1+-r" },
  2451. X/* JNC 107 */   { 0 , 0, 
  2452. X        "e7;[1=].Q.1+-r" },
  2453. X/* JNE 108 */   { 0 , 0, 
  2454. X        "e6;[1=].Q.1+-r" },
  2455. X/* JNZ 109 */   { 0 , 0, 
  2456. X        "e6;[1=].Q.1+-r" },
  2457. X/* JP 110 */   { 0 , 0, 
  2458. X        "e4;[1=].Q.1+-r" },
  2459. X/* JPZ 111 */   { 0 , 0, 
  2460. X        "e5;[1=].Q.1+-r" },
  2461. X/* JZ 112 */   { 0 , 0, 
  2462. X        "e2;[1=].Q.1+-r" },
  2463. X/* LDA 113 */   { 0 , 0, 
  2464. X        "8a;[1=]x" },
  2465. X/* LDA 114 */   { SRCMASK , SRCB, 
  2466. X        "aa;[1=]x" },
  2467. X/* LDA 115 */   { 0 , 0, 
  2468. X        "9a;[1=].8I;" },
  2469. X/* LDSP 116 */   { 0 , 0, 
  2470. X        "0d;" },
  2471. X/* MOV 117 */   { SRCMASK|DSTMASK , SRCA|DSTB, 
  2472. X        "c0;" },
  2473. X/* MOV 118 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2474. X        "62;" },
  2475. X/* MOV 119 */   { DSTMASK , DSTA, 
  2476. X        "12;[1=].8I;" },
  2477. X/* MOV 120 */   { SRCMASK , SRCA, 
  2478. X        "d0;[2=].8I;" },
  2479. X/* MOV 121 */   { SRCMASK , SRCB, 
  2480. X        "d1;[2=].8I;" },
  2481. X/* MOV 122 */   { DSTMASK , DSTB, 
  2482. X        "32;[1=].8I;" },
  2483. X/* MOV 123 */   { 0 , 0, 
  2484. X        "42;[1=].8I;[2=].8I;" },
  2485. X/* MOV 124 */   { DSTMASK , DSTA, 
  2486. X        "22;[1=];" },
  2487. X/* MOV 125 */   { DSTMASK , DSTB, 
  2488. X        "52;[1=];" },
  2489. X/* MOV 126 */   { 0 , 0, 
  2490. X        "72;[1=];[2=].8I;" },
  2491. X/* MOVD 127 */   { 0 , 0, 
  2492. X        "98;[1=].8I;[2=].8I;" },
  2493. X/* MOVD 128 */   { 0 , 0, 
  2494. X        "88;[1=]x[2=].8I;" },
  2495. X/* MOVD 129 */   { SRCMASK , SRCB, 
  2496. X        "a8;[1=]x[2=].8I;" },
  2497. X/* MOVP 130 */   { SRCMASK , SRCA, 
  2498. X        "82;[2=].100-.8I;" },
  2499. X/* MOVP 131 */   { SRCMASK , SRCB, 
  2500. X        "92;[2=].100-.8I;" },
  2501. X/* MOVP 132 */   { DSTMASK , DSTA, 
  2502. X        "80;[1=].100-.8I;" },
  2503. X/* MOVP 133 */   { DSTMASK , DSTB, 
  2504. X        "91;[1=].100-.8I;" },
  2505. X/* MOVP 134 */   { 0 , 0, 
  2506. X        "a2;[1=];[2=].100-.8I;" },
  2507. X/* MPY 135 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2508. X        "6c;" },
  2509. X/* MPY 136 */   { DSTMASK , DSTA, 
  2510. X        "1c;[1=].8I;" },
  2511. X/* MPY 137 */   { DSTMASK , DSTB, 
  2512. X        "3c;[1=].8I;" },
  2513. X/* MPY 138 */   { 0 , 0, 
  2514. X        "4c;[1=].8I;[2=].8I;" },
  2515. X/* MPY 139 */   { DSTMASK , DSTA, 
  2516. X        "2c;[1=];" },
  2517. X/* MPY 140 */   { DSTMASK , DSTB, 
  2518. X        "5c;[1=];" },
  2519. X/* MPY 141 */   { 0 , 0, 
  2520. X        "7c;[1=];[2=].8I;" },
  2521. X/* NOP 142 */   { 0 , 0, 
  2522. X        "00;" },
  2523. X/* OR 143 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2524. X        "64;" },
  2525. X/* OR 144 */   { DSTMASK , DSTA, 
  2526. X        "14;[1=].8I;" },
  2527. X/* OR 145 */   { DSTMASK , DSTB, 
  2528. X        "34;[1=].8I;" },
  2529. X/* OR 146 */   { 0 , 0, 
  2530. X        "44;[1=].8I;[2=].8I;" },
  2531. X/* OR 147 */   { DSTMASK , DSTA, 
  2532. X        "24;[1=];" },
  2533. X/* OR 148 */   { DSTMASK , DSTB, 
  2534. X        "54;[1=];" },
  2535. X/* OR 149 */   { 0 , 0, 
  2536. X        "74;[1=];[2=].8I;" },
  2537. X/* ORP 150 */   { SRCMASK , SRCA, 
  2538. X        "84;[2=].100-.8I;" },
  2539. X/* ORP 151 */   { SRCMASK , SRCB, 
  2540. X        "94;[2=].100-.8I;" },
  2541. X/* ORP 152 */   { 0 , 0, 
  2542. X        "a4;[1=];[2=].100-.8I;" },
  2543. X/* POP 153 */   { DSTMASK , DSTA, 
  2544. X        "b9;" },
  2545. X/* POP 154 */   { DSTMASK , DSTB, 
  2546. X        "c9;" },
  2547. X/* POP 155 */   { 0 , 0, 
  2548. X        "d9;[1=].8I;" },
  2549. X/* POP 156 */   { 0 , 0, 
  2550. X        "08;" },
  2551. X/* PUSH 157 */   { DSTMASK , DSTA, 
  2552. X        "b8;" },
  2553. X/* PUSH 158 */   { DSTMASK , DSTB, 
  2554. X        "c8;" },
  2555. X/* PUSH 159 */   { 0 , 0, 
  2556. X        "d8;[1=].8I;" },
  2557. X/* PUSH 160 */   { 0 , 0, 
  2558. X        "0e;" },
  2559. X/* RETI 161 */   { 0 , 0, 
  2560. X        "0b;" },
  2561. X/* RETS 162 */   { 0 , 0, 
  2562. X        "0a;" },
  2563. X/* RL 163 */   { DSTMASK , DSTA, 
  2564. X        "be;" },
  2565. X/* RL 164 */   { DSTMASK , DSTB, 
  2566. X        "ce;" },
  2567. X/* RL 165 */   { 0 , 0, 
  2568. X        "de;[1=].8I;" },
  2569. X/* RLC 166 */   { DSTMASK , DSTA, 
  2570. X        "bf;" },
  2571. X/* RLC 167 */   { DSTMASK , DSTB, 
  2572. X        "cf;" },
  2573. X/* RLC 168 */   { 0 , 0, 
  2574. X        "df;[1=].8I;" },
  2575. X/* RR 169 */   { DSTMASK , DSTA, 
  2576. X        "bc;" },
  2577. X/* RR 170 */   { DSTMASK , DSTB, 
  2578. X        "cc;" },
  2579. X/* RR 171 */   { 0 , 0, 
  2580. X        "dc;[1=].8I;" },
  2581. X/* RRC 172 */   { DSTMASK , DSTA, 
  2582. X        "bd;" },
  2583. X/* RRC 173 */   { DSTMASK , DSTB, 
  2584. X        "cd;" },
  2585. X/* RRC 174 */   { 0 , 0, 
  2586. X        "dd;[1=].8I;" },
  2587. X/* SBB 175 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2588. X        "6b;" },
  2589. X/* SBB 176 */   { DSTMASK , DSTA, 
  2590. X        "1b;[1=].8I;" },
  2591. X/* SBB 177 */   { DSTMASK , DSTB, 
  2592. X        "3b;[1=].8I;" },
  2593. X/* SBB 178 */   { 0 , 0, 
  2594. X        "4b;[1=].8I;[2=].8I;" },
  2595. X/* SBB 179 */   { DSTMASK , DSTA, 
  2596. X        "2b;[1=];" },
  2597. X/* SBB 180 */   { DSTMASK , DSTB, 
  2598. X        "5b;[1=];" },
  2599. X/* SBB 181 */   { 0 , 0, 
  2600. X        "7b;[1=];[2=].8I;" },
  2601. X/* SETC 182 */   { 0 , 0, 
  2602. X        "07;" },
  2603. X/* STA 183 */   { 0 , 0, 
  2604. X        "8b;[1=]x" },
  2605. X/* STA 184 */   { SRCMASK , SRCB, 
  2606. X        "ab;[1=]x" },
  2607. X/* STA 185 */   { 0 , 0, 
  2608. X        "9b;[1=].8I;" },
  2609. X/* STSP 186 */   { 0 , 0, 
  2610. X        "09;" },
  2611. X/* SUB 187 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2612. X        "6a;" },
  2613. X/* SUB 188 */   { DSTMASK , DSTA, 
  2614. X        "1a;[1=].8I;" },
  2615. X/* SUB 189 */   { DSTMASK , DSTB, 
  2616. X        "3a;[1=].8I;" },
  2617. X/* SUB 190 */   { 0 , 0, 
  2618. X        "4a;[1=].8I;[2=].8I;" },
  2619. X/* SUB 191 */   { DSTMASK , DSTA, 
  2620. X        "2a;[1=];" },
  2621. X/* SUB 192 */   { DSTMASK , DSTB, 
  2622. X        "5a;[1=];" },
  2623. X/* SUB 193 */   { 0 , 0, 
  2624. X        "7a;[1=];[2=].8I;" },
  2625. X/* SWAP 194 */   { DSTMASK , DSTA, 
  2626. X        "b7;" },
  2627. X/* SWAP 195 */   { DSTMASK , DSTB, 
  2628. X        "c7;" },
  2629. X/* SWAP 196 */   { 0 , 0, 
  2630. X        "d7;[1=].8I;" },
  2631. X/* TRAP 197 */   { 0 , 0, 
  2632. X        "ff.[1=].5I-~.e8<T!;" },
  2633. X/* TSTA 198 */   { 0 , 0, 
  2634. X        "b0;" },
  2635. X/* TSTB 199 */   { 0 , 0, 
  2636. X        "c1;" },
  2637. X/* XCHB 200 */   { DSTMASK , DSTA, 
  2638. X        "b6;" },
  2639. X/* XCHB 201 */   { DSTMASK , DSTB, 
  2640. X        "c6;" },
  2641. X/* XCHB 202 */   { 0 , 0, 
  2642. X        "d6;[1=].8I;" },
  2643. X/* XOR 203 */   { SRCMASK|DSTMASK , SRCB|DSTA, 
  2644. X        "65;" },
  2645. X/* XOR 204 */   { DSTMASK , DSTA, 
  2646. X        "15;[1=].8I;" },
  2647. X/* XOR 205 */   { DSTMASK , DSTB, 
  2648. X        "35;[1=].8I;" },
  2649. X/* XOR 206 */   { 0 , 0, 
  2650. X        "45;[1=].8I;[2=].8I;" },
  2651. X/* XOR 207 */   { DSTMASK , DSTA, 
  2652. X        "25;[1=];" },
  2653. X/* XOR 208 */   { DSTMASK , DSTB, 
  2654. X        "55;[1=];" },
  2655. X/* XOR 209 */   { 0 , 0, 
  2656. X        "75;[1=];[2=].8I;" },
  2657. X/* XORP 210 */   { SRCMASK , SRCA, 
  2658. X        "85;[2=].100-.8I;" },
  2659. X/* XORP 211 */   { SRCMASK , SRCB, 
  2660. X        "95;[2=].100-.8I;" },
  2661. X/* XORP 212 */   { 0 , 0, 
  2662. X        "a5;[1=];[2=].100-.8I;" },
  2663. X    { 0,0,""} };
  2664. X/* end fraptabdef.c */
  2665. SHAR_EOF
  2666. true || echo 'restore of as7000.y failed'
  2667. fi
  2668. exit 0
  2669.