From 85a296347d16911a11e1a07e2aa93665f7c28574 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 21 Dec 2017 14:59:06 -0500 Subject: [PATCH] mode7_demo: start adding in the mode7 code also add self-driving code, as well as make it load into HGR range --- mode7_demo/Makefile | 7 +- .../{apple2_1000.inc => apple2_2000.inc} | 2 +- mode7_demo/island_map.inc | 16 + mode7_demo/mode7.s | 1101 +++++++++++++++++ mode7_demo/mode7_demo.dsk | Bin 143360 -> 143360 bytes mode7_demo/mode7_demo.s | 71 +- mode7_demo/sprites.inc | 59 + mode7_demo/starry_sky.scroll | 10 + mode7_demo/zp.inc | 2 + 9 files changed, 1258 insertions(+), 10 deletions(-) rename mode7_demo/{apple2_1000.inc => apple2_2000.inc} (81%) create mode 100644 mode7_demo/island_map.inc create mode 100644 mode7_demo/mode7.s create mode 100644 mode7_demo/sprites.inc create mode 100644 mode7_demo/starry_sky.scroll diff --git a/mode7_demo/Makefile b/mode7_demo/Makefile index 8682938d..281f37c8 100644 --- a/mode7_demo/Makefile +++ b/mode7_demo/Makefile @@ -10,14 +10,14 @@ $(DOS33): cd ../dos33fs-utils && make mode7_demo.dsk: $(DOS33) MODE7_DEMO - $(DOS33) -y mode7_demo.dsk BSAVE -a 0x1000 MODE7_DEMO + $(DOS33) -y mode7_demo.dsk BSAVE -a 0x2000 MODE7_DEMO ### MODE7_DEMO: mode7_demo.o - ld65 -o MODE7_DEMO mode7_demo.o -C ./apple2_1000.inc + ld65 -o MODE7_DEMO mode7_demo.o -C ./apple2_2000.inc mode7_demo.o: mode7_demo.s mode7_demo_backgrounds.inc \ a2.scrolltext deater.scrolltext \ @@ -26,7 +26,8 @@ mode7_demo.o: mode7_demo.s mode7_demo_backgrounds.inc \ ../asm_routines/gr_setpage.s \ ../asm_routines/gr_fade.s \ ../asm_routines/gr_copy.s \ - ../asm_routines/gr_scroll.s + ../asm_routines/gr_scroll.s \ + mode7.s ca65 -o mode7_demo.o mode7_demo.s -l mode7_demo.lst diff --git a/mode7_demo/apple2_1000.inc b/mode7_demo/apple2_2000.inc similarity index 81% rename from mode7_demo/apple2_1000.inc rename to mode7_demo/apple2_2000.inc index e22976de..45689b1b 100644 --- a/mode7_demo/apple2_1000.inc +++ b/mode7_demo/apple2_2000.inc @@ -1,6 +1,6 @@ MEMORY { ZP: start = $00, size = $1A, type = rw; - RAM: start = $1000, size = $8E00, file = %O; + RAM: start = $2000, size = $7E00, file = %O; } SEGMENTS { diff --git a/mode7_demo/island_map.inc b/mode7_demo/island_map.inc new file mode 100644 index 00000000..3a42dcf2 --- /dev/null +++ b/mode7_demo/island_map.inc @@ -0,0 +1,16 @@ +flying_map: + .byte $22,$ff,$ff,$ff, $ff,$ff,$ff,$22 + .byte $dd,$cc,$cc,$88, $44,$44,$00,$dd + .byte $dd,$cc,$cc,$cc, $88,$44,$44,$dd + .byte $dd,$cc,$cc,$88, $44,$44,$44,$dd + .byte $dd,$cc,$99,$99, $88,$44,$44,$dd + .byte $dd,$cc,$99,$88, $44,$44,$44,$dd + .byte $dd,$cc,$99,$99, $11,$44,$44,$dd + .byte $22,$dd,$dd,$dd, $dd,$dd,$dd,$22 + + +water_map: + .byte $22,$22,$22,$22, $22,$22,$22,$22 + .byte $ee,$22,$22,$22, $22,$22,$22,$22 + .byte $22,$22,$22,$22, $22,$22,$22,$22 + .byte $22,$22,$22,$22, $ee,$22,$22,$22 diff --git a/mode7_demo/mode7.s b/mode7_demo/mode7.s new file mode 100644 index 00000000..ecbe74bd --- /dev/null +++ b/mode7_demo/mode7.s @@ -0,0 +1,1101 @@ +;.include "zp.inc" + +;=========== +; CONSTANTS +;=========== +CONST_SHIPX EQU 15 +CONST_TILE_W EQU 64 +CONST_TILE_H EQU 64 +CONST_MAP_MASK_X EQU (CONST_TILE_W - 1) +CONST_MAP_MASK_Y EQU (CONST_TILE_H - 1) +CONST_LOWRES_W EQU 40 +CONST_LOWRES_H EQU 40 +CONST_BETA_I EQU $ff +CONST_BETA_F EQU $80 +CONST_SCALE_I EQU $14 +CONST_SCALE_F EQU $00 +CONST_LOWRES_HALF_I EQU $ec ; -(LOWRES_W/2) +CONST_LOWRES_HALF_F EQU $00 + + ; pre-programmed directions + +flying_directions: + .byte $20,$00, $1,'Z', $10,'D', $1,' ', $40,$00, $1,'Q' + + ;===================== + ; Flying + ;===================== + +mode7_flying: + + ;================================ + ; Clear screen and setup graphics + ;================================ + + jsr clear_screens ; clear top/bottom of page 0/1 + jsr set_gr_page0 + + ;=============== + ; Init Variables + ;=============== + lda #20 + sta SHIPY + lda #0 + sta TURNING + sta ANGLE + sta SPACEX_I + sta SPACEY_I + sta CX_I + sta CX_F + sta CY_I + sta CY_F + sta DRAW_SPLASH + sta SPEED + sta SPLASH_COUNT + sta DISP_PAGE + sta KEY_COUNT + sta KEY_OFFSET + + lda #1 ; slightly off North for better view of island + sta ANGLE + + lda #2 ; initialize sky both pages + sta DRAW_SKY + + lda #4 ; starts out at 4.5 altitude + sta SPACEZ_I + lda #$80 + sta SPACEZ_F + + jsr update_z_factor + +flying_loop: + + lda SPLASH_COUNT ; 3 + beq flying_keyboard ; 2nt/3 + dec SPLASH_COUNT ; decrement splash count ; 5 + +flying_keyboard: + +; jsr get_key ; get keypress ; 6 + + lda KEY_COUNT + bne done_key + + ldy KEY_OFFSET + lda flying_directions,Y + sta KEY_COUNT + iny + lda flying_directions,Y + sta LASTKEY + inc KEY_OFFSET + inc KEY_OFFSET + +done_key: + dec KEY_COUNT + lda LASTKEY ; 3 + + cmp #('Q') ; 2 + bne check_up ; 3/2nt + + ; done + rts + +check_up: + cmp #('W') ; 2 + bne check_down ; 3/2nt + + ;=========== + ; UP PRESSED + ;=========== + + lda SHIPY + cmp #17 + bcc check_down ; bgt, if shipy>16 + dec SHIPY + dec SHIPY ; move ship up + inc SPACEZ_I ; incement height + jsr update_z_factor + lda #0 + sta SPLASH_COUNT + +check_down: + cmp #('S') + bne check_left + + ;============= + ; DOWN PRESSED + ;============= + + lda SHIPY + cmp #28 + bcs splashy ; ble, if shipy < 28 + inc SHIPY + inc SHIPY ; move ship down + dec SPACEZ_I ; decrement height + jsr update_z_factor + bcc check_left + +splashy: + lda #10 + sta SPLASH_COUNT + +check_left: + cmp #('A') + bne check_right + + ;============= + ; LEFT PRESSED + ;============= + + lda TURNING + bmi turn_left + beq turn_left + + lda #$0 + sta TURNING + clv + bvc check_right + +turn_left: + lda #253 ; -3 + sta TURNING + + dec ANGLE + +check_right: + cmp #('D') + bne check_speedup + + ;============== + ; RIGHT PRESSED + ;============== + + lda TURNING ;; FIXME: optimize me + bpl turn_right + lda #0 + sta TURNING + clv + bvc check_speedup + +turn_right: + lda #3 + sta TURNING + + inc ANGLE + +check_speedup: + cmp #('Z') + bne check_speeddown + + ;========= + ; SPEED UP + ;========= + lda #$8 + cmp SPEED + beq check_speeddown + inc SPEED + +check_speeddown: + cmp #('X') + bne check_brake + + ;=========== + ; SPEED DOWN + ;=========== + + lda SPEED + beq check_brake + dec SPEED + +check_brake: + cmp #(' '+128) + bne check_land + + ;============ + ; BRAKE + ;============ + lda #$0 + sta SPEED + +check_land: + cmp #13 + bne check_help + +check_help: + cmp #('H') + bne check_done + +check_done: + + ;================ + ; Wrap the Angle + ;================ + ; FIXME: only do this in right/left routine? + lda ANGLE ; 3 + and #$f ; 2 + sta ANGLE ; 3 + + ;================ + ; Handle Movement + ;================ + +speed_move: + ldx SPEED ; 3 + beq draw_background ; 2nt/3 + ;============= + lda ANGLE ; dx.i=fixed_sin[(angle+4)&0xf].i; // cos() ; 3 + clc ; 2 + adc #4 ; 2 + and #$f ; 2 + asl ; 2 + tay ; 2 + lda fixed_sin_scale,Y ; 4 + sta DX_I ; 3 + iny ; dx.f=fixed_sin[(angle+4)&0xf].f; // cos() ; 2 + lda fixed_sin_scale,Y ; 4 + sta DX_F ; 3 + + lda ANGLE ; dy.i=fixed_sin[angle&0xf].i; // sin() ; 3 + and #$f ; 2 + asl ; 2 + tay ; 2 + lda fixed_sin_scale,Y ; 4 + sta DY_I ; 3 + iny ; dx.f=fixed_sin[angle&0xf].f; // sin() ; 2 + lda fixed_sin_scale,Y ; 4 + sta DY_F ; 3 + ;============ + ; 54 +speed_loop: + + clc ; fixed_add(&cx,&dx,&cx); ; 2 + lda CX_F ; 3 + adc DX_F ; 3 + sta CX_F ; 3 + lda CX_I ; 3 + adc DX_I ; 3 + sta CX_I ; 3 + + clc ; fixed_add(&cy,&dy,&cy); ; 2 + lda CY_F ; 3 + adc DY_F ; 3 + sta CY_F ; 3 + lda CY_I ; 3 + adc DY_I ; 3 + sta CY_I ; 3 + + dex ; 2 + bne speed_loop ; 2nt/3 + ;============ + ; 45 + + ;==================== + ; Draw the background + ;==================== +draw_background: + jsr draw_background_mode7 ; 6 + +check_over_water: + ; See if we are over water + lda CX_I ; 3 + sta SPACEX_I ; 3 + lda CY_I ; 3 + sta SPACEY_I ; 3 + + jsr lookup_map ; 6 + + sec ; 2 + sbc #COLOR_BOTH_DARKBLUE ; 2 + sta OVER_LAND ; 3 + ;=========== + ; 31 + + ; Calculate whether to draw the splash + + lda #0 ; set splash drawing to 0 ; 2 + sta DRAW_SPLASH ; 3 + + lda SPEED ; if speed==0, no splash ; 3 + beq no_splash ; 2nt/3 + + lda TURNING ; 3 + beq no_turning_splash ; 2nt/3 + + lda SHIPY ; 3 + cmp #27 ; 2 + bcc no_turning_splash ; blt if shipy<25 skip ; 2nt/3 + + lda #1 ; 2 + sta SPLASH_COUNT ; 3 + +no_turning_splash: + lda OVER_LAND ; no splash if over land ; 3 + bne no_splash ; 2nt/3 + + lda SPLASH_COUNT ; no splash if splash_count expired ; 3 + beq no_splash ; 2nt/3 + + lda #1 ; 2 + sta DRAW_SPLASH ; 3 + +no_splash: + + ;============== + ; Draw the ship + ;============== + + clv ; 2 + lda TURNING ; 3 + beq draw_ship_forward ; 2nt/3 + bpl draw_ship_right ; 2nt/3 + bmi draw_ship_left ;; FIXME: optimize order ; 2nt/3 + +draw_ship_forward: + lda DRAW_SPLASH ; 2 + beq no_forward_splash ; 2nt/3 + + ; Draw Splash + lda #>splash_forward ; 2 + sta INH ; 3 + lda #shadow_forward ; 2 + sta INH ; 3 + lda #ship_forward ; 2 + sta INH ; 3 + lda #splash_right ; 2 + sta INH ; 3 + lda #shadow_right ; 2 + sta INH ; 3 + lda #ship_right ; 2 + sta INH ; 3 + lda #splash_left ; 2 + sta INH ; 3 + lda #shadow_left ; 2 + sta INH ; 3 + lda #ship_left ; 2 + sta INH ; 3 + lda #??R)n^QTwe6*1?q7;H zU)x9@hqM;EcOIWOx>cyahL|!To>+l^IPpHDafHYkER=Oabmw2%T-x82U!o$bJ z^RS4|`oj|H62FFux3O3alb&_)+o#mUd)ni+IqSLJf;sthj^0eD*a*LE3#W58Pn_+? zi~Q`Fuq9XnJgM1!3E{O z;ep3DaHTMhth;tx+jBQ?BU_Ha|D;L`;^kHNpkLa9yUt6WCKnAR7dfCPVCoo_lFKBE zp2qc$QMQ@UZsh!v_6OFZj+*P>NV)2|Sda60M z?t=I^ZsjFf-VEhKX!!%pK4bY(@%*$OM}HC@##&8PdP~)M&jl%ZZWhmXho@bw^}Vgd zqVt0(Iv*3y_tRbMT=W#%66~*yP1Vr{#FjkzbJfRova2@wptuL77GIHHGUyEK8oh!CP?-m!+|BS2YUh(eMCi)i2Z?2)) zd}y{nZFax7ptT9!W$91wq>#8cI!9be-U>#W$)2G6^juAM(^budRow@5e+WkBiA%_V zAbonSro07o1@p!E>-k9G)g#8f6P??GdiP4G@x@^Otmv#BKAze5n_BoF%o6Kh13bR< zeE8qd&f;$xtN8jmcNW{E_Qqv=gqs{HS;kj?R(xguXVK58%#afAK5X!y3kg~J`QblbHssg z&Vh{Qru2gxHLvMNNL50O_w(H8PV zh;)R=Zd$Q6L^?yHJG5cRRol@c-=be{M=QTYtH_%nAmT;>zUQU!y~r0(IzbCMXVB zAT+@mp$V5jsI;CU1XC3uSOkPh>ls3`bcDW<5#nL*>{lev5VFe%ITJNd%13Aj(cWJw zy%|DE3vY^^|CE4Gwh1Anb8U*wD@+L4c?*PgBp@_JxGV_0pdu8rM(E1=M1)|&CWO9V z2*DH(f;uxo=1PW;UZf*5MMy%(&`d*!HnT)%FGc8eh7fIILgH!p~&BlcP4uBed@`un^C^AYWP)?|MB*_7X0)Vk*79x%#O|D#aY@{#JxQIiuevs zzak#w=~u))Uj2&rpR^9X6241oVSb3#!~7^uzanCeLUbVV?DxVggA(eM(6le6J%b#b zsIafM6UC#bq!V?_?}g?060)_IAP4;Rwhuwm+DGcm+j$g4jtwZ@fgA|gB;@EowocU7 z2@m5a-i31JcPtznj6+{or7enbU};)=C9KVbY_L7(+G6b6UJLfbH$rC=??gErX#O*( zx34gYdSN?sb+&~I4;*tu>FTDnyV0}`RJaMj+8XTt1mSvV@mD$R& z%W}%>Ww~W}W%*?VWrbx$Weyi|aW2K-EhYE>%Y$FZd9Z=yK>_2DG!IH4_~?O83VbYp z$3QfMUpX2YN&X?mQ>$<&AW@RlXgDh%QIcsioE5<5^=NpQM#IBOG;|uWAqx|SAsQZ5 zqTzjh{BLpwWJ_{1ypKl1U#i7ynMK33YBXF+zfD0jEK#B%%vm(7QKDguAsT+7guchB z@ChZReVtsCr{q9GD^F5USV}IFEP5K(uacbnG-xzj>nFdjB1fyXKgFWqF}eWRZ>JIs zp?XGu+#FDGd zk_?M97s@2xtCO6~vs_3~J*%Lqkvvo;*`H{mQVu!NkPA7bHzQeTQJ13UoCK0fOe8Cv zN2Tc8W+Hhg4?An)d~+`BNg#PfYLaVG-38ObE;J);`Qw3#Kz?@^L_7n@%C7B(XKr}lv`)Dm3k|$|B%s)<( ztds23NUjkE%4Cw43*=V<*({J4mG=>WtP;rc0(pg!{DeR{1hSh}tQAP7K)RDiep93N zu&VC?1Icfzh5NL2A6S#zXCj%B>&kRxxooa%SB}f>%5~+r@?8b4LRXQ?;YM!Gt&sde z2|mO~{zfLbSio0c?8A5j#-nj#v8*x=vYrUw@t`vNhGB@)9F*r`+*pN&%OkW1K3Ql` zZjx1g9Qrl|@Sv`8A62=Js_Zt8*fN#-K;=F~!cuaXWYN>OepThgd{*E5w*&;?+3x1uss-y9&f1(fQUbOEYwQB*#ms0_`X3&fuGlWl=m)K9ht zVx4}no2pD-DDpd62lE$cEzEb&dYHeas0=SlqRRI$m4il=gDF%Fg33WzWjjK+AH(j( za`N@5QNG?9KL*Ym!ig4VzHTV93H0ax&DJbF#UTp{y6_DBqNfvZ0xVGHqswGGyUq@-9P}wlU@8 z(=y7(0A*U2Iw!xXqugPEGJRbr%Ijs6?@5XBA`N9YG9mlIk$IG-N9HM>9+{s|l-ZH_ zKCOcz@ffXz`Dt1Y^FO9h)=|b9%0XekEu%~Xnt^{uGcec-$@npWY!%23it-wPY!Jxn zw4z-gl0fz(q5QUn?Ge@Ag9en}Q40@f?M_&ue3*M|B{!_XZF6V4bKG`!t~<}2?=El` zx{KTn5AtvxMd8;I6!uvvJXTitT2L5%!_p`q$e4{y3OnGV#Gr6zT45NjHu(M5s_+nu zxS7S1IXn?@({+!>&D1@f-phrP&Y;e;MtSBXP#(olhN+4&ECR}-WRw@{D3{47(=(+R z3aeUDu9i_Aov5Qyew_*BAxdwCveM$}6g}bOsOb!9l?i2~^ED|tcbQPGW+*Q*qkK34 ztQYAh{~#Gte z+dr!Q_8UqoF_2hZ-Jq4aZPm#w_j>@_6 zG}7$arsRw&84*>|vqj)dj>YMyY;kRqAu6YlrWZ~r{-%*mBQ2j{P9uFe&oKW5Ax#l3 z&n(X>x0Pp?=ak#abIbF}^UDj$3(Jej9Tlj8t5A@RB_!#gmPr~0>F9X2mZWPgmZa$@ zpCL&|49uLQ*`;3zL)!CFrso!8dj11T z&&OGMh9nI`+Gn)%3}>I&kT#ruW<%PLrrD78Ksr6^={caK=a4W^A*W};byk9Lmq_sP3ot_VJ6^2W{7`zpk6 z8(1F1cU)qK`wr_N?mI3q#2sWX!&HSC76Im<4D%9wh}*57cm7JDRfE|h!weT%n0Zyo zCz@ckE4|qex6+~^MbCK&FuP1JE1j=O(Rr;2W)FjTv3ZF5NWu{J%*zAweszfZp!E>< zKP15n8#ck5!(fIfzzlU}n9Y?8X1z#F;nFTR*ZeVq`BM#MI0MaKhI7yi=1&xu z<7t?6m}@kc>xBWY4D+uA^0+{@31lZ7y?#`nSAD%iulfR*VZ8epWxShRv<-vZiNo6a zHE@rs1|KoN{GM8PSZnv8HOvP%-UxFgSD8_nS(#O7tIV#DhkLPvFKX%M;WKt@U15yD|%|jbGF=32q4vH{`~1;10|1i_@~<yr|JRmyKOxlS(yr&psf*OeCZhG5fe z!%F!t5?mi;a$RXOJw@kjCfBcEt}ijW{zZc8_g@~@ )tz8c%xegmPxsI9ZFa_74 z&g{CmlDV!I>8{_O?7E?u<~nU=>3RkauAgVF(>5m89Xz}FHt8b0&okFE>S*A$*QwW#{g>kUw~FhTv>vV@%dJb_Yo*<5H9>RzT47+U>^i{x zoIrX7@;-HalR&lzWS>BeP}g4;2%Nb-Nh@{;ni3H^ZCh&GOp3+1?zl-J9#p^X7XCyoKH(ufvCYoKG1EPxCJSDUKA^ ze5FrUPrhtdc3Y2xdoRg*NfPeeE7H8PzXOuyJc$)YB0Q4AES=uJo4=Iu|C;x#4Vf9k{|ByMNK*g+ delta 1639 zcmcgrU1%It6rOwMcV}jI=O>xpoteAUG`mfcrj`~eVvX1s+Dd*Du~oySn6i10`cnEJ zF)cbTmQi5}7k#jssF0~oW?RETQ`!eH0V#nhB0i)Q6nro&+81rK-q}PEVqOC?bH97O znRD)U&Nt`o2LhcCw0^ONcaPja-zo_ct|sl_&ZI5uOsKGw$YB}vE2yNQj82F@li$L%q!f0b zK0PtX_CmNuAo^ZChLnVw4gVliLkS-y4}5wU7+gcSoZ<_^;Q1$>QPC+iErD97LMo&% zp-}aoa0^%7xRG;~u<7SZfl^4;dp&znQPZwghC&9UTvzWi_g z0~<9rAEPouEljG>hg!6tExbX5u142WFd;;jH2mqa;B}kOkLb~UeS!maHG7JXvcxo+fFY zB5j!@ZLvN%IZ^sztjYd#^4Nf0sZoe-3&+TK{z~2sACS$`bhBrm++3S>@~-3`Bn#93W)du2v%&l{8h3~0~>W3UEi@CH^{_(L5G zNg{8EhGfV_te#jE6q-h&h7RHk2VVjKKE=VSOqr^^h6_A=Iz`9vST`JGcBSaEZg|v5 z5jEYi(MKA(rnS7)Lh-wgx^d50RlBWi*yy&lZlnHq_-s4q$L9yZA#eiU90W$X2=HjE zblht<@+M^h6PmQin5@Z}yeXLV;^+#PyC{pgDVegFHFIX(qAXxRi?(nv1Mk!yypk2$ zEY9LB!OB>oC0VkSwQ^QI2IAe8SS-H>1iT{y)88()rQGVa%C$M0w*@<6i?(FTcGk|> zc_%LJzgvf~DCrJ#XoqoFhjVyGa59eQ#Ofj$-nb;TIaw#?j1yN=uyXF&^u2 z9`6ZW#uGislRe_nb=wMF-lu%vL!$PVEeE;1;(W$uea`27!O!@jFZr^c^|9JTtO;UC z(gP|00SxGX3D|%O_&^Ba;^?|>^*{>bARFX@JfaXl5YedRYCz2m$>O}s!h5^^2EvN$ AR{#J2 diff --git a/mode7_demo/mode7_demo.s b/mode7_demo/mode7_demo.s index 34125426..2c1912cf 100644 --- a/mode7_demo/mode7_demo.s +++ b/mode7_demo/mode7_demo.s @@ -5,12 +5,72 @@ ;================================ jsr set_gr_page0 - bit FULLGR - jsr clear_screens_notext ; clear top/bottom of page 0/1 lda #$4 sta DRAW_PAGE + ; Initialize the 2kB of multiply lookup tables + jsr init_multiply_tables + + ;================================ + ; Main Loop + ;================================ + +main_loop: + jsr title_routine + + jsr checkerboard_demo + jsr island_demo + jsr star_demo + + jmp main_loop + + + ;=========================== + ; Checkerboard Demo + ;=========================== +checkerboard_demo: + ; initialize + lda #>sky_background + sta INH + lda #demo_rle @@ -24,8 +84,6 @@ jsr load_rle_gr -demo_loop: - ;========== ; Fade in ;========== @@ -68,8 +126,7 @@ demo_loop: ;============= jsr fade_out - - jmp demo_loop + rts ;=============================================== @@ -84,6 +141,8 @@ demo_loop: .include "../asm_routines/gr_copy.s" .include "../asm_routines/gr_scroll.s" +.include "mode7.s" + .include "mode7_demo_backgrounds.inc" diff --git a/mode7_demo/sprites.inc b/mode7_demo/sprites.inc new file mode 100644 index 00000000..c9262033 --- /dev/null +++ b/mode7_demo/sprites.inc @@ -0,0 +1,59 @@ +;================ +; Ship Sprites +;================ + +splash_forward: + .byte $7,$2 + .byte $00,$ee,$00,$00,$00,$ee,$00 + .byte $ee,$00,$00,$00,$00,$00,$ee + +splash_right: + .byte $7,$2 + .byte $00,$00,$00,$00,$00,$ee,$00 + .byte $00,$00,$00,$00,$00,$00,$ee + + +splash_left: + .byte $7,$2 + .byte $00,$ee,$00,$00,$00,$00,$00 + .byte $ee,$00,$00,$00,$00,$00,$00 + +shadow_forward: + .byte $3,$2 + .byte $00,$aa,$00 + .byte $a0,$aa,$a0 + +shadow_right: + .byte $3,$2 + .byte $a0,$00,$aa + .byte $00,$0a,$a0 + +shadow_left: + .byte $3,$2 + .byte $aa,$00,$a0 + .byte $a0,$0a,$00 + +ship_forward: + .byte $9,$5 + .byte $00,$00,$00,$00,$ff,$00,$00,$00,$00 + .byte $00,$00,$00,$66,$ff,$66,$00,$00,$00 + .byte $00,$00,$70,$2f,$12,$2f,$70,$00,$00 + .byte $f0,$f7,$f7,$f2,$d9,$f2,$f7,$f7,$f0 + .byte $00,$00,$00,$00,$0d,$00,$00,$00,$00 + +ship_right: + .byte $9,$5 + .byte $00,$00,$00,$00,$00,$60,$60,$f0,$00 + .byte $00,$f0,$70,$70,$f6,$f6,$6f,$66,$00 + .byte $00,$07,$ff,$2f,$12,$27,$f6,$00,$00 + .byte $00,$00,$00,$dd,$d9,$f2,$77,$00,$00 + .byte $00,$00,$00,$00,$00,$0f,$ff,$70,$00 + +ship_left: + .byte $9,$5 + .byte $00,$f0,$60,$60,$00,$00,$00,$00,$00 + .byte $00,$66,$6f,$f6,$f6,$70,$70,$f0,$00 + .byte $00,$00,$f6,$27,$12,$2f,$ff,$07,$00 + .byte $00,$00,$77,$f2,$d9,$dd,$00,$00,$00 + .byte $00,$70,$ff,$0f,$00,$00,$00,$00,$00 + diff --git a/mode7_demo/starry_sky.scroll b/mode7_demo/starry_sky.scroll new file mode 100644 index 00000000..60d7fbab --- /dev/null +++ b/mode7_demo/starry_sky.scroll @@ -0,0 +1,10 @@ +; Original size = 1020 bytes +sky_background: +; scroll_length: +.byte 255 + .byte $A9,$00,$D0,$A9,$00,$50,$F5,$50,$AB,$00,$0F,$A7,$00,$0D,$DD,$D0,$A7,$00,$F0,$A5,$00,$11,$A7,$00,$A4,$70,$D0,$D0,$A7,$00,$70,$A9,$00,$05,$A0,$11,$00,$0F,$A0,$11,$00,$D0,$A0,$12,$00,$50,$A0,$2F,$00,$D0,$A9,$00,$50,$F5,$50,$AB,$00,$0F,$A0,$28,$00 + .byte $A5,$00,$0F,$A6,$00,$F0,$A4,$00,$0F,$00,$00,$05,$A9,$00,$0F,$A4,$00,$05,$A7,$00,$DD,$A7,$00,$0F,$00,$F0,$00,$F0,$A8,$00,$07,$70,$A4,$75,$FF,$FF,$F0,$A0,$11,$00,$F0,$A5,$00,$05,$A5,$00,$07,$A0,$11,$00,$50,$A0,$1D,$00,$0F,$A0,$18,$00,$05,$AB,$00,$0F,$A6,$00,$F0,$A4,$00,$0F,$00,$00,$05,$A9,$00,$0F,$A4,$00,$05,$A0,$26,$00 + .byte $00,$00,$F0,$AA,$00,$F0,$00,$00,$F0,$A7,$00,$07,$A4,$00,$70,$AB,$00,$D0,$DD,$0D,$A5,$00,$D0,$A5,$00,$0F,$A8,$00,$07,$70,$05,$75,$75,$D5,$DF,$0F,$A5,$00,$F0,$A5,$00,$50,$A0,$19,$00,$50,$A4,$00,$0D,$AE,$00,$0F,$A5,$00,$07,$A8,$00,$D0,$AB,$00,$07,$AB,$00,$0F,$AF,$00,$F0,$AA,$00,$F0,$00,$00,$F0,$A7,$00,$07,$A4,$00,$70,$A0,$2C,$00 + .byte $A0,$40,$00,$07,$A0,$BF,$00 + .byte $A1 +; Compressed size = 231 bytes diff --git a/mode7_demo/zp.inc b/mode7_demo/zp.inc index 095b624c..d82038e4 100644 --- a/mode7_demo/zp.inc +++ b/mode7_demo/zp.inc @@ -95,6 +95,8 @@ LAST_SPACEY_I EQU $88 LAST_MAP_COLOR EQU $89 DRAW_SKY EQU $8A COLOR_MASK EQU $8B +KEY_COUNT EQU $8C +KEY_OFFSET EQU $8D SHIPY EQU $E4