.define Inn .sect .text .sect .rom .sect .data .sect .bss .sect .text ! This subroutine checks if a certain bit is set in a set ! of n bytes on top of the stack. Inn: stx ARTH ! save bit number (lowbyte) sta ARTH+1 ! save bit number (highbyte) and #0x80 beq 1f lda #0 ! bit number is negative sta ARTH+2 ! make it zero beq 3f 1: txa and #0x07 ! get bit number mod 8 tax lda #1 cpx #0 ! bit number = 0 beq 2f ! no shifting to right place 1: asl a ! shift left until bit is in place dex bne 1b 2: sta ARTH+2 ! bit is one in place ldx #3 1: lsr ARTH+1 ! shift left 3 times bit number (highbyte) ror ARTH ! shift left 3 times bit number (lowbyte) dex ! this is bit number div 8 bne 1b ! which is byte number 3: lda SP+1 ldx SP+2 stx ADDR ! address of the set (lowbyte) sta ADDR+1 ! address of the set (highbyte) iny tya bne 2f inc SP+1 2: clc ! remove the set adc SP+2 sta SP+2 ! new stackpointer (lowbyte) lda #0 adc SP+1 sta SP+1 ! new stackpointer (highbyte) ldy ARTH lda (ADDR),y ! load the byte in A bit ARTH+2 ! test bit bne 1f 3: lda #0 ! bit is zero tax rts 1: lda #0 ! bit is one ldx #1 rts