1234567891011121314151617181920212223242526272829303132333435363738394041 |
- .define Set
- .sect .text
- .sect .rom
- .sect .data
- .sect .bss
- .sect .text
- ! This subroutine creates a set of n (n <= 256) bytes.
- ! In this set a certain bit, which number is in registerpair AX,
- ! is set. The rest is zero.
- Set:
- stx ARTH ! save bitnumber (lowbyte)
- sta ARTH+1 ! save bitnumber (highbyte)
- jsr Zer ! create n zerobytes
- lda ARTH
- and #0x07 ! n mod 8 (bitnumber in byte)
- tax
- lda #1
- cpx #0
- beq 2f
- 1: asl a ! set bit (n mod 8)
- dex
- bne 1b
- 2: sta ARTH+2
- ldx #3
- 1: lsr ARTH+1 ! shiftright n 3 times (= n div 8)
- ror ARTH ! this is the bytenumber
- dex
- bne 1b
- ldy ARTH ! load bytenumber
- lda SP+1
- ldx SP+2
- stx ADDR ! address of set (lowbyte)
- sta ADDR+1 ! address of set (highbyte)
- lda ARTH+2 ! get bit
- sta (ADDR),y ! store byte with bit on
- rts
|