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 16:11 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 16:11
       
      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 18:11
       
      >> 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 20:11
       
      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 20:11
       
      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 10:11 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 18:11 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 10:12
       
      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 12:12
       
      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 09:12
       
      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 10:12 zmieniony
       
      Tu masz świetny tutorial programowania Atari ST:
      ->link<-
      Nie ma sensu pisać jeszcze raz coś, co już jest.
      • 13:
         
        CommentAuthorKaz
      • CommentTime30 Dec 2020 19:12
       

      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 22:12
       
      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 10:12 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 ;)