home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 3
/
FreeSoftwareCollection3pd199x-jp.img
/
oh_fm
/
inkyoku
/
croll.c
next >
Wrap
Text File
|
1980-01-02
|
2KB
|
88 lines
#include <stdio.h>
#include <egb.h>
#include "crtc.h"
#define SS_VRAM1 0x10c
#define INKEY() INPB( 0x600 )
char work[1536] ;
/* convert HSV to RGB-15bit */
/* range h :: (-360*256,720*256) s,v :: (0,255) */
int HSVtoRGB( h, s, v )
int h,s,v ;
{
int r,g,b ;
int h1,h2,f,p,q,t ;
if( h > 360*256) h -= 360*256 ;
if( h < 0 ) h += 360*256 ;
h1 = h / 60 ;
h2 = h1 & 0xff00 ;
f = h1 - h2 ;
p = (s * v) >> 8 ;
q = (p * f) >> 8 ;
p = v - p ;
t = p + q ;
q = v - q ;
switch( h2 ) {
case 0x000:
r = v ; g = t ; b = p ;
break ;
case 0x100:
r = q ; g = v ; b = p ;
break ;
case 0x200:
r = p ; g = v ; b = t ;
break ;
case 0x300:
r = p ; g = q ; b = v ;
break ;
case 0x400:
r = t ; g = p ; b = v ;
break ;
case 0x500:
r = v ; g = p ; b = q ;
break ;
}
return ( (g & 0xf8) << 7)
+((r & 0xf8) << 2)
+((b & 0xf8) >> 3) ;
}
main(int ac, char **av)
{
int i,j,y,col,offset,key ;
int vram ;
int speed = 10000 ;
int cofs = 0 ;
if( ac > 1 ) speed = atoi( av[1] ) * 100 ;
if( ac > 2 ) cofs = atoi( av[2] ) * 256 ;
EGB_init( work, 1536 ) ;
EGB_resolution( work , 0 , 17 ) ;
CRTC( CA_LO0,64 ) ;
CRTC( CA_LO1,64 ) ;
CRTC( CA_ZOOM,0x0101 ) ;
for( vram = y = 0 ; y < 1024 ; y++ ) {
col = HSVtoRGB( y * 360 / 4 + cofs , 255, 255 ) ;
i = ( y < 512 )? y / 2 : 256 - (y - 512) / 2 ;
for( j = 0 ; j < i ; j++ )
putVRAMw( vram + j + j , col, SS_VRAM1 ) ;
vram += 512 ;
}
key = INKEY() ;
offset = 0 ;
for( ;; ) {
CRTC( CA_FA0,offset ) ; /* FA0 */
CRTC( CA_FA1,offset ) ; /* FA1 */
if( (offset += 128) == 512*128 ) offset = 0 ;
for( j = 0 ; j < speed ; j++ ) ;
if( key != INKEY() ) break ;
}
getchar() ;
screenterm() ;
}