Enterprise Forever

:HUN => Programozás => Topic started by: Z80System on 2013.March.30. 14:04:52

Title: FORTH
Post by: Z80System on 2013.March.30. 14:04:52
FORTH- nak is legyen sajat topikja magyarul is.
Title: Re: FORTH
Post by: Z80System on 2013.March.30. 14:07:12
Azt tudja valaki, hogy a FORTH- ban honnan jon ez az utasitas forma ? Es hogy miert kellett az assembly- t is hozza igazitani ?! Hihetetlen hogy 25 ev utan is tud lenni egy akkora kavaras, hogy a hajam az egnek all ...

Tehat hogy mi ez a "5, a, ld " sorrend ? Mire jo ez ? Vagy mit gyorsit ? Vagy kinek allt igy ra az agya ? Honnan jon ez ?
Title: Re: FORTH
Post by: lgb on 2013.March.31. 09:06:58
Quote from: Z80System
Azt tudja valaki, hogy a FORTH- ban honnan jon ez az utasitas forma ? Es hogy miert kellett az assembly- t is hozza igazitani ?! Hihetetlen hogy 25 ev utan is tud lenni egy akkora kavaras, hogy a hajam az egnek all ...

Tehat hogy mi ez a "5, a, ld " sorrend ? Mire jo ez ? Vagy mit gyorsit ? Vagy kinek allt igy ra az agya ? Honnan jon ez ?

Egyszeru, a forth egy verem (stack) orientalt nyelv. Pl a klasszikus 5 + 3 az forth-ban 5 3 + Azaz, beteszed a verembe az 5-ot, majd a 3-at, a + meg osszeadja a verem tetejen levo ket szamot. Az assembly syntax-a ezzel van osszhangban, mivel az is forth implementacio vegulis: a parametereit benyomod a verembe eloszor, es utana jon csak hogy "ld" aminek az operandusai ott vannak a veremben mar.

A forth szepsege amugy az, hogy total egyszeru megis hatekony: a nyelvnek ugymond syntaxisa sincs igazan, un "szavakbol" (word) all, melyeket lehet definialni, az alap forth mag csak annyi kb hogy a word list-ben word-ot keres, amit definialtal, illetve stack-be probal szamokat (ami memoria cim is lehet) elhelyezni, ha nem talal wordlistben semmit az aktualis szora, akkor megprobalja annak tekinteni. A maga a + stb is ugy van definialva, valojaban nem arrol van szo, hogy a "forth mag" resze lenne. Igy a forth nagyon elemi szinten nezve hihetetlenul egyszeru, ellentetben pl BASIC-kel stb.

Pl gforth-ban amit Linux alol probalgatok, egy szo definicioja utolag is megvizsgalhato (see), ott pl latszik, hogy a + az valojaban egy definialt forth word, aminek definicioja egy assembly nyelvu reszlet, ami pont azt csinalja, hogy a verem tetejen levo ket szamot osszead (kiveve azokat), majd az eredmenyt szinten a verembe helyezi el.
Title: Re: FORTH
Post by: Lacika on 2013.March.31. 09:35:35
Azt tudja valaki, hogy a fig-Forth (http://www.ep128.hu/Ep_Util/Prg/Z80_fig-Forth.rar)-ban hogy működik a file-kezelés?
Title: Re: FORTH
Post by: Tuby128 on 2013.March.31. 11:44:49
Pont most ismerkedem egy nagyon hasonló programnyelvvel, ahol a verem (STACK) 1. elemét ACCU1-nek, a 2. elemét ACCU2-nek hívják.
Az összeadás úgy működik, hogy:
L 12   - (LOAD) Töltsd a 12-őt az ACCU1-be (ACCU1 régi tartalma egyúttal ACCU2-be másolódik)
L 23  - Töltsd a 23-at az ACCU1-be (ACCU1 régi tartalma egyúttal ACCU2-be másolódik, tehát ACCU2 most 12 lesz)
i+   - Végezz integer összeadást ACCU1 és ACCU2 között, majd az eredményt tárold el ACCU1-ben
S "result"  - (STORE) Tárold el ACCU1-ben lévő értéket a "result" nevű változóba

Vajon a Forth is így működik?
Title: Re: FORTH
Post by: Tuby128 on 2013.March.31. 12:22:57
Ohh, valamit elfelejtettem. Az általam elmített esetben a verem nem olyan verem, hogy "megtelik", tehát nem kell üríteni. Itt inkább arról van szó, hogy új elem esetén az egész sor átmásolódik a következő helyre, a legutolsó pedig "kiesik". Egyébként nálam 4db ACCU van, de még nem jöttem rá milyen utasítás használja az ACCU3-at és 4-et.
 Ha processzorszinten gondolkodom az ilyen típusú veremkezeléshez nem is kell a memóriában matatni, elég hozzá néhány regiszter, ami a megfelelő módon működik. (Természetesen a feldolgozandó adatokat a memóriából vesszük).
  Valahol mintha azt olvastam volna, hogy az x86 matematikai társprocesszora (amit később a 386DX, 486DX majd Pentium prociknál be is integrálták) is hasonló elven működik. Sőt mintha az MMX utasításkészlet is valahogy így dolgozna.
Title: Re: FORTH
Post by: endi on 2013.March.31. 13:07:31
Érdekes amiket írtok. Az jutott eszembe hogy akkor a gépi kódú nyelv miért nem forth jellegű? Vagy későn jött létre ez a nyelv, hogy már csak a math procikba építhettek be hasonlót?
Title: Re: FORTH
Post by: endi on 2013.March.31. 13:08:07
Illetve azért a gépi kód is forth jellegű valamennyire persze...
Title: Re: FORTH
Post by: Lacika on 2013.April.01. 14:39:47
Ez vajon miért nem működik?

( Vangelis )
: PL
  DURATION PITCH 1 SOUND
;

: VANGELIS
  0 63 63 2 PHASE 0 -10 -10 4 PHASE
  0 -40 -40 20 PHASE 1 ENVELOPE
  160 LEFT 160 RIGHT
    54 6 PL 53 6 PL 53 12 PL
    54 6 PL 53 6 PL 53 12 PL
    54 6 PL 53 6 PL 53 12 PL
    61 24 PL
    61 6 PL 60 6 PL 58 12 PL
    58 6 PL 56 6 PL 54 12 PL
    54 6 PL 53 6 PL 51 36 PL
    53 6 PL 51 6 PL 51 12 PL
    53 6 PL 51 6 PL 51 12 PL
    53 6 PL 51 6 PL 51 12 PL
    60 24 PL
;
Title: Re: FORTH
Post by: Lacika on 2023.April.18. 20:54:26
Van fantázia ebben a nyelvben.
Ez mondjuk még nem FORTH "mélyvíz" :-)
Title: Re: FORTH
Post by: Lacika on 2023.April.19. 09:38:47
Két számolást meg lehet még "spórolni".
Title: Re: FORTH
Post by: Zozosoft on 2023.April.19. 09:41:40
Jé egy ember aki képes volt Forth programot írni? :ds_icon_cheesygrin:
:smt038
Title: Re: FORTH
Post by: Tuby128 on 2023.April.19. 15:59:37
Code: [Select]
  3 1 DO I
    650 1 DO

Egyik sorban így van a DO utána meg úgy. Ez nekem nem tetszik. Gondolom az elso DO az olyan mint a Basic-ben a FOR.
A másodiknál nem értem miért kell 650 a sor elejére.
Title: Re: FORTH
Post by: Lacika on 2023.April.19. 19:18:58
Az I nem tartozik a DO, hoz, az már a következő utasítás :-)
Mindkettő számlálós ciklus, a lépésköz a ciklus végéből derül ki (LOOP - egyesével lépeget vagy +LOOP)
Title: Re: FORTH
Post by: gflorez on 2023.April.19. 19:25:18
Reverse Polish Notation (https://en.wikipedia.org/wiki/Reverse_Polish_notation).
Title: Re: FORTH
Post by: vargham on 2023.December.28. 20:52:11
IS-FORTH alatt hogyan lehet 80 oszlopos módba váltani?
Title: Re: FORTH
Post by: SlashNet on 2023.December.28. 21:24:43
[attachimg=1]

Quote
-TEXT +n-
Sets up and displays 24 lines of text with +n columns (40 or 80). Resets the current graphics and text channel numbers. Closes the graphics channel if open.
Title: Re: FORTH
Post by: vargham on 2023.December.29. 18:21:59
Próbáltam, nem csinál semmit. Hibaüzenetet sem ad. Marad 40 oszlopos a képernyő.
Title: Re: FORTH
Post by: Lacika on 2023.December.29. 18:58:20
80 -TEXT
Title: Re: FORTH
Post by: vargham on 2023.December.29. 19:16:27
ÁÁÁÁ, de hülye voltam. Kösz. Simán lehagytam előle a kötőjelet... Az agyam valahogy nem úgy processzálta, hogy az egy begépelendő karakter.
Nagyon köszönöm.
Title: Re: FORTH
Post by: Lacika on 2023.December.29. 19:30:13
Ezek a könyvek nincsenek meg valakinek?
https://www.libri.hu/konyv/Forth-programozasi-rendszer-es-nyelv-9.html (https://www.libri.hu/konyv/Forth-programozasi-rendszer-es-nyelv-9.html)

https://www.libri.hu/konyv/A-FORTH-programozasi-nyelv-8.html (https://www.libri.hu/konyv/A-FORTH-programozasi-nyelv-8.html)
Title: Re: FORTH
Post by: vargham on 2023.December.29. 19:32:18
Akkor itt az első Forth programom:
Code: [Select]
EMPTY
: STAR 42 EMIT ; ( -- )
: 03ROLL 3 0 DO 3 ROLL LOOP ; ( n1, n2, n3, n4, -- n4, n1, n2, n3 )
: 3DUP 4 1 DO 2 PICK LOOP ; ( n1, n2, n3 -- n1, n2, n3, n1, n2, n3 )
: PUTSTAR 3DUP + SWAP MOD 0 = 03ROLL - SWAP MOD 0 = OR IF STAR ELSE SPACE THEN ; ( n1, n2, n3 -- )
: ROW 37 0 DO 2DUP I SWAP PUTSTAR LOOP 2DROP ; ( n1, n2 -- )
: SECTION DUP 1 + 0 DO CR DUP I ROW LOOP DROP ; ( n -- )
: STARS BEGIN DUP SECTION REPEAT ; ( patternsize -- )
A verembe kell tenni a minta méretét, és utána a STARS szóval indul. Pl: 8 STARS
Title: Re: FORTH
Post by: Lacika on 2023.December.30. 16:13:17
Újabb FORTH program:

Code: [Select]
: READKEY
  1+ BEGIN KEY 48 -
     2DUP > OVER 0 > AND IF
       DUP 48 + EMIT CR SWAP DROP EXIT
    THEN DROP
  REPEAT ;
: 21GAME CLS 102 #GRAPHICS
  0 2 RND
  ." 21 is a two player game." CR
  ." The game is played by choosing a number (1, 2 or 3) to be added to the running total. "
  ." The game is won by the player whose chosen number causes the running total to reach exactly 21." CR
  ." The running total starts at zero. One player will be the computer"
  CR
  BEGIN
    1 SWAP -
    3 INK
    CR ." The sum is " OVER . CR
    1 INK
    DUP 1 = IF
      SWAP
      ." How many would you like add?"
      ."  (1-3) " 3 READKEY
    THEN
    DUP 0 = IF
      ." It is the computer's turn."
      SWAP 4 OVER 1- 4 MOD -
      DUP 4 = IF 3 RND 1+ MIN THEN
      DUP CR ." Computer adds " . CR
    THEN
    +
    SWAP
  OVER 21 < NOT UNTIL
  CR 3 INK
  0 = IF ." Bad luck. Computer wins."
  ELSE ." Congratulations. You win."
  THEN CR DROP 1 INK 101 #GRAPHICS
 ;

Ez (https://rosettacode.org/wiki/21_game#IS-BASIC) alapján készült.
Title: Re: FORTH
Post by: Lacika on 2023.December.30. 16:39:41
A két IF ág ELSE-vel egyszerűsítve:
Code: [Select]
: READKEY
  1+ BEGIN KEY 48 -
     2DUP > OVER 0 > AND IF
       DUP 48 + EMIT CR SWAP DROP EXIT
    THEN DROP
  REPEAT ;
: 21GAME CLS 102 #GRAPHICS
  0 2 RND
  ." 21 is a two player game." CR
  ." The game is played by choosing a number (1, 2 or 3) to be added to the running total. "
  ." The game is won by the player whose chosen number causes the running total to reach exactly 21." CR
  ." The running total starts at zero. One player will be the computer."
  CR
  BEGIN
    1 SWAP -
    3 INK
    CR ." The sum is " OVER . CR
    1 INK
    DUP 1 = IF
      SWAP
      ." How many would you like add?"
      ."  (1-3) " 3 READKEY
    ELSE
      ." It is the computer's turn."
      SWAP 4 OVER 1- 4 MOD -
      DUP 4 = IF 3 RND 1+ MIN THEN
      DUP CR ." Computer adds " . CR
    THEN
    +
    SWAP
  OVER 21 < NOT UNTIL
  CR 3 INK
  0 = IF ." Bad luck. Computer wins."
  ELSE ." Congratulations. You win."
  THEN CR DROP 1 INK 101 #GRAPHICS
 ;
 
Title: Re: FORTH
Post by: Zozosoft on 2023.December.30. 16:49:51
Nem semmi! :shock: Az én agyam nem veszi be ezt a nyakatekert szintaxist :oops:
Title: Re: FORTH
Post by: vargham on 2023.December.30. 18:57:03
Nem semmi! :shock: Az én agyam nem veszi be ezt a nyakatekert szintaxist :oops:
Nekem másfél nap volt megírni a csillagrajzolót olyanra, amilyenre akartam. Pedig amúgy programozóként dolgozom. :-D Szóval nekem is nehéz volt. Szünidei kihívásnak vettem.
Title: Re: FORTH
Post by: Zozosoft on 2023.December.30. 19:02:17
Nekem másfél nap volt megírni a csillagrajzolót olyanra, amilyenre akartam.
Ez amúgy a karácsonyi csillagos? Be is küldted nekik?
Title: Re: FORTH
Post by: Lacika on 2023.December.30. 20:31:21
Következőnek, amit kinéztem magamnak, az a Demo kazettáról az Animan.
Bár ott elég sokat kellene zsonglőrködni a veremmel, meg a cindexszel is.
Title: Re: FORTH
Post by: vargham on 2023.December.30. 21:33:11
Ez amúgy a karácsonyi csillagos? Be is küldted nekik?
Az adta az alapötletet. De el is késtem vele, meg nem pont azt csinálja a program. Még le kéne vágni a sarkokat, hogy oda ne rajzoljon. Forthban még nem jutottam el idáig. :-)
Title: Re: FORTH
Post by: szipucsu on 2023.December.31. 08:10:10
Ez vajon miért nem működik?

( Vangelis )
: PL
  DURATION PITCH 1 SOUND
;

: VANGELIS
  0 63 63 2 PHASE 0 -10 -10 4 PHASE
  0 -40 -40 20 PHASE 1 ENVELOPE
  160 LEFT 160 RIGHT
...
Nem értek hozzá, de nem lehet, hogy ilyesmi kellene?

: PL
  160 LEFT 160 RIGHT ENVELOPE DURATION PITCH 1 SOUND

És az envelope és a duration után/elé is kellene valami szám/változó? Az envelope fázisok végére pedig nem kellene a LEFT és a RIGHT? És az envelope fázisai mennének előbbre, utána a sound, ami megszólaltatja?
Amúgy a számok alapján nekem nem Vangelisnek tűnik, hanem valami klasszikus lehet, de meg nem mondom, micsoda...
Title: Re: FORTH
Post by: Lacika on 2023.December.31. 09:33:11
A letölthető (http://ep128.hu/Ep_Util/Prg/Is-Forth.rar) csomagban 1.0-ás .EXT van és 1.1-es verziószámú .ROM. A ROM-ból hogyan is kell csinálni EXT-et?
Title: Re: FORTH
Post by: Zozosoft on 2023.December.31. 10:57:27
A letölthető (http://ep128.hu/Ep_Util/Prg/Is-Forth.rar) csomagban 1.0-ás .EXT van és 1.1-es verziószámú .ROM.
Ebben az a érdekes, hogy honnan van 1.1-es ROM-od, amikor csak és kizárólag az 1.0 forgott közkézen? :shock:
ep128emu ROM csomagban is az van. Érdekes, hogy pont az 1.0 ROM meg hiányzik nálad :lol:
1.1-et egyedül Andrew Richardstól kapott lemezen találtam, illetve valaki valahova feltöltött egy forth-pascal ROM-ot 2008-ban, abban van még.

Az EXT fáj hibás méretű, a végére valahogy odakeveredett egy csomó szemét, a valódi hasznos méret a fejléc alapján 16390 bájt.
Azonban a ROM végi üres terület (csomó FFh bájt) is levágható, így csak 15878 bájt marad, magnós töltésnél ez is számít :-)


Quote
A ROM-ból hogyan is kell csinálni EXT-et?
ROM elejéről le kell vágni az első 10 bájtot, helyére odafűzni 16 bájtos EXOS modul fejlécet, 6-os típusbájttal.
Hossz az a teljes ROM tartalom esetén 4000h-0Ah=3FF6h, azaz a fejlécben F6h 3Fh. A fölösleges FFh-ek levágásával 3DF6h (F6h 3Dh).
Itt a kiegészített csomag.
Title: Re: FORTH
Post by: vargham on 2023.December.31. 16:05:43
Van valami doksi az 1.0 és az 1.1 különbségeiről?