home *** CD-ROM | disk | FTP | other *** search
/ Dream 55 / Amiga_Dream_55.iso / RISCOS / MAGAZINE / NEWS / PCE021.ZIP / Pce021 / Src / cpu / hdr / addressing next >
Text File  |  1997-09-20  |  5KB  |  276 lines

  1. ;    addressing.hdr
  2. ;    --------------
  3. ;    Macros for Hu6280 addressing modes
  4. ;    Requires macros from memory.hdr
  5.  
  6.  
  7.     GBLS    mr1
  8.     GBLS    mr2
  9.     GBLS    mw1
  10.     GBLS    mw2
  11.     GBLS    mm_adr
  12.     GBLS    mm_val
  13.  
  14.  
  15. ;    Reading from memory
  16. ;    -------------------
  17.  
  18. ;    immediate, eg LDA #&ff
  19.     MACRO
  20.     mr_im    $mr_data
  21.     read_byte_fast $mr_data
  22.     MEND
  23. ;    absolute, eg CMP &1900
  24.     MACRO
  25.     mr_ab    $mr_data
  26.     NEW    mr1
  27.     read_word_fast $mr1
  28.     IGNORE    mr1
  29.     read_byte $mr_data, $mr1
  30.     DELETE    mr1
  31.     MEND
  32. ;    zero page, eg CPY &80
  33.     MACRO
  34.     mr_zp    $mr_data
  35.     NEW    mr1
  36.     read_byte_fast $mr1
  37.     read_byte_zp $mr_data, $mr1
  38.     DELETE    mr1
  39.     MEND
  40. ;    absolute + X, eg LDA &2800, X
  41.     MACRO
  42.     mr_ax    $mr_data
  43.     NEW    mr1
  44.     read_word_fast $mr1
  45.     add    $mr1, $mr1, r_x, lsr #8
  46.     IGNORE    mr1
  47.     read_byte $mr_data, $mr1
  48.     DELETE    mr1
  49.     MEND
  50. ;    absolute + Y, eg ADC table, Y
  51.     MACRO
  52.     mr_ay    $mr_data
  53.     NEW    mr1
  54.     read_word_fast $mr1
  55.     add    $mr1, $mr1, r_y, lsr #8
  56.     IGNORE    mr1
  57.     read_byte $mr_data, $mr1
  58.     DELETE    mr1
  59.     MEND
  60. ;    zero page + X, eg LSR &80, X
  61.     MACRO
  62.     mr_zx    $mr_data
  63.     NEW    mr1
  64.     read_byte_fast $mr1
  65.     add    $mr1, $mr1, r_x
  66.     read_byte_zp $mr_data, $mr1
  67.     DELETE    mr1
  68.     MEND
  69. ;    zero page + Y, eg LDX &72, Y
  70. ;    this is a special case that applies to LDX only
  71.     MACRO
  72.     mr_zy    $mr_data
  73.     NEW    mr1
  74.     read_byte_fast $mr1
  75.     add    $mr1, $mr1, r_y
  76.     read_byte_zp $mr_data, $mr1
  77.     DELETE    mr1
  78.     MEND
  79. ;    indirect addressing, eg LDA (&80)
  80.     MACRO
  81.     mr_in    $mr_data
  82.     NEW    mr1
  83.     read_byte_fast $mr1
  84.     NEW    mr2
  85.     read_word_zp $mr2, $mr1
  86.     DELETE    mr1
  87.     IGNORE    mr2
  88.     read_byte $mr_data, $mr2
  89.     DELETE    mr2
  90.     MEND
  91. ;    pre-indexed indirect addressing, eg LDA (&80, X)
  92.     MACRO
  93.     mr_ix    $mr_data
  94.     NEW    mr1
  95.     read_byte_fast $mr1
  96.     add    $mr1, $mr1, r_x
  97.     NEW    mr2
  98.     read_word_zp $mr2, $mr1
  99.     DELETE    mr1
  100.     IGNORE    mr2
  101.     read_byte $mr_data, $mr2
  102.     DELETE    mr2
  103.     MEND
  104. ;    post-indexed indirect addressing, eg LDA (&80, Y)
  105.     MACRO
  106.     mr_iy    $mr_data
  107.     NEW    mr1
  108.     read_byte_fast $mr1
  109.     NEW    mr2
  110.     read_word_zp $mr2, $mr1
  111.     DELETE    mr1
  112.     add    $mr2, $mr2, r_y, lsr #8
  113.     IGNORE    mr2
  114.     read_byte $mr_data, $mr2
  115.     DELETE    mr2
  116.     MEND
  117.  
  118.  
  119. ;    Writing to memory
  120. ;    -----------------
  121.  
  122. ;    absolute, eg STA &1900
  123.     MACRO
  124.     mw_ab    $mw_data
  125.     NEW    mw1
  126.     read_word_fast $mw1
  127.     IGNORE    mw1
  128.     write_byte $mw_data, $mw1
  129.     DELETE    mw1
  130.     MEND
  131. ;    zero page, eg ASL &81
  132.     MACRO
  133.     mw_zp    $mw_data
  134.     NEW    mw1
  135.     read_byte_fast $mw1
  136.     write_byte_zp $mw_data, $mw1
  137.     DELETE    mw1
  138.     MEND
  139. ;    absolute + X, eg STA &2800, X
  140.     MACRO
  141.     mw_ax    $mw_data
  142.     NEW    mw1
  143.     read_word_fast $mw1
  144.     add    $mw1, $mw1, r_x, lsr #8
  145.     IGNORE    mw1
  146.     write_byte $mw_data, $mw1
  147.     DELETE    mw1
  148.     MEND
  149. ;    absolute + Y, eg ADC table, Y
  150.     MACRO
  151.     mw_ay    $mw_data
  152.     NEW    mw1
  153.     read_word_fast $mw1
  154.     add    $mw1, $mw1, r_y, lsr #8
  155.     IGNORE    mw1
  156.     write_byte $mw_data, $mw1
  157.     DELETE    mw1
  158.     MEND
  159. ;    zero page + X, eg LSR &80, X
  160.     MACRO
  161.     mw_zx    $mw_data
  162.     NEW    mw1
  163.     read_byte_fast $mw1
  164.     add    $mw1, $mw1, r_x
  165.     write_byte_zp $mw_data, $mw1
  166.     DELETE    mw1
  167.     MEND
  168. ;    zero page + Y, eg STX &72, Y
  169. ;    this is a special case that applies to STX only
  170.     MACRO
  171.     mw_zy    $mw_data
  172.     NEW    mw1
  173.     read_byte_fast $mw1
  174.     add    $mw1, $mw1, r_y
  175.     write_byte_zp $mw_data, $mw1
  176.     DELETE    mw1
  177.     MEND
  178. ;    indirect addressing, eg STA (&80)
  179.     MACRO
  180.     mw_in    $mw_data
  181.     NEW    mw1
  182.     read_byte_fast $mw1
  183.     NEW    mw2
  184.     read_word_zp $mw2, $mw1
  185.     DELETE    mw1
  186.     IGNORE    mw2
  187.     write_byte $mw_data, $mw2
  188.     DELETE    mw2
  189.     MEND
  190. ;    pre-indexed indirect addressing, eg STA (&80, X)
  191.     MACRO
  192.     mw_ix    $mw_data
  193.     NEW    mw1
  194.     read_byte_fast $mw1
  195.     add    $mw1, $mw1, r_x
  196.     NEW    mw2
  197.     read_word_zp $mw2, $mw1
  198.     DELETE    mw1
  199.     IGNORE    mw2
  200.     write_byte $mw_data, $mw2
  201.     DELETE    mw2
  202.     MEND
  203. ;    post-indexed indirect addressing, eg STA (&80), Y
  204.     MACRO
  205.     mw_iy    $mw_data
  206.     NEW    mw1
  207.     read_byte_fast $mw1
  208.     NEW    mw2
  209.     read_word_zp $mw2, $mw1
  210.     DELETE    mw1
  211.     add    $mw2, $mw2, r_y, lsr #8
  212.     IGNORE    mw2
  213.     write_byte $mw_data, $mw2
  214.     DELETE    mw2
  215.     MEND
  216.  
  217.  
  218. ;    Modifying memory
  219. ;    ----------------
  220.  
  221. ;    absolute
  222.     MACRO
  223.     mm_ab    $mm_opcode
  224.     NEW    mm_adr
  225.     NEW    mm_val
  226.     read_word_fast $mm_adr
  227.     read_byte $mm_val, $mm_adr
  228.     $mm_opcode $mm_val
  229.     write_byte $mm_val, $mm_adr
  230.     DELETE    mm_val
  231.     DELETE    mm_adr
  232.     MEND
  233. ;    zero page
  234.     MACRO
  235.     mm_zp    $mm_opcode
  236.     NEW    mm_adr
  237.     NEW    mm_val
  238.     read_byte_fast $mm_adr
  239.     read_byte_zp $mm_val, $mm_adr
  240.     $mm_opcode $mm_val
  241.     write_byte_zp $mm_val, $mm_adr
  242.     DELETE    mm_val
  243.     DELETE    mm_adr
  244.     MEND
  245. ;    absolute + X
  246.     MACRO
  247.     mm_ax    $mm_opcode
  248.     NEW    mm_adr
  249.     NEW    mm_val
  250.     read_word_fast $mm_adr
  251.     add    $mm_adr, $mm_adr, r_x, lsr #8
  252.     read_byte $mm_val, $mm_adr
  253.     $mm_opcode $mm_val
  254.     IGNORE    mm_val
  255.     IGNORE    mm_adr
  256.     write_byte $mm_val, $mm_adr
  257.     DELETE    mm_val
  258.     DELETE    mm_adr
  259.     MEND
  260. ;    zero page + X
  261.     MACRO
  262.     mm_zx    $mm_opcode
  263.     NEW    mm_adr
  264.     NEW    mm_val
  265.     read_byte_fast $mm_adr
  266.     add    $mm_adr, $mm_adr, r_x
  267.     read_byte_zp $mm_val, $mm_adr
  268.     $mm_opcode $mm_val
  269.     write_byte_zp $mm_val, $mm_adr
  270.     DELETE    mm_val
  271.     DELETE    mm_adr
  272.     MEND
  273.  
  274.  
  275.     END
  276.