{"id":2697,"date":"2013-03-03T13:12:24","date_gmt":"2013-03-03T12:12:24","guid":{"rendered":"http:\/\/www.jungsi.de\/?p=2697"},"modified":"2026-06-03T12:46:08","modified_gmt":"2026-06-03T10:46:08","slug":"retro-sinclair-spectrum-spectranet-boot-zx","status":"publish","type":"post","link":"https:\/\/www.jungsi.de\/en\/retro-sinclair-spectrum-spectranet-boot-zx\/","title":{"rendered":"Spectranet: Boot.zx [Sinclair ZX Spectrum]"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Jetzt wird sich mancher denken &#8222;Jetzt spinnt er komplett&#8220; \ud83d\ude09 Was will er nun&#8230;.. Da mich das Netzwerkinterface f\u00fcr den <strong>Sinclair Spectrum<\/strong> doch ziemlich fasziniert, wollte ich meinen eigenen kleinen Spiele-Server f\u00fcr den <strong>ZX Spectrum<\/strong> mit meinem eigenen Men\u00fc ausstatten.<br>Da ich aber schon fast 30 Jahre nicht mehr auf dem <strong>Spectrum<\/strong> programmiert hatte, habe ich mir das Men\u00fcprogramm des Spectranet-Entwicklers als Vorlage geschnappt und einige Stunden damit verbracht, es zu &#8222;\u00fcbersetzen&#8220;.<br>Bei den Tests bin ich auf den schon beschriebenen &#8222;Bug&#8220; gesto\u00dfen, der zu dem Firmware-Update auf R544 f\u00fchrte \ud83d\ude09<br>Nun zum Aufbau des Servers:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>boot.zx &#8211; das Men\u00fcprogramm<\/li>\n\n\n\n<li>games.lst &#8211; die Listen mit den Dateien in jedem Verzeichnis<\/li>\n\n\n\n<li>(games.w &#8211; das Programm, das die jeweilige Liste erstellt)<\/li>\n\n\n\n<li>(*.h &#8211; die Programme, um die Hilfedateien zu erstellen)<\/li>\n<\/ul>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\"><strong>games.w<\/strong><br>Mit diesen Programmen k\u00f6nnen die Listen f\u00fcr die Men\u00fcs erstellt werden, die dann in boot.zx eingelesen werden und am Bildschirm dargestellt werden.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">10%fopen #4,\"games.lst\",\"w\"\n20%oneof 100\n30 PRINT #4;\"Apulija-13\"'\"apulija.tap\"'\"tap i\"\n40 PRINT #4;\"Games 2013\"'\"Games 2013\"'\"dir\"\n50 PRINT #4;\"Retro Game\"'\"Retro\"'\"sna\"\n60 PRINT #4;\"Jungsis Corner\"'\"Jungsi\"'\"prg\"\n90 PRINT #4;\"Zurueck\"'\"..\"'\"dir\"\n100%close #4<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nun zur Erl\u00e4uterung der einzelnen Zeilen:<br>Zeile 10: Einen Stream mit Namen &#8222;games.lst&#8220; \u00f6ffnen und mit &#8222;w&#8220; zum Schreiben vorbereiten.<br>Zeile 20: dem Programm sagen, wo der Stream wieder geschlossen wird<br>Zeile 30: In die Datei die erste Zeile schreiben &#8211; die Zeichenfolge zwischen den ersten Anf\u00fchrungszeichen wird am Bildschirm dargestellt &#8211; die n\u00e4chste Zeichenfolge ist der Dateiname (inkl. Endung) \u2013 die letzte Zeichenfolge enth\u00e4lt nochmal die Endung und (falls vorhanden) ein &#8222;i&#8220; f\u00fcr eine Hilfe-Datei.<br>Zeile 40: Die zweite Zeile in der Datei &#8222;games.lst&#8220; \u2013 dieses Mal ein Verzeichnis \u2013 der Name f\u00fcr die Bildschirmausgabe, gefolgt von dem Verzeichnisnamen und der Angabe der &#8222;Datei-Art&#8220; &#8211; &#8222;dir&#8220; f\u00fcr Verzeichnis.<br>Zeilen 50 und 60: wie Zeile 30 aber f\u00fcr Snapshot-Datein und Programme (sna und prg)<br>Zeile 60: einfach eine Men\u00fcebene zur\u00fcck<br>Zeile 100: der Stream wird geschlossen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Allerdings geht das auch einfacher \ud83d\ude09<br>Man kann diese Listen (games.lst) auch einfach mit einem Texteditor erstellen. Ich verwende Notepad++.<br>Als Beispiel nehmen wir mal das Men\u00fc meines kleinen Servers \u2013 nach dem Start wird folgendes Men\u00fc angezeigt:<\/p>\n\n\n<div class=\"wp-block-image size-full wp-image-2769\">\n<figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"300\" src=\"https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx1.jpg\" alt=\"Spectranet &quot;boot.zx&quot; Men\u00fc 1\" class=\"wp-image-2769\" srcset=\"https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx1.jpg 400w, https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx1-300x225.jpg 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><figcaption class=\"wp-element-caption\">Spectranet &#8222;boot.zx&#8220; Men\u00fc 1<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Damit das klappt, ben\u00f6tigt man eine Datei mit folgenden Zeilen (wird in dem jeweiligen Verzeichnis als &#8222;games.lst&#8220; gespeichert)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Classic\nClassic\ndir\nNeue Spiele\nneu\ndir\nWOS Top Ten\nWOSTT\ndir<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hier geh\u00f6ren immer drei Zeilen zusammen:<br>1. Zeile: hier steht, was am Bildschirm angezeigt werden soll<br>2. Zeile: Name der Datei\/des Ordners<br>3. Zeile: was soll geladen werden? dir = in Zeile 2 steht der Name eines Ordners &#8211; tap = in Zeile 2 steht der Name einer TAP-Datei &#8211; sna = in Zeile 2 steht der Name einer SNA-Datei &#8211; prg = in Zeile 2 steht der Name eines Programms<br>Nehmen wir mal an, es wurde im obigen Beispiel &#8222;C&#8220; f\u00fcr WOS Top Ten ausgew\u00e4hlt, dann sollte folgendes Men\u00fc erscheinen:<\/p>\n\n\n<div class=\"wp-block-image size-full wp-image-2770\">\n<figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"300\" src=\"https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx2.jpg\" alt=\"Spectranet boot.zx Men\u00fc 2\" class=\"wp-image-2770\" srcset=\"https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx2.jpg 400w, https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx2-300x225.jpg 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><figcaption class=\"wp-element-caption\">Spectranet boot.zx Men\u00fc 2<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Hier wieder die Eintr\u00e4ge in der Datei &#8222;games.lst&#8220;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Renegade\nRENEGADE.TAP\ntap i\nR-Type\nR-Type.tap\ntap\nFairlight\nFAIR1.TAP\ntap\nSkool Daze\nskooldaze.tap\ntap\nThe Great Escape\nThe Great Escape.tap\ntap\nZurueck\n..\ndir<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">1. Zeile: Es wird &#8222;Renegade&#8220; ausgegeben<br>2. Zeile: Name der Datei, die geladen werden soll, inkl. Endung<br>3. Zeile: Art der Datei: tap &#8211; !Besonderheit! hier wurde noch ein &#8222;i&#8220; angef\u00fcgt &#8211; das ist der Hinweis, dass es noch eine Hilfedatei gibt (siehe weiter unten) &#8211; die drei letzten Zeilen stellen den Men\u00fcpunkt zur Verf\u00fcgung, damit man im Men\u00fc eine Ebene zur\u00fcckspringen kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hat man nun bei der Dateiart (tap, sna oder prg) ein &#8222;i&#8220; f\u00fcr eine Hilfedatei eingegeben, verzweigt das Hauptprogramm und will diese Datei einlesen. Diese Datei muss folgender Syntax folgen: INSTR-Dateiname.end &#8211; im obigen Beispiel (Renegade) sollte die Datei also Instr-RENEGADE.TAP hei\u00dfen und im gleichen Verzeichnis wie das Spiel liegen. Die Datei kann auch mit Notepad++ erstellt werden (Dateiendung anpassen). Sollte die Hilfedatei mit einer Bildschirmseite nicht ausreichen, muss man rechtzeitig in die Datei eine Zeile mit einem &#8222;m&#8220; (dann wird der Bildschirm leer gemacht und die n\u00e4chste Seite der Datei geladen) einbauen. Eine empfehlenswerte Methode, um die Hilfedatei am Bildschirm gut aussehen zu lassen, ist, dass man auf einer Seite nur 32 x 24 Zeichen Platz hat. d.h. wenn der Hilfetext l\u00e4nger ist, sollte man in Zeile 24 das &#8222;m &#8220; f\u00fcr die n\u00e4chste Seite setzen. Wenn man sich im Notepad++ die Zeilenbreite auf 32 einstellt, bekommt man auch ein Gef\u00fchl daf\u00fcr, wie viel in eine Zeile passt. Dann wei\u00df das Programm, dass der Bildschirm leer gemacht werden soll und weiter geladen wird.<\/p>\n\n\n<div class=\"wp-block-image size-full wp-image-2771\">\n<figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"300\" src=\"https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx3.jpg\" alt=\"Spectranet boot.zx - Hilfe\/Info starten - Abfrage\" class=\"wp-image-2771\" srcset=\"https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx3.jpg 400w, https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx3-300x225.jpg 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><figcaption class=\"wp-element-caption\">Spectranet boot.zx &#8211; Hilfe\/Info starten &#8211; Abfrage<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image size-full wp-image-2772\">\n<figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"300\" src=\"https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx4.jpg\" alt=\"Spectranet &quot;boot.zx&quot; - Anzeige der Hilfedatei\" class=\"wp-image-2772\" srcset=\"https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx4.jpg 400w, https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/2013\/02\/bootzx4-300x225.jpg 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><figcaption class=\"wp-element-caption\">Spectranet &#8222;boot.zx&#8220; &#8211; Anzeige der Hilfedatei<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">&nbsp;Das Original-Programm &#8222;boot.zx&#8220; habe ich in den entsprechenden Zeilen auf Deutsch angepasst und noch eine kleine Begr\u00fc\u00dfung eingebaut.<\/p>","protected":false},"excerpt":{"rendered":"<p>Jetzt wird sich mancher denken &#8222;Jetzt spinnt er komplett&#8220; \ud83d\ude09 Was will er nun&#8230;.. Da mich das Netzwerkinterface f\u00fcr den Sinclair Spectrum doch ziemlich fasziniert, \u2026<\/p>","protected":false},"author":2,"featured_media":40073,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[102],"tags":[4737,4738,666],"class_list":["post-2697","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-zx-spectrum","tag-hardware","tag-how-to","tag-sinclair"],"modified_by":"Jungsi","wp-worthy-pixel":{"ignored":false,"public":"5052facfade34bfe85eaf43c53b1c99e","server":"","url":"https:\/\/vg06.met.vgwort.de\/na\/5052facfade34bfe85eaf43c53b1c99e"},"wp-worthy-type":"normal","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.jungsi.de\/blog\/wp-content\/uploads\/Spectranet-Oberseite.jpg","_links":{"self":[{"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/posts\/2697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/comments?post=2697"}],"version-history":[{"count":2,"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/posts\/2697\/revisions"}],"predecessor-version":[{"id":42656,"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/posts\/2697\/revisions\/42656"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/media\/40073"}],"wp:attachment":[{"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/media?parent=2697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/categories?post=2697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jungsi.de\/en\/wp-json\/wp\/v2\/tags?post=2697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}