atarionline.pl Moja mała biblioteka dla Atari ST - 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: CommentAuthorlizard1982
    • CommentTime15 Nov 2020 zmieniony
     
    Od wczoraj tworzę własną bibliotekę (libc) dla Atari ST w asemblerze oraz języku C...

    Na razie mam zaimplementowane 3 procedury GEMDOS
    - write_str()
    - get_char()
    - pterm()

    oraz jedną procedurę XBIOS
    - setcolor()

    Jak już będę miał coś konkretniejszego, to projekt założę na Githubie.

    Screen:
    pasteboard.co/JAuuTAK.png

    #include "gemdos.h"
    #include "xbios.h"
    #include "types.h"

    s16 old_color;

    int main()
    {
    /* ustaw czerwone tło */
    old_color = setcolor(0xf00, 0);

    write_str("Hello world\0");

    /* czekaj na klawisz */
    getchar();

    /* przywróć oryginalne tło */
    setcolor(old_color, 0);

    pterm();

    return 0;
    }


    Najnowsza procedura:
    _setcolor

    move.l (4,a7), d0 ; arg1 (color value)
    move.l (8,a7), d1 ; arg2 (color register)

    move.w d0, -(a7) ; color value
    move.w d1, -(a7) ; color register

    move.w #7, -(a7) ; function 7; Setcolor
    trap #14 ; call XBIOS

    addq.l #6,a7 ; clean up the stack
    rts
    • 2: CommentAuthorbob_er
    • CommentTime15 Nov 2020
     
    Pomysł zacny. Pytania:
    1. Czy będziesz robił wersję dla supervisora (czyli grzebanie bezpośrednio po rejestrach?, bez XBIOSa)?
    2. Jakie rozdzielczości planujesz wspierać?
    3. Przydatny byłby printf, wraz z interpretacją (przynajmniej stringi i typy całkowite (16 i 32bity)).
    4. Czy znasz jakiś patent, by systemowo wyłączyć pasek MENU?
    Podmieniam po prostu grafikę, ale jak badam stan kursora myszy, bo istniejące MENU czasem przeszkadza. W Kupcu to było niegroźne, ale mam inny projekt na boku, i tam to przeszkadza bardziej.
    5. Może jakieś wsparcie dla fontów o różnych rozmiarach (6x8, 8x8, 16x16, etc...)?
    6. Jakieś wsparcie dla plików konfiguracyjnych?
    Tyle myśli nieuczesanych na teraz.
    • 3: CommentAuthorlizard1982
    • CommentTime15 Nov 2020
     
    >> 1. Czy będziesz robił wersję dla supervisora (czyli grzebanie bezpośrednio po rejestrach?, bez XBIOSa)?

    Tak, planuję... To w sumie bułka z masłem będzie...
    Napisałem to teraz na brudno odpowiadając na Twoje pytania...

    _supervisor_setcolor
    move.w (4,a7), d0 ; arg1 (color value)
    move.w (8,a7), d1 ; arg2 (color register)
    move.w  d0, $ff8240 + (d1 * 2)
    ret


    >> 2. Jakie rozdzielczości planujesz wspierać?

    Wszystkie, z priorytetem dla rozdzielczości LOW.

    >> 3. Przydatny byłby printf, wraz z interpretacją (przynajmniej stringi i typy całkowite (16 i 32bity)).

    Dodaję do listy TODO.

    >> 4. Czy znasz jakiś patent, by systemowo wyłączyć pasek MENU?

    Dopiero się uczę programować Atari ST, więc nie... :)

    >> ale jak badam stan kursora myszy, bo

    Właśnie, dodaję obsługę myszki do listy TODO

    >> 5. Może jakieś wsparcie dla fontów o różnych rozmiarach (6x8, 8x8, 16x16, etc...)?

    W przyszłości... :D

    >> 6. Jakieś wsparcie dla plików konfiguracyjnych?

    Coś więcej? Jakiś przykład?
    Właśnie, dodaję obsługę plików do listy TODO.

    Jak zakoduję coś więcej to tutaj w tym poście będę dawał znać.

    Mam pytanie i dylemat, czy procedury mają być w dwóch wersjach - w trybach użytkownika i supervisor, czy tylko w wersji supervisor? Jak np. w przypadku procedury setcolor()...
    • 4: CommentAuthorbob_er
    • CommentTime15 Nov 2020
     
    Ja w ST też kozakiem nie jestem, więc luz ;)
    1. Przydatna też może być funkcja do ustawiania całej palety.
    4. Ok. Też właśnie nie wiem, jak to wyłączyć.
    6. To może być cokolwiek, nawet zwykły plik INI np:
    OPCJA1 = WARTOSC
    OPCJA2 = COS_INNEGO
    OPCJA3 = 123
    • 5: CommentAuthorbob_er
    • CommentTime15 Nov 2020
     
    Co do (non)supervisor - to zależy od tego, gdzie chcesz użyć tej biblioteki.
    W obrębie jednego programu raczej to będzie jeden tryb.
    • 6: CommentAuthorjpacanowski
    • CommentTime28 Nov 2020 zmieniony
     
    Aktualizacja biblioteki dla języka C (do tworzenia gier, dem, grafiki) na Atari ST/E...
    W przyszłości obsługa dźwięku, rysowanie okienek (GUI), obsługa plików, itp.

    Przykładowy kod rysujący 3 linie w 3 różnych kolorach oraz wypełniony niebieskim kolorem prostokąt.
    Cały skompilowany kod dema zajmuje 580 bajtów.

    #include "gemdos.h"
    #include "xbios.h"
    #include "screen_low.h"
    #include "palette.h"
    #include "types.h"

    u16 old_res;
    u32 *screen;

    int main()
    {
    /* pobierz adres pamięci ekranu */
    screen = get_physbase();

    /* zapisz aktualną rozdzielczość */
    old_res = get_resolution();

    /* zapisz aktualną paletę kolorów */
    save_palette();

    /* ustaw rozdzielczość na ST LOW */
    set_resolution(0);

    /* wyczyść ekran */
    clrscr(screen);

    /* ustaw czerwone tło */
    setcolor(0x777, 0);

    /* wyświetl napis */
    write_str("Press any key to Quit...\0");

    /* ustaw paletę kolorów - chcemy 3 kolory */
    setcolor(0x700, 11); /* red */
    setcolor(0x070, 12); /* green */
    setcolor(0x007, 13); /* blue */

    /* narysuj 3 linie */
    for(int x=0; x<20; x++) {
    low_put_pixel(x, 0, 11, screen); /* czerwona */
    }

    for(int x=0; x<20; x++) {
    low_put_pixel(x, 20, 12, screen); /* zielona */
    }

    for(int x=0; x<20; x++) {
    low_put_pixel(x, 40, 13, screen); /* niebieska */
    }

    /* wyświetl wypełniony prostokąt */
    low_draw_rect_filled(30, 30, 80, 80, 13, screen);

    /* czekaj na klawisz */
    getchar();

    /* SPRZĄTAMY PO SOBIE I ZOSTAWIAMY WSZYSTKO TAK JAK BYŁO WCZEśNIEJ */

    /* przywróć poprzednią rozdzielczość */
    set_resolution(old_res);

    /* przywróć początkową paletę kolorów */
    restore_palette();

    /* zakończ program i wróć do systemu */
    pterm();
    return 0;
    }


    W przypadku gry:
    ...
    /* GŁÓWNA PĘTLA GRY */
    while(1)
    {
    vsync(); /* synchronizacja pętli z wiązką odświeżania ekranu - wykonuj pętlę 50 (PAL) / 60 (NTSC) razy na sekundę */

    clrscr(); /* wyczyść ekran */

    //ProcessInput();

    //DrawBackground();
    //DrawCharacter();
    }
    ...
    • 7: CommentAuthorjpacanowski
    • CommentTime30 Nov 2020 zmieniony
     
    Grafika w pełni zaprogramowana. W tym, pełna obsługa wszystkich trzech trybów graficznych, czyli LOW, MEDIUM oraz HIGH.

    Zrzut ekranu:
    ->link<-

    Z zaprogramowaniem bitplanów były niezłe przeboje, ale udało się...

    Czekam na uwagi. Nikt nie odpisuję i się zastanawiam, czy tu w ogóle dalej przedstawiać ten projekt i nowości, chociaż z pisania tej biblioteki nie mam zamiaru póki co rezygnować. Interesuje was w ogóle to?

    Docelowo chcę w tej bibliotece napisać jakąś grę, być może ze wstawkami w asemblerze przy bardziej krytycznym kodzie wymagającym dużej optymalizacji - zwł. że asembler Motorolki mi się bardzo podoba, i w ciągu jego kilkudniowej nauki, piszę w nim często szybciej kod niż w samym C, który znam bardzo dobrze.

    Pisząc tą bibliotekę, poznaję również coraz lepiej architekturę dużego Atari, na którym się wychowałem.

    Procesor ma 8 32-bitowych rejestrów danych ogólnego przeznaczenia (D0 - D7) oraz 8 32-bitowych rejestrów adresowych (A0 - A7). To jest to... W asemblerze na x86 to rzeźnia...

    Pobocznie, piszę mały projekt w czystym asemblerze. Póki co, bliżej temu do dema niż gry.

    /* ustaw paletę kolorów */
    setcolor(0x700, 11); /* red */
    setcolor(0x070, 12); /* green */
    setcolor(0x007, 13); /* blue */

    /* 2 piksele czerwone */
    low_setPixel(0, 0, 11, screen);
    low_setPixel(1, 0, 11, screen);

    /* 2 piksele zielone */
    low_setPixel(2, 0, 12, screen);
    low_setPixel(3, 0, 12, screen);

    /* 2 piksele niebieskie */
    low_setPixel(4, 0, 13, screen);
    low_setPixel(5, 0, 13, screen);

    /* zielony prostokąt */
    low_draw_rect_filled(20, 20, 180, 180, 12, screen);

    /* czerwony prostokąt */
    low_draw_rect_filled(40, 40, 80, 80, 11, screen);
    • 8:
       
      CommentAuthorgaltron
    • CommentTime1 Dec 2020
     
    Temat ciekawy i bardzo rozwojowy. Ja osobiście nie miałem nigdy smykałki do pisania programów. Wolę zabawy ze sprzętem, jakieś przeróbki, dodatki, itp. Czasem jakieś modyfikacje typu dodanie dźwięku do gier w Basic-u na małe Atari.
    • 9:
       
      CommentAuthorhospes
    • CommentTime1 Dec 2020
     
    Ja też czytam. Każdy temat jak programować jest ciekawy. Plus też, że autor "pod ręką" i może odpowiadać.
    ps. dłubię sobie wieczorami;)
  1.  
    Dzięki za odzew... ;)

    Dodam jeszcze kilka ważniejszych procedur, zrobię refaktoryzację i optymalizację kodu, stworzę dokumentację, i wtedy udostępnię na Githubie bibliotekę.

    Teraz chyba dodam obsługę klawiatury, potem dźwięku.
    • 11:
       
      CommentAuthorhospes
    • CommentTime2 Dec 2020
     
    To, jak już dłubiesz swoje demo,grę, może jakiś tutek w formie, co jak przygotować? Zawsze jedno źródło więcej do podstaw ass'a na Atari ST.
    • 12: CommentAuthorlizard1982
    • CommentTime22 Dec 2020 zmieniony
     
    Tu masz świetny tutorial programowania Atari ST:
    ->link<-
    Nie ma sensu pisać jeszcze raz coś, co już jest.
    • 13:
       
      CommentAuthorKaz
    • CommentTime30 Dec 2020
     

    jpacanowski:

    Czekam na uwagi. Nikt nie odpisuję i się zastanawiam, czy tu w ogóle dalej przedstawiać ten projekt i nowości, chociaż z pisania tej biblioteki nie mam zamiaru póki co rezygnować. Interesuje was w ogóle to?


    Bierz też pod uwagę, że programistów ST/STE w Polsce jak na lekarstwo, więc nie spodziewaj się tłumów. Ale mniej również interesuje temat i czytam, co piszesz :)
    • 14: CommentAuthorbob_er
    • CommentTime30 Dec 2020
     
    Kilka groszy ode mnie:
    1. Ja też ten temat śledzę. Np. mi osobiście bardzo by się przydał w miarę samodzielny printf (do debugowania), ale sam za leniwy jestem, żeby go napisać. A tutaj znalazł się ochotnik :).
    2. Sam za jakiś wielki autorytet się nie uznaję, ale w pisaniu kolejny raz czegoś co już istnieje (albo jest coś podobne) nic złego nie widzę. Trzymając się tej zasady nie powstała by połowa gier i >90% dem.
    3. W zasadzie też nic mi do tego, co kto ze swoim czasem robi.
    • 15:
       
      CommentAuthorhospes
    • CommentTime31 Dec 2020 zmieniony
     
    jpacanowski:
    pisz, też czytam i patrzę. Chociaż mnie bardziej dopinguje w stylu "Ktoś coś robi, robię i ja". Ja czytając Twój kurs, ponownie wróciłem do STOSa ;)
    Ale do ass'a też na pewno się będę przymierzał.
    edit: chociaż wolałbym, żebyś pisał grę na STE ;)