NU_ZX81<->H4TH

ZX-Team Forum
Antworten
Benutzeravatar
ZX-Heinz
User
Beiträge: 1428
Registriert: 05.12.2011, 14:45

NU_ZX81<->H4TH

Beitrag von ZX-Heinz » 10.05.2018, 18:37

bokje hat in
viewtopic.php?f=2&p=36415#p36415
einige Experimente zum Switchen von ZX81 zu H4TH und zurück auf dem NU durchgeführt. Hier scheint mir einiges Potential zu liegen, und ich erwarte eine größere Materialsammlung, mal sehen, wohin der Zug fährt. Hierfür ist es besser, einen eigenen Thread aufzumachen, um den ZX81NU-Thread nicht zu überdecken. Zuerst nochmal die Vorschläge von bokje:

1. ZXNU neu starten mit Forth (warum nicht ;)):

ld bc,0x0c5f
in a,(c)
rst 0h
: NU CODE 1 5F C 0ED 78 C7 ;C ;

2. Und auch zum ZX81 und zurück :)

ld bc,0x8c5f
in a,(c)
rst 0h

ld hl,0x6000; keep H4TH system variables intact
ld (0x4004),hl
ld bc,0x4c5f
in a,(c)
jp 0x03e5; setup ZX81 environment which perhaps may be called later from H4TH...

: H4TH CODE 1 5F 8C 0ED 78 C7 ;C ;
: ZX81 CODE 21 0 60 22 4 40 1 5F 4C 0ED 78 C3 E5 3 ;C ;


Und zurück von ZX81: RAND USR 8215
Zuletzt geändert von ZX-Heinz am 10.05.2018, 19:28, insgesamt 1-mal geändert.

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

Re: NU_ZX81<->H4TH

Beitrag von ZX-Heinz » 10.05.2018, 19:23

H4TH->ZX81, dort Rechnen und Wert poken (z.B. auf Adr 40000), ->H4TH: Der Wert kann von H4TH abgeholt werden . :D
Der Weg zum 2-Betriebssystemrechner. Emulatoren :mrgreen: dürften das nicht können, wohl aber der ZXmore. :wink:
Ein Hoch auf die neuen Rechnergenerationen. 8)

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

Re: NU_ZX81<->H4TH

Beitrag von siggi » 11.05.2018, 13:58

ZX-Heinz hat geschrieben:
10.05.2018, 19:23
H4TH->ZX81, dort Rechnen und Wert poken (z.B. auf Adr 40000), ->H4TH: Der Wert kann von H4TH abgeholt werden . :D
Der Weg zum 2-Betriebssystemrechner. Emulatoren :mrgreen: dürften das nicht können, wohl aber der ZXmore. :wink:
Hallo Heinz
bist Du sicher, daß das klappt (hast Du das probiert)?
Nach meinem Verständnis sind BASIC-ROM und Forth-ROM in 2 verschiedenen Instanzen des ZxMore installiert. Jede Instanz hat aber seinen eigenen 64K Adressraum. D. h. Basic und Forth "sehen" unter der Adresse 40000 ihre eigenen Daten, nicht die der anderen Instanz.

M. W. ist "common memory", also Ram, das für mehrere Instanzen zugreifbar ist, ohne Umbau des ZxMore (frage dazu Erik, wie das machbar ist :wink: ) nicht möglich.

Beim NU mag das klappen, weil der "nur" einmal 64K hat und die Adresse 40000 "zufällig" in einem Bereich liegt, der beim Hochlauf von BASIC nicht überschrieben wird.

Gruß
Siggi

PS: Bei ZxBlast ist das vielleicht möglich, da kenne ich mich aber nicht gut genug aus ....
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: NU_ZX81<->H4TH

Beitrag von ZX-Heinz » 11.05.2018, 16:12

siggi hat geschrieben:
11.05.2018, 13:58
Hallo Heinz
bist Du sicher, daß das klappt (hast Du das probiert)?
Nach meinem Verständnis sind BASIC-ROM und Forth-ROM in 2 verschiedenen Instanzen des ZxMore installiert. Jede Instanz hat aber seinen eigenen 64K Adressraum. D. h. Basic und Forth "sehen" unter der Adresse 40000 ihre eigenen Daten, nicht die der anderen Instanz.
Hallo siggi,
nein, habe ich nicht ausprobiert, da ich gar keinen ZXmore habe. War für den also Spekulation. Anders sieht es für meinen NU aus, und die Adresse 40000 habe ich wohlweislich gewählt. Bis zur effektiven Nutzung des Verfahrens muss noch weiter entwickelt werden, aber der Fakt, dass "common memory" da ist, das beim "Wechsel" des Betriebssystems auch nicht komplett überschrieben wird, ist schon mal ein wichtiger Ausgangspunkt.
Heinz

bokje
User
Beiträge: 80
Registriert: 02.05.2015, 15:38

Re: NU_ZX81<->H4TH

Beitrag von bokje » 11.05.2018, 21:01

Ein erster Güterwagen :)

Code: Alles auswählen

        rst     10h; get stack value in HL
        push	iy
        ld      bc,0x4c5f; switch to ZX81 ROM
        in      a,(c)
        ld      b,h
        ld      c,l
        call    0x1520; stack-bc
        rst     28h; use calculator
        db      0x25; sqr
        db      0x34; end-calc
        call    0x158a; fp-to-bc
        ld      h,b
        ld      l,c
        ld      bc,0x8c5f
        in      a,(c)
        pop	iy
        rst     08h; store result on stack

Code: Alles auswählen

: SQR CODE D7 FD E5 1 5F 4C 0ED 78 44 4D CD 20 15 EF 25 34 CD 8A 15 60 69 1 5F 8C 0ED 78 FD E1 CF ;C ;

Code: Alles auswählen

DECIMAL 20000 SQR . 
 141 OK
Zuletzt geändert von bokje am 12.05.2018, 07:36, insgesamt 1-mal geändert.

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

Re: NU_ZX81<->H4TH

Beitrag von ZX-Heinz » 11.05.2018, 23:33

Phantastisch!

EDIT 23:49: :? Etwas geht auf meinem echten NU doch noch nicht: Die Werte werden nicht richtig übergeben: DECIMAL nn SQR . <CR> liefert bei jeder Zahl nn den Wert -767 (das ist doch #FD01, also das alte DFILE?)

Machen
ld bc,0x8c5f bzw. 0x4c5f
in a,(c)
wirklich nichts anderes, als die ROM-Bank zu switchen?

EDIT 00:06: Der Forth-Stackpointer scheint irritiert: Der Stack gibt nach -767 noch viele Nullen her, sollte aber leer sein.

bokje
User
Beiträge: 80
Registriert: 02.05.2015, 15:38

Re: NU_ZX81<->H4TH

Beitrag von bokje » 12.05.2018, 07:34

Ja tatsächlich, ich hätte IY vergessen (oben aktualisiert), aber damit funzt es warscheinlich dann noch nicht...
Zuletzt geändert von bokje am 12.05.2018, 07:39, insgesamt 1-mal geändert.

bokje
User
Beiträge: 80
Registriert: 02.05.2015, 15:38

Re: NU_ZX81<->H4TH

Beitrag von bokje » 12.05.2018, 07:39

Funktioniert warmes Restart ZX81, mit Nachricht H?

Code: Alles auswählen

        ld      iy,0x4000
        ld      bc,0x4c5f
        in      a,(c)
        call    0x0f4b
        rst     08h
        db      0x10

Code: Alles auswählen

: WM81 CODE FD 21 0 40 1 5F 4C 0ED 78 CD 4B F CF 10 ;C ;

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

Re: NU_ZX81<->H4TH

Beitrag von siggi » 12.05.2018, 09:52

Moin
ich würde auf jedenFall VOR Herumspielen an essentiellen Registern (z. B. IY beim BASIC) den NMI abschalten, damit nicht eine möglicherweise kommende NMI-Bildschirmroutine mit verbogenen Registern schaffen muß und unvorhersehbare Dinge dabei passieren.

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

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

Re: NU_ZX81<->H4TH

Beitrag von ZX-Heinz » 12.05.2018, 10:11

:D @bokje, siggi: Jetzt funktioniert bokjes Quadratwurzel wie sie soll. Es war eigentlich mein Fehler. Bevor man diesen Rücksprung nach ZX81 machen kann, muss ZX81 vorher einmal initialisiert werden um die ZX81 Systemvariablen setzen können.
Also so:

H4TH <CR> ZX81 <CR> RAND USR 8215 <CR> DECIMAL 20000 SQR . <CR> :D

Dann kommt auch die 141 zurück.

Auch 10 0 DO 20000 SQR . LOOP ;

funktioniert. Dabei bleibt zwischendurch der Bildschirm für 5 sec dunkel (Ich habe weiße Schrift auf schwarzem Grund). Danach erscheinen die 10 Werte.
Zuletzt geändert von ZX-Heinz am 12.05.2018, 10:17, insgesamt 2-mal geändert.

bokje
User
Beiträge: 80
Registriert: 02.05.2015, 15:38

Re: NU_ZX81<->H4TH

Beitrag von bokje » 12.05.2018, 10:14

@Siggi: Ja tatsächlich! Ich bin dabei, AF' so zu initialisieren, damit das Schirm minimal zerstört wird 8) Es gibt kleine Unterschiede wie AF' gebraucht wird zwischen H4TH und ZX81. Z.B. A' wird DECed im H4TH und INCed im Zeddy. Also, mit A' < 80h im H4TH, gibt es Zeit zum wechseln :)
Zuletzt geändert von bokje am 12.05.2018, 10:24, insgesamt 1-mal geändert.

bokje
User
Beiträge: 80
Registriert: 02.05.2015, 15:38

Re: NU_ZX81<->H4TH

Beitrag von bokje » 12.05.2018, 10:17

@Heinz: Sehr gut!
Dann jetzt RN81, zum starten eines BASIC Programm:

Code: Alles auswählen

        ld      iy,0x4000
        ld      bc,0x4c5f
        in      a,(c)
        call    0x0f4b
        ld      hl,0x407d
        ld      (0x4029),hl
        rst     08h
        db      0xff

Code: Alles auswählen

: RN81 CODE FD 21 0 40 1 5F 4C 0ED 78 CD 4B F 21 7D 40 22 29 40 CF FF ;C ;

bokje
User
Beiträge: 80
Registriert: 02.05.2015, 15:38

Re: NU_ZX81<->H4TH

Beitrag von bokje » 12.05.2018, 10:20

@Heinz: Wäre es möglich, das BASIC Bereich binär zu speichern und Laden mit dem Vdrive?

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

Re: NU_ZX81<->H4TH

Beitrag von ZX-Heinz » 12.05.2018, 10:22

bokje hat geschrieben:
12.05.2018, 07:34
Ja tatsächlich, ich hätte IY vergessen (oben aktualisiert), aber damit funzt es warscheinlich dann noch nicht...
Auch mit gerettetem IY funktioniert SQR nur, wenn vorher einmal der ZX81-Modus aktiviert wurde.

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

Re: NU_ZX81<->H4TH

Beitrag von ZX-Heinz » 12.05.2018, 10:27

bokje hat geschrieben:
12.05.2018, 10:20
@Heinz: Wäre es möglich, das BASIC Bereich binär zu speichern und Laden mit dem Vdrive?
Das geht im Prinzip. Zur Zeit nicht, da mit VLOAD immer nur 512 Bytes lange Files in den exec-screen geschrieben werden. Aber ich könnte das Vdrive unter H4TH byteweise lesen lassen (mit RD, liefert 1 Byte in den Stack) und die Werte ablegen. Alternativ (bessere Variabte): Von ZX81 aus das BASIC-ROM mit LDIR z.B. nach 40000 kopieren. Dann zurück nach H4TH. Oder auch gleich von H4TH aus mit Tauschen der ROM-Bank und LDIR.

Aber warum willst Du das machen? Das jetzige Vorgehen ist viel, viel schöner: Einfach ROM-Bänke bei Bedarf tauschen.

bokje
User
Beiträge: 80
Registriert: 02.05.2015, 15:38

Re: NU_ZX81<->H4TH

Beitrag von bokje » 12.05.2018, 11:35

@Heinz: Ja ich meinte das ZX81 RAM Bereich, was jetzt #4000-#5FFF ist. Dann wäre es möglich, eine BASIC App zu laden mit Forth, und das zu interpretieren, ohne erstmal zu initialisieren :)

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

Re: NU_ZX81<->H4TH

Beitrag von siggi » 12.05.2018, 12:09

Wenn man sich auf den NU beschränkt, könnte man auch dessen Shadow-Ram zum Zwischenlagern von Speicherbereichen nutzen. Ich hatte ja schon mal Programme geschrieben, die eine Kopie des Speicherbereichs 8-16K zum Shadow-Ram ab 32K hin und- her kopiert.
Dann braucht man kein Image auf USB-Stick.

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

bokje
User
Beiträge: 80
Registriert: 02.05.2015, 15:38

Re: NU_ZX81<->H4TH

Beitrag von bokje » 12.05.2018, 13:21

@Siggi: Würdest Du vorschlagen, den Forth Stack und die Wörter ab #2000 nach oben (ab #8000) zu bewegen, damit #2000 verfügbar ist für z.B. Zeddynet?

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

Re: NU_ZX81<->H4TH

Beitrag von siggi » 12.05.2018, 13:35

Wenn ich mich recht erinnere (mein NUs sind ja "etwas" umgebaut, da ich manch eines anders :wink: ), dann kann man beim NU die Ram-Bänke 8-16K und 32-48K auf Shadow Ram umstellen. Programm zum Umschalten muß dann bei 16-32K liegen (damit es sich nicht selbst wegschaltet) oder im ROM (wie es Olli macht, wenn er für USB auf Shadow-Ram 8k umschaltet).

Also hat man mindestens Shadow-Ram bei 32K-48K zur freien Verfügung. Wenn man NICHT Ollis ROM-Routinen für den VDRIVE nutzt und diesen direkt ansteuert, hat man auch den Shadow-Bereich 8-16K zur Verfügung (also ggf. für ZeddyNet :mrgreen: ). Man muß nur beachten, daß man die Bereiche nicht getrennt auf Shadow-Ram umstellen kann.

Vielleicht kann man das ja nutzen und die gemeinsamen Daten/Programme im Nicht-Shadow-Bereich ablegen und die getrennt zu haltenden ggf. im Shadow-Ram ....
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: NU_ZX81<->H4TH

Beitrag von ZX-Heinz » 12.05.2018, 15:12

bokje hat geschrieben:
12.05.2018, 10:20
@Heinz: Wäre es möglich, das BASIC Bereich binär zu speichern und Laden mit dem Vdrive?
Das folgende Programm liest die Kopfdaten eines Files auf dem USB-Stick am Vdrive/NU. Dazu wird das Vdrive-Kommando "DIR file<CR>" benutzt. Somit kann man die Länge einer BASIC-App auslesen und anschließend Byte für Byte lesen und speichern.

: VDHEAD ( " NAME" VDHEAD->NAME & Length) DUP " DIR " + SEND 2 + 0 DO RD EMIT LOOP 4 0 DO RD LOOP DROP DROP 256 * + . PRT ;

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

Re: NU_ZX81<->H4TH

Beitrag von ZX-Heinz » 14.05.2018, 20:54

bokje hat geschrieben:
12.05.2018, 07:39
Funktioniert warmes Restart ZX81, mit Nachricht H?

Code: Alles auswählen

        ld      iy,0x4000
        ld      bc,0x4c5f
        in      a,(c)
        call    0x0f4b
        rst     08h
        db      0x10

Code: Alles auswählen

: WM81 CODE FD 21 0 40 1 5F 4C 0ED 78 CD 4B F CF 10 ;C ;
Yes, it does.

Antworten