atarionline.pl Forth - eksperyment z AD... - 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: CommentAuthorbartgo
      • CommentTime22 Apr 2023 01:04
       
      Jak wiecie, bawię się VolksForthem ale czytam też o innych implementacjach i trochę eksperymentuję.

      Zajrzałem do plików ATR z grami Pana R. Pantoły. Jak ktoś już chyba kiedyś wspomniał, siedzą w tych grach ciągi znaków "fig-Forth 1.1" wskazując na APX Forth'a (Extended Fig-Forth'a?), chyba najbardziej popularnego (występującego w kilku wersjach) i bardzo dobrze udokumentowanego chociaż szeroko krytykowanego.

      Uwaga na marginesie, bardzo często ten Fig-Forth jest rozpowszechniany w uszkodzonym pliku ATR. Przy listowaniu ekranów przy pomocy np. 20 60 INDEX można zobaczyć powtórzone nawiasy kończące komentarz i inne babole (pewno wynikające z błędów na dyskietce). Skutek jest taki, że nie wgramy zepsutych ekranów poleceniem LOAD. Gdzieś w necie jest artykuł kogoś kto to naprawił (na podstawie dokumentacji) - poprawiony obraz też istnieje. Ponieważ jednak obcowanie ludzi z Forth (jak mi się wydaje) zazwyczaj kończy się na tworzeniu słów od razu kompilowanych do słownika a praca z ekranami to dalszy etap, błąd nie przeszkadza na początkowym etapie zapoznawania się całością i dopiero później blokuje nieświadomego amatora.

      Jak rozumiem, Gra-Forth wspomniany w czołówce jednej z gier RP to oryginalnie ten sam siermiężny Fig-Forth, rozbudowany przez samego Autora do frameworka do tworzenia gier (artykuły w TA i wywiady sugerują gigantyczne modyfikacje, co nie jest przesadzone widząc co język ma w standardzie).

      Kompilacja, o której wspominiał Autor w wywiadach, nie jest kompilacją do pliku wykonywalnego w kodzie maszynowym ale według mnie głównie wygenerowaniem ze źródeł (oryginalnie przechowywanych na "ekranach" Forth w postaci ATASCII) słownika / słowników i ustawieniem słowa uruchamiającego program jako domyślnego przy uruchamianiu środowiska. Plus co najmniej jednego dodatkowego genialnego zabezpieczenia które praktycznie nie jest do obejścia dla amatora chcącego bezczelnie się gapić w komercyjny kod.

      Nie zrobimy tego tutaj (wolałbym z Autorem napić sie herbaty niż rozmawiać w sądzie) bo nie umiemy... coś jednak pokażę, a wszystko w celach naukowo-archiwalnych, mam nadzieję że Autor mi wybaczy. Nie usprawiedliwia mnie fakt, że jechałem w latach 90-tych z warszawskiego Ursynowa do L. K. Avalon (a może to była redakcja Tajemnic Atari?) na Pradze żeby kupić AD. 2044 na kasecie, może okolicznością łagodzącą będzie pęd do wiedzy.

      Jak to opisał Cas, sprawa automatycznego uruchamiania wybranego słowa jest prosta:

      ->link<-

      Za słowem ABORT jest umieszczony jakiś rodzaj skoku do słowa wywoływanego jako pierwsze i można je podmienić.

      ```
      ' MYPROGRAM CFA ' ABORT 4 + !

      ```

      Robi właśnie to, szuka adresu odpalenia kodu naszej aplikacji i wbija go w miejscu gdzie oryginalnie zgłasza się prompt. I cyk, boot dyskietki odpala słowo które leci dalej z koksem. Nikt nawet nie musi wiedzieć że pod spodem jest faktyczny Forth, gotowy do pracy, co da się udowodnić.

      Na dyskietkach z grami RP nie ma źródeł ale są słowniki - a tam słowa, gotowe do wykonania. Które można, przy pomocy normalnie używanych słów Forth-a o znanej definicji, zdekompilować do w miarę czytelnego (choć pozbawionego wcięć i komentarzy) kodu - co najlepsze, do kodu Forth ale nie maszynowego! Proszę się jednak nie ekscytować tak do końca...

      Autor bardzo sprytnie zadbał o zamazanie nazw słów (własnych oraz domyślnego słownika), pozostawiając tylko adresy, którymi słowa się ze sobą spinają.

      Eksperyment. Moje narzędzia - emulator Atari800, edytor Memo Pad.exe (wyświetla ATASCII), HxD Portable (edycja pliku binarnego).

      Porównanie okolic słowa ABORT pokazuje dwie rzeczy:
      1) nazwy słów są zamazane zerem, pozostaje tylko ostatnia litera w inwersie oraz reszta słowa (adres skoku albo magia w asemblerze)
      2) kawałek za słowem ABORT faktycznie jest kilka bajtów różniących się między oryginalnym Forth a grą

      Kilka prób podmiany adresu i działa, z dyskietki AD 2044 zgłasza się czarny ekran a po resecie znajomy prompt Forth'a. Ale nie działa praktycznie żadne słowo Forth - bo nie mają one już nazw. Porównując charakterystyczne fragmenty kodu, przywracam nazwę VLIST i udowadniam że są tu słowa Autora, co prawda z zamazanymi nazwami ale przywracając JAKIEŚ nazwy w edytorze binarnym można je uruchamiać. COŚ będą robić...

      Nie da się niestety łatwo uruchomić ze słownika samej gry, pewno trzeba by rozpoznać słowa inicjujące zmienne i tryb graficzny. Słowa najświeższe są związane z zapisywaniem gry na dysku i obfuskacją.

      Pewno możnaby pracowicie odtworzyć wszystkie słowa podstawowego Forth (porównując bajty z plikem APX) i potem budować w górę słowa. Kilkadziesiąt godzin a efekt słaby (następne kilkadziesiąt godzin do zrozumienia co autor miał na myśli... zakładając, że znamy asembler i architekturę).

      Koniec.
      • 2: CommentAuthorbartgo
      • CommentTime22 Apr 2023 01:04
       
      Efekt wykonania VLIST:
      • 3:
         
        CommentAuthorKaz
      • CommentTime30 Apr 2023 00:04
       

      bartgo:

      chyba najbardziej popularnego (występującego w kilku wersjach) i bardzo dobrze udokumentowanego chociaż szeroko krytykowanego.


      Krytykowany za powolność, ale za to jest ustandaryzowany i działa na wielu platformach.

      bartgo:

      Jak rozumiem, Gra-Forth wspomniany w czołówce jednej z gier RP to oryginalnie ten sam siermiężny Fig-Forth, rozbudowany przez samego Autora do frameworka do tworzenia gier (artykuły w TA i wywiady sugerują gigantyczne modyfikacje, co nie jest przesadzone widząc co język ma w standardzie).


      W anglojęzycznych źródłach znalazłem informacje o Game-Forth, więc sądząc po nazwie można podejrzewać, że na tej wersji bazował pan Roland. Zapewne modyfikował sobie tę ukierunkowaną na tworzenie gier implementację.

      bartgo:

      jechałem w latach 90-tych z warszawskiego Ursynowa do L. K. Avalon (a może to była redakcja Tajemnic Atari?) na Pradze żeby kupić AD. 2044 na kasecie, może okolicznością łagodzącą będzie pęd do wiedzy.


      Siedziba L.K.Avalon i redakcja TA znajdowała się w Rzeszowie, w jednym budynku (choć na różnych piętrach), więc to mógł być co najwyżej oddział. A nie pomyliłeś z Mirage, który też dystrybuował programy L.K.Avalon?

      bartgo:

      Autor bardzo sprytnie zadbał o zamazanie nazw słów (...)


      Bartku, świetne śledztwo, gratuluję dociekliwości!
      • 4: CommentAuthorDope
      • CommentTime12 May 2023 09:05
       
      Na Pragę to mogłeś jeździć na Generała Abrahama 4, do Studio Komputerowego "AS" (późniejszego Mirage). Ale to tak trochę na wyrost, bo na Ursynowie AD 2044 można było kupić i w Batmarze na Szolc-Rogozińskiego i na Koncertowej. :) To były chyba jedyne sklepy z oryginałami w okolicy w tamtych czasach, ale asortyment miały dobry i właściciele sprowadzali to czego akurat nie było a klient chciał.
      • 5: CommentAuthorbartgo
      • CommentTime12 May 2023 17:05
       
      Ah, a więc był to As lub Mirage, na pewno było to na Abrahama. Pamięć płata figle, nie pamiętam żadnego innego miejsca kupna oryginalnych polskich kaset (miałem/mam około 10). Na Koncertowej albo raczej na Stokłosach było "studio", stamtąd kojarzę tylko "piraty".

      Fig-Forth był faktycznie jakimś standardem i do tego public domain (!). Próbuję przenieść do niego swoją niby-grę z VolksForth i pomimo wielkiego "czaru" całego środowiska (niektóre ekrany kodu są po prostu piękne w swojej prostocie) ograniczenia widoczne są już na samym początku takiego zadania. Biblioteki słów są niezłe (odpowiedniki grafiki i dźwięku z Basic, przykłady) więc odpada pisanie primitive'ów i ich testy, co robiłem w Volks. Ale tu, pisanie kodu to bardziej "malowanie" go i rozplanowywanie po ekranach, uczucia mam mieszane. W Volks, źródła wyglądają dość współcześnie, w Fig ograniczenia ekranów wymuszają skrócone nazwy zmiennych i straszne ograniczenia w wykorzystaniu wcięć w kodzie, żeby wykorzystać miejsce na dysku (nie ma łamania linii, wcześnie skończona linijka jest wypełniona do końca spacjami). Wydaje się, że nie sposób zrobić większej aplikacji bez znajomości asemblera oraz wywalenia części domyślnych modułów, w tym edytora. I to chyba robiły firmy wypuszczające klony środowiska, np. ValForth posiada edytor wykorzystujący już edytor ekranowy Atari, pewno da się go sportować. Na YT jest też częściowo napisany ulepszony edytor ekranowy, inny widziałem gdzieś w skanie gazetki. Taką drogą szedł też chyba P. Roland , od początku budując lepszy edytor i inne narzędzia (patrz: TA). Też modyfikuję dyskietkę Fig-a, efekty i porównanie obydwu programów opiszę w późniejszym terminie...
      • 6:
         
        CommentAuthorKaz
      • CommentTime14 May 2023 10:05
       

      bartgo:

      Ale tu, pisanie kodu to bardziej "malowanie" go i rozplanowywanie po ekranach, uczucia mam mieszane. W Volks, źródła wyglądają dość współcześnie,


      Zdaje się, że taka była pierwotna idea Fortha, to było inne podejście do programowania i rozwijana w kolejnych implementacjach Fig-Forha (którego na Atari już nie implementowano). Volks to już inne czasy, współczeność, i zabrzmiało w tym co piszesz, jak efekt dopasowania reguł Fortha do bardziej współczesnego sposobu programowania.