ZXmore

ZX-Team Forum
Henning
User
Beiträge: 89
Registriert: 02.05.2010, 11:04

Re: ZXmore

Beitrag von Henning » 16.01.2016, 15:06

Hallo PokeMon.

danke für die guten Vorschläge.
Ich hatte jetzt schon eine umfassendere Nachricht geschrieben, die ist aber trotz "Absenden" von mir nicht mehr sichtbar, deshalb nun eine Kurzfassung.

Ich habe Dir ein Programm 16736 Byte lang, reines Basicprogramm auf Stick gespeichert und hänge es dieser Nachricht an.
Erst nach Eingabe von POKE 16389,255 NEW NEWLINE war es von Stick mit PRINT USR 8192,"LEXW.P" ladbar. es ist offensichtlich ganz geladen. Es enthält den Datensatz "Getreide", deshalb nicht mit RUN, sondern mit GOTO 300 starten.

Sollte der ZXmore auch von Diskette laden können, könnte ich Dir, wenn Du mir Deine Privatadresse mitteilst auch weitere Programme grösser 16KB schicken, welche ich nicht auf Stick gespeichert kriege.

Zum ZX-TEAM- Treffen werdem wir das Ganze vertiefen.

Gruss

Henning
Dateianhänge
EXW.P
EXW.P Datei
(16.33 KiB) 98-mal heruntergeladen

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

Re: ZXmore

Beitrag von PokeMon » 17.01.2016, 17:09

Hallo Henning,

die Datei konnte ich einwandfrei laden. Ich hatte auch keinen Aussreisser. Also vermutlich sinnvolle Werte eingegeben. :mrgreen:
Im Prinzip war das Laden überhaupt kein Problem, das POKE 16389 kann man sich sparen, das kann der ZXmore in der nächsten Version selbständig (konfigurierbar).
Was Nachladen betrifft - da gibt es ja meines Wissens nach bei Sinclair keine direkte Möglichkeit, zumindest ist mir nichts bekannt.
Das müsste man dann ggf. adaptieren. Aber das >16k Programm kann ich einwandfrei laden und starten und im Gegensatz zur Kassette und vermutlich auch Diskette geht es im Bruchteil einer Sekunde (geschätzt vielleicht 200-300 Millisekunden). 8)

Viele Grüße und weiteres Testen dann gerne in Mahlerts,

Karl
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: ZXmore

Beitrag von PokeMon » 17.01.2016, 17:49

So heute und gestern habe ich meinen Testtag gehabt und ein paar aufgelaufene Dinge getestet.
Zunächst konnte ich ASZMIC erfolgreich starten mit 3.25 MHz und zurückgesetztem I Register im Start Treiber (und Startadresse 0).
Das war noch recht easy.

Dann habe ich mich einen ganzen Tag mit dem Husband Forth rumgeschlagen (H4TH.ROM) und um es vorwegzunehmen:
Es läuft weder mit dem ZX80CORE noch mit dem ZXmore. Das Programm ist einfach zu speziell wobei einige Stolpersteine aufgetaucht sind.

Zunächst muss man mal festhalten, dass sich der Emulator EightyOne definitiv anders verhält als ein ZX81 - insbesondere was die Spiegelung von Adressen betrifft. Wenn man sich den kompletten Speicherbereich mit SAVE Memoryblock speichert und in einem Hex Editor ansieht, dann werden nicht aktive Speicherbereiche mit hex 07 gekennzeichnet. Das halte ich nicht für so sinnvoll, weil es definitiv nicht das ist, was die Anwendung sieht. Die sieht halt gespiegelt Adressbereiche und wenn man sich den kompletten Adressbereich in einer Datei speichert, macht es eher Sinn die gespiegelten Adressbereiche in die Datei zu schreiben.

Weiterhin spiegelt der Emulator bei 16k RAM das RAM dreimal ($4000-$7FFF, $8000-$BFFF,$C000-$FFFF) und nicht wie der ZX81, der in der Mitte ($8000-$BFFF) nochmal das ROM spiegelt. Das ist definitiv ein Unterschied und je nach Programm auch keine Lappalie. Weiterhin spiegelt der Emulator bei 32k RAM den Adressbereich $C000-$FFFF auf $8000-$BFFFF was ich ebenfalls ungewöhnlich finde. Eigentlich müsste er $C000-$FFFF in diesem Fall auf $4000-$7FFF spiegeln.

Insbesondere das H4TH verhält sich dadurch ganz anders auf dem ZXmore als auf dem parallel installierten EightyOne wo ich naturgemäß viel besser Debugger kann. Vorausgesetzt man hat diese Eigenheiten bei der Spiegelung erstmal rausgefunden. Das H4TH hat dann noch die komische Angewohnheit den Speicher "von oben" zu adressieren und darauf zu vertrauen, dass bei weniger Speicher nach unten durchgespiegelt wird. Das hat etliche Konsequenzen.

Um eine lange Geschichte kurz zu machen, man bekäme es sogar mit einigen Klimmzügen zum Laufen - zum Schluss hatte ich tatsächlich den Cursor und die Eingabezeile auf dem Bildschirm. Allerdings zeigt er auch nur den Cursor (resp. man sieht wo invertierte Character sind) und keinen Text, die Begrüßungsmeldung erscheint weiß auf weißem Grund. Der Grund hierfür sind eigens geschrieben Bildschirmtreiber, die auf den Abschluss einer Bildzeile mit HALT/Newline verzichtet und den Interrupt am Ende der Zeile durch Ablauf des R Registers ohne HALT erzeugt. Ich habe irgendwo gelesen, dass man 34 oder 36 Zeichen pro Zeile nutzen kann, finde es aktuell aber nicht mehr.

Dieser Videotreiber macht hier die größten Probleme aus, weil der row counter (also die jeweilige Zeile pro Char, 1-8) in meinem ZXmore aus technischen Gründen mit einem HALT weitergezählt wird und mit einem INT ACK der Zählerstand übernommen wird. Das habe ich damals gemacht, weil so recht elegant sowohl für FAST als auch für SLOW Mode der Zähler zum Anfang stimmt. Die Zeilenanzahl ist leicht unterschiedlich meine ich im Kopf zu haben, 312 vs. 313 Zeilen. Wie auch immer, ein entsprechender Treiber/Programm ohne HALT ist mir bis dato nicht unter die Nase gekommen außer HRG die aber ganz anders angezeigt werden. So bleibt denn der Rowcounter immer auf Zeile 0 stehen, während der Bildausgabe was de facto dann aussieht wie lauter Leerzeichen. Einzig invertierte Zeichen werden schwarz angezeigt - in dem Fall der Cursor.

Das ist dann übrigens auch der Grund, warum das Husband Forth nicht auf dem ZX80CORE läuft. Dieser ist ja ein ZX81 kompatibler ZX80 - also mit NMI Generator. Hier mischt der NMI Generator die selbst erzeugten horizontalen Syncs mit dem Syncs während der Bildausgabe die der ZX80 ja selbst erzeugt über 2 Flipflops und dafür auch das HALT Signal braucht (am Ende der Zeile). Daher haut beim ZX80CORE das Timing mit dem Husband Forth überhaupt nicht hin. Der ZX80CORE verhält sich ein bisschen anders als eine echte ZX81 ULA, die sozusagen den Horizontalzähler immer laufen hat und diesen nur mit dem SYNC NMI auf 0 zurücksetzt zum richtigen Zeitpunkt.
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: ZXmore

Beitrag von PokeMon » 17.01.2016, 18:21

Nun zum Abschluss noch etwas Erfreuliches. Ich habe heute auch das erste Mal den ZX Spectrum auf dem ZXmore gestartet und er bringt zumindest schon mal den Startscreen. Es fehlt zwar noch der Bildschirmtreiber für die Anzeige aber über den Debug Monitor kann man sich die Speicherbereiche auf dem ZXmore in der entsprechenden Instanz schön anschauen.

Allerdings sind zwei Aspekte zu berücksichtigen. Zum Einen benutzt der ZX Spectrum den Port 0xFE um dort mit der ULA zu kommunizieren um z.B. den Border zu setzen. Auf dem ZXmore schaltet ein OUT auf diesem Port den NMI Generator ein und setzt diesen auf den Standardwert von 64us (eine Bildzeile) zurück. Im Betrieb erzeugt dies sicherlich Bildstörungen. Ich kann zwar über das CPLD bislang das Abschalten des NMI über Software verhindern, dachte aber nicht, dass ich auch das Einschalten für das ZX Spectrum Image verhindern muss. Konnte ich durch eine aktualisierte CPLD Version aber leicht nachrüsten und kostet auch keine zusätzliche Makrozelle. Noch immer 14 Stück frei für Erweiterungen. Naja - da haben wir dann mal wieder eine Hardwareänderung. Ich muss sagen das CPLD hat sich hier schon etliche Male bezahlt gemacht im Vergleich zu klassisch festverdrahteter Logik mit TTL Standardbausteinen.

Nun kann der ZXmaster falls notwendig einen Lockingmechanismus für den NMI Generator einschalten. :wink:

Der zweite nicht ganz unerhebliche Punkt ist die Implementierung von (nicht maskierbarem) Interrupt. Beim ZX80/ZX81 ist dieser ja mit der Bildausgabe direkt verknüpft und A6 ist ja dort mit dem INT Eingang verbunden und sorgt dafür, dass immer dann ein Interrupt ausgelöst wird wenn der Refresh Counter (R Register) das Bit 6 auf 0 setzt also im Zweifel und ohne Kontrolle durch ein Programm also alle 64 Befehle. Da hier die Tastaturabfrage mit eingebunden wird über die Interrupt Routine und hier mehr als 64 Befehle ausgeführt werden ist das dann eine Art Dauerschleife.

Dieser Punkt lässt sich aber hardwareseitig lösen mit dem späteren externen Zusatzfarb- und soundmodul, da der Interrupt Eingang wohlweislich über einen Widerstand (1k) an A6 angebunden wurde und hier extern übersteuert werden kann. Es gibt aber auch einen softwareseitigen Workaround in dem die Interrupt Routine einfach am Anfang gepatcht wird mit der Befehlsfolge DI, RET was sozusagen Interrupts ausschaltet und sofort zur Anwendung zurückkehrt. Das hat den erfreulichen Nebeneffekt, dass man nur eine Stelle patchen muss und dass es auch mit Programmen funktioniert, die Interrupts temporär ab- und ggf. auch wieder einschalten. Es wird halt im Zweifel nur einmal ein extrem kurzer Interrupt ausgeführt.

In der Interrupt Routine wird normal einmal pro Frame / 50x pro Sekunde der Framecounter aktualisiert und die Tastatur abgefragt. Das kann ich eigentlich recht gut mit dem ZXmaster handeln, der ja sowieso die Bildausgabe steuert und danach das Anwendungsprogramm weiter ausführt. Hier muss man nur den Stack etwas manipulieren und dann springt er nach der Tastaturabfrage zurück in die Anwendung. Soweit ich das sehen kann, ist dieser monochrome Videomode so machbar wie ich mir das ursprünglich vorgestellt hatte.

Ich habe gesehen, dass es möglicherweise Programme gibt, die eine sehr exakte Ausführung des Interrupts benötigen um hier gezielt für Farbwiedergabe bestimmte Attribute zu setzen - das wird dann mit der monochromen Version vermutlich nicht so ideal funktionieren, macht aber mangels Farbe vielleicht auch nicht allzuviel Sinn. Bei dem externen Farbe/Soundmodul kann man dann ja den Interrupt entsprechend zum richtigen Zeitpunkt bedienen.

So - das war es für heute von der Entwicklungsfront. Aktuell arbeite ich wieder an der SAVE Schnittstelle (Speichern auf USB) und sobald die gefixt ist muss ich die neuen Funktionalitäten dann noch im Laufe der nächsten Woche in eine neues Release "giessen". :wink:
Wer seinen Computer ehrt, lebt nicht verkehrt.

Henning
User
Beiträge: 89
Registriert: 02.05.2010, 11:04

Re: ZXmore

Beitrag von Henning » 17.01.2016, 20:46

Hallo PokeMon,

ja, das hört sich ja sehr gut an, dann können wir ja zum ZX-Treffen auch mal KC85/4 Programme gespeichert auf Stick versuchen einzuladen, die gibts als : Name.KCC, Name.com (PC-System), Name.SSS (Basicprogramme) und Name.UUU (Basicodeprogramme).

Besten Dank für die Info.

Noch einen schönen Sonntag und eine gute nächste Woche wünscht

Henning.

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

Re: ZXmore

Beitrag von PokeMon » 17.01.2016, 23:04

Einladen kann er die sicherlich - die Frage ist ob ein ZX81 was damit anfangen kann. Oder CP/M ?
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 2533
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: ZXmore

Beitrag von siggi » 18.01.2016, 09:00

PokeMon hat geschrieben: Was Nachladen betrifft - da gibt es ja meines Wissens nach bei Sinclair keine direkte Möglichkeit, zumindest ist mir nichts bekannt.
Da solltest Du nochmal ins Sinclair-Basic-Handbuch gucken :wink:
Natürlich kann ein BASIC-Programm ein LOAD-Kommando enthalten und lädt dann ein anderes Programm nach. Das wird von einigen Spielen benutzt, kann aber auch bei ZeddyNet sinnvoll sein: man kann zum BASIC-Teil von IPCONFIG noch ein LOAD "IRC" hinzufügen. Nachdem IPCONFIG die Hardware initialisiert hat wird automatisch das IRC-Programm nachgeladen. Und wenn das AUTOSTART ist, kann man sofort losbabbeln.

Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Datenkraken bitte nicht füttern!

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

Re: ZXmore

Beitrag von PokeMon » 18.01.2016, 18:43

Ja da muss ich wohl nochmal ins Handbuch schauen. :mrgreen:
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: ZXmore

Beitrag von PokeMon » 18.01.2016, 19:06

Mal eine ganz andere Frage.
Es haben ja schon einige auf Version 1.7 upgedatet.
Hat irgendjemand hier so ein Problem mit dem ZXmore mit dem Startbildschirm wie hier auf dem Link/Foto mit vertikalen dünnen Linien zwischen bestimmten Buchstaben (hauptsächlich Kleinbuchstaben, komischerweise nicht bei Leerzeichen und Ziffern und einigen Sonderzeichen) ?
Bild

Hier der Link zum Bild falls es nicht angezeigt wird:
http://sinclairzxworld.com/download/file.php?id=2751
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
tokabln
User
Beiträge: 1623
Registriert: 10.11.2013, 00:24
Wohnort: D, Berlin (Mariendorf)

Re: ZXmore

Beitrag von tokabln » 18.01.2016, 19:09

Kann ich leider nicht testen, mein CPLD ist auf dem Weg zu Dir :mrgreen:
Lieben Gruß Torsten
BFZ MFA, ZX80Core, AX81, ZX81, ZX81NU, Spectrum+, Harlequin, VG8010, Amstrad NC100, Cambridge Z88, C64, C128D, Amiga 500 & 1200, Atari Portfolio, HP200LX, IBM PC5155, TP755c, T41, PS/2 (Model 40SX), PS/2E, Accura 101, Apple //e

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

Re: ZXmore

Beitrag von PokeMon » 18.01.2016, 19:11

Naja - wenn Du das Update auf V1.7 gemacht hast (dazu braucht man nicht zwingend das CPLD) weißt Du ja vielleicht ob Dein Startbildschirm so aussah.
Ich denke die Striche zwischen den Buchstaben wären Dir aufgefallen - oder meinst Du nicht ? :wink:
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
tokabln
User
Beiträge: 1623
Registriert: 10.11.2013, 00:24
Wohnort: D, Berlin (Mariendorf)

Re: ZXmore

Beitrag von tokabln » 18.01.2016, 19:13

Da hast Du recht... und meine Erinnerung ist der Meinung das da keine Striche waren... :mrgreen:
Lieben Gruß Torsten
BFZ MFA, ZX80Core, AX81, ZX81, ZX81NU, Spectrum+, Harlequin, VG8010, Amstrad NC100, Cambridge Z88, C64, C128D, Amiga 500 & 1200, Atari Portfolio, HP200LX, IBM PC5155, TP755c, T41, PS/2 (Model 40SX), PS/2E, Accura 101, Apple //e

Benutzeravatar
Joachim
User
Beiträge: 1193
Registriert: 06.11.2004, 20:21

Re: ZXmore

Beitrag von Joachim » 18.01.2016, 19:37

Hallo Karl,
bei mir sind in der V.1.7. die Striche nicht.
Viele Grüße!
Joachim
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
siggi
User
Beiträge: 2533
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: ZXmore

Beitrag von siggi » 18.01.2016, 19:44

Habe mit 2 LED-Monitoren und einem alten CRT Fernseher probiert: ich sehe vieles, aber keine grauen Streifen ;-)

Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Datenkraken bitte nicht füttern!

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

Re: ZXmore

Beitrag von PokeMon » 18.01.2016, 20:00

Gut, prima. Bei mir ist ja auch nichts feststellbar, weder an meinem hochauflösenden SONY Broadcastmonitor noch auf meinem 42 Zoll Plasma Fernseher. Irgendwie haben zwei aus dem Sinclairzxworld Forum damit ein Problem. Ich vermute aktuell vielleicht einen Bestückungsfehler, ist noch in Klärung. Beruhigend wenn ich nicht der einzige bin, beim dem keine Striche sind. :wink:
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 2533
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: ZXmore

Beitrag von siggi » 18.01.2016, 20:23

Kann das ein 60 Hz-Problem sein?
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Datenkraken bitte nicht füttern!

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

Re: ZXmore

Beitrag von msch » 18.01.2016, 20:51

Genau. Tritt das bei einem NTSC-Monitor auf?
manche meinen lechts und rinks kann man nicht velwechsern.
werch ein illtum! (lichtung, Ernst Jandl)

Benutzeravatar
ZX-Heinz
User
Beiträge: 1778
Registriert: 05.12.2011, 14:45

Re: ZXmore

Beitrag von ZX-Heinz » 18.01.2016, 21:16

PokeMon hat geschrieben: Dann habe ich mich einen ganzen Tag mit dem Husband Forth rumgeschlagen (H4TH.ROM)
Ich habe irgendwo gelesen, dass man 34 oder 36 Zeichen pro Zeile nutzen kann, finde es aktuell aber nicht mehr.
Das ist mir neu. Der Screen-Editor hat in meiner Erinnerung 32 Zeichen/Zeile. Im H4TH-Manual habe ich auch nichts dazu gefunden. Aber ich hole morgen meinen H4TH-Zeddy aus dem Keller und probiere nochmals.
Gruß, Heinz

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

Re: ZXmore

Beitrag von PokeMon » 18.01.2016, 23:24

Kann auch sein, dass ich das verwechselt habe mit dem ASZMIC ROM.
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: ZXmore

Beitrag von PokeMon » 18.01.2016, 23:34

msch hat geschrieben:Genau. Tritt das bei einem NTSC-Monitor auf?
Nein. Erstens läuft NTSC nicht in Version 1.7 (aber in Version 1.8) - wurde ja bereits von einem ZXmore User reklamiert.
Zweitens gibt es da auch nicht wirklich einen Zusammenhang da bei NTSC nur die Zeilenzahl anders ist und die vertikale Wiederholfrequenz - die Zeilenlänge ist gleich mit 64us.
Wer seinen Computer ehrt, lebt nicht verkehrt.

wizzer
User
Beiträge: 40
Registriert: 15.08.2015, 18:19

Re: ZXmore

Beitrag von wizzer » 19.01.2016, 10:14

Bei mir treten auch keine Streifen zwischen den Buchstaben auf. Hab den ZXMore bislang an einem Composite-Eingang vom TV, einen Composite LCD-Display und über einen Ligawo Composite auf VGA-Adapter laufen gehabt. Alles kein Problem….
PokeMon hat geschrieben:Dieser Punkt lässt sich aber hardwareseitig lösen mit dem späteren externen Zusatzfarb- und soundmodul, da der Interrupt Eingang wohlweislich über einen Widerstand (1k) an A6 angebunden wurde und hier extern übersteuert werden kann.
Da muss ich mal nachfragen: Es soll noch ein Farb- & Soundmodul geben? Was hat es damit auf sich?

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

Re: ZXmore

Beitrag von PokeMon » 19.01.2016, 20:31

Naja - ZX Spectrum funktioniert auf dem ZXmore mit Einschränkungen, eine recht harte ist der monochrome Mode (also keine Farbe), es gibt aber auch Unterschiede im Timing weil der ZX Spectrum a) mit 3.5 statt 3.25 MHz läuft und weil der ZXmore noch die Bildausgabe softwareseitig macht. Hier kann man mit doppelter Frequenz etwas rausholen ist aber immer noch vom Original entfernt, erzielbare Geschwindigkeit liegt vielleicht bei 65% rein gefühlsmässig. Man kann dann auf der anderen Seite dieses Farbmodul dann mit etwas Feintuning sicher auch für den ZX81 verwenden und hier vielleicht die CHROMA Farbausgabe unterstützen. Vor Sommer wird das aber sicher nichts. :wink:
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 2533
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: ZXmore

Beitrag von siggi » 19.01.2016, 21:40

PokeMon hat geschrieben:Naja - ZX Spectrum funktioniert auf dem ZXmore mit Einschränkungen, eine recht harte ist der monochrome Mode (also keine Farbe)
Apro Popo ;-)
wie sieht es denn mit dem SponzyRom aus (das kann ja schon bichrom (schwarz und weiß sind ja 2 "Farben"))? Randbedingungen sind: Start ab Adresse 0, 16K Rom, möglichst viel RAM.
In welcher Instanz bei V1.7 könnte man das am besten installieren?
Oder muß man da umkonfigurieren und das kriegen wir später?

Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Datenkraken bitte nicht füttern!

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

Re: ZXmore

Beitrag von PokeMon » 19.01.2016, 23:02

Ich habe keine Ahnung davon, probiere es doch einfach mal.
Du hast ja 48k RAM ab $4000 in Instanz 3 und 4 und 16k ROM.
Über den Flash Loader kannst Du das ja programmieren - achne, das ROM wird ja nicht mit Adresse 0 gestartet.
Also warten auf nächste Version. :wink:
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: ZXmore

Beitrag von PokeMon » 02.02.2016, 19:32

siggi hat geschrieben: Hallo Karl,
die Frage nach der Dokumentation ist fast unlösbar :mrgreen: , denn der Treiber ist über viele Jahre historisch gewachsen und ausgebaut worden. Und das sieht man auch dem Code an :lol:
Es gab dann meistens nur Änderungsinfos ...
Hallo siggi,
komme jetzt mal bei der Implementierung darauf zurück.
Teilweise komme ich klar, es gibt aber auch noch Fragen zum Code.

siggi hat geschrieben: Der Treiber hat am Anfang eine "Sprungtabelle": Einsprung z. 8192,8195,8198
Je nach Einsprung verhält er sich anders: mal kehrt der Treiber mit "RET" zum aufrufenden MC-Programm (z. B. UFM) zurück, mal durch "RST 08; FF" ohne Fehler ins aufrufende BASIC-Programm zurück.

Edit: Nachtrag zu Einsprungadressen:
8192: für Aufruf im Kommandomodus, Fehlermeldungen in Klartext
8195: für Aufruf aus BASIC-Programm, keine Klartext-Fehlermeldungen, Errorcode in Systemvariablen
8198: für Aufruf aus MC (C), keine Klartext-Fehlermeldungen, Errorcode in Systemvariablen
Wird der Treiber auf anderen Adressen assembliert, gilt das entsprechend.
Im Kontext mit UFM ist erster Einsprung durch JUMP zu UFM ersetzt. Bei 8201 liegt dann der urspüngliche Einsprung.
Ich implementiere im Moment mal nur die erste Variante, Aufruf im Kommandomodus.
Was heißt "Fehlermeldungen im Klartext" ?
Wie werden die ausgegeben ? Direkt in den Bildschirm geschrieben ?
Ich habe versucht mich in den Code reinzudenken und habe auch ein Display File gesehen mit den Hilfeinformationen - aber bis ich ihn komplett verstehe dauert sicher zu lange, ist vermutlich auch derzeit nicht notwendig.

Mein ursprünglicher Gedanke mit 9 Bytes (je 3 für die Einsprungadressen) funktioniert leider nicht, da hier ROM Funktionen benutzt werden (die der ZXmaster nicht hat, z.B. den Parser). Im Moment komme ich jedoch mit 32 Byte aus bis ich das Kommando im Klartext lesen kann.

Unklar ist mir auch noch, wie der Rücksprung nach dem Laden ins BASIC erfolgt. Ich habe hier meine eigene Methode, interessieren würde es mich dennoch.

siggi hat geschrieben: Edit: Und noch ein Nachtrag zur Parameterübergabe:
Von BASIC aus sieht das z. B. so aus: PRINT USR 8192,"S BASIC.ROM 0 8192"
Statt des konstanten Strings kann man auch einen variablen Stringausdruck übergeben:
PRINT USR 8192, "S "+N$+".P"+chr$(11)
Der String muß unbedingt mit einem '"' enden, also muß der angehängt werden, wenn man mit Variablen arbeitet (unschön, aber so isses halt).
Bei Aufruf aus MC wird der Kommandostring im Druckerpuffer erwartet (auch mit '"' abgeschlossen).
Da die Länge des Strings verfügbar ist, braucht es das unschöne Abschluss '"' eigentlich nicht. Siehe unten.

Code: Alles auswählen

RST $20         E7
CALL $0F55     CD550F
LD A,($4001)   3A0140
ADD A,A        87
JP M,$0D9A     FA9A0D
POP HL         E1
RET NC         D0
PUSH HL        E5
CALL $02E7     CDE702
CALL $13F8     CDF813
LD H,D         62
LD L,E         6B
RET            C9
Hier sind einige Unklarheiten.
RST $20 und CALL $0F55 sind noch klar, hier wird einfach der ZX81 BASIC Parser aufgerufen und den gewünschten (ggf. zusammengebauten) String erzeugen. Anschließend die Prüfung auf einen Parser Fehler ist auch noch klar. Unklar ist das RET NC (wozu ?) und das nachfolgende Aktivieren des FAST Mode vor dem Aufruf des STKFETCH. DE nach dem STKFETCH enthält die Startadresse des String und BC die Länge des ermittelten Strings. Wenn Du das BC Register an der Stelle in den Code einbeziehst, könntest Du auf das Abschluss '"' verzichten. Diese nützliche Information wurde hier im Code unterschlagen. :wink:

siggi hat geschrieben: Ein Fehler wird wie in C durch "ERRNO" gemeldet (<>0 = FEHLER). Dazu wird die Systemvariable SEED (16434) mißbraucht.
Die Länge eines geladenen Files wird in COORDS (16438/9) abgelegt.

Zahlen (Adressen, Längen) sind dezimal mit variabler Länge (waren anfänglich mal 4-stellig und HEX).

Das DIR-Kommando "D" schreibt den Bildschirm zeilenweise mit Dateinamen im aktuellen Directory voll. Wenn der nicht reicht
wird "<CR>" in die letzte Zeile geschrieben und auf die Enter-Taste gewartet. Dann wird Bildschirm gelöscht und weitergeschrieben. Mit "A" (oder "6") kann man die Dir-Ausgabe da aber auch abbrechen.
Das ist wieder unklar. Wenn ein Fehler im Klartext ausgegeben werden soll, ist die Variable sicher nicht nötig, oder ?
Wahrscheinlich nur für die MC Version ?
DIR gibt es derzeit noch nicht, das bleibt einer Folgeversion vorbehalten.

Viele Grüße,

Karl
Wer seinen Computer ehrt, lebt nicht verkehrt.

Antworten