; Przejrzysta konwersja c2p ; Etap 1: Podział na plany 0-3 i 4-7, połączenie 8 pikseli ; Etap 2: Podział na piksele 0, 2, 4, 6, ... i 1, 3, 5, 7, ..., połączenie 16 pikseli ; Etap 3: Podział na piksele 0(1), 4(5), 8(9), ... i 2(3), 6(7), 10(11), ..., połączenie 32 pikseli ; Etap 4: Podział na plany 0-1, 2-3, 4-5, 6-7, połączenie 4 pikseli ; Etap 5: Podział na plany 0, 1, 2, ..., 7, połączenie 2 pikseli ; Gotowe ; Zapiszmy tą procedurę: ; Przeznaczmy rejestry d0, d1, d2, d3, a0, a1, a2, a3 na bufor pikseli. ; Przeznaczmy rejestry a4, a5, d6, d7 na maski ; Pobierzmy dane chunky z rejestru a6 ; Przygotowanie: move.l #$0f0f0f0f,d6 move.l #$00ff00ff,d7 move.l #$33333333,a4 move.l #$55555555,a5 ; Etap 1: movem.l (a6)+,d0-d3/a0-a3 move.l d0,d4 ; Kopiuję do nieużywanych rejestrów move.l d1,d5 and.l d6,d0 and.l d6,d1 eor.l d0,d4 eor.l d1,d5 lsl.l #4,d0 lsr.l #4,d5 or.l d0,d1 ; d1 = a3a2a1a0 e3e2e1e0 b3b2b1b0 f3f2f1f0 c3c2c1c0 g3g2g1g0 d3d2d1d0 h3h2h1h0 or.l d4,d5 ; d5 = a7a6a5a4 e7e6e5e4 b7b6b5b4 f7f6f5f4 c7c6c5c4 g7g6g5g4 d7d6d5d4 h7h6h5h4 move.l d2,d0 ; Kopiuję do nieużywanych rejestrów move.l d3,d4 and.l d6,d2 and.l d6,d3 eor.l d2,d0 eor.l d3,d4 lsl.l #4,d2 lsr.l #4,d4 or.l d2,d3 ; d3 = i3i2i1i0 m3m2m1m0 j3j2j1j0 n3n2n1n0 k3k2k1k0 o3o2o1o0 l3l2l1l0 p3p2p1p0 or.l d0,d4 ; d4 = i7i6i5i4 m7m6m5m4 j7j6j5j4 n7n6n5n4 k7k6k5k4 o7o6o5o4 l7l6l5l4 p7p6p5p4 exg d5,a0 ; a0 = a7a6a5a4 e7e6e5e4 b7b6b5b4 f7f6f5f4 c7c6c5c4 g7g6g5g4 d7d6d5d4 h7h6h5h4 exg d4,a1 ; a1 = i7i6i5i4 m7m6m5m4 j7j6j5j4 n7n6n5n4 k7k6k5k4 o7o6o5o4 l7l6l5l4 p7p6p5p4 move.l d5,d2 move.l d4,d0 and.l d6,d5 and.l d6,d4 eor.l d5,d2 eor.l d4,d0 lsl.l #4,d5 lsr.l #4,d0 or.l d5,d4 or.l d2,d0 exg d0,a2 exg d4,a3 move.l d0,d5 move.l d4,d2 and.l d6,d0 and.l d6,d4 eor.l d0,d5 eor.l d4,d2 lsl.l #4,d0 lsr.l #4,d2 or.l d0,d4 or.l d5,d2 ; Status: ; d0 = nieuzywane ; d1 = a3a2a1a0 e3e2e1e0 b3b2b1b0 f3f2f1f0 c3c2c1c0 g3g2g1g0 d3d2d1d0 h3h2h1h0 ; d2 = I7I6I5I4 M7M6M5M4 J7J6J5J4 N7N6N5N4 K7K6K5K4 O7O6O5O4 L7L6L5L4 P7P6P5P4 ; d3 = i3i2i1i0 m3m2m1m0 j3j2j1j0 n3n2n1n0 k3k2k1k0 o3o2o1o0 l3l2l1l0 p3p2p1p0 ; d4 = I3I2I1I0 M3M2M1M0 J3J2J1J0 N3N2N1N0 K3K2K1K0 O3O2O1O0 L3L2L1L0 P3P2P1P0 ; d5 = nieuzywane ; a0 = a7a6a5a4 e7e6e5e4 b7b6b5b4 f7f6f5f4 c7c6c5c4 g7g6g5g4 d7d6d5d4 h7h6h5h4 ; a1 = i7i6i5i4 m7m6m5m4 j7j6j5j4 n7n6n5n4 k7k6k5k4 o7o6o5o4 l7l6l5l4 p7p6p5p4 ; a2 = A7A6A5A4 E7E6E5E4 B7B6B5B4 F7F6F5F4 C7C6C5C4 G7G6G5G4 D7D6D5D4 H7H6H5H4 ; a3 = A3A2A1A0 E3E2E1E0 B3B2B1B0 F3F2F1F0 C3C2C1C0 G3G2G1G0 L3L2L1L0 P3P2P1P0 ; Etap 2: move.l d1,d0 move.l d3,d5 and.l d7,d1 and.l d7,d3 eor.l d1,d0 eor.l d3,d5 lsl.l #8,d1 lsr.l #8,d5 or.l d1,d3 ; d3 = b3b2b1b0 f3f2f1f0 j3j2j1j0 n3n2n1n0 d3d2d1d0 h3h2h1h0 l3l2l1l0 p3p2p1p0 or.l d0,d5 ; d5 = a3a2a1a0 e3e2e1e0 i3i2i1i0 m3m2m1m0 c3c2c1c0 g3g2g1g0 k3k2k1k0 o3o2o1o0 exg d2,a3 move.l d2,d0 move.l d4,d1 and.l d7,d2 and.l d7,d4 eor.l d2,d0 eor.l d4,d1 lsl.l #8,d2 lsr.l #8,d1 or.l d2,d4 ; d4 = A3A2A1A0 E3E2E1E0 I3I2I1I0 M3M2M1M0 C3C2C1C0 G3G2G1G0 K3K2K1K0 O3O2O1O0 or.l d0,d1 ; d1 = B3B2B1B0 F3F2F1F0 J3J2J1J0 N3N2N1N0 D7D6D5D4 H7H6H5H4 L3L2L1L0 P3P2P1P0 ; (Powtórzyć dla planów 4-7) ; Etap 3 move.w d3,d2 swap d2 move.w d4,d2 ; d2 = d3d2d1d0 h3h2h1h0 l3l2l1l0 p3p2p1p0 D7D6D5D4 H7H6H5H4 L3L2L1L0 P3P2P1P0 swap d4 move.w d4,d3 ; d3 = b3b2b1b0 f3f2f1f0 j3j2j1j0 n3n2n1n0 B3B2B1B0 F3F2F1F0 J3J2J1J0 N3N2N1N0 move.w d5,d4 swap d4 move.w d1,d4 ; d4 = c3c2c1c0 g3g2g1g0 k3k2k1k0 o3o2o1o0 C3C2C1C0 G3G2G1G0 K3K2K1K0 O3O2O1O0 swap d1 move.w d1,d5 ; d5 = a3a2a1a0 e3e2e1e0 i3i2i1i0 m3m2m1m0 A3A2A1A0 E3E2E1E0 I3I2I1I0 M3M2M1M0 ; (Powtórzyć dla planów 4-7) ; Etap 4 exg d6,a4 ; Maska move.l d5,d0 move.l d4,d1 and.l d6,d5 and.l d6,d4 eor.l d5,d0 eor.l d4,d1 lsl.l #2,d5 lsr.l #2,d1 or.l d5,d4 ; d4 = a1a0c1c0 e1e0g1g0 i1i0k1k0 m1m0o1o0 A1A0C1C0 E1E0G1G0 I1I0K1K0 M1M0O1O0 or.l d0,d1 ; d1 = a3a2c3c2 e3e2g3g2 i3i2k3k2 m3m2o3o2 A3A2C3C2 E3E2G3G2 I3I2K3K2 M3M2O3O2 move.l d3,d5 move.l d2,d0 and.l d6,d3 and.l d6,d2 eor.l d3,d5 eor.l d2,d0 lsl.l #2,d3 lsr.l #2,d0 or.l d3,d2 or.l d5,d0 ; Etap 5: exg d7,a5 move.l d4,d3 move.l d2,d5 and.l d7,d4 and.l d7,d2 eor.l d4,d3 eor.l d2,d5 add.l d4,d4 lsr.l #1,d5 or.l d4,d2 ; plan 0 or.l d3,d5 ; plan 1 move.l d1,d4 move.l d0,d3 and.l d7,d1 and.l d7,d0 eor.l d1,d4 eor.l d0,d3 add.l d1,d1 lsr.l #1,d3 or.l d1,d0 ; plan 2 or.l d4,d3 ; plan 3 ; Powtórzyć etapy 2-5 dla planów 4-7 exg d5,a0 exg d3,a1 exg d2,a2 exg d0,a3 move.l d5,d1 move.l d3,d4 ; Etap 2-2: exg d7,a5 and.l d7,d5 and.l d7,d3 eor.l d5,d1 eor.l d3,d4 lsl.l #8,d5 lsr.l #8,d4 or.l d5,d3 or.l d1,d4 move.l d2,d5 move.l d0,d1 and.l d7,d2 and.l d7,d0 eor.l d2,d5 eor.l d0,d1 lsl.l #8,d2 lsr.l #8,d1 or.l d2,d0 or.l d5,d1 ; Etap 3-2 move.w d3,d2 swap d2 move.w d0,d2 swap d0 move.w d0,d3 move.w d4,d0 swap d0 move.w d1,d0 swap d1 move.w d1,d4 ; Etap 4-2 move.l d4,d5 move.l d0,d1 and.l d6,d4 and.l d6,d0 eor.l d4,d5 eor.l d0,d1 lsl.l #2,d4 lsr.l #2,d1 or.l d4,d0 or.l d5,d1 move.l d3,d4 move.l d2,d5 and.l d6,d3 and.l d6,d2 eor.l d3,d4 eor.l d2,d5 lsl.l #2,d3 lsr.l #2,d5 or.l d3,d2 or.l d4,d5 ; Etap 5: exg d7,a5 move.l d0,d3 move.l d2,d4 and.l d7,d0 and.l d7,d2 eor.l d0,d3 eor.l d2,d4 add.l d0,d0 lsr.l #1,d4 or.l d0,d2 ; Plan 4 or.l d3,d4 ; Plan 5 move.l d1,d0 move.l d5,d3 and.l d7,d1 and.l d7,d5 eor.l d1,d0 eor.l d5,d3 add.l d1,d1 lsr.l #1,d3 or.l d1,d5 ; Plan 6 or.l d0,d3 ; Plan 7 exg d6,a4 rts