home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume9 / assem2 / part02 < prev    next >
Text File  |  1987-03-11  |  43KB  |  1,122 lines

  1. Subject:  v09i027:  Generic assembler for micro's, Part02/02
  2. Newsgroups: mod.sources
  3. Approved: rs@mirror.TMC.COM
  4.  
  5. Submitted by: cisden!lmc (Lyle McElhaney)
  6. Mod.sources: Volume 9, Issue 27
  7. Archive-name: assem2/Part02
  8.  
  9. echo extracting - 6502_ops.h
  10. sed 's/^X//' > 6502_ops.h << '@FUNKY STUFF~'
  11. X#define BYTESPERLINE 3  /* # bytes per line on the listing */
  12. X
  13. X#define SIGNED YES
  14. X#define SWAPPED YES
  15. X#define RELATIVE YES
  16. X
  17. Xopdclass  o_immed  =  { 8,  NO,     NO,      NO,       0};
  18. Xopdclass  o_zpage  =  { 8,  NO,     NO,      NO,       0};
  19. Xopdclass  o_mem    =  { 16, NO,     SWAPPED, NO,       0};
  20. Xopdclass  o_rel    =  { 8,  SIGNED, NO,      RELATIVE, -2};
  21. X
  22. Xinsclass  i_nomem  =  { 1, 0,  &o_none, &o_none, 0, 0};
  23. Xinsclass  i_branch =  { 2, 1,   &o_rel, &o_none, 8, 0};
  24. Xinsclass  i_immed  =  { 2, 1, &o_immed, &o_none, 8, 0};
  25. Xinsclass  i_zpage  =  { 2, 1, &o_zpage, &o_none, 8, 0};
  26. Xinsclass  i_abs    =  { 3, 1,   &o_mem, &o_none, 8, 0};
  27. X
  28. Xopdef optab[] = {
  29. X    { "adci",       &i_immed,       0x69000000,   geninstr},
  30. X    { "adcz",       &i_zpage,       0x65000000,   geninstr},
  31. X    { "adczx",      &i_zpage,       0x75000000,   geninstr},
  32. X    { "adca",       &i_abs,         0x6d000000,   geninstr},
  33. X    { "adcax",      &i_abs,         0x7d000000,   geninstr},
  34. X    { "adcay",      &i_abs,         0x79000000,   geninstr},
  35. X    { "adcix",      &i_zpage,       0x61000000,   geninstr},
  36. X    { "adciy",   &i_zpage,       0x71000000,   geninstr},
  37. X    { "andi",       &i_immed,       0x29000000,   geninstr},
  38. X    { "andz",       &i_zpage,       0x25000000,   geninstr},
  39. X    { "andzx",      &i_zpage,       0x35000000,   geninstr},
  40. X    { "anda",       &i_abs,         0x2d000000,   geninstr},
  41. X    { "andax",      &i_abs,         0x3d000000,   geninstr},
  42. X    { "anday",      &i_abs,         0x39000000,   geninstr},
  43. X    { "andix",      &i_zpage,       0x21000000,   geninstr},
  44. X    { "andiy",      &i_zpage,       0x31000000,   geninstr},
  45. X    { "aslac",      &i_nomem,       0x0a000000,   geninstr},
  46. X    { "aslz",       &i_zpage,       0x06000000,   geninstr},
  47. X    { "aslzx",      &i_zpage,       0x16000000,   geninstr},
  48. X    { "asla",       &i_abs,         0x0e000000,   geninstr},
  49. X    { "aslax",      &i_abs,         0x1e000000,   geninstr},
  50. X    { "bcc",        &i_branch,      0x90000000,   geninstr},
  51. X    { "bcs",        &i_branch,      0xb0000000,   geninstr},
  52. X    { "beq",        &i_branch,      0xf0000000,   geninstr},
  53. X    { "bitz",       &i_zpage,       0x24000000,   geninstr},
  54. X    { "bita",       &i_abs,         0x2c000000,   geninstr},
  55. X    { "bmi",        &i_branch,      0x30000000,   geninstr},
  56. X    { "bne",        &i_branch,      0xd0000000,   geninstr},
  57. X    { "bpl",        &i_branch,      0x10000000,   geninstr},
  58. X    { "brk",        &i_nomem,       0x00000000,   geninstr},
  59. X    { "bvc",        &i_branch,      0x50000000,   geninstr},
  60. X    { "bvs",        &i_branch,      0x70000000,   geninstr},
  61. X    { "clc",        &i_nomem,       0x18000000,   geninstr},
  62. X    { "cld",        &i_nomem,       0xd8000000,   geninstr},
  63. X    { "cli",        &i_nomem,       0x58000000,   geninstr},
  64. X    { "clv",        &i_nomem,       0xb8000000,   geninstr},
  65. X    { "cmpi",       &i_immed,       0xc9000000,   geninstr},
  66. X    { "cmpz",       &i_zpage,       0xc5000000,   geninstr},
  67. X    { "cmpzx",      &i_zpage,       0xd5000000,   geninstr},
  68. X    { "cmpa",       &i_abs,         0xcd000000,   geninstr},
  69. X    { "cmpax",      &i_abs,         0xdd000000,   geninstr},
  70. X    { "cmpay",      &i_abs,         0xd9000000,   geninstr},
  71. X    { "cmpix",      &i_zpage,       0xc1000000,   geninstr},
  72. X    { "cmpiy",      &i_zpage,       0xd1000000,   geninstr},
  73. X    { "cpxi",       &i_immed,       0xe0000000,   geninstr},
  74. X    { "cpxz",       &i_zpage,       0xe4000000,   geninstr},
  75. X    { "cpxa",       &i_abs,         0xec000000,   geninstr},
  76. X    { "cpyi",       &i_immed,       0xc0000000,   geninstr},
  77. X    { "cpyz",       &i_zpage,       0xc4000000,   geninstr},
  78. X    { "cpya",       &i_abs,         0xcc000000,   geninstr},
  79. X    { "decz",       &i_zpage,       0xc6000000,   geninstr},
  80. X    { "deczx",      &i_zpage,       0xd6000000,   geninstr},
  81. X    { "deca",       &i_abs,         0xce000000,   geninstr},
  82. X    { "decax",      &i_abs,         0xde000000,   geninstr},
  83. X    { "dex",        &i_nomem,       0xca000000,   geninstr},
  84. X    { "dey",        &i_nomem,       0x88000000,   geninstr},
  85. X    { "eori",       &i_immed,       0x49000000,   geninstr},
  86. X    { "eorz",       &i_zpage,       0x45000000,   geninstr},
  87. X    { "eorzx",      &i_zpage,       0x55000000,   geninstr},
  88. X    { "eora",       &i_abs,         0x4d000000,   geninstr},
  89. X    { "eorax",      &i_abs,         0x5d000000,   geninstr},
  90. X    { "eoray",      &i_abs,         0x59000000,   geninstr},
  91. X    { "eorix",      &i_zpage,       0x41000000,   geninstr},
  92. X    { "eoriy",      &i_zpage,       0x51000000,   geninstr},
  93. X    { "incz",       &i_zpage,       0xe6000000,   geninstr},
  94. X    { "inczx",      &i_zpage,       0xf6000000,   geninstr},
  95. X    { "inca",       &i_abs,         0xee000000,   geninstr},
  96. X    { "incax",      &i_abs,         0xfe000000,   geninstr},
  97. X    { "inx",        &i_nomem,       0xe8000000,   geninstr},
  98. X    { "iny",        &i_nomem,       0xc8000000,   geninstr},
  99. X    { "jmp",        &i_abs,         0x4c000000,   geninstr},
  100. X    { "jmpi",       &i_abs,         0x6c000000,   geninstr},
  101. X    { "jsr",        &i_abs,         0x20000000,   geninstr},
  102. X    { "ldai",       &i_immed,       0xa9000000,   geninstr},
  103. X    { "ldaz",       &i_zpage,       0xa5000000,   geninstr},
  104. X    { "ldazx",      &i_zpage,       0xb5000000,   geninstr},
  105. X    { "ldaa",       &i_abs,         0xad000000,   geninstr},
  106. X    { "ldaax",      &i_abs,         0xbd000000,   geninstr},
  107. X    { "ldaay",      &i_abs,         0xb9000000,   geninstr},
  108. X    { "ldaix",      &i_zpage,       0xa1000000,   geninstr},
  109. X    { "ldaiy",      &i_zpage,       0xb1000000,   geninstr},
  110. X    { "ldxi",       &i_immed,       0xa2000000,   geninstr},
  111. X    { "ldxz",       &i_zpage,       0xa6000000,   geninstr},
  112. X    { "ldxzy",      &i_zpage,       0xb6000000,   geninstr},
  113. X    { "ldxa",       &i_abs,         0xae000000,   geninstr},
  114. X    { "ldxay",      &i_abs,         0xbe000000,   geninstr},
  115. X    { "ldyi",       &i_immed,       0xa0000000,   geninstr},
  116. X    { "ldyz",       &i_zpage,       0xa4000000,   geninstr},
  117. X    { "ldyzx",      &i_zpage,       0xb4000000,   geninstr},
  118. X    { "ldya",       &i_abs,         0xac000000,   geninstr},
  119. X    { "ldyax",      &i_abs,         0xbc000000,   geninstr},
  120. X    { "lsrac",      &i_nomem,       0x4a000000,   geninstr},
  121. X    { "lsrz",       &i_zpage,       0x46000000,   geninstr},
  122. X    { "lsrzx",      &i_zpage,       0x56000000,   geninstr},
  123. X    { "lsra",       &i_abs,         0x4e000000,   geninstr},
  124. X    { "lsrax",      &i_abs,         0x5e000000,   geninstr},
  125. X    { "nop",        &i_nomem,       0xea000000,   geninstr},
  126. X    { "orai",       &i_immed,       0x09000000,   geninstr},
  127. X    { "oraz",       &i_zpage,       0x05000000,   geninstr},
  128. X    { "orazx",      &i_zpage,       0x15000000,   geninstr},
  129. X    { "oraa",       &i_abs,         0x0d000000,   geninstr},
  130. X    { "oraax",      &i_abs,         0x1d000000,   geninstr},
  131. X    { "oraay",      &i_abs,         0x19000000,   geninstr},
  132. X    { "oraix",      &i_zpage,       0x01000000,   geninstr},
  133. X    { "oraiy",      &i_zpage,       0x11000000,   geninstr},
  134. X    { "pha",        &i_nomem,       0x48000000,   geninstr},
  135. X    { "php",        &i_nomem,       0x08000000,   geninstr},
  136. X    { "pla",        &i_nomem,       0x68000000,   geninstr},
  137. X    { "plp",        &i_nomem,       0x28000000,   geninstr},
  138. X    { "rolac",      &i_nomem,       0x2a000000,   geninstr},
  139. X    { "rolz",       &i_zpage,       0x26000000,   geninstr},
  140. X    { "rolzx",      &i_zpage,       0x36000000,   geninstr},
  141. X    { "rola",       &i_abs,         0x2e000000,   geninstr},
  142. X    { "rolax",      &i_abs,         0x3e000000,   geninstr},
  143. X    { "rorac",      &i_nomem,       0x6a000000,   geninstr},
  144. X    { "rorz",       &i_zpage,       0x66000000,   geninstr},
  145. X    { "rorzx",      &i_zpage,       0x76000000,   geninstr},
  146. X    { "rora",       &i_abs,         0x6e000000,   geninstr},
  147. X    { "rorax",      &i_abs,         0x7e000000,   geninstr},
  148. X    { "rti",        &i_nomem,       0x40000000,   geninstr},
  149. X    { "rst",        &i_nomem,       0x60000000,   geninstr},
  150. X    { "sbci",       &i_immed,       0xe9000000,   geninstr},
  151. X    { "sbcz",       &i_zpage,       0xe5000000,   geninstr},
  152. X    { "sbczx",      &i_zpage,       0xf5000000,   geninstr},
  153. X    { "sbca",       &i_abs,         0xed000000,   geninstr},
  154. X    { "sbcax",      &i_abs,         0xfd000000,   geninstr},
  155. X    { "sbcay",      &i_abs,         0xf9000000,   geninstr},
  156. X    { "sbcix",      &i_zpage,       0xe1000000,   geninstr},
  157. X    { "sbciy",      &i_zpage,       0xf1000000,   geninstr},
  158. X    { "sec",        &i_nomem,       0x38000000,   geninstr},
  159. X    { "sed",        &i_nomem,       0xf8000000,   geninstr},
  160. X    { "sei",        &i_nomem,       0x78000000,   geninstr},
  161. X    { "staz",       &i_zpage,       0x85000000,   geninstr},
  162. X    { "stazx",      &i_zpage,       0x95000000,   geninstr},
  163. X    { "staa",       &i_abs,         0x8d000000,   geninstr},
  164. X    { "staax",      &i_abs,         0x9d000000,   geninstr},
  165. X    { "staay",      &i_abs,         0x99000000,   geninstr},
  166. X    { "staix",      &i_zpage,       0x81000000,   geninstr},
  167. X    { "staiy",      &i_zpage,       0x91000000,   geninstr},
  168. X    { "stxz",       &i_zpage,       0x86000000,   geninstr},
  169. X    { "stxzy",      &i_zpage,       0x96000000,   geninstr},
  170. X    { "stxa",       &i_abs,         0x8e000000,   geninstr},
  171. X    { "styz",       &i_zpage,       0x84000000,   geninstr},
  172. X    { "styzx",      &i_zpage,       0x94000000,   geninstr},
  173. X    { "stya",       &i_abs,         0x8c000000,   geninstr},
  174. X    { "tax",        &i_nomem,       0xaa000000,   geninstr},
  175. X    { "tay",        &i_nomem,       0xa8000000,   geninstr},
  176. X    { "tsx",        &i_nomem,       0xba000000,   geninstr},
  177. X    { "txa",        &i_nomem,       0x8a000000,   geninstr},
  178. X    { "txs",        &i_nomem,       0x9a000000,   geninstr},
  179. X    { "tya",        &i_nomem,       0x98000000,   geninstr},
  180. X    { "",           &i_noopd,       0x00000000,   geninstr}
  181. X};
  182. X
  183. Xsymbol predef[] = {
  184. X    { "acptr",      0xffa5, &o_mem, (segmnt *) 0 },
  185. X    { "chkin",      0xffc6, &o_mem, (segmnt *) 0 },
  186. X    { "chkout",     0xffc9, &o_mem, (segmnt *) 0 },
  187. X    { "chrin",      0xffcf, &o_mem, (segmnt *) 0 },
  188. X    { "chrout",     0xffd2, &o_mem, (segmnt *) 0 },
  189. X    { "ciout",      0xffa8, &o_mem, (segmnt *) 0 },
  190. X    { "cint",       0xff81, &o_mem, (segmnt *) 0 },
  191. X    { "clall",      0xffe7, &o_mem, (segmnt *) 0 },
  192. X    { "close",      0xffc3, &o_mem, (segmnt *) 0 },
  193. X    { "clrchn",     0xffcc, &o_mem, (segmnt *) 0 },
  194. X    { "getin",      0xffe4, &o_mem, (segmnt *) 0 },
  195. X    { "iobase",     0xfff3, &o_mem, (segmnt *) 0 },
  196. X    { "ioinit",     0xff84, &o_mem, (segmnt *) 0 },
  197. X    { "listen",     0xffb1, &o_mem, (segmnt *) 0 },
  198. X    { "load",       0xffd5, &o_mem, (segmnt *) 0 },
  199. X    { "membot",     0xff9c, &o_mem, (segmnt *) 0 },
  200. X    { "memtop",     0xff99, &o_mem, (segmnt *) 0 },
  201. X    { "open",       0xffc0, &o_mem, (segmnt *) 0 },
  202. X    { "plot",       0xfff0, &o_mem, (segmnt *) 0 },
  203. X    { "ramtas",     0xff87, &o_mem, (segmnt *) 0 },
  204. X    { "rdtim",      0xffde, &o_mem, (segmnt *) 0 },
  205. X    { "readst",     0xffb7, &o_mem, (segmnt *) 0 },
  206. X    { "restor",     0xff8a, &o_mem, (segmnt *) 0 },
  207. X    { "save",       0xffd8, &o_mem, (segmnt *) 0 },
  208. X    { "scnkey",     0xff9f, &o_mem, (segmnt *) 0 },
  209. X    { "screen",     0xffed, &o_mem, (segmnt *) 0 },
  210. X    { "second",     0xff93, &o_mem, (segmnt *) 0 },
  211. X    { "setlfs",     0xffba, &o_mem, (segmnt *) 0 },
  212. X    { "setmsg",     0xff90, &o_mem, (segmnt *) 0 },
  213. X    { "setnam",     0xffbd, &o_mem, (segmnt *) 0 },
  214. X    { "settim",     0xffdb, &o_mem, (segmnt *) 0 },
  215. X    { "settmo",     0xffa2, &o_mem, (segmnt *) 0 },
  216. X    { "stop",       0xffe1, &o_mem, (segmnt *) 0 },
  217. X    { "talk",       0xffb4, &o_mem, (segmnt *) 0 },
  218. X    { "tksa",       0xff96, &o_mem, (segmnt *) 0 },
  219. X    { "udtim",      0xffea, &o_mem, (segmnt *) 0 },
  220. X    { "unlsn",      0xffae, &o_mem, (segmnt *) 0 },
  221. X    { "untlk",      0xffab, &o_mem, (segmnt *) 0 },
  222. X    { "vector",     0xff8d, &o_mem, (segmnt *) 0 },
  223. X    { "",           0x0,    &o_none, (segmnt *) 0 }
  224. X};
  225. X
  226. Xvoid optional () {}
  227. @FUNKY STUFF~
  228. echo extracting - 6803_ops.h
  229. sed 's/^X//' > 6803_ops.h << '@FUNKY STUFF~'
  230. X#define BYTESPERLINE 3  /* # bytes per line on the listing */
  231. X
  232. X#define SIGNED YES
  233. X#define SWAPPED YES
  234. X#define RELATIVE YES
  235. X
  236. Xopdclass o_reg   = { 1, NO    , NO, NO      , 0};
  237. Xopdclass o_smem  = { 8, NO    , NO, NO      , 0};
  238. Xopdclass o_rmem  = { 8, SIGNED, NO, RELATIVE, -2};
  239. Xopdclass o_mem   = {16, NO    , NO, NO      , 0};
  240. Xopdclass o_off   = { 8, SIGNED, NO, NO      , 0};
  241. Xopdclass o_data  = { 8, SIGNED, NO, NO      , 0};
  242. Xopdclass o_data2 = {16, SIGNED, NO, NO      , 0};
  243. Xopdclass o_cond  = { 4, NO    , NO, NO      , 0};
  244. X
  245. Xinsclass i_reg   = {1, 1, &o_reg , &o_none, -4, 0};
  246. Xinsclass i_regp  = {1, 1, &o_reg , &o_none,  0, 0};
  247. Xinsclass i_rimed = {2, 2, &o_reg , &o_data, -6, 8};
  248. Xinsclass i_rimd2 = {3, 2, &o_reg , &o_data2,-6, 16};
  249. Xinsclass i_rdir  = {2, 2, &o_reg , &o_smem, -6, 8};
  250. Xinsclass i_rindx = {2, 2, &o_reg , &o_off , -6, 8};
  251. Xinsclass i_rxtd  = {3, 2, &o_reg , &o_mem , -6,16};
  252. Xinsclass i_imed  = {3, 1, &o_data2,&o_none, 16, 0};
  253. Xinsclass i_dir   = {2, 1, &o_smem, &o_none,  8, 0};
  254. Xinsclass i_indx  = {2, 1, &o_off , &o_none,  8, 0};
  255. Xinsclass i_xtd   = {3, 1, &o_mem , &o_none, 16, 0};
  256. Xinsclass i_rel   = {2, 1, &o_rmem, &o_none,  8, 0};
  257. Xinsclass i_cond  = {2, 2, &o_cond, &o_rmem,  0, 8};
  258. X
  259. Xbeginpattern c_cx
  260. Xchoicedef c_~1 = {"~1s", "~1z", ~2, 0, 0xff, NO};
  261. Xendpattern
  262. Xpattern c_cx,adc,2
  263. Xpattern c_cx,add,2
  264. Xpattern c_cx,and,2
  265. Xpattern c_cx,bit,2
  266. Xpattern c_cx,cmp,2
  267. Xpattern c_cx,eor,2
  268. Xpattern c_cx,lda,2
  269. Xpattern c_cx,ldr,2
  270. Xpattern c_cx,ora,2
  271. Xpattern c_cx,sbc,2
  272. Xpattern c_cx,sub,2
  273. Xpattern c_cx,addd,1
  274. Xpattern c_cx,ldd,1
  275. Xpattern c_cx,std,1
  276. Xpattern c_cx,sta,1
  277. Xpattern c_cx,str,1
  278. Xpattern c_cx,subd,1
  279. Xpattern c_cx,jsr,1
  280. Xpattern c_cx,cpx,1
  281. X
  282. Xbeginpattern x_mem
  283. X    "~1"    , (insclass *)&c_~1, 0x00, choiceinstr,
  284. X    "~1s"   , &i_rdir , 0x90+0x~2, geninstr,
  285. X    "~1i"   , &i_rimed, 0x80+0x~2, geninstr,
  286. X    "~1x"   , &i_rindx, 0xa0+0x~2, geninstr,
  287. X    "~1z"   , &i_rxtd , 0xb0+0x~2, geninstr,
  288. Xendpattern
  289. X
  290. Xbeginpattern x_dou
  291. X    "~1"   , (insclass *)&c_~1, 0x00, choiceinstr,
  292. X    "~1s"  , &i_dir  , 0x90+0x~2, geninstr,
  293. X    "~1i"  , &i_imed , 0x80+0x~2, geninstr,
  294. X    "~1x"  , &i_indx , 0xa0+0x~2, geninstr,
  295. X    "~1z"  , &i_xtd  , 0xb0+0x~2, geninstr,
  296. Xendpattern
  297. X
  298. Xbeginpattern x_xreg
  299. X    "~1"    , (insclass *)&c_~1, 0x00, choiceinstr,
  300. X    "~1s"   , &i_rdir , 0x90+0x~2, geninstr,
  301. X    "~1i"   , &i_rimd2, 0x80+0x~2, geninstr,
  302. X    "~1x"   , &i_rindx, 0xa0+0x~2, geninstr,
  303. X    "~1z"   , &i_rxtd , 0xb0+0x~2, geninstr,
  304. Xendpattern
  305. X
  306. Xbeginpattern x_reg
  307. X    "~1"    , &i_xtd  , 0x70+0x~2, geninstr,
  308. X    "~1a"   , &i_reg  , 0x40+0x~2, geninstr,
  309. X    "~1x"   , &i_indx , 0x60+0x~2, geninstr,
  310. Xendpattern
  311. X
  312. Xopdef optab[] = {
  313. X    "abx"    , &i_noopd, 0x3a, geninstr,
  314. Xpattern x_mem,adc,9
  315. Xpattern x_mem,add,b
  316. Xpattern x_dou,addd,43
  317. Xpattern x_mem,and,4
  318. Xpattern x_reg,asl,8
  319. Xpattern x_reg,asr,7
  320. X    "bc"     , &i_cond , 0x20, geninstr,
  321. Xpattern x_mem,bit,5
  322. X    "bra"    , &i_rel  , 0x20, geninstr,
  323. X    "bsr"    , &i_rel  , 0x8d, geninstr,
  324. X    "cli"    , &i_noopd, 0x0e, geninstr,
  325. Xpattern x_reg,clr,f
  326. Xpattern x_mem,cmp,1
  327. Xpattern x_reg,com,3
  328. Xpattern x_dou,cpx,c
  329. X    "daa"    , &i_noopd, 0x19, geninstr,
  330. Xpattern x_reg,dec,a
  331. Xpattern x_mem,eor,8
  332. Xpattern x_reg,inc,c
  333. X    "jmpx"   , &i_indx , 0x6e, geninstr,
  334. X    "jmp"    , &i_xtd  , 0x7e, geninstr,
  335. Xpattern x_dou,jsr,d
  336. Xpattern x_mem,lda,6
  337. Xpattern x_dou,ldd,4c
  338. Xpattern x_xreg,ldr,e
  339. Xpattern x_reg,lsl,5
  340. Xpattern x_reg,lsr,4
  341. X    "mul"    , &i_noopd, 0x3d, geninstr,
  342. Xpattern x_reg,neg,0
  343. Xpattern x_mem,ora,a
  344. Xpattern x_reg,rol,9
  345. Xpattern x_reg,ror,6
  346. X    "rti"    , &i_noopd, 0x3b, geninstr,
  347. X    "rts"    , &i_noopd, 0x39, geninstr,
  348. Xpattern x_mem,sbc,2
  349. X    "sei"    , &i_noopd, 0x0f, geninstr,
  350. Xpattern x_mem,sta,7
  351. Xpattern x_dou,std,4d
  352. Xpattern x_xreg,str,f
  353. Xpattern x_mem,sub,0
  354. Xpattern x_dou,subd,3
  355. X    "swi"    , &i_noopd, 0x3f, geninstr,
  356. Xpattern x_reg,tst,d
  357. X    ""       , &i_noopd, 0x00, geninstr
  358. X};
  359. X
  360. Xsymbol predef[] = {
  361. X    {"ra" , 0x0, &o_reg , (segmnt *)0 },
  362. X    {"rb" , 0x1, &o_reg , (segmnt *)0 },
  363. X    {"rx" , 0x1, &o_reg , (segmnt *)0 },
  364. X    {"sp" , 0x0, &o_reg , (segmnt *)0 },
  365. X    {"nz" , 0x6, &o_cond, (segmnt *)0 },
  366. X    {"z"  , 0x7, &o_cond, (segmnt *)0 },
  367. X    {"ne" , 0x6, &o_cond, (segmnt *)0 },
  368. X    {"eq" , 0x7, &o_cond, (segmnt *)0 },
  369. X    {"nc" , 0x4, &o_cond, (segmnt *)0 },
  370. X    {"c"  , 0x5, &o_cond, (segmnt *)0 },
  371. X    {"gez", 0xc, &o_cond, (segmnt *)0 },
  372. X    {"gz" , 0xe, &o_cond, (segmnt *)0 },
  373. X    {"gt" , 0x2, &o_cond, (segmnt *)0 },
  374. X    {"lez", 0xf, &o_cond, (segmnt *)0 },
  375. X    {"le" , 0x3, &o_cond, (segmnt *)0 },
  376. X    {"lz" , 0xd, &o_cond, (segmnt *)0 },
  377. X    {"m"  , 0xb, &o_cond, (segmnt *)0 },
  378. X    {"ov" , 0x9, &o_cond, (segmnt *)0 },
  379. X    {"nov", 0x8, &o_cond, (segmnt *)0 },
  380. X    {"p"  , 0xa, &o_cond, (segmnt *)0 },
  381. X    {"ge" , 0x4, &o_cond, (segmnt *)0 },
  382. X    {"lt" , 0x5, &o_cond, (segmnt *)0 },
  383. X    {""   , 0x0, &o_none, (segmnt *)0 },
  384. X};
  385. X
  386. Xvoid optional () {}
  387. @FUNKY STUFF~
  388. echo extracting - 6803reg.h
  389. sed 's/^X//' > 6803reg.h << '@FUNKY STUFF~'
  390. X
  391. X; control register & bit definition
  392. X;       assumes operating mode 2 or 3
  393. X
  394. Xp1ddr   equ     0       ; port 1 data direction
  395. Xp2ddr   equ     01      ; port 2 data direction
  396. Xp1dr    equ     02      ; port 1 data
  397. Xp2dr    equ     03      ; port 2 data
  398. X
  399. Xp2d_pc2     equ     080
  400. Xp2d_pc1     equ     040
  401. Xp2d_pc0     equ     020
  402. Xp2d_p24     equ     010
  403. Xscixmt      equ     p2d_p24
  404. Xp2d_p23     equ     08
  405. Xscircv      equ     p2d_p23
  406. Xp2d_p22     equ     04
  407. Xsciclock    equ     p2d_p22
  408. Xp2d_p21     equ     02
  409. Xtimerout    equ     p2d_p21
  410. Xp2d_p20     equ     01
  411. Xtimerin     equ     p2d_p20
  412. X
  413. Xtcsr    equ     08      ; timer control & status
  414. X
  415. Xtcs_icf     equ     080     ; input capture flag
  416. Xtcs_ocf     equ     040     ; output capture flag
  417. Xtcs_tof     equ     020     ; timer overflow flag
  418. Xtcs_eici    equ     010     ; enable input capture interrupt
  419. Xtcs_eoci    equ     08      ; enable output capture flag
  420. Xtcs_etoi    equ     04      ; enable timer overflow interrupt
  421. Xtcs_iedg    equ     02      ; input edge
  422. Xtcs_olvl    equ     01      ; output level
  423. X
  424. Xcounth  equ     09      ; timer counter msb
  425. Xcountl  equ     0a      ; timer counter lsb
  426. Xoutcmh  equ     0b      ; timer output compare msb
  427. Xoutcml  equ     0c      ; timer output compare lsb
  428. Xincaph  equ     0d      ; input capture msb
  429. Xincapl  equ     0e      ; input capture lsb
  430. Xrmcr    equ     010     ; SCI rate & mode control
  431. X
  432. Xrmc_cc1     equ     08
  433. Xrmc_cc0     equ     04
  434. Xrmc_cc      equ     0c      ; clock source and format
  435. Xrmc_ss1     equ     02
  436. Xrmc_ss0     equ     01
  437. Xrmc_ss      equ     03      ; clock speed select 0-3, hi-lo
  438. X
  439. Xtrcsr   equ     011     ; xmit/rcv control & status
  440. X
  441. Xtrc_rdf     equ     080     ; rcv data reg full
  442. Xtrc_ofe     equ     040     ; overrun or framing error
  443. Xtrc_tre     equ     020     ; xmit data reg empty
  444. Xtrc_rie     equ     010     ; rcv interrupt enable
  445. Xtrc_re      equ     08      ; receiver enable
  446. Xtrc_tie     equ     04      ; xmit interrupt enable
  447. Xtrc_te      equ     02      ; transmitter enable
  448. Xtrc_wu      equ     01      ; wakeup
  449. X
  450. Xscirdr  equ     012     ; SCI rcv data
  451. Xscitdr  equ     013     ; SCI xmit data
  452. Xramcr   equ     014     ; RAM control
  453. X
  454. Xram_sb      equ     080     ; stand-by power
  455. Xram_e       equ     040     ; internal RAM enabled
  456. X
  457. Xstintram equ    080
  458. Xenintram equ    0ff
  459. X
  460. X; interrupt vectors
  461. X
  462. Xvectors equ     0ff0
  463. Xscivec  equ     vectors+0
  464. Xtofvec  equ     vectors+02
  465. Xtocvec  equ     vectors+04
  466. Xticvec  equ     vectors+06
  467. Xrq1vec  equ     vectors+08
  468. Xswivec  equ     vectors+0a
  469. Xnmivec  equ     vectors+0c
  470. Xstartvec equ    vectors+0e
  471. @FUNKY STUFF~
  472. echo extracting - 6809_ops.h
  473. sed 's/^X//' > 6809_ops.h << '@FUNKY STUFF~'
  474. X#define BYTESPERLINE 5  /* # bytes per line on the listing */
  475. X
  476. X#define SIGNED YES
  477. X#define SWAPPED YES
  478. X#define RELATIVE YES
  479. X
  480. Xopdclass o_reg   = { 1, NO    , NO     , NO      , 0};
  481. Xopdclass o_smem  = { 8, NO    , NO     , NO      , 0};
  482. Xopdclass o_rmem  = { 8, SIGNED, NO     , RELATIVE, -2};
  483. Xopdclass o_mem   = {16, NO    , NO     , NO      , 0};
  484. Xopdclass o_off   = { 8, SIGNED, NO     , NO      , 0};
  485. Xopdclass o_data  = { 8, SIGNED, NO     , NO      , 0};
  486. Xopdclass o_data2 = {16, SIGNED, NO     , NO      , 0};
  487. Xopdclass o_cond  = { 4, NO    , NO     , NO      , 0};
  488. Xopdclass o_rsp   = { 4, NO    , NO     , NO      , 0};
  489. X
  490. Xinsclass i_reg   = {1, 1, &o_reg , &o_none, -4, 0};
  491. Xinsclass i_regp  = {1, 1, &o_reg , &o_none,  0, 0};
  492. Xinsclass i_rr    = {2, 2, &o_rsp , &o_rsp ,  4, 8};
  493. Xinsclass i_rimed = {2, 2, &o_reg , &o_data, -6, 8};
  494. Xinsclass i_rimd2 = {3, 2, &o_reg , &o_data2,-6, 16};
  495. Xinsclass i_rdir  = {2, 2, &o_reg , &o_smem, -6, 8};
  496. Xinsclass i_rx0   = {2, 2, &o_reg , &o_off , -6, 8};
  497. Xinsclass i_rx5   = {2, 2, &o_reg , &o_off , -6, 8};
  498. Xinsclass i_rx8   = {2, 2, &o_reg , &o_off , -6, 16};
  499. Xinsclass i_rx16  = {2, 2, &o_reg , &o_off , -6, 24};
  500. Xinsclass i_rxtd  = {3, 2, &o_reg , &o_mem , -6, 16};
  501. Xinsclass i_imed  = {2, 1, &o_data, &o_none,  8, 0};
  502. Xinsclass i_imd2  = {3, 1, &o_data2,&o_none, 16, 0};
  503. Xinsclass i_dir   = {2, 1, &o_smem, &o_none,  8, 0};
  504. Xinsclass i_x0    = {2, 1, &o_off , &o_none,  8, 0};
  505. Xinsclass i_x5    = {2, 1, &o_off , &o_none,  8, 0};
  506. Xinsclass i_x8    = {2, 1, &o_off , &o_none, 16, 0};
  507. Xinsclass i_x16   = {2, 1, &o_off , &o_none, 24, 0};
  508. Xinsclass i_xtd   = {3, 1, &o_mem , &o_none, 16, 0};
  509. Xinsclass i_imd22 = {4, 1, &o_data2,&o_none, 24, 0};
  510. Xinsclass i_dir2  = {3, 1, &o_smem, &o_none, 16, 0};
  511. Xinsclass i_x02   = {3, 1, &o_off , &o_none, 16, 0};
  512. Xinsclass i_x52   = {3, 1, &o_off , &o_none, 16, 0};
  513. Xinsclass i_x82   = {3, 1, &o_off , &o_none, 24, 0};
  514. Xinsclass i_x162  = {3, 1, &o_off , &o_none, 32, 0};
  515. Xinsclass i_xtd2  = {4, 1, &o_mem , &o_none, 24, 0};
  516. Xinsclass i_rel   = {2, 1, &o_rmem, &o_none,  8, 0};
  517. Xinsclass i_cond  = {2, 2, &o_cond, &o_rmem,  0, 8};
  518. Xinsclass i_nopd2 = {2, 0, &o_none, &o_none,  0, 0};
  519. X
  520. Xbeginpattern c_cx
  521. Xchoicedef c_~1   = {"~1s" , "~1z"  , ~2, 0, 0xff, NO};
  522. Xchoicedef c_~1x  = {"~1x0", "~1xa" , ~2, 0, 0x00, NO};
  523. Xchoicedef c_~1xa = {"~1x5", "~1xb" , ~2, 0, 0x1f, NO};
  524. Xchoicedef c_~1xb = {"~1x8", "~1x16", ~2, 0, 0xff, NO};
  525. Xendpattern
  526. X
  527. Xpattern c_cx,adc,2
  528. Xpattern c_cx,add,2
  529. Xpattern c_cx,and,2
  530. Xpattern c_cx,bit,2
  531. Xpattern c_cx,cma,2
  532. Xpattern c_cx,eor,2
  533. Xpattern c_cx,lda,2
  534. Xpattern c_cx,ldr,2
  535. Xpattern c_cx,ora,2
  536. Xpattern c_cx,sbc,2
  537. Xpattern c_cx,sub,2
  538. Xpattern c_cx,addd,1
  539. Xpattern c_cx,ldd,1
  540. Xpattern c_cx,std,1
  541. Xpattern c_cx,sta,1
  542. Xpattern c_cx,str,1
  543. Xpattern c_cx,subd,1
  544. Xpattern c_cx,jsr,1
  545. Xpattern c_cx,cpx,1
  546. Xpattern c_cx,asl,1
  547. Xpattern c_cx,asr,1
  548. Xpattern c_cx,clr,1
  549. Xpattern c_cx,com,1
  550. Xpattern c_cx,dec,1
  551. Xpattern c_cx,inc,1
  552. Xpattern c_cx,lsl,1
  553. Xpattern c_cx,lsr,1
  554. Xpattern c_cx,neg,1
  555. Xpattern c_cx,rol,1
  556. Xpattern c_cx,ror,1
  557. Xpattern c_cx,tst,1
  558. Xpattern c_cx,jmp,1
  559. Xpattern c_cx,cmpd,1
  560. Xpattern c_cx,cmpy,1
  561. Xpattern c_cx,ldy,1
  562. Xpattern c_cx,sty,1
  563. Xpattern c_cx,lds,1
  564. Xpattern c_cx,sts,1
  565. Xpattern c_cx,cmpu,1
  566. Xpattern c_cx,cmps,1
  567. X
  568. Xbeginpattern x_mem
  569. X    "~1m"  , (insclass *)&c_~1,   0, choiceinstr,
  570. X    "~1"   , (insclass *)&c_~1x,  0, choiceinstr,
  571. X    "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr,
  572. X    "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr,
  573. X    "~1i"  , &i_rimed, 0x~2000000|0x80000000, geninstr,
  574. X    "~1s"  , &i_rdir , 0x~2000000|0x90000000, geninstr,
  575. X    "~1x0" , &i_rx0  , 0x~2000000|0xa0840000, geninstr,
  576. X    "~1x5" , &i_rx5  , 0x~2000000|0xa0000000, geninstr,
  577. X    "~1x8" , &i_rx8  , 0x~2000000|0xa0880000, geninstr,
  578. X    "~1x16", &i_rx16 , 0x~2000000|0xa0890000, geninstr,
  579. X    "~1z"  , &i_rxtd , 0x~2000000|0xb0000000, geninstr,
  580. Xendpattern
  581. X
  582. Xbeginpattern x_xreg
  583. X    "~1m"  , (insclass *)&c_~1,   0, choiceinstr,
  584. X    "~1"   , (insclass *)&c_~1x,  0, choiceinstr,
  585. X    "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr,
  586. X    "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr,
  587. X    "~1i"  , &i_rimd2, 0x~2000000|0x80000000, geninstr,
  588. X    "~1s"  , &i_rdir , 0x~2000000|0x90000000, geninstr,
  589. X    "~1x0" , &i_rx0  , 0x~2000000|0xa0840000, geninstr,
  590. X    "~1x5" , &i_rx5  , 0x~2000000|0xa0000000, geninstr,
  591. X    "~1x8" , &i_rx8  , 0x~2000000|0xa0880000, geninstr,
  592. X    "~1x16", &i_rx16 , 0x~2000000|0xa0890000, geninstr,
  593. X    "~1z"  , &i_rxtd , 0x~2000000|0xb0000000, geninstr,
  594. Xendpattern
  595. X
  596. Xbeginpattern x_dou
  597. X    "~1m"  , (insclass *)&c_~1  , 0, choiceinstr,
  598. X    "~1"   , (insclass *)&c_~1x , 0, choiceinstr,
  599. X    "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr,
  600. X    "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr,
  601. X    "~1i"  , &i_imd2 , 0x~2000000|0x80000000, geninstr,
  602. X    "~1s"  , &i_dir  , 0x~2000000|0x90000000, geninstr,
  603. X    "~1x0" , &i_x0   , 0x~2000000|0xa0840000, geninstr,
  604. X    "~1x5" , &i_x5   , 0x~2000000|0xa0000000, geninstr,
  605. X    "~1x8" , &i_x8   , 0x~2000000|0xa0880000, geninstr,
  606. X    "~1x16", &i_x16  , 0x~2000000|0xa0890000, geninstr,
  607. X    "~1z"  , &i_xtd  , 0x~2000000|0xb0000000, geninstr,
  608. Xendpattern
  609. X
  610. Xbeginpattern x_reg
  611. X    "~1m"  , (insclass *)&c_~1  , 0, choiceinstr,
  612. X    "~1"   , (insclass *)&c_~1x , 0, choiceinstr,
  613. X    "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr,
  614. X    "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr,
  615. X    "~1s"  , &i_dir  , 0x~2000000|0x00000000, geninstr,
  616. X    "~1a"  , &i_reg  , 0x~2000000|0x40000000, geninstr,
  617. X    "~1x0" , &i_x0   , 0x~2000000|0x60840000, geninstr,
  618. X    "~1x5" , &i_x5   , 0x~2000000|0x60000000, geninstr,
  619. X    "~1x8" , &i_x8   , 0x~2000000|0x60880000, geninstr,
  620. X    "~1x16", &i_x16  , 0x~2000000|0x60890000, geninstr,
  621. X    "~1z"  , &i_xtd  , 0x~2000000|0x70000000, geninstr,
  622. Xendpattern
  623. X
  624. Xbeginpattern x_reg2
  625. X    "~1m"  , (insclass *)&c_~1  , 0, choiceinstr,
  626. X    "~1"   , (insclass *)&c_~1x , 0, choiceinstr,
  627. X    "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr,
  628. X    "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr,
  629. X    "~1i"   , &i_imd22, 0x~20000|0x10800000, geninstr,
  630. X    "~1s"   , &i_dir2 , 0x~20000|0x10900000, geninstr,
  631. X    "~1x0"  , &i_x02  , 0x~20000|0x10a08400, geninstr,
  632. X    "~1x5"  , &i_x52  , 0x~20000|0x10a00000, geninstr,
  633. X    "~1x8"  , &i_x82  , 0x~20000|0x10a08800, geninstr,
  634. X    "~1x16" , &i_x162 , 0x~20000|0x10a08900, geninstr,
  635. X    "~1z"   , &i_xtd2 , 0x~20000|0x10b00000, geninstr,
  636. Xendpattern
  637. X
  638. Xopdef optab[] = {
  639. X    "abx"    , &i_noopd, 0x3a000000, geninstr,
  640. Xpattern x_mem,adc,9
  641. Xpattern x_mem,add,b
  642. Xpattern x_dou,addd,43
  643. Xpattern x_mem,and,4
  644. X    "andcc"  , &i_imed , 0x1c000000, geninstr,
  645. Xpattern x_reg,asl,8
  646. Xpattern x_reg,asr,7
  647. X    "bc"     , &i_cond , 0x20000000, geninstr,
  648. Xpattern x_mem,bit,5
  649. X    "bra"    , &i_rel  , 0x20000000, geninstr,
  650. X    "bsr"    , &i_rel  , 0x8d000000, geninstr,
  651. Xpattern x_reg,clr,f
  652. Xpattern x_mem,cma,1
  653. Xpattern x_reg2,cmpd,3
  654. Xpattern x_reg2,cmps,10c
  655. Xpattern x_reg2,cmpu,103
  656. Xpattern x_reg2,cmpy,c
  657. Xpattern x_reg,com,3
  658. Xpattern x_dou,cpx,c
  659. X    "cwai"   , &i_noopd, 0x3c000000, geninstr,
  660. X    "daa"    , &i_noopd, 0x19000000, geninstr,
  661. Xpattern x_reg,dec,a
  662. Xpattern x_mem,eor,8
  663. X    "exg"    , &i_rr   , 0x1e000000, geninstr,
  664. Xpattern x_reg,inc,c
  665. Xpattern x_reg,jmp,e
  666. Xpattern x_dou,jsr,d
  667. X    "lbra"   , &i_xtd  , 0x16000000, geninstr,
  668. X    "lbsr"   , &i_xtd  , 0x17000000, geninstr,
  669. Xpattern x_mem,lda,6
  670. Xpattern x_dou,ldd,4c
  671. Xpattern x_xreg,ldr,e
  672. Xpattern x_reg2,lds,43
  673. Xpattern x_reg2,ldy,e
  674. X    "leax"   , &i_xtd  , 0x30000000, geninstr,
  675. X    "leay"   , &i_xtd  , 0x31000000, geninstr,
  676. X    "leas"   , &i_xtd  , 0x32000000, geninstr,
  677. X    "leau"   , &i_xtd  , 0x33000000, geninstr,
  678. Xpattern x_reg,lsl,8
  679. Xpattern x_reg,lsr,4
  680. X    "mul"    , &i_noopd, 0x3d000000, geninstr,
  681. Xpattern x_reg,neg,0
  682. X    "nop"    , &i_noopd, 0x12000000, geninstr,
  683. Xpattern x_mem,ora,a
  684. X    "orcc"   , &i_imed , 0x1a000000, geninstr,
  685. X    "pshs"   , &i_noopd, 0x34000000, geninstr,
  686. X    "pshu"   , &i_noopd, 0x36000000, geninstr,
  687. X    "puls"   , &i_noopd, 0x35000000, geninstr,
  688. X    "pulu"   , &i_noopd, 0x37000000, geninstr,
  689. Xpattern x_reg,rol,9
  690. Xpattern x_reg,ror,6
  691. X    "rti"    , &i_noopd, 0x3b000000, geninstr,
  692. X    "rts"    , &i_noopd, 0x39000000, geninstr,
  693. Xpattern x_mem,sbc,2
  694. X    "sei"    , &i_noopd, 0x0f000000, geninstr,
  695. X    "sex"    , &i_rr   , 0x1d000000, geninstr,
  696. Xpattern x_mem,sta,7
  697. Xpattern x_dou,std,4d
  698. Xpattern x_xreg,str,f
  699. Xpattern x_reg2,sts,4f
  700. Xpattern x_reg2,sty,f
  701. Xpattern x_mem,sub,0
  702. Xpattern x_dou,subd,3
  703. X    "swi"    , &i_noopd, 0x3f000000, geninstr,
  704. X    "swi2"   , &i_nopd2, 0x10000000, geninstr,
  705. X    "swi3"   , &i_nopd2, 0x11000000, geninstr,
  706. X    "sync"   , &i_noopd, 0x13000000, geninstr,
  707. X    "tfr"    , &i_rr   , 0x1f000000, geninstr,
  708. Xpattern x_reg,tst,d
  709. X    ""       , &i_noopd, 0L, geninstr
  710. X};
  711. X
  712. Xsymbol predef[] = {
  713. X    {"ra" , 0x0, &o_reg , (segmnt *)0 },
  714. X    {"rb" , 0x1, &o_reg , (segmnt *)0 },
  715. X    {"rx" , 0x1, &o_reg , (segmnt *)0 },
  716. X    {"sp" , 0x0, &o_reg , (segmnt *)0 },
  717. X    {"nz" , 0x6, &o_cond, (segmnt *)0 },
  718. X    {"z"  , 0x7, &o_cond, (segmnt *)0 },
  719. X    {"ne" , 0x6, &o_cond, (segmnt *)0 },
  720. X    {"eq" , 0x7, &o_cond, (segmnt *)0 },
  721. X    {"nc" , 0x4, &o_cond, (segmnt *)0 },
  722. X    {"c"  , 0x5, &o_cond, (segmnt *)0 },
  723. X    {"gez", 0xc, &o_cond, (segmnt *)0 },
  724. X    {"gz" , 0xe, &o_cond, (segmnt *)0 },
  725. X    {"gt" , 0x2, &o_cond, (segmnt *)0 },
  726. X    {"lez", 0xf, &o_cond, (segmnt *)0 },
  727. X    {"le" , 0x3, &o_cond, (segmnt *)0 },
  728. X    {"lz" , 0xd, &o_cond, (segmnt *)0 },
  729. X    {"m"  , 0xb, &o_cond, (segmnt *)0 },
  730. X    {"ov" , 0x9, &o_cond, (segmnt *)0 },
  731. X    {"nov", 0x8, &o_cond, (segmnt *)0 },
  732. X    {"p"  , 0xa, &o_cond, (segmnt *)0 },
  733. X    {"ge" , 0x4, &o_cond, (segmnt *)0 },
  734. X    {"lt" , 0x5, &o_cond, (segmnt *)0 },
  735. X    {"D"  , 0x0, &o_rsp , (segmnt *)0 },
  736. X    {"X"  , 0x1, &o_rsp , (segmnt *)0 },
  737. X    {"Y"  , 0x2, &o_rsp , (segmnt *)0 },
  738. X    {"U"  , 0x3, &o_rsp , (segmnt *)0 },
  739. X    {"S"  , 0x4, &o_rsp , (segmnt *)0 },
  740. X    {"PC" , 0x5, &o_rsp , (segmnt *)0 },
  741. X    {"A"  , 0x8, &o_rsp , (segmnt *)0 },
  742. X    {"B"  , 0x9, &o_rsp , (segmnt *)0 },
  743. X    {"CC" , 0xa, &o_rsp , (segmnt *)0 },
  744. X    {"DPR", 0xb, &o_rsp , (segmnt *)0 },
  745. X    {""   , 0x0, &o_none, (segmnt *)0 },
  746. X};
  747. X
  748. X/* Partial decoding of the indexing occurs here. Differences in coding due
  749. X * to size of offset constants is ored in through extended opcode masks.
  750. X */
  751. X
  752. X#define has(x) index(str,'x')
  753. X
  754. Xvoid optional (str, obuf)
  755. X    char *str;
  756. X    Word *obuf;
  757. X{
  758. X    static struct {
  759. X        unsigned char value;
  760. X        char *str;
  761. X    } *xpt, stuff[] = {
  762. X        0x8c, "P"     , 0x9c, "*P"    , 0x9f, "*"     ,
  763. X        0x80, "+X"    , 0x81, "#X"    , 0x82, "-X"    ,
  764. X        0x83, "=X"    , 0x84, "X"     , 0x85, "BX"    ,
  765. X        0x86, "AX"    , 0x8b, "DX"    , 0x91, "#*X"   ,
  766. X        0x93, "*=X"   , 0x94, "*X"    , 0x95, "*BX"   ,
  767. X        0x96, "*AX"   , 0x9b, "*DX"   ,
  768. X        0xa0, "+Y"    , 0xa1, "#Y"    , 0xa2, "-Y"    ,
  769. X        0xa3, "*=Y"   , 0xa3, "=Y"    , 0xa4, "Y"     ,
  770. X        0xa5, "BY"    , 0xa6, "AY"    , 0xab, "DY"    ,
  771. X        0xb1, "#*Y"   , 0xb4, "*Y"    , 0xb5, "*BY"   ,
  772. X        0xb6, "*AY"   , 0xbb, "*DY"   ,
  773. X        0xc0, "+U"    , 0xc1, "#U"    , 0xc2, "-U"    ,
  774. X        0xc3, "=U"    , 0xc4, "U"     , 0xc5, "BU"    ,
  775. X        0xc6, "AU"    , 0xcb, "DU"    , 0xd1, "#*U"   ,
  776. X        0xd3, "*=U"   , 0xd4, "*U"    , 0xd5, "*BU"   ,
  777. X        0xd6, "*AU"   , 0xdb, "*DU"   ,
  778. X        0xe0, "+S"    , 0xe1, "#S"    , 0xe2, "-S"    ,
  779. X        0xe3, "=S"    , 0xe4, "S"     , 0xe5, "BS"    ,
  780. X        0xe6, "AS"    , 0xeb, "DS"    , 0xf1, "#*S"   ,
  781. X        0xf3, "*=S"   , 0xf4, "*S"    , 0xf5, "*BS"   ,
  782. X        0xf6, "*AS"   , 0xfb, "*DS"   ,
  783. X        0x00, ""      ,
  784. X    };
  785. X    char t, *pt;
  786. X
  787. Xstart:  for (pt = str; pt[1]; pt++) {   /* sort the bytes into order */
  788. X        if (*(pt-1) > *pt) {
  789. X            t = *(pt+1);
  790. X            *(pt+1) = *pt;
  791. X            *pt = t;
  792. X            goto start;
  793. X        }
  794. X    }
  795. X    for (xpt = stuff; xpt->value; xpt++) {   /* then look 'em up. */
  796. X        if (strcmp (xpt->str, str) == 0) {
  797. X            obuf[*obuf == 0x10 || *obuf == 0x11 ? 2 : 1] |=
  798. X                xpt->value;
  799. X            return;
  800. X        }
  801. X    }
  802. X    reporterr (E_BADOPT);
  803. X    return;
  804. X}
  805. @FUNKY STUFF~
  806. echo extracting - 8085_ops.h
  807. sed 's/^X//' > 8085_ops.h << '@FUNKY STUFF~'
  808. X#define BYTESPERLINE 3  /* # bytes per line on the listing */
  809. X
  810. X#define SIGNED YES
  811. X#define SWAPPED YES
  812. X#define RELATIVE YES
  813. X
  814. Xopdclass o_reg   = { 3, NO    , NO     , NO      , 0};
  815. Xopdclass o_rp    = { 2, NO    , NO     , NO      , 0};
  816. Xopdclass o_mem   = {16, NO    , SWAPPED, NO      , 0};
  817. Xopdclass o_data  = { 8, SIGNED, NO     , NO      , 0};
  818. Xopdclass o_data2 = {16, SIGNED, SWAPPED, NO      , 0};
  819. Xopdclass o_port  = { 8, NO    , NO     , NO      , 0};
  820. Xopdclass o_rupt  = { 3, NO    , NO     , NO      , 0};
  821. Xopdclass o_cond  = { 3, NO    , NO     , NO      , 0};
  822. X
  823. Xinsclass i_reg1  = {1, 1, &o_reg , &o_none, -3, 0};
  824. Xinsclass i_reg2  = {1, 1, &o_reg , &o_none,  0, 0};
  825. Xinsclass i_rp    = {1, 1, &o_rp  , &o_none, -4, 0};
  826. Xinsclass i_data  = {2, 1, &o_data, &o_none,  8, 0};
  827. Xinsclass i_rd    = {2, 2, &o_reg , &o_data, -3, 8};
  828. Xinsclass i_drd   = {3, 2, &o_reg , &o_data2,-3, 16};
  829. Xinsclass i_mem   = {3, 1, &o_mem , &o_none,  8, 0};
  830. Xinsclass i_rupt  = {1, 1, &o_rupt, &o_none, -3, 0};
  831. Xinsclass i_port  = {2, 1, &o_port, &o_none,  8, 0};
  832. Xinsclass i_rr    = {1, 2, &o_reg , &o_reg , -3, 0};
  833. Xinsclass i_cond  = {1, 1, &o_cond, &o_none, -3, 0};
  834. Xinsclass i_condm = {3, 2, &o_cond, &o_mem , -3, 16};
  835. X
  836. Xopdef optab[] = {
  837. X    "aci"    , &i_data , 0xce, geninstr,
  838. X    "adc"    , &i_reg2 , 0x88, geninstr,
  839. X    "adcm"   , &i_noopd, 0x8e, geninstr,
  840. X    "add"    , &i_reg2 , 0x80, geninstr,
  841. X    "addm"   , &i_noopd, 0x86, geninstr,
  842. X    "adi"    , &i_data , 0xc6, geninstr,
  843. X    "ana"    , &i_reg2 , 0xa0, geninstr,
  844. X    "anam"   , &i_noopd, 0xa6, geninstr,
  845. X    "ani"    , &i_data , 0xe6, geninstr,
  846. X    "call"   , &i_mem  , 0xcd, geninstr,
  847. X    "cc"     , &i_condm, 0xc4, geninstr,
  848. X    "cma"    , &i_noopd, 0x2f, geninstr,
  849. X    "cmc"    , &i_noopd, 0x3f, geninstr,
  850. X    "cmp"    , &i_reg2 , 0xb8, geninstr,
  851. X    "cmpm"   , &i_noopd, 0xbe, geninstr,
  852. X    "cpi"    , &i_data , 0xfe, geninstr,
  853. X    "daa"    , &i_noopd, 0x27, geninstr,
  854. X    "dad"    , &i_rp   , 0x09, geninstr,
  855. X    "dcr"    , &i_reg1 , 0x05, geninstr,
  856. X    "dcrm"   , &i_noopd, 0x35, geninstr,
  857. X    "dcx"    , &i_rp   , 0x0b, geninstr,
  858. X    "di"     , &i_noopd, 0xf3, geninstr,
  859. X    "ei"     , &i_noopd, 0xfd, geninstr,
  860. X    "hlt"    , &i_noopd, 0x76, geninstr,
  861. X    "in"     , &i_port , 0xdb, geninstr,
  862. X    "inr"    , &i_reg1 , 0x04, geninstr,
  863. X    "inrm"   , &i_noopd, 0x34, geninstr,
  864. X    "inx"    , &i_rp   , 0x03, geninstr,
  865. X    "jc"     , &i_condm, 0xc2, geninstr,
  866. X    "jmp"    , &i_mem  , 0xc3, geninstr,
  867. X    "lda"    , &i_mem  , 0x3a, geninstr,
  868. X    "ldax"   , &i_rp   , 0x0a, geninstr,
  869. X    "ldi"    , &i_rd   , 0x06, geninstr,
  870. X    "ldr"    , &i_reg1 , 0x46, geninstr,
  871. X    "lhld"   , &i_mem  , 0x2a, geninstr,
  872. X    "lxi"    , &i_drd  , 0x01, geninstr,
  873. X    "mrr"    , &i_rr   , 0x40, geninstr,
  874. X    "mvim"   , &i_data , 0x36, geninstr,
  875. X    "nop"    , &i_noopd, 0x00, geninstr,
  876. X    "ora"    , &i_reg2 , 0xb0, geninstr,
  877. X    "oram"   , &i_noopd, 0xb6, geninstr,
  878. X    "ori"    , &i_data , 0xf6, geninstr,
  879. X    "out"    , &i_port , 0xd3, geninstr,
  880. X    "pchl"   , &i_noopd, 0xe9, geninstr,
  881. X    "pop"    , &i_rp   , 0xc1, geninstr,
  882. X    "poppsw" , &i_noopd, 0xf1, geninstr,
  883. X    "push"   , &i_rp   , 0xc5, geninstr,
  884. X    "pushpsw", &i_noopd, 0xf5, geninstr,
  885. X    "ral"    , &i_noopd, 0x17, geninstr,
  886. X    "rar"    , &i_noopd, 0x1f, geninstr,
  887. X    "rc"     , &i_condm, 0xc0, geninstr,
  888. X    "ret"    , &i_noopd, 0xc9, geninstr,
  889. X    "rim"    , &i_noopd, 0x20, geninstr,
  890. X    "rlc"    , &i_noopd, 0x07, geninstr,
  891. X    "rrc"    , &i_noopd, 0x0f, geninstr,
  892. X    "rst"    , &i_rupt , 0xc7, geninstr,
  893. X    "sbb"    , &i_reg2 , 0x98, geninstr,
  894. X    "sbbm"   , &i_noopd, 0x9e, geninstr,
  895. X    "sbi"    , &i_data , 0xde, geninstr,
  896. X    "shld"   , &i_mem  , 0x22, geninstr,
  897. X    "sim"    , &i_noopd, 0x30, geninstr,
  898. X    "sphl"   , &i_noopd, 0xf9, geninstr,
  899. X    "sta"    , &i_mem  , 0x32, geninstr,
  900. X    "stax"   , &i_rp   , 0x02, geninstr,
  901. X    "stc"    , &i_noopd, 0x37, geninstr,
  902. X    "str"    , &i_reg2 , 0x70, geninstr,
  903. X    "sub"    , &i_reg2 , 0x90, geninstr,
  904. X    "subm"   , &i_noopd, 0x96, geninstr,
  905. X    "sui"    , &i_data , 0xd6, geninstr,
  906. X    "xchg"   , &i_noopd, 0xeb, geninstr,
  907. X    "xra"    , &i_reg2 , 0xa8, geninstr,
  908. X    "xram"   , &i_noopd, 0xae, geninstr,
  909. X    "xri"    , &i_data , 0xee, geninstr,
  910. X    "xthl"   , &i_noopd, 0xe3, geninstr,
  911. X    ""       , &i_noopd, 0x00, geninstr
  912. X};
  913. X
  914. Xsymbol predef[] = {
  915. X    {"ra"        ,      7, &o_reg , (segmnt *)0 },
  916. X    {"rb"        ,      0, &o_reg , (segmnt *)0 },
  917. X    {"rc"        ,      1, &o_reg , (segmnt *)0 },
  918. X    {"rd"        ,      2, &o_reg , (segmnt *)0 },
  919. X    {"re"        ,      3, &o_reg , (segmnt *)0 },
  920. X    {"rh"        ,      4, &o_reg , (segmnt *)0 },
  921. X    {"rl"        ,      5, &o_reg , (segmnt *)0 },
  922. X    {"rbc"       ,      0, &o_rp  , (segmnt *)0 },
  923. X    {"rde"       ,      1, &o_rp  , (segmnt *)0 },
  924. X    {"rhl"       ,      2, &o_rp  , (segmnt *)0 },
  925. X    {"sp"        ,      3, &o_rp  , (segmnt *)0 },
  926. X    {"rupt0"     ,      0, &o_rupt, (segmnt *)0 },
  927. X    {"rupt1"     ,      1, &o_rupt, (segmnt *)0 },
  928. X    {"rupt2"     ,      2, &o_rupt, (segmnt *)0 },
  929. X    {"rupt3"     ,      3, &o_rupt, (segmnt *)0 },
  930. X    {"rupt4"     ,      4, &o_rupt, (segmnt *)0 },
  931. X    {"rupt5"     ,      5, &o_rupt, (segmnt *)0 },
  932. X    {"rupt6"     ,      6, &o_rupt, (segmnt *)0 },
  933. X    {"rupt7"     ,      7, &o_rupt, (segmnt *)0 },
  934. X    {"nz"        ,      0, &o_cond, (segmnt *)0 },
  935. X    {"z"         ,      1, &o_cond, (segmnt *)0 },
  936. X    {"nc"        ,      2, &o_cond, (segmnt *)0 },
  937. X    {"c"         ,      3, &o_cond, (segmnt *)0 },
  938. X    {"po"        ,      4, &o_cond, (segmnt *)0 },
  939. X    {"pe"        ,      5, &o_cond, (segmnt *)0 },
  940. X    {"p"         ,      6, &o_cond, (segmnt *)0 },
  941. X    {"m"         ,      7, &o_cond, (segmnt *)0 },
  942. X    {"ramstart"  ,      0, &o_mem , (segmnt *)0 },
  943. X    {"ramend"    ,      0, &o_mem , (segmnt *)0 },
  944. X    {"romstart"  ,      0, &o_mem , (segmnt *)0 },
  945. X    {"romend"    ,      0, &o_mem , (segmnt *)0 },
  946. X    {""          ,      0, &o_none, (segmnt *)0 }
  947. X};
  948. X
  949. Xvoid optional () {}
  950. @FUNKY STUFF~
  951. echo extracting - asm.h
  952. sed 's/^X//' > asm.h << '@FUNKY STUFF~'
  953. X#include <ctype.h>
  954. X#include <stdio.h>
  955. X
  956. X#define YES 1
  957. X#define NO 0
  958. X
  959. X/* can't change these without changing all ops.h tables */
  960. X#define MAXOPDS 2                       /* max # of operands */
  961. X
  962. X#define NORMBYTE        /* normal bytes (Sun, etc); else bytes swapped (vax) */
  963. X#define LINEBUFLEN 100                  /* "card" input buffer size */
  964. X#define NSYMS 253                       /* symbol table size */
  965. X#define INCLSTACK 10                    /* max number of include nests */
  966. X#define MAXBYTPERINS 5                  /* maximum instruction size */
  967. X#define BYTPERLONG 4                    /* # bytes in long accumulator */
  968. X#define MAXBYTES (MAXBYTPERINS>BYTPERLONG?MAXBYTPERINS:BYTPERLONG)
  969. X#define MINBYTES (MAXBYTPERINS<BYTPERLONG?MAXBYTPERINS:BYTPERLONG)
  970. X#define LONGLEN 32                      /* length of acc in bits */
  971. X#define BINBUFLEN 250                   /* max bytes of data in output record */
  972. X
  973. X#define iswhite(c) (c==' '||c=='\t')
  974. X#define iseol(c) (c=='\0'||c==';'||c=='\n')
  975. X#define isdelim(c) (c==','||c==':'||iseol(c)||iswhite(c))
  976. X#define islabel(c) (isalnum(c)||c=='_')
  977. X
  978. X#define A_MAX 6         /* highest error code causing immediate abort */
  979. X#define E_PASS1 1       /* error codes */
  980. X#define E_PASS2 2
  981. X#define E_STOFLO 3
  982. X#define E_INPUT 4
  983. X#define E_INCL 5
  984. X#define E_INCLSYN 6
  985. X#define E_EXPR 7
  986. X#define E_UNDEF 8
  987. X#define E_ILLOP 9
  988. X#define E_MULT 10
  989. X#define E_NOPS 11
  990. X#define E_TOOBIG 12
  991. X#define E_NEG 13
  992. X#define E_SEG 14
  993. X#define E_BADOPT 15
  994. X#define E_NOEND 16
  995. X
  996. X#define NOOP -1         /* expression operators */
  997. X#define PLUS 0
  998. X#define MINUS 1
  999. X#define MULT 2
  1000. X#define DIV 3
  1001. X#define MOD 4
  1002. X#define OR 5
  1003. X#define AND 6
  1004. X#define EXOR 7
  1005. X#define SHLF 8
  1006. X#define SHRT 9
  1007. X#define OPSTRING "+-*/%|&^<>"   /* same order as definitions above */
  1008. X
  1009. Xtypedef unsigned char Word;     /* instruction word */
  1010. Xtypedef unsigned short DWord;   /* double word */
  1011. Xtypedef unsigned long Acc;      /* expression accumulator size */
  1012. Xtypedef short Long;             /* Long, that is, on an 8085: 16 bit data */
  1013. Xtypedef char  Short;            /* 8 bit data */
  1014. Xtypedef unsigned Long Memad;
  1015. Xtypedef char Flag;
  1016. X
  1017. Xtypedef union {
  1018. X    Word s[MAXBYTES];
  1019. X    Acc l;
  1020. X    long ls;
  1021. X} itemu;
  1022. X
  1023. Xtypedef struct opdclassitem {   /* This defines an instruction field */
  1024. X    int length;                     /* length in bits of field */
  1025. X    Flag signed;                    /* else unsigned */
  1026. X    Flag byteswapped;               /* data has bytes backwards */
  1027. X    Flag relative;                  /* field is relative to $ */
  1028. X    int offset;                     /* fixed value added to field */
  1029. X} opdclass;
  1030. X
  1031. Xtypedef struct insclassitem {   /* This defines an instruction type */
  1032. X    int length;                     /* instruction length in bytes */
  1033. X    int mopds;                      /* number of operands expected */
  1034. X    opdclass *type[MAXOPDS];        /* each operand's field type */
  1035. X    int offset[MAXOPDS];            /* each operand's bit offset,
  1036. X                       from right end of first byte */
  1037. X} insclass;
  1038. X
  1039. Xtypedef struct chcitem {        /* Defines the alternatives for instr choices */
  1040. X    char *rname;                    /* restrictive mnemonic */
  1041. X    char *nname;                    /* non-restrictive mnemonic */
  1042. X    int field;                      /* operand that is restricted */
  1043. X    int lorange, hirange;           /* range of restriction inclusive */
  1044. X    Flag relative;                  /* to current lc, else absolute value */
  1045. X} choicedef;
  1046. X
  1047. Xtypedef struct opdefitem {      /* Defines an instruction */
  1048. X    char *name;                     /* instruction mnemonic */
  1049. X    insclass *class;                /* instruction type */
  1050. X    Acc mask;                       /* mask for two bytes of instruction */
  1051. X    int (*action) ();               /* action routine for assembly */
  1052. X} opdef;
  1053. X
  1054. Xtypedef struct seg {            /* Defines a location counter segment */
  1055. X    Memad lc, start;                /* segment's lc and starting loc */
  1056. X    char *name;                     /* segment name */
  1057. X    struct seg *next;               /* pointer to next segment */
  1058. X} segmnt;
  1059. X
  1060. Xtypedef struct ltitem {         /* Defines a label table entry */
  1061. X    char *name;                     /* symbol name */
  1062. X    long value;                     /* symbol's current value */
  1063. X    opdclass *type;                 /* symbol type (defines fields it can fill) */
  1064. X    segmnt *segp;                   /* pointer to segment value's defined in */
  1065. X} symbol;
  1066. X
  1067. Xextern opdclass o_none;
  1068. Xextern insclass i_noopd;
  1069. Xextern opdef pseudotab[], optab[];
  1070. Xextern FILE *input[], *output, *list, *srcin, *binout;
  1071. Xextern char *name, *label, *op, *opd, *optop;
  1072. Xextern char buf[], linecopy[], *filename[];
  1073. Xextern int lineno[], ignerr, listlen, pseudolen, instrlen, end_found;
  1074. Xextern int errorstat, currinput, pass, liston, listing, binary, xref;
  1075. Xextern symbol predef[], *symtab;
  1076. Xextern Memad lc;
  1077. Xextern Word *dummy;
  1078. Xextern segmnt segmain, *seghd, *curseg, *exprseg;
  1079. X
  1080. Xextern char *malloc();
  1081. Xextern char *strcpy();
  1082. Xextern char *strcat();
  1083. Xextern char *mktemp();
  1084. Xextern char *index();
  1085. Xextern int geninstr();
  1086. Xextern int choiceinstr();
  1087. Xextern int do_bss();
  1088. Xextern int do_data();
  1089. Xextern int do_data2();
  1090. Xextern int do_end();
  1091. Xextern int do_equ();
  1092. Xextern int do_seg();
  1093. Xextern int do_set();
  1094. Xextern int do_org();
  1095. Xextern int do_string();
  1096. Xextern int do_incl();
  1097. Xextern int do_loff();
  1098. Xextern int do_lon();
  1099. Xextern void getargs ();
  1100. Xextern void init ();
  1101. Xextern void init2 ();
  1102. Xextern int process ();
  1103. Xextern void listit ();
  1104. Xextern void listint ();
  1105. Xextern void insert ();
  1106. Xextern void reporterr ();
  1107. Xextern int hash ();
  1108. Xextern long expr ();
  1109. Xextern int getop ();
  1110. Xextern long getval ();
  1111. Xextern int lookup ();
  1112. Xextern void putoutbin ();
  1113. Xextern void crossref ();
  1114. Xextern void sort ();
  1115. Xextern void putout ();
  1116. Xextern int xtod ();
  1117. Xextern char escape ();
  1118. Xextern void optional ();
  1119. X
  1120. @FUNKY STUFF~
  1121.  
  1122.