Gracias. Sigo sin saber exactamente que es PARCHE+1 y qué hace exactamente. Aquí te explico mi código:
La posición Y está en COORD_Y y la x en COORD_X. La pantalla se guarda en un buffer llamado PANT_BUFFER y apuntado por HL.
   ld   a,[COORD_X] ;redondeo la coord_x
   and    248
   ld   d,0
   ld   e,a 
   ld   h,0
   ld   a,[COORD_Y] ;redondeo la coord_y y multiplico por 32
   and   248
   ld   l,a
   ld   c,32
   call   mult
   add   hl,de
La rutina "mult" que multiplica HL por un número dado en el registro C es:
;------------------------------------------
;Multiplica un número HL=número C= *n
;------------------------------------------
mult:
   ld   a,c
   or   a
   jp   z,@@cero
   push   de
   dec   c
   ld   b,c
   push   hl
   pop   de
@@buc1:
   add   hl,de
   djnz   @@buc1
   pop   de
   ret
@@cero:
   ld   hl,0
   ret
Bueno, ahora supuestamente estará en HL un número comprendido entre 0 y 6144 (la tabla de patrones) donde está el byte buscado. Aún tengo que sumar Y and 7 a HL para que HL apunte al byte específico:
   ld   a,[COORD_Y]
   and   7
   ld   d,0
   ld   e,a
   add   hl,de
Ahora sí HL debe apuntar al byte de la pantalla que contiene el punto a detectar.
Queda rotar ese byte a la izquierda tantas veces como X and 7.
   ld   a,[COORD_X]
   and   7
   or   a
   jp   z,@@sigue ;si es cero salto el paso de rotar
   ld   b,a
@@buc:
   push   bc   
   call   ROTA_IZQUIERDA
   pop   bc
   djnz   @@bu2
La rutina de rotación es:
ROTA_IZQUIERDA:
;---------------------------
;HL=dir.byte a rotar
;---------------------------
@@rota:
    sla [hl]
ret
Por último, cargo en A el valor del byte apuntado por HL y comparo el 7ºbit:
   ld   a,[hl]
   bit   7,a
   jp   nz, COLISION_AL_CANTO
Como ves, mi ensamblador es como para escribir la segunda parte del libro de Rodney Zacks  

 pero bueno, algo aprendo cada día  

Tengo que ponerme a ver instrucciones como RRCA y todo eso, y aprender mejor a manipular nibbles y todo eso... pero poco a poco  

¡Gracias!