Fazit:
Bloss nichts aendern!
OK, da müsste also im besten Fall noch etwas Nacharbeit rein oder im schlechtesten Fall geht es (für einen Z80-Einsteiger) garnicht.
Fazit:
Bloss nichts aendern!
OK, da müsste also im besten Fall noch etwas Nacharbeit rein oder im schlechtesten Fall geht es (für einen Z80-Einsteiger) garnicht.
Wie viel Arbeit ist es, den Code für den 8085 Prozessor umzuschreiben?
Wenn du die ganzen Mnemonics aendern willst, viel Spass!
Brauchst du aber gar nicht, du musst "nur" die Z80-spezifischen Befehle entfernen. Das laesst sich schon hinkriegen.
ABER...
Dadurch wird das Programm laenger und es aendern sich wieder ein paar Adressen usw usw.
Wenn du einen anstaendigen Assembercode hast, ist das nicht so schwer (solange keine Index-Register benutzt werden und Interrupts etc lassen wir auch mal weg). Aber dieses diassemblierte Zeug ist weit weg von einem anstaendigen Assemblercode.
BTW: djnz heisst "decrement B and jump if not zero"
Meint:
dec b
jp nz,<Adresse>
Aber warum die Muehe? Wegen dem Midicom?
Der hat die Floppyroutinen schon drin. Es geht gerade "nur" um das Interface.
im besten Fall noch etwas Nacharbeit rein
Ein sehr weitgefasster Begriff.
Um die o.g. Punkte wirklich bearbeiten zu koennen, muss man sich sehr sicher sein, das Programm verstanden zu haben.
Unter diesen Umstaenden ist das sehr wage. Hat man es wirklich verstanden, kann man es auch neu schreiben.
Aber warum die Muehe? Wegen dem Midicom?
Der hat die Floppyroutinen schon drin. Es geht gerade "nur" um das Interface.
Gute Frage. Ich hatte gehofft, mit der Routine, einem 8255 und einer VC1541 ein universelles Speichermedium für meine 8 Bit Rechner zu haben. 8085, Z80 und 6502/6510 Architektur.
Konkret brauchen tue ich das nicht, aber man weiß ja nie...
Und ja - zurück zu den eigentlichen Routinen im Midicom. Um die geht es hier ja eigentlich.
Was ich gerade mit dem Oszi rausgefunden habe: Der PIN 15 Ein Pin am Interface X11 geht kurz von High nach Low, wenn man die Floppyroutine mit S F aufruft. Nach meiner Messung dauert der Impuls 15 Mikrosekunden. Das müsste ein Pin am PIO1 sein.
So jetzt aber erstmal fröhliche Weihnachten.
Gute Frage. Ich hatte gehofft, mit der Routine, einem 8255 und einer VC1541 ein universelles Speichermedium für meine 8 Bit Rechner zu haben. 8085, Z80 und 6502/6510 Architektur.
Das ist natürlich eine interessante Geschichte.
Z.Zt. würde ich die Routinen des Midicom dafür vorziehen. Die sind für den 808x und deutlich aufgeräumter.
Das müsste Pin PC1 am PIO1 sein.
Die PCx der PIO1 dienen als Art Adresse für die unterschiedlichen Bausteine an der PIO1, ADC, DAC, Centronics etc.
Mess man lieber PA6 und PA7. Da muss es noch ein oder zwei Leitungen mehr geben an der PA, aber welche weiss ich noch nicht.
So jetzt aber erstmal fröhliche Weihnachten.
Danke, wünsche ich dir auch.
Habe mittlerweile eine lauffähige Debug Umgebung und dank funkenzupfer ein immer übersichtlich werdendes Disassembly des Midicom Roms.
Via Terminal kann ich den integrierten Tracemode oder den Single Step Mode benutzen.
Am Stecker X11 habe ich ein altes Floppykabel und kann dort auf die einzelnen Pins der PIO1 zugreifen.
Hier ein Teil der Floppyintitialisierungsroutine, die...
1. PA1-7 setzt und dann PB7 auf gesetzt überprüft.
2. PA 1-7 löscht und PB7 auf gelöscht überprüft
Diesen Teil der Routine kann ich durch einfaches überbrücken von PA7 nach PB7 auf "i.O." bekommen, aber das ist nur ein (kleiner) Teil des Ganzen.
Hier noch die Steckerbelegung (Kurzanleitung S.166):
Spannend und Stand heute völlig offen, ob die 1541 in den Weihnachtsferien noch das Zucken anfängt...
Spannend und Stand heute völlig offen, ob die 1541 in den Weihnachtsferien noch das Zucken anfängt...
Kurz Frage ... kann es auch eine 1541 sein oder muss es eine 1571 sein ... die 1571 hat ein etwas anderes DOS-ROM als die 1541, obwohl im 1571 DOS-ROM auch der 1541 Code ist ...
Aktuell gehen wir (Florian und ich) davon aus, daß die SRQ-Leitung nicht angeschlossen wird und somit der Burst-Mode der 1571 nicht verwendet wird.
Es ist also davon auszugehen, daß das ganze auch mit der 1541 läuft.
Um aber unbekannte Probleme beim Testen auszuschließen, ist dafür eine 1571 vorgesehen.
Wenn's damit funktioniert, kann mit einer 1541 weitergetestet werden.
Ich habe beide Floppys da, so dass das Testen dann kein Problem wird.
Um aber unbekannte Probleme beim Testen auszuschließen, ist dafür eine 1571 vorgesehen.
Das sehe ich auch so ... würde unbedingt auch erst mit einer 1571 anfangen ... die kann ja zusätzlich MFM (und ein paar CP/M - Formate) ... das kann die 1541 alles nicht. Ich finde diesen Thread superspannend ...
ob die 1541 in den Weihnachtsferien noch das Zucken anfängt...
Du hast ja das Jahr nicht dabei geschrieben.
Wird also klappen.
Ausserdem sind Termine bei solchen Projekten nicht nützlich.
Diesen Teil der Routine kann ich durch einfaches überbrücken von PA7 nach PB7 auf "i.O." bekommen, aber das ist nur ein (kleiner) Teil des Ganzen.
Aber ein sehr interessanter Teil.
Ich denke ich werd mal eine Schaltung auf einem Steckbrett probieren und von Toast_r eine Floppy leihen. Schau'n wir mal, vielleicht naechstes Jahr.
Habe mich durch die Floppyroutine bei Einsprungadresse 4000h durchge"traced" und bin bei einer eigenartigen Routine gelandet:
Mit einem jmp nach 5800h landet man in einer Routine, die im ROM nicht an dieser Stelle steht. Auch den jmp-Aufruf sucht man im ROM vergebens. Beides wird also erst zur Laufzeit generiert.
Hier wird der Kanal A auf Mode 1 Ausgabe geschaltet und Kanal B auf Mode 0 Eingabe. Kanal C ist ebenso auf Ausgabe gestellt. Das ganze sieht eigentlich nach einer Speicherfüllroutine aus ab Adresse 7000h, aber der Füllbefehl selbst fehlt!? Nur die Adressen 7FFBh bis 7FFFh werden einzeln befüllt:
FD_UNKNOWN:
mvi a,0a2h ; 5800 3e a2 >" ; A2h PortA: Mode1, Out; PortB: Mode0, In; PortC: Out
out PIO1CTRL ; 5802 d3 53 SS
lxi h,X7000 ; 5804 21 00 70 !.p
lxi b,X0fff ; 5807 01 ff 0f ...
X580a: mvi a,0ffh ; 580a 3e ff >.
out PIO1A ; 580c d3 50 SP
sub a ; 580e 97 .
mov m,a ; 580f 77 w
inx h ; 5810 23 #
dcx b ; 5811 0b .
mov a,b ; 5812 78 x
ora c ; 5813 b1 1
jnz X580a ; 5814 c2 0a 58 B.X
sub a ; 5817 97 .
out PIO1A ; 5818 d3 50 SP
mvi a,3eh ; 581a 3e 3e >>
sta X7ffb ; 581c 32 fb 7f 2{.
mvi a,99h ; 581f 3e 99 >.
sta X7ffc ; 5821 32 fc 7f 2|.
mvi a,0d3h ; 5824 3e d3 >S
sta X7ffd ; 5826 32 fd 7f 2}.
mvi a,PIO1A ; 5829 3e 50 >P
sta X7ffe ; 582b 32 fe 7f 2~.
mvi a,76h ; 582e 3e 76 >v
sta X7fff ; 5830 32 ff 7f 2..
jmp X5592 ; 5833 c3 92 55 C.U
Alles anzeigen
Leider habe ich es bei weiteren Versuchen nicht mehr geschafft den Trace bis zu dem jmp 5800h Aufruf zu verfolgen. So würde mich interessieren, wo dieser jmp steht und was im Register C steht.
Habe einen jmp 5800h gefunden: In Adresse 0001h (!)
Ist das die Warmstartroutine?
Memorydump der kompletten 64k zur Laufzeit im Anhang.
Bei Adresse 612Dh stehen die Bytes 00 58. Diese Adresse und Adresse 0001h sind die einzigen Vorkommnisse.
Ein sta X612d taucht fünf Mal im gesamten Dump auf.
Welcche Buechse der Pandora hast du denn da aufgemacht?
Adresse 0001 und 5800 und folgende liegen im EPROM und damit nicht aenderbar.
Eine Banking Logik habe ich im Schaltplan bisher nicht gefunden.
Hast du irgendwelche Module angesteckt?
Zum Code ab 5800:
5804 - 5814 schreibt 0x7E nach 7000-7FFF
Danach wird's interessant:
Der Code ab 581A schreibt folgenden Code nach 7FFB: (ausnahmsweise 8085 Mnemonics)
Danach Sprung nach 5592, das ist der default Kaltstart.
So, aus einem HALT kommt man nur per Interrupt oder Reset wieder raus.
Was sagt uns das?
und was im Register C steht.
Was willst du mit Register C?
Da bin ich auch gespannt...habe tatsächlich ein Zusatzboard(Hardwarebreakpoint) dranhängen. Muss ich mal abstecken und schauen, ob der Code dann auch da ist.
5804 - 5814 schreibt 0x7E nach 7000-7FFF
Ja, klar, es ist ein Memcopy ... das heißt Ziel<-Quelle ... habe das mov m,a genau anders herum interpretiert. Kann es sein dass die Schreibweise bei Motorolla 68000 Assembler genau umgekehrt ist!? Quelle->Ziel
Was willst du mit Register C?
In Zeile 13 steht ora c. Damit wird der Akuuinhalt mit Register C per OR verknüpft, oder? Das folgende JNZ springt zurück in die Schleife, wenn die OR-Verknüpfung nicht Zero ist. Wenn Register C nicht Null ist, würde das ganze immer zurückspringen, da das Ergebnis nie Null werden könnte. Macht das Sinn
Kann es sein dass die Schreibweise bei Motorolla 68000 Assembler genau umgekehrt ist!? Quelle->Ziel
Auf jeden Fall.
In Zeile 13 steht ora c. Damit wird der Akuuinhalt mit Register C per OR verknüpft
Mit lxi b,X0fff wird BC=7fffh
Das
mvi a,b
or c
jnz X580a
testet BC != 0.
Mehr nicht.
Wenn du doch vom 68000 kommst , koennen wir uns auf die Z80 Mnemonics einigen?
Ja, klar, es ist ein Memcopy ... das heißt Ziel<-Quelle ... habe das mov m,a genau anders herum interpretiert. Kann es sein dass die Schreibweise bei Motorolla 68000 Assembler genau umgekehrt ist!? Quelle->Ziel
So isset. Intel und Zilog: Ziel links, fast alle anderen: Ziel rechts.
Wenn du doch vom 68000 kommst , koennen wir uns auf die Z80 Mnemonics einigen?
Mal überlegen...Ich plane ein größeres Projekt, was auf der Intel Schiene 8008 - 8080 aufbaut. Deswegen will ich dort dann in Intel Mnemonics fit sein.
Wenn es hier weiterhilft und für Dich eine Erleichterung ist, schalte ich auf Z80 Mnemonics um. Dann muss ich halt später nochmal Vokabeln lernen.
was auf der Intel Schiene 8008 - 8080 aufbaut
Ok, 8008 weiss ich nicht, aber fuer den 8080 kannst du auch die Z80 Mnemonics verwenden, musst dich nur bei den Opcodes einschraenken.
Wenn es hier weiterhilft
Was heisst helfen, ist fuer mich nur gewohnter und weniger fehleranfaellig.
Welche Buechse der Pandora hast du denn da aufgemacht?
Adresse 0001 und 5800 und folgende liegen im EPROM und damit nicht aenderbar.
Eine Banking Logik habe ich im Schaltplan bisher nicht gefunden.
Hast du irgendwelche Module angesteckt?
Habe das Zusatzboard abgeklemmt und nochmal nachgeschaut:
Der "Geistercode" bei 5800h ist immer noch da.
Welches Zusatzboard?
Kannst du dein EPROM auslesen?
Das Zusatzboard ist das LN Measurement Panel with Address and Trigger SO4000-2N.
Ich habe von meinem anderen Midicom das ROM ausgelesen, nicht von dem, an dem ich arbeite. Es könnte natürlich sein, dass sich die beiden ROMs unterscheiden! Dann wäre die Büchse der Pandora wohl eher eine Fatamorgana gewesen
Ich lese dieses hier einfach auch aus, dann wissen wir es.
Die ROMs sind tatsächlich unterschiedlich! Siehe ZIP.
Was ich hier vor Wochen gepostet hatte ist die Version 3.4a von 1990.
Meine aktuelle Maschine hat das ROM 3.4 von 1988 drin.
Unterschiede bei 0000h, 5800h und 5f00h:
Dann wäre die Büchse der Pandora wohl eher eine Fatamorgana gewesen
Puh, zum Glueck ist es die Fatamorgana!
LN-85 - Monitor V3.4a (c)1990 by LN ROM: 24K RAM: 40K
R: Read/Set Register
M: Read/Set Memory
L: List Memory
C: Copy Memory
I: Insert
F: Fill
G: Go
^G: Breakpoint on/off
T: Trace /Single Step
^T: Trace on/off
W: Write Trace-Memory
S: Save/Load Cass./R-Pack/Floppy
P: Parallel I/O
^P: Printer on/off
A: Assembler
D: Disassembler
Z: Relocator
E: Eprommer
B: Basic
H: Help
- ?
-S: Save/Load Cass./R-Pack/Floppy (C/R/F)? F
FLOPPY - I/O V1.3
73,CBM DOS V3.0 1571,00,00
F: Format
D: Directory
P: Print Directory
W: Write to Disk
R: Read from Disk
V: Verify File
E: Erase File
?F
Diskname : = ................florimat
Format ... 00, OK,00,00
F: Format
D: Directory
P: Print Directory
W: Write to Disk
R: Read from Disk
V: Verify File
E: Erase File
?D
0 "florimat " LN 2A
664 BLOCKS FREE.
00, OK,00,00
F: Format
D: Directory
P: Print Directory
W: Write to Disk
R: Read from Disk
V: Verify File
E: Erase File
?W
Start Adr.: = 0000
End Adr.: = 0000 8000
Filename : = ................flo01
WAIT PLEASE ...00, OK,00,00
F: Format
D: Directory
P: Print Directory
W: Write to Disk
R: Read from Disk
V: Verify File
E: Erase File
?D
0 "florimat " LN 2A
130 "flo01" PRG
534 BLOCKS FREE.
00, OK,00,00
F: Format
D: Directory
P: Print Directory
W: Write to Disk
R: Read from Disk
V: Verify File
E: Erase File
?V
Filename : = ................flo01
Start-Adr.: 0000
WAIT PLEASE ...VERIFY ERROR AT ADR.: 6104
00, OK,00,00
F: Format
D: Directory
P: Print Directory
W: Write to Disk
R: Read from Disk
V: Verify File
E: Erase File
?
-
?
-
Alles anzeigen
Mit der von Toast_r geliehenen 1571 kann ich formatieren, schreiben und lesen.
Alles soweit gut.
Nur die Cursorsteuerung ist etwas komisch. Wer benutzt ein Ctrl-U fuer Cursor links?
Die Schaltung entspricht der aus dem mc-Artikel. Allerdings wird statt des 7406 ein 7407 verwendet und die Pins sind anders mit der PIO beschaltet.
Ich mach da gleich mal ein Schaltplan, dann darf es jeder nachbauen.
Die Software im Midicom hatte auch grosse Aehnlichkeit mit dem mc-Artikel. Wer von wem abgeschrieben hat, keine Ahnung, mir egal.
Nachdem ich die gemeinsamen Codeteile gefunden hatte, konnte ich die Bit Zuordnung mit der PIO nachvollziehen.
Und das noch im jahr 2019.
Viel Spass
Na, da hat sich der Ausflug doch gelohnt.
Hast Du das mit der 1541 auch schon getestet?
Genau!
Ne, die Verriegelung der Laufwerksklappe rastet nicht. Wollte ich gleich noch mal in Ruhe nachschauen.