home *** CD-ROM | disk | FTP | other *** search
/ Dream 55 / Amiga_Dream_55.iso / RISCOS / MAGAZINE / NEWS / PCE021.ZIP / Pce021 / Src / cpu / s / binary < prev    next >
Text File  |  1998-03-08  |  5KB  |  263 lines

  1. ;    binary.s
  2. ;    --------
  3. ;    Binary opcodes
  4.  
  5.  
  6.     GET    hdr.common
  7.     GET    hdr.memory
  8.     GET    hdr.addressing
  9.  
  10.  
  11.     GBLS    data1
  12.     GBLS    data2
  13.     GBLS    byte
  14.     GBLS    address
  15.  
  16.  
  17. ;    Update the Hu6280's N and Z flags from the ARM's N and Z flags
  18.     MACRO
  19.     update_flags
  20.     bic    r_p, r_p, #N_FLAG + Z_FLAG
  21.     orreq    r_p, r_p, #Z_FLAG
  22.     orrmi    r_p, r_p, #N_FLAG
  23.     MEND
  24.  
  25. ;    AND two bytes
  26.     MACRO
  27.     m_and    $and_reg
  28.     ands    r_a, r_a, $and_reg
  29.     update_flags
  30.     MEND
  31. ;    EOR two bytes
  32.     MACRO
  33.     m_eor    $eor_reg
  34.     eors    r_a, r_a, $eor_reg
  35.     update_flags
  36.     MEND
  37. ;    OR two bytes
  38.     MACRO
  39.     m_ora    $ora_reg
  40.     orrs    r_a, r_a, $ora_reg
  41.     update_flags
  42.     MEND
  43.  
  44. ;    Arithmetic shift left
  45.     MACRO
  46.     m_asl    $asl_reg
  47.     bic    r_p, r_p, #N_FLAG + Z_FLAG + C_FLAG
  48.     movs    $asl_reg, $asl_reg, lsl #1
  49.     orrcs    r_p, r_p, #C_FLAG
  50.     orreq    r_p, r_p, #Z_FLAG
  51.     orrmi    r_p, r_p, #N_FLAG
  52.     MEND
  53. ;    Logical shift right
  54.     MACRO
  55.     m_lsr    $lsr_reg
  56.     bic    r_p, r_p, #N_FLAG + Z_FLAG + C_FLAG
  57.     movs    $lsr_reg, $lsr_reg, lsr #25
  58.     mov    $lsr_reg, $lsr_reg, lsl #24
  59.     orrcs    r_p, r_p, #C_FLAG
  60.     orreq    r_p, r_p, #Z_FLAG
  61.     MEND
  62. ;    Rotate left
  63.     MACRO
  64.     m_rol    $rol_reg
  65.     tst    r_p, #C_FLAG
  66.     orrne    $rol_reg, $rol_reg, #1 << 23
  67.     movs    $rol_reg, $rol_reg, lsl #1
  68.     bic    r_p, r_p, #N_FLAG + Z_FLAG + C_FLAG
  69.     orrcs    r_p, r_p, #C_FLAG
  70.     orreq    r_p, r_p, #Z_FLAG
  71.     orrmi    r_p, r_p, #N_FLAG
  72.     MEND
  73. ;    Rotate right
  74.     MACRO
  75.     m_ror    $ror_reg
  76.     movs    $ror_reg, $ror_reg, lsr #25
  77.     orr    $ror_reg, $ror_reg, r_p, lsl #7
  78.     bic    r_p, r_p, #N_FLAG + Z_FLAG + C_FLAG
  79.     orrcs    r_p, r_p, #C_FLAG
  80.     movs    $ror_reg, $ror_reg, lsl #24
  81.     orreq    r_p, r_p, #Z_FLAG
  82.     orrmi    r_p, r_p, #N_FLAG
  83.     MEND
  84.  
  85. ;    Test memory bits against accumulator
  86.     MACRO
  87.     m_bit    $bit_reg
  88.     NEW    data1
  89.     bic    r_p, r_p, #N_FLAG + V_FLAG + Z_FLAG
  90.     tst    r_a, $bit_reg
  91.     orreq    r_p, r_p, #Z_FLAG
  92.     and    $data1, $bit_reg, #(N_FLAG + V_FLAG) << 24
  93.     orr    r_p, r_p, $data1, lsr #24
  94.     DELETE    data1
  95.     MEND
  96.  
  97. ;    Reset memory bit
  98.     MACRO
  99.     m_rmbi    $rmbi_bit, $rmbi_byte
  100.     bic    $rmbi_byte, $rmbi_byte, #(1 << $rmbi_bit) << 24
  101.     MEND
  102.  
  103. ;    Set memory bit
  104.     MACRO
  105.     m_smbi    $smbi_bit, $smbi_byte
  106.     orr    $smbi_byte, $smbi_byte, #(1 << $smbi_bit) << 24
  107.     MEND
  108.  
  109. ;    Test and set memory bits against accumulator
  110.     MACRO
  111.     m_tsb    $tsb_reg
  112.     NEW    data1
  113.     bic    r_p, r_p, #N_FLAG + V_FLAG + Z_FLAG
  114.     and    $data1, $tsb_reg, #(N_FLAG + V_FLAG) << 24
  115.     orrs    $tsb_reg, $tsb_reg, r_a
  116.     orreq    r_p, r_p, #Z_FLAG
  117.     orr    r_p, r_p, $data1, lsr #24
  118.     DELETE    data1
  119.     MEND
  120. ;    Test and reset memory bits against accumulator
  121.     MACRO
  122.     m_trb    $trb_reg
  123.     NEW    data1
  124.     bic    r_p, r_p, #N_FLAG + V_FLAG + Z_FLAG
  125.     and    $data1, $trb_reg, #(N_FLAG + V_FLAG) << 24
  126.     bics    $trb_reg, $trb_reg, r_a
  127.     orreq    r_p, r_p, #Z_FLAG
  128.     orr    r_p, r_p, $data1, lsr #24
  129.     DELETE    data1
  130.     MEND
  131. ;    Test and reset memory bits
  132.     MACRO
  133.     m_tst    $mode
  134.     NEW    data1
  135.     mr_im    $data1
  136.     NEW    data2
  137.     mr_$mode $data2
  138.     bic    r_p, r_p, #N_FLAG + V_FLAG + Z_FLAG
  139.     ands    $data2, $data2, $data1
  140.     orreq    r_p, r_p, #Z_FLAG
  141.     and    $data2, $data2, #(N_FLAG + V_FLAG) << 24
  142.     orr    r_p, r_p, $data2, lsr #24
  143.     DELETE    data1
  144.     DELETE    data2
  145.     MEND
  146.  
  147.  
  148.     AREA    |cpu$$opcodes|, CODE, READONLY
  149.  
  150.  
  151.     IMPORT    Read_Register
  152.     IMPORT    Write_Register
  153.     IMPORT    Next_Opcode
  154.  
  155.  
  156.     OPCODE_R and, im, m_and
  157.     OPCODE_R and, zp, m_and
  158.     OPCODE_R and, zx, m_and
  159.     OPCODE_R and, in, m_and
  160.     OPCODE_R and, ix, m_and
  161.     OPCODE_R and, iy, m_and
  162.     OPCODE_R and, ab, m_and
  163.     OPCODE_R and, ax, m_and
  164.     OPCODE_R and, ay, m_and
  165.  
  166.     OPCODE_RW asl, zp, m_asl
  167.     OPCODE_RW asl, zx, m_asl
  168.     OPCODE_RW asl, ab, m_asl
  169.     OPCODE_RW asl, ax, m_asl
  170.     DEF_OPCODE asl_rg
  171.     m_asl    r_a
  172.     END_OPCODE
  173.  
  174.     OPCODE_R bit, im, m_bit
  175.     OPCODE_R bit, zp, m_bit
  176.     OPCODE_R bit, zx, m_bit
  177.     OPCODE_R bit, ab, m_bit
  178.     OPCODE_R bit, ax, m_bit
  179.  
  180.     OPCODE_R eor, im, m_eor
  181.     OPCODE_R eor, zp, m_eor
  182.     OPCODE_R eor, zx, m_eor
  183.     OPCODE_R eor, in, m_eor
  184.     OPCODE_R eor, ix, m_eor
  185.     OPCODE_R eor, iy, m_eor
  186.     OPCODE_R eor, ab, m_eor
  187.     OPCODE_R eor, ax, m_eor
  188.     OPCODE_R eor, ay, m_eor
  189.  
  190.     OPCODE_RW lsr, zp, m_lsr
  191.     OPCODE_RW lsr, zx, m_lsr
  192.     OPCODE_RW lsr, ab, m_lsr
  193.     OPCODE_RW lsr, ax, m_lsr
  194.     DEF_OPCODE lsr_rg
  195.     m_lsr    r_a
  196.     END_OPCODE
  197.  
  198.     OPCODE_R ora, im, m_ora
  199.     OPCODE_R ora, zp, m_ora
  200.     OPCODE_R ora, zx, m_ora
  201.     OPCODE_R ora, in, m_ora
  202.     OPCODE_R ora, ix, m_ora
  203.     OPCODE_R ora, iy, m_ora
  204.     OPCODE_R ora, ab, m_ora
  205.     OPCODE_R ora, ax, m_ora
  206.     OPCODE_R ora, ay, m_ora
  207.  
  208.     OPCODE_RW rol, zp, m_rol
  209.     OPCODE_RW rol, zx, m_rol
  210.     OPCODE_RW rol, ab, m_rol
  211.     OPCODE_RW rol, ax, m_rol
  212.     DEF_OPCODE rol_rg
  213.     m_rol    r_a
  214.     END_OPCODE
  215.  
  216.     OPCODE_RW ror, zp, m_ror
  217.     OPCODE_RW ror, zx, m_ror
  218.     OPCODE_RW ror, ab, m_ror
  219.     OPCODE_RW ror, ax, m_ror
  220.     DEF_OPCODE ror_rg
  221.     m_ror    r_a
  222.     END_OPCODE
  223.  
  224.     OPCODE_RW rmbi0, zp, "m_rmbi 0,"
  225.     OPCODE_RW rmbi1, zp, "m_rmbi 1,"
  226.     OPCODE_RW rmbi2, zp, "m_rmbi 2,"
  227.     OPCODE_RW rmbi3, zp, "m_rmbi 3,"
  228.     OPCODE_RW rmbi4, zp, "m_rmbi 4,"
  229.     OPCODE_RW rmbi5, zp, "m_rmbi 5,"
  230.     OPCODE_RW rmbi6, zp, "m_rmbi 6,"
  231.     OPCODE_RW rmbi7, zp, "m_rmbi 7,"
  232.  
  233.     OPCODE_RW smbi0, zp, "m_smbi 0,"
  234.     OPCODE_RW smbi1, zp, "m_smbi 1,"
  235.     OPCODE_RW smbi2, zp, "m_smbi 2,"
  236.     OPCODE_RW smbi3, zp, "m_smbi 3,"
  237.     OPCODE_RW smbi4, zp, "m_smbi 4,"
  238.     OPCODE_RW smbi5, zp, "m_smbi 5,"
  239.     OPCODE_RW smbi6, zp, "m_smbi 6,"
  240.     OPCODE_RW smbi7, zp, "m_smbi 7,"
  241.  
  242.     OPCODE_RW trb, zp, m_trb
  243.     OPCODE_RW trb, ab, m_trb
  244.  
  245.     OPCODE_RW tsb, zp, m_tsb
  246.     OPCODE_RW tsb, ab, m_tsb
  247.  
  248.     DEF_OPCODE tst_zp
  249.     m_tst    zp
  250.     END_OPCODE
  251.     DEF_OPCODE tst_zx
  252.     m_tst    zx
  253.     END_OPCODE
  254.     DEF_OPCODE tst_ab
  255.     m_tst    ab
  256.     END_OPCODE
  257.     DEF_OPCODE tst_ax
  258.     m_tst    ax
  259.     END_OPCODE
  260.  
  261.  
  262.     END
  263.