Annotation of nono/m680x0/cycles.txt, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.