// drawCrash - draws the crash message across the screen void drawCrash(void) { short int x, offset = 0; for (x = 0; x < CRASHWIDTH; x += 32) { Sprite32(CRASHX+x,CRASHY,CRASHHEIGHT,crash+offset,LCD_MEM,SPRT_AND); Sprite32(CRASHX+x,CRASHY,CRASHHEIGHT,crash+offset,LCD_MEM,SPRT_OR); offset+=CRASHHEIGHT; } // wait for keypress delay(KEYDELAY); while (!getKey()); delay(KEYDELAY); }
// drawSelector - draws the menu selector bar over the menu options void drawSelector(short int y) { short int loop, offset = 0; // draw the selector pieces for (loop = 0; loop < (SELECTORTILES * SELECTORWIDTH); loop+=SELECTORWIDTH) { Sprite32(loop,y,SELECTORHEIGHT,selector+offset,LCD_MEM,SPRT_XOR); offset += SELECTORHEIGHT; } }
// drawLogo - draws the Nibbles 68k logo across the top of the screen void drawLogo(void) { short int loop, offset = 0; // draw the logo pieces for (loop = 0; loop < (LOGOTILES * LOGOWIDTH); loop+=LOGOWIDTH) { Sprite32(loop,0,LOGOHEIGHT,logo+offset,LCD_MEM,SPRT_XOR); offset += LOGOHEIGHT; } }
// function that draws the title screen, in one or both planes void drawTitle(int planes) { int x,y; int tilewidth = 32; int tileheight = 32; int vcount = 3; int hcount = 5; int i; memset(GetPlane(0),0,LCD_SIZE); memset(GetPlane(1),0,LCD_SIZE); for (y=0; y<vcount; y++) { for (x=0; x<hcount; x++) { int offset = (y*hcount+x)*tileheight; for (i=0; i<planes; i++) { Sprite32(x*tilewidth,y*tileheight,tileheight,&title[i][offset],GetPlane(i),SPRT_OR); } } } }
// Main Function void _main(void) { // declare the sprite positions int x1 = 20, y1 = 20, direction1 = RIGHT; int x2 = 40, y2 = 40, direction2 = LEFT; int x3 = 60, y3 = 60, direction3 = RIGHT; int x4 = 80, y4 = 80, direction4 = LEFT; int x5 = 50, y5 = 50, direction5 = RIGHT; // keycode variable int key = 0; // Define the pins unsigned char pinsprt[] = {0x18,0x3C,0x18,0x38,0x7C,0x7C,0x7C,0x38}; unsigned long int balsprt[] = {0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,}; // clear the screen ClrScr(); // Annotate the display DrawStr(0, 0, "These Are Bowling Pins!", A_NORMAL); // draw the sprites Sprite8(x1, y1, SPRITE_HEIGHT, pinsprt, LCD_MEM, SPRT_XOR); Sprite8(x2, y2, SPRITE_HEIGHT, pinsprt, LCD_MEM, SPRT_XOR); Sprite8(x3, y3, SPRITE_HEIGHT, pinsprt, LCD_MEM, SPRT_XOR); Sprite8(x4, y4, SPRITE_HEIGHT, pinsprt, LCD_MEM, SPRT_XOR); Sprite32(x5, y5, 32, balsprt, LCD_MEM, SPRT_XOR); // wait for a key before exit ngetchx(); }
/*===========================================================================*/ static inline short Test32(void) { unsigned long measure_val; char tmpstr[100]; short x,y; long count; //------------------------------------------------------------------------- // original sprite functions //------------------------------------------------------------------------- count = 0; ClrScr(); OSTimerRestart(USER_TIMER); for (y=0;y<100-16;y++) { for (x=0;x<160-32;x++) { count++; Sprite32(x,y,8,spritedata32,LCD_MEM,SPRT_AND); Sprite32(x,y,8,spritedata32,LCD_MEM,SPRT_OR); } } measure_val = OSTimerCurVal(USER_TIMER); sprintf(tmpstr,"TIGCCLIB AND+OR: %lu ticks for %ld sprites",INITIAL_TIMER_VALUE-measure_val,count); ST_helpMsg(tmpstr); if (ngetchx() == KEY_ESC) return KEY_ESC; #if __TIGCCLIB_VERSION__ >= 272 //------------------------------------------------------------------------- // original sprite functions with RPLC (GCC4TI 0.96 Beta 10+) //------------------------------------------------------------------------- count = 0; ClrScr(); OSTimerRestart(USER_TIMER); for (y=0;y<100-16;y++) { for (x=0;x<160-32;x++) { count++; Sprite32(x,y,8,spritedata32,LCD_MEM,SPRT_RPLC); } } measure_val = OSTimerCurVal(USER_TIMER); sprintf(tmpstr,"TIGCCLIB RPLC: %lu ticks for %ld sprites",INITIAL_TIMER_VALUE-measure_val,count); ST_helpMsg(tmpstr); if (ngetchx() == KEY_ESC) return KEY_ESC; #endif //------------------------------------------------------------------------- // modified sprite functions using separate and/or //------------------------------------------------------------------------- count = 0; ClrScr(); OSTimerRestart(USER_TIMER); for (y=0;y<100-16;y++) { for (x=0;x<160-32;x++) { count++; Sprite32_AND_R(x,y,8,spritedata32,LCD_MEM); Sprite32_OR_R(x,y,8,spritedata32,LCD_MEM); } } measure_val = OSTimerCurVal(USER_TIMER); sprintf(tmpstr,"ExtGraph AND+OR: %lu ticks for %ld sprites",INITIAL_TIMER_VALUE-measure_val,count); ST_helpMsg(tmpstr); if (ngetchx() == KEY_ESC) return KEY_ESC; //------------------------------------------------------------------------- // modified sprite functions using just one call //------------------------------------------------------------------------- count = 0; ClrScr(); OSTimerRestart(USER_TIMER); for (y=0;y<100-16;y++) { for (x=0;x<160-32;x++) { count++; Sprite32_MASK_R(x,y,8,spritedata32,spritedata32,LCD_MEM); } } measure_val = OSTimerCurVal(USER_TIMER); sprintf(tmpstr,"ExtGraph MASK: %lu ticks for %ld sprites",INITIAL_TIMER_VALUE-measure_val,count); ST_helpMsg(tmpstr); if (ngetchx() == KEY_ESC) return KEY_ESC; //------------------------------------------------------------------------- count = 0; ClrScr(); OSTimerRestart(USER_TIMER); for (y=0;y<100-16;y++) { for (x=0;x<160-32;x++) { count++; Sprite32_BLIT_R(x,y,8,spritedata32,0x00000000,LCD_MEM); } } measure_val = OSTimerCurVal(USER_TIMER); sprintf(tmpstr,"ExtGraph BLIT: %lu ticks for %ld sprites",INITIAL_TIMER_VALUE-measure_val,count); ST_helpMsg(tmpstr); if (ngetchx() == KEY_ESC) return KEY_ESC; //------------------------------------------------------------------------- count = 0; ClrScr(); OSTimerRestart(USER_TIMER); for (y=0;y<100-16;y++) { for (x=0;x<160-32;x++) { count++; Sprite32_RPLC_R(x,y,8,spritedata32,LCD_MEM); } } measure_val = OSTimerCurVal(USER_TIMER); sprintf(tmpstr,"ExtGraph RPLC: %lu ticks for %ld sprites",INITIAL_TIMER_VALUE-measure_val,count); ST_helpMsg(tmpstr); if (ngetchx() == KEY_ESC) return KEY_ESC; //------------------------------------------------------------------------- // original sprite functions //------------------------------------------------------------------------- count = 0; ClrScr(); OSTimerRestart(USER_TIMER); for (y=0;y<100-16;y++) { for (x=0;x<160-32;x++) { count++; Sprite32(x,y,8,spritedata32,LCD_MEM,SPRT_XOR); } } measure_val = OSTimerCurVal(USER_TIMER); sprintf(tmpstr,"TIGCCLIB AND+OR: %lu ticks for %ld sprites",INITIAL_TIMER_VALUE-measure_val,count); ST_helpMsg(tmpstr); if (ngetchx() == KEY_ESC) return KEY_ESC; //------------------------------------------------------------------------- // modified sprite functions using just one call //------------------------------------------------------------------------- count = 0; ClrScr(); OSTimerRestart(USER_TIMER); for (y=0;y<100-16;y++) { for (x=0;x<160-32;x++) { count++; Sprite32_XOR_R(x,y,8,spritedata32,LCD_MEM); } } measure_val = OSTimerCurVal(USER_TIMER); sprintf(tmpstr,"ExtGraph XOR: %lu ticks for %ld sprites",INITIAL_TIMER_VALUE-measure_val,count); ST_helpMsg(tmpstr); return ngetchx(); }