[abc80] Hur fungerar ABCs kontrollerkort? ( Kretsschema för kontrollerkort?)

Erik Lundh erik.lundh at compelcon.se
Sat Nov 8 11:34:44 PST 2008


TDD innebär att man bestämmer, i alla steg från det lilla till det stora,
hur resultatet skall vara innan man försöker koda upp en lösning. 
Själva tankeprocessen att faktiskt bestämma sig för ett resultat verkar
hjälpa de flesta att förenkla kodningen och höja kvaliteten. 

Testerna blir även en slags dokumentation. Jag och andra förordar att man
dokumenterar api-er och bibliotek med en serie tydliga tester (i tdds anda,
se nedan) som visar vilket beteende man kan förvänta sig. Det är lättare att
hålla ajour än dokumentation. Dessutom är det lätt att fylla på testsviterna
när man behöver något nytt beteende. Sedan är det bara att koda tills de nya
OCH de gamla testerna funkar, så är koden bakåtkompatibel.

Man måste inte, nej oftast SKALL man INTE, försöka beskriva allt beteende
(alla tester) up-front. Det blir ofta bäst om man spontant beskriver de
resultat man kan tänka sig, börjar koda lösningar för de testerna, och sedan
skriver fler tester när insikterna ökar undre kodningen.

Ordet "test" i test-driven development har tyvärr fått många att tänka i
test-termer varför agile-profilen Dan North började jobba med en annan
semantik för att uttrycka det många av oss fattade redan med TDD. Han kallar
det BDD som står för behaviour-driven development. Resultatet blir detsamma
som för de som fattat andemeningen redan med TDD, men BDD vinner en del som
annars inte sett ljuset.

Att beskriva hårdvara i en emulator är ett bra exempel på att söka resultat
och koda tills man ser att testerna säger ok. Fungerar inte emuleringen, får
man skapa nya tester som beskriver beteendet och sedan uppdatera
emuleringskoden så att alla tester går igenom.

TDD började med enhetstester och det mest populära ramverket i java för
detta heter Junit (följer med i Eclipse och alla andra javamiljöer)
Min gode vän Ward Cunningham, som även uppfann wikin, skrev FIT, ett ramverk
för tdd på högre nivå, nämligen på acceptanstestnivå. Detta ramverk har sin
mest populära förpackning i fitnesse. (www.fitnesse.org)

Båda nivåerna av tdd är "wiki-enkla" att börja med. När jag först såg wiki
på Ward's site c2.com, fattade jag inte poängen. Först när jag haft nytta av
wikis gick ett stort aha-ljus upp. TDD generellt och Wards skapelser i
synnerhet funkar så. 

Ward gjorde förresten succé på Intel genom att tdd-a en video-krets . Först
i java, sedan i en microcontroller från atmel, och sist i en FPGA. Historien
var att Intel bett Ward presentera principerna för Tdd för den
utvecklingsenhet som gjorde Intels videokretsar. Publiken var intresserad
och visste att Ward var skarp och smått legendarisk. Men tdd kunde ju inte
funka hos dem. Ward gick hem och funderade. Sedan test-drev han fram en
videokrets som ritade en cirkel på en vanlig TV, i tre miljöer. Hur
presenterade han resulattet? Massor med PowerPoint som en slägga i huvudet?
"Ha, ni har fel och jag har rätt!"? Nej, på typiskt Ward-maner stoppade han
microcontroller-kortet i ena fickan och fpga-kortet i andra fickan. Sedan
knallade han ner till Intel-gängets öl-kväll. Vid lämpligt tillfälle började
han snacka med någon om hur kul det är när kod snurrar på flera plattformar.
Det slutade med att man drog fram en tv och kopplade in Wards kort. Någon
undrade hur han gjort det så snabbt utan speciella videokretsar. Varpå wrad
kunde visa hur han lagt upp arbetet med FIT och fixat det från scratch på
någon dag...

Att emulera en ABC-maskin med både huvudprocessor och hjälpprocessorn i
kontrollern fullt ut borde vara en kul uppgift.

Det ultimata acceptanstestet för en abc800-emulator vore förmodligen att
köra de sista utgåvorna av basregister och ord i emulator, då de till
största delen är skrivna i assembler, och dessutom skyddade av mycket lurig
kod i själva produkterna (som inte jag skrev) som läser av de disksignaturer
som mina program skapade på skivorna.

Ännu coolare, men orealistiskt vore att modellera hela ABC800, utan att
använda prommarna. Jag skrev ju en del verktyg som masserade BASICII:s
p-kod, te x egna versioner av squeeze och unsqueeze. Men det blev aldrig
någon hel BASIC-tolk. 

Jag skall titta på de olika källkoderna med stort intresse!
Tack!


/Erik


-----Original Message-----
From: juhasz at abc.se [mailto:juhasz at abc.se] 
Sent: den 8 november 2008 17:36
To: Erik Lundh
Cc: abc80 at abc80.org
Subject: Re: [abc80] Hur fungerar ABCs kontrollerkort? ( Kretsschema för
kontrollerkort?)

Kul att ABC-listan börjar vakna vid liv!

Jag har av och till hackat på lite ABC-emulatorer, bl a en i java. Tyvärr
är koden väldigt "hack"-ig, och jag har t om tappat bort vart jag fick
Z80-emuleringsklassen från. Men man kan kolla in koden på sidan.
Huvudklassen heter "Simple".....

http://juhasz.se/abc80/jabc80.zip

Kan inget om testdriven programmering, men skulle vara kul att vara med
och bygga på något mer riktigt i java. Kan också säga att jag hackat lite
i c, och där lyckats emulera vissa delar av abc806 och en diskkontroller
så pass att jag kan använda HPA:s diskimage från FPGA-projektet, i alla
fall för läsning. Skrivning fungerar dock inte.

Den koden (kör SDL och är just nu kompilerad på mac) finns på

http://juhasz.se/abc80/rabc80.c

Båda koderna har stöd för UNX:-devicen från den här gamla x-windows
emulatorn som ligger på devili.iki.fi (abc80-1.2)

Robert

> BTW: Jag hittade denna lista sedan jag och några andra veteraner funderat
>> att emulera en ABC800 i java.
> Jag är ju sedan ca år 2000 djupt involverad i agile och tänkte att en
> komplett emulering av en Abc-maskin, utvecklad med test-driven
> utvecklingsmetodik (tdd) vore ett intressant exempel. Varför java? Jo
> därför
> att det är bekvämt att arbeta med saker som refactoring i det språket.
> Eclipse finns ju fritt. Trots att jag är gammal C++ veteran ser jag att
> det
> just nu är enklare att utveckla modernt och disciplinerat med tdd och
> refactoring i java. Prestanda är troligtvis fortfarande bättre i native
> kompilerad kod. Men utvecklingstid och värdet av exemplet blir troligtvis
> mycket bättre i java.
>
> Mvh
>
> /Erik Lundh
>
>
>
>
>
> Hej på er!
>
> Jag har också funderat lite i liknande banor. Har faktiskt just nu ett
> sd-kort inkopplat till ett abc-lab kort, med lite motstånd och en 3.3V
> späningsregulator. Det BÖR fungera men jag har inte hunnit testa än.
> Nackdelen är att man måste flippa bitarna själv och skifta in/ut dem till
> bytes.
>
> Jag kör helst också så mycket hålmonterat/experimentkort som möjligt. Men
> varför inte satsa på något enklare programmerbart, som t ex en CPLD i stil
> med EPM 7064. De finns som plcc, och såna socklar kan man ju löda in. Har
> funderat lite på att göra ett dylikt kort, som i princip är ett enkelt
> SPI-interface (som SD/mmc kort stödjer) för abc-bussen. Det borde bara bli
> CPLD:n och en 3.3V spänningsregulator + sockel för SDkorten. Dock är jag
> kass på VHDL, men jag har sett att det finns färdiga SPI-rutiner. Sen kan
> man ju sköta resten med mjukvara...
>
> En annan rolig grej som har kommit på senare tid är vinculum från FTDI som
> är USB-host kretsar. Jag har köpt en VMUSIC2 (se ELFA) som förutom
> host-interface till USB-stickor innehåller drivrutiner för FAT-filsystem
> och en MP3-spelare. Den pratar också en variant av SPI. Har gjort ett
> testprogram i basic för ABC-lab för den men det funkar inte. Projektet
> väntar just nu på lite mer tid...
>
> Nackdelen/fördelen är att man kör FAT-filsystem. Jag är ingen varm
> anhängare av ABC:ns disksystem. Man skulle ju egentligen bara kunna knåpa
> ihop en enkel ABC-device i stil med den UNX:-enhet som finns till den där
> gamla x-windows emulatorn.
>
> Robert
>
>
>> Hej,
>>
>> Det är en smaksak om man vill ha CF eller PC. Min tanke var att lyckas
>> bygga
>> kontrollern med bara hålmonterade komponenter. Då går det att etsa
>> prototypkort själv. Jag har en del sådana på mitt samvete, har faktiskt
>> ritat och etsat ett busskort till en ABC en gång. Då byggde jag en egen
>> kabel för att ansluta en abc894 expansion till en ABC800.
>>
>> Att rita moderna kort med ytmonterade komponenter är lite knepigare...
>> Det
>> har jag aldrig gjort. Jag har inte CAD:at ett kort sedan exjobbet, det
>> är
>> 12
>> år sedan. Då körde vi Orcad för DOS!
>>
>> Givet att IO:n på FPGA kortet klarar 5V TTL och tristate så borde man
>> kunna
>> koppla in ABC-bussen i expantionskontakterna och bara bygga något litet
>> enkelt buss-adapterkort till ABC:n (ja man skulle nog kunna löda ihop en
>> kabel utan kort). Det är ju inte hela ABC-bussen man behöver för ett
>> kontrollerkort, om man inte ska ha det till sin ABC80 och passa på att
>> lägga
>> dos-prommet i FPGA:n. Men kortet var ju inte gratis...
>>
>> Så schemat:
>> http://www.abc80.net/zz/kontroller_schema_5510761_01_5510828_01.tif
>>
>> Resten kommer sen, där står en del matnyttigt!
>>
>> /Anders
>>
>> -----Original Message-----
>> From: H. Peter Anvin [mailto:
> <http://www.abc80.org/mailman/listinfo/abc80> hpa at zytor.com]
>> Sent: den 8 november 2008 10:25
>> To: Anders Sandahl
>> Cc:  <http://www.abc80.org/mailman/listinfo/abc80> abc80 at abc80.org
>> Subject: Re: [abc80] Kretsschema för kontrollerkort?
>>
>> Anders Sandahl wrote:
>>> Hej,
>>>
>>> Jag har servicemanualen till floppystationerna, där finns schema på
>>> både
>>> kontroller samt minnesexpantionen till abc80.
>>>
>>> Den ligger i tur för att scannas, jag får väl skynda på och ta den i
>> helgen.
>>>
>>> Jag har också funderat på en floppykontroller, men då en som man kan
>> koppla
>>> till PC:n och ha diskimagar där...
>>>
>>
>> Tycker ett flashkort är elegantare, själv... dessutom är det relativt
>> enkelt, tekniskt sett.  En variant som jag funderade på är att göra ett
>> FPGA-baserat kort med både Ethernet och SD-kort på samma kort.  Nu är
>> jag inte direkt haj på att designa kort, så jag är lite nervös för det
>> hela.
>>
>> En annan variant vore att porta den ABC80-i-FPGA som jag redan har till
>> ett billigare kort, t.ex.:
>>
>> http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English
>
<http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&Category
> N> &CategoryN
>> o=39&No=83
>>
>> Tyvärr har jag inte hittat något kort på marknaden som är både billigt
>> och har både SD-kort och Ethernet...
>>
>>       -hpa
>>
>> _______________________________________________
>> ABC80 mailing list
>>  <http://www.abc80.org/mailman/listinfo/abc80> ABC80 at abc80.org
>>  <http://www.abc80.org/mailman/listinfo/abc80>
> http://www.abc80.org/mailman/listinfo/abc80
>
>
>
> _______________________________________________
> ABC80 mailing list
> ABC80 at abc80.org
> http://www.abc80.org/mailman/listinfo/abc80
>



More information about the ABC80 mailing list