Z80 dallamcsengő és eprom

Mindenféle hardver tuning, ötlet ZX81-hez, ZX Spectrum-hoz régről és napjainkból...
Avatar
Zozosoft
Hozzászólások: 777
Csatlakozott: 2012.01.06. 14:03
Kapcsolat:

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: Zozosoft » 2015.04.16. 23:18

Kalandozzunk csak, mert kalandozni jó! :-)

Elsőként a megfejtés: ahogy nézem nincsen semmilyen címdekódolás, így az EPROM tartalma ismétlődik a teljes memóriatartományban. Szóval a végén akkor lejátszik némi programkódot hangként amíg nem talál egy FFh-t.

Üres adatbuszról olvasás általában valóban FFh-t eredményez, de ezt semmi nem garantálja, gyakorlatilag az alkatrészek kiszámíthatatlan szórásától függ. Ha valóban biztosítani akarjuk, hogy üres buszon FFh legyen, akkor felhúzó ellenállásokat kell rakni az adatbuszra. Ezzel úgy egyébként nem foglalkoztak a gyártók anno.
EP esetén vannak olyan alaplapok ahol pont nem úgy jön össze a dolog, hogy FFh legyen, azaz lebeg az üres adatbusz, véletlenszerű bájtokat generálva. Ez pont az említett 2-es megszakítási módot használó Spectrumról átírt programoknál érdekes. Ha a program nem teljes táblát használ, (ill. ha EP rutinokhoz fel lett használva tábla egy része), akkor az ilyen gépeken le fog fagyni. Felhúzó ellenálláshíd beépítésével könnyedén javítható a dolog. Ill. sok bővítőkártyán rajta van, így ilyennel használva a gépet nem jön elő a gond.
Több bővítés csatlakoztatásakor és/vagy órajel növelésekor nagyobb valószínűséggel jön elő a dolog, persze ha nincs a konkrét állapotot beállító felhúzó ellenállás a konfigurációban.
Spectrumon nem tudom mi a helyzet, de különböző interface-ekből ott is lehetett szép kupacokat összehozni :-)

Programozási szempontból a tanulság: ha valami nincs meghatározva, akkor nem szabad arra számítani, hogy "úgy szokott lenni"...

Avatar
csege
Hozzászólások: 218
Csatlakozott: 2012.01.06. 15:15
Tartózkodási hely: Föld.Naprendszer.Tejút

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: csege » 2015.04.16. 23:18

Pgyuri:
a nem létező címek esete a következő:
a cpu 16 címvezetékből az epromot címzi az alsó
12 vezeték A0-A11
az A12 választja a felső/alsó fél epromot
az A13-A15 csak lóg a levegőben
a legmagasab címezhető cella 2764 esetében:
1f ffh
0001 1111 1111 1111
Féleprom szelektor (kapcsoló, v jumper) (A12)
xxx1 felső
xxx0 alsó eprom tartalom

A cpu A0-A11 cimvezetéke címzi az epromot.
tehát a címezhető tartomány:
xxxx 1111 1111 1111, vagyis 0F FFh
amikor átlépi ezt a cpu címzése (1000h), az eprom ebből annyit lát, hogy
(0001 0000 0000 0000)
xxxx 0000 0000 0000, vagyis 0000h

ebből következik, hogy a felső fél-eprom utolsó dala éktelen kakofóniával végződik, mivel az eprom 0000h címén lévő programot akarná lejátszani.

csaba
Alapító tag
Hozzászólások: 247
Csatlakozott: 2012.01.09. 19:18
Rádióamatőr hívójel: HG5BMU
Tartózkodási hely: Surány
Kapcsolat:

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: csaba » 2015.04.17. 07:49

Csak pontosítás kedvéért, nincs nem létező cím,
mindenhonnan be lehet olvasni adatot, lehet írni, program utasítást végrehajtani stb.
az a HW. kialakításától függ, hogy melyik eszköz mennyire pontosan milyen címekre van dekódolva.
Általában a spórolás miatt nincsenek teljes dekódolások, jócskán megnehezítve ezzel a későbbi lelkes fejlesztők dolgát.
Addig pedig akár lehet programként végrehajtani képernyő tartalmat is, lásd ZX81.

Avatar
Pgyuri
Alapító tag
Hozzászólások: 537
Csatlakozott: 2012.01.06. 13:34

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: Pgyuri » 2015.04.17. 09:43

Üdv,

Köszönöm az információkat, szimuláltam is, hogy mi lehet így az eredmény. A programkód "szerencséjéből" adódóan mindössze 2 hangnyi visítás távozik a záró dallam lejátszása után, utána címzéstechnikából adódóan belebotlik egy "ugrás az 1. zenére" jelbe, így egész simán megúszza a lemaradt adatot.

Azért kíváncsiságból felülírtam azt a véletlenül odaeső byte-ot, mire sikerült végig lejátszani magát a programot :) Szép kis hangkavalkád alakult ki és jó idő eltelt, míg újra odaértem az 1. zenéhez, de sikerült.

Megkímélve a kedves látogatókat (próbálkozókat), egyből a 158. zene következik és utána sok SPACE kell, mire újra megjön az első zene. Figyelmes és türelmes hallgatók még a tárolt frekvencia-táblázatra is ráismernek, ha jó fülelnek.

Pgyuri
Csatolmányok
moka.z80
Program-lejátszás hangokban
(6.76 KiB) Letöltve 26 alkalommal.

Avatar
Pgyuri
Alapító tag
Hozzászólások: 537
Csatlakozott: 2012.01.06. 13:34

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: Pgyuri » 2015.04.17. 09:49

Üdv,

A megszakítás táblához:

A "fránya" lebegő érték miatt mindig 257 elemű táblát volt szokás csinálni ahhoz, hogy bármilyen interface-t elviseljen az IM 2-es megszakítás, pedig ennyi byte nagy kincs volt egy játék életében. Lehet ezen belül is trükközni még, de ez már nem ide kapcsolódik. Ha pedig egy programban nem volt feltöltve egy ilyen táblázat, akkor születtek a babonák, amelyek így hagzottak:

"Ez a játék nem szereti a Kempston illesztőt." pedig nem a játék, hanem az illesztő volt a vacak. Pechemre nekem is ilyen jutott anno.

Pgyuri

ui: Ki leszünk tiltva, ha dallamcsengő címén szakmai kurzust tartunk :)

Avatar
Zozosoft
Hozzászólások: 777
Csatlakozott: 2012.01.06. 14:03
Kapcsolat:

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: Zozosoft » 2015.04.17. 10:05

Áhá, szóval Spectrumon sem volt ismeretlen a jelenség.

Avatar
Pgyuri
Alapító tag
Hozzászólások: 537
Csatlakozott: 2012.01.06. 13:34

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: Pgyuri » 2015.04.17. 12:40

Üdv,

Sőt a legszebb, hogy 16K-s Spectrumon nem is lehetett IM 2 rutint írni játékokhoz ... de ez se dallamcsengő :)

Pgyuri

Avatar
FpgaJoco
Hozzászólások: 125
Csatlakozott: 2012.01.09. 15:20

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: FpgaJoco » 2015.04.17. 13:17

Szerintem lehetett, csak meg kellett keresni a rom-ban azt a címet, ami megfelelő helyre mutatott a rendelkezésre álló 16K ram-ban. Ezek persze hardwired-d értékek voltak, de attól működhettek. A kapcsolási rajz alapján a az adatbusz minden bitje fel van kötve logikai 1-re, ezért az biztos, hogy a "vektor", amit senki sem küld a címbuszra, az FF lesz.
Pl a bombjack játéknál - bár az nem 16k-s, az igaz - az I a 3C00..3CFF területre mutat, és ott akadtam meg,
hogy ha oda plusz tartalmat tettem, akkor nem FFFF-et olvasott, és ettől elszállt a játék.

Joco

Avatar
Pgyuri
Alapító tag
Hozzászólások: 537
Csatlakozott: 2012.01.06. 13:34

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: Pgyuri » 2015.04.17. 13:31

Üdv,

Sajnos az előbb részletezett okból nem elég egy pontra mutatni a ROM-ban, a hibátlan, interface független megoldáshoz 257 byte azonos érték kell, ami a ROM-ban csak $FF formában áll rendelkezésre, így az ugrópont címe $FFFF, ami viszont kimutat a 16K-s gép címtartományából, tehát nem tudjuk magunk irányítani.

A Bombjack esetén azt a megoldást választják, hogy a 65535 címre egy JR ugró utasítást tettek, ami a 0000 címről veszi, hogy hova ugorjon. Lehetne JP is, ami az $AFF3 címre ugratna a megszakításnál.

Pgyuri

Avatar
Zozosoft
Hozzászólások: 777
Csatlakozott: 2012.01.06. 14:03
Kapcsolat:

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: Zozosoft » 2015.04.17. 14:19

Ezt a ROM FF-ek felhasználása trükköt sok más programban is használták. Ha jól tudom ez volt a gond a Spectrum 128-al is, mivel ott tettek plusz dolgokat az üres helyre, azért aztán sok játék nem ment. Aztán végül az Amstrad-ék tettek be egy sima 48-as ROM-ot is a gépbe a 48-as módhoz.

Válasz küldése

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég