Mikroprosessorit flippereissä

Ensimmäiset mikroprosessoriflipperit

Mikroprosessorin keksimisestä ei kulunut pitkääkään aikaa kun se jo löysi tiensä flippereihin. Flipperi releineen ja moottoreineen onkin kiitollinen sovelluskohde prosessorille. Sillä pystytään korvaamaan suuri määrä mekaanisia liikkuvia osia ja johtoja, eikä alkuaikojen pieni muistikapasiteettikaan haitannut, eiväthän flipperitkään tuolloin kovin monimutkaisia olleet. Alkuaikoina eivät valmistajat ehkä ymmärtäneet mitä mahdollisuuksia mikroprosessori peleihin toisi, tai sitten eivät uskaltaneet tehdä totutuista poikkeavia koneita. Niinpä kolme suurta, Gottlieb, Williams ja Bally tekivät kaikki muutamasta ensimmäisestä elektronisesta koneestaan myös perinteisen EM-version. Elektroniikalla ei alkuaikoina tehty mitään sellaista, mikä ei olisi releillä onnistunut.

Gottlieb System 1


Gottliebin System 1 CPU-kortti. Kuvan kortissa on vuotava akku
korvattu elektrolyyttikondensaattorilla, 'kultakonkalla'.
Kuva: Pascal Janin

Gottlieb, tuolloin suurin valmistaja, lähti eri linjoille kuin kaksi kilpailijaansa. Se teetti koko elektroniikan alihankintana Rockwell-yhtiöllä, joka on tuttu mm. avaruussukkulan tekniikan kehittämisestä. Nimekäs firma saikin aikaiseksi varsin erikoisen elektroniikan, joka pohjautui Rockwellin oman 4-bittisen PPS4/2 mikroprosessorin ympärille. Pelit olivat niin yksinkertaisia että vaatimaton nelibittinen riitti niitä ohjaamaan. Järjestelmä sai nimen System 1. Monen muistamia koneita tuolta ajalta ovat esimerkiksi Joker Poker ja Cleopatra. System 1 prosessorikortilla oli mikroprosessorin lisäksi kaksi kappaletta muistia ja I/O:ta sisältävää piiriä, muistikapasiteetiltaan 2k x 8 bit ROM ja 128 x 4 bit RAM, sekä 16 I/O linjaa. Yhteensä siis ROM-muistia oli 4 kilotavua ja RAM-muistia 256 tavua. Vaikka prosessori oli nelibittinen, oli ohjelmamuisti kuitenkin 8 bittiä leveää. Datamuisti sen sijaan oli vain nelibittistä. Lisää I/O:ta saatiin kahdesta GPIO piiristä, joissa molemmissa oli 12 input- ja 12 output-linjaa. Pelin sinisiä seitsemän segmentin fluoresenssinäyttöjä ohjattiin samaan PPS4 perheeseen kuuluvalla GPKD näyttöpiirillä. Edellämainittujen lisäksi System ykköseen kuului vielä 1k x 4 bipolaari-PROM, eli pelirommi, joka olikin ainoa osa, joka kortilla vaihtui eri pelien välillä. Asetuksia ja kirjanpitoa varten oli kortilla 256 x 4 bitin CMOS RAM. Kortin muuttumattomana pysyvä 4 kilotavua ROM:ia sisälsi PGOL (Pinball Game Oriented Language) tulkin, jolla kielellä oli sitten koodattu peli-rommiin kyseisen koneen toiminta. System 1 kykeni ohjaamaan kahdeksaa solenoidia (joista outhole, knocker ja kolme ksylofonin kelloa veivät 5!), 32 lamppua ja 40 kytkintä. System 1 koneita tehtiin vuosina 1978-1980. Nykypäivän korjaajalle ne ovat hankalia, koska Rockwellin PPS4 piirejä ei saa enää mistään, ei varsinkaan maskirommia sisältäviä muistipiirejä. Kortilla oleva NiCd akku oli tarkoitettu ylläpitämään muistin sisältöä kun koneessa ei ole virta päällä. Vanhetessaan akku saattoi vuotaa elektrolyyttiänsä ulos tehden piirilevyn ja komponentit usein korjauskelvottomiksi.



Williams System 3

Samaan aikaan kun Gottlieb teetti peliensä elektroniikan Rockwellillä, päätti Williams suunnitella oman järjestelmänsä. Se oli kokeillut elektroniikkaa jo 1977, jolloin Aztecista tehtiin muutaman kappaleen sarja elektronista versiota. Varsinaiset ensimmäiset massatoimitukset kuitenkin käynnistyivät vasta Hot Tip ja Lucky Seven -koneiden myötä. Kumpiakin tehtiin sekä EM että elektronisia malleja. Elektroniikka sai nimekseen System 3, ilmeisesti kokeilut Aztecin kanssa ja sen jälkeen ennen kahta tuotantokonetta olivat sitten 1 ja 2, näistä ei juuri tietoa ole olemassa. Williams aloitti heti 8 bitin tekniikalla valiten tuolloin suositun Motorolan 6800-prosessorin. Motorolan 6821 PIA-piirit hoitivat liitännät kenttään ja näyttöihin, näytöt olivat oransseja 7-segmenttiplasmanäyttöjä. Muistitilaa oli näissä koneissa hieman enemmän kuin Gottliebin System 1:ssä, kortilla oli paikat viidelle 2k x 8 ROM-piirille. RAM:ia oli vain 128 x 8 työmuisti sekä 256 x 4 asetus- ja kirjanpitomuisti. Kortin ohjauskapasiteetti on suurempi kuin Gottliebilla, nämä ohjaavat peräti 22 solenoidia, 64 kytkintä ja 64 lamppua. Standardien piirien ansiosta näitä kortteja voi vieläkin korjata, kaikkia piirejä on jotenkuten vielä saatavissa. 23 vuotta vanhojen koneiden ongelmana alkaa olla EPROM muistien hiipuminen, mutta onneksi Williamsin nettisivuilta voi imuroida vanhojenkin pelien ROM-koodit ja ohjelmoida niillä EPROM:it uudelleen. Williamsin tekniikan heikohko kohta ovat huonot mikropiirikannat, jotka vanhetessaan alkavat usein pätkiä. Huonon kannan tunnistaa siinä olevasta SCANBE-valmistajan nimestä. Ne kannattaa vaihtaa uusiin heti kun ongelmia ilmenee. Williamsin korteilla ei ole akkuongelmaa, niissä käytetään AA-paristoja. Ne on syytä vaihtaa uusiin 1-2 vuoden välein. Alkaliparistoilla ei ole vuototaipumuksia kuten tavallisilla halvoilla. Käytä aina alkaliparistoja.

Bally AS2518


Ballyn AS2518-35 - järjestelmä. Vasemmalla ylhäällä CPU-kortti, alhaalla lamppujen ohjaus. Oikealla ylhäällä solenoidiohjain / virtalähde, alhaalla Squawk and Talk - äänikortti.

Myös Bally suunnitteli oman mikroprosessorijärjestelmänsä. Samoin kuin Williamsin System 3, tämäkin perustuu Motorolan 6800 ja 6821 piireille. Muistikapasiteettikin on suunnilleen sama kuin Williamsilla. Ballyn järjestelmä on hieman 'kompaktimpi', siinä missä Williamsilla oli prosessorikortin lisäksi erillinen driverkortti, jossa oli muutama PIA-piiri ja tehotransistoreja, tuli Bally toimeen kahdella PIA:lla, jotka olivat prosessorikortilla. Sen sijaan solenoidien ohjaintransistorit olivat toisella kortilla ja lamppujen ohjaus kolmannella. Kopioksi Williamsin ratkaisusta ei siis voi Ballyn järjestelmää sanoa vaikka piirit ovatkin samoja. Ballyn ohjauskapasiteetti oli hieman Williamsia pienempi, minkä vuoksi joihinkin koneisiin jouduttiin rakentamaan lisäohjainkortteja suureksi kasvaneen lamppu- tai solenoidimäärän vuoksi. Ballyn muistivarmennus toimii jälleen NiCd akulla, josta seuraa samoja ongelmia kuin Gottliebilla. Ensimmäisiä Ballyn elektronisia koneita olivat Freedom, Night Rider ja Eight Ball.


6800 (tässä Hitachin valmistamana) sekä
jännästi koteloitu PPS4/2 mikroprosessori.

Muita valmistajia

Kolmen suuren lisäksi mikroprosessorikoneita kokeilivat pienemmätkin tehtaat. Erityisesti on syytä mainita Mirco Games (siis ei Micro Games), joka ottaa kunnian ensimmäisestä mikroprosessoriflipperistä. Peli oli Spirit of 76, ja se toimi Intelin 8008 prosessorilla. Tuotantomäärät jäivät pieneksi eikä ko. firma tehnyt muita koneita. Espanjalainen Playmatic kehitti oman 1802 CMOS-prosessoriin perustuvan systeeminsä. Näitä LED-näyttöisiä koneita on Suomessakin näkynyt aikoinaan, itse muistan korjanneeni Big Town -nimistä Playmaticin elektronista. Toinen espanjalainen, Recel, teki muutamia koneita Gottliebista tutulla Rockwellin PPS4 piirisarjalla, kuitenkin omilla ohjelmillaan.

Tekniikka kehittyy



Ensimmäisten prosessorikoneiden jälkeen kukin valmistaja jatkoi oman järjestelmänsä kehittelyä. Gottlieb luotti edelleen Rockwelliin ja tilasi siltä toisen sukupolven prosessorijärjestelmän. Tämä vuonna 1980 Spidermanissa ensi kertaa käytetty järjestelmä sai nimen System 80. Siinä käytettiin monesta kotimikrosta tuttua 6502 prosessoria ja saman sarjan 6532 liitäntäpiirejä. System 80 koki pientä kehitystä vuosien varrella kun siihen lisättiin muistia ja aakkosnumeerisen näytön ohjaus. Viimeiset Gottliebin pelit tehtiin System 3 -nimisellä järjestelmällä, joka pohjautui edelleen 6502 prosessoriin mutta mm. solenoidien ohjauksessa käytettiin MOSFET-transistoreja. Gottlieb vaihtoi omistajaa 1990 luvulla pari kertaa ja lopetti kokonaan 1996. Gottliebin, erityisesti System 80-tekniikasta voit lukea lisää Pekan System 80 -sivuilta.


Williamsin System 6 - järjestelmä. Vasemmalla ylhäällä prosessorikortti, sen alla ohjainkortti. Oikealla ylhäällä äänikortti, keskellä virtalähde ja alinna muuntaja, tasasuuntaajat ja suotoelkot.

Williams jatkoi oman korttinsa kehittelyä, System 3:n jälkeen seurasivat System 4, 6, 7, 9 ja 11, jotka kaikki käyttivät edelleen Motorolan 6800 -tyyppistä prosessoria. Prosessori vaihtui System 9 kohdalla 6802:ksi, joka on käytännössä sama kuin 6800, sisältäen vain 128 tavua RAM:ia lisänä. Muistikapasiteetti kasvoi mahdollistaen monimutkaisemmat pelit. System 11:ssa oli jo aakkosnumeerinen näyttö. Merkittävä uudistus tuli vuonna 1990, WPC-järjestelmän myötä, jolloin prosessori vaihtui nopeampaan 6809:ään ja kellotaajuuskin kasvoi kaksinkertaiseksi 2 MHz:iin. APz:n flipperisivuilta voit lukea selostuksen WPC-järjestelmän toiminnasta.

Bally käytti AS2518 korttia parin sukupolven ajan, joissa on eroa lähinnä muistikapasiteetissa. Muistamme sellaiset hienot koneet kuin Flash Gordon, Vector ja Xenon. Seuraava kehitysaskel Ballyllä oli vaihtaa prosessori 6803:een, jossa on sisäänrakennettua muistia ja ajastin. Tämä yksinkertaisti korttia hieman, samaan aikaan muistikapasiteetti taas kasvoi. 6803-korttia käyttäviä koneita ovat mm. Eight Ball Champ, Hardbody ja Truck Stop, joista jälkimmäinen jäikin viimeiseksi 6803-koneeksi Williamsin ja Ballyn fuusioiduttua ja Williamsin tekniikan jäädessä käyttöön.

Nykyään, kun ainoa flipperinvalmistaja maailmassa on Stern, on mielenkiintoista tietää että 1980-luvun alussa Stern käytti Ballyltä lisensoitua tekniikkaa flippereissään, silloiset Sternin pelit kuten Nugent, Flight2000 ja Lectronamo olivat sisältä kuin saman aikakauden Ballyt!



Ohjelmisto

Miten sitten mikroprosessori toimii flipperissä? Otetaanpa esimerkiksi Ballyn 6800-kortin toiminta. Kahden 6821 PIA-piirin avulla 6800-prosessori ohjaa näyttöjä, lamppuja, solenoideja ja kytkimiä. Prosessorin toimintaa ajoittaa kaksi eri keskeytystä: Zerocross-signaali aiheuttaa keskeytyksen aina kun verkkojännitteen jakso menee nollakohdan yli. Näin tapahtuu 100 kertaa sekunnissa 50 Hz virralla. Näyttökeskeytyksen tekee kortilla oleva oskillaattori noin 300 kertaa sekunnissa.

Vielä nykyäänkin flipperit ohjelmoidaan tiiviillä assemblerilla. Valmistajat eivät luota korkean tason kääntäjiin, vaikka nykyään ne tekevät aivan yhtä hyvää koodia kuin assemblerkin, ja jos mahdollista, vielä parempaa koska ohjelmoija ei tarvitse huolehtia rekisteritason kysymyksistä.

Testit

Virta päälle kytkettäessä on ohjelman ensimmäinen tehtävä testata prosessorikortin toimivuus. Kaikista ROM-piireistä lasketaan tarkistussumma, kaikki RAM testataan samoinkuin PIA-piirien toiminta ja keskeytyksien tuleminen. Näin saadaan yli 90% kortin komponenteista testattua, ja koneen ei anneta toimia ennenkuin kaikki testit menevät läpi. Testi kestää noin 10 sekuntia, ja testin etenemistä voi seurata prosessorikortilla olevaa vilkkuvaa lediä seuraamalla. Jokainen onnistunut testi väläyttää lopuksi lediä kerran. Väläytykset laskemalla voi nähdä, mikä testi epäonnistuu sillä virheen löytyessä testaus pysähtyy.

;checksum rom

         ldx   #6000          ;start from 5fff (top of u6)  
romck2:  clra    
         lds   #0400          ;add 0400 bytes  
romck1:  dex     
         adda  00,x   
         des     
         sts   digit  
         bne   romck1   
         coma                 ;check that sum is 0  
         bne   .              ;rom test error    
         cmpx  #1000          ;all rom 1000-5fff done?    
         beq   romok  
         cmpx  #5000          ;u6 done?    
         bne   romck2   
         ldx   romend         ;u6 done, get game rom end  
         beq   romok  
         bra   romck2

romok:   lds   #stack  
         bsr   flashled       ;1. flash: rom ok  

Pääohjelma

Pääohjelmassa tutkitaan kytkinmatriisin tilaa. Tässä matriisissa ovat kaikki kentän kytkimet, sekä myös rahakytkimet, tilt, starttinappi ym. Kun huomataan muuttunut kytkin, haetaan kytkimen numeron perusteella sitä vastaavan aliohjelman osoite ja käydään suorittamassa se. Tämä voi olla rahakytkimen tapauksessa aliohjelma, joka tutkii hinnoitteluasetukset ja antaa niiden mukaisen määrän credittejä, tai vaikkapa tiltin tapauksessa ohjelma, joka asettaa pelin tilt-tilaan ja sytyttää vastaavan lampun. Kytkinmatriisin tila luetaan zerocross-keskeytyksessä ja kolmen peräkkäisen luvun tulokset talletetaan muistiin. Näin saadaan kosketinvärähtelyt eliminoitua. Kytkin hyväksytään sulkeutuneeksi ainoastaan silloin kun vanhin lukukerta on 'auki', keskimmäinen 'kiinni' ja uusin 'kiinni' Vain tässä tilanteessa suoritetaan kytkimen aliohjelma. Jos kolmen lukukerran tulokset ovat 'kiinni', 'kiinni' ja 'kiinni' toteaa ohjelma kytkimen jumittuneen kiinni eikä tee mitään. Muut yhdistelmät ovat merkki häiriöistä tai kosketinvärähtelyistä, ja ne voidaan niinikään hylätä.

main5:   tba     
         coma         
         andb  00,x           ;clear switch state       
         stab  00,x        
         ldx   tmpvect        ;get vector       
         ldx   00,x        
         jsr   00,x           ;call vector       
main1:   ldx   usrpresc        
         jsr   00,x        
         ldx   scoreupd       ;call score update routine      
         jsr   00,x        

Zerocross-keskeytys

100 kertaa sekunnissa putoaa verkkojännitteen jakso nollakohtaan. Tämä aiheuttaa keskeytyksen CPU:lle, joka sitten odottaa lyhyen hetken, että jännite ehtii taas nousta hieman. Sitten muistista haetaan kaikkien koneen lamppujen tilatieto ja liipaistaan lamppua ohjaava tyristori päälle tarvittaessa. Tyristori pysyy johtavana seuraavaan nollakohtaan asti, jolloin se tipahtaa automaattisesti pois. Mikäli lamppu on vielä päällä, liipaistaan se taas seuraavassakin zerocross-keskeytyksessä.

Pelissä olevia ajastimia hoidetaan myös tässä keskeytyksessä. Mikäli ajastimen arvo on positiivinen, vähennetään sitä yhdellä. Pääohjelmassa sitten voidaan tehdä eri temppuja sen mukaan mitkä ajastimet ovat menneet nollaan, tai asettaa ajastimen alkuarvoksi haluttu pituus. Muunmuassa solenoidien vetopulssien pituus määrätään näillä ajastimilla. Normaali bumperin tai slingshotin solenoidi laitetaan päälle kolmen zerocross-keskeytyksen ajaksi. Montun solenoidi saa pitemmän pulssin, jotta pallo ehtisi varmasti ulos.

;system zerocross irq

zcirq:   dec   timer1  
         ldx   timerw         ;timer1 <= 0?  
         bmi   zci1
         beq   zci1   
         dex                  ;dec timer1  
zci1:    stx   timerw  
         ldaa  timer2         ;timer2 at 0?  
         beq   zci2   
         dec   timer2         ;dec timer2  
Seuraavaksi luetaan kytkinmatriisi. Kytkimien tilat talletetaan edelläkuvattuun kolmeen taulukkoon. Koska kytkimen sulkeutumisen varmentamiseksi vaaditaan kolme lukukertaa, olisi se liian hidasta bumperien ja slingshottien kanssa, joiden on reagoitava välittömästi palloon. Näitä nopeaa reagointia vaativia kytkimiä luetaankin erikseen joka zerocross-keskeytyksessä ja ohjataan samantien vastaava solenoidi päälle tarvittaessa. Näin saadaan bumpereille ja slingshoteille riittävä sähäkkyys.

Näyttökeskeytys

Noin 300 kertaa sekunnissa tulee prosessorille näyttökeskeytys. Pistenäytöt ovat multipleksattuja, mikä tarkoittaa että vain yksi numero kussakin 5 näytössä (4 pelaajanäyttöä sekä credit/match -näyttö) on kerrallaan päällä. Näytettävää numeroa vaihdetaan 300 kertaa sekunnissa, jolloin silmä näkee hitautensa ansiosta kokonaisen näytöllisen. Viiden näytön numerot on talletettu muistiin omalle alueelleen, samoinkuin näytettävän numeron paikkakin. Näyttökeskeytyksessä sammutetaan vanha numero, siirrytään seuraavaan paikkaan ja sytytetään uusi numero.

dspi1:   staa  pia1a          ;lamp data/adr=ff  
         ldab  #3C  
         stab  pia1bctl       ;set lamp strobe 1  
         ldab  #3D  
         stab  pia2actl       ;set lamp strobe 2, enable disp irq  
         ldab  #34  
         stab  pia1bctl       ;clr lamp strobe 1  
         ldab  #35  
         stab  pia2actl       ;clr lamp strobe 2  
         ldaa  digit          ;find current digit  
         ldx   #021D          ;and make X= 21d + digit#  
dspi2:   inx     
         asla    
         bcc   dspi2
         ldaa  #35  
         staa  pia1actl       ;disp data enable  
Ballyn vanhoissa peleissä oli käytetty pelkästään konekieltä. Williams sai samoihin aikoihin puristettua moninkertaisen määrän toimintoja samaan muistitilaan käyttämällä omaa tapahtumaohjattua käyttöjärjestelmäänsä ja skriptikieltä williams_lvl7_programming.html

Eri valmistajien 1980-luvun ohjelmistoratkaisuja vertaillessa huomaa hyvin, miten Williams kehittyi aivan omaan luokkaansa. Bally pitäytyi konekielessä ja joutui tuskailemaan muistitilan rajoituksien kanssa, Gottlieb ulkoisti koko ohjelmistopuolen menettäen samalla hallinnan pelien toiminnan suhteen, mutta Williams kehitti ratkaisut toimia pienessä muistitilassa ja tuotti pelaajia yhä kiinnostavia koneita. Ei ollut elektroniikan tai ohjelmiston vika että se joutui lopulta lopettamaan flipperien valmistuksen kannattamattomana.




Takaisin