Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Variablen in Assembler Kategorie: Progr. Assembler, TaskingTools, OS (von André H. - 16.07.2004 12:10)
Als Antwort auf Variablen in Assembler von Thomas - 14.07.2004 22:00
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo Thomas,

> ich möchte in Assembler einen kurzen Text in das Display schreiben. Im dissasemblierten OS habe ich
> gefunden, wie man etwas auf das Display der CC2 schreiben kann. Mit dem folgenden kleinen ASM-Code
> kann ich jeden beliebigen String, der sich bereits im Speicher der CC2 befindet in das Display
> schreiben:
> ...
> CALLS   35284 ;Routine zum Schreiben

Diese Routine, also 089D4h ist nur zum schreiben von Festtexten auf
das interne LCD welche in Segment 0 stehen. Also für Statusmeldungen des OS.
Bis OSOPT V3.0 sind diese Routinen zwar noch zum Teil vorhanden, jedoch
werde ich diese ab OSOPT V3.1 entfernen, da ich den Speicherplatz für andere
Erweiterungen benötige. (z.B. für die Implementierung von sys0002.hex im OS)
Seit OSOPT V3.0 werden diese LCD-Routinen auch nirgends mehr aufgerufen.

> ...
> Wo liegt der Bereich für section data?
gibt es hier nicht.

> Oder werden Variablen generell anders definiert?

Es gibt unter Assembler keine Variabeldefinitionen.
Die ist eine Erfindung der Hochsprachen.
Du kannst nur Labels definieren welche für bestimmte Zahlen stehen,
welchen man wieder z.B. als Speicheradressen benutzen kann.
Der Speicherzugriff erfolgt in ASM direkt.
Jedoch kannst Du hier nur Segment 8 für einen wahlfreien Zugriff benutzen.
Beachte aber, daÃ? Du nicht beliebige Bereiche von Segment 8 benutzen darfst,
da hier auch die Variablen vom C2 Programm, sowie Daten des Betriebsystems
abgelegt werden. (z.B. Thread-Infos)
Daher solltest Du in C2 ein entsprechend groÃ?es Array definieren und die Startadresse
Deiner ASM-Routine übergeben, damit Du wei�t, ab wo Du den RAM gefahrlos
benutzen kannst.

Um wieder auf Deinen Wunsch zurückzukommen, Text auf dem Mini-LCD auszugeben,
solltest Du Dir im OS .VM_LCD | (vmcodes.LCD_PRINT << 8)
zu Gemüte führen.

VM_LCD liegt an Offset 091DEh.
LCD_PRINT ist der Sub-Code 9
Die Print-Routine liegt also an Offset 09274h.
(Sprungtabellen sind etwas feines :-) )
Die eigentliche Print-Routiene liegt aber an Offset 08beeh und benötigt als zwei Parameter:
In R12 die Startadresse im RAM(Segment8) des Strings und in R13 die Anzahl der Zeichen.

Allerdings habe ich dies noch nicht aus ASM direkt aufgerufen und getestet.

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: