Ero sivun ”PSR70 hardware” versioiden välillä
Rivi 1: | Rivi 1: | ||
− | Ensimäinen | + | 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, | 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 | + | 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. | 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ää | 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 | + | vaikeuttavaa hankaluutta käytetty. |
− | === | + | === Rakenne piirikorttitasolla === |
[[Tiedosto:PSR70_block_diagram.png|500px|thumb|right]] | [[Tiedosto:PSR70_block_diagram.png|500px|thumb|right]] | ||
Rivi 17: | Rivi 17: | ||
* Pari pienempää korttia, joissa on lähinnä vain taka/etuseinän liittimiä. | * Pari pienempää korttia, joissa on lähinnä vain taka/etuseinän liittimiä. | ||
− | + | Oheisessa kuvassa on yksinkertainen korttitason lohkokaavio. | |
+ | |||
+ | |||
+ | ---- | ||
=== Keskusyksikkökortti === | === Keskusyksikkökortti === | ||
Rivi 46: | Rivi 49: | ||
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. | 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. | |
[[Tiedosto:PSR70_main_board_blocks.jpg|1000px|thumb|center]] | [[Tiedosto:PSR70_main_board_blocks.jpg|1000px|thumb|center]] | ||
+ | [[Tiedosto:PSR70_main_board_cu.jpg|1000px|thumb|center]] | ||
+ | |||
+ | |||
+ | ---- | ||
=== Muistin dekoodaus === | === Muistin dekoodaus === | ||
Rivi 55: | Rivi 62: | ||
[[Tiedosto:PSR70_addr_decoder.PNG|600px|thumb|left]] | [[Tiedosto:PSR70_addr_decoder.PNG|600px|thumb|left]] | ||
− | [[Tiedosto:PSR70_memory_map.PNG| | + | [[Tiedosto:PSR70_memory_map.PNG|240px|thumb|right]] |
− | Vasemmalla | + | 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. | Dekoodaus on hyvin perinteinen mukseri/AND/OR-hässäkkä, josta on helppo päätellä muistikartta suoraan. Siitä tulee oikeanpuoleisen kuvan näköinen. | ||
Rivi 75: | Rivi 82: | ||
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 | 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ä. | käytössä ollenkaan, tuota 82C55:n I/O-nastaa ei koskaan käännetä. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === I/O-dekoodaus === | ||
+ | |||
+ | |||
+ | [[Tiedosto:PSR70_IO_decoder.PNG|600px|thumb|left]] | ||
+ | |||
+ | [[Tiedosto:PSR70_io_map.PNG|250px|thumb|right]] | ||
* [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 21.13
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
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.
Muistin dekoodaus
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