;                               CCPatch.asm
;
;                                  V1.0
;
;                            15 September 1991
;                   ©Copyright 1991 by Reinhard Wilhelm
;                        This Program is FREEWARE!
;
; ***************************************************************************


SysBase         = 4
AllocMem        = -198
AllocAbs        = -204
OpenLibrary     = -552
CloseLibrary    = -414

Output          = -60
Write           = -48

LIB_VERSION     = 20

                move.l  SysBase,a6
                cmp.w   #34,LIB_VERSION(a6)
                bne.s   VersionError    ;Prüfen ob Kick 1.3 vorhanden

; ***************************************************************************

                move.l  #dosname,a1
                moveq   #34,d0
                jsr     OpenLibrary(a6)

                move.l  d0,a6
                bne.s   Out

VersionError:   moveq.l #20,d0
                rts

Out:            jsr     Output(a6)

                move.l  d0,d1           ;Textausgabe ins aktuelle
                move.l  #text,d2        ;CLI - Fenster
                move.l  #textend-text,d3
                jsr     Write(a6)

                move.l  a6,a1
                move.l  SysBase,a6
                jsr     CloseLibrary(a6)

; ***************************************************************************

                move.l  #Length,d0
                moveq   #0,d1           ;Speicher für Cold- und CoolCapture-
                jsr     AllocMem(a6)    ;Routine beantragen
                move.l  d0,a1
                lea.l   MemAlloc(pc),a0
                move.l  #Length-1,d2    ;Programm in beantragten Speicher
                                        ;kopieren
Copy:           move.b  (a0)+,(a1)+
                dbra    d2,Copy
                                        ;Adresse der Memory-Allocationroutine
                move.l  d0,$2e(a6)      ;in den CoolCapture-Vektor eintragen
                move.l  d0,a4
                add.l   #ColdCap-MemAlloc,a4  ;Adresse der neuen ColdCaptureRoutine
                move.l  a4,$2a(a6)      ;in den ColdCapture-Vektor eintragen

                moveq   #0,d1           ;Checksummen Berechnung
                move.w  d1,$24(a6)
                lea     $22(a6),a4
                moveq   #$18,d2
Checksumm:      add.w   (a4)+,d1
                dbra    d2,Checksumm
                not.w   d1
                move.w  d1,$24(a6)
                moveq   #0,d0
                rts

dosname:        dc.b    'dos.library',0
                even
text:           dc.b    27,'[33mCCPatch V1.0 ',27,'[31minstalled.',10
                dc.b    'ColdCapturePatch © 1991 by Reinhard Wilhelm. '
                dc.b    'This program is FREEWARE !.',10
textend:        even

; ***************************************************************************

MemAlloc:       move.l  #Length,d0      ;Speicher anfordern
                lea     MemAlloc(pc),a1
                jsr     AllocAbs(a6)
                rts

; ***************************************************************************

ColdCap:        bchg    #1,$bfe001
                lea.l   ColdCap(pc),a3
                move.l  a3,$2a(a6)      ;Resetvektor erneut setzen
                move.l  $3e(a6),a3      ;Chipmem-Test !!!
                cmp.l   #$200000,a3     ;Hier steht normalerweise $80000
                                        ;was bei mehr als 512k ChipMem
                                        ;zum Neustart des BootRoms
                                        ;,und somit zum verlust Reset-
                                        ;fester Programme führt !!!
                jmp     $fc01a0         ;Direkter Sprung ins Rom !!!   <== !!
                                        ;Hier ausnahmsweise erlaupt,
                                        ;da die Benutzung dieses Programms
                                        ;nur unter Kick 1.3 einen Sinn
                                        ;ergiebt !
Length          = *-MemAlloc

; ***************************************************************************

        END
