Re: Benötige Assembler-Routine Kategorie: Progr. Assembler, TaskingTools, OS (von Icebear - 17.07.2008 16:27) | ||
Als Antwort auf Benötige Assembler-Routine von Icebear - 16.05.2008 21:41 | ||
| ||
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: $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 Gru� Björn | ||
Antwort schreiben Antworten: |