9Fermer11
SCPCDLe 07/04/2022 à 20:46
Pour le 1er point, il est possible de faire tout en une seule passe.
en supposant que :
- 0x0000 = transparent

Je ferai quelque chose comme ça : (uniquement en mode PIXEL et non PHRASE)
B_CMD :
- SRCEN => activation de la lecture data source
- DSTEN => activation de la lecture data destination
- LFU_REPLACE => écrire SOURCE
- DCOMPEN => activation du test "if B_PATD = source"

B_PATD
- initialisé avec la valeur "0x0000 0000 0000 0000" (64-bit)


En théorie, le blitter devrait effectuer les opérations suivantes :
move.w (a2), B_SRCD move.w (a1), B_DST cmp.w B_SRC, B_PATD beq.s .inhibit .no_inhibit: move.w B_SRCD, (a1) bra.s next_pixel .inhibit: bra.s next_pixel
Du coup :
lorsque la source lue n'est pas égal à PATTERN, la source est écrite
lorsque la source lue est égal à PATTERN, la source n'est pas écrite : la destination reste intacte.


--------------------------------------
Pour la collision, il est aussi possible de faire tout en une seule passe.
en supposant que :
- 0x0000 = transparent
- 0xAAAA = data sprite source
- 0xBBBB = data sprite destination à rechercher

Je ferai quelque chose comme ça : (uniquement en mode PIXEL et non PHRASE)
B_CMD :
- SRCEN => activation de la lecture data source
- DSTEN => activation de la lecture data destination
- LFU_SORD => écriture SOURCE | DESTINATION
- CMPDST => activation de la comparaison avec destination
- DCOMPEN => activation du test "if B_PATD = destination"

B_PATD
- initialisé avec la valeur "0xBBBB BBBB BBBB BBBB" (64-bit)

B_STOP
- STOPEN => activation du mode collision


En théorie, le blitter devrait effectuer les opérations suivantes :
move.w (a2), B_SRCD move.w (a1), B_DST cmp.w B_DST, B_PATD beq.s .collision .no_collision: move.w B_SRCD | B_DSTD, (a1) bra.s next_pixel .collision: wait btst #ABORT, B_STOP beq.s stop btst #RESUME, B_STOP bra.s next_pixel
Du coup :
lorsque la destination lue n'est pas égal à PATTERN, la source | destination est écrite
lorsque la destination lue est égal à PATTERN, la source n'est pas écrite : la destination reste intacte et le blitter se met en pause.


Après, il faut voir si ça répond à ton besoin (et si ça marche : j'ai pas testé) smile


-----------------------------------------------
Pour ta question sur A1_PIXEL, c'est normal car il y a un bug du coup A1_PIXEL & A2_PIXEL ne sont pas à lire à la même adresse que l'écriture :
A1_PIXEL_R : F02204 (au lieu de A1_PIXEL_W : F0220C)
A2_PIXEL_R : F0222C (au lieu de A2_PIXEL_W : F02230)