
   opt   l+

   incdir      "vd0:include/"
   include   "misc/easystart.i"
   jmp   Start


   include   intuition/intuition.i
   include   intuition/intuition_lib.i
           include    exec/memory.i
   include   exec/exec_lib.i
   include   graphics/graphics_lib.i
   include   graphics/text.i
   include   libraries/dos_lib.i
   include   libraries/dos.i

PRINT   macro
   move   #\1,d0   
   move   #\2,d1   
   move.l   Window,a1
   move.l   wd_RPort(a1),a1
   CALLGRAF   Move      
   move   #\3,d0   
   move.l   Window,a1
   move.l   wd_RPort(a1),a1
   CALLGRAF   SetAPen
   lea   \4,a0   
   move.l   #\5,d0   
   move.l   Window,a1      
   move.l   wd_RPort(a1),a1   
   CALLGRAF   Text
   endm

OpenThem   lea   dosname(pc),a1
   moveq.l   #0,d0
   CALLEXEC    OpenLibrary
   move.l   d0,_DOSBase   
   lea   intname(pc),a1                 
   moveq.l   #0,d0      
   CALLEXEC    OpenLibrary
   move.l   d0,_IntuitionBase  
   lea   grafname(pc),a1
   moveq.l   #0,d0
   CALLEXEC    OpenLibrary
   move.l   d0,_GfxBase
   rts
_DOSBase   dc.l   0
dosname   DOSNAME
_GfxBase   dc.l   0
grafname   GRAFNAME
_IntuitionBase   dc.l   0
intname   INTNAME

NewWindow   dc.w   300,100,160,45
   dc.b   1,2
   dc.l   CLOSEWINDOW!GADGETUP
   dc.l   WINDOWCLOSE!ACTIVATE!WINDOWDRAG!WINDOWDEPTH!RMBTRAP
   dc.l   Gadget1
   dc.l   0,Title
   dc.l   0,0
   dc.w   0,0,0,0
   dc.w   WBENCHSCREEN
Title   dc.b   "FMC by RF",0
Gadget1   dc.l   0
   dc.w   9,13,32,30
   dc.w   GADGHCOMP!GADGHIMAGE!GADGIMAGE,RELVERIFY!TOGGLESELECT,BOOLGADGET
   dc.l   Image1,Image2,0,0,0
   dc.w   1
   dc.l   0
Image1   dc.w   0,0,32,30,2
   dc.l   Data1
   dc.b   1+2,0
   dc.l   0
Image2   dc.w   0,0,32,30,2
   dc.l   Data2
   dc.b   1+2,0
   dc.l   0
Font   dc.l   FName
   dc.w   TOPAZ_EIGHTY
   dc.b   FS_NORMAL
   dc.b   FPF_ROMFONT
FName   dc.b   "topaz.font",0

Window   dc.l   0
   
Start   bsr   OpenThem
   lea.l   NewWindow(pc),a0
   CALLINT   OpenWindow
   move.l   d0,Window
   beq   exit
   sub.l   a1,a1
   CALLEXEC   FindTask
   move.l   d0,a1
   move.b   #-15,d0
   CALLEXEC   SetTaskPri
   jsr   Init
   lea.l   Font(pc),a0
   CALLGRAF   OpenFont
   move.l   Window,a1
   move.l   wd_RPort(a1),a1
   move.l   d0,a0
   CALLGRAF   SetFont


wait   PRINT   50,20,2,Text1,4
   PRINT   50,30,3,Text2,4
   PRINT   50,40,3,Text3,4
   moveq   #MEMF_PUBLIC,d1 
   CALLEXEC    AvailMem      
          move.l     d0,d2 
   lea   buffer,a0   
   bsr   ASCII
   PRINT   90,20,1,buffer,8
   moveq   #MEMF_FAST,d1 
   CALLEXEC    AvailMem      
          move.l     d0,d2 
   lea   buffer,a0   
   bsr   ASCII
   PRINT   90,30,1,buffer,8
   moveq   #MEMF_CHIP,d1 
   CALLEXEC    AvailMem      
          move.l     d0,d2 
   lea   buffer,a0   
   bsr   ASCII
   PRINT   90,40,1,buffer,8

   move.l   Window,a0
   move.l   wd_UserPort(a0),a0
   CALLEXEC   GetMsg
   tst.l   d0
   bne   Message
   bra   wait
Message   move.l   d0,a1
   move.l   im_Class(a1),d4
   CALLEXEC   ReplyMsg
   cmp.l   #CLOSEWINDOW,d4
   bne   Change
   move.l   Window,a0
   CALLINT   CloseWindow
   jsr   Reset
exit   moveq   #0,d0
   rts
Change   eor.b   #$ff,FM_Flag
   bra   wait





ASCII   clr.b   d3   
   moveq   #7,d0   
   lea   buffer,a0   
   lea   pwrof10,a1   
nex   moveq   #'0',d1   
dec   addq   #1,d1   
   sub.l   (a1),d2   
   bcc.s   dec   
   subq   #1,d1   
   add.l   (a1),d2   
   move.b   d1,(a0)+   
   lea   4(a1),a1   
   dbra   d0,nex
   moveq   #6,d0   
   lea   buffer,a0
rep   cmp.b   #'0',(a0)
   bne   done
   move.b   #' ',(a0)+
   dbra   d0,rep   
done   rts

pwrof10   dc.l   10000000
   dc.l   1000000
   dc.l   100000
   dc.l   10000
   dc.l   1000
   dc.l   100
   dc.l   10
   dc.l   1
buffer   ds.b   10


Text1   dc.b   "RAM "
Text2   dc.b   "Fast"
Text3   dc.b   "Chip"
Init   move.l   4,a6
   move.l   _LVOAvailMem+2(a6),NAvM+2
   move.l   #NewAvailMem,_LVOAvailMem+2(a6)
   move.l   _LVOAllocMem+2(a6),NAcM+2
   move.l   #NewAllocMem,_LVOAllocMem+2(a6)
   rts
Reset   move.l   4,a6
   move.l   NAvM+2,_LVOAvailMem+2(a6)
   move.l   NAcM+2,_LVOAllocMem+2(a6)
   rts

FM_Flag   dc.b   0
   even
NewAvailMem   tst.b   FM_Flag
   beq.s   NAvM
   btst   #2,d1
   bne   NAvM2
   or.b   #%11,d1
NAvM   jmp   0
NAvM2   moveq.l   #0,d0
   rts

NewAllocMem   tst.b   FM_Flag
   beq.s   NAcM
   btst   #2,d1
   bne   NAvM2
   or.b   #%11,d1
NAcM   jmp   0


   section   "data",DATA_C

Data1   dc.b $ff,$ff,$ff,$ff,$c0,$00,$00,$03,$c0,$79,$f0,$03,$c0,$cd,$98,$03
   dc.b $c0,$cd,$98,$03,$c0,$79,$98,$03,$c0,$00,$00,$03,$c0,$03,$c0,$03
   dc.b $c0,$07,$e0,$03,$c0,$07,$e0,$03,$c0,$03,$c0,$03,$c0,$03,$c0,$03
   dc.b $c0,$07,$e0,$03,$c0,$0b,$d0,$03,$c0,$13,$c8,$03,$c0,$13,$c8,$03
   dc.b $c0,$08,$10,$03,$c0,$07,$e0,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
   dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$01,$c7,$03
   dc.b $c1,$e3,$0c,$03,$c3,$37,$9e,$03,$c3,$33,$0c,$03,$c1,$e3,$0c,$03
   dc.b $c0,$00,$00,$03,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$c0,$00,$00,$03
   dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
   dc.b $c0,$28,$00,$03,$c0,$57,$c0,$03,$c0,$2f,$e0,$03,$c0,$17,$e0,$03
   dc.b $c0,$2b,$c0,$03,$c0,$17,$c0,$03,$c0,$2b,$c0,$03,$c0,$17,$e0,$03
   dc.b $c0,$2f,$f0,$03,$c0,$0f,$f0,$03,$c0,$07,$e0,$03,$c0,$00,$00,$03
   dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
   dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
   dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$ff,$ff,$ff,$ff
   
Data2   dc.b $ff,$ff,$ff,$ff,$c0,$00,$00,$03,$c0,$79,$f0,$03,$c0,$cd,$98,$03
   dc.b $c0,$cd,$98,$03,$c0,$79,$98,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
   dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
   dc.b $c0,$07,$e0,$03,$c0,$08,$10,$03,$c0,$13,$c8,$03,$c0,$13,$c8,$03
   dc.b $c0,$0b,$d0,$03,$c0,$07,$e0,$03,$c0,$03,$c0,$03,$c0,$03,$c0,$03
   dc.b $c0,$07,$e0,$03,$c0,$07,$e0,$03,$c0,$03,$c0,$03,$c0,$01,$c7,$03
   dc.b $c1,$e3,$0c,$03,$c3,$37,$9e,$03,$c3,$33,$0c,$03,$c1,$e3,$0c,$03
   dc.b $c0,$00,$00,$03,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$c0,$00,$00,$03
   dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
   dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
   dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$07,$e0,$03
   dc.b $c0,$0f,$f0,$03,$c0,$2f,$f0,$03,$c0,$17,$e0,$03,$c0,$2b,$c0,$03
   dc.b $c0,$17,$c0,$03,$c0,$2b,$c0,$03,$c0,$17,$e0,$03,$c0,$2f,$e0,$03
   dc.b $c0,$57,$c0,$03,$c0,$28,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03
   dc.b $c0,$00,$00,$03,$c0,$00,$00,$03,$c0,$00,$00,$03,$ff,$ff,$ff,$ff

   
      


   
 



 


   
   
   

