Witam serdecznie, od czasu do czasu jestem gościem na tym forum ale nie udzielałem się do tej pory, może czas to zmienić :)
Jako stary Atarowiec (uwierzcie mi na słowo że stary), wróciłem po 30 latach do korzeni by pobawić się moim pierwszym sprzętem. Atari (65xe) miałem mając gdzieś 15-18 lat, więc dość dawno (lata 80-te), trochę programowałem głównie w maszynówce, ale nigdy nie było mi dane bardziej rozwinąć skrzydeł ze względu na braki narzędzi i sprzętu (stacja dysków była poza moim zasięgiem). No, ale dziś nie ma takich ograniczeń i na fali sentymentu wróciłem by się trochę pobawić.
Ale do rzeczy: bawiąc się napisałem konwerter gif -> assembler w python'ie dzieki czemu dobrze nadaje sie do automatyzacji takich konwersji.
Potrzebny jest tylko plik gif w odpowiedniej ilosci kolorów, ja używam GIMP'a gdzie dowolny jpeg kadruje najpierw z proporcjami 32x20 , nastepnie skaluje do rozdzielczosci 160x192 a nastepnie konwertuje kolory do palety indeksowanej 4-kolorowej i taki obrazek zapisuje jako gif (w przypadku trybu ANTIC $0e i 4 kolorów).
Narzedzie radzi sobie takze z trybami GTIA ale zawsze założnie jest, że obraz jest w "normalu": 40 bajtów na linię. Nalezy ustawic tylko odpowiedni "rate" (opcja '-r' -> vide dokumentacja). Można też używać palety 1-bitowej i trybu ANTIC $0f (rate=8).
Narzedzie konwertuje takze kolory w formacie RGB do formatu Hue/Sat Atari, tworzac odpowiednia tablice z danymi.
Zapisywane dane sa w formacie MAD Assembler (bo akurat takiego uzywam).
Narzedzie do konwersji grafiki potrafi ja takze kompresowac oraz zapisac do pliku procedure dekompresji (w assemblerze), gdzie trzeba tylko do odpowiednich rejestrow wpisac odpowiednie wartosci (patrz komentarz w tym pliku), vide opcje -c oraz -u nazwa_pliku.asm Procedura jest bezstratna wiec mozna ja uzyc takze do innych danych.
Przyklad jak powinna wygladac display lista w asm:
opcja "-l" skryptu jest po to by kazdy obrazek czy tablica z kolorami mialy unikalna labelkę (tu jest to po prostu wartosc "1" -> stad image_1 oraz colors_1). opcja "-a" pozwala wygenerowac odpowiedni align (by dane obrazu zaczynaly sie od bloku 4K).
Zrobiłem takze proste demko (slideshow: terminator.xex , załączone) gdzie wykorzystywane sa obrazki uzyskane z tego narzedzia (skompresowane, dzieki czemu zmiescilo sie ich 6 i powinny dzialac na 64 KB pamieci - testowalem tylko na Altirze).
Dodałem także funkcjonalność konwersji muzyki z formatu SAP (ale tylko typ 'B') do assemblera: sapconv (vide dokumentacja). Może kiedyś ją dopracuję, ale i tak dzieki niej wrzuciłem bez problemu muzykę do demka).
Wrzucam to wszystko bo moze komus się przyda i mam duzy sentyment do tego sprzetu i oczywiście pozdrawiam innych "dziadków"-Atarowców ;)
Acha, jesli wynalazłem ponownie koło - to trudno - miałem i tak z tym sporo zabawy.
pozdrawiam, Grzegorz aka Gandalf
ps. czemu Gandalf ? Ksywka jeszcze z liceum, musiałem ją wrzucić :)
fajne,Terminator 1 to jeden z moich ulubionych filmów . W niedługim czasie będę konwertował ten film na A8 -spod SIDE śmiga aż miło i to z dźwiękiem :-) .
XEX uses $0600-2E0F, it's difficult to find a loader which loads this one on a real Atari. Many loaders do require some memory in the $0700-09FF area (or even more, e.g. DOS), so it would be good to leave this small memory area unused while loading the program (it could be used e.g. after depacking)...
W wolnych chwilach rzeźbię jeszcze przy tym narzędziu i dodałem tam właśnie obsługę kompresji lz4 : zarówno w imgconv jak i sapconv. I oto mamy wersję 0.2.0 :) A w niej:
Jesli podamy takze opcje -u (jak wyzej) to do podanego pliku wygeneruje sie odpowiednia procedura dekompresji. W przypadku lz4 procedurę wziąłem stad: ->link<- Jedna ciekawa rzecz: napisane jest przy algorytmie dekompresji że należy pominąć 11 znaków z początku i 6 znaków z końca skompresowanego pliku. Zauważyłem że prawdą jest pomijanie pierwszych 11 bajtów (co też imgconv robi), pomijanie ostatnich powodowało zwis procedury. Być może python'owa implementacja lz4 nie generuje tych "niepotrzebnych" bajtów.
Sama dekompresja w przypadku lz4 jest prosta:
mwa #image_obrazek unlz4.source ; zalaczony obrazek mwa #image unlz4.dest ; pamiec ekranu 8KB jsr unlz4 ; wywolanie procedury z pliku uncompress.asm
Dla trybu 'legacy' jest troche wiecej roboty:
mwa #image_obrazek SCREEN_SRC_L mwa #image SCREEN_DST_L mwa #(.len image_obrazek) SCREEN_LEN_L mwa #0 SCREEN_TMP_L jsr uncompress
Dodatkowo, jeśli nie używamy kompresji program może wygenerować do pliku asm także prostą display listę, musimy tylko podać tryb Antic'a (opcja "-o"; domyślnie jest to 14). Może kiedyś, komuś się to narzędzie przyda...
Załączam proste slideshow jakie zrobilem na szybko gdzie zarowno obrazki jak i muzyka jest skompresowana :)
Hej, Właściwie to zamiar był taki by był to tylko command line. Tak łatwiej coś zautomatyzować, np cały proces budowania za pomocą komendy make :) Ciekawe czy ktoś używa make dla małego Atari ?