Ze spaniem ostatnio średnio, jednego wieczoru siadłem i wyplułem z siebie tą prodkę. Koder Spectrumowy ze mnie żaden, 384bajty na start, niestety zabija mnie C++ z tyłu głowy i robię bez sensu od razu prefaby i inne struktury, które w maluchach typu 256b zabijają temat. Na szczęście dwa rzuty okiem i jest 238 bajtów przy czterech obrazkach 24x5px o różnych (zmiennych) kolorach. Nie jest to dobry wynik – co wiem z dnia następnego – zmieściłem w 256b kod z czterema grafikami 32x8px, ale to zupełnie inna historia.
A zaczęło się od prostego kodu 30bajtów wyświetlającego flagę Ukrainy (tak naprawdę 27bajtowego – jeżeli ustawimy kolor tekstu i tła na takie samo nie trzeba czyścić ekranu czyli 3 bajty oszczędności) – kod poniżej. Potem spojrzałem na to jeszcze raz – oczywiście – fajnie mieć uniwersalną prockę do wypełniania porcji pamięci (taka była idea), ale w wyścigu o “jeszcze mniej bajtów” chodzi o… coś innego niż uniwersalność. Poniższy kod ma 22 bajty – bez końcowej pętli – 20 bajtów.
MAIN org $8000 fuckputin ld hl,$5800 ; attibutes location start ld (hl),$49 ; blue ld e,l ld d,h inc de ld bc,$180 ldir ld (hl),$76 ; yellow ld bc,$17f ldir endloop: jr endloop end fuckputin ; end of code
Po skopiowaniu kodu i zapisaniu go, kompilujemy jak zwykle za pomocą pasmo:
pasmo --tapbas kod.asm kod.tap
Natomiast sama prodka z przesłaniem przeszła kilka moich faz zastanawiania się i przepisywania.
Wersja, którą wrzuciłem na start na pouet to było 238bajtów przy czterech obrazkach 24x5px -tworzyły one dwa ekrany z “flagami”. Te dane to raptem 15bajtów x4 czyli 60 bajtów na gfx. Finalnie – udało mi się zmieścić w 254bajtach:
- cztery “flagi”, każda połówka ma definiowalny kolor
- trzy flagi mają po dwa gfx/napisy na całą szerokość ekranu (32x5px razy dwa gfx)
- ostatnia “flaga” ma górny napis. (32x5px)
- każdy napis ma swój kolor.
- każda “flaga” ma swój definiowalny kolor ramki (border)
podsumowując: 160 bajtów danych, 94 bajty kodu. Niestety zabrakło koncepcji jak zmieścić jeszcze dosłownie parę bajtów, by zmieścić drugą część gfx na czwartej “fladze” – ale taki już los 256bajtów i braku koncepcji.
edit: to nie koniec. Przyszedł Dalthon (z grupy JOKER – pozdrawiam) i powiedział: ile chcesz jeszcze urwać? 20? To potrzymaj mi piwo. I urwał. Na szczęście trzeba było tylko 18 bajtów, a walka o ostatni bajt była epicka 😉 Czyli znowu update 🙂
Finalnie – 160 bajtów danych (4 ekrany po 32x10px), 20 bajtów danych na flagi i kolory ramki i tekstów, zostało 76 bajtów na kod 😀