ZX81-IDE SW-Entwicklungsumgebung

ZX-Team Forum
Benutzeravatar
Paul
User
Beiträge: 2385
Registriert: 10.03.2010, 12:01
Wohnort: Germanys west end

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von Paul » 19.03.2012, 16:51

PokeMon hat geschrieben:@Paul
Wie siehts jetzt aus mit ZX80 Files ?
Filename ist raus und Fastloader auch automatisch deaktiviert.
Ich hatte jetzt nicht wirklich viel Zeit zum testen, aber SPACE.O das beiliegt lässt sich jetzt sowohl übertragen als auch starten. Auf Anhieb ohne Experimente bei voller Lautstärke.
Theoretisch ist zwischen Theorie und Praxis kein Unterschied.
Praktisch allerdings wohl.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 19.03.2012, 17:01

Paul hat geschrieben: Ich hatte jetzt nicht wirklich viel Zeit zum testen, aber SPACE.O das beiliegt lässt sich jetzt sowohl übertragen als auch starten. Auf Anhieb ohne Experimente bei voller Lautstärke.
Super, Danke für das Feedback. Ich teste eigentlich nur mit der Lautstärke um festzustellen, ob die Übertragung im Grenzbereich ist oder wieviel Reserven noch vorhanden sind. Ansonsten gilt einfach volle Lautstärke, das Signal wird ja sowieso nur digital verarbeitet, kann also ruhig übersteuert sein.

Wie im richtigen Leben: Freie Fahrt für freie Bürger. :mrgreen:
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 09.04.2012, 01:50

*** UPDATE ***

So, mal wieder ein Update fällig.
Was hat sich gegenüber der Vorgängerversion getan ?

Erstens eine kleine Programm Korrektur, versehentlich hatte ich die file Direktive zum direkten Laden von Binary Code in ein Assemblerprogramm versehentlich unterschlagen, die Funktion ist nun wieder verfügbar. Bei der Gelegenheit will ich nochmal auf die Dokumentation auf http://flatassembler.net/docs.php zum Flatassembler verweisen. Falls dort Funktionen beschrieben sind, die eigentlich auch mit der Z80 Version funktionieren sollten, es aber nicht tun, dann einfach ein kurzer Hinweis hier im Thread oder per PN. Ich kümmere mich dann um Abhilfe.

Zweitens wurde der Fastloader Code geändert und optimiert. Die Vorgängerversion brauchte mindestens 7 bis 8 Sekunden nur um den Fastloader auf den Zeddy zu übertragen. Nach extremer Optimierung des Codes inklusive Setzen fast aller Variablen auf 0 und Weglassen des DFILE und zusätzlich noch eine Verkürzung der Pausen für die Standard Ladegeschwindigkeit (LOAD "") nach dem Vorschlag von Zsolt dauert es nun nur noch 2.3 Sekunden. Kleinere Programme kann man daher in unter 3 Sekunden auf den Zeddy komplett übertragen. Das ist rekordverdächtig. Mehr Optimierungspotential um das Ding auf einen Standard Zeddy zu laden, fällt mir momentan nicht ein. Immer noch 1k kompatibel (bis auf spezielle Programme die jedes Byte inklusive der Variablen vor dem BASIC Program ausnutzen).

Drittens habe ich nun die Listing Funktion sauber integriert.
Zur Wiederholung hier die Haupt Tastenbelegung:
F9 - Run (Audio Transfer zu ZX81)
CTRL-F9 - Nur Kompilieren
CTRL-F8 - Listing erzeugen (öffnet sich automatisch in einem neuen TAB in der IDE und wird auch aktualisiert wenn man den Code ändert und erneut CTRL-F8 drückt)
Damit man nicht alle Includes im Listing hat und sich auf die gerade bearbeitete Programmregion beschränken kann (übersichtlicher), kann man mit den Pseudokommandos ;LISTOFF oder ;LISTON (Kommentare, müssen am Anfang einer Zeile stehen und nur in Großbuchstaben) die Listing Ausgabe steuern. Die Kommands (Kommentare) können beliebig oft im Source Code vorkommen. In ZX81DEMO.ASM sieht man ein Beispiel.

Die BASIC Integration macht Fortschritte, aber noch nicht produktiv in diesem Release sinnvoll. Müsst Ihr noch ein klein wenige Geduld haben.
Ansonsten freue ich mich über Kommentare oder ggf. auch Vorschläge zu benötigten Funktionen oder Verbesserungen.
Zuletzt geändert von PokeMon am 25.01.2013, 18:41, insgesamt 1-mal geändert.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
bodo
User
Beiträge: 290
Registriert: 14.02.2007, 17:21
Kontaktdaten:

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von bodo » 09.04.2012, 17:06

Ohne in das Archiv geschaut zu haben: magst du deinen Fastloader einmal in Funktionsweise und Quelltext dokumentieren? Dann kann er z.B. auch in das Power-BASIC integriert werden. Oder in zukünftige oder erweiterte P-nach-WAV-Konverter aufgenommen werden...
B0D0: Real programmers do it in hex.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 09.04.2012, 19:14

Ja ist eigentlich kein Geheimnis.
Der Fastloader Quellcode liegt anbei (ZX81FALD.ASM).

Der eigentliche Code zum Laden (ZX81FALD.INC) belegt die 65 Byte im Bereich PRBUF / MEMBOT plus ein paar Zusatzinstruktionen die vor dem CD FLAG eingearbeitet sind. Das CD FLAG wird auf 0 gesetzt (FAST Mode) und die Einsprungadresse ist FRAMES+2.

Das CD FLAG stört als NOP den Programmfluss nicht. Wichtig ist, dass der eigentliche LADECODE nur auf den Bereich PRBUF / MEMBOT beschränkt ist und beim Laden in das zu ladende File reinkopiert wird. Ansonsten würde das Ladeprogramm durch das Überschreiben beim LOAD unterbrochen. Das macht wiederum die IDE als 2-stage-loader. Normalerweise stört das Programme nicht, da dieser Bereich selten Verwendung findet. Eigentlich war der Loader für sehr kleine Programme gedacht um 1k Kompatibilität herzustellen, aber auch genau da ist der Pferdefuss. Diese Programme nutzen den Bereich meines Loaders für Daten und/oder Code und der ist dann nach dem Laden zerstört. Aber mit manchen Programmen gehts auch, wenn keine Schweinereien programmiert wurden. :mrgreen:

Darüberhinaus habe ich nach den Hinweisen von Zsolt die Pausen zwischen den Bits und zwischen den Pulsen reduziert. Also moderat, so dass es eigentlich mit jedem Zeddy noch laufen sollte und nicht nur mit den schnellsten. Im Grunde könnte man das zwar in das Power Basic integrieren (den Loader Code) nur macht das allein recht wenig Sinn, weil man ja auch die Programme entsprechend rüberschicken muss. Ein abgestimmter P-WAV Konverter könnte da zwar aushelfen, im Grund erstellt die IDE die WAVs ja auch selbst. Und zwar so, dass diese als Autoloading jeder Zeddy fressen kann ob mit oder ohne Power Basic. Wir reden hier wenn dann überhaupt über die 2,3 Sekunden, die der Fastloader braucht der sozusagen immer übertragen wird. Da aber sowieso immer wieder ein neues Programm übertragen wird (sagen wir mal durchschnittlich 3-4 kByte), dauert das Laden eben 6-7 Sekunden anstelle 3-4. Das halte ich jetzt nicht mehr für so relevant. Also die IDE erzeugt (auf Wunsch) automatisch die WAV Files.

Zum Code kann ich vielleicht noch ergänzen, dass in der Übertragung ein Parity Bit eingebaut ist nach jedem Byte welches auch geprüft wird. Für aufwendige Fehlermeldungen blieb leider kein Platz mehr, nach erfolgreichem Laden erscheint unten normal 0/0 auf dem Bildschirm und der Eingabecursor, bei eventuellen Parity Fehlern springt der Code in die Listing Funktion. Wenn also das Listing erscheint, ist irgendwas schief gelaufen mit der Übertragung.

Code: Alles auswählen

002B: [4034] 00 00                              FRAMES          dw $0000        ; counter of frames sent to TV, used by PAUSE command
002D: [4036] 16 01                                              LD D,1
002F: [4038] 21 08 40                                           LD HL,$4008
0032: [403B] 00                                 CDFLAG          db FAST_MODE    ; compute and display flag
                                        
                                                include         'ZX81FALD.INC'
                                        ; include file2 for ZX81FALD (Fastloader)
                                        ;
0033: [403C] 01 FE 7F                           LD      BC,$7FFE
                                        
0036: [403F] ED 58                      .WAITST: IN      E,(C)
0038: [4041] F2 3F 40                           JP      P,.WAITST
                                        
003B: [4044] AF                         .WAITRP: XOR     A
003C: [4045] ED 58                      .WAITF0: IN      E,(C)
003E: [4047] FA 45 40                           JP      M,.WAITF0
                                        .WAITF1:
0041: [404A] 3C                                 INC     A
0042: [404B] 28 28                              JR      Z,.LRET
0044: [404D] ED 58                              IN      E,(C)
0046: [404F] F2 4A 40                           JP      P,.WAITF1
                                        .WAITX:
0049: [4052] FE 08                              CP      8
004B: [4054] 3F                                 CCF
004C: [4055] CB 12                              RL      D
004E: [4057] 30 EB                              JR      NC,.WAITRP
0050: [4059] A0                                 AND     B
0051: [405A] 28 06                              JR      Z,.WAITFS
                                        
0053: [405C] 23                                 INC     HL
0054: [405D] 72                                 LD      (HL),D
                                        
0055: [405E] 04                                 INC     B
0056: [405F] 50                                 LD      D,B
0057: [4060] 18 E2                              JR      .WAITRP
                                        
                                        .WAITFS:
0059: [4062] 05                                 DEC     B
005A: [4063] AE                                 XOR     (HL)
005B: [4064] 7A                                 LD      A,D
005C: [4065] 16 01                              LD      D,1
005E: [4067] E2 6F 40                           JP      PO,@f
0061: [406A] BA                                 CP      D
0062: [406B] 28 D7                              JR      Z,.WAITRP
0064: [406D] 18 03                              JR      .LRETERR
0066: [406F] BA                         @@:     CP      D
0067: [4070] 20 D2                              JR      NZ,.WAITRP
                                        
                                        .LRETERR:
0069: [4072] C3 13 04                           JP      $0413
                                        .LRET:
006C: [4075] ED 79                              OUT     (C),A
006E: [4077] 01 00 00                           LD      BC,0
0071: [407A] C3 07 02                           JP      $0207
                                        
                                        
                                                                 db 16509-$ dup(0)
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 17.12.2012, 00:11

Die Entwicklung an und mit der IDE geht weiter.
Im Anhang eine aktualisierte Version der IDE.
Es wird in einem separaten Thread ein Tutorial zur IDE und ein bischen allgemein zu Assemblerprogrammierung geben, als Ergänzung von Ali's Thread aber mehr bezogen auf den Einsatz mit der IDE. Wird ein bischen an die Umsetzung gehen, Tipps und Tricks beinhalten.

Die IDE wurde auf eine neuere Version von flatassembler (FASM) umgestellt, die neue Optionen mit virtuellen "address spaces " ermöglicht.
Das ist die Grundlage für den sinnvollen Einsatz von Codeblöcken zur Verlinkung in BASIC Programme, z.B. die REM Zeile.
Das macht das noch etwas umständliche Konstrukt ZX81DEMO.ASM überflüssig und die Programmierung wird in der Umsetzung einfacher und besser lesbar bzw. kann auch besser strukturiert werden.
Die Codeblock Direktive ist aber noch nicht ganz fertig. Auf jeden Fall ist der ZX81 Loader in dieser Version auch wieder auf dem aktuellen Stand.

Das ZX81DEMO Programm wurde auch bearbeitet und auch die Include Dateien und ein bischen auf den Einsatz oder die Verwendung mit ZX80 vorbereitet.
Hier hat sich Paul angeboten die entsprechenden Strukturen anzulegen und auch mal live zu testen. Ich kann das mangels ZX80 leider nur auf dem Emulator.
Sobald das mit den Codeblocks hinhaut, werde ich auch die weiteren BASIC Statements integrieren.
Das ist bis dato noch nicht passiert, weil das wichtigste (bzw. meist verwendetste) Statement REM Codeblöcke zur Verlinkung braucht, wenn man keine Klimmzüge mit kryptischen db (databyte) Definitionen im Code haben möchte. Schön siehts halt nicht aus und daher störts mich und wird es keine Umsetzung von anderen BASIC Kommandos geben, bis das vernünftig funktioniert.

Also demnächst, hier in diesem Kino.
Neue Versionen wird es immer hier geben.
Änderungen auch, gab aber jetzt so gesehen keine funktionalen Neuheiten.

Hier findet Ihr den Thread, der etwas tiefer in die Programmierung oder Anwendung der IDE geht.
viewtopic.php?f=2&t=802
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 30.12.2012, 01:03

Anbei eine neue Version mit Behebung eines Bugs.
Die zuvor implementierten Kommandos PHASE und DEPHASE haben aufgrund interner Änderungen an den Address Space Strukturen nicht mehr funktioniert bzw. auf falsch berechnete Adressen gezeigt. Ist sozusagen ein kleiner Folgefehler bei der Implementierung der neuen FASM Version. Nun sind die Kommandos wieder so benutzbar wie gewohnt. :wink:

Version "1.71.01a.Z80"


Mehr zum Thema Address Spaces im Tutorial.
Zuletzt geändert von PokeMon am 25.01.2013, 18:42, insgesamt 1-mal geändert.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 16.01.2013, 23:50

So es ist Zeit für eine neue Version. Es sind einige interessante neue Features in der IDE dazugekommen. Hier die wichtigsten Informationen in Kürze, eine ausführliche Beschreibung erfolgt in den nächsten Tagen in dem Tutorial Thread.

Das wohl wichtigste Feature ist die Integration der BASIC Kommandos, namentlich erstmal "nur" REM und RAND sowie die Funktion USR. Hört sich recht unspektakulär an, hat es aber in sich und war recht arbeitsaufwändig. Es ist schon ein Unterschied, ob man nur eine Datenstruktur in sein Programm integriert und ggf. Startadressen von Hand oder mit dem Taschenrechner ausrechnet oder eben einfach nur BASIC Statements schreibt. Die Kunst war es dabei, den Parser so umzubauen, dass er sowohl die Assembler als auch die BASIC Befehle versteht und zwar so intuitiv wie man es gewohnt ist bei Assembler oder BASIC Programmierung. Es wäre einfach gewesen, stringente Anweisungen festzulegen wie so ein BASIC Befehl einzugeben ist. Die Syntax Anpassungen waren daher recht tricky.

Das war aber nicht die einzige Baustelle. Recht einfach war die Integration des Emulators EightyOne. Nun kann man auf Knopfdruck auch den Emulator mit dem assemblierten Programm aufrufen (F8). Leider ist es aufgrund der Uploadbeschränkung hier auf 1MB nicht möglich gewesen, den Emulator gleich in das Paket mit reinzupacken. Vielleicht kann t0m das bei Gelegenheit mal etwas raufsetzen (das ZIP wäre dann ca. 1,3 MB groß). Wer den Emulator EightyOne nutzen will, muss daher die 4,5 MB große EightyOne.EXE in das Verzeichnis FASMW-ZX noch reinkopieren. Das Unterverzeichnis ROM mit den ZX81 Rom Dateien hat noch ins Archiv gepasst. Wer weitere Optionen nutzen will, muss entweder die restlichen Dateien und Directories in das Verzeichnis FASMW-ZX reinkopieren oder das Verzeichnis FASMW-ZX mit seinem Include Order SINCL-ZX in das EightyOne Verzeichnis. Geschmacksfrage. Wer beides unbedingt getrennt haben möchte und einen Pfad zum Emulator pflegen will, möge bitte sich hier entsprechend äußern. Wäre prinzipiell machbar.
FASM_Screen1.jpg
FASM_Screen1.jpg (63.72 KiB) 7967 mal betrachtet
Damit haben wir auch bereits eine weitere Änderung, die IDE heißt jetzt offiziell FASMW-ZX anstatt FASMW-Z80. Z80 kann sie ja sowieso, jetzt dann auch das BASIC vom ZX81. Zumindest den Anfang, der Rest folgt in Kürze. Die Hauptarbeit war die Einführung entsprechender Strukturen intern vom Preprocessor zum Parser und vom Parser zum Assembler. Da Paul seine Hilfe zumindest angekündigt hat :wink: werde ich auch den ZX80 mit der IDE unterstützen. Und da ich seit neuestem auch Besitzer eines ZX Spectrum bin, wird sie sehr wahrscheinlich auch irgendwann den Speccy unterstützen. Daher der etwas allgemeinere Name FASMW-ZX für die Sinclair ZX Reihe. :D

Auch die Audio Schnittstelle (Transfer von WAV Files) wurde überarbeitet. An dieser Stelle gleich einen Hinweis, der mich etliche Stunden Arbeit bis zur Lösung gekostet hat: Wer ein Securitypaket mit Sandbox nutzt (z.B. bei mir COMODO) möge zwingend für das Programm die Sandbox ausschalten (zu vertrauenswürdigen Dateien hinzufügen) und ggf. kontrollieren. Bei mir hat die IDE dann nämlich vorhandene Audio Files (WAV) nicht mehr aktualisiert. Die geplante und durchgeführte Änderung war aber eigentlich eine ganz andere, der o.g. Umstand zeigte sich nur bei den Abschlusstests. Das Problem an der bisherigen Integration war, dass man die Übertragung nicht abbrechen konnte da sie im Hintergrund lief wenn man sie z.B. aus Versehen startete. Das andere Problem war, dass man das Ende der Übertragung nicht sehen konnte sondern nur erahnen. Durch das eingesteckte Audiokabel konnte man auch nichts mehr hören. Daher habe ich einen Audio Player integriert, der mit "Use Media Player" im Run Menü aktiviert werden kann. Dabei wird der Player verwendet, der für WAV unter Dateizuordnung eingetragen ist. Hier sollte man erstmal möglichst nur den Windows Media Player verwenden, da ich aus ungeklärten Gründen mit dem VLC Media Player keinen Erfolg bei der Übertragung hatte. Akustisch hört es sich gleich an, Lautstärke auch und sämtliche Optionen wurden abgeschaltet. Geht mit dem Player trotzdem nicht. Untersuchungen stehen noch aus. Aus Kompatiblitätsgründen habe ich daher den alten Übertragungsmechanismus dringelassen.
FASM_Screen2.jpg
FASM_Screen2.jpg (52.19 KiB) 7967 mal betrachtet
Das Beispielprogramm ZX81DEMO.ASM wurde auf die neuen BASIC Strukturen angepasst.

Neue Features hier nur ganz kurz, detailliert wird es im Tutorial erläutert.

;labelusenumeric
;labelusenumeric kann nun auch ohne ;labelautodetect verwendet werden, numerische labels werden dann automatisch erkannt
=> ;labelautodetect ist mit Vorsicht zu geniessen, da unbekannte Befehle als Symbole interpretiert und Schreibfehler daher nicht erkannt werden

format
format kann jetzt einfach als format zx81 eingegeben werden anstelle format binary. Dabei ist die Extension automatisch .p
Hier wird auch die Codetabelle gesteuert für Wandlung ASCII - ZX Tabelle und ist bereits vorbereitet für format zx80

AUTORUN
AUTORUN ist jetzt als Label konzipiert und wird einfach direkt vor der entsprechenden BASIC Zeile definiert. Wenn kein AUTORUN gewünscht ist, kann es einfach auskommentiert oder nach der letzten BASIC Zeile platziert werden.

Zeilennummern
Zeilennummern sind im Grunde obselet und sind aus Sicht der IDE nur numerische Labels. Die Durchnummerierung der Zeilen erfolgt in 10er Schritten, wer andere Schrittweiten will, kann die Direktive AUTOLINE <WERT> einfügen. Das kann auch mehrmals im Programm mit verschiedenen Werten erfolgen. Es ist auch eine Mischung möglich mit teilweise manueller Nummerierung von Zeilen oder um z.B. eine Zeile auf einen neuen Wert zu setzen. Mehr dazu im Tutorial.

REM
Das REM Statement kann von einem beliebigen Text oder Zahlen gefolgt werden, die werden in ZX Zeichensatz konvertiert. Eine Eingabe mit ZX Pseudobefehlen wie TAN, CHR, LEN usw. ist nicht vorgesehen und auch unsinnig. Dafür schreibt man ja Z80 Assembler Anweisungen.

Assembler-Blöcke
Um Assembler Blöcke zu definieren, wird REM einfach von _asm gefolgt. Danach kann beliebig in Z80 Assembler programmiert werden, ein solcher Block ist mit END _asm zu beenden bevor der nächste BASIC Befehl kommt. Es werden auch weitere Sonderdirektiven _noedit und _hide unterstützt, mehr dazu im Tutorial. Es wird später auch möglich sein, Assembler Blöcke in Variablen unterzubringen.

RAND
RAND wird derzeit nur benutzt um Assemblercode (vornehmlich aus REM Zeilen) zu starten in Verbindung mit USR. Nach RAND USR kann eine beliebige Zahl folgen oder ein Label. RAND USR 16514 ist recht bekannt. Es ist aber auch möglich RAND USR labelx zu verwenden und das entsprechende Label irgendwo im Assembler Code zu definieren. So kann man verschiedene Einsprungspunkte definieren. Anstelle von einer Zahl oder Label kann auch das # Zeichen vorangestellt werden. RAND USR #120 startet den Assemblercode aus Zeile 120 und berückschtigt dabei automatisch den Offset von 5, verweist also auf die Daten nach REM bzw. den Assemblercode. Die Schreibweise ist auch für Labels möglich, RAND USR #label2 startet den Assembler Code aus der Zeile mit dem Label label2 anstelle einer Zeilennummer.

So das sind die Neuigkeiten in erfrischender Kürze. Die Beispiele folgen in den nächsten Tagen im Tutorial. Have fun. :mrgreen:

Version 1.71.01b.Z80
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 25.01.2013, 18:44

Ab sofort ist die aktuelle Version der ZX-IDE im ersten Beitrag dieses Threads zu finden, der auch gleichzeitig das Manual (Handbuch) repräsentiert.
An dieser Stelle informiere ich künftig nur noch über Änderungen und Erweiterungen der ZX-IDE. 8)

ZX81-IDE in der Praxis, Tipps & Tricks (auch für ZX80)
Wer seinen Computer ehrt, lebt nicht verkehrt.

ali
User
Beiträge: 484
Registriert: 10.03.2011, 17:42

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von ali » 11.04.2013, 10:15

PokeMon hat geschrieben: An dieser Stelle informiere ich künftig nur noch über Änderungen und Erweiterungen der ZX-IDE.
Hallo PokeMon,

fuehrst du das in Mahlerts auch vor ? :-) Ne kurze Praesensation oder so ...

Wir sehen uns
Ali
--- Hier ist der Beitrag zu Ende ;-) ---
Erreichbar hier oder email an <ali at zx81 Punkt de>.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 11.04.2013, 22:11

Ja und ich werde vorher noch ein paar brandneue Features einbauen. :mrgreen:
Obwohl es wird immer knapper. :?
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 30.05.2013, 19:40

Ich habe heute eine neue Version der ZX-IDE hochgeladen (1.71.01c.Z80)
Die ZX-IDE kann jetzt auch ZX80 BASIC/Assembler Programme erstellen, implementiert wurden allerdings erst nur die folgenden Statements:
REM
RAND
sowie die Funktion USR
Näheres schreibe ich heute noch in dem Tutorial Thread.

Damit hat die IDE für ZX80 und ZX81 erstmal den gleichen Funktionsumfang.
Nächster Schritt ist die Implementierung weiterer bzw. aller BASIC Instruktionen für den ZX81.

Auch habe ich den Unterordner "Disks" für den EightyOne Emulator hinzugefügt, dadurch funktioniert dann jetzt auch das direkte Debuggen mit dem Emulator. :wink:
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 14.08.2013, 00:19

Ich habe heute eine neue Version der ZX-IDE hochgeladen (1.71.01d.Z80)
Es gibt ein paar Änderungen betreffend der Unterscheidung von Assembler und BASIC Kontext sowie eine Änderung des Kommentarzeichens ('//' statt ';').
Genauer beschrieben ist es in den Tutorials (habe ein paar dazugefügt).
Das BASIC Statement PRINT sowie alle mathematischen Funktionen werden ab jetzt unterstützt. :wink:
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 29.08.2013, 22:25

Heute gibt es wieder eine neue Version der ZX-IDE (1.71.01e.Z80 08/2013).
Leider musste ich nochmal was am Kontext zwischen Assembler und BASIC ändern, dafür kann man jetzt auch Assembler Labels als Zeilennummern verwenden (z.B. für GOTO). Genaueres schreibe ich gleich unter den Tutorials. Es sind zwar noch nicht alle aber einige neue Statements dazugekommen, habe mich im Handbuch bis Chapter 9 vorgearbeitet.

Wesentlicher Hintergrund für das Zwischenupdate ist das Programmierprogramm (besser gesagt Framework) für das EEPROM des ZX80. Falls da jemand was umprogrammieren möchte. Das Programm ist nicht fertig aber die Programmierroutinen sind nutzbar. Da die Programmierung nur im FAST Modus sauber erfolgt, werden die Befehle SLOW und FAST benötigt. Die sind eben in der aktuellen ZX-IDE präsent. Außerdem habe ich den beiliegenden EightyOne aktualisiert mit der ZXpand Unterstützung.

Folgende Statements werden derzeit unterstützt:

LET
NEW
REM
RUN
CONT
EDIT
FAST
GOTO
LIST
RAND
SLOW
CLEAR
INPUT
PAUSE
PRINT




Folgende Funktionen werden unterstützt:

ABS
ACS
ASN
ATN
COS
EXP
INT
LEN
RND
SGN
SIN
SQR
TAN
USR
VAL
STR$
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 26.11.2013, 22:37

So, eine neue Version der ZX-IDE ist da. 8)
Es handelt sich um die Grafik Version, die die grafischen und invertierten Zeichen des ZX81 unterstützt.
Sinnigerweise heißt die Version daher 1.71.01g.Z80 (11/2013). Eigentlich Zufall aber passend wie auch immer. :wink:

Um die Grafikzeichen sinnvollerweise zu unterstützen, musste ich mich zunächst in die Erstellung von TTF Fonts einarbeiten und habe auf Grundlage eines Monospaced Font (Consolas) einen Sinclair Font erstellt, der alle grafischen ZX81 Char enthält. Da hat zwar mal vor Jahren jemand einen ZX81.ttf Font kreiert, der ist aber für den Einsatz mit der ZX-IDE nicht ohne Weiteres nutzbar. Ich brauche einen Zeichensatz / Font der sowohl ASCII als auch Sinclair Sonderzeichen und die invertierten Zeichen unterstützt und dass mit insgesamt nicht mehr als 256 Zeichen. Sonst hätte ich den Quelltext nicht als Text Format speichern können sondern es wäre ein Multibyte Format wie Unicode oder ähnlich daraus geworden.

Der Grafikmode kann in jedem Editor Fenster der IDE separat ein- oder ausgeschaltet werden mit ALT+9 ähnlich wie SHIFT+9 beim ZX81. Im Grafikmode wird dann oben eine Toolbar eingeblendet, aus der man die Sonderzeichen direkt per Mausclick an die aktuelle Stelle des Quellcode einfügen kann. Das geht schnell, effektiv und intuitiv und man kann Zeichen oder Zeichgruppen auch mit CTRL-C und CTRL-V kopieren. CTRL-R wiederholt das letzte Zeichen. Wenn ein Quellcode mit einem Sonderzeichen geladen wird, schaltet sich der Grafikmode automatisch für dieses Fenster ein, kann bei Bedarf aber auch mit ALT+9 wieder ausgeschaltet werden.

Damit man die Sonderzeichen sieht, muss der im Hauptverzeichnis mitgelieferte Font Sinclair.ttf installiert werden. Das geht entweder durch Kopieren in das Windows/Fonts Verzeichnis oder durch Doppelklick und Klick auf Install im FontViewer.

Außerdem sind die Kapitel 10,11,12,13 des ZX81 BASIC Programmierhandbuchs vollständig implementiert mit den dort vorgestellten Tokens und Funktionen. Die wichtigsten sind das IF-THEN Konstrukt mit den Vergleichsoperatoren und die FOR-NEXT Schleife. Damit sind sicherlich mehr sinnvolle Mischprogramme mit BASIC und ASSEMBLER machbar. Ich hoffe daraus machen einige in den Wintermonaten auch mal Gebrauch und schauen sich die aktuelle ZX-IDE nochmals an. Es lohnt sich, kann ich versprechen da viele weitere Tools in Kürze dazukommen wie z.B. auch ein Maskeneditor.

Folgende Statements und Funktionen werden nun neu unterstützt:
IF-THEN
Vergleichsoperatoren und logische Operatoren wie <,>,=,<=,>=,<>,AND,OR,NOT
STOP
Funktionen CODE und CHR$
FOR-NEXT Schleifen mit TO und STEP
SLOW und FAST (werden bereits seit Version 1.71.01e.Z80 unterstützt aber wurden bislang nicht im Tutorial behandelt)

Die Realisierung von IF-THEN und die logischen Operatoren waren ebenfalls sehr aufwendig zu realisieren, weil sie Kontext gebunden interpretiert werden und sowohl mit Assembler als auch mit BASIC eingesetzt werden können. Umbenennen wäre einfacher gewesen, wollte ich aber aus Gründen der Kompatibilität zu beiden Systemen (Flatassembler und ZX BASIC) vermeiden. Ich hoffe die Arbeit hat sich gelohnt.

Die neue Version wird gleich noch in den Tutorial Thread der ZX-IDE aktualisiert (im ersten Beitrag) und in den nächsten Tagen auch die einzelnen Funktionen näher erläutert.
Ansonsten - viel Spaß mit der ZX-IDE. :D
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 02.12.2013, 22:07

So es gibt bereits wieder eine neue ZX-IDE Version, 1.71.01h.Z80 - jetzt mit vollständiger BASIC Unterstützung, also alle Statements.
Der Rest war eigentlich recht einfach ohne kompliziertere Programmierung.
Werde noch ein bischen was dazu in dem Tutorial schreiben.

Neu hinzugekommen ist:

SLOW & FAST (FAST is teigentlich schon seit Version 1.71.01e unterstützt)
GOSUB & RETURN
LOAD & SAVE
PRINT AT und PRINT TAB, CLS, SCROLL
PLOT & UNPLOT
PAUSE & INKEY$
LLIST, LPRINT & COPY
Substrings "ABCDEF" (2 TO 4)
DIM
PEEK & POKE

Als nächstes kommt dann eine Version mit ZX80 BASIC Unterstützung.
Danach werde ich den Fastload überarbeiten sowie SAVE implementieren.

Damit werden dann tolle Dinge möglich sein, wenn SAVE implementiert ist.
Die meisten werden wahrscheinlich denken, dass sie das nicht brauchen, weil sie eh nichts ändern.
Aber im Grunde handelt es sich um einen Rückkanal und damit sind Kommunikation zwischen WIN Anwendungen und ZX81 möglich (wenn man einen kleinen Client im Hintergrund lädt).

Von daher jetzt schon mal obacht. 8)
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 02.03.2014, 12:51

Heute gibt es eine neue Version der ZX-IDE, 1.71.01k.Z80 (02/2014) mit vollständiger BASIC Unterstützung des ZX80.
Also aktuell kann man damit programmieren:

Z80 allgemein
ZX80 BASIC+Assembler
ZX81 BASIC+Assembler

Ich muss mir mal die C Implementierung anschauen, vielleicht werde ich das (in etwas abgewandelter Form als das z88dk) integrieren.
Das wäre hilfreich für die Leute, die dem Assembler nicht so mächtig sind.
Es wird allerdings anders das z88dk keine komplette Anwendung erstellt sondern es wird dann möglich sein C-Funktionen zu programmieren und im BASIC und Assembler Kontext zu nutzen. So könnte das programmieren für den einen oder anderen (auch Einsteiger) insgesamt leichter von der Hand gehen.
Dürfte eigentlich nicht sooo schwer sein. Mache ich vermutlich noch vor der Überarbeitung der LOAD/SAVE Schnittstelle für schnellen Datentransfer.

Die neue Version ist wie üblich im ersten Beitrag des ZX-IDE Tutorials abrufbar:
viewtopic.php?f=2&t=802
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 18.10.2014, 00:06

Es gibt eine neue Version der ZX-IDE mit kleinen Bugfixes aber auch Neuerungen.
Die neue Version ist 1.71.01m (10/2014) und ist im bekannten Tutorial Thread "Tipps & Tricks..." abrufbar:
viewtopic.php?f=2&t=802

Die neue Version nutzt das PTOA von David G. aus dem sinclairzxworld Forum und erlaubt das direkte Öffnen von .p Dateien, also fertigen Programmen die in die Variablen, BASIC Statements und auch Assembleranteile zerlegt wird. Der Disassembler ist jedoch eingeschränkt und kann nicht wirklich mit gemischten Code und Daten gut umgehen und disassembliert eben im Zweifel auch Daten. Ich hoffe, dass das mit dem nächsten Releasestand gefixt ist. Dennoch ist das Feature PTOA aus meiner Sicht brauchbar um .p Dateien zu analysieren und ggf. zu verändern.

In diesem Zusammenhang gibt es zwei weitere neue Features, BASIC Variablen können recht einfach direkt im Source definiert werden und der Befehlssatz des Z80 wurde um die nicht dokumentierten Funktionen erweitert. Da diese beim Testen wohl doch in nicht wenigen Programmen vorkamen, habe ich mich entschlossen dieses Feature zu ergänzen. Läßt sich aber auch abschalten mit Z80STRICT als Statement oder Z80LOOSE um sie zuzulassen. Das kann man im Programmcode auch an beliebigen Stellen mehrfach nutzen.

Mehr werde ich in den nächsten Tagen in 2 oder 3 Kapiteln des Tutorial Threads ergänzen.
Die neue Version steht bereits ab sofort zur Verfügung.

Many thanks to David G, who did pack his PTOA (P to assembly) program into a DLL which is called from the ZX-IDE.

Es wird daher auch möglich sein, bei Änderungen oder Erweiterungen direkt die PTOA.dll im Hauptverzeichnis auszutauschen.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
Paul
User
Beiträge: 2385
Registriert: 10.03.2010, 12:01
Wohnort: Germanys west end

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von Paul » 18.10.2014, 07:05

Danke Karl!
Mit ihren vielen Möglichkeiten ist die IDE gerade dem gelegenheits assembler Programmierer wie mir ein tolles Werkzeug geworden. Viele Sachen die früher nur mit kommandozeilentools gingen sind so schön integriert das sie viel einfacher nutzbarer wurden und somit mein immer schlechter werdendes Gedächtnis entlasten.
Ich finde es ganz herausragend was du für uns leistest.
Das ist unbezahlbar.
Liebe Grüße
Paul
Theoretisch ist zwischen Theorie und Praxis kein Unterschied.
Praktisch allerdings wohl.

Benutzeravatar
msch
User
Beiträge: 3224
Registriert: 05.02.2013, 15:42
Wohnort: Hessen, Rhein-Main-Gebiet

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von msch » 18.10.2014, 09:15

Dem ist nichts hinzuzufügen. Ich finde, Karl sollte beim Teamtreffen einen Workshop zur IDE anbieten.
manche meinen lechts und rinks kann man nicht velwechsern.
werch ein illtum! (Lichtung, Ernst Jandl)

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 18.10.2014, 14:32

Paul hat geschrieben: Mit ihren vielen Möglichkeiten ist die IDE gerade dem gelegenheits assembler Programmierer wie mir ein tolles Werkzeug geworden. Viele Sachen die früher nur mit kommandozeilentools gingen sind so schön integriert das sie viel einfacher nutzbarer wurden und somit mein immer schlechter werdendes Gedächtnis entlasten.
Danke für Eure aufmunternden Worte.
Nichts freut einen mehr als die Erkenntnis (oder Bekenntnis) dass jemand ein selbst geschriebenes Programm benutzt oder nützlich findet.
Dann war die viele Arbeit eben nicht ganz für die Katz. :wink:

Ich habe übrigens noch Dein Vorschlag zur Taktzyklen Zählerei im Kopf und hätte das selbst mal brauchen können für meinen Videodriver aber das ist sehr aufwändig zu realisieren und am Ende braucht man doch irgendwie das Zilog Manual wenn man am Timing bastelt um eine Lücke mit speziell 5-9 Takten mit einem speziellen Befehl zu füllen, ohne das Programm zu beeinflussen. Ist übrigens m.E. auch die einzige Stelle wo man sowas brauchen kann. Daher habe ich nicht viel Hoffnung, dass ich dafür sehr viel Zeit investiere. Einfach zu speziell.

Mich persönlich hält es natürlich auch fit, sowohl in Z80 Assembler als auch in x86 Assembler da das FASM Framework komplett in Assembler geschrieben ist.
Sobald ich Zeit habe werde ich nochmal etwas effizienter mit dem Loader befassen.
Der FAST Load funktioniert nämlich leider nicht an meinem ZX80CORE, auch nicht mit ZX81 ROM.
Wobei die langsame Geschwindigkeit aber funktioniert. Aber eben langsam.
Für ein 1k Demoprogramm akzeptabel, für große Dateien braucht man allerdings viel Zeit.

Wenn die Videodriver und Keyboarddriver fertig sind, werde ich diese übrigens auch automatisch installieren lassen.
Denn nichts ist für die Verbreitung eines Programms förderlicher als Bequemlichkeit. :mrgreen:
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 24.10.2014, 20:31

Ich habe gerade nochmal die Software ZX-IDE mit Version 1.71.01n.Z80 aktualisiert.
Keine spektakulären Änderungen aber ein paar kleine Erweiterungen bei der Festlegung der ZX BASIC Variablen (VARS section).

Mit dieser Version ist es auch möglich Assembler Code oder binäre Daten (Blöcke) in Stringvariablen zu hinterlegen.
Das erlaubt ein paar interessante Optionen mit temporär benötigten Code oder Daten, die können dann recht einfach wieder entfernt werden mit LET A$="" oder CLEAR.

Mehr dazu in den Tutorials ... :wink:
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 26.10.2014, 15:20

So nochmal ein kleines Update für das P2A Feature hochgeladen, Version 1.71.01p.Z80 der ZX-IDE.
P2A ist eigentlich ein Feature zum Öffnen von .p oder .81 Dateien und Zerlegung in ein Quellprogramm, welches mit der ZX-IDE wieder kompiliert werden kann. Theoretisch jedenfalls.

Das Tool disassembliert auch Assemblerbereiche aber nur ganz rudimentär. Das kann auch oft schief gehen, da der Disassembler einfach knallhart alles als Code interpretiert was natürlich auch Daten sein können. Das Tool habe ich nur eingebunden als DLL und stammt von David G. aus dem sinclairzxworld Forum.

Ich würde das Feature daher mal ganz vorsichtig als "experimental" ankündigen oder ggf. auch als Preview, wie es mal funktionieren könnte oder sollte.
Wenn es fertig ist.
Meines Wissens nach wurde der Disassembler-Teil von David G auch nicht von ihm geschrieben. Das Hauptproblem ist, dass man keine Entry Punkte spezifizieren kann zumindest nicht mit der DLL die ich bekommen habe. Mit etwas Aufwand wird man da vielleicht was tricksen können. Einen eigenen Disassembler zu schreiben ist mir derzeit aber zu aufwändig.

Wenn jemand hier noch brauchbare Cross-Disassembler kennt, die auf x86, ggf. auch WIN Umgebung laufen, wäre ich für Hinweise dankbar.
Ich werde im Tutorial mal ein Dutzend Programme hochladen, die damit gelesen werden können, vorwiegend reines BASIC, einige wenige auch mit Assemblerteil.

Probleme mit fehlenden Einsprungspunkten waren mir zwar schon bewußt, dass aber nur sehr wenige Assembler Programme sauber durchlaufen war bei meinen heutige Tests dann auch ein bischen enttäuschend. Aber ich kann da jetzt nicht so viel Zeit investieren und hoffe, zu einem späteren Zeitpunkt ein besseres Tool integrieren zu können.

Ich werde es in dem Tutorial Thread nur rudimentär vorstellen mit dem Beispiel ZIP Archiv, wer es gern testen möchte.
Bitte den Tutorial Thread nicht mit Fragen und Rückmeldungen überfrachten sondern wenn möglich bitte in diesem Thread.

Vielen Dank für Euer Verständnis.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
bodo
User
Beiträge: 290
Registriert: 14.02.2007, 17:21
Kontaktdaten:

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von bodo » 26.10.2014, 19:22

Kennst du RESOURCE von den CP/M-Systemen? Das war ein Disassembler, der Maschinencode und Daten (halb-)automatisch erkennen konnte. Ich habe seine Benutzerschnittstelle als Beispiel für meinen tabellengesteuerten Disassembler (http://bodo4all.cwsurf.de/misc/disasm.html) benutzt; das automatische Erkennen ist auch dabei. Leider haben beide den Algorithmus nicht zu Ende gedacht, wie du merken wirst...
B0D0: Real programmers do it in hex.

Benutzeravatar
PokeMon
User
Beiträge: 4301
Registriert: 31.08.2011, 23:41

Re: ZX81-IDE SW-Entwicklungsumgebung

Beitrag von PokeMon » 26.10.2014, 19:38

Danke für den Hinweis, bodo.
Wenn es für CP/M ist, ist es aber sicher kein Crossassembler, lauffähig auf x86/WIN ?
Oder ist das irgendwie C Sourcecode ?
Na ich schaue es mir mal an.

Eigentlich ist es nicht so schwer einen Disassembler zu schreiben, nur wenn man von vorne anfängt (quasi bei Null) ist es schon recht aufwändig.
Im Grunde fängt man bei einer Startadresse an und folgt dann dem Programmfluss.
Jedes RET beendet den aktuellen Disassembler Pfad und jeder CALL, JP oder JR erzeugt einen neuen Pfad.
Und jeder USR Aufruf im BASIC erzeugt auch einen neuen Pfad.

Da die Größe beschränkt ist, würde ich einfach einen zusätzlichen 64kByte Buffer anlegen und jedes bereits assembelte Byte dort markieren und ggf. Zusatzinformationen da codieren. So wüßte man dann auch gleich, dass der Rest auf normalem Wege nicht erreichbar ist und als Daten zu interpretieren ist.

Jetzt disassembliert der ZX Lister nach einem RET, JP oder JR einfach auf der Folgeadresse munter weiter und das kann natürlich in die Hose gehen. Und das geht es nachweislich auch.
bodo hat geschrieben:Leider haben beide den Algorithmus nicht zu Ende gedacht, wie du merken wirst...
Wer ist beide ? Meinst Du Dich selbst auch damit ? :mrgreen:
Zuletzt geändert von PokeMon am 26.10.2014, 19:49, insgesamt 3-mal geändert.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Antworten