Ero sivun ”PSR70 hardware” versioiden välillä

Kohteesta Helsinki Hacklabin wiki
Loikkaa: valikkoon, hakuun
Rivi 84: Rivi 84:
  
 
----
 
----
 +
 +
  
 
=== I/O-dekoodaus ===
 
=== I/O-dekoodaus ===
Rivi 92: Rivi 94:
 
[[Tiedosto:PSR70_io_map.PNG|250px|thumb|right]]
 
[[Tiedosto:PSR70_io_map.PNG|250px|thumb|right]]
  
 +
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.
 +
 +
----
 +
 +
=== Analogiakortti ===
 +
 +
[[Tiedosto:PSR70_analog.jpg|1000px|thumb|center]]
  
 
* [https://wiki.helsinki.hacklab.fi/Yamaha_PSR70_reverse_engineering Projektin pääsivulle]
 
* [https://wiki.helsinki.hacklab.fi/Yamaha_PSR70_reverse_engineering Projektin pääsivulle]

Versio 3. maaliskuuta 2020 kello 20.14

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. Lisäksi toinen puoli ei ole käytössä ollenkaan, tuota 82C55:n I/O-nastaa ei koskaan käännetä.



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.


Analogiakortti

PSR70 analog.jpg