
Warning: assert() has been disabled for security reasons in /webHome/host6010759/www/wordpress/wp-includes/sodium_compat/autoload.php on line 68
{"id":166,"date":"2024-09-18T19:25:06","date_gmt":"2024-09-18T11:25:06","guid":{"rendered":"http:\/\/www.nantz.top\/wordpress\/?p=166"},"modified":"2024-09-18T20:15:09","modified_gmt":"2024-09-18T12:15:09","slug":"%e5%85%b3%e4%ba%8evc2022%e4%b8%8enesasm","status":"publish","type":"post","link":"http:\/\/www.nantz.top\/wordpress\/?p=166","title":{"rendered":"\u5173\u4e8eVC2022\u4e0eNESasm"},"content":{"rendered":"\n<p>VC 2022\u662fc\u8bed\u8a00\u7f16\u8bd1\u5668\u3002 NESASM\u662f\u4efb\u5929\u5802\u7ea2\u767d\u673a\u7a0b\u5e8f\u7684\u6c47\u7f16\u7a0b\u5e8f\u3002\u5b66\u4e60\u7248\u7684VC\u7f16\u8bd1 nesasm.\u901a\u4e0d\u8fc7\uff0c\u5176\u539f\u56e0\u662f\u3002\u539f\u6807\u51c6\u5e93\u5217\u4e3a\u4e0d\u5b89\u5168\u6587\u4ef6\u62a5\u9519\uff0c\u52a0\u201c_CRT_SECURE_NO_WARNINGS&#8221; \u5b8f\u901a\u8fc7\u7f16\u8bd1\u5668\uff0c\u548clink\u7a0b\u5e8f\u7c7b\u578b\u4e0d\u7b26\uff0c\u5077\u4e86\u4e00\u4e2a\u61d2\u4e0b\u4e86\u4e00\u4e2a\u6700\u65b0\u7248\u7684NESASM\uff0c\u7f16\u4efb\u5929\u58026502\u673a\u987a\u5229\u901a\u8fc7\u3002nesasm \u539f\u6765\u662flinux\u4e0b\u4f7f\u7528\u7684\u3002\u7528VC60\u4f1a\u901a\u8fc7\u3002\u53ef\u601c\u7684\u7535\u8111\u4f7f\u7528\u73af\u5883\u3002\u5b66\u4e60\u7248\u603b\u4f1a\u4e0d\u6e05\u767d\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"833\" src=\"http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162812-2-1024x833.jpg\" alt=\"\" class=\"wp-image-167\" srcset=\"http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162812-2-1024x833.jpg 1024w, http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162812-2-300x244.jpg 300w, http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162812-2-768x625.jpg 768w, http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162812-2-1536x1249.jpg 1536w, http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162812-2-2048x1666.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"948\" height=\"771\" src=\"http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162833-3.jpg\" alt=\"\" class=\"wp-image-168\" srcset=\"http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162833-3.jpg 948w, http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162833-3-300x244.jpg 300w, http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162833-3-768x625.jpg 768w\" sizes=\"auto, (max-width: 948px) 100vw, 948px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"756\" height=\"730\" src=\"http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162928-2.jpg\" alt=\"\" class=\"wp-image-170\" srcset=\"http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162928-2.jpg 756w, http:\/\/www.nantz.top\/wordpress\/wp-content\/uploads\/2024\/09\/IMG_20240907_162928-2-300x290.jpg 300w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><\/figure>\n\n\n\n<p>\u4e00\u4e2a\u6e90\u6587\u4ef6\u4f8b\u5b50 enemy.bas<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>array enemy_x\t\t2\narray enemy_y\t\t2\narray enemy_xoff\t2\narray enemy_yoff\t2\narray enemy_type\t2\narray enemy_status 2\n\nenemysetup:\n\tset enemy_type  1\n\tset enemy_xoff  8\n\tset enemy_yoff  0\n\tset enemy_x  3\n\tset enemy_y  3\n\tset enemy_dir 0\n\tset enemy_frame 0\n\tset which_enemy 0\n\tset maxenemies 0 \/\/number of enemies -1\n\tset goomba_feet 0\n\tset deadsecs 6\n\tset deadframes 120\n\treturn\n\nenemyhandler:\n\tset enemy_typevar enemy_type\n\tgosub goomba_move\n\/\/\tfor which_enemy = 0 to maxenemies\n\/\/\t\tset enemy_typevar &#91; enemy_type which_enemy ]\n\/\/\t\tif enemy_typevar = 1 gosub goomba_move\n\/\/\tnext which_enemy\n\treturn\n\n\/\/requires which_enemy\ngoomba_move:\n\tif enemy_frame &lt;> 0 goto goomba_move_2\n\tif enemy_dir = 255 goto goomba_dead\n\tif enemy_dir = 0 then\n\t\tgosub goomba_request_right\n\t\tgoto goomba_move_2\n\t\tendif\n\tif enemy_dir = 1\n\t\tgosub goomba_request_left\ngoomba_move_2:\n\tgosub goomba_request_fall\n\tinc enemy_frame\n\tif enemy_frame = 4 set enemy_frame 0\n\tset enemy_sprite 20\n\tif + screen_x 1 > enemy_x then\n\t\tset enemy_yloc 241\n\t\tgoto goomba_move_3\n\t\tendif\n\tif + screen_x 14 &lt;= enemy_x then\n\t\tset enemy_yloc 241\n\t\tgoto goomba_move_3\n\t\tendif\n\tset enemy_tile 12\n\tset enemy_yloc + &lt;&lt; enemy_y 4 enemy_yoff\n\tset enemy_xloc + &lt;&lt; - enemy_x screen_x 4 - enemy_xoff screen_xoff\ngoomba_move_3:\n\tif goomba_feet &lt; 12 then\n\t\tset enemy_colorbit 2\n\t\tgosub draw_enemy\n\t\tendif\n\tif goomba_feet >= 12 then\n\t\tset enemy_colorbit 66\n\t\tgosub draw_enemy_reverse\n\t\tendif\n\tinc goomba_feet\n\tif goomba_feet = 24 set goomba_feet 0\n\treturn\n\ngoomba_dead:\n\tgosub goomba_request_fall\n\tset enemy_colorbit %10000010\n\tset enemy_yloc + &lt;&lt; enemy_y 4 enemy_yoff\n\tif + screen_x 14 &lt;= enemy_x set enemy_yloc 245 \/\/hide off-screen\n\tif + screen_x 1 > enemy_x set enemy_yloc 245 \/\/hide off-screen\n\tset enemy_xloc + &lt;&lt; - enemy_x screen_x 4 - enemy_xoff screen_xoff\n\tgosub draw_enemy\n\tdec deadframes\n\tif deadframes = 0 then\n\t\tset deadframes 120\n\t\tdec deadsecs\n\t\tif deadsecs = 0 then\n\t\t\tset deadsecs 6\n\t\t\tset enemy_dir 1\n\t\t\tendif\n\t\tendif\n\treturn\n\ngoomba_request_right:\n\tset idx + + &lt;&lt; enemy_y 4 enemy_x 1\n\tset collide_right &#91; leveldata idx ]\n\tif enemy_x >= 16 set collide_right &#91; leveldata2 idx ]\ngoomba_request_right_2:\n\tif collide_right = 0 then\n\t\tinc enemy_xoff\n\t\tif enemy_xoff = 16 then\n\t\t\tset enemy_xoff 0\n\t\t\tinc enemy_x\n\t\t\tendif\n\t\treturn\n\t\tendif\n\tset enemy_dir 1 \/\/go left now\n\treturn\n\ngoomba_request_left:\n\tset idx + &lt;&lt; enemy_y 4 enemy_x\n\tset collide_left &#91; leveldata idx ]\n\tif enemy_x >= 16 set collide_left &#91; leveldata2 idx ]\n\tif collide_left = 0 then\n\t\tdec enemy_xoff\n\t\tif enemy_xoff = 255 then\n\t\t\tset enemy_xoff 15\n\t\t\tdec enemy_x\n\t\t\tendif\n\t\treturn\n\t\tendif\n\tset enemy_dir 0 \/\/go right now\n\treturn\n\ngoomba_request_fall:\n\tset idx + + &lt;&lt; enemy_y 4 enemy_x 16\n\tset collide_down &#91; leveldata idx ]\n\tif enemy_x >= 16 then\n\t\tset idx - idx 16\n\t\tset collide_down &#91; leveldata2 idx ]\n\t\tendif\n\tif collide_down = 0 then\n\t\tinc enemy_yoff\n\t\tif enemy_yoff = 16 then\n\t\t\tset enemy_yoff 0\n\t\t\tinc enemy_y\n\t\t\tendif\n\t\treturn\n\t\tendif\n\treturn\n\ndraw_enemies:\n\tfor which_enemy = 0 to maxenemies\n\t\tset enemy_typevar &#91; enemy_type which_enemy ]\n\t\tif enemy_typevar = 1 gosub draw_enemy\n\tnext which_enemy\n\treturn\n\n\/\/requires enemy_sprite, enemy_tile, enemy_xloc, enemy_yloc, enemy_colorbit\ndraw_enemy:\n\tset &#91; spritemem 16 ] enemy_yloc\n\tset &#91; spritemem 17 ] enemy_tile\n\tset &#91; spritemem 18 ] enemy_colorbit\n\tset &#91; spritemem 19 ] enemy_xloc\n\n\tset &#91; spritemem 20 ] enemy_yloc\n\tset &#91; spritemem 21 ] + enemy_tile 2\n\tset &#91; spritemem 22 ] enemy_colorbit\n\tset &#91; spritemem 23 ] + enemy_xloc 8\n\treturn\n\ndraw_enemy_reverse:\n\tset &#91; spritemem 16 ] enemy_yloc\n\tset &#91; spritemem 17 ] + enemy_tile 2\n\tset &#91; spritemem 18 ] enemy_colorbit\n\tset &#91; spritemem 19 ] enemy_xloc\n\n\tset &#91; spritemem 20 ] enemy_yloc\n\tset &#91; spritemem 21 ] enemy_tile\n\tset &#91; spritemem 22 ] enemy_colorbit\n\tset &#91; spritemem 23 ] + enemy_xloc 8\n\treturn\n<\/code><\/pre>\n\n\n\n<p>enemytest.asm<\/p>\n\n\n\n<p>spritemem=0<br>nbasic_temp2=256<br>reset_game=257<br>joya=258<br>joyb=259<br>joyup=260<br>joydown=261<br>joyright=262<br>joyleft=263<br>joyselect=264<br>joystart=265<br>frame=266<br>inflight=267<br>direction=268<br>facing=269<br>i=270<br>scrollval=271<br>screen_x=272<br>screen_xoff=273<br>sack_x=274<br>sack_xoff=275<br>spritex=276<br>sack_x2=277<br>spritey=278<br>sack_sprite=279<br>sack_moveframe=280<br>musicframe=281<br>notelength=282<br>whichnote=283<br>enemy_x=284<br>enemy_y=286<br>enemy_xoff=288<br>enemy_yoff=290<br>enemy_type=292<br>enemy_status=294<br>enemy_dir=296<br>enemy_frame=297<br>which_enemy=298<br>maxenemies=299<br>goomba_feet=300<br>deadsecs=301<br>deadframes=302<br>enemy_typevar=303<br>enemy_sprite=304<br>enemy_yloc=305<br>enemy_tile=306<br>nbasic_temp=307<br>enemy_xloc=308<br>enemy_colorbit=309<br>idx=310<br>collide_right=311<br>collide_left=312<br>collide_down=313<br>sack_dead_secs=314<br>sack_dead_frames=315<br>is_crouching=316<br>okjump=317<br>collide_low=318<br>collide_top=319<br>gravindex=320<br>gravity_delta=321<br>collide_y1=322<br>collide_y2=323<br>collide_x1=324<br>collide_x2=325<br>collide_result=326<br>column_read=327<br>which_column=329<br>my_x=330<br>temp_column=331<br>highbyte=332<br>lowbyte=333<br>numcolumns=334<br>.inesprg 2<br>.ineschr 1<br>.inesmir 1<br>.inesmap 0<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.org $8000\n.bank 0\n.db $ff,$ff,$ff,$ff,0,0,0,0,0,0,0,0,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,0,0,0,0,0,0,0,0\n.db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,0,0,0,0,0,0,0,0\n.db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,0,0,0,0,0,0,0,0\n.db $ff,$ff,$ff,$ff<\/code><\/pre>\n\n\n\n<p>start:<br>jsr initsound<br>jsr vwait<br>lda #48<br>sta $2000<br>lda #4<br>sta $2001<br>jsr palette<br>jsr clearsprites<br>jsr varsetup<br>jsr musicsetup<br>jsr enemysetup<br>jsr vwait<br>jsr loadbackground<br>lda #48<br>sta $2000<br>lda #28<br>sta $2001<br>mainloop:<br>jsr joystick<br>jsr joyhandler<br>jsr jumphandler<br>jsr enemyhandler<br>jsr drawsack<br>jsr musicloop<br>jsr vwait<br>jsr drawstuff<br>lda #1<br>sta nbasic_temp2<br>lda reset_game<br>cmp nbasic_temp2<br>bne nbasic_autolabel1<br>jmp start<br>nbasic_autolabel1:<br>jmp mainloop<br>varsetup:<br>lda #0<br>sta joya<br>lda #0<br>sta joyb<br>lda #0<br>sta joyup<br>lda #0<br>sta joydown<br>lda #0<br>sta joyright<br>lda #0<br>sta joyleft<br>lda #0<br>sta joyselect<br>lda #0<br>sta joystart<br>lda #0<br>sta frame<br>lda #2<br>sta inflight<br>lda #0<br>sta direction<br>lda #1<br>sta facing<br>lda #0<br>sta i<br>lda #0<br>sta scrollval<br>lda #0<br>sta screen_x<br>lda #0<br>sta screen_xoff<br>lda #2<br>sta sack_x<br>lda #0<br>sta sack_xoff<br>lda sack_x<br>asl a<br>asl a<br>asl a<br>asl a<br>sta spritex<br>lda spritex<br>sta sack_x2<br>lda #60<br>sta spritey<br>lda #0<br>sta reset_game<br>lda #32<br>sta sack_sprite<br>lda #0<br>sta sack_moveframe<br>rts<br>initsound:<br>lda #0<br>sta $4015<br>lda #31<br>sta $4015<br>rts<br>musicsetup:<br>lda #0<br>sta musicframe<br>lda #0<br>sta notelength<br>lda #0<br>sta whichnote<br>rts<br>musicloop:<br>lda #0<br>sta nbasic_temp2<br>lda notelength<br>cmp nbasic_temp2<br>beq nbasic_autolabel2<br>dec notelength<br>rts<br>nbasic_autolabel2:<br>lda #91<br>sta nbasic_temp2<br>lda whichnote<br>cmp nbasic_temp2<br>bmi nbasic_autolabel3<br>lda #0<br>sta whichnote<br>nbasic_autolabel3:<br>ldx whichnote<br>lda musicdata, x<br>sta notelength<br>lda #0<br>sta nbasic_temp2<br>lda notelength<br>cmp nbasic_temp2<br>bne nbasic_autolabel4<br>inc whichnote<br>ldx whichnote<br>lda musicdata, x<br>sta notelength<br>inc whichnote<br>lda #0<br>sta $4004<br>sta $4005<br>sta $4006<br>sta $4007<br>rts<br>nbasic_autolabel4:<br>inc whichnote<br>ldx whichnote<br>lda musicdata, x<br>sta $4004<br>inx<br>lda musicdata, x<br>sta $4005<br>inx<br>lda musicdata, x<br>sta $4006<br>inx<br>lda musicdata, x<br>sta $4007<br>inx<br>lda whichnote<br>clc<br>adc #4<br>sta whichnote<br>rts<br>musicdata:<br>.db 23,145,0,253,48<br>.db 22,145,0,239,48<br>.db 23,145,0,201,48<br>.db 22,145,0,190,48<br>.db 23,145,0,201,48<br>.db 22,145,0,239,48<br>.db 23,145,0,253,48<br>.db 22,145,0,239,48<br>.db 23,145,0,201,48<br>.db 22,145,0,190,48<br>.db 23,145,0,201,48<br>.db 22,145,0,239,48<br>.db 23,145,0,253,48<br>.db 23,145,0,239,48<br>.db 0,22<br>.db 22,145,0,253,48<br>.db 23,145,0,239,48<br>.db 0,22<br>.db 23,145,0,239,48<br>.db 0,22<br>enemysetup:<br>lda #1<br>sta enemy_type<br>lda #8<br>sta enemy_xoff<br>lda #0<br>sta enemy_yoff<br>lda #3<br>sta enemy_x<br>lda #3<br>sta enemy_y<br>lda #0<br>sta enemy_dir<br>lda #0<br>sta enemy_frame<br>lda #0<br>sta which_enemy<br>lda #0<br>sta maxenemies<br>lda #0<br>sta goomba_feet<br>lda #6<br>sta deadsecs<br>lda #120<br>sta deadframes<br>rts<br>enemyhandler:<br>lda enemy_type<br>sta enemy_typevar<br>jsr goomba_move<br>rts<br>goomba_move:<br>lda #0<br>sta nbasic_temp2<br>lda enemy_frame<br>cmp nbasic_temp2<br>beq nbasic_autolabel5<br>jmp goomba_move_2<br>nbasic_autolabel5:<br>lda #255<br>sta nbasic_temp2<br>lda enemy_dir<br>cmp nbasic_temp2<br>bne nbasic_autolabel6<br>jmp goomba_dead<br>nbasic_autolabel6:<br>lda #0<br>sta nbasic_temp2<br>lda enemy_dir<br>cmp nbasic_temp2<br>bne nbasic_autolabel7<br>jsr goomba_request_right<br>jmp goomba_move_2<br>nbasic_autolabel7:<br>lda #1<br>sta nbasic_temp2<br>lda enemy_dir<br>cmp nbasic_temp2<br>bne nbasic_autolabel8<br>jsr goomba_request_left<br>nbasic_autolabel8:<br>goomba_move_2:<br>jsr goomba_request_fall<br>inc enemy_frame<br>lda #4<br>sta nbasic_temp2<br>lda enemy_frame<br>cmp nbasic_temp2<br>bne nbasic_autolabel9<br>lda #0<br>sta enemy_frame<br>nbasic_autolabel9:<br>lda #20<br>sta enemy_sprite<br>lda enemy_x<br>sta nbasic_temp2<br>lda screen_x<br>clc<br>adc #1<br>cmp nbasic_temp2<br>bmi nbasic_autolabel10<br>beq nbasic_autolabel10<br>lda #241<br>sta enemy_yloc<br>jmp goomba_move_3<br>nbasic_autolabel10:<br>lda enemy_x<br>sta nbasic_temp2<br>lda screen_x<br>clc<br>adc #14<br>cmp nbasic_temp2<br>bpl nbasic_autolabel11<br>lda #241<br>sta enemy_yloc<br>jmp goomba_move_3<br>nbasic_autolabel11:<br>lda #12<br>sta enemy_tile<br>lda enemy_y<br>asl a<br>asl a<br>asl a<br>asl a<br>clc<br>adc enemy_yoff<br>sta enemy_yloc<br>lda enemy_x<br>sec<br>sbc screen_x<br>asl a<br>asl a<br>asl a<br>asl a<br>pha<br>lda enemy_xoff<br>sec<br>sbc screen_xoff<br>sta nbasic_temp<br>pla<br>clc<br>adc nbasic_temp<br>sta enemy_xloc<br>goomba_move_3:<br>lda #12<br>sta nbasic_temp2<br>lda goomba_feet<br>cmp nbasic_temp2<br>bpl nbasic_autolabel12<br>beq nbasic_autolabel12<br>lda #2<br>sta enemy_colorbit<br>jsr draw_enemy<br>nbasic_autolabel12:<br>lda #12<br>sta nbasic_temp2<br>lda goomba_feet<br>cmp nbasic_temp2<br>bmi nbasic_autolabel13<br>lda #66<br>sta enemy_colorbit<br>jsr draw_enemy_reverse<br>nbasic_autolabel13:<br>inc goomba_feet<br>lda #24<br>sta nbasic_temp2<br>lda goomba_feet<br>cmp nbasic_temp2<br>bne nbasic_autolabel14<br>lda #0<br>sta goomba_feet<br>nbasic_autolabel14:<br>rts<br>goomba_dead:<br>jsr goomba_request_fall<br>lda #130<br>sta enemy_colorbit<br>lda enemy_y<br>asl a<br>asl a<br>asl a<br>asl a<br>clc<br>adc enemy_yoff<br>sta enemy_yloc<br>lda enemy_x<br>sta nbasic_temp2<br>lda screen_x<br>clc<br>adc #14<br>cmp nbasic_temp2<br>bpl nbasic_autolabel15<br>lda #245<br>sta enemy_yloc<br>nbasic_autolabel15:<br>lda enemy_x<br>sta nbasic_temp2<br>lda screen_x<br>clc<br>adc #1<br>cmp nbasic_temp2<br>bmi nbasic_autolabel16<br>beq nbasic_autolabel16<br>lda #245<br>sta enemy_yloc<br>nbasic_autolabel16:<br>lda enemy_x<br>sec<br>sbc screen_x<br>asl a<br>asl a<br>asl a<br>asl a<br>pha<br>lda enemy_xoff<br>sec<br>sbc screen_xoff<br>sta nbasic_temp<br>pla<br>clc<br>adc nbasic_temp<br>sta enemy_xloc<br>jsr draw_enemy<br>dec deadframes<br>lda #0<br>sta nbasic_temp2<br>lda deadframes<br>cmp nbasic_temp2<br>bne nbasic_autolabel17<br>lda #120<br>sta deadframes<br>dec deadsecs<br>lda #0<br>sta nbasic_temp2<br>lda deadsecs<br>cmp nbasic_temp2<br>bne nbasic_autolabel18<br>lda #6<br>sta deadsecs<br>lda #1<br>sta enemy_dir<br>nbasic_autolabel18:<br>nbasic_autolabel17:<br>rts<br>goomba_request_right:<br>lda enemy_y<br>asl a<br>asl a<br>asl a<br>asl a<br>clc<br>adc enemy_x<br>clc<br>adc #1<br>sta idx<br>ldx idx<br>lda leveldata, x<br>sta collide_right<br>lda #16<br>sta nbasic_temp2<br>lda enemy_x<br>cmp nbasic_temp2<br>bmi nbasic_autolabel19<br>ldx idx<br>lda leveldata2, x<br>sta collide_right<br>nbasic_autolabel19:<br>goomba_request_right_2:<br>lda #0<br>sta nbasic_temp2<br>lda collide_right<br>cmp nbasic_temp2<br>bne nbasic_autolabel20<br>inc enemy_xoff<br>lda #16<br>sta nbasic_temp2<br>lda enemy_xoff<br>cmp nbasic_temp2<br>bne nbasic_autolabel21<br>lda #0<br>sta enemy_xoff<br>inc enemy_x<br>nbasic_autolabel21:<br>rts<br>nbasic_autolabel20:<br>lda #1<br>sta enemy_dir<br>rts<br>goomba_request_left:<br>lda enemy_y<br>asl a<br>asl a<br>asl a<br>asl a<br>clc<br>adc enemy_x<br>sta idx<br>ldx idx<br>lda leveldata, x<br>sta collide_left<br>lda #16<br>sta nbasic_temp2<br>lda enemy_x<br>cmp nbasic_temp2<br>bmi nbasic_autolabel22<br>ldx idx<br>lda leveldata2, x<br>sta collide_left<br>nbasic_autolabel22:<br>lda #0<br>sta nbasic_temp2<br>lda collide_left<br>cmp nbasic_temp2<br>bne nbasic_autolabel23<br>dec enemy_xoff<br>lda #255<br>sta nbasic_temp2<br>lda enemy_xoff<br>cmp nbasic_temp2<br>bne nbasic_autolabel24<br>lda #15<br>sta enemy_xoff<br>dec enemy_x<br>nbasic_autolabel24:<br>rts<br>nbasic_autolabel23:<br>lda #0<br>sta enemy_dir<br>rts<br>goomba_request_fall:<br>lda enemy_y<br>asl a<br>asl a<br>asl a<br>asl a<br>clc<br>adc enemy_x<br>clc<br>adc #16<br>sta idx<br>ldx idx<br>lda leveldata, x<br>sta collide_down<br>lda #16<br>sta nbasic_temp2<br>lda enemy_x<br>cmp nbasic_temp2<br>bmi nbasic_autolabel25<br>lda idx<br>sec<br>sbc #16<br>sta idx<br>ldx idx<br>lda leveldata2, x<br>sta collide_down<br>nbasic_autolabel25:<br>lda #0<br>sta nbasic_temp2<br>lda collide_down<br>cmp nbasic_temp2<br>bne nbasic_autolabel26<br>inc enemy_yoff<br>lda #16<br>sta nbasic_temp2<br>lda enemy_yoff<br>cmp nbasic_temp2<br>bne nbasic_autolabel27<br>lda #0<br>sta enemy_yoff<br>inc enemy_y<br>nbasic_autolabel27:<br>rts<br>nbasic_autolabel26:<br>rts<br>draw_enemies:<br>lda #0<br>sta which_enemy<br>nbasic_autolabel28:<br>ldx which_enemy<br>lda enemy_type, x<br>sta enemy_typevar<br>lda #1<br>sta nbasic_temp2<br>lda enemy_typevar<br>cmp nbasic_temp2<br>bne nbasic_autolabel29<br>jsr draw_enemy<br>nbasic_autolabel29:<br>sta nbasic_temp<br>inc which_enemy<br>lda which_enemy<br>cmp nbasic_temp<br>bmi nbasic_autolabel28<br>beq nbasic_autolabel28<br>rts<br>draw_enemy:<br>ldx #16<br>lda enemy_yloc<br>sta spritemem, x<br>ldx #17<br>lda enemy_tile<br>sta spritemem, x<br>ldx #18<br>lda enemy_colorbit<br>sta spritemem, x<br>ldx #19<br>lda enemy_xloc<br>sta spritemem, x<br>ldx #20<br>lda enemy_yloc<br>sta spritemem, x<br>ldx #21<br>lda enemy_tile<br>clc<br>adc #2<br>sta spritemem, x<br>ldx #22<br>lda enemy_colorbit<br>sta spritemem, x<br>ldx #23<br>lda enemy_xloc<br>clc<br>adc #8<br>sta spritemem, x<br>rts<br>draw_enemy_reverse:<br>ldx #16<br>lda enemy_yloc<br>sta spritemem, x<br>ldx #17<br>lda enemy_tile<br>clc<br>adc #2<br>sta spritemem, x<br>ldx #18<br>lda enemy_colorbit<br>sta spritemem, x<br>ldx #19<br>lda enemy_xloc<br>sta spritemem, x<br>ldx #20<br>lda enemy_yloc<br>sta spritemem, x<br>ldx #21<br>lda enemy_tile<br>sta spritemem, x<br>ldx #22<br>lda enemy_colorbit<br>sta spritemem, x<br>ldx #23<br>lda enemy_xloc<br>clc<br>adc #8<br>sta spritemem, x<br>rts<br>joyhandler:<br>lda #0<br>sta nbasic_temp2<br>lda sack_dead_secs<br>cmp nbasic_temp2<br>beq nbasic_autolabel30<br>lda #32<br>sta sack_sprite<br>jsr jumphandler<br>dec sack_dead_frames<br>lda #0<br>sta nbasic_temp2<br>lda sack_dead_frames<br>cmp nbasic_temp2<br>bne nbasic_autolabel31<br>lda #60<br>sta sack_dead_frames<br>dec sack_dead_secs<br>nbasic_autolabel31:<br>rts<br>nbasic_autolabel30:<br>lda #0<br>sta direction<br>lda #0<br>sta is_crouching<br>lda #1<br>sta nbasic_temp2<br>lda joyright<br>cmp nbasic_temp2<br>bne nbasic_autolabel32<br>lda #1<br>sta direction<br>lda #1<br>sta facing<br>jmp joyhandler2<br>nbasic_autolabel32:<br>lda #1<br>sta nbasic_temp2<br>lda joyleft<br>cmp nbasic_temp2<br>bne nbasic_autolabel33<br>lda #255<br>sta direction<br>lda #0<br>sta facing<br>jmp joyhandler2<br>nbasic_autolabel33:<br>lda #32<br>sta sack_sprite<br>joyhandler2:<br>lda #1<br>sta nbasic_temp2<br>lda joydown<br>cmp nbasic_temp2<br>bne nbasic_autolabel34<br>lda #56<br>sta sack_sprite<br>lda #1<br>sta is_crouching<br>nbasic_autolabel34:<br>jsr sack_collide_enemy<br>lda #0<br>sta nbasic_temp2<br>lda direction<br>cmp nbasic_temp2<br>beq nbasic_autolabel35<br>jsr request_move<br>nbasic_autolabel35:<br>lda #1<br>sta nbasic_temp2<br>lda joya<br>cmp nbasic_temp2<br>bne nbasic_autolabel36<br>lda #1<br>sta nbasic_temp2<br>lda okjump<br>cmp nbasic_temp2<br>bne nbasic_autolabel37<br>jsr jumpstart<br>nbasic_autolabel37:<br>nbasic_autolabel36:<br>lda #1<br>sta nbasic_temp2<br>lda joyselect<br>cmp nbasic_temp2<br>bne nbasic_autolabel38<br>lda #1<br>sta reset_game<br>nbasic_autolabel38:<br>rts<br>request_move:<br>inc sack_moveframe<br>lda #12<br>sta nbasic_temp2<br>lda sack_moveframe<br>cmp nbasic_temp2<br>bne nbasic_autolabel39<br>lda #0<br>sta sack_moveframe<br>lda #32<br>sta nbasic_temp2<br>lda sack_sprite<br>cmp nbasic_temp2<br>bne nbasic_autolabel40<br>lda #40<br>sta sack_sprite<br>jmp request_move_2<br>nbasic_autolabel40:<br>lda #32<br>sta sack_sprite<br>nbasic_autolabel39:<br>request_move_2:<br>lda #255<br>sta nbasic_temp2<br>lda direction<br>cmp nbasic_temp2<br>bne nbasic_autolabel41<br>jmp request_left<br>nbasic_autolabel41:<br>request_right:<br>lda sack_x2<br>clc<br>adc #8<br>lsr a<br>lsr a<br>lsr a<br>lsr a<br>sta idx<br>lda spritey<br>and #240<br>clc<br>adc idx<br>sta idx<br>ldx idx<br>lda leveldata, x<br>sta collide_low<br>lda idx<br>sec<br>sbc #16<br>tax<br>lda leveldata, x<br>sta collide_top<br>lda #16<br>sta nbasic_temp2<br>lda sack_x<br>cmp nbasic_temp2<br>bmi nbasic_autolabel42<br>ldx idx<br>lda leveldata2, x<br>sta collide_low<br>lda idx<br>sec<br>sbc #16<br>tax<br>lda leveldata2, x<br>sta collide_top<br>nbasic_autolabel42:<br>lda #0<br>sta nbasic_temp2<br>lda collide_low<br>cmp nbasic_temp2<br>beq nbasic_autolabel43<br>jmp collision<br>nbasic_autolabel43:<br>lda #1<br>sta nbasic_temp2<br>lda is_crouching<br>cmp nbasic_temp2<br>bne nbasic_autolabel44<br>lda #0<br>sta collide_top<br>nbasic_autolabel44:<br>lda #0<br>sta nbasic_temp2<br>lda collide_top<br>cmp nbasic_temp2<br>beq nbasic_autolabel45<br>jmp collision<br>nbasic_autolabel45:<br>jsr move_right<br>lda #0<br>sta nbasic_temp2<br>lda inflight<br>cmp nbasic_temp2<br>bne nbasic_autolabel46<br>lda #2<br>sta inflight<br>nbasic_autolabel46:<br>rts<br>request_left:<br>lda sack_x2<br>sec<br>sbc #8<br>lsr a<br>lsr a<br>lsr a<br>lsr a<br>sta idx<br>lda spritey<br>and #240<br>clc<br>adc idx<br>sta idx<br>ldx idx<br>lda leveldata, x<br>sta collide_low<br>lda idx<br>sec<br>sbc #16<br>tax<br>lda leveldata, x<br>sta collide_top<br>lda #17<br>sta nbasic_temp2<br>lda sack_x<br>cmp nbasic_temp2<br>bmi nbasic_autolabel47<br>ldx idx<br>lda leveldata2, x<br>sta collide_low<br>lda idx<br>sec<br>sbc #16<br>tax<br>lda leveldata2, x<br>sta collide_top<br>nbasic_autolabel47:<br>lda #0<br>sta nbasic_temp2<br>lda collide_low<br>cmp nbasic_temp2<br>beq nbasic_autolabel48<br>jmp collision<br>nbasic_autolabel48:<br>lda #1<br>sta nbasic_temp2<br>lda is_crouching<br>cmp nbasic_temp2<br>bne nbasic_autolabel49<br>lda #0<br>sta collide_top<br>nbasic_autolabel49:<br>lda #0<br>sta nbasic_temp2<br>lda collide_top<br>cmp nbasic_temp2<br>beq nbasic_autolabel50<br>jmp collision<br>nbasic_autolabel50:<br>jsr move_left<br>lda #0<br>sta nbasic_temp2<br>lda inflight<br>cmp nbasic_temp2<br>bne nbasic_autolabel51<br>lda #2<br>sta inflight<br>nbasic_autolabel51:<br>rts<br>collision:<br>lda #0<br>sta direction<br>rts<br>move_right:<br>lda #31<br>sta nbasic_temp2<br>lda sack_x<br>cmp nbasic_temp2<br>bne nbasic_autolabel52<br>rts<br>nbasic_autolabel52:<br>inc sack_xoff<br>lda #16<br>sta nbasic_temp2<br>lda sack_xoff<br>cmp nbasic_temp2<br>bne nbasic_autolabel53<br>lda #0<br>sta sack_xoff<br>inc sack_x<br>nbasic_autolabel53:<br>lda #10<br>sta nbasic_temp2<br>lda sack_x<br>sec<br>sbc screen_x<br>cmp nbasic_temp2<br>bmi nbasic_autolabel54<br>beq nbasic_autolabel54<br>jsr scroll_right<br>nbasic_autolabel54:<br>jsr set_x_coords<br>rts<br>move_left:<br>lda #0<br>sta nbasic_temp2<br>lda sack_x<br>cmp nbasic_temp2<br>bne nbasic_autolabel55<br>rts<br>nbasic_autolabel55:<br>dec sack_xoff<br>lda #255<br>sta nbasic_temp2<br>lda sack_xoff<br>cmp nbasic_temp2<br>bne nbasic_autolabel56<br>lda #15<br>sta sack_xoff<br>dec sack_x<br>nbasic_autolabel56:<br>lda #6<br>sta nbasic_temp2<br>lda sack_x<br>sec<br>sbc screen_x<br>cmp nbasic_temp2<br>bpl nbasic_autolabel57<br>beq nbasic_autolabel57<br>jsr scroll_left<br>nbasic_autolabel57:<br>jsr set_x_coords<br>rts<br>set_x_coords:<br>lda sack_x<br>sec<br>sbc screen_x<br>asl a<br>asl a<br>asl a<br>asl a<br>pha<br>lda sack_xoff<br>sec<br>sbc screen_xoff<br>sta nbasic_temp<br>pla<br>clc<br>adc nbasic_temp<br>sta spritex<br>lda #16<br>sta nbasic_temp2<br>lda sack_x<br>cmp nbasic_temp2<br>bmi nbasic_autolabel58<br>lda sack_x<br>sec<br>sbc #16<br>asl a<br>asl a<br>asl a<br>asl a<br>clc<br>adc sack_xoff<br>sta sack_x2<br>rts<br>nbasic_autolabel58:<br>lda sack_x<br>asl a<br>asl a<br>asl a<br>asl a<br>clc<br>adc sack_xoff<br>sta sack_x2<br>rts<br>jumpstart:<br>lda #1<br>sta nbasic_temp2<br>lda okjump<br>cmp nbasic_temp2<br>beq nbasic_autolabel59<br>rts<br>nbasic_autolabel59:<br>jsr playsound_jump<br>lda #1<br>sta inflight<br>lda #50<br>sta gravindex<br>lda #0<br>sta gravity_delta<br>lda #0<br>sta okjump<br>rts<br>highjump:<br>lda #1<br>sta inflight<br>lda #64<br>sta gravindex<br>lda #0<br>sta gravity_delta<br>lda #0<br>sta okjump<br>rts<br>gravity:<br>.db 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1<br>.db 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1<br>.db 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2<br>.db 3, 3, 3, 3, 3, 3<br>.db 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1<br>.db 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 3, 3, 3, 2<br>.db 3, 3, 3, 3, 3, 3, 4, 3, 3, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4<br>.db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4<br>jumphandler:<br>lda #0<br>sta nbasic_temp2<br>lda inflight<br>cmp nbasic_temp2<br>bne nbasic_autolabel60<br>lda #0<br>sta nbasic_temp2<br>lda joya<br>cmp nbasic_temp2<br>bne nbasic_autolabel61<br>lda #1<br>sta okjump<br>nbasic_autolabel61:<br>rts<br>nbasic_autolabel60:<br>ldx gravindex<br>lda gravity, x<br>sta gravity_delta<br>lda #1<br>sta nbasic_temp2<br>lda inflight<br>cmp nbasic_temp2<br>bne nbasic_autolabel62<br>lda #48<br>sta sack_sprite<br>lda sack_x2<br>lsr a<br>lsr a<br>lsr a<br>lsr a<br>sta idx<br>lda spritey<br>sec<br>sbc #16<br>sec<br>sbc gravity_delta<br>and #240<br>clc<br>adc idx<br>sta idx<br>ldx idx<br>lda leveldata, x<br>sta collide_top<br>lda #16<br>sta nbasic_temp2<br>lda sack_x<br>cmp nbasic_temp2<br>bmi nbasic_autolabel63<br>ldx idx<br>lda leveldata2, x<br>sta collide_top<br>nbasic_autolabel63:<br>lda #0<br>sta nbasic_temp2<br>lda collide_top<br>cmp nbasic_temp2<br>beq nbasic_autolabel64<br>lda #2<br>sta inflight<br>dec gravindex<br>rts<br>nbasic_autolabel64:<br>lda spritey<br>sec<br>sbc gravity_delta<br>sta spritey<br>lda #0<br>sta nbasic_temp2<br>lda gravindex<br>cmp nbasic_temp2<br>bmi nbasic_autolabel65<br>beq nbasic_autolabel65<br>dec gravindex<br>rts<br>nbasic_autolabel65:<br>lda #2<br>sta inflight<br>rts<br>nbasic_autolabel62:<br>lda sack_x2<br>lsr a<br>lsr a<br>lsr a<br>lsr a<br>sta idx<br>lda spritey<br>clc<br>adc gravity_delta<br>and #240<br>clc<br>adc idx<br>sta idx<br>ldx idx<br>lda leveldata, x<br>sta collide_low<br>lda #16<br>sta nbasic_temp2<br>lda sack_x<br>cmp nbasic_temp2<br>bmi nbasic_autolabel66<br>ldx idx<br>lda leveldata2, x<br>sta collide_low<br>nbasic_autolabel66:<br>lda #0<br>sta nbasic_temp2<br>lda collide_low<br>cmp nbasic_temp2<br>beq nbasic_autolabel67<br>lda #54<br>sta nbasic_temp2<br>lda gravindex<br>cmp nbasic_temp2<br>bmi nbasic_autolabel68<br>jsr playsound_thump<br>nbasic_autolabel68:<br>lda #0<br>sta inflight<br>lda #0<br>sta nbasic_temp2<br>lda joya<br>cmp nbasic_temp2<br>bne nbasic_autolabel69<br>lda #1<br>sta okjump<br>nbasic_autolabel69:<br>lda #6<br>sta gravindex<br>rts<br>nbasic_autolabel67:<br>lda spritey<br>clc<br>adc gravity_delta<br>sta spritey<br>lda #55<br>sta nbasic_temp2<br>lda gravindex<br>cmp nbasic_temp2<br>bpl nbasic_autolabel70<br>lda #0<br>sta okjump<br>inc gravindex<br>lda #48<br>sta sack_sprite<br>rts<br>nbasic_autolabel70:<br>lda #2<br>sta inflight<br>lda #48<br>sta sack_sprite<br>rts<br>sack_collide_enemy:<br>lda #255<br>sta nbasic_temp2<br>lda enemy_dir<br>cmp nbasic_temp2<br>bne nbasic_autolabel71<br>rts<br>nbasic_autolabel71:<br>lda #0<br>sta nbasic_temp2<br>lda sack_dead_secs<br>cmp nbasic_temp2<br>beq nbasic_autolabel72<br>rts<br>nbasic_autolabel72:<br>lda enemy_y<br>asl a<br>asl a<br>asl a<br>asl a<br>clc<br>adc enemy_yoff<br>sta collide_y1<br>lda spritey<br>sec<br>sbc collide_y1<br>sta collide_y2<br>lda collide_y1<br>sta nbasic_temp2<br>lda spritey<br>cmp nbasic_temp2<br>bpl nbasic_autolabel73<br>beq nbasic_autolabel73<br>rts<br>nbasic_autolabel73:<br>lda #24<br>sta nbasic_temp2<br>lda collide_y2<br>cmp nbasic_temp2<br>bmi nbasic_autolabel74<br>beq nbasic_autolabel74<br>rts<br>nbasic_autolabel74:<br>lda enemy_x<br>asl a<br>asl a<br>asl a<br>pha<br>lda enemy_xoff<br>lsr a<br>sta nbasic_temp<br>pla<br>clc<br>adc nbasic_temp<br>sta collide_x1<br>lda sack_x<br>asl a<br>asl a<br>asl a<br>pha<br>lda sack_xoff<br>lsr a<br>sta nbasic_temp<br>pla<br>clc<br>adc nbasic_temp<br>sta collide_x2<br>lda collide_x2<br>sec<br>sbc collide_x1<br>sta collide_result<br>lda collide_x2<br>sta nbasic_temp2<br>lda collide_x1<br>cmp nbasic_temp2<br>bmi nbasic_autolabel75<br>beq nbasic_autolabel75<br>lda #254<br>sta nbasic_temp2<br>lda collide_result<br>cmp nbasic_temp2<br>bmi nbasic_autolabel76<br>jmp sack_collide_enemy_right<br>nbasic_autolabel76:<br>nbasic_autolabel75:<br>lda collide_x2<br>sta nbasic_temp2<br>lda collide_x1<br>cmp nbasic_temp2<br>bpl nbasic_autolabel77<br>beq nbasic_autolabel77<br>lda #12<br>sta nbasic_temp2<br>lda collide_result<br>cmp nbasic_temp2<br>bpl nbasic_autolabel78<br>jmp sack_collide_enemy_left<br>nbasic_autolabel78:<br>nbasic_autolabel77:<br>rts<br>sack_collide_enemy_right:<br>lda #2<br>sta nbasic_temp2<br>lda inflight<br>cmp nbasic_temp2<br>bne nbasic_autolabel79<br>lda #1<br>sta nbasic_temp2<br>lda collide_y2<br>cmp nbasic_temp2<br>bpl nbasic_autolabel80<br>jmp sack_collide_enemy_bottom<br>nbasic_autolabel80:<br>nbasic_autolabel79:<br>lda #0<br>sta enemy_dir<br>lda #1<br>sta nbasic_temp2<br>lda direction<br>cmp nbasic_temp2<br>bne nbasic_autolabel81<br>lda #0<br>sta direction<br>nbasic_autolabel81:<br>lda #6<br>sta sack_dead_secs<br>lda #60<br>sta sack_dead_frames<br>rts<br>sack_collide_enemy_left:<br>lda #2<br>sta nbasic_temp2<br>lda inflight<br>cmp nbasic_temp2<br>bne nbasic_autolabel82<br>lda #4<br>sta nbasic_temp2<br>lda collide_y2<br>cmp nbasic_temp2<br>bpl nbasic_autolabel83<br>beq nbasic_autolabel83<br>jmp sack_collide_enemy_bottom<br>nbasic_autolabel83:<br>nbasic_autolabel82:<br>lda #1<br>sta enemy_dir<br>lda #255<br>sta nbasic_temp2<br>lda direction<br>cmp nbasic_temp2<br>bne nbasic_autolabel84<br>lda #0<br>sta direction<br>nbasic_autolabel84:<br>lda #6<br>sta sack_dead_secs<br>lda #60<br>sta sack_dead_frames<br>rts<br>sack_collide_enemy_bottom:<br>jsr playsound_squish<br>lda #255<br>sta enemy_dir<br>lda #1<br>sta inflight<br>lda #25<br>sta gravindex<br>lda #1<br>sta nbasic_temp2<br>lda joya<br>cmp nbasic_temp2<br>bne nbasic_autolabel85<br>jsr highjump<br>nbasic_autolabel85:<br>rts<br>joystick:<br>lda #$01 ;\/\/strobe the joystick<br>sta $4016<br>lda #$00<br>sta $4016<br>lda $4016 ;\/\/now read values<br>and #$01<br>sta joya<br>lda $4016<br>and #$01<br>sta joyb<br>lda $4016<br>and #$01<br>sta joyselect<br>lda $4016<br>and #$01<br>sta joystart<br>lda $4016<br>and #$01<br>sta joyup<br>lda $4016<br>and #$01<br>sta joydown<br>lda $4016<br>and #$01<br>sta joyleft<br>lda $4016<br>and #$01<br>sta joyright<br>rts<br>playsound_jump:<br>lda #152<br>sta $4000<br>lda #140<br>sta $4001<br>lda #77<br>sta $4002<br>lda #149<br>sta $4003<br>rts<br>playsound_thump:<br>lda #159<br>sta $4000<br>lda #132<br>sta $4001<br>lda #211<br>sta $4002<br>lda #252<br>sta $4003<br>rts<br>playsound_squish:<br>lda #136<br>sta $4000<br>lda #72<br>sta $4001<br>lda #37<br>sta $4002<br>lda #75<br>sta $4003<br>rts<br>scrollhandler:<br>lda screen_x<br>asl a<br>asl a<br>asl a<br>asl a<br>clc<br>adc screen_xoff<br>sta $2005<br>lda #0<br>sta $2005<br>rts<br>scroll_right:<br>lda #15<br>sta nbasic_temp2<br>lda screen_x<br>cmp nbasic_temp2<br>beq nbasic_autolabel86<br>inc screen_xoff<br>lda #16<br>sta nbasic_temp2<br>lda screen_xoff<br>cmp nbasic_temp2<br>bne nbasic_autolabel87<br>lda #0<br>sta screen_xoff<br>inc screen_x<br>nbasic_autolabel87:<br>rts<br>nbasic_autolabel86:<br>lda #15<br>sta nbasic_temp2<br>lda screen_xoff<br>cmp nbasic_temp2<br>bne nbasic_autolabel88<br>rts<br>nbasic_autolabel88:<br>inc screen_xoff<br>rts<br>scroll_left:<br>lda #0<br>sta nbasic_temp2<br>lda screen_x<br>cmp nbasic_temp2<br>beq nbasic_autolabel89<br>dec screen_xoff<br>lda #255<br>sta nbasic_temp2<br>lda screen_xoff<br>cmp nbasic_temp2<br>bne nbasic_autolabel90<br>lda #15<br>sta screen_xoff<br>dec screen_x<br>nbasic_autolabel90:<br>rts<br>nbasic_autolabel89:<br>lda #0<br>sta nbasic_temp2<br>lda screen_xoff<br>cmp nbasic_temp2<br>bne nbasic_autolabel91<br>rts<br>nbasic_autolabel91:<br>dec screen_xoff<br>rts<br>marker:<br>lda #20<br>sta $2003<br>pla ;\/\/y val<br>sta $2004<br>lda #1<br>sta $2004 ;\/\/sprite index<br>sta $2004 ;\/\/color bit<br>pla ;\/\/x val<br>sta $2004<br>rts<br>drawsack:<br>lda #0<br>sta nbasic_temp2<br>lda sack_dead_secs<br>cmp nbasic_temp2<br>beq nbasic_autolabel92<br>jsr drawdead<br>rts<br>nbasic_autolabel92:<br>lda #1<br>sta nbasic_temp2<br>lda facing<br>cmp nbasic_temp2<br>bne nbasic_autolabel93<br>jsr drawright<br>rts<br>nbasic_autolabel93:<br>jsr drawleft<br>rts<br>clearattrib:<br>lda #35<br>sta $2006<br>lda #192<br>sta $2006<br>ldy #63<br>clearlabel0:<br>lda #0<br>sta $2007<br>dey<br>cpy #0<br>bne clearlabel0<br>rts<br>clearsprites:<br>lda #0<br>sta $2003<br>lda #0<br>sta i<br>nbasic_autolabel94:<br>lda #245<br>sta $2004<br>lda #0<br>sta $2004<br>lda #0<br>sta $2004<br>lda #0<br>sta $2004<br>sta nbasic_temp<br>inc i<br>lda i<br>cmp nbasic_temp<br>bmi nbasic_autolabel94<br>beq nbasic_autolabel94<br>rts<br>drawleft:<br>ldx #0<br>lda spritey<br>sec<br>sbc #32<br>sta spritemem, x<br>ldx #1<br>lda sack_sprite<br>sta spritemem, x<br>ldx #2<br>lda #65<br>sta spritemem, x<br>ldx #3<br>lda spritex<br>sta spritemem, x<br>ldx #4<br>lda spritey<br>sec<br>sbc #16<br>sta spritemem, x<br>ldx #5<br>lda sack_sprite<br>clc<br>adc #2<br>sta spritemem, x<br>ldx #6<br>lda #65<br>sta spritemem, x<br>ldx #7<br>lda spritex<br>sta spritemem, x<br>ldx #8<br>lda spritey<br>sec<br>sbc #32<br>sta spritemem, x<br>ldx #9<br>lda sack_sprite<br>clc<br>adc #4<br>sta spritemem, x<br>ldx #10<br>lda #65<br>sta spritemem, x<br>ldx #11<br>lda spritex<br>sec<br>sbc #8<br>sta spritemem, x<br>ldx #12<br>lda spritey<br>sec<br>sbc #16<br>sta spritemem, x<br>ldx #13<br>lda sack_sprite<br>clc<br>adc #6<br>sta spritemem, x<br>ldx #14<br>lda #65<br>sta spritemem, x<br>ldx #15<br>lda spritex<br>sec<br>sbc #8<br>sta spritemem, x<br>rts<br>drawright:<br>ldx #0<br>lda spritey<br>sec<br>sbc #32<br>sta spritemem, x<br>ldx #1<br>lda sack_sprite<br>sta spritemem, x<br>ldx #2<br>lda #1<br>sta spritemem, x<br>ldx #3<br>lda spritex<br>sec<br>sbc #8<br>sta spritemem, x<br>ldx #4<br>lda spritey<br>sec<br>sbc #16<br>sta spritemem, x<br>ldx #5<br>lda sack_sprite<br>clc<br>adc #2<br>sta spritemem, x<br>ldx #6<br>lda #1<br>sta spritemem, x<br>ldx #7<br>lda spritex<br>sec<br>sbc #8<br>sta spritemem, x<br>ldx #8<br>lda spritey<br>sec<br>sbc #32<br>sta spritemem, x<br>ldx #9<br>lda sack_sprite<br>clc<br>adc #4<br>sta spritemem, x<br>ldx #10<br>lda #1<br>sta spritemem, x<br>ldx #11<br>lda spritex<br>sta spritemem, x<br>ldx #12<br>lda spritey<br>sec<br>sbc #16<br>sta spritemem, x<br>ldx #13<br>lda sack_sprite<br>clc<br>adc #6<br>sta spritemem, x<br>ldx #14<br>lda #1<br>sta spritemem, x<br>ldx #15<br>lda spritex<br>sta spritemem, x<br>rts<br>drawdead:<br>ldx #0<br>lda spritey<br>sec<br>sbc #22<br>sta spritemem, x<br>ldx #1<br>lda sack_sprite<br>clc<br>adc #6<br>sta spritemem, x<br>ldx #2<br>lda #193<br>sta spritemem, x<br>ldx #3<br>lda spritex<br>sec<br>sbc #8<br>sta spritemem, x<br>ldx #4<br>lda spritey<br>sec<br>sbc #6<br>sta spritemem, x<br>ldx #5<br>lda sack_sprite<br>clc<br>adc #4<br>sta spritemem, x<br>ldx #6<br>lda #193<br>sta spritemem, x<br>ldx #7<br>lda spritex<br>sec<br>sbc #8<br>sta spritemem, x<br>ldx #8<br>lda spritey<br>sec<br>sbc #22<br>sta spritemem, x<br>ldx #9<br>lda sack_sprite<br>clc<br>adc #2<br>sta spritemem, x<br>ldx #10<br>lda #193<br>sta spritemem, x<br>ldx #11<br>lda spritex<br>sta spritemem, x<br>ldx #12<br>lda spritey<br>sec<br>sbc #6<br>sta spritemem, x<br>ldx #13<br>lda sack_sprite<br>sta spritemem, x<br>ldx #14<br>lda #193<br>sta spritemem, x<br>ldx #15<br>lda spritex<br>sta spritemem, x<br>rts<br>vwait:<br>lda $2002<br>bpl vwait ;\/\/wait for start of retrace<br>rts ;\/\/RETURN FOR NOW. THIS IS INCOMPATIBLE WITH OTHER EMULATORS<br>vwait2:<br>lda $2002<br>bmi vwait2 ;\/\/wait for end of retrace<br>inc frame<br>rts<br>ppuinit:<br>jsr vwait<br>lda #48<br>sta $2000<br>lda #28<br>sta $2001<br>rts<br>titlepal:<br>;\/\/ .db $00,$05,$09,$28,$00,$18,$09,$28,$00,$19,$18,$0c,$00,$03,$07,$00<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.db $28,$38,$37,$08, $28,$21,$37,$38, $28,$38,$01,$08, $28,$21,$37,$01\n.db $27,13,32,3,0,13,32,$10,0,13,57,24,0,10,11,12 ;\/\/foreground palette<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>palette:\nlda #63\nsta $2006\nlda #0\nsta $2006\nlda #0\nsta i\npalette_2:\nldx i\nlda titlepal, x\nsta $2007\ninc i\nlda #32\nsta nbasic_temp2\nlda i\ncmp nbasic_temp2\nbne nbasic_autolabel95\nrts\nnbasic_autolabel95:\njmp palette_2\ndrawstuff:\njsr scrollhandler\nlda #0\nsta $4014\nrts\nnmi:\nrti\nhigh_bytes:\n;\/\/name table 0\n.db $20,$20,$20,$20,$20,$20,$20,$20\n.db $21,$21,$21,$21,$21,$21,$21,$21\n.db $22,$22,$22,$22,$22,$22,$22,$22\n.db $23,$23,$23,$23,$23,$23,$23,$23\nhigh_bytes2:\n;\/\/name table 1\n.db $24,$24,$24,$24,$24,$24,$24,$24\n.db $25,$25,$25,$25,$25,$25,$25,$25\n.db $26,$26,$26,$26,$26,$26,$26,$26\n.db $27,$27,$27,$27,$27,$27,$27,$27\nlow_bytes:\n;\/\/name table 0\n.db 0,32,64,96,128,160,192,224\n.db 0,32,64,96,128,160,192,224\n.db 0,32,64,96,128,160,192,224\n.db 0,32,64,96,128,160,192,224\nlow_bytes2:\n;\/\/name table 1\n.db 0,32,64,96,128,160,192,224\n.db 0,32,64,96,128,160,192,224\n.db 0,32,64,96,128,160,192,224\n.db 0,32,64,96,128,160,192,224\nloadbackground:\nlda #0\nsta which_column\nloadbackground_2:\njsr loadcolumn\njsr load_attrib_column\njsr vwait\ninc which_column\nlda #16\nsta nbasic_temp2\nlda which_column\ncmp nbasic_temp2\nbpl nbasic_autolabel96\njmp loadbackground_2\nnbasic_autolabel96:\nrts\nloadcolumn:\nlda #8\nsta nbasic_temp2\nlda which_column\ncmp nbasic_temp2\nbmi nbasic_autolabel97\njmp loadhighcolumn\nnbasic_autolabel97:\nlda which_column\nasl a\nasl a\nasl a\nasl a\nasl a\nsec\nsbc which_column\nsec\nsbc which_column\nsta my_x\nwrite_column_work_0:\nldy #0\nldx my_x\nwrite_column_work_1:\n;\/\/set ppu memory address\nlda high_bytes,y\nsta $2006\nlda which_column\nasl a\nasl a\nclc\nadc low_bytes,y\nsta $2006\n;\/\/write top blocks\nclc\nlda the_level, x\nsta $2007\nadc #1\nsta $2007\ninx\nlda the_level,x\nsta $2007\nadc #1\nsta $2007\ndex\n;\/\/now write the blocks under\niny\nlda high_bytes,y\nsta $2006\nlda which_column\nasl a\nasl a\nclc\nadc low_bytes,y\nsta $2006\nclc\nlda the_level, x\nadc #16\nsta $2007\nadc #1\nsta $2007\ninx\nlda the_level,x\nadc #16\nsta $2007\nadc #1\nsta $2007\ninx\n;\/\/now check if we're done with the column\niny\ncpy #30\nbne write_column_work_1\nrts\nloadhighcolumn:\nlda which_column\nsec\nsbc #8\nsta temp_column\nlda temp_column\nasl a\nasl a\nasl a\nasl a\nasl a\nsec\nsbc temp_column\nsec\nsbc temp_column\nsta my_x\nldy #0\nldx my_x\nwrite_column_work_2:\n;\/\/set ppu memory address\nlda high_bytes2,y\nsta $2006\nlda temp_column\nasl a\nasl a\nclc\nadc low_bytes2,y\nsta $2006\n;\/\/write top blocks\nclc\nlda the_level2, x\nsta $2007\nadc #1\nsta $2007\ninx\nlda the_level2,x\nsta $2007\nadc #1\nsta $2007\ndex\n;\/\/now write the blocks under\niny\nlda high_bytes2,y\nsta $2006\nlda temp_column\nasl a\nasl a\nclc\nadc low_bytes2,y\nsta $2006\nclc\nlda the_level2, x\nadc #16\nsta $2007\nadc #1\nsta $2007\ninx\nlda the_level2,x\nadc #16\nsta $2007\nadc #1\nsta $2007\ninx\n;\/\/now check if we're done with the column\niny\ncpy #30\nbne write_column_work_2\nrts\nload_attrib_column:\nlda #8\nsta nbasic_temp2\nlda which_column\ncmp nbasic_temp2\nbpl nbasic_autolabel98\nbeq nbasic_autolabel98\nlda #35\nsta highbyte\nlda #192\nclc\nadc which_column\nsta lowbyte\njmp load_attrib_column_1\nnbasic_autolabel98:\nlda #39\nsta highbyte\nlda #184\nclc\nadc which_column\nsta lowbyte\nload_attrib_column_1:\nlda which_column\nasl a\nasl a\nasl a\nsta idx\nlda #0\nsta numcolumns\nload_attrib_column_2:\nlda highbyte\nsta $2006\nlda lowbyte\nsta $2006\nldx idx\nlda attrib_table, x\nsta $2007\nlda lowbyte\nclc\nadc #8\nsta lowbyte\ninc idx\ninc numcolumns\nlda #8\nsta nbasic_temp2\nlda numcolumns\ncmp nbasic_temp2\nbne nbasic_autolabel99\nrts\nnbasic_autolabel99:\njmp load_attrib_column_2\nthe_level:\n.incbin \"level\/name1.tbl\"\nthe_level2:\n.incbin \"level\/name2.tbl\"\nattrib_table:\n.incbin \"level\/attrib.tbl\"\nleveldata:\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0\n.db 0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1\n.db 0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0\n.db 0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1\nleveldata2:\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0\n.db 0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1\n.db 0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0\n.db 0,0,1,1,1,1,1,0,0,0,1,1,1,1,0,0\n.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n.bank 3\n.org $fffa\n.dw nmi ;\/\/NMI\n.dw start ;\/\/Reset\n.dw start ;\/\/BRK\n.bank 4\n.org $0000\n.incbin \"foreground.chr\"\n.incbin \"background.chr\"\n;\/\/end of file<\/code><\/pre>\n\n\n\n<p>enemytest.bas<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ines header setup\nasm\n\t.inesprg 2\n\t.ineschr 1\n\t.inesmir 1\n\t.inesmap 0\n\t\n\t.org $8000\n\t.bank 0\nendasm\n\/\/test sound, address $8000, 64 bytes\nasm\n\t.db $ff,$ff,$ff,$ff,0,0,0,0,0,0,0,0,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,0,0,0,0,0,0,0,0\n\t.db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,0,0,0,0,0,0,0,0\n\t.db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,0,0,0,0,0,0,0,0\n\t.db $ff,$ff,$ff,$ff\nendasm\n\narray spritemem 256\n\n\/\/program start\nstart:\n\tgosub initsound\n\tgosub vwait\n\tset $2000 %00110000\n\tset $2001 %00000100\n\tgosub palette\n\tgosub clearsprites\n\tgosub varsetup\n\tgosub musicsetup\n\tgosub enemysetup\n\tgosub vwait\n\tgosub loadbackground\n\tset $2000 %00110000\n\tset $2001 %00011100\nmainloop:\n\tgosub joystick\n\tgosub joyhandler\n\tgosub jumphandler\n\tgosub enemyhandler\n\tgosub drawsack\n\tgosub musicloop\n\tgosub vwait\n\tgosub drawstuff\n\tif reset_game = 1 goto start\n\tgoto mainloop\n\n\/\/initialization\nvarsetup:\n\tset joya 0\n\tset joyb 0\n\tset joyup 0\n\tset joydown 0\n\tset joyright 0\n\tset joyleft 0\n\tset joyselect 0\n\tset joystart 0\n\tset frame 0\n\tset inflight 2\n\tset direction 0\n\tset facing 1\n\tset i 0\n\tset scrollval 0\n\tset screen_x 0\n\tset screen_xoff 0\n\tset sack_x 2\n\tset sack_xoff 0\n\tset spritex &lt;&lt; sack_x 4\n\tset sack_x2 spritex\n\tset spritey 60\n\tset reset_game 0\n\tset sack_sprite 32\n\tset sack_moveframe 0\n\treturn\n\ninitsound:\n\tset $4015 0 \/\/turn off all channels\n\tset $4015 %00011111 \/\/turn them back on\n\/\/\tset $4001 0\n\treturn\n\nmusicsetup:\n\tset musicframe 0\n\tset notelength 0\n\tset whichnote 0\n\treturn\n\nmusicloop:\n\tif notelength &lt;> 0 then\n\t\tdec notelength\n\t\treturn\n\t\tendif\n\tif whichnote >= 91 set whichnote 0\n\tset notelength &#91; musicdata whichnote ]\n\tif notelength = 0 then\n\t\t\/\/rest handler\n\t\tinc whichnote\n\t\tset notelength &#91; musicdata whichnote ]\n\t\tinc whichnote\n\/\/\t\tasm\n\/\/\t\t\tlda $4015\n\/\/\t\t\tand %11111101\n\/\/\t\t\tsta $4015 ;\/\/turn off square 2\n\/\/\t\tendasm\n\t\tasm\n\t\t\tlda #0\n\t\t\tsta $4004\n\t\t\tsta $4005\n\t\t\tsta $4006\n\t\t\tsta $4007\n\t\tendasm\n\/\/\t\tset $4004 0\n\t\treturn\n\t\tendif\n\tinc whichnote\n\tasm\n\t\tldx whichnote\n\t\tlda musicdata, x\n\t\tsta $4004\n\t\tinx\n\t\tlda musicdata, x\n\t\tsta $4005\n\t\tinx\n\t\tlda musicdata, x\n\t\tsta $4006\n\t\tinx\n\t\tlda musicdata, x\n\t\tsta $4007\n\t\tinx\n\tendasm\n\/\/\tset $4015 %00011111\n\tset whichnote + whichnote 4\n\treturn\n\nmusicdata:\n\tasm\n  .db 23,145,0,253,48\n  .db 22,145,0,239,48\n  .db 23,145,0,201,48\n  .db 22,145,0,190,48\n  .db 23,145,0,201,48\n  .db 22,145,0,239,48\n  .db 23,145,0,253,48\n  .db 22,145,0,239,48\n  .db 23,145,0,201,48\n  .db 22,145,0,190,48\n  .db 23,145,0,201,48\n  .db 22,145,0,239,48\n  .db 23,145,0,253,48\n  .db 23,145,0,239,48\n  .db 0,22\n  .db 22,145,0,253,48\n  .db 23,145,0,239,48\n  .db 0,22\n  .db 23,145,0,239,48\n  .db 0,22\n\tendasm\n\narray enemy_x\t\t2\narray enemy_y\t\t2\narray enemy_xoff\t2\narray enemy_yoff\t2\narray enemy_type\t2\narray enemy_status 2\n\nenemysetup:\n\tset enemy_type  1\n\tset enemy_xoff  8\n\tset enemy_yoff  0\n\tset enemy_x  3\n\tset enemy_y  3\n\tset enemy_dir 0\n\tset enemy_frame 0\n\tset which_enemy 0\n\tset maxenemies 0 \/\/number of enemies -1\n\tset goomba_feet 0\n\tset deadsecs 6\n\tset deadframes 120\n\treturn\n\nenemyhandler:\n\tset enemy_typevar enemy_type\n\tgosub goomba_move\n\/\/\tfor which_enemy = 0 to maxenemies\n\/\/\t\tset enemy_typevar &#91; enemy_type which_enemy ]\n\/\/\t\tif enemy_typevar = 1 gosub goomba_move\n\/\/\tnext which_enemy\n\treturn\n\n\/\/requires which_enemy\ngoomba_move:\n\tif enemy_frame &lt;> 0 goto goomba_move_2\n\tif enemy_dir = 255 goto goomba_dead\n\tif enemy_dir = 0 then\n\t\tgosub goomba_request_right\n\t\tgoto goomba_move_2\n\t\tendif\n\tif enemy_dir = 1\n\t\tgosub goomba_request_left\ngoomba_move_2:\n\tgosub goomba_request_fall\n\tinc enemy_frame\n\tif enemy_frame = 4 set enemy_frame 0\n\tset enemy_sprite 20\n\tif + screen_x 1 > enemy_x then\n\t\tset enemy_yloc 241\n\t\tgoto goomba_move_3\n\t\tendif\n\tif + screen_x 14 &lt;= enemy_x then\n\t\tset enemy_yloc 241\n\t\tgoto goomba_move_3\n\t\tendif\n\tset enemy_tile 12\n\tset enemy_yloc + &lt;&lt; enemy_y 4 enemy_yoff\n\tset enemy_xloc + &lt;&lt; - enemy_x screen_x 4 - enemy_xoff screen_xoff\ngoomba_move_3:\n\tif goomba_feet &lt; 12 then\n\t\tset enemy_colorbit 2\n\t\tgosub draw_enemy\n\t\tendif\n\tif goomba_feet >= 12 then\n\t\tset enemy_colorbit 66\n\t\tgosub draw_enemy_reverse\n\t\tendif\n\tinc goomba_feet\n\tif goomba_feet = 24 set goomba_feet 0\n\treturn\n\ngoomba_dead:\n\tgosub goomba_request_fall\n\tset enemy_colorbit %10000010\n\tset enemy_yloc + &lt;&lt; enemy_y 4 enemy_yoff\n\tif + screen_x 14 &lt;= enemy_x set enemy_yloc 245 \/\/hide off-screen\n\tif + screen_x 1 > enemy_x set enemy_yloc 245 \/\/hide off-screen\n\tset enemy_xloc + &lt;&lt; - enemy_x screen_x 4 - enemy_xoff screen_xoff\n\tgosub draw_enemy\n\tdec deadframes\n\tif deadframes = 0 then\n\t\tset deadframes 120\n\t\tdec deadsecs\n\t\tif deadsecs = 0 then\n\t\t\tset deadsecs 6\n\t\t\tset enemy_dir 1\n\t\t\tendif\n\t\tendif\n\treturn\n\ngoomba_request_right:\n\tset idx + + &lt;&lt; enemy_y 4 enemy_x 1\n\tset collide_right &#91; leveldata idx ]\n\tif enemy_x >= 16 set collide_right &#91; leveldata2 idx ]\ngoomba_request_right_2:\n\tif collide_right = 0 then\n\t\tinc enemy_xoff\n\t\tif enemy_xoff = 16 then\n\t\t\tset enemy_xoff 0\n\t\t\tinc enemy_x\n\t\t\tendif\n\t\treturn\n\t\tendif\n\tset enemy_dir 1 \/\/go left now\n\treturn\n\ngoomba_request_left:\n\tset idx + &lt;&lt; enemy_y 4 enemy_x\n\tset collide_left &#91; leveldata idx ]\n\tif enemy_x >= 16 set collide_left &#91; leveldata2 idx ]\n\tif collide_left = 0 then\n\t\tdec enemy_xoff\n\t\tif enemy_xoff = 255 then\n\t\t\tset enemy_xoff 15\n\t\t\tdec enemy_x\n\t\t\tendif\n\t\treturn\n\t\tendif\n\tset enemy_dir 0 \/\/go right now\n\treturn\n\ngoomba_request_fall:\n\tset idx + + &lt;&lt; enemy_y 4 enemy_x 16\n\tset collide_down &#91; leveldata idx ]\n\tif enemy_x >= 16 then\n\t\tset idx - idx 16\n\t\tset collide_down &#91; leveldata2 idx ]\n\t\tendif\n\tif collide_down = 0 then\n\t\tinc enemy_yoff\n\t\tif enemy_yoff = 16 then\n\t\t\tset enemy_yoff 0\n\t\t\tinc enemy_y\n\t\t\tendif\n\t\treturn\n\t\tendif\n\treturn\n\ndraw_enemies:\n\tfor which_enemy = 0 to maxenemies\n\t\tset enemy_typevar &#91; enemy_type which_enemy ]\n\t\tif enemy_typevar = 1 gosub draw_enemy\n\tnext which_enemy\n\treturn\n\n\/\/requires enemy_sprite, enemy_tile, enemy_xloc, enemy_yloc, enemy_colorbit\ndraw_enemy:\n\tset &#91; spritemem 16 ] enemy_yloc\n\tset &#91; spritemem 17 ] enemy_tile\n\tset &#91; spritemem 18 ] enemy_colorbit\n\tset &#91; spritemem 19 ] enemy_xloc\n\n\tset &#91; spritemem 20 ] enemy_yloc\n\tset &#91; spritemem 21 ] + enemy_tile 2\n\tset &#91; spritemem 22 ] enemy_colorbit\n\tset &#91; spritemem 23 ] + enemy_xloc 8\n\treturn\n\ndraw_enemy_reverse:\n\tset &#91; spritemem 16 ] enemy_yloc\n\tset &#91; spritemem 17 ] + enemy_tile 2\n\tset &#91; spritemem 18 ] enemy_colorbit\n\tset &#91; spritemem 19 ] enemy_xloc\n\n\tset &#91; spritemem 20 ] enemy_yloc\n\tset &#91; spritemem 21 ] enemy_tile\n\tset &#91; spritemem 22 ] enemy_colorbit\n\tset &#91; spritemem 23 ] + enemy_xloc 8\n\treturn\n\/\/act on joystick buttons\njoyhandler:\n\tif sack_dead_secs &lt;> 0 then\n\t\tset sack_sprite 32\n\t\tgosub jumphandler\n\t\tdec sack_dead_frames\n\t\tif sack_dead_frames = 0 then\n\t\t\tset sack_dead_frames 60\n\t\t\tdec sack_dead_secs\n\t\t\tendif\n\t\treturn\n\t\tendif\n\t\/\/set left and right facing\n\tset direction 0\n\tset is_crouching 0\n\tif joyright = 1 then\n\t\tset direction 1\n\t\tset facing 1\n\t\tgoto joyhandler2\n\t\tendif\n\tif joyleft = 1 then\n\t\tset direction 255\n\t\tset facing 0\n\t\tgoto joyhandler2\n\t\tendif\n\tset sack_sprite 32 \/\/no movement, use still sprite\n\t\/\/handle jump and gravity\n\tjoyhandler2:\n\t\tif joydown = 1 then\n\t\t\tset sack_sprite 56\n\t\t\tset is_crouching 1\n\t\t\tendif\n\t\tgosub sack_collide_enemy\n\t\tif direction &lt;> 0 gosub request_move\n\t\tif joya = 1 if okjump = 1 gosub jumpstart\n\tif joyselect = 1 set reset_game 1\n\treturn\n\n\/\/collision detection left and right\nrequest_move:\n\tinc sack_moveframe\n\tif sack_moveframe = 12 then \/\/number of frames before sack changes moving sprite\n\t\tset sack_moveframe 0\n\t\tif sack_sprite = 32 then\n\t\t\tset sack_sprite 40 \/\/set to the other sprite\n\t\t\tgoto request_move_2\n\t\t\tendif\n\t\tset sack_sprite 32\n\t\tendif\n\trequest_move_2:\n\tif direction = 255 goto request_left\n\t\t\/\/else fall to request_right\n\trequest_right:\n\t\tset idx >> + sack_x2 8 4\n\t\tset idx + &amp; spritey %11110000 idx\n\t\tset collide_low &#91; leveldata idx ]\n\t\tset collide_top &#91; leveldata - idx 16 ]\n\t\tif sack_x >= 16 then\n\t\t\tset collide_low &#91; leveldata2 idx ]\n\t\t\tset collide_top &#91; leveldata2 - idx 16 ]\n\t\tendif\n\t\tif collide_low &lt;> 0 goto collision\n\t\tif is_crouching = 1 set collide_top 0\n\t\tif collide_top &lt;> 0 goto collision\n\t\tgosub move_right \/\/no collision, move right\n\t\tif inflight = 0 set inflight 2\n\t\treturn\n\trequest_left:\n\t\tset idx >> - sack_x2 8 4\n\t\tset idx + &amp; spritey %11110000 idx\n\t\tset collide_low &#91; leveldata idx ]\n\t\tset collide_top &#91; leveldata - idx 16 ]\n\t\tif sack_x >= 17 then\n\t\t\tset collide_low &#91; leveldata2 idx ]\n\t\t\tset collide_top &#91; leveldata2 - idx 16 ]\n\t\tendif\n\t\tif collide_low &lt;> 0 goto collision\n\t\tif is_crouching = 1 set collide_top 0\n\t\tif collide_top &lt;> 0 goto collision\n\t\tgosub move_left \/\/no collision, move left\n\t\tif inflight = 0 set inflight 2\n\t\treturn\n\tcollision:\n\t\tset direction 0\n\t\treturn\n\nmove_right:\n\tif sack_x = 31 return\n\tinc sack_xoff\n\tif sack_xoff = 16 then\n\t\tset sack_xoff 0\n\t\tinc sack_x\n\t\tendif\n\tif - sack_x screen_x > 10 gosub scroll_right\n\tgosub set_x_coords\n\treturn\n\t\t\nmove_left:\n\tif sack_x = 0 return\n\tdec sack_xoff\n\tif sack_xoff = 255 then\n\t\tset sack_xoff 15\n\t\tdec sack_x\n\t\tendif\n\tif - sack_x screen_x &lt; 6 gosub scroll_left\n\tgosub set_x_coords\n\treturn\n\nset_x_coords:\n\tset spritex + &lt;&lt; - sack_x screen_x 4 - sack_xoff screen_xoff\n\tif sack_x >= 16 then\n\t\tset sack_x2 + &lt;&lt; - sack_x 16 4 sack_xoff\n\t\treturn\n\t\tendif\n\tset sack_x2 + &lt;&lt; sack_x 4 sack_xoff\n\treturn\n\n\/\/start a jump action\njumpstart:\n\tif okjump &lt;> 1 return\n\/\/\tif inflight &lt;> 0 return\n\tgosub playsound_jump\n\tset inflight 1 \/\/1=up, 2=down\n\tset gravindex 50\n\tset gravity_delta 0\n\tset okjump 0\n\treturn\n\nhighjump:\n\tset inflight 1\n\tset gravindex 64\n\tset gravity_delta 0\n\tset okjump 0\n\treturn\n\n\/\/max height=48\n\/\/max gravity index=50\ngravity:\n\t\/\/old gravity array\n\tasm\n\t.db 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1\n\t.db 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1\n\t.db 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2\n\t.db 3, 3, 3, 3, 3, 3\n\tendasm\n\t\/\/new gravity array\n\tasm\n\t.db 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1\n\t.db 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 3, 3, 3, 2\n\t.db\t3, 3, 3, 3, 3, 3, 4, 3, 3, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4\n\t.db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4\n\tendasm\n\n\/\/called each frame. advances gravity\t\njumphandler:\n\tif inflight = 0 then\n\t\tif joya = 0 set okjump 1\n\t\treturn\n\t\tendif\n\tset gravity_delta &#91; gravity gravindex ]\n\tif inflight = 1 then \/\/jump up\n\t\tset sack_sprite 48\n\t\tset idx >> sack_x2 4\n\t\tset idx + &amp; - - spritey 16 gravity_delta %11110000 idx\n\t\tset collide_top &#91; leveldata idx ]\n\t\tif sack_x >= 16 set collide_top &#91; leveldata2 idx ]\n\t\tif collide_top &lt;> 0 then\n\t\t\tset inflight 2\n\t\t\tdec gravindex\n\/\/\t\t\tif joya = 0 set okjump 1\n\t\t\treturn\n\t\t\tendif\n\t\tset spritey - spritey gravity_delta\n\t\tif gravindex > 0 then\n\t\t\tdec gravindex\n\t\t\treturn\n\t\t\tendif\n\t\tset inflight 2\n\t\treturn\n\t\tendif\n\t\/\/else jump down\n\t\tset idx >> sack_x2 4\n\t\tset idx + &amp; + spritey gravity_delta %11110000 idx\n\t\tset collide_low &#91; leveldata idx ]\n\t\tif sack_x >= 16 set collide_low &#91; leveldata2 idx ]\n\t\tif collide_low &lt;> 0 then\n\t\t\tif gravindex >= 54 gosub playsound_thump \/\/hard landing\n\t\t\tset inflight 0\n\t\t\tif joya = 0 set okjump 1\n\t\t\tset gravindex 6 \/\/the first \"1\" in gravity array\n\t\t\treturn\n\t\t\tendif\n\t\tset spritey + spritey gravity_delta\n\t\tif gravindex &lt;= 55 then\n\t\t\tset okjump 0\n\t\t\tinc gravindex\n\t\t\tset sack_sprite 48\n\t\t\treturn\n\t\t\tendif\n\t\tset inflight 2\n\t\tset sack_sprite 48\n\t\treturn\n\nsack_collide_enemy:\n\tif enemy_dir = 255 return \/\/he's dead\n\tif sack_dead_secs &lt;> 0 return \/\/sack is dead\n\tset collide_y1 + &lt;&lt; enemy_y 4 enemy_yoff\n\tset collide_y2 - spritey collide_y1\n\/\/\tset collide_y1 - spritey + &lt;&lt; enemy_y 4 enemy_yoff\n\tif spritey &lt; collide_y1 return\n\t\/\/if spritey > collide_y1 \n\tif collide_y2 > 24 return\n\/\/\tif >> spritey 4 &lt;> enemy_y return\n\tset collide_x1 + &lt;&lt; enemy_x 3 >> enemy_xoff 1\n\tset collide_x2 + &lt;&lt; sack_x 3 >> sack_xoff 1\n\tset collide_result - collide_x2 collide_x1\n\tif collide_x1 > collide_x2 if collide_result >= 254 goto sack_collide_enemy_right\n\tif collide_x1 &lt; collide_x2 if collide_result &lt;= 12 goto sack_collide_enemy_left\n\treturn \/\/no collision\n\tsack_collide_enemy_right:\n\t\tif inflight = 2 if collide_y2 &lt;= 1 goto sack_collide_enemy_bottom\n\t\tset enemy_dir 0\n\t\tif direction = 1 set direction 0\n\t\tset sack_dead_secs 6\n\t\tset sack_dead_frames 60\n\t\treturn\n\tsack_collide_enemy_left:\n\t\tif inflight = 2 if collide_y2 &lt; 4 goto sack_collide_enemy_bottom\n\t\tset enemy_dir 1\n\t\tif direction = 255 set direction 0\n\t\tset sack_dead_secs 6\n\t\tset sack_dead_frames 60\n\t\treturn\n\tsack_collide_enemy_bottom: \/\/sack on top of enemy\n\t\tgosub playsound_squish\n\t\tset enemy_dir 255\n\t\tset inflight 1\n\t\tset gravindex 25\n\t\tif joya = 1 gosub highjump\n\t\treturn\n\njoystick:\n\tasm\n\tlda #$01\t;\/\/strobe the joystick\n\tsta $4016\n\tlda #$00\n\tsta $4016\n\tlda $4016\t\t;\/\/now read values\n\tand #$01\n\tsta joya\n\tlda $4016\n\tand #$01\n\tsta joyb\n\tlda $4016\n\tand #$01\n\tsta joyselect\n\tlda $4016\n\tand #$01\n\tsta joystart\n\tlda $4016\n\tand #$01\n\tsta joyup\n\tlda $4016\n\tand #$01\n\tsta joydown\n\tlda $4016\n\tand #$01\n\tsta joyleft\n\tlda $4016\n\tand #$01\n\tsta joyright\n\tendasm\n\treturn\n\nplaysound_jump:\n\tset $4000 %10011000\n\tset $4001 %10001100\n\tset $4002 %01001101\n\tset $4003 %10010101\n\treturn\n\nplaysound_thump:\n\tset $4000 %10011111\n\tset $4001 %10000100\n\tset $4002 %11010011\n\tset $4003 %11111100\n\treturn\n\nplaysound_squish:\n\tset $4000 %10001000\n\tset $4001 %01001000\n\tset $4002 %00100101\n\tset $4003 %01001011\n\treturn\n\narray column_read 2\n\nscrollhandler:\n\tset $2005 + &lt;&lt; screen_x 4 screen_xoff\n\tset $2005 0\n\treturn\n\nscroll_right:\n\tif screen_x &lt;> 15 then\n\t\tinc screen_xoff\n\t\tif screen_xoff = 16 then\n\t\t\tset screen_xoff 0\n\t\t\tinc screen_x\n\t\t\tendif\n\t\treturn\n\t\tendif\n\tif screen_xoff = 15 return\n\tinc screen_xoff\n\treturn\n\nscroll_left:\n\tif screen_x &lt;> 0 then\n\t\tdec screen_xoff\n\t\tif screen_xoff = 255 then\n\t\t\tset screen_xoff 15\n\t\t\tdec screen_x\n\t\t\tendif\n\t\treturn\n\t\tendif\n\tif screen_xoff = 0 return\n\tdec screen_xoff\n\treturn\n\n\nmarker:\n\tset $2003 20\n\tasm\n\tpla ;\/\/y val\n\tsta $2004\n\tlda #1\n\tsta $2004 ;\/\/sprite index\n\tsta $2004 ;\/\/color bit\n\tpla ;\/\/x val\n\tsta $2004\n\tendasm\n\treturn\n\n\ndrawsack:\n\tif sack_dead_secs &lt;> 0 then\n\t\tgosub drawdead\n\t\treturn\n\t\tendif\n\tif facing = 1 then\n\t\tgosub drawright\n\t\treturn\n\t\tendif\n\t\/\/else if facing &lt;> 1\n\t\tgosub drawleft\n\treturn\n\nclearattrib:\n\tset $2006 $23\n\tset $2006 $c0\n\tasm\n\tldy #63\nclearlabel0:\n\tlda #0\n\tsta $2007\n\tdey\n\tcpy #0\n\tbne clearlabel0\n\tendasm\n\treturn\n\t\nclearsprites:\n\tset $2003 0\n\tfor i = 0 to 63\n\t\tset $2004 245\n\t\tset $2004 0\n\t\tset $2004 0\n\t\tset $2004 0\n\tnext i\n\treturn\n\n\/\/*******************************************************************\n\/\/*******************************************************************\n\t\n\/\/drawsprite:\n\/\/\tset $2004 sprite_yloc\n\/\/\tset $2004 sprite_indx\n\/\/\tset $2004 sprite_cbit\n\/\/\tset $2004 sprite_xloc\n\/\/\treturn\n\n\/\/spritex, spritey is bottom middle of sack\ndrawleft:\n\tset &#91; spritemem 0 ] - spritey 32\n\tset &#91; spritemem 1 ] sack_sprite\n\tset &#91; spritemem 2 ] 65\n\tset &#91; spritemem 3 ] spritex\n\n\tset &#91; spritemem 4 ] - spritey 16\n\tset &#91; spritemem 5 ] + sack_sprite 2\n\tset &#91; spritemem 6 ] 65\n\tset &#91; spritemem 7 ] spritex\n\n\tset &#91; spritemem 8 ] - spritey 32\n\tset &#91; spritemem 9 ] + sack_sprite 4\n\tset &#91; spritemem 10 ] 65\n\tset &#91; spritemem 11 ] - spritex 8\n\n\tset &#91; spritemem 12 ] - spritey 16\n\tset &#91; spritemem 13 ] + sack_sprite 6\n\tset &#91; spritemem 14 ] 65\n\tset &#91; spritemem 15 ] - spritex 8\n\treturn\t\n\n\/\/spritex, spritey is middle of sack\ndrawright:\n\tset &#91; spritemem 0 ] - spritey 32\n\tset &#91; spritemem 1 ] sack_sprite\n\tset &#91; spritemem 2 ] 1\n\tset &#91; spritemem 3 ] - spritex 8\n\n\tset &#91; spritemem 4 ] - spritey 16\n\tset &#91; spritemem 5 ] + sack_sprite 2\n\tset &#91; spritemem 6 ] 1\n\tset &#91; spritemem 7 ] - spritex 8\n\n\tset &#91; spritemem 8 ] - spritey 32\n\tset &#91; spritemem 9 ] + sack_sprite 4\n\tset &#91; spritemem 10 ] 1\n\tset &#91; spritemem 11 ] spritex\n\n\tset &#91; spritemem 12 ] - spritey 16\n\tset &#91; spritemem 13 ] + sack_sprite 6\n\tset &#91; spritemem 14 ] 1\n\tset &#91; spritemem 15 ] spritex\n\treturn\n\ndrawdead:\n\tset &#91; spritemem 0 ] - spritey 22\n\tset &#91; spritemem 1 ] + sack_sprite 6\n\tset &#91; spritemem 2 ] %11000001\n\tset &#91; spritemem 3 ] - spritex 8\n\n\tset &#91; spritemem 4 ] - spritey 6\n\tset &#91; spritemem 5 ] + sack_sprite 4\n\tset &#91; spritemem 6 ] %11000001\n\tset &#91; spritemem 7 ] - spritex 8\n\n\tset &#91; spritemem 8 ] - spritey 22\n\tset &#91; spritemem 9 ] + sack_sprite 2\n\tset &#91; spritemem 10 ] %11000001\n\tset &#91; spritemem 11 ] spritex\n\n\tset &#91; spritemem 12 ] - spritey 6\n\tset &#91; spritemem 13 ] sack_sprite\n\tset &#91; spritemem 14 ] %11000001\n\tset &#91; spritemem 15 ] spritex\n\treturn\n\n\/\/*******************************************************************\n\/\/*******************************************************************\n\nvwait:\n\tasm\n\tlda $2002\n\tbpl vwait ;\/\/wait for start of retrace\n\trts ;\/\/RETURN FOR NOW. THIS IS INCOMPATIBLE WITH OTHER EMULATORS\nvwait2:\n\tlda $2002\n\tbmi vwait2 ;\/\/wait for end of retrace\n\tendasm\n\tinc frame\n\treturn\n\nppuinit:\n\tgosub vwait\n\tset $2000 %00110000\n\tset $2001 %00011100\n\treturn\n\ntitlepal:\n\tasm\n;\/\/\t.db $00,$05,$09,$28,$00,$18,$09,$28,$00,$19,$18,$0c,$00,$03,$07,$00\n\n\t.db $28,$38,$37,$08, $28,$21,$37,$38, $28,$38,$01,$08, $28,$21,$37,$01\n\t.db $27,13,32,3,0,13,32,$10,0,13,57,24,0,10,11,12 ;\/\/foreground palette\n\tendasm\n\npalette:\n\tset $2006 $3f\n\tset $2006 0\n\tset i 0\n\tpalette_2:\n\tset $2007 &#91; titlepal i ]\n\tinc i\n\tif i = 32 return\n\tgoto palette_2\n\ndrawstuff:\n\tgosub scrollhandler\n\tset $4014 0 \/\/sprite DMA\n\treturn\n\t\t\nnmi:\n\tresume\n\n\/\/***************************************************************\nhigh_bytes:\n\tasm\n\t;\/\/name table 0\n\t.db $20,$20,$20,$20,$20,$20,$20,$20\n\t.db $21,$21,$21,$21,$21,$21,$21,$21\n\t.db $22,$22,$22,$22,$22,$22,$22,$22\n\t.db $23,$23,$23,$23,$23,$23,$23,$23\nhigh_bytes2:\n\t;\/\/name table 1\n\t.db $24,$24,$24,$24,$24,$24,$24,$24\n\t.db $25,$25,$25,$25,$25,$25,$25,$25\n\t.db $26,$26,$26,$26,$26,$26,$26,$26\n\t.db $27,$27,$27,$27,$27,$27,$27,$27\n\tendasm\n\nlow_bytes:\n\tasm\n\t;\/\/name table 0\n\t.db 0,32,64,96,128,160,192,224\n\t.db 0,32,64,96,128,160,192,224\n\t.db 0,32,64,96,128,160,192,224\n\t.db 0,32,64,96,128,160,192,224\nlow_bytes2:\n\t;\/\/name table 1\n\t.db 0,32,64,96,128,160,192,224\n\t.db 0,32,64,96,128,160,192,224\n\t.db 0,32,64,96,128,160,192,224\n\t.db 0,32,64,96,128,160,192,224\n\tendasm\n\nloadbackground:\n\tset which_column 0\nloadbackground_2:\n\tgosub loadcolumn\n\tgosub load_attrib_column\n\tgosub vwait\n\tinc which_column\n\tif which_column &lt;= 16 goto loadbackground_2\n\treturn\n\nloadcolumn:\n\tif which_column >= 8 goto loadhighcolumn\n\tset my_x - - &lt;&lt; which_column 5 which_column which_column \/\/30*column\n\t\/\/setup index regs\n\twrite_column_work_0:\n\t\tasm\n\t\tldy #0\n\t\tldx my_x\n\twrite_column_work_1:\n\t;\/\/set ppu memory address\n\t\tlda high_bytes,y\n\t\tsta $2006\n\t\tlda which_column\n\t\tasl a\n\t\tasl a\n\t\tclc\n\t\tadc low_bytes,y\n\t\tsta $2006\n\t;\/\/write top blocks\n\t\tclc\n\t\tlda the_level, x\n\t\tsta $2007\n\t\tadc #1\n\t\tsta $2007\n\t\tinx\n\t\tlda the_level,x\n\t\tsta $2007\n\t\tadc #1\n\t\tsta $2007\n\t\tdex\n\t;\/\/now write the blocks under\n\t\tiny\n\t\tlda high_bytes,y\n\t\tsta $2006\n\t\tlda which_column\n\t\tasl a\n\t\tasl a\n\t\tclc\n\t\tadc low_bytes,y\n\t\tsta $2006\n\t\tclc\n\t\tlda the_level, x\n\t\tadc #16\n\t\tsta $2007\n\t\tadc #1\n\t\tsta $2007\n\t\tinx\n\t\tlda the_level,x\n\t\tadc #16\n\t\tsta $2007\n\t\tadc #1\n\t\tsta $2007\n\t\tinx\n\t;\/\/now check if we're done with the column\n\t\tiny\n\t\tcpy #30\n\t\tbne write_column_work_1\n\tendasm\n\treturn\n\nloadhighcolumn:\n\tset temp_column - which_column 8\n\tset my_x - - &lt;&lt; temp_column 5 temp_column temp_column \/\/30*column\n\t\/\/setup index regs\n\t\tasm\n\t\tldy #0\n\t\tldx my_x\n\twrite_column_work_2:\n\t;\/\/set ppu memory address\n\t\tlda high_bytes2,y\n\t\tsta $2006\n\t\tlda temp_column\n\t\tasl a\n\t\tasl a\n\t\tclc\n\t\tadc low_bytes2,y\n\t\tsta $2006\n\t;\/\/write top blocks\n\t\tclc\n\t\tlda the_level2, x\n\t\tsta $2007\n\t\tadc #1\n\t\tsta $2007\n\t\tinx\n\t\tlda the_level2,x\n\t\tsta $2007\n\t\tadc #1\n\t\tsta $2007\n\t\tdex\n\t;\/\/now write the blocks under\n\t\tiny\n\t\tlda high_bytes2,y\n\t\tsta $2006\n\t\tlda temp_column\n\t\tasl a\n\t\tasl a\n\t\tclc\n\t\tadc low_bytes2,y\n\t\tsta $2006\n\t\tclc\n\t\tlda the_level2, x\n\t\tadc #16\n\t\tsta $2007\n\t\tadc #1\n\t\tsta $2007\n\t\tinx\n\t\tlda the_level2,x\n\t\tadc #16\n\t\tsta $2007\n\t\tadc #1\n\t\tsta $2007\n\t\tinx\n\t;\/\/now check if we're done with the column\n\t\tiny\n\t\tcpy #30\n\t\tbne write_column_work_2\n\tendasm\n\treturn\n\t\nload_attrib_column:\n\tif which_column &lt; 8 then\n\t\tset highbyte $23\n\t\tset lowbyte + $c0 which_column\n\t\tgoto load_attrib_column_1\n\t\tendif\n\t\/\/else name table 2\n\t\tset highbyte $27\n\t\tset lowbyte + $b8 which_column\n\tload_attrib_column_1:\n\tset idx &lt;&lt; which_column 3\n\tset numcolumns 0\n\tload_attrib_column_2:\n\t\tset $2006 highbyte\n\t\tset $2006 lowbyte\n\t\tset $2007 &#91; attrib_table idx ]\n\t\tset lowbyte + lowbyte 8\n\t\tinc idx\n\t\tinc numcolumns\n\t\tif numcolumns = 8 return\n\/\/\t\tif &amp; idx %00000111 = 0 return\n\tgoto load_attrib_column_2\n\/\/the level data, vertical RLE\n\/\/byte, repeat. set upper left block of 4-block area\n\/\/  tilenum:  n    n+2\n\/\/            n+1  n+3\nthe_level:\n\tasm\n\t.incbin \"level\/name1.tbl\"\nthe_level2:\n\t.incbin \"level\/name2.tbl\"\n\tendasm\nattrib_table:\n\tasm\n\t.incbin \"level\/attrib.tbl\"\n\tendasm\n\n\/\/the level, RLE for display, uncompressed for collision detection\nasm\nleveldata:\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0\n\t.db 0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1\n\t.db 0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0\n\t.db 0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1\nleveldata2:\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0\n\t.db 0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1\n\t.db 0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0\n\t.db 0,0,1,1,1,1,1,0,0,0,1,1,1,1,0,0\n\t.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\t.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\nendasm\nasm\n\t.bank 3\n\t.org $fffa\n\t.dw nmi\t\t;\/\/NMI\n\t.dw start\t;\/\/Reset\n\t.dw start\t;\/\/BRK\n\t.bank 4\n\t.org $0000\n\t.incbin \"foreground.chr\"\n\t.incbin \"background.chr\"\nendasm\nasm\n\t;\/\/end of file\nendasm\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>VC 2022\u662fc\u8bed\u8a00\u7f16\u8bd1\u5668\u3002 NESASM\u662f\u4efb\u5929\u5802\u7ea2\u767d\u673a\u7a0b\u5e8f\u7684\u6c47\u7f16\u7a0b\u5e8f\u3002\u5b66\u4e60\u7248\u7684VC\u7f16\u8bd1 nesasm.\u901a\u4e0d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-166","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/www.nantz.top\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.nantz.top\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.nantz.top\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.nantz.top\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.nantz.top\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=166"}],"version-history":[{"count":5,"href":"http:\/\/www.nantz.top\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/166\/revisions"}],"predecessor-version":[{"id":176,"href":"http:\/\/www.nantz.top\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/166\/revisions\/176"}],"wp:attachment":[{"href":"http:\/\/www.nantz.top\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.nantz.top\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=166"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.nantz.top\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}