ScienceLakes

Rekonstruktion af en Apple II + på en FPGA

Stephen A. Edwards Columbia University Som en julegave til mig selv i 2007, gennemført jeg en 1980'erne-æra Apple II + i VHDL til at køre på en Altera DE2 FPGA board. Pointen, bortset fra underholdning, var at illustrere magt (eller rettere, lavt strømforbrug) af moderne FPGA'er. Sagt på en anden måde, hvad der gjorde Steve Jobs sin første million kan nu være en klasse projekt for min 4840 indlejrede systemer klasse. Hvad er en Apple II? Apple II var en af de første virkelig succesfulde personlige computere. Designet af Steve Wozniak ("Woz") og først indført i 1977, er det for alvor tog fart i 1978, da den 140k Disk II 5,25-tommers diskettedrev blev indført, efterfulgt af VisiCalc, den første regnearksprogram. Temmelig simpelt selv af standarderne for den dag blev Apple II bygget op omkring den billige 8-bit 6502 processor fra MOS-teknologi (det solgt for $ 25, når en Intel 8080 solgt for $ 179). The 6502 havde en otte-bit databus og vil kunne få adgang 64K hukommelse. I Apple II, kører det på lidt over 1 MHz. Bortset fra ROM og DRAM, resten af kredsløbet bestod af diskrete LS TTL chips. Mens den første Apple IIs leveres med 4K af DRAM, dette hurtigt voksede til en standard på 48K og senere til 64K via hjælp fra bank-switching og en memory udvidelseskort. DRAMs, på dette tidspunkt, var cutting-edge teknologi. Mens de var vanskelige at bruge, kræver +5, +12, og-5V strømforsyninger og behøver at blive opdateret periodisk, deres cirka seks gange forbedring i tæthed gjort det umagen værd. Breathless kopi i en tidlig annonce for Apple I kapret deres fordele. Mens Apple II kom med indbygget tastatur, en rudimentær (one-bit) sound port, og et spil havn typisk forbundet med en to-akse analog joystick, dens vigtigste funktion var dens integrerede video display. Det genererede komposit (baseband) NTSC video, som normalt sendes via en RF-modulator til at blive vist på fx en TV-kanal 3. Apple II havde tre videotilstande: en 40 X 24 store bogstaver kun sort-hvid tekst display, en 40 X 48 16-farve lav opløsning skærm og en 140 X 280 6-farve i høj opløsning display. Apple II kan næsten opfattes som en video display enhed, der tilfældigvis har en mikroprocessor forbundet til det. Woz startede med en 14,31818 MHz mester pixel ur - præcis fire gange 3,579545 MHz ColorBurst frekvens, der anvendes i NTSC video. På grund af den måde, farven blev sat til sort-hvid NTSC standard, tilsyneladende sort-hvide mønstre sendt på netop denne frekvens tolkes som farve. Woz afledt CPU ur fra 14,31818 MHz ur ved at dividere med omkring fjorten. Jeg siger nogenlunde fordi det faktisk hver 65. CPU cyklus (en gang pr horisontal skannelinie) strækkes ved to 14 MHz clock-perioder for at bevare fase af 3,58 MHz ColorBurst frekvens. Der er således 65 * 14 + 2 = 912 pixel perioder per linie, eller præcis 228 cyklusser af 3,58 MHz ColorBurst per linje. Både CPU og video adgang til en byte hukommelse ved 1 MHz. Deres adgange er sammenflettet, så DRAM effektivt opererer på 2 MHz. En anden Woz trick: video-adresser er sådan, at forfriskende videoen også tilstrækkeligt at opdatere DRAMs, hvorfor der ingen yderligere refresh cykler nødvendigt. I min genopbygning, forsøgte jeg at gengive adfærd timing kredsløb (herunder det strakte cyklus) så tæt som muligt. Men i stedet for rent faktisk skaber lavere frekvens ure på denne måde (generelt en dårlig idé i moderne design, hvor brugen af on-chip PLL'er med skrå kontrol er den foretrukne teknik), løb jeg det meste af kernen på 14 MHz clock og distribueret låsen aktiverer signaler til noget, der oprindeligt blev taktstyres ved én af de afledte frekvenser. Min Genopbygning Min Apple II kerne består af en timing generator, en video generator, 6502 processorkerne, som jeg tog fra Peter Wendrich s Commodore 64 emulator, den rom'er, og nogle tilfældige logik for adresse dekodning og andre ombord I / O. Bredt, kernen forventer en 14,31818 MHz clock signal, input fra tastaturet, adgang til en 64K RAM og adgang til den perifere bus (i øjeblikket, blot et diskdrev emulator) og genererer et en-bit video-stream sammen med en smule af lyddata for højttaleren. For at gøre denne kerne brugbar, jeg er knyttet til det en PS / 2 keyboard controller (fra Alex Freed og ALSE), en disk emulator, og en VGA line-doubler, der konverterer 15 kHz vandret opdateringsfrekvens af Apples et-bit videoudgang til en farve VGA-udgang med 30 kHz vandret opdateringshastighed. Linjen dobler indeholder hukommelse til to linjer video fra Apple, jeg vist et to gange, mens den anden bliver læst fra Apples video ud. I tillæg til at fortolke og skabe de vandrette og lodrette synkronisering signaler, konverterer det en-bit video-stream til farve ved hjælp af en formentlig alt for simpel algoritme: hver fjerde 14 MHz pixels tolkes som en blok og vises som en enkelt farve. Det er rimeligt effektiv, og producerer mange af de ulige farvekanter virkninger af den oprindelige Apple II, men er ikke helt rigtigt, da et ægte tv-apparat faktisk udfører mere blid lavpasfiltrering på luimance og farvesignal. En bedre algoritme ville overveje bits støder op til hver gruppe på fire. Ikke desto mindre, displayet er helt sikkert brugbar.   Min emulering af Disk II er primitiv (read-only) men funktionelle. Jeg gemmer en "nibblized" billede af en 5,25-tommers disketten på et eksternt SD-kort og læse det i on-chip hukommelse et spor ad gangen. Jeg kodet en SPI interface (en af de tre tales af typiske SD-kort) i VHDL, som er i stand til at vågne op kortet og downloade tilfældige 256-byte blokke. Controlling dette er en simpel emulator for Disk II controller, som giver et meget lavt niveau grænseflade til drevet. For eksempel, kan du læse / skrive hovedet bevæges under software kontrol ved selektivt at pulsere fire stepmotor faser. Min hardware emulator ure disse impulser, og modeller på hvilket spor hovedet i øjeblikket er bosat. Hver gang spornummeret ændringer, min controller læser fra SD-kortet en ny gruppe af 6655 byte (256 * 25) i sporet hukommelse. I mellemtiden har jeg efterligne den roterende skive ved periodisk at ændre adressen af dataene læses af CPU'en, når den får adgang til disk I / O steder. For debugging, bragte jeg ud CPU'ens pc til fire af de syv-segment displays på tavlen og det aktuelle spor for drevet på en anden to. Mens pc'en normalt ændrer sig så hurtigt, det bliver en sløring, har mønstre ofte opstår. For eksempel, forbliver PC meget fokuseret, når computeren venter ved prompten. Ligeledes har jeg fundet en masse software, herunder operativsystemet, når den bevæger sig drevhovedet, kalder skærmens "forsinkelse" rutine at bremse tingene ned. Sammenligning Implementeringer En central motivation for dette projekt var at illustrere, hvordan integrerede moderne FPGA'er er blevet, og hvor forholdsvis lidt strøm, de forbruger. Så jeg sammenlignede strømforbruget ved en egentlig Apple I I +, en Apple II + emuleret i software, og min FPGA genopbygning. For at måle strøm, jeg brugte billig og meget nem at bruge "Kill A Watt" power meter. Det hævder 0,2% nøjagtighed, hvilket er rigeligt til at få en idé om, hvad (watt?), Der foregår. I hvert tilfælde målt I den strøm af systemet uden monitoren. Den effekt var mere eller mindre konstant for Dell (mens emulator kørte) og FPGA bord Apple II strømforbrug varierede betydeligt, når disken var aktiv (spinning). Kun nummeret til Apple II er virkelig retfærdig. Dell er freakishly overmandet, havde langt mere hukommelse (192 MB) end nødvendigt for at køre Linux og Apple II emulator, og aldrig brugt sin diskettedrev, cd-rom osv. FPGA bord har lignende problemer: det har også (ubrugt) Ethernet, USB, og NTSC videogrænsesnit samt SDRAM og Flash chips. Mens ingen kørte, de stadig forbruges en vis magt. En Apple II +                                                                                                    An Apple II + emuleret i software                    En Apple II + på en FPGA

 (Disk aktiv)

Apple II+ Dell Optiplex GXa Altera/Terasic DE2
c. 1982 c. 1998 c. 2006
Synertek 6502 Intel Pentium II Altera EP2C35F672C6 Cyclone II
LS TTL, 16K DRAMs, 1 MHz NMOS CPU 233 MHz, 250 nm CMOS CPU 90 nm CMOS
CPU: 4K transistors? CPU: 7.5M transistors 33K LEs, 150M transistors?
 Tekniske ressourcer Apple II er blevet dokumenteret i stor detalje. Fra og med den første Apple II "Redbook" Reference Manual, Apple selv har offentliggjort tegningerne til Apple II serien. Da Woz talte ved Columbia, nævnte han det var med vilje: han ønskede at dele så meget teknisk information som muligt for at uddanne brugerne. En sådan holdning er sjældent disse dage. To tredjeparts bøger giver endnu mere detaljeret kommentar: Winston Gayler er The Apple II Circuit Beskrivelse (Sams, 1983), og Jim Sather forståelse Apple II (Quality Software, 1983). Jeg hørte begge ofte mens du skriver VHDL til dette projekt. For at forstå Disk II og mere præcist, Apples disk operativsystem (DOS 3,3), Don Worth og Pieter Lechners Beneath Apple DOS (Quality Software, 1983) er second to none, selv om det er meget mere software-fokuserede end de to første bøger . Alle disse bøger er lange out-of-print, men nogle er blevet scannet og arkiveret på nettet. 1000bit.net har en særlig pæn samling. Alex Freed s FPGApple projekt inspireret denne ene. Alex var venlig nok til at dele sin kildekode med mig (det var ikke så slemt som han påstår på sin hjemmeside), og jeg brugte det som reference som jeg skrev min egen. Downloads Retrocomputing på en FPGA: At rekonstruere et 80's-Era Home Computer med Programmable Logic, en teknisk rapport om projektet. apple2fpga-1.1.zip apple2fpga-0.1.tar.gz Dette indeholder alle VHDL kilde samt nogle scripts, hjælpeprogrammer, og en bootbar disk image. Den er klar til at kompilere med Alteras Quartus system til DE2 FPGA bord. Andre boards eller andre miljøer vil kræve nogle tilpasninger.   Oversat s http://www1.cs.columbia.edu/~sedwards/apple2fpga/ Homepage