home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / new / misc / emu / z80 / prefix_offsets.i < prev    next >
Text File  |  1993-12-21  |  37KB  |  1,687 lines

  1. ** The offset tables and decoding routines for the prefixed Z80
  2. ** instructions
  3.  
  4.  
  5. ** See the file "cache.txt" for details on the decoding.
  6.  
  7.  
  8. ** All Z80 opcodes exactly follow Zaks' "Programming the Z80"
  9.  
  10. **    n  = 8-bit number
  11. **    nn = 16-bit number
  12. **    e  = 8-bit relative jump offset
  13. **    d  = 8-bit displacement
  14. **    pq = 16-bit address
  15. **    p  = 8-bit address
  16.  
  17. ** Label notation:    Underscore used for SPACE, comma and +
  18.  
  19. **            1 (one) used for ( and )
  20.  
  21. ** =====================================================================
  22.  
  23.     IFD VERBOSE
  24.     LIST
  25. ** Compiling the prefix_offsets.i file.
  26.     NOLIST
  27.     ENDC
  28.  
  29.  
  30. ** If a CB-prefix has been found:
  31.  
  32. CBdecode    cmp.w    #out_of_bounds,(PPC)    ;test 2nd word
  33.         bne.s    .not_oob
  34.         jmp    go_low_buf(InstrB)
  35. .not_oob
  36.         getRPC
  37.         getz    d7,d7    ;get second byte
  38.         and.w    #$00ff,d7
  39.         add.w    d7,d7
  40.         move.w    CBoffsets(PC,d7.w),d7
  41.         move.w    d7,-2(PPC)
  42.         move.w    #unchanged,(PPC)
  43.         jmp    (InstrB,d7.w)
  44.  
  45. CBoffsets
  46.     dc.w    Rlc_B-base
  47.     dc.w    Rlc_C-base
  48.     dc.w    Rlc_D-base
  49.     dc.w    Rlc_E-base
  50.     dc.w    Rlc_H-base
  51.     dc.w    Rlc_L-base
  52.     dc.w    Rlc_1HL1-base
  53.     dc.w    Rlc_A-base
  54.     dc.w    Rrc_B-base
  55.     dc.w    Rrc_C-base
  56.     dc.w    Rrc_D-base
  57.     dc.w    Rrc_E-base
  58.     dc.w    Rrc_H-base
  59.     dc.w    Rrc_L-base
  60.     dc.w    Rrc_1HL1-base
  61.     dc.w    Rrc_A-base
  62. .10    dc.w    Rl_B-base
  63.     dc.w    Rl_C-base
  64.     dc.w    Rl_D-base
  65.     dc.w    Rl_E-base
  66.     dc.w    Rl_H-base
  67.     dc.w    Rl_L-base
  68.     dc.w    Rl_1HL1-base
  69.     dc.w    Rl_A-base
  70.     dc.w    Rr_B-base
  71.     dc.w    Rr_C-base
  72.     dc.w    Rr_D-base
  73.     dc.w    Rr_E-base
  74.     dc.w    Rr_H-base
  75.     dc.w    Rr_L-base
  76.     dc.w    Rr_1HL1-base
  77.     dc.w    Rr_A-base
  78. .20    dc.w    Sla_B-base
  79.     dc.w    Sla_C-base
  80.     dc.w    Sla_D-base
  81.     dc.w    Sla_E-base
  82.     dc.w    Sla_H-base
  83.     dc.w    Sla_L-base
  84.     dc.w    Sla_1HL1-base
  85.     dc.w    Sla_A-base
  86.     dc.w    Sra_B-base
  87.     dc.w    Sra_C-base
  88.     dc.w    Sra_D-base
  89.     dc.w    Sra_E-base
  90.     dc.w    Sra_H-base
  91.     dc.w    Sra_L-base
  92.     dc.w    Sra_1HL1-base
  93.     dc.w    Sra_A-base
  94. .30    dc.w    Sll_B-base    ;undocumented
  95.     dc.w    Sll_C-base    ;undocumented
  96.     dc.w    Sll_D-base    ;undocumented
  97.     dc.w    Sll_E-base    ;undocumented
  98.     dc.w    Sll_H-base    ;undocumented
  99.     dc.w    Sll_L-base    ;undocumented
  100.     dc.w    Sll_1HL1-base    ;undocumented
  101.     dc.w    Sll_A-base    ;undocumented
  102.     dc.w    Srl_B-base
  103.     dc.w    Srl_C-base
  104.     dc.w    Srl_D-base
  105.     dc.w    Srl_E-base
  106.     dc.w    Srl_H-base
  107.     dc.w    Srl_L-base
  108.     dc.w    Srl_1HL1-base
  109.     dc.w    Srl_A-base
  110. .40    dc.w    Bit_0_B-base
  111.     dc.w    Bit_0_C-base
  112.     dc.w    Bit_0_D-base
  113.     dc.w    Bit_0_E-base
  114.     dc.w    Bit_0_H-base
  115.     dc.w    Bit_0_L-base
  116.     dc.w    Bit_0_1HL1-base
  117.     dc.w    Bit_0_A-base
  118.     dc.w    Bit_1_B-base
  119.     dc.w    Bit_1_C-base
  120.     dc.w    Bit_1_D-base
  121.     dc.w    Bit_1_E-base
  122.     dc.w    Bit_1_H-base
  123.     dc.w    Bit_1_L-base
  124.     dc.w    Bit_1_1HL1-base
  125.     dc.w    Bit_1_A-base
  126. .50    dc.w    Bit_2_B-base
  127.     dc.w    Bit_2_C-base
  128.     dc.w    Bit_2_D-base
  129.     dc.w    Bit_2_E-base
  130.     dc.w    Bit_2_H-base
  131.     dc.w    Bit_2_L-base
  132.     dc.w    Bit_2_1HL1-base
  133.     dc.w    Bit_2_A-base
  134.     dc.w    Bit_3_B-base
  135.     dc.w    Bit_3_C-base
  136.     dc.w    Bit_3_D-base
  137.     dc.w    Bit_3_E-base
  138.     dc.w    Bit_3_H-base
  139.     dc.w    Bit_3_L-base
  140.     dc.w    Bit_3_1HL1-base
  141.     dc.w    Bit_3_A-base
  142. .60    dc.w    Bit_4_B-base
  143.     dc.w    Bit_4_C-base
  144.     dc.w    Bit_4_D-base
  145.     dc.w    Bit_4_E-base
  146.     dc.w    Bit_4_H-base
  147.     dc.w    Bit_4_L-base
  148.     dc.w    Bit_4_1HL1-base
  149.     dc.w    Bit_4_A-base
  150.     dc.w    Bit_5_B-base
  151.     dc.w    Bit_5_C-base
  152.     dc.w    Bit_5_D-base
  153.     dc.w    Bit_5_E-base
  154.     dc.w    Bit_5_H-base
  155.     dc.w    Bit_5_L-base
  156.     dc.w    Bit_5_1HL1-base
  157.     dc.w    Bit_5_A-base
  158. .70    dc.w    Bit_6_B-base
  159.     dc.w    Bit_6_C-base
  160.     dc.w    Bit_6_D-base
  161.     dc.w    Bit_6_E-base
  162.     dc.w    Bit_6_H-base
  163.     dc.w    Bit_6_L-base
  164.     dc.w    Bit_6_1HL1-base
  165.     dc.w    Bit_6_A-base
  166.     dc.w    Bit_7_B-base
  167.     dc.w    Bit_7_C-base
  168.     dc.w    Bit_7_D-base
  169.     dc.w    Bit_7_E-base
  170.     dc.w    Bit_7_H-base
  171.     dc.w    Bit_7_L-base
  172.     dc.w    Bit_7_1HL1-base
  173.     dc.w    Bit_7_A-base
  174. .80    dc.w    Res_0_B-base
  175.     dc.w    Res_0_C-base
  176.     dc.w    Res_0_D-base
  177.     dc.w    Res_0_E-base
  178.     dc.w    Res_0_H-base
  179.     dc.w    Res_0_L-base
  180.     dc.w    Res_0_1HL1-base
  181.     dc.w    Res_0_A-base
  182.     dc.w    Res_1_B-base
  183.     dc.w    Res_1_C-base
  184.     dc.w    Res_1_D-base
  185.     dc.w    Res_1_E-base
  186.     dc.w    Res_1_H-base
  187.     dc.w    Res_1_L-base
  188.     dc.w    Res_1_1HL1-base
  189.     dc.w    Res_1_A-base
  190. .90    dc.w    Res_2_B-base
  191.     dc.w    Res_2_C-base
  192.     dc.w    Res_2_D-base
  193.     dc.w    Res_2_E-base
  194.     dc.w    Res_2_H-base
  195.     dc.w    Res_2_L-base
  196.     dc.w    Res_2_1HL1-base
  197.     dc.w    Res_2_A-base
  198.     dc.w    Res_3_B-base
  199.     dc.w    Res_3_C-base
  200.     dc.w    Res_3_D-base
  201.     dc.w    Res_3_E-base
  202.     dc.w    Res_3_H-base
  203.     dc.w    Res_3_L-base
  204.     dc.w    Res_3_1HL1-base
  205.     dc.w    Res_3_A-base
  206. .A0    dc.w    Res_4_B-base
  207.     dc.w    Res_4_C-base
  208.     dc.w    Res_4_D-base
  209.     dc.w    Res_4_E-base
  210.     dc.w    Res_4_H-base
  211.     dc.w    Res_4_L-base
  212.     dc.w    Res_4_1HL1-base
  213.     dc.w    Res_4_A-base
  214.     dc.w    Res_5_B-base
  215.     dc.w    Res_5_C-base
  216.     dc.w    Res_5_D-base
  217.     dc.w    Res_5_E-base
  218.     dc.w    Res_5_H-base
  219.     dc.w    Res_5_L-base
  220.     dc.w    Res_5_1HL1-base
  221.     dc.w    Res_5_A-base
  222. .B0    dc.w    Res_6_B-base
  223.     dc.w    Res_6_C-base
  224.     dc.w    Res_6_D-base
  225.     dc.w    Res_6_E-base
  226.     dc.w    Res_6_H-base
  227.     dc.w    Res_6_L-base
  228.     dc.w    Res_6_1HL1-base
  229.     dc.w    Res_6_A-base
  230.     dc.w    Res_7_B-base
  231.     dc.w    Res_7_C-base
  232.     dc.w    Res_7_D-base
  233.     dc.w    Res_7_E-base
  234.     dc.w    Res_7_H-base
  235.     dc.w    Res_7_L-base
  236.     dc.w    Res_7_1HL1-base
  237.     dc.w    Res_7_A-base
  238. .C0    dc.w    Set_0_B-base
  239.     dc.w    Set_0_C-base
  240.     dc.w    Set_0_D-base
  241.     dc.w    Set_0_E-base
  242.     dc.w    Set_0_H-base
  243.     dc.w    Set_0_L-base
  244.     dc.w    Set_0_1HL1-base
  245.     dc.w    Set_0_A-base
  246.     dc.w    Set_1_B-base
  247.     dc.w    Set_1_C-base
  248.     dc.w    Set_1_D-base
  249.     dc.w    Set_1_E-base
  250.     dc.w    Set_1_H-base
  251.     dc.w    Set_1_L-base
  252.     dc.w    Set_1_1HL1-base
  253.     dc.w    Set_1_A-base
  254. .D0    dc.w    Set_2_B-base
  255.     dc.w    Set_2_C-base
  256.     dc.w    Set_2_D-base
  257.     dc.w    Set_2_E-base
  258.     dc.w    Set_2_H-base
  259.     dc.w    Set_2_L-base
  260.     dc.w    Set_2_1HL1-base
  261.     dc.w    Set_2_A-base
  262.     dc.w    Set_3_B-base
  263.     dc.w    Set_3_C-base
  264.     dc.w    Set_3_D-base
  265.     dc.w    Set_3_E-base
  266.     dc.w    Set_3_H-base
  267.     dc.w    Set_3_L-base
  268.     dc.w    Set_3_1HL1-base
  269.     dc.w    Set_3_A-base
  270. .E0    dc.w    Set_4_B-base
  271.     dc.w    Set_4_C-base
  272.     dc.w    Set_4_D-base
  273.     dc.w    Set_4_E-base
  274.     dc.w    Set_4_H-base
  275.     dc.w    Set_4_L-base
  276.     dc.w    Set_4_1HL1-base
  277.     dc.w    Set_4_A-base
  278.     dc.w    Set_5_B-base
  279.     dc.w    Set_5_C-base
  280.     dc.w    Set_5_D-base
  281.     dc.w    Set_5_E-base
  282.     dc.w    Set_5_H-base
  283.     dc.w    Set_5_L-base
  284.     dc.w    Set_5_1HL1-base
  285.     dc.w    Set_5_A-base
  286. .F0    dc.w    Set_6_B-base
  287.     dc.w    Set_6_C-base
  288.     dc.w    Set_6_D-base
  289.     dc.w    Set_6_E-base
  290.     dc.w    Set_6_H-base
  291.     dc.w    Set_6_L-base
  292.     dc.w    Set_6_1HL1-base
  293.     dc.w    Set_6_A-base
  294.     dc.w    Set_7_B-base
  295.     dc.w    Set_7_C-base
  296.     dc.w    Set_7_D-base
  297.     dc.w    Set_7_E-base
  298.     dc.w    Set_7_H-base
  299.     dc.w    Set_7_L-base
  300.     dc.w    Set_7_1HL1-base
  301.     dc.w    Set_7_A-base
  302.  
  303. ** -------------------------------
  304.  
  305. ** If an ED-prefix has been found:
  306.  
  307. EDdecode    cmp.w    #out_of_bounds,(PPC)    ;test 2nd word
  308.         bne.s    .not_oob
  309.         jmp    go_low_buf(InstrB)
  310. .not_oob
  311.         getRPC
  312.         getz    d7,d7    ;get 2nd byte
  313.         and.w    #$00ff,d7
  314.         add.w    d7,d7
  315.         move.w    EDoffsets(PC,d7.w),d7
  316.         move.w    d7,-2(PPC)
  317.         move.w    #unchanged,(PPC)
  318.         jmp    (InstrB,d7.w)
  319.  
  320. EDoffsets
  321.     dc.w    undef
  322.     dc.w    undef
  323.     dc.w    undef
  324.     dc.w    undef
  325.     dc.w    undef
  326.     dc.w    undef
  327.     dc.w    undef
  328.     dc.w    undef
  329.     dc.w    undef
  330.     dc.w    undef
  331.     dc.w    undef
  332.     dc.w    undef
  333.     dc.w    undef
  334.     dc.w    undef
  335.     dc.w    undef
  336.     dc.w    undef
  337. .10    dc.w    undef
  338.     dc.w    undef
  339.     dc.w    undef
  340.     dc.w    undef
  341.     dc.w    undef
  342.     dc.w    undef
  343.     dc.w    undef
  344.     dc.w    undef
  345.     dc.w    undef
  346.     dc.w    undef
  347.     dc.w    undef
  348.     dc.w    undef
  349.     dc.w    undef
  350.     dc.w    undef
  351.     dc.w    undef
  352.     dc.w    undef
  353. .20    dc.w    undef
  354.     dc.w    undef
  355.     dc.w    undef
  356.     dc.w    undef
  357.     dc.w    undef
  358.     dc.w    undef
  359.     dc.w    undef
  360.     dc.w    undef
  361.     dc.w    undef
  362.     dc.w    undef
  363.     dc.w    undef
  364.     dc.w    undef
  365.     dc.w    undef
  366.     dc.w    undef
  367.     dc.w    undef
  368.     dc.w    undef
  369. .30    dc.w    undef
  370.     dc.w    undef
  371.     dc.w    undef
  372.     dc.w    undef
  373.     dc.w    undef
  374.     dc.w    undef
  375.     dc.w    undef
  376.     dc.w    undef
  377.     dc.w    undef
  378.     dc.w    undef
  379.     dc.w    undef
  380.     dc.w    undef
  381.     dc.w    undef
  382.     dc.w    undef
  383.     dc.w    undef
  384.     dc.w    undef
  385. .40    dc.w    In_B_1C1-base
  386.     dc.w    Out_1C1_B-base
  387.     dc.w    Sbc_HL_BC-base
  388.     dc.w    Ld_1nn1_BC-base
  389.     dc.w    Neg-base
  390.     dc.w    Retn-base
  391.     dc.w    Im_0-base
  392.     dc.w    Ld_I_A-base
  393.     dc.w    In_C_1C1-base
  394.     dc.w    Out_1C1_C-base
  395.     dc.w    Adc_HL_BC-base
  396.     dc.w    Ld_BC_1nn1-base
  397.     dc.w    undoc_neg    ;undocumented
  398.     dc.w    Reti-base
  399.     dc.w    undef
  400.     dc.w    Ld_R_A-base
  401. .50    dc.w    In_D_1C1-base
  402.     dc.w    Out_1C1_D-base
  403.     dc.w    Sbc_HL_DE-base
  404.     dc.w    Ld_1nn1_DE-base
  405.     dc.w    undoc_neg    ;undocumented
  406.     dc.w    undoc_retn    ;undocumented
  407.     dc.w    Im_1-base
  408.     dc.w    Ld_A_I-base
  409.     dc.w    In_E_1C1-base
  410.     dc.w    Out_1C1_E-base
  411.     dc.w    Adc_HL_DE-base
  412.     dc.w    Ld_DE_1nn1-base
  413.     dc.w    undoc_neg    ;undocumented
  414.     dc.w    undoc_retn    ;undocumented
  415.     dc.w    Im_2-base
  416.     dc.w    Ld_A_R-base
  417. .60    dc.w    In_H_1C1-base
  418.     dc.w    Out_1C1_H-base
  419.     dc.w    Sbc_HL_HL-base
  420.     dc.w    ED_Ld_1nn1_HL-base  ;"ED_" to separate from unprefixed
  421.     dc.w    undoc_neg    ;undocumented
  422.     dc.w    undoc_retn    ;undocumented
  423.     dc.w    undef
  424.     dc.w    Rrd-base
  425.     dc.w    In_L_1C1-base
  426.     dc.w    Out_1C1_L-base
  427.     dc.w    Adc_HL_HL-base
  428.     dc.w    ED_Ld_HL_1nn1-base  ;"ED_" to separate from unprefixed
  429.     dc.w    undoc_neg    ;undocumented
  430.     dc.w    undoc_retn    ;undocumented
  431.     dc.w    undef
  432.     dc.w    Rld-base
  433. .70    dc.w    In_xx_1C1-base    ;undocumented. Reads, but never stores.
  434.     dc.w    Out_1C1