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

  1. From: markz@ssc.UUCP (Mark Zenier)
  2. Newsgroups: alt.sources
  3. Subject: Frankenstein Cross Assemblers, Intel 8051 Flavor, Part 1 of 1
  4. Message-ID: <605@ssc.UUCP>
  5. Date: 5 Dec 90 06:15:15 GMT
  6.  
  7. ---- Cut Here and feed the following to sh ----
  8. #!/bin/sh
  9. # This is Frankasm/As8051, 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----- as8051.1
  21. #   4578 -r--r----- as8051.doc
  22. #   3427 -r--r----- as8051.tst
  23. #   6753 -r--r----- as8051.tut
  24. #  38580 -r--r--r-- as8051.y
  25. #
  26. # ============= as8051.1 ==============
  27. if test -f 'as8051.1' -a X"$1" != X"-c"; then
  28.     echo 'x - skipping as8051.1 (File already exists)'
  29. else
  30. echo 'x - extracting as8051.1 (Text)'
  31. sed 's/^X//' << 'SHAR_EOF' > 'as8051.1' &&
  32. X.TH AS8051 1L
  33. X.SH NAME
  34. Xas8051 \- cross assembler for microcomputers
  35. X.SH SYNOPSIS
  36. Xas8051 [-p cpu] [-l listfile] [-o hexfile] [-d] [-s symbolfile] input
  37. X.SH DESCRIPTION
  38. XThe as8051 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 as8051 Frankenstein Assembler (file as8051.doc)
  60. X.SH NOTES
  61. XThere is only one input file.
  62. SHAR_EOF
  63. true || echo 'restore of as8051.1 failed'
  64. fi
  65. # ============= as8051.doc ==============
  66. if test -f 'as8051.doc' -a X"$1" != X"-c"; then
  67.     echo 'x - skipping as8051.doc (File already exists)'
  68. else
  69. echo 'x - extracting as8051.doc (Text)'
  70. sed 's/^X//' << 'SHAR_EOF' > 'as8051.doc' &&
  71. X.HM A 1 1 1 1 1 1
  72. X.H 1 "Appendix for as8051 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 3 "Machine Dependent Pseudo Operations"
  116. X.H 4 "Define Word Data"
  117. XThe Define Word Data pseudo-operations generate the byte reversed form
  118. Xfor 16 bit constants.
  119. XThe first byte is the low order half, followed by the high order byte.
  120. X.H 2 "Instructions"
  121. X.H 3 "Instruction List"
  122. X.TS H
  123. X;
  124. Xl l l.
  125. XOpcode    Syntax    Selection Criteria
  126. X.sp
  127. X.TH
  128. X.sp
  129. XACALL    expr
  130. X.sp
  131. XADD    A ',' '#' expr    
  132. XADD    A ',' '@' REG    R01
  133. XADD    A ',' REG    R07
  134. XADD    A ',' expr    
  135. X.sp
  136. XADDC    A ',' '#' expr    
  137. XADDC    A ',' '@' REG    R01
  138. XADDC    A ',' REG    R07
  139. XADDC    A ',' expr    
  140. X.sp
  141. XAJMP    expr
  142. X.sp
  143. XANL    A ',' '#' expr    
  144. XANL    A ',' '@' REG    R01
  145. XANL    A ',' REG    R07
  146. XANL    A ',' expr    
  147. XANL    C ',' '/' bit    
  148. XANL    C ',' '/' expr    
  149. XANL    C ',' bit    
  150. XANL    C ',' expr    
  151. XANL    expr ',' '#' expr
  152. XANL    expr ','A
  153. X.sp
  154. XCJNE    A ',' '#' expr ',' expr    
  155. XCJNE    A ',' expr ',' expr    
  156. XCJNE    '@' REG ',' '#' expr ',' expr    R01
  157. XCJNE    REG ',' '#' expr ',' expr    R07
  158. X.sp
  159. XCLR    A    
  160. XCLR    C    
  161. XCLR    bit
  162. XCLR    expr
  163. X.sp
  164. XCPL    A    
  165. XCPL    C    
  166. XCPL    bit
  167. XCPL    expr
  168. X.sp
  169. XDA    A    
  170. X.sp
  171. XDEC    '@' REG    R01
  172. XDEC    A    
  173. XDEC    REG    R07
  174. XDEC    expr
  175. X.sp
  176. XDIV    AB    
  177. X.sp
  178. XDJNZ    REG ',' expr    R07
  179. XDJNZ    expr ',' expr
  180. X.sp
  181. XINC    '@' REG    R01
  182. XINC    A    
  183. XINC    DPTR    
  184. XINC    REG    R07
  185. XINC    expr
  186. X.sp
  187. XJB    bit ',' expr
  188. XJB    expr ',' expr
  189. X.sp
  190. XJBC    bit ',' expr
  191. XJBC    expr ',' expr
  192. X.sp
  193. XJC    expr
  194. X.sp
  195. XJMP    '@' A '+' DPTR    
  196. X.sp
  197. XJNB    bit ',' expr
  198. XJNB    expr ',' expr
  199. X.sp
  200. XJNC    expr
  201. X.sp
  202. XJNZ    expr
  203. X.sp
  204. XJZ    expr
  205. X.sp
  206. XLCALL    expr
  207. X.sp
  208. XLJMP    expr
  209. X.sp
  210. XMOV    '@' REG ',' '#' expr    R01
  211. XMOV    '@' REG ',' A    R01
  212. XMOV    '@' REG ',' expr    R01
  213. XMOV    A ',' '#' expr    
  214. XMOV    A ',' '@' REG    R01
  215. XMOV    A ',' REG    R07
  216. XMOV    A ',' expr    
  217. XMOV    C ',' bit    
  218. XMOV    C ',' expr    
  219. XMOV    DPTR ',' '#' expr    
  220. XMOV    REG ',' A    R07
  221. XMOV    REG ',' '#' expr    R07
  222. XMOV    REG ',' expr    R07
  223. XMOV    bit ',' C    
  224. XMOV    expr ',' '#' expr
  225. XMOV    expr ',' '@' REG    R01
  226. XMOV    expr ',' A    
  227. XMOV    expr ',' C    
  228. XMOV    expr ',' REG    R07
  229. XMOV    expr ',' expr
  230. X.sp
  231. XMOVC    A ',' '@' A '+' DPTR    
  232. XMOVC    A ',' '@' A '+' PC    
  233. X.sp
  234. XMOVX    '@' DPTR ',' A    
  235. XMOVX    '@' REG ',' A    R01
  236. XMOVX    A ',' '@' DPTR    
  237. XMOVX    A ',' '@' REG    R01
  238. X.sp
  239. XMUL    AB    
  240. X.sp
  241. XNOP    
  242. X.sp
  243. XORL    A ',' '#' expr    
  244. XORL    A ',' '@' REG    R01
  245. XORL    A ',' REG    R07
  246. XORL    A ',' expr    
  247. XORL    C ',' '/' bit    
  248. XORL    C ',' '/' expr    
  249. XORL    C ',' bit    
  250. XORL    C ',' expr    
  251. XORL    expr ',' '#' expr
  252. XORL    expr ',' A    
  253. X.sp
  254. XPOP    expr
  255. X.sp
  256. XPUSH    expr
  257. X.sp
  258. XRET    
  259. X.sp
  260. XRETI    
  261. X.sp
  262. XRL    A    
  263. X.sp
  264. XRLC    A    
  265. X.sp
  266. XRR    A    
  267. X.sp
  268. XRRC    A    
  269. X.sp
  270. XSETB    C    
  271. XSETB    bit
  272. XSETB    expr
  273. X.sp
  274. XSJMP    expr
  275. X.sp
  276. XSUBB    A ',' '#' expr    
  277. XSUBB    A ',' '@' REG    R01
  278. XSUBB    A ',' REG    R07
  279. XSUBB    A ',' expr    
  280. X.sp
  281. XSWAP    A    
  282. X.sp
  283. XXCH    A ',' '@' REG    R01
  284. XXCH    A ',' REG    R07
  285. XXCH    A ',' expr    
  286. X.sp
  287. XXCHD    A ',' '@' REG    R01
  288. X.sp
  289. XXRL    A ',' '#' expr    
  290. XXRL    A ',' '@' REG    R01
  291. XXRL    A ',' REG    R07
  292. XXRL    A ',' expr    
  293. XXRL    expr ',' '#' expr
  294. XXRL    expr ',' A    
  295. X.TE
  296. X.H 3 "Selection Criteria Keywords"
  297. X.VL 25 5 
  298. X.LI R01
  299. XOnly the reserved symbols R0 and R1 (or r0, r1) are acceptable as
  300. Xthe REG operand.
  301. X.LI R07
  302. XAll the reserved symbols R0 thru R7 are acceptable as the REG operand.
  303. X.LE
  304. X.H 3 "Bit Operands"
  305. XBit Addresses can be in two forms.
  306. X.P
  307. XOne form is "expression.constant" where expression gives an address for a 
  308. Xbit addressable register and constant (in the range of 0 to 7) gives the 
  309. Xbit number in the byte.
  310. XExpression values must be either in the range of 20h to 2fh, or
  311. Xthe multiples of 8 between 80h and f8h, and defined in the first pass.
  312. X.P
  313. XThe second form is an symbolic expression with value between 0 and 255.
  314. XThe value of the expression is placed in the operand field of the
  315. Xinstruction without modification.
  316. X.H 3 "Apostrophes"
  317. XThe apostrophes in the syntax field are a notation used for the
  318. Xparser generator and are not put in the assembler source statement.
  319. X.H 2 "Notes"
  320. X.H 3 "Address Spaces"
  321. XThe Four address spaces, Program Memory, Internal Data Memory, Bit Numbers, 
  322. Xand External Data Memory are not differentiated in the symbol table.
  323. XWhich address space a symbol refers to is determined by the context of
  324. Xthe instruction operands it appears in.
  325. X.H 3 "Reserved Symbols"
  326. X.H 4 "Machine Dependent Reserved Symbols"
  327. XA
  328. XAB
  329. XC
  330. XDPTR
  331. XPC
  332. XR0
  333. XR1
  334. XR2
  335. XR3
  336. XR4
  337. XR5
  338. XR6
  339. XR7
  340. Xa
  341. Xab
  342. Xc
  343. Xdptr
  344. Xpc
  345. Xr0
  346. Xr1
  347. Xr2
  348. Xr3
  349. Xr4
  350. Xr5
  351. Xr6
  352. Xr7
  353. X.H 4 "Standard Reserved Symbols"
  354. XAND
  355. XDEFINED
  356. XEQ
  357. XGE
  358. XGT
  359. XHIGH
  360. XLE
  361. XLOW
  362. XLT
  363. XMOD
  364. XNE
  365. XNOT
  366. XOR
  367. XSHL
  368. XSHR
  369. XXOR
  370. Xand
  371. Xdefined
  372. Xeq
  373. Xge
  374. Xgt
  375. Xhigh
  376. Xle
  377. Xlow
  378. Xlt
  379. Xmod
  380. Xne
  381. Xnot
  382. Xor
  383. Xshl
  384. Xshr
  385. Xxor
  386. X.TC 1 1 7
  387. SHAR_EOF
  388. true || echo 'restore of as8051.doc failed'
  389. fi
  390. # ============= as8051.tst ==============
  391. if test -f 'as8051.tst' -a X"$1" != X"-c"; then
  392.     echo 'x - skipping as8051.tst (File already exists)'
  393. else
  394. echo 'x - extracting as8051.tst (Text)'
  395. sed 's/^X//' << 'SHAR_EOF' > 'as8051.tst' &&
  396. Xbit    equ     $88
  397. Xdirbit    equ    $8d
  398. Xdirect    equ    $44
  399. Ximmed    equ    $55
  400. Xsrcdirect    equ    $33
  401. X    acall    addr
  402. X    add    a, #immed
  403. X    add    a, @ r0
  404. X    add    a, @ r1
  405. X    add    a, direct
  406. X    add    a, r0
  407. X    add    a, r1
  408. X    add    a, r2
  409. X    add    a, r3
  410. X    add    a, r4
  411. X    add    a, r5
  412. X    add    a, r6
  413. X    add    a, r7
  414. X    addc    a, #immed
  415. X    addc    a, @ r0
  416. X    addc    a, @ r1
  417. X    addc    a, direct
  418. X    addc    a, r0
  419. X    addc    a, r1
  420. X    addc    a, r2
  421. X    addc    a, r3
  422. X    addc    a, r4
  423. X    addc    a, r5
  424. X    addc    a, r6
  425. X    addc    a, r7
  426. X    ajmp    addr
  427. X    anl    a, #immed
  428. X    anl    a, @ r0
  429. X    anl    a, @ r1
  430. X    anl    a, direct
  431. X    anl    a, r0
  432. X    anl    a, r1
  433. X    anl    a, r2
  434. X    anl    a, r3
  435. X    anl    a, r4
  436. X    anl    a, r5
  437. X    anl    a, r6
  438. X    anl    a, r7
  439. X    anl    c, /bit.5
  440. X    anl    c, /dirbit
  441. X    anl    c, bit.5
  442. X    anl    c, dirbit
  443. X    anl    direct, # immed
  444. X    anl    direct, a
  445. X    cjne    @ r0, # immed, addr
  446. X    cjne    @ r1, # immed, addr
  447. X    cjne    a, #immed, addr
  448. X    cjne    a, direct, addr
  449. X    cjne    r0, # immed, addr
  450. X    cjne    r1, # immed, addr
  451. X    cjne    r2, # immed, addr
  452. X    cjne    r3, # immed, addr
  453. X    cjne    r4, # immed, addr
  454. X    cjne    r5, # immed, addr
  455. X    cjne    r6, # immed, addr
  456. X    cjne    r7, # immed, addr
  457. X    clr    a
  458. X    clr    bit.5
  459. X    clr    c
  460. X    clr    dirbit
  461. X    cpl    a
  462. X    cpl    bit.5
  463. X    cpl    c
  464. X    cpl    dirbit
  465. X    da    a
  466. X    dec    @ r0
  467. X    dec    @ r1
  468. X    dec    a
  469. X    dec    direct
  470. X    dec    r0
  471. X    dec    r1
  472. X    dec    r2
  473. X    dec    r3
  474. X    dec    r4
  475. X    dec    r5
  476. X    dec    r6
  477. X    dec    r7
  478. X    div    ab
  479. X    djnz    direct, addr
  480. X    djnz    r0, addr
  481. X    djnz    r1, addr
  482. X    djnz    r2, addr
  483. X    djnz    r3, addr
  484. X    djnz    r4, addr
  485. X    djnz    r5, addr
  486. X    djnz    r6, addr
  487. X    djnz    r7, addr
  488. X    inc    @ r0
  489. X    inc    @ r1
  490. X    inc    a
  491. X    inc    direct
  492. X    inc    dptr
  493. X    inc    r0
  494. X    inc    r1
  495. X    inc    r2
  496. X    inc    r3
  497. X    inc    r4
  498. Xaddr    inc    r5
  499. X    inc    r6
  500. X    inc    r7
  501. X    jb    bit.5, addr
  502. X    jb    dirbit, addr
  503. X    jbc    bit.5, addr
  504. X    jbc    dirbit, addr
  505. X    jc    addr
  506. X    jmp    @a+dptr
  507. X    jnb    bit.5, addr
  508. X    jnb    dirbit, addr
  509. X    jnc    addr
  510. X    jnz    addr
  511. X    jz    addr
  512. X    lcall    addr
  513. X    ljmp    addr
  514. X    mov    @ r0, # immed
  515. X    mov    @ r0, a
  516. X    mov    @ r0, direct
  517. X    mov    @ r1, # immed
  518. X    mov    @ r1, a
  519. X    mov    @ r1, direct
  520. X    mov    a, #immed
  521. X    mov    a, @ r0
  522. X    mov    a, @ r1
  523. X    mov    a, direct
  524. X    mov    a, r0
  525. X    mov    a, r1
  526. X    mov    a, r2
  527. X    mov    a, r3
  528. X    mov    a, r4
  529. X    mov    a, r5
  530. X    mov    a, r6
  531. X    mov    a, r7
  532. X    mov    bit.5, c
  533. X    mov    c, bit.5
  534. X    mov    c, dirbit
  535. X    mov    dirbit, c
  536. X    mov    direct, # immed
  537. X    mov    direct, @ r0
  538. X    mov    direct, @ r1
  539. X    mov    direct, a
  540. X    mov    direct, r0
  541. X    mov    direct, r1
  542. X    mov    direct, r2
  543. X    mov    direct, r3
  544. X    mov    direct, r4
  545. X    mov    direct, r5
  546. X    mov    direct, r6
  547. X    mov    direct, r7
  548. X    mov    direct, srcdirect
  549. X    mov    dptr, #immed
  550. X    mov    r0, # immed
  551. X    mov    r0, a
  552. X    mov    r0, direct
  553. X    mov    r1, # immed
  554. X    mov    r1, a
  555. X    mov    r1, direct
  556. X    mov    r2, # immed
  557. X    mov    r2, a
  558. X    mov    r2, direct
  559. X    mov    r3, # immed
  560. X    mov    r3, a
  561. X    mov    r3, direct
  562. X    mov    r4, # immed
  563. X    mov    r4, a
  564. X    mov    r4, direct
  565. X    mov    r5, # immed
  566. X    mov    r5, a
  567. X    mov    r5, direct
  568. X    mov    r6, # immed
  569. X    mov    r6, a
  570. X    mov    r6, direct
  571. X    mov    r7, # immed
  572. X    mov    r7, a
  573. X    mov    r7, direct
  574. X    movc    a, @a+dptr
  575. Xsaddr    movc    a, @a+pc
  576. X    movx    @dptr, a
  577. X    movx    @r0, a
  578. X    movx    @r1, a
  579. X    movx    a, @ r0
  580. X    movx    a, @ r1
  581. X    movx    a, @dptr
  582. X    mul    ab
  583. X    nop
  584. X    orl    a, #immed
  585. X    orl    a, @ r0
  586. X    orl    a, @ r1
  587. X    orl    a, direct
  588. X    orl    a, r0
  589. X    orl    a, r1
  590. X    orl    a, r2
  591. X    orl    a, r3
  592. X    orl    a, r4
  593. X    orl    a, r5
  594. X    orl    a, r6
  595. X    orl    a, r7
  596. X    orl    c, /bit.5
  597. X    orl    c, /dirbit
  598. X    orl    c, bit.5
  599. X    orl    c, dirbit
  600. X    orl    direct, # immed
  601. X    orl    direct, a
  602. X    pop    direct
  603. X    push    direct
  604. X    ret
  605. X    reti
  606. X    rl    a
  607. X    rlc    a
  608. X    rr    a
  609. X    rrc    a
  610. X    setb    bit.5
  611. X    setb    c
  612. X    setb    dirbit
  613. X    sjmp    saddr
  614. X    subb    a, #immed
  615. X    subb    a, @ r0
  616. X    subb    a, @ r1
  617. X    subb    a, direct
  618. X    subb    a, r0
  619. X    subb    a, r1
  620. X    subb    a, r2
  621. X    subb    a, r3
  622. X    subb    a, r4
  623. X    subb    a, r5
  624. X    subb    a, r6
  625. X    subb    a, r7
  626. X    swap    a
  627. X    xch    a, @ r0
  628. X    xch    a, @ r1
  629. X    xch    a, direct
  630. X    xch    a, r0
  631. X    xch    a, r1
  632. X    xch    a, r2
  633. X    xch    a, r3
  634. X    xch    a, r4
  635. X    xch    a, r5
  636. X    xch    a, r6
  637. X    xch    a, r7
  638. X    xchd    a, @ r0
  639. X    xchd    a, @ r1
  640. X    xrl    a, #immed
  641. X    xrl    a, @ r0
  642. X    xrl    a, @ r1
  643. X    xrl    a, direct
  644. X    xrl    a, r0
  645. X    xrl    a, r1
  646. X    xrl    a, r2
  647. X    xrl    a, r3
  648. X    xrl    a, r4
  649. X    xrl    a, r5
  650. X    xrl    a, r6
  651. X    xrl    a, r7
  652. X    xrl    direct, # immed
  653. X    xrl    direct, a
  654. SHAR_EOF
  655. true || echo 'restore of as8051.tst failed'
  656. fi
  657. # ============= as8051.tut ==============
  658. if test -f 'as8051.tut' -a X"$1" != X"-c"; then
  659.     echo 'x - skipping as8051.tut (File already exists)'
  660. else
  661. echo 'x - extracting as8051.tut (Text)'
  662. sed 's/^X//' << 'SHAR_EOF' > 'as8051.tut' &&
  663. X00000088 bit              0000008d dirbit           00000044 direct           
  664. X00000055 immed            00000033 srcdirect        00000098 addr             
  665. X00000124 saddr            
  666. X  0x88                   bit    equ     $88
  667. X 0x8d                   dirbit    equ    $8d
  668. X 0x44                   direct    equ    $44
  669. X 0x55                   immed    equ    $55
  670. X 0x33                   srcdirect    equ    $33
  671. X0000 11 98             acall    addr
  672. X0002 24 55             add    a, #immed
  673. X0004 26             add    a, @ r0
  674. X0005 27             add    a, @ r1
  675. X0006 25 44             add    a, direct
  676. X0008 28             add    a, r0
  677. X0009 29             add    a, r1
  678. X000a 2a             add    a, r2
  679. X000b 2b             add    a, r3
  680. X000c 2c             add    a, r4
  681. X000d 2d             add    a, r5
  682. X000e 2e             add    a, r6
  683. X000f 2f             add    a, r7
  684. X0010 34 55             addc    a, #immed
  685. X0012 36             addc    a, @ r0
  686. X0013 37             addc    a, @ r1
  687. X0014 35 44             addc    a, direct
  688. X0016 38             addc    a, r0
  689. X0017 39             addc    a, r1
  690. X0018 3a             addc    a, r2
  691. X0019 3b             addc    a, r3
  692. X001a 3c             addc    a, r4
  693. X001b 3d             addc    a, r5
  694. X001c 3e             addc    a, r6
  695. X001d 3f             addc    a, r7
  696. X001e 01 98             ajmp    addr
  697. X0020 54 55             anl    a, #immed
  698. X0022 56             anl    a, @ r0
  699. X0023 57             anl    a, @ r1
  700. X0024 55 44             anl    a, direct
  701. X0026 58             anl    a, r0
  702. X0027 59             anl    a, r1
  703. X0028 5a             anl    a, r2
  704. X0029 5b             anl    a, r3
  705. X002a 5c             anl    a, r4
  706. X002b 5d             anl    a, r5
  707. X002c 5e             anl    a, r6
  708. X002d 5f             anl    a, r7
  709. X002e b0 8d             anl    c, /bit.5
  710. X0030 b0 8d             anl    c, /dirbit
  711. X0032 82 8d             anl    c, bit.5
  712. X0034 82 8d             anl    c, dirbit
  713. X0036 53 44 55             anl    direct, # immed
  714. X0039 52 44             anl    direct, a
  715. X003b b6 55 5a             cjne    @ r0, # immed, addr
  716. X003e b7 55 57             cjne    @ r1, # immed, addr
  717. X0041 b4 55 54             cjne    a, #immed, addr
  718. X0044 b5 44 51             cjne    a, direct, addr
  719. X0047 b8 55 4e             cjne    r0, # immed, addr
  720. X004a b9 55 4b             cjne    r1, # immed, addr
  721. X004d ba 55 48             cjne    r2, # immed, addr
  722. X0050 bb 55 45             cjne    r3, # immed, addr
  723. X0053 bc 55 42             cjne    r4, # immed, addr
  724. X0056 bd 55 3f             cjne    r5, # immed, addr
  725. X0059 be 55 3c             cjne    r6, # immed, addr
  726. X005c bf 55 39             cjne    r7, # immed, addr
  727. X005f e4             clr    a
  728. X0060 c2 8d             clr    bit.5
  729. X0062 c3             clr    c
  730. X0063 c2 8d             clr    dirbit
  731. X0065 f4             cpl    a
  732. X0066 b2 8d             cpl    bit.5
  733. X0068 b3             cpl    c
  734. X0069 b2 8d             cpl    dirbit
  735. X006b d4             da    a
  736. X006c 16             dec    @ r0
  737. X006d 17             dec    @ r1
  738. X006e 14             dec    a
  739. X006f 15 44             dec    direct
  740. X0071 18             dec    r0
  741. X0072 19             dec    r1
  742. X0073 1a             dec    r2
  743. X0074 1b             dec    r3
  744. X0075 1c             dec    r4
  745. X0076 1d             dec    r5
  746. X0077 1e             dec    r6
  747. X0078 1f             dec    r7
  748. X0079 84             div    ab
  749. X007a d5 44 1b             djnz    direct, addr
  750. X007d d8 19             djnz    r0, addr
  751. X007f d9 17             djnz    r1, addr
  752. X0081 da 15             djnz    r2, addr
  753. X0083 db 13             djnz    r3, addr
  754. X0085 dc 11             djnz    r4, addr
  755. X0087 dd 0f             djnz    r5, addr
  756. X0089 de 0d             djnz    r6, addr
  757. X008b df 0b             djnz    r7, addr
  758. X008d 06             inc    @ r0
  759. X008e 07             inc    @ r1
  760. X008f 04             inc    a
  761. X0090 05 44             inc    direct
  762. X0092 a3             inc    dptr
  763. X0093 08             inc    r0
  764. X0094 09             inc    r1
  765. X0095 0a             inc    r2
  766. X0096 0b             inc    r3
  767. X0097 0c             inc    r4
  768. X0098 0d         addr    inc    r5
  769. X0099 0e             inc    r6
  770. X009a 0f             inc    r7
  771. X009b 20 8d fa             jb    bit.5, addr
  772. X009e 20 8d f7             jb    dirbit, addr
  773. X00a1 10 8d f4             jbc    bit.5, addr
  774. X00a4 10 8d f1             jbc    dirbit, addr
  775. X00a7 40 ef             jc    addr
  776. X00a9 73             jmp    @a+dptr
  777. X00aa 30 8d eb             jnb    bit.5, addr
  778. X00ad 30 8d e8             jnb    dirbit, addr
  779. X00b0 50 e6             jnc    addr
  780. X00b2 70 e4             jnz    addr
  781. X00b4 60 e2             jz    addr
  782. X00b6 12 00 98             lcall    addr
  783. X00b9 02 00 98             ljmp    addr
  784. X00bc 76 55             mov    @ r0, # immed
  785. X00be f6             mov    @ r0, a
  786. X00bf a6 44             mov    @ r0, direct
  787. X00c1 77 55             mov    @ r1, # immed
  788. X00c3 f7             mov    @ r1, a
  789. X00c4 a7 44             mov    @ r1, direct
  790. X00c6 74 55             mov    a, #immed
  791. X00c8 e6             mov    a, @ r0
  792. X00c9 e7             mov    a, @ r1
  793. X00ca e5 44             mov    a, direct
  794. X00cc e8             mov    a, r0
  795. X00cd e9             mov    a, r1
  796. X00ce ea             mov    a, r2
  797. X00cf eb             mov    a, r3
  798. X00d0 ec             mov    a, r4
  799. X00d1 ed             mov    a, r5
  800. X00d2 ee             mov    a, r6
  801. X00d3 ef             mov    a, r7
  802. X00d4 92 8d             mov    bit.5, c
  803. X00d6 a2 8d             mov    c, bit.5
  804. X00d8 a2 8d             mov    c, dirbit
  805. X00da 92 8d             mov    dirbit, c
  806. X00dc 75 44 55             mov    direct, # immed
  807. X00df 86 44             mov    direct, @ r0
  808. X00e1 87 44             mov    direct, @ r1
  809. X00e3 f5 44             mov    direct, a
  810. X00e5 88 44             mov    direct, r0
  811. X00e7 89 44             mov    direct, r1
  812. X00e9 8a 44             mov    direct, r2
  813. X00eb 8b 44             mov    direct, r3
  814. X00ed 8c 44             mov    direct, r4
  815. X00ef 8d 44             mov    direct, r5
  816. X00f1 8e 44             mov    direct, r6
  817. X00f3 8f 44             mov    direct, r7
  818. X00f5 85 33 44             mov    direct, srcdirect
  819. X00f8 90 00 55             mov    dptr, #immed
  820. X00fb 78 55             mov    r0, # immed
  821. X00fd f8             mov    r0, a
  822. X00fe a8 44             mov    r0, direct
  823. X0100 79 55             mov    r1, # immed
  824. X0102 f9             mov    r1, a
  825. X0103 a9 44             mov    r1, direct
  826. X0105 7a 55             mov    r2, # immed
  827. X0107 fa             mov    r2, a
  828. X0108 aa 44             mov    r2, direct
  829. X010a 7b 55             mov    r3, # immed
  830. X010c fb             mov    r3, a
  831. X010d ab 44             mov    r3, direct
  832. X010f 7c 55             mov    r4, # immed
  833. X0111 fc             mov    r4, a
  834. X0112 ac 44             mov    r4, direct
  835. X0114 7d 55             mov    r5, # immed
  836. X0116 fd             mov    r5, a
  837. X0117 ad 44             mov    r5, direct
  838. X0119 7e 55             mov    r6, # immed
  839. X011b fe             mov    r6, a
  840. X011c ae 44             mov    r6, direct
  841. X011e 7f 55             mov    r7, # immed
  842. X0120 ff             mov    r7, a
  843. X0121 af 44             mov    r7, direct
  844. X0123 93             movc    a, @a+dptr
  845. X0124 83         saddr    movc    a, @a+pc
  846. X0125 f0             movx    @dptr, a
  847. X0126 f2             movx    @r0, a
  848. X0127 f3             movx    @r1, a
  849. X0128 e2             movx    a, @ r0
  850. X0129 e3             movx    a, @ r1
  851. X012a e0             movx    a, @dptr
  852. X012b a4             mul    ab
  853. X012c 00             nop
  854. X012d 44 55             orl    a, #immed
  855. X012f 46             orl    a, @ r0
  856. X0130 47             orl    a, @ r1
  857. X0131 45 44             orl    a, direct
  858. X0133 48             orl    a, r0
  859. X0134 49             orl    a, r1
  860. X0135 4a             orl    a, r2
  861. X0136 4b             orl    a, r3
  862. X0137 4c             orl    a, r4
  863. X0138 4d             orl    a, r5
  864. X0139 4e             orl    a, r6
  865. X013a 4f             orl    a, r7
  866. X013b a0 8d             orl    c, /bit.5
  867. X013d a0 8d             orl    c, /dirbit
  868. X013f 72 8d             orl    c, bit.5
  869. X0141 72 8d             orl    c, dirbit
  870. X0143 43 44 55             orl    direct, # immed
  871. X0146 42 44             orl    direct, a
  872. X0148 d0 44             pop    direct
  873. X014a c0 44             push    direct
  874. X014c 22             ret
  875. X014d 32             reti
  876. X014e 23             rl    a
  877. X014f 33             rlc    a
  878. X0150 03             rr    a
  879. X0151 13             rrc    a
  880. X0152 d2 8d             setb    bit.5
  881. X0154 d3             setb    c
  882. X0155 d2 8d             setb    dirbit
  883. X0157 80 cb             sjmp    saddr
  884. X0159 94 55             subb    a, #immed
  885. X015b 96             subb    a, @ r0
  886. X015c 97             subb    a, @ r1
  887. X015d 95 44             subb    a, direct
  888. X015f 98             subb    a, r0
  889. X0160 99             subb    a, r1
  890. X0161 9a             subb    a, r2
  891. X0162 9b             subb    a, r3
  892. X0163 9c             subb    a, r4
  893. X0164 9d             subb    a, r5
  894. X0165 9e             subb    a, r6
  895. X0166 9f             subb    a, r7
  896. X0167 c4             swap    a
  897. X0168 c6             xch    a, @ r0
  898. X0169 c7             xch    a, @ r1
  899. X016a c5 44             xch    a, direct
  900. X016c c8             xch    a, r0
  901. X016d c9             xch    a, r1
  902. X016e ca             xch    a, r2
  903. X016f cb             xch    a, r3
  904. X0170 cc             xch    a, r4
  905. X0171 cd             xch    a, r5
  906. X0172 ce             xch    a, r6
  907. X0173 cf             xch    a, r7
  908. X0174 d6             xchd    a, @ r0
  909. X0175 d7             xchd    a, @ r1
  910. X0176 64 55             xrl    a, #immed
  911. X0178 66             xrl    a, @ r0
  912. X0179 67             xrl    a, @ r1
  913. X017a 65 44             xrl    a, direct
  914. X017c 68             xrl    a, r0
  915. X017d 69             xrl    a, r1
  916. X017e 6a             xrl    a, r2
  917. X017f 6b             xrl    a, r3
  918. X0180 6c             xrl    a, r4
  919. X0181 6d             xrl    a, r5
  920. X0182 6e             xrl    a, r6
  921. X0183 6f             xrl    a, r7
  922. X0184 63 44 55             xrl    direct, # immed
  923. X0187 62 44             xrl    direct, a
  924. X ERROR SUMMARY - ERRORS DETECTED 0
  925. X               -  WARNINGS       0
  926. SHAR_EOF
  927. true || echo 'restore of as8051.tut failed'
  928. fi
  929. # ============= as8051.y ==============
  930. if test -f 'as8051.y' -a X"$1" != X"-c"; then
  931.     echo 'x - skipping as8051.y (File already exists)'
  932. else
  933. echo 'x - extracting as8051.y (Text)'
  934. sed 's/^X//' << 'SHAR_EOF' > 'as8051.y' &&
  935. X%{
  936. X
  937. X/*
  938. XHEADER:     ;
  939. XTITLE:         Frankenstein Cross Assemblers;
  940. XVERSION:     2.0;
  941. XDESCRIPTION: "    Reconfigurable Cross-assembler producing Intel (TM)
  942. X        Hex format object records.  ";
  943. XKEYWORDS:     cross-assemblers, 1805, 2650, 6301, 6502, 6805, 6809, 
  944. X        6811, tms7000, 8048, 8051, 8096, z8, z80;
  945. XSYSTEM:     UNIX, MS-Dos ;
  946. XFILENAME:     as8051.y;
  947. XWARNINGS:     "This software is in the public domain.  
  948. X        Any prior copyright claims are relinquished.  
  949. X
  950. X        This software is distributed with no warranty whatever.  
  951. X        The author takes no responsibility for the consequences 
  952. X        of its use.
  953. X
  954. X        Yacc (or Bison) required to compile."  ;
  955. XSEE-ALSO:     as8051.doc,frasmain.c;    
  956. XAUTHORS:     Mark Zenier;
  957. XCOMPILERS:     Microport Sys V/AT, ATT Yacc, Turbo C V1.5, Bison (CUG disk 285)
  958. X        (previous versions Xenix, Unisoft 68000 Version 7, Sun 3);
  959. X*/
  960. X/* 8051 structured generation file */
  961. X/* November 17, 1990 */
  962. X
  963. X/*
  964. X    description    frame work parser description for framework cross
  965. X            assemblers
  966. X    history        February 2, 1988
  967. X            September 11, 1990 - merge table definition
  968. X            September 12, 1990 - short file names
  969. X            September 14, 1990 - short variable names
  970. X            September 17, 1990 - use yylex as external
  971. X*/
  972. X#include <stdio.h>
  973. X#include "frasmdat.h"
  974. X#include "fragcon.h"
  975. X
  976. X#define yylex lexintercept
  977. X
  978. X/*    0000.0000.0000.0xxx   register value */
  979. X#define REGVALMASK    0x7
  980. X/*    0xxx.xxxx.0000.0000    register and special select bits */
  981. X#define REGSEL_ALL    0x7f00
  982. X#define REG2NDSHFT    8
  983. X#define REGSEL_ACC    0x100
  984. X#define REGSEL_AB    0x200
  985. X#define REGSEL_C    0x400
  986. X#define REGSEL_DPTR    0x800
  987. X#define REGSEL_PC    0x1000
  988. X#define REGSEL_R01    0x2000
  989. X#define REGSEL_R07    0x4000
  990. X#define REG2SEL_ACC    0x1
  991. X#define REG2SEL_AB    0x2
  992. X#define REG2SEL_C    0x4
  993. X#define REG2SEL_DPTR    0x8
  994. X#define REG2SEL_PC    0x10
  995. X#define REG2SEL_R01    0x20
  996. X#define REG2SEL_R07    0x40
  997. X#define ST_INH 0x1
  998. X#define ST_UOP01 0x2
  999. X#define ST_UOP02 0x4
  1000. X#define ST_UOP03 0x8
  1001. X#define ST_UOP04 0x10
  1002. X#define ST_UOP05 0x20
  1003. X#define ST_ALU01 0x1
  1004. X#define ST_ALU02 0x2
  1005. X#define ST_ALU02E 0x4
  1006. X#define ST_ALU03 0x8
  1007. X#define ST_ALU04 0x10
  1008. X#define ST_ALU05 0x20
  1009. X#define ST_ALU06 0x40
  1010. X#define ST_ALU07 0x80
  1011. X#define ST_ALU08 0x100
  1012. X#define ST_ALU09 0x200
  1013. X#define ST_ALU10 0x400
  1014. X#define ST_MOV01 0x1
  1015. X#define ST_MOV02 0x2
  1016. X#define ST_MOV03 0x4
  1017. X#define ST_MOV04 0x8
  1018. X#define ST_MOV05 0x10
  1019. X#define ST_MOV06 0x20
  1020. X#define ST_MOV07 0x40
  1021. X#define ST_MOV08 0x80
  1022. X#define ST_MOV09 0x100
  1023. X#define ST_MOV10 0x200
  1024. X#define ST_MOV11 0x400
  1025. X#define ST_MOV12 0x800
  1026. X#define ST_MOV13 0x1000
  1027. X#define ST_MOV14 0x2000
  1028. X#define ST_CJNE1 0x1
  1029. X#define ST_CJNE2 0x2
  1030. X#define ST_CJNE3 0x4
  1031. X    
  1032. X    static char    genbdef[] = "[1=];";
  1033. X    static char    genwdef[] = "[1=]y"; /* x for normal, y for byte rev */
  1034. X    char ignosyn[] = "[Xinvalid syntax for instruction";
  1035. X    char ignosel[] = "[Xinvalid operands";
  1036. X
  1037. X    long    labelloc;
  1038. X    static int satsub;
  1039. X    int    ifstkpt = 0;
  1040. X    int    fraifskip = FALSE;
  1041. X
  1042. X    struct symel * endsymbol = SYMNULL;
  1043. X
  1044. X%}
  1045. X%union {
  1046. X    int    intv;
  1047. X    long     longv;
  1048. X    char    *strng;
  1049. X    struct symel *symb;
  1050. X}
  1051. X
  1052. X%token <intv> REG
  1053. X%type <intv> bit
  1054. X%token <intv> KOC_BDEF
  1055. X%token <intv> KOC_ELSE
  1056. X%token <intv> KOC_END
  1057. X%token <intv> KOC_ENDI
  1058. X%token <intv> KOC_EQU
  1059. X%token <intv> KOC_IF
  1060. X%token <intv> KOC_INCLUDE
  1061. X%token <intv> KOC_ORG
  1062. X%token <intv> KOC_RESM
  1063. X%token <intv> KOC_SDEF
  1064. X%token <intv> KOC_SET
  1065. X%token <intv> KOC_WDEF
  1066. X%token <intv> KOC_CHSET
  1067. X%token <intv> KOC_CHDEF
  1068. X%token <intv> KOC_CHUSE
  1069. X%token <intv> KOC_opcode
  1070. X%token <intv> KOC_aluop
  1071. X%token <intv> KOC_mov
  1072. X%token <intv> KOC_cjne
  1073. X
  1074. X%token <longv> CONSTANT
  1075. X%token EOL
  1076. X%token KEOP_AND
  1077. X%token KEOP_DEFINED
  1078. X%token KEOP_EQ
  1079. X%token KEOP_GE
  1080. X%token KEOP_GT
  1081. X%token KEOP_HIGH
  1082. X%token KEOP_LE
  1083. X%token KEOP_LOW
  1084. X%token KEOP_LT
  1085. X%token KEOP_MOD
  1086. X%token KEOP_MUN
  1087. X%token KEOP_NE
  1088. X%token KEOP_NOT
  1089. X%token KEOP_OR
  1090. X%token KEOP_SHL
  1091. X%token KEOP_SHR
  1092. X%token KEOP_XOR
  1093. X%token KEOP_locctr
  1094. X%token <symb> LABEL
  1095. X%token <strng> STRING
  1096. X%token <symb> SYMBOL
  1097. X
  1098. X%token KTK_invalid
  1099. X
  1100. X%right    KEOP_HIGH KEOP_LOW
  1101. X%left    KEOP_OR KEOP_XOR
  1102. X%left    KEOP_AND
  1103. X%right    KEOP_NOT
  1104. X%nonassoc    KEOP_GT KEOP_GE KEOP_LE KEOP_LT KEOP_NE KEOP_EQ
  1105. X%left    '+' '-'
  1106. X%left    '*' '/' KEOP_MOD KEOP_SHL KEOP_SHR
  1107. X%right    KEOP_MUN
  1108. X
  1109. X
  1110. X%type <intv> expr exprlist stringlist
  1111. X
  1112. X%start file
  1113. X
  1114. X%%
  1115. X
  1116. Xfile    :    file allline
  1117. X    |    allline
  1118. X    ;
  1119. X
  1120. Xallline    :     line EOL
  1121. X            {
  1122. X                clrexpr();
  1123. X            }
  1124. X    |    EOL
  1125. X    |    error EOL
  1126. X            {
  1127. X                clrexpr();
  1128. X                yyerrok;
  1129. X            }
  1130. X    ;
  1131. X
  1132. Xline    :    LABEL KOC_END 
  1133. X            {
  1134. X                endsymbol = $1;
  1135. X                nextreadact = Nra_end;
  1136. X            }
  1137. X    |          KOC_END 
  1138. X            {
  1139. X                nextreadact = Nra_end;
  1140. X            }
  1141. X    |    KOC_INCLUDE STRING
  1142. X            {
  1143. X        if(nextfstk >= FILESTKDPTH)
  1144. X        {
  1145. X            fraerror("include file nesting limit exceeded");
  1146. X        }
  1147. X        else
  1148. X        {
  1149. X            infilestk[nextfstk].fnm = savestring($2,strlen($2));
  1150. X            if( (infilestk[nextfstk].fpt = fopen($2,"r"))
  1151. X                ==(FILE *)NULL )
  1152. X            {
  1153. X                fraerror("cannot open include file");
  1154. X            }
  1155. X            else
  1156. X            {
  1157. X                nextreadact = Nra_new;
  1158. X            }
  1159. X        }
  1160. X            }
  1161. X    |    LABEL KOC_EQU expr 
  1162. X            {
  1163. X                if($1 -> seg == SSG_UNDEF)
  1164. X                {
  1165. X                    pevalexpr(0, $3);
  1166. X                    if(evalr[0].seg == SSG_ABS)
  1167. X                    {
  1168. X                        $1 -> seg = SSG_EQU;
  1169. X                        $1 -> value = evalr[0].value;
  1170. X                        prtequvalue("C: 0x%lx\n",
  1171. X                            evalr[0].value);
  1172. X                    }
  1173. X                    else
  1174. X                    {
  1175. X                        fraerror(
  1176. X                    "noncomputable expression for EQU");
  1177. X                    }
  1178. X                }
  1179. X                else
  1180. X                {
  1181. X                    fraerror(
  1182. X                "cannot change symbol value with EQU");
  1183. X                }
  1184. X            }
  1185. X    |    LABEL KOC_SET expr 
  1186. X            {
  1187. X                if($1 -> seg == SSG_UNDEF
  1188. X                   || $1 -> seg == SSG_SET)
  1189. X                {
  1190. X                    pevalexpr(0, $3);
  1191. X                    if(evalr[0].seg == SSG_ABS)
  1192. X                    {
  1193. X                        $1 -> seg = SSG_SET;
  1194. X                        $1 -> value = evalr[0].value;
  1195. X                        prtequvalue("C: 0x%lx\n",
  1196. X                            evalr[0].value);
  1197. X                    }
  1198. X                    else
  1199. X                    {
  1200. X                        fraerror(
  1201. X                    "noncomputable expression for SET");
  1202. X                    }
  1203. X                }
  1204. X                else
  1205. X                {
  1206. X                    fraerror(
  1207. X                "cannot change symbol value with SET");
  1208. X                }
  1209. X            }
  1210. X    |    KOC_IF expr 
  1211. X            {
  1212. X        if((++ifstkpt) < IFSTKDEPTH)
  1213. X        {
  1214. X            pevalexpr(0, $2);
  1215. X            if(evalr[0].seg == SSG_ABS)
  1216. X            {
  1217. X                if(evalr[0].value != 0)
  1218. X                {
  1219. X                    elseifstk[ifstkpt] = If_Skip;
  1220. X                    endifstk[ifstkpt] = If_Active;
  1221. X                }
  1222. X                else
  1223. X                {
  1224. X                    fraifskip = TRUE;
  1225. X                    elseifstk[ifstkpt] = If_Active;
  1226. X                    endifstk[ifstkpt] = If_Active;
  1227. X                }
  1228. X            }
  1229. X            else
  1230. X            {
  1231. X                fraifskip = TRUE;
  1232. X                elseifstk[ifstkpt] = If_Active;
  1233. X                endifstk[ifstkpt] = If_Active;
  1234. X            }
  1235. X        }
  1236. X        else
  1237. X        {
  1238. X            fraerror("IF stack overflow");
  1239. X        }
  1240. X            }
  1241. X                        
  1242. X    |    KOC_IF 
  1243. X            {
  1244. X        if(fraifskip) 
  1245. X        {
  1246. X            if((++ifstkpt) < IFSTKDEPTH)
  1247. X            {
  1248. X                    elseifstk[ifstkpt] = If_Skip;
  1249. X                    endifstk[ifstkpt] = If_Skip;
  1250. X            }
  1251. X            else
  1252. X            {
  1253. X                fraerror("IF stack overflow");
  1254. X            }
  1255. X        }
  1256. X        else
  1257. X        {
  1258. X            yyerror("syntax error");
  1259. X            YYERROR;
  1260. X        }
  1261. X                }
  1262. X                        
  1263. X    |    KOC_ELSE 
  1264. X            {
  1265. X                switch(elseifstk[ifstkpt])
  1266. X                {
  1267. X                case If_Active:
  1268. X                    fraifskip = FALSE;
  1269. X                    break;
  1270. X                
  1271. X                case If_Skip:
  1272. X                    fraifskip = TRUE;
  1273. X                    break;
  1274. X                
  1275. X                case If_Err:
  1276. X                    fraerror("ELSE with no matching if");
  1277. X                    break;
  1278. X                }
  1279. X            }
  1280. X
  1281. X    |    KOC_ENDI 
  1282. X            {
  1283. X                switch(endifstk[ifstkpt])
  1284. X                {
  1285. X                case If_Active:
  1286. X                    fraifskip = FALSE;
  1287. X                    ifstkpt--;
  1288. X                    break;
  1289. X                
  1290. X                case If_Skip:
  1291. X                    fraifskip = TRUE;
  1292. X                    ifstkpt--;
  1293. X                    break;
  1294. X                
  1295. X                case If_Err:
  1296. X                    fraerror("ENDI with no matching if");
  1297. X                    break;
  1298. X                }
  1299. X            }
  1300. X    |    LABEL KOC_ORG expr 
  1301. X            {
  1302. X                pevalexpr(0, $3);
  1303. X                if(evalr[0].seg == SSG_ABS)
  1304. X                {
  1305. X                    locctr = labelloc = evalr[0].value;
  1306. X                    if($1 -> seg == SSG_UNDEF)
  1307. X                    {
  1308. X                        $1 -> seg = SSG_ABS;
  1309. X                        $1 -> value = labelloc;
  1310. X                    }
  1311. X                    else
  1312. X                        fraerror(
  1313. X                        "multiple definition of label");
  1314. X                    prtequvalue("C: 0x%lx\n",
  1315. X                        evalr[0].value);
  1316. X                }
  1317. X                else
  1318. X                {
  1319. X                    fraerror(
  1320. X                     "noncomputable expression for ORG");
  1321. X                }
  1322. X            }
  1323. X    |          KOC_ORG expr 
  1324. X            {
  1325. X                pevalexpr(0, $2);
  1326. X                if(evalr[0].seg == SSG_ABS)
  1327. X                {
  1328. X                    locctr = labelloc = evalr[0].value;
  1329. X                    prtequvalue("C: 0x%lx\n",
  1330. X                        evalr[0].value);
  1331. X                }
  1332. X                else
  1333. X                {
  1334. X                    fraerror(
  1335. X                     "noncomputable expression for ORG");
  1336. X                }
  1337. X            }
  1338. X    |    LABEL KOC_CHSET
  1339. X            {
  1340. X                if($1 -> seg == SSG_UNDEF)
  1341. X                {
  1342. X                    $1 -> seg = SSG_EQU;
  1343. X                    if( ($1->value = chtcreate()) <= 0)
  1344. X                    {
  1345. X        fraerror( "cannot create character translation table");
  1346. X                    }
  1347. X                    prtequvalue("C: 0x%lx\n", $1 -> value);
  1348. X                }
  1349. X                else
  1350. X                {
  1351. X            fraerror( "multiple definition of label");
  1352. X                }
  1353. X            }
  1354. X    |        KOC_CHUSE
  1355. X            {
  1356. X                chtcpoint = (int *) NULL;
  1357. X                prtequvalue("C: 0x%lx\n", 0L);
  1358. X            }
  1359. X    |        KOC_CHUSE expr
  1360. X            {
  1361. X                pevalexpr(0, $2);
  1362. X                if( evalr[0].seg == SSG_ABS)
  1363. X                {
  1364. X                    if( evalr[0].value == 0)
  1365. X                    {
  1366. X                        chtcpoint = (int *)NULL;
  1367. X                        prtequvalue("C: 0x%lx\n", 0L);
  1368. X                    }
  1369. X                    else if(evalr[0].value < chtnxalph)
  1370. X                    {
  1371. X                chtcpoint = chtatab[evalr[0].value];
  1372. X                prtequvalue("C: 0x%lx\n", evalr[0].value);
  1373. X                    }
  1374. X                    else
  1375. X                    {
  1376. X            fraerror("nonexistent character translation table");
  1377. X                    }
  1378. X                }
  1379. X                else
  1380. X                {
  1381. X                    fraerror("noncomputable expression");
  1382. X                }
  1383. X            }
  1384. X    |        KOC_CHDEF STRING ',' exprlist
  1385. X            {
  1386. X        int findrv, numret, *charaddr;
  1387. X        char *sourcestr = $2, *before;
  1388. X
  1389. X        if(chtnpoint != (int *)NULL)
  1390. X        {
  1391. X            for(satsub = 0; satsub < $4; satsub++)
  1392. X            {
  1393. X                before = sourcestr;
  1394. X
  1395. X                pevalexpr(0, exprlist[satsub]);
  1396. X                findrv = chtcfind(chtnpoint, &sourcestr,
  1397. X                        &charaddr, &numret);
  1398. X                if(findrv == CF_END)
  1399. X                {
  1400. X            fraerror("more expressions than characters");
  1401. X                    break;
  1402. X                }
  1403. X
  1404. X                if(evalr[0].seg == SSG_ABS)
  1405. X                {
  1406. X                    switch(findrv)
  1407. X                    {
  1408. X                    case CF_UNDEF:
  1409. X                        {
  1410. X                if(evalr[0].value < 0 ||
  1411. X                    evalr[0].value > 255)
  1412. X                {
  1413. X            frawarn("character translation value truncated");
  1414. X                }
  1415. X                *charaddr = evalr[0].value & 0xff;
  1416. X                prtequvalue("C: 0x%lx\n", evalr[0].value);
  1417. X                        }
  1418. X                        break;
  1419. X
  1420. X                    case CF_INVALID:
  1421. X                    case CF_NUMBER:
  1422. X                fracherror("invalid character to define", 
  1423. X                    before, sourcestr);
  1424. X                        break;
  1425. X
  1426. X                    case CF_CHAR:
  1427. X                fracherror("character already defined", 
  1428. X                    before, sourcestr);
  1429. X                        break;
  1430. X                    }
  1431. X                }
  1432. X                else
  1433. X                {
  1434. X                    fraerror("noncomputable expression");
  1435. X                }
  1436. X            }
  1437. X
  1438. X            if( *sourcestr != '\0')
  1439. X            {
  1440. X                fraerror("more characters than expressions");
  1441. X            }
  1442. X        }
  1443. X        else
  1444. X        {
  1445. X            fraerror("no CHARSET statement active");
  1446. X        }
  1447. X            
  1448. X            }
  1449. X    |    LABEL 
  1450. X            {
  1451. X            if($1 -> seg == SSG_UNDEF)
  1452. X            {
  1453. X                $1 -> seg = SSG_ABS;
  1454. X                $1 -> value = labelloc;
  1455. X                prtequvalue("C: 0x%lx\n", labelloc);
  1456. X
  1457. X            }
  1458. X            else
  1459. X                fraerror(
  1460. X                "multiple definition of label");
  1461. X            }
  1462. X    |    labeledline
  1463. X    ;
  1464. X
  1465. Xlabeledline :    LABEL genline
  1466. X            {
  1467. X            if($1 -> seg == SSG_UNDEF)
  1468. X            {
  1469. X                $1 -> seg = SSG_ABS;
  1470. X                $1 -> value = labelloc;
  1471. X            }
  1472. X            else
  1473. X                fraerror(
  1474. X                "multiple definition of label");
  1475. X            labelloc = locctr;
  1476. X            }
  1477. X                
  1478. X    |    genline
  1479. X            {
  1480. X                labelloc = locctr;
  1481. X            }
  1482. X    ;
  1483. X
  1484. Xgenline    :    KOC_BDEF    exprlist 
  1485. X            {
  1486. X                genlocrec(currseg, labelloc);
  1487. X                for( satsub = 0; satsub < $2; satsub++)
  1488. X                {
  1489. X                    pevalexpr(1, exprlist[satsub]);
  1490. X                    locctr += geninstr(genbdef);
  1491. X                }
  1492. X            }
  1493. X    |    KOC_SDEF stringlist 
  1494. X            {
  1495. X                genlocrec(currseg, labelloc);
  1496. X                for(satsub = 0; satsub < $2; satsub++)
  1497. X                {
  1498. X                    locctr += genstring(stringlist[satsub]);
  1499. X                }
  1500. X            }
  1501. X    |    KOC_WDEF exprlist 
  1502. X            {
  1503. X                genlocrec(currseg, labelloc);
  1504. X                for( satsub = 0; satsub < $2; satsub++)
  1505. X                {
  1506. X                    pevalexpr(1, exprlist[satsub]);
  1507. X                    locctr += geninstr(genwdef);
  1508. X                }
  1509. X            }    
  1510. X    |    KOC_RESM expr 
  1511. X            {
  1512. X                pevalexpr(0, $2);
  1513. X                if(evalr[0].seg == SSG_ABS)
  1514. X                {
  1515. X                    locctr = labelloc + evalr[0].value;
  1516. X                    prtequvalue("C: 0x%lx\n", labelloc);
  1517. X                }
  1518. X                else
  1519. X                {
  1520. X                    fraerror(
  1521. X                 "noncomputable result for RMB expression");
  1522. X                }
  1523. X            }
  1524. X    ;
  1525. X
  1526. Xexprlist :    exprlist ',' expr
  1527. X            {
  1528. X                exprlist[nextexprs ++ ] = $3;
  1529. X                $$ = nextexprs;
  1530. X            }
  1531. X    |    expr
  1532. X            {
  1533. X                nextexprs = 0;
  1534. X                exprlist[nextexprs ++ ] = $1;
  1535. X                $$ = nextexprs;
  1536. X            }
  1537. X    ;
  1538. X
  1539. Xstringlist :    stringlist ',' STRING
  1540. X            {
  1541. X                stringlist[nextstrs ++ ] = $3;
  1542. X                $$ = nextstrs;
  1543. X            }
  1544. X    |    STRING
  1545. X            {
  1546. X                nextstrs = 0;
  1547. X                stringlist[nextstrs ++ ] = $1;
  1548. X                $$ = nextstrs;
  1549. X            }
  1550. X    ;
  1551. X
  1552. X
  1553. Xgenline : KOC_opcode 
  1554. X            {
  1555. X        genlocrec(currseg, labelloc);
  1556. X        locctr += geninstr(findgen($1, ST_INH,  0));
  1557. X            }
  1558. X    ;
  1559. Xgenline : KOC_opcode  '@' REG
  1560. X            {
  1561. X        genlocrec(currseg, labelloc);
  1562. X        evalr[1].value = ( $3 & REGVALMASK);
  1563. X        locctr += geninstr(findgen($1, ST_UOP01,  ($3 & REGSEL_ALL)));
  1564. X            }
  1565. X    ;
  1566. Xgenline : KOC_opcode  REG
  1567. X            {
  1568. X        genlocrec(currseg, labelloc);
  1569. X        evalr[1].value = ( $2 & REGVALMASK);
  1570. X        locctr += geninstr(findgen($1, ST_UOP02,  ($2 & REGSEL_ALL)));
  1571. X            }
  1572. X    ;
  1573. Xgenline : KOC_opcode  bit
  1574. X            {
  1575. X        genlocrec(currseg, labelloc);
  1576. X        evalr[1].value = $2;
  1577. X        locctr += geninstr(findgen($1, ST_UOP03,  0));
  1578. X            }
  1579. X    ;
  1580. Xgenline : KOC_opcode  expr
  1581. X            {
  1582. X        genlocrec(currseg, labelloc);
  1583. X        pevalexpr(1,$2);
  1584. X        locctr += geninstr(findgen($1, ST_UOP04,  0));
  1585. X            }
  1586. X    ;
  1587. Xgenline : KOC_opcode  '@' REG '+' REG
  1588. X            {
  1589. X        genlocrec(currseg, labelloc);
  1590. X        locctr += geninstr(findgen($1, ST_UOP05, ($3 & REGSEL_ALL) 
  1591. X            | (($5 & REGSEL_ALL) >> REG2NDSHFT) ));
  1592. X            }
  1593. X    ;
  1594. Xgenline : KOC_aluop  REG ',' '#' expr
  1595. X            {
  1596. X        genlocrec(currseg, labelloc);
  1597. X        evalr[1].value = ( $2 & REGVALMASK);
  1598. X        pevalexpr(2,$5);
  1599. X        locctr += geninstr(findgen($1, ST_ALU01,  ($2 & REGSEL_ALL)));
  1600. X            }
  1601. X    ;
  1602. Xgenline : KOC_aluop  REG ',' '/' bit
  1603. X            {
  1604. X        genlocrec(currseg, labelloc);
  1605. X        evalr[1].value = ( $2 & REGVALMASK);
  1606. X        evalr[2].value = $5;
  1607. X        locctr += geninstr(findgen($1, ST_ALU02,  ($2 & REGSEL_ALL)));
  1608. X            }
  1609. X    ;
  1610. Xgenline : KOC_aluop  REG ',' '/' expr
  1611. X            {
  1612. X        genlocrec(currseg, labelloc);
  1613. X        evalr[1].value = ( $2 & REGVALMASK);
  1614. X        pevalexpr(2,$5);
  1615. X        locctr += geninstr(findgen($1, ST_ALU02E,  ($2 & REGSEL_ALL)));
  1616. X            }
  1617. X    ;
  1618. Xgenline : KOC_aluop  REG ',' '@' REG
  1619. X            {
  1620. X        genlocrec(currseg, labelloc);
  1621. X        evalr[1].value = ( $2 & REGVALMASK);
  1622. X        evalr[2].value = ( $5 & REGVALMASK);
  1623. X        locctr += geninstr(findgen($1, ST_ALU03,  ($2 & REGSEL_ALL) 
  1624. X            | (($5 & REGSEL_ALL) >> REG2NDSHFT)));
  1625. X            }
  1626. X    ;
  1627. Xgenline : KOC_aluop  REG ',' REG
  1628. X            {
  1629. X        genlocrec(currseg, labelloc);
  1630. X        evalr[1].value = ( $2 & REGVALMASK);
  1631. X        evalr[2].value = ( $4 & REGVALMASK);
  1632. X        locctr += geninstr(findgen($1, ST_ALU04,  ($2 & REGSEL_ALL) 
  1633. X            | (($4 & REGSEL_ALL) >> REG2NDSHFT)));
  1634. X            }
  1635. X    ;
  1636. Xgenline : KOC_aluop  REG ',' bit
  1637. X            {
  1638. X        genlocrec(currseg, labelloc);
  1639. X        evalr[1].value = ( $2 & REGVALMASK);
  1640. X        evalr[2].value = $4;
  1641. X        locctr += geninstr(findgen($1, ST_ALU05,  ($2 & REGSEL_ALL)));
  1642. X            }
  1643. X    ;
  1644. Xgenline : KOC_aluop  REG ',' expr
  1645. X            {
  1646. X        genlocrec(currseg, labelloc);
  1647. X        evalr[1].value = ( $2 & REGVALMASK);
  1648. X        pevalexpr(2,$4);
  1649. X        locctr += geninstr(findgen($1, ST_ALU06,  ($2 & REGSEL_ALL)));
  1650. X            }
  1651. X    ;
  1652. Xgenline : KOC_aluop  bit ',' expr
  1653. X            {
  1654. X        genlocrec(currseg, labelloc);
  1655. X        evalr[1].value = $2;
  1656. X        pevalexpr(2,$4);
  1657. X        locctr += geninstr(findgen($1, ST_ALU07,  0));
  1658. X            }
  1659. X    ;
  1660. Xgenline : KOC_aluop  expr ',' '#' expr
  1661. X            {
  1662. X        genlocrec(currseg, labelloc);
  1663. X        pevalexpr(1,$2);
  1664. X        pevalexpr(2,$5);
  1665. X        locctr += geninstr(findgen($1, ST_ALU08,  0));
  1666. X            }
  1667. X    ;
  1668. Xgenline : KOC_aluop  expr ',' REG
  1669. X            {
  1670. X        genlocrec(currseg, labelloc);
  1671. X        pevalexpr(1,$2);
  1672. X        evalr[2].value = ( $4 & REGVALMASK);
  1673. X        locctr += geninstr(findgen($1, ST_ALU09,  ($4 & REGSEL_ALL)));
  1674. X            }
  1675. X    ;
  1676. Xgenline : KOC_aluop  expr ',' expr
  1677. X            {
  1678. X        genlocrec(currseg, labelloc);
  1679. X        pevalexpr(1,$2);
  1680. X        pevalexpr(2,$4);
  1681. X        locctr += geninstr(findgen($1, ST_ALU10,  0));
  1682. X            }
  1683. X    ;
  1684. Xgenline : KOC_mov  '@' REG ',' '#' expr
  1685. X            {
  1686. X        genlocrec(currseg, labelloc);
  1687. X        evalr[1].value = ( $3 & REGVALMASK);
  1688. X        pevalexpr(2,$6);
  1689. X        locctr += geninstr(findgen($1, ST_MOV01,  ($3 & REGSEL_ALL)));
  1690. X            }
  1691. X    ;
  1692. Xgenline : KOC_mov  '@' REG ',' REG
  1693. X            {
  1694. X        genlocrec(currseg, labelloc);
  1695. X        evalr[1].value = ( $3 & REGVALMASK);
  1696. X        evalr[2].value = ( $5 & REGVALMASK);
  1697. X        locctr += geninstr(findgen($1, ST_MOV02,  ($3 & REGSEL_ALL) 
  1698. X            | (($5 & REGSEL_ALL) >> REG2NDSHFT)));
  1699. X            }
  1700. X    ;
  1701. Xgenline : KOC_mov  '@' REG ',' expr
  1702. X            {
  1703. X        genlocrec(currseg, labelloc);
  1704. X        evalr[1].value = ( $3 & REGVALMASK);
  1705. X        pevalexpr(2,$5);
  1706. X        locctr += geninstr(findgen($1, ST_MOV03,  ($3 & REGSEL_ALL)));
  1707. X            }
  1708. X    ;
  1709. Xgenline : KOC_mov  REG ',' '#' expr
  1710. X            {
  1711. X        genlocrec(currseg, labelloc);
  1712. X        evalr[1].value = ( $2 & REGVALMASK);
  1713. X        pevalexpr(2,$5);
  1714. X        locctr += geninstr(findgen($1, ST_MOV04,  ($2 & REGSEL_ALL)));
  1715. X            }
  1716. X    ;
  1717. Xgenline : KOC_mov  REG ',' '@' REG
  1718. X            {
  1719. X        genlocrec(currseg, labelloc);
  1720. X        evalr[1].value = ( $2 & REGVALMASK);
  1721. X        evalr[2].value = ( $5 & REGVALMASK);
  1722. X        locctr += geninstr(findgen($1, ST_MOV05,  ($2 & REGSEL_ALL) 
  1723. X            | (($5 & REGSEL_ALL) >> REG2NDSHFT)));
  1724. X            }
  1725. X    ;
  1726. Xgenline : KOC_mov  REG ',' '@' REG '+' REG
  1727. X            {
  1728. X        genlocrec(currseg, labelloc);
  1729. X        locctr += geninstr(findgen($1, ST_MOV06,  (($2&$5) & REGSEL_ALL)
  1730. X            | (($7 & REGSEL_ALL) >> REG2NDSHFT)));
  1731. X            }
  1732. X    ;
  1733. Xgenline : KOC_mov  REG ',' REG
  1734. X            {
  1735. X        genlocrec(currseg, labelloc);
  1736. X        evalr[1].value = ( $2 & REGVALMASK);
  1737. X        evalr[2].value = ( $4 & REGVALMASK);
  1738. X        locctr += geninstr(findgen($1, ST_MOV07,  ($2 & REGSEL_ALL) 
  1739. X            | (($4 & REGSEL_ALL) >> REG2NDSHFT)));
  1740. X            }
  1741. X    ;
  1742. Xgenline : KOC_mov  REG ',' bit
  1743. X            {
  1744. X        genlocrec(currseg, labelloc);
  1745. X        evalr[1].value = ( $2 & REGVALMASK);
  1746. X        evalr[2].value = $4;
  1747. X        locctr += geninstr(findgen($1, ST_MOV08,  ($2 & REGSEL_ALL)));
  1748. X            }
  1749. X    ;
  1750. Xgenline : KOC_mov  REG ',' expr
  1751. X            {
  1752. X        genlocrec(currseg, labelloc);
  1753. X        evalr[1].value = ( $2 & REGVALMASK);
  1754. X        pevalexpr(2,$4);
  1755. X        locctr += geninstr(findgen($1, ST_MOV09,  ($2 & REGSEL_ALL)));
  1756. X            }
  1757. X    ;
  1758. Xgenline : KOC_mov  bit ',' REG
  1759. X            {
  1760. X        genlocrec(currseg, labelloc);
  1761. X        evalr[1].value = $2;
  1762. X        evalr[2].value = ( $4 & REGVALMASK);
  1763. X        locctr += geninstr(findgen($1, ST_MOV10,  ($4 & REGSEL_ALL)));
  1764. X            }
  1765. X    ;
  1766. Xgenline : KOC_mov  expr ',' '#' expr
  1767. X            {
  1768. X        genlocrec(currseg, labelloc);
  1769. X        pevalexpr(1,$2);
  1770. X        pevalexpr(2,$5);
  1771. X        locctr += geninstr(findgen($1, ST_MOV11,  0));
  1772. X            }
  1773. X    ;
  1774. Xgenline : KOC_mov  expr ',' '@' REG
  1775. X            {
  1776. X        genlocrec(currseg, labelloc);
  1777. X        pevalexpr(1,$2);
  1778. X        evalr[2].value = ( $5 & REGVALMASK);
  1779. X        locctr += geninstr(findgen($1, ST_MOV12,  ($5 & REGSEL_ALL)));
  1780. X            }
  1781. X    ;
  1782. Xgenline : KOC_mov  expr ',' REG
  1783. X            {
  1784. X        genlocrec(currseg, labelloc);
  1785. X        pevalexpr(1,$2);
  1786. X        evalr[2].value = ($4 & REGVALMASK);
  1787. X        locctr += geninstr(findgen($1, ST_MOV13,  ($4 & REGSEL_ALL)));
  1788. X            }
  1789. X    ;
  1790. Xgenline : KOC_mov  expr ',' expr
  1791. X            {
  1792. X        genlocrec(currseg, labelloc);
  1793. X        pevalexpr(1,$2);
  1794. X        pevalexpr(2,$4);
  1795. X        locctr += geninstr(findgen($1, ST_MOV14,  0));
  1796. X            }
  1797. X    ;
  1798. Xgenline : KOC_cjne  REG ',' expr ',' expr
  1799. X            {
  1800. X        genlocrec(currseg, labelloc);
  1801. X        evalr[1].value = ( $2 & REGVALMASK);
  1802. X        pevalexpr(2,$4);
  1803. X        pevalexpr(3,$6);
  1804. X        locctr += geninstr(findgen($1, ST_CJNE1,  ($2 & REGSEL_ALL)));
  1805. X            }
  1806. X    ;
  1807. Xgenline : KOC_cjne  REG ',' '#' expr ',' expr
  1808. X            {
  1809. X        genlocrec(currseg, labelloc);
  1810. X        evalr[1].value = ( $2 & REGVALMASK);
  1811. X        pevalexpr(2,$5);
  1812. X        pevalexpr(3,$7);
  1813. X        locctr += geninstr(findgen($1, ST_CJNE2,  ($2 & REGSEL_ALL)));
  1814. X            }
  1815. X    ;
  1816. Xgenline : KOC_cjne  '@' REG ',' '#' expr ',' expr
  1817. X            {
  1818. X        genlocrec(currseg, labelloc);
  1819. X        evalr[1].value = ( $3 & REGVALMASK);
  1820. X        pevalexpr(2,$6);
  1821. X        pevalexpr(3,$8);
  1822. X        locctr += geninstr(findgen($1, ST_CJNE3,  ($3 & REGSEL_ALL)));
  1823. X            }
  1824. X    ;
  1825. Xbit    :    expr '.' CONSTANT
  1826. X        {
  1827. X            int    bitaddr;
  1828. X
  1829. X            pevalexpr(0, $1);
  1830. X            if(evalr[0].seg == SSG_ABS)
  1831. X            {
  1832. X                switch((int)(evalr[0].value))
  1833. X                {
  1834. X                case 0x20:
  1835. X                case 0x21:
  1836. X                case 0x22:
  1837. X                case 0x23:
  1838. X                case 0x24:
  1839. X                case 0x25:
  1840. X                case 0x26:
  1841. X                case 0x27:
  1842. X                case 0x28:
  1843. X                case 0x29:
  1844. X                case 0x2a:
  1845. X                case 0x2b:
  1846. X                case 0x2c:
  1847. X                case 0x2d:
  1848. X                case 0x2e:
  1849. X                case 0x2f:
  1850. X                    bitaddr = (evalr[0].value - 0x20)
  1851. X                            << 3;
  1852. X                    break;
  1853. X
  1854. X                case 0x80:
  1855. X                case 0x88:
  1856. X                case 0x90:
  1857. X                case 0x98:
  1858. X                case 0xa0:
  1859. X                case 0xa8:
  1860. X                case 0xb0:
  1861. X                case 0xb8:
  1862. X                case 0xc0:
  1863. X                case 0xc8:
  1864. X                case 0xd0:
  1865. X                case 0xd8:
  1866. X                case 0xe0:
  1867. X                case 0xe8:
  1868. X                case 0xf0:
  1869. X                case 0xf8:
  1870. X                    bitaddr = evalr[0].value;
  1871. X                    break;
  1872. X
  1873. X                default:
  1874. X                    fraerror(
  1875. X                    "location is not bit addressable");
  1876. X                    evalr[0].value = 0;
  1877. X                    break;
  1878. X                }
  1879. X            }
  1880. X            else
  1881. X            {
  1882. X                fraerror(
  1883. X            "noncomputable expression in bit address");    
  1884. X                evalr[0].value = 0;
  1885. X            }
  1886. X            
  1887. X            if($3 < 0 || $3 > 7)
  1888. X            {
  1889. X                fraerror("bit number invalid");
  1890. X            }
  1891. X
  1892. X            $$ = bitaddr + $3;
  1893. X        }
  1894. X    ;
  1895. X
  1896. Xexpr    :    '+' expr %prec KEOP_MUN
  1897. X            {
  1898. X                $$ = $2;
  1899. X            }
  1900. X    |    '-' expr %prec KEOP_MUN
  1901. X            {
  1902. X                $$ = exprnode(PCCASE_UN,$2,IFC_NEG,0,0L,
  1903. X                    SYMNULL);
  1904. X            }
  1905. X    |    KEOP_NOT expr
  1906. X            {
  1907. X                $$ = exprnode(PCCASE_UN,$2,IFC_NOT,0,0L,
  1908. X                    SYMNULL);
  1909. X            }
  1910. X    |    KEOP_HIGH expr
  1911. X            {
  1912. X                $$ = exprnode(PCCASE_UN,$2,IFC_HIGH,0,0L,
  1913. X                    SYMNULL);
  1914. X            }
  1915. X    |    KEOP_LOW expr
  1916. X            {
  1917. X                $$ = exprnode(PCCASE_UN,$2,IFC_LOW,0,0L,
  1918. X                    SYMNULL);
  1919. X            }
  1920. X    |    expr '*' expr
  1921. X            {
  1922. X                $$ = exprnode(PCCASE_BIN,$1,IFC_MUL,$3,0L,
  1923. X                    SYMNULL);
  1924. X            }
  1925. X    |    expr '/' expr
  1926. X            {
  1927. X                $$ = exprnode(PCCASE_BIN,$1,IFC_DIV,$3,0L,
  1928. X                    SYMNULL);
  1929. X            }
  1930. X    |    expr '+' expr
  1931. X            {
  1932. X                $$ = exprnode(PCCASE_BIN,$1,IFC_ADD,$3,0L,
  1933. X                    SYMNULL);
  1934. X            }
  1935. X    |    expr '-' expr
  1936. X            {
  1937. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SUB,$3,0L,
  1938. X                    SYMNULL);
  1939. X            }
  1940. X    |    expr KEOP_MOD expr
  1941. X            {
  1942. X                $$ = exprnode(PCCASE_BIN,$1,IFC_MOD,$3,0L,
  1943. X                    SYMNULL);
  1944. X            }
  1945. X    |    expr KEOP_SHL expr
  1946. X            {
  1947. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SHL,$3,0L,
  1948. X                    SYMNULL);
  1949. X            }
  1950. X    |    expr KEOP_SHR expr
  1951. X            {
  1952. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SHR,$3,0L,
  1953. X                    SYMNULL);
  1954. X            }
  1955. X    |    expr KEOP_GT expr
  1956. X            {
  1957. X                $$ = exprnode(PCCASE_BIN,$1,IFC_GT,$3,0L,
  1958. X                    SYMNULL);
  1959. X            }
  1960. X    |    expr KEOP_GE expr
  1961. X            {
  1962. X                $$ = exprnode(PCCASE_BIN,$1,IFC_GE,$3,0L,
  1963. X                    SYMNULL);
  1964. X            }
  1965. X    |    expr KEOP_LT expr
  1966. X            {
  1967. X                $$ = exprnode(PCCASE_BIN,$1,IFC_LT,$3,0L,
  1968. X                    SYMNULL);
  1969. X            }
  1970. X    |    expr KEOP_LE expr
  1971. X            {
  1972. X                $$ = exprnode(PCCASE_BIN,$1,IFC_LE,$3,0L,
  1973. X                    SYMNULL);
  1974. X            }
  1975. X    |    expr KEOP_NE expr
  1976. X            {
  1977. X                $$ = exprnode(PCCASE_BIN,$1,IFC_NE,$3,0L,
  1978. X                    SYMNULL);
  1979. X            }
  1980. X    |    expr KEOP_EQ expr
  1981. X            {
  1982. X                $$ = exprnode(PCCASE_BIN,$1,IFC_EQ,$3,0L,
  1983. X                    SYMNULL);
  1984. X            }
  1985. X    |    expr KEOP_AND expr
  1986. X            {
  1987. X                $$ = exprnode(PCCASE_BIN,$1,IFC_AND,$3,0L,
  1988. X                    SYMNULL);
  1989. X            }
  1990. X    |    expr KEOP_OR expr
  1991. X            {
  1992. X                $$ = exprnode(PCCASE_BIN,$1,IFC_OR,$3,0L,
  1993. X                    SYMNULL);
  1994. X            }
  1995. X    |    expr KEOP_XOR expr
  1996. X            {
  1997. X                $$ = exprnode(PCCASE_BIN,$1,IFC_XOR,$3,0L,
  1998. X                    SYMNULL);
  1999. X            }
  2000. X    |    KEOP_DEFINED SYMBOL
  2001. X            {
  2002. X                $$ = exprnode(PCCASE_DEF,0,IGP_DEFINED,0,0L,$2);
  2003. X            }
  2004. X    |    SYMBOL
  2005. X            {
  2006. X                $$ = exprnode(PCCASE_SYMB,0,IFC_SYMB,0,0L,$1);
  2007. X            }
  2008. X    |    '*'
  2009. X            {
  2010. X                $$ = exprnode(PCCASE_PROGC,0,IFC_PROGCTR,0,
  2011. X                    labelloc, SYMNULL);
  2012. X            }
  2013. X    |    CONSTANT
  2014. X            {
  2015. X                $$ = exprnode(PCCASE_CONS,0,IGP_CONSTANT,0,$1,
  2016. X                    SYMNULL);
  2017. X            }
  2018. X    |    STRING
  2019. X            {
  2020. X                char *sourcestr = $1;
  2021. X                long accval = 0;
  2022. X
  2023. X                if(strlen($1) > 0)
  2024. X                {
  2025. X                    accval = chtran(&sourcestr);
  2026. X                    if(*sourcestr != '\0')
  2027. X                    {
  2028. X                        accval = (accval << 8) +
  2029. X                            chtran(&sourcestr);
  2030. X                    }
  2031. X
  2032. X                    if( *sourcestr != '\0')
  2033. X                    {
  2034. X    frawarn("string constant in expression more than 2 characters long");
  2035. X                    }
  2036. X                }
  2037. X                $$ = exprnode(PCCASE_CONS, 0, IGP_CONSTANT, 0,
  2038. X                    accval, SYMNULL);
  2039. X            }
  2040. X    |    '(' expr ')'
  2041. X            {
  2042. X                $$ = $2;
  2043. X            }
  2044. X    ;
  2045. X
  2046. X
  2047. X
  2048. X%%
  2049. X
  2050. Xlexintercept()
  2051. X/*
  2052. X    description    intercept the call to yylex (the lexical analyzer)
  2053. X            and filter out all unnecessary tokens when skipping
  2054. X            the input between a failed IF and its matching ENDI or
  2055. X            ELSE
  2056. X    globals     fraifskip    the enable flag
  2057. X*/
  2058. X{
  2059. X#undef yylex
  2060. X
  2061. X    int rv;
  2062. X
  2063. X    if(fraifskip)
  2064. X    {
  2065. X        for(;;)
  2066. X        {
  2067. X
  2068. X            switch(rv = yylex())
  2069. X
  2070. X            {
  2071. X            case 0:
  2072. X            case KOC_END:
  2073. X            case KOC_IF:
  2074. X            case KOC_ELSE:
  2075. X            case KOC_ENDI:
  2076. X            case EOL:
  2077. X                return rv;
  2078. X            default:
  2079. X                break;
  2080. X            }
  2081. X        }
  2082. X    }
  2083. X    else
  2084. X        return yylex();
  2085. X#define yylex lexintercept
  2086. X}
  2087. X
  2088. X
  2089. X
  2090. Xsetreserved()
  2091. X{
  2092. X
  2093. X    reservedsym("and", KEOP_AND, 0);
  2094. X    reservedsym("defined", KEOP_DEFINED,0);
  2095. X    reservedsym("eq", KEOP_EQ, 0);
  2096. X    reservedsym("ge", KEOP_GE, 0);
  2097. X    reservedsym("gt", KEOP_GT, 0);
  2098. X    reservedsym("high", KEOP_HIGH, 0);
  2099. X    reservedsym("le", KEOP_LE, 0);
  2100. X    reservedsym("low", KEOP_LOW, 0);
  2101. X    reservedsym("lt", KEOP_LT, 0);
  2102. X    reservedsym("mod", KEOP_MOD, 0);
  2103. X    reservedsym("ne", KEOP_NE, 0);
  2104. X    reservedsym("not", KEOP_NOT, 0);
  2105. X    reservedsym("or", KEOP_OR, 0);
  2106. X    reservedsym("shl", KEOP_SHL, 0);
  2107. X    reservedsym("shr", KEOP_SHR, 0);
  2108. X    reservedsym("xor", KEOP_XOR, 0);
  2109. X    reservedsym("AND", KEOP_AND, 0);
  2110. X    reservedsym("DEFINED", KEOP_DEFINED,0);
  2111. X    reservedsym("EQ", KEOP_EQ, 0);
  2112. X    reservedsym("GE", KEOP_GE, 0);
  2113. X    reservedsym("GT", KEOP_GT, 0);
  2114. X    reservedsym("HIGH", KEOP_HIGH, 0);
  2115. X    reservedsym("LE", KEOP_LE, 0);
  2116. X    reservedsym("LOW", KEOP_LOW, 0);
  2117. X    reservedsym("LT", KEOP_LT, 0);
  2118. X    reservedsym("MOD", KEOP_MOD, 0);
  2119. X    reservedsym("NE", KEOP_NE, 0);
  2120. X    reservedsym("NOT", KEOP_NOT, 0);
  2121. X    reservedsym("OR", KEOP_OR, 0);
  2122. X    reservedsym("SHL", KEOP_SHL, 0);
  2123. X    reservedsym("SHR", KEOP_SHR, 0);
  2124. X    reservedsym("XOR", KEOP_XOR, 0);
  2125. X
  2126. X    /* machine specific token definitions */
  2127. X    reservedsym("a", REG, REGSEL_ACC);
  2128. X    reservedsym("ab", REG, REGSEL_AB);
  2129. X    reservedsym("c", REG, REGSEL_C);
  2130. X    reservedsym("dptr", REG, REGSEL_DPTR);
  2131. X    reservedsym("pc", REG, REGSEL_PC);
  2132. X    reservedsym("r0", REG, REGSEL_R01|REGSEL_R07|0);
  2133. X    reservedsym("r1", REG, REGSEL_R01|REGSEL_R07|1);
  2134. X    reservedsym("r2", REG, REGSEL_R07|2);
  2135. X    reservedsym("r3", REG, REGSEL_R07|3);
  2136. X    reservedsym("r4", REG, REGSEL_R07|4);
  2137. X    reservedsym("r5", REG, REGSEL_R07|5);
  2138. X    reservedsym("r6", REG, REGSEL_R07|6);
  2139. X    reservedsym("r7", REG, REGSEL_R07|7);
  2140. X
  2141. X    reservedsym("A", REG, REGSEL_ACC);
  2142. X    reservedsym("AB", REG, REGSEL_AB);
  2143. X    reservedsym("C", REG, REGSEL_C);
  2144. X    reservedsym("DPTR", REG, REGSEL_DPTR);
  2145. X    reservedsym("PC", REG, REGSEL_PC);
  2146. X    reservedsym("R0", REG, REGSEL_R01|REGSEL_R07|0);
  2147. X    reservedsym("R1", REG, REGSEL_R01|REGSEL_R07|1);
  2148. X    reservedsym("R2", REG, REGSEL_R07|2);
  2149. X    reservedsym("R3", REG, REGSEL_R07|3);
  2150. X    reservedsym("R4", REG, REGSEL_R07|4);
  2151. X    reservedsym("R5", REG, REGSEL_R07|5);
  2152. X    reservedsym("R6", REG, REGSEL_R07|6);
  2153. X    reservedsym("R7", REG, REGSEL_R07|7);
  2154. X
  2155. X}
  2156. X
  2157. Xcpumatch(str)
  2158. X    char * str;
  2159. X{
  2160. X    return TRUE;
  2161. X}
  2162. X
  2163. X/*
  2164. X    description    Opcode and Instruction generation tables
  2165. X    usage        Unix, framework crossassembler
  2166. X    history        September 25, 1987
  2167. X*/
  2168. X
  2169. X#define NUMOPCODE 68
  2170. X#define NUMSYNBLK 107
  2171. X#define NUMDIFFOP 125
  2172. X
  2173. Xint gnumopcode = NUMOPCODE;
  2174. X
  2175. Xint ophashlnk[NUMOPCODE];
  2176. X
  2177. Xstruct opsym optab[NUMOPCODE+1]
  2178. X    = {
  2179. X    {"invalid", KOC_opcode, 2, 0 },
  2180. X    {"ACALL", KOC_opcode, 1, 2 },
  2181. X    {"ADD", KOC_aluop, 4, 3 },
  2182. X    {"ADDC", KOC_aluop, 4, 7 },
  2183. X    {"AJMP", KOC_opcode, 1, 11 },
  2184. X    {"ANL", KOC_aluop, 9, 12 },
  2185. X    {"BYTE", KOC_BDEF, 0, 0 },
  2186. X    {"CHARDEF", KOC_CHDEF, 0, 0 },
  2187. X    {"CHARSET", KOC_CHSET, 0, 0 },
  2188. X    {"CHARUSE", KOC_CHUSE, 0, 0 },
  2189. X    {"CHD", KOC_CHDEF, 0, 0 },
  2190. X    {"CJNE", KOC_cjne, 3, 21 },
  2191. X    {"CLR", KOC_opcode, 3, 24 },
  2192. X    {"CPL", KOC_opcode, 3, 27 },
  2193. X    {"DA", KOC_opcode, 1, 30 },
  2194. X    {"DB", KOC_BDEF, 0, 0 },
  2195. X    {"DEC", KOC_opcode, 3, 31 },
  2196. X    {"DIV", KOC_opcode, 1, 34 },
  2197. X    {"DJNZ", KOC_aluop, 2, 35 },
  2198. X    {"DW", KOC_WDEF, 0, 0 },
  2199. X    {"ELSE", KOC_ELSE, 0, 0 },
  2200. X    {"END", KOC_END, 0, 0 },
  2201. X    {"ENDI", KOC_ENDI, 0, 0 },
  2202. X    {"EQU", KOC_EQU, 0, 0 },
  2203. X    {"FCB", KOC_BDEF, 0, 0 },
  2204. X    {"FCC", KOC_SDEF, 0, 0 },
  2205. X    {"FDB", KOC_WDEF, 0, 0 },
  2206. X    {"IF", KOC_IF, 0, 0 },
  2207. X    {"INC", KOC_opcode, 3, 37 },
  2208. X    {"INCL", KOC_INCLUDE, 0, 0 },
  2209. X    {"INCLUDE", KOC_INCLUDE, 0, 0 },
  2210. X    {"JB", KOC_aluop, 2, 40 },
  2211. X    {"JBC", KOC_aluop, 2, 42 },
  2212. X    {"JC", KOC_opcode, 1, 44 },
  2213. X    {"JMP", KOC_opcode, 1, 45 },
  2214. X    {"JNB", KOC_aluop, 2, 46 },
  2215. X    {"JNC", KOC_opcode, 1, 48 },
  2216. X    {"JNZ", KOC_opcode, 1, 49 },
  2217. X    {"JZ", KOC_opcode, 1, 50 },
  2218. X    {"LCALL", KOC_opcode, 1, 51 },
  2219. X    {"LJMP", KOC_opcode, 1, 52 },
  2220. X    {"MOV", KOC_mov, 13, 53 },
  2221. X    {"MOVC", KOC_mov, 1, 66 },
  2222. X    {"MOVX", KOC_mov, 2, 67 },
  2223. X    {"MUL", KOC_opcode, 1, 69 },
  2224. X    {"NOP", KOC_opcode, 1, 70 },
  2225. X    {"ORG", KOC_ORG, 0, 0 },
  2226. X    {"ORL", KOC_aluop, 9, 71 },
  2227. X    {"POP", KOC_opcode, 1, 80 },
  2228. X    {"PUSH", KOC_opcode, 1, 81 },
  2229. X    {"RESERVE", KOC_RESM, 0, 0 },
  2230. X    {"RET", KOC_opcode, 1, 82 },
  2231. X    {"RETI", KOC_opcode, 1, 83 },
  2232. X    {"RL", KOC_opcode, 1, 84 },
  2233. X    {"RLC", KOC_opcode, 1, 85 },
  2234. X    {"RMB", KOC_RESM, 0, 0 },
  2235. X    {"RR", KOC_opcode, 1, 86 },
  2236. X    {"RRC", KOC_opcode, 1, 87 },
  2237. X    {"SET", KOC_SET, 0, 0 },
  2238. X    {"SETB", KOC_opcode, 3, 88 },
  2239. X    {"SJMP", KOC_opcode, 1, 91 },
  2240. X    {"STRING", KOC_SDEF, 0, 0 },
  2241. X    {"SUBB", KOC_aluop, 4, 92 },
  2242. X    {"SWAP", KOC_opcode, 1, 96 },
  2243. X    {"WORD", KOC_WDEF, 0, 0 },
  2244. X    {"XCH", KOC_aluop, 3, 97 },
  2245. X    {"XCHD", KOC_aluop, 1, 100 },
  2246. X    {"XRL", KOC_aluop, 6, 101 },
  2247. X    { "", 0, 0, 0 }};
  2248. X
  2249. Xstruct opsynt ostab[NUMSYNBLK+1]
  2250. X    = {
  2251. X/* invalid 0 */ { 0, 1, 0 },
  2252. X/* invalid 1 */ { 0xffff, 1, 1 },
  2253. X/* ACALL 2 */ { ST_UOP04, 1, 2 },
  2254. X/* ADD 3 */ { ST_ALU01, 1, 3 },
  2255. X/* ADD 4 */ { ST_ALU03, 1, 4 },
  2256. X/* ADD 5 */ { ST_ALU04, 1, 5 },
  2257. X/* ADD 6 */ { ST_ALU06, 1, 6 },
  2258. X/* ADDC 7 */ { ST_ALU01, 1, 7 },
  2259. X/* ADDC 8 */ { ST_ALU03, 1, 8 },
  2260. X/* ADDC 9 */ { ST_ALU04, 1, 9 },
  2261. X/* ADDC 10 */ { ST_ALU06, 1, 10 },
  2262. X/* AJMP 11 */ { ST_UOP04, 1, 11 },
  2263. X/* ANL 12 */ { ST_ALU01, 1, 12 },
  2264. X/* ANL 13 */ { ST_ALU02, 1, 13 },
  2265. X/* ANL 14 */ { ST_ALU02E, 1, 14 },
  2266. X/* ANL 15 */ { ST_ALU03, 1, 15 },
  2267. X/* ANL 16 */ { ST_ALU04, 1, 16 },
  2268. X/* ANL 17 */ { ST_ALU05, 1, 17 },
  2269. X/* ANL 18 */ { ST_ALU06, 2, 18 },
  2270. X/* ANL 19 */ { ST_ALU08, 1, 20 },
  2271. X/* ANL 20 */ { ST_ALU09, 1, 21 },
  2272. X/* CJNE 21 */ { ST_CJNE1, 1, 22 },
  2273. X/* CJNE 22 */ { ST_CJNE2, 2, 23 },
  2274. X/* CJNE 23 */ { ST_CJNE3, 1, 25 },
  2275. X/* CLR 24 */ { ST_UOP02, 2, 26 },
  2276. X/* CLR 25 */ { ST_UOP03, 1, 28 },
  2277. X/* CLR 26 */ { ST_UOP04, 1, 29 },
  2278. X/* CPL 27 */ { ST_UOP02, 2, 30 },
  2279. X/* CPL 28 */ { ST_UOP03, 1, 32 },
  2280. X/* CPL 29 */ { ST_UOP04, 1, 33 },
  2281. X/* DA 30 */ { ST_UOP02, 1, 34 },
  2282. X/* DEC 31 */ { ST_UOP01, 1, 35 },
  2283. X/* DEC 32 */ { ST_UOP02, 2, 36 },
  2284. X/* DEC 33 */ { ST_UOP04, 1, 38 },
  2285. X/* DIV 34 */ { ST_UOP02, 1, 39 },
  2286. X/* DJNZ 35 */ { ST_ALU06, 1, 40 },
  2287. X/* DJNZ 36 */ { ST_ALU10, 1, 41 },
  2288. X/* INC 37 */ { ST_UOP01, 1, 42 },
  2289. X/* INC 38 */ { ST_UOP02, 3, 43 },
  2290. X/* INC 39 */ { ST_UOP04, 1, 46 },
  2291. X/* JB 40 */ { ST_ALU07, 1, 47 },
  2292. X/* JB 41 */ { ST_ALU10, 1, 48 },
  2293. X/* JBC 42 */ { ST_ALU07, 1, 49 },
  2294. X/* JBC 43 */ { ST_ALU10, 1, 50 },
  2295. X/* JC 44 */ { ST_UOP04, 1, 51 },
  2296. X/* JMP 45 */ { ST_UOP05, 1, 52 },
  2297. X/* JNB 46 */ { ST_ALU07, 1, 53 },
  2298. X/* JNB 47 */ { ST_ALU10, 1, 54 },
  2299. X/* JNC 48 */ { ST_UOP04, 1, 55 },
  2300. X/* JNZ 49 */ { ST_UOP04, 1, 56 },
  2301. X/* JZ 50 */ { ST_UOP04, 1, 57 },
  2302. X/* LCALL 51 */ { ST_UOP04, 1, 58 },
  2303. X/* LJMP 52 */ { ST_UOP04, 1, 59 },
  2304. X/* MOV 53 */ { ST_MOV01, 1, 60 },
  2305. X/* MOV 54 */ { ST_MOV02, 1, 61 },
  2306. X/* MOV 55 */ { ST_MOV03, 1, 62 },
  2307. X/* MOV 56 */ { ST_MOV04, 3, 63 },
  2308. X/* MOV 57 */ { ST_MOV05, 1, 66 },
  2309. X/* MOV 58 */ { ST_MOV07, 2, 67 },
  2310. X/* MOV 59 */ { ST_MOV08, 1, 69 },
  2311. X/* MOV 60 */ { ST_MOV09, 3, 70 },
  2312. X/* MOV 61 */ { ST_MOV10, 1, 73 },
  2313. X/* MOV 62 */ { ST_MOV11, 1, 74 },
  2314. X/* MOV 63 */ { ST_MOV12, 1, 75 },
  2315. X/* MOV 64 */ { ST_MOV13, 3, 76 },
  2316. X/* MOV 65 */ { ST_MOV14, 1, 79 },
  2317. X/* MOVC 66 */ { ST_MOV06, 2, 80 },
  2318. X/* MOVX 67 */ { ST_MOV02, 2, 82 },
  2319. X/* MOVX 68 */ { ST_MOV05, 2, 84 },
  2320. X/* MUL 69 */ { ST_UOP02, 1, 86 },
  2321. X/* NOP 70 */ { ST_INH, 1, 87 },
  2322. X/* ORL 71 */ { ST_ALU01, 1, 88 },
  2323. X/* ORL 72 */ { ST_ALU02, 1, 89 },
  2324. X/* ORL 73 */ { ST_ALU02E, 1, 90 },
  2325. X/* ORL 74 */ { ST_ALU03, 1, 91 },
  2326. X/* ORL 75 */ { ST_ALU04, 1, 92 },
  2327. X/* ORL 76 */ { ST_ALU05, 1, 93 },
  2328. X/* ORL 77 */ { ST_ALU06, 2, 94 },
  2329. X/* ORL 78 */ { ST_ALU08, 1, 96 },
  2330. X/* ORL 79 */ { ST_ALU09, 1, 97 },
  2331. X/* POP 80 */ { ST_UOP04, 1, 98 },
  2332. X/* PUSH 81 */ { ST_UOP04, 1, 99 },
  2333. X/* RET 82 */ { ST_INH, 1, 100 },
  2334. X/* RETI 83 */ { ST_INH, 1, 101 },
  2335. X/* RL 84 */ { ST_UOP02, 1, 102 },
  2336. X/* RLC 85 */ { ST_UOP02, 1, 103 },
  2337. X/* RR 86 */ { ST_UOP02, 1, 104 },
  2338. X/* RRC 87 */ { ST_UOP02, 1, 105 },
  2339. X/* SETB 88 */ { ST_UOP02, 1, 106 },
  2340. X/* SETB 89 */ { ST_UOP03, 1, 107 },
  2341. X/* SETB 90 */ { ST_UOP04, 1, 108 },
  2342. X/* SJMP 91 */ { ST_UOP04, 1, 109 },
  2343. X/* SUBB 92 */ { ST_ALU01, 1, 110 },
  2344. X/* SUBB 93 */ { ST_ALU03, 1, 111 },
  2345. X/* SUBB 94 */ { ST_ALU04, 1, 112 },
  2346. X/* SUBB 95 */ { ST_ALU06, 1, 113 },
  2347. X/* SWAP 96 */ { ST_UOP02, 1, 114 },
  2348. X/* XCH 97 */ { ST_ALU03, 1, 115 },
  2349. X/* XCH 98 */ { ST_ALU04, 1, 116 },
  2350. X/* XCH 99 */ { ST_ALU06, 1, 117 },
  2351. X/* XCHD 100 */ { ST_ALU03, 1, 118 },
  2352. X/* XRL 101 */ { ST_ALU01, 1, 119 },
  2353. X/* XRL 102 */ { ST_ALU03, 1, 120 },
  2354. X/* XRL 103 */ { ST_ALU04, 1, 121 },
  2355. X/* XRL 104 */ { ST_ALU06, 1, 122 },
  2356. X/* XRL 105 */ { ST_ALU08, 1, 123 },
  2357. X/* XRL 106 */ { ST_ALU09, 1, 124 },
  2358. X    { 0, 0, 0 } };
  2359. X
  2360. Xstruct igel igtab[NUMDIFFOP+1]
  2361. X    = {
  2362. X/* invalid 0 */   { 0 , 0, 
  2363. X        "[Xnullentry" },
  2364. X/* invalid 1 */   { 0 , 0, 
  2365. X        "[Xinvalid opcode" },
  2366. X/* ACALL 2 */   { 0 , 0, 
  2367. X        "[1=].Q.2+.f800&-.bI~.3}.e0&.11|;!.ff&;" },
  2368. X/* ADD 3 */   { REGSEL_ACC , REGSEL_ACC, 
  2369. X        "24;[2=];" },
  2370. X/* ADD 4 */   { REGSEL_ACC|REG2SEL_R01 , REGSEL_ACC|REG2SEL_R01, 
  2371. X        "26.[2#]|;" },
  2372. X/* ADD 5 */   { REGSEL_ACC|REG2SEL_R07 , REGSEL_ACC|REG2SEL_R07, 
  2373. X        "28.[2#]|;" },
  2374. X/* ADD 6 */   { REGSEL_ACC , REGSEL_ACC, 
  2375. X        "25;[2=].8I;" },
  2376. X/* ADDC 7 */   { REGSEL_ACC , REGSEL_ACC, 
  2377. X        "34;[2=];" },
  2378. X/* ADDC 8 */   { REGSEL_ACC|REG2SEL_R01 , REGSEL_ACC|REG2SEL_R01, 
  2379. X        "36.[2#]|;" },
  2380. X/* ADDC 9 */   { REGSEL_ACC|REG2SEL_R07 , REGSEL_ACC|REG2SEL_R07, 
  2381. X        "38.[2#]|;" },
  2382. X/* ADDC 10 */   { REGSEL_ACC , REGSEL_ACC, 
  2383. X        "35;[2=].8I;" },
  2384. X/* AJMP 11 */   { 0 , 0, 
  2385. X        "[1=].Q.2+.f800&-.bI~.3}.e0&.01|;!.ff&;" },
  2386. X/* ANL 12 */   { REGSEL_ACC , REGSEL_ACC, 
  2387. X        "54;[2=];" },
  2388. X/* ANL 13 */   { REGSEL_C , REGSEL_C, 
  2389. X        "b0;[2#];" },
  2390. X/* ANL 14 */   { REGSEL_C , REGSEL_C, 
  2391. X        "b0;[2=].8I;" },
  2392. X/* ANL 15 */   { REGSEL_ACC|REG2SEL_R01 , REGSEL_ACC|REG2SEL_R01, 
  2393. X        "56.[2#]|;" },
  2394. X/* ANL 16 */   { REGSEL_ACC|REG2SEL_R07 , REGSEL_ACC|REG2SEL_R07, 
  2395. X        "58.[2#]|;" },
  2396. X/* ANL 17 */   { REGSEL_C , REGSEL_C, 
  2397. X        "82;[2#];" },
  2398. X/* ANL 18 */   { REGSEL_ACC , REGSEL_ACC, 
  2399. X        "55;[2=].8I;" },
  2400. X/* ANL 19 */   { REGSEL_C , REGSEL_C, 
  2401. X        "82;[2=].8I;" },
  2402. X/* ANL 20 */   { 0 , 0, 
  2403. X        "53;[1=].8I;[2=];" },
  2404. X/* ANL 21 */   { REGSEL_ACC , REGSEL_ACC, 
  2405. X        "52;[1=].8I;" },
  2406. X/* CJNE 22 */   { REGSEL_ACC , REGSEL_ACC, 
  2407. X        "b5;[2=].8I;[3=].Q.1+-r" },
  2408. X/* CJNE 23 */   { REGSEL_ACC , REGSEL_ACC, 
  2409. X        "b4;[2=];[3=].Q.1+-r" },
  2410. X/* CJNE 24 */   { REGSEL_R07 , REGSEL_R07, 
  2411. X        "b8.[1#]|;[2=];[3=].Q.1+-r" },
  2412. X/* CJNE 25 */   { REGSEL_R01 , REGSEL_R01, 
  2413. X        "b6.[1#]|;[2=];[3=].Q.1+-r" },
  2414. X/* CLR 26 */   { REGSEL_ACC , REGSEL_ACC, 
  2415. X        "e4;" },
  2416. X/* CLR 27 */   { REGSEL_C , REGSEL_C, 
  2417. X        "c3;" },
  2418. X/* CLR 28 */   { 0 , 0, 
  2419. X        "c2;[1#];" },
  2420. X/* CLR 29 */   { 0 , 0, 
  2421. X        "c2;[1=].8I;" },
  2422. X/* CPL 30 */   { REGSEL_ACC , REGSEL_ACC, 
  2423. X        "f4;" },
  2424. X/* CPL 31 */   { REGSEL_C , REGSEL_C, 
  2425. X        "b3;" },
  2426. X/* CPL 32 */   { 0 , 0, 
  2427. X        "b2;[1#];" },
  2428. X/* CPL 33 */   { 0 , 0, 
  2429. X        "b2;[1=].8I;" },
  2430. X/* DA 34 */   { REGSEL_ACC , REGSEL_ACC, 
  2431. X        "d4;" },
  2432. X/* DEC 35 */   { REGSEL_R01 , REGSEL_R01, 
  2433. X        "16.[1#]|;" },
  2434. X/* DEC 36 */   { REGSEL_ACC , REGSEL_ACC, 
  2435. X        "14;" },
  2436. X/* DEC 37 */   { REGSEL_R07 , REGSEL_R07, 
  2437. X        "18.[1#]|;" },
  2438. X/* DEC 38 */   { 0 , 0, 
  2439. X        "15;[1=].8I;" },
  2440. X/* DIV 39 */   { REGSEL_AB , REGSEL_AB, 
  2441. X        "84;" },
  2442. X/* DJNZ 40 */   { REGSEL_R07 , REGSEL_R07, 
  2443. X        "d8.[1#]|;[2=].Q.1+-r" },
  2444. X/* DJNZ 41 */   { 0 , 0, 
  2445. X        "d5;[1=].8I;[2=].Q.1+-r" },
  2446. X/* INC 42 */   { REGSEL_R01 , REGSEL_R01, 
  2447. X        "06.[1#]|;" },
  2448. X/* INC 43 */   { REGSEL_ACC , REGSEL_ACC, 
  2449. X        "04;" },
  2450. X/* INC 44 */   { REGSEL_R07 , REGSEL_R07, 
  2451. X        "08.[1#]|;" },
  2452. X/* INC 45 */   { REGSEL_DPTR , REGSEL_DPTR, 
  2453. X        "a3;" },
  2454. X/* INC 46 */   { 0 , 0, 
  2455. X        "05;[1=].8I;" },
  2456. X/* JB 47 */   { 0 , 0, 
  2457. X        "20;[1#];[2=].Q.1+-r" },
  2458. X/* JB 48 */   { 0 , 0, 
  2459. X        "20;[1=].8I;[2=].Q.1+-r" },
  2460. X/* JBC 49 */   { 0 , 0, 
  2461. X        "10;[1#];[2=].Q.1+-r" },
  2462. X/* JBC 50 */   { 0 , 0, 
  2463. X        "10;[1=].8I;[2=].Q.1+-r" },
  2464. X/* JC 51 */   { 0 , 0, 
  2465. X        "40;[1=].Q.1+-r" },
  2466. X/* JMP 52 */   { REGSEL_ACC|REG2SEL_DPTR , REGSEL_ACC|REG2SEL_DPTR, 
  2467. X        "73;" },
  2468. X/* JNB 53 */   { 0 , 0, 
  2469. X        "30;[1#];[2=].Q.1+-r" },
  2470. X/* JNB 54 */   { 0 , 0, 
  2471. X        "30;[1=].8I;[2=].Q.1+-r" },
  2472. X/* JNC 55 */   { 0 , 0, 
  2473. X        "50;[1=].Q.1+-r" },
  2474. X/* JNZ 56 */   { 0 , 0, 
  2475. X        "70;[1=].Q.1+-r" },
  2476. X/* JZ 57 */   { 0 , 0, 
  2477. X        "60;[1=].Q.1+-r" },
  2478. X/* LCALL 58 */   { 0 , 0, 
  2479. X        "12;[1=]x" },
  2480. X/* LJMP 59 */   { 0 , 0, 
  2481. X        "02;[1=]x" },
  2482. X/* MOV 60 */   { REGSEL_R01 , REGSEL_R01, 
  2483. X        "76.[1#]|;[2=];" },
  2484. X/* MOV 61 */   { REGSEL_R01|REG2SEL_ACC , REGSEL_R01|REG2SEL_ACC, 
  2485. X        "f6.[1#]|;" },
  2486. X/* MOV 62 */   { REGSEL_R01 , REGSEL_R01, 
  2487. X        "a6.[1#]|;[2=].8I;" },
  2488. X/* MOV 63 */   { REGSEL_ACC , REGSEL_ACC, 
  2489. X        "74;[2=];" },
  2490. X/* MOV 64 */   { REGSEL_DPTR , REGSEL_DPTR, 
  2491. X        "90;[2=]x" },
  2492. X/* MOV 65 */   { REGSEL_R07 , REGSEL_R07, 
  2493. X        "78.[1#]|;[2=];" },
  2494. X/* MOV 66 */   { REGSEL_ACC|REG2SEL_R01 , REGSEL_ACC|REG2SEL_R01, 
  2495. X        "e6.[2#]|;" },
  2496. X/* MOV 67 */   { REGSEL_ACC|REG2SEL_R07 , REGSEL_ACC|REG2SEL_R07, 
  2497. X        "e8.[2#]|;" },
  2498. X/* MOV 68 */   { REGSEL_R07|REG2SEL_ACC , REGSEL_R07|REG2SEL_ACC, 
  2499. X        "f8.[1#]|;" },
  2500. X/* MOV 69 */   { REGSEL_C , REGSEL_C, 
  2501. X        "a2;[2#];" },
  2502. X/* MOV 70 */   { REGSEL_ACC , REGSEL_ACC, 
  2503. X        "e5;[2=].8I;" },
  2504. X/* MOV 71 */   { REGSEL_C , REGSEL_C, 
  2505. X        "a2;[2=].8I;" },
  2506. X/* MOV 72 */   { REGSEL_R07 , REGSEL_R07, 
  2507. X        "a8.[1#]|;[2=].8I;" },
  2508. X/* MOV 73 */   { REGSEL_C , REGSEL_C, 
  2509. X        "92;[1#];" },
  2510. X/* MOV 74 */   { 0 , 0, 
  2511. X        "75;[1=].8I;[2=];" },
  2512. X/* MOV 75 */   { REGSEL_R01 , REGSEL_R01, 
  2513. X        "86.[2#]|;[1=].8I;" },
  2514. X/* MOV 76 */   { REGSEL_ACC , REGSEL_ACC, 
  2515. X        "f5;[1=].8I;" },
  2516. X/* MOV 77 */   { REGSEL_C , REGSEL_C, 
  2517. X        "92;[1=].8I;" },
  2518. X/* MOV 78 */   { REGSEL_R07 , REGSEL_R07, 
  2519. X        "88.[2#]|;[1=].8I;" },
  2520. X/* MOV 79 */   { 0 , 0, 
  2521. X        "85;[2=].8I;[1=].8I;" },
  2522. X/* MOVC 80 */   { REGSEL_ACC|REG2SEL_DPTR , REGSEL_ACC|REG2SEL_DPTR, 
  2523. X        "93;" },
  2524. X/* MOVC 81 */   { REGSEL_ACC|REG2SEL_PC , REGSEL_ACC|REG2SEL_PC, 
  2525. X        "83;" },
  2526. X/* MOVX 82 */   { REGSEL_DPTR|REG2SEL_ACC , REGSEL_DPTR|REG2SEL_ACC, 
  2527. X        "f0;" },
  2528. X/* MOVX 83 */   { REGSEL_R01|REG2SEL_ACC , REGSEL_R01|REG2SEL_ACC, 
  2529. X        "f2.[1#]|;" },
  2530. X/* MOVX 84 */   { REGSEL_ACC|REG2SEL_DPTR , REGSEL_ACC|REG2SEL_DPTR, 
  2531. X        "e0;" },
  2532. X/* MOVX 85 */   { REGSEL_ACC|REG2SEL_R01 , REGSEL_ACC|REG2SEL_R01, 
  2533. X        "e2.[2#]|;" },
  2534. X/* MUL 86 */   { REGSEL_AB , REGSEL_AB, 
  2535. X        "a4;" },
  2536. X/* NOP 87 */   { 0 , 0, 
  2537. X        "00;" },
  2538. X/* ORL 88 */   { REGSEL_ACC , REGSEL_ACC, 
  2539. X        "44;[2=];" },
  2540. X/* ORL 89 */   { REGSEL_C , REGSEL_C, 
  2541. X        "a0;[2#];" },
  2542. X/* ORL 90 */   { REGSEL_C , REGSEL_C, 
  2543. X        "a0;[2=].8I;" },
  2544. X/* ORL 91 */   { REGSEL_ACC|REG2SEL_R01 , REGSEL_ACC|REG2SEL_R01, 
  2545. X        "46.[2#]|;" },
  2546. X/* ORL 92 */   { REGSEL_ACC|REG2SEL_R07 , REGSEL_ACC|REG2SEL_R07, 
  2547. X        "48.[2#]|;" },
  2548. X/* ORL 93 */   { REGSEL_C , REGSEL_C, 
  2549. X        "72;[2#];" },
  2550. X/* ORL 94 */   { REGSEL_ACC , REGSEL_ACC, 
  2551. X        "45;[2=].8I;" },
  2552. X/* ORL 95 */   { REGSEL_C , REGSEL_C, 
  2553. X        "72;[2=].8I;" },
  2554. X/* ORL 96 */   { 0 , 0, 
  2555. X        "43;[1=].8I;[2=];" },
  2556. X/* ORL 97 */   { REGSEL_ACC , REGSEL_ACC, 
  2557. X        "42;[1=].8I;" },
  2558. X/* POP 98 */   { 0 , 0, 
  2559. X        "d0;[1=].8I;" },
  2560. X/* PUSH 99 */   { 0 , 0, 
  2561. X        "c0;[1=].8I;" },
  2562. X/* RET 100 */   { 0 , 0, 
  2563. X        "22;" },
  2564. X/* RETI 101 */   { 0 , 0, 
  2565. X        "32;" },
  2566. X/* RL 102 */   { REGSEL_ACC , REGSEL_ACC, 
  2567. X        "23;" },
  2568. X/* RLC 103 */   { REGSEL_ACC , REGSEL_ACC, 
  2569. X        "33;" },
  2570. X/* RR 104 */   { REGSEL_ACC , REGSEL_ACC, 
  2571. X        "03;" },
  2572. X/* RRC 105 */   { REGSEL_ACC , REGSEL_ACC, 
  2573. X        "13;" },
  2574. X/* SETB 106 */   { REGSEL_C , REGSEL_C, 
  2575. X        "d3;" },
  2576. X/* SETB 107 */   { 0 , 0, 
  2577. X        "d2;[1#];" },
  2578. X/* SETB 108 */   { 0 , 0, 
  2579. X        "d2;[1=].8I;" },
  2580. X/* SJMP 109 */   { 0 , 0, 
  2581. X        "80;[1=].Q.1+-r" },
  2582. X/* SUBB 110 */   { REGSEL_ACC , REGSEL_ACC, 
  2583. X        "94;[2=];" },
  2584. X/* SUBB 111 */   { REGSEL_ACC|REG2SEL_R01 , REGSEL_ACC|REG2SEL_R01, 
  2585. X        "96.[2#]|;" },
  2586. X/* SUBB 112 */   { REGSEL_ACC|REG2SEL_R07 , REGSEL_ACC|REG2SEL_R07, 
  2587. X        "98.[2#]|;" },
  2588. X/* SUBB 113 */   { REGSEL_ACC , REGSEL_ACC, 
  2589. X        "95;[2=].8I;" },
  2590. X/* SWAP 114 */   { REGSEL_ACC , REGSEL_ACC, 
  2591. X        "c4;" },
  2592. X/* XCH 115 */   { REGSEL_ACC|REG2SEL_R01 , REGSEL_ACC|REG2SEL_R01, 
  2593. X        "c6.[2#]|;" },
  2594. X/* XCH 116 */   { REGSEL_ACC|REG2SEL_R07 , REGSEL_ACC|REG2SEL_R07, 
  2595. X        "c8.[2#]|;" },
  2596. X/* XCH 117 */   { REGSEL_ACC , REGSEL_ACC, 
  2597. X        "c5;[2=].8I;" },
  2598. X/* XCHD 118 */   { REGSEL_ACC|REG2SEL_R01 , REGSEL_ACC|REG2SEL_R01, 
  2599. X        "d6.[2#]|;" },
  2600. X/* XRL 119 */   { REGSEL_ACC , REGSEL_ACC, 
  2601. X        "64;[2=];" },
  2602. X/* XRL 120 */   { REGSEL_ACC|REG2SEL_R01 , REGSEL_ACC|REG2SEL_R01, 
  2603. X        "66.[2#]|;" },
  2604. X/* XRL 121 */   { REGSEL_ACC|REG2SEL_R07 , REGSEL_ACC|REG2SEL_R07, 
  2605. X        "68.[2#]|;" },
  2606. X/* XRL 122 */   { REGSEL_ACC , REGSEL_ACC, 
  2607. X        "65;[2=].8I;" },
  2608. X/* XRL 123 */   { 0 , 0, 
  2609. X        "63;[1=].8I;[2=];" },
  2610. X/* XRL 124 */   { REGSEL_ACC , REGSEL_ACC, 
  2611. X        "62;[1=].8I;" },
  2612. X    { 0,0,""} };
  2613. X/* end fraptabdef.c */
  2614. SHAR_EOF
  2615. true || echo 'restore of as8051.y failed'
  2616. fi
  2617. exit 0
  2618.