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
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.
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
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!
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
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.
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" |
und nachdem xterm die Darstellung übernimmt, bekommt man auch eine der besten VT100-Emulationen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.