home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 3 / FreeSoftwareCollection3pd199x-jp.img / oh_fm / inkyoku / croll.c next >
Text File  |  1980-01-02  |  2KB  |  88 lines

  1. #include <stdio.h>
  2. #include <egb.h>
  3. #include "crtc.h"
  4.  
  5. #define SS_VRAM1 0x10c 
  6. #define INKEY() INPB( 0x600 )
  7.  
  8. char work[1536] ;
  9.  
  10. /* convert HSV to RGB-15bit */
  11. /*     range h :: (-360*256,720*256)  s,v :: (0,255) */
  12. int HSVtoRGB( h, s, v ) 
  13. int h,s,v ;
  14. {
  15.     int r,g,b ;
  16.     int h1,h2,f,p,q,t ;
  17.  
  18.     if( h > 360*256) h -= 360*256 ;
  19.     if( h < 0 ) h += 360*256 ;
  20.     h1 = h / 60 ;
  21.     h2 = h1 & 0xff00 ;
  22.     f = h1 - h2 ;
  23.     p = (s * v) >> 8 ;
  24.     q = (p * f) >> 8 ;
  25.     p = v - p ;
  26.     t = p + q ;
  27.     q = v - q ;
  28.  
  29.     switch( h2 ) {
  30.     case 0x000:
  31.         r = v ;    g = t ; b = p ;
  32.         break ;
  33.     case 0x100:
  34.         r = q ; g = v ; b = p ;
  35.         break ;
  36.     case 0x200:
  37.         r = p ; g = v ; b = t ;
  38.         break ;
  39.     case 0x300:
  40.         r = p ; g = q ; b = v ;
  41.         break ;
  42.     case 0x400:
  43.         r = t ; g = p ; b = v ;
  44.         break ;
  45.     case 0x500:
  46.         r = v ; g = p ; b = q ;
  47.         break ;
  48.     }
  49.     return (  (g & 0xf8) << 7)
  50.         +((r & 0xf8) << 2)
  51.         +((b & 0xf8) >> 3) ;
  52. }  
  53.  
  54. main(int ac, char **av)
  55. {
  56.     int i,j,y,col,offset,key ;
  57.     int vram ;
  58.     int speed = 10000 ;
  59.     int cofs = 0 ;
  60.  
  61.     if( ac > 1 ) speed = atoi( av[1] ) * 100 ;
  62.     if( ac > 2 ) cofs = atoi( av[2] ) * 256 ;    
  63.     EGB_init( work, 1536 ) ;
  64.     EGB_resolution( work , 0 , 17 ) ;
  65.     CRTC( CA_LO0,64 ) ;    
  66.     CRTC( CA_LO1,64 ) ; 
  67.     CRTC( CA_ZOOM,0x0101 ) ; 
  68.  
  69.     for( vram = y = 0 ; y < 1024 ; y++ ) {
  70.         col = HSVtoRGB( y * 360 / 4 + cofs , 255, 255 ) ;
  71.         i = ( y < 512 )? y / 2 : 256 - (y - 512) / 2 ;
  72.         for( j = 0 ; j < i ; j++ )
  73.             putVRAMw( vram + j + j , col, SS_VRAM1 ) ;
  74.         vram += 512 ;
  75.     }
  76.     key = INKEY() ;
  77.     offset = 0 ;
  78.     for( ;; ) {
  79.         CRTC( CA_FA0,offset ) ; /* FA0 */
  80.         CRTC( CA_FA1,offset ) ; /* FA1 */
  81.         if( (offset += 128) == 512*128 ) offset = 0 ;
  82.         for( j = 0 ; j < speed ; j++ ) ;
  83.         if( key != INKEY() ) break ;
  84.     }
  85.     getchar() ;
  86.     screenterm() ;
  87. }
  88.