Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Kein Betreff angegeben

nada1 / 12 Antworten / Baumansicht Nickles

hallo,bitte helfen:Schreiben Sie ein auf den MVME3600-Rechnern des Realzeitlabors lauffähiges Programm, das ein Zeichen Ihrer Wahl in der
linken, oberen Ecke des Bildschirms ausgibt. Mit den Pfeiltasten der Tastatur soll das Zeichen in jede Position auf dem Schirm
bewegt werden können, außer in die unterste Zeile, die für Statusinformationen reseviert sein soll:
0 xx -1 xx -2 xx -3 xx N dddd Z dd S dd
In den ersten vier Feldern (0, -1, -2, -3) sollen die letzten vier von der Tastatur gelesenen Scancodes als zweistellige Hexadezimalzahlen
ausgegeben werden und im Feld N die Anzahl der seit Aufruf des Programms gelesenen Scancodes als vierstellige
Dezimalzahl. Außerdem sollen ganz rechts die aktuelle Zeile und Spalte als zweistellige Dezimalzahlen ausgegeben werden.
Anleitung
Die Programmentwicklung lässt sich gut in verschiedene Abschnitte aufteilen, die jede für sich recht einfach auf Fehler überprüft
werden kann:
Programmieren Sie zunächst die Ausgabe irgendeines Zeichens auf dem Bildschirm! Zur Erinnerung: der Videospeicher
bendet sich bei 0xfd0b8000, jedes Zeichen wird mit zwei Bytes dargestellt. Mit dem Byte niedrigerer Adresse wird
das Zeichen ausgewählt (ASCII code), mit dem Byte höherer Adresse das Attribut des Zeichens (wie in den Laborübungen
besprochen). Die Zeichen werden fortlaufend, zeilenweise im Videospeicher abgelegt, also das erste Zeichen der ersten
Zeile bei 0xfd0b8000, das zweite Zeichen der ersten Zeile bei 0xfd0b8002 usw. Auf dem Bildschirm können 25
Zeilen mit je 80 Zeichen dargestellt werden.
Auf eine etwaige Tastatureingabe können Sie über zwei Bytes bei den Adressen 0xFE000060 (keyboard data) und
0xFE000064 (keyboard status and ontrol) reagieren. Das Bit niedrigster Signikanz (output buffer full) im keyboard
control Register ist gesetzt, wenn eine Taste gedrückt bzw. losgelassen wurde. Für jede Taste kann dann der entsprechende
Makecode (beim Drücken) bzw. Breakcode (beim Loslassen) aus dem keyboard data Register gelesen werden, wodurch
das output buffer full Bit gelöscht wird. Wird eine Taste längere Zeit gehalten, sendet der keyboard controller die entsprechenden
Makecodes mit einstellbarer Verzögerungszeit undWiederholfrequenz, bis sie losgelassen wird.
Die Makecodes für die Pfeiltasten lauten: '"' - 0x48, '#' - 0x50, ' ' - 0x4b, '!' - 0x4d.

bei Antwort benachrichtigen
T-Rex nada1 „Kein Betreff angegeben“
Optionen
 GrüßeT-Rex 
bei Antwort benachrichtigen
macjab1 T-Rex „“
Optionen

Hi

Der/Die hat keine Fragen, es ist eine Aufgabe !! für die Foren Besucher ;)

Leute gibts.

cu

bei Antwort benachrichtigen
nada1 T-Rex „“
Optionen

kannast du mir helfen,danke

bei Antwort benachrichtigen
Simon6754 nada1 „Kein Betreff angegeben“
Optionen

Hier wird bestimmt kein komplettes Programm für dich erstellt, nur weil du a) überhaupt keine Ahnung hast oder b) einfach zu faul bist, dich zu informieren!

bei Antwort benachrichtigen
mr.escape nada1 „Kein Betreff angegeben“
Optionen
Auf dem Bildschirm können 25 Zeilen mit je 80 Zeichen dargestellt werden.
D.h.: Spalten 0 bis 79 und zeilen 0 bis 24

Ausgabe irgendeines Zeichens
Aufruf mit spalte, zeile, zeichen und attribut
wenn spalte>=0 AND spalte<80 AND zeile>=0 AND zeile<25 dann {
  ASCII_adresse=0xfd0b8000+2*(80*zeile+spalte)
  Attrib_adresse=ASCII_adresse+1
  ByteAt(ASCII_adresse)=zeichen
  ByteAt(Attrib_adresse)=attribut
}

Tastatureingabe
In einer (endlos)schleife {
  status=ByteAt(0xFE000064)
  wenn status AND 1 dann {
    keycode=ByteAt(0xFE000060)
    wenn keycode="stopptastencode" dann programm beenden
    wenn keycode eines der pfeiltasten-makecodes dann Bewege_Zeichen(keycode)
    Ausgabe_Status(keycode)
  }
}

Eine komplette lösung wird es wohl (und sollte es auch) nicht geben. Bei detailfragen lieber mal nachfragen, das hat mehr chancen auf nützliche antworten.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
xafford mr.escape „ D.h.: Spalten 0 bis 79 und zeilen 0 bis 24 Aufruf mit spalte, zeile, zeichen...“
Optionen
ASCII_adresse=0xfd0b8000+2*(80*zeile+spalte)

Hallo mr.escape, das dürfte so nicht den erwünschten Effekt geben, die Adresse des Grafikspeichers ist Hex nicht Dec ;o)
Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
mr.escape xafford „ASCII_adresse 0xfd0b8000 2 80 zeile spalte Hallo mr.escape, das dürfte so nicht...“
Optionen

Zum einen ist es ja auch keine echte programmiersprache (wäre aber in C/C++ korrekt und soll ja auch nur anstöße zur lösung geben und diese nicht komplett vorweg nehmen) und zum anderen steht es auch genau so in der beschreibung.
Wenn du aber auf die zwei und die 80 anspielst, dann sehe ich auch kein problem, denn ich bin mir sehr sicher, dass 80*25 zeichen gemeint sind und nicht 0x80*0x25.
Die addition von zahlen in hexadezimaler und dezimaler (oder auch oktaler) notation stellt auch keine zauberei dar, denn intern ist ohnehin alles binär und die umwandlung macht der compiler.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
PaoloP nada1 „Kein Betreff angegeben“
Optionen

Solche Leute sollte man kommentarlos löschen :/

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
nada1 PaoloP „Solche Leute sollte man kommentarlos löschen :/“
Optionen

warum bist du so unfreundlich das ist nicht mein gebiet,aber muss ich paar sachen schaffen

bei Antwort benachrichtigen
mr.escape PaoloP „Solche Leute sollte man kommentarlos löschen :/“
Optionen

Die formulierung "Schreiben Sie ein ... Programm" ist garantiert nicht an uns gerichtet, sondern einfach teil der C&P aufgabenbeschreibung.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
nada1 mr.escape „Die formulierung ist garantiert nicht an uns gerichtet, sondern einfach teil der...“
Optionen

danke dir für dein hilfe aber ist mir irgendwie fremd hilfe zu suchen und habe falsch
formuliert.danke nochmal

bei Antwort benachrichtigen
mr.escape nada1 „danke dir für dein hilfe aber ist mir irgendwie fremd hilfe zu suchen und habe...“
Optionen

Gibt es auch inhaltliche fortschritte/fragen?
Was ist schon vorhanden, wo hängt es, was ist unklar?

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen