Author Topic: Amiga Simulator!  (Read 14619 times)

0 Members and 1 Guest are viewing this topic.

Offline Shockwave

  • good/evil
  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 17414
  • Karma: 498
  • evil/good
    • View Profile
    • My Homepage
Amiga Simulator!
« on: September 10, 2006 »
I thought that the topic title would get your attention, in fact, what this is is a program that uses Jim Shaws excellent screen synch in conjuntion with a program that would port over to tinyptc with no modifications to create the archietypal amiga sine intro!! This is the sort of program that up until now was really difficult to write using gfx lib or tinyptc because the screen synch didn't work properly.

Now we have this.. Feast your eyes on a copper med res sine scroll with a paralax starfield and absolutely no glitches.
Exe attached for people without freebasic.

Code: [Select]
' SILKY SMOOTH PTC STYLE SINE SCROLLER BY SHOCKWAVE ^ DBF ^ SURPRISE ! PRODUCTIONS
' USING GL VBL SYNCH CODE BY JIM SHAW TAKEN FROM THE DBF / GRAVITY FORUMS.
' WWW.DBFINTERACTIVE.COM
'
'-------------------------------------------------------------------------------

'       INCLUDES;
'
        #include once "windows.bi"
        #include once "gl/gl.bi"
        #include once "gl/glext.bi"
        #include once "fbgfx.bi"

        option explicit
        option static
       
        CONST XRES = 640
        CONST YRES = 480
'
'       JIM SHAWS FUNCTION DEFS;
'

declare function ptc_open(byval title as zstring ptr, byval width as integer, byval height as integer ) as integer
declare function ptc_update(byval buff as integer ptr) as integer
declare function ptc_close() as integer
declare sub ptc_setflip(byval interval as integer)





       dim shared FONT (81 * 59) as integer       
       declare sub DBFTEXT(BYVAL BX AS INTEGER , BYVAL BY AS INTEGER , BYVAL CH AS INTEGER , BYVAL CLR AS INTEGER)
       DIM LP AS INTEGER
       
'-----------------------------------------------------------------
'Read In Our Font;
'-----------------------------------------------------------------

        FOR LP=1 TO (81*59)
                READ FONT(LP)
        NEXT

'
'
'
        dim shared buffer(XRES*YRES) as uinteger
        dim x as integer
        ptc_open("hello",XRES,YRES)

DIM SHARED MP AS INTEGER
DIM SHARED SCOFF AS INTEGER
DIM SHARED SCROLLYFUN AS STRING
SCROLLYFUN="                                      USE ALT+ENTER TO TOGGLE WINDOWED MODE AND ESCAPE TO QUIT! "
SCROLLYFUN=SCROLLYFUN+" ----------- YOU COULD BE FORGIVEN FOR THINKING YOU'D SWITCHED YOUR AMIGA ON BY MISTAKE!!    "
SCROLLYFUN=SCROLLYFUN+"THIS PROGRAM IS NOT MEANT TO BE MIND BLOWING, BUT WHAT YOU SHOULD LOOK AT IS THE PERFECT "
SCROLLYFUN=SCROLLYFUN+"AND BEAUTIFUL VBL SYNCH...  THIS PROGRAM ACTUALLY WORKS EXACTLY LIKE A PROGRAM THAT USES TINYPTC, IN FACT IT WOULD "
SCROLLYFUN=SCROLLYFUN+"PORT STRAIGHT OVER TO IT, HOWEVER THE VBL SYNCH IS USING OPENGL TO GET THIS PERFECTLY SMOOTH REFRESH.. THANK YOU JIM SHAW!!   "
SCROLLYFUN=SCROLLYFUN+"THIS IS JUST ONE OF THE COOL TECHNIQUES THAT ARE BEING DEVELOPED AT WWW.DBFINTERACTIVE.COM    USE THIS SOURCE FREELY BUT CREDIT WHAT YOU TAKE..  "
SCROLLYFUN=SCROLLYFUN+"SHOCKWAVE OF DBF AND SURPRISE ! PRODUCTIONS 2006.........."
SCROLLYFUN=SCROLLYFUN+"                                 "
MP=0
SCOFF=0
DECLARE SUB SCROLLER()
DECLARE SUB GRADIENT_LINES()
DECLARE SUB GENERATE_COPPERS()
DIM SHARED SINEADD AS INTEGER
DIM SHARED SINEADD2 AS INTEGER
DIM SHARED COPPERLIST (YRES) AS UINTEGER

DIM SHARED STARNUM AS INTEGER :'NUMBER OF STARS ON EACH LAYER THERE ARE 4 LAYERS.

STARNUM=60

DIM SHARED STARX(STARNUM*4)
DIM SHARED STARY(STARNUM*4)

DECLARE SUB GENERATE_STARS()
DECLARE SUB DRAW_STARS()

GENERATE_COPPERS()
GENERATE_STARS()
do
   
    GRADIENT_LINES()
    DRAW_STARS()
    SCROLLER()
   
    ptc_update(@buffer(0))
   
   
ERASE BUFFER
loop until inkey$ = CHR$(27)
ptc_close()

end

SUB DRAW_STARS()
    DIM A
    FOR A=1 TO STARNUM
        IF STARX(A)<XRES AND STARX(A)>0 THEN BUFFER(STARX(A)+(STARY(A)))=&H2222CC
        STARX(A)=STARX(A)+1
        IF STARX(A)>XRES THEN STARX(A)=STARX(A)-XRES               

    NEXT
    FOR A=STARNUM+1 TO STARNUM*2
        IF STARX(A)<XRES AND STARX(A)>0 THEN BUFFER(STARX(A)+(STARY(A)))=&H4444DD
        STARX(A)=STARX(A)+2
        IF STARX(A)>XRES THEN STARX(A)=STARX(A)-XRES               

    NEXT
    FOR A=(STARNUM*2)+1 TO STARNUM*3
        IF STARX(A)<XRES AND STARX(A)>0 THEN BUFFER(STARX(A)+(STARY(A)))=&H7777EE
        STARX(A)=STARX(A)+3
        IF STARX(A)>XRES THEN STARX(A)=STARX(A)-XRES               

    NEXT
    FOR A=(STARNUM*3)+1 TO STARNUM*4
        IF STARX(A)<XRES AND STARX(A)>0 THEN BUFFER(STARX(A)+(STARY(A)))=&HAAAAFF
        STARX(A)=STARX(A)+4
        IF STARX(A)>XRES THEN STARX(A)=STARX(A)-XRES               
    NEXT


END SUB

SUB GENERATE_STARS()
DIM A
FOR A=1 TO STARNUM*4
    STARX(A)= RND*(XRES)
    STARY(A)= (50+(RND*(YRES-101)))*XRES

NEXT

END SUB

SUB GENERATE_COPPERS()
    DIM A
    FOR A=0 TO YRES-1
        COPPERLIST(A) = RGB( 120+119*SIN(A/123),120+119*SIN(A/73),120+119*SIN(A/53))
    NEXT
END SUB

SUB GRADIENT_LINES()
DIM AS INTEGER FX1,FX2,TY,BY,CLR
TY=50*XRES
BY=(YRES-50)*XRES
FX2=XRES-1
FOR FX1=0 TO XRES-1
    CLR=RGB(100+99*SIN((SINEADD2+FX1) / 132),100+99*SIN((SINEADD2+FX1) / 143),100+99*SIN((SINEADD2+FX1) / 144))
    BUFFER(FX1+TY)=CLR
    BUFFER(FX2+BY)=CLR
    FX2=FX2-1
NEXT
END SUB

SUB SCROLLER()
    SINEADD=SINEADD+1
    SINEADD2=SINEADD2+10
    DIM LL,CC
    FOR LL=1 TO 33
        CC=ASC(MID(SCROLLYFUN,LL+MP,1))-31
        DBFTEXT ((LL*20)-SCOFF,180,CC,&H00000000)
    NEXT
    SCOFF=SCOFF+3
    IF SCOFF>=40 THEN
        SCOFF=SCOFF-20
        MP=MP+1
        IF MP>LEN(SCROLLYFUN)-33 THEN MP=0
    END IF
END SUB

'-------------------------------------------------------------------------
'Sub To Draw A Letter AnyWhere On The Screen (With Clipping);
'-------------------------------------------------------------------------
sub DBFTEXT(BYVAL BX AS INTEGER , BYVAL BY AS INTEGER , BYVAL CH AS INTEGER , BYVAL CLR AS INTEGER)
dim AS INTEGER blx,bly,bm,mm,TXP,TYP,CLR2
DIM SV AS INTEGER
    '---------------------------------
    'Calculate Offset In Font Data;---
    '---------------------------------
    bm=(ch*81)-81   
    TYP = 0
    FOR BLY=0 TO 8 
       
    TXP=0
   
    FOR BLX=1 TO 9
        SV=70+69*SIN((SINEADD+BX+TXP)/73)+59*COS((SINEADD-(BX+TXP))/43)

        '--------
        'Clip;---
        '--------
        IF (BX+TXP>1) AND (BX+TXP<XRES-1) AND (BY+TYP>1) AND (BY+TYP<YRES-1) THEN
           
            '----------------------------------------------------
            'Draw Pixel In Buffer If Onscreen And If Binary 1 ---
            '----------------------------------------------------
           
            MM= FONT(((BLY*9)+BLX)+BM)
            IF MM >0 THEN
               

                BUFFER (((BY+TYP+SV)*XRES)+BX+TXP)=COPPERLIST(BY+TYP+SV)
                BUFFER (((BY+TYP+SV)*XRES)+BX+TXP+1)=COPPERLIST(BY+TYP+SV)
                BUFFER (((BY+TYP+1+SV)*XRES)+BX+TXP+1)=COPPERLIST(BY+TYP+SV+1)
                BUFFER (((BY+TYP+1+SV)*XRES)+BX+TXP)=COPPERLIST(BY+TYP+SV+1)


            END IF
         END IF
        TXP=TXP+2
    NEXT
        TYP=TYP+2
    NEXT
END SUB


'===============================================================================
'
'                          JIM SHAW'S SCREEN STUFF BELOW;
'
'===============================================================================

dim shared g_w as integer
dim shared g_h as integer

type PFNWGLSWAPINTERVALFARPROC as sub(byval interval as integer)
dim shared wglSwapIntervalEXT as PFNWGLSWAPINTERVALFARPROC

function ptc_open(byval title as zstring ptr, byval w as integer, byval h as integer) as integer
screenres w,h,32,0,3
    wglSwapIntervalEXT = cast(PFNWGLSWAPINTERVALFARPROC,wglGetProcAddress("wglSwapIntervalEXT"))
    ptc_setflip(1)
    glViewport(0, 0, w,h)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(0,w,h,0,0,1)
    glPixelZoom(1,-1)
    glRasterPos2i(0,0)
    g_w=w
    g_h=h
return 0
end function

function ptc_update(byval buff as integer ptr) as integer
    glDrawPixels(g_w,g_h,GL_BGRA_EXT,GL_UNSIGNED_BYTE,buff)
   
    flip
return 0
end function

function ptc_close() as integer
return 0
end function

sub ptc_setflip(byval interval as integer)
    if wglSwapIntervalExt <> 0 then
        wglSwapIntervalEXT(interval)
    endif
end sub

'==============================================================================
' Binary Font By Shockwave / DBF; (59 Chars)
'==============================================================================

'space
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'!
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
'"
data 0,1,1,0,1,1,0,0,0
data 0,1,1,0,1,1,0,0,0
data 0,1,1,0,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'#
data 0,0,0,0,0,0,0,0,0
data 0,1,1,0,0,0,1,1,0
data 1,1,1,1,1,1,1,1,1
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 1,1,1,1,1,1,1,1,1
data 0,1,1,0,0,0,1,1,0
data 0,0,0,0,0,0,0,0,0
'£
data 0,0,1,1,1,1,0,0,0
data 0,1,1,1,1,1,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,1,1,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,0
'%
data 0,0,0,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,1,0,0
data 0,0,0,0,0,1,0,0,0
data 0,0,0,0,1,0,0,0,0
data 0,0,0,1,0,0,0,0,0
data 0,0,1,0,0,0,1,1,0
data 0,0,0,0,0,0,1,1,0
data 0,0,0,0,0,0,0,0,0
'&
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,1,1,0,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,0,1,1,0,0
data 0,1,1,0,0,1,1,1,1
data 0,1,1,1,0,0,1,1,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,1,1,0,0,0
''
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'(
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,1,1,1,1,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,0,1,1,1,0,0
data 0,0,0,0,1,1,1,0,0
data 0,0,0,0,1,1,1,0,0
data 0,0,0,0,1,1,1,1,0
data 0,0,0,0,0,1,1,1,0
')
data 0,1,1,1,0,0,0,0,0
data 0,1,1,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,1,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0,0
'*
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,1,0,0,0,0
data 0,0,1,0,1,0,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,1,1,1,1,1,1,1,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,0,1,0,1,0,0
data 0,0,0,0,1,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'+
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,1,0,0,0,0
data 0,0,0,0,1,0,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
''
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,0,1,0,0,0,0
'-
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'.
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
'/
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,1,0
data 0,0,0,0,0,0,1,1,0
data 0,0,0,0,0,1,1,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'0
data 0,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,1,1,1
data 1,1,0,0,0,1,0,1,1
data 1,1,0,0,1,0,0,1,1
data 1,1,0,1,1,0,0,1,1
data 1,1,1,1,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'1
data 0,0,0,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,1,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,0,0
'2
data 0,0,1,1,1,1,1,1,0
data 0,0,1,1,1,1,1,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,0,1,1
data 0,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
'3
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,0
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,0
'4
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,1,1,0,0,0
data 1,1,0,0,1,1,0,0,0
data 1,1,1,1,1,1,1,1,1
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1,0
'5
data 0,1,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,1,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
'6
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,0
data 1,1,0,0,0,0,1,1,1
data 1,1,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'7
data 0,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,1,1,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1,0
'8
data 0,0,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,0,1,1,1,1,1,0,0
data 1,1,1,0,0,0,1,1,1
data 1,1,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'9
data 0,0,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
data 0,1,1,0,0,0,0,1,1
data 0,1,1,0,0,0,0,1,1
data 0,0,1,1,1,1,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
':
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
';
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,0,1,0,0,0,0
'<
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,1,1,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,1,1,1,0,0
data 0,0,0,0,0,1,1,0,0
data 0,0,0,0,0,0,0,0,0
'=
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'>
data 0,0,0,0,0,0,0,0,0
data 0,0,1,1,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'?
data 0,0,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,0,0,0,0,0,1,1,0
data 0,0,0,1,1,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
'@
data 0,0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,1,0,0,0,0,0,0,0
data 0,1,0,0,1,1,1,0,0
data 0,1,0,1,0,0,0,1,0
data 0,1,0,1,1,1,0,1,0
data 0,1,0,0,0,0,0,1,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0,0
'a
data 0,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,0
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
'b
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
'c
data 0,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
'd
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
'e
data 0,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,1,1,1,1,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
'f
data 0,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,1,1,1,1,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
'g
data 0,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,1,1,1,1
data 1,1,0,0,0,0,1,1,1
data 1,1,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'h
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
'i
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
'j
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,0
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
'k
data 1,1,0,0,0,0,1,1,0
data 1,1,0,0,0,0,1,1,0
data 1,1,0,0,0,0,1,1,0
data 1,1,0,0,0,0,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
'l
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
'm
data 0,1,1,1,0,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,1,0,0,1,1
data 1,1,0,0,1,0,0,1,1
data 1,1,0,0,1,0,0,1,1
data 1,1,1,0,1,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
'n
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1

'o
data 0,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'p
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
'q
data 0,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,1,0,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'r
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
's
data 0,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 0,1,1,1,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
't
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
'u
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'v
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,1,0
data 0,0,1,1,1,1,1,0,0
'w
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,1,0,0,1,1
data 1,1,1,0,1,0,0,1,1
data 1,1,1,0,1,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,0,1,1,1,0
'x
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,1,1,1,1,1,1,1,0
data 1,1,1,1,0,0,1,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
'y
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 0,1,1,1,1,1,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
'z
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,1,1,1
data 0,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
Shockwave ^ Codigos
Challenge Trophies Won:

Offline DrewPee

  • I Toast Therefore I am
  • Pentium
  • *****
  • Posts: 563
  • Karma: 25
  • Eat Cheese - It's good for you!
    • View Profile
    • Retro Computer Museum
Re: Amiga Simulator!
« Reply #1 on: September 10, 2006 »
Shockwave - I am not worthy - that is soo amazing - Lots and lots of respect for this one! AND thanks for the code! AGAIN!

Drew
DrewPee
aka Falcon of The Lost Boyz (Amiga)
Ex-Amiga Coder and Graphic Designer
Administrator of > www.retrocomputermuseum.co.uk

Offline ninogenio

  • Pentium
  • *****
  • Posts: 1668
  • Karma: 133
    • View Profile
Re: Amiga Simulator!
« Reply #2 on: September 10, 2006 »
thats really cool shockwave fluid and fast with no tearing lovely   ;)
Challenge Trophies Won:

Offline Shockwave

  • good/evil
  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 17414
  • Karma: 498
  • evil/good
    • View Profile
    • My Homepage
Re: Amiga Simulator!
« Reply #3 on: September 10, 2006 »
Thanks both, but really this would never look authentic and Amiga like without using Jim's synch code. :)
Shockwave ^ Codigos
Challenge Trophies Won:

Offline ninogenio

  • Pentium
  • *****
  • Posts: 1668
  • Karma: 133
    • View Profile
Re: Amiga Simulator!
« Reply #4 on: September 10, 2006 »
yeah thats true,

me and jim origonally came up with the sync code for a 3d gl game im making but i would never have thought of yousing it like this very handy indeed.
Challenge Trophies Won:

Offline Shockwave

  • good/evil
  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 17414
  • Karma: 498
  • evil/good
    • View Profile
    • My Homepage
Re: Amiga Simulator!
« Reply #5 on: September 10, 2006 »
:) I hope you post your game here when it's done Nino!
Shockwave ^ Codigos
Challenge Trophies Won:

Offline ninogenio

  • Pentium
  • *****
  • Posts: 1668
  • Karma: 133
    • View Profile
Re: Amiga Simulator!
« Reply #6 on: September 10, 2006 »
of course mate ;)
Challenge Trophies Won:

Offline psygate

  • Completly Insane.
  • Atari ST
  • ***
  • Posts: 173
  • Karma: 7
  • That boy needs therapy.
    • View Profile
Re: Amiga Simulator!
« Reply #7 on: September 10, 2006 »
MAHAN! That looks extremely good!

If I see such a demo, my mouth gets full of water, my eyes are getting bigger and I feel like going insane!

Very good work man!
He who controlles the minds commands the many.
He who commands the many, conqueres the minds.

Offline Clyde

  • A Little Fuzzy Wuzzy
  • DBF Aficionado
  • ******
  • Posts: 7271
  • Karma: 71
    • View Profile
Re: Amiga Simulator!
« Reply #8 on: September 10, 2006 »
Cool Shockie!

That's lookiing like it's sure gonna cure some of my taring headaches; especially the problems I had with Bitmap Scrollers.

Nice one,
Clyde.
Still Putting The IT Into Gravy
If Only I Knew Then What I Know Now.

Challenge Trophies Won:

Offline Rbz

  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 2757
  • Karma: 493
    • View Profile
    • https://www.rbraz.com/
Re: Amiga Simulator!
« Reply #9 on: September 10, 2006 »
Very cool and smooth Shockie  :||

Here's your example using the new tinyptc OGL framework.

Exe size: 40 kbytes


Code: [Select]
'---------------------------------------------------------------------------------
'Â  Â Tinyptc OGL by Jim
'
'Â  Â Window Framework by Rbraz
'
'Â  Â 10 Sept 2006
'---------------------------------------------------------------------------------

'---------------------------------------------------------------------------------
' SILKY SMOOTH PTC STYLE SINE SCROLLER BY SHOCKWAVE ^ DBF ^ SURPRISE ! PRODUCTIONS
' USING GL VBL SYNCH CODE BY JIM SHAW TAKEN FROM THE DBF / GRAVITY FORUMS.
' WWW.DBFINTERACTIVE.COM
'
'---------------------------------------------------------------------------------


#include once "windows.bi"
#include once "gl/gl.bi"
#include once "gl/glext.bi"
#include once "crt.bi"

option explicit
option static

'Screen width x height
Const screenWidth  = 640
Const screenHeight = 480
'Application name
Const AppicationName = "SILKY SMOOTH PTC STYLE SINE SCROLLER SHOCKWAVE^DBF^S!P"

'---------------------------------------------------------------------------------------------------------------
'Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â Shockwave code
'---------------------------------------------------------------------------------------------------------------
  Â  Â  Â dim shared FONT (81 * 59) as integer  Â  Â  Â
  Â  Â  Â declare sub DBFTEXT(BYVAL BX AS INTEGER , BYVAL BY AS INTEGER , BYVAL CH AS INTEGER , BYVAL CLR AS INTEGER)  Â  Â  Â

  Â  Â  Â  CONST XRES = screenWidth
  Â  Â  Â  CONST YRES = screenHeight
  Â  Â  Â  
DIM SHARED MP AS INTEGER
DIM SHARED SCOFF AS INTEGER
DIM SHARED SCROLLYFUN AS STRING
SCROLLYFUN="Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  "
SCROLLYFUN=SCROLLYFUN+" ----------- YOU COULD BE FORGIVEN FOR THINKING YOU'D SWITCHED YOUR AMIGA ON BY MISTAKE!!  Â  "
SCROLLYFUN=SCROLLYFUN+"THIS PROGRAM IS NOT MEANT TO BE MIND BLOWING, BUT WHAT YOU SHOULD LOOK AT IS THE PERFECT "
SCROLLYFUN=SCROLLYFUN+"AND BEAUTIFUL VBL SYNCH...  THIS PROGRAM ACTUALLY WORKS EXACTLY LIKE A PROGRAM THAT USES TINYPTC, IN FACT IT WOULD "
SCROLLYFUN=SCROLLYFUN+"PORT STRAIGHT OVER TO IT, HOWEVER THE VBL SYNCH IS USING OPENGL TO GET THIS PERFECTLY SMOOTH REFRESH.. THANK YOU JIM SHAW!!  Â "
SCROLLYFUN=SCROLLYFUN+"THIS IS JUST ONE OF THE COOL TECHNIQUES THAT ARE BEING DEVELOPED AT WWW.DBFINTERACTIVE.COM  Â  USE THIS SOURCE FREELY BUT CREDIT WHAT YOU TAKE..  "
SCROLLYFUN=SCROLLYFUN+"SHOCKWAVE OF DBF AND SURPRISE ! PRODUCTIONS 2006.........."
SCROLLYFUN=SCROLLYFUN+"Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "
MP=0
SCOFF=0
DECLARE SUB SCROLLER()
DECLARE SUB GRADIENT_LINES()
DECLARE SUB GENERATE_COPPERS()
DIM SHARED SINEADD AS INTEGER
DIM SHARED SINEADD2 AS INTEGER
DIM SHARED COPPERLIST (YRES) AS UINTEGER

DIM SHARED STARNUM AS INTEGER :'NUMBER OF STARS ON EACH LAYER THERE ARE 4 LAYERS.

STARNUM=60

DIM SHARED STARX(STARNUM*4)
DIM SHARED STARY(STARNUM*4)

DECLARE SUB GENERATE_STARS()
DECLARE SUB DRAW_STARS()
'---------------------------------------------------------------------------------------------------------------





'DEVMODE bug, found the cure here --> http://www.freebasic.net/forum/viewtopic.php?t=5659&highlight=devmode
'Will be corrected by Victor in the next freebasic update
#undef DEVMODE
Type DEVMODE
  Â  dmDeviceName As Zstring * CCHDEVICENAME
  Â  dmSpecVersion As WORD
  Â  dmDriverVersion As WORD
  Â  dmSize As WORD
  Â  dmDriverExtra As WORD
  Â  dmFields As DWORD
  Â  dmOrientation As Short
  Â  dmPaperSize As Short
  Â  dmPaperLength As Short
  Â  dmPaperWidth As Short
  Â  dmScale As Short
  Â  dmCopies As Short
  Â  dmDefaultSource As Short
  Â  dmPrintQuality As Short
  Â  dmColor As Short
  Â  dmDuplex As Short
  Â  dmYResolution As Short
  Â  dmTTOption As Short
  Â  dmCollate As Short
  Â  dmFormName As Zstring * CCHFORMNAME
  Â  dmLogPixels As WORD
  Â  dmBitsPerPel As DWORD
  Â  dmPelsWidth As DWORD
  Â  dmPelsHeight As DWORD
  Â  dmDisplayFlags As DWORD
  Â  dmDisplayFrequency As DWORD
  Â  dmICMMethod As DWORD
  Â  dmICMIntent As DWORD
  Â  dmMediaType As DWORD
  Â  dmDitherType As DWORD
  Â  dmReserved1 As DWORD
  Â  dmReserved2 As DWORD
  Â  dmPanningWidth As DWORD
  Â  dmPanningHeight As DWORD
End Type


declare function WinMain ( byval hInstance as HINSTANCE, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â byval hPrevInstance as HINSTANCE, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â szCmdLine as string, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â byval iCmdShow as integer ) as integer
  Â  '
  Â  ' Entry point  Â  
  Â  '
end WinMain( GetModuleHandle( null ), null, Command$, SW_NORMAL )
declare sub ChangeScreenResolution (byval wwidth as integer, byval hheight as integer, byval bitsPerPixel as integer)
declare function ptc_open(byval width as integer, byval height as integer ) as integer
declare function ptc_update(byval buff as integer ptr) as integer
declare function ptc_close() as integer
declare sub ptc_setflip(byval interval as integer)
declare sub Main()
declare sub Init()

dim shared buffer(screenWidth*screenHeight) as uinteger
dim shared g_w as integer
dim shared g_h as integer

'Global window device context
dim shared hDC as HDC

type PFNWGLSWAPINTERVALFARPROC as sub(byval interval as integer)
dim shared wglSwapIntervalEXT as PFNWGLSWAPINTERVALFARPROC

'' ::::::::
'' name: WndProc
'' desc: Processes windows messages
''
'' ::::::::
function WndProc ( byval hWnd as HWND, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â byval message as UINT, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â byval wParam as WPARAM, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â byval lParam as LPARAM ) as LRESULT
  Â  
  Â  function = 0
  Â  
  Â  ''
  Â  '' Process messages
  Â  ''
  Â  select case( message )
  Â  Â  Â  ''
  Â  Â  Â  '' Window was created
  Â  Â  Â  ''  Â  Â  Â  
  Â  Â  Â  case WM_CREATE
  Â  Â  Â  Â  Â  exit function
  Â  Â  Â  
  Â  Â  Â  ''
  Â  Â  Â  '' Windows is being repainted
  Â  Â  Â  ''
  Â  Â  Â  case WM_PAINT
  Â  Â  Â  Â  Â  exit function  Â  Â  Â  Â  Â  
  Â  Â  Â  
''
'' Key pressed
''
case WM_KEYDOWN
if( lobyte( wParam ) = 27 ) then
PostMessage( hWnd, WM_CLOSE, 0, 0 )
end if

  Â  Â  Â  ''
  Â  Â  Â  '' Window was closed
  Â  Â  Â  ''
  Â   case WM_DESTROY
  Â  Â  Â  Â  Â  PostQuitMessage( 0 )
  Â  Â  Â  Â  Â  exit function
  Â  end select
  Â  
  Â  ''
  Â  '' Message doesn't concern us, send it to the default handler
  Â  '' and get result
  Â  ''
  Â  function = DefWindowProc( hWnd, message, wParam, lParam )  Â  
  Â  
end function

'' ::::::::
'' name: WinMain
'' desc: A win2 gui program entry point
''
'' ::::::::
function WinMain ( byval hInstance as HINSTANCE, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â byval hPrevInstance as HINSTANCE, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â szCmdLine as string, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â byval iCmdShow as integer ) as integer  Â  
  Â  Â
  Â  dim wMsg as MSG
  Â  dim wcls as WNDCLASS  Â  Â
  Â  dim hWnd as HWND
  Â  dim windowStyle as DWORD
  Â  dim windowExtendedStyle as DWORD
  Â  dim windowRect as RECT
  Â  dim  pfd as PIXELFORMATDESCRIPTOR
  Â  Â
  Â  function = 0
  Â  
'Window size
  Â  windowRect.left  Â = 0
  Â  windowRect.top  Â  = 0
  Â  windowRect.right  = screenWidth
  Â  windowRect.bottom = screenHeight
  Â  Â  
  Â  ''
  Â  '' Setup window class
  Â  ''
  Â  with wcls
  Â   .style  Â  Â  Â  Â = CS_HREDRAW or CS_VREDRAW or CS_OWNDC
  Â   .lpfnWndProc  Â = @WndProc
  Â   .cbClsExtra  Â  = 0
  Â   .cbWndExtra  Â  = 0
  Â   .hInstance  Â  Â = hInstance
  Â   .hIcon  Â  Â  Â  Â = LoadIcon( NULL, IDI_APPLICATION )
  Â   .hCursor  Â  Â  Â = LoadCursor( NULL, IDC_ARROW )
  Â   .hbrBackground = GetStockObject( WHITE_BRUSH )
  Â   .lpszMenuName  = NULL
  Â   .lpszClassName = strptr( AppicationName )
  Â  end with
  Â  Â  Â  Â  
  Â  ''
  Â  '' Register the window class  Â  Â
  Â  ''  Â  Â
  Â  if( RegisterClass( @wcls ) = FALSE ) then
  Â  Â  Â MessageBox( NULL, "Failed to register window class!", AppicationName, MB_ICONERROR )
  Â  Â  Â exit function
  Â  end if
  Â  
' Ask The User Which Screen Mode They Prefer
if (MessageBox(NULL,"Fullscreen Mode ?", AppicationName,MB_YESNO or MB_ICONQUESTION)=IDNO) then
  Â
  Â  Â  Â  'Windowed style
  Â  Â  Â  windowStyle =  WS_BORDER or WS_CAPTION or WS_SYSMENU or WS_POPUP or WS_MINIMIZEBOX
  Â  Â  Â  windowExtendedStyle = WS_EX_APPWINDOW  
  Â  Â  Â  'Adjust Window, Account For Window Borders
  Â  Â  Â  AdjustWindowRectEx (@windowRect, windowStyle, 0, windowExtendedStyle)
  Â  Â  Â  
  Â  else
  Â  Â  Â  ShowCursor(false)
  Â  Â  Â  ChangeScreenResolution (screenWidth, screenHeight, 32)
  Â  Â  Â  windowStyle = WS_POPUP or WS_VISIBLE
  Â  Â  Â  windowExtendedStyle = WS_EX_TOPMOST
  Â  end if
  Â  
''AppicationName
  Â  '' Create the window and show it
  Â  ''
'Create our Window
hWnd =Â  Â CreateWindowEx(windowExtendedStyle, _
AppicationName, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â AppicationName, _
windowStyle, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â 0, 0, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â windowRect.right - windowRect.left, _
  Â  Â  Â  Â windowRect.bottom - windowRect.top, _
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â HWND_DESKTOP, 0, _
hInstance, 0)
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â
  Â  'Get window device context
hDC = GetDC(hWnd)
 
  Â 'Set pixel format
  Â  pfd.cColorBits = pfd.cDepthBits = 32
  Â  pfd.dwFlags  Â  = PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER
  Â  SetPixelFormat ( hDC, ChoosePixelFormat ( hDC, @pfd) , @pfd )
  Â  wglMakeCurrent ( hDC, wglCreateContext(hDC) )
  Â  
  Â  'Get actual screen resolution and center screen
  Â  dim as integer iSw, iSh
  Â  iSw = (GetSystemMetrics(SM_CXSCREEN)-screenWidth) / 2
  Â  iSh = (GetSystemMetrics(SM_CYSCREEN)-screenHeight) / 2
  Â  MoveWindow(hWnd, iSw, iSh, screenWidth, screenHeight, TRUE)
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  
  Â  'Show window/update
  Â  ShowWindow( hWnd, iCmdShow )
  Â  UpdateWindow( hWnd )
  Â  
  Â  ' Initialyze tinyptc opengl
  Â  ptc_open(screenWidth,screenHeight)
  Â  
  Â  'Initialyze demo/intro
  Â  Init()
  Â  
  Â  ''
  Â  '' Process windows messages
  Â  ''
  Â  while( GetMessage( @wMsg, NULL, 0, 0 ) <> FALSE )  Â  
  Â  Â  Â  TranslateMessage( @wMsg )
  Â  Â  Â  DispatchMessage( @wMsg )
  Â  Â  Â  
  Â  Â  Â  'Run main function
  Â  Â  Â  Main()
  Â  Â  Â  
  Â  wend
  Â  
  Â  ' Switch Back To Desktop Resolution
  Â  ChangeDisplaySettings (NULL,0)
  Â  
  Â  ' Ends a process and all its threads.
  Â  ExitProcess(0)
  Â  
  Â  ''
  Â  '' Program has ended
  Â  ''
  Â  function = wMsg.wParam

end function

'Change The Screen Resolution
sub ChangeScreenResolution (byval wwidth as integer, byval hheight as integer, byval bitsPerPixel as integer)
dim dmScreenSettings as DEVMODE
ZeroMemory(@dmScreenSettings, sizeof (DEVMODE))
dmScreenSettings.dmSize = sizeof(DEVMODE)
dmScreenSettings.dmPelsWidth = wwidth
dmScreenSettings.dmPelsHeight = hheight
dmScreenSettings.dmBitsPerPel = bitsPerPixel
dmScreenSettings.dmFields = DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT

  Â  if (ChangeDisplaySettings (@dmScreenSettings, CDS_FULLSCREEN) <> DISP_CHANGE_SUCCESSFUL) then
  Â  Â  Â  MessageBox(NULL,"Change Display Error", AppicationName,MB_OK or MB_ICONEXCLAMATION)
end -1
end if
  Â  
end sub

function ptc_open(byval w as integer, byval h as integer) as integer
  Â  wglSwapIntervalEXT = cast(PFNWGLSWAPINTERVALFARPROC,wglGetProcAddress("wglSwapIntervalEXT"))
  Â  ptc_setflip(1)
  Â  glViewport(0, 0, w,h)
  Â  glMatrixMode(GL_PROJECTION)
  Â  glLoadIdentity()
  Â  glOrtho(0,w,h,0,0,1)
  Â  glPixelZoom(1,-1)
  Â  glRasterPos2i(0,0)
  Â  g_w=w
  Â  g_h=h
return 0
end function

function ptc_update(byval buff as integer ptr) as integer
  Â  glDrawPixels(g_w,g_h,GL_BGRA_EXT,GL_UNSIGNED_BYTE,buff)
  Â  SwapBuffers ( hDc )
return 0
end function

function ptc_close() as integer
return 0
end function

sub ptc_setflip(byval interval as integer)
  Â  if wglSwapIntervalExt <> 0 then
  Â  Â  Â  wglSwapIntervalEXT(interval)
  Â  endif
end sub



'-------------------------------------------------------------
'Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Initialyze
'-------------------------------------------------------------
sub Init()
'-----------------------------------------------------------------
'Read In Our Font;
'-----------------------------------------------------------------
DIM LP AS INTEGER

  Â  Â  Â  FOR LP=1 TO (81*59)
  Â  Â  Â  Â  Â  Â  Â  READ FONT(LP)
  Â  Â  Â  NEXT
  Â  Â  Â  
  Â  Â  Â  GENERATE_COPPERS()
  Â  Â  Â  GENERATE_STARS()
  Â  Â  Â  
end sub

'-------------------------------------------------------------
'Â  Â  Â  Â  Â  Â  Â  Â Main Code
'-------------------------------------------------------------
sub Main()

  Â  GRADIENT_LINES()
  Â  DRAW_STARS()
  Â  SCROLLER()
  Â  
  Â  ptc_update(@buffer(0))
  Â  
  Â  
ERASE BUFFER
end sub


  Â  Â  Â
'---------------------------------------------------------------------------------------------------------------
'Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â Shockwave code
'---------------------------------------------------------------------------------------------------------------
SUB DRAW_STARS()
  Â  DIM A
  Â  FOR A=1 TO STARNUM
  Â  Â  Â  IF STARX(A)<XRES AND STARX(A)>0 THEN BUFFER(STARX(A)+(STARY(A)))=&H2222CC
  Â  Â  Â  STARX(A)=STARX(A)+1
  Â  Â  Â  IF STARX(A)>XRES THEN STARX(A)=STARX(A)-XRES  Â  Â  Â  Â  Â  Â  Â  

  Â  NEXT
  Â  FOR A=STARNUM+1 TO STARNUM*2
  Â  Â  Â  IF STARX(A)<XRES AND STARX(A)>0 THEN BUFFER(STARX(A)+(STARY(A)))=&H4444DD
  Â  Â  Â  STARX(A)=STARX(A)+2
  Â  Â  Â  IF STARX(A)>XRES THEN STARX(A)=STARX(A)-XRES  Â  Â  Â  Â  Â  Â  Â  

  Â  NEXT
  Â  FOR A=(STARNUM*2)+1 TO STARNUM*3
  Â  Â  Â  IF STARX(A)<XRES AND STARX(A)>0 THEN BUFFER(STARX(A)+(STARY(A)))=&H7777EE
  Â  Â  Â  STARX(A)=STARX(A)+3
  Â  Â  Â  IF STARX(A)>XRES THEN STARX(A)=STARX(A)-XRES  Â  Â  Â  Â  Â  Â  Â  

  Â  NEXT
  Â  FOR A=(STARNUM*3)+1 TO STARNUM*4
  Â  Â  Â  IF STARX(A)<XRES AND STARX(A)>0 THEN BUFFER(STARX(A)+(STARY(A)))=&HAAAAFF
  Â  Â  Â  STARX(A)=STARX(A)+4
  Â  Â  Â  IF STARX(A)>XRES THEN STARX(A)=STARX(A)-XRES  Â  Â  Â  Â  Â  Â  Â  
  Â  NEXT


END SUB

SUB GENERATE_STARS()
DIM A
FOR A=1 TO STARNUM*4
  Â  STARX(A)= RND*(XRES)
  Â  STARY(A)= (50+(RND*(YRES-101)))*XRES

NEXT

END SUB

SUB GENERATE_COPPERS()
  Â  DIM A
  Â  FOR A=0 TO YRES-1
  Â  Â  Â  COPPERLIST(A) = RGB( 120+119*SIN(A/123),120+119*SIN(A/73),120+119*SIN(A/53))
  Â  NEXT
END SUB

SUB GRADIENT_LINES()
DIM AS INTEGER FX1,FX2,TY,BY,CLR
TY=50*XRES
BY=(YRES-50)*XRES
FX2=XRES-1
FOR FX1=0 TO XRES-1
  Â  CLR=RGB(100+99*SIN((SINEADD2+FX1) / 132),100+99*SIN((SINEADD2+FX1) / 143),100+99*SIN((SINEADD2+FX1) / 144))
  Â  BUFFER(FX1+TY)=CLR
  Â  BUFFER(FX2+BY)=CLR
  Â  FX2=FX2-1
NEXT
END SUB

SUB SCROLLER()
  Â  SINEADD=SINEADD+1
  Â  SINEADD2=SINEADD2+10
  Â  DIM LL,CC
  Â  FOR LL=1 TO 33
  Â  Â  Â  CC=ASC(MID(SCROLLYFUN,LL+MP,1))-31
  Â  Â  Â  DBFTEXT ((LL*20)-SCOFF,180,CC,&H00000000)
  Â  NEXT
  Â  SCOFF=SCOFF+3
  Â  IF SCOFF>=40 THEN
  Â  Â  Â  SCOFF=SCOFF-20
  Â  Â  Â  MP=MP+1
  Â  Â  Â  IF MP>LEN(SCROLLYFUN)-33 THEN MP=0
  Â  END IF
END SUB

'-------------------------------------------------------------------------
'Sub To Draw A Letter AnyWhere On The Screen (With Clipping);
'-------------------------------------------------------------------------
sub DBFTEXT(BYVAL BX AS INTEGER , BYVAL BY AS INTEGER , BYVAL CH AS INTEGER , BYVAL CLR AS INTEGER)
dim AS INTEGER blx,bly,bm,mm,TXP,TYP,CLR2
DIM SV AS INTEGER
  Â  '---------------------------------
  Â  'Calculate Offset In Font Data;---
  Â  '---------------------------------
  Â  bm=(ch*81)-81  Â  
  Â  TYP = 0
  Â  FOR BLY=0 TO 8  
  Â  Â  Â  
  Â  TXP=0
  Â  
  Â  FOR BLX=1 TO 9
  Â  Â  Â  SV=70+69*SIN((SINEADD+BX+TXP)/73)+59*COS((SINEADD-(BX+TXP))/43)

  Â  Â  Â  '--------
  Â  Â  Â  'Clip;---
  Â  Â  Â  '--------
  Â  Â  Â  IF (BX+TXP>1) AND (BX+TXP<XRES-1) AND (BY+TYP>1) AND (BY+TYP<YRES-1) THEN
  Â  Â  Â  Â  Â  
  Â  Â  Â  Â  Â  '----------------------------------------------------
  Â  Â  Â  Â  Â  'Draw Pixel In Buffer If Onscreen And If Binary 1 ---
  Â  Â  Â  Â  Â  '----------------------------------------------------
  Â  Â  Â  Â  Â  
  Â  Â  Â  Â  Â  MM= FONT(((BLY*9)+BLX)+BM)
  Â  Â  Â  Â  Â  IF MM >0 THEN
  Â  Â  Â  Â  Â  Â  Â  

  Â  Â  Â  Â  Â  Â  Â  BUFFER (((BY+TYP+SV)*XRES)+BX+TXP)=COPPERLIST(BY+TYP+SV)
  Â  Â  Â  Â  Â  Â  Â  BUFFER (((BY+TYP+SV)*XRES)+BX+TXP+1)=COPPERLIST(BY+TYP+SV)
  Â  Â  Â  Â  Â  Â  Â  BUFFER (((BY+TYP+1+SV)*XRES)+BX+TXP+1)=COPPERLIST(BY+TYP+SV+1)
  Â  Â  Â  Â  Â  Â  Â  BUFFER (((BY+TYP+1+SV)*XRES)+BX+TXP)=COPPERLIST(BY+TYP+SV+1)


  Â  Â  Â  Â  Â  END IF
  Â  Â  Â  Â END IF
  Â  Â  Â  TXP=TXP+2
  Â  NEXT
  Â  Â  Â  TYP=TYP+2
  Â  NEXT
END SUB

'==============================================================================
' Binary Font By Shockwave / DBF; (59 Chars)
'==============================================================================

'space
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'!
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
'"
data 0,1,1,0,1,1,0,0,0
data 0,1,1,0,1,1,0,0,0
data 0,1,1,0,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'#
data 0,0,0,0,0,0,0,0,0
data 0,1,1,0,0,0,1,1,0
data 1,1,1,1,1,1,1,1,1
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 1,1,1,1,1,1,1,1,1
data 0,1,1,0,0,0,1,1,0
data 0,0,0,0,0,0,0,0,0
'£
data 0,0,1,1,1,1,0,0,0
data 0,1,1,1,1,1,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,1,1,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,0
'%
data 0,0,0,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,1,0,0
data 0,0,0,0,0,1,0,0,0
data 0,0,0,0,1,0,0,0,0
data 0,0,0,1,0,0,0,0,0
data 0,0,1,0,0,0,1,1,0
data 0,0,0,0,0,0,1,1,0
data 0,0,0,0,0,0,0,0,0
'&
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,1,1,0,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,0,1,1,0,0
data 0,1,1,0,0,1,1,1,1
data 0,1,1,1,0,0,1,1,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,1,1,0,0,0
''
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'(
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,1,1,1,1,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,0,1,1,1,0,0
data 0,0,0,0,1,1,1,0,0
data 0,0,0,0,1,1,1,0,0
data 0,0,0,0,1,1,1,1,0
data 0,0,0,0,0,1,1,1,0
')
data 0,1,1,1,0,0,0,0,0
data 0,1,1,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,1,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0,0
'*
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,1,0,0,0,0
data 0,0,1,0,1,0,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,1,1,1,1,1,1,1,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,0,1,0,1,0,0
data 0,0,0,0,1,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'+
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,1,0,0,0,0
data 0,0,0,0,1,0,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
''
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,0,1,0,0,0,0
'-
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'.
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
'/
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,1,0
data 0,0,0,0,0,0,1,1,0
data 0,0,0,0,0,1,1,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'0
data 0,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,1,1,1
data 1,1,0,0,0,1,0,1,1
data 1,1,0,0,1,0,0,1,1
data 1,1,0,1,1,0,0,1,1
data 1,1,1,1,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'1
data 0,0,0,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,1,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,0,0
'2
data 0,0,1,1,1,1,1,1,0
data 0,0,1,1,1,1,1,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,0,1,1
data 0,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
'3
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,0
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,0
'4
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,1,1,0,0,0
data 1,1,0,0,1,1,0,0,0
data 1,1,1,1,1,1,1,1,1
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1,0
'5
data 0,1,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,0,0,0,0,0,0
data 0,1,1,1,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
'6
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,0
data 1,1,0,0,0,0,1,1,1
data 1,1,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'7
data 0,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,1,1,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1,0
'8
data 0,0,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,0,1,1,1,1,1,0,0
data 1,1,1,0,0,0,1,1,1
data 1,1,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'9
data 0,0,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
data 0,1,1,0,0,0,0,1,1
data 0,1,1,0,0,0,0,1,1
data 0,0,1,1,1,1,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
':
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
';
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,0,1,0,0,0,0
'<
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,1,1,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,1,1,1,0,0
data 0,0,0,0,0,1,1,0,0
data 0,0,0,0,0,0,0,0,0
'=
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'>
data 0,0,0,0,0,0,0,0,0
data 0,0,1,1,0,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,0,1,1,0,0,0
data 0,0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
'?
data 0,0,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,0,0,0,0,0,1,1,0
data 0,0,0,1,1,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
'@
data 0,0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,1,0,0,0,0,0,0,0
data 0,1,0,0,1,1,1,0,0
data 0,1,0,1,0,0,0,1,0
data 0,1,0,1,1,1,0,1,0
data 0,1,0,0,0,0,0,1,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0,0
'a
data 0,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,0
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
'b
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
'c
data 0,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
'd
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
'e
data 0,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,1,1,1,1,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
'f
data 0,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,1,1,1,1,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
'g
data 0,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,1,1,1,1
data 1,1,0,0,0,0,1,1,1
data 1,1,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'h
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
'i
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
'j
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,0
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
'k
data 1,1,0,0,0,0,1,1,0
data 1,1,0,0,0,0,1,1,0
data 1,1,0,0,0,0,1,1,0
data 1,1,0,0,0,0,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
'l
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
'm
data 0,1,1,1,0,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,1,0,0,1,1
data 1,1,0,0,1,0,0,1,1
data 1,1,0,0,1,0,0,1,1
data 1,1,1,0,1,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
'n
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1

'o
data 0,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'p
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
'q
data 0,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,1,0,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'r
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
's
data 0,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,0,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0,0
data 0,1,1,1,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
't
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0,0
'u
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,0
'v
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,1,0
data 0,0,1,1,1,1,1,0,0
'w
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,1,0,0,1,1
data 1,1,1,0,1,0,0,1,1
data 1,1,1,0,1,0,0,1,1
data 1,1,1,1,1,1,1,1,1
data 0,1,1,1,0,1,1,1,0
'x
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,1,1,0,0,0,1,1,0
data 0,1,1,1,1,1,1,1,0
data 1,1,1,1,0,0,1,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
data 1,1,1,0,0,0,0,1,1
'y
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 0,1,1,1,1,1,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,0
'z
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
data 0,0,0,0,0,0,0,1,1
data 0,0,0,0,0,0,1,1,1
data 0,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1,1
'---------------------------------------------------------------------------------------------------------------
Challenge Trophies Won:

Offline Rbz

  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 2757
  • Karma: 493
    • View Profile
    • https://www.rbraz.com/
Re: Amiga Simulator!
« Reply #10 on: September 11, 2006 »
Updated for use with "tinyptc_OGL.bi" file  ;D

Still in development...

:seesaw:
Challenge Trophies Won:

Offline Ghost^BHT

  • Clueless and Happy
  • ^GVY
  • Pentium
  • ******
  • Posts: 931
  • Karma: 49
  • BYTE ME!
    • View Profile
Re: Amiga Simulator!
« Reply #11 on: September 11, 2006 »
Perhaps it's something to do with my machine, but this runs very, very badly, like a frame a second on my machine...  same with  both the exe and the source .  ?? Anyone else having this problem?  Or...  am I in possesion of the computer from HELL ?   ;D

Offline MrP

  • Atari ST
  • ***
  • Posts: 176
  • Karma: 18
    • View Profile
Re: Amiga Simulator!
« Reply #12 on: September 11, 2006 »
Sweet little proggy there. Theres just no mistaking that old amiga feel........

Offline Rbz

  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 2757
  • Karma: 493
    • View Profile
    • https://www.rbraz.com/
Re: Amiga Simulator!
« Reply #13 on: September 11, 2006 »
Perhaps it's something to do with my machine, but this runs very, very badly, like a frame a second on my machine...  same with  both the exe and the source .  ?? Anyone else having this problem?  Or...  am I in possesion of the computer from HELL ?  Â ;D

I'll try to implement Jim's suggestion about Peekmessage/Getmessage, the way that I do it for C++ doesn't work for FB, the damn freebasic still bugged with some gui commands  :(
Challenge Trophies Won:

Offline Clyde

  • A Little Fuzzy Wuzzy
  • DBF Aficionado
  • ******
  • Posts: 7271
  • Karma: 71
    • View Profile
Re: Amiga Simulator!
« Reply #14 on: September 11, 2006 »
@Rbraz - I get a brief pause before the effect(s) update. Also happens with my own effects via the Win PTC_Ogl method.
@Wham - Both run absolutely fine here and extremely quick.
« Last Edit: September 11, 2006 by Clyde »
Still Putting The IT Into Gravy
If Only I Knew Then What I Know Now.

Challenge Trophies Won:

Offline Rbz

  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 2757
  • Karma: 493
    • View Profile
    • https://www.rbraz.com/
Re: Amiga Simulator!
« Reply #15 on: September 11, 2006 »
Quote
I get a brief pause before the effect(s) update. Also happens with my own effects via the Win PTC_Ogl method

Yep, I saw that happening here in my notebook at work, I'll try to fix it later... 

And it run super fast in windowed and fine in fullscreen mode, and using gfxlib version it doesn't work in windowed mode, it's too hard to make those things working properly in all windows/gfx board config.  :-\
Challenge Trophies Won:

Offline Shockwave

  • good/evil
  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 17414
  • Karma: 498
  • evil/good
    • View Profile
    • My Homepage
Re: Amiga Simulator!
« Reply #16 on: September 11, 2006 »
Wow, good to see some really cool replies. Some pertinent points, three first of all for Rbraz;

1: Thank you for further modifications of the code, hopefully this will be of use to lots of people :) Have some good Karma for that.

2: Thinking of the speed differnces between windowed mode and fullscreen. In the code it waits for the vertical retrace, so I would imagine that the differences are caused because the default refresh rate for fullscreen 640 X 480 might be different to whatever your desktop is running at? A combination with delta timing would definately fix this problem, though it might mean using more floating point variables to make sure it's nice and accurate and smooth.

3: When you said 40kb, I thought mmm. Ok you must have used Upx, but I ran the file and there was no pause so it seemed to me that it was uncrunched. KKrunchy gets it down to less than 10kb!

Wham, I have absolutely no idea why this would only run at 1fps on your box. I'll try and re-create the same problem here so I can fix it. Sorry mate. I think you might have liked to see the effect if it was running properly because it could be lifted straight out of Winaue. The lesson here is that you can guarantee that no matter how bomb proof you think it is, it will fail on some systems.

Looking forward to seeing this idea develop and to seeing some productions using this technique! :)
Shockwave ^ Codigos
Challenge Trophies Won:

Offline Jim

  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 5301
  • Karma: 402
    • View Profile
Re: Amiga Simulator!
« Reply #17 on: September 11, 2006 »
Hey Wham!  Does it run properly if you whizz your mouse round-and-round while it's running?  If so, that's the GetMessage/PeekMessage problem.
Shockwave you're right, in the desktop windowed mode it runs at the desktop refresh, not 60 or whatever the default for fullscreen is.  Now, for LCD desktops, that's 60Hz anyway, but for CRTs anything under 75 is painful to watch so it might be 85.  Not much you can do about that...delta timing will get you there though - the last frame's time needs to be part of the equation for the next frame's movement.

Jim
Challenge Trophies Won:

Offline ninogenio

  • Pentium
  • *****
  • Posts: 1668
  • Karma: 133
    • View Profile
Re: Amiga Simulator!
« Reply #18 on: September 11, 2006 »
so are you saying jim that in a window the gl code will sync properly to what ever the desktop refresh is but in full screen it will sync to a default thus if the desktop is set diffrent you might still get some tearing?
Challenge Trophies Won:

Offline Shockwave

  • good/evil
  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 17414
  • Karma: 498
  • evil/good
    • View Profile
    • My Homepage
Re: Amiga Simulator!
« Reply #19 on: September 11, 2006 »
No.
What it means is that each resolution can have a different refresh rate. It's very unlikely that you'll be running your desktop in 640 X 480. It will just sync to whatever refresh rate has been set as the default for that res on your card as it waits for the vertical blanking period.
Shockwave ^ Codigos
Challenge Trophies Won: