Re: Speicherzugriff, Code im Segment 8 Kategorie: Progr. Assembler, TaskingTools, OS (von Hansi - 5.11.2004 13:21) | ||
Als Antwort auf Re: Speicherzugriff, Code im Segment 8 von André H. - 5.11.2004 8:33 | ||
| ||
Hallo André, das werde ich so mal ausprobieren, momentan komme ich allerdings nicht dazu weil ich noch an dem Projekt "FS20 gehorcht aufs Wort - Sprachsteuerung mit PC und CC2" arbeite. Huch, jetzt habe ich ja schon wieder was verraten ;-) Gru� Hansi ...und es funktioniert :-D > Hallo Hansi, > > > der Vergleichbefehl war/ist schon korrekt geschrieben, dass die 1 in Worten eins wie ein > > l ( el ) aussieht liegt am Zeichensatz. > Naja. Das mu� ich jetzt einmal glauben. ;-) (Obwohl: 1 I ) > > > Das Problem bleib allerdings bestehen, im Segment 8 läuft das Programm nicht, Im Segment 3 schon. > > Wie ich das Programm in Segment 8 gekriegt habe? > > Wie im Buch MSR mit C-Control II beschrieben, Hexcode in ein Integerarray geschrieben. > > Low und Highbyte selbstverständlich getauscht und vor dem Programmcode jede Menge Nops. > > Deshalb auch die Hohe Speicheradresse von dezimal 2000. > > Gut. Du hast also ins "Blaue" geschrieben. ;-) > Das Buch ist leider nicht mehr Up to Date. > Es gibt folgende Möglichkeit, wie das ganze funzen mu�: > Du legst ein Byte-Array an und legst Dort die Routine ab. > Dann rufst Du die Funktion mem.getMemAddrByte(byte data[]) auf. > Als Rückgabewert erhälst Du die Startadresse des Arrays. Diese mu� gerade sein. > (Wenn nicht, vorher einfach noch eine Byte-Var definieren.) > Die Startadresse wäre nun gleichzeitig Deine Einsprungadresse. > Die Adresse zum speichern für Daten übergibst Du am besten über den Stack.(zweites Array) > > In C2 sieht das dann so aus: > inline function xy(byte data[], byte segment, byte code[]) > {// data ist das Datenarray > // segment mu� 8 sein > // code wäre das Bytearray mit den ASM-Code > inline vmcodes.VM_SYSCALL; > } > ... > byte asm[1024]; > byte Daten[48000]; > ... > xy(Daten,8,asm); > .. > > In den ASM-Routinen kannst Du nun auf das Daten-Array zugreifen, indem Du Dir > die Startadresse vo Stack holst: > > OSsegment EQU 0 > POP_R4 EQU 0765AH > PUSH_R12 EQU 075D6H > ... > getxy proc far > CALLS OSsegment,POP_R4 ;hole Array-Adresse vom Stack > MOV R2, R4 > Loop1: > MOV R4, P1H > AND R4, #080h > SHR R4, #7 > ADD R4, #030h > EXTS #8. #1 > MOVB [R2], RL4 > CMPI1 R2, #48000 > JMPR cc_NE, Loop1 > POP R1 > POP R1 > RETS > getxy endp > > > MfG André H. > | ||
Antwort schreiben Antworten: Re: Speicherzugriff, Code im Segment 8 (von André H. - 8.11.2004 13:10) Re: Speicherzugriff, Code im Segment 8 (von Hansi - 11.11.2004 10:28) Re: Speicherzugriff, Code im Segment 8 (von André H. - 11.11.2004 21:52) Re: Speicherzugriff, Code im Segment 8 (von Hansi - 11.11.2004 22:37) Re: Speicherzugriff, Code im Segment 8 (von André H. - 11.11.2004 23:23) Re: Speicherzugriff, Code im Segment 8 (von Hansi - 12.11.2004 7:31) Re: Speicherzugriff, Code im Segment 8 (von André H. - 19.11.2004 12:05) |