CP/M-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Memberlist || Home || Statistik || Kalender || Staff Willkommen Gast!
[ Unofficial CP/M Website ] [ Z80 Family Support Page ] [ Forum-Regeln ] [ Impressum/Kontakt ] [ Datenschutzerklärung ]

CP/M-Forum » CPUs, Bauteile und Peripherie » Pio 8255 » Threadansicht

Autor Thread - Seiten: -1-
000
13.02.2015, 15:49 Uhr
Werner_8085



hätte da gern mal ein Problem ;-))

In meinem Projekt CF_Karte am Moppel soll der 8255 im Modus2 (Handshake) Daten zum/vom AVR übertragen - das funktioniert auch recht gut.

Problem: Das erste Datenbyte schreiben/lesen ist immer null -
ist das eine Besonderheit vom 8255 oder habe ich einen Knoten in den grauen Zellen????

Auszug aus dem Testprogramm
;
; PIO Initialisieren mit Betriebsart
; Kanal A bidirektional
; Kanal C Handshake
; Kanal B Ausgabe
;
pioinit: push psw ; PIO Betriebsart einstellen
mvi a,PIO_BA ; PIO_BA equ 0c1h
out PIO_Ctl ;
xra a ;
out PIO_B ; Adr 0,1 auf 0
pop psw ;
ret ;
;

;
; PIO-A lesen (A)
; wartet bis Daten bereitstehen

piord: in PIO_C ; Status ermitteln
ani 00100000b ; IBF maskieren
jz pio_rd ; warte auf Daten
in PIO_A ; daten lesen
ret ; (A) Daten
;
; (A) PIO-A schreiben
;

piowr: push psw ;
pio_sts: in PIO_C ; Status ermitteln
ani 10000000b ; /OBF maskieren
jz pio_sts ; warten auf Quittung /ACK
pop psw
out PIO_A ; Daten schreiben
ret ;
;

auf der AVR-seite sind die Routinen in BASCOM geschrieben
/ACK und /STB habe eine Länge von 5µs, also mehr als ausreichend

Hat da jemand eine Idee ?

LG Werner
http://werners-seiten.de/moppel.html

!Sorry - das Listing sieht nach dem Erstellen leider sehr grauslich aus

Dieser Post wurde am 13.02.2015 um 15:53 Uhr von Werner_8085 editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
001
16.02.2015, 12:43 Uhr
Werner_8085




Zitat:
Werner_8085 postete
hätte da gern mal ein Problem ;-))
Lag vor der Tastatur zwischen den Ohren ;-)

Die Daten müssen in der "Low-Phase" von /ACK in den Port gelesen werden !
Das hatte ich bereits bei der fallenden Flanke von /OBF getan - zu früh
- und man liest die Daten aus der vorherigen Ausgabe.

In umgekehrter Richtung (Moppel liest ein Sektor mit 128Byte) muss das
erste Byte (Müll aus vorherigen Übertragungen) entfernt werden.

Damit sind die Grundroutinen für den Datenaustausch mit dem AVR fertig.
- RESET testen ob CF-Karte vorhanden ist
ein Byte an Karte senden, und zurücklesen
Invertiertes Byte senden und zurücklesen,
wenn beide Bytes richtig ankommen ist alles grün
- Spur/Sektor setzen
Befehl senden
Datenbyte senden
- Sektor schreiben/lesen
Befehl senden
128 Bytes senden/empfangen
Da das erste Byte immer ein Befehle ist, können die beiden vorgesehenden
Adressleitungen entfallen und stehen z.B. für RTS/CTS an der V24 zur
Verfügung.


LG Werner
http://werners-seiten.de/moppel.html


Dieser Post wurde am 16.02.2015 um 12:45 Uhr von Werner_8085 editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
002
16.02.2015, 18:46 Uhr
Alfred

Avatar von Alfred

Hallo Werner,

Glückwunsch zum erfolgreichen Entwanzen :-)!

VG
Alfred
--
Das Leben ist verdammt kurz (meine Meinung)!
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
003
18.02.2015, 14:02 Uhr
Hein_Ko

Avatar von Hein_Ko

Hallo Werner

Was heißt bei Dir:
; PIO Initialisieren mit Betriebsart
; Kanal A bidirektional

Wird Port (A) dann immer wieder um-initialisiert wenn Daten gesendet/gelesen werden?

Grüße
Heinrich
--
Es gibt keine Probleme - nur Lösungen !
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
004
20.02.2015, 21:07 Uhr
Werner_8085



Hallo Heinrich,

leider sieht das Listing vom 13.02. sehr unstrukturiert aus.
Der Port A wird als Bidirektionaler Datenport eingestellt.
Natürlich nur einmal in de INIT-Routine.

Betriebsart 2 (1100 0001b)der Handshake läuft dann über Port C:
C7 = /OBF und C6 = /ACK (Senderichtung)
C5 = IBF und C4 = /STB (Empfangsrictung)
Das läuft auf der Moppel(ECB)-Seite völlig automatisch ab.
Schaltzeiten liegen damit im 0,5µS Bereich.

Auf der AVR-Seite muss diese Prozedere eben in Software nachgebildet werden
und hier lag der Teufel im Detail. Abtastung zum falschen Zeitpunkt.
Und ganz wichtig das die Anzahl der lese/schreib-Zugriffe immer genau gleich
der Moppel-Seite sind, sonst bleibt im Latch Müll hängen,
der dann bei dem nächsten Zugriff für Verwirrung sorgt ;-))

Diese Grundroutinen müssen nun für den Einsatz ins BIOS angepasst
und natürlich auf der AVR-Seite mit dem AR-DOS "verheiratet" werden.
Schreiben/lesen eines Sektors ist nicht das Problem - glaube ich zumindest.
Die "Übersetzung" CP/M <-> FAT16 ist da die große Herausforderung.
Denn die CF-Karte soll ja als "Datenaustausch zwischen den Welten" dienen,
ohne nachträgliches gefrickel auf der Windowsseite.

Mein Plan: Im freien Bereich (ist ja mehr als reichlich vorhanden) der CF-Karte
wird ein schnödes CP/M-Dateisystem eingerichtet. In den langen Pausen soll der
AVR das dann entsprechend abgleichen. Schauen wir mal ob es so umgesetzt
werden kann, vielleicht bedarf es nochmals eine "Winterpause" ...

Man mag mich für verückt halten, so einen Aufwand zu betreiben, wo der Moppel
maximal als "Datensammler" dient - kann man natürlich viel einfacher mit
Einplatinencomputer seiner Wahl erreichen - Himbeeren sind ja derzeit sehr angesagt.
Aber das Teil ist einfach da und es reizt mich ungemein es einer mehr oder
weniger sinnvollen Aufgabe zuzuführen.

Und durch die ganze "Grundlagenforschung" werde ich nicht blöder - kaufen kann ja jeder ;-))

LG Werner
PS: auf meiner HP habe ich das Listing für beide Seiten hinterlegt.
http://werners-seiten.de/doku_hw.html

Dieser Post wurde am 20.02.2015 um 21:12 Uhr von Werner_8085 editiert.
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
005
21.02.2015, 20:44 Uhr
proof80




Zitat:
Werner_8085 postete
Die "Übersetzung" CP/M <-> FAT16 ist da die große Herausforderung.
Denn die CF-Karte soll ja als "Datenaustausch zwischen den Welten" dienen,
ohne nachträgliches gefrickel auf der Windowsseite.

Hallo Werner,
mal eine Idee dazu: die CF-Karte unter Win mit YAZE-AG - Yet Another Z80 Emulator by AG beschreiben. Dann liegt an einer Stelle, die leicht herauszufinden ist, ein CP/M-Dateisystem (s.a. 6. CP/M disks in der Doku). Mit den dort angegebenen Disk-Parametern ließe sich das ohne zusätzlichen Aufwand benutzen.
Wenn Dir das Lesen/Schreiben mit dem YAZE unter Win allerdings zuviel Gefrickel ist, kannst Du Dir ja dort in den Quellen immer noch Anregung holen, wie das umgesetzt ist.
Man muss das Rad ja nicht nochmal neu erfinden ;-)

Gruß, Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
006
22.02.2015, 19:15 Uhr
Werner_8085



hallo Wolfram,

klasse Tip !
Bis ich Yaze kapiert hatte, hat ein wenig gedauert - hab das mal mit einer kleinen CF-Karte (4MB) und ein 2MB CP/M-File ausprobiert - klappt hervorragend.

Ab Sektor 65 fängt der CP/M Datenteil an und hört bei Sektor 4162 auf.
Ab da stehen dann die Daten vom FAT-Dateisystem.
Damit habe ich nun eine 2MByte Spielwiese für die CP/M Daten
ohne dass sich das mit FAT-Seite ins gehege kommt.

Danke und noch einen schönen "Rest-Sonntag"
LG Werner
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
007
22.02.2015, 19:23 Uhr
proof80



Hallo Werner,

freut mich, dass es so klappt, wie ich mir das dachte. In der Praxis bin ich noch nicht so weit wie Du - aber ich bleib' dran. Mit CF statt Disketten macht CP/M nochmal mehr Spaß und ist auch etwas flotter ;-)

Gruß, Wolfram
Seitenanfang Seitenende
Profil || Private Message || Suche Zitatantwort || Editieren || Löschen || IP
Seiten: -1-     [ CPUs, Bauteile und Peripherie ]  



gaby.de

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek