<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Io on Steckschwein</title><link>https://www.steckschwein.de/tags/io/</link><description>Recent content in Io on Steckschwein</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 14 Nov 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://www.steckschwein.de/tags/io/index.xml" rel="self" type="application/rss+xml"/><item><title>Fixing PS/2 Keyboard handling (Part I)</title><link>https://www.steckschwein.de/post/fixing-ps-2-keyboard-handling-part-i/</link><pubDate>Sat, 14 Nov 2020 00:00:00 +0000</pubDate><guid>https://www.steckschwein.de/post/fixing-ps-2-keyboard-handling-part-i/</guid><description>&lt;p&gt;The way the PS/2 keyboard is handled has always been something we were never quite happy with. The key points being:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The PS/2 controller had no way of signalling that there has been a new keystroke, the buffer had to be polled via SPI.&lt;/li&gt;
&lt;li&gt;The PS/2 controller had no way of talking to the keyboard and had to rely for the keyboard to initialize itself properly. Also, typematic rate and delay could not be set, as couldn&amp;rsquo;t the states of the keyboard LEDs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Although mid- to long term, we likely might &amp;ldquo;upgrade&amp;rdquo; to USB anyway, but not without having done PS/2 right first. So, I will talk about integrating IRQ handling, and in a follow up post Marko will talk about how he got the PS/2 controller talking to the keyboard.&lt;/p&gt;</description></item><item><title>Connecting SNES Controller to the Steckschwein</title><link>https://www.steckschwein.de/post/connecting-snes-controller-to-the-steckschwein/</link><pubDate>Wed, 15 Jan 2020 00:00:00 +0000</pubDate><guid>https://www.steckschwein.de/post/connecting-snes-controller-to-the-steckschwein/</guid><description>&lt;p&gt;Recently, Michael Steil published a &lt;a href="https://www.pagetable.com/?p=1365"&gt;blog post about connecting NES and SNES Controller to a 6502-based system&lt;/a&gt; showing how to use NES and SNES controllers on a C64 without the need for any special hardware, by just connecting them to the C64&amp;rsquo;s user port.&lt;/p&gt;
&lt;p&gt;Why not use his approach and adapt it to the Steckschwein? The Steckschwein has a User Port, too, albeit a very different one as the C64. Basically, the Steckschwein-User-Port consists of the complete Port A of the VIA, plus the /RESET and /IRQ lines. Also of course, VCC and GND.&lt;/p&gt;</description></item><item><title>Weird bug in SD card code</title><link>https://www.steckschwein.de/post/weird-bug-in-sd-card-code/</link><pubDate>Wed, 16 Oct 2019 00:00:00 +0000</pubDate><guid>https://www.steckschwein.de/post/weird-bug-in-sd-card-code/</guid><description>&lt;p&gt;Frank van den Hoef, who is adapting the Steckschwein SPI &amp;amp; FAT32 code for his tiny65 machine made me aware of a classic mistake for a 6502 assembly coder to make. Namely in our sdcard driver, when waiting for the &amp;ldquo;proper&amp;rdquo; response from the card (which should have bit 7 cleared). The routine handling this looked like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;1 sd_cmd_response_wait:
2 	ldy #sd_cmd_response_retries
3 @l:	dey
4 beq sd_block_cmd_timeout ; y already 0? then invalid response or timeout
5 jsr spi_r_byte
6 bit #80	; bit 7 clear
7 bne @l ; no, next byte
8 cmp #$00 ; got cmd response, check if $00 to set z flag accordingly
9 rts
10 sd_block_cmd_timeout:
11 debug &amp;#34;sd_block_cmd_timeout&amp;#34;
12 lda #$1f ; make up error code distinct from possible sd card responses to mark timeout
13 rts
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Classic. Obviously, line 6 should read:&lt;/p&gt;</description></item><item><title>NVRAM improvements</title><link>https://www.steckschwein.de/post/nvram-improvements/</link><pubDate>Thu, 13 Jun 2019 00:00:00 +0000</pubDate><guid>https://www.steckschwein.de/post/nvram-improvements/</guid><description>&lt;p&gt;As real computer is not a real computer without a real time clock, the Steckschwein is no exception here. As &lt;a href="http://steckschwein.de/hardware/via-65c22-as-spi-master/spi-devices/"&gt;we know&lt;/a&gt;, we use the Maxim DS1306 RTC, which is a very common RTC which comes as DIP IC and has an SPI interface. And of course it supports battery backup in various configurations. And this is where things get interesting.&lt;/p&gt;
&lt;p&gt;Apart from timekeeping, the DS1306 also has 96 bytes of battery buffered RAM. The ideal place to store system configuration parameters. As of now, the RTC NVRAM contains the name of the file to be read from sdcard at startup, the line parameters for the serial interface (baud rate, data bits, parity, stopbits), and also a version number and a crc7 checksum:&lt;/p&gt;</description></item><item><title>Neue Hardware - die Platinen sind da</title><link>https://www.steckschwein.de/post/neue-hardware-die-platinen-sind-da/</link><pubDate>Tue, 28 Nov 2017 00:00:00 +0000</pubDate><guid>https://www.steckschwein.de/post/neue-hardware-die-platinen-sind-da/</guid><description>&lt;p&gt;Die neuen IO-Platinen mit integriertem UART sind fertig und haben ihren Weg von China nach München gefunden.&lt;/p&gt;
&lt;p&gt;Mit dem neuen Layout hat es nicht nur der UART mit aufs IO-Board geschafft, es sind auch etliche kleinere und größere Verbesserungen eingeflossen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Die Joystickports wurden komplett neu designed. Die Optokoppler sparen wir uns, stattdessen wählen wir über einen VIA Pin verschiedene Treiber an, die den gewünschten Joystickport mit VIA Port A verbindet. Die Ports lassen sich auch per Software komplett abschalten, damit der User-Port frei verfügbar ist. Als Schutz für die VIA werden Serienwiderstände verwendet.&lt;/li&gt;
&lt;li&gt;Der SD-Karten-Footprint und der verwendente Slot passen genau zusammen. Das war beim alten Board nicht der Fall. Jetzt sind die Karten- und die Schreibschutzerkennung endlich nutzbar.&lt;/li&gt;
&lt;li&gt;Die Datenpins für die PS/2 Schnittstelle am ATmega8 sind gewandert und liegen jetzt an PD6 und 7. Dadurch sind die RX und TX Pins des USART verfügbar geworden und können nun z.B. für das Debugging des Tastaturcontrollers verwendet werden.&lt;/li&gt;
&lt;li&gt;Zweckmäßigere Plazierung vom SPI-Anschluss des ATmega8 und des freien SPI Ports am Platinenrand. Updates der Tastaturcontrollerfirmware sind nun kein Krampf mehr.&lt;/li&gt;
&lt;li&gt;Der User-Port hat ein besseres Pinout.&lt;/li&gt;
&lt;li&gt;Die neue Platine sieht einfach besser aus.
&lt;img src="images/img_3091.jpg" alt="IMG_3091"&gt; Frisch ausgepackte Platine&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="images/img_3092.jpg" alt="IMG_3092"&gt; Fertig bestückte Platine
&lt;img src="images/img_3093.jpg" alt="IMG_3093"&gt; Die nun obsolet gewordenen Platinen.&lt;/p&gt;</description></item><item><title>Mal wieder neue Hardware</title><link>https://www.steckschwein.de/post/mal-wieder-neue-hardware/</link><pubDate>Wed, 22 Nov 2017 00:00:00 +0000</pubDate><guid>https://www.steckschwein.de/post/mal-wieder-neue-hardware/</guid><description>&lt;p&gt;Die Zeit ist reif für ein Hardware-Update, und zwar für die IO-Platine 2.0. Vorgesehen war ja schon länger, den UART dort zu integrieren. Ausserdem war das Joystick&amp;ndash;Interface noch unausgegoren, sodass auch hier etwas Neues entwickelt wurde.&lt;/p&gt;
&lt;p&gt;Zum Schutz der VIA-Pins dienen nun keine Optokoppler, sondern simple Serienwiderstände sollen die Ports zumindest vor dem Fall schützen, dass man doch mal die Datenrichtung der Joystick-Pins auf Ausgang schaltet und dann die VIA grillt indem man den Joystick betätigt. Die Widerstände begrenzen den Strom auf 1mA. Das muss die VIA abkönnen. Zudem war im vorigen Design der Userport nicht wirklich nutzbar, weil immer noch die Joysticks daran hingen. Jetzt ist es so, dass jeder Joystick über Tri State Buffer an VIA Port A verbunden wird, und zwar grundsätzlich wahlweise. Ausserdem besteht die Möglichkeit, die Joyports komplett abzuschalten. Dies wird mit dem OUT1-Pin des UART bewerkstelligt. Somit läßt sich per Software konfigurieren, ob man Userport oder Joystick benutzen möchte.&lt;/p&gt;</description></item><item><title>Mehr Karten (UPDATE)</title><link>https://www.steckschwein.de/post/mehr-karten-update/</link><pubDate>Fri, 24 Jul 2015 00:00:00 +0000</pubDate><guid>https://www.steckschwein.de/post/mehr-karten-update/</guid><description>&lt;p&gt;Unser &amp;ldquo;Standard&amp;rdquo;-Massenspeicher SD-Karte funktioniert zwar an und für sehr gut, Sorgenkind war aber immer die Initialisierungs-Routine. Bisher ließen sich damit nur günstige Class4-Karten initialisieren, bei &amp;ldquo;höherwertigen&amp;rdquo; Karten schlug die Initialisierung immer fehl, sodass nur etwa 3 von 5 Karten nutzbar waren.&lt;/p&gt;
&lt;table style="margin-left:auto;margin-right:auto;text-align:center;" cellspacing="0" cellpadding="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align:center;"&gt;&lt;img class="alignnone size-full wp-image-594" src="images/sdinit.png" alt="sdinit" width="850" height="920"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align:center;"&gt;Initialisierungs-Ablauf nach elm-chan.org&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Das hat uns schon etwas gewurmt, denn irgendwie hatte dieser Stand ein Geschmäckle von &amp;ldquo;Funktioniert aus Versehen&amp;rdquo;. Also mussten wir da nochmal ran. Der Initialisierungs-Flow entspricht im Wesentlichen dem, was auf der bekannten Seite &lt;a href="http://elm-chan.org/docs/mmc/mmc_e.html"&gt;http://elm-chan.org/docs/mmc/mmc_e.html&lt;/a&gt; dokumentiert ist. In den letzten Tagen haben wir diesen unter die Lupe genommen, und tatsächlich ist etwas aufgefallen. Vor dem Senden eines Kommandos muss sichergestellt werden, dass die Karte bereit ist. Hierzu sendet man solange $ff an die Karte, bis diese auch $ff zurücksendet. Dann ist die Karte bereit, ein Kommando zu empfangen. In unserer Initialisierungsroutine wurde dies zwischen CMD55 und ACMD41 (näheres bitte dem Link entnehmen) schlichtweg nicht gemacht. Plötzlich lassen sich fast alle vorhandenen Karten initialisieren. Dass dies mit den Class4-Karten trotzdem funktionierte, war also gewissermaßen tatsächlich aus Versehen.&lt;/p&gt;</description></item><item><title>Echte Zeit</title><link>https://www.steckschwein.de/post/echte-zeit/</link><pubDate>Mon, 15 Dec 2014 00:00:00 +0000</pubDate><guid>https://www.steckschwein.de/post/echte-zeit/</guid><description>&lt;p&gt;Eine batteriegepufferte Echtzeituhr gehört ja heutzutage schon zur Serienausstattung, auch bei Retro-Rechnern. Das Steckschwein soll also auch eine bekommen. &lt;a href="http://www.chrisward.org.uk/6502/schematics/ds1687.gif"&gt;Chris Ward&amp;rsquo;s Design&lt;/a&gt;, welches uns zu Anfang als Grundlage gedient hat (mittlerweile ist davon nicht mehr viel übrig geblieben) verwendet eine DS1687, deren Intel-mäßiges Businterface über ein wenig Glue-Logik direkt an den Datenbus des 6502 angelegt ist und damit auch Platz im IO-Bereich benötigt.&lt;/p&gt;
&lt;p&gt;Wir wollen das mit dem Steckschwein anders angehen. Unsere Echtzeituhr soll via SPI angebunden werden. Und auch ansonsten sind unsere Anforderungen eher bescheiden: - Einen Interrupt-Pin soll sie haben - Ein paar Bytes batteriegepuffertes RAM wären toll. - DIL-Gehäuse, sonst passts nicht aufs Steckbrett :-)&lt;/p&gt;</description></item><item><title>SPI mit 65c22 VIA</title><link>https://www.steckschwein.de/post/spi-mit-65c22-via/</link><pubDate>Sun, 13 Jul 2014 00:00:00 +0000</pubDate><guid>https://www.steckschwein.de/post/spi-mit-65c22-via/</guid><description>&lt;p&gt;Es gibt verschiedene Ansätze, einem 6502-basierten System SPI beizubiegen. Daryl Rictor hat z.B. einen &lt;a href="http://sbc.rictor.org/65spi.html"&gt;CPLD-basierten SPI-Controller&lt;/a&gt; mit passendem Businterface entwickelt. Meist jedoch wird eine 6522 VIA hergenommen und SPI per Bit Banging implementiert. Auch hier gibt es verschiedenen Ansätze, Andre Fachat hat es mit ein wenig externer Logik sogar geschafft, das Schieberegister der &lt;a href="http://www.6502.org/users/andre/csa/spi/index.html"&gt;VIA im für SD-Karten nötigen SPI Mode 0&lt;/a&gt; zu betreiben. Normalerweise geht das ja nicht, das das Schieberegister der VIA die Daten nicht vor dem ersten Taktimpuls anlegen kann.&lt;/p&gt;</description></item><item><title>Tore zur Welt</title><link>https://www.steckschwein.de/post/tore-zur-welt/</link><pubDate>Fri, 11 Jul 2014 00:00:00 +0000</pubDate><guid>https://www.steckschwein.de/post/tore-zur-welt/</guid><description>&lt;p&gt;Um dem Ziel eines &amp;ldquo;richtigen&amp;rdquo; Computers näher zu kommen, brauchen wir nicht nur einen Videochip, wir brauchen auch Eingabegeräte und Massenspeicher.&lt;/p&gt;
&lt;p&gt;Zwar soll unser Rechner so retro sein, dass es ihn damals, zur Hochzeit der 8bit-Heimcomputer, durchaus hätte geben können, realistischerweise wollen wir ihn jedoch mit durchaus modernen Schnittstellen ausstatten. Die 8bit-Rechner aus &amp;ldquo;unserer Zeit&amp;rdquo; haben IO-Chips wie den 6526 oder 6522 benutzt, um Tastatur (Matrix), Joysticks und Massenspeicher anzusteuern. Das haben wir auch vor. Nur etwas anders. Wir verwenden eine 65c22 VIA, und machen sie zu einem &lt;a href="http://de.wikipedia.org/wiki/Serial_Peripheral_Interface"&gt;SPI&lt;/a&gt; &amp;ldquo;Master&amp;rdquo;. Damit wollen wir einen wesentlichen Teil der Peripherie anbinden.&lt;/p&gt;</description></item></channel></rss>