main() { uchar i; struct sp1_ss *s; struct sprentry *se; void *temp; #asm di #endasm // Initialize MALLOC.LIB heap = 0L; // heap is empty sbrk(40000, 10000); // make available memory from 40000-49999 // Initialize SP1.LIB zx_border(BLACK); sp1_Initialize(SP1_IFLAG_MAKE_ROTTBL | SP1_IFLAG_OVERWRITE_TILES | SP1_IFLAG_OVERWRITE_DFILE, INK_BLACK | PAPER_WHITE, ' '); sp1_TileEntry(' ', hash); // redefine graphic associated with space character sp1_Invalidate(&cr); // invalidate entire screen so that it is all initially drawn sp1_UpdateNow(); // draw screen area managed by sp1 now // Create Ten Masked Software-Rotated Sprites for (i=0; i!=10; i++) { s = sprtbl[i].s = sp1_CreateSpr(SP1_DRAW_XOR2LB, SP1_TYPE_2BYTE, 3, 0, i); sp1_AddColSpr(s, SP1_DRAW_XOR2, 0, 48, i); sp1_AddColSpr(s, SP1_DRAW_XOR2RB, 0, 0, i); sp1_MoveSprAbs(s, &cr, gr_window, 10, 14, 0, 4); }; while (1) { // main loop sp1_UpdateNow(); // draw screen now for (i=0; i!=10; i++) { // move all sprites se = &sprtbl[i]; sp1_MoveSprRel(se->s, &cr, 0, 0, 0, se->dy, se->dx); if (se->s->row > 21) // if sprite went off screen, reverse direction se->dy = - se->dy; if (se->s->col > 29) // notice if coord moves less than 0, it becomes se->dx = - se->dx; // 255 which is also caught by these cases } } // end main loop }
main() { uchar i; struct sp1_ss *s; struct sprentry *se; void *temp; #asm di #endasm // Initialize MALLOC.LIB heap = 0L; // heap is empty sbrk(40000, 5000); // add 40000-44999 to malloc // Set 512x192 Video Mode memset(16384, 0, 6144); // clear both halves of the display file before switching video mode memset(24576, 0, 6144); ts_vmod(PAPER_BLACK | VMOD_HIRES); // select 64-col mode with black background // Initialize SP1.LIB sp1_Initialize(SP1_IFLAG_MAKE_ROTTBL | SP1_IFLAG_OVERWRITE_TILES | SP1_IFLAG_OVERWRITE_DFILE, ' '); sp1_TileEntry(' ', hash); // redefine graphic associated with space character sp1_Invalidate(&cr); // invalidate entire screen so that it is all initially drawn sp1_UpdateNow(); // draw screen area managed by sp1 now // Create Ten Masked Software-Rotated Sprites for (i=0; i!=10; i++) { s = sprtbl[i].s = sp1_CreateSpr(SP1_DRAW_XOR2LB, SP1_TYPE_2BYTE, 3, 0, i); sp1_AddColSpr(s, SP1_DRAW_XOR2, 0, 48, i); sp1_AddColSpr(s, SP1_DRAW_XOR2RB, 0, 0, i); sp1_MoveSprAbs(s, &cr, gr_window, 10, 14, 0, 4); }; while (1) { // main loop sp1_UpdateNow(); // draw screen now for (i=0; i!=10; i++) { // move all sprites se = &sprtbl[i]; sp1_MoveSprRel(se->s, &cr, 0, 0, 0, se->dy, se->dx); if (se->s->row > 21) // if sprite went off screen, reverse direction se->dy = - se->dy; if (se->s->col > 61) // notice if coord moves less than 0, it becomes se->dx = - se->dx; // 255 which is also caught by these cases } } // end main loop }
main() { uchar i; struct sp1_ss *s; struct sprentry *se; void *temp; #asm di #endasm // Initialize MALLOC.LIB heap = 0L; // heap is empty sbrk(40000, 10000); // add 40000-49999 to malloc // Initialize SP1.LIB zx_border(INK_BLACK); sp1_Initialize(SP1_IFLAG_MAKE_ROTTBL | SP1_IFLAG_OVERWRITE_TILES | SP1_IFLAG_OVERWRITE_DFILE, INK_BLACK | PAPER_WHITE, ' '); sp1_TileEntry(' ', hash); // redefine graphic associated with space character sp1_TileEntry('H', horline); // 'H' will be the horizontal line graphic sp1_TileEntry('V', verline); // 'V' will be the vertical line graphic sp1_TileEntry('C', intline); // 'C' will be the intersection graphic // Print a Tic-Tac-Toe Pattern for (i=0; i!=32; ++i) // draw the two horizontal lines in tic-tac-toe pattern { sp1_PrintAt( 7, i, INK_RED | PAPER_GREEN, 'H'); sp1_PrintAt(16, i, INK_RED | PAPER_GREEN, 'H'); } for (i=0; i!=24; ++i) // draw the two vertical lines in tic-tac-toe pattern { sp1_PrintAt(i, 10, INK_RED | PAPER_GREEN, 'V'); sp1_PrintAt(i, 21, INK_RED | PAPER_GREEN, 'V'); } sp1_PrintAt( 7, 10, INK_RED | PAPER_GREEN, 'C'); // where the lines intersect sp1_PrintAt( 7, 21, INK_RED | PAPER_GREEN, 'C'); // print the intersection graphic sp1_PrintAt(16, 10, INK_RED | PAPER_GREEN, 'C'); sp1_PrintAt(16, 21, INK_RED | PAPER_GREEN, 'C'); // Create Four Rectangles that Cover the Four Tic-Tac-Toe Lines sr1.row = 7; sr1.col = 0; sr1.width = 32; sr1.height = 1; // top horizontal line sr2.row = 16; sr2.col = 0; sr2.width = 32; sr2.height = 1; // bottom horizontal line sr3.row = 0; sr3.col = 10, sr3.width = 1; sr3.height = 24; // leftmost vertical line sr4.row = 0; sr4.col = 21, sr4.width = 1; sr4.height = 24; // rightmost vertical line sp1_Invalidate(&cr); // invalidate entire screen so that it is all initially drawn sp1_UpdateNow(); // draw screen area managed by sp1 now // Create Ten Masked Software-Rotated Sprites for (i=0; i!=10; i++) { s = sprtbl[i].s = sp1_CreateSpr(SP1_DRAW_MASK2LB, SP1_TYPE_2BYTE, 3, 0, i); sp1_AddColSpr(s, SP1_DRAW_MASK2, 0, 48, i); sp1_AddColSpr(s, SP1_DRAW_MASK2RB, 0, 0, i); sp1_MoveSprAbs(s, &cr, gr_window, 10, 14, 0, 4); }; while (1) { // main loop sp1_Validate(&sr1); // validate areas so that they are not drawn sp1_Validate(&sr2); sp1_Validate(&sr3); sp1_Validate(&sr4); sp1_UpdateNow(); // draw screen now for (i=0; i!=10; i++) { // move all sprites se = &sprtbl[i]; sp1_MoveSprRel(se->s, &cr, 0, 0, 0, se->dy, se->dx); if (se->s->row > 21) // if sprite went off screen, reverse direction se->dy = - se->dy; if (se->s->col > 29) // notice if coord moves less than 0, it becomes se->dx = - se->dx; // 255 which is also caught by these cases } } // end main loop }
main() { uchar i; struct sp1_ss *s; struct sprentry *se; void *temp; // Initialize MALLOC.LIB heap = 0L; // heap is empty sbrk(40000, 5000); // add 40000-44999 to malloc // Initialize SP1.LIB sp1_Initialize(SP1_IFLAG_MAKE_ROTTBL | SP1_IFLAG_OVERWRITE_TILES | SP1_IFLAG_OVERWRITE_DFILE, ' '); sp1_TileEntry(' ', hash); // redefine graphic associated with ' ' character // mark the two rectangular areas on screen so we can see them sp1_ClearRect(&clip1, '+', SP1_RFLAG_TILE); sp1_ClearRect(&clip2, '+', SP1_RFLAG_TILE); sp1_Invalidate(&cr); // invalidate entire screen so that it is all initially drawn sp1_UpdateNow(); // draw screen area managed by sp1 now // Create Ten Masked Software-Rotated Sprites for (i=0; i!=10; i++) { if (i < 5) { s = sprtbl[i].s = sp1_CreateSpr(SP1_DRAW_MASK2LB, SP1_TYPE_2BYTE, 3, 0, i); sp1_AddColSpr(s, SP1_DRAW_MASK2, 0, 48, i); sp1_AddColSpr(s, SP1_DRAW_MASK2RB, 0, 0, i); sp1_MoveSprAbs(s, &cr, gr_window, 10, 14, 0, 4); } else { s = sprtbl[i].s = sp1_CreateSpr(SP1_DRAW_XOR2LB, SP1_TYPE_2BYTE, 3, 0, i); sp1_AddColSpr(s, SP1_DRAW_XOR2, 0, 48, i); sp1_AddColSpr(s, SP1_DRAW_XOR2RB, 0, 0, i); sp1_MoveSprAbs(s, &cr, gr_window, 10, 14, 0, 4); } }; while (1) { // main loop sp1_UpdateNow(); // draw screen now for (i=0; i!=10; i++) { // move all sprites se = &sprtbl[i]; if (i < 5) sp1_MoveSprRel(se->s, &clip1, 0, 0, 0, se->dy, se->dx); else sp1_MoveSprRel(se->s, &clip2, 0, 0, 0, se->dy, se->dx); if (se->s->row > 21) // if sprite went off screen, reverse direction se->dy = - se->dy; if (se->s->col > 29) // notice if coord moves less than 0, it becomes se->dx = - se->dx; // 255 which is also caught by these cases } } // end main loop }
main() { uchar i; struct sp1_ss *s; struct sprentry *se; void *temp; #asm di #endasm // Initialize MALLOC.LIB heap = 0L; // heap is empty sbrk(40000, 10000); // add 40000-49999 to malloc // Initialize SP1.LIB zx_border(INK_BLACK); sp1_Initialize(SP1_IFLAG_MAKE_ROTTBL | SP1_IFLAG_OVERWRITE_TILES | SP1_IFLAG_OVERWRITE_DFILE, INK_BLACK | PAPER_WHITE, ' '); sp1_TileEntry(' ', hash); // redefine graphic associated with space character sp1_Invalidate(&cr); // invalidate entire screen so that it is all initially drawn sp1_UpdateNow(); // draw screen area managed by sp1 now // Create Ten Masked Software-Rotated Sprites for (i=0; i!=10; i++) { s = sprtbl[i].s = sp1_CreateSpr(SP1_DRAW_MASK2LB, SP1_TYPE_2BYTE, 3, 0, i); sp1_AddColSpr(s, SP1_DRAW_MASK2, 0, 48, i); sp1_AddColSpr(s, SP1_DRAW_MASK2RB, 0, 0, i); sp1_MoveSprAbs(s, &cr, gr_window, 10, 14, 0, 4); if (i < 5) // for the first five sprites { attr = INK_RED; // store colour in global variable amask = 0xf8; // store INK-only mask (set bits indicate what parts of background attr are kept) } else { attr = INK_BLUE | PAPER_GREEN; amask = 0xc0; // mask will keep background flash and bright } sp1_IterateSprChar(s, colourSpr); // colour the sprite }; while (1) { // main loop sp1_UpdateNow(); // draw screen now for (i=0; i!=10; i++) { // move all sprites se = &sprtbl[i]; sp1_MoveSprRel(se->s, &cr, 0, 0, 0, se->dy, se->dx); if (se->s->row > 21) // if sprite went off screen, reverse direction se->dy = - se->dy; if (se->s->col > 29) // notice if coord moves less than 0, it becomes se->dx = - se->dx; // 255 which is also caught by these cases } } // end main loop }
main() { uchar i; struct sp1_ss *s; struct sprentry *se; void *temp; #asm di #endasm // Initialize MALLOC.LIB heap = 0L; // heap is empty sbrk(40000, 5000); // add 40000-44999 to malloc // Set 512x192 Video Mode memset(16384, 0, 6144); // clear both halves of the display file before switching video mode memset(24576, 0, 6144); ts_vmod(PAPER_BLACK | VMOD_HIRES); // select 64-col mode with black background // Initialize SP1.LIB sp1_Initialize(SP1_IFLAG_MAKE_ROTTBL | SP1_IFLAG_OVERWRITE_TILES | SP1_IFLAG_OVERWRITE_DFILE, ' '); sp1_TileEntry(' ', hash); // redefine graphic associated with space character sp1_TileEntry('H', horline); // 'H' will be the horizontal line graphic sp1_TileEntry('V', verline); // 'V' will be the vertical line graphic sp1_TileEntry('C', intline); // 'C' will be the intersection graphic // Create Four Rectangles that Cover the Four Tic-Tac-Toe Lines sr1.row = 7; sr1.col = 0; sr1.width = 64; sr1.height = 1; // top horizontal line sr2.row = 16; sr2.col = 0; sr2.width = 64; sr2.height = 1; // bottom horizontal line sr3.row = 0; sr3.col = 20, sr3.width = 1; sr3.height = 24; // leftmost vertical line sr4.row = 0; sr4.col = 42, sr4.width = 1; sr4.height = 24; // rightmost vertical line // Print a Tic-Tac-Toe Pattern by Visiting the Character Cells Making up the Lines tile = 'H'; sp1_IterateUpdateRect(&sr1, Print); // draw top horizontal line sp1_IterateUpdateRect(&sr2, Print); // draw bottom horizontal line tile = 'V'; sp1_IterateUpdateRect(&sr3, Print); // draw leftmost vertical line sp1_IterateUpdateRect(&sr4, Print); // draw rightmost vertical line sp1_PrintAt( 7, 20, 'C'); // where the lines intersect sp1_PrintAt( 7, 42, 'C'); // print the intersection graphic sp1_PrintAt(16, 20, 'C'); sp1_PrintAt(16, 42, 'C'); sp1_Invalidate(&cr); // invalidate entire screen so that it is all initially drawn sp1_UpdateNow(); // draw screen area managed by sp1 now // Now Remove the Tic-Tac-Toe Lines from the sp1 Engine sp1_IterateUpdateRect(&sr1, sp1_RemoveUpdateStruct); sp1_IterateUpdateRect(&sr2, sp1_RemoveUpdateStruct); sp1_IterateUpdateRect(&sr3, sp1_RemoveUpdateStruct); sp1_IterateUpdateRect(&sr4, sp1_RemoveUpdateStruct); // Create Ten Masked Software-Rotated Sprites for (i=0; i!=10; i++) { s = sprtbl[i].s = sp1_CreateSpr(SP1_DRAW_MASK2LB, SP1_TYPE_2BYTE, 3, 0, i); sp1_AddColSpr(s, SP1_DRAW_MASK2, 0, 48, i); sp1_AddColSpr(s, SP1_DRAW_MASK2RB, 0, 0, i); sp1_MoveSprAbs(s, &cr, gr_window, 10, 14, 0, 4); }; while (1) { // main loop sp1_UpdateNow(); // draw screen now for (i=0; i!=10; i++) { // move all sprites se = &sprtbl[i]; sp1_MoveSprRel(se->s, &cr, 0, 0, 0, se->dy, se->dx); if (se->s->row > 21) // if sprite went off screen, reverse direction se->dy = - se->dy; if (se->s->col > 61) // notice if coord moves less than 0, it becomes se->dx = - se->dx; // 255 which is also caught by these cases } } // end main loop }