Z80 dallamcsengő és eprom

Mindenféle hardver tuning, ötlet ZX81-hez, ZX Spectrum-hoz régről és napjainkból...
buddhasoft
Speccyalista
Hozzászólások: 237
Csatlakozott: 2012.01.09. 08:48
Tartózkodási hely: Biatorbágy
Kapcsolat:

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: buddhasoft » 2015.05.06. 19:39

Hú de örülök, hogy megpezsdült a dolog!

Csege! Valóban 3 dolgot képes lejátszani a hardver. A butább, alacsony memóriacímen lévőket, a kicsit kellemesebb magas memóriacímen lévőket és egy "bim-bam" csengőhangot. Így a dallamcsengő kétféle funkciót tud ellátni. 1.) kapucsengő 2.) ajtócsengő.

Pgyuri! Köszönet a spectrumosításért!

Ha gondoljátok, mindketten kiérdemeltetek egy-egy panelt.

Igaz a legújabb változatot, amiben helyre lettek állítva a cím és adatbuszok, még nem tudtam legyártatni.

A többi azonban nálam megtekinthető, kipróbálható, és átvehető! :)

Eddig 3 félepanel van belőlük.

Megvan az eredeti Urbán féle is - eredeti gyártmány - nem én készítettem.

2 féle újabb verzió, a második működőképes a kevert Urbán féle tartalommal, azaz ekvivalens az eredetivel, csak kétoldalas, kicsit ügyesebb panel.

A harmadik inkább egy munkapéldány.

A negyedikhez még gyűjtök ötleteket - esetleg kell-e még valamit rágyógyítanom..

Például a spectrum zenék lejátszásához szükséges kiegészítést, jelformálást.

Gyakorlatilag ki kellene találni, Az ULA hogyan oldotta ezt meg. Megoldhatnám valami cél- mikrokontrollerrel is , de valahogy azt egy kicsit tiszteletlenségnek érzem.
(c) 1986 BUDDHA SoFtWaRe HUNGARY

Avatar
csege
Speccyalista
Hozzászólások: 217
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.05.06. 22:54

most néztem meg az Ada-Winter féle piros könyvben 106. oldaltól
ULA paracsbyte 5. bit vezérli a hanxórót

Kód: Egész kijelölése

OUT 254, 16 hanxóró h
OUT 254, 00 hanxóró l
ez megy ki az ULA 28as lábára, ami ezután (Ada-Winter p:159) a speakerre két diódán keresztül kerül.
és ennyi. minden csodát ebből fabrikáltak a coderek
(c)

buddhasoft
Speccyalista
Hozzászólások: 237
Csatlakozott: 2012.01.09. 08:48
Tartózkodási hely: Biatorbágy
Kapcsolat:

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: buddhasoft » 2015.05.08. 19:39

Sziasztok!

Azért az élet nem áll meg. Összeállítottam egy címdekódert a 16 bitre (mivel a címbusz 16 bites) 254-es címre digit IC-kből.

1.) TTL IC-s megoldás: 3 tok szükséges.
2.) EPROM, ROM, GAL, PAL ezek mindegyike alkalmas a dekódolásra, de a méretük elég nagy (igaz nem nagyobb mint 3db ic)
3.) Mikrokontroller (ez tetszik a legkevésbé, mert programozni kell+ PC+ oprendszer nyűgök)
4.) Z80 PIO

Ki mire szavazna inkább?
Mellékelem a TTL verziót is.
16_bit_dekoder_or.jpg
Ehhez persze kellhet még egy adatbit dekódolás is, de ez egyszerűen elhagyható, ha csak az adatbusz egy bitjét engedélyezzük/tiltjuk a cím meglétével. Erre egy tranzisztor is elegendő, amit a címdekóder engedélyez (tápfesz), a bemenetére pedig az adatbusz 5. bitje kerül (16), amit átenged az engedélyező jelnél a kimenetére.

Az már maga a hang.

Van még egy probléma.

Ezt jumperrel gondoltam megoldani, bár lehet szoftveres megoldás is.
Mégpedig az órajel.
A dallamcsengő órajele: 1,5MHz (mért adat).
A speccyé: 3,5MHz - ez már kvarcot is feltételez.

Azaz, hogy mindez érthetőbb legyen:
Szándékomban áll a dallamcsengőt úgy átalakítani, hogy speccy zenék is lejátszhatóak legyenek rajta.
Bár PIO felhasználásával, szinte egy kis mikrokontrolleres fejlesztőkörnyezetként is használható lenne például egy szendvicspanel és tüskesorok felhasználásával.

Vélemény?
(c) 1986 BUDDHA SoFtWaRe HUNGARY

Avatar
csege
Speccyalista
Hozzászólások: 217
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.05.09. 11:55

Buddha Mester!
Szerintem túlbonyolítod a dolgot!
Az ADA-Winter könyv is csak annyit mond az ULA kiválasztásáról, hogy az A0 low az ULA portja
innen a 254-es portcím: 1111 1110

a Spectrumos körökben én nem látam (a máskülönben teljesen korrekt) teljes címbuszt figyelő címdekódolást, mint amit te megvalósítottál.

jelen esetben is majdhogynem elegendő az A0 az /IORQ és a /WR aktív állapotát figyelni, (ULA kiválasztva kimenetnek) és ezután az adatbusz 5. bitjét a hangszóróra kötni. (ez volt a Spectrumban a hangkeltés)

ilyen módon elméletileg csak 8 eszközt lehet megszólítani, de ritka az olyan konfig, amelyik 8 (7+ULA) perifériát kezelne egyszerre.

tapasztalati bizonyíték az iljen "egyszerűsített" io portkezelésre:
out 192, 1 // kezelte a 80k lapozó áramkörét (254-192=64) 1011 1111 A6 a kiválasztó

vagy Kempston joystick interface:
http://8bit.yarek.pl/hardware/zx.joystick/kjschem.gif
ahol az A5 volt a periféria kiválasztó a beolvasáskor (1101 1111)

és most valami egészen más:
Érdekes lenne Asimo Kartársat meginterjúvolni,
[?] milyen módon tudta előbányászni az általa megszólaltatott zenéket az eredeti programokból?
[?] talált-e valamilyen kvázi-szabványos formátumot a zene tárolására a progikban?
[?] a beepola lejátszó által emészthető formátumot ő generálta, és ha nem, akkor hogyan?
[?] jól látom-e, hogy ezek a zenék két csatornán szólnak, tehát nem kell valós polifóniát előadni?

és ezek után elgondolkodni, lehetséges-e, érdemes-e egy két(három)csatornás lejátszómotort (át)írni 1.5MHz órajelre? hiszen itt annyi mindent NEM kell csinálnia a CPU-nak a zenélés közben!
:)

ui:
a Z80 nem 8 biten címzi az i/o portokat?
tehát nem kell 16 címvezetéket figyelni?

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

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: Zozosoft » 2015.05.09. 13:15

A Z80 az hivatalosan 8 biten címzi az I/O-t, de a felső 8 címbitre is megy ki adat. A közvetlen portcímes utasításoknál A értéke, C-vel címzetteknél a B.
Ez aztán Spectrumban alaposan ki lett használva, kezdve a billentyűzet leolvasással.

De jelen esetben szerintem is elég az A0-t figyelni ahogy az ULA is teszi.

Egy fontos dolog még: az IORQ az megszakítás elfogadáskor is aktív! Ezt úgy lehet megkülönböztetni, hogy ilyenkor RD vagy WR helyett az M1 aktív. Ahogy írtad, hogy a WR-t is figyelni kell, úgy jó lesz.

csaba
Speccyalista
Hozzászólások: 190
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.05.11. 09:24

Sőt ha nincs más perifériád a dallamcsengőben, még az A0 is elhagyható a címdekódolásból.
Elég lenne az IORQ WR alacsony szintjeire kapuzni.

csaba
Speccyalista
Hozzászólások: 190
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.05.11. 09:34

Az eredeti rajzon az IC3 7474 egy kettes osztónak van bekötve, ez csinál a rövid IORQ impulzusokból 1-1 kitöltésű negyszögjelet.
A speccy zenékhez ezt D tárolónak kell bekötni, mert ott kell a kitöltés állítási lehetősége. (legalábbis a jobb zenéknél)
Viszont így átkötve a dallamcsengő programot is módosítani kell.

buddhasoft
Speccyalista
Hozzászólások: 237
Csatlakozott: 2012.01.09. 08:48
Tartózkodási hely: Biatorbágy
Kapcsolat:

Re: Z80 dallamcsengő és eprom

Hozzászólás Szerző: buddhasoft » 2015.05.11. 15:15

Sziasztok!

Most kissé megkavarodtam.

Sejtettem, hogy eredetileg nem variálták túl a címdekódolást, de ez BUG alapja lehet - én nem szeretem az ilyen megoldásokat. Alapvetően 3 tok nem túl nagy főleg a mai SMD verziókból. Időközben azért ujjgyakorlatként írtam egy mikrokontrolleres címdekódolást is, csak teszthardvert kell összerakni, amint lesz időm. A PIO is jó lehetne, de ahhoz is kell címdekódolás - és még a szoftveren is kellene módosítani.

Mindent összevetve értem én, hogy az ULA kiválasztása egyetlen címvezetékkel megoldható, csak némi zavart érzek az erőben:
1111 1110
Csege szerint (Ada-Winter könyv) elegendő Azt a bitet figyelni ami itt 0?
Mert hardver szerint ugye ez 0111 1111 mivel 2-es számrendszerben ez a helyiértéknek megfelelő sorrend.
Mivel a Z80 16 biten címez, ugyanaz a címbit, nem csak 254-et jelenthet - ami szintén gondot okozhat.
Értem én, hogy ha csak dallamcsengő, akkor minek túlbonyolítani.
De éppen az lenne a célom, hogy kicsit univerzálisabb hardvert nyerhessek. Ahhoz precízebb dekódolás kellene.
Ha mikrokontrollert használnék, akkor 16 címvezeték, 8 adat és 8 vezérlőláb lenne használható egyetlen tokkal. Azért ennek is megvannak a maga előnyei. Hátránya, hogy két eltérő procit kellene programozni.

Végül - a megépített dallamcsengőben már van egy jelformálás, ami használható a spectrum zenékhez is.

Azért - hogy legyen némi spectrumos vonatkozása a gondolatmenetem folytatásának: Este feltöltöttem egy AY emulátort egy propeller chipre - és azok a zenék is tökéletesen használhatóak dallamcsengőnek - bár igen hosszúak :) . Minden *.ay fájlt feltúrtam a neten, 1-2 egészen jól szól rajta.

Méretre ez sem nagyobb megoldás, mint a Z80.

És, hogy ismét megcsillogtassak valamit, végre sikerült úgy beállítanom a BST szoftvert, hogy lássa rendesen a már letöltött propeller állományokat, így a Propeller on speccy szoftver végre (2 év után) le tudott hibátlanul fordítódni a chipre. Azaz ismét előáshatom a hardvert hozzá a fiók mélyéről.
Erre a változatra gondolok:
https://www.youtube.com/watch?v=TB5INqBrUYs
(c) 1986 BUDDHA SoFtWaRe HUNGARY

Avatar
csege
Speccyalista
Hozzászólások: 217
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.05.11. 16:21

Mindent összevetve értem én, hogy az ULA kiválasztása egyetlen címvezetékkel megoldható, csak némi zavart érzek az erőben:

1111 1110
Csege szerint (Ada-Winter könyv) elegendő Azt a bitet figyelni ami itt 0?
Mert hardver szerint ugye ez 0111 1111 mivel 2-es számrendszerben ez a helyiértéknek megfelelő sorrend.
Mester Úr!
látszik. hogy belebonyolódtál a címvezetékek dekódolásába!
hol láttál te így felírva 254et, hogy 0111 1111?!
a cím(cezeték)eket is a 2 hatványai szerint jelöljük/tük.
A0 a 2^0 helyiértékü címvezeték
A7 a 2^7, az
A15 a 2^15 helyiértékű
leírni is a 2es számábrázolás szerint írjuk:

Kód: Egész kijelölése

AAAA AAAA
7654 3210
---------
1111 1110 BIN = FE HEX =254 DEC
1111 1101 BIN =FDH=253
1111 1011 BIN =FBH=251
1111 0111 BIN =FEH=247
1110 1111 BIN =EFH=239
1101 1111 BIN =DFH=223
1011 1111 BIN =BFH=191
0111 1111 BIN =EFH=127

 
és igen, az ULA kiválsztása kimenetként a XXXX XXX0 címen az /IORQ és a /WR aktív értékénél történik.
mivel ilyenkor mindhárom aktiv láb 0 értéket kap, könnyebb kezelni a port kiválasztást. két OR kapu. és ott a /PortEnable jel. (nézd meg a kempston kapcsolási rajzon)
Az XXXX XXX helyen praktikus okokból kell 1Hszintet adni, hogy másik (szintén a nekik kiválasztott cimvezeték L szintjét figyelő) periféria ne érezze magát megszólítva.
így lesz az UlA címe 1111 1110B vagyis 254.

Avatar
csege
Speccyalista
Hozzászólások: 217
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.05.11. 19:46

de ez az egész a ZX Spectrumon BELÜL érdekes, meg talán a zenék kivadászásánál kellhet.
a Dallamcsengő esetén nem szükséges az ULA teljes működését lemodellezni.

szerintem :roll: :ugeek:

Válasz küldése

Ki van itt

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