Annotation of nono/m680x0/cycles.txt, revision 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.