Experimente mit STM32 BluePill und libopencm3

Heute habe ich an einem Resturlaubstag mal ein bisschen mit meiner STM32 BluePill experimentiert.

Leider hat es einiges länger gedauert, als ich dachte.

Zunächst habe ich mir aktuelle Versionen von OpenOCD und den freien ST-Link Tools gebaut und installiert. Das funktionierte auch ohne Probleme.

Die ST-Link Tools bringen sogar eine GUI mit GTK3 mit. Leider kann das Tool nur Binärdateien auslesen und programmieren, aber es ist immerhin etwas bedienerfreundlicher als die Kommandozeilenvariante.

Danach habe ich mal die libopencm3 compiliert. Das ging auch gut, aber es gibt leider keine Installationsoption. Also muss man in die Projekte das jeweilige Verzeichnis entsprechend reinverdrahten.

Ich habe auch die offiziellen Beispiele mal übersetzt. Zumindest das Systicker Blink, USB HID und USB COM Port Beispiel für STM32L1 habe ich mit meiner BluePill zum Laufen bekommen.

Danach habe ich mir die Infrastruktur für eigene Projekte bauen wollen und bin beinahe gescheitert. Aus einigen Quellen musste ich mir Teile zusammenklauen, aber ich kann jetzt über CMake entsprechende Projekte aufsetzen, die die libopencm3 benutzen.

Das ganze habe ich im Visual Studio Code aufgesetzt und wollte dann die Debugerweiterung für Cortex-M benutzen und bin wieder gescheitert.

Nach langem Puzzeln habe ich gemerkt, daß mein gdb zu alt ist. Dann musste ich mir erstmal eine aktuelle Version bootstrappen.
Kurzentschlossen wollte ich die offizielle ARM Toolchain installieren, aber das waren 0,5GB Download. Das war mir doch zu riesig, also habe ich einen offiziellen gdb runtergeladen und mit einer kleinen Anleitung auch gebaut.

Mit dieser gdb Version konnte ich dann aber tatsächlich debuggen und mit .svd File auch die Peripherieregister anschauen.

Gelernte Punkte habe ich gleich mal in einer Wissenssammlung aufgeschrieben. Die werde ich vermutlich zukünftig noch erweitern und ggfs ergänzen.

Eigentlich wollte ich noch ein Beispiel mit Segger RTT ausprobieren, bin aber nicht mehr soweit gekommen.

Elite tips & tricks (Atari ST version)

Elite (Atari ST version)
Elite (Atari ST version)

Back in 2005 we had a massive thread regarding the game Elite on atari-forum.com and I translated a somewhat helpful document to English back then.

This now goes here so I don’t forget about it ;)

Elite tips & tricks (provided by keili, translation by ssb)

The goal of Elite is to reach the rank of ELITE as soon as possible.
To reach this goal there are 5 missions in the game that the player should accept and fulfill in order to become ELITE. It is evident that the player should be fully able to fly the Cobra MKIII in any situation. Make sure you have installed the following equipment before attempting the first mission:

  • military laser front and aft
  • ECM
  • docking computer
  • energy unit
  • fuel scoop (NOTE: Always useful to add cargo and fuel to your ship!)
  • intergalactic hyperdrive

1. Mission: Search’n’Destroy the Constrictor

This mission will lead you through several galaxies. While chasing the Constrictor craft, you’ll get a next destination communique at every station you dock. Visit these systems one after another. As soon as you have found the Constrictor, it will appear as a Thargoid ship on your radar. Take care as the Constrictor has awesome firepower – about the same as a Thargoid so beware. Destroy the Constrictor and dock to the next station to gain a reward of 10000 credits.

NOTE: I think I’ve read somewhere that one can collect equipment from the blasted Constrictor. However as far as I remember all I could get into my hold were computers I could sell.

2. Mission: Transport vital and secret Thargoid documents

The player needs fiercy tactics to hold out and survive. It is helpful to equip your ship with retro rockets.
As soon as you have the documents, only Thargoids will attack you from now on. NOTE: And up to 4 of them at a time!
The best tactic is to point your ship’s aft at the planet, use the retrorockets and fire at the Thargoid ships to keep them at bay. Use the docking computer as soon as possible (in FAST mode :) I add).
Transfer the documents. You will gain a Naval Energy Unit that will charge your energy as twice as fast as the normal unit.

3. Mission: Save a station crew from a supernova

You cannot get this mission at a station. The player has to look for it himself.
Look for your Elite Score. Around 270000 points, you should lookout for mission 3. Look on the local star chart for a star that is going to become a Supernova soon. Find and fly to it. The message “Fuel leak” will appear. Fly to the sun and scope up fuel.
Now fly to the station and pick up the people there. Launch and immediately jump to a target system. The sun will go supernova in 15 seconds so you have to be fast. At successful docking somewhere else you’ll get a reward of 1kg of gem stones. NOTE: Normally you buy those in gram quantities ;)

4. Mission: Search’n’Destroy the Cougar

When you enter a space station, you will be told that there is a special ship in orbit which can cloak itself and jam other ship’s systems. The player can decide if he wants to fulfil this mission. You are not forced to accept it. However it is impossible to reach ELITE without blasting the Cougar.
To find the Cougar, point your ship at the sun and use the short distance jump. You’ll detect 3 ships on your scanner then. The Cougar and with 98% probability two Asp MKII.
Blast the ASPs with an energy bomb and, important, use the retro rockets. Target the cougar and open fire. Use the retro rockets when the Cougar opens fire. Stop firing as soon as the Cougar explodes or you will destroy precious cargo containers. Use the fuel scoop to collect the containers and get the cloaking device. Use key ‘Z’ to activate the cloak. (NOTE: I don’t know for which keyboard layout that goes, I assume German one but would try out anyway.) It takes a lot of energy to cloak so choose wisely when to activate it.

5. Mission: Destroy a station invaded by Thargoids

Someday you’ll get a message that the Thargoids have started to invade the galaxy. Make sure your Cobra is fully equipped with the cloaking device, 4 rockets, military lasers, naval energy unit and enough fuel to run.
From now on, all orbital statations are occupied by Thargoids. Their appearance will alter as well. Fly to a planet with a high industrial rating (12 or so). On your way, Thargoids will attack you so it might be useful to reuse your tactics from the documents mission.
Use missiles to destroy the station when in range. Thargoid occupied stations have no ECM fitted. Make sure the station has been destroyed. You will gain an ECM jammer that will deactivate ECM systems on other ships. Press ‘L’ to actviate the jammer.
NOTE: I suppose one has to fill up at the sun in order to leave the system as you will destroy the only station.

Generic notes:
In a “Drive malfunction” situation, you are in deep trouble. Keep the Thargoids at bay while your systems will be repaired automatically. Select a new hyperspace destination and attempt to hyperspace after 5-10mins. Sooner or later the drive will work again.

Later in the game it is wise not to use the escape pod. You will use all your ELITE score to go for the next mission. The score will still display but you will have to collect as much points again. Next mission every 90000 points so if you have 80000 and use the escape pod, you’ll have to make 180000 for the mission. Destroy enemy ships to gain score.

Do not buy the cute Trumbles. They will breed and occupy your cargo hold. Fly to the sun to roast them in order to make a ball of furs out of them. That is a rumor and noone will guarantee it will work.

[…]

To the beginner, the following ships are dangerous and mostly deadly: (Target them and press ‘I’ to get a ship ID)
Asp MKII
Wolf MKII
Thargoid
They are deadly in 90% of all cases so save your game everytime you dock!

NOTE: I personally don’t think the Asp is that dangerous. Beware of Geckos, I think those are more deadly. You can kill an Asp with a missile which won’t work on Geckos.

If a Thargoid spreads small daugther ships, you will be able to scoop them up to get “Alien Items” in your cargo hold.

….

Some more personal tips by Simon Sunnyboy:

  • Do not attempt piracy in democracy or corporate state worlds. Choose Feudal or Anarchy.
  • Do not shoot space stations. You won’t be allowed to dock with the computer then and the police will come to shoot you.
  • If you pirated in a system (blasting yellow cargo ships), the police will probably appear near the station. You can only dock manually then if you manage to survive.
  • Buy a fuel scoop soon and collect cargo canisters when you blast an enemy. Get precious cargo for free. A simple Sidewinder worth 5 credits of bounty might turn into a 150 credits fortune if you sell its cargo of machinery or computers.
  • Avoid selling firearms, slaves and narcotics at friendly worlds. Feudal or Anarchy won’t care.
  •  Safest worlds are either democracy or corporate state. Less pirates will attack you on your way.
  • Always use the ID feature of your gun sight to check who is attacking you.
  • Blast Thargoids and Wolf MKII first if you detect any in a formation.
  • The cargo hold expansion is a must-have for any privateer scooping up cargo.
  • If you want to buy goods yourself, check your planned destination first to decide which goods to buy. Food won’t sell on an agricultural world ;)
  • Save early, save often!
  • The Atari ST version offers RAMSAVE which is rather quick. Use it if playing on a real machine, just don’t forget to save to disk before switching the machine off.

Have fun, Elite rulez hard!

Hatari unter Recalbox

Wenn man weiß wie, funktioniert auch die Atari ST Emulation mit Recalbox ganz anständig.

Ich habe z.B. Nebulus, Pacmania und Bubble Bobble aus der Menüreihe von Automation damit zum Laufen bekommen.

TOS ROM Images müssen im BIOS Ordner installiert werden. Der Emulator erkennt die Images über Checksummen, daher funktioniert es mit EmuTOS leider nicht.

Für den Start sollten ein TOS 1.02 oder 1.04 ausreichen. Vermutlich funktionieren UK Varianten am ehesten.

Die Bedienung ist etwas gruselig mit Controller, Spiele, die die Maus benutzen, sind praktisch unspielbar.

Alles was mit Joystick und vielleicht einer Taste auskommt, sollte aber laufen.

Folgende Hilfen beziehen sich auf einen XBOX 360 Controller.

  • Start aktiviert das von Hatari bekannte Konfigurationsmenü. Der Mauscursor ist dann mit dem Pad steuerbar.
  • Select am Controller schaltet das Gamepad zwischen Joystick und Mausmodus um.
  • Mit L1 kann man einblenden, was gerade aktiv ist.
  • Mit Y wird eine virtuelle Tastatur ein- und ausgeblendet. Das reicht um kurze Menüauswahlen zu treffen oder Trainermodi zu konfigurieren.

Funktionsfähig sind .ST und .MSA Images. Manche .STX Images funktionieren, aber nicht alle.

Recalbox vs Logitech F710 Gamepad

Irgendwann im Frühjahr habe ich meinen Raspberry Pi im Wohnzimmer von Retropie auf Recalbox umgestellt.

Das funktioniert fürs Gaming viel einfacher und läuft recht anständig mit einfachen Gamepads oder meinen XBox 360 Controllern.

Mit meinen Logitech F710 Gamepads war es irgendwie hakelig und teilweise nicht navigierbar.

Heute habe ich herausgefunden, was man beachten muss:

    • Die USB Dongles müssen vor dem Booten eingesteckt werden, sonst wird der zugehörige Controller möglicherweise nicht gefunden.
    • Der Schalter am Controller muss auf D für DirectInput stehen. Mit X wie XInput (XBox 360 kompatibel) funktioniert es nicht.

Danach funktionieren die Logitech F710 Gamepads auch super unter Recalbox.

In eigener Sache: Wechsel Erscheinungsbild und Cookies

Ich wurde darauf aufmerksam gemacht, daß mein Blog über Mobile Endgeräte nicht so gut lesbar ist. Nach langen Jahren mit gleichem Erscheinungsbild habe ich dieses dann heute mal ausgewechselt.

In dem Zuge habe ich auch das Wetterplugin deaktiviert, denn dieses setzt recht viele Cookies, die nicht nötig sind.

Insgesamt sollten im Normalbetrieb keine Cookies erforderlich sein.

STM32 “Blue pill” mit SEGGER Embedded Studio

Ich wollte mal SEGGER Embedded Studio ausprobieren, nachdem ich im Büro schon mit meinen Kollegen darüber gesprochen hatte.
Unter Linux stellt diese IDE auf jeden Fall eine gute Möglichkeit dar, für STM32 basierte Controller Software zu entwickeln, z.B. die “Blue Pill”.

Bislang habe ich nackte Makefiles und Eclipse probiert. Letzteres ist langsam und das Debuggen war damit nicht so gut verwendbar.

Die SEGGER IDE lies sich leicht installieren, die Installation benötigt leider root Rechte mit sudo, zumindest für udev Konfiguration für einen J-Link.
Wenn man das optional weglassen könnte, wäre das von Vorteil.

Die IDE präsentiert sich mit QT Oberfläche und ist flott und responsiv.

Positives:

  • gute Reaktionszeit
  • Debugger kann Controllerregister inklusive Peripherie darstellen
  • Debugger unterstützt SEGGER J-Link sowie GDB basiertes Debuggen mit OpenOCD
  • Installation nach /opt oder dgl möglich
  • bringt Compiler und Linker mit
  • Projektkonfigurator für Baremetal Devices
  • Plugins und Herstelersupport für definierte Controller und Familien nachinstallierbar
  • Crossplattform

Negatives:

  • kein Import von Makefileprojekten
  • Sortierung der Fenster und Reiter ist etwas unübersichtlich

Insgesamt aber besser als Eclipse und eine händische Umgebung.

Um via ST-Link v2 mit OpenOCD zu debuggen, habe ich mein Projekt im SEGGER Embedded Studio dann wie folgt konfiguriert:

  • “Debug > Debugger” auf “GDB Server” einstellen
  • “Debug > GDB Server für OpenOCD konfiguriert wie im Screenshot

[OpenOCD Konfiguration für die STM32 Blue Pill im SEGGER Embedded Studio]
OpenOCD Konfiguration für die STM32 Blue Pill im SEGGER Embedded Studio
Dann started OpenOCD automatisch im Hintergrund und man kann debuggen.

Ich bin bislang nur auf ein Problem gestossen, wenn ich die STM32 HAL für die Blue Pill benutzen möchte. Wenn ich das komplette .a File dazulinke, wird leider auch das komplette File eingebunden. Der GNU Linker im Makefile nimmt nur die Teile die nötig sind, da muss ich noch rausfinden, wie ich das SEGGER Embedded Studio dazu bekomme, nur das zu linken, was benötigt wird.

SNES2DB9 Arduino Prototyp

Seit ein paar Wochen arbeite ich an einem kleinen Mikrocontrollerprojekt.
Zum letzten Summer Games in Atzenhofen hatte ich für Janina vergessen, ein passendes Gamepad zum C64 mitzubringen. Mit einem klassischen Joystick kann sie nicht so recht zocken und bevorzugt Gamepads. Die Sega Pads funktionieren nur wackelig und teilweise und am C64 teils garnicht.

SNES2DB9 Arduino Prototyp am Atari STE
SNES2DB9 Arduino Prototyp am Atari STE

Zunächst wollte ich nur eine neue Leiterplatte entwerfen, mit der man ein USB Joypad auf den DB9 Joystickanschluß von Atari anpassen konnte. Das erschien mir ein wenig zu ambitioniert, also entschied ich mich, einen aktiven Konverter auf mit Arduino als Basis zu entwerfen. Ich entschied mich für die SNES Controller mit Schieberegister, da dies leicht abzufragen ist und die Handhabung der SNES Controller bei meiner Zielgruppe bekannt sind.

Heute habe ich meinen Prototypen dann mal am Atari STE ausprobiert, und ich muss sagen, es läuft. Es fehlen noch ein paar Feinheiten, Autofeuer, Springen mit Feuerknopf statt hoch, aber prinzipiell liest der Arduino den SNES Controller korrekt und mit ca 60Hz aus und bedient die Signalleitungen zum DB9 Joystickport entsprechend. Die Schaltung ist auch ziemlich einfach, mehr oder minder direkt verdrahtet, wobei ich dem Latch und Clock zum SNES Controller noch Pulldown, bzw Pullupwiderstände verpasst habe. Auch lassen sich Arduino und SNES Controller komplett über die 5V vom Joystickport versorgen.

Eine komplette Version mit eigenständigen Controller auf Basis eines ATTiny mit 14 Pin ist in Planung.

Quellcodes und Dokumentation werde ich recht bald bei Github unter MIT Lizenz verfügbar machen.

Steambox im Eigenbau – Teil 2

Im ersten Teil habe ich über mein neues Steamboxprojekt berichtet.
Die Festplattenlöschung war problemlos nach ca 4,5h fertig, bei einer 320GB Platte. In dem Zuge wurden auch keine Fehler wie defekte Sektoren gefunden. Auch memtest86 lief gut durch, die Kiste sollte prinzipiell also immer noch gut laufen. Hier musste ich allerdings die ältere Version 4 benutzen, die noch ein klassisches BIOS unterstützt. Der Acer hat noch kein UEFI.

Als nächsten Schritt habe ich dann mit der Installation von Windows 10 begonnen. Ich hatte zunächst eine gute alte DVD mit dem Medienerstellertool von Microsoft erzeugt.

Der Acer PC startete diese DVD auch, aber dann blieb der Bootvorgang mit Windowslogo und drehendem Rädchen für über 10min hängen. Schließlich wurde mir eine obskure Fehlermeldung gezeigt, wonach Geräte nicht ansprechbar waren.

Ich probierte es dann noch 2 oder 3mal aus, hatte aber keinen Erfolg. Als Plan B habe ich dann eine SD Karte als Installationsmedium erstellt, falls das DVD Laufwerk eine Macke hatte. Auch der eingebaute SD Kartenleser war mir suspekt, da war schon vor Jahren etwas kaputtgegangen.

Mit einem externen Kartenleser habe ich dann von USB gebootet und damit lief die Installation schließlich ohne Probleme los.

Auf die Frage nach einem Lizenzschlüssel hin habe ich meinen entsprechenden alten Windows 7 Home Schlüssel aus den Unterlagen vom Acer PC angegeben. Und tatsächlich, die Installation hat ihn akzeptiert und problemlos weiter gemacht.

Hätte dies nicht funktioniert, dann hätte ich vermutlich vorerst das Projekt ohne Aktivierung von Windows 10 fortgesetzt. Dann hätte ich später immer noch einen Lizenzschlüssel kaufen können.

Nach ca 45min hatte ich dann ein Windows 10 installiert, bei dem ich erstmal viele invasive Fragen mit nein beantwortet hatte. Passend zu meiner Windows 7 Lizenz bekam ich so also ein Windows 10 Home Edition installiert.

Zunächst hatte ich Angst, ob dies vielleicht nur einen einzigen User erlauben würde, aber man kann definitiv weitere Accounts hinzufügen.

Windows Hello habe ich gleich in der Systemsteuerung abgeklemmt, ich logge mich lieber mit einem ordentlichen Passwort ein, und nicht mit einer Pin.

Für die Benutzung als Steambox brauche ich in Zukunft natürlich Controlerunterstützung. Der Empfänger für meinen wireless Xbox 360 Controller wurde gleich erkannt und der Treiber kommentarlos installiert.

Danach habe ich erstmal 2-3 Stunden investiert, um eine grundlegende Auswahl an Programmen zu installieren. Auch auf einer Steambox will ich die gängigsten Dateiformate zumindest ansehen können.

Ich installierte folgende Programme:

  • 7-Zip (Ein- und Auspacken von Dateiarchiven ist ein Muss)
  • Daemon Tools Lite (bei dem ggfs defekten DVD Laufwerk will ich notfalls CD/DVD Images verwenden können, Stand März 2020 gibt immer noch eine freie Version ohne Zahlungszwang)
  • Notepad++ (denn ohne einen ordentlichen Texteditor geht nichts)
  • LibreOffice (Officedokumente will man zumindest Lesen und notfalls auch schnell schreiben können)
  • Acrobat Reader (PDFs tauchen doch regelmäßig mal wieder auf)
  • CDBurnerXP (falls man doch mal ISOs erstellen oder zumindest wegbrennen will

Danach habe ich dann noch einen weiteren Benutzeraccount angelegt, unter dem später Steam direkt gestartet werden soll. Mehr dazu in einem Folgeartikel

Ein paar Dinge liefen nicht auf Anhieb. Für meine PCIe-Karte mit COM Port fehlt mir noch ein Treiber für Windows 10. Diese Schnittstelle ist aber nicht lebenswichtig für eine Steambox.

Das lokale Netzwerk musste ich zum Filesharing über SMB erstmal aktivieren, aber da ist mir eine gezielte bewusste Aktivierung lieber wie komische Magie.

Einloggen über Remotedesktop ist bei der Home Edition nicht möglich. Ich probierte Teamviewer aus, das war aber irgendwie ruckelig und laggte rum, sodas ich dann noch lieber live vor dem Gerät sitzen wollte.

Als Virenschutz habe ich erstmal Windows Defender belassen. Ob ich da noch mehr installiere, weiß ich jetzt noch nicht.

Insgesamt bin ich überrascht, der alte Athlon Dualcore mit 3GB RAM läuft unter Windows 10 gefühlt zügiger als unter Windows 7. Auch bootet Windows 10 erstaunlich gut. Hat Microsoft nach 20 Jahren endlich mal dazugelernt?

Und Steam OS? Ich glaube, ich hätte für die Installation weniger wie die Hälfte der Zeit gebraucht, es würde auch funktionieren und ich hätte sofort Steam im Zugriff gehabt. Allerdings wäre dort dann die Spieleauswahl stark reduziert, vorallem ein paar Capcom und Konamipacks laufen derzeit nur unter Windows 10, aber nicht unter Windows 8. Und die möchte ich mal anzocken, bevor ich auch der Alienware ein Update auf Windows 10 installiere.