|
|
1.1 ! root 1: ; ! 2: ; nono ! 3: ; Copyright (C) 2025 nono project ! 4: ; Licensed under nono-license.txt ! 5: ; ! 6: ! 7: ; サイクル表 ! 8: ; ! 9: ; '.' は該当命令がない。 ! 10: ; '=' は左と同じ値。 ! 11: ; '?' は不明なところ。とりあえず左と同じにしておく。 ! 12: ; ! 13: ; 040 はかなり適当。 ! 14: ! 15: ; symbol 30CC NCC 040 ! 16: ! 17: ; 11.6.2 FEA ! 18: fea_anin 3 = 1 ! 19: fea_anpi 3 = 1 ! 20: fea_anpd 4 = 1 ! 21: fea_andi 4 = 1 ! 22: fea_absw 2 = 1 ! 23: fea_absl 4 5 1 ! 24: fea_immw 2 = 1 ! 25: fea_imml 4 = 1 ! 26: ! 27: ; 11.6.3 CEA ! 28: cea_anin 2 = 1 ! 29: cea_anpi 2 = 1 ! 30: cea_anpd 2 = 1 ! 31: cea_andi 2 = 1 ! 32: cea_absw 2 = 1 ! 33: cea_absl 4 = 1 ! 34: ! 35: cea_anix_brief 4 = 6 ; 簡易フォーマット ! 36: cea_anix_direct 6 = 7 ; 非メモリ間接 ! 37: cea_anix_indir 10 = 9 ; メモリ間接 (アウターディスプレースメントなし) ! 38: cea_anix_indir_od 12 13 10 ; メモリ間接 (アウターディスプレースメントあり) ! 39: cea_anix_bd2 2 3 0 ; ベースディスプレースメントが word ! 40: cea_anix_bd4 6 = 0 ; ベースディスプレースメントが long ! 41: ! 42: ; 11.6.6 MOVE Instruction ! 43: ; 040 は表からざっくり逆算。 ! 44: move_ea_dn 2 = 0 ! 45: movea_w 2 = 1 ; 040 は実際は Dn/#imm を除く ! 46: movea_l 2 = 0 ! 47: move_ea_anin 4 5 1 ; 030 は実際は ea が Rn なら (3, 4) ! 48: move_ea_anpi 4 5 1 ; 030 は実際は ea が Rn なら (3, 4) ! 49: move_ea_anpd 4 5 1 ; 030 は実際は ea が Rn なら (4, 4) ! 50: move_ea_andi 4 5 1 ! 51: move_ea_anix 2 3 1 ; 030 は表から逆算した基礎分。 ! 52: move_ea_absw 4 5 1 ! 53: move_ea_absl 6 7 1 ! 54: ! 55: ; 11.6.7 Special Purpose MOVE Instruction ! 56: ; MOVEM はコード中で加算している。 ! 57: ; 040 の MOVEP はケースごとに細分出来るがレア命令なので放置。 ! 58: exg 4 = 1 ! 59: movec_rc_rn 6 = 11 ! 60: movec_rn_rca 6 = 7 ! 61: movec_rn_rcb 12 = 7 ! 62: move_ccr_dn 4 = 2 ! 63: move_ccr_ea 4 5 2 ! 64: move_dn_ccr 4 = 2 ! 65: move_ea_ccr 4 = 2 ! 66: move_sr_dn 4 = 3 ! 67: move_sr_ea 4 5 3 ! 68: move_ea_sr 8 10 9 ! 69: movem_ea_list 8 8 3 ! 70: movem_ea_list_n 4 4 1 ! 71: movem_list_ea 4 4 2 ! 72: movem_list_ea_n 2 2 1 ! 73: movep 14 = 13 ! 74: moves_ea_dn 7 = 23 ! 75: moves_ea_an 7 = 28 ! 76: moves_rn_ea 5 6 13 ! 77: move_usp_an 4 = 3 ! 78: move_an_usp 4 = 7 ! 79: swap 4 = 2 ! 80: ! 81: ; 11.6.8 Arithmetical/Logical Instructions ! 82: add_ea_dn 2 = 1 ! 83: adda_w 4 = 2 ! 84: adda_l 2 = 2 ! 85: add_dn_ea 3 4 1 ! 86: and_ea_dn 2 = 1 ! 87: and_dn_ea 3 4 1 ! 88: eor_dn_dn 2 = 1 ! 89: eor_dn_ea 3 4 1 ! 90: or_ea_dn 2 = 1 ! 91: or_dn_ea 3 4 1 ! 92: sub_ea_dn 2 = 1 ! 93: sub_dn_ea 3 4 1 ! 94: suba_w 4 = 2 ! 95: suba_l 2 = 2 ! 96: cmp 2 = 1 ! 97: cmpa 4 = 1 ! 98: cmp2_max 20 = 13 ! 99: muls_w_max 28 = 16 ! 100: muls_l_max 44 = 20 ! 101: mulu_w_max 28 = 14 ! 102: mulu_l_max 44 = 20 ! 103: divs_w_max 56 = 27 ! 104: divs_l_max 90 = 44 ! 105: divu_w_max 44 = 27 ! 106: divu_l_max 78 = 44 ! 107: ! 108: ; 11.6.9 Immediate Arithmetical/Logical Instructions ! 109: moveq 2 = 1 ! 110: addq_rn 2 = 1 ! 111: addq_ea 3 4 1 ! 112: subq_rn 2 = 1 ! 113: subq_ea 3 4 1 ! 114: addi_dn 2 = 1 ! 115: addi_ea 3 4 1 ! 116: andi_dn 2 = 1 ! 117: andi_ea 3 4 1 ! 118: eori_dn 2 = 1 ! 119: eori_ea 3 4 1 ! 120: ori_dn 2 = 1 ! 121: ori_ea 3 4 1 ! 122: subi_dn 2 = 1 ! 123: subi_ea 3 4 1 ! 124: cmpi 2 = 1 ! 125: ! 126: ; 11.6.10 BCD and Extended Instructions ! 127: abcd_dn 4 = 3 ! 128: abcd_an 13 14 4 ! 129: sbcd_dn 4 = 3 ! 130: sbcd_an 13 14 4 ! 131: addx_dn 2 = 1 ! 132: addx_an 9 10 3 ! 133: subx_dn 2 = 1 ! 134: subx_an 9 10 3 ! 135: cmpm 8 = 3 ! 136: pack_dn 6 = 3 ! 137: pack_an 11 = 5 ! 138: unpk_dn 8 = 4 ! 139: unpk_an 11 = 6 ! 140: ! 141: ; 11.6.11 Single Operand Instructions ! 142: clr_dn 2 = 1 ! 143: clr_ea 3 4 1 ! 144: neg_dn 2 = 1 ! 145: neg_ea 3 4 1 ! 146: negx_dn 2 = 1 ! 147: negx_ea 3 4 1 ! 148: not_dn 2 = 1 ! 149: not_ea 3 4 1 ! 150: ext 4 = 2 ! 151: extb 4 = 1 ! 152: nbcd 6 = 3 ! 153: scc_dn 4 = 2 ! 154: scc_ea 5 = 2 ! 155: tas_dn 4 = 2 ! 156: tas_ea 12 = 26 ! 157: tst 2 = 1 ! 158: ! 159: ; 11.6.12 Shift/Rotate Instructions ! 160: lsd_imm_dn 4 = 2 ! 161: lsd_dn_dn_less 6 = 3 ! 162: lsd_dn_dn_over 8 = 3 ! 163: lsd_w 4 = 2 ! 164: asl_imm_dn 6 = 3 ! 165: asl_dn_dn 8 = 4 ! 166: asl_w 6 = 3 ! 167: asr_imm_dn 4 = 2 ! 168: asr_dn_dn_less 6 = 3 ! 169: asr_dn_dn_over 10 = 3 ! 170: asr_w 4 = 2 ! 171: rod_imm_dn 6 = 3 ! 172: rod_dn_dn 8 = 4 ! 173: rod_w 6 = 3 ! 174: roxd_dn 12 = 5 ! 175: roxd_w 4 = 2 ! 176: ! 177: ; 11.6.13 Bit Manipulation Instructions ! 178: btst_imm 4 = 1 ! 179: btst_dn 4 = 2 ! 180: bchg_imm 6 = 3 ! 181: bchg_dn 6 = 4 ! 182: bclr_imm 6 = 3 ! 183: bclr_dn 6 = 4 ! 184: bset_imm 6 = 3 ! 185: bset_dn 6 = 4 ! 186: ! 187: ; 11.6.14 Bit Field Manipulation Instructions ! 188: bftst_dn 8 = 4 ! 189: bftst_ea_less 10 = 9 ! 190: bftst_ea_over 14 = 19 ! 191: bfchg_dn 14 = 7 ! 192: bfchg_ea_less 14 = 10 ! 193: bfchg_ea_over 22 = 20 ! 194: bfclr_dn 14 = 7 ! 195: bfclr_ea_less 14 = 10 ! 196: bfclr_ea_over 22 = 20 ! 197: bfset_dn 14 = 7 ! 198: bfset_ea_less 14 = 10 ! 199: bfset_ea_over 22 = 20 ! 200: bfext_dn 10 = 5 ! 201: bfext_ea_less 12 = 9 ! 202: bfext_ea_over 18 = 19 ! 203: bfins_dn 12 = 6 ! 204: bfins_ea_less 12 = 9 ! 205: bfins_ea_over 18 = 19 ! 206: bfffo_dn 20 = 7 ! 207: bfffo_ea_less 22 = 11 ! 208: bfffo_ea_over 28 = 21 ! 209: ! 210: ; 11.6.15 Conditional Branch Instructions ! 211: ; Bcc (Taken) は bra を使っている。表に BRA がなさげ。 ! 212: bra 6 8 2 ! 213: bcc_b_not 4 = 3 ! 214: bcc_w_not 6 = 3 ! 215: bcc_l_not 8 = 3 ! 216: dbcc_jmp 6 8 3 ! 217: dbcc_done 10 13 4 ! 218: dbcc_nop 6 8 4 ! 219: ! 220: ; 11.6.16 Control Instructions ! 221: andi_sr 12 14 9 ! 222: eori_sr 12 14 9 ! 223: ori_sr 12 14 9 ! 224: andi_ccr 12 14 4 ! 225: eori_ccr 12 14 4 ! 226: ori_ccr 12 14 4 ! 227: bsr 6 9 2 ! 228: cas_eq 13 = 37 ! 229: cas_ne 11 = 37 ! 230: cas2_max 24 = 50 ! 231: cas2_true_inc 0 2 5 ! 232: chk 8 = 8 ! 233: chk_excep_max 28 30 8 ! 234: chk2 18 = 11 ! 235: chk2_excep_max 40 42 11 ! 236: jmp 4 6 3 ! 237: jsr 4 7 3 ! 238: lea 2 = 1 ! 239: link_w 4 5 3 ! 240: link_l 6 7 3 ! 241: nop 2 = 8 ! 242: pea 4 = 2 ! 243: rtd 10 12 6 ! 244: rtr 12 14 7 ! 245: rts 9 11 5 ! 246: unlk 5 = 2 ! 247: ! 248: ; 11.6.17 Exception-Related Instructions and Operations ! 249: ; Reset は長すぎて表現できないのでコードで実装。 ! 250: bkpt 9 = ? ! 251: ;Interrupt ! 252: ;RESET instruction ! 253: stop 8 = ? ! 254: ;TRACE ! 255: trap 18 20 16 ! 256: illegal 18 20 16 ! 257: aline 18 20 16 ! 258: fline 18 20 16 ! 259: excep_priv 18 20 16 ! 260: trapcc_excep 22 24 19 ! 261: trapcc 4 = 5 ! 262: trapcc_w_inc 2 = 19 ! 263: trapcc_l_inc 4 = 5 ! 264: trapv_excep 22 24 19 ! 265: trapv 4 = 5 ! 266: ! 267: ; 11.6.18 Save and Restore Operations ! 268: busfault 62 64 ? ! 269: rte_frame0 18 20 13 ! 270: rte_frame2 18 20 14 ! 271: ! 272: ; 11.7 MMU Instruction Timing ! 273: pmove_ea_tt 12 14 . ! 274: pmove_tt_ea 8 = . ! 275: pflusha 12 14 11 ! 276: ; PLOAD[RW] は実際には Dy と #imm なら (8, 10)、SFC と DFC なら (12, 14)。 ! 277: ; さらにテーブルサーチの時間も必要。 ! 278: pload 12 14 . ! 279: ; PFLUSH は実際には Dy と #imm なら (16, 18)、SFC と DFC なら (20, 22)。 ! 280: ; さらにテーブルサーチの時間も必要。 ! 281: pflush 20 22 . ! 282: ; 実際には、無効→有効が (38, 40)、有効→無効が (56, 58)、無効→無効が ! 283: ; (14, 16) だと思うが、今は場合分けしてない。 ! 284: pmove_ea_tc 38 40 . ! 285: pmove_tc_ea 4 5 . ! 286: ; 実際には、たぶん有効になる場合 (12, 14)、それ以外が (28, 30)。 ! 287: pmove_ea_xrp 28 30 . ! 288: pmove_xrp_ea 4 5 . ! 289: pmove_ea_mmusr 6 = . ! 290: pmove_mmusr_ea 4 5 . ! 291: ; ptest はコードで実装してある。 ! 292: ! 293: ; FPU ! 294: cea_fpu_anpi 6 = 1 ! 295: cea_fpu_anpd 6 = 1 ! 296: fpu_src_dn -5 = 0 ! 297: fmove 33 = 14 ! 298: fsqrt 107 = 105 ! 299: fabs 35 = 2 ! 300: fneg 35 = 2 ! 301: fdiv 103 = 39 ! 302: fadd 51 = 5 ! 303: fmul 71 = 7 ! 304: fsgldiv 69 = 39 ; 040UM に未記載 ! 305: fsglmul 59 = 7 ; 040UM に未記載 ! 306: fsub 51 = 5 ! 307: fcmp 33 = 5 ! 308: ftst 33 = 5 ! 309: fmove_i_fp_dn 98 98 12 ; .B/.W/.L ! 310: fmove_i_fp_mem 100 100 11 ! 311: fmove_s_fp_dn 78 78 4 ! 312: fmove_s_fp_mem 80 80 3 ! 313: fmove_d_fp_ea 86 86 3 ! 314: fmove_x_fp_ea 72 72 4 ! 315: fmovem_rn_ctl 28 31 3 ! 316: fmovem_mem_ctl 28 30 4 ! 317: fmovem_imm_ctl 25 29 4 ! 318: fmovem_ctl_rn 31 34 3 ! 319: fmovem_ctl_mem 27 30 4 ! 320: fmovem_ea2reg_dyn 49 52 15 ! 321: fmovem_ea2reg_sta 35 38 14 ! 322: fmovem_ea2reg_n 23 23 3 ! 323: fmovem_reg2ea_dyn 51 54 15 ! 324: fmovem_reg2ea_sta 37 40 14 ! 325: fmovem_reg2ea_anpd 6 6 0 ! 326: fmovem_reg2ea_n 25 25 3 ! 327: fscc_dn 18 21 6 ! 328: fscc_anp_z 21 24 6 ! 329: fscc_anp_nz 22 25 6 ! 330: fscc_mem 20 23 6 ! 331: fdbcc_true 20 24 8 ! 332: fdbcc_done 24 32 10 ! 333: fdbcc_jump 20 26 10 ! 334: ftrapcc_excep 39 47 ? ! 335: ftrapcc_nop 18 22 6 ! 336: ftrapccw_excep 41 45 ? ! 337: ftrapccw_nop 20 23 6 ! 338: ftrapccl_excep 43 52 ? ! 339: ftrapccl_nop 22 27 6 ! 340: fbcc_jump 20 23 7 ! 341: fbccw_nop 18 19 6 ! 342: fbccl_nop 18 21 6 ! 343: fsave_null 16 18 12 ! 344: fsave_idle 52 54 12 ! 345: frestore_null 21 22 13 ! 346: frestore_idle 57 58 13
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.