|
|
1.1 ! root 1: ! m68k-iset.txt: the m68k instruction set ! 2: ! 3: ! $Id: m68k-iset.txt,v 1.4 2003/04/26 20:59:38 fredette Exp $ ! 4: ! 5: ! load some common EA categories: ! 6: eax-cat all ro yyyyyyyyyyyynnn ! 7: eax-cat data ro ynyyyyyyyyyynnn ! 8: eax-cat datalt rw ynyyyyyyynnnnnn ! example: andi pp 122 ! 9: eax-cat memalt rw nnyyyyyyynnnnnn ! 10: eax-cat control un nnynnyyyyyynnnn ! 11: ! 12: 0000 0000 0011 1100 ori_ccr #8 ! ori_ccr pp 258 ! 13: 0000 0000 0111 1100 ori_sr #16 ! ori_sr pp 480 ! 14: 0000 0000 ssxx xxxx or.s #s, xs/datalt ! ori pp 256 ! 15: ! 16: 0000 0010 0011 1100 andi_ccr #8 ! andi_ccr pp 123 ! 17: 0000 0010 0111 1100 andi_sr #16 ! andi_sr pp 455 ! 18: 0000 0010 ssxx xxxx and.s #s, xs/datalt ! andi pp 121 ! 19: ! 20: 0000 0100 ssxx xxxx sub.s #s, xs/datalt ! subi pp 282 ! 21: ! 22: .if m68020 ! 23: 0000 0110 1100 0ddd rtm %d.32 ! rtm pp 270 ! 24: 0000 0110 1100 1aaa rtm %a.32 ! rtm pp 270 ! 25: 0000 0110 11xx xxxx callm #8, x0/control ! callm pp 167 ! 26: .endif ! 27: ! 28: 0000 0110 ssxx xxxx add.s #s, xs/datalt ! addi pp 112 ! 29: ! 30: .if m68020 || m68030 ! 31: specop specop16 cmp2_chk2 ! 32: 0000 0ss0 11xx xxxx cmp2_chk2 X, x0/control ! chk2 pp 174, cmp2 pp 185 ! 33: specop specop16 cas ! 34: 0000 1SS0 11xx xxxx cas.S X, x0/memalt/un ! cas pp 169 ! 35: specop cas2 cas2 ! 36: 0000 1100 1111 1100 cas2_16 ! cas2 pp 169 ! 37: 0000 1110 1111 1100 cas2_32 ! cas2 pp 169 ! 38: .endif ! 39: ! 40: 0000 1010 0011 1100 eori_ccr #8 ! eori_ccr pp 207 ! 41: 0000 1010 0111 1100 eori_sr #16 ! eori_sr pp 463 ! 42: 0000 1010 ssxx xxxx eor.s #s, xs/datalt ! eori pp 205 ! 43: ! 44: ! cmpi addressing modes are unusual. per pp 183, immediate is ! 45: ! never allowed, and on the 000 and 010, PC-relative addressing ! 46: ! modes are not allowed: ! 47: .if m68000 || m68010 ! 48: eax-cat cmpi ro ynyyyyyyynnnnnn ! 49: .endif ! 50: .if m68020 || m68030 ! 51: eax-cat cmpi ro ynyyyyyyyyynnnn ! 52: .endif ! 53: 0000 1100 ssxx xxxx cmp.s #s, xs/cmpi ! cmpi pp 182 ! 54: ! 55: eax-cat bitro ro nnyyyyyyyyyynnn ! 56: eax-cat bitrw rw nnyyyyyyynnnnnn ! 57: 0000 1000 0000 0ddd btst32 #8, %d.32 ! btst pp 164 ! 58: 0000 1000 00xx xxxx btst8 #8, x8/bitro ! btst pp 164 ! 59: 0000 1000 0100 0ddd bchg32 #8, %d.32 ! bchg pp 130 ! 60: 0000 1000 01xx xxxx bchg8 #8, x8/bitrw ! bchg pp 130 ! 61: 0000 1000 1000 0ddd bclr32 #8, %d.32 ! bclr pp 133 ! 62: 0000 1000 10xx xxxx bclr8 #8, x8/bitrw ! bclr pp 133 ! 63: 0000 1000 1100 0ddd bset32 #8, %d.32 ! bset pp 159 ! 64: 0000 1000 11xx xxxx bset8 #8, x8/bitrw ! bset pp 159 ! 65: ! 66: .if m68010 || m68020 || m68030 ! 67: ! the moves specop handling forces the right EA cycles: ! 68: specop moves moves.s ! 69: 0000 1110 ssxx xxxx moves.s X, xs/memalt ! moves pp 477 ! 70: .endif ! 71: ! 72: 0000 ddd1 0000 0DDD btst32 %d.8, %D.32 ! btst pp 164 ! 73: 0000 ddd1 00xx xxxx btst8 %d.8, x8/bitro ! btst pp 164 ! 74: 0000 ddd1 0100 0DDD bchg32 %d.8, %D.32 ! bchg pp 130 ! 75: 0000 ddd1 01xx xxxx bchg8 %d.8, x8/bitrw ! bchg pp 130 ! 76: 0000 ddd1 1000 0DDD bclr32 %d.8, %D.32 ! bclr pp 133 ! 77: 0000 ddd1 10xx xxxx bclr8 %d.8, x8/bitrw ! bclr pp 133 ! 78: 0000 ddd1 1100 0DDD bset32 %d.8, %D.32 ! bset pp 159 ! 79: 0000 ddd1 11xx xxxx bset8 %d.8, x8/bitrw ! bset pp 159 ! 80: ! 81: ! we don't decode the data register field, to allow for better EA ! 82: ! submap reuse, and this is a rare function anyways: ! 83: 0000 ddd1 0000 1aaa movep_mr16 X, %a.32 ! movep pp 234 ! 84: 0000 ddd1 0100 1aaa movep_mr32 X, %a.32 ! movep pp 234 ! 85: 0000 ddd1 1000 1aaa movep_rm16 X, %a.32 ! movep pp 234 ! 86: 0000 ddd1 1100 1aaa movep_rm32 X, %a.32 ! movep pp 234 ! 87: ! 88: 0010 aaa0 01xx xxxx movea32 %a.32, x32/all ! movea pp 222 ! 89: 0011 aaa0 01xx xxxx movea16 %a.32, x16/all ! movea pp 222 ! 90: ! 91: 00SS yyyy yyxx xxxx move.S yS/datalt/wo, xS/all ! move pp 219 ! 92: ! 93: ! move_from_sr isn't privileged on the 68000: ! 94: .if m68000 ! 95: 0100 0000 11xx xxxx move_from_sr0 X, x16/datalt ! move_from_sr pp 228 ! 96: .endif ! 97: .if m68010 || m68020 || m68030 ! 98: 0100 0000 11xx xxxx move_from_sr X, x16/datalt/wo ! move_from_sr pp 470 ! 99: 0100 0010 11xx xxxx move_from_ccr X, x16/datalt/wo ! move_from_ccr pp 224 ! 100: .endif ! 101: ! 102: 0100 0000 ssxx xxxx negx.s X, xs/datalt ! negx pp 249 ! 103: ! 104: ! the EA is read before it is written on on the 68000, pp 177 ! 105: .if m68000 ! 106: 0100 0010 ssxx xxxx clr.s X, xs/datalt ! clr pp 176 ! 107: .endif ! 108: .if m68010 || m68020 || m68030 ! 109: 0100 0010 ssxx xxxx clr.s X, xs/datalt/wo ! clr pp 176 ! 110: .endif ! 111: ! 112: 0100 0100 11xx xxxx move_to_ccr X, x16/data ! move_to_ccr pp 226 ! 113: ! 114: 0100 0100 ssxx xxxx neg.s X, xs/datalt ! neg pp 246 ! 115: ! 116: 0100 0110 11xx xxxx move_to_sr X, x16/data ! move_to_sr pp 472 ! 117: ! 118: 0100 0110 ssxx xxxx not.s X, xs/datalt ! not pp 251 ! 119: ! 120: 0100 1000 1000 0ddd extw X, %d.16 ! ext pp 209 ! 121: 0100 1000 1100 0ddd extl X, %d.32 ! ext pp 209 ! 122: .if m68020 || m68030 ! 123: 0100 1001 1100 0ddd extbl X, %d.32 ! ext pp 209 ! 124: .endif ! 125: ! 126: .if m68020 || m68030 ! 127: 0100 1000 0000 1aaa link #32, %a.32 ! link pp 214 ! 128: .endif ! 129: ! 130: 0100 1000 00xx xxxx nbcd X, x8/datalt ! nbcd pp 244 ! 131: ! 132: 0100 1000 0100 0ddd swap X, %d.32 ! swap pp 288 ! 133: ! 134: .if m68010 || m68020 || m68030 ! 135: 0100 1000 0100 1??? bkpt ! bkpt pp 157 ! 136: .endif ! 137: ! 138: 0100 1000 01xx xxxx pea X, x0/control ! pea pp 262 ! 139: ! 140: specop illegal illegal ! 141: 0100 1010 1111 1100 illegal ! illegal pp 210 ! 142: ! 143: 0100 1010 1100 0ddd tas_r X, %d.8 ! tas pp 289 ! 144: 0100 1010 11xx xxxx tas X, x0/memalt/un ! tas pp 289 ! 145: ! 146: ! tst addressing modes are unusual. per pp 296, on the 68000 ! 147: ! and 68010, PC-relative addressing modes and immediates are not ! 148: ! allowed: ! 149: .if m68000 || m68010 ! 150: eax-cat tst ro ynyyyyyyynnnnnn ! 151: 0100 1010 ssxx xxxx tst.s X, xs/tst ! tst pp 295 ! 152: .endif ! 153: .if m68020 || m68030 ! 154: 0100 1010 ssxx xxxx tst.s X, xs/all ! tst pp 295 ! 155: .endif ! 156: ! 157: .if m68020 || m68030 ! 158: specop mulul mulul ! 159: specop divul divul ! 160: 0100 1100 00xx xxxx mulul X, x32/data ! mulsl pp 238, mulul pp 241 ! 161: 0100 1100 01xx xxxx divul X, x32/data ! divsl pp 195, divul pp 199 ! 162: .endif ! 163: ! 164: 0100 1110 0100 ???? trap ! trap pp 291 ! 165: ! 166: 0100 1110 0101 0aaa link #16S32, %a.32 ! link pp 214 ! 167: ! 168: 0100 1110 0101 1aaa unlk %a.32 ! unlk pp 297 ! 169: ! 170: 0100 1110 0110 ?aaa move_usp X, %a.32 ! move_usp pp 474 ! 171: ! 172: 0100 1110 0111 0000 reset ! reset pp 536 ! 173: ! 174: 0100 1110 0111 0001 nop ! nop pp 250 ! 175: ! 176: specop specop16 stop ! 177: 0100 1110 0111 0010 stop ! stop pp 538 ! 178: ! 179: 0100 1110 0111 0011 rte ! rte pp 537 ! 180: ! 181: .if m68010 || m68020 || m68030 ! 182: 0100 1110 0111 0100 rtd #16S32 ! rtd pp 269 ! 183: .endif ! 184: ! 185: 0100 1110 0111 0101 rts ! rts pp 272 ! 186: ! 187: 0100 1110 0111 0110 trapv ! trapv pp 294 ! 188: ! 189: 0100 1110 0111 0111 rtr ! rtr pp 271 ! 190: ! 191: .if m68010 || m68020 || m68030 ! 192: specop specop16 movec ! 193: 0100 1110 0111 101? movec ! movec pp 475 ! 194: .endif ! 195: ! 196: 0100 1110 10xx xxxx jsr X, x0/control ! jsr pp 212 ! 197: 0100 1110 11xx xxxx jmp X, x0/control ! jmp pp 211 ! 198: ! 199: eax-cat movem_rm un nnynyyyyynnnnnn ! 200: eax-cat movem_mr un nnyynyyyyyynnnn ! 201: specop specop16 movem_rm.s movem_mr.s ! 202: 0100 1000 10xx xxxx movem_rm16 X, x0/movem_rm ! movem pp 231 ! 203: 0100 1000 11xx xxxx movem_rm32 X, x0/movem_rm ! movem pp 231 ! 204: 0100 1100 10xx xxxx movem_mr16 X, x0/movem_mr ! movem pp 231 ! 205: 0100 1100 11xx xxxx movem_mr32 X, x0/movem_mr ! movem pp 231 ! 206: ! 207: 0100 aaa1 11xx xxxx lea %a.32, x0/control ! lea pp 213 ! 208: ! 209: 0100 ddd1 00xx xxxx chk32 %d.32, x32/data ! chk pp 173 ! 210: 0100 ddd1 10xx xxxx chk16 %d.16, x16/data ! chk pp 173 ! 211: ! 212: eax-cat alterable rw ynyyyyyyynnnnnn ! 213: 0101 qqq0 ss00 1aaa adda32 #q.32, %a.32 ! addq pp 114 ! 214: 0101 qqq0 ssxx xxxx add.s #q.s, xs/alterable ! addq pp 114 ! 215: 0101 qqq1 ss00 1aaa suba32 #q.32, %a.32 ! subq pp 284 ! 216: 0101 qqq1 ssxx xxxx sub.s #q.s, xs/alterable ! subq pp 284 ! 217: ! 218: 0101 cccc 1100 1ddd dbcc %d.16, #16 ! dbcc pp 193 ! 219: ! 220: .if m68020 || m68030 ! 221: 0101 cccc 1111 1010 trapcc #16 ! trapcc pp 292 ! 222: 0101 cccc 1111 1011 trapcc #32 ! trapcc pp 292 ! 223: 0101 cccc 1111 1100 trapcc ! trapcc pp 292 ! 224: .endif ! 225: ! 226: 0101 cccc 11xx xxxx scc X, x8/datalt ! scc pp 275 ! 227: ! 228: ! bcc pp 128, bra pp 158, bsr pp 162 ! 229: specop bcc bcc ! 230: 0110 cccc ???? ???? bcc ! 231: ! 232: 0111 ddd0 ???? ???? moveq32 X, %d.32 ! moveq pp 237 ! 233: ! 234: 1000 ddd0 11xx xxxx divu #d, x16/data ! divu pp 199 ! 235: ! 236: 1000 ???1 0000 ???? sbcd ! sbcd pp 273 ! 237: .if m68020 || m68030 ! 238: specop specop16 pack unpk ! 239: 1000 ???1 0100 ???? pack ! pack pp 259 ! 240: 1000 ???1 1000 ???? unpk ! unpk pp 298 ! 241: .endif ! 242: ! 243: 1000 ddd1 11xx xxxx divs #d, x16/data ! divs pp 195 ! 244: ! 245: 1000 ddd0 ssxx xxxx or.s xs/data, %d.s ! or pp 253 ! 246: 1000 ddd1 ssxx xxxx or.s %d.s, xs/memalt ! or pp 253 ! 247: ! 248: 1001 ???1 ss00 ???? subx.s ! subx pp 286 ! 249: ! 250: 1001 ddd0 ssxx xxxx sub.s xs/all, %d.s ! sub pp 277 ! 251: 1001 ddd1 ssxx xxxx sub.s %d.s, xs/memalt ! sub pp 277 ! 252: 1001 aaa0 11xx xxxx suba16 x16/all, %a.32 ! suba pp 280 ! 253: 1001 aaa1 11xx xxxx suba32 x32/all, %a.32 ! suba pp 280 ! 254: ! 255: 1011 ???1 ss00 1??? cmpm.s ! cmpm pp 184 ! 256: ! 257: 1011 ddd0 ssxx xxxx cmp.s xs/all, %d.s ! cmp pp 178 ! 258: 1011 ddd1 ssxx xxxx eor.s %d.s, xs/datalt ! eor pp 203 ! 259: 1011 aaa0 11xx xxxx cmpa16 x16/all, %a.32 ! cmpa pp 180 ! 260: 1011 aaa1 11xx xxxx cmp32 x32/all, %a.32 ! cmpa pp 180 ! 261: ! 262: 1100 ddd0 11xx xxxx mulu #d, x16/data ! mulu pp 241 ! 263: ! 264: 1100 ???1 0000 ???? abcd ! abcd pp 105 ! 265: ! 266: 1100 ddd1 11xx xxxx muls #d, x16/data ! muls pp 238 ! 267: ! 268: 1100 ddd1 0100 0DDD exg %d.32, %D.32 ! exg pp 208 ! 269: 1100 aaa1 0100 1AAA exg %a.32, %A.32 ! exg pp 208 ! 270: 1100 ddd1 1000 1aaa exg %d.32, %a.32 ! exg pp 208 ! 271: ! 272: 1100 ddd0 ssxx xxxx and.s xs/data, %d.s ! and pp 118 ! 273: 1100 ddd1 ssxx xxxx and.s %d.s, xs/memalt ! and pp 118 ! 274: ! 275: 1101 ???1 ss00 ???? addx.s ! addx pp 116 ! 276: ! 277: 1101 ddd0 ssxx xxxx add.s xs/all, %d.s ! add pp 107 ! 278: 1101 ddd1 ssxx xxxx add.s %d.s, xs/memalt ! add pp 107 ! 279: 1101 aaa0 11xx xxxx adda16 x16/all, %a.32 ! adda pp 110 ! 280: 1101 aaa1 11xx xxxx adda32 x32/all, %a.32 ! adda pp 110 ! 281: ! 282: 1110 0000 11xx xxxx asr16 #1.8, x16/memalt ! asr pp 124 ! 283: 1110 0001 11xx xxxx asl16 #1.8, x16/memalt ! asl pp 124 ! 284: ! 285: 1110 0010 11xx xxxx lsr16 #1.8, x16/memalt ! lsr pp 216 ! 286: 1110 0011 11xx xxxx lsl16 #1.8, x16/memalt ! lsl pp 216 ! 287: ! 288: 1110 0100 11xx xxxx roxr16 #1.8, x16/memalt ! roxr pp 263 ! 289: 1110 0101 11xx xxxx roxl16 #1.8, x16/memalt ! roxl pp 263 ! 290: ! 291: 1110 0110 11xx xxxx ror16 #1.8, x16/memalt ! ror pp 263 ! 292: 1110 0111 11xx xxxx rol16 #1.8, x16/memalt ! rol pp 263 ! 293: ! 294: .if m68020 || m68030 ! 295: eax-cat bitfieldro un nnynnyyyyyynnnn ! 296: eax-cat bitfieldrw un nnynnyyyynnnnnn ! 297: specop specop16 bftst bfextu bfchg bfexts bfclr bfffo bfset bfins ! 298: 1110 1000 1100 0ddd bftst ! bftst pp 154 ! 299: 1110 1000 11xx xxxx bftst X, x0/bitfieldro ! bftst pp 154 ! 300: 1110 1001 1100 0ddd bfextu ! bfextu pp 143 ! 301: 1110 1001 11xx xxxx bfextu X, x0/bitfieldro ! bfextu pp 143 ! 302: 1110 1010 1100 0ddd bfchg ! bfchg pp 137 ! 303: 1110 1010 11xx xxxx bfchg X, x0/bitfieldrw ! bfchg pp 137 ! 304: 1110 1011 1100 0ddd bfexts ! bfexts pp 141 ! 305: 1110 1011 11xx xxxx bfexts X, x0/bitfieldro ! bfexts pp 141 ! 306: 1110 1100 1100 0ddd bfclr ! bfclr pp 138 ! 307: 1110 1100 11xx xxxx bfclr X, x0/bitfieldrw ! bfclr pp 138 ! 308: 1110 1101 1100 0ddd bfffo ! bfffo pp 146 ! 309: 1110 1101 11xx xxxx bfffo X, x0/bitfieldro ! bfffo pp 146 ! 310: 1110 1110 1100 0ddd bfset ! bfset pp 152 ! 311: 1110 1110 11xx xxxx bfset X, x0/bitfieldrw ! bfset pp 152 ! 312: 1110 1111 1100 0ddd bfins ! bfins pp 149 ! 313: 1110 1111 11xx xxxx bfins X, x0/bitfieldrw ! bfins pp 149 ! 314: .endif ! 315: ! 316: 1110 qqq0 ss00 0ddd asr.s #q.8, %d.s ! asr pp 124 ! 317: 1110 DDD0 ss10 0ddd asr.s %D.8, %d.s ! asr pp 124 ! 318: 1110 qqq1 ss00 0ddd asl.s #q.8, %d.s ! asl pp 124 ! 319: 1110 DDD1 ss10 0ddd asl.s %D.8, %d.s ! asl pp 124 ! 320: ! 321: 1110 qqq0 ss00 1ddd lsr.s #q.8, %d.s ! lsr pp 216 ! 322: 1110 DDD0 ss10 1ddd lsr.s %D.8, %d.s ! lsr pp 216 ! 323: 1110 qqq1 ss00 1ddd lsl.s #q.8, %d.s ! lsl pp 216 ! 324: 1110 DDD1 ss10 1ddd lsl.s %D.8, %d.s ! lsl pp 216 ! 325: ! 326: 1110 qqq0 ss01 0ddd roxr.s #q.8, %d.s ! roxr pp 263 ! 327: 1110 DDD0 ss11 0ddd roxr.s %D.8, %d.s ! roxr pp 263 ! 328: 1110 qqq1 ss01 0ddd roxl.s #q.8, %d.s ! roxl pp 263 ! 329: 1110 DDD1 ss11 0ddd roxl.s %D.8, %d.s ! roxl pp 263 ! 330: ! 331: 1110 qqq0 ss01 1ddd ror.s #q.8, %d.s ! ror pp 263 ! 332: 1110 DDD0 ss11 1ddd ror.s %D.8, %d.s ! ror pp 263 ! 333: 1110 qqq1 ss01 1ddd rol.s #q.8, %d.s ! rol pp 263 ! 334: 1110 DDD1 ss11 1ddd rol.s %D.8, %d.s ! rol pp 263
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.