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, > > ich antworte mir heute mal selber! Es geht! Somit ist ein Update per USB oder Modem möglich. > > Ich kopiere zuerst das Programm und die Konstanten vom USB-Stick (Prinzipiell auch per Modem > möglich) in die Segmente 1,2 und 7. Vorrausetzung ist, das die Konstanten nicht >64k sind. > Dann starte ich die Assemblerroutine, die Seg.1 in Seg. 4, Seg 2 in Seg 5 und Seg 7 in Seg 6 kopiert. > Anschließend wird ein Softwarereset ausgeführt und die neue Software. > > Hier die Assemblerroutine: > <asm> > $case > $segmented > $model(medium) > $extend > $nomod166 > $stdnames(reg164ci.def) > > regdef R2,R4,R12,R13,R14 > ;*************************************************** > userseg SECTION CODE word at 3B000h > assume dpp3:userseg > ;*************************************************** > ; Programm aus Segment 1+2 in Segment 4+5 kopieren > ; Konstanten aus Segment 7 in Segment 6 kopieren > ; Author: Björn Boldt aka Icebear > ; License: Freeware > > public kkupdate > > kkupdate proc far > ; 1. Segment 4+5+6 löschen > CALLS 0,0255ch ;Löschroutine in int. RAM kopieren > MOV R12,#4 ;Segment 4 > CALLS 0,02552h ;Erase-routine > MOV R12,#5 ;Segment 5 > CALLS 0,02552h ;Erase-routine > MOV R12,#6 ;Segment 6 > CALLS 0,02552h ;Erase-routine > > ; 2. Kopieren > CALLS 0, 025d0h ;Schreibroutine in int. RAM kopieren > ;Segment 1 -> 4 > mov R2, #0 ;mit Addr 0 beginnen > Loop1: > ;Addr in R2 > mov R4, #1 ;aus Segm 1 lesen > ;Segm in R4 > EXTS R4, #1 > mov R14, [R2] ;in R14 lesen > > MOV R12, #4 ;in Segment 4 schreiben > MOV R13, R2 ;Addr > CALLS 0,02552h ;Schreib-Routine > add R2, #2 > cmp R2, #0 > jmpr cc_NZ, Loop1 > > ;Segment 2 -> 5 > CALLS 0, 025d0h ;Schreibroutine in int. RAM kopieren > mov R2, #0 ;mit Addr 0 beginnen > Loop2: > ;Addr in R2 > mov R4, #2 ;aus Segm 2 lesen > ;Segm in R4 > EXTS R4, #1 > mov R14, [R2] ;in R14 lesen > > MOV R12, #5 ;in Segment 5 schreiben > MOV R13, R2 ;Addr > CALLS 0,02552h ;Schreib-Routine > add R2, #2 > cmp R2, #0 > jmpr cc_NZ, Loop2 > > ;Segment 7 -> 6 (Konstanten) > mov R2, #0 ;mit Addr 0 beginnen > Loop3: > ;Addr in R2 > mov R4, #7 ;aus Segm 7 lesen > ;Segm in R4 > EXTS R4, #1 > mov R14, [R2] ;in R14 lesen > > MOV R12, #6 ;in Segment 6 schreiben > MOV R13, R2 ;Addr > CALLS 0,02552h ;Schreib-Routine > add R2, #2 > cmp R2, #0 > jmpr cc_NZ, Loop3 > > ; 3. Segment 1+2+7 löschen > CALLS 0,0255ch ;Löschroutine in int. RAM kopieren > MOV R12,#1 ;Segment 1 > CALLS 0,02552h ;Erase-routine > MOV R12,#2 ;Segment 2 > CALLS 0,02552h ;Erase-routine > MOV R12,#7 ;Segment 7 > CALLS 0,02552h ;Erase-routine > > ; 4. Neustart > srst > CALLS 0, 0h > JMPS 0, 0h > > pop R2 ;2xPOP > pop R2 > rets ;Rücksprung > kkupdate endp > > userseg ends > end > </asm> > > > Gruß Björn