    incdir "include:"
    include "rtgmaster/rtgmaster.i"
    include "rtgmaster/rtgsublibs.i"
    include "rtgmaster/rtgmaster_lib.i"
    include "rtgmaster/rtgc2p.i"
    include "exec/memory.i"
    mc68020
start:
    move.l $4,a6
    movem.l d0-d7/a0-a6,-(sp)
    movem.l (sp)+,d0-d7/a0-a6
    lea rtgname,a1
    moveq #0,d0
    jsr -408(a6)
    move.l d0,rtgbase
    move.l #315392,d0
    move.l #MEMF_FAST+MEMF_CLEAR,d1
    jsr -198(a6)
    move.l d0,flames
    add.l #4096,d0
    move.l d0,new_flames
    add.l #4096,d0
    move.l d0,MapB
    move.l #56,d0
    move.l #MEMF_PUBLIC+MEMF_CLEAR,d1
    jsr -198(a6)
    move.l d0,timereq
    add.l #40,d0
    move.l d0,t1
    add.l #8,d0
    move.l d0,t2
    move.l #$FFFFFFFF,d0
    jsr -330(a6)
    move.l d0,signal
    lea timername,a0
    move.l #2,d0
    move.l timereq,a1
    move.l #0,d1
    jsr -444(a6)
    move.l timereq,a0
    add.l #20,a0
    move.l (a0),timerbase
    move.l rtgbase,a6
    lea srtags,a0
    jsr _LVORtgScreenModeReq(a6)
    move.l d0,smode
    move.l smode,a0
    lea sctags,a1
    jsr _LVOOpenRtgScreen(a6)
    move.l d0,rtgscreen
    move.l rtgscreen,a0
    lea tags,a1
    jsr _LVOGetRtgScreenData(a6)
    cmp.l #grd_PLANAR,pixel
    bne chunky
    move.l rtgscreen,a0
    lea table,a1
    jsr _LVOLoadRGBRtg(a6)
    move.l rtgscreen,a0
    jsr _LVOLockRtgScreen(a6)
    move.l d0,MapA

mainloop:
    move.l a6,-(sp)
    move.l timerbase,a6
    move.l t1,a0
    jsr -60(a6)
    move.l (sp)+,a6
    move.l flames,a0
    move.l a0,a1
    add.l #64,a1
    add.l #96,a0
    move #41*16,d0
    sub #1,d0
copyloop1:
    move.w (a0)+,(a1)+
    dbra d0,copyloop1
    move.l a0,a2
    move #3,d1
    add.l #6,a2
puthotspots:
    move.l a2,a0
    move.l #20,d0
    jsr Random
    add.l d0,a0
    move.l #190,d0
    jsr Random2
    move.w d0,(a0)
    dbra d1,puthotspots
    move.w #1,x
    move.w #1,y
flameloop:
    move.l flames,a0
    move.l new_flames,a1
    sub.l d0,d0
    move.w x,d0
    add.l d0,a0
    add.l d0,a1
    sub.l d0,d0
    move.w y,d0
    lsl.w #5,d0
    add.l d0,a0
    add.l d0,a1
    sub.l #1,a0
    sub.l d3,d3
    move.b (a0),d3 ; (x-1/y)
    add.l #2,a0
    add.b (a0),d3 ; (x+1/y)
    sub.l #32,a0
    add.b (a0),d3  ; (x+1/y-1)
    sub.l #1,a0
    add.b (a0),d3  ; (x/y-1)
    sub.l #1,a0
    add.b (a0),d3  ; (x-1/y-1)
    add.l #64,a0
    add.b (a0),d3  ; (x-1/y+1)
    add.l #1,a0
    add.b (a0),d3  ; (x/y+1)
    add.l #1,a0
    add.b (a0),d3  ; (x+1/y+1)
    lsr.b #3,d3
    move.b d3,(a1)
    add.w #1,x
    cmp #32,x
    bne flameloop
    move.w #1,x
    add.w #1,y
    cmp #44,y
    bne flameloop

    move.l new_flames,a0
    move.l flames,a1
    move #44,d0
    sub #1,d0
copyloop2:
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    dbra d0,copyloop2

teste:
    sub.l d5,d5
    move.l Width,d6
    move.l d6,d7
    mulu.l #40,d6
    mulu.l Height,d7
plotloopouter:
    move.l #0,d4
plotloop:
    move.l flames,a0
    move.l MapB,a1
    add.l d5,a1
    add d4,a1
    move #39,d2
    add.l #96,a0
plotit:
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    add.l Width,a1
    sub.l #32,a1
    dbra d2,plotit
    add.l #32,d4
    cmp.l Width,d4
    bls plotloop
    add.l d6,d5
    cmp.l d7,d5
    bls plotloopouter
    move.l ticks,d0
    move.l MapB,a0
    jsr _DrawMeter
    move.l rtgscreen,a0
    move.l MapA,a1
    move.l MapB,a2
    move.l signal,d0
    move.l #0,d1
    move.l #0,d2
    move.l Width,d3
    move.l Height,d4
    move.l #c2p_Selected,d5
    jsr _LVOCallRtgC2P(a6)
    jsr stopclock
    move.l d0,ticks
    btst #6,$bfe001
    bne mainloop

exit:
    move.l rtgscreen,a0
    jsr _LVOUnlockRtgScreen(a6)
    move.l rtgscreen,a0
    jsr _LVOCloseRtgScreen(a6)
    move.l smode,a0
    jsr _LVOFreeRtgScreenModeReq(a6)
    move.l rtgbase,a1
    move.l $4,a6
    jsr -414(a6)
    move.l signal,d0
    jsr -336(a6)
    move.l flames,a1
    move.l #315392,d0
    move.l $4,a6
    jsr -210(a6)
    move.l timereq,a1
    jsr -450(a6)
    move.l timereq,a1
    move.l #56,d0
    jsr -210(a6)
    lea text,a0
    add.l #12,a0
    move.l ticks2,d0
    divu.l ticks3,d0
    move.l d0,ticks
    move.l ticks,d0
    divu.l #1000,d0
    move.l d0,d3
    mulu.l #1000,d3
    add.l #'0',d0
    move.l d0,(a0)+
    move.l ticks,d0
    sub.l d3,d0
    divu.l #100,d0
    move.l d0,d1
    mulu.l #100,d1
    add.l #'0',d0
    move.b d0,(a0)+
    move.l ticks,d0
    sub.l d1,d0
    sub.l d3,d0
    divu.l #10,d0
    move.l d0,d2
    mulu.l #10,d2
    add.l #'0',d0
    move.b d0,(a0)+
    move.l ticks,d0
    sub.l d1,d0
    sub.l d2,d0
    sub.l d3,d0
    divu.l #1,d0
    add.l #'0',d0
    move.b d0,(a0)+
    lea dosname,a1
    moveq #0,d0
    jsr -408(a6)
    move.l d0,a6
    jsr -60(a6)
    move.l d0,d1
    move.l d0,d5
    move.l #text,d2
    move.l #texte-text,d3
    jsr -48(a6)
    move.l d5,d1
    move.l #text2,d2
    move.l #texte2-text2,d3
    jsr -48(a6)
    move.l a6,a1
    move.l $4,a6
    jsr -414(a6)
    rts
ticks: dc.l 0
ticks2: dc.l 0
ticks3: dc.l 0
_DrawMeter:
    move.l ticks,d0
dl:
    move.w #$0700,(a0)+
    dbra d0,dl
    rts
stopclock:
    move.l a6,-(sp)
    move.l timerbase,a6
    move.l t2,a0
    jsr -60(a6)
    move.l d0,d1
    move.l t2,a0
    move.l t1,a1
    move.l 4(a0),d0
    sub.l 4(a1),d0
    cmp.l #0,d0
    beq raus
    divu.l d0,d1
    move.l d1,d0
    add.l d0,ticks2
    add.l #1,ticks3
raus:
    move.l (sp)+,a6
    rts
t1: dc.l 0
t2: dc.l 0
timereq: dc.l 0
chunky:
    move.l rtgscreen,a0
    lea tags,a1
    jsr _LVOGetRtgScreenData(a6)
    move.l rtgscreen,a0
    lea table,a1
    jsr _LVOLoadRGBRtg(a6)
    move.l rtgscreen,a0
    jsr _LVOLockRtgScreen(a6)
    move.l d0,MapA
mainloop2:
    move.l a6,-(sp)
    move.l timerbase,a6
    move.l t1,a0
    jsr -60(a6)
    move.l (sp)+,a6
    move.l flames,a0
    move.l a0,a1
    add.l #64,a1
    add.l #96,a0
    move #41*16,d0
    sub #1,d0
copyloop12:
    move.w (a0)+,(a1)+
    dbra d0,copyloop12
    move.l a0,a2
    move #3,d1
    add.l #6,a2
puthotspots2:
    move.l a2,a0
    move.l #20,d0
    jsr Random
    add.l d0,a0
    move.l #190,d0
    jsr Random2
    move.w d0,(a0)
    dbra d1,puthotspots2
    move.w #1,x
    move.w #1,y
flameloop2:
    move.l flames,a0
    move.l new_flames,a1
    sub.l d0,d0
    move.w x,d0
    add.l d0,a0
    add.l d0,a1
    sub.l d0,d0
    move.w y,d0
    lsl.w #5,d0
    add.l d0,a0
    add.l d0,a1
    sub.l #1,a0
    sub.l d3,d3
    move.b (a0),d3 ; (x-1/y)
    add.l #2,a0
    add.b (a0),d3 ; (x+1/y)
    sub.l #32,a0
    add.b (a0),d3  ; (x+1/y-1)
    sub.l #1,a0
    add.b (a0),d3  ; (x/y-1)
    sub.l #1,a0
    add.b (a0),d3  ; (x-1/y-1)
    add.l #64,a0
    add.b (a0),d3  ; (x-1/y+1)
    add.l #1,a0
    add.b (a0),d3  ; (x/y+1)
    add.l #1,a0
    add.b (a0),d3  ; (x+1/y+1)
    lsr.b #3,d3
    move.b d3,(a1)
    add.w #1,x
    cmp #32,x
    bne flameloop2
    move.w #1,x
    add.w #1,y
    cmp #44,y
    bne flameloop2

    move.l new_flames,a0
    move.l flames,a1
    move #44,d0
    sub #1,d0
copyloop22:
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    dbra d0,copyloop22

teste2:
    sub.l d5,d5
    move.l Width,d6
    move.l d6,d7
    mulu.l #40,d6
    mulu.l Height,d7
plotloopouter2:
    move.l #0,d4
plotloop2:
    move.l flames,a0
    move.l MapA,a1
    add.l d5,a1
    add d4,a1
    move #39,d2
    add.l #96,a0
plotit2:
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    move.l (a0)+,(a1)+
    add.l Width,a1
    sub.l #32,a1
    dbra d2,plotit2
    add.l #32,d4
    cmp.l Width,d4
    bls plotloop2
    add.l d6,d5
    cmp.l d7,d5
    bls plotloopouter2
    jsr stopclock
    move.l d0,ticks
    move.l MapA,a0
    jsr _DrawMeter
    btst #6,$bfe001
    bne mainloop2
    bra exit
Random:
    clr.l d0
    move.b $dff006,d0
    ext.w d0
    ext.l d0
    and.l #31,d0
    cmp.l #20,d0
    bge Random
    rts
Random2:
    clr.l d0
    move.b $dff006,d0
    ext.w d0
    ext.l d0
    cmp.l #190,d0
    bge Random
    rts
rtgname: dc.b 'rtgmaster.library',0
timername: dc.b 'timer.device',0
dosname: dc.b 'dos.library',0
text: dc.b 'fps value :          ',0
texte:
text2: dc.b 10,13
texte2:
    even
timerbase: dc.l 0
rtgbase:
    dc.l 0
smode:
    dc.l 0
MapA:
    dc.l 0
srtags:
    dc.l smr_MinWidth,320
    dc.l smr_MaxWidth,1024
    dc.l smr_MinHeight,200
    dc.l smr_MaxHeight,768
    dc.l smr_ChunkySupport,512
    dc.l smr_PlanarSupport,-1
    dc.l 0,0
sctags:
    dc.l 0,0
tags:
    dc.l grd_Width
Width:
    dc.l 0
    dc.l grd_Height
Height:
    dc.l 0
    dc.l grd_PixelLayout
pixel:
    dc.l 0,0,0

rtgscreen:
    dc.l 0
signal:
    dc.l 0
table:
    dc.w 40,0
tablemain:
    dc.l 0,0,0,$20202020,0,0,$40404040,0,0,$60606060,0,0,$80808080,0,0,$A0A0A0A0,0,0,$C0C0C0C0,0,0,$E0E0E0E0,0,0
    dc.l $F0F0F0F0,0,0,$F0F0F0F0,$10101010,0,$F0F0F0F0,$20202020,0,$F0F0F0F0,$30303030,0,$F0F0F0F0,$40404040,0,$F0F0F0F0,$50505050,0,$F0F0F0F0,$60606060,0,$F0F0F0F0,$70707070,0
    dc.l $F0F0F0F0,$80808080,0,$F0F0F0F0,$90909090,0,$F0F0F0F0,$A0A0A0A0,0,$F0F0F0F0,$B0B0B0B0,0,$F0F0F0F0,$C0C0C0C0,0,$F0F0F0F0,$D0D0D0D0,0,$F0F0F0F0,$E0E0E0E0,0,$F0F0F0F0,$F0F0F0F0,0
    dc.l $F0F0F0F0,$F0F0F0F0,0,$F0F0F0F0,$F0F0F0F0,$10101010,$F0F0F0F0,$F0F0F0F0,$20202020,$F0F0F0F0,$F0F0F0F0,$30303030,$F0F0F0F0,$F0F0F0F0,$40404040,$F0F0F0F0,$F0F0F0F0,$50505050,$F0F0F0F0,$F0F0F0F0,$60606060,$F0F0F0F0,$F0F0F0F0,$70707070
    dc.l $F0F0F0F0,$F0F0F0F0,$80808080,$F0F0F0F0,$F0F0F0F0,$90909090,$F0F0F0F0,$F0F0F0F0,$A0A0A0A0,$F0F0F0F0,$F0F0F0F0,$B0B0B0B0,$F0F0F0F0,$F0F0F0F0,$C0C0C0C0,$F0F0F0F0,$F0F0F0F0,$D0D0D0D0,$F0F0F0F0,$F0F0F0F0,$E0E0E0E0,$F0F0F0F0,$F0F0F0F0,$F0F0F0F0
    dc.w 0
flames: 
    dc.l 0
MapB:
    dc.l 0
new_flames:
    dc.l 0
x:
    dc.w 0
y:
    dc.w 0
    END
