Umbauten am ZX81NU

ZX-Team Forum
Benutzeravatar
siggi
User
Beiträge: 2144
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Umbauten am ZX81NU

Beitrag von siggi » 29.01.2017, 17:29

Nachdem ich schon einen Umbau des NU zur Verwendung eines EEPROM statt EPROM beschrieben habe (siehe hier: http://forum.tlienhard.com/phpBB3/viewt ... 350#p26911) starte ich nun einen neuen Thread, weil ich noch mehr umgebaut habe (damit es im Haupt-NU-Thread zum "Original"-NU nicht zu unübersichtlich wird).

Nun habe ich einen meiner NUs (mit Mini-Mefisdos-Platinchen drin) als Mefisdos-Maschinchen umgebaut. D. h.
- Umbau des Rom-Pagings (2x16KB statt 4x8KB)
- Umbau für Paging von RAM/EEPROM im 8 K Bereich

Damit kann ich nun bei 0K mein für MEFISDOS gepatches ZX81-ROM unterbringen und ab 8K das Mini-Mefisdos (wie es bisher ins Ram geladen wurde). LOAD/SAVE blenden nun automatisch das EEPROM bei 8K ein und gehen ins MEFISDOS.

Über POKE 0,4 kann ich von BASIC aus das RAM bei 8K wieder einblenden (z. B. fürs ZeddyNetteln), mit POKE 0,0 wieder ausblenden und MEFISDOS dann manuell oder per Programm starten (USR 8192/8195/8198).

Zudem kann ich über REM, SCROLL und RAND (im Kommandosmodus, nicht im Programm) den MEFISDOS-Editor aufrufen. Außerdem sind in diesem ROM der Druckroutinen gepatcht: sie erwarten einen "Druckertreiber" im hohen RAM, der dort hin geladen werden kann (wodurch verschiedene Drucker, auch der ZeddyNet-Druckertreiber verwendet werden können). Aber das ist eine andere Baustelle ....

Der Umbau ist relativ einfach, da nur wenige Leiterbahnen auf der Lötseite des NU getrennt/neu verdrahtet werden müssen.
Betroffen sind:
Signal "ROM_BANK0": das kommt von IC 21 Pin 16 (nicht 5 wie lt. "Schaltplan") und geht zum E(E)PROM IC3 Pin 26.
Das wird direkt beim IC21 Pin 16 unterbrochen und IC3 PIN 26 wird mit A13 an der CPU verbunden (IC1 Pin 3). Dadurch kann nun die CPU auf E(E)PROM bei 8K zugreifen.

Signal A13 an IC 19 Pin 8 wird direkt an IC19 abgetrennt. A13 wird dann zusammen mit einen Ausgang der MiniMefisdos-Platine durch ein Dioden-AND-Gatter verknüpft und das Ergebis geht wieder an IC19 Pin 8.
Dadurch kann die Mini-Mefisdos-Platine (per POKE 0,4) Ram bei 8K ein/ausblenden.

Das Dioden-AND habe ich so realisiert: 10K-Pullup-Widerstand zwischen IC19 Pin 8 und +5V (IC19 PIN 14). 2 Schottky-Dioden an IC19 PIN8 angelötet (Anoden). An eine Diode (ans Kathodendende) kommt dann A13 dran (von der unterbrochenen Leiterbahn abgegriffen), an die andere Diode (Kathodenende) kommt ein Draht zur MIni-Mefisdos-Platine (geht dort zu IC2, PIN 6 = Q2, direkt am IC). Es wird das nicht-invertierte Signal direkt am IC verwendet, nicht das invertierte Signal nach dem Transistor!

Und so sieht mein NU derzeit von unten aus: etwa in Bildmitte das Dioden-AND, links oben Brücke zwischen E(E)Prom zur CPU (A13): weißer Draht. Der andere weiße Draht geht zum MiniMefisdos-Platinchen.
P1110766_640x480.JPG
P1110766_640x480.JPG (141.12 KiB) 1967 mal betrachtet
Hier sind die ROM-Images, die ins E(E)PROM gebrannt werden:
ZX81NUMEFI.zip
(11.74 KiB) 26-mal heruntergeladen
"ZX81MEFI.BIN" wird auf Adresse 0 geladen
"MEFI64K.BIN wird auf Adress $2000 geladen
Die 2. Hälfte im 32KB E(E)PROM wird (noch) nicht benutzt

Da nun Ollis Treiber nicht mehr mit dabei sind, kann man auf den USB-Stick nur über UFM bzw. Toms für NU angepassten USB-Treiber zugreifen (siehe hier: http://forum.tlienhard.com/phpBB3/viewt ... 350#p26905).
Microdisk und Display sind (derzeit) nicht nutzbar. Aber das kann ja noch kommen ...

Gruß
Siggi

Nachtrag: Details zum LOAD/SAVE-Patch des ZX81 Roms zum direkten Start von MEFISDOS kann man im TM nachlesen (ab Seite 24):
http://forum.tlienhard.com/magazin/2005/magazin_505.pdf

Edit am 12.2.17: Fehler in Pin Nummerierung korrigiert.
Zuletzt geändert von siggi am 12.02.2017, 20:29, insgesamt 3-mal geändert.
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 29.01.2017, 18:25

Und so sieht das Dioden-AND im Schaltplan aus:
nu-mefi_640x338.jpg
nu-mefi_640x338.jpg (41.67 KiB) 1964 mal betrachtet
Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: Umbauten am ZX81NU

Beitrag von Joachim » 29.01.2017, 19:08

Hallo Siggi,
schätze, da werde ich mich dranhängen.
Heißt das, dass die restlichen Schaltungsteile (zweites Latch) auf der Mini-Mefisdos-Platine auch getestet sind oder hat sich das auf deinen Lochrasteraufbau bezogen?
Schade, dass das Display nicht angesteuert werden kann. Ich habe doch extra selbiges in die Frontplatte bzw. ZX81-Gehäuse eingebaut, damit man es sieht. Besteht Hoffnung, dass man die Routinen wieder implementieren kann?
Viele Grüße!
Joachim


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

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 29.01.2017, 19:50

Hallo Joachim
ja, Deine Mini-Mefisdos-Platine funktioniert vollständig.

Bezüglich anderer Hardware im NU: man könnte Ollis Treiber-Sourcen (nachdem man sie verstanden hat :wink: ) ja in ASDIS-Treiber umbauen. Alternativ kann man Ollis-Treiber (m. W. in Page 3 des Orignal-Roms) auf $4000 im neuen Rom (und damit auf $0 in der 2. Page) laden. Dann muß man m.E. "nur" noch den Einsprung vom Basic ins Treiber-Rom neu implementieren (Paging machen und Aufruf-Umgebung aus Ollis Software nachbilden).

Kommt Zeit, kommt Mahlerts :wink:

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

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 01.02.2017, 18:57

So, ich habe mir jetzt mal ein Treiberinterface zu Ollis Treibern für die Ansteuerung des Mini-Displays von Basic aus gebastelt, das auch ohne Ollis andere Software auf meinem Mefisdos-NU läuft. Dazu habe ich mir Ollis Treiber in der 4. Bank seines NU-Roms (also ab Adresse $6000) ins Mefisdos-NU-Rom auf die 2. 16K Bank ab Adresse 0 (also Adresse $4000 im 32K EEPROM) gebrannt. Dies wird dann durch den IN-Befehl eingeblendet auf Adresse 0.

Ausgehend von Ollis Code im Treiber-ROM, wo mit SAVE "&TEXT" aufs Display geschrieben wird:

Code: Alles auswählen

org     03ABH   ;(3A8+3)
	 ; This is the patch in the ZX81 ROM:
	; IN NAME (starting AT 3AB) 6 Bytes
				;PUSH BC
	 LD A,(4001H)      ;LD BC, 256*(L_DRIV81) + PORT_LATCH 	; SWITCH TO SHADOW ROM
	 ADD A,A		;IN B,(C)
	 NOP
	 NOP
	; Here we are
	 POP BC			; Back to old SP

habe ich mit ASDIS ein MC erstellt, mit dem per PRINT USR 16520,"&TEXT" das gleiche passiert.

Code: Alles auswählen

          4082LOAD LD BC,$0340    014003  
          4085        JR GONU        1804    
          4087        NOP               00      
          4088SAVE LD BC,$02F6     01F602  
          408BGONU PUSH BC        C5      
          408C       RST 20             E7      
          408D       CALL $0F55       CD550F  
          4090       PUSH BC          C5      
          4091       LD BC,$EC5F     015FEC  
          4094       IN B,(C)           ED40    
          4096      JP $03AF          C3AF03  
Das MC liegt in der REM-Zeile ab 16514, Einsprung für SAVE ist 16520. Das Programm kann auch auf beliebiger anderer Adresse laufen. Source ist in A$
nudrv.p
(1.04 KiB) 21-mal heruntergeladen
Und hier ist ein kleines Test-Programm (müßte auch auf dem "normalen" NU laufen)
nudrtest.p
(1.09 KiB) 22-mal heruntergeladen
Achtung: das habe ich nur fürs Mini-Display vorgesehen und getestet (ich brauche bei Mefisdos die Microdisk nicht und benutze UFM für USB). Microdisk und VDRIVE könnte man darüber auch erreichen, aber das funktioniert nicht richtig. Also lieber bleiben lassen ...

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

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 03.02.2017, 18:08

Kaum macht man's richtig, schon geht's :D

In Ollis Treibersoftware ermittelt Olli ja anhand der Ret-Adresse auf dem Stack, ob sein Treiber von LOAD oder SAVE aufgerufen wird. Im Code sieht das so aus:

Code: Alles auswählen

; Check LOAD OR SAVE
    POP HL    ; Fetch return addr, do not use this later on
    LD A,L
    CP 043H    ; from LOAD?
    JR NZ, NOLOAD
    ; LOAD function
    CALL HW_NU_DISP_LED
    db        "V-LD"
    JP VD_LOAD
NOLOAD:
    CP 0F9H    ; from SAVE?
    JR NZ, NOSAVE
    CALL HW_NU_DISP_LED
    db        "V-SV"
    JP VD_SAVE
NOSAVE:
Dies habe ich in meinem Treiberinterface zwar berücksichtigt, habe aber die Adressen der LOAD/SAVE-Routine im ROM übergeben, während Olli eine um 3 Byte höhere Adresse erwartet, von wo der Call der NAME Routine im Rom abgesetzt wurde.

Nachdem ich das nun korrigiert habe, kann ich mich über mein Treiberinterface nun auf allen Olli-NU-Laufwerken (Display, USB, Microdisk) herumtreiben, auch wenn der NU mit MEFISDOS-Rom läuft :mrgreen:

Hier ist das Treiberinterface (samt Source in A$):
NUDRV2.P
(1.04 KiB) 23-mal heruntergeladen
Gruß
Siggi

PS: Im Mefisdos-ROM ist ja auch ein Druckertreiber-Patch drin. Man könnte nun auch einen Druckertreiber schreiben, der ins hohe Ram geladen wird und der mit LPRINT "HUHU" direkt aufs Mini-Display schreibt ...
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: Umbauten am ZX81NU: Anschluß Backplane

Beitrag von siggi » 19.02.2017, 14:11

Noch ein paar Umbauten, wenn man den NU wie ich nutzen will:
wie schon meinen alten ZX81-Laptop (aufgebaut mit Original ZX81) wollte ich auch meine beiden NUs ("Mefisdos-NU" und "Standard-NU") an der Lego-Dockingstation betreiben, die eine kleine Backplane mit 4 Slots (ungepuffert) enthält.
Mein alter Laptop lief damit problemlos, aber meine NUs nicht :(

Schon der Anschluß der unbestückten 4-Slot-Backplane brachte sie meist zum Absturz (besonders bei HIRES-Programmen (IRC-Chat) hatte ich satte Abstürze). So habe in Ollis Schaltplan mal nachgeguckt, was anders zum ZX81 ist, was sich Richtung Backplane auswirken könnte: es sind hochohmigere Widerstände an vielen Stellen verbaut, die bei höherer Buslast (durch die Backplane) einen Timingunterschied bewirken können (verschliffene Flanken). Also habe ich mal wieder den Lötkolben gegriffen und Richtung Original ZX81 zurückgebaut ...

Zuerst habe ich ein bekanntes Timing-Problem bei HRG im RAM entschärft (wie auch Wilf schon mal geschrieben hat: "The RAM ENABLE signal uses both RFSH and MREQ because the RFRSH signal is asserted before MREQ, which is important for fetching hires patters from RAM.", siehe http://www.user.dccnet.com/wrigter/inde ... mories.htm )

Also habe ich bei IC16 (Pin 15 aus der Fassung gebogen) statt nur den Signals "/MREQ" eine (über ein Dioden-AND-Gatter realisierte) AND-Verknüfung von /MREQ AND /RFSH zugeführt. Das hat die HIRES-Geschichte schon mal entspannt, aber beim Hochlauf des NU hatte ich immer noch sichtbare Probleme:
P1110847_640x480.JPG
P1110847_640x480.JPG (79.67 KiB) 1787 mal betrachtet
Also habe ich weitere Rückbauten am "Standard-NU" durchgeführt:
- Änderung der Widerstände im Datenbus (R2-R9: 820 Ohm) auf ca. 450 Ohm (statt 470 beim ZX81) durch Parallelschalen von 1K Widerständen: kein sichtbarer Erfolg
- Änderung der Widerstände im Adressbus (R11-R18,R20: 1,5 KOhm) auf 1KOhm durch Tausch der Widerstände: kein sichtbarer Erfolg
- Änderung der Widerstände R19 und R10 (/RAMCS, /ROMCS)von 1KOhm auf 500 Ohm durch Paralleschalten 1K: kein sichtbarer Erfolg
- Änderung des Widerstandes R27 (/WAIT, 3K3) auf 1K (wie beim ZX81): kein sichtbarer Erfolg
- Kurzschließen des Widerstandes R26 (/NMI,3K3) (wie beim ZX81: direkt): BINGO! :mrgreen:

Die letzte Änderung (sowie die erste Timing-Sache) habe ich auch an meinen Mefisdos-NU durchgeführt: beide laufen nun sauber an meiner 4-Slot-Backplane (wie mein alter Laptop) :mrgreen:

Diese Änderung wird man auch durchführen müssen, wenn man die Backplane über Treiber anschließt, denn das /NMI-Signal geht da ja auch dort ungepuffert weiter und wird durch die Buslast und den Widerstand so verzerrt, daß das Bild gestört wird!

Gruß
Siggi

Edit: Nachtrag: ach ja, ich habe auch ein paar kurze, dicke Drähte zwischen 9V/+5V/GND am Spannungsregler zu den Anschlüssen am Bus-Stecker gelegt, damit bei Stromversorgung vom/zum Bus nicht alle Spannungshäcker über die Leiterplatte müssen und dort die Bits durcheinanderwirbeln :wink:
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: Umbauten am ZX81NU

Beitrag von tokabln » 19.02.2017, 15:01

Ich kann die /NMI Leitung noch puffern. Ein Ein-/Ausgang ist noch frei. Da ich gerade ein paar Tage im Urlaub bin kann ich das aber erst Mitte der kommenden Woche machen. Wenn das zielführend ist mach ich das gerne. Bin eh noch am Handrouting und habe da so meine Probleme.
Lieben Gruß Torsten
BMZ MFA, ZX80Core, AX81, ZX81, ZX81NU, Spectrum+, Harlequin, Amstrad NC100, Cambridge Z88, C64, C128D, Amiga 500, Amiga 1200, Atari Portfolio, HP200LX, IBM PC 5155, TP755c, T41, PS/2 (Model 40SX), PS/2E, Accura 101, Apple //e

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 19.02.2017, 15:14

Die /NMI-Leitung ist ein Eingang zur CPU, die als Ausgang zu puffern also erstmal falsch.
Andererseits kann man sie als Eingang beim Zeddy nicht benutzen, denn der wird von der ULA direkt getrieben (beim NU könnte man es von aussen übersteuern, aber wozu).
Eine beim Zeddy sinnvolle Anwendung kenne ich nicht. Allerdings kann es sein, daß externe Schaltungen da "mithören", was im Zeddy so passiert (Chroma? ZxBlast?). Also sehe ich erstmal keinen Änderungsbedarf an der Treiberplatine.

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

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

Re: Umbauten am ZX81NU

Beitrag von Joachim » 22.02.2017, 11:22

Hallo Siggi,
meine Baustelle sieht im Moment so aus:
P1050302.jpg
P1050302.jpg (114.77 KiB) 1748 mal betrachtet
Auf dem Bus steckt oben die Mefisdos-Platine und unten die PIO.

Dazu habe mir eine mini-backplane gefräst.

P1050301.jpg
P1050301.jpg (99.47 KiB) 1748 mal betrachtet
P1050304.jpg
P1050304.jpg (78.07 KiB) 1748 mal betrachtet
Es geht vorwärts!
Viele Grüße!
Joachim


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

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

Re: Umbauten am ZX81NU

Beitrag von PokeMon » 22.02.2017, 20:06

Sieht chic aus, die selbstgefräste Backplane. :wink:
Wer seinen Computer ehrt, lebt nicht verkehrt.

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 26.02.2017, 19:26

So, ich habe die beiden Progrämmchen zum Austausch des Rams bei 8K mit Shadow-Ram bei 32K und das NU-Treiber-Interface zu einem "NU-Tool" zusammengefasst, damit man einfacher mit dem Mefisdos-NU an die spezielle NU-Hardware drankommt.
Das Programm kann überall im Ram liegen, die Funktionen zum Ramtausch mit dem Shadow-Ram laufen aber nur im Bereich 16-32K, weil sie sich sonst selbst ausblenden würden.
Mit Mefisdos speichert man sich am besten den reinen M/C ab und lädt ihn bei Bedarf auf irgend eine passende Adresse.
Hier werden nun die gesamten 16KB Shadow-Ram ab 32K zum Zwischenspeichern von 2 x 8KB ab 8K genutzt.

Es gibt 4 Einsprungpunkte (siehe Listing):

Code: Alles auswählen

 10 REM NU-TOOL                
 15 REM CODE 16514 LENGHT 98 BYTE                              
  20 SAVE "D:TMP/NU-TOOL -J"    
  30 REM USR X: SWAP 8K<->32K   
  40 REM USR X+3: SWAP 8K<->40K 
  50 REM USR X+6,S$: NU=LOAD S$ 
  60 REM USR X+9,S$: NU=SAVE S$
Hier ist das ASDIS-Listing (Source in A$)

Code: Alles auswählen

8000;NU TOOL                    
8000;MADE FEB.2017 BY SIGGI     
8000EX1  JR EXX1        182B    
8002     NOP            00      
8003EX2  JR EXX2        181D    
8005     NOP            00      
8006LOAD JR NULD        1804    
8008     NOP            00      
8009SAVE JR NUSV        1806    
800B     NOP            00      
800C;;                          
800C;NU "LOAD" ENTRY            
800CNULD LD BC,$0343    014303  
800F     JR GONU        1803    
8011;;                          
8011;NU "SAVE" ENTRY            
8011NUSV LD BC,$02F9    01F902  
8014GONU PUSH BC        C5      
8015     RST 20         E7      
8016     CALL $0F55     CD550F  
8019     PUSH BC        C5      
801A;SWITCH TO NU DRIVER ROM    
801A     LD BC,$EC5F    015FEC  
801D     IN B,(C)       ED40    
801f     JP $03AF       C3AF03  
8022;;;;;;;;;;;;;;;;;;;;;;;;    
8022;;                          
8022;EXCHANGE RAM AT 8K WITH    
8022;SHADOW RAM AT 40K          
8022EXX2 LD A,$9E       3E9E    
8024     RST 10         D7      
8025     CALL KFAST     CDE702  
8028     LD DE,$A000    1100A0  
802B     JR EXXW        1809    
802D;;                          
802D;EXHANGE RAM AT 8K WITH     
802D;SHADOW RAM AT 32K          
802DEXX1 LD A,$9D       3E9D    
802F     RST 10         D7      
8030     CALL KFAST     CDE702  
8033     LD DE,$8000    110080  
8036EXXW LD HL,$2000    210020  
8039     LD B,H         44      
803A     LD C,L         4D      
803BCLOOPLD A,(HL)      7E      
803C     EXX            D9      
803D     LD BC,SHRAM    015F6C  
8040     IN B,(C)       ED40    
8042     EXX            D9      
8043     EX AF,AF       08      
8044     LD A,(DE)      1A      
8045     EX AF,AF       08      
8046     LD (DE),A      12      
8047     EXX            D9      
8048     LD BC,MRAM     015F4C  
804B     IN B,(C)       ED40    
804d     EXX            D9      
804E     EX AF,AF       08      
804F     LD (HL),A      77      
8050     EX AF,AF       08      
8051     INC HL         23      
8052     INC DE         13      
8053     DEC BC         0B      
8054     LD A,B         78      
8055     OR C           B1      
8056     JR NZ,CLOOP    20E3    
8058     CALL SFAST     CD0702  
805B     LD A,$3D       3E3D    
805D     RST 10         D7      
805E     LD A,$76       3E76    
8060     RST 10         D7      
8061     RET            C9      
                 
LAUFADR=32768=$8000             
ABLEGEN=16514=$4082             
M-CODE =00098=$0062             
LISTING=00625=$0271             
ZEILEN =00072=$0048             
KOMMENT=00014=$000E             
BEFEHLE=00058=$003A             
VARIABL=00000=$0000             
MARKEN =00004=$0004             
LABELS =00011=$000B             
AUFRUFE=00012=$000C             
FREI AB=18289=$4771             
BYTES  =14459=$387B             
                                
marken                          
KFAST=00743=$02E7               
MRAM =19551=$4C5F               
SFAST=00519=$0207               
SHRAM=27743=$6C5F               

labels                          
CLOOP=32827=$803B               
EX1  =32768=$8000               
EX2  =32771=$8003               
EXX1 =32813=$802D               
EXX2 =32802=$8022               
EXXW =32822=$8036               
GONU =32788=$8014               
LOAD =32774=$8006               
NULD =32780=$800C               
NUSV =32785=$8011               
SAVE =32777=$8009               

Und hier der Source im BASIC-Programm:
NU-TOOL.P
(1.84 KiB) 20-mal heruntergeladen
Gruß
Siggi

Edit: Nachtrag
Bitte nicht vergessen, VOR Aufruf der Speichertauschfunktionen das RAM bei 8K einblenden (im Programm wir das nicht getan), sonst kopiert man das ROM bei 8K ins Shadow-Ram (statt des Rams)!
Zuletzt geändert von siggi am 26.02.2017, 19:49, insgesamt 1-mal geändert.
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: Umbauten am ZX81NU

Beitrag von Joachim » 26.02.2017, 19:42

Hallo Siggi,
vielen Dank für deine Programme. Meinen Umbau habe ich soeben abgeschlossen und es lief -verdächtigerweiser - auf anhieb. Teste jetzt das neue 64K-Mefisdos 'mit ohne' Prüfsummenbildung ;)
Viele Grüße!
Joachim


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

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

Re: Umbauten am ZX81NU: Paging ab 48K (für Mefisdos)

Beitrag von siggi » 20.03.2017, 15:47

Geschafft: mein NU läuft nun endlich auch mit "großem MEFISDOS" (durch Paging im 48K-Bereich, da hatte ja Olli noch eine ungenutzte 16K Shadow-Ram-Bank versteckt) :mrgreen:

Damit wird beim Laden/Speichen mit Mefisdos nur noch der Speicherbereich ab 48K genutzt und Programme ab 32K werden nicht mehr überbügelt wie beim 64K-Mini-Mefisdos.

Wenn's jemand auf die schnelle (vor Mahlerts) nachbauen will (mit diversen Rs, Ds, und Ts): Bescheid
Ansonsten kommt die Umbaubeschreibung erst danach ...

Gruß
Siggi
Zuletzt geändert von siggi am 20.03.2017, 16:34, insgesamt 1-mal geändert.
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: Umbauten am ZX81NU

Beitrag von Joachim » 20.03.2017, 16:05

Sensationell! Damit kann ich einen ZX81NU als Fräsrechner einsetzen. Außerdem wird Mefisdos noch salonfähiger.
Den Umbau werde ich wahrscheinlich nicht bis Mahlerts schaffen. Danach aber bitte die Anleitung posten. Vielen Dank schon mal vorab!
Viele Grüße!
Joachim


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

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

Re: Umbauten am ZX81NU

Beitrag von ZX-Heinz » 20.03.2017, 17:22

Mir schwebt auch ein Umbau auf H4TH (statt ZX80 :oops: ) vor. Werde ich mit Euch in M. besprechen.

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 20.03.2017, 22:04

Ist denn dazu ein Umbau notwendig? Ist am Forth-Rom was besonders? Läuft es denn anderswo (EO, ...) nur mit Nicht-Standard-Einstellungen (die einen Umbau erfordern würden)?

Wenn nein, dann würde vielleicht ein Überbügeln des ZX80-Roms mit dem Forth-Rom reichen (liegt in Ollis NU-ROM in page 2 und damit im 32KByte-Eprom ab Adresse $4000). Hier hat Paul mal gemeint, daß das einfach ginge:
viewtopic.php?f=2&t=1029&hilit=ASZMIC&start=250#p23762
Und da hat Olli gemeint, daß das nicht so einfach ginge:
viewtopic.php?f=2&t=1029&hilit=ASZMIC&start=250#p23774
Und ab da habe ich das Thema nicht mehr weiter verfolgt:
viewtopic.php?f=2&t=1029&hilit=ASZMIC&start=250#p23778

Also: am besten ausprobieren ...

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

Benutzeravatar
sbetamax
User
Beiträge: 447
Registriert: 04.03.2006, 22:01
Wohnort: Deutschland / Hessen / Nidda
Kontaktdaten:

Re: Umbauten am ZX81NU

Beitrag von sbetamax » 20.03.2017, 22:51

Ich bringe meinen Brenner mit, da können wir das ja mal versuchen.
Gruß Stephan
_______________
ZX80 (nachbau), ZX81, ZX 2000, ZX NU, IQ8300, ZX Spectrum, ZX Spectrum plus, ZX Spectrum 128, Harlequin, C64

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 21.03.2017, 09:33

Gerade am EO ausprobiert: H4TH bootet dort nur, wenn ein "16K Ram pack" emuliert wird, nicht bei 48K (wie sie der NU normalerweise "emuliert" :wink: )

Vielleicht läuft es dann auf dem NU, wenn er nur mit 32K Ram bestückt ist.....
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: Umbauten am ZX81NU

Beitrag von ZX-Heinz » 21.03.2017, 10:24

@siggi: Ich bin gerade dabei, ein Vdrive in H4TH einzubinden und hoffe, Stefans Platinen morgen zu erhalten. Soft- und hardwaremäßig habe ich das vorbereitet, nun fehlt das Experiment. Dies Vorgehen erfordert aber als zusätzliche Hardware eben das Vdrive. Im NU ist das aber alles schon vorhanden, der NU also komfortabler. Insbesondere auch die mögliche Umschaltung ZX81/H4TH.

H4TH ist grundverschieden vom ZX81 Basic, ganz andere Adressen und Ausgaberoutinen. Ebenso LOAD/STORE. Oder die Abfrage der Editorzeile, z.B. für SAVE"*:xyz:nn:mm". Auch ein Grund, warum H4TH im EightyOne kein Speichern zulässt (ausgenommen SAVE Memory-Block).
Fazit: Man braucht Eingriffe und Umbiegen einiger Befehle. Anders als bei ZX-Basic können aber Forth-Befehle direkt für LOAD/STORE verwendet werden, muss also nicht alles auf MC-Basis ablaufen. Zwei Codepgme zu Schreiben/Lesen eines Bytes zum/vom Vdrive als MC wäre schon genug. Die RAM/ROM-Bereiche, insbesondere Shadow und deren Umschaltung, beim NU kenne ich nicht.

H4TH ist für 16k RAM geschrieben. Ich bin aber überrascht, dass er nicht automatisch auf 48k läuft. Man muss sich dazu einmal die Ini-Sequence anschauen.

In M. können wir das gern besprechen.

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 21.03.2017, 10:45

ZX-Heinz hat geschrieben:
21.03.2017, 10:24
Zwei Codepgme zu Schreiben/Lesen eines Bytes zum/vom Vdrive als MC wäre schon genug. Die RAM/ROM-Bereiche, insbesondere Shadow und deren Umschaltung, beim NU kenne ich nicht.
Tut's auch nur eines? Siehe ZXNUROM3.ASM Funktion "TRANSB" in den Sourcen von Olli:

Code: Alles auswählen

;
; Try to Read a byte from VDRIVE, returns Byte in A, carry 0 if data ok, corrupts: BC,DE,AF
;
READB:     ; SLOW but compact variant of READB
	LD E,IP_S1	; FLag for READ access
	; FALL THROUGH to TRANSB
	
; Vdrive - Transfer a byte (Read or Write depending on Flag in E)
; Data In/Out: A
; Flag for R/W: E: read IP_S1, write IP_S0
; Corrupted: BC,E,AF
TRANSB:
	LD BC, 256*(IP_S1)+PORT_LATCH
	; Start bit, selected
	LD B,IP_S1
	IN B,(C)
	; Read indication bit: IP_S1, write IP_S0
	LD B,E
	IN B,(C)
	; Read from data indication
	LD B,IP_S0
	IN B,(C)
	; Daten seriell in A einlesen
	LD E,8	; one byte has 8 bit ( looked it up )
BITLOOP:	  
	LD B,IP_S0_SHIFTED ; Move here as we have to re-init on every cycle
	RLCA	; highest bit in A to carry
	RL B	; carry to B
	RRCA	; restore A
	IN B,(C)  ;  clock/read/write
	RL B	; B to carry
	RLA		; carry to A
	DEC E
	JR NZ,BITLOOP
	; read status flag: 0=success , 1=failed
	LD B,IP_S0
	IN B,(C)
	RL B		; Status to carry
	; dummy clock unselecting device
	LD B,IP_OFF
	IN B,(C)
	RET NC	; Status in carry ok: just return
	
	; Status was not ok, test for BREAK here
	LD A,7FH	; activate BREAK row
	IN A,(0FEH)	; keyboard read
	RRA
	RET C		; carry set, no break
	; FTest for shift in addition
	LD A,0FEH	; activate SHIFT row
	IN A,(0FEH)	; keyboard read
	RRA
	RET C		; carry set, no break
	; have SHIFT-BREAK
	POP HL		; Remove return address
	JP GOBACKBREAK
H4TH ist für 16k RAM geschrieben. Ich bin aber überrascht, dass er nicht automatisch auf 48k läuft. Man muss sich dazu einmal die Ini-Sequence anschauen.
Im EO läuft's nur mit mehr als 16K, wenn man "M1 NOT Circuit" abschaltet.

Gruß
Siggi

Ergänzung: wenn Forth statt des ZX80 im ROM liegt, dann ist lt. Ollis Doku Page 2 selektiert und die entsprechenden Bits im "PORT_LATCH" "ROMpage0" und "ROMpage1" müssen konstant gehalten werden (auf 0 bzw. 1), wenn Du an den anderen Bits rumklimperst, um mit dem Vdrive zu plappern. In Ollis Code (ZXNU_DEF.asm) sieht das so aus:

Code: Alles auswählen

#define PORT_KBIN	0feh	; Keyboard input
#define PORT_LATCH	05Fh	; Latch output

; Latch Bits
;		0 Dataout
;		1 /CS Bus
;		2 SELCLK
;		3 /CS intern
;		4 Reserved (0)
;		5 RAMpage
;		6 ROMpage0
;		7 ROMpage1

#define L_BASE		0Ch
#define L_BAS_RAMSH 20h+L_BASE
#define L_USER81	40h+L_BASE	; ZX81 User mode, ROM page 1
#define L_USER80	80h+L_BASE	; ZX80 User mode, ROM page 2
#define L_TAPE81	0c0h+L_BASE	; ZX81 (tape) User mode, ROM page 3
#define L_DRIV81	0e0h+L_BASE	; ZX81 Driver shadow page mode, RAM shadow, ROM page 3
#define L_DRIV_NOR	0c0h+L_BASE	; ZX81 Driver shadow page mode, NO RAM shadow, ROM page 3
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

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

Re: Umbauten am ZX81NU

Beitrag von ZX-Heinz » 21.03.2017, 11:30

Hallo siggi,
Ollis Routine ist i.w. die (welche auch sonst?) die ich zum Lesen/Schreiben verwende. Um Ollis derkt aufrufen zu können, bräuchte ich die Adresse. Wo finde ich die?
H4TH läuft im EO auch mit 48k, wie ich gerade probiert hatte (und Du geschrieben hast). Eine Merkwürdigkeit:
Im 16k-Modus hat der Editorscreen die Anfangsadresse #FD00 (Software) und #7D00 hardwaremäßig. Im 48k-Modus sollte man auch #FD00 hardwaremäßig erwarten, ist aber #BD00!

Am besten, wir besprechen das in M. Vielleicht läuft es auf dem NU nicht, weil IO-ports zum Umschalten der RAM-Bereiche verwendet werden, die von Forth angesprochen werden? Gibt es eine Liste der durch NU belegten IO-Ports? Was ist mit #FD?
Gruß, Heinz

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 21.03.2017, 11:45

ZX-Heinz hat geschrieben:
21.03.2017, 11:30
Hallo siggi,
Ollis Routine ist i.w. die (welche auch sonst?) die ich zum Lesen/Schreiben verwende. Um Ollis derkt aufrufen zu können, bräuchte ich die Adresse. Wo finde ich die?
Olli fragen.
Er hat Sourcen veröffentlicht, aber keine MAP oder LST-Files, die die Ablageadressen enthalten würden.
Gibt es eine Liste der durch NU belegten IO-Ports?
Olli fragen. Oder Reverse-Engineering in Ollis Sourcen und Schaltplänen machen.

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

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

Re: Umbauten am ZX81NU

Beitrag von siggi » 21.03.2017, 13:54

ZX-Heinz hat geschrieben:
21.03.2017, 11:30
Hallo siggi,
Ollis Routine ist i.w. die (welche auch sonst?) die ich zum Lesen/Schreiben verwende. Um Ollis derkt aufrufen zu können, bräuchte ich die Adresse.
Hallo Heinz
Ollis Treiberroutinen wirst Du nicht direkt aufrufen können. Denn sie liegen auf der Rom-Page 3. Um sie zu starten, müßtest Du also das Forth-Rom (auf Rom-Page 2) ausblenden und das Treiberrom einblenden. Im Slow-Modus führt das vermutlich sofort zum Absturz, weil die Display-Routine des Forth nicht mehr da ist. Und die Video-Routinen, die Olli im Treiber-Rom drin hat, passen nur zum BASIC-Rom und dessen Systemvariablen. Diese werden aber wohl nicht zum Inhalt des Rams passen, wie er von Forth hinterlassen wurde.

Und auch im Fast-Modus wird das nicht gehen, denn die Treiber schalten nach getaner Arbeit selbst wieder die Romseiten um, gehen da aber ins BASIC-Rom zurück (auf Rom-Page 1). Dann wird es da knallen, weil dann der Memoryinhalt aus Forth nicht zu dem passt, was BASIC erwartet.

Mit Mefisdos und meinen Tools zum Starten von Ollis Treibern klappt das nur, weil da das Paging paßt und wieder auf die richtige Page zurückgeschaltet wird.

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

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

Re: Umbauten am ZX81NU

Beitrag von PokeMon » 21.03.2017, 14:37

Also ich habe das ja schon mal nachvollzogen. Normalerweise erfordert das H4TH explizit das Spiegeln von ROM und RAM (!).
Ich hatte das schon mal untersucht und hier geschrieben. M.E. wurde da im EightyOne absichtlich getrickst, um das H4TH zum Laufen zu bringen. Das H4TH hat eine wirklich schräge Speicherverwaltung.

viewtopic.php?f=2&t=1467&p=22306&hilit= ... one#p22306
Wer seinen Computer ehrt, lebt nicht verkehrt.

Antworten