Niezupełnie tak. Miałem bardziej na myśli sposób, który wykorzystałem w trackscrollu. Nie kodowałem od dobrych 10 lat więc piszę z głowy, ale przyszło mi na myśl coś takiego.
Cztery bajty oryginalnego ekranu odpowiadają trzem bajtom na Atari, bo 4 x 6 = 3 x 8 :-) Założyłem, że oryginalny bajt ekranu na dwa najstarsze bity równe zero, ale nie jest to konieczne.
Można zatem wygenerować ciągiem kod z predefiniowanymi adresami posługując się takowym wzorcem:
; ekr_org - adres ekranu oryginalnego
; ekr_ata - adres ekranu atari
; tab1_1 - 64-bajtowa tabela dla pierwszych 6 bitów pierszego bajtu ekranu licząc od lewej
; tab1_2 - to samo dla dwóch pozostałych bitów pierwszego bajtu
; tab2_1 - to samo dla pierwszych 4 bitów drugiego bajtu
; tab2_2 - to samo dla kolejnych 4 bitów drugiego bajtu
; tab3_1 - to samo dla pierwszych 2 bitów trzeciego bajtu
; tab3_3 - to samo dla ostatnich 6 bitów trzeciego bajtu
; pierwszy bajt ekranu atari
ldx ekr_org
ldy ekr_org+1
lda tab1_1,x
ora tab1_2,y
sta ekr_ata
; drugi bajt ekranu atari
ldx ekr_org+2
lda tab2_1,y
ora tab2_2,x
sta ekr_ata+1
; trzeci bajt ekranu atari
ldy ekr_org+3
lda tab3_1,x
ora tab3_2,y
sta ekr_ata+2
Nie pamiętam liczby cykli rozkazów, więc trzeba to policzyć, ale chyba wychodzi z 15 cykli na bajt ekranu atari czyli 2 cykle na pixel.
Niech ktoś mądry rzuci okiem i mnie poprawi jeśli się mylę :-)