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

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
Ich nutze:
C-Control II Station, OSOPT V3.1
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: