Był dzień wolny, to posiedziałem jeszcze i udało się! Skróciłem do "poniżej 50" - 49 bajtów.
Ale po kolei.
Najpierw ten 60 bajtów (63 z czyszczeniem ekranu) - wyświetla 6 pełnych 32-znakowych linii, z zapisanego bitowo wzorca. I potem jeszcze 2 razy to powtarza. A ponieważ wyświetla 3 razy po tylko 6 linii, więc na koniec jeszcze raz pierwsza linia (bo jest identyczna z ostatnią).
org 32768
call $1642 ;kanał 2
ld e,3 ;3 razy
loop0 ld b,24 ;6 linii (4 bajty na linie)
call show
dec e
jr nz,loop0
ld b,4 ;jeszcze raz pierwsza linia
show ld hl,dane
loop1 ld c,8 ;8 bitów
ld d,(hl)
inc hl
loop2 sla d
sbc a,a
and 10 ;"*" minus spacja
add a,32 ;spacja
rst 16
dec c
jr nz,loop2
djnz loop1
ret
;
dane defb 16,65,0,0,40,162,128,0,69,20,64,0
defb 130,8,32,0,69,20,64,0,40,162,128,0
Ale męczyło mnie, że we wzorcu są trzy takie same romby, więc w końcu udało mi się skrócić dane o 2/3 do pojedynczego rombu. Po każdym rombie wyświetla CHR$ 8 czyli jeden znak w lewo, dzięki czemu można wyświetlać romb w całości. I taki zestaw 3 rombów powtarza 3 razy. Przez błąd w ROM nie działa "o linię w górę" CHR$ 11, więc trzeba to zrobić przez zmienną systemową (23689). Dzięki temu można wyświetlać romb w całości 7x7, bez powtarzania pierwszej linii na zakończenie. Więc też krócej.
Manipulując położeniem danych/programu można skrócić sprawdzenie końca danych. No i udało się skrócić poniżej 50

org 32727
;dobrac ORG, zeby DANE = $8001
call $1642 ;kanał 2
ld e,3 ;3 w pionie
show ld hl,DANE+6
loop0 ld b,3 ;3 w poziomie
loop1 ld c,7 ;7 znaków
ld d,(hl)
loop2 sla d
sbc a,a
and 10 ;"*" minus spacja
add a,32 ;spacja
rst $10
dec c
jr nz,loop2
ld a,8 ;o 1 w lewo
rst $10
djnz loop1
ld a,13 ;nowa linia
rst $10
dec l
jr nz,loop0
inc (iy+79) ;o 1 w góre
dec e
jr nz,show
ret
;
DANE defb 16,40,69
defb 130,69,40,16
W BASICu też napisałem. Próba przeniesienia rozwiązania asemblerowego to porażka, nie ma operacji na bitach więc wyszło ponad 200 bajtów. Zacząłem od nowa, ale w żaden sposób nie udało się 100b. Wymęczyłem 127 bajtów. Wszystko jest na maxa poskracane, nawet wpisane są kody OVER w linii. Co ciekawe wyszło krócej stosując TAB i manipulując OVER, niż AT.
Może by się udało w 100b, gdyby nie ten błąd w ROM, że nie działa CHR$ 10 i 11 (w dół i w górę)...