PSR70 hardware

Kohteesta Helsinki Hacklabin wiki
Loikkaa: valikkoon, hakuun

Ensimäinen vaihe oli lähteä tutkimaan hardwarea. Tämä on varsin huoltoystävällinen (lue: hakkerointiystävällinen) laite: piirilevyt ovat yksipuolisia ja kuparipuolelle on merkattu mikropiirien numerot ja hyppylankojen sijainnit. Lisäksi piirilevyn silk screenissä on varsin paljon erilaisia hyödyllisiä signaalien nimiä merkattuna, kuten "D7", "A12", "IOWR", "IRQ" jne. Kytkentäkaavio on periaatteessa piirrettävissä yhdestä hyvälaatuisesta valokuvasta liuskoja seuraten.

Ei nyt ollut tarkoituskaan piirtää koko kytkentää auki, mutta ainakin muistikartat olisi syytä selvittää, se helpottaa disassemblyn tulkintaa huomattavasti. Osoitteiden dekoodaus on tehty kokonaan 7400-sarjan hajalogiikalla, perus AND/OR/mux-piireillä. Ei mitään ikäviä PAL-piirejä tai muuta reversaajan elämää vaikeuttavaa hankaluutta käytetty.


Rakenne piirikorttitasolla

PSR70 block diagram.png

Suurin osa elektroniikasta on keskusyksikkökortilla. Muut kortit ovat:

  • Analogiakortti, jossa on audiovahvistimet, jonkinlainen chorus-tyyppinen analoginen BBD-piiriin perustuva efekti (etupaneelin painike tuntee tämän nimellä "Stereo Symphonic") ja kaiuttimia syöttävät tehovahvistimet, sekä jännitteiden regulointi.
  • Etupaneelin kortit, jotka ovat yhteensä koko etupaneelin kokoiset ja joissa sijaitsevat paneelin lukuisat painikkeet ja ledit. Laitteen käyttöliittymässä ei ole minkäänlaista näyttöä, vain painikkeita ja ledejä, ja muutama liukupotikka. Painikkeita ja ledejä onkin sitten reippaasti, painikkeita 74 kpl ja ledejä lähes jokaisen painikkeen vieressä, isossa osassa 2 per painike.
  • Pari pienempää korttia, joissa on lähinnä vain taka/etuseinän liittimiä.

Oheisessa kuvassa on yksinkertainen korttitason lohkokaavio.



Keskusyksikkökortti

Pääasiallinen kiinnostus kohdistui isoon elektroniikkakorttiin, jossa on kaikki oleelliset toiminnot. Sen sisältö on:

  • NEC D70008, eli Z80-CPU
  • EPROM 27256 (32 kB), ilmeinen ohjelmamuisti
  • 4 kpl TC5517 staattinen RAM, 2 kB, yhteensä siis 8 kB RAM
  • HD63A50 UART, hoitaa midi-liitäntää
  • 82C55 rinnakkais-I/O-piiri, hoitaa pääasiallisesti koskettimiston skannausta
  • Iso kasa sekalaista 74HC-peruslogiikkaa erilaisena liimalogiikkana
  • Muutama operaatiovahvistin analogiasignaaleja paimentamassa

Näistä kaikista löytyy netistä normaalit datalehdet. Sitten alkaakin se hankalampi alue: joukko mikropiirejä, joiden päällä on Yamahan logo, ja joista Google enimmäkseen vaikenee.

  • YM3806 FM-syntetisaattoripiiri. Ensimmäinen hitti Googlella osuu listaan "Undocumented sound chips" joka jo kertookin pelin hengen. Pienen kaivelun jälkeen löytyy arveluja, että se on 8-kanavainen 4 operaattorin piiri, mahdollisesti sama kuin YM3533, josta siitäkään ei löydy sen enempää tietoa. Yamahan terminologiassa tämän käyttönimi on "OPQ" (samassa sarjassa kuin OPL, OPN jne.) Ollaan siis aika lailla tuntemattoman äärellä.
  • YM2154 PCM rompler. Tämä hoitaa rumpusoundit, jotka olivat jo PCM-pohjaisia tuohon aikaan. Yamahan kielessä tämä on "RYP4" (Rhythm Processor 4). Tästä löytyy sentään nastajärjestys, muista asioista netti vaikenee tämänkin kohdalla.
  • 2 kpl YM2190 serial ROM. Nämä ovat RYP4:n sample-ROMmeja, joissa on rumpujen samplet. Niissä on joku eksoottinen Yamahan oma sarjapohjainen väylä, jolla ne liittyvät RYP4-piiriin.
  • 2 kpl YM3012 stereo-DAC. Nämä piirit muuntavat OPQ:n ja RYP4:n tuottamat signaalit analogisiksi, toinen palvelee OPQ:ta ja toinen RYP4:ää. Näissäkin on joku Yamahan oma sarjaliitäntä, jolla niihin syötetään digitaalidata (jos pitäisi arvata, niin taatusti erilainen kuin em. ROMmeissa). Tästä löytyy sentään datalehti netistä.
  • Mystinen piiri nimeltä IG14330, josta netti ei tiedä senkään vertaa kuin edellisistä. Piirilevyä tutkimalla voi päätellä, että se hoitaa etupaneelia jonkinlaisen Yamahan oman sarjaliitännän (yllätys!) kautta. Toiselta puolen se istuu normaalisti prosessorin väylällä. Etupaneelissa lienee lisää Yamahan piirejä, jotka toimivat sen vastapäänä. Tätä en tutkinut enempää, koska tuo ei onneksi ole kriittisellä polulla tämän reverse-projektin tavoitteiden kannalta.
  • Mystinen maski-ROM-piiri, josta ei myöskään löydy mitään tietoja. Prosessorin väylää ja muita levyn vetoja treisaamalla voi päätellä, että se on nastajärjestyksensä puolesta normaali 32 kB ROM, joka istuu prosessorin väylällä. Lisäksi piirin vieressä silk screen-teksti "ROM2" antaa osviittaa. Tästä piiristä lisää myöhemmin.

Päämielenkiinto tässä projektissa kohdistuu OPQ- ja RYP4-piireihin. Netissä on selvästi näiden dokumentaation kokoinen aukko, joka olisi hyvä saada tukittua.

OPQ on melko vähän käytetty piiri, sitä on käytetty PSR-70:n lisäksi PSR-60:ssa, jossa on sama elektroniikka, ja lisäksi ainakin CLP-100:ssa. Viimemainitusta joku japanilainen on tehnyt jonkin verran tutkimusta, mutta ei ole ryhtynyt hänkään selvittämään piirin toimintaa: https://translate.google.fi/translate?hl=en&sl=ja&tl=en&u=https%3A%2F%2Fachapi2718.blogspot.com%2F2015%2F01%2Fyamaha-clp-100.html

RYP4:ää on käytetty aika monessa Yamahan tuotteessa, joista RX15-rumpukone löytyy minulta hyllystä. En ole koskaan sitä kylläkään avannut. Rummut kuulostaakin aika samanlaisilta. Tosin, netin valokuvien mukaan RX15:ssa on eri sample-ROMmit, mutta selvästi samalta ajalta ovat.

Alla olevaan valokuvaan on piirretty keskusyksikkökortin päälohkot. Seuraavassa kuvassa näkyy kortti toiselta puolen, punaiset merkinnät minun lisäämiäni.

PSR70 main board blocks.jpg
PSR70 main board cu.jpg



Muistin dekoodaus

PSR70 addr decoder.PNG
PSR70 memory map.PNG

Vasemmalla olevassa kuvassa on piirrettynä auki muistin dekoodaus oleellisilta osin, piirilevyn valokuvasta jäljittäen ja ohmimittaria tarvittaessa apuna käyttäen. Dekoodaus on hyvin perinteinen mukseri/AND/OR-hässäkkä, josta on helppo päätellä muistikartta suoraan. Siitä tulee oikeanpuoleisen kuvan näköinen.

  • Alimpana osoitteissa 0000H...7FFFH on 32 kB EPROM, joka toimii ohjelmamuistina. Sen on oltava tässä koska Z80:n reset- ja keskeytysvektorit ovat muistiavaruuden alussa.
  • RAM on sijoitettu ylimpään 8 ktavuun alueelle E000H...FFFFH, joka on myös hyvin tavallista. Tuohon aikaan staattinen RAM oli kallista, tuli näköjään halvemmaksi käyttää 4 kpl 2 kB RAM-piirejä kuin yksi 8kB, vaikka se sitten vaatii ylimääräisen demuksin (IC118, HC138) vielä dekoodaamaan 4 piirille omat CE-signaalit 2 kB välein.
  • OPQ-piiri on sijoitettu muistiavaruuteen, vaikka se on periaatteessa I/O:ta. Tämä on ollut vähän pakon sanelemaa, koska piirille tulee 8 osoitelinjaa eli siinä 256 rekisteriä. Se söisi siis yksin koko I/O-avaruuden. Nyt se on muistiavaruudessa osoitteissa C000H...C0FFH. Se vie koko 8 kB lohkon, josta loppu ei sitten ole käytössä (ts. sisältää OPQ-piirin rekisterien kopioita).
  • Välillä 8000H...BFFFH (16 kB) on maski-ROM ROM2.

Viimemainittu aiheutti aika paljon päänvaivaa: miksi se on siinä, kun ohjelma on EPROMissa? Siellä täytyisi olla siis vakiodataa, mutta mitä? Ei tässä tarvita merkittäviä määriä dataa mihinkään, ainoat samplet ovat RYP4:n käyttämissä sarja-ROMmeissa erikseen, eivät näy prosessorin muistiavaruuden osana. Lisäksi ROMmin koko on nastajärjestyksestä pääteltynä selvästikin 32 kB, mutta sille on muistiavaruudessa varattu vain 16 kB?

Pieni lisätreisaus piirilevyltä paljasti, että ROM:in ylin osoitebitti (A14) tulee 82C55-piirin yhdestä I/O-nastasta. ROM näkyy siis kahtena 16 kB pankkina prosessorille, pankki voidaan valita I/O-piirin kautta. Entistä omituisempaa. Ohjelmakoodin sijoittaminen tuollaiseen alkaa mennä hankalaksi, koska pankin vaihto hallitusti vaatii ylimääräistä temppuilua. Kyllä tällaista on paljon historian aikana tehty, mutta silti.

Kerron tästä lisää softapuolen analysoinnissa, mutta tässä vaiheessa voin paljastaa, että siellä on sekä vakiodataa että suoritettavaa koodia. Ja tuota pankin vaihtoa kaikesta temppuilusta huolimatta todella tehdään.


I/O-dekoodaus

PSR70 IO decoder.PNG
PSR70 io map.PNG

I/O:n dekoodaus tapahtuu vastaavasti ja samoilla tekniikoilla kuin muistinkin. Vasemman puolen kuvassa on dekoodauslogiikka ja vastaava I/O-kartta oikealla. Tähän liittyy jonkinlainen wait-state-generointi, mutta sitä en piirtänyt auki, koska se ei ollut oleellista tämän projektin kannalta. Skoopilla voi todeta, että kuvaan merkityssä WAIT-signaalissa vilahtelee yhden kellojakson mittaisia pulsseja. Ilmeisesti osa I/O-piireistä on liian hitaita huimalla 6 MHz kellotaajuudella tikittävälle Z80:lle.

I/O-avaruudessa on 4 piiriä:

  • UART:in kaksi rekisteriä ovat osoitteissa 10H ja 11H.
  • 82C55:n neljä rekisteriä ovat osoitteissa 20H...23H.
  • Tuntematon IG14330 vie dekoodauksen puolesta osoitteet 30H...3Fh. Montako rekisteriä sillä on oikeasti, en ottanut selville.
  • RYP4 vie koko ylemmän puoliskon 80H...FFH I/O-avaruudesta. Sinne tulee 7 osoitelinjaa, eli sillä on 128 rekisteriä.


Huoltomanuaali

Kun olin päässyt näin pitkälle, Hacklabin Slackin keskusteluvirrasta osui silmään sana "huoltomanuaali" ihan muuhun aiheeseen liittyen. Tästä poksahti päähän ajatus, että PSR-70 on sen ikäinen vehje, että sillä saattaisi olla huoltomanuaali saatavissa. Ei ollut tullut aiemmin mieleen. Joten ei kun googlailemaan, ja aika piankin totesin, että manuaali on olemassa ja ladattavissa. Sitä selaamalla pystyi nopeasti toteamaan, että se sisältää muun muassa laitteen tarkan kytkentäkaavion!

Tässä kohdassa alkoi hiukan harmittaa. Olisihan tuossa säästänyt useamman tunnin liuskojen treisailua piirilevyn valokuvasta. Olen vissiin elänyt liian pitkään täällä modernissa maailmassa, jossa kuluttajalaitteiden huoltomanuaalit koostuvat yhdestä lauseesta: "Jos laite ei toimi, heitä se menemään ja osta uusi." Enää ei näköjään tule edes mieleen, että vielä 80-luvulla kunnolliset huoltomanuaalit oli ihan tavallisia.

No, kyllähän manuaalista hyötyä oli. Kytkentäkaaviota oli helppo lukea, kun oli jo tullut tutustuttua laitteen sielunelämään tarkalla tasolla. Siitä pystyi varmistamaan, etten ollut tulkinnut mitään varsinaisesti väärin. Ja tuossa vaiheessa koko analogiapuoli oli vielä reversaamatta, nyt sitä ei tarvitse tehdäkään. Mm. tuon chorus-efektin ymmärtäminen olisi voinut olla hankalaa, sekin sisältää - kuinka ollakaan - Yamahan custom-piirin. Lisäksi kaikenlaisia pieniä havaitsematta jääneitä yksityiskohtia on saanut poimittua kytkentäkaaviosta.

https://elektrotanya.com/yamaha_psr-70_sm.pdf/download.html



Muita havaintoja

Z80:ssa on vain yksi keskeytysotto, koska on ajateltu, että siihen tulisi erillinen keskeytysohjainpiiri eteen. (On myös NMI, mutta se on vähän hankala normaalikäytössä, koska nimensä mukaan se ei ole kiellettävissä, joten ei ole tässäkään missään käytössä.) Keskytysohjainta ei piirilevyllä ole, mutta keskeytyslähteitä on kuitenkin useita: OPQ, RYP4, UART ja IG13440. Ensin oletin, että nuo on kytketty vain wired-or-periaatteella yhteen linjaan, mutta vasta huoltomanuaalin kytkentäkaaviosta selvisi, että tuossa on käytetty jopa kolmen piirin verran liimalogiikkaa yhdistämään keskeytykset. Oli nyt miten tahansa, tuo johtaa joka tapauksessa siihen, että keskeytyksen tullessa ohjelma joutuu kyselemään jokaiselta piiriltä erikseen, olitko se sinä joka siellä halusit jotain. Odotettavissa oleva keskeytyslatenssi on iso, mutta ei ilmeisesti ole haitannut tässä.

Keskeytysotossa näkee skoopilla tasaisen 10 ms välein toistuvan pulssin, joka on varmastikin reaaliaikakeskeytys, miltä piiriltä se sitten ikinä tuleekaan. Varsinaista ajastinpiiriä levyllä ei ole, joten se täytyy tulla jostakin custom-piiristä. Lisäksi näkyy satunnaisemmin räpsyviä muita keskeytyksiä.

CPU:ta varten on 12 MHz kide, joka jaetaan kahtia D-fliparilla ja saadaan 6 MHz, joka viedään Z80:n kello-ottoon.

UARTia varten on 2 MHz kide, joka jaetaan kahdella ja saadaan 1 MHz IG14330 piiriä varten. Tämä jaetaan edelleen kahdella ja saadaan 500 kHz, joka viedään UARTille baudikelloksi. Kun UART jakaa tämän vielä sisäisesti 16:lla, saadaan midin standardinopeus 31,25 kbps. Tarkoittaa myös, että jos ja kun kokeilujen aikana halutaan käyttää sarjaporttia ihan muuhun kuin midi-liikenteeseen, baudinopeutta ei voi valita, se on kiinteästi midin mukainen.

OPQ-piirillä on oma kide 3,579 MHz. Samoin RYP4:llä 2,25 MHz.



Analogiakortti

Analogiakortti näyttää komponenttipuolelta tältä:

PSR70 analog.jpg

Kortilla on toiminnot:

  • mikseri, joka miksaa eri lähteistä tulevat signaalit yhteen
  • VCA, jolla toteutetaan äänenvoimakkuuden säätö ja mute
  • chorus-efekti
  • päätevahvistimet kaiuttimia varten
  • käyttöjännitteiden regulointi

On hiukan kyseenalaista, onko tämä laite stereo vai ei. Siinä on kaksi kaiutinta ja audiolähdöt on merkattu L ja R. Samoin DAC:eissa on kaksi kanavaa. Mutta ainakaan OPQ:n tuottamat soundit eivät ole mitenkään stereosoundeja. Jokainen äänikanava voidaan ajaa jompaankumpaan lähtökanavista ja tätä käytetään ORCH/SOLO-soundien erottamiseen. Molemmat miksataan mikserissä molemmille stereokanaville, mutta vain ORCH-äänet menevät chorus-efektille, jonka lopputulos miksataan myös stereokanaville.

RYP4-piirin DAC:n lähdöt menevät vastaasti stereomikserin kanaviin, mutta miten stereo tuo RYP4:kään on, ei ole vielä tiedossa.

Chorus-efekti on toteutettu MN3204 BBD-viivelinjalla, jota ohjaa Yamahan custom-piiri. Custom-piiriin menee muutama ohjauslinja, mutta miten ne ohjaavat chorusta, ei ole toistaiseksi analysoitu, koska ne lähtevät RYP4-piiriltä, joka toimii olettaakseni tässä tapauksessa vain I/O-piirinä. Tämä pitää vielä selvittää tarkemmin.