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
     
    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ć
    - 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!