123456789101112131415161718192021222324252627282930313233343536373839 |
- .define And
- .sect .text
- .sect .rom
- .sect .data
- .sect .bss
- .sect .text
- ! This subroutine performs the logical and on two groups of
- ! atmost 254 bytes. The number of bytes is in register Y.
- ! The two groups are on the stack.
- ! First the value of the stackpointer is saved in zeropage
- ! locations ADDR, ADDR+1. Then an offset of Y is added
- ! and stored in ADDR+2, ADDR+3.
- ! The result is pushed back on the stack.
- And:
- lda SP+1
- sta ADDR+1 ! address of first group (lowbyte)
- lda SP+2
- sta ADDR ! address of first group (highbyte)
- clc
- tya
- adc SP+2
- sta SP+2 ! new stackpointer (lowbyte)
- sta ADDR+2 ! stackpointer + Y (lowbyte)
- lda #0
- adc SP+1
- sta SP+1 ! new stackpointer (highbyte)
- sta ADDR+3 ! stackpointer + Y (highbyte)
- 1: dey
- lda (ADDR),y ! get byte first group
- and (ADDR+2),y ! perform logical and with second group
- sta (ADDR+2),y ! push result on real_stack
- tya
- bne 1b ! do it n times
- rts
|