atarionline.pl Forth - sensowne środowisko pracy, przemyślenia - 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
    • CommentTime15 Nov 2022 zmieniony
     
    Cześć,

    "Jestem tu nowy."

    Próbuję realizować swoje "marzenie z dzieciństwa" czyli napisanie prostego ale kompletnego, sensownego programu w Forth. Wziąłem na warsztat grę "Łapacz" Krzysztofa Hołowni, opublikowaną w Tajemnicach Atari 3/91 (Atari Basic, 5-linii, gra w trybie tekstowym, używa joysticka).

    Korzystam z Atari 800XL (SIO2SD, SIO2USB, dzięki Krissowi rozszerzenie pamięci do 256 i QMEG), używam też emulatorów Atari800 i Altirra i Memopada na PC.

    Poniżej przemyślenia, jeśli ktoś ma sugestie jak lepiej zorganizować "flow" albo po prostu chce się zachwycić moim wspaniałym pomysłem, będę wdzięczny.

    1)
    Pierwsze schody to wybór wersji Forth. Wybrałem w końcu VolksForth - niedawno aktualizowany, wydaje się dość stabilny, obsługuje pliki a nie tylko "ekrany" (praca z którymi uniemożliwia albo utrudnia kontrolę wersji). Wadą jest dokumentacja - po angielsku jest fragmentaryczna, niemieckiego nie znam. Są jednak analogie z innymi udokumentowanymi Forthami (X-Forth, Extended Fig, inne) oraz źródła więc jest nieźle.

    ->link<-

    2)
    Środowisko wygląda tak:
    * PC: Memopad
    - umożliwia zmianę kodowania z ATASCII - ASCII
    - ładne czcionki Atari
    - niestety nie ma funkcji Undo
    * PC: Git (zrzucam tylko po konwersji na ASCII)
    * PC: Atari800, obraz dysku z DOS2.5 lub SpartaDos 3.x (nie X)

    Na razie aplikacja jest pisana tylko na emulatorze ale użyję SIO2USB lub SIO2SD, ewentualnie jakiegoś narzędzia żeby na PC generować obraz ATR z Forth plus z moimi źródłami. Który to ATR będzie można podmontować jako stację D1, może nawet uruchamiając aplikację automatycznie przy bootowaniu.

    3)
    Flow:
    - Na emulatorze pod D1: mam podpięty aktualnie vf0608.atr (Sparta + Forth + edytor), pod H1: ścieżkę ze źródłami
    - Wywołuję (można też przez batch) ERASE D1:LAPACZ.F oraz COPY H1:LAPACZ.F D1:LAPACZ.F oraz VFORTH.COM (albo 4TH.COM albo SPAR4TH.COM)
    - Potem INCLUDE" D:LAPACZ.F" i działa (tzn nie działa ale jest na dobrej drodze), WORDS pokazuje moje słowa, można je testować i uruchamiać

    * Edit: może też zadziałać bezpośrednio import z H1: (plik musi być w ATASCII!), nie trzeba wtedy kroku z kopiowaniem na D1:

    - Nie do końca działa dekompilacja przy pomocy "SEE" (polecenie pokazuje definicję słowa ze słownika), robię INCLUDE" D:SEE2.F" przed załadunkiem mojego modułu ale nie jest to stabilne, jeszcze nad tym pracuję, obserwacje udokumentuję w kodzie
    - Po przetestowaniu i stwierdzeniu co jest do poprawki robię BYE, wracam do dosu i poprawki robię albo w Memopad albo drobne na emulatorze (edytorem KE lub JBW ED); idealnie byłoby, gdyby minimalny edytor plików był zaszyty w Forth (nawet edytor liniowy)
    - ED mógłby być też niezłą opcją w przypadku korzystania z XL Friend'a (można teoretycznie wywołać edytor, kalkulator i monitor pamięci będąc już w FORTH, co działałoby jak zintegrowane IDE), ale też nie działa to stabilnie, możliwe że XLF nie lubi tego, gdzie w pamięci siedzi Forth, do przemyślenia....

    4)
    Poważnym problemem może być (w dowolnym Forth) brak słów które są znane z innych implementacji ale napisano je tam w asemblerze Forth. Jak wiadomo, te asemblery trochę różnią się składnią. Nie znam asemblera, będę się pewno uczył ale teraz jest czas na Forth. Jest to jednak język bardzo ściśle związany z asemblerem i organizacją pamięci...

    Przykładem, który mi zalazł za skórę jest brak w VolksForth "LOCATE" (informacja o znaku na ekranie pod współrzędnymi X, Y). Polecenie jest dostępne w Atari Basic ale w Forth-ach, z tego co widzę, zawsze definiowane mixem asemblera i wywołań CIO (XIO?), za trudne dla mnie żeby przetłumaczyć z jednego Fortha na inny... Problem "LOCATE" chyba rozwiążę pisząc własne słowo czytające pamięć obrazu (według SAVMSC) i konwertując ICODE do ASCII, prace w trakcie.

    Pozdrawiam,
    Bartek.
    • 2:
       
      CommentAuthorpirx
    • CommentTime15 Nov 2022 zmieniony
     
    jakbyś chciał użyć spartadosX (ma swoje zalety), to w altirze bardzo ładnie działa
    Disk drives>Mount folder as virtual SpartaDos disk
    (bo H: łatwo nie zadziała)

    LOCATE jest dostępne w systemie właśnie jako wywołanie XIO, może masz w VF jakiś przykład jak XIO wywoływać. Jeśli jest w VF komenda XIO (jak w atari basic), to assembler nie powinien być potrzebny...

    Możesz też spróbować czegoś w rodzaju
    POSITION x, y : GET #6,z

    to jest z fastbasica, w 'z' masz na końcu wartość, jaką by zwróciło LOCATE.
    • 3: CommentAuthorbartgo
    • CommentTime15 Nov 2022
     
    Nie mam kartridge'a Spartados X, na tyle na ile rozumiem jak działa to nie widzę decydujących korzyści w kontekście dewelopmentu w Forth - VolksForth jest dostarczany z DOS 2.5 lub SpartaDOS 3.coś-gx i z tymi był testowany. Próbowałem z kilkoma innymi DOS-ami i nie zawsze działa to idealnie, już nie chciałem kombinować bo te obrazy ATR które są na GitHubie (Sparta i 2.5) już się nadają do pracy. DOS 2.5 też działa (tylko DUP.SYS jest okropne... ale do kopiowania i podglądu plików można użyć BBKCP albo Atari Commandera).

    Nie widzę w VF bezpośrednio dostępnego XIO, jest kod dostępu do plików korzystający z "wektora CIO" ($E456) ale korzystanie z niego jest w miksie Forth i Asemblera, za trudne:
    ->link<-

    W innym Forth widziałem definicję XIO i nawet GET ale oczywiście w tamtejszym asemblerze, ciężko będzie to przenieść nie rozumiejąc. Będę walczył, jak nie dam rady to poproszę o pomoc ludzi co utrzymują VF (m. in. Carsten Strotmann).

    Dzięki!
    • 4:
       
      CommentAuthorpirx
    • CommentTime15 Nov 2022
     
    a position x,y i get #6,x ?
    kanał #6 to ekran, get pobiera wartość z ekranu.
    nie trzeba xio odpalać.
    • 5: CommentAuthorbartgo
    • CommentTime15 Nov 2022
     
    Odpowiednik position istnieje: 10 10 AT ustawi kursor na 10, 10.

    Ale żadnego GET nie ma w VF. Jest w innych Forth-ach, zdefiniowane w asemblerze o nieco innej składni niż w VF. Kombinowałem też z komórką "OLDCHAR" która podobno zachowuje poprzedni znak po wpisaniu nowego ale to jakaś proteza...
    • 6:
       
      CommentAuthorpirx
    • CommentTime15 Nov 2022
     
    kurcze, to jak z pliku czytac? moze maja cos innego, co pobierze bajt z kanału iocb?
    • 7: CommentAuthorbartgo
    • CommentTime16 Nov 2022
     
    W VF do czytania z pliku są słowa w asemblerze, zrobione tylko pod pliki a nie inne urządzenia. Czyli co do innych urządzeń.. "napisz se" :)

    Klasyczne implementacje (np. Extended FIG-Forth / Coin-Op) mają słowa do XIO ale nie mają obsługi _plików_. Wynika to chyba z tego, że "stare" implementacje były kompletnymi produktami do tworzenia oprogramowania, najczęściej pojedynczej gry - pliki i obsługa DOS-u to mogło być bardziej obciążenie niż zaleta. Dane na dyskietkę można smarować bezpośrednio do sektorów (dzisiaj brzmi to strasznie). Zamiast obsługi plików na dysku korzystano ze słów piszących po dysku i pozwalających na organizację "ekranów", listowanie ich (INDEX, LIST) i edycję edytorem liniowym lub nawet pełnoekranowym - całkiem nieźle to działało ale cały kod trzeba trzymać na obrazach dysku co utrudnia dziś śledzenie zmian w kodzie, korzystanie z Git-a, przenoszenie kodu itp.

    A znowu nowe implementacje (jak VF albo X-FORTH) są bardziej tłumaczeniami z innych platform i zostawiają trudniejsze słowa specyficzne dla Atari na sam koniec i niekoniecznie wszystko implementują (priorytety to to, do czego autorzy planują wykorzystać język w pierwszej kolejności).

    Tak ja to interpretuję.

    Coś wykombinuję, jeśli bezpośredni dostęp do pamięci ekranu nie pomoże to jakoś rozbroję kod w asemblerze i zrobię XIO.

    Dzięki!
    • 8: CommentAuthorbartgo
    • CommentTime16 Nov 2022
     
    Jest w VF coś, co przypomina pobranie bajtu z IOCB ale dokumentacji brak

    \ definitions for fileinterface cas11aug06

    label freeiocb0 70 # lda label freeiocb2 tay ICFLG ,y lda
    $FF # cmp 0<> ?[ tya sec $10 # sbc freeiocb2 bne ]?
    tya rts

    code freeiocb freeiocb0 jsr .a lsr .a lsr .a lsr .a lsr pha
    push0a jmp end-code

    label getfileid sp x) lda .a ASL .a ASL .a ASL .a ASL tay rts

    label getparam 2 # ldy sp )y lda ICBLL ,x sta
    iny sp )y lda ICBLH ,x sta
    iny sp )y lda ICBAL ,x sta
    iny sp )y lda ICBAH ,x sta
    rts
    \ definitions for fileinterface cas13dec05

    code close-file getfileid jsr tax IO-CLOSE # lda ICCOM ,x sta
    CIOV jsr sp 2inc ICSTA ,x lda 0>= ?[ 0 # lda ]? pha
    PUSH0A jmp end-code
    • 9:
       
      CommentAuthorKaz
    • CommentTime17 Nov 2022
     

    bartgo:

    "Jestem tu nowy."


    Witaj nowy na pokładzie! :)

    bartgo:

    Próbuję realizować swoje "marzenie z dzieciństwa" czyli napisanie prostego ale kompletnego, sensownego programu w Forth. Wziąłem na warsztat grę "Łapacz" Krzysztofa Hołowni, opublikowaną w Tajemnicach Atari 3/91 (Atari Basic, 5-linii, gra w trybie tekstowym, używa joysticka).


    O! Miło kibicować komuś, kto jak my, realizuje jakieś marzenie z dzieciństwa. Szczególnie, że mam sentyment do Fortha, bo oczywiście w starych czasach kupiłem książkę Jana Ruszczyca "Poznajemy Forth" i choć żadnego programu nie napisałem, to przeczytałem ją od deski do deski :) Cykl o Forth w "Tajemnicach Atari" przeglądałem tylko pobieżnie, bo wtedy miałem już ST.

    Kolega Cosi programował w Forth, a nawet stworzył język LogForth (mieszankę Logo i Forth), do tego Zbyti kiedyś testował różne implementacje Forth w testach szybkościowych. Znajdziesz te wszystkie wątki na forum albo w archiwum wątków. Dobrze, że autor Volks-Fortha - Carsten jest wciąż dostępny, bo z kontaktu z nim pamiętam, że bardzo sympatyczny i pomocny człowiek. Daj znać, jak Ci poszło.
    • 10: CommentAuthorgorgh
    • CommentTime3 Dec 2022
     
    Lapetus od kilku tygodni publikuje filmiki z prac nad grą w Forth na c64
    • 11: CommentAuthorKrzys
    • CommentTime2 Jan 2023
     
    Szykuje się reedycja książki Ruszczyca o Forth, więc postanowiłem sobie, że jak wyjdzie, to usiądę do tego. Fajnie, że środowisko jest na sprzęcie, a nie jakieś współczesne. Do tego język wygląda jak jakiś Obfuscated Code Context.
    • 12: CommentAuthorbartgo
    • CommentTime4 Jan 2023
     
    Działam powoli ze swoją pseudo-grą w Forth, jest w trybie tekstowym... próbuję napisać ładny / elegancki kod więc z 5 linijek w Atari Basic zrobiło się około 300 w Volks Forth (włącznie z kilkoma testami, stałymi oraz słowami które są w Basic'u a nie ma w tej implementacji Forth). PRAWIE działa.

    Generalnie jestem zadowolony z VolksForth oraz pracy ze źródłami w pliku... i NIE WYOBRAŻAM sobie jak można w XXI wieku napisać coś dłuższego bezpośrednio na Atari albo nawet emulatorze używając Fig-Forth i "ekranów".

    Cieszę się z reedycji książki Ruszczyca bo jest to świetna pozycja edukacyjna (piękny rozdział o kodowaniu informacji na bitach!). Ale pomyślcie czy faktycznie byście chcieli pisać w opisanym tam Fig-Forth?... Używać edytora blokowo-linowego?...

    Sama koncepcja ekranów i bloków jest świetna dla ograniczonych urządzeń (mikrokontrolery?) ale zakładając że kod tam zapisany nigdy nie będzie dzielony z kimś innym ani "forkowany". Jako narzędzie dla jednej osoby, siedzącej w piwnicy - super. Do dzielenia się wiedzą i rozmawiania o kodzie, nie bardzo...

    W Fig kod jest zapisywany bezpośrednio na sektorach dysku, bez żadnych znaków końca linii. Nie potrzeba systemu plików, wszystko jest bardziej... pierwotne. Ale proszę sobie wyobrazić że chcę teraz zamieścić gdzieś kod programu albo poprosić o pomoc. Coś mi nie wychodzi i chcę 200 linijek swojego programu w Fig-Forth wkleić na Atari Online... Co muszę zrobić?

    Nie mam drukarki ani FujiNeta itp.. Najpierw, hm... Muszę czymś zrobić ZRZUT dysku/pliku atr, bajt po bajcie.

    Bez sensu wrzucić taki kod na githuba albo nawet do pliku tekstowego - jest to plik binarny...

    Trzeba by napisać coś, co przeczyta sektor po sektorze dyskietkę, zrzuci do pliku znaczące sektory (bez iluśtam początkowych odpowiadających za jądro Forth), pokroi na ekrany dodając znaczniki końca linii ale nie tnąc słów w połowie...

    Trzeba przenieść obraz na PC i tam obrobić, żeby wypluć plik z podziałem na ekrany. Ekrany mogą skakać między sobą (takie "INCLUDE" a właściwie "GOTO"), mogą być używane do dokumentacji albo może nawet do trzymania danych (!). Trzeba w pliku zachować te informacje i wyraźnie rozdzielić ekrany, też żeby można było ODWRÓCIĆ operację (zapisać plik z powrotem do sektorów na dyskietcie). I przetestować to dla wielu przypadków. Powodzenia.

    Edycja ekranów się odbywa niekoniecznie w edytorze pełnoekranowym a la Atari Basic... bardziej większość edytorów przypomina "ED", edytor liniowy, albo "VI" (w super-najlepszym przypadku). Szukanie po pliku, swobodne przeglądanie albo parsowanie narzędziami DOS-owymi?... Zapomnij :)

    Volks też nie jest idealny, brakuje mu wielu słów związanych z grafiką i trzeba dorabiać (więc dochodzi portowanie słów w asemblerze a właściwie to pomiędzy różnymi wersjami asemblerów). W międzyczasie standard Fig-Forth się zmienił na Forth-83 czy coś podobnego. Więc portowanie czegokolwiek na nowszego Fortha oznacza przekopanie się przez różnice w implementacji tych samych słów, często są to duże różnice: ->link<-

    I żeby nie było że znięchęcam, zabawa jest przednia, załączam screenshoty.
    • 13: CommentAuthorbartgo
    • CommentTime4 Jan 2023
     
    I ekran wkrótce-prawie-gry:
    • 14: CommentAuthorbartgo
    • CommentTime4 Jan 2023
     
    Ah, zapomniałem. Carsten mi odpisał i potwierdził że nie ma jeszcze CIO/XIO w VolksForth, może dopisze przy okazji... ale jeśli komuś (np. mnie!) zależy, trzeba portować z "Extended Atari FIG-Forth", ekrany 80/81. Zarówno VF jak i Extended FIG używają asemblerów w typie "Ragsdale", może w ramach optymalizacji gierki spróbuję kiedyś to skonwertować.
    • 15:
       
      CommentAuthorGeorge
    • CommentTime4 Jan 2023
     
    Super, że piszesz o swoich wrażeniach z Forth. Forth jest na liście języków, które chciałbym poznać, ale dość daleko, więc z chęcią poczytam o Twoich przygodach z tym językiem. Powodzenia!
    • 16: CommentAuthorbartgo
    • CommentTime14 Apr 2023
     
    No cóż, to działa... Muszę przyznać, jestem pod wrażeniem tego, jak Forth wymusza testowanie małych fragmentów kodu.

    Środowisko składające się z edytora Memo Pad + emulatora Atari800 + Git - działa świetnie.

    Załączam filmik, kod na GH: ->link<-

    Będę jeszcze szlifował kod, oczywiście niewiele brakuje tu do implementacji węża, pac-mana czy czegoś innego... Słowa są dość uniwersalne.

    Oczywiście, przydałaby się grafika. Pokombinuję :)
    • 17: CommentAuthorbartgo
    • CommentTime14 Apr 2023
     
    I obowiązkowy screenshot już zakończonej "gry". Muahaha!
    • 18:
       
      CommentAuthorKaz
    • CommentTime14 Apr 2023 zmieniony
     
    Brawo bartgo!

    bartgo:

    Najpierw, hm... Muszę czymś zrobić ZRZUT dysku/pliku atr, bajt po bajcie. Bez sensu wrzucić taki kod na githuba albo nawet do pliku tekstowego - jest to plik binarny... Trzeba by napisać coś, co przeczyta sektor po sektorze dyskietkę, zrzuci do pliku znaczące sektory (bez iluśtam początkowych odpowiadających za jądro Forth), pokroi na ekrany dodając znaczniki końca linii ale nie tnąc słów w połowie... (...)


    Może w takim razie zrobić takie narzędzie na pececie? Jakby co - nie zgłaszam się, tylko podsuwam motywację :)
    • 19: CommentAuthorpin
    • CommentTime15 Apr 2023 zmieniony
     
    gdzie znajdę ten forth, chodzi mi o vf0608.atr??
    • 20: CommentAuthorbartgo
    • CommentTime15 Apr 2023
     
    ->link<-

    Pewno przygotuję w następnych dniach tutorial jak krok po kroku uruchomić kod lub napisać coś własnego.

    Generalnie, konwersja do atascii, podpięcie katalogu pod H1, uruchomienie forth, include pliku... Opiszę dokładnie :)
    • 21: CommentAuthorpin
    • CommentTime15 Apr 2023
     
    próbuję to na razie pożenić ze Spartą X, kontrolerem IDE (ideplus), vbxe i Rapidusem, ale idzie ciężko. Idealnym by było gdyby to zechciało zadziałać z Deskmanem (taki software'owy freezer pod SDX), bo wówczas można by mieć na jednym desktopie np. jakiś edytor do źródła (np. w 80 znakach pod vbxe), w drugim kompilator, w trzecim coś innego itd. Sprzętowo na dopalonych maszynach możliwości są dość spore i jest w tym "flow"
    • 22: CommentAuthorbartgo
    • CommentTime16 Apr 2023
     
    Uprzedzam, VolksForth dla Atari jest zapóźniony w stosunku do innych platform i nie ma wbudowanych słów do obsługi grafiki i dźwięku. Dość prosto powinno się dać zaimplementować podstawy, portując słowa w asemblerze z innych Forthów ale wymaga to biegłości której nie mam (na razie).

    Na razie, VF gra z dosem 2.5 (eeech) i Spartą 3.x (nie udało mi się jeszcze odpalić tej drugiej wersji na rzeczywistym 800xl). Nic mi nie wiadomo, żeby współpracowało z X.

    Próbowałem edytować źródła na Atari, PE JBW daje radę ale dłuższy kod już sprawia problemy. XLFriend nie działa, pewno korzysta z tych samych obszarów pamięci co VF i się gryzie. Flow jest chyba podobny co w kompilatorach C czy Pascala - edytujemy, wychodzimy z edytora, wchodzimy w kompilator/interpreter, odpalamy program i myślimy skąd błędy... Niby lipa ale w Forth możemy testować skompilowane słowa, odpalać testy itp. Nie widzę opcji żeby całość ogarnąć na Atari, chyba żeby napisać edytor w samym Forth i edytować źródła nie wychodząc z VF.
    Tak to już działa na niektórych innych platformach VF, są edytory liniowe czy jakieś. A8 jest w tyle :(
    • 23: CommentAuthorpin
    • CommentTime16 Apr 2023 zmieniony
     
    jeśli działa na sparcie 3.x, to raczej nie powinno być problemu z X. Dodatkowy plus (X) to (w trybie ext ram) znacznie więcej wolnej pamięci podstawowej; chyba najwięcej ze wszystkich dosów generalnie. Co do edytorów to pakiet JBW zdecydowanie bym odpuścił. Są bardziej cywilizowane rozwiązania dające dodatkowo możliwość pracy na większej ilości pamięci, oraz opcjonalnie działające na dowolnym "wyświetlaczu" 80 znakowym. Co do kwestii równoległej pracy na edytorze i VF to jak pisałem jest możliwość, tylko VF działa coś niestabilnie albo odpalam niewłaściwą wersję. Pomęczę to jeszcze w wolnej chwili.
    • 24:
       
      CommentAuthorBca
    • CommentTime16 Apr 2023 zmieniony
     
    retro wariaci, zmówię zdrowaśkę, a w - COBOL-u?!
    bart go - where you want to go today?
    • 25:
       
      CommentAuthorKaz
    • CommentTime16 Apr 2023
     

    bartgo:

    Pewno przygotuję w następnych dniach tutorial jak krok po kroku uruchomić kod lub napisać coś własnego.


    Super!
    • 26: CommentAuthorbartgo
    • CommentTime16 Apr 2023
     
    @pin - faktycznie, przyszło mi do głowy użycie freezera z qmeg os do zasymulowania multitaskingu (forth/edytor) ale jeszcze nie sprawdzałem, zrobię to jak wyjmę Atari. Testowałem też edytor ze SpartaDos, lepszy od PE.

    Za największe wyzwanie uważam jednak zaimplementowanie XIO i słów do obsługi grafiki, żeby dojść do okolic funkcjonalności Atari Basic. Asembler, ojojoj.

    Również, instrukcja do VF jest tylko po niemiecku (niedawno zapowiadali tłumaczenie).
    • 27: CommentAuthorpin
    • CommentTime16 Apr 2023
     
    wspominałem o "deskmanie" dla SDX, to jest coś takiego że odpalasz program i podajesz mu jako parametr np. 9 "pulpitów". Każdy z nich siedzi w pamięci rozszerzonej (warto mieć 1MB ram). I teraz, każdy z nich jest dostępny pod kombinacją ctrl+shift+1 - 9. Zrzucana jest cała pamięć 64k i stan wszystkiego co tylko programowo da się zapisać. Tym sposobem, np. miałem środowisko takie że równolegle pracowałem na tbxl, cmc, player sparciany, sparta commander, edytor txt ... itd.

    Wieczorem sprawdzę, czy któraś z wersji VF jest w stanie z tym poprawnie działać.
    • 28: CommentAuthorbartgo
    • CommentTime18 Apr 2023
     
    @pin - udało się uruchomić pod fizycznym Atari ten dysk ze Spartą 3.x oraz wciągnąć mój programik, działa (testy przechodzą, chodzi też z Joystickiem). Głównym problemem wydaje się prędkość, musiałem obniżyć ją w SDRIVE (klawiszami U - teraz działa z FastSIO $10 / 39000) oraz w QMEG (poprzez N na dysku 1).

    Załączam screenshoty z SDRIVE (pod D1: podmontowany VF0608 z githuba, pod D2: moja dyskietka z listingiem LAPACZ.F skonwertowanym do ATASCII - też załączam atr), z QMEG oraz etapy uruchamiania programiku.

    Pewno popróbuję przełączania edytor / VF przy pomocy freezera wbudowanego w QMEG.
    • 29: CommentAuthorbartgo
    • CommentTime18 Apr 2023
     
    • 30: CommentAuthorbartgo
    • CommentTime18 Apr 2023
     
    Sparta, uruchomienie VF (uwaga, wersja "SPAR4TH.COM" z jakiegoś powodu działa źle, 4TH.com jak na razie jest okej):
    • 31: CommentAuthorbartgo
    • CommentTime18 Apr 2023 zmieniony
     
    Uruchomiony VF, ładujemy kod (po wciągnięciu nowe słowa widać po wydaniu komendy WORDS)...
    • 32: CommentAuthorbartgo
    • CommentTime18 Apr 2023
     
    Plus dyskietka ze źródłem LAPACZ.F -- jest to właściwie pełne środowisko, tzn. butuje, ma forth, trochę bibliotek i dwa edytory (PE oraz Sparta Edit). Można też tym się bawić - no ale nie jest to oryginalny obraz autorów VF tylko rzecz wtórna.
    • 33: CommentAuthorbartgo
    • CommentTime18 Apr 2023 zmieniony
     
    Powyżej jest ekran z wgrywaniem kodu. Tu etap następny, przed uruchomieniem (RUN) - testy przeszły (wywalają się ze SPAR4TH.COM, jakby miał inne procedury obsługu wyświetlania, dziwne).

    Część testów które wciąż nie działają wynikają z błędu konwersji kodów internal - ATASCII (mam jakiegoś buga dla znaków w inwersie), na emulatorze jest to samo, kiedyś naprawię. Nie wpływa to na funkcjonowanie "aplikacji".
    • 34:
       
      CommentAuthorKaz
    • CommentTime20 Apr 2023
     
    Piotr Wiszowaty, kolega jednego ze znanych atarowskich demoscenowców, napisał parę lat temu taki oto kompilator skrośny Forth, przykłady są dla Atari XL/XE:

    ->link<-

    Forth cross-compiler targeting 6502 processors. Outputs xasm compatible assembly source code containing Forth runtime and compiled user program.
    • 35: CommentAuthorbartgo
    • CommentTime26 May 2023
     
    Aktualne zadania na mojej tapecie:

    1) przenieść powyższą pseudo-gierkę z VolksForth na Fig-Forth, w celach edukacyjno-porównawczych; Fig-Forth jest opisany w "Poznajemy Forth" oraz ma więcej wbudowanych modułów więc kod będzie dużo krótszy (chociaż brzydszy bo pliki zachęcają do wcięć i dłuższych nazw słów / zmiennych; ekrany wręcz przeciwnie)

    2) podczas realizacji powyższego zebrać kilka narzędzi do Fig-Forth na jednym ATR-rze (normalny bootujący Forth ale z wyciętą częścią domyślnych ekranów, coś dla początkujących eksperymentatorów jak ja):

    2a) edytor pełnoekranowy: oglądałem listingi z TA czyli Edytor Wprowadzania i Edytor Forth-a Rolanda Pantoły, zdecydowałem się jednak na prostszy "EDIT" (opublikowany w "Micro Magazine"), autorstwa Mike'a Dougherty'ego. Ma on (EDIT) pięknie udokumentowany kod i jest łatwy do modyfikowania (kod z TA jest dość "skompresowany" ale i tak dłuższy, możliwoście porównywalne); edytor EDIT już wklepałem i wypróbowałem, ma kilka niedogodności, naniosę drobne poprawki i opublikuję ATR i kod.
    Planowane zmiany w EDIT:
    - wyraźny wskaźnik trybu edycji (przełączanie przez ESC między wpisywaniem tekstu a poleceniami typu save, next screen itp., trochę jak w vi)
    - wyświetlanie kodu kontrolnego, zgodnego z Edytorem Wprowadzania
    - bardziej współczesne skróty klawiaturowe
    - możliwość przełączania między ekranami o szerokości 32 znaków a "wirtualnymi 64" (z drugim "bocznym" ekranem na komentarze, tak jest w obecnej wersji), najczęstsze dwa podejścia obecne u różnych autorów kodu
    - wskaźnik zmienionego ekranu, możliwość zablokowania opuszczenia ekranu jeśli nie zapiszemy go lub nie wycofamy zmian (zapobiega zapisaniu przypadkowych zmian)
    - joystick do poruszania kursorem i do zmiany ekranów
    - może mały, jednolinijkowy "shell" forthowy na dole plus informacja o głębości i ew. stanie stosu parametrów

    Jestem dość zielony więc nieco to potrwa ale postaram się na wczesnym etapie wystawić kod na GH, razem z gotową do użycia dyskietką ATR oraz opisem dla chętnych do zabawy.


    2b) narzędzia do przenoszenie ekranów (Compute! Nov '82, p. 232), jeśli operujemy na plikach jak w VolksForth nie jest to potrzebne ale na ekranach... przyda się, kod jest bardzo krótki

    2c) nice to have - narzędzie "TREE", również z "Micro", obejdzie się bez przeróbek, muszę tylko wklepać (dużo kodu); narzędzie wypisuje słowo oraz hierarchicznie wszystkie słowa podrzędne, z których jest zbudowane to nadrzędne... aż do określonej głębokości - genialne do analizy istniejącego kodu oraz poznawania szczegółów istniejących słów (w większości napisanych w Forth, tylko najgłębsze są w asemblerze)
    • 36: CommentAuthorbartgo
    • CommentTime26 May 2023 zmieniony
     
    2d) Namierzyłem program w Basic'u z ANALOG Computing (issue 9, p. 56), pozwala na obustronną konwersję: ekrany Forth (w wersji 32 lub 64 znaki na linię ekranu, będzie to zgodne z EDIT po zmianach) / pliki, może się przydać ("przydasie"); lepsza byłaby może wersja binarna, działająca z linii komend jakiegoś DOS-a czy CP i ewentualnie do użycia w baczu; to by ułatwiło zrzucanie zmian kodu do plików do wrzucenia do kontroli wersji i wymienianie się kodem; zastanawiam się tylko czy jest to na pewno potrzebne, możliwe że już FujiNet trochę mi pomoże jeśli będzie ładnie drukował do pliku kod ekranów, może to wystarczy do konwersji w jedną stronę....
    • 37:
       
      CommentAuthorKaz
    • CommentTime11 Jul 2023 zmieniony
     
    Znalazłem obrazy dyskietek z fig-Forth 1.0D oraz 1.45. Szczególnie ta druga wersja może być dla Ciebie interesująca, jeśli jeszcze na nią nie trafiłeś.

    Do tego znalazłem ciekawy dokument - opis MesaForth dla Atari. Pozwalam sobie wkleić jego fragment:

    . ..MesaForth 11/22/81 Page 1-1



    ..Chapter 1

    ..Introduction


    MesaForth is based on the 6502 fig-Forth model. The major difference from the model is in the size of the screen on disk (512 bytes instead of 1024 bytes). You should refer to fig-Forth documentation for a complete description of Forth and the standard words provided in fig-Forth. This document will describe the special features provided in MesaForth.

    A major difference between MesaForth and other Forth's available for ATARI is that MesaForth runs under ATARI DOS 2.0S. Forth source files and data files are written on standard DOS formatted diskettes. This means that Forth files can be interchanged with any other program that uses DOS files (ATARI BASIC, Assembler/Editor, Music Composer, ATARI Word Processor, etc.). This can make MesaForth a powerful tool in producing efficient software on your ATARI.


    Your MesaForth system diskette contains more than the fig-Forth model. It also contains some additional software:
    1. Complete CIO interface to ATARI Operating System and DOS
    2. Support of Graphics/Sound/Joystick routines in O.S.
    3. Complete support of character string manipulation
    4. Interface to Disk Handler routines in O.S.
    5. Screen editor for modification of Forth files
    6. Text formatter for use with on-line documentation
    7. Turnkey support to create application programs
    • 38:
       
      CommentAuthorKaz
    • CommentTime11 Jul 2023 zmieniony
     
    A to wersja 1.45 fig-Forth na dwóch stronach dyskietki, druga strona w dwóch wariantach, nie sprawdzałem dokładnie czym się różnią:
    • 39: CommentAuthorbartgo
    • CommentTime11 Jul 2023
     
    Dzięki, rozpracowywałem to trochę w zeszłym tygodniu, opis w trakcie. Mesa Forth faktycznie obsługuje pliki, ale jest to sztuczny mechanizm - nadal jest to kod programu podzielony na ekrany (czyli spacje pod koniec linijki są fizycznie zapisane na dysku, nie ma EOL). Wzięcie takiego pliku do zwykłego edytora tekstowego może spowodować rozjechanie się całości.

    To drugie to Free Forth / Sunnyvale Forth / Team Forth. Zbieram materiały gdzie to jest w miarę potwierdzone, to powinien być bardzo dobry Forth (gra "WORMS?" jest w tym napisana).

    Ze "starych" Forthów (model fig-Forth) jeszcze muszę valForth ogarnąć, miał moduł valDOS, jest szansa że najlepiej obsługiwał pliki, do sprawdzenia jak. Był to jednak całkowicie komercyjny Forth.
    • 40: CommentAuthorbartgo
    • CommentTime7 Oct 2023
     
    Odgrzebuję, poszukam atencji.

    Ponieważ "Poznajemy FORTH" oraz kurs Pantoły są oparte o EXTENDED fig-FORTH, wróciłem do zabawy z tą wersją. Żeby nie było - znam podstawy, nie wymiatam. Ale w miarę rozumiem co tam się dzieje i co robią narzędzia do ogarniania kodu.

    Więc aktualnie mam opanowane:
    a) przenoszenie kodu edytowanego na PC (Memopad.exe, NP++, FORTHCON.BAS z Pigwy - autor: Harald Striepe) do "ekranów" Forth - przeniosłem w ten sposób kod Edytora Wprowadzania z TA, bez wklepywania; procedura jest upierdliwa i posiada kroki pół-manualne, ale lepsze to niż nic
    b) w związku z tym, EDW działa, przeniosę jeszcze pewno z ciekawości EDytor ale generalnie mam alternatywy (EDIT z czasopisma Micro 6502 jakoś mi działa)
    c) oznacza to też, że mając w plikach kod z "Poznajemy FORTH" (da się chyba przerzucić z PDF-a) jestem w stanie w miarę bezboleśnie (w porównaniu z metodą maszynistki) zrobić dla chętnych dyskietkę (ATR) z kodem wszystkich programów z książki; oczywiście, mogą być tam błędy

    Uciążliwość metody polega na tym, że należy "ciąć" kod co 16 linii przy pomocy polecenia przetwarzania następnego ekranu lub przerwania kompilacji. Kod gotowy do konwersji przez FORTHCON.BAS widać poniżej.

    ( - EDytor Wprowadzania: 1/5 - )
    ( autor: Roland Pantola )
    ( [c]1992 Tajemnice Atari )

    ( "FORGET TASK" to remove EDW! )
    : TASK ;
    : <=< OVER > >R < R> * ;
    37000 CONSTANT AD0
    0 VARIABLE AB 0 VARIABLE *K
    0 VARIABLE LIN 0 VARIABLE EN
    : AF AD0 AB @ + ;
    : B32 32 BASE ! ;
    : NK IF 0 0 ELSE B32 AF NUMBER
    DECIMAL 1024 U/ THEN ;
    : N1 0 AF COUNT OVER + SWAP ;
    -->
    ( - EDytor Wprowadzania: 2/5 - )
    : NU N1 DO
    I C@ 47 OVER 58 <=< 64 ROT
    87 <=< + 0= + LOOP NK ;
    : K0 1 *K +! C@ *K @ * DUP
    EN +! + 1024 MOD ;
    : K1 DO
    I K0 I C@ 0= IF I 38
    BLANKS LEAVE THEN LOOP ;
    : KP 0 *K ! 4 AF C! 32 AF
    5 + C! NU 0 EN ! ;
    : KOD= KP >R >R 0 AF 38 + AF 6
    + K1 R> = R> LIN @ = SWAP
    OVER * ;
    : .R2 0 <# # # #> TYPE SPACE ;
    -->
    ( - EDytor Wprowadzania: 3/5 - )
    : ?L LIN @ B32 .R2 DECIMAL ;
    : WP 125 EMIT 1 LIN +!
    ." Do wprowadzenia linia "
    ?L CR CR ;
    : ?DOB DROP AF 6 + AF 32 CMOVE
    32 AB +! WP 1 ;
    : ?Z CR CR AF 1+ 37 TYPE 155
    EMIT 28 EMIT 0 ;
    : LL
    ." Teraz potrzebna linia: "
    ?L ;
    : ?ZLE 125 EMIT 0= IF LL ELSE
    ." Popraw: " THEN ?Z ;

    -->
    ( - EDytor Wprowadzania: 4/5 - )
    : KO KOD= IF ?DOB ELSE ?ZLE
    THEN EN @ 1442 = * ;
    : GO 125 EMIT CR ." Gotowe!"
    CR ;
    : E1 1 82 C! 0 AB ! 0 LIN !
    WP ;
    : BBL AF 1024 AB @ OVER MOD
    - DUP AB +! BLANKS ;






    -->
    ( - EDytor Wprowadzania: 5/5 - )

    ( EDW: -- )
    : EDW E1 BEGIN AF 39 ERASE
    AF 1+ 37 EXPECT KO UNTIL BBL
    GO ;

    ( EDW-SAVE: n -- )
    : BSAV OVER + SWAP DO DUP I 0
    R/W B/BUF + LOOP DROP ;
    : EDW-SAVE AD0 SWAP B/SCR *
    AB @ B/BUF / BSAV ;

    ;S

    ( /END )
    • 41: CommentAuthorbartgo
    • CommentTime8 Oct 2023
     
    Wciąż są jakieś błędy wynikające z niedoskonałości OCR ale następna aplikacja została przeniesiona i się uruchamia. Konkurs bez nagród - co to za aplikacja?
    • 42:
       
      CommentAuthorpirx
    • CommentTime8 Oct 2023
     
    jakiś BBS?
    • 43: CommentAuthorbartgo
    • CommentTime8 Oct 2023 zmieniony
     
    Źle się wyraziłem... faktycznie kod służy do jakichś połączeń modemowych ale jest on otwarty w środku aplikacji o którą mi chodzi.

    No dobrze, sam udzielę odpowiedzi... udało się wciągnąć i uruchomić edytor Fortha R. Pantoły, z TA. Narzędzie jest z jednej strony dość proste jak na to czego oczekiwałem ale ma dwie ciekawe cechy:
    - pionowe przewijanie tekstu z "ekranu" który się nie mieści w całości
    - edytowanie naraz tylko jednego "ekranu", żeby zapisać trzeba wyjść z edytora (bo poza nim są inne funkcjonalności)
    - bufor / wieloschowek - było to opisane w kursie ale dopiero zrozumiałem o co chodzi - clipboard do przestawiania kawałków kodu

    Do tego, edytor jak na razie działa z wbudowanym w Extended Fig Forth asemblerem (Ragsdale, ekran 75 - AFAIK) bez zmian (chyba tylko zmiana ;C na END-CODE była potrzebna).
    • 44: CommentAuthorbartgo
    • CommentTime14 Nov 2023 zmieniony
     
    Tak więc... aktualnym celem tego mojego mini-projektu jest

    A) uzyskanie obrazu dyskietki z gotowym, w miarę wygodnym retro-środowiskiem do pisania w Forth, opisanym krótkim README / tutorialem, wraz z kilkoma narzędziami i kodem z "Poznajemy Forth" Ruszczyca (a może i z "Język Forth" Bieleckiego); wszystko ma być zgodne przynajmniej z APX Extended fig-Forth Rev. 2 (udostępnione w miarę oficjalnie na Atari Archive)

    B) więc, będą tam aplikacje z TA
    - minimalnie rozszerzony przez p. Rolanda "Ragsdale Assembler" (już jest załączony do Forth-a ale wersja z TA ma dwie drobne zmiany, lepiej mieć wszystko razem)
    - edytor wprowadzania (głównie żeby wprowadzić Edytor Fortha, ale mogę też stopniowo uporządkować jego kod, żeby był czytelny i edukujący... jestem też zainteresowany jak dokładnie są liczone sumy kontrolne)
    - Edytor Forth'a

    C) może ze dwa inne edytory (zmodyfikowany EDIT by M. Dougherty i może edytor z Mesa Forth)

    D) narzędzia do zarządzania ekranami (konwersja, SERT i TRADE do przestawiania ekranów)

    E) uporządkowane źródła z "Poznajemy Forth" i może coś z "Język Forth"


    Jak na razie:
    - użyłem edytora wprowadzania, kodu z tajemnice.atari8.info oraz skanów TA żeby poprawić/wprowadzić kod edytora (działa, sprawdzone)
    - paste w emulatorze Altirra był bardzo pomocny, jest to dużo szybsza metoda niż konwersja pliki-ekrany
    - plik jest do poczyszczenia i rozbicia na osobne pliki plus README i ATR do zrobienia
    - wersja źródłowa jest tutaj (dwie kopie edytora, raz z kodami raz bez):
    ->link<-

    W pierwszym etapie udostępnię ATR tylko z narzędziami z TA.

    Oryginalnie chciałem napisać tutorial jak wprowadzać i uruchamiać kod ale z gotowymi narzędziami będzie się to lepiej robiło i prezentowało.

    Faktycznie, środowisko nie jest tak bardzo potrzebne - kod można wklejać z pliku do Altirry :D -- ale to trochę oszustwo!
    • 45:
       
      CommentAuthorGeorge
    • CommentTime15 Nov 2023
     
    Super, zachęca mnie to do kupienia "Poznajemy Forth" Ruszczyca w Retronics.
    • 46: CommentAuthorbartgo
    • CommentTime15 Nov 2023
     
    Polecam też "Język Forth" Bieleckiego, tanio na Allegro. Mało przykładów konkretnych programów ale jako taki dodatkowy leksykon dość przydatne, i nawet "flow" książki jest niezły. I super fajne diagramy.
    • 47:
       
      CommentAuthorGeorge
    • CommentTime16 Nov 2023
     
    A do obecnych maszyn ograniałeś Fortha? Np. gforth?
    • 48: CommentAuthorbartgo
    • CommentTime16 Nov 2023
     
    Nie, na razie nie będę tego robił. GForth jest ciekawy, piszą też dobrze o Jonas Forth. Skupiam się na Atari i potem pewno przejdę do UF albo innego Forth na wirtualną maszynkę UXN, ciekawie się to rozwija.
    • 49: CommentAuthorbartgo
    • CommentTime16 Nov 2023
     
    Może jeszcze komentarz... Uważam, że Forth NIE JEST dobrym językiem dla dużych maszyn, nowych komputerów. Może się sprawdzać w mikrokomputerach i małych urządzeniach. Najlepszym zastosowaniem PC dla Forth są pewno cross-compilatory.

    Nie powstał chyba żaden Forth na PC który pozwoliłby na budowę aplikacji wyglądających jak coś z XXI wieku. Wszystkie GUI wyglądają okropnie, środowiska to jakieś koszmary.

    Atari, Commodore, UXN - myślę, że to są właściwe platformy dla tego języka i super metody żeby wykorzystać jego cechy edukacyjne, "łamigłówkowe" i zrobić coś fajnego, niedużego ale działającego.
    • 50:
       
      CommentAuthorGeorge
    • CommentTime16 Nov 2023
     
    Ostatnio czytałem, że OpenBoot (taki BIOS) używany w komputerach Sun i zaadaptowany do Maców programowany jest Forthem i nawet chyba można w konsoli OpenBoot używać Fortha.