Forum: PC-Programmierung Fragen zum allgemeinen Verständnis eines Terminalprogrammes


von Christian J. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

es hat nicht direkt mit PC programmierung zu tun sonddern gehört zu 
meinem Z80 Thread.

Ich stehe aktuell etwas auf dem Schlauch, habe auch nicht die Debug 
Möglichkeiten wie auf einem PC, sondern mehr trail & error.

Aufbau RX,TX,kein CTS/RTS, 9600 baud, 8N1

Z80+SIO <--------------> USB Konverter <-------> ttyUSB0 Linux PC

Derzeit benutze ich minicom um Ausgaben des Z80 darzustellen, der in C 
programmiert wird. Ebenso werden Hand Eingaben an ihn geschickt. Der USB 
Konverter blinkt auch, mit getchar() und putchar() auf dem Z80 Board ist 
soweit alles ok. Lider nur 1 Byte Datenpuffer in der SIO, ein

getchar()
printf ("Irgendwas......")
getchar();

verschluckt schon zeichen, die mit 9600 baud schon zu schnell kommen. 
printf braucht zu viel Code.

Entwicklungsziel: Eine einzige Kommandozeile im Terminal, die sich wie 
am PC die bash bedienen lässt. Siehe Bild. Nicht nur Zahlen, sondern ich 
möchte schon ganze Befehle mir Parameterliste eingeben, die danmn 
geparst werden.

Und jetzt geht es los: Echo im Terminal aus, Z80 mit Miniroutine:

do {
      ch=getchar()
      putchar();
} while (ch!=0x0d);

Er soll stur alles zurückschicken was ich tippe. Prima, gäbe es da nicht 
die verfluchten Sondertasten wie Pfeile, Pos1, Home, End usw.

Die Routine oben erzeugt das was ich eintippe .... bei Buchstaben!

Pfeile: Cursor bewegt sich links, rechts, hoch, runter : ok!
Backspace: Bewegt sich wie Pfeil links, löscht aber keine Zeichen. 
Wieso?

Die Funktion gets() macht alles richtig. Sie echot zeichen, Pfeile 
laufen richtig, Backspace löscht Zeichen. gets will ich aber nicht 
verwenden.

Da der User, also ich so einiges anstellen kann, sich also zehnmal 
vertippen, zurückgehen usw. muss das alles ausgefiltert werden. Die 
Zeile soll gar nicht verlassen werden, also Up und Down müssen gesperrt 
werden. Backspace muss den Zeichenpointer nach links veschieben....usw 
usw

Es soll genau das im Buffer stehen, was ich im Terminal sehe. Und daran 
breche ich mir echt die Haxen! Schon die Pfeile zu erkennen, die 
scheinbar aus 3 einzelnen Zeichen bestehen. Und alles andere einfach 
ausblenden, kein Home, kein F1, F2 usw.

Das Zauberwort ist nucurses aber bevor ich damit anfange (wiki Qelltext 
mcurses) muss ich die Basics kapieren.

Wie stellt man sowas an? Ich habe Z80 seitig nur getchar und putchar, 
nichts weiter. Damit muss alles machbar sein.

Gruss,
Christian

von Schaulus Tiger (Gast)


Angehängte Dateien:

Lesenswert?

servus!

bash auf einem Z80 hat was! Für den Anfang hab' ich mal eine 
Interrupt-Routine mit Funktionstasten-Unterdrückung und das zugehörige 
getchar() angehängt. Ich nenne es getkey(), weil die ISR bestimmte 
Funktionstasten, z.B. die Cursor-Tasten, zu einem einzelnen 
Steuerzeichen umkodiert. Das ist praktisch, damit der User mit "Cursor 
links" an den Anfang der Zeile kommen kann.

Die ch... Geschichten stammen aus ChibiOS. Die machen nichts weiter, als 
einen anderen Thread laufen zu lassen, während der erste im getkey() auf 
den nächsten Tastendruck wartet. Ohne Multitasking kannst du die einfach 
weglassen, dann wartet getkey() in einer Endlosschleife.

von Karl H. (kbuchegg)


Lesenswert?

Christian J. schrieb:

> Pfeile: Cursor bewegt sich links, rechts, hoch, runter : ok!
> Backspace: Bewegt sich wie Pfeil links, löscht aber keine Zeichen.
> Wieso?

Weil das die Definition von Backspace ist. Cursor ein Zeichen zurück. 
Von Zeichen löschen steht da nichts.
>
> Die Funktion gets() macht alles richtig.

dann benutze sie doch.

> Sie echot zeichen, Pfeile
> laufen richtig, Backspace löscht Zeichen. gets will ich aber nicht
> verwenden.

Warum nicht?

> Da der User, also ich so einiges anstellen kann, sich also zehnmal
> vertippen, zurückgehen usw. muss das alles ausgefiltert werden. Die
> Zeile soll gar nicht verlassen werden, also Up und Down müssen gesperrt
> werden. Backspace muss den Zeichenpointer nach links veschieben....usw
> usw
>
> Es soll genau das im Buffer stehen, was ich im Terminal sehe. Und daran
> breche ich mir echt die Haxen!

Willkommen in der Welt der Programmierung.
Ja, einen Benutzer soweit zu führen, dass er bei einer Texteingabe nicht 
allzuviel anstellen kann, ist aufwändig.

> Schon die Pfeile zu erkennen, die
> scheinbar aus 3 einzelnen Zeichen bestehen. Und alles andere einfach
> ausblenden, kein Home, kein F1, F2 usw.

Ja, Und?

> Wie stellt man sowas an? Ich habe Z80 seitig nur getchar und putchar,
> nichts weiter. Damit muss alles machbar sein.

Ist es auch.
Du bist der Programmierer! Programmieren bedeutet nicht, dass man für 
alles irgendwo vorgefertigte Lösungen bekommt.

Terminals unterscheiden sich nun mal darin, wie sie Steuercommandos 
erzeugen bzw. welche sie verstehen. Die meisten können mit VT100 
Sequenzen umgehen und schicken die natürlich auch, wenn der Benutzer die 
entsprechenden Tasten drückt. Aber VT100 ist nun mal nicht alles, was da 
draussen so kreucht und fleucht.

: Bearbeitet durch User
von Christian J. (Gast)


Lesenswert?

Hallo,

hat sich schon erledigt. Hier im wiki gibt es die mcurses von Frank M 
ujnd damit klappt alles. Auf Z80 portiert und fertig. Kompletter Editor 
im Terminalfenster mit allem Pipapo!

von Christian J. (Gast)


Lesenswert?

Sag Mal Karl-Heinz,

kennst du dich mit minicom aus? Kann es sein, dass das ein paar Bugs 
hat? Eiinstellungen lasesen sich nicht speichern, Farbwahl auch nicht 
rufe ich das Profil auf was gespeichert ist in der Befehlszeile haengt 
es sich schonmal auf. Und ich weiss nicht wie man eine feste 
Fenstergröße einstellt. Sonst prima und falsch bedienen kann man da auch 
nix dran .. eigentlich.

Gruss,
Christian

von Karl H. (kbuchegg)


Lesenswert?

Christian J. schrieb:
> Sag Mal Karl-Heinz,
>
> kennst du dich mit minicom aus?

nein. Leider.

> Kann es sein, dass das ein paar Bugs
> hat?

Möglich ist alles.
Laut WIkipedia ist es allerdings
1
... und gilt als eine der wichtigsten Software für
2
 Terminalemulation auf Linux-Systemen ...

Von daher würde mich das allerdings wundern, wenn es da die von dir 
genannten, dann doch recht schwerwiegenden Bugs gäbe.

von Schaulus Tiger (Gast)


Lesenswert?

Christian J. schrieb:
> Eiinstellungen lasesen sich nicht speichern, Farbwahl auch nicht
> rufe ich das Profil auf was gespeichert ist in der Befehlszeile haengt
> es sich schonmal auf.

wegen solcher Erlebnisse hab' ich minicom durch picocom ersetzt. Das ist 
viel simpler und macht genau was es soll. Vor allem hat es viel bessere 
Fehlermeldungen und speichert keine Einstellungen. Es macht auch kein 
eigenes Fenster auf, deshalb kann man die Fenstergröße und Farbe per 
xterm regeln, z.B.
1
alias z80term="xterm -bg black -fg green -geometry 80x42 -e picocom -b 9600 /dev/ttyUSB0"

von Schaulus Tiger (Gast)


Lesenswert?

und nachdem xterm die Darstellung übernimmt, bekommt man auch eine der 
besten VT100-Emulationen.

von Christian J. (Gast)


Lesenswert?

Schaulus Tiger schrieb:
> alias z80term="xterm -bg black -fg green -geometry 80x42 -e picocom -b
> 9600 /dev/ttyUSB0"

COOOOOOL! :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.