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.
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Hi
Der/Die hat keine Fragen, es ist eine Aufgabe !! für die Foren Besucher ;)
Leute gibts.
cu
kannast du mir helfen,danke
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!
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
Hallo mr.escape, das dürfte so nicht den erwünschten Effekt geben, die Adresse des Grafikspeichers ist Hex nicht Dec ;o)
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
Solche Leute sollte man kommentarlos löschen :/
warum bist du so unfreundlich das ist nicht mein gebiet,aber muss ich paar sachen schaffen
Die formulierung "Schreiben Sie ein ... Programm" ist garantiert nicht an uns gerichtet, sondern einfach teil der C&P aufgabenbeschreibung.
mr.escape
danke dir für dein hilfe aber ist mir irgendwie fremd hilfe zu suchen und habe falsch
formuliert.danke nochmal
Gibt es auch inhaltliche fortschritte/fragen?
Was ist schon vorhanden, wo hängt es, was ist unklar?
mr.escape