Bridge

Kutassunk fel minden magyar fejlesztésű ZX81/Spectrum programot!
dave
Hozzászólások: 31
Csatlakozott: 2012.12.03. 21:11

Re: Bridge

Hozzászólás Szerző: dave »

igen nem egy hanem 82 :-) erre gondoltam nem szokványos betöltés alatt.
Avatar
Pgyuri
Alapító tag
Hozzászólások: 597
Csatlakozott: 2012.01.06. 12:34

Re: Bridge

Hozzászólás Szerző: Pgyuri »

Üdv,

Elkészült a program megismerése és "feltörése".

A program 4 részből áll:

1; BASIC betöltő
2; Fejléc nélküli felesleges, betöltésre nem kerülő programrészlet
3; Főprogram
4; UDG és kiegészítő gépi kódú rutin

A BASIC betöltő átállítja a hibakezelést, így ha a további részekben betöltési vagy BREAK hiba történik, akkor lefagyással vagy üres memóriával örvendezteti meg a játékost (fő rész betöltésének előrehaladásától függően).

A fejléc nélküli rész csak egy zavaró kódsor, semmi szerepe, nem tölti be a program.

A főprogram a maga 49200 byte hosszúságával akkoriban másolhatatlan volt, minimális gépi kódú ismerettel (értsd fejléc nélküli betöltési-mentési kód megírása, kb. 40 byte) könnyen megoldhatóvá vált.

Az UDG rész csak egyszerű adatokat tartalmaz.

Alaposabban megvizsgálva:

A BASIC betöltő nem csinál mást, mint előkészíti a sima betöltést, de tulajdonképpen semmire se kell. Ha egyszerűen LOAD "" CODE-al kerül betöltésre a program, akkor is szépen fut, ezért aztán nemigen érthető, miért nem csak annyiból a BASIC betöltő.

Az UDG a grafikai részhez kell, míg a kiegészítő gépi kódú rutinnak nincs más teendője, mint a véletlenszám-generálást segíti.

Jöjjön a fő rész, ami rejtélyes, miként is működhet. A magyarázat a következő:

A LOAD "" CODE teleírja szinte az egész memóriát, így felülírja a rendszerváltozókat és a BASIC területet is. Ezért aztán mikor vége lesz a betöltésnek, a BASIC értelmező simán kiemeli a soron következő programsor címét a megfelelő helyről (23610,23611) és értelmezi az ott álló programsort, ami elindítja a megfelelő helyről a programot. A Bridge esetén sincs másképp, azonban mivel az egész program BASIC-ben íródott, így tulajdonképpen lefuttatja önmagát.

Információk a programról:

Novotny László minden elismerést érdemel, mivel ekkora programot ritkán írtak Spectrum alap BASIC-ben.

551 programsor, benne 2148 utasítás, 82 változó és mindez 36230 byte-ot foglalva a 41473 maximális szabad helyből igazán csodálatos teljesítmény. Ehhez szükséges volt még a számok VAL "5" formában történő memória-takarékosságára is, egyszóval nagy munka lehetett megírni és beírni a programot.

Érdekességek, programhibák:

Valószínűleg szakmai önérzetességből a betöltő program neve nem simán Program: NOVO BRIDGE módon jelenik meg, hanem eldugja a Program: feliratot és csak egy lila csíkot húz a képernyőn. Nem tudni miért, de akkor érdekesek voltak ezek a megoldások, bár nagy trükk nem volt bennük.

Szép megoldás, ahogy a BREAK lenyomását kezelte, ami mindig a program főmenüjébe visszatérést adja. BASIC programokban inkább más megoldásokkal lehet találkozni (programfagyás, reset).

Alapvető hibája a programnak a BASIC-ből adódó lassúságán túl, hogy INPUT utasítást használ adatbekéréshez, ami ugyan nem állítható meg STOP vagy hibás adat bevitelével, azonban ha valaki telegépeli az egész képernyőt, akkor csúnyán elrontja a megjelenését a programnak. Persze miért tenne bárki is ilyet ...

Maradt egy apró helyesírási hiba a programban, egy helyen a "Nincs ilen lapod" szöveg szerepel.

Néha kicsit "pimasz" a program, a "Rendesen add meg a lapot!" még elmegy, de a "13-ig kell tudni számolni" üzenet már-már túlmegy a piaci programban megengedhető mértéken. Nem azért vásároltam, hogy gyalázzanak :)

A magyar ékezetesítés kár, hogy kimaradt, pedig még befért volna még, ámbár nem az UDG területen, más megoldást kellett volna választani.

és végül a FELTÖRÉS:

Ha már valaki egy ilyen hatalmas programot készít, biztos hagy valami lyukat, saját titkos bejáratot, hogy szükség esetén beléphessen úgy, ahogy senki más nem tud. Bizony, itt is van egy ilyen hátsó ajtó:

A program főmenüjében meg kell nyomni a <> gombot (symbol shift és W), amire alul megjelenik a villogó kurzor, várva, hogy megadjuk a jelszót: T O Z S I és máris előttünk a teljes, listázható, ismerkedhető, kimenthető program. Hogy mit jelenthet a TOZSI, TÖZSI vagy TŐZSI szó, ezt már csak Novotny úrtól tudhatjuk meg :) Lehet saját becenév, szerelme, felesége, gyermeke, cicája, kutyusa neve és még bármi más egyéb.

Ennyit erről, magához a Bridge kártyajáték rejtelmeihez nem tudok hozzászólni :)

Pgyuri
Avatar
Bali
Alapító tag
Hozzászólások: 2493
Csatlakozott: 2012.01.06. 12:34
Tartózkodási hely: Budapest III.
Kapcsolat:

Re: Bridge

Hozzászólás Szerző: Bali »

Na ez igen, szép munka, asszem a májusi Hónap Speccyalistája jár ezért a szép elemzésért, ráadásul ilyen gyorsasággal.
Akkor az a 82 byte, az csak valami kis fake kódocska? Van benne valami értelmes?
-= Bali =-
(c) 1983-2017 Evil-Soft
dave
Hozzászólások: 31
Csatlakozott: 2012.12.03. 21:11

Re: Bridge

Hozzászólás Szerző: dave »

Nagyon szép ismertető, nem is gondoltam volna hogy ilyen hamar kivesézed a játékot. Meg kell mondjam ez sokkal érdekessebb mint maga a játék. Köszönjük :-)
Avatar
Asimo
Hozzászólások: 149
Csatlakozott: 2012.01.09. 17:49

Re: Bridge

Hozzászólás Szerző: Asimo »

Pgyuri írta:A főprogram a maga 49200 byte hosszúságával akkoriban másolhatatlan volt, minimális gépi kódú ismerettel (értsd fejléc nélküli betöltési-mentési kód megírása, kb. 40 byte) könnyen megoldhatóvá vált.
Első nekifutásra nem értettem, hogyan lehetne Spectrumon, akár csak 40 bájtos kóddal több mint 48K-nyi adatot másolni, hiszen a 49200 bájt 48 bájttal több mint a 48K-s Spectrumban található RAM memória. Aztán ZX Blockeditorral megnéztem a TZX fájlt és kiderült a turpisság: a BRIDGE nevű "kódot", ami egyben tartalmazza a betöltő képernyőt és a basic programot is, a 15000. memóriabájttól kezdi el betölteni. Ez pedig ugye a ROM területen található. Így a vége 64200-nál van, maradt 1336 bájtunk.

Nagy ötlet. Tetszik, hogy a basic program gépi kódnak van így álcázva, és a betöltő képernyőt is beolvassa vele együtt. Bár, ezzel a megoldással inkompatibilis a későbbi Spectrumokkal. Nem tudom, pl. a ZX Printer vagy a ZX Interface 1 jelenléte nem okoz-e gondot.
Avatar
Pgyuri
Alapító tag
Hozzászólások: 597
Csatlakozott: 2012.01.06. 12:34

Re: Bridge

Hozzászólás Szerző: Pgyuri »

Üdv,

Az első ilyen programvédelmi megoldással a Perils of Bear George ( http://www.sinclair.hu/szoftver/heti_ja ... tekid=7394 ) programnál találkoztam.

Ezek a programok kizárólag Interface I-nél "bolondulnak meg", hiszen a rendszerváltozók ennél az eszköznél csúsznak el a memóriában.Elindításuk alapja pdig a hibakezelő vagy BASIC sorértelmező rendszerváltozó felülírása, esetleg a stack átírása.

Még akkor sem okozna problémát másolásuk, ha a teljes memóriát teleírnák, hiszen a megírt betöltő-kimentő programot úgy írjuk meg, hogy az első 6912 (kép) vagy például a Bridge esetében 6912+1384 byte-ot simán a ROM-ra töltjük, így a fennmaradó kód simán befér a memóriába és utána ki is menthető. Ezután a képet levágjuk a "gigászi" file elejéről, ezután a megfelelő fejlécek elkészítésével (ehhez még programozási tudás se kell, csak egy kis logika) kész a teljes program, mehet elé a betöltő programunk:

10 LOAD "" SCREEN$
20 LOAD "" CODE

Ennyi :) Mindenesetre az alapötlet 1983-1985 időszakban jó volt, a Copy 86M tömörítős másoló program hamar végzett ezekkel, később már nem is alkalmaztak ilyen megoldást.

Pgyuri
Kiki
Hozzászólások: 35
Csatlakozott: 2012.01.09. 00:26

Re: Bridge

Hozzászólás Szerző: Kiki »

Pgyuri írta: Tényleg, illene valamikor egyet pizzázni megint Óbudán, hogy ehessek finom szuflét!

Pgyuri
Ha szuflézi támadna kedved, annak bármikor idejét vehetjük, csak egyeztetni kell! :D
Válasz küldése

Vissza: “Magyar fejlesztések”