Stop War i liczenie bajtów

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 😀

link do prodki -> Pouet Demozoo