MIF 85

Z PMD 85 Infoserver

(Rozdiel medzi revíziami)
Djb (Diskusia | príspevky)
(begin work)
Aktuálna verzia (18:41, 23. august 2023) (upraviť) (vrátiť)
Djb (Diskusia | príspevky)
(presun blogu na stranku)
 
Riadok 1: Riadok 1:
-
#REDIRECT [[Blog:MIF 85]]
+
{{VelkyNadpis|MIF 85 - Music interface pre PMD 85}}
 +
 
 +
__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 ''(2. revízia - predošlá mala problém s prerušením)'']]
 +
 
 +
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]
 +
 
[[Category:Hardvér]]
[[Category:Hardvér]]

Aktuálna verzia

MIF 85 - Music interface pre PMD 85


Obsah


Prototyp MIF 85
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 tento článok

Zapojenie MIF 85

Schéma MIF 85 (2. revízia - predošlá mala problém s prerušením)
Schéma MIF 85 (2. revízia - predošlá mala problém s prerušením)

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 SAA1099P (IC1), vychádza z katalógového zapojenia, ale v podstate bolo prevzaté zo schémy počítača SAM Coupé. Hodinový vstup SAA1099P je budený oscilátorom, ktorý je tvorený obvyklým zapojením pomocou troch hradiel 74LS04 (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 SAA1099P nemá vlastný resetovací vstup, napájanie SAA1099P je privedené zámerne cez tranzistor BC557B (Q2), aby bolo možné SAA1099P "umlčať" resetom počítača. To má síce za následok, že je SAA1099P 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 -CS a -WR pre SAA1099P
  • tvorba signálu pre pripojenie/odpojenie napájania SAA1099P podľa stavu signálu -RES
  • register pre povolenie/zakázanie prerušenia od časovača
  • tvorba signálu prerušenia

Signál -Fi2TTL z aplikačného konektora je privedený na hodinový vstup časovača 0 CLK0. Časovač 0 sa programuje v móde 2, kedy sa podľa zadaného deliaceho pomeru na výstupe OUT0 cyklicky objavuje impulz o dĺžke ≈0,5μs. Tento impulz je na vyvolanie prerušenia krátky a tak je predĺžený pomocou MKO 4047 asi na ≈12μs. Výstup MKO je vyvedený cez BC547B (Q1) ako otvorený kolektor na vstup prerušenia -INT. Pull-up odpor je súčasťou počítača.


Libor Lasota vytvoril dve modifikované zapojenia MIF 85 bez GALu: prvé a 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.

Plošný spoj MIF 85 v2
Plošný spoj MIF 85 v2
Osadený plošný spoj MIF 85
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 MifDetect bude v premennej MifFlag 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

Dokumentácia na stiahnutie

Editor hudby pre MIF 85