int main(void){ menu_t *games_list; int selected; PICvision_init(); games_list=create_menu("SELECT GAME"); add_menu_item("snake",1,games_list); add_menu_item("2048",2,games_list); //add_menu_item("game 3",3,games_list); //add_menu_item("etc...",4,games_list); while(1){ clear_screen(); selected=run_menu(games_list,10,(27-5)/2,PADDLE1); clear_screen(); switch(selected){ case 1: snake_game(); break; case 2: gc_2048_game(); break; case 3: set_curpos(0,0); print("game 3"); wait_n_frame(60); break; case 4: set_curpos(0,0); print("autre jeux"); wait_n_frame(60); break; }//switch }//while return 0; }//main()
void main(void) { HardwareInit(); UartInit(STDIO,115200,DEFAULT_LINE_CTRL); heap_size=free_heap(); #if defined DEBUG test_pattern(); #endif UartPrint(STDOUT,"video initialization\r"); VideoInit(); delay_ms(500); UartPrint(STDOUT,"keyboard initialization: "); if (KeyboardInit()){ UartPrint(STDOUT,"OK\r"); comm_channel=LOCAL_CON; }else{ UartPrint(STDOUT,"keyboard error\r"); UartPrint(STDOUT,"Using uart2 channel.\r"); comm_channel=SERIAL_CON; } text_coord_t cpos; UartPrint(STDOUT,"SD initialization: "); if (!mount(0)){ UartPrint(STDOUT,"Failed\r"); SDCardReady=FALSE; }else{ UartPrint(STDOUT,"succeeded\r"); SDCardReady=TRUE; } UartPrint(STDOUT,"SRAM initialization\r"); sram_init(); UartPrint(STDOUT,"sound initialization.\r"); tune((unsigned int*)&e3k[0]); UartPrint(STDOUT,"initialization completed.\r"); set_cursor(CR_BLOCK); // sauvegare video_buffer dans SRAM clear_screen(); #if defined _DEBUG_ graphics_test(); set_curpos(0,LINE_PER_SCREEN-1); print(comm_channel,"test"); sram_write_block(100000,video_bmp,BMP_SIZE); delay_ms(1000); clear_screen(); delay_ms(1000); sram_read_block(100000,video_bmp,BMP_SIZE); delay_ms(1000); clear_screen(); // print(comm_channel,"heap_size: "); // print_int(comm_channel,heap_size,0); // crlf(); #endif shell(); } // main()
/************************************************************************ * control_console * * 引数: caller * packet * * 返値: E_NOSPT を返す。 * * 処理: * */ W control_console (ID caller, DDEV_CTL_REQ *packet) { DDEV_RES res; switch (packet->cmd) { case CONSOLE_CLEAR: clear_console (); res.body.ctl_res.dd = packet->dd; res.body.ctl_res.errcd = E_OK; res.body.ctl_res.errinfo = E_OK; snd_mbf (caller, sizeof (res), &res); return (E_OK); case CONSOLE_MOVE: if (packet->len != 2) { res.body.ctl_res.dd = packet->dd; res.body.ctl_res.errcd = E_PAR; res.body.ctl_res.errinfo = E_PAR; snd_mbf (caller, sizeof (res), &res); return (E_PAR); } set_curpos (packet->param[0], packet->param[1]); res.body.ctl_res.dd = packet->dd; res.body.ctl_res.errcd = E_OK; res.body.ctl_res.errinfo = E_OK; snd_mbf (caller, sizeof (res), &res); return (E_OK); default: res.body.ctl_res.dd = packet->dd; res.body.ctl_res.errcd = E_NOSPT; res.body.ctl_res.errinfo = E_NOSPT; snd_mbf (caller, sizeof (res), &res); return (E_NOSPT); } }
void splash_screen(){ int i,k,first,last,left; left=(HPIXELS-PIX_WIDTH)/16+1; last=0; while (last<(VPIXELS-PIX_HEIGHT)/2+PIX_HEIGHT){ first=max(0,PIX_HEIGHT-last-1); for (i=0;i<PIX_HEIGHT-first;i++){ for (k=0;k<ARRAY_WIDTH;k++){ video_buffer[last-i][left+k]=PICVISION_BANNER[PIX_HEIGHT-1-i][k]; }//for }//for if (last-i>0){ for (k=0;k<ARRAY_WIDTH;k++){ video_buffer[last-i-1][left+k]=0; }//for }//if wait_n_frame(1); last++; }//while set_curpos(left,last/8+2); print("Copyright 2014, Jacques Deschenes"); wait_n_frame(120); }//f()
static int mfbioctl(void *v, void *vs, u_long cmd, void *data, int flag, struct lwp *l) { struct mfb_softc *sc = v; struct rasops_info *ri = sc->sc_ri; int turnoff, s; switch (cmd) { case WSDISPLAYIO_GTYPE: *(u_int *)data = WSDISPLAY_TYPE_MFB; return (0); case WSDISPLAYIO_GINFO: #define wsd_fbip ((struct wsdisplay_fbinfo *)data) wsd_fbip->height = ri->ri_height; wsd_fbip->width = ri->ri_width; wsd_fbip->depth = ri->ri_depth; wsd_fbip->cmsize = 0; #undef fbt return (0); case WSDISPLAYIO_GETCMAP: case WSDISPLAYIO_PUTCMAP: return (EPASSTHROUGH); case WSDISPLAYIO_SVIDEO: turnoff = *(int *)data == WSDISPLAYIO_VIDEO_OFF; if (sc->sc_blanked != turnoff) { sc->sc_blanked = turnoff; #if 0 /* XXX later XXX */ To turn off, - assign Bt455 cmap[1].green with value 0 (black), - assign Bt431 register #0 with value 0x04 to hide sprite cursor. #endif /* XXX XXX XXX */ } return (0); case WSDISPLAYIO_GVIDEO: *(u_int *)data = sc->sc_blanked ? WSDISPLAYIO_VIDEO_OFF : WSDISPLAYIO_VIDEO_ON; return (0); case WSDISPLAYIO_GCURPOS: *(struct wsdisplay_curpos *)data = sc->sc_cursor.cc_pos; return (0); case WSDISPLAYIO_SCURPOS: s = spltty(); set_curpos(sc, (struct wsdisplay_curpos *)data); sc->sc_changed |= WSDISPLAY_CURSOR_DOPOS; splx(s); return (0); case WSDISPLAYIO_GCURMAX: ((struct wsdisplay_curpos *)data)->x = ((struct wsdisplay_curpos *)data)->y = CURSOR_MAX_SIZE; return (0); case WSDISPLAYIO_GCURSOR: return get_cursor(sc, (struct wsdisplay_cursor *)data); case WSDISPLAYIO_SCURSOR: return set_cursor(sc, (struct wsdisplay_cursor *)data); case WSDISPLAYIO_SMODE: if (*(int *)data == WSDISPLAYIO_MODE_EMUL) { s = spltty(); sc->sc_curenb = 0; sc->sc_blanked = 0; sc->sc_changed |= WSDISPLAY_CURSOR_DOCUR; splx(s); } return (0); }
static int set_cursor(struct vidcvideo_softc *sc, struct wsdisplay_cursor *p) { #define cc (&dc->dc_cursor) struct fb_devconfig *dc = sc->sc_dc; u_int v, index = 0, count = 0, icount = 0; uint8_t r[2], g[2], b[2], image[512], mask[512]; int error; /* XXX gcc does not detect identical conditions */ index = count = icount = 0; v = p->which; if (v & WSDISPLAY_CURSOR_DOCMAP) { index = p->cmap.index; count = p->cmap.count; if (index >= CURSOR_MAX_COLOURS || (index + count) > CURSOR_MAX_COLOURS) return EINVAL; error = copyin(p->cmap.red, &r[index], count); if (error) return error; error = copyin(p->cmap.green, &g[index], count); if (error) return error; error = copyin(p->cmap.blue, &b[index], count); if (error) return error; } if (v & WSDISPLAY_CURSOR_DOSHAPE) { if (p->size.x > CURSOR_MAX_WIDTH || p->size.y > CURSOR_MAX_HEIGHT) return EINVAL; icount = sizeof(uint32_t) * p->size.y; error = copyin(p->image, &image, icount); if (error) return error; error = copyin(p->mask, &mask, icount); if (error) return error; } if (v & WSDISPLAY_CURSOR_DOCUR) dc->dc_curenb = p->enable; if (v & WSDISPLAY_CURSOR_DOPOS) set_curpos(sc, &p->pos); if (v & WSDISPLAY_CURSOR_DOHOT) cc->cc_hot = p->hot; if (v & WSDISPLAY_CURSOR_DOCMAP) { memcpy(&cc->cc_color[index], &r[index], count); memcpy(&cc->cc_color[index + 2], &g[index], count); memcpy(&cc->cc_color[index + 4], &b[index], count); } if (v & WSDISPLAY_CURSOR_DOSHAPE) { cc->cc_size = p->size; memset(cc->cc_image, 0, sizeof cc->cc_image); memcpy(cc->cc_image, image, icount); memset(cc->cc_mask, 0, sizeof cc->cc_mask); memcpy(cc->cc_mask, mask, icount); } vidcvideo_queue_dc_change(dc, v); return 0; #undef cc }
static int vidcvideoioctl(void *v, void *vs, u_long cmd, void *data, int flag, struct lwp *l) { struct vcons_data *vd = v; struct vidcvideo_softc *sc = vd->cookie; struct fb_devconfig *dc = sc->sc_dc; struct vcons_screen *ms = vd->active; int state; switch (cmd) { case WSDISPLAYIO_GTYPE: *(u_int *)data = WSDISPLAY_TYPE_VIDC; return 0; case WSDISPLAYIO_GINFO: if (ms == NULL) return ENODEV; #define wsd_fbip ((struct wsdisplay_fbinfo *)data) wsd_fbip->height = dc->dc_height; wsd_fbip->width = dc->dc_width; wsd_fbip->depth = dc->dc_depth; wsd_fbip->cmsize = CMAP_SIZE; #undef fbt return 0; case WSDISPLAYIO_GETCMAP: return get_cmap(sc, (struct wsdisplay_cmap *)data); case WSDISPLAYIO_PUTCMAP: return set_cmap(sc, (struct wsdisplay_cmap *)data); case WSDISPLAYIO_LINEBYTES: *(u_int *)data = dc->dc_rowbytes; return 0; case WSDISPLAYIO_SVIDEO: state = *(int *)data; dc->dc_blanked = (state == WSDISPLAYIO_VIDEO_OFF); vidcvideo_queue_dc_change(dc, WSDISPLAY_VIDEO_ONOFF); /* done on video blank */ return 0; case WSDISPLAYIO_GVIDEO: *(u_int *)data = dc->dc_blanked ? WSDISPLAYIO_VIDEO_OFF : WSDISPLAYIO_VIDEO_ON; return 0; case WSDISPLAYIO_GCURPOS: *(struct wsdisplay_curpos *)data = dc->dc_cursor.cc_pos; return 0; case WSDISPLAYIO_SCURPOS: set_curpos(sc, (struct wsdisplay_curpos *)data); vidcvideo_queue_dc_change(dc, WSDISPLAY_CURSOR_DOPOS); return 0; case WSDISPLAYIO_GCURMAX: ((struct wsdisplay_curpos *)data)->x = CURSOR_MAX_WIDTH; ((struct wsdisplay_curpos *)data)->y = CURSOR_MAX_HEIGHT; return 0; case WSDISPLAYIO_GCURSOR: return get_cursor(sc, (struct wsdisplay_cursor *)data); case WSDISPLAYIO_SCURSOR: return set_cursor(sc, (struct wsdisplay_cursor *)data); case WSDISPLAYIO_SMODE: state = *(int *)data; if (state == WSDISPLAYIO_MODE_MAPPED) dc->dc_hwscroll_cookie = vidcvideo_hwscroll_reset(); if (state == WSDISPLAYIO_MODE_EMUL) vidcvideo_hwscroll_back(dc->dc_hwscroll_cookie); vidcvideo_progr_scroll(); return 0; } return EPASSTHROUGH; }