Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Zugriff auf Portadressen unter MicroDOS Assembler KC85 » Themenansicht

Autor Thread - Seiten: -1-
000
26.12.2024, 18:23 Uhr
mwd



Hallo,
wie kann ich unter MicroDOS (ML-DOS) am geschicktesten auf z.B. die Module M001 und M010 zugreifen? Im Grundgerät nutze ich die Assemblerbefehle IN und OUT bzw. in BASIC die Anweisungen INP und OUT. Wie das für Druckertreiber unter MicroDOS funktioniert steht im Handbuch für den Programmierer. Ich könnte also im Grundgerät (D001) kleine Unterprogramme mit den IN und OUT Anweisungen ablegen und über den Koppel-RAM kommunizieren. Aber wie geht das genau? Wie spreche ich diese kleinen Routinen aus MicroDos in eigenem Assemblercode an? Direkt kann ich ja die Kanaladressen (z.B. 4 bis 7 für M001) aus MicroDos nicht ansprechen, oder?
Das Modulschalten geht über ESC Funktion 0x63. Kann ich vlt. mittels ESC Funktion auch von Kanaladressen lesen und schreiben?
Vielen Dank für eure Hilfe und viele Grüße,
Matthias.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
26.12.2024, 22:49 Uhr
susowa




Zitat:
mwd schrieb
Ich könnte also im Grundgerät (D001) kleine Unterprogramme mit den IN und OUT Anweisungen ablegen und über den Koppel-RAM kommunizieren. Aber wie geht das genau?



Da gibt es keine "Standardbeschreibung". Ab ZAS 1.3 wird der RAM im D001 von ZAS verwaltet:

https://web.archive.org/web/20220815063818fw_/https://www.iee.et.tu-dresden.de/~kc-club/02/KCN97-04/KCN97-04-16.HTML

Man kann freie (temporäre) Speicherpage(s) beantragen, dort seinen Code ablegen und am Programmende wieder freigeben (ESC m / ESC T / ESC l).


Zitat:
mwd schrieb
Wie spreche ich diese kleinen Routinen aus MicroDos in eigenem Assemblercode an?



Mit ESC U, wobei die zurückgegebene Pageadresse von ESC m zu verwenden ist.


Zitat:
mwd schrieb
Direkt kann ich ja die Kanaladressen (z.B. 4 bis 7 für M001) aus MicroDos nicht ansprechen, oder?



Nein.


Zitat:
mwd schrieb
Kann ich vlt. mittels ESC Funktion auch von Kanaladressen lesen und schreiben?



Nein.

Ich hatte Dich hier in Beitrag 03 bereits auf ein Programm / einen Quelltext verwiesen, wo diese Vorgehensweise benutzt wird:

https://www.robotrontechnik.de/html/forum/thwb/showtopic.php?threadid=15187

aktueller Link:

http://kc85.info/index.php/download.html?view=download&id=192:picgen20&catid=6


MfG susowa

Dieser Beitrag wurde am 27.12.2024 um 17:22 Uhr von susowa editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
27.12.2024, 16:10 Uhr
mwd



Danke! Muß ich wohl etwas probieren. Ganz klar ist mir das noch nicht. Wo finde ich übrigens HELP-Dateien zu ZAS? Dort sollte man eine komplette Übersicht aller Steuercodes und ESC-Funktionen finden.

Viele Grüße.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
27.12.2024, 17:12 Uhr
susowa




Zitat:
mwd schrieb
Wo finde ich übrigens HELP-Dateien zu ZAS



Das ist das letzte vollständige Archiv mit ZAS 1.6 :

http://kc85.info/index.php/download.html?view=download&id=214:zasv16&catid=35

Die beiden Hilfedateien gelten aber auch für ZAS 1.7.

Das, was Du suchst ist in zasmem.hlp beschrieben, kann u.a. mit dem KC-Commander angeschaut werden.


Zitat:
mwd schrieb
Ganz klar ist mir das noch nicht.



So habe ich auch angefangen :-). Du hast aber einen Vorteil mit einer vorhandenen Quelle zum "verstehen" - das geht nur, wenn man damit selbst etwas macht.


Ich hatte noch ein wichtiges Detail "weggelassen". Der Code im Grundgerät muss verschieblich bleiben, da ZAS bestimmt, wohin er geladen wird. Das steht zwar auch in der HLP aber nicht in rot !

Bei Aufruf von eigenen Unterprogrammen CALL mit F00FH benutzen (Relativer Unterprogrammaufruf für verschiebliche Programme mit UP-Abstand unmittelbar nach Aufruf) und JP ... nicht verwenden. Die absoluten Lade/Speicher-Befehle auf Adressen innerhalb des eigenen Codes sind auch mehr oder weniger tabu, dafür besser den Koppel-RAM verwenden.

MfG susowa

Dieser Beitrag wurde am 27.12.2024 um 19:29 Uhr von susowa editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
27.12.2024, 20:14 Uhr
maleuma



Besser hätte ich das auch nicht erklären können

Vom D004-Prozessor hast Du keinen direkten Zugriff auf Portadressen des Grundgerätes. Du brauchst immer ein Hilfsprogramm im Grundgerät, welches das übernimmt. Und genau für solche Fälle haben wir uns damals das Treibersystem von ZAS ausgedacht.
ZAS bestimmt dabei, auf welcher Adresse im Grundgerät der Treiber läuft. Deshalb muss das verschieblich sein. Und als Programmierer vom D004 greifst Du dann über ESC-Befehle auf die Treiberfunktionen zu.

Bei Fragen, einfach noch einmal hier melden.
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
Heute, 16:00 Uhr
mwd



Freie Speicherbereiche anfordern und Daten bzw. Code dort ablegen funktioniert super. Die Kommunikation über den Koppel-RAM mittels ESC-Funktionen auch. Aber wie schreibe ich vom Grundgerät aus Daten in den Koppel-RAM direkt? Und muß ich das überhaupt, wenn ich nur ein einzelnen Byte übertragen will? Die Funktion, die mittels ESC-U aufgerufen wird, darf sicher keine Register oder den Stack verändern. Gilt das auch für A? Der Druckertreiber z.B. erhält doch das zu druckende Zeichen über A.

Danke für eure Hilfe,
Matthias.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
Heute, 19:03 Uhr
maleuma



Das klingt doch schon einmal ganz gut

ESC-U ist eher nicht die geeignete Variante, denn damit bekommst Du keine Daten zurück. Da müsstest Du für Dein Programm eine Übergabezelle und auch noch ein Handshake-Protokoll vereinbaren, damit des D004-Programm weiß, wenn die Daten verfügbar sind.

Besser geeignet ist ESC-o. Das ist der Aufruf einer Treiber-Funktion. Die Übergabe und Rückgabe von Parametern ist dabei bereits vorgesehen.
Lies Dir am besten die Hilfedatei ZAS4MEM.HLP durch, das geht mit NC2 oder auch mit einem normalen Texteditor. Darin sind die Grundlagen zur Treiberprogrammierung erklärt.

Zum Ausprobieren kannst Du für Deinen Treiber die ID 240 bis 255 (F0..FFh) verwenden. Solltest du den Treiber für die Allgemeinheit veröffentlichen wollen, bekommst Du von mir eine offizielle ID zugeteilt. Damit wollen wir vermeiden, dass sich Treiber gegenseitig beeinflussen oder inkompatibel sind.
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

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