org $3f00 ldu #mixbuf ;buffer 3 ldx #sprite ;pointer to sprite stream ldy #backgnd again lda ,x 4;get sprite byte bne nxt 3;not 0, so we have to do something rezero leax 1,x 5;was zero, inc to next byte ldb ,y+ 6;get bgnd and inc y stb ,u+ 6;store background and inc u cmpx #sp_end beq render lda ,x 4;get next byte beq rezero 3 nxt bita #$0f 2;lets check if bits are beq poo 3;set in upper and lower bita #$f0 2;half... if either half beq poo leay 1,y bra copy poo ldb ,y+ 6;get background byte + inc anda #$0f 2;check if high bits set bne high_set 3 lda ,x 4 anda #$f0 2 andb #$0f 2 bra low_set 3 high_set andb #$f0 2 low_set stb dd+1 5 dd ora #0 2 copy sta ,u+ 6 leax 1,x 5 spend cmpx #sp_end 4 blo again 3 render rts org $4000 sprite fcb $00,$00,$A0,$0a,$a4,$aa,$00,$ff,$01,$aa,$00,$00 sp_end org $4100 backgnd fcb $CD,$dd,$dd,$ad,$bd,$cd,$ff,$cc,$ff,$0f,$fc,$fa org $4200 mixbuf fcb $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;expected result $cd,$dd,$ad,$aa,$a4,$aa,$ff,$ff,$f1,$aa,$fc,$fa