Met de homecomputer revolutie in het begin van de tachtiger jaren zagen mensen die microcontrollers programmeerden, in de computers meteen hun nieuwe favoriete gereedschap. Ze werkten op dezelfde spanningen, en hadden meestal voldoende "GPIO" beschikbaar, in de vorm van bijvoorbeeld de parallelle poort op de IBM-PC en de User Port op de Commodore 64. Omdat de microcontrollers en de bijbehorende periferie allemaal op standaard TTL 5-volt logica werkten, was het interfacen met computers een fluitje van een cent en kon je snel aan de slag met je eigen firmware (toegegeven, hardware was toen niet goedkoop).

Dit was geweldig van het midden tot het einde van de negentiger jaren, toen de PC's krachtiger werden, microcontrollers hun EEPROM's in flash geheugen integreerden, en nieuwe programmeerinterfaces die even gemakkelijk over een parallelle poort te programmeren waren, floreerden. Je kon processoren programmeren, van Intel 8051 derivaten (b.v. de Atmel AT89S8252 met zijn ingebouwde flash geheugen) tot de lievelingen van de late jaren 90 en tot de vroege jaren 2000, de PIC-microcontroller serie - allemaal zonder speciale spanningen, zonder fancy apparatuur (ja, je kon de parallelle poort rechtstreeks op de chip aansluiten), en zonder ultraviolet EPROM erasers (die eigenlijk toch wel leuk waren!).

20230208124454_at89s8252-board.png
Een AT89S8252 microcontroller voor algemeen gebruik die rechtstreeks via de parallelle poort van de PC kan worden geprogrammeerd.


Niet alleen was het triviaal hardware aan te sluiten, maar de PC-besturingssystemen uit die tijd, van DOS tot en met het vroege Windows 98, konden rechtstreeks met de hardware praten op commando van de gebruiker, zonder dat er een paranoïde virtuele veiligheidsman in de weg stond. Vanuit QBASIC of DEBUG kon je de bits op de printerpoort aan- en uitzetten. Je kon zelfs LED's rechtstreeks in de pinnen van de poort steken en je eigen Knight Rider-achtige looplichtjes programmeren.

Toen kwamen de donkere tijden.

Eerst werden besturingssystemen serieuzer op het gebied van beveiliging. Dat betekende dat je niet zomaar kon ingeven: "Hé computer, zet alle bits op de parallelle poort aan" of "stuur snel deze byte naar de seriële UART". Met latere revisies van Windows 98, via XP, en verder in de toekomst, zou de computer je waarschijnlijk vragen wie je bent en waarom je met zijn innerlijke bits knoeit - tenzij je natuurlijk fancy wilde worden en meer geavanceerde Windows programmering wilde leren en drivers wilde schrijven en... bah.

Ik heb het niet over Linux dat niet veel mensen gebruikten als hun belangrijkste desktop computer.

Trouwens, het besturingssysteem was slechts de softwarematige spelbederver; de hardware begon ook in de weg te staan. USB kwam, en eenvoudige "bare metal" (d.w.z. dicht bij de microprocessor gelegen) seriële en parallelle poorten begonnen te verdwijnen. En USB was nachtmerrieachtig ingewikkeld vergeleken met de dagen van de vrijheid van bit-banging parallelle en seriële poorten. Nu, om een eenvoudig 8-pins PIC te programmeren, was dure hardware nodig en een ontwikkelomgeving, zoals Microchips MPLAB en ICD2, die via USB op je PC konden worden aangesloten, maar een speciale driver nodig hadden, op een CD-ROM meegeleverd... Van die laatste heb ik er nog een, maar dat roept geen dierbare herinneringen op.
 

20230208125422_image.png
Een van Microchips (vele) oplossingen voor het programmeren van PICs. Bron: Microchip

 
Daarna, vanaf ongeveer 2007, met de lancering van de eerste Arduino, begonnen mensen gewone makers weer serieus te nemen. De eerste Raspberry Pis volgden in 2012. Plotseling, na dat akelige probleem in de makers matrix, kon je je dev board snel en gemakkelijk aansluiten op je PC, en snel code schrijven om iets uit te proberen, en had je weer onmiddellijk toegang tot fysieke computers, zodat je naar hartenlust LED's kon laten knipperen, buzzers kon laten zoemen en servo's kon laten draaien.

Deze twee giganten op het maker dev board blok kwamen vanuit verschillende invalshoeken: De Arduino had een eenvoudige microcontroller als kern, en kon goedkope en eenvoudige dingen doen. Aan de andere kant van het spectrum stond de Raspberry Pi: Een volwaardige computer met massaopslag en een besturingssysteem, net als pc's van weleer, maar met die prachtige GPIO's.

Tussen beide was er een beetje een gapende kloof. Mensen discussieerden over wat beter was, de Raspberry Pi of de Arduino. RPi aanhangers zouden zeggen dat de Arduino te eenvoudig was. Arduino fans zouden zeggen dat de Pi te complex was. In feite zouden beide waar kunnen zijn omdat de boards verschillende niches bedienden. Beide platformen breidden hun aanbod uit tot in het niemandsland: Arduino maakte grotere, snellere en complexere boards, terwijl Raspberry Pi goedkopere, afgeslankte versies van de Pi maakte, zoals de Pi Zero-serie. De platforms liggen nu zo dicht bij elkaar dat een vonk de kloof zou kunnen overbruggen.

Hier komt de Raspberry Pi Pico. Met zijn RP2040 microcontroller vertegenwoordigt hij een paradigmaverschuiving voor de Raspberry Pi. Hij lijkt in niets op zijn grotere broers, want hij heeft geen ingebouwde opslagcapaciteit, geen Linux besturingssysteem, en de populairste programmeermethode is Python.
 

200711-014-94-original-17829-raspberry-pi-pico-01jpg.png
Raspberry Pi Pico
 
De RP2040 microcontroller staat echter nog steeds voor het goede oude microcontroller-ethos, en ja, je kunt hem rechtstreeks programmeren in zijn eigen assembleertaal. Voor de onverschrokkene, als je zo geneigd bent, is er een datasheet van 636 pagina's. Ja, de chip heeft het formaat van iets wat klein is, en toch heeft het een telefoonboek (ken je die nog?) om al zijn functies uit te leggen.
 
20230208130405_rp2040-page-31.png
Wat weekend lectuur van de 636 pagina's tellende RP2040 datasheet.

 
Daarom ben ik blij dat ik op de YouTubevideo's van Will Thomas stuitte over het programmeren van de RP2040 op bare-metal niveau, in assembler. Begin onderaan de YouTubepagina, waar hij begint met een inleidend praatje in de eerste video, waarin hij uitlegt waarom je zoiets geks zou willen doen als programmeren in assembler in de jaren 2020.
 

 
 
Hij doet het beter dan ik zou hebben gedaan.

In de tweede video, doe je het "Hello, World" al in RP2040 assembler, hoewel dat in deze context betekent dat de LED knippert:
 

 
Ik kijk uit naar een diepere duik in de rest van zijn video's, en raad je hem op zijn kanaal te volgen als je ook van dat soort dingen houdt!


Vertaling: Willem den Hollander