		incdir  include:
		incdir  lvo:

		include intuition/intuition.i
		include devices/timer.i
		include powerpc/ppcmacros.i
		include powerpc/powerpc.i

		include exec_lib.i
		include dos_lib.i
		include intuition_lib.i
		include graphics_lib.i
		include powerpc_lib.i

		xref    _PowerPCBase
		xref    _SysBase
		xref    _DOSBase
		xref    _LinkerDB

		smalldata
		executable
		escapestr

		section "PixelOMania",code

WINDOWWIDTH     =       200
WINDOWHEIGHT    =       100

start
		prolog
		pushgpr r26-r31
		la      r6,int_name
		li      r3,0
		RUN68K  _SysBase,OpenLibrary
		tstw    r3
		beq     .end
		sw      r3,_IntuitionBase
		la      r6,gfx_name
		li      r3,0
		RUN68K  _SysBase,OpenLibrary
		tstw    r3
		beq     .closeint
		sw      r3,_GfxBase
		la      r4,title
		la      r22,Args
		RUN68K_XL       _DOSBase,VPrintf
		li      r5,0
		la      r6,WindowTags
		RUN68K  _IntuitionBase,OpenWindowTagList
		tstw    r3
		beq     .closegfx
		sw      r3,_Window
		lwz     r31,wd_UserPort(r3)
		lwz     r29,wd_RPort(r3)
		sw      r29,_RPort
		li      r30,0
		li      r28,0
		li      r27,0
		li      r26,1
		la      r4,TimeVal1
		CALLPOWERPC     GetSysTimePPC
.loop
		mr      r5,r31
		RUN68K  _SysBase,GetMsg
		tstw    r3
		beq     .nomsg
		lwz     r4,im_Class(r3)
		liw     r5,IDCMP_MOUSEBUTTONS
		and.    r4,r4,r5
		beq     .nomsg
		li      r30,-1
		mr      r6,r3
		RUN68K  _SysBase,ReplyMsg
.nomsg
		tstw    r30
		bne     .abort
		mr      r6,r29
		mr      r3,r26
		xori    r26,r26,2
		RUN68K  _GfxBase,SetAPen
		mr      r6,r29
		mr      r3,r27
		mr      r4,r28
		RUN68K  _GfxBase,WritePixel
		addi    r27,r27,1
		cmplwi  r27,WINDOWWIDTH
		blt     .loop
		li      r27,0
		addi    r28,r28,1
		cmplwi  r28,WINDOWHEIGHT
		blt     .loop
		la      r4,TimeVal2
		CALLPOWERPC     GetSysTimePPC
		la      r4,TimeVal2
		la      r5,TimeVal1
		CALLPOWERPC     SubTimePPC
		la      r4,TimeVal2
		lwz     r0,TV_MICRO(r4)
		push    r0
		lwz     r0,TV_SECS(r4)
		push    r0
		la      r4,time
		mr      r22,local
		RUN68K_XL       _DOSBase,VPrintf
		addi    local,local,8
		b       .close
.abort
		la      r4,abort
		la      r22,Args
		RUN68K_XL       _DOSBase,VPrintf
.close
		lw      r5,_Window
		RUN68K  _IntuitionBase,CloseWindow
.closegfx
		lw      r6,_GfxBase
		RUN68K  _SysBase,CloseLibrary
.closeint
		lw      r6,_IntuitionBase
		RUN68K  _SysBase,CloseLibrary
.end
		popgpr
		epilog


		section "PixelOMania",data

int_name        INTNAME
gfx_name        GRAFNAME
title           dc.b    "\nPixelOMania V1.0  18.9.97 by Sam Jordan\n"
		dc.b    "---------------------------------------\n"
		dc.b    "Measures the performance of CPU context switches\n"
		dc.b    "In every iteration (for every pixel) four AMIGAOS\n"
		dc.b    "system functions are called by the PowerPC\n\n"
		dc.b    "Click on the window to abort the program\n"
		dc.b    "Let's go:\n\n",0
abort           dc.b    "Program aborted\n",0
time            dc.b    "Time elapsed: %ld.%06ld seconds\n\n",0


		cnop    0,4

WindowTags      dc.l    WA_Left
		dc.l    100
		dc.l    WA_Top
		dc.l    100
		dc.l    WA_Width
		dc.l    WINDOWWIDTH
		dc.l    WA_Height
		dc.l    WINDOWHEIGHT
		dc.l    WA_Activate
		dc.l    -1
		dc.l    WA_IDCMP
		dc.l    IDCMP_MOUSEBUTTONS
		dc.l    TAG_DONE


		section "PixelOMania",bss

_IntuitionBase  ds.l    1
_GfxBase        ds.l    1
_Window         ds.l    1
_RPort          ds.l    1
TimeVal1        ds.b    TV_SIZE
TimeVal2        ds.b    TV_SIZE
Args            ds.l    2
