atarionline.pl Graph2Font - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1: CommentAuthorhubowski
    • CommentTime15 Jan 2020 zmieniony
     
    Witam wszystkich,

    Potrzebuje porady jak uzyskac tablice znakow po przekonwertowaniu prostej grafiki na font przy uzyciu graph2font.
    Po zapisaniu konwersji na plik assemblera, zauwazylem ze jedyna tablica ktora posiada jakiekolwiek sensowne dane to .charset0 (pozostale albo sa identyczne lub puste).

    Po ustawieniu prostej petli i zapisywaniu wartosci poszczegolnych znakow do kolejnych rejestrow ekranu, jako wynik koncowy mam krzaki.
    Podejrzewam ze w niewlasciwy sposob odczytuje tablice znakow z plikow wynikowych graph2font. Zwracam sie z zapytaniem w jaki sposob moge najprosciej takie wartosci wyeksportowac.

    Zalaczam moj testowy, prosty kod w C, ktory jest oparty na tutorialach ktore znalazlem na zacnym forum :)

    Jedyne co nie do konca ma dla mnie sens w kodzie ponizej to rozmiar tablicy - plik ASM ma tablice o wielkosci 1024 wartosci gdy obszar ekranu w trybie 0 to 960.

    Dzieki!
    -------------------
    #include <atari.h>
    #include <stdio.h>
    #include <peekpoke.h>

    #include "atari_defs.h"

    #define SCREEN_SIZE 40

    unsigned char *video_ptr;
    unsigned char chars;

    unsigned char screen1[1024] = {0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x05,0x05,0x15,0x15,0xD5,0x57,0x54,0x54,0x50,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x50,0x50,0x54,0x54,0x55,0xD5,0x15,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x01,0x0D,0x05,0x15,0x55,0x15,0xD5,0x55,0x54,0x55,0x55,0x55,0x57,0x40,0xC0,0x03,0x15,0x55,0x55,0x50,0x00,0x00,0x0D,0x55,0x55,0x57,0x40,0x00,0x00,0x35,0x55,0x55,0x57,0x00,0x00,0x00,0x00,0x55,0x55,0x57,0x00,0x00,0x00,0x00,0x00,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x57,0x00,0x00,0x03,0x05,0x55,0x55,0x55,0x55,0x01,0x35,0x55,0x55,0x58,0x40,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x55,0x55,0x7D,0x00,0x00,0x00,0x00,0x00,0x55,0x55,0x55,0x05,0x00,0x00,0x00,0x00,0x5C,0x5C,0x55,0x55,0x35,0x00,0x00,0x00,0x00,0x00,0x70,0x57,0x55,0x55,0x0D,0x00,0x00,0x00,0x00,0x00,0x50,0x57,0x55,0xD5,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x57,0x01,0x01,0x01,0x0D,0x0D,0x05,0x05,0x05,0x5C,0x50,0x50,0x50,0x70,0x70,0x40,0x40,0x05,0x01,0x01,0x00,0x00,0x00,0x00,0x03,0x50,0x5C,0x54,0x57,0xD5,0x15,0x15,0x55,0x00,0x00,0x01,0x35,0x55,0x55,0x5C,0x50,0x0D,0x15,0x55,0x55,0x55,0x15,0x15,0x55,0x55,0x57,0x5C,0x50,0x70,0x40,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0x15,0x00,0x00,0x00,0x03,0x05,0x55,0x55,0x54,0x00,0x01,0x15,0x55,0x55,0x5C,0xC0,0x00,0xD5,0x55,0x57,0x70,0x00,0x00,0x00,0x00,0x54,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xD5,0x05,0x00,0x00,0x00,0x00,0x00,0x40,0x5C,0x55,0x55,0x15,0x01,0x00,0x00,0x05,0x35,0x15,0x15,0x15,0x15,0x15,0x15,0x40,0x40,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x05,0x15,0x00,0x00,0x01,0x05,0x95,0x55,0x54,0x50,0x05,0xD5,0x55,0x54,0x50,0xC0,0x00,0x00,0x55,0x53,0xC0,0x00,0x00,0x00,0x00,0x00,0x5C,0x55,0x55,0x15,0x15,0x35,0x15,0x15,0x54,0x54,0x50,0x50,0x70,0x50,0x5C,0x54,0x00,0x00,0x00,0x00,0x00,0x03,0x05,0x55,0x00,0x00,0x00,0x0D,0x15,0x55,0x55,0x50,0x01,0x35,0x55,0x55,0x54,0x40,0x00,0x00,0x55,0x57,0x50,0xC0,0x00,0x00,0x00,0x00,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x01,0x05,0x15,0x55,0x00,0x01,0x35,0xD5,0x55,0x54,0x50,0x40,0x55,0x57,0x58,0x40,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x01,0x01,0x05,0xD5,0xD5,0x57,0x54,0x55,0x55,0x55,0x55,0x50,0x55,0x15,0x55,0x55,0x5D,0x40,0x00,0x00,0x55,0x54,0x50,0x50,0x54,0x57,0xD5,0x15,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x15,0x35,0x05,0x05,0x05,0x05,0x0D,0x0D,0xC0,0x40,0x40,0x40,0x40,0x40,0x70,0x50,0x01,0x05,0x15,0x55,0x55,0x54,0x50,0x40,0x55,0x54,0x50,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x00,0x00,0x00,0x01,0x05,0xD5,0x55,0x54,0x01,0x05,0xD5,0x55,0x54,0x50,0xC0,0x00,0x55,0x55,0x55,0xD5,0x15,0x15,0xD5,0xD5,0x40,0x40,0x40,0xC0,0x00,0x00,0x00,0x00,0x05,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x50,0x54,0x57,0x55,0x15,0x05,0x09,0x03,0x00,0x00,0x00,0x00,0x40,0x50,0x54,0x57,0x01,0x01,0x01,0x03,0x00,0x00,0x00,0x00,0x50,0x50,0x5C,0x54,0x54,0x54,0xD5,0x15,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x15,0x01,0x05,0x35,0xD5,0x55,0x54,0x50,0x40,0x55,0x54,0x50,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x01,0x05,0x15,0x55,0x54,0x50,0x40,0xD5,0x55,0x54,0x50,0xC0,0x00,0x00,0x00,0x50,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x55,0x57,0x54,0x54,0x54,0x54,0x54,0x54,0x55,0x15,0x05,0x01,0x03,0x00,0x00,0x00,0x80,0x40,0x50,0x54,0x55,0x55,0x15,0x05,0x00,0x00,0x00,0x00,0x00,0xC0,0x40,0x50,0x15,0x35,0x05,0x05,0x0D,0x01,0x01,0x00,0x00,0x40,0x40,0x70,0x50,0x50,0x5C,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0D,0x00,0x03,0x09,0x05,0x15,0x55,0x57,0x54,0x55,0x57,0x54,0x50,0x40,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x00,0x00,0x00,0x01,0x35,0xD5,0x55,0x54,0x0D,0x15,0x55,0x55,0x5C,0x70,0x00,0x00,0x57,0x50,0x40,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x54,0x54,0x5C,0x5C,0x5C,0x5C,0x5C,0x5C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x55,0xD5,0x35,0x05,0x01,0x00,0x00,0x00,0x00,0xC0,0x70,0x5C,0x57,0x55,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x57,0xD5,0x15,0x35,0x05,0x05,0x01,0x03,0x00,0x00,0xC0,0x40,0x70,0x50,0x58,0x54,0x00,0x00,0x00,0x03,0x0D,0x05,0x15,0x55,0x05,0x15,0x55,0x57,0x5C,0x50,0x40,0x00,0x50,0x40,0x00,0x00,0x00,0x01,0x05,0x15,0x00,0x00,0x09,0x35,0xD5,0x55,0x54,0x50,0x15,0x55,0x57,0x5C,0x40,0x00,0x00,0x00,0x50,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x03,0x00,0x00,0x5C,0x5C,0x5C,0x54,0x54,0x54,0x54,0x54,0x05,0x0D,0x03,0x00,0x00,0x00,0x00,0x00,0x50,0x54,0x55,0x55,0x15,0x05,0x01,0x00,0x00,0x00,0x00,0xC0,0x70,0x50,0x54,0x55,0x57,0x55,0x15,0x35,0x05,0x0D,0x01,0x03,0x00,0x00,0xC0,0x40,0x70,0x50,0x5C,0x54,0x03,0x01,0x05,0x15,0xD5,0x55,0x54,0x50,0x57,0x54,0x50,0x40,0xC3,0x0D,0x35,0x55,0x55,0x57,0x5C,0x40,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x54,0x54,0x57,0xD5,0xD5,0x15,0x15,0x95,0x35,0x05,0x01,0x00,0x00,0x00,0x00,0x40,0x70,0x5C,0x57,0x55,0x15,0x05,0x0D,0x00,0x00,0x00,0x00,0x00,0x40,0x50,0x54,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x05,0x05,0x05,0x15,0x55,0x55,0x54,0x50,0x50};
    extern char font_base;

    void set_colors()
    {
    POKE(COLOR1,0xFF);
    POKE(COLOR2,0);
    }

    void set_font()
    {
    POKE(CHBAS,((unsigned int) &font_base)/256);
    }
    void draw_image()
    {
    unsigned char y = 1;

    for (chars=0;chars<sizeof(screen1);chars++) {
    video_ptr[chars]=screen1[chars];
    }
    }

    int main(void)
    {

    _graphics(0);
    set_font();

    video_ptr=(unsigned char*)(PEEKW( PEEKW(560)+4 ));
    draw_image();
    for(;;)
    {

    }
    return 0;
    }
    • 2: CommentAuthorMADRAFi
    • CommentTime15 Jan 2020
     
    Graph2font powinien zapisac ci 2 rodzaje plikow:
    nazwa.scr
    nazwa.fnt

    scr to zapisane znaki na ekranie czyli na ktorym miejscu ekranu jaki znak postawic, przy uzyciu standardowego fontu to beda losowe literki, cyfry i znaki specjalne

    fnt mozna miec w 2 wersjach.
    w 1 duzym pliku ktory bedzie mial wielkosc rowna wielokrotnosci rozmiaru fontu na atari (ktorym jest 1024 bajty) lub tez kazdy font w osobnym pliku
    Do pokazania grafiki wiec potrzebujesz tablice ze znakami z pliku scr

    W MAD-Pascal scr mozna zaladowac z pliku do tablicy lub miec juz ta tablice wrzucona w kodzie.
    Potem jedynie laduje resourcy typu font pod adres w pamieci i zmieniam ustawiony font na ten pod adresem pamieci.
    • 3: CommentAuthortebe
    • CommentTime15 Jan 2020
     
    prawy - górny narożnik w G2F, przycisk 'Save all data files'

    pamięć obrazu 40*24 = 960 bajtów (plik SCR), każdy bajt to numer znaku ATASCII, 0..127 znaki bez inwersu, 128..255 te same znaki ale w inwersie

    jeden zestaw znaków liczy sobie 1024 bajty (plik FNT), 128*8 = 1024, każde kolejne 8 bajtów z zestawu opisuje kształt znaku

    G2F zapisuje wszystkie zestawy jeden za drugim, stąd niekiedy większy rozmiar niż 1024 bajty

    plik TAB (24 bajty) to informacja, który zestaw w wierszu ustawić, najczęściej na przerwaniu DLI jest to realizowane
    • 4: CommentAuthorhubowski
    • CommentTime15 Jan 2020
     
    Dziekuje bardzo za odpowiedzi.

    Kompletnie nie zauwazylem pliku .scr. Teraz musze go jakos zaladowac (wyglada na binarny) i powinno byc z gorki! :)
    • 5:
       
      CommentAuthorKaz
    • CommentTime15 Jan 2020 zmieniony
     
    Cześć hubowski - pozwoliłem sobie wstawić w Twój post znaczniki [ code ] i [ /code ] (oczywiście bez spacji), żeby się program nie rozjeżdzał w przeglądarce. Teraz jest poprawnie formatowany. Polecam korzystać z tego udogodnienia, dodatkowo można wtedy program od razu zapisać sobie jako ATASCII.

    A nad jaką gierką pracujesz, zdradzisz szczegóły?
    • 6: CommentAuthorhubowski
    • CommentTime15 Jan 2020
     
    Dzieki Kaz! Szukalem za forumowym FAQ jak sformatowac kod ale nie moglem znalezc - bede pamietal :)

    Bedzie prosta przygodowka (o ktorej opowiadalem Ci przez telefon - to ja:), natomiast z racji tego ze poznaje dopiero bardziej doglebnie mozliwosci Atari, nie dopinam scenariusza bo byc moze beda konieczne ciecia :)
    • 7:
       
      CommentAuthorKaz
    • CommentTime16 Jan 2020 zmieniony
     
    A, to Ty Hubert! To witaj w swoim pierwszym wątku na AOL :D
    Gra zapowiada się bardzo dobrze, to trzymam kciuki za powodzenie projektu.

    PS. Skorzystam z okazji, żeby podpowiedzieć wszystkim nowym, że FAQ o forum (trochę nieaktualne, ale nie w zakresie znaczników) jest tutaj:

    ->link<-


    Takie aktualnie można robić "myki" na forum:

    [ code ] [ /code ] pozwala wstawić listing dowolnego programu. Program wyświetlony w ramce, z użyciem odpowiedniej czcionki jest oczywiście czytelniejszy niż gdyby był wstawiony jako zwykły tekst. Nie ma podkolorowania słów kluczowych.

    [ code basic ] [ /code ] również przeznaczone do wstawiania listingów, ale tym razem dla programów w Atari Basic i Turbo Basic XL. Wszystkie słowa kluczowe obu tych języków oraz użyte cyfry są wyróżniane kolorem, co ogromnie zwiększa czytelność listingu.

    [ code php ] [ /code ] podobnie jak powyższe pary znaczników, do wstawiania listingów, ale w językach „pecetowskich“. Kolorami wyróżnione są poszczególne elementy listingu.

    [ b ] [ /b ] włączenie pogrubienia tekstu.

    [ u ] [ /u ] włączenie podkreślenia tekstu.

    [ i ] [ /i ] włączenie kursywy czyli pochylenia tekstu.

    [ quote ] [ /quote ] to oczywiście sposób na cytowanie poprzedniej wypowiedzi. Proszę pamiętać o cytowaniu tylko najistotniejszego fragmentu, a nie całości, szczególnie gdy jest ona długa. Po co innym utrudniać zrozumienie, o co nam chodziło?

    [ quote Użytkownik ] [ /quote ] również pozwala cytować wcześniejszą wypowiedź, ale od razu ze wskazaniem jej autora.

    Wstawianie linków do innych stron nie wymaga stosowania żadnych znaczników w tekście, chociaż oczywiście znaczniki [ url= ] oraz [ /url ] działają. Wystarczy jednak podać link poprzedzony _http://_ albo po prostu wkleić link ze strony. Ukaże się nam napis ->link<- , a po najechaniu na niego kursorem myszy w pasku informacyjnym przeglądarki będzie widać cały adres.

    Podobnie jest z wklejaniem grafik, zdjęć i filmów. Jeżeli podamy link do zdjęcia na przykład w formacie jpg to właśnie to zdjęcie zostanie wyświetlone. Jeżeli będzie to film umieszczony na przykład na YouTube to od razu zostanie wyświetlony jego podgląd i możliwość odtwarzania.
    • 8: CommentAuthorMADRAFi
    • CommentTime16 Jan 2020
     
    Moze jeszcze sie zastanowisz czy nie lepiej pisac w MAD-Pascal :)

    Moglbys np uzyc narzedzia:

    ->link<-

    i exportowac do tablicy ktora ma 40 bajtow na wiersz
    • 9: CommentAuthorhubowski
    • CommentTime16 Jan 2020 zmieniony
     
    Sklamie, jesli powiem ze sie nie zastanawialem :) Doszedlem jednak do wniosku ze z racji ze pisze cos w C na inna platforme, kolejny jezyk to juz chyba za duzo :) C i tak musze odkurzac bo nie pisalem od czasow studenckich ale w Pascalu to ostatni raz chyba ze 22 lata temu :)

    Co do podlinkowanego narzedzia, jest fantastyczne. Nie tylko od strony funkcjonalnej ale interfejs tez jest super. Uzywam do przerabiania .scr'a na tablice w C. Wieczorem musze poczytac jak (i kiedy przelaczac charsety odczytane z .tab) :)
    • 10: CommentAuthorilmenit
    • CommentTime16 Jan 2020
     
    @hubowski - CC65 jest równie dobry jak MadPascal (a nawet generuje szybszy kod). Jak piszesz w C/C++/C# na inne platformy, to przesiadka na składnie Pascala nie jest przyjemna :)
    Ja w CC65 piszę dużo (w tym mam jeden właśnie otwarty projekt) i jak masz pytania, to dawaj :)
    Tu jest przykład prostej gry ze źródłami, która używa grafikę na fontach, muzykę i efekty dźwiękowe:
    ->link<-
    A jakbyś chciał bardziej skomplikowany przykład, to "większa gra" jest dostępna tutaj ->link<-
    • 11: CommentAuthorhubowski
    • CommentTime16 Jan 2020
     
    @ilmenit - dzieki! Czytalem kurs Twojego autorstwa i nie ukrywam ze pomogl mi "ruszyc" z cc65 dla Atari. Pobocznie jak tylko czas mi pozwala zapoznaje sie z architektura Atari, zeby jakos to efektywnie szlo. Z "C-podobnymi" jezykami mialem troche stycznosci, stad wybor cc65.
    • 12:
       
      CommentAuthorbocianu
    • CommentTime17 Jan 2020
     
    @ilmenit
    CC65 jest równie dobry jak MadPascal (a nawet generuje szybszy kod).


    Możesz podać przykłady w których generuje szybszy kod?
    Jestem serio bardzo ciekaw, bo moje doświadczenia z obydwoma tymi kompilatorami mówią coś zupełnie przeciwnego.
    • 13: CommentAuthorilmenit
    • CommentTime17 Jan 2020
     
    @bocianu - tu była dyskusja ->link<-
    W przykładach MadPascala w najnowszej wersji jest kod Sieve i ostatnio testowałem - nie poprawiło się od tamtego czasu.

    Kod w CC65 można dodatkowo zoptymalizować zastępując wykorzystany w kodzie tamtym wątku "register" ->link<- , zmiennymi dekladowanymi na zero page używając #pragma zpsym ->link<-
    • 14: CommentAuthorhubowski
    • CommentTime17 Jan 2020
     
    @ilmenit - pozwolilem sobie wyslac maila z kilkoma pytaniami, daj prosze znac czy doszedl. Troche utknalem w kwesti przelaczania charsetow :(
    • 15: CommentAuthorhubowski
    • CommentTime17 Jan 2020
     
    Kurcze, na taki wyslalem. Zerknij prosze w spam - jesli tam wyladowalo, musze poprawic rekordy w DNS :(

    Dzieki!
    • 16: CommentAuthorilmenit
    • CommentTime17 Jan 2020
     
    Już widzę, dałeś do tematu CC65 a miałem ustawiony filtr przenoszący wiadomości z takim tematem do specjalnego folderu (ze względu na subskrybcję mailowej grupy kompilatora cc65). Odpiszę dzisiaj.
    • 17: CommentAuthorhubowski
    • CommentTime17 Jan 2020
     
    Super, dzieki! Nie ma pospiechu, kiedykolwiek znajdziesz czas - bede wdzieczny :)
    • 18: CommentAuthortebe
    • CommentTime17 Jan 2020 zmieniony
     
    Ilmenit, mój błąd, nie aktualizowałem skompilowanej wersji SIEVE

    ->link<-

    w miarę możliwości proszę o kompilację aktualną wersją CC65
    • 19: CommentAuthorilmenit
    • CommentTime17 Jan 2020 zmieniony
     
    + zamienione "while" na "for", ponieważ to są pętle "for" (inicjalizacja zmiennej i na koniec jej inkrement), co teraz generuje troszkę lepszy kod.
    602 ticks (lub 604, zależy od emu i jego wersji - na dwóch kompach dostałem inny wynik, albo od czegoś w ustawieniach e.g. w jednym mam QMEGa).
    • 20: CommentAuthorilmenit
    • CommentTime17 Jan 2020 zmieniony
     
    @bocianu
    Możesz podać przykłady w których MadPascal generuje szybszy kod?
    • 21: CommentAuthorzbyti
    • CommentTime2 Feb 2020
     
    Z AA ->link<- bo tutaj się dyskusja urwała.

    C - 608 ticks (optimizations turned on)

    C - 856 ticks (optimizations turned off)

    Mad Pascal - 670 ticks (variables on ZEROPAGE, $DEFINE FAST)

    Mad Pascal - 752 ticks (standard)

    Compiled with the newest CC65 - 602 ticks.
    • 22:
       
      CommentAuthorbocianu
    • CommentTime2 Feb 2020
     
    @ilmenit: miałem ogólne wrażenie po napisaniu kilku programów w cc65, a potem w mp, że pewne rzeczy działaja szybciej i mam więcej czasu w ramce. Mogło to też wynikać z moich szczątkowej wiedzy na temat Atari w tamtym czasie, albo umiejętności w samym C, ale wrażenie pozostało :)

    jak wrócę z ferii to się chętnie tym pobawię i porównam, bo mam gdzieś na dysku te moje stare rzeczy.
    • 23:
       
      CommentAuthortdc
    • CommentTime3 Feb 2020
     
    Też jestem tym zainteresowany ;)
    • 24: CommentAuthorzbyti
    • CommentTime14 godzin temu zmieniony
     
    Bawię się właśnie Action!.

    Nie porównywałem dokładnie implementacji algorytmu ale w jednym przebiegu Mad Pascal (bez optymalizacji) wydaje się porównywalny do Action!