neosplash(){ disp_off(); cls(); load_palette(16,neosprpal,1); load_vram(0x5000,neospr,0x400); load_palette(0,badge1pal,1); set_tile_data(neotiles); load_tile(0x1000); for(j=0;j<14;j++){ for(i=0;i<14;i++){ put_tile(j*14+i,i+1,j); } } for(i=0;i<8;i++){ spr_set(i); spr_pal(0); spr_pri(1); spr_ctrl(SIZE_MAS,SZ_32x16); spr_pattern(0x5000+0x80*i); spr_y(224-24); spr_x(i*32); } disp_on(); t=0; for(;;){ t++; vsync(); joy0=joy(0); satb_update(); if(joy0&JOY_STRT){ break; } if(t>144)break; } psgPlay(0); disp_off(); for(i=0;i<8;i++){ spr_set(i); spr_hide(); } satb_update(); cls(); set_color(0,0); set_color(256,0); disp_on(); while(joy0&JOY_STRT){ vsync(); joy0=joy(0); } }
void startup_blink() { disp_on(); for (uint8_t i = 0; i < 2; ++i) { my_time.secs = 0xFF; my_time.mins = 0xFF; my_time.hours = 0xFF; disp_time(ENABLE); _delay_ms(500); my_time.secs = 0x00; my_time.mins = 0x00; my_time.hours = 0x00; disp_time(ENABLE); _delay_ms(500); } return; }
void main(void) { /* put your own code here */ EnableInterrupts; DDR1AD0 = DDRT = 0xFF; PT1AD0 = PTT = 0x00; set_baud_rate(9600); send(); fct_set(8,2,58); disp_on(1,1,1); entry_mode(1,0); clear_disp(); char val,buf[16] ; #define go 5000 while(1) { memset(buf,0,16); for(int v=0,i =0; i<16 ; i++) { v=0; while( chk_rx() >= 0 ? 0: i==0 ? 1: v++ < go ? 1: 0); if (v >= go){ break; } buf[i]=fetch_char(); } return_home(); clear_disp(); prt_str(buf); } for(;;) { _FEED_COP(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave main */ }
void DrawN() { unsigned char end = 1; redraw = 1; do { vsync(); end = 1; if(redraw) { ResetVideo(); set_xres(256, xres_flags); scroll(0, 0, -32, 0, 240, 0xC0); #ifndef CDROM1 load_background(n_bg, n_pal, n_map, 32, 20); #else set_screen_size(SCR_SIZE_32x32); cd_loaddata(GPHX_OVERLAY, OFS_N_PAL_bin, palCD, SIZE_N_PAL_bin); load_palette(0, palCD, 16); cd_loadvram(GPHX_OVERLAY, OFS_N_DATA_bin, 0x1000, SIZE_N_DATA_bin); cd_loadvram(GPHX_OVERLAY, OFS_N_BAT_bin, 0, SIZE_N_BAT_bin); // Why these get zapped to 0 when in CDROM1... RestoreGlobals(); #endif redraw = 0; disp_on(); } controller = joy(0); if(controller & JOY_SEL) end = 0; }while(!end); }
squirrelsplash(){ disp_off(); cls(); foo=6; put_string(" PC Engine ",0,foo); put_string(" MML Sound Library ",0,2+foo); put_string(" 'SQUIRREL' ",0,4+foo); put_string(" By: Aetherbyte ",0,6+foo); put_string(" http://www.aetherbyte.com/ ",0,8+foo); foo++; put_string(" Game concept and graphics by ",0,12+foo); put_string(" http://lazybraingames.com/ ",0,14+foo); disp_on(); bar=0; while(1){ lastjoy0=joy0; vsync(); bar++; joy0=joy(0); if(joy0&JOY_STRT)break; if(bar>90)break; } cls(); while(joy0&JOY_STRT){ vsync(); joy0=joy(0); } }
main() { char i,j,k,l,m,n; disp_off(); /* <- I don't think this works.... */ spr_set(); spr_hide(); load_default_font(); set_screen_size(SCR_SIZE_32x32); disp_on(); if(!sgx_detect()) { put_string("Halt: SGX not hardware found", 2, 13); for(;;){} } /* These NEED to be set, else you won't see the SGX 2nd layer BG or sprites. */ vpc_win_size( VPC_WIN_A, 0x01ff); vpc_win_size( VPC_WIN_B, 0x01ff); vpc_win_reg( VPC_WIN_A, VDC_ON+VPC_NORM); vpc_win_reg( VPC_WIN_B, VDC_ON+VPC_NORM); vpc_win_reg( VPC_WIN_AB, VDC_ON+VPC_NORM); vpc_win_reg( VPC_WIN_NONE, VDC_ON+VPC_NORM); set_font_pal(4); set_font_color(14,0); load_default_font(); put_string("SGX hardware found", 2, 3); sgx_set_screen_size(SCR_SIZE_32x32); sgx_load_vram(0x0000,map, 0x400); sgx_load_vram(0x1000,tile, 0x4000); load_palette(0, pal,16); sgx_spr_hide(); sgx_spr_set(1); sgx_disp_on(); put_string("Arcade Card: ", 2, 4); if ( ac_init() ) { put_string("detected.", 15, 4); /* initialize AC register 0 to address 0x000000 and +1 auto-increment */ ac_full_reg0(0x00,0x0000,0x0000,0x0001,0x11); put_string("CD->AC xfer... ", 2, 5); /* transfer 8k at a time from CD to AC memory via AC reg #0 */ ac_cd_xfer(AC_REG0,0,0x1c2,4); ac_cd_xfer(AC_REG0,0,0x1c6,4); ac_cd_xfer(AC_REG0,0,0x1ca,4); ac_cd_xfer(AC_REG0,0,0x1ce,4); ac_cd_xfer(AC_REG0,0,0x1d2,4); ac_cd_xfer(AC_REG0,0,0x1d6,4); ac_cd_xfer(AC_REG0,0,0x1da,4); ac_cd_xfer(AC_REG0,0,0x1de,4); put_string("finished.", 17, 5); sgx_bg_on(); /* reset AC reg #0 address to 0x000000 */ ac_addr_reg0(0x00,0x0000); ac_vram_dma(AC_REG0 ,0x1000,0x3c00, SGX); ac_addr_reg0(0x00,0x8000); ac_vram_dma(AC_REG0 ,0x0000,0x800, SGX); ac_addr_reg0(0x00,0x8800); ac_vce_copy( AC_REG0, 0x00, 0x100 ); vsync(60); vsync(60); } else { put_string("not detected.", 15, 4); for(;;){} } put_string("Scrolling SGX layer ", 2, 6); for(;;) { for( j=0; j<0xff; j++) { vsync(); sgx_scroll( j , j); } } }
int main(int argc, char* argv[]) { int i; int key_fd = -1; struct input_event data; struct sigaction sigact; memset(&sigact, 0, sizeof(sigact)); sigact.sa_handler = handle_int; //format=V4L2_PIX_FMT_NV12; //V4L2_PIX_FMT_NV16 format = V4L2_PIX_FMT_NV12; disp_format=DISP_FORMAT_YUV420; //DISP_FORMAT_YUV422 disp_seq=DISP_SEQ_UVUV; struct v4l2_format fmt; struct v4l2_format fmt_priv; printf("*********************\n"); printf("TVD demo start!\n"); printf("Press KEY_ESC for exit\n"); printf("*********************\n"); /*if((key_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK)) < 0){//key: linux=event0, android=event2 printf("open event fail!\n"); return -1; }*/ fd = open ("/dev/video1", O_RDWR /* required */ | O_NONBLOCK, 0); int ret = -1; CLEAR (fmt_priv); fmt_priv.type = V4L2_BUF_TYPE_PRIVATE; fmt_priv.fmt.raw_data[0] =0;//interface fmt_priv.fmt.raw_data[1] =0;//system fmt_priv.fmt.raw_data[2] =0;//format 1=mb, for test only fmt_priv.fmt.raw_data[8] =2;//row fmt_priv.fmt.raw_data[9] =2;//column fmt_priv.fmt.raw_data[10] =1;//channel_index fmt_priv.fmt.raw_data[11] =2;//channel_index fmt_priv.fmt.raw_data[12] =3;//channel_index fmt_priv.fmt.raw_data[13] =4;//channel_index if (-1 == ioctl (fd, VIDIOC_S_FMT, &fmt_priv)) //设置自定义 { printf("VIDIOC_S_FMT error! a\n"); ret = -1; return ret; } // CLEAR (fmt); // fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; // fmt.fmt.pix.width = 720*fmt_priv.fmt.raw_data[8];//720; // fmt.fmt.pix.height = 480*fmt_priv.fmt.raw_data[9];//576;//480; // fmt.fmt.pix.pixelformat = format;//V4L2_PIX_FMT_YUV422P;//V4L2_PIX_FMT_NV12;//V4L2_PIX_FMT_YUYV; // fmt.fmt.pix.field = V4L2_FIELD_NONE; // if (-1 == ioctl (fd, VIDIOC_S_FMT, &fmt)) //设置图像格式 // { // printf("VIDIOC_S_FMT error! b\n"); // ret = -1; // return ret; // } disp_mode=fmt_priv.fmt.raw_data[2]?DISP_MOD_MB_UV_COMBINED:DISP_MOD_NON_MB_UV_COMBINED;//DISP_MOD_NON_MB_UV_COMBINED DISP_MOD_MB_UV_COMBINED disp_size.width = fmt_priv.fmt.raw_data[8]*(fmt_priv.fmt.raw_data[2]?704:720);//width disp_size.height = fmt_priv.fmt.raw_data[9]*(fmt_priv.fmt.raw_data[1]?576:480);//height printf("disp_size.width=%d\n", disp_size.width); printf("disp_size.height=%d\n", disp_size.height); usleep(100000);//delay 100ms if you want to check the status after set fmt CLEAR (fmt_priv); fmt_priv.type = V4L2_BUF_TYPE_PRIVATE; if (-1 == ioctl (fd, VIDIOC_G_FMT, &fmt_priv)) //设置自定义 { printf("VIDIOC_G_FMT error! a\n"); ret = -1; return ret; } printf("interface=%d\n", fmt_priv.fmt.raw_data[0]); printf("system=%d\n", fmt_priv.fmt.raw_data[1]); printf("format=%d\n", fmt_priv.fmt.raw_data[2]); printf("row=%d\n", fmt_priv.fmt.raw_data[8]); printf("column=%d\n", fmt_priv.fmt.raw_data[9]); printf("channel_index[0]=%d\n", fmt_priv.fmt.raw_data[10]); printf("channel_index[1]=%d\n", fmt_priv.fmt.raw_data[11]); printf("channel_index[2]=%d\n", fmt_priv.fmt.raw_data[12]); printf("channel_index[3]=%d\n", fmt_priv.fmt.raw_data[13]); printf("status[0]=%d\n", fmt_priv.fmt.raw_data[16]); printf("status[1]=%d\n", fmt_priv.fmt.raw_data[17]); printf("status[2]=%d\n", fmt_priv.fmt.raw_data[18]); printf("status[3]=%d\n", fmt_priv.fmt.raw_data[19]); struct v4l2_requestbuffers req; CLEAR (req); req.count = 5; req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; req.memory = V4L2_MEMORY_MMAP; ioctl (fd, VIDIOC_REQBUFS, &req); //申请缓冲,count是申请的数量,注意,释放缓冲实际在VIDIOC_STREAMOFF内完成了。 buffers = calloc (req.count, sizeof (*buffers));//内存中建立对应空间 for (n_buffers = 0; n_buffers < req.count; ++n_buffers) { struct v4l2_buffer buf; //驱动中的一帧 CLEAR (buf); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; buf.index = n_buffers; if (-1 == ioctl (fd, VIDIOC_QUERYBUF, &buf)) //映射用户空间 printf ("VIDIOC_QUERYBUF error\n"); buffers[n_buffers].length = buf.length; buffers[n_buffers].start = mmap (NULL /* start anywhere */, //通过mmap建立映射关系 buf.length, PROT_READ | PROT_WRITE /* required */, MAP_SHARED /* recommended */, fd, buf.m.offset); printf("MMAP: %p OFF: %p\n", buffers[n_buffers].start, buf.m.offset); if (MAP_FAILED == buffers[n_buffers].start) printf ("mmap failed\n"); } for (i = 0; i < n_buffers; ++i) { struct v4l2_buffer buf; CLEAR (buf); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; buf.index = i; if (-1 == ioctl (fd, VIDIOC_QBUF, &buf))//申请到的缓冲进入列队 printf ("VIDIOC_QBUF failed\n"); } #ifdef DISPLAY disp_init(disp_size.width,disp_size.height); disp_start(); disp_on(); #endif enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == ioctl (fd, VIDIOC_STREAMON, &type)) //开始捕捉图像数据 printf ("VIDIOC_STREAMON failed\n"); sigaction(SIGINT, &sigact, NULL); while(!quit) { read(key_fd, &data, sizeof(data)); if( (data.type == EV_KEY)&& (data.code == KEY_ESC)&& (data.value == 1) ){ quit = 1; } CLEAR (fmt_priv); fmt_priv.type = V4L2_BUF_TYPE_PRIVATE; if (-1 == ioctl (fd, VIDIOC_G_FMT, &fmt_priv)) //监视状态 { printf("VIDIOC_G_FMT error! a\n"); ret = -1; return ret; } //printf("status=0x%02x\n", fmt_priv.fmt.raw_data[16]); for (;;) //这一段涉及到异步IO { fd_set fds; struct timeval tv; int r; FD_ZERO (&fds);//将指定的文件描述符集清空 FD_SET (fd, &fds);//在文件描述符集合中增加一个新的文件描述符 /* Timeout. */ tv.tv_sec = 2; tv.tv_usec = 0; r = select (fd + 1, &fds, NULL, NULL, &tv);//判断是否可读(即摄像头是否准备好),tv是定时 if (-1 == r) { if (EINTR == errno) continue; printf ("select err\n"); } if (0 == r) { fprintf (stderr, "select timeout\n"); //exit (EXIT_FAILURE); //goto close; } if (read_frame ())//如果可读,执行read_frame ()函数,并跳出循环 break; } } close: if (-1 == ioctl (fd, VIDIOC_STREAMOFF, &type)) //停止捕捉图像数据,注意,此动作同时会释放VIDIOC_REQBUFS申请的缓冲 printf ("VIDIOC_STREAMOFF failed\n"); unmap: for (i = 0; i < n_buffers; ++i) { if (-1 == munmap (buffers[i].start, buffers[i].length)) { printf ("munmap error"); } } disp_stop(); disp_exit(); close (fd); printf("TVD demo bye!\n"); return 0; }
void main() { int sel = 0; redraw = 1; refresh = 1; #ifndef CDROM xres_flags = XRES_SOFT; Enabled240p = 1; UseDefault = 0; EnabledSoft = 1; Enabled_C_BW = 0; #endif #ifdef CDROM RestoreGlobals(); #endif #ifdef CDROM1 if(prev_select) { sel = prev_select; prev_select = 0; } #endif disp_off(); set_xres(320, xres_flags); if(Enabled240p) Set240p(); #ifndef CDROM disp_on(); DrawIntro(); disp_off(); #endif while(1) { vsync(); #ifdef CDROM1 if(!HelpItem) { #endif if(redraw) { RedrawMain(); redraw = 0; refresh = 1; disp_on(); } set_font_pal(15); if(refresh) { RefreshMain(sel); refresh = 0; } controller = joytrg(0); if (controller & JOY_SEL) { #ifdef CDROM1 x_g = 0; #endif Options(); redraw = 1; } if (controller & JOY_DOWN) { sel++; if(sel > 14) sel = 0; refresh = 1; } if (controller & JOY_UP) { sel--; if(sel < 0) sel = 14; refresh = 1; } if (controller & JOY_RUN) { showHelp(GENERAL_HELP); redraw = 1; } #ifdef CDROM1 } else { if(HelpItem <= OPTIONS_HELP) { sel = HelpItem; controller = JOY_I; } HelpItem = 0; } #endif if (controller & JOY_I) { disp_off(); ResetVideo(); switch(sel) { case 0: #ifndef CDROM1 TestPatterns(); #else xres_flags_g = xres_flags; Enabled240p_g = Enabled240p; UseDefault_g = UseDefault; EnabledSoft_g = EnabledSoft; Enabled_C_BW_g = Enabled_C_BW; set_font_pal(14); put_string("Loading...", 27, 26); cd_execoverlay(PATTERNS_OVERLAY); #endif break; case 1: DropShadow(); break; case 2: StripedSprite(); break; case 3: LagTest(); break; case 4: ManualLagTest(); break; case 5: ScrollTest(); break; case 6: VScrollTest(); break; case 7: DrawStripes(); break; case 8: DrawCheck(); break; case 9: LEDZoneTest(); break; case 10: SoundTest(); break; case 11: AudioSyncTest(); break; case 12: #ifdef CDROM1 prev_select = sel; #endif Options(); break; case 13: #ifdef CDROM1 prev_select = sel; #endif showHelp(GENERAL_HELP); break; case 14: DrawCredits(); break; } redraw = 1; disp_off(); } } }
void DrawCredits() { unsigned char end = 0; int counter = 0; redraw = 1; refresh = 1; while(!end) { vsync(); if(redraw) { ResetVideo(); setupFont(); SetFontColors(15, RGB(3, 3, 3), RGB(0, 6, 0), 0); SetFontColors(13, RGB(3, 3, 3), RGB(1, 6, 6), 0); set_xres(512, xres_flags); #ifndef CDROM1 set_map_data(MB512_map, 64, 30); set_tile_data(MB512_bg); load_tile(0x1000); load_map(0, 0, 0, 0, 64, 30); load_palette(0, MB512_pal, 1); #else set_screen_size(SCR_SIZE_64x32); cd_loaddata(GPHX_OVERLAY, OFS_back512_PAL_bin, palCD, SIZE_back512_PAL_bin); load_palette(0, palCD, 1); cd_loadvram(GPHX_OVERLAY, OFS_back512_DATA_bin, 0x1000, SIZE_back512_DATA_bin); cd_loadvram(GPHX_OVERLAY, OFS_back512_BAT_bin, 0, SIZE_back512_BAT_bin); #endif Center224in240(); redraw = 0; refresh = 1; disp_on(); } if(refresh) { RefreshCredits(); refresh = 0; } set_font_pal(14); if(counter == 1) put_string("Artemio Urbina ", HPOS+2, 8); if(counter == 60*4) put_string("@Artemio (twitter) ", HPOS+2, 8); if(counter == 60*8) put_string("*****@*****.**", HPOS+2, 8); if(counter == 60*16) counter = 0; counter++; controller = joytrg(0); if (controller & JOY_II) end = 1; if (controller & JOY_SEL) { DrawN(); redraw = 1; } } }
clear_display() { disp_off(); cls(); disp_on(); }
void state_machine() { // Spend most of the time in sleep switch (current_state) { // LEDs off, waiting for button presses case SLEEPING: next_state = SLEEPING; disp_time(DISABLE); //TODO: Go back to sleep sleep_proc(); break; case IDLE: next_state = IDLE; if (timeout_ticks > _LED_TIMEOUT_TICKS) { next_state = SLEEPING; } if (SET || MODE) next_state = WAKE; break; // LEDs on, waiting for timeout case WAKE: next_state = WAKE; enable_pwm(); disp_on(); if (!SET && !MODE) { next_state = IDLE; } if ((debouncer_test(SET_BTN) == LONG_PRESSED) && (debouncer_test(MODE_BTN) == LONG_PRESSED)) { next_state = READY_TO_SET_HOURS; } break; case READY_TO_SET_HOURS: next_state = READY_TO_SET_HOURS; last_set_state = FALSE; flash_mins(); flash_hours(); if (!MODE && !SET) next_state = SET_HOURS; break; // Time set mode, pressing set will increment hours up to 24, then // roll over, pressing mode will switch to minute set mode case SET_HOURS: next_state = SET_HOURS; flash_mins(); if (debouncer_test(MODE_BTN) == DEBOUNCED) { next_state = READY_TO_SET_MINS; } if (debouncer_test(SET_BTN) == DEBOUNCED) { last_set_state = TRUE; } else if (debouncer_test(SET_BTN) == LONG_PRESSED) { next_state = QUICK_HOURS_INC; } if ((last_set_state == TRUE) && !SET) { last_set_state = FALSE; ++my_time.hours; } break; case QUICK_HOURS_INC: next_state = QUICK_HOURS_INC; flash_mins(); if (!SET) next_state = SET_HOURS; if (quick_inc) { quick_inc = FALSE; ++my_time.hours; } break; case READY_TO_SET_MINS: next_state = READY_TO_SET_MINS; last_set_state = FALSE; flash_mins(); flash_hours(); if (!MODE) next_state = SET_MINS; break; // Time set mode, pressing set will increment minutes up to 59, then // roll over, pressing mode will exit time set mode case SET_MINS: next_state = SET_MINS; flash_hours(); if (debouncer_test(MODE_BTN) == DEBOUNCED) { next_state = WAKE; } if (debouncer_test(SET_BTN) == DEBOUNCED) { last_set_state = TRUE; } else if (debouncer_test(SET_BTN) == LONG_PRESSED) { next_state = QUICK_MINS_INC; } if ((last_set_state == TRUE) && !SET) { last_set_state = FALSE; ++my_time.mins; } break; case QUICK_MINS_INC: next_state = QUICK_MINS_INC; flash_hours(); if (!SET) next_state = SET_MINS; if (quick_inc) { quick_inc = FALSE; ++my_time.mins; } break; default: next_state = IDLE; break; } if (current_state != SLEEPING) { test_buttons(); } if (next_state != current_state) { current_state = next_state; } }
void flash_hours() { if (flash_counter > _BLINK_ON_TIME) disp_on(); else hours_off(); return; }
void flash_mins() { if (flash_counter > _BLINK_ON_TIME) disp_on(); else mins_off(); return; }