Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Betriebssystem der Micro auslesen Kategorie: Verschiedenes (von SPY HARD - 3.12.2004 16:57)

Ich glaube, ich habe eine Möglichkeit zum Auslesen des Betriebssystems der Micro entdeckt. Damit würden natürlich auch die künstlichen Einschränkungen bei der Assemblerprogrammierung fallen.

Der Systemtreiber page0_ext1.s19 erweitert die Micro unter anderem um die Dateifunktionen OPEN#, PRINT# und INPUT#. Durch Auslesen mittels INPUT# kann der Flashspeicher des Kontrollers ausgelesen werden. Theoretisch würde es ausreichen, kontinuierlich Daten aus der Datei zu lesen: Am Ende des 64-kB-Adreßraums läuft der Zeiger über und auf diese Weise kann der gesamte Speicher ausgelesen werden. Dummerweise hat der Entwickler der C-Control an diesen Fall gedacht und einen Überlauf bei $fc00 abgefangen. Aber es dürfte möglich sein, den 16-Bit-Dateizeiger (auf Adresse $80) nach dem Öffnen der Datei durch Aufruf von SYS &hfdd9 gezielt zu inkrementieren. Damit könnte man also den Zeiger zunächst überlaufen lassen und anschließend mit INPUT# den Speicher ab Beginn auslesen.

Hier der entsprechende Ausschnitt aus dem Systemtreiber:

; ----------------------------------------------------------------------------
; Die Funktionen zum Datei-Handling (Funktionsnummer #$d2)
; Auf $80:$81 steht der Dateizeiger

fdbd : cdf0d2 jsr $f0d2           ; ins Betriebssystem, verm. nächstes Token holen
fdc0 : a302   cmpx #$02           ; OPEN# FOR READ/WRITE-Token
fdc2 : 232a   bls $fdee           ; branch if accu is lower or same (unsigned)
fdc4 : b680   lda $80             ;
fdc6 : a1fc   cmp #$fc            ; Überlauf abfangen
fdc8 : 222e   bhi $fdf8           ;
fdca : a305   cmpx #$05           ; PRINT#-Token
fdcc : 2713   beq $fde1           ; branch if equal (Z is set)
fdce : a306   cmpx #$06           ; INPUT#-Token
fdd0 : 2626   bne $fdf8           ; branch if not equal (Z is clear)
fdd2 : 5580   ldhx $80            ; 6808: Load H:X from M
fdd4 : f6     lda ,x              ; load accu with value at address in h:x
fdd5 : 8c     clrh                ; 6808: Clear H
fdd6 : cdf167 jsr $f167           ; ins Betriebssystem, verm. Wert auf Stack pushen
fdd9 : 3c81   inc $81             ;
fddb : 261b   bne $fdf8           ; Dateizeiger inkrementieren
fddd : 3c80   inc $80             ;
fddf : 2017   bra $fdf8           ; branch always to $fdf8

fde1 : cdf0eb jsr $f0eb           ; ins Betriebssystem
fde4 : 3c93   inc $93             ;
fde6 : 9b     sei                 ; set interrupt mask (disable interrupts)
fde7 : cdf457 jsr $f457           ; ins Betriebssystem
fdea : 8c     clrh                ; 6808: Clear H
fdeb : 9a     cli                 ; clear interrupt mask (enable interrupts)
fdec : 200a   bra $fdf8           ; branch always to $fdf8

fdee : c6ffb5 lda $ffb5           ; im 14-Byte-Flash
fdf1 : b781   sta $81             ; store accumulator at address $81
fdf3 : c6ffb4 lda $ffb4           ; im 14-Byte-Flash
fdf6 : b780   sta $80             ; store accumulator at address $80
fdf8 : ccf21d jmp $f21d           ; ins Betriebssystem

Ich habe leider noch keine passende Micro. Kann das jemand überprüfen, der die Micro in der Version 2.01 besitzt? Angeblich ist der Treiber nicht für die Micro mit der OS-Version 2.00 geeignet...

 Antwort schreiben

Bisherige Antworten:

Re: Betriebssystem der Micro auslesen (von Dietmar - 3.12.2004 19:49)
Re: Betriebssystem der Micro auslesen (von Henrik - 3.12.2004 17:44)