{-----------------------------------------------------------------------+ | | | Demonstration of accelerated sprite rendering | | | +-----------------------------------------------------------------------} gcl0x {GCL version for this program} {-----------------------------------------------------------------------+ | RAM page 2 | +-----------------------------------------------------------------------} $800 p= {Top of screen} \romType, \romTypeValue_ROMv3- {Test for ROMv3} [if<0 [do p. 1+ loop]] {Halt and blink pixel on older ROM} [def {. . . . . .|. . . . . . 3 lines of border top and down . . . . . .|. . . . . . for the fast changes in Y position . . . . . .|. . . . . . . . . . O O|O O O . . . . . O O O O|O O O O O . . O O O O .|O O O O . O . O O O . @|@ O O . @ @ . O O O . @|@ O O . @ @ . O O O O .|O O O O . O . O O O O O|O O O O O O . O O O O O|O O O O O O . O O . . O|O . O O . O . O . . O O|. . O . . O . . . . . .|. . . . . . . . . . . .|. . . . . . . . . . . .|. . . . . .} 0# 0# 0# 0# 0# 0# {Left side} 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 3# 3# 0# 0# 3# 3# 3# 3# 0# 3# 3# 3# 3# 63# 0# 3# 3# 3# 63# 48# 0# 3# 3# 3# 63# 48# 0# 3# 3# 3# 3# 63# 0# 3# 3# 3# 3# 3# 0# 3# 3# 3# 3# 3# 0# 3# 3# 0# 0# 3# 0# 3# 0# 0# 3# 3# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 240# 0# 0# 0# 0# 0# 0# {Right side} 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 3# 3# 3# 0# 0# 0# 3# 3# 3# 3# 3# 0# 3# 3# 3# 3# 63# 3# 48# 3# 3# 63# 48# 48# 48# 3# 3# 63# 48# 48# 3# 3# 3# 3# 63# 3# 3# 3# 3# 3# 3# 3# 3# 3# 3# 3# 3# 3# 3# 0# 3# 3# 0# 3# 0# 0# 3# 0# 0# 3# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 240# ] Image= {-----------------------------------------------------------------------+ |}\vLR>++ ret{ RAM page 3 | +-----------------------------------------------------------------------} $0300: 257 p= 11 p. {Shift screen left by 11 pixels} \SYS_Sprite6_v3_64 \sysFn: {Sprite drawing function} $500 T= {Pointer to sine table} 0 i= j= [do { Draw 15 sprites } i p<. {Left-most sprite} [do p j+ 255& T+ peek p>. {Y coordinate} Image \sysArgs0: {Setup SYS call} p 64!! {Draw first half} 64!! {Draw second half} p<. 255& 170- {Until right edge} if<0loop] { Update coefficients } i 11- [if<0 12+] i= {i = (i+1) % 12 } j 1+ j= loop] $0500: { Sine table } 60# 61# 63# 64# 65# 66# 68# 69# 70# 71# 73# 74# 75# 76# 78# 79# 80# 81# 82# 83# 85# 86# 87# 88# 89# 90# 91# 92# 93# 94# 95# 96# 97# 98# 99# 99# 100# 101# 102# 103# 103# 104# 105# 105# 106# 106# 107# 108# 108# 109# 109# 109# 110# 110# 110# 111# 111# 111# 111# 112# 112# 112# 112# 112# 112# 112# 112# 112# 112# 112# 111# 111# 111# 111# 110# 110# 110# 109# 109# 109# 108# 108# 107# 106# 106# 105# 105# 104# 103# 103# 102# 101# 100# 99# 99# 98# 97# 96# 95# 94# 93# 92# 91# 90# 89# 88# 87# 86# 85# 83# 82# 81# 80# 79# 78# 76# 75# 74# 73# 71# 70# 69# 68# 66# 65# 64# 63# 61# 60# 59# 57# 56# 55# 54# 52# 51# 50# 49# 47# 46# 45# 44# 42# 41# 40# 39# 38# 37# 35# 34# 33# 32# 31# 30# 29# 28# 27# 26# 25# 24# 23# 22# 21# 21# 20# 19# 18# 17# 17# 16# 15# 15# 14# 14# 13# 12# 12# 11# 11# 11# 10# 10# 10# 9# 9# 9# 9# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 8# 9# 9# 9# 9# 10# 10# 10# 11# 11# 11# 12# 12# 13# 14# 14# 15# 15# 16# 17# 17# 18# 19# 20# 21# 21# 22# 23# 24# 25# 26# 27# 28# 29# 30# 31# 32# 33# 34# 35# 37# 38# 39# 40# 41# 42# 44# 45# 46# 47# 49# 50# 51# 52# 54# 55# 56# 57# 59#