?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1.     ORG $1000
  2.  
  3. ; first section is not part of relocation table
  4. 1:
  5.  
  6.     jr      1B
  7.     jr      nz,1B
  8.     jr      z,1B
  9.     jr      nc,1B
  10.     jr      c,1B
  11.  
  12.     jp      nz,1B
  13.     jp      1B
  14.     jp      z,1B
  15.     jp      nc,1B
  16.     jp      c,1B
  17.     jp      po,1B
  18.     jp      pe,1B
  19.     jp      p,1B
  20.     jp      m,1B
  21.  
  22.     call    nz,1B
  23.     call    z,1B
  24.     call    1B
  25.     call    nc,1B
  26.     call    c,1B
  27.     call    po,1B
  28.     call    pe,1B
  29.     call    p,1B
  30.     call    m,1B
  31.  
  32.     jr      1F
  33.     jr      nz,1F
  34.     jr      z,1F
  35.     jr      nc,1F
  36.     jr      c,1F
  37.  
  38.     jp      nz,1F
  39.     jp      1F
  40.     jp      z,1F
  41.     jp      nc,1F
  42.     jp      c,1F
  43.     jp      po,1F
  44.     jp      pe,1F
  45.     jp      p,1F
  46.     jp      m,1F
  47.  
  48.     call    nz,1F
  49.     call    z,1F
  50.     call    1F
  51.     call    nc,1F
  52.     call    c,1F
  53.     call    po,1F
  54.     call    pe,1F
  55.     call    p,1F
  56.     call    m,1F
  57.  
  58. 1:
  59.  
  60. ; second section does test relocation
  61.     RELOCATE_START
  62.  
  63.     ASSERT 2 * relocate_count == relocate_size
  64.     ASSERT 36 == relocate_count
  65.     dw      relocate_count
  66.     dw      relocate_size
  67.  
  68. 1:                              ; usage of this label should trigger relocation
  69.     ; relative jumps don't need relocation
  70.     jr      1B
  71.     jr      nz,1B
  72.     jr      z,1B
  73.     jr      nc,1B
  74.     jr      c,1B
  75.     ; absolute jumps need relocation
  76.     jp      nz,1B
  77.     jp      1B
  78.     jp      z,1B
  79.     jp      nc,1B
  80.     jp      c,1B
  81.     jp      po,1B
  82.     jp      pe,1B
  83.     jp      p,1B
  84.     jp      m,1B
  85.     ; calls need relocation
  86.     call    nz,1B
  87.     call    z,1B
  88.     call    1B
  89.     call    nc,1B
  90.     call    c,1B
  91.     call    po,1B
  92.     call    pe,1B
  93.     call    p,1B
  94.     call    m,1B
  95.     ; again the same set, but this time using forward temporary label
  96.     jr      1F
  97.     jr      nz,1F
  98.     jr      z,1F
  99.     jr      nc,1F
  100.     jr      c,1F
  101.  
  102.     jp      nz,1F
  103.     jp      1F
  104.     jp      z,1F
  105.     jp      nc,1F
  106.     jp      c,1F
  107.     jp      po,1F
  108.     jp      pe,1F
  109.     jp      p,1F
  110.     jp      m,1F
  111.  
  112.     call    nz,1F
  113.     call    z,1F
  114.     call    1F
  115.     call    nc,1F
  116.     call    c,1F
  117.     call    po,1F
  118.     call    pe,1F
  119.     call    p,1F
  120.     call    m,1F
  121. 1:                              ; usage of this label should trigger relocation
  122.  
  123.     ;; adding missing DJNZ (from the first version of the test)
  124. 22:
  125.     djnz    22B
  126.     djnz    22F
  127. 22:
  128.  
  129.     ; the relocation table must be after all temporary labels, as those don't manage
  130.     ; to settle down within 3 passes if there's dynamic-size table ahead, and "forward"
  131.     ; labels are referenced
  132.     RELOCATE_TABLE              ; should emit the 36 addresses of opcode data
  133.  
  134.     RELOCATE_END
  135.  
  136.     ;; adding missing DJNZ outside of relocation block
  137. 22:
  138.     djnz    22B
  139.     djnz    22F
  140. 22:
  141.