Blog:MIF 85

Z PMD 85 Infoserver

(Rozdiel medzi revíziami)
Djb (Diskusia | príspevky)
(kompilator integrovany)
Aktuálna verzia (18:42, 23. august 2023) (upraviť) (vrátiť)
Djb (Diskusia | príspevky)
(presun blogu na stranku)
 
Riadok 1: Riadok 1:
-
{{VelkyNadpis|MIF 85 - Music interface pre PMD 85}}
+
#redirect [[MIF 85]]
-
 
+
-
{{Ambox | type=notice | style=text-align:center | text=Bola opravená schéma MIF 85. Predošlá verzia mala problém s [[Dĺžka_impulzu_prerušenia_i8080|prerušením]].}}
+
-
<br />
+
-
 
+
-
__TOC__
+
-
 
+
-
[[Obrázok:MIF85-prototype.jpg|thumb|Prototyp MIF 85]]
+
-
 
+
-
'''MIF 85''' je hudobný (zvukový) interface postavený na obvode '''SAA 1099P'''. Tento obvod, ktorý bol použitý napríklad aj v počítači SAM Coupé, poskytuje:
+
-
* 6 frekvenčných generátorov - 8 oktáv na každý generátor
+
-
* 2 šumové generátory
+
-
* oddelené riadenie hlasitosti pre ľavý a pravý kanál, pre každý generátor - 16 úrovní
+
-
* 2 generátory hlasitostnej obálky
+
-
* mixér šumu a tónov
+
-
 
+
-
O prototype MIF 85 pojednáva [http://blog.borik.net/2012/04/mif-85-prototyp.html tento článok]
+
-
 
+
-
== Zapojenie MIF 85 ==
+
-
 
+
-
[[Obrázok:Mif-85-sch.png|thumb|Schéma MIF 85]]
+
-
 
+
-
MIF 85 sa pripája na aplikačný konektor [[PMD 85]], na ktorom sa nachádzajú všetky potrebné signály.
+
-
 
+
-
Obvodové zapojenie srdca MIF 85, teda samotného <code>SAA1099P</code> (IC1), vychádza z katalógového zapojenia, ale v podstate bolo prevzaté zo schémy počítača SAM Coupé. Hodinový vstup <code>SAA1099P</code> je budený oscilátorom, ktorý je tvorený obvyklým zapojením pomocou troch hradiel <code>74LS04</code> (IC3) a kryštálom 8 MHz.
+
-
 
+
-
Referencia pre analógové výstupy je vytvorená LC filtrom z napájacieho napätia. Analógové výstupy ľavého a pravého kanála sú cez jednoduchý filter vyvedené na pinovú lištu.
+
-
 
+
-
Keďže <code>SAA1099P</code> nemá vlastný resetovací vstup, napájanie <code>SAA1099P</code> je privedené zámerne cez tranzistor <code>BC557B</code> (Q2), aby bolo možné <code>SAA1099P</code> "umlčať" resetom počítača. To má síce za následok, že je <code>SAA1099P</code> mierne "podvýživené", nemá to však žiadny vplyv na funkčnosť.
+
-
 
+
-
Pôvodný návrh obsahoval niekoľko TTL obvodov, ale nakoniec bolo v záujme zjednodušenia zapojenia rozhodnuté, že sa použije hradlové pole GAL16V8 (IC2). To rieši niekoľko vecí:
+
-
* dekodér portov
+
-
* tvorba signálov <code>-CS</code> a <code>-WR</code> pre <code>SAA1099P</code>
+
-
* tvorba signálu pre pripojenie/odpojenie napájania <code>SAA1099P</code> podľa stavu signálu <code>-RES</code>
+
-
* register pre povolenie/zakázanie prerušenia od časovača
+
-
* tvorba signálu prerušenia
+
-
 
+
-
Signál <code>-Fi2TTL</code> z aplikačného konektora je privedený na hodinový vstup časovača 0 <code>CLK0</code>. Časovač 0 sa programuje v móde 2, kedy sa podľa zadaného deliaceho pomeru na výstupe <code>OUT0</code> cyklicky objavuje impulz o dĺžke &asymp;0,5&mu;s. Tento impulz je na vyvolanie [[Dĺžka_impulzu_prerušenia_i8080|prerušenia]] krátky a tak je predĺžený pomocou MKO 4047 asi na &asymp;12&mu;s. Výstup MKO je vyvedený cez <code>BC547B</code> (Q1) ako otvorený kolektor na vstup prerušenia <code>-INT</code>. Pull-up odpor je súčasťou počítača.
+
-
 
+
-
 
+
-
Libor Lasota vytvoril dve modifikované zapojenia MIF 85 bez GALu: [https://www.pmd85.cz/?page_id=1655 prvé] a [https://www.pmd85.cz/?page_id=1789 druhé].
+
-
 
+
-
== Plošný spoj ==
+
-
 
+
-
Plošný spoj bol navrhovaný pre zasunutie do aplikačného konektora na výšku. '''Konektor sa osadzuje zo strany spojov''', takže na to treba pamätať. Súčiastky teda smerujú od počítača dozadu.
+
-
 
+
-
Vo februári 2020 bola vytvorená 3. verzia DPS, ktorá sa líši iba tým, že namiesto pinových líšt je na DPS priamo FRB konektor.
+
-
 
+
-
{| align="center"
+
-
| [[Obrázok:Mif85-v2-dps.png|thumb|Plošný spoj MIF 85 v2]]
+
-
| [[Obrázok:MIF85v2-osadeny.jpg|thumb|Osadený plošný spoj MIF 85]]
+
-
|}
+
-
 
+
-
== Rovnice pre GAL16V8 ==
+
-
 
+
-
Ako bolo spomenuté vyššie, použitie GALu ušetrilo niekoľko TTL obvodov. Nasledujúce rovnice sú jednoduché a myslím, že aj zrozumiteľné a s uvedenými komentármi už nepotrebujú ďalšie vysvetlenie.
+
-
 
+
-
CHIP MIF85 GAL16V8
+
-
+
-
; MIF85 - Music InterFace for PMD 85
+
-
; Dekodér adries portov SAA1099P a registra pre povolenie/zakázanie prerušenia.
+
-
; Riadenie napájania SAA1099P
+
-
+
-
; Port 0EFh je použitý pre výber registra SAA1099P.
+
-
; Port 0EEh je použitý pre zápis dát do vybraného registra.
+
-
; Bit D0 portu 0ECh je použitý pre povolenie/zakázanie prerušenia od časovača 0
+
-
; z i8253 umiestneného na interfejsovej doske PMD 85.
+
-
; Všetky porty sú iba pre zápis.
+
-
+
-
; 01 02 03 04 05 06 07 08 09 10
+
-
CLK /ICO IOW A4 A5 A6 D0 A1 A0 GND
+
-
; 11 12 13 14 15 16 17 18 19 20
+
-
/OE A3 A2 /RES ID A7 /CS /INT ICLK VCC
+
-
+
-
EQUATIONS
+
-
+
-
; -CS (Chip Select) pre SAA1099P
+
-
CS = A7 * A6 * A5 * /A4 * A3 * A2 * A1 ; 0EEh, 0EFh
+
-
CS.oe = VCC
+
-
+
-
; hodinový signál pre zápis do registra povolenia/zakázania prerušenia
+
-
ICLK = A7 * A6 * A5 * /A4 * A3 * A2 * /A1 * /A0 * IOW ; 0ECh
+
-
| RES
+
-
ICLK.oe = VCC
+
-
+
-
; register pre zakázanie prerušenia
+
-
ID := /D0
+
-
| RES
+
-
ID.c = CLK
+
-
ID.oe = OE
+
-
+
-
; samotný signál prerušenia
+
-
INT = ICO * /ID
+
-
INT.oe = VCC
+
-
 
+
-
== Popis portov a ovládania ==
+
-
 
+
-
MIF 85 využíva 3 výstupné porty: 0ECh, 0EEh a 0EFh. Adresácia je úplná A7 až A0.
+
-
 
+
-
SAA1099P sa ovláda dvoma portami:
+
-
* 0EFh - výber registra 0 až 31
+
-
* 0EEh - zápis hodnoty do zvoleného registra
+
-
 
+
-
; napríklad
+
-
mvi a,8 ; výber registra 8 - frekvencia tónu 0
+
-
out 0EFh
+
-
mvi a,0E3h ; zápis do registra 8 - tón A
+
-
out 0EEh
+
-
 
+
-
Port 0ECh slúži pre povolenie prerušenia od časovača 0. Po zapnutí počítača alebo po resete je prerušenie od časovača 0 zakázané. Pred povolením prerušenia je potrebné ešte inicializovať samotný časovač. A samozrejme, musí byť pripravená rutina obsluhy prerušenia od adresy 0038h.
+
-
 
+
-
di ; zákaz prerušenia procesora
+
-
+
-
xra a ; zákaz prerušenia od časovača 0
+
-
out 0ECh
+
-
+
-
mvi a,24h ; inicializuj časovač 0 v móde 2, iba vyšší byte deliaceho pomeru
+
-
out 5Fh
+
-
mvi a,0A0h ; 50x za sekundu
+
-
out 5Ch
+
-
+
-
mvi a,0C9h ; inicializuj vektor prerušenia
+
-
sta 0038h ; - teraz iba návrat
+
-
+
-
mvi a,1 ; povolenie prerušenia od časovača 0
+
-
out 0ECh
+
-
+
-
ei ; povoľ prerušenie procesora
+
-
hlt ; počkaj si na prerušenie
+
-
+
-
...
+
-
 
+
-
=== Detekcia MIF 85 ===
+
-
 
+
-
SAA1099P nemá možnosť čítať stav vnútorných registrov. MIF 85 priamu detekciu tiež neumožňuje, pretože v použitom GALe už na to nebol priestor. Keďže ale MIF 85 poskytuje možnosť používať prerušenie od časovača 0, je možné túto skutočnosť využiť na detekciu jeho pripojenia. Po zavolaní rutiny <code>MifDetect</code> bude v premennej <code>MifFlag</code> 1, ak je MIF 85 pripojený.
+
-
 
+
-
MifDetect: di ; zákaz prerušenia procesora
+
-
xra a ; zákaz prerušenia od časovača 0
+
-
out 0ECh
+
-
+
-
sta MifFlag ; vynuluj flag
+
-
+
-
mvi a,24h ; inicializuj časovač 0 v móde 2, iba vyšší byte
+
-
out 5Fh
+
-
mvi a,0A0h ; 2,048Mhz / 0A000h = 50Hz
+
-
out 5Ch
+
-
+
-
mvi a,0C3h ; inicializuj vektor prerušenia
+
-
sta 0038h
+
-
lxi h,MifDetectInt ; JMP MifDetectInt
+
-
shld 0039h
+
-
+
-
mvi a,1 ; povolenie prerušenia od časovača 0
+
-
out 0ECh
+
-
+
-
ei ; povolenie prerušenia procesora
+
-
+
-
lxi b,1000h ; čakanie na prerušenie
+
-
MifDetectL: dcx b
+
-
mov a,b
+
-
ora c
+
-
jnz MifDetectL
+
-
di ; zákaz prerušenia procesora
+
-
ret
+
-
+
-
MifDetectInt: pop psw ; zahoď návratovú adresu z prerušenia
+
-
mvi a,1 ; MIF 85 je pripojený
+
-
sta MifFlag ; nastav flag
+
-
ret ; vráť sa bez povolenia prerušenia
+
-
+
-
MifFlag: db 0
+
-
 
+
-
== Softvér využívajúci MIF 85 ==
+
-
* [[download:120|demonštračné programy pre MIF 85 (PTP, P32)]]
+
-
* [[Atomix]]
+
-
* [[Magicland Dizzy]]
+
-
 
+
-
== Dokumentácia na stiahnutie ==
+
-
* [[download:103|dokumentácia MIF 85 (schéma, DPS, osadzovací plán)]]
+
-
* [[download:135|dokumentácia k verzii 3]]
+
-
* [[download:79|datasheet SAA1099]]
+
-
 
+
-
== Editor hudby pre MIF 85 ==
+
-
* [https://saa1099tracker.borik.net SAA1099Tracker]
+
[[Kategória:Blog| 010]]
[[Kategória:Blog| 010]]

Aktuálna verzia

  1. redirect MIF 85