Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .setcpu "6502"
- .smart on
- .autoimport on
- .importzp sp, sreg, regsave, regbank
- .importzp tmp1, tmp2, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4
- .export _turn_on, _turn_off, _toggle, _turn_up, _turn_double_up
- .export _turn_down
- .import _row
- .macro loop_start
- sta tmp1 ; tmp1 = j
- stx tmp1+1
- ldy #0 ; ptr1 = tmp3 = i
- lda (sp),y
- sta tmp3
- sta ptr1
- iny
- lda (sp),y
- sta tmp3+1
- sta ptr1+1
- lda ptr1 ; ptr1 = ptr1 * 2 + _row (= &row[i])
- asl
- rol ptr1+1
- clc
- adc #<_row
- sta ptr1
- lda ptr1+1
- adc #>_row
- sta ptr1+1
- sec ; tmp1 = tmp1 - tmp3 (= j - i)
- lda tmp1
- sbc tmp3
- sta tmp1
- lda tmp1+1
- sbc tmp3+1
- sta tmp1+1
- .endmacro
- .macro loop_end
- .local exit_loop
- lda tmp1 ; tmp1 == 0?
- ora tmp1+1
- beq exit_loop
- dec tmp1 ; tmp1 -= 1
- lda tmp1
- cmp #$ff
- bne loop
- dec tmp1+1
- jmp loop
- exit_loop:
- jmp incsp2
- .endmacro
- .code
- _turn_on:
- ldy #1
- .byte $2c ; BIT $????
- _turn_off:
- ldy #0
- .proc turn_common
- sty selfmod+1
- loop_start
- ldy #0
- loop:
- selfmod:
- lda #$ff
- sta (ptr1),y
- iny
- iny
- bne skip1
- inc ptr1+1
- skip1:
- loop_end
- .endproc
- .proc _toggle
- loop_start
- ldy #0
- loop:
- lda (ptr1),y
- eor #1
- sta (ptr1),y
- iny
- iny
- bne skip1
- inc ptr1+1
- skip1:
- loop_end
- .endproc
- _turn_up:
- ldy #1
- .byte $2c ; BIT $????
- _turn_double_up:
- ldy #2
- .proc turn_up_common
- sty selfmod+1
- loop_start
- ldy #0
- loop:
- clc
- lda (ptr1),y
- selfmod:
- adc #$ff
- sta (ptr1),y
- iny
- lda (ptr1),y
- adc #0
- sta (ptr1),y
- iny
- bne skip1
- inc ptr1+1
- skip1:
- loop_end
- .endproc
- .proc _turn_down
- loop_start
- ldy #0
- loop:
- lda (ptr1),y
- iny
- ora (ptr1),y
- beq skip0
- dey
- sec
- lda (ptr1),y
- sbc #1
- sta (ptr1),y
- iny
- lda (ptr1),y
- sbc #0
- sta (ptr1),y
- skip0:
- iny
- bne skip1
- inc ptr1+1
- skip1:
- loop_end
- .endproc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement