Advertisement
Marrin

switching.s

Jan 14th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .setcpu     "6502"
  2.     .smart      on
  3.     .autoimport on
  4.     .importzp   sp, sreg, regsave, regbank
  5.     .importzp   tmp1, tmp2, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4
  6.     .export     _turn_on, _turn_off, _toggle, _turn_up, _turn_double_up
  7.     .export     _turn_down
  8.     .import     _row
  9.  
  10. .macro loop_start
  11.     sta tmp1    ; tmp1 = j
  12.     stx tmp1+1
  13.  
  14.     ldy #0      ; ptr1 = tmp3 = i
  15.     lda (sp),y
  16.     sta tmp3
  17.     sta ptr1
  18.     iny
  19.     lda (sp),y
  20.     sta tmp3+1
  21.     sta ptr1+1
  22.  
  23.     lda ptr1    ; ptr1 = ptr1 * 2 + _row (= &row[i])
  24.     asl
  25.     rol ptr1+1
  26.     clc
  27.     adc #<_row
  28.     sta ptr1
  29.     lda ptr1+1
  30.     adc #>_row
  31.     sta ptr1+1
  32.  
  33.     sec     ; tmp1 = tmp1 - tmp3 (= j - i)
  34.     lda tmp1
  35.     sbc tmp3
  36.     sta tmp1
  37.     lda tmp1+1
  38.     sbc tmp3+1
  39.     sta tmp1+1
  40. .endmacro
  41.  
  42. .macro loop_end
  43.     .local exit_loop
  44.  
  45.     lda tmp1    ; tmp1 == 0?
  46.     ora tmp1+1
  47.     beq exit_loop
  48.     dec tmp1    ; tmp1 -= 1
  49.     lda tmp1
  50.     cmp #$ff
  51.     bne loop
  52.     dec tmp1+1
  53.     jmp loop
  54. exit_loop:
  55.     jmp incsp2
  56. .endmacro
  57.  
  58.  
  59. .code
  60.  
  61. _turn_on:
  62.     ldy #1
  63.     .byte $2c   ; BIT $????
  64. _turn_off:
  65.     ldy #0
  66.  
  67. .proc turn_common
  68.     sty selfmod+1
  69.    
  70.     loop_start
  71.  
  72.     ldy #0
  73. loop:
  74. selfmod:
  75.     lda #$ff
  76.     sta (ptr1),y
  77.     iny
  78.     iny
  79.     bne skip1
  80.     inc ptr1+1
  81. skip1:
  82.     loop_end
  83. .endproc
  84.  
  85. .proc _toggle
  86.     loop_start
  87.    
  88.     ldy #0
  89. loop:
  90.     lda (ptr1),y
  91.     eor #1
  92.     sta (ptr1),y
  93.     iny
  94.     iny
  95.     bne skip1
  96.     inc ptr1+1
  97. skip1:
  98.     loop_end
  99. .endproc
  100.  
  101. _turn_up:
  102.     ldy #1
  103.     .byte $2c   ; BIT $????
  104. _turn_double_up:
  105.     ldy #2
  106.  
  107. .proc turn_up_common
  108.     sty selfmod+1
  109.     loop_start
  110.    
  111.     ldy #0
  112. loop:
  113.     clc
  114.     lda (ptr1),y
  115. selfmod:
  116.     adc #$ff
  117.     sta (ptr1),y
  118.     iny
  119.     lda (ptr1),y
  120.     adc #0
  121.     sta (ptr1),y
  122.     iny
  123.     bne skip1
  124.     inc ptr1+1
  125. skip1:
  126.     loop_end
  127. .endproc
  128.  
  129. .proc _turn_down
  130.     loop_start
  131.    
  132.     ldy #0
  133. loop:
  134.     lda (ptr1),y
  135.     iny
  136.     ora (ptr1),y
  137.     beq skip0
  138.  
  139.     dey
  140.     sec
  141.     lda (ptr1),y
  142.     sbc #1
  143.     sta (ptr1),y
  144.     iny
  145.     lda (ptr1),y
  146.     sbc #0
  147.     sta (ptr1),y
  148. skip0:
  149.     iny
  150.     bne skip1
  151.     inc ptr1+1
  152. skip1:
  153.     loop_end
  154. .endproc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement