Oldal: 1 / 2

1K Chess

Elküldve: 2012.01.22. 21:15
Szerző: Bali
Sziasztok!

Erről mindenképpen kell kicsit eszmecserélnünk:

http://sinclair.hu/index.html?szoftver/ ... ekid=27455

Jöhetnek a hozzászólások...

üdv,
Bali

Re: 1K Chess (ZX81)

Elküldve: 2012.01.23. 16:43
Szerző: Zozosoft
Mókás, hogy látszik, ahogy gondolkodik :)
A kód mindösszesen 672 bájt
Mi tölti ki a maradék helyet? Gondolom van a képernyő, ami ha jól tudom takarékosan van megoldva ZX81-en, annyit foglal amennyin információ van. Pár tucat bájt verem...
en passant (Egy különleges lépés a sakkban, olyan ütés, amelyre akkor kerülhet sor, ha az egyik fél gyalogja kettőt előrelépve kikerülné az ellenfél gyalogjának átlós ütését. Az egyetlen eset a sakkban, amikor egy gyalog nem az átlósan előtte álló, hanem a mellé lépő figurát ütheti ki.)
Bevallom én olyan koca sakkozó vagyok, hogy erről eddig nem is hallottam :oops:

Re: 1K Chess (ZX81)

Elküldve: 2012.01.23. 16:56
Szerző: Bali
Ennek az en passant-nak én is csak most néztem utána... :)

Re: 1K Chess (ZX81)

Elküldve: 2012.01.23. 17:21
Szerző: Asimo
672 bájt a kód, 125 bájt a rendszerváltozóknak, 110 bájt a képernyőnek. Marad 117 bájt.
A kód BASIC-be van ágyazva, az 1 REM sortól. Ez a REM sor elvisz 5 bájtot.
A kód után jön még pár BASIC sor: 2 SLOW, 3 RAND USR. Ez további 21 bájt. A 4-ik sor csak a program létrehozásakor kell, SAVE előtt törli.
Már csak 91 bájt hiányzik az 1024-hez. Ebből jön le a verem, ami a RAMtop-tól indul visszafelé (17407-től).
A mesterséges intelligencia lehet, hogy rekurzív algoritmuson alapul (nem néztem a kódot), így lehet, hogy a maradék bájtok kellene a veremnek.
Ha valakinek van ereje/ideje, kiderítheti ezt a forrásból. :D

Re: 1K Chess (ZX81)

Elküldve: 2012.01.23. 23:45
Szerző: Asimo
Megvizsgáltam közelebbről a programot:

16384 ($4000) rendszerváltozók
16509 ($407D) BASIC program start (itt van az első REM sor)
16514 ($4082) Sakk gépi kód start
17187 ($4323) SLOW utasítás (a program második sora)
17193 ($4329) RAND USR utasítás (a program harmadik sora)
17202 ($4332) D-FILE (képernyő)
17327 ($43AF) VARS (BASIC változók címe)
17334 ($43B6) E_LINE (ideáig tart a BASIC program, ezután munkaterület)
17338 ($43BA) CPU verem idáig lejön ha lépünk
17404 ($43FC) ERR_SP (a BASIC szerint az SP/GOSUB verem)
17407 ($43FF) RAM vége ($3E - GOSUB end-marker)

Tehát:

125 bájt rendszerváltozók
693 bájt BASIC program, amibe 672 bájt gépi kód van ágyazva
125 bájt képernyő (amiből 110 bájt maga a sakktábla, a többi newline karakter)
66 bájt verem
15 bájt egyéb, BASIC által használt terület

Összesen 1024 bájt. Úgy néz ki, tényleg minden szabad bájtot felhasznált David Horne.

A ZX-81 nem tud bináris adatot beolvasni szalagról, ezért szokás BASIC program REM soraiba ágyazni a gépi kódot.
A SAVE utasítás pedig nem csak magát a BASIC sorokat menti el, hanem szinte mindent, majdnem az összes rendszerváltozót ($4009-től), a képernyőt, a változókat (ameddig az E_LINE mutat). A sakkprogram kazettán gyakorlatilag $4009-$43B6 memóriaterület, ami így 941 bájt hosszú. És valóban, a netről letöltött 1KZXChess.1.ChessQueen.p fájl is ilyen hosszú. :)

Kicsit játszottam a programmal. Érdekes effekt, ahogy végignézi a táblát a lehetséges lépések miatt. A következő feladat ennek az algoritmusnak a megértése. :D

Re: 1K Chess (ZX81)

Elküldve: 2012.01.24. 13:45
Szerző: Bali
Na akkor a kód része szépen kivesézésre került, azt tényleg jópofa, ahogy próbálkozik kitalálni, hogy mit is lépjen.
Akinek sikerül megvernie, küldjön mér egy képet a sakk-matt-ról. :)

Re: 1K Chess (ZX81)

Elküldve: 2012.01.24. 15:49
Szerző: Pgyuri
Üdv,

Jaj, ne, ez borzalom :) Ezzel sakkozni siralom, mondhatni nem is sakkozik, csak képes lépni. A sakk-matt-nál ledermed, gondolom reset-re vár, hogy töltsd be újra.

Maga az a kihívás, hogy beférjen 1K-ba, szép teljesítmény, de ezért pénzt kérni ???? Egy újságban leadva, hogy gépeld be, teljesen érthető, de kazettán ???? Átverés magas szintje.

Annak idején sokat sakkoztunk Spectrummal. Különböző erősségűek voltak a sakkprogramok (kedvencem a beszélő volt), de általánosan elmondható volt, hogy képesek voltak 2-3 lépés után "elfelejteni", hogy mattveszélyben állnak. Amúgy a WoS-on csináltak egy Spectrum sakk vs. Spectrum sakk versenyt, hogy melyik milyen eredményt ért el, melyik lesz a világbajnok.

Pgyuri

Re: 1K Chess (ZX81)

Elküldve: 2012.01.24. 17:23
Szerző: Zozosoft
Pgyuri írta:Amúgy a WoS-on csináltak egy Spectrum sakk vs. Spectrum sakk versenyt, hogy melyik milyen eredményt ért el, melyik lesz a világbajnok.
Egy linket tudnál ehhez?

Re: 1K Chess (ZX81)

Elküldve: 2012.01.24. 17:48
Szerző: Pgyuri

Re: 1K Chess (ZX81)

Elküldve: 2012.01.24. 18:00
Szerző: Bali
Ilyen alapom össze lehetne ereszteni a ZX81-es sakkprogramokat is, esteleg a győztest meg a Cyrus II-vel. :)