

resvalid    EQU $426
resvector   EQU $42A
phystop     EQU $42E
_memtop     EQU $436
trp14ret    EQU $486
_md         EQU $49E
_hz_200     EQU $4BA
_SYSBASE    EQU $4F2
memval3     EQU $51A
PROC_TYPE   EQU $59E
_cookies    EQU $5A0
TT_ramtop   EQU $5A4
TT_ramvalid EQU $5A8


MACRO Super adr
        pea    adr
        move.w #$20,-(sp)                       ; Super
        trap   #1
        addq.l #6,sp
ENDM

MACRO PRINTLINE message
        movem.l d1-d2/a1-a2,-(a7)
        pea    message
        move   #9,-(sp)                         ; Cconws
        trap   #1
        addq.l #6,sp
        movem.l (a7)+,d1-d2/a1-a2
ENDM




        .TEXT

; for PASM

        MC68030


        movea.l $0004(a7),a5                    ; BasePagePointer from Stack
        move.l  $000C(a5),d0                    ; text segment size
        add.l   $0014(a5),d0                    ; data segment size
        add.l   $001C(a5),d0                    ; bss segment size
        add.l   #$708,d0                        ; for stack and basepage
        and.b   #$FE,d0
        lea     -$68(a5,d0.l),a7
        movem.l d1-d2/a1-a2,-(a7)
        move.l  d0,-(a7)
        pea     (a5)
        clr.w   -(a7)
        move.w  #$4A,-(a7)                      ; Mshrink
        trap    #1
        adda.w  #$C,a7
        movem.l (a7)+,d1-d2/a1-a2
        move.l  #$4D616758,d0                   ; MagX
        bsr     GET_COOKIE
        bpl     LAC2
        clr.l   MACHINE
        clr.w   CT60
        clr.w   EXT_CLOCK
        move.l  #$5F4D4348,d0                   ; _MCH
        bsr     GET_COOKIE
        bmi.s   L06A                            ; no cookie-jar
        movea.l d0,a0
        move.l  (a0),MACHINE
L06A:
        cmpi.l  #$30000,MACHINE                 ; Falcon
        bne.s   L0B6
        clr.l   FPU.l
        move.l  #$5F435055,d0                   ; _CPU
        bsr     GET_COOKIE
        bmi.s   L0B6                            ; no cookie-jar
        movea.l d0,a0
        move.l  (a0),CPU
        cmpi.l  #$3C,CPU                        ; 060
        bne.s   L0B6
        st      CT60
        move.l  #$5F465055,d0                   ; _FPU
        bsr     GET_COOKIE
        bmi.s   L0B6                            ; no cookie-jar
        movea.l d0,a0
        move.l  (a0),FPU
L0B6:
        PRINTLINE Info_Text
        move.w  #-$1,-(a7)
        move.w  #$B,-(a7)                       ; Kbshift
        trap    #13
        addq.l  #4,a7
        and.w   #$3,d0                          ; Shift
        cmp.w   #$3,d0
        beq     LAC2
        move.l  #$5F465251,d0                   ; _FRQ, internal clock
        bsr     GET_COOKIE
        bmi     L1CA
        movea.l d0,a0
        move.l  (a0),d0
        cmp.l   #$20,d0
        bls     L1CA
        link    a5,#-$4
        clr.w   -$2(a5)
        lea     -$4(a5),a0
        moveq   #$2,d1
        bsr     CONV_DECI
        PRINTLINE Text_Internal_clock
        PRINTLINE -$0004(a5)
        PRINTLINE Text_Mhz
        unlk    a5
        move.l  #$5F465245,d0                   ; _FRE, external clock
        bsr     GET_COOKIE
        bmi.s   L1CA
        movea.l d0,a0
        move.l  (a0),d0
        move.l  d0,-(a7)
        link    a5,#-$4
        clr.w   -$2(a5)
        lea     -$4(a5),a0
        moveq   #$2,d1
        bsr     CONV_DECI
        PRINTLINE Text_external_clock
        PRINTLINE -$0004(a5)
        PRINTLINE Text_Mhz
        unlk    a5
        move.l  (a7)+,d0
        cmp.l   #$20,d0
        bne.s   L1CA
        st      EXT_CLOCK
L1CA:
        movem.l d1-d2/a1-a2,-(a7)
        move.w  #$0,-(a7)
        pea     NOM_MAGIC+1
        move.w  #$003D,-(a7)                    ; Fopen
        trap    #1
        addq.w  #8,a7
        movem.l (a7)+,d1-d2/a1-a2
        move.w  d0,d7
        bmi     LAC2
        movem.l d1-d2/a1-a2,-(a7)
        move.w  #$0002,-(a7)
        move.w  d7,-(a7)
        move.l  #$00000000,-(a7)
        move.w  #$0042,-(a7)                    ; Fseek
        trap    #1
        adda.w  #$000A,a7
        movem.l (a7)+,d1-d2/a1-a2
        move.l  d0,d6
        ble     LAC2
        movem.l d1-d2/a1-a2,-(a7)
        move.w  #$0000,-(a7)
        move.w  d7,-(a7)
        move.l  #$00000000,-(a7)
        move.w  #$0042,-(a7)                    ; Fseek
        trap    #1
        adda.w  #$000A,a7
        movem.l (a7)+,d1-d2/a1-a2
        tst.l   d0
        bmi     LAC2
        movem.l d1-d2/a1-a2,-(a7)
        move.l  d6,-(a7)
        move.w  #$0048,-(a7)                    ; Malloc
        trap    #1
        addq.w  #6,a7
        movem.l (a7)+,d1-d2/a1-a2
        tst.l   d0
        ble     LAC2
        movea.l d0,a6
        movem.l d1-d2/a1-a2,-(a7)
        pea     (a6)
        move.l  d6,-(a7)
        move.w  d7,-(a7)
        move.w  #$003F,-(a7)                    ; Fread
        trap    #1
        adda.w  #$000C,a7
        movem.l (a7)+,d1-d2/a1-a2
        move.l  d0,-(a7)
        movem.l d1-d2/a1-a2,-(a7)
        move.w  d7,-(a7)
        move.w  #$003E,-(a7)                    ; Fclose
        trap    #1
        addq.w  #4,a7
        movem.l (a7)+,d1-d2/a1-a2
        cmp.l   (a7)+,d6
        bne     LAC2
        tst.l   d0
        bmi     LAC2
        cmpi.w  #$601A,(a6)
        bne     LAC2
        movea.l $0030(a6),a0
        lea     $1C(a6,a0.l),a0
        cmpi.l  #$87654321,(a0)+
        bne     LAC2
        movea.l (a0)+,a5
        addq.l  #4,a0
        cmpi.l  #$4D414758,(a0)                 ; MAGX
        bne     LAC2
        movem.l d1-d2/a1-a2,-(a7)
        Super 0
        movem.l (a7)+,d1-d2/a1-a2
        move.l  #$01000000,_md
        cmpi.l  #$1357BD13,TT_ramvalid
        bne.s   L2E2
        cmpi.l  #$01080000,TT_ramtop
        bcs.s   L2E2
        movea.l #$01000000,a5
L2E2:
        cmpi.l  #$00020000,MACHINE              ; Atari TT or Hades?
        bcs.s   L306
        move.w  #$0300,d0
        cmpi.l  #$00030000,MACHINE              ; Falcon?
        bcs.s   L302
        move.w  #$0400,d0
L302:
        move.w  d0,$001E(a6)
L306:
        movem.l d1-d2/a1-a2,-(a7)
        move.w  #$0019,-(a7)                    ; Dgetdrv
        trap    #1
L310:
        addq.w  #2,a7
        movem.l (a7)+,d1-d2/a1-a2
        movea.l $0030(a6),a0
        lea     $1C(a6,a0.l),a0
        lea     $007A(a0),a0
        cmpi.l  #$5F5F5F5F,(a0)
        bne.s   L33E
        add.b   #$41,d0
        move.b  d0,(a0)+
        move.b  #$3A,(a0)+
        lea     NOM_MAGIC,a1
L33A:
        move.b  (a1)+,(a0)+
        bne.s   L33A
L33E:
        move.l  $0002(a6),d0
        add.l   $0006(a6),d0
        move.l  d0,d5
        add.l   $000E(a6),d0
        lea     $1C(a6,d0.l),a3
        lea     $00(a6,d6.l),a2
        cmpa.l  a2,a3
        bcc.s   L37A
        lea     $001C(a6),a0                    ; reloge MagiC
        move.l  (a3)+,d0
L35E:
        adda.l  d0,a0
        move.l  a5,d0
        add.l   d0,(a0)
L364:
        cmpa.l  a2,a3
        bhi.s   L37A
        moveq   #$00,d0
L36A:
        move.b  (a3)+,d0
        beq.s   L37A
        cmp.b   #$01,d0
        bne.s   L35E
        lea     $00FE(a0),a0
        bra.s   L364

L37A:
        lea     $001C(a6),a0
        lea     $00(a0,d5.l),a1
        moveq   #$00,d0
L384:
        add.l   (a0)+,d0
        cmpa.l  a0,a1
        bcs.s   L384
        move.l  d0,trp14ret
        tst.w   CT60
        beq     LA10
        lea     $001C(a6),a1                    ; patch
        move.l  d5,d1
        lsr.l   #1,d1
        moveq   #$00,d2


; Patch cache 1
L3A2:
        move.l  (a1),d0                         ; caches
        cmp.l   #$203C0000,d0                   ; MOVE.L #$808,D0
        bne.s   L41A
        cmpi.l  #$08084E7B,$0004(a1)            ; MOVEC.L D0,CACR
        beq.s   L3EA
        cmpi.l  #$31114E7B,$0004(a1)            ; MOVE.L #$3111,D0
        bne.s   L41A
        move.l  #$203CA080,(a1)
        move.l  #$80004E7B,$0004(a1)
        PRINTLINE Text_Patch_cache_1
        addq.w  #1,d2
        bra     L95E

; Patch cache 2
L3EA:
        move.l  #$70004E7B,(a1)
        move.l  #$00024E71,$0004(a1)
        move.w  #$F4F8,$0008(a1)                ; CPUSHA BC
        PRINTLINE Text_Patch_cache_2
        addq.w  #1,d2
        bra     L95E

; Patch cache 3
L41A:
        cmp.l   #$4E7A0002,d0                   ; MOVE.L CACR,D0
        bne.s   L46C
        cmpi.l  #$08C00003,$0004(a1)            ; BSET #3,D0
        bne.s   L46C
        cmpi.l  #$4E7B0002,$0008(a1)            ; MOVEC.L D0,CACR
        bne.s   L46C
        cmpi.l  #$70021238,$000C(a1)
        bne.s   L46C
        move.l  #$4E714E71,d0
        move.l  d0,(a1)
        move.l  d0,$0004(a1)
        move.l  d0,$0008(a1)
        PRINTLINE Text_Patch_cache_3
        addq.w  #1,d2
        bra     L95E

; Patch movep 1
L46C:
        cmp.l   #$03C80000,d0                   ; MOVE.L D1,(A0)
        bne.s   L4BA
        cmpi.l  #$03C80008,$0004(a1)            ; MOVEP.L D1,8(A0)
        bne.s   L4BA
        cmpi.l  #$03C80010,$0008(a1)            ; MOVEP.L D1,16(A0)
        bne.s   L4BA
        move.l  #$72E84230,(a1)
        move.l  #$10185481,$0004(a1)
        move.l  #$66F84E71,$0008(a1)
        PRINTLINE Text_Patch_movep_1
        addq.w  #1,d2
        bra     L95E

; Patch movep 2
L4BA:
        cmp.l   #$203C0088,d0                   ; MOVE.L #$00880105,D0
        bne.s   L51E
        cmpi.l  #$010501C8,$0004(a1)            ; MOVEP.L D0,$26(A0)
        bne.s   L51E
        cmpi.w  #$0026,$0008(a1)
        bne.s   L51E
        move.l  #$42280026,(a1)
        move.l  #$117C0088,$0004(a1)
        move.l  #$0028117C,$0008(a1)
        move.l  #$0001002A,$000C(a1)
        move.l  #$117C0005,$0010(a1)
        move.l  #$002C6038,$0014(a1)
        PRINTLINE Text_Patch_movep_2
        addq.w  #1,d2
        bra     L95E

; Patch CPU type
L51E:
        cmp.l   #$204F7000,d0                   ; 060
        bne.s   L550
        cmpi.w  #$21FC,$0004(a1)
        bne.s   L550
        move.l  #$703C4E75,(a1)
        PRINTLINE Text_Patch_CPU_type
        addq.w  #1,d2
        bra     L95E

; Patch vectors 1
L550:
        cmp.l   #$41F80008,d0                   ; vectors
        bne.s   L584
        cmpi.l  #$703D43FA,$0004(a1)
        bne.s   L584
        move.w  #$7008,$0004(a1)
        PRINTLINE Text_Patch_Vectors_1
        addq.w  #1,d2
        bra     L95E

; Patch vectors 2
L584:
        cmp.l   #$703D20C9,d0                   ; vectors
        bne.s   L5B6
        cmpi.l  #$D3C151C8,$0004(a1)
        bne.s   L5B6
        move.w  #$7008,(a1)
        PRINTLINE Text_Patch_Vectors_2
        addq.w  #1,d2
        bra     L95E

; Patch vectors 3
L5B6:
        cmp.l   #$21C80010,d0                   ; vectors
        bne.s   L5EC
        cmpi.l  #$21C8002C,$0004(a1)
        bne.s   L5EC
        move.l  #$4E714E71,$0004(a1)
        PRINTLINE Text_Patch_Vectors_3
        addq.w  #1,d2
        bra     L95E

; Patch Reset 1
L5EC:
        cmp.l   #$4E700CB8,d0                   ; reset
        bne.s   L61A
        cmpi.l  #$31415926,$0004(a1)
        bne     L95E
        PRINTLINE Text_Patch_Reset_1
        addq.w  #1,d2
        bra.s   L644

; Patch Reset 2
L61A:
        cmp.l   #$4E7021F8,d0                   ; reset
        bne.s   L64C
        cmpi.l  #$00040008,$0004(a1)
        bne.s   L5EC
        PRINTLINE Text_Patch_Reset_2
        addq.w  #1,d2
L644:
        move.w  #$4E71,(a1)                     ; Patch reset 1 or reset 2
        bra     L95E

; Patch DSP
L64C:
        cmp.l   #$4E7B0002,d0                   ; Init DSP
        bne.s   L692
        cmpi.l  #$0C380004,$0004(a1)
        bne.s   L692
        cmpi.w  #$665E,$000A(a1)
        bne.s   L692
        cmpi.w  #$6100,$000C(a1)
        bne.s   L692
        move.l  #$4E714E71,$000C(a1)
        PRINTLINE Text_Patch_DSP
        addq.w  #1,d2
        bra     L95E

; Patch Floppy
L692:
        cmp.l   #$610008A6,d0                   ; floppy
        bne.s   L6D0
        cmpi.l  #$61000AF2,$0004(a1)
        bne.s   L6D0
        cmpi.l  #$3CBC0180,$0008(a1)
        bne.s   L6D0
        move.l  #$610008BA,$0004(a1)
        PRINTLINE Text_Patch_Floppy
        bra     L95E

; Patch FPU Cookie
L6D0:
        cmp.l   #$54415441,d0                   ; FPU cookie
        bne.s   L71C
        cmpi.l  #$54415441,$0004(a1)
        bne.s   L71C
        cmpi.w  #$50F8,$0008(a1)
        bne.s   L71C
        move.w  #$7210,$0006(a1)
        PRINTLINE Text_Patch_FPU_Cookie
        addq.w  #1,d2
        tst.l   FPU
        bne     L95E
        move.w  #$7200,$0006(a1)
        bra     L95E

; Patch context FPU
L71C:
        cmp.l   #$F3274A17,d0                   ; context FPU
        bne.s   L75C
        cmpi.l  #$670CF227,$0004(a1)
        bne.s   L75C
        cmpi.l  #$E0FFF227,$0008(a1)
        bne.s   L75C
        move.l  #$4E714E71,$0002(a1)
        PRINTLINE Text_Patch_FPU
        addq.w  #1,d2
        bra     L95E

L75C:
        tst.l   FPU
        bne.s   L77C
        cmp.l   #$F3790100,d0                   ; FPU FRESTORE
        bne.s   L77C
        move.l  #$4E714E71,(a1)
        move.w  #$4E71,$0004(a1)
        bra     L95E

; Patch PMMU 030 tree
L77C:
        cmp.l   #$703F20D9,d0                   ; PMMU tree 030
        bne.s   L7B0
        cmpi.l  #$51C8FFFC,$0004(a1)
        bne.s   L7B0
        move.w  #$4E71,$0002(a1)
        PRINTLINE Text_Patch_PMMU
        addq.w  #1,d2
        bra     L95E

; Patch external clock 32MHz RGB monitor 1
L7B0:
        tst.w   EXT_CLOCK
        beq.s   L822
        cmp.l   #$720211C1,d0                   ; clock externe
        bne.s   L7F0
        cmpi.w  #$820A,$0004(a1)
        bne.s   L7F0
        move.l  #$4E714E71,(a1)
        move.w  #$4E71,$0004(a1)
        PRINTLINE Text_Patch_Monitor_1
        addq.w  #1,d2
        bra     L95E

; Patch external clock 32MHz RGB monitor 2
L7F0:
        cmp.l   #$31D8820A,d0                   ; clock externe
        bne.s   L822
        cmpi.w  #$4E75,$0004(a1)
        bne.s   L822
        move.l  #$4E714E71,(a1)
        PRINTLINE Text_Patch_Monitor_2
        addq.w  #1,d2
        bra     L95E

; Patch PSG printer
L822:
        cmp.l   #$40C1007C,d0                   ; ;PSG printer
        bne     L95E
        cmpi.l  #$070043F8,$0004(a1)
        bne     L95E
        cmpi.l  #$880045E9,$0008(a1)
        bne     L95E
        cmpi.l  #$000212BC,$000C(a1)
        bne     L95E
        cmpi.l  #$00071011,$0010(a1)
        bne     L95E
        cmpi.l  #$000000C0,$0014(a1)
        bne     L95E
        cmpi.l  #$148012BC,$0018(a1)
        bne     L95E
        cmpi.l  #$000F1498,$001C(a1)
        bne     L95E
        cmpi.l  #$12BC000E,$0020(a1)
        bne     L95E
        cmpi.l  #$10110200,$0024(a1)
        bne     L95E
        cmpi.l  #$00DF1480,$0028(a1)
        bne     L95E
        cmpi.l  #$14800000,$002C(a1)
        bne     L95E
        cmpi.l  #$00201480,$0030(a1)
        bne     L95E
        cmpi.l  #$46C170FF,$0034(a1)
        bne     L95E
        cmpi.w  #$4E75,$0038(a1)
        bne     L95E
        move.l  #$40E7007C,(a1)
        move.l  #$070043F8,$0004(a1)
        move.l  #$880045E9,$0008(a1)
        move.l  #$0002720F,$000C(a1)
        move.l  #$1018611C,$0010(a1)
        move.l  #$720E6112,$0014(a1)
        move.l  #$08800005,$0018(a1)
        move.l  #$611208C0,$001C(a1)
        move.l  #$0005610C,$0020(a1)
        move.l  #$46DF70FF,$0024(a1)
        move.l  #$4E751281,$0028(a1)
        move.l  #$10114E75,$002C(a1)
        move.l  #$12811480,$0030(a1)
        move.l  #$4E754E71,$0034(a1)
        move.w  #$4E71,$0038(a1)
        PRINTLINE Text_Patch_PSG
        addq.w  #1,d2

L95E:
        addq.w  #2,a1
        subq.l  #1,d1
        bgt     L3A2
        moveq   #$13,d3                         ; max patches
        tst.w   EXT_CLOCK
        beq.s   L972
        addq.w  #3,d3                           ; add 3
L972:
        cmp.w   d3,d2                           ; compare how many patches done
        beq     LA10
        PRINTLINE ERR
        link    a5,#-$0004
        clr.w   -$0002(a5)
        lea     -$0004(a5),a0
        move.l  d2,d0
        moveq   #$2,d1
        bsr     CONV_DECI
        PRINTLINE  -$0004(a5)
        movem.l d1-d2/a1-a2,-(a7)
        move.w  #$2F,-(a7)                      ; "/"
        move.w  #$2,-(a7)                       ; Cconout
        trap    #1
        addq.w  #4,a7
        movem.l (a7)+,d1-d2/a1-a2
        lea     -$0004(a5),a0
        move.l  d3,d0
        moveq   #$2,d1
        bsr     CONV_DECI
        PRINTLINE  -$0004(a5)
        unlk    a5
        movem.l d1-d2/a1-a2,-(a7)
        move.w  #$29,-(a7)                      ; ")"
        move.w  #$2,-(a7)                       ; Cconout
        trap    #1
        addq.w  #4,a7
        movem.l (a7)+,d1-d2/a1-a2
        movem.l d1-d2/a1-a2,-(a7)
        move.w  #$7,-(a7)                       ; Crawcin
        trap    #1
        addq.w  #2,a7
        movem.l (a7)+,d1-d2/a1-a2
LA10:
        ori     #$700,sr                        ; not allowed interruptions
        lea     LA5E(pc),a1
        lea     $0600  ,a0
        moveq   #$18,d0
LA1E:
        move.l  (a1)+,(a0)+
        dbf     d0,LA1E
        move.l  _memtop  ,phystop
        cmpi.l  #$28,CPU
        bcs.s   LA42
        dc.w    $F478                           ; CPUSHA DC
        moveq   #$00,d0                         ; inhibe & vide caches
        movec   d0,cacr
        dc.w    $F4D8                           ; CINVA BC
        bra.s   LA5A

LA42:
        cmpi.l  #$14,CPU
        bcs.s   LA5A
        movec   cacr,d0
        or.w    #$808,d0                        ; CD caches vid‚s
        movec   d0,cacr
LA5A:
        jmp     $0600

LA5E:
        movea.l a5,a0
        lea     $001C(a6),a1
LA64:
        move.l  d5,d0
        lsr.l   #3,d0
        subq.l  #1,d0
        cmpa.l  a0,a1                           ; d‚place MagiC
        bhi.s   LA7E
        beq.s   LA86
        adda.l  d5,a1
        adda.l  d5,a0
LA74:
        move.l  -(a1),-(a0)
        move.l  -(a1),-(a0)
        dbf     d0,LA74
        bra.s   LA86

LA7E:
        move.l  (a1)+,(a0)+
        move.l  (a1)+,(a0)+
        dbf     d0,LA7E
LA86:
        move.l  #$5555AAAA,memval3
        move.l  #$31415926,resvalid
        move.l  a5,resvector
        cmpa.l  #$01000000,a5
        bne.s   LAA8
        add.l   d5,_md
        bra.s   LABA

LAA8:
        add.l   d5,$000C(a5)
        movea.l $0014(a5),a0
        cmpi.l  #$87654321,(a0)+
        bne.s   LABA
        add.l   d5,(a0)
LABA:
        clr.l   _hz_200
        jmp     (a5)

        nop
LAC2:
        movem.l d1-d2/a1-a2,-(a7)
        clr.w   -(a7)                           ; Pterm0
        trap    #1
        addq.w  #2,a7
        movem.l (a7)+,d1-d2/a1-a2
        illegal
        rts

; A0:pointeur cible chaŚne ASCII
; D0:valeur sur 32 bits
; D1:nombre de chiffres
CONV_DECI:
        bsr     CONV_DECI_SIMPLE
        subq.w  #1,d1
        beq.s   LB04
        swap    d0
        tst.w   d0
        bne.s   LAFA                            ; d‚passement
        moveq   #$00,d0
LAE4:
        cmpi.b  #"0",$00(a0,d0.w)
        bne.s   LB04
        move.b  #" ",$00(a0,d0.w)               ; enl‚ve les z‚ros inutiles
        addq.w  #1,d0
        cmp.w   d1,d0
        bne.s   LAE4
        bra.s   LB04

LAFA:
        move.b  #$3F,$00(a0,d1.w)
        dbf     d1,LAFA
LB04:
        rts

; A0:pointeur cible chaŚne ASCII
; D0:valeur sur 32 bits
; D1:nombre de chiffres

CONV_DECI_SIMPLE:
        move.w  d1,-(a7)
        subq.w  #1,d1
        move.l  d0,-(a7)
LB0C:
        moveq   #$00,d0
        move.w  (a7),d0
        divu    #$000A,d0                       ; poids fort /10
        move.w  d0,(a7)                         ; r‚sultat poids fort
        move.w  $0002(a7),d0
        divu    #$000A,d0                       ; ((reste * 65536) + poids faible)/10
        move.w  d0,$0002(a7)                    ; ;r‚sultat poids faible
        swap    d0
        or.w    #$0030,d0
        move.b  d0,$00(a0,d1.w)
        dbf     d1,LB0C
        addq.l  #4,a7
        move.w  (a7)+,d1
        rts


; nom dans D0.L, au retour si < 0 pas de cookie
; retourne le pointeur sur donn‚e cookie dans D0

GET_COOKIE:
        movem.l d1-d7/a0-a1/a6,-(a7)
        move.l  d0,d6
        suba.l  a6,a6
        movem.l d1-d2/a1-a2,-(a7)
        Super   1
        movem.l (a7)+,d1-d2/a1-a2
        tst.l   d0
        bmi.s   LB6C                            ;  mode superviseur
        movem.l d1-d2/a1-a2,-(a7)
        Super   0
        movem.l (a7)+,d1-d2/a1-a2
        movea.l d0,a6                           ;  saves SSP
LB6C:
        moveq   #$00,d7
        move.l  _cookies  ,d0
        beq.s   LB88
        movea.l d0,a0
LB76:
        tst.l   (a0)
        beq.s   LB88
        cmp.l   (a0),d6
        bne.s   LB84
        move.l  a0,d7
        addq.w  #4,d7
        bra.s   LB88

LB84:
        addq.w  #8,a0
        bra.s   LB76

LB88:
        move.l  a6,d0
        beq.s   LB9E
        movem.l d1-d2/a1-a2,-(a7)
        Super (a6)
        addq.w  #6,a7
        movem.l (a7)+,d1-d2/a1-a2
LB9E:
        moveq   #-$01,d6
        move.l  d7,d0
LBA2:
        beq.s   LBA6
        moveq   #$00,d6
LBA6:
        tst.w   d6
        movem.l (a7)+,d1-d7/a0-a1/a6
        rts

        .DATA

Info_Text:
        dc.b    $0D,$0A,$0A,$1B,'p MagiC-BOOTER ',$1B,'q',$0D,$0A,$00
Text_Patch_cache_1:
        dc.b    $0D,$0A,'Patch cache 1',$00
Text_Patch_cache_2:
        dc.b    $0D,$0A,'Patch cache 2',$00
Text_Patch_cache_3:
        dc.b    $0D,$0A,'Patch cache 3',$00
Text_Patch_movep_1:
        dc.b    $0D,$0A,'Patch movep 1',$00
Text_Patch_movep_2:
        dc.b    $0D,$0A,'Patch movep 2',$00
Text_Patch_CPU_type:
        dc.b    $0D,$0A,'Patch CPU type',$00
Text_Patch_Vectors_1:
        dc.b    $0D,$0A,'Patch vectors 1',$00
Text_Patch_Vectors_2:
        dc.b    $0D,$0A,'Patch vectors 2',$00
Text_Patch_Vectors_3:
        dc.b    $0D,$0A,'Patch vectors 3',$00
Text_Patch_Reset_1:
        dc.b    $0D,$0A,'Patch reset 1',$00
Text_Patch_Reset_2:
        dc.b    $0D,$0A,'Patch reset 2',$00
Text_Patch_DSP:
        dc.b    $0D,$0A,'Patch DSP',$00
Text_Patch_Floppy:
        dc.b    $0D,$0A,'Patch floppy',$00
Text_Patch_FPU_Cookie:
        dc.b    $0D,$0A,'Patch FPU cookie',$00
Text_Patch_PMMU:
        dc.b    $0D,$0A,'Patch PMMU 030 tree',$00
Text_Patch_Monitor_1:
        dc.b    $0D,$0A,'Patch external clock 32MHz RGB monitor 1',$00
Text_Patch_Monitor_2:
        dc.b    $0D,$0A,'Patch external clock 32MHz RGB monitor 2',$00
Text_Patch_FPU:
        dc.b    $0D,$0A,'Patch context FPU',$00
Text_Internal_clock:
        dc.b    $0D,$0A,'Internal clock : ',$00
Text_external_clock:
        dc.b    ', External clock : ',$00
Text_Mhz:
        dc.b    ' Mhz',$00
Text_Patch_PSG:
        dc.b    $0D,$0A,'Patch PSG printer',$00
NOM_MAGIC:
        dc.b    '\magic.ram',$00
ERR:
        dc.b    $0D,$0A,$0A,'WARNING ! A part is not patched ! (',$00

        .BSS

CT60:      DS.W 1
EXT_CLOCK: DS.W 1
MACHINE:   DS.L 1
CPU:       DS.L 1
FPU:       DS.L 1

        end
