Danke, hat funktioniert!
MFA CPU-Karte Z180
- funkenzupfer
- Erledigt
-
-
Gern geschehen.
Nur aus Neugierde: Warum willst du das BIOS übersetzen?
Wenn du Änderungen hast / planst, sag mal Bescheid. Ich hab schon ein paar Erweiterungen gemacht, aber die sind noch nicht fertig.
-
Ich hab vorerst mal die beiden seriellen Schnittstellen wieder auf 9600 Baud gesetzt.
Ich möchte mit einem seriellen TFT-Display experimentieren:
https://www.hackster.io/franki…use-serial-tft-lcd-5196cf
Kann ich die seriellen schnittstellen auf der Z180 unter MBASIC ansprechen?
Wenn ich eine V24 auf F0 einstelle, müsste die laut BIOS doch dritte Schnittstelle werden und auf PUN/RDR "hören"?
LG Robert
-
Kann ich die seriellen schnittstellen auf der Z180 unter MBASIC ansprechen?
Jein.
Du kannst unter MBASIC zwar OUTs und INs programmieren, was die aber genau machen weiss ich nicht.
Beim Zugriff auf die internen Z180 Register muss der obere Adressbus auf 0 sein. Dafuer gibt's die OUT0 und IN0 Befehle beim Z180. Die wird MBASIC aber nicht kennen. Beim Z80-Assembler kann man sich mit OUT (C),a etc behelfen, hier wird das B Register auf die obere Datenbushaelfte gelegt.
Ansonsten hilft nur eine kleine Assemblerroutine.
Zum Verhalten der oberen Adresshaelfte bei IN / OUT Befehlen laesst sich die z180_faq aus.
Wenn ich eine V24 auf F0 einstelle, müsste die laut BIOS doch dritte Schnittstelle werden und auf PUN/RDR "hören"?
Ja, das sollte so sein. Ist von mir aber nicht getestet. Der Code sollte 1:1 aus Mikes BIOS kommen.
Wenn es nicht geht, kann es sein das die Init-Befehle zu schnell kommen. Die 8251 braucht eine Recovery Time nach jedem Befehl. Bei einer 2 MHz 8085 ist die automatisch erfuellt, bei der Z180 nicht immer (Takt, WAITs etc). Hat mich mal einige Stunden gekostet, bis ich den Mist raushatte.
Ich hab das damals auf die schnelle so geloest: (nur als Beispiel)
Code
Alles anzeigenxor a ;initialize two 8251 serial ports ld b,a ; for write recovery time out (SIO1ST),a ;1st, three zeros to satisfy possible out (SIO2ST),a ; sync mode power-up djnz $ ; loops for write recovery time out (SIO1ST),a out (SIO2ST),a djnz $ ; loops for write recovery time out (SIO1ST),a out (SIO2ST),a djnz $ ; loops for write recovery time ld a,40h ;reset 8251's out (SIO1ST),a out (SIO2ST),a djnz $ ; loops for write recovery time ld a,4Eh ;async, 8N1 out (SIO1ST),a out (SIO2ST),a djnz $ ; loops for write recovery time ld a,37h ;enable xmit, receive out (SIO1ST),a out (SIO2ST),a djnz $ ; loops for write recovery time in a,(SIO1ST) ;einmal Status lesen in a,(SIO2ST)
Viel Erfolg
-
Danke Dir ... jetzt spinnt erst mal das Display, also ist damit leider vorerst mal Pause.
LG Robert