Welcome, Guest. Please login or register.


Author Topic: Spectrum programok átírása (Read 390358 times)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14779
  • Country: hu
    • http://enterprise.iko.hu/
Re: Spectrum programok átírása
« Reply #30 on: 2006.July.27. 21:28:48 »
A mese elött még egy kiválló Hudson program :-) Nem véletlenül maradt a végére, ebben találtam meg azt amit eredetileg kerestem.

Offline gafz

  • EP lover
  • *
  • Posts: 700
  • Country: hu
    • http://gafz.atw.hu
Re: Spectrum programok átírása
« Reply #31 on: 2006.July.27. 22:06:45 »
Öööö... izé... mit kerestél? A billentyûzetfigyelõ részt?
Enterprise Forever

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14779
  • Country: hu
    • http://enterprise.iko.hu/
Re: Spectrum programok átírása
« Reply #32 on: 2006.July.27. 22:56:36 »
Na akkor engedve a tömeg követelésének :-) A Bomberman rejtelmei.

A program 8000H-ra töltödik, és itt is indul. Ez egy kicsit érthetetlen, hiszen így nem fut 16K-s Spectrumon, pedig egy 8K-s programtól elvárná az ember... pláne 1983-ban...
A futás közbeni adatokat és a vermet pedig a legfelsõ 16K-ban tartja.

IM1-ben fut, ezzel sincs gond.

Hang, azaz OUT (0FEH),A utasítás két helyen van, 9098H és 91D8H, mivel keretszít nem használ, így ezek a már korában megismert CSAKOUT rutinra lettek cserélve, azaz RST 0.

Attributum területet csak egy helyen piszkál: 90EFH címen van egy LD BC,5800H utasítás, amihez 912AH címen találni egy LD (BC),A-t, amit a megfelelõ KONV rutin hívására kellett cserélni. Ez az egész rutin egy karakternyi területen helyezi el a grafikus adatokat, plusz a megfelelõ attributum bájtot.

Lássuk a billentyûzetet:
Lehet találni 2 db IN A,(0FEH) utasítást.

Ez a kis rutinocska figyeli a SPACE ill a CAPS SHIFT gombokat. A "leírásban" nem szereplõ módon a CAPS SHIFT is megfelel tûz gombnak, azaz lehet vele bombát potyogtatni :-)

Ezenkívûl még egy IN A,(C) féle megoldást találni itt:


Ezeket átírva a szokásos PORTFE rutin hívásra, már kapunk egy tökéletesen mûködõ átíratot, de az irányítás az eredeti nem túl barátságos :-)
Itt jött a tünödés, hogyan lenne legjobb átirni joystickra az irányítást. Ehhez elkezdtem végignézni, mit is csinál a billentyûzet kezelõ rutin.
Ez a 916AH-n kezdõdõ rutin ciklusban akár az egész billentyûzetet lekérdezi! Ezt már túlzásnak éreztem a játék igényeihez képest, hiszen ide csak 5 gomb kéne...
Egész pontosan azt csinálja a rutin, hogy végig kérdezi a billentyûzetet, addig amíg nem talál egy lenyomott gombot. Ha talált akkor a HL-el címzett táblázatból kikeresi az ASCII kódját. (A táblázat 919Eh-tól 40 bájt)
Tehát ez egy teljes és általános billentyû lekérdezés.
Megkeresve, hogy ez a rutin honnan van hívva, ezt találni:

A rutin elsõ része kikeresi egy 16 elemû táblázatból a visszakapott gomb kódját, 9163H-nál az A 1-16-ig tartalmaz egy sorszámot, ill. ennél nagyobb ha nem találta meg a táblázatban a kódot.
A táblázat 913FH-n van, és párosával vannak benne a billentyûk:
W,I
E,O
D,L
C,SYMBOL SHIFT
X,M
Z,N
A,J
Q,U
Ezekbõl négy páros már ismerõs az eredeti kezdõképrõl, mint a 4 irány billentyûi. Mi lehet a maradék? Egy pillantás a Spectrum billentyûzetre, máris világos, hogy a gép két oldalán elhelyezkedõ gomb kupacról van szó, ami a 4 fõ és a 4 átlós irányt tartalmazza, plusz ott van a korábban már emlegetett CAPS SHIFT és SPACE mint egy-egy tûz gomb a két külön kupachoz.
Ezen a ponton a rutin alkalmas lenne a két gombkupaccal, két külön játékos számára biztosítani az irányítást.
Tovább lépve a 9164-65H-n lévõ utasítások osztják a kapott értéket 2-vel, így a két gomb kupac már párhuzamosítva lett. A kimenet tehát 1-8-ig az irányoknak megfelelõen, ill. 9 ha az egyik irány sincs megnyomva.
Lássuk ennek a rutinnak a felhasználását:

Mint látható ezesetben a lehetséges 8 irányból, csak négy van lekezelve.

Így tehát csináltam két rutint, az egyik a tûzgombokat figyeli az összes joystickon (internal esetén a Space és az ALT is mûködik), erre cserélem le a 912DH-n lévõ rutint.
És egy másikat ami a négy irányt figyeli a joystickokon, ezt pedig a 914FH helyére teszem be, és 1,3,5,7-et ad vissza,  ill. 9-et ha egyik se aktív.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14779
  • Country: hu
    • http://enterprise.iko.hu/
Re: Spectrum programok átírása
« Reply #33 on: 2006.July.27. 23:09:19 »
Miután jól kielemeztem a Bomberman billentyûfigyelését, kiváncsi lettem, hogy a többi Hudson progiban is ezek a rutinok vannak-e használva, ami elég logikus feltételezésnek tünt.
Nemcsak a billentyûfigyelés, hanem minden más: kezdõcím, hang, attributumkezelés is tök egyformán van ezekben (csak a címek térnek el), így alakult úgy, hogy hamár belenéztem, át is írtam :-)
A Cannon Ball-ban és a "gyilkos zöldségek támadásában" :-) 8 irányos billentyûzet kezelésbõl csak 2 irány van használva.
Az Itasundorious a Bomberman-hoz hasonlóan 4 irányt használ.
És végül a Frog Shooter az ami használja mind a 8 irányt! Bár a kezdõképernyõn titkolják ezeket a gombokat...
Ehhez tehát ki kellett egészíteni a betöltõben a billentyû kezelést. Hiszen a megismert rutin nem alkalmas két gomb lenyomásának az érzékelésére, így mindig csak azt érzékeli, amit elöbb kérdez le.
Így külön kellett a rutin elejére belerakni, hogy lekérdezi az átlós irányokat a joystickokról, ha nincs ilyen akkor lehet a sima irányokat nézni.
Olyan progi nincs, ami a két kupac gombot külön kezelné, két játékos számára.

Még egy apró kiegészités: a zöldséges meg a békalövõ :-) használ piros keretszínt is, így ennek kezelését még bele kellett rakni a CSAKOUT rutinba.

Itt van az egész kollekció betöltöinek forrása:

Offline Ep128

  • EP addict
  • *
  • Posts: 1860
  • Country: hu
    • Honlapom
Re: Spectrum programok átírása
« Reply #34 on: 2006.July.28. 00:19:39 »
Részben még én is értem amit leírtál, pedig az már nagy szó...  :lol:
Köszi!

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14779
  • Country: hu
    • http://enterprise.iko.hu/
Re: Spectrum programok átírása
« Reply #35 on: 2006.July.28. 09:54:16 »
Quote from: "Ep128"
Részben még én is értem amit leírtál, pedig az már nagy szó...  :lol:
Köszi!


Akkor már érdemes volt ennyit rizsáznom? :-)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14779
  • Country: hu
    • http://enterprise.iko.hu/
Re: Spectrum programok átírása
« Reply #36 on: 2006.July.29. 13:37:23 »
Mai adag a Rebelstar kupac. Mint emlegettük a hibás programoknál, hogy a játék végén jól lefagy.
Úra átírtam, és kiderült, hogy nem az átirat volt hibás, hanem egészen egyszerüen a program vége egy JP 0 (azaz reset a Spectrumon).
De nem volt hiába, hogy nekiálltam újra átirni, mert így egy menetben átírtam az eddig EP-n nem létezõ Rebelstar 2 jákosos változatot is, és a Rebelstar 2-t (1 és  2 játékosos verziót) is.
Ezek is 15 perc alatt átírható játékok közé tartoznak :-) (Látod Gafz, ilyet kell kiválasztani :D )
OUT (0FEH),A volt kb 6 db, egy helyen volt attributum írás. Egyedül az okozott kisebb fejtörést, hogy ROM rutinokat hív a billentyûkezeléshez, de az is pár perc alatt összedobható volt :)
A játék végén a Spectrum Reset az EP logohoz kilépéssel lett helyettesítve.
Meg persze a szokásos, EXOS és EP64 kompatibilis betöltõ...

Itt a jelenlegi verzió, teszteljétek :-)
Még elmélkedem, hogyan lehetne kilépés helyett a játék újrakezdését megoldani, meg egy játékállás mentés se lenne rossz :-)

Offline gafz

  • EP lover
  • *
  • Posts: 700
  • Country: hu
    • http://gafz.atw.hu
Re: Spectrum programok átírása
« Reply #37 on: 2006.July.29. 16:47:45 »
Tehetek én róla, hogy az egyik kedvenc játékom (igaz C64-en :oops: ) a "szinte átírhatatlan" kategóriába tartozik Spectrumon? :)
Enterprise Forever

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14779
  • Country: hu
    • http://enterprise.iko.hu/
Re: Spectrum programok átírása
« Reply #38 on: 2006.July.29. 16:52:45 »
Másik kedvenced nincs? :)

Offline gafz

  • EP lover
  • *
  • Posts: 700
  • Country: hu
    • http://gafz.atw.hu
Re: Spectrum programok átírása
« Reply #39 on: 2006.July.29. 16:55:00 »
Azokat már átírták... nincs sok, sosem voltam valami nagy játékos...

Ja a Wizard of Wor II ami csak C64-en létezett... ezt majd elfelejtettem :)
Enterprise Forever

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14779
  • Country: hu
    • http://enterprise.iko.hu/
Re: Spectrum programok átírása
« Reply #40 on: 2006.July.29. 22:04:58 »
Na az elsõ részbe sikerült már mentést fabrikálnom.
Úgy mûködik, hogyha megnyomjuk valamelyik funkcióbillentyût játék közben, ez jelzi, hogy majd menteni kell a kör végén. (ezt jelzi a megváltozott keretszin)
A kör végén történik a mentés. Betöltés egyértelmû :-)

Miért pont így mûködik?
Ehhez lássuk a program eredeti betöltõjét:


A 24700-on hívott rutin választja ki a nehézségi szintet. A 24900-on lévõ pedig egy környi játék. Ami végtelen ciklusban van hívogatva... (amig nem jön közbe a JP 0)
Így a legegyszerübb az, ha amikor éppen visszatért egy környi játékból, akkor ki lehet menteni az egész játékmemóriát.

Offline Lacika

  • EP addict
  • *
  • Posts: 3218
  • Country: hu
    • http://www.ep128.hu
Re: Spectrum programok átírása
« Reply #41 on: 2006.July.30. 22:32:41 »
Quote from: "gafz"
Azokat már átírták... nincs sok, sosem voltam valami nagy játékos...

Ja a Wizard of Wor II ami csak C64-en létezett... ezt majd elfelejtettem :)


Szia!

Van Spectrumra egy hasonló program, az a címe, hogy Wizard's Warrior


http://www.ep128.hu/Games/Wizards_Warrior.htm

sajnos pont a lényeg "veszett ki" belõle...

Offline geco

  • EP addict
  • *
  • Posts: 7232
  • Country: hu
    • Támogató Támogató
Re: Spectrum programok átírása
« Reply #42 on: 2006.July.31. 06:29:52 »
Quote from: "Zozosoft"
A 24700-on hívott rutin választja ki a nehézségi szintet. A 24900-on lévõ pedig egy környi játék. Ami végtelen ciklusban van hívogatva... (amig nem jön közbe a JP 0)


Nem lehet helyettesíteni a JP 0-át egy JP 24700-al?

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14779
  • Country: hu
    • http://enterprise.iko.hu/
Re: Spectrum programok átírása
« Reply #43 on: 2006.July.31. 08:56:29 »
Quote from: "geco"

Nem lehet helyettesíteni a JP 0-át egy JP 24700-al?

Nem mert a változó területek (amik kb 500 helyre vannak szétszórva...) a játék adatait tartalmazzák, így max az érhetõ el, hogy tovább játszol a játék vége után :) persze minden körben megint kiirja, hogy nyertél/vesztettél.

Offline geco

  • EP addict
  • *
  • Posts: 7232
  • Country: hu
    • Támogató Támogató
Re: Spectrum programok átírása
« Reply #44 on: 2006.July.31. 10:15:58 »
Quote from: "Zozosoft"
Nem mert a változó területek (amik kb 500 helyre vannak szétszórva...) a játék adatait tartalmazzák, így max az érhetõ el, hogy tovább játszol a játék vége után :) persze minden körben megint kiirja, hogy nyertél/vesztettél.


Az jó.:)