ZXmore Fragen und Antworten

ZX-Team Forum
Benutzeravatar
PokeMon
User
Beiträge: 3996
Registriert: 31.08.2011, 23:41

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 11.08.2016, 02:07

Also das mit der Tastatur ist wohl ein Problem mit dem eigenen Tastaturtreiber des Z88dk.
Die Tasten mit Doppelstift werden aus dem ZX81 Buffer gelöscht resp. der Debounce Wert wird immer auf $FF gesetzt so dass die Taste im Grund immer zu kurz gedrückt scheint (für das BASIC). Das kann ich so für den Z88dk wahrscheinlich nicht lösen - zumindest fällt mir da spontan nichts ein. Der z88dk ist vermutlich nicht Multitasking-fähig. :mrgreen:

Das Problem ist hier, der Task (und damit der z88dk Tastaturtreiber) bekommt hier Rechenzeit und kann natürlich den Keyboard Port abfragen und mitschneiden, was Du da eingibst. Wenn Du den Standard Tastaturtreiber nimmst (Key Repeat funktioniert ja auf dem ZXmore), dann ist das Problem behoben.

Wegen dem Display muss ich nochmal schauen. Ich mache aber nichts anderes, als den Inhalt des DFILE's anzuzeigen (durch eine eigene Routine im ZXmaster). Eine andere Ursache könnte eventuell ein abweichendes Index Register sein, da bin ich mir nicht 100%ig sicher. Verwendest Du eventuell einen anderen Zeichensatz ?
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 11.08.2016, 11:24

PokeMon hat geschrieben:Also das mit der Tastatur ist wohl ein Problem mit dem eigenen Tastaturtreiber des Z88dk.
Die Tasten mit Doppelstift werden aus dem ZX81 Buffer gelöscht resp. der Debounce Wert wird immer auf $FF gesetzt so dass die Taste im Grund immer zu kurz gedrückt scheint (für das BASIC). Das kann ich so für den Z88dk wahrscheinlich nicht lösen - zumindest fällt mir da spontan nichts ein. Der z88dk ist vermutlich nicht Multitasking-fähig. :mrgreen:

Das Problem ist hier, der Task (und damit der z88dk Tastaturtreiber) bekommt hier Rechenzeit und kann natürlich den Keyboard Port abfragen und mitschneiden, was Du da eingibst.
Das Problem besteht dann ja wohl bei jedem Programm, das direkt die Tastatur liest. Hast Du schon mal Spiele in M/C (z. B. Monster Maze, Flugsimulator) probiert, ob die korrekt laufen? Oder BASIC-Programme, die mit INKEY$ arbeiten?
Wenn Du den Standard Tastaturtreiber nimmst (Key Repeat funktioniert ja auf dem ZXmore), dann ist das Problem behoben.
Das wäre dann aber eine spezielle ZxMore-Programmversion, denn Key Repeat gibt's ja nicht auf Standard-Zeddy. Du kannst den IRC-Source ja anpassen, wenn Du auf dem ZxMore im Hintergrund chatten willst :wink:
Wegen dem Display muss ich nochmal schauen. Ich mache aber nichts anderes, als den Inhalt des DFILE's anzuzeigen (durch eine eigene Routine im ZXmaster). Eine andere Ursache könnte eventuell ein abweichendes Index Register sein, da bin ich mir nicht 100%ig sicher. Verwendest Du eventuell einen anderen Zeichensatz ?
Der Z88DK verwendet normales DFILE (*) und normalen Zeichensatz (I-Register). IX-Register wird für eigene Display-Routine benutzt, IY-Register wird in Display-Routine freigehalten und kann in Z88DK-Libs dadurch frei verwendet werden.

Gruß
Siggi

(*) Ich habe die Z88DK-Entwickler lange genug genervt, bis Display-Handling und Cursorpositionierung im Z88DK identisch zum Handling im BASIC waren :D
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 11.08.2016, 12:46

siggi hat geschrieben:
PokeMon hat geschrieben: Das Problem ist hier, der Task (und damit der z88dk Tastaturtreiber) bekommt hier Rechenzeit und kann natürlich den Keyboard Port abfragen und mitschneiden, was Du da eingibst.
Das Problem besteht dann ja wohl bei jedem Programm, das direkt die Tastatur liest. Hast Du schon mal Spiele in M/C (z. B. Monster Maze, Flugsimulator) probiert, ob die korrekt laufen? Oder BASIC-Programme, die mit INKEY$ arbeiten?
Siggi, Du musst Dir im Klaren sein, dass Du hier natürlich auch die Grenzen des Systems auslotet.
Nicht alles wird so funktionieren können, aber es gibt natürlich auch kein anderes ZX81 (kompatibles) System, dass überhaupt die Möglichkeiten eines Multitasking Betriebs hat. Es gibt wahrscheinlich noch nicht mal andere Systeme, die überhaupt in der Lage sind, mehrere Programme umschaltbar auf einem System zu starten und per Task Switch in dem Bruchteil einer Sekunde zu wechseln.

Du musst den MT Modus ja nicht wirklich nutzen, das ist eine Option und im Grunde auch eher ein Feature, was halt wirklich (theoretisch) machbar ist.
Um das zu Verhindern, müsste man den Tastaturabfrageport blockieren. Möglich, dass ich das vielleicht irgendwann mal einbaue aber dazu bedarf es auf jeden Fall dann eines Hardware Updates (CPLD). Ansonsten kann ich ja nicht wissen, was die Programme so treiben. Es gibt halt keine Schicht im Betriebssystem (wenn man das ZX81 BASIC so bezeichnen möchte) die den Zugriff auf Hardware Ressourcen reglementiert. So wie das z.B. bei WIN, Linux und OS X funktioniert.

Es gibt aber noch weitere Probleme, die ich zum Thema MT angesprochen habe. So gibt es die Einschränkung, dass nur Standard Text Mode Display möglich ist und der FRAMES Counter spiegelt hier nur bei 2 Tasks die tatsächliche Geschwindigkeit resp. Anzahl der Frames pro Sekunde wieder. Wenn Du z.B. 3 Programme startest (oder auch 7) mit sagen wir mal CLCKFREQ.P dann zeigt jedes Programm/Instanz an, dass es mit ca. 130% Geschwindigkeit läuft obwohl es mir jeder weiteren gestarteten Instanz immer langsamer läuft. Auch das könnte man softwaremäßig vielleicht noch anpassen, es können aber auch andere Probleme mit Programmen auftauchen, wenn einzelne Frames übersprungen werden. Insofern bin ich nicht wirklich sicher, ob das sinnvoll ist. Genauso wie ich nicht sicher bin, ob 7 gleichzeitig laufende Programme sinnvoll sind. Die Frage bleibt am Ende halt immer, ob das praktische Relevanz hat. Natürlich kann man sich die Frage bei Multitasking auf einem ZX81 insgesamt auch stellen.

Das Problem ist hier also immer eigentlich die Anwendung, die davon ausgeht, dass sie alleine läuft ganz ohne Nebenbuhler. Clive Sinclair hatte sicherlich ein Multi Tasking Betriebssystem nie im Kopf und im Grunde ist es schon ein Kunststück, das in dieser Hardware Ausstattung überhaupt hinzubekommen mit einem 8 Bit Prozessor, der gerade mal 64k Speicher adressieren kann und mit schlappen 6.5 MHz läuft. :wink:

siggi hat geschrieben: Der Z88DK verwendet normales DFILE (*) und normalen Zeichensatz (I-Register). IX-Register wird für eigene Display-Routine benutzt, IY-Register wird in Display-Routine freigehalten und kann in Z88DK-Libs dadurch frei verwendet werden.
Ja das muss ich mir wie gesagt anschauen. Bin noch nicht dazu gekommen.
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 11.08.2016, 17:38

PokeMon hat geschrieben: Einschränkungen:

1) PAL Videomodus
Da die Realisierung sehr timingkritisch ist, gibt es im NTSC Mode mit wesentlich kürzeren Rechenzeiten pro Frame deutliche Stabilitätsprobleme. Der PAL Video Modus ist da deutlich zuverlässiger. Ich habe hier mit verschiedenen Standardanwendungen getestet, BASIC und Assemblerprogramm und HRG (das "Swatosch" HRG) sowie auch einigen Sonderprogramm wie dem 1kchess.p, die sehr zuverlässig funktionieren. Probleme kann es insbesondere mit den 1k Programmen von dr.beep geben oder ähnlich akrobatisch ambitionierten Byte-Spar-Programme mit eigenen Videotreibern und extensiven NMI ein/ausschalten arbeiten.

2) RAM mirror
Das ist erklärungsbedürftig und kann Probleme beheben, die bei häufigem NMI ein/ausschalten vorkommen. Härtetest war hier ein nettes Programm a la

Code: Alles auswählen

10 SLOW
20 PRINT "X";
30 FAST
40 RUN
Das auf einer Instanz im Hintergrund und ein anderes Programm wie CLCKFREQ.p im Vordergrund oder umgekehrt. Schwierigkeiten macht hier der erweiterte M1 NOT Modus, der beim ZXmore über den gesamten Adressbereich erlaubt ist um z.B. Maschinenprogramme auch im Bereich $C000-$FFFF laufen lassen zu können. Hier wird die A15 Leitung vom RAM automatisch auf low gesetzt wenn der Video Mode erkannt wird. Erkannt wird er, sobald ein INT ACK auftritt oder ein HALT Befehl. Jetzt ist es so, dass im SLOW Mode eigentlich immer ein HALT auftritt als Bildsynchronisierung mit dem letzten NMI.

Im FAST Mode fehlt diese Synchronisierung und das Bild wird komplett per Software erzeugt. Auch dabei gibt es ein HALT, aber ggf. erst am Ende der (leeren) Videozeile. Das ist zu spät, so dass ggf. Code im Bereich >32k als Bildschirm ausgeführt wird. Das ließ sich ausbügeln durch ein CPLD Update, in Version 06/2016 ist das behoben. Ein Workaround ist es ggf. RAM mirror einzuschalten und den Speicher auf 32k zu beschränken (8k-40k oder 16k-48k). Möglicherweise ist das früher nicht aufgefallen, möglicherweise passiert das auch nur im Multitasking Mode weil hier das Bild vom ZXmaster erzeugt wird. Genau kann ich das auch nicht sagen. Als angenehmer Nebeneffekt erscheint nun auch beim klassischen LOAD Aufruf wieder das bekannte Streifenmuster weil auch hier der Video Modus erkannt wird. Ich musste noch eine weitere Bedingung einführen, dass auch das Abschalten des NMI Generators als Video Modus einschalten erkannt wird.

3) Text display
Um den Multitasking Mode überhaupt realisieren zu können, musste ich hier auf eigene Bildschirmtreiber setzen und das hat zur Folge, dass im Multitasking Modus nur Text aber keine Grafik (HRG) dargestellt werden kann. Es funktionieren aber HRG Programme im Multitasking Modus (zumindest das HRG16k.p), nur sieht man beim Umschalten nicht, wie weit die Grafik ist. Hier muss man ggf. den Multitasking Mode kurz ausschalten (DS-M) und danach wieder einschalten. Das Editieren von Programmen ist hierbei übrigens unschädlich, weil hier kurz der FAST Mode aktiviert wird und anschließend wieder der SLOW Mode. Während des FAST Mode ist auch der ZXmaster nicht aktiv und dann kann die Instanz im DFILE schalten und walten wie sie will.

4) Framecounter (FRAMES)
Der FRAMES Counter wird weitergezählt im Multitasking Modus, allerdings spiegelt er nicht mehr die tatsächlich abgelaufenen Frames wieder. Er wird bei jedem Durchlauf erhöht wenn die Instanz gerade aktiv ist. Sofern sie nur 1x aktiv ist (also neben der Vordergrundinstanz nur eine Hintergrundinstanz läuft) paßt das mit dem FRAMES Counter und auch in Bezug auf die doppelte Taktfrequenz (6.5 MHz vs. 50% Rechenzeit) - sofern mehr Instanzen aktiv sind, wird der FRAMES Counter nur noch 25 mal pro Sekunde erhöht, weil die Instanz sich die Rechenzeit mit einer weiteren Hintergrundinstanz teilen muss und nur noch halb so oft dran ist. Zeitmessungen über FRAMES stimmen dann nicht mehr.
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 11.08.2016, 17:42

Hallo siggi,
bei mir lief das jetzt ohne Abstürze und ohne diesen Effekt.

Es ist mir aber eingefallen, dass es (vorübergehend) eine weitere Einschränkung gibt für den Multi Tasking Mode wenn man nicht das kürzlich geänderte CPLD hat. Erläuterung im Text oben unter RAM mirror. Ich vermute mal, das hast Du nicht aktiviert (Beschränkung auf 32k, also 8-40k in Instanz 1 und 16-48k in Instanz 2/3).
Ich konnte das Programm Interceptor mit RUN 9005 ohne Probleme starten und überall umschalten, auch im Multitasking Modus.

Durch das Testen im Multitasking hat sich leider ein Fehler gezeigt, den ich mittlerweile im CPLD behoben habe, das aber aktuell noch keiner außer mir hat (glaube ich). Vermutlich liegt es daran. Kannst es ja vielleicht nochmal mit RAM Mirror versuchen.

LG Karl
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 11.08.2016, 17:54

Also das mit dem kaputten Bildschirm konnte ich jetzt nachvollziehen.

Das passiert, wenn RAM ab 8k aktiviert ist und im Multitasking Mode wird die Zeichensatztabelle im ROM des ZXmaster benutzt und die liegt momentan auf Adresse $2600-$27FF. Wenn da RAM aktiviert ist, funktioniert es daher dann so nicht. Ich werde die Zeichensatztabelle im ROM verschieben und nächste Woche dann mal ein Bugfix Release veröffentlichen, wenn Dir nicht noch weiter Fehler auffallen sollten. Normalerweise zeigt die Instanz das Videobild ja selbst an, nur im MT macht das der ZXmaster weil ansonsten die Umschalterei nicht sauber funktioniert.

Die Stabilitätsprobleme sind möglicherweise auf das Mirror Problem zurückzuführen.

*edit*
Ich habe es jetzt mal so gelöst, dass für die Videoausgabe das RAM zwischen 8k und 16k ausgeblendet wird.
Ein OR $03 an der richtigen Stelle macht den Job. 8)
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 11.08.2016, 20:28

Hi Karl

heute Abend wollte mein ZxMore ums Verrecken nicht starten. Instanz 0 ist hochgelaufen, aber beim Wechsel nach 2 oder 3 oder .. ist Bildschirm dunkel geworden (kein Signal) und Reset hat nix mehr bewirkt.
Nur per Drehschalter ließen sich die Instanzen >0 starten (sind also OK)
Was ich probiert habe: SHIFT halten beim Power-ON, dann Config ändern und mit W abspeichern: keine Änderung.
In dem Zustand hat der ZxMore auch keinen USB-Stick erkannt.

Habe dann nach mehrern Reset/Power-On ein altes Master-Backup von einem anderen Stick geladen. Nun rennt er wieder :mrgreen:

Fazit: ich kenne noch keinen Weg, wie ich eine quere Konfiguration in eine saubere wandeln kann. Ist SHIFT-POWERON + SAVE wirklich der Weg?

Habe dann den Speicher auf 32K reduziert. Nun läuft auch INTERCEP.P und wird nicht zerschossen.
Als Workaround OK, aber neues CPLD muss dann wohl doch sein.

Gruß
Siggi

PS: Und zu "Grenzen ausloten": nur wer die Grenzen kennt, weiß wo er nochmal drüber nachdenken kann, ob es nicht doch noch weiter geht :wink:
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 11.08.2016, 20:52

Hallo siggi,

mit SHIFT+Reset wird nur der Speicher gelöscht (RAM).
Wenn Du explizit die gespeicherten Konfigdaten aus dem Flash zurücksetzen möchtest, solltest Du SHIFT-C und Reset (oder Ein/Ausschalten) nutzen.
Und die Default Konfiguration mit W(rite) schreiben. Sonst musst Du bei jedem Neustart SHIFT-C drücken.

Vielleicht hast Du versehentlich eine alte BACKUP Datei geladen gehabt ?
PokeMon hat geschrieben: Wer nie individuelle Konfigurationsdaten mit Edit/Write gespeichert hat, ist von dem hier geschilderten Problem nicht betroffen.

Lösung:
SHIFT-C und Reset, danach die erstellte Default Konfiguration mit Edit/Write in Instanz 0 neu in Flash ROM speichern
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 11.08.2016, 21:09

PokeMon hat geschrieben:Hallo siggi,

mit SHIFT+Reset wird nur der Speicher gelöscht (RAM).
Wenn Du explizit die gespeicherten Konfigdaten aus dem Flash zurücksetzen möchtest, solltest Du SHIFT-C und Reset (oder Ein/Ausschalten) nutzen.
Und die Default Konfiguration mit W(rite) schreiben. Sonst musst Du bei jedem Neustart SHIFT-C drücken.

Vielleicht hast Du versehentlich eine alte BACKUP Datei geladen gehabt ?
PokeMon hat geschrieben: Wer nie individuelle Konfigurationsdaten mit Edit/Write gespeichert hat, ist von dem hier geschilderten Problem nicht betroffen.

Lösung:
SHIFT-C und Reset, danach die erstellte Default Konfiguration mit Edit/Write in Instanz 0 neu in Flash ROM speichern
Hi Karl
da Du das vermutlich öfters machst, weißt Du das. Da ich das eigentlich nie machen will, habe ich es garantiert wieder vergessen, wenn ich es brauche :mrgreen:

Mein Wunsch für ein MASTER-Update
1) ALL-Reset Button in einem Menü, der alles Löscht und ins Flash schreibt und der die verstecken STIFT-Dingsbums bei Power-On oder Vollmond überflüssig macht
2) eine Konfigurationsmöglickeit für ELSE (also weder ZX81 noch ZX80), auf dem ein anderes ROM sitzen kann, das ab 0 ausgeführt wird (wie nach Reset) und mit 3,25 MHz läuft. Das sollte für viele andere ROMs (ASZMIC, SPONZY, FORTH???) dann funzen.

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

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 11.08.2016, 22:07

Hmm, noch was seltsames:
ich wollte mit INKEY$ in mehreren Instanzen und Multitasking testen. Also habe ich in Instanz 1 ein kleines BASIC-Programm geschrieben. Das habe ich bei laufendem Programm mit DS-S als "inkey$.p" abgespeichert. Ich wollte es in anderer Instanz dann laden, aber ZxMore stürzt dann ab.
Habe es dann nochmal als INKEY$2.P abgespeichert, als Zeddy in der Kommandozeile war (also Programm gestoppt). Kann ich auch nicht mehr laden.
EO lädt beide Programme, aber bei letztem steht Cursor in der letzten Zeile (Kommandozeile) und rennt los, so als ob das Programm laufen würde. SPACE beendet es dann ...

Und: derzeit erkennt mein ZxMore beim LOAD/SAVE nicht, daß kein USB-Stick gesteckt ist ..
USB-Version ist 18/01.2016

Gruß
Siggi
Dateianhänge
INKEY$2.P
(953 Bytes) 24-mal heruntergeladen
INKEY$.P
(953 Bytes) 21-mal heruntergeladen
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 12.08.2016, 09:27

Hi Karl
nachdem meine letzte DS-S-Aktion ja in die Hose ging, habe ich mir mal ein paar Gedanken zum DS-S (also Abspeichern eines P-Files in NMI-Routine) gemacht. M. E. sind da einige böse Fallstricke drin.

Anders als die Sinclair-Save-Rountine, die ein Speicherabbild der Systemvariablen und des Basic-Programmes in einem stabilen Systemzustand erzeugt, kann beim Abspeichern im NMI das System in einem beliebigen ggf. instabilen Zustand sein. Insbesondere können die Systemvariablen einen ungültigen Zustand haben!

Beispiel: wenn der NMI zu einem Zeitpunkt erfolgt, wo durch den BASIC-Interpreter im ROM die Speicherbelegung verändert wird (Einfügen/Löschen von Programmzeilen, Expandierungen/Kollabieren des D-Files, Erzeugung/Löschung/Änderung von BASIC-Variablen) oder die Systemvariablen geändert werden (16-Bit Variablen, die byteweise aktualisiert werden), dann kann ein P-File geschrieben werden, das inkonsistent ist, weil das System in diesem Moment nur "halb" aktualisiert ist.

Wird ein solches P-File geladen, kann die unterbrochene ROM-Routine ja nicht fortgesetzt werden (der Z80-Stack ist ja nicht im P-File drin, es ist also nicht bekannt, welche ROM-Routine unterbrochen wurde). Somit kann das unterbrochene Update der Systemvariablen nicht abgeschlossen werden: das P-File wird mit inkonsistenen Systemvariablen fortgeführt und landet vielleicht im Nirwana ....

Wenn das DS-S im laufenden Programm erfolgt, wo ständig viele Systemvariablen "angefaßt" werden, ist die Wahrscheinlichkeit höher, daß ein inkonstistentes P-File erzeugt wird, als im Kommandomodus, wo weniger Systemvariablen aktualisiert werden und die möglicherweise unkritisch sind (Frames, Debounce, ...). Vielleicht ist das Problem deshalb noch nicht aufgefallen ....

Fazit:
Mit DS-S und Speichern eines P-Files jederzeit (im NMI) hat man beim ZxMore eine Möglichkeit, die das Sinclair-SAVE nicht bietet. :)
Mit DS-S hat man aber auch die Möglichkeit, ein inkonsistentes P-File abzuspeichern, die das Sinclair-SAVE nicht bietet. :(

Gruß
Siggi

PS: Die Treiber-Schnttstelle 8192... speichert das System wohl auch (wie Sinclair) in einem stabilen Zustand ab ...
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 12.08.2016, 11:34

siggi hat geschrieben: Mein Wunsch für ein MASTER-Update
1) ALL-Reset Button in einem Menü, der alles Löscht und ins Flash schreibt und der die verstecken STIFT-Dingsbums bei Power-On oder Vollmond überflüssig macht
2) eine Konfigurationsmöglickeit für ELSE (also weder ZX81 noch ZX80), auf dem ein anderes ROM sitzen kann, das ab 0 ausgeführt wird (wie nach Reset) und mit 3,25 MHz läuft. Das sollte für viele andere ROMs (ASZMIC, SPONZY, FORTH???) dann funzen.

Gruß
Siggi
Das lässt sich sicherlich realisieren im nächsten Update. :wink:
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 12.08.2016, 11:44

siggi hat geschrieben: Fazit:
Mit DS-S und Speichern eines P-Files jederzeit (im NMI) hat man beim ZxMore eine Möglichkeit, die das Sinclair-SAVE nicht bietet. :)
Mit DS-S hat man aber auch die Möglichkeit, ein inkonsistentes P-File abzuspeichern, die das Sinclair-SAVE nicht bietet. :(

Gruß
Siggi

PS: Die Treiber-Schnttstelle 8192... speichert das System wohl auch (wie Sinclair) in einem stabilen Zustand ab ...
Siggi,
das hast Du in der Tat richtig erfasst. Es ist daher sinnvoll, ein Programm als .p File nur abzuspeichern, wenn man auf der Kommandoeingabezeile ist (Programm beendet). In der Tat können sonst Inkonsistenzen auftreten. Das Abspeichern eines laufenden Programmes ist dennoch möglich als Instanz (.BAK File), weil es dann ja nach dem Laden einfach fortgesetzt werden kann. Insofern hat man beide Optionen, die Instanz Dateien kann man halt leider mit keinem anderem System austauschen. Ist aber durchaus auch eine nützliche Funktion, wenn man z.B. gerade mal eine Disassembler Sitzung unterbrechen möchte.

Wenn Du innerhalb eines Programmes speichern können möchtest, bietet sich in der Tat die Nutzung der VDRIVE Schnittstelle an. Hier hast Du es selbst in der Hand, wann gespeichert wird und ob das System in einem gültigen Zustand ist. DS-S ist halt asynchron, es speichert dann zum Ende der aktuellen NMI Periode, wo immer dann PC, SP und andere Register gerade stehen und wie gerade der Zustand des Speichers ist.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 12.08.2016, 19:17

Habe gerade das Keyboard-Problem mit BASIC Inkey$ probiert: auch da kriegen die anderen Instanzen mit, was in den anderen Instanzen getippt wird.

Unabhängig davon hätte ich noch einen Vorschlag: könnte man eine Konfiguration hinzufügen, sodaß nur einige (konfigurierte) Instanzen im Multikasking rennen, aber nicht alle?
Hintergrund: Programme wie IRC-Chat, die permanent für den Chat-Server erreichbar sein müssen, sollen im Hintergrund weiterlaufen können, damit die Verbindung nicht zusammenbricht. Andere Programme (z. B. Spiele) sollten im Hintergrund nicht weiterlaufen, damit man nicht so nebenbei sämtliche Leben dort verspielt :D

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

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 12.08.2016, 19:58

Ja, im Prinzip ist das machbar.
Da muss dann die Konfig Utility erweitert werden.
Ich dachte, so ist es erstmal am Einfachsten, wenn man nichts konfigurieren muss. :wink:

Faktisch ist das machbar weil beim Einschalten vom Multitasking Mode schaue ich sowieso nach, welche Instanzen laufen und packe die dann in eine Struktur. Da kann man dann natürlich zusätzlich auch in einer Konfiguration nachschauen, welche laufen sollen. Oder welche nicht.

Ich war mir auch nicht ganz sicher, ob das Multitasking überhaupt Anklang findet.
Das war mehr so eine Herausforderung nach dem Motto, dass muss doch irgendwie gehen.
Hat aber ehrlich gesagt recht viel Arbeit gemacht und ich musste 3 verschiedene Anläufe nehmen für die Realisierung weil das Timing wirklich anspruchsvoll ist, insbesondere wenn zwischendrin noch zwischen FAST und SLOW umgeschaltet wird.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 12.08.2016, 20:40

Nur das Keyboard-Problem müßte noch gelöst werden ...
Kann ich denn testweise im IRC-Programm eine Rom-Routine aufrufen, die Keyboard nur im Vordergrund liest, anstelle der Z88DK-Keyboard-Routine? Die muß aber nur 1 Zeichen liefern und darf nicht blockieren, wenn keins da ist (sonst hängt Screen-Output und IRC-Kommunikation)"

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

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 12.08.2016, 22:09

Die Frage ist halt, aus welchen Gründen Du einen eigenen Tastaturtreiber benutzt.
Wenn es nur um Keyrepeat geht, das macht der ZXmaster ja selbständig.
Die spannende Frage ist halt, was der Tastaturtreiber genau macht.
Liefert er nur ein SHIFT-G zurück oder kleines oder großes G resp. ASCII ?

Also was liefert der Tastaturtreiber konkret an Dein Programm zurück ?

Es gibt aktuell 2 verschieden Varianten, die vom ZXmaster benutzt werden.

Variante 1 - ZX81 erzeugt sein Bild/Keyboarddaten selbst.
Hier wird dann nur einfach die Debounce Variable zurückgesetzt für die Tasten, die der ZXmaster verarbeitet (hat):

Code: Alles auswählen

        LD      HL,(ZX81_KEYBDATA) // read keyboard data from instance
        BIT     4,B             // remove double shift keys from instance keyboard routine
        JR      Z,.keyvalid
        LD      A,$FF           // delete pressed key (was double sift key)
        LD      (ZX81_DEBOUNCE),A
.keyvalid:

Variante 2 (Multitasking)

Hier erzeugt der ZXmaster das Videobild und liest auch das Keyboard (Vsync) und speichert das Keyboardmuster (Matrix) und informiert das BASIC über Bit 0 vom CDFLAG, dass eine gültige Taste erkannt wurde.

Code: Alles auswählen

        LD      (ZX81_KEYBDATA),HL
        LD      HL,ZX81_CDFLAG
        SET     0,(HL)          // mark key press for ZX81 instance
Man müsste also einfach nur Bit 0 vom CDFLAG abfragen, ob eine gedrückte Taste vorliegt und dann kann man die Tastaturmatrix auswerten. Zusätzlich könnte ich auch eine frei Stelle im Speicher einen erkannten ASCII Character hinschreiben, dann müsste man sich nur einigen wo. Das Problem ist leider, dass Du nicht direkt eine Funktion im ZXmaster aufrufen kannst.
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 12.08.2016, 22:42

Eine Möglichkeit wäre, den ASCII Char (wenn Du den haben möchtest) in die Systemvariable DEBOUNCE zu schreiben ($4027). Denn sobald das BASIC einen Tastendruck erkannt hat (Bit 0 CDFLAG) wird anschließen die Variable DEBOUNCE zurückgesetzt (auf $FF). Insofern wäre das unschädlich fürs BASIC und vermutlich gut brauchbar um im Zeddychat die Tastatur abzufragen.

Code: Alles auswählen

; --------------------------
; THE 'WAIT FOR KEY' SECTION
; --------------------------
;; DISPLAY-6
L04C1:  LD      HL,$0000        ;
        LD      ($4018),HL      ; sv X_PTR_lo
        LD      HL,$403B        ; system variable CDFLAG
        BIT     7,(HL)          ;
        CALL    Z,L0229         ; routine DISPLAY-1
;; SLOW-DISP
L04CF:  BIT     0,(HL)          ;
        JR      Z,L04CF         ; to SLOW-DISP
        LD      BC,($4025)      ; sv LAST_K
        CALL    L0F4B           ; routine DEBOUNCE
        CALL    L07BD           ; routine DECODE
        JR      NC,L0472        ; back to LOWER

Code: Alles auswählen

;; DEBOUNCE
L0F4B:  RES     0,(IY+$3B)      ; update system variable CDFLAG
        LD      A,$FF           ;
        LD      ($4027),A       ; update system variable DEBOUNCE
        RET                     ; return.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 13.08.2016, 09:30

PokeMon hat geschrieben:Die Frage ist halt, aus welchen Gründen Du einen eigenen Tastaturtreiber benutzt.
Weil das die "Standard"-Methode im Z88DK ist. Und als ich das Programm vom Speccy auf den Zeddy umhob, habe ich genug andere Baustellen gehabt, die ich anfassen mußte. Da habe ich funktionierende Programmteile links liegen lassen :wink:
Wenn es nur um Keyrepeat geht, das macht der ZXmaster ja selbständig.
Mag ja sein, aber ich will keine Programme speziell für ZxMore schreiben, sondern für alle Zeddies.
Die spannende Frage ist halt, was der Tastaturtreiber genau macht.
Liefert er nur ein SHIFT-G zurück oder kleines oder großes G resp. ASCII ?

Also was liefert der Tastaturtreiber konkret an Dein Programm zurück ?
Das fertige ASCII-Zeichen, das direkt ausgegeben werden kann. Wobei auch spezielle Zeddy-Zeichen in ASCII-Zeichen umgesetzt werden, die auf der Zeddy-Tastatur fehlen. Es wird die Funktion "in_GetKey" benutzt. Siehe:
http://www.z88dk.org/wiki/doku.php?id=l ... t&s=getkey
Variante 2 (Multitasking)

Hier erzeugt der ZXmaster das Videobild und liest auch das Keyboard (Vsync) und speichert das Keyboardmuster (Matrix) und informiert das BASIC über Bit 0 vom CDFLAG, dass eine gültige Taste erkannt wurde.

Code: Alles auswählen

        LD      (ZX81_KEYBDATA),HL
        LD      HL,ZX81_CDFLAG
        SET     0,(HL)          // mark key press for ZX81 instance
Man müsste also einfach nur Bit 0 vom CDFLAG abfragen, ob eine gedrückte Taste vorliegt und dann kann man die Tastaturmatrix auswerten.
Das erscheint mir die sinnvollste Lösung zu sein, wenn die dann auch auf "normalen" Zeddies funzt. Das probiere ich mal ...

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

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 13.08.2016, 10:36

So, ich hab's mal probiert:

Code: Alles auswählen

unsigned char CDFLAG @ 16443;

void fillKbdBuffer(void)
{
    uchar k = 0;
    if (CDFLAG & 1)
       k = in_GetKey();
    if(k)
     ......
}
Abgesehen davon, daß sich nun die Key-Debouncereien und Keyrepeats von ZxMore und Z88DK in die Quere kommen und Keyrepeat nicht geht und Tasten verschluckt werden: es geht im Multitasking immer noch nicht:

Aus dem Log-File:

Code: Alles auswählen

[2016-08-13 10:15:02 CEST] <siggi> test
[2016-08-13 10:15:51 CEST] <siggi> inst 1
[2016-08-13 10:16:08 CEST] <siggi> 2int 2                                        <--------------------
[2016-08-13 10:16:51 CEST] <siggi> inineinst 2                                 <--------------------
[2016-08-13 10:17:18 CEST] <siggi> 1inst 1
[2016-08-13 10:17:44 CEST] <siggi> m
[2016-08-13 10:18:56 CEST] <siggi> inst1 ohne mt
[2016-08-13 10:19:52 CEST] <siggi> 22
[2016-08-13 10:21:11 CEST] <siggi> inst  mit mt
[2016-08-13 10:21:40 CEST] <siggi> einst  mit mt
[2016-08-13 10:21:58 CEST] <siggi> einst 2mitmt                               <--------------------
Es kommen immer noch Tasten der Instanz 2 beim Chat in Instanz 1 an. Zumindest bei meinem ZxMore ...

Gruß
Siggi
Dateianhänge
irc.p
(12.93 KiB) 23-mal heruntergeladen
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 13.08.2016, 12:27

PokeMon hat geschrieben:

Code: Alles auswählen

        LD      (ZX81_KEYBDATA),HL
        LD      HL,ZX81_CDFLAG
        SET     0,(HL)          // mark key press for ZX81 instance
Man müsste also einfach nur Bit 0 vom CDFLAG abfragen, ob eine gedrückte Taste vorliegt und dann kann man die Tastaturmatrix auswerten.
Wer setzt das Bit denn zurück und wann?
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 13.08.2016, 13:05

Also das Bit wird zurückgesetzt, sobald die Taste verarbeitet wird/wurde.
Das BASIC macht das mit einem Aufruf in die Debounce Routine die einfach den Debounce Wert auf $FF zurücksetzt.
Die setzt dann auch automatisch Bit 0 im CDFLAG zurück.

Code: Alles auswählen

CALL    L0F4B           ; routine DEBOUNCE

;; DEBOUNCE
L0F4B:  RES     0,(IY+$3B)      ; update system variable CDFLAG
        LD      A,$FF           ;
        LD      ($4027),A       ; update system variable DEBOUNCE
        RET                     ; return.

Was Deine Probleme mit dem Testen angeht:

Du rufst doch immer noch die Funktion in_GetKey() aus dem z88dk auf.
Was soll sich denn dann Deiner Meinung nach ändern, wenn der Keyboard Treiber im Hintergrund weiterhin die Tastatur scannt ?
Und das Überliefern des ASCII Zeichens in die Debounce Variable ist ja noch nicht implementiert.
Das war ja bislang nur mein Vorschlag. :wink:

Gibt es eine Dokumentation, welche Tastenkombinationen beim z88dk@ZX81 dann die entsprechenden Zeichen produzieren ?

Vielleicht ist es am Ende wirklich einfacher, wenn ich den Tastaturport sperre, wenn der Task nicht im Vordergrund läuft und ich schicke Dir ein neues CPLD ... 8)
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 13.08.2016, 13:44

PokeMon hat geschrieben: Was Deine Probleme mit dem Testen angeht:

Du rufst doch immer noch die Funktion in_GetKey() aus dem z88dk auf.
Was soll sich denn dann Deiner Meinung nach ändern, wenn der Keyboard Treiber im Hintergrund weiterhin die Tastatur scannt ?
Es gibt keinen "Keyboard Treiber im Hintergrund": in_Getkey scannt die Tastatatur und gibt ggf. (nach Debounce und Repeat-Delay) ein ASCII-Zeichen zurück (als State-machine implementiert). Und wenn man sie nicht aufruft, scannt keiner die Tastatur.

Und ich überliefere keine Zeichen in Debounce, sondern gucke nur auf Bit0 von CDFLAG (siehe C-Source). Ich bin davon ausgegangen, daß das bereits implementiert ist.
Das BASIC macht das mit einem Aufruf in die Debounce Routine die einfach den Debounce Wert auf $FF zurücksetzt.
Aha, da ich das nicht gemacht habe im C-Programm, bleibt das dann wohl aktiv, auch wenn die Task wieder im Hintergrund verschwindet?
Vielleicht ist es am Ende wirklich einfacher, wenn ich den Tastaturport sperre, wenn der Task nicht im Vordergrund läuft und ich schicke Dir ein neues CPLD ... 8)
Zumindest würde das das Problem sauber lösen (auch für alle anderen Programme/Spiele und INKEY$)

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

Benutzeravatar
siggi
User
Beiträge: 1701
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, Ranstadt-Dauernheim
Kontaktdaten:

Re: ZXmore Fragen und Antworten

Beitrag von siggi » 13.08.2016, 14:22

So scheint es nun zu klappen:

Code: Alles auswählen

void fillKbdBuffer(void)
{
    uchar k=0;
    if (*(char *) 531 == 34) /* ZxMore? */
    {
        if (CDFLAG & 1)
        {
            k = in_Inkey();
            CDFLAG &= 0xFE;
        }
    }
    else
        k = in_GetKey();

    if(k)
.....
Beim ZxMore wird nun die Keyboard-State-Machine (in_Getkey) nicht mehr benutzt, da das nur Ärger machte. Es wird nun nur nach CDFLAG =1 die Tastatur gelesen und CDFLAG wieder zurückgesetzt. Dadurch gibt's auf dem ZxMore kein Keyrepeat mehr, aber dafür kann man das Programm nun in den Hintergrund schieben ...

Gruß
Siggi
Dateianhänge
irc-ansi32.P
(14.75 KiB) 24-mal heruntergeladen
irc.P
(12.86 KiB) 21-mal heruntergeladen
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: ZXmore Fragen und Antworten

Beitrag von PokeMon » 13.08.2016, 14:46

siggi hat geschrieben:Dadurch gibt's auf dem ZxMore kein Keyrepeat mehr, aber dafür kann man das Programm nun in den Hintergrund schieben ...
Ja und Nein. Repeat gibt es immer dann, wenn der ZXmore die Tastatur liest und auswertet. Wenn Multitasking nicht aktiv ist, greife ich in diesen Prozess nicht ein und lasse es so wie das Original BASIC das macht (ohne Repeat). Wenn Multitasking aktiv ist, wird die Tastatur vom ZXmore gelesen und an die aktive Instanz weitergeleitet (resp. signalisiert) und das dann auch mit Repeat wenn man die Taste festhält.

Der Grund warum ich das so gemacht habe, liegt an ggf. abweichenden Videoroutinen. Im Nachhinein wäre es aber vermutlich möglich die Repeat Funktion über Manipulation von CDFLAG Bit 0 und Debounce Counter in das BASIC einzuschleusen. Was den Vorteil hätte, dass die Tastatur etwas flotter reagiert (wegen kürzerer Entprellzeit auf dem ZXmore) und eben auch im BASIC Repeatfunktion vorhanden wäre (ganz ohne eigene Treiber).
Wer seinen Computer ehrt, lebt nicht verkehrt.

Antworten

Wer ist online?

Mitglieder in diesem Forum: Yahoo [Bot] und 1 Gast