Steambox im Eigenbau – Teil 1

Ich habe schon vor 2,5 Jahren einen neuen kleinen, leisen, lüfterlosen Arbeitsrechner gekauft. Da ich zum Spielen mittlerweile meine Alienware Alpha benutze, ist der Arbeitsrechner nicht mehr dualbootfähig und rennt nur noch unter Xubuntu, derzeit noch mit 18.04LTS.

Steam Logo

Seit diesem Neukauf stand auch mein alter Arbeitsrechner, der Acer AS X1301-3, den ich im Mai 2010 gekauft habe, nur noch rum.

Ich hatte schon länger die Idee, mal eine eigene Steambox von Grund auf selber aufzusetzen. Für dieses Projekt hatte ich schon immer den ungenutzten Acer PC im Sinne, und er sollte zumindest die Retromäßigen Titel (z.B. die neuen Capcom Releases bei Steam) alle abkönnen. Eine neuere Grafikkarte wäre vielleicht mal sinnvoll, das hat aber aktuell keine Priorität.

Geliefert wurde der Acer damals mit Windows 7 Home. Ich werde ausprobieren, ob ich Windows 10 mit dem alten Key als Professional Version installiert bekomme. Davon werde ich in einem Folgebeitrag berichten. Eine Zeitlang hätte ich auch Steam OS genommen, aber für Windows ist die Kompatibilität besser und da ich ja eigentlich einen Key für den PC habe, auch kein Hinderungsgrund.

Eine Datensicherung habe ich damals 2017 gemacht und den Rechner nicht wieder angefasst. Daher kann auch alles weg, was da noch so drauf ist. Ich könnte auch die Wiederherstellungs DVDs nehmen, aber mir ist eine Installation von Grund auf neu lieber. Außerdem ist das einem Neuprojekt mit einem alten Rechner sicherlich immer gut.

Nachdem ich aktuell endlich mal wieder Lust auf Basteln habe, habe ich heute den alten Acer hergenommen und mit Darik‘s Boot and Nuke Boot CD gestartet, denn ich wollte die Gelegenheit nutzen, mal ein Tool zur Festplattenlöschung auszuprobieren. Näheres unter https://dban.org/

Allerdings wollte meine Kiste zunächst nicht starten. Es ging dann mit einem anderen Kaltgerätekabel, aber eigentlich müsste das zuerst von mir probierte Kabel genau dasjenige gewesen, welches ich damals 7 Jahre lang mit dem Acer PC benutzt habe.

Anders Kabel, neues Glück. Der PC startete dann und ich erinnerte mich sofort, warum ich damals einen neuen PC angeschaffte habe. Die Lüfter rasselten ab und an beim Systemstart derbe laut, auch hatte ich das Gerät ein paar Mal beim Spielen von „Red Orchestra“ in eine hitzebedingte Notabschaltung gefahren (jaja, der Rechner vertrug nicht alle Games von 2007)

Die CMOS Batterie war erstmal leer, aber ich habe im BIOS wieder die Defaults eingetragen und dann startete auch die Boot CD zum Löschen der Festplatte. Ich hoffe, die Batterie ist gepuffert und das CMOS bleibt erhalten, wenn der Rechner ab und an mal wieder gestartet wird.

Im Moment läuft immer noch die Festplattenlöschung, schon seit über einer Stunde, und die geschätzte Abschlußzeit ist erst in 4,5 Stunden. Heute passiert jedenfalls nicht mehr viel damit.

Aber ein Anfang zum Projekt ist gemacht.

STM32 HAL Library für die “Blue pill”

Seit einiger Zeit kann man die sogenannte “Blue Pill” kaufen. Dies sind Mikrocontroller aus der STM32 Familie mit Cortex Kern, konkret STM32F103C8 mit Cortex M3, die auf einem schönen klassischen DIL-Träger aufgelötet sind mit Pinheader und Micro-USB zur Stromversorgung ausgerüstet sind. Dadurch passt alles in ein Steckbrett und kann auch als Arduino betrieben werden.

Ich habe mir ein paar Exemplare beschafft und möchte diese natürlich mehr oder minder “bare metal” benutzen, ähnlich wie ich das im Beruf auch tue. Dort arbeite ich seit gut 7 Jahren ebenfalls mit STM32 Controllern.

ST Microelectronics stellt eine recht gute Bibliothek zum Ansprechen der Controllerperipherie zur Verfügung. Damit man diese nicht immer mit jedem noch so kleinen Projekt von Null auf übersetzen muss, habe ich mir mit CMake ein kleines Framework geschrieben, welches die Library für den konkreten Controller der “Blue Pill” als Binary übersetzt.

Ausprobiert habe ich die Library noch nicht, aber es baut und linkt. Eigentlich müsste das schon reichen, das .a File wird im neuen Projekt referenziert und der Includepfade zu der Headern der HAL Library mitangegeben.

Der Anwender muss ggfs. die STM32 Header für den Controller in seinem Projekt referenzieren, denn einige Headerfiles der HAL Library ziehen die controllerspezifischen Header nochmal rein.

Näheres und technische Updates gibt es auf der Projektablage bei Github:
https://github.com/simonsunnyboy/stm32hal_bluepill

Ich habe den heute aktuellen Stand der HAL Library eingebunden, speziell den vom CubeMX angelegten, STM32Cube_FW_F1_V1.8.0.

WordPress 5 und der klassische Editor

Mit WordPress 5 und neuer wurde ein neuer Editor eingeführt. Der gefällt mir irgendwie überhaupt nicht.

Glücklicherweise kann man auf den klassischen Editor zurück. Dazu muss man nur unter “Plugins” den “Classic Editor” installieren.
Und schon sieht es wieder besser aus und Beiträge können wieder lesbar erstellt werden.

Binary to Wozmon

(c) 2019 by Matthias Arndt <marndt@asmsoftware.de>
The MIT License applies to this project.

Abstract

This is a little file tool to dump a binary file in the format used by the
Wozmon monitor software used by the Apple 1.

The output can directly be fed into a serial link if necessary.

System requirements

  • C99 compliant compiler and runtime environment

Usage


$ bin2woz <loading address> <input file>

The loading address is given in 4 hexadecimal digits without prefix.
The output is dumped to stdout including CR/LF for Wozmon.

Example


$ bin2woz 0280 my_program.bin

Download

The project can be found for download at https://github.com/simonsunnyboy/bin2woz

Apple 1 Emulation von Peter Sieg ausprobiert

Ich habe im Laufe der Woche mal die Apple 1 Emulation auf Arduino Basis von Peter Sieg ausprobiert.
(vgl. https://github.com/petersieg/arduino/tree/master/arduino_6502_apple1)
Den Anstoß gab mir ein kleiner Artikel in Load #5.

Bis auf die RAM Beschränkung auf 1,5K läuft das Projekt auf Anhieb auf einem Arduino Nano.

Apple 1 Emulation auf Arduino Nano

Vielleicht baue ich den Ansatz noch aus, mir gefällt der sich magisch compilierende Sketch nicht. Es werden keine sauberen Headerdateien verwendet. Ich würde ausserdem noch das AVR interne EEPROM als Programmspeicher für den emulierten Apple aktivieren.

Kleine Testprogramme habe ich bisher mit dem Acme Assembler erstellt, mit dem man z.B. auch für den C64 Programme erstellen kann.

Um die Programme auch in den Wozmon vom Apple 1 eingeben zu können, habe ich mir eine kleines Hilfsprogramm geschrieben. Dieses konvertiert die Binärdaten in einen Hexdump, den man direkt in den Wozmon über UART hochladen kann.

Vgl. https://github.com/simonsunnyboy/bin2woz

Das Testprogramm oben füllt nur 16 Bytes innerhalb der Zeropage auf 0x41.

		*=$0280

fill 	= $41    ; fill bytes
dest	= $0080  ; start address of destination

		ldx #0
		
loop:		
		lda #fill
		sta dest,x
		inx
		cpx #$10
bne     loop

		jmp $ff00  ; back to wozmon
		
		; acme -o fill.bin fill.S

Rezept für Biryani Masala Gewürzmischung

Biryani Masala

Gewürzmischung

für 1 kleine Dose

Zutaten:

  • 1 Lorbeerblatt
  • 1 1/2 TL Fenchelsamen
  • 2 Sternanis
  • 10-12 Kapseln Grüner Kardamon
  • 1 TL schwarzer Pfeffer
  • 1 TL Gewürznelken
  • 4 TL Koriander
  • 2 TL Kreuzkümmel
  • 1/2 TL Muskatnuss
  1. Alle Zutaten in einer stabilen Gewürzmühle zu feinem Pulver mahlen
  2. Luftdicht in einer Streudose verschliessen

Verwendung für Currys mit Hühnchen oder Fisch.

Guten Appetit!

Rezept für Hamburger Apfelkuchen

Ein schöner einfach zu backender Apfelkuchen vom Blech.
Aus einem ÜNH Rezeptbuch von Anfang der 90er Jahre

  • 250 g Fett
  • 250 g Zucker
  • 1 Päckchen Vanillezucker
  • 4 Eier
  • 125 g gemahlene Mandeln
  • 250 g Mehl
  • 8 – 10 kleine Äpfel
  • Zimt

“Ihr vermischt Fett, Zucker, Vanillezucker, Eier, Mehl und Mandeln in einer Rührschüssel und stellt einen Rührteig her. Diesen gebt ihr auf ein gefettetes Blech. Schneidet die Äpfel in Viertel und steckt sie in den Teig. Nach dem Abbacken sofort schneiden und mit Zimt bestreuen.”

Backtemperatur: 200 Grad Ober und Unterhitze , bei Umluft etwa 180 Grad
Einsetzen: Mittlere Schiene
Backzeit: ca. 30 Min.

Rezept für Eiweißbrot mit Kleie und Quark

Seit ein paar Jahren backt Janina ihr Brot selber. Ich esse aus Gewohnheit wochentags auch davon, ein Brot ohne Mehl. Es kommt auf die Würzung und den Salzgehalt an. Es kann sehr gut gelingen und es schmeckt bei richtiger Würzung auch komplett ohne Butter und Belag.

Eiweißbrot mit Kleie und Quark

ein herzhaftes Brot ohne Mehl

für 1 Laib

Zutaten:

  • 6 Eier
  • 500g Magerquark
  • 1,5 Päckchen Trockenhefe
  • 1 Päckchen Backpulver
  • 75ml warmes Wasser
  • eine Prise Zucker
  • Salz
  • 250g Haferkleie
  • 50g Weizenkleie
  • 50g Leinsamen
  • 50g Sonnenblumenkerne
  • Brotgewürz nach Belieben, z.B. Anis, Kümmel, Fenchelsamen in Kombination (notfalls auch Pizzagewürz, hier darf experimentiert und variiert werden)
  1. Wasser mit Zucker und Hefe vermischen, zur Seite stellen und gehen lassen
  2. Eier aufschlagen und Quark unterrühren
  3. Hefemischung hinzufügen und sorgfältig unterrühren
  4. Salz und Gewürze unterrühren
  5. Haferkleie und Weizenkleie unterrühren
  6. zuletzt Backpulver, Leinsamen und Sonnenblumenkerne unterrühren
  7. Kastenform mit Backpapier auslegen und Teig einfüllen
  8. Backen bei 200°C (Umluft) für 60min

Das fertig abgekühlte Brot am besten im Kühlschrank aufbewahren, es kann an der Luft verderben.

Guten Appetit!

ASM Software Unittest Framework

(c) 2016 by Matthias Arndt marndt@asmsoftware.de

The MIT License applies to this project. Please refer to the file COPYING for details.

The software is available on GitHub at https://github.com/simonsunnyboy/UnittestFramework

Abstract

This is a small framework to implement unittests for software written in C. There are existing projects that offer much more functionality, this one focuses on simple usability and textual output of statistics.

Main reason to implement this framework was that cunit was too complicated in usage and no other small free frameworks could be found.

System requirements

  • Cmake to build the example project
  • a C99 compliant C compiler but a C90 one will do if stdint.h and stdbool.h are supplied
  • any operating system of your choice

Using the test framework

A test should be a subfunction or the main function of an appropriate test executable.

Use the macros defined in unittest.h and link your project with unittest.c

Wrap the Test with UT_BEGIN() and UT_END() macros for proper structuring. Most commands should describe themselves.

It is allowed to start another test for entirely different content with the UT_BEGIN() macro if the last test finished with the UT_END() macro.

Fehlende Session für xrdp

Wenn man xrdp einrichtet, landet man manchmal in der falschen oder auch in keiner wohldefinierten Session.

Effektiv kann man sich nicht einloggen oder eine langsame Umgebung wird verwendet.

Hier hilft es dann, eine passende Sitzung, leichtgewichtig und funktional ist immer LXDE, zu definieren.

In der Datei ~/.xsession muss der Aufruf für die entsprechende Umgebung stehen.

Für XFCE etwa
startxfce

Für LXDE z.B. folgende von Askubuntu geklaute Zeile:
lxsession -s Lubuntu -e LXDE