atarionline.pl Środowisko do nauki APX fig-FORTH - 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
      • CommentTime23 Jan 2026 18:52 (1 godzinę temu) zmieniony
       
      Dostępna jest - sklecona przeze mnie - zaawansowana modyfikacja APX Extended fig-Forth na ośmiobitowe Atari.

      Forth uzyskał wbudowaną pomoc oraz polecenia ułatwiające naukę i pracę!

      Można to potraktować jako antologię procedur i rozszerzeń, publikowanych w latach 80-tych w różnych czasopismach. Autorów rozszerzeń jest co najmniej kilkunastu, są wymienieni w komentarzach wraz z informacją o czasopiśmie lub innym źródle (patrz mój GitHub i plik źródłowy APXFORTH-IDE.4TH). Kilka rozszerzeń jest moich, musiałem również wyeliminować konflikty nazw itp.

      Jak uruchomić?
      - bootujemy plik IDE-BOOT.ATR pod emulatorem Atari (Basic wyłączony, ROM XL/XE) - plik załączam pod artykułem, jest również dostępny na https://github.com/BartGo/forth-atari/tree/main/spin-offs (wszelkie poprawki będą tam wrzucane)
      - po uruchomieniu wpisujemy HELP, czytamy, działamy i świetnie się bawimy

      Poza poleceniem HELP możemy sobie pomagać:
      - instrukcją do oryginalnej wersji (https://archive.org/details/atarifigforth)
      - książką “Poznajemy Forth” J. Ruszczyca (skan na Atari Online, reedycja od Retronics) - podstawy, przykłady zastosowania i różne techniki programistyczne
      - kursem R. Pantoły z “Tajemnic Atari”, od numeru 1/92 (https://tajemnice.atari8.info/) - od zupełnych podstaw do asemblera Forth
      - książką “Język Forth” J. Bieleckiego - bardzo systematyczny opis języka, omówiona wewnętrzna budowa języka i kod wybranych “słów”
      - Youtube - Thom Cherryhomes: https://www.youtube.com/watch?v=JaNn1cnvBAI&list=PL709B28D4D95CCD13
      - Youtube - Mike Miller: https://www.youtube.com/@mmille10

      Co oferuje ta antologia rozszerzeń i atrakcji?
      - po starcie tło jest nieco przyciemnione w stosunku do standardowego, wyświetla się numer wersji, ilość wolnej pamięci, aktualny numer “ekranu” oraz przypomnienie o nowym, wspaniałym poleceniu: HELP
      - tak jest, HELP - mamy bowiem wbudowany system pomocy:
      - polecenia HELP i ED-HELP, wyświetlają najważniejsze (w tym nowe) polecenia, wraz z krótkim opisem
      - ED-HELP to osobna pomoc - do edytora kodu (jakoś też mi się tam zaplątały wywołania QMEG’a)
      - polecenie EVLIST (Enhanced VLIST) wyświetla listę “słów” i dodatkowo pokazuje flagi Smudge oraz Immediate, adresy pól słowa (tzw. CFA, LFA, PFA, NFA) oraz “niby-typ słowa” (wskazywany przez pole CFA) - czy jest to stała, zmienna, “słowo” skompilowane w Forth, skompilowane w asemblerze itp.
      - polecenie /? - wyświetlające nagłówek “słowa” (podobnie jak EVLIST), oraz dekompilat “słów” Fortha; tutaj też się dowiemy, czy “słowo” jest stałą, zmienną czy czymś innym; poniżej widzimy, że SPACES jest zdefiniowane jako “COLON definition”, czyli składa się z kodu w Forth - który od razu możemy obejrzeć (widzę tu błąd w rozpoznawaniu flag Smudge oraz Immediate, poprawię!)
      - polecenie VER - informujące o wykorzystanej wersji Fortha, najważniejszych modułach oraz wersji całej paczki (obecnie 1.1e7)
      - edytor kodu (o którym później) zawiera stronę z opisem wszystkich skrótów klawiaturowych
      - polecenie STACK włącza i wyłącza wyświetlanie stanu stosu po każdej operacji, świetna rzecz do nauki operacji na stosie
      - wbudowane są dwa dekompilatory “słów” Fortha (DECOMP z APX Fortha oraz rekurencyjny GOESINTO z Forth Dimensions)

      Dołączony edytor “EDIT” nieco zmodyfikowałem, tutaj też wbudowany jest help i kilka “bajerów”, program jest nieco powolny, ale wygodny do drobnych zmian i przeglądania kodu, działa tak:

      - polecenie E. uruchomi ten edytor na aktualnym “ekranie” np. na domyślnym po starcie systemu #80
      - polecenie n EDIT uruchomi edytor na ekranie o numerze n (np. 83 EDIT)
      - od razu widać, jak uruchomić pomoc i jak wyjść z edytora!
      - wyświetlana jest informacja, czy wykonane w kodzie zmiany są zapisane czy nie (+ lub - przy numerze “ekranu”)
      - kolumny 32-64 każdej linii są traktowane jak komentarz do kolumn 0-31 i wyświetlane na osobnym ekranie z dokumentacją (“shadow screen”) oraz (pojedyncza linia) w sekcji na dole; może to powodować kłopoty z przejrzystością kodu który nie korzysta z tej konwencji, mam nadzieję wkrótce ulepszyć to, dodając do edytora przełącznik wyświetlania połówek ekranów (lewo-prawo lub góra-dół)
      - pozostawiłem elementy edytora wierszowego “put” (P) i “erase” (E) - nazwałem je tylko & oraz XX oraz umieściłem w głównym słowniku FORTH; dostępne są też polecenia L. (wylistuj aktualny ekran), N. (następny) oraz P. (poprzedni)

      Dodatkowo:
      - dodałem polecenia D1:, D2: oraz DIR, co prawda nie operujące na plikach ale nieco ułatwiające oswajanie “ekranów” (irytowały mnie wbudowane polecenia DR0, DR1 i INDEX)
      - podgląd buforów dyskowych (.BUFS) pomaga w zrozumieniu, jak działa komunikacja z dyskiem - które “ekrany” są w buforach i co zostało zmienione
      - ramka zmienia kolor w zależności od systemu liczbowego (koncepcja pożyczona z Team Atari Forth) - działa to dla każdej podstawy ale w szczególności jest: czarna dla systemu dziesiętnego (domyślna), szara dla dwójkowego i ciemnoczerwona dla szesnastkowego
      - wystąpienie błędu, np. wywołanie polecenia LOAD, oczekującego parametru, przy pustym stosie - zamiga ekranem na czerwono
      - można włączyć szczegóły błędów: UNRAVEL-ON wyświetli razem z komunikatem błędu raport “śladu po stosie powrotów”, być może pozwalając na dokładniejsze namierzenie miejsca wystąpienia błędu
      - dodatkowe polecenia debuggera pozwalają na przerwanie wykonywania kodu (breakpoints, w tym uruchamiane warunkowo) i analizę zmiennych oraz stosu
      - komunikaty błędów przeniesiono do pamięci (nie muszą być już zapisane na dysku ani nie musimy zerować zmiennej WARNING)
      - wbudowane są proste zmienne lokalne (bardziej złożone użycie jest w trakcie testów, na razie nie są opisane w helpie)