Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Micha, > > > dank erst mal für deine schnelle Beantwortung meiner Frage. Ich hab zwar zum Assembler noch > > keinen Draht, werde mich aber mit dem Tasking-Tool beschäftigen. > > (hoffe dass ich damit klar komme ;-) ). > > Wenn ich das korrekt lese stehen die UP`s auf Adresse 0765AH und 075D6H > > Nein. Das sind die Adressen der OS-seitigen Integer-Stackoperationen. > Damit werden Werte vom Threadstack geholt, bzw. darauf geschoben. > Die einsprungadresse und das Segment (1, 2 oder 3) legst Du selber fest bzw. > mußt Du aus dem Listing (*.lst-Datei nach dem Assemblieren) entnehmen. > Das von mir gepostete Beispiel ist nicht ganz komplett, sondern enthält nur die > Routinen ohne Assembler-Infos. > > Hier die komplette ASM-Datei, die assemblierbar ist: > <asm> > $segmented > $model(medium) > $extend > $nomod166 > $stdnames(reg164ci.def) > $NOLOCALS > > regdef R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15 > ;non-used Regs by I²C-Subs: R3, R5, R8, R9, R10, R11, ((R14), R15) > ;************************************************************************************************************** > > ; P1L.0 CC60IO DI > ; P1L.1 COUT60 DO > ; P1L.2 CC61IO CLK > ; P1L.3 COUT61 CS > ; P1L.4 CC62IO > ; P1L.5 COUT62 > ; P1L.6 COUT63 > ; P1L.7 CTRAP > ; P1H.0 CC6POS0 > ; P1H.1 CC6POS1 > ; P1H.2 CC6POS2 > ; P1H.3 T7IN > ; P1H.4 CC24IO > ; P1H.5 CC25IO > ; P1H.6 CC26IO > ; P1H.7 CC27IO > > P1L_ EQU 0FF04h > > ; Definition der OS-Routinen > OSsegment EQU 0 > POP_R4 EQU 0765AH ;uses: R4, R12, R13, R14 > PUSH_R12 EQU 075D6H ;uses: R1, R2, R12, R13,R14,R15 > POP_LONG EQU 07680H ;return in R4, R5 > PUSH_LONG EQU 075fEH ;Value in R12, R13 > > userseg SECTION CODE word at 30000h ; Segment 3, Adresse 0000h > assume dpp3:userseg > > > ;************************************************************************************************************ > > ; Byte schreiben SPI > wrbyte proc far > CALLS OSsegment,POP_R4 ;data > MOVB RH4, RL4 > MOV R13,#0h > _1: ;for i=0 ... 7 > > ROL R4, #1 > BMOV COUT60,C > > BCLR CC61IO ; Clock > BSET CC61IO > CMPI1 R13,#07h > JMPR cc_SLT,_1 ; next for; jump if R13 < 0x07 > > BSET COUT60 > > POP R1 > POP R1 > RETS > wrbyte endp > > ; Byte lesen SPI > > rdbyte proc far > > MOV R12,#0 > MOV R13,#0h > _2: ;for i=0 ... 7 > > BCLR CC61IO ; Clock > SHL R12, #1 > BMOV R12.0,CC60IO > > BSET CC61IO > CMPI1 R13,#07h > JMPR cc_SLT,_2 ; next for; jump if R13 < 0x07 > > > CALLS OSsegment,PUSH_R12 ;state > POP R1 > POP R1 > RETS > rdbyte endp > > userseg ENDS > END > </asm> > > > > Wie rufe ich diese Unterprogramm dann korrekt auf? > > Ohne Parameterübergabe geht das mit <code>system.call()</code>. > Mit Parameterübergabe muß Du eigene Funktionen schreiben: > <code>inline function wrByte(int data) > { > inline vmcodes.VM_INLINE_SYSCALL + 0x300;// 0x300 = Segment 3 > inline 0; // Offset Einsprungadresse > } > > inline function rdByte() returns int > { > inline vmcodes.VM_INLINE_SYSCALL + 0x300; > inline 0x1E; // Offset Einsprungadresse > }</code> > > > MfG André H.