atarionline.pl MAD-Pascal - Początki - 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:
         
        CommentAuthorgalu
      • CommentTime1 Oct 2019 11:10
       
      Myślę, że mogło chodzić o wykorzystanie takiego zapisu:
      type SampleType = (A, B, C, D);

      var dummy: array[0..5, 0..9] of SampleType = (
      (D, D, D, D, D, D, D, D, D, D),
      (D, D, D, D, D, D, D, D, D, D),
      (D, D, D, D, D, D, D, D, D, D),
      (D, D, D, D, D, D, D, D, D, D),
      (D, D, D, D, D, D, D, D, D, D),
      (D, D, D, D, D, D, D, D, D, D)
      );

      begin
      end.

      (14,33) Error: Expected another 4 array elements

      Pomogła zamiana
      var dummy: array[0..5, 0..9] of SampleType = (
      na
      var dummy: array[0..5, 0..9] of byte = (

      (w większym programie ten [tj. podobny] fragment kodu czasem kompilował się poprawnie i działał też - wydawałoby się - poprawnie)
      • 2: CommentAuthortebe
      • CommentTime1 Oct 2019 12:10 zmieniony
       
      nie testowałem czegoś tak pokrętnego :) ja tu widzę potrzebę użycia ord(D), ale to też nie pomoże

      po dodaniu jakiegoś kodu przeszła kompilacja ale nie został wygenerowany kod wynikowy

      zdecydowanie zastosowanie typu wyliczeniowego tutaj nie działa
      • 3:
         
        CommentAuthorsun
      • CommentTime1 Oct 2019 15:10
       
      @bocianu: Tak, zbildowałem za pomocą fpc zarówno mp jak i mads, wtedy się zaczęło kompilować. Niemniej coś idzie w maliny ;)
      Podeślę dziś do tebe ten mój projekt. Aktualnie wróciłem do 160.
      • 4: CommentAuthorMADRAFi
      • CommentTime1 Oct 2019 20:10
       
      Zmiany w sposobie obslugi tablicy typu record :)
      Z tego co pamietam jest roznica pomiedzy 1.6.0 i 1.6.2 :)
      Ja i Dely wyrywalismy wlosy probujac znalesc dlaczego sie nie kompiluje.
      • 5:
         
        CommentAuthorsun
      • CommentTime2 Oct 2019 09:10
       
      W przypadku Dely'ego to chyba problematyczny temat, takie wyrywanie :)
      W moim przypadku @tebe wczoraj pozamiatał. Dzięki raz jeszcze.
      Problem oczywiście był u mnie a nie w super kompilatorze :)
      • 6: CommentAuthorkski
      • CommentTime2 Oct 2019 10:10
       
      Albert jest mocno posunięty w pracach i Mad Pascal sprawuje się baz zarzutu. Całkowicie zintegrowany assembler a więc możliwość przepisywania na asembler ważnych funkcji lub fragmentów kodu krok po kroku, po wcześniejszym ich dopracowaniu i przetestowaniu, to możliwość której nie da się przecenić.

      Natomiast ogólnie programując dla atari rzeczywiście łatwo popełnić błędy trudniej je znaleźć.
      • 7:
         
        CommentAuthorsun
      • CommentTime2 Oct 2019 13:10
       
      Stare dzieje, ale TP6.0 też pozwalał wstawki asm robić i klon arkanoida sobie wysmażyłem, ale to było... hoho ho, albo i jeszcze dawniej :)

      Narzędzie jest super, nie wszystko trzeba orać w asm, to zdecydowanie przyspiesza pracę a szczególnie prototypowanie.
      • 8:
         
        CommentAuthorgalu
      • CommentTime12 Oct 2019 21:10
       
      Czy wynikowe pliki wykonywalne można uznać za zoptymalizowane pod względem rozmiaru, czy mogą być podatne na potraktowanie jakimś dodatkowym cruncherem? Jakie narzędzie ewentualnie wypróbować (nie znam żadnych na Atari)?
      • 9: CommentAuthorVidol
      • CommentTime12 Oct 2019 22:10
       
      Sprobuj Super Packera 6.1. Masz w nim 3 rozne kompresory do wyboru.

      ->link<-
      • 10: CommentAuthorzbyti
      • CommentTime3 Nov 2019 11:11 zmieniony
       
      Czy któryś z Panów mógłby mi w jakiś wymierny sposób przedstawić jaka jest wydajność Mad Pascala w stosunku do ASM w obliczeniach?

      Znalazłem źródła Turbo Chess napisane w Turbo Pascalu 3.0 i 4.0 ->link<- i może pokusił bym się o konwersję jeżeli utrata wydajności spowodowana pisaniem w wysokopoziomowym języku nie jest aż tak duża.

      Pisanie sensownego programu szachowego dla 8-bit w języku innym niż ASM nie jest precedensem. Panowie odpowiedzialni za genialnego Mephisto III ->link<- postanowili napisać swój program dla CPU 1806 ->link<- (będącym ok 2.5 raza wolniejszym od 6502) w języku CDL2 (Compiler Description Language).

      Proszę o komentarz :)
      • 11: CommentAuthortebe
      • CommentTime3 Nov 2019 14:11 zmieniony
       
      Zbyti, nie spróbujesz to się nie dowiesz

      najpierw spróbuj to skompilować Free Pascalem (FPC), użyj przełącznika -MTp dla FPC

      Mad Pascal (MP) nie ma takiego przełącznika, a jest 32 bitowy jak domyślnie FPC, musisz potem pozmieniać typy ze znakiem, INTEGER -> SMALLINT, LONGINT -> INTEGER

      dodatkowo na PC masz 80 znaków w linii, taki C128 ma taki tryb natywnie, na XE/XL jest to na VBXE, w przykładach 'solitario' wymagało przystosowania do 40 znaków na wiersz

      ogólnie MP nie wprowadza swojej składni, ma być kompatybilny z FPC, więc możesz pisać kod na PC, oczyścić go, sprowadzić do ograniczeń MP a potem kompilować dla XE/XL

      w przykładach MP są programy które możesz kompilować zamiennie FPC <> MP, uruchomiać na MAC,PC <> XE/XL
      • 12: CommentAuthorzbyti
      • CommentTime3 Nov 2019 15:11 zmieniony
       
      @tebe dzięki za odpowiedź! :)

      tebe:

      nie spróbujesz to się nie dowiesz

      No właśnie moje pytanie dotyczyła bardziej czy w Twoim odczuciu jako praktyka w ogóle warto próbować ten rodzaj oprogramowania (kojarzącego się z wykorzystaniem każdego cykla) za pomocą tego narzędzia.

      Nie miałem zamiaru skompilować kodu Turbo Chess na A8 tylko pisać od zera to co zrozumiem z kodu Sargona I i Turbo Chess za pomocą czegoś wygodniejszego niż ASM, którego też bym musiał się nauczyć.

      Dobrze, skorzystam z każdej rady jaką dostanę, także spróbuję na ten moment w ogóle postawić sobie środowisko.

      W Turbo Pascalu 7.0 pisałem ze 20 lat temu...
      • 13: CommentAuthortebe
      • CommentTime3 Nov 2019 15:11 zmieniony
       
      podejrzałem ten GameWorks o którym się tutaj teraz dowiedziałem :)

      pewne poprawki są wymagane aby przenieść np. GO-MOKU do MP, ten akurat FPC trawi bezboleśnie

      tablice w MP są od 0.., maksymalnie dwu-wymiarowe, brak typu określającego zakres X..Y, nazwa pliku inkludowanego nie może zawierać znaku '-'

      to takie drobnostki które na szybko zauważyłem
      • 14:
         
        CommentAuthorbocianu
      • CommentTime3 Nov 2019 15:11
       
      Życzę powodzenia i służę pomocą jak coś. Na szachach znam się słabo, ale madpascala mecze już kilka lat.

      Tu masz poradnik jak zacząć:

      ->link<-
      • 15: CommentAuthorzbyti
      • CommentTime3 Nov 2019 15:11 zmieniony
       
      @bocianu dziękuję za poradnik, przeczytam.

      Ja w szachy tylko trochę gram. Spora cześć tych co pisali silniki szachowe w epoce to doktoranci fizyki :D Także bardzo mnie to onieśmiela ;) Przy nich to cienki Bolek jestem ;) ale trzeba gonić swoje marzenia ;D Te szachy nie muszą być tak dobre jak ich, jak będą grały chociaż na poziomie 1200+ to odtrąbię sukces :D

      @tebe szybko ogarniasz ;)
      • 16: CommentAuthorzbyti
      • CommentTime3 Nov 2019 20:11 zmieniony
       
      @bocianu tutorial OK, wszystko cyka, dzięki :) No i za BLIBS też dzięki :D

      @tebe bez wazeliny genialna rzecz! :D Dla mnie ludzie którzy piszą kompilatory są genialni ;)
      • 17: CommentAuthorMADRAFi
      • CommentTime3 Nov 2019 23:11
       
      Uwaga to wciaga. Ostatni rok siedzialem tylko w Pascalu i kompilowalem :D
      • 18: CommentAuthorzbyti
      • CommentTime3 Nov 2019 23:11
       
      @MADRAFi sądząc po Twojej nowej grze z niezłym sukcesem! :D
      • 19: CommentAuthorzbyti
      • CommentTime4 Nov 2019 16:11 zmieniony
       
      To tak na początek ode mnie, w formie żartu, mój pierwszy program w Mad Pascalu ;)

      Oczywiście mógłbym nie malować czarnych linii ale dla zwięzłości kodu niech będzie, w końcu to ćwiczenia ;)

      Teraz się pobawię i zobaczę o ile uda mi się przyspieszyć rysowanie :)

      Ciekawe czy ktoś się pokusi wrzucić tutaj to co jest "prawdziwym" wynikiem kodu ;)
      • 20: CommentAuthorMADRAFi
      • CommentTime4 Nov 2019 17:11
       
      Fajne. A zobacz sobie zrodlo datamatrix w przykladach.
      nie wiem czy tamten kod nie generuje sie szybciej.
      • 21: CommentAuthorzbyti
      • CommentTime4 Nov 2019 19:11 zmieniony
       
      @MADRAFi dzięki za rekomendację :) mam parę pomysłów jak jeszcze to przyspieszyć, więc je jeszcze wdrożę potem rzucę okiem na ten matrix i ew. przepiszę program ;)
      • 22:
         
        CommentAuthorbocianu
      • CommentTime4 Nov 2019 19:11 zmieniony
       
      Fajne :D

      Ale kilka rad o ile mogę

      1. Nie musisz inicjować tablicy QR procedurą, możesz ją zainicjować przy deklaracji:
      qr: array[0..34] of string = (
      '11111111111111111111111111111111111',
      '10000000100010100111111100100000001',
      '10111110100011010000011111101111101',
      '10100010101001000100111001101000101',
      '10100010100101000110110101101000101',
      '10100010111111001110110100101000101',
      '10111110101100100100001001101111101',
      '10000000101010101010101010100000001',
      '11111111110110011000111100111111111',
      '10011000111101001101010100110100001',
      '10011001010010110010011111011001101',
      '10100010101100111001110011111010011',
      '10101111011001010100111101011111001',
      '11101000001010000001001010111100111',
      '10100011100111111000101100000001101',
      '10110000101011000000111001110010011',
      '10011001001010111001111010100001001',
      '10110110001100100100000111011011111',
      '10110111010110001110101010111101101',
      '10111100001001110101110011111010011',
      '10010001011110110101100011110001111',
      '11100010100101011101000100001011111',
      '10010101010010110010110111011011101',
      '11101100100111100011100011111011011',
      '11110111101001011001110101111101111',
      '10001010110001111101000110000010011',
      '11111111100110001001111110111011011',
      '10000000110111010101100010101000111',
      '10111110101111010100100000111001001',
      '10100010100010001100100110000011101',
      '10100010110101010010011110111111001',
      '10100010111010100001110010111101011',
      '10111110100100000101110011000001111',
      '10000000101000101011000111101111101',
      '11111111111111111111111111111111111'
      );


      2. Szybsze niż rysowanie kwadracików 4x4px w trybie 8 byłoby użycie pojedynczego piksela w trybie 4 lub 5 :D obraz będzie identyczny, a z pewnością narysuje się dużo szybciej. Odpadają Ci też wtedy 2 operacje dzielenia i 3 dodawania. Będzie o niebo szybciej.
      • 23: CommentAuthorzbyti
      • CommentTime4 Nov 2019 19:11 zmieniony
       
      @bocianu dziękuję, zaraz postaram się wdrożyć te rady :)

      Na razie nie rysuję czarnych linii bo tła zmieniać na inny kolor nie będę ;)

      begin
      InitGraph(8);
      TextBackground(0);
      SetColor(1);

      for y := 0 to 34 do begin
      binLine := qr[y];
      newYLine := y * 4;
      for x := 1 to 35 do begin
      boxStart := x * 4;
      boxEnd := boxStart + 3;
      if (binLine[x] = '1') then begin
      drawBox(boxStart, boxEnd, newYLine);
      end;
      end;

      ReadKey;
      end

      Nie znam się niestety na trybach, obadam. Postaram się zrobić tak jak radzisz :)
      • 24: CommentAuthorVidol
      • CommentTime4 Nov 2019 19:11
       
      • 25: CommentAuthorzbyti
      • CommentTime4 Nov 2019 20:11 zmieniony
       
      @Vidol ha! :D

      @bocianu po wprowadzeniu zmian jakie proponowałeś renderuje się w sekundę :D Dzięki!

      uses crt, fastgraph;

      var x, y: byte;
      binLine: string;
      qr: array[0..34] of string = (
      '11111111111111111111111111111111111',
      '10000000100010100111111100100000001',
      '10111110100011010000011111101111101',
      '10100010101001000100111001101000101',
      '10100010100101000110110101101000101',
      '10100010111111001110110100101000101',
      '10111110101100100100001001101111101',
      '10000000101010101010101010100000001',
      '11111111110110011000111100111111111',
      '10011000111101001101010100110100001',
      '10011001010010110010011111011001101',
      '10100010101100111001110011111010011',
      '10101111011001010100111101011111001',
      '11101000001010000001001010111100111',
      '10100011100111111000101100000001101',
      '10110000101011000000111001110010011',
      '10011001001010111001111010100001001',
      '10110110001100100100000111011011111',
      '10110111010110001110101010111101101',
      '10111100001001110101110011111010011',
      '10010001011110110101100011110001111',
      '11100010100101011101000100001011111',
      '10010101010010110010110111011011101',
      '11101100100111100011100011111011011',
      '11110111101001011001110101111101111',
      '10001010110001111101000110000010011',
      '11111111100110001001111110111011011',
      '10000000110111010101100010101000111',
      '10111110101111010100100000111001001',
      '10100010100010001100100110000011101',
      '10100010110101010010011110111111001',
      '10100010111010100001110010111101011',
      '10111110100100000101110011000001111',
      '10000000101000101011000111101111101',
      '11111111111111111111111111111111111'
      );

      begin
      InitGraph(5);
      TextBackground(0);
      SetColor(1);

      for y := 0 to 34 do begin
      binLine := qr[y];
      for x := 1 to 35 do begin
      if (binLine[x] = '1') then begin
      PutPixel(x,y);
      end;
      end;
      end;

      ReadKey;
      end.
      • 26:
         
        CommentAuthormav
      • CommentTime4 Nov 2019 20:11
       
      A to przypisanie do binline to konieczne?
      QR[y][x] by nie wystarczyło?
      Tak z ciekawości bo pojińcia nie mam ;-)
      • 27: CommentAuthorzbyti
      • CommentTime4 Nov 2019 20:11
       
      @mav to tablica jednomiarowa typu string. w JS czy PHP pewnie by cyknęło takie wywołanie ale tutaj masz od razu błąd kompilacji:

      hello_qr_v2.pas (52,13) Error: -- under construction --
      • 28:
         
        CommentAuthormav
      • CommentTime4 Nov 2019 20:11
       
      Pech ;-)
      Ale pamietam, że któryś z języków dokładnie taką operację umożliwiał, c# może? Wiem że używałem, dokładnie to była iteracja po poszczególnych znakach w tablicy stringów
      • 29:
         
        CommentAuthorbocianu
      • CommentTime4 Nov 2019 20:11
       
      Gdybyś zrobił to na bajtach zamiast stringa to by pykło, bo tablica dwuwymiarowa bajtów już działa od jakiegoś czasu.
      Ficzer z iterowaniem po tablicy stringów chyba nie działa (jeszcze), co wnioskuje po komunikacie błędu.
      Ale to najlepiej jak się Tebe wypowie.
      • 30: CommentAuthorzbyti
      • CommentTime4 Nov 2019 21:11 zmieniony
       
      @bocianu OK zrobię na bajtach.

      Wygodniej było mi robić tę strukturę na stringach, próbowałem ogarnąć QR jako base64 ale MP nie wspiera tych bibliotek.
      • 31: CommentAuthorzbyti
      • CommentTime4 Nov 2019 23:11 zmieniony
       
      @bocianu po zamianie na dwuwymiarową tablice bajtów znaczne spowolnienie względem jednowymiarowych stringów. Trochę mnie to martwi bo szachy kojarzą mi się właśnie z dwumiarowymi strukturami :(

      begin
      InitGraph(5);
      TextBackground(0);
      SetColor(1);

      for y := 0 to 34 do begin
      for x := 0 to 34 do begin
      if (qr[y][x] = 1) then begin
      PutPixel(x,y);
      end;
      end;
      end;

      ReadKey;
      end.

      Zostaję przy stringach ;) a temat QR zostawiam. Dla tych co jeszcze nie uruchomili skanerów załącznik ;)
      • 32:
         
        CommentAuthorbocianu
      • CommentTime5 Nov 2019 07:11
       
      A to dziwne. Wydaje mi się, że nie powinno być wolniej. Aż to z ciekawości sprawdzę, jak wrócę z pracy...
      • 33: CommentAuthorMADRAFi
      • CommentTime5 Nov 2019 08:11
       
      Kazda 2 wymiarowa tablice mozesz zapisac w 1 wymiarowej.
      Musisz tylko potem sobie wyliczyc offset o ktory masz sie przesunac by odczytac dana wartosc.
      1 wymiarowe tablice beda szybsze w iteracji niz 2 wymiarowe.
      • 34: CommentAuthortebe
      • CommentTime5 Nov 2019 08:11 zmieniony
       
      obliczanie indeksu dla jednowymiarowej tablicy tab[a]
      [0..x] = a * DataSize[AllocElementType]

      obliczanie indeksu dla dwuwymiarowej tablicy tab[a,b]

      [0..x, 0..y] = a * ((y+1) * DataSize[AllocElementType]) + b * DataSize[AllocElementType]

      p.s.
      wstaw dyrektywę ($f mem_page}

      {$f $a0} // fastmul at page $a0 ($a000)
      • 35: CommentAuthorilmenit
      • CommentTime5 Nov 2019 09:11
       
      Zakładam, że MP potrafi wygenerować listing kodu ASM. Wrzuć wygenerowany dla stringów i 2D, zobaczymy jakie są różnice a może będzie też wskazówka dla autora jak usprawnić kompilator.
      • 36: CommentAuthorzbyti
      • CommentTime5 Nov 2019 09:11 zmieniony
       
      @bocianu & MADRAFi jr. dzięki za wskazówki i rady! :D

      @tebe ja robię na razie rozpoznanie bojem, nie przeczytałem jeszcze całej dokumentacji jaką napisałeś do MP, nie mówiąc o Free Pascalu. Jeszcze trochę potrenuję to przeczytam.

      @ilmenit jeżeli coś Ci to powie (autorowi kompilatora na pewno) to proszę, wrzucam w załącznik:

      V2 -> stringi; V3 -> 2D bajty.
      • 37: CommentAuthortebe
      • CommentTime5 Nov 2019 12:11
       
      Zbyti, używasz starej wersji kompilatora, nowa wersja zauważalnie wygeneruje krótszy/szybszy kod

      ->link<-
      • 38: CommentAuthorzbyti
      • CommentTime5 Nov 2019 13:11 zmieniony
       
      @tebe jak stawiałem sobie środowisko 2 dni temu to wszystko pobrałem z oficjalnej strony:

      - mads_209.7z
      - mp_160.7z

      Skoro na githubie są nowsze stabilne wersje to już pobieram, dzięki :)

      EDIT: no niestety, mam takie coś przy ostatniej wersji z github

      mp hello_qr_v3.pas 
      Mad Pascal Compiler version 1.6.2 [2019/11/05] for 6502
      Compiling hello_qr_v3.pas
      An unhandled exception occurred at $00000000004769A2:
      EAccessViolation: Access violation
      $00000000004769A2
      $00000000004A6533
      • 39: CommentAuthortebe
      • CommentTime5 Nov 2019 13:11
       
      szybkość dostępu do tablic zależna jest od ich rozmiaru, jeśli indeks nie przekracza 256 bajtów i zostały jawnie zadeklarowane, to dostęp będzie najszybszy

      poniżej przykład deklaracji tablic spełniających kryterium:
      tab: array [0..255] of byte;
      tab2: array [0..127] of word;
      tab3: array [0..63] od cardinal;
      tab4: array [0..15, 0..15] of byte;
      tab5: array [0..7, 0..15] of byte;
      tab6: array [0..10, 0..10] of word;
      tab7: array [0..7, 0..7] of cardinal;


      nie jawnie, oraz tablice z indeksem powyżej 256
      tab: array [0..0] of byte;
      tab2: array [0..255] of cardinal;
      itp.
      • 40: CommentAuthortebe
      • CommentTime5 Nov 2019 13:11
       
      to może jeszcze

      ->link<-
      • 41: CommentAuthorzbyti
      • CommentTime5 Nov 2019 13:11 zmieniony
       
      Obie rzeczy mam w tej chwili pobrane z githuba:

      Mad Pascal Compiler version 1.6.2 [2019/11/05] for 6502
      mads 2.1.0

      Log błędu kompilacji "hello_qr_v3.pas" jest we wcześniejszym poście.

      To ja wracam do wersji "Mad Pascal Compiler version 1.6.0" aż @tebe da znać co nie bangla ;)
      • 42: CommentAuthorMADRAFi
      • CommentTime5 Nov 2019 13:11
       
      A wklej calosc z kompilacji samym pascalem.
      • 43: CommentAuthorMADRAFi
      • CommentTime5 Nov 2019 13:11
       
      1.6.0 ma troszke pozmieniane. Sprawdz jak deklarujesz tablice.

      Ale memory violation to nie widzialem jeszcze, moze Tebe cos pomoze :)
      • 44: CommentAuthorzbyti
      • CommentTime5 Nov 2019 13:11 zmieniony
       
      @MADRAFi nie sądzę, że coś robię źle, błąd jest w kompilatorze.

      To co poniżej daje ten sam błąd dla wersji 1.6.2 a przecież nic tam nie ma, a deklaracja zgodna z wytycznymi @tebe.

      uses crt, fastgraph;

      var qr: array [0..255] of byte;

      begin
      InitGraph(5);
      TextBackground(0);
      SetColor(1);

      ReadKey;
      end.

      mp hello_qr_v4.pas
      Mad Pascal Compiler version 1.6.2 [2019/11/05] for 6502
      Compiling hello_qr_v4.pas
      An unhandled exception occurred at $00000000004769A2:
      EAccessViolation: Access violation
      $00000000004769A2
      $00000000004A6533

      • 45: CommentAuthorzbyti
      • CommentTime5 Nov 2019 14:11 zmieniony
       
      @tebe przepraszam za zamieszanie, kliknąłem w link jaki podałeś do githuba i pobrałem bez patrzenia od razu paczkę, nie zauważyłem, że to był Mad-Pascal-patch-10.

      Master nie rzuca błędami i z wersją 1.6.2 jest wszystko OK.

      Po dodaniu dyrektywy "{$f $a0} // fastmul at page $a0 ($a000)" i kompilatorze 1.6.2 faktycznie jest szybciej ale wciąż ze 2x wolniej od wersji ze stringami. Wezmę po prostu ten narzut pod uwagę w krytycznych miejscach.
      • 46:
         
        CommentAuthorKaz
      • CommentTime6 Nov 2019 03:11
       

      Zbyti:

      To tak na początek ode mnie, w formie żartu, mój pierwszy program w Mad Pascalu ;)


      Gratulacje! Rozwijasz się :D
      Czyżby przygotowania do napisania programu, który pokona CC4.0? :D
      • 47: CommentAuthorzbyti
      • CommentTime6 Nov 2019 09:11 zmieniony
       
      @Kaz przygotowania do pisania szachów są ale poprzeczka nie wisi aż tak wysoko ;)

      Najpierw walnę jakąś tekstówkę ku zgorszeniu wszystkich albo coś ;)

      Na razie na potrzeby moich QR Codes (datamatrix mi się tu nie nada) i gry tekstowej zrobiłem implementację w FP Lempel–Ziv–Welch bo to banalne ->link<-

      Wynik jest niezły:

      1111111111111111111111111111111111110000000100010100111111100100000001101111101000110100000111111011111011010001010100100010011100110100010110100010100101000110110101101000101101000101111110011101101001010001011011111010110010010000100110111110110000000101010101010101010100000001111111111101100110001111001111111111001100011110100110101010011010000110011001010010110010011111011001101101000101011001110011100111110100111010111101100101010011110101111100111101000001010000001001010111100111101000111001111110001011000000011011011000010101100000011100111001001110011001001010111001111010100001001101101100011001001000001110110111111011011101011000111010101011110110110111100001001110101110011111010011100100010111101101011000111100011111110001010010101110100010000101111110010101010010110010110111011011101111011001001111000111000111110110111111011110100101100111010111110111110001010110001111101000110000010011111111111001100010011111101110110111000000011011101010110001010100011110111110101111010100100000111001001101000101000100011001001100000111011010001011010101001001111011111100110100010111010100001110010111101011101111101001000001011100110000011111000000010100010101100011110111110111111111111111111111111111111111111

      ./compressor
      string length: 1225

      ^#1Di!f#kBoEoAb0BOD1KDh1H1D1jD1GEhMoD1jDbIOGDkBMF1CHBh#1L1L1L1#!l1NqE1i!qUE1jHWH1CUGG1FBhH1jD1hIInBoIMqhGoI1gBIjAja1GQIjEibDq#qO1CMalIFqUF1M1IWCHqhEF1AqXbOqME1L1QO1QCIMiBoIfDl1hMEc!D1Gh1J1C0bGg1G1GYOqQhFl1Ei0Bh0bQoG1IgB0BD1N0BoEAi!lUD0bh1Oq#1YLqDjEkBM1jKAlF1jD1Df1FqAlODqL1FqkbH1DqWCqGlMpBKA1PhAB#jD1hEkB0^

      compressed length: 306; compression: 75%

      Jak widać po wyniku uzyskałem 10 bajtów podłą sztuczką, ale wszystkie QR będą się tak zaczynać i kończyć, nie jest to uniwersalne ale szyję pod konkretne zadanie.

      Niestety nie zmieszczę się w jednym stringu ;( No chyba, że napiszę dwa przebiegi jakoś ;) Ale raz pakowane się słabiej pakuje więc nie wiem czy jest sens. A może jeszcze usprawnić compressor? Z drugiej strony chcę by A8 to szybko rozpakowywało więc nie chcę przesadzić.

      GZipem bym się zmieścił ->link<-

      -----------------------------------------------------------

      GZ compression. Original size: 1225 bytes Result size: 246 bytes

      H4sIAAAAAAAA/4WTURICMQhDr0TufzkdS5LX9WPrWCvQNASQ3tecpd/3u8ccj47thGjtG+U992WoOSDxCE8ESpenh2UQaIYsl6Wo8Wvl4oz+PwPuDZfWSBfNTqSnw39JaMCHqNSlijRqU5zeaQ2sQylYPmfsiw1ACpYLNdy/ggOMWjCAlwpltjItQErVfkiRfESeMvO5NHjogm6YC80/SbN8t/euLmpfyjtJVntgT7ggKREGFSITXl2RkuWztThFpsOZA2Bm5poAJbMWkzPnuY6dperMGaPo9+S2ASxgKtaCTVTnS9c0PhSiei/rA9Md6k/JBAAA

      Deflate ->link<- Original size: 1225 bytes Result size: 234 bytes

      eJyFk1ESAjEIQ69E7n85HUuS1/Vj61gr0DQEkN7XnKXf97vHHI+O7YRo7RvlPfdlqDkg8QhPBEqXp4dlEGiGLJelqPFr5eKM/j8D7g2X1kgXzU6kp8N/SWjAh6jUpYo0alOc3mkNrEMpWD5n7IsNQAqWCzXcv4IDjFowgJcKZbYyLUBK1X5IkXxEnjLzuTR46IJumAvNP0mzfLf3ri5qX8o7SVZ7YE+4ICkRBhUiE15dkZLls7U4RabDmQNgZuaaACWzFpMz57mOnaXqzBmj6PfktgEsYCrWgk1U50vXND4Uonov6wOCZehi

      @tebe & @boocianu widze w MP unit decrunch, więc jakby co może się przyda ->link<-
      • 48:
         
        CommentAuthorarchieil
      • CommentTime6 Nov 2019 11:11 zmieniony
       
      W sprawie szachów to jest pod 6502 wersja public domain.

      Miałem zamiar kiedyś ją do FICS-a dostosować i wrzucić Atari jako przeciwnika ludziom ale projekt zawisł w niebycie.

      Jak wiele innych zresztą.

      Nie pomnę nazwy i silny program specjalnie nie jest ale zawsze to jakiś punkt startowy, a autor mi odpisał, że nie ma nic przeciwko rozwienięciu swojego programu przy dodaniu na czym przeróbka bazuje.

      O ile się nie mylę to:
      ->link<-
      • 49: CommentAuthorzbyti
      • CommentTime6 Nov 2019 11:11 zmieniony
       
      @archieil fajny pomysł! :)

      Może chodziło o wspomniane w innym wątku:

      1. MicroChess ->link<- ->link<-

      2. Atomchess ->link<-

      ?

      O szachach - jakbyś miał ochotę dodać od siebie coś więcej - dyskutujmy tutaj ->link<-

      EDIT: O! dodałeś link :) Tak myślałem, że to może być to. Jest też kod Sargona I - chyba grał nieco silniej od MicroChess.
      • 50:
         
        CommentAuthorarchieil
      • CommentTime6 Nov 2019 11:11 zmieniony
       
      Wrzuciłem do poprzedniego.

      Chyba z Jenningsem pisałem o tym ale musiałbym poszukać w archiwach. To X lat temu było.

      Za to sam pomysł żeby program miał wyjście do FICS-a polecam wziąć pod uwagę.

      FICS używa telnet z koniecznością ustalenia protokołu transmisji.
      Ja wtedy brałem pod uwagę, że za komunikację odpowiadalby moduł na PC, a Atari tylko ruchy przekazywało.

      Gdyby taki pomysł był to zgodę oddam osobie, która chciałaby wdrożyć. :-). Poszukam w poczcie i podrzucę mail z oficjalną zgodą na użycie kodu w rozwojowej wersji silnika.

      Ja wręcz proponowałbym zacząć od interfejsu do obsługi FICS-a, a silnik szachowy dodać później. ;-)